Handmade Hero»Episode Guide
Simplifying Entity Storage Part II
?
?

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
🗩
2:37Reacquaint ourselves with the brain_type enum
📖
2:37Reacquaint ourselves with the brain_type enum
📖
2:37Reacquaint ourselves with the brain_type enum
📖
4:43Delete Type_brain_monstar and AddMonstar()
4:43Delete Type_brain_monstar and AddMonstar()
4:43Delete Type_brain_monstar and AddMonstar()
5:32Seek simplification of UpdateAndRenderEntities()
📖
5:32Seek simplification of UpdateAndRenderEntities()
📖
5:32Seek simplification of UpdateAndRenderEntities()
📖
6:12Delete the BoostTo branch from UpdateAndRenderEntities()
6:12Delete the BoostTo branch from UpdateAndRenderEntities()
6:12Delete the BoostTo branch from UpdateAndRenderEntities()
6:21Scan through code to rewrite and keep
📖
6:21Scan through code to rewrite and keep
📖
6:21Scan through code to rewrite and keep
📖
7:00Consider moving the camera with the entity in question, rather than by doing an entity lookup by ID
📖
7:00Consider moving the camera with the entity in question, rather than by doing an entity lookup by ID
📖
7:00Consider moving the camera with the entity in question, rather than by doing an entity lookup by ID
📖
9:12Reacquaint ourselves with the Type_brain_familiar case in ExecuteBrain()
📖
9:12Reacquaint ourselves with the Type_brain_familiar case in ExecuteBrain()
📖
9:12Reacquaint ourselves with the Type_brain_familiar case in ExecuteBrain()
📖
12:29Improve the wording of the Type_brain_familiar case in ExecuteBrain()
12:29Improve the wording of the Type_brain_familiar case in ExecuteBrain()
12:29Improve the wording of the Type_brain_familiar case in ExecuteBrain()
14:38Consider changes to the entity struct that may mostly obviate the need for the sim region
📖
14:38Consider changes to the entity struct that may mostly obviate the need for the sim region
📖
14:38Consider changes to the entity struct that may mostly obviate the need for the sim region
📖
16:36Remove dAbsTileZ from entity
16:36Remove dAbsTileZ from entity
16:36Remove dAbsTileZ from entity
16:44Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme
16:44Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme
16:44Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme
19:07Consider performing TransactionalOccupy() in the movement, rather than the brain, code
📖
19:07Consider performing TransactionalOccupy() in the movement, rather than the brain, code
📖
19:07Consider performing TransactionalOccupy() in the movement, rather than the brain, code
📖
20:16Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
20:16Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
20:16Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
22:06Reacquaint ourselves with the familiar velocity setting code
📖
22:06Reacquaint ourselves with the familiar velocity setting code
📖
22:06Reacquaint ourselves with the familiar velocity setting code
📖
24:04Describe the purpose of TransactionalOccupy() in ExecuteBrain()
📖
24:04Describe the purpose of TransactionalOccupy() in ExecuteBrain()
📖
24:04Describe the purpose of TransactionalOccupy() in ExecuteBrain()
📖
24:58Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
24:58Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
24:58Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
25:44Note popping artifacts in this movement code
📖
25:44Note popping artifacts in this movement code
📖
25:44Note popping artifacts in this movement code
📖
26:14Introduce a v2s overload of V2()
26:14Introduce a v2s overload of V2()
26:14Introduce a v2s overload of V2()
26:58Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
26:58Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
26:58Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)
27:17Port UpdateAnimation() to our simplified entity storage scheme
27:17Port UpdateAnimation() to our simplified entity storage scheme
27:17Port UpdateAnimation() to our simplified entity storage scheme
29:14Port the move queue code in UpdateAndRenderEntities() to our simplified entity storage scheme, changing Delta in move_queue_entry to be a v2s
29:14Port the move queue code in UpdateAndRenderEntities() to our simplified entity storage scheme, changing Delta in move_queue_entry to be a v2s
29:14Port the move queue code in UpdateAndRenderEntities() to our simplified entity storage scheme, changing Delta in move_queue_entry to be a v2s
30:00Consider making UpdateAndRenderEntities() set the TileIndex directly
📖
30:00Consider making UpdateAndRenderEntities() set the TileIndex directly
📖
30:00Consider making UpdateAndRenderEntities() set the TileIndex directly
📖
30:52Port UpdateAndRenderEntities() to our simplified entity storage scheme, using a v2s TargetTile
30:52Port UpdateAndRenderEntities() to our simplified entity storage scheme, using a v2s TargetTile
30:52Port UpdateAndRenderEntities() to our simplified entity storage scheme, using a v2s TargetTile
31:48Port ExecuteBrainHero() to our simplified entity storage scheme, changing CanonicalDelta in move_pattern_entry, and AttackX and AttackY to be a v2s, and introducing V2S() and a v2s overload of operator*()
31:48Port ExecuteBrainHero() to our simplified entity storage scheme, changing CanonicalDelta in move_pattern_entry, and AttackX and AttackY to be a v2s, and introducing V2S() and a v2s overload of operator*()
31:48Port ExecuteBrainHero() to our simplified entity storage scheme, changing CanonicalDelta in move_pattern_entry, and AttackX and AttackY to be a v2s, and introducing V2S() and a v2s overload of operator*()
35:32Port AddPlayer() to our simplified entity storage scheme
35:32Port AddPlayer() to our simplified entity storage scheme
35:32Port AddPlayer() to our simplified entity storage scheme
37:48Port CheckForJoiningPlayers() to our simplified entity storage scheme, introducing GetClosestEmptyTileTo() and augmenting sim_region with OriginTileIndex
37:48Port CheckForJoiningPlayers() to our simplified entity storage scheme, introducing GetClosestEmptyTileTo() and augmenting sim_region with OriginTileIndex
37:48Port CheckForJoiningPlayers() to our simplified entity storage scheme, introducing GetClosestEmptyTileTo() and augmenting sim_region with OriginTileIndex
41:45Consider introducing TileSpaceToSimRegion()
📖
41:45Consider introducing TileSpaceToSimRegion()
📖
41:45Consider introducing TileSpaceToSimRegion()
📖
43:26Respecify UpdateAnimation() to orient movement around the delta of the current and previous tile
43:26Respecify UpdateAnimation() to orient movement around the delta of the current and previous tile
43:26Respecify UpdateAnimation() to orient movement around the delta of the current and previous tile
45:02Fix typo in GetClosestEmptyTileTo()
45:02Fix typo in GetClosestEmptyTileTo()
45:02Fix typo in GetClosestEmptyTileTo()
45:22Remove the sim_region overloads of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()
45:22Remove the sim_region overloads of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()
45:22Remove the sim_region overloads of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()
46:10Consider also removing the edit_grid version of PlaceEntityAtTraversable() and related functions
📖
46:10Consider also removing the edit_grid version of PlaceEntityAtTraversable() and related functions
📖
46:10Consider also removing the edit_grid version of PlaceEntityAtTraversable() and related functions
📖
49:17Move the edit_tile traversal functions from handmade_edit_grid.cpp to handmade_sim_region.cpp
49:17Move the edit_tile traversal functions from handmade_edit_grid.cpp to handmade_sim_region.cpp
49:17Move the edit_tile traversal functions from handmade_edit_grid.cpp to handmade_sim_region.cpp
50:00Consider removing the edit grid entirely
📖
50:00Consider removing the edit grid entirely
📖
50:00Consider removing the edit grid entirely
📖
52:10#if 0 GenerateApron() and GenerateRoom()
52:10#if 0 GenerateApron() and GenerateRoom()
52:10#if 0 GenerateApron() and GenerateRoom()
52:34Rename TraversableIsOpen() to TileIsOpen(), and IsOccupied() to TileIsOccupied(), removing the former's check
52:34Rename TraversableIsOpen() to TileIsOpen(), and IsOccupied() to TileIsOccupied(), removing the former's check
52:34Rename TraversableIsOpen() to TileIsOpen(), and IsOccupied() to TileIsOccupied(), removing the former's check
53:38Consider changing FindRandomOpenTile() to spiral outwards
📖
53:38Consider changing FindRandomOpenTile() to spiral outwards
📖
53:38Consider changing FindRandomOpenTile() to spiral outwards
📖
54:31Delete handmade_gen_math.{h,cpp}, stowing the cpp code in handmade_math.h
🗹
🖮
54:31Delete handmade_gen_math.{h,cpp}, stowing the cpp code in handmade_math.h
🗹
🖮
54:31Delete handmade_gen_math.{h,cpp}, stowing the cpp code in handmade_math.h
🗹
🖮
1:02:54Remove the bulk of handmade_edit_grid.cpp
1:02:54Remove the bulk of handmade_edit_grid.cpp
1:02:54Remove the bulk of handmade_edit_grid.cpp
1:06:34Relieve GenerateBlock() of calling BeginGridEdit(), removing the latter, EndGridEdit() and GetAbsoluteTileIndex()
1:06:34Relieve GenerateBlock() of calling BeginGridEdit(), removing the latter, EndGridEdit() and GetAbsoluteTileIndex()
1:06:34Relieve GenerateBlock() of calling BeginGridEdit(), removing the latter, EndGridEdit() and GetAbsoluteTileIndex()
1:10:56Move IsOnEdge() from handmade_edit_grid.cpp to handmade_math.h
1:10:56Move IsOnEdge() from handmade_edit_grid.cpp to handmade_math.h
1:10:56Move IsOnEdge() from handmade_edit_grid.cpp to handmade_math.h
1:12:45Consider keeping code from handmade_edit_grid.cpp
📖
1:12:45Consider keeping code from handmade_edit_grid.cpp
📖
1:12:45Consider keeping code from handmade_edit_grid.cpp
📖
1:14:04Move GetTileVolume() from handmade_edit_grid.cpp to handmade_room_gen.cpp, and rewrite it
1:14:04Move GetTileVolume() from handmade_edit_grid.cpp to handmade_room_gen.cpp, and rewrite it
1:14:04Move GetTileVolume() from handmade_edit_grid.cpp to handmade_room_gen.cpp, and rewrite it
1:16:25Move GetMinZCenterP() and GetVolumeFromMinZ() from handmade_edit_grid.cpp to handmade_room_gen.cpp
1:16:25Move GetMinZCenterP() and GetVolumeFromMinZ() from handmade_edit_grid.cpp to handmade_room_gen.cpp
1:16:25Move GetMinZCenterP() and GetVolumeFromMinZ() from handmade_edit_grid.cpp to handmade_room_gen.cpp
1:17:13Relieve GenerateBlock() of calling IterateAsPlanarTiles(), removing the latter
1:17:13Relieve GenerateBlock() of calling IterateAsPlanarTiles(), removing the latter
1:17:13Relieve GenerateBlock() of calling IterateAsPlanarTiles(), removing the latter
1:18:21Delete handmade_edit_grid.{h,cpp}
🗹
1:18:21Delete handmade_edit_grid.{h,cpp}
🗹
1:18:21Delete handmade_edit_grid.{h,cpp}
🗹
1:19:16Decide against debugging Visual Studio with Visual Studio
🗹
1:19:16Decide against debugging Visual Studio with Visual Studio
🗹
1:19:16Decide against debugging Visual Studio with Visual Studio
🗹
1:19:49Change GEN_CREATE_ENTITY_PATTERN() to take a world_generator
1:19:49Change GEN_CREATE_ENTITY_PATTERN() to take a world_generator
1:19:49Change GEN_CREATE_ENTITY_PATTERN() to take a world_generator
1:20:05We can't compile
🗹
1:20:05We can't compile
🗹
1:20:05We can't compile
🗹
1:22:41Declare world_generator before GEN_CREATE_ENTITY_PATTERN()
1:22:41Declare world_generator before GEN_CREATE_ENTITY_PATTERN()
1:22:41Declare world_generator before GEN_CREATE_ENTITY_PATTERN()
1:23:17Thoughts on compilers
🗩
1:23:17Thoughts on compilers
🗩
1:23:17Thoughts on compilers
🗩
1:25:05kwmar This is awesome though, but work in progress – Circle C++ Compiler1 – especially the extensions that should've been in C++ for a long time already
🗪
1:25:05kwmar This is awesome though, but work in progress – Circle C++ Compiler1 – especially the extensions that should've been in C++ for a long time already
🗪
1:25:05kwmar This is awesome though, but work in progress – Circle C++ Compiler1 – especially the extensions that should've been in C++ for a long time already
🗪
1:25:23kwmar It's a new C++ compiler
🗪
1:25:23kwmar It's a new C++ compiler
🗪
1:25:23kwmar It's a new C++ compiler
🗪
1:25:26haeristudios C++ itself is a mess
🗪
1:25:26haeristudios C++ itself is a mess
🗪
1:25:26haeristudios C++ itself is a mess
🗪
1:25:55Remove PlaceEntityAtP(), and the edit_grid versions of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()
1:25:55Remove PlaceEntityAtP(), and the edit_grid versions of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()
1:25:55Remove PlaceEntityAtP(), and the edit_grid versions of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()
1:26:49Write the edit grid out of SingleEnemyPattern()
1:26:49Write the edit grid out of SingleEnemyPattern()
1:26:49Write the edit grid out of SingleEnemyPattern()
1:27:29haeristudios molly_rocket Have you already discussed Carbon and Go? Would be interesting to hear your take on those languages
🗪
1:27:29haeristudios molly_rocket Have you already discussed Carbon and Go? Would be interesting to hear your take on those languages
🗪
1:27:29haeristudios molly_rocket Have you already discussed Carbon and Go? Would be interesting to hear your take on those languages
🗪
1:27:38Write the edit grid out of SingleEnemyPattern() and SnakePattern(), augmenting world_generator with a *SimRegion
1:27:38Write the edit grid out of SingleEnemyPattern() and SnakePattern(), augmenting world_generator with a *SimRegion
1:27:38Write the edit grid out of SingleEnemyPattern() and SnakePattern(), augmenting world_generator with a *SimRegion
1:30:41Change TileAlreadyExists() and AppendTile() to take a v2s
1:30:41Change TileAlreadyExists() and AppendTile() to take a v2s
1:30:41Change TileAlreadyExists() and AppendTile() to take a v2s
1:31:10Write the edit grid out of TileSwitchPattern()
1:31:10Write the edit grid out of TileSwitchPattern()
1:31:10Write the edit grid out of TileSwitchPattern()
1:34:02Introduce tile_result for GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to return
1:34:02Introduce tile_result for GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to return
1:34:02Introduce tile_result for GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to return
1:36:03Update SingleEnemyPattern() and SnakePattern() to use our new tile_result
1:36:03Update SingleEnemyPattern() and SnakePattern() to use our new tile_result
1:36:03Update SingleEnemyPattern() and SnakePattern() to use our new tile_result
1:38:05Investigate our FindAdjacentOpenTile() compile error
📖
1:38:05Investigate our FindAdjacentOpenTile() compile error
📖
1:38:05Investigate our FindAdjacentOpenTile() compile error
📖
1:39:27Make FindRandomOpenTile() and FindAdjacentOpenTile() NotImplemented
1:39:27Make FindRandomOpenTile() and FindAdjacentOpenTile() NotImplemented
1:39:27Make FindRandomOpenTile() and FindAdjacentOpenTile() NotImplemented
1:40:04Update CheckForJoiningPlayers() to use our new tile_result
1:40:04Update CheckForJoiningPlayers() to use our new tile_result
1:40:04Update CheckForJoiningPlayers() to use our new tile_result
1:40:36#if 0 the compile errors in BeginWorldChange()
1:40:36#if 0 the compile errors in BeginWorldChange()
1:40:36#if 0 the compile errors in BeginWorldChange()
1:40:53Introduce a v2s overload of operator+=()
1:40:53Introduce a v2s overload of operator+=()
1:40:53Introduce a v2s overload of operator+=()
1:41:15Update TileSwitchPattern() to use our new tile_result
1:41:15Update TileSwitchPattern() to use our new tile_result
1:41:15Update TileSwitchPattern() to use our new tile_result
1:43:30Consider making TileSwitchPattern() generate an index list for GenerateBlock() to use
📖
1:43:30Consider making TileSwitchPattern() generate an index list for GenerateBlock() to use
📖
1:43:30Consider making TileSwitchPattern() generate an index list for GenerateBlock() to use
📖
1:44:25#if 0 TileSwitchPattern()
1:44:25#if 0 TileSwitchPattern()
1:44:25#if 0 TileSwitchPattern()
1:44:45Update NPCPattern() to use our new tile_result
1:44:45Update NPCPattern() to use our new tile_result
1:44:45Update NPCPattern() to use our new tile_result
1:46:11Fix compile errors in StandardLightingPattern() and remove CalcBasePForOffset()
1:46:11Fix compile errors in StandardLightingPattern() and remove CalcBasePForOffset()
1:46:11Fix compile errors in StandardLightingPattern() and remove CalcBasePForOffset()
1:47:39Remove Z from SetSize()
1:47:39Remove Z from SetSize()
1:47:39Remove Z from SetSize()
1:48:10Remove PlaceRoomInVolume(), PlaceRoom(), GetDeltaAlongAxisForCleanPlacement(), PlaceRoomAlongEdge(), GetRandomDirectionFromMask() and Layout()
1:48:10Remove PlaceRoomInVolume(), PlaceRoom(), GetDeltaAlongAxisForCleanPlacement(), PlaceRoomAlongEdge(), GetRandomDirectionFromMask() and Layout()
1:48:10Remove PlaceRoomInVolume(), PlaceRoom(), GetDeltaAlongAxisForCleanPlacement(), PlaceRoomAlongEdge(), GetRandomDirectionFromMask() and Layout()
1:48:58Switch the block rasterisation code in CreateWorld() to use v2s
1:48:58Switch the block rasterisation code in CreateWorld() to use v2s
1:48:58Switch the block rasterisation code in CreateWorld() to use v2s
1:50:05Switch rectangle2i to contain v2s Min and Max, and propagate this change
1:50:05Switch rectangle2i to contain v2s Min and Max, and propagate this change
1:50:05Switch rectangle2i to contain v2s Min and Max, and propagate this change
1:55:24lamarrr___ What do you think about Rust?
🗪
1:55:24lamarrr___ What do you think about Rust?
🗪
1:55:24lamarrr___ What do you think about Rust?
🗪
1:56:13Switch HeroRoom in CreateWorld() to be a rectangle2i
1:56:13Switch HeroRoom in CreateWorld() to be a rectangle2i
1:56:13Switch HeroRoom in CreateWorld() to be a rectangle2i
1:56:48Switch GetCameraOffsetZForDim() to take a v2s
1:56:48Switch GetCameraOffsetZForDim() to take a v2s
1:56:48Switch GetCameraOffsetZForDim() to take a v2s
1:56:55Switch GetMinZCenterP() and GetVolumeFromMinZ() to take a world_generator, not an edit_tile
1:56:55Switch GetMinZCenterP() and GetVolumeFromMinZ() to take a world_generator, not an edit_tile
1:56:55Switch GetMinZCenterP() and GetVolumeFromMinZ() to take a world_generator, not an edit_tile
1:58:16Port GenerateBlock() and WinMainCRTStartup() to our updated rectangle2i
1:58:16Port GenerateBlock() and WinMainCRTStartup() to our updated rectangle2i
1:58:16Port GenerateBlock() and WinMainCRTStartup() to our updated rectangle2i
2:00:12Rename Region to SimRegion in GenerateBlock(), and unset it at the end
2:00:12Rename Region to SimRegion in GenerateBlock(), and unset it at the end
2:00:12Rename Region to SimRegion in GenerateBlock(), and unset it at the end
2:00:32Call it there
🗩
2:00:32Call it there
🗩
2:00:32Call it there
🗩