Handmade Hero»Episode Guide
Supporting All Room Connection Directions
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:38Demo the limitations of a) the current simulation code affecting the lighting, and b) the camera code
🏃
0:38Demo the limitations of a) the current simulation code affecting the lighting, and b) the camera code
🏃
0:38Demo the limitations of a) the current simulation code affecting the lighting, and b) the camera code
🏃
2:36Determine to exercise the world generation code and add a more manoeuvrable debug camera
🏃
2:36Determine to exercise the world generation code and add a more manoeuvrable debug camera
🏃
2:36Determine to exercise the world generation code and add a more manoeuvrable debug camera
🏃
5:32Consider the functional nature of our code, and thoughtful randomisation
🗩
5:32Consider the functional nature of our code, and thoughtful randomisation
🗩
5:32Consider the functional nature of our code, and thoughtful randomisation
🗩
10:43Introduce CreateDungeon() and CreateForest()
10:43Introduce CreateDungeon() and CreateForest()
10:43Introduce CreateDungeon() and CreateForest()
21:44Enable CreateDungeon() to create each floor's random batch of rooms
21:44Enable CreateDungeon() to create each floor's random batch of rooms
21:44Enable CreateDungeon() to create each floor's random batch of rooms
31:06Consider encoding connections between families of rooms for the layout code to deal with
🗩
31:06Consider encoding connections between families of rooms for the layout code to deal with
🗩
31:06Consider encoding connections between families of rooms for the layout code to deal with
🗩
35:31Enable CreateDungeon() to create all the paths between rooms and special Shop and Item rooms
35:31Enable CreateDungeon() to create all the paths between rooms and special Shop and Item rooms
35:31Enable CreateDungeon() to create all the paths between rooms and special Shop and Item rooms
45:00Stub out CreateForest(), move RequiredDim from gen_room to gen_room_spec, and propagate this change
45:00Stub out CreateForest(), move RequiredDim from gen_room to gen_room_spec, and propagate this change
45:00Stub out CreateForest(), move RequiredDim from gen_room to gen_room_spec, and propagate this change
50:28Run the game to see our orphanage
🏃
50:28Run the game to see our orphanage
🏃
50:28Run the game to see our orphanage
🏃
50:34Make CreateDungeon() set the dungeon size, and CreateWorld() to call it
50:34Make CreateDungeon() set the dungeon size, and CreateWorld() to call it
50:34Make CreateDungeon() set the dungeon size, and CreateWorld() to call it
53:38Run the game and hit our assertion in GetBoxIndexFromDirMask()
🏃
53:38Run the game and hit our assertion in GetBoxIndexFromDirMask()
🏃
53:38Run the game and hit our assertion in GetBoxIndexFromDirMask()
🏃
54:11Rename PlaceRoomsAlongEdge() to PlaceRoomAlongEdge() and make it explicitly take a Connection and SurfaceIndex
54:11Rename PlaceRoomsAlongEdge() to PlaceRoomAlongEdge() and make it explicitly take a Connection and SurfaceIndex
54:11Rename PlaceRoomsAlongEdge() to PlaceRoomAlongEdge() and make it explicitly take a Connection and SurfaceIndex
58:08Run the game to see our same orphanage
🏃
58:08Run the game to see our same orphanage
🏃
58:08Run the game to see our same orphanage
🏃
58:17Make PlaceRoomAlongEdge() return whether or not it placed a room, for Layout() to call it multiple times on different surface indices
58:17Make PlaceRoomAlongEdge() return whether or not it placed a room, for Layout() to call it multiple times on different surface indices
58:17Make PlaceRoomAlongEdge() return whether or not it placed a room, for Layout() to call it multiple times on different surface indices
1:02:34Rip up and replace, having backed ourselves into a corner while picking rooms
🖌
1:02:34Rip up and replace, having backed ourselves into a corner while picking rooms
🖌
1:02:34Rip up and replace, having backed ourselves into a corner while picking rooms
🖌
1:04:26Enable Layout() to call PlaceRoomAlongEdge() multiple times on all directions, introducing GetRandomDirectionFromMask()
1:04:26Enable Layout() to call PlaceRoomAlongEdge() multiple times on all directions, introducing GetRandomDirectionFromMask()
1:04:26Enable Layout() to call PlaceRoomAlongEdge() multiple times on all directions, introducing GetRandomDirectionFromMask()
1:10:29Run the game to see that our existing orphanage gets generated
🏃
1:10:29Run the game to see that our existing orphanage gets generated
🏃
1:10:29Run the game to see that our existing orphanage gets generated
🏃
1:11:06Make CreateWorld() call CreateDungeon()
1:11:06Make CreateWorld() call CreateDungeon()
1:11:06Make CreateWorld() call CreateDungeon()
1:11:18Run the game and hit the assertion in PlaceRoomAlongEdge() because the GenerationIndex was erroneously set
🏃
1:11:18Run the game and hit the assertion in PlaceRoomAlongEdge() because the GenerationIndex was erroneously set
🏃
1:11:18Run the game and hit the assertion in PlaceRoomAlongEdge() because the GenerationIndex was erroneously set
🏃
1:11:43Fix Layout() to only set the GenerationIndex if the room was indeed placed
1:11:43Fix Layout() to only set the GenerationIndex if the room was indeed placed
1:11:43Fix Layout() to only set the GenerationIndex if the room was indeed placed
1:12:41Run the game and hit the assertion in PlaceRoomAlongEdge() because we don't support up / down connections
🏃
1:12:41Run the game and hit the assertion in PlaceRoomAlongEdge() because we don't support up / down connections
🏃
1:12:41Run the game and hit the assertion in PlaceRoomAlongEdge() because we don't support up / down connections
🏃
1:13:01Temporarily restrict CreateDungeon() to only create one floor
1:13:01Temporarily restrict CreateDungeon() to only create one floor
1:13:01Temporarily restrict CreateDungeon() to only create one floor
1:13:30Run the game and hop around our dungeon
🏃
1:13:30Run the game and hop around our dungeon
🏃
1:13:30Run the game and hop around our dungeon
🏃
1:14:10Consider how to handle up / down connections
🗩
1:14:10Consider how to handle up / down connections
🗩
1:14:10Consider how to handle up / down connections
🗩
1:18:20Enable PlaceRoomAlongEdge() to handle up / down connections, allowing them to occur anywhere on a floor
1:18:20Enable PlaceRoomAlongEdge() to handle up / down connections, allowing them to occur anywhere on a floor
1:18:20Enable PlaceRoomAlongEdge() to handle up / down connections, allowing them to occur anywhere on a floor
1:37:37Switch CreateDungeon() back to only create one floor, and CreateWorld() to call CreateOrphanage()
1:37:37Switch CreateDungeon() back to only create one floor, and CreateWorld() to call CreateOrphanage()
1:37:37Switch CreateDungeon() back to only create one floor, and CreateWorld() to call CreateOrphanage()
1:38:54Run the game, crash in Layout() and step through PlaceRoomAlongEdge() to see what it does
🏃
1:38:54Run the game, crash in Layout() and step through PlaceRoomAlongEdge() to see what it does
🏃
1:38:54Run the game, crash in Layout() and step through PlaceRoomAlongEdge() to see what it does
🏃
1:41:11Make PlaceRoomAlongEdge() test the TestVol in Y up to and including the MaxRelY
1:41:11Make PlaceRoomAlongEdge() test the TestVol in Y up to and including the MaxRelY
1:41:11Make PlaceRoomAlongEdge() test the TestVol in Y up to and including the MaxRelY
1:41:53Continue to step through PlaceRoomAlongEdge()
🏃
1:41:53Continue to step through PlaceRoomAlongEdge()
🏃
1:41:53Continue to step through PlaceRoomAlongEdge()
🏃
1:42:44Switch back to -O2 and see that the orphanage is correctly generated
🏃
1:42:44Switch back to -O2 and see that the orphanage is correctly generated
🏃
1:42:44Switch back to -O2 and see that the orphanage is correctly generated
🏃
1:43:04Switch CreateWorld() to call CreateDungeon() and determine that it works for up to four floors
🏃
1:43:04Switch CreateWorld() to call CreateDungeon() and determine that it works for up to four floors
🏃
1:43:04Switch CreateWorld() to call CreateDungeon() and determine that it works for up to four floors
🏃
1:45:10Make UpdateAndRenderWorld() set the far clip plane proportional to the target distance
1:45:10Make UpdateAndRenderWorld() set the far clip plane proportional to the target distance
1:45:10Make UpdateAndRenderWorld() set the far clip plane proportional to the target distance
1:46:28Run the game to see our whole dungeon
🏃
1:46:28Run the game to see our whole dungeon
🏃
1:46:28Run the game to see our whole dungeon
🏃
1:46:46Make CreateWorld() create both the Dungeon and Orphanage
1:46:46Make CreateWorld() create both the Dungeon and Orphanage
1:46:46Make CreateWorld() create both the Dungeon and Orphanage
1:48:19Further increase the FarClipPlane in UpdateAndRenderWorld()
1:48:19Further increase the FarClipPlane in UpdateAndRenderWorld()
1:48:19Further increase the FarClipPlane in UpdateAndRenderWorld()
1:48:43Run the game to see our whole world, and consider labelling the rooms
🏃
1:48:43Run the game to see our whole world, and consider labelling the rooms
🏃
1:48:43Run the game to see our whole world, and consider labelling the rooms
🏃
1:52:10Q&A
🗩
1:52:10Q&A
🗩
1:52:10Q&A
🗩
1:53:17sherjilozair Q: How do you decide whether to include a library in your project or not?
🗪
1:53:17sherjilozair Q: How do you decide whether to include a library in your project or not?
🗪
1:53:17sherjilozair Q: How do you decide whether to include a library in your project or not?
🗪
1:53:29ttbjm Q: Who builds a dungeon under an orphanage?!
🗪
1:53:29ttbjm Q: Who builds a dungeon under an orphanage?!
🗪
1:53:29ttbjm Q: Who builds a dungeon under an orphanage?!
🗪
1:54:01flirtychair Q: What are you listening to?
🗪
1:54:01flirtychair Q: What are you listening to?
🗪
1:54:01flirtychair Q: What are you listening to?
🗪
1:54:22bobby1up Q: What's the InvalidDefault thing in your switch statement?
🗪
1:54:22bobby1up Q: What's the InvalidDefault thing in your switch statement?
🗪
1:54:22bobby1up Q: What's the InvalidDefault thing in your switch statement?
🗪
1:55:27toolegit2quit_ Q: Are you wearing headphones because you want to hear the visual studio error sounds?
🗪
1:55:27toolegit2quit_ Q: Are you wearing headphones because you want to hear the visual studio error sounds?
🗪
1:55:27toolegit2quit_ Q: Are you wearing headphones because you want to hear the visual studio error sounds?
🗪
1:55:47mrlovepickle Q: How do you keep the motivation to continue working on Handmade Hero?
🗪
1:55:47mrlovepickle Q: How do you keep the motivation to continue working on Handmade Hero?
🗪
1:55:47mrlovepickle Q: How do you keep the motivation to continue working on Handmade Hero?
🗪
1:58:02longboolean Q: So I'm guessing the layout system still will not handle cyclical connections nicely, or do you think it could now?
🗪
1:58:02longboolean Q: So I'm guessing the layout system still will not handle cyclical connections nicely, or do you think it could now?
🗪
1:58:02longboolean Q: So I'm guessing the layout system still will not handle cyclical connections nicely, or do you think it could now?
🗪
1:58:24pythno Q: Can you do a brief overview of all the parts that are involved in generating the world? I lost the thread
🗪
1:58:24pythno Q: Can you do a brief overview of all the parts that are involved in generating the world? I lost the thread
🗪
1:58:24pythno Q: Can you do a brief overview of all the parts that are involved in generating the world? I lost the thread
🗪
2:02:28gaius_is_best_colossus handmade_hero Are you working on other stuff parallel to Handmade Hero?
🗪
2:02:28gaius_is_best_colossus handmade_hero Are you working on other stuff parallel to Handmade Hero?
🗪
2:02:28gaius_is_best_colossus handmade_hero Are you working on other stuff parallel to Handmade Hero?
🗪
2:02:45sc4llyw4g_ Q: Just caught up and watched the stream for the first time live today. Wanted to say thanks for the amazing learning resource. You've made me a better programmer than college or university ever could
🗪
2:02:45sc4llyw4g_ Q: Just caught up and watched the stream for the first time live today. Wanted to say thanks for the amazing learning resource. You've made me a better programmer than college or university ever could
🗪
2:02:45sc4llyw4g_ Q: Just caught up and watched the stream for the first time live today. Wanted to say thanks for the amazing learning resource. You've made me a better programmer than college or university ever could
🗪
2:03:03neitchzehrer Q: Have you decided how many levels the world will have in the end?
🗪
2:03:03neitchzehrer Q: Have you decided how many levels the world will have in the end?
🗪
2:03:03neitchzehrer Q: Have you decided how many levels the world will have in the end?
🗪
2:05:37cvaucher Q: The current system doesn't handle adding a rotated or mirrored orphanage, right?
🗪
2:05:37cvaucher Q: The current system doesn't handle adding a rotated or mirrored orphanage, right?
🗪
2:05:37cvaucher Q: The current system doesn't handle adding a rotated or mirrored orphanage, right?
🗪
2:07:27pythno Q: At the moment the gen_rooms are all created by hand, correct? Are you going to use some sort of logic to generate them? If yes, what do you have in mind?
🗪
2:07:27pythno Q: At the moment the gen_rooms are all created by hand, correct? Are you going to use some sort of logic to generate them? If yes, what do you have in mind?
🗪
2:07:27pythno Q: At the moment the gen_rooms are all created by hand, correct? Are you going to use some sort of logic to generate them? If yes, what do you have in mind?
🗪
2:08:52sc4llyw4g_ Q: Have you worked on procedurally generated worlds similar to this before?
🗪
2:08:52sc4llyw4g_ Q: Have you worked on procedurally generated worlds similar to this before?
🗪
2:08:52sc4llyw4g_ Q: Have you worked on procedurally generated worlds similar to this before?
🗪
2:10:07Wrap it up, with a glimpse into the future cleaning up the camera code
🗩
2:10:07Wrap it up, with a glimpse into the future cleaning up the camera code
🗩
2:10:07Wrap it up, with a glimpse into the future cleaning up the camera code
🗩