Handmade Hero»Episode Guide
Brains and Aprons
?
?

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:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
1:01The brain system's multi-component entity construction per frame
📖
1:01The brain system's multi-component entity construction per frame
📖
1:01The brain system's multi-component entity construction per frame
📖
5:46Set up the lightboard
🗹
5:46Set up the lightboard
🗹
5:46Set up the lightboard
🗹
8:52Brains and Aprons
🖌
8:52Brains and Aprons
🖌
8:52Brains and Aprons
🖌
11:56Partial gather of multi-component entities
🖌
11:56Partial gather of multi-component entities
🖌
11:56Partial gather of multi-component entities
🖌
15:14Entity activation beyond the sim-region
🖌
15:14Entity activation beyond the sim-region
🖌
15:14Entity activation beyond the sim-region
🖌
18:43Return to the keyboard
🗹
18:43Return to the keyboard
🗹
18:43Return to the keyboard
🗹
19:210lpbm Q: You were great and the light board is still magic
🗪
19:210lpbm Q: You were great and the light board is still magic
🗪
19:210lpbm Q: You were great and the light board is still magic
🗪
19:35volcanicpopsicle Wait, why have more than one brain?
🗪
19:35volcanicpopsicle Wait, why have more than one brain?
🗪
19:35volcanicpopsicle Wait, why have more than one brain?
🗪
20:55Augment brain with an Active boolean for MarkBrainActives() to set and Simulate() to use
20:55Augment brain with an Active boolean for MarkBrainActives() to set and Simulate() to use
20:55Augment brain with an Active boolean for MarkBrainActives() to set and Simulate() to use
22:14We already have an opened door
🏃
22:14We already have an opened door
🏃
22:14We already have an opened door
🏃
24:23Comment out PlaceSnake() in CreateDungeon()
24:23Comment out PlaceSnake() in CreateDungeon()
24:23Comment out PlaceSnake() in CreateDungeon()
24:40Our snakes are gone, but we have a placed door that lacks tiles
🏃
24:40Our snakes are gone, but we have a placed door that lacks tiles
🏃
24:40Our snakes are gone, but we have a placed door that lacks tiles
🏃
26:14Change CreateDungeon() to pass the PrevRoom to PlaceTilePattern()
26:14Change CreateDungeon() to pass the PrevRoom to PlaceTilePattern()
26:14Change CreateDungeon() to pass the PrevRoom to PlaceTilePattern()
26:51Our door tiles are now placed correctly, but a placed door still lacks tiles
🏃
26:51Our door tiles are now placed correctly, but a placed door still lacks tiles
🏃
26:51Our door tiles are now placed correctly, but a placed door still lacks tiles
🏃
28:29Break in to the SwitchesSet branch of ExecuteBrainSwitches()
🏃
28:29Break in to the SwitchesSet branch of ExecuteBrainSwitches()
🏃
28:29Break in to the SwitchesSet branch of ExecuteBrainSwitches()
🏃
31:14Hit our breakpoint erroneously and inspect the Switches
🏃
31:14Hit our breakpoint erroneously and inspect the Switches
🏃
31:14Hit our breakpoint erroneously and inspect the Switches
🏃
32:20Check our use of EntityFlag_Active and UpdatableBounds
📖
32:20Check our use of EntityFlag_Active and UpdatableBounds
📖
32:20Check our use of EntityFlag_Active and UpdatableBounds
📖
35:51Molly Meow
🗪
35:51Molly Meow
🗪
35:51Molly Meow
🗪
36:58Determine to expand the UpdatableBounds
📖
36:58Determine to expand the UpdatableBounds
📖
36:58Determine to expand the UpdatableBounds
📖
37:40Molly *clambers*
🗪
37:40Molly *clambers*
🗪
37:40Molly *clambers*
🗪
38:07Determine to draw the sim region and apron
📖
38:07Determine to draw the sim region and apron
📖
38:07Determine to draw the sim region and apron
📖
40:24Molly *makes a decision*
🗪
40:24Molly *makes a decision*
🗪
40:24Molly *makes a decision*
🗪
41:03Eyeball the broken door paging in using the debug camera
🏃
41:03Eyeball the broken door paging in using the debug camera
🏃
41:03Eyeball the broken door paging in using the debug camera
🏃
43:29Make BeginWorldChange() expand the SimRegion->Bounds using AddRadiusTo()
43:29Make BeginWorldChange() expand the SimRegion->Bounds using AddRadiusTo()
43:29Make BeginWorldChange() expand the SimRegion->Bounds using AddRadiusTo()
47:15Our broken door is now fixed
🏃
47:15Our broken door is now fixed
🏃
47:15Our broken door is now fixed
🏃
49:16Augment game_mode_world with a StandardApronRadius for CreateWorld() to set
49:16Augment game_mode_world with a StandardApronRadius for CreateWorld() to set
49:16Augment game_mode_world with a StandardApronRadius for CreateWorld() to set
57:03Our doors work well
🏃
57:03Our doors work well
🏃
57:03Our doors work well
🏃
59:04Remove "TODO(casey): If entities were stored in the world, we wouldn't need the game state here!" from BeginWorldChange()
59:04Remove "TODO(casey): If entities were stored in the world, we wouldn't need the game state here!" from BeginWorldChange()
59:04Remove "TODO(casey): If entities were stored in the world, we wouldn't need the game state here!" from BeginWorldChange()
59:32incremented Wasn't the TODO there actually describing the bug?
🗪
59:32incremented Wasn't the TODO there actually describing the bug?
🗪
59:32incremented Wasn't the TODO there actually describing the bug?
🗪
1:00:11incremented handmade_world_mode.cpp around l300
🗪
1:00:11incremented handmade_world_mode.cpp around l300
🗪
1:00:11incremented handmade_world_mode.cpp around l300
🗪
1:00:57Remove "TODO(casey): There are risks to allowing the simulation region to be determined by the camera, because of the way we use "brains" where logical entity collections can be split by a simulation boundary" from UpdateAndRenderWorld()
1:00:57Remove "TODO(casey): There are risks to allowing the simulation region to be determined by the camera, because of the way we use "brains" where logical entity collections can be split by a simulation boundary" from UpdateAndRenderWorld()
1:00:57Remove "TODO(casey): There are risks to allowing the simulation region to be determined by the camera, because of the way we use "brains" where logical entity collections can be split by a simulation boundary" from UpdateAndRenderWorld()
1:01:23Re-enable PlaceSnake() in CreateDungeon(), and make it add a brain and body segments
1:01:23Re-enable PlaceSnake() in CreateDungeon(), and make it add a brain and body segments
1:01:23Re-enable PlaceSnake() in CreateDungeon(), and make it add a brain and body segments
1:05:34Augment gen_entity with a BrainID and BrainSlot for the entity generation functions to set
1:05:34Augment gen_entity with a BrainID and BrainSlot for the entity generation functions to set
1:05:34Augment gen_entity with a BrainID and BrainSlot for the entity generation functions to set
1:22:30Replace the brain_id values with gen_room_connection pointers in gen_connection, and augment gen_room_connection with a brain_id DoorBrainID
1:22:30Replace the brain_id values with gen_room_connection pointers in gen_connection, and augment gen_room_connection with a brain_id DoorBrainID
1:22:30Replace the brain_id values with gen_room_connection pointers in gen_connection, and augment gen_room_connection with a brain_id DoorBrainID
1:26:42Hit a null-pointer dereference
🏃
1:26:42Hit a null-pointer dereference
🏃
1:26:42Hit a null-pointer dereference
🏃
1:27:56Assert in GenerateRoom() that PendingEntity->Creator is not 0
1:27:56Assert in GenerateRoom() that PendingEntity->Creator is not 0
1:27:56Assert in GenerateRoom() that PendingEntity->Creator is not 0
1:29:34Hit that assertion in GenerateRoom()
🏃
1:29:34Hit that assertion in GenerateRoom()
🏃
1:29:34Hit that assertion in GenerateRoom()
🏃
1:30:08Make PlaceSnake() pass AddSnakeBody to AddEntity()
1:30:08Make PlaceSnake() pass AddSnakeBody to AddEntity()
1:30:08Make PlaceSnake() pass AddSnakeBody to AddEntity()
1:30:22Run successfully
🏃
1:30:22Run successfully
🏃
1:30:22Run successfully
🏃
1:31:05Our snakes have bodies but no assets, and our switches can fail to spring back up
🏃
1:31:05Our snakes have bodies but no assets, and our switches can fail to spring back up
🏃
1:31:05Our snakes have bodies but no assets, and our switches can fail to spring back up
🏃
1:32:53Fix PlaceSnake() to add Tags to the segments
1:32:53Fix PlaceSnake() to add Tags to the segments
1:32:53Fix PlaceSnake() to add Tags to the segments
1:34:03Our snake segments have assets but incorrect facing direction
🏃
1:34:03Our snake segments have assets but incorrect facing direction
🏃
1:34:03Our snake segments have assets but incorrect facing direction
🏃
1:35:07Introduce ExecuteBrainSnake() and make it set the segments' FacingDirection
1:35:07Introduce ExecuteBrainSnake() and make it set the segments' FacingDirection
1:35:07Introduce ExecuteBrainSnake() and make it set the segments' FacingDirection
1:40:38Our snake segments now face the correct direction
🏃
1:40:38Our snake segments now face the correct direction
🏃
1:40:38Our snake segments now face the correct direction
🏃
1:42:11Q&A
🗩
1:42:11Q&A
🗩
1:42:11Q&A
🗩