Handmade Hero»Episode Guide
Simplified Tile Occupancy Checking
?
?

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 pushing around some entity code
🗩
0:01Recap and set the stage for the day pushing around some entity code
🗩
0:01Recap and set the stage for the day pushing around some entity code
🗩
0:53Describe our spatial-primary–id-secondary lookup system
🗩
0:53Describe our spatial-primary–id-secondary lookup system
🗩
0:53Describe our spatial-primary–id-secondary lookup system
🗩
3:16Reacquaint ourselves with the sketched entity (un)pack code
📖
3:16Reacquaint ourselves with the sketched entity (un)pack code
📖
3:16Reacquaint ourselves with the sketched entity (un)pack code
📖
4:52Determine to maintain spatial coherence
📖
4:52Determine to maintain spatial coherence
📖
4:52Determine to maintain spatial coherence
📖
5:36Reacquaint ourselves with the world_chunk_iterator
📖
5:36Reacquaint ourselves with the world_chunk_iterator
📖
5:36Reacquaint ourselves with the world_chunk_iterator
📖
6:32Fix typo in the world_chunk_iterator overload of IsValid()
6:32Fix typo in the world_chunk_iterator overload of IsValid()
6:32Fix typo in the world_chunk_iterator overload of IsValid()
7:09Describe EnsureValidChunk() as a double-to-single loop and reusable iterator
📖
7:09Describe EnsureValidChunk() as a double-to-single loop and reusable iterator
📖
7:09Describe EnsureValidChunk() as a double-to-single loop and reusable iterator
📖
8:55Consider the utility of EnsureValidChunk() skipping empty chunks
📖
8:55Consider the utility of EnsureValidChunk() skipping empty chunks
📖
8:55Consider the utility of EnsureValidChunk() skipping empty chunks
📖
11:11Reacquaint ourselves with GetWorldChunkInternal()
📖
11:11Reacquaint ourselves with GetWorldChunkInternal()
📖
11:11Reacquaint ourselves with GetWorldChunkInternal()
📖
11:48Update EnsureValidChunk() to pass Result->P as a v2s to GetWorldChunkInternal()
11:48Update EnsureValidChunk() to pass Result->P as a v2s to GetWorldChunkInternal()
11:48Update EnsureValidChunk() to pass Result->P as a v2s to GetWorldChunkInternal()
11:59Update IterateChunks() to unbundle the MinChunkP and MaxChunkP values to pass to RectMinMax(), and pass Result.P as a v2s to GetWorldChunkInternal()
11:59Update IterateChunks() to unbundle the MinChunkP and MaxChunkP values to pass to RectMinMax(), and pass Result.P as a v2s to GetWorldChunkInternal()
11:59Update IterateChunks() to unbundle the MinChunkP and MaxChunkP values to pass to RectMinMax(), and pass Result.P as a v2s to GetWorldChunkInternal()
13:31Consider removing BeginWorldChange(), only retaining the brain scan
📖
13:31Consider removing BeginWorldChange(), only retaining the brain scan
📖
13:31Consider removing BeginWorldChange(), only retaining the brain scan
📖
17:20Remove BeginWorldChange() and EndWorldChange()
17:20Remove BeginWorldChange() and EndWorldChange()
17:20Remove BeginWorldChange() and EndWorldChange()
17:42Implement TileIsOpen()
17:42Implement TileIsOpen()
17:42Implement TileIsOpen()
24:34Update TileIsOccupied() and TransactionalOccupy() for our new TileIsOpen()
24:34Update TileIsOccupied() and TransactionalOccupy() for our new TileIsOpen()
24:34Update TileIsOccupied() and TransactionalOccupy() for our new TileIsOpen()
25:20Reacquaint ourselves with OverlappingEntitiesExist() and GenerateApron()
📖
25:20Reacquaint ourselves with OverlappingEntitiesExist() and GenerateApron()
📖
25:20Reacquaint ourselves with OverlappingEntitiesExist() and GenerateApron()
📖
27:10Consider stateful querying of TileIsOpen()
📖
27:10Consider stateful querying of TileIsOpen()
📖
27:10Consider stateful querying of TileIsOpen()
📖
28:20Remove OverlappingEntitiesExist()
28:20Remove OverlappingEntitiesExist()
28:20Remove OverlappingEntitiesExist()
28:34Reacquaint ourselves with GetClosestEmptyTileTo() and FindAdjacentOpenTile()
📖
28:34Reacquaint ourselves with GetClosestEmptyTileTo() and FindAdjacentOpenTile()
📖
28:34Reacquaint ourselves with GetClosestEmptyTileTo() and FindAdjacentOpenTile()
📖
29:21Embark on stateful querying of TileIsOpen()
📖
29:21Embark on stateful querying of TileIsOpen()
📖
29:21Embark on stateful querying of TileIsOpen()
📖
30:29Add EntityFlag_SupportsOccupation
30:29Add EntityFlag_SupportsOccupation
30:29Add EntityFlag_SupportsOccupation
31:33Respecify TileIsOpen() as OrAllFlagsOnTile()
31:33Respecify TileIsOpen() as OrAllFlagsOnTile()
31:33Respecify TileIsOpen() as OrAllFlagsOnTile()
32:12Review the call site of TileIsOccupied() in ExecuteBrainSwitches()
📖
32:12Review the call site of TileIsOccupied() in ExecuteBrainSwitches()
📖
32:12Review the call site of TileIsOccupied() in ExecuteBrainSwitches()
📖
32:53Respecify TileIsOccupied() as TileCanBeOccupied()
32:53Respecify TileIsOccupied() as TileCanBeOccupied()
32:53Respecify TileIsOccupied() as TileCanBeOccupied()
34:07Update TransactionalOccupy() to call TileCanBeOccupied()
34:07Update TransactionalOccupy() to call TileCanBeOccupied()
34:07Update TransactionalOccupy() to call TileCanBeOccupied()
34:24Update ExecuteBrainSwitches() to call TileCanBeOccupied()
34:24Update ExecuteBrainSwitches() to call TileCanBeOccupied()
34:24Update ExecuteBrainSwitches() to call TileCanBeOccupied()
35:09Reacquaint ourselves with GetClosestEntityWithBrain()
📖
35:09Reacquaint ourselves with GetClosestEntityWithBrain()
📖
35:09Reacquaint ourselves with GetClosestEntityWithBrain()
📖
35:33Update GetClosestEntityWithBrain() to take a world and world_position
35:33Update GetClosestEntityWithBrain() to take a world and world_position
35:33Update GetClosestEntityWithBrain() to take a world and world_position
37:22aksndz molly_rocket I think TileCanBeOccupied() should read && instead of & in between
🗪
37:22aksndz molly_rocket I think TileCanBeOccupied() should read && instead of & in between
🗪
37:22aksndz molly_rocket I think TileCanBeOccupied() should read && instead of & in between
🗪
37:38Fix TileCanBeOccupied() to use a boolean && rather than a bitwise &
37:38Fix TileCanBeOccupied() to use a boolean && rather than a bitwise &
37:38Fix TileCanBeOccupied() to use a boolean && rather than a bitwise &
38:38muffindrake Yo, the #embed gang sends their regards
🗪
38:38muffindrake Yo, the #embed gang sends their regards
🗪
38:38muffindrake Yo, the #embed gang sends their regards
🗪
40:21Consider how to encode world positions for GetClosestEntityWithBrain()
📖
40:21Consider how to encode world positions for GetClosestEntityWithBrain()
📖
40:21Consider how to encode world positions for GetClosestEntityWithBrain()
📖
41:18Encoding world positions: 1) Integer TileIndex + Offset
📖
41:18Encoding world positions: 1) Integer TileIndex + Offset
📖
41:18Encoding world positions: 1) Integer TileIndex + Offset
📖
41:37Encoding world positions: 2) Tile-aligned chunk-relative offset
📖
41:37Encoding world positions: 2) Tile-aligned chunk-relative offset
📖
41:37Encoding world positions: 2) Tile-aligned chunk-relative offset
📖
42:02agus_dev Have you removed the math library and made the functions like sqrt? If not, do you have any plans on how to do that?
🗪
42:02agus_dev Have you removed the math library and made the functions like sqrt? If not, do you have any plans on how to do that?
🗪
42:02agus_dev Have you removed the math library and made the functions like sqrt? If not, do you have any plans on how to do that?
🗪
43:50Wolfram|Alpha's Padé approximant of cos(x) order 10,101
📖
43:50Wolfram|Alpha's Padé approximant of cos(x) order 10,101
📖
43:50Wolfram|Alpha's Padé approximant of cos(x) order 10,101
📖
44:41Wolfram|Alpha's Chebyshev approximation formula2
📖
44:41Wolfram|Alpha's Chebyshev approximation formula2
📖
44:41Wolfram|Alpha's Chebyshev approximation formula2
📖
45:41Roughly describe a Sin() function
📖
45:41Roughly describe a Sin() function
📖
45:41Roughly describe a Sin() function
📖
47:33sagian2005 But those divides will bite you
🗪
47:33sagian2005 But those divides will bite you
🗪
47:33sagian2005 But those divides will bite you
🗪
47:52Consider where GetClosestEntityWithBrain() will get the TestEntity->P from
📖
47:52Consider where GetClosestEntityWithBrain() will get the TestEntity->P from
📖
47:52Consider where GetClosestEntityWithBrain() will get the TestEntity->P from
📖
48:08sagian2005 The divides in the Padé are slow
🗪
48:08sagian2005 The divides in the Padé are slow
🗪
48:08sagian2005 The divides in the Padé are slow
🗪
49:13DIVPS (XMM, M128),3 DIVPS (XMM, XMM)4 and RCPSS (XMM, XMM)5
49:13DIVPS (XMM, M128),3 DIVPS (XMM, XMM)4 and RCPSS (XMM, XMM)5
49:13DIVPS (XMM, M128),3 DIVPS (XMM, XMM)4 and RCPSS (XMM, XMM)5
52:22Speculatively introduce GetTileIndexOf() and GetWorldPositionOf()
52:22Speculatively introduce GetTileIndexOf() and GetWorldPositionOf()
52:22Speculatively introduce GetTileIndexOf() and GetWorldPositionOf()
54:39Determine to check the call sites of FindRandomOpenTile()
📖
54:39Determine to check the call sites of FindRandomOpenTile()
📖
54:39Determine to check the call sites of FindRandomOpenTile()
📖
55:38Move closest_entity from handmade_world.cpp to handmade_world.h
55:38Move closest_entity from handmade_world.cpp to handmade_world.h
55:38Move closest_entity from handmade_world.cpp to handmade_world.h
56:00Remove FindNextEntity(), IterateAllEntities() and the entity_iterator overload of Advance()
56:00Remove FindNextEntity(), IterateAllEntities() and the entity_iterator overload of Advance()
56:00Remove FindNextEntity(), IterateAllEntities() and the entity_iterator overload of Advance()
56:15Review the call site of GetClosestEmptyTileTo() in CheckForJoiningPlayers()
📖
56:15Review the call site of GetClosestEmptyTileTo() in CheckForJoiningPlayers()
📖
56:15Review the call site of GetClosestEmptyTileTo() in CheckForJoiningPlayers()
📖
57:37Update AddPlayer() to take a world and not a game_mode_world, and return an entity_id, and relieve CheckForJoiningPlayers() of taking a sim_region
57:37Update AddPlayer() to take a world and not a game_mode_world, and return an entity_id, and relieve CheckForJoiningPlayers() of taking a sim_region
57:37Update AddPlayer() to take a world and not a game_mode_world, and return an entity_id, and relieve CheckForJoiningPlayers() of taking a sim_region
59:42Consider the placement by AddPlayer() of pieces in the world to be fine
📖
59:42Consider the placement by AddPlayer() of pieces in the world to be fine
📖
59:42Consider the placement by AddPlayer() of pieces in the world to be fine
📖
1:00:15Introduce tile_result, and update GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to take a world
1:00:15Introduce tile_result, and update GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to take a world
1:00:15Introduce tile_result, and update GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to take a world
1:01:11Update FindAdjacentOpenTile() to work with v2s rather than gen_v3 and edit_tile
1:01:11Update FindAdjacentOpenTile() to work with v2s rather than gen_v3 and edit_tile
1:01:11Update FindAdjacentOpenTile() to work with v2s rather than gen_v3 and edit_tile
1:02:54Consider the meaning of FindAdjacentOpenTile() from its call sites
📖
1:02:54Consider the meaning of FindAdjacentOpenTile() from its call sites
📖
1:02:54Consider the meaning of FindAdjacentOpenTile() from its call sites
📖
1:04:08Make FindAdjacentOpenTile() call TileCanBeOccupied() rather than TraversableIsOpen()
1:04:08Make FindAdjacentOpenTile() call TileCanBeOccupied() rather than TraversableIsOpen()
1:04:08Make FindAdjacentOpenTile() call TileCanBeOccupied() rather than TraversableIsOpen()
1:04:25Reacquaint ourselves with GetDirection()
📖
1:04:25Reacquaint ourselves with GetDirection()
📖
1:04:25Reacquaint ourselves with GetDirection()
📖
1:05:08Move GetDirection() from handmade_math.h to handmade_box.cpp
1:05:08Move GetDirection() from handmade_math.h to handmade_box.cpp
1:05:08Move GetDirection() from handmade_math.h to handmade_box.cpp
1:05:53Make FindAdjacentOpenTile() set the Result
1:05:53Make FindAdjacentOpenTile() set the Result
1:05:53Make FindAdjacentOpenTile() set the Result
1:06:14Consider the meaning of FindRandomOpenTile() from its call sites
📖
1:06:14Consider the meaning of FindRandomOpenTile() from its call sites
📖
1:06:14Consider the meaning of FindRandomOpenTile() from its call sites
📖
1:08:12#if 0 FindRandomOpenTile() for now
1:08:12#if 0 FindRandomOpenTile() for now
1:08:12#if 0 FindRandomOpenTile() for now
1:08:27Determine to write the entity iterator
📖
1:08:27Determine to write the entity iterator
📖
1:08:27Determine to write the entity iterator
📖
1:08:39Check the absolute time
🗹
1:08:39Check the absolute time
🗹
1:08:39Check the absolute time
🗹
1:09:06Wind it down with the determination to do brains next time
🗩
1:09:06Wind it down with the determination to do brains next time
🗩
1:09:06Wind it down with the determination to do brains next time
🗩
You have arrived at the (current) end of Handmade Hero