Handmade Hero»Episode Guide
Changing How Entities are Packed and Unpacked
?
?

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:09Describe our storage of the world as geographic / geometric chunks
📖
1:09Describe our storage of the world as geographic / geometric chunks
📖
1:09Describe our storage of the world as geographic / geometric chunks
📖
5:26Consider removing sim_region
📖
5:26Consider removing sim_region
📖
5:26Consider removing sim_region
📖
6:34Note our need for entity lookup tables by ID
📖
6:34Note our need for entity lookup tables by ID
📖
6:34Note our need for entity lookup tables by ID
📖
7:19Geometric / spatial query entity operations: collision, movement or lighting gather
📖
7:19Geometric / spatial query entity operations: collision, movement or lighting gather
📖
7:19Geometric / spatial query entity operations: collision, movement or lighting gather
📖
7:54Non-geometric entity operations
📖
7:54Non-geometric entity operations
📖
7:54Non-geometric entity operations
📖
8:13Non-geometric entity operations: 1) Matching gamepad with entity
📖
8:13Non-geometric entity operations: 1) Matching gamepad with entity
📖
8:13Non-geometric entity operations: 1) Matching gamepad with entity
📖
8:43Non-geometric entity operations: 2) Focusing camera on player's entity
📖
8:43Non-geometric entity operations: 2) Focusing camera on player's entity
📖
8:43Non-geometric entity operations: 2) Focusing camera on player's entity
📖
9:54Non-geometric entity operations: 3) Grouping entities
📖
9:54Non-geometric entity operations: 3) Grouping entities
📖
9:54Non-geometric entity operations: 3) Grouping entities
📖
11:35Consider the need for entity identification irrespective of world location
📖
11:35Consider the need for entity identification irrespective of world location
📖
11:35Consider the need for entity identification irrespective of world location
📖
12:24Non-positional entity identification
📖
12:24Non-positional entity identification
📖
12:24Non-positional entity identification
📖
12:38Non-positional entity identification: 1) Giant direct addressing table
📖
12:38Non-positional entity identification: 1) Giant direct addressing table
📖
12:38Non-positional entity identification: 1) Giant direct addressing table
📖
13:23Non-positional entity identification: 2) Localised direct addressing table
📖
13:23Non-positional entity identification: 2) Localised direct addressing table
📖
13:23Non-positional entity identification: 2) Localised direct addressing table
📖
14:13Non-positional entity identification: 3) Disallowed, everything is a spatial query
📖
14:13Non-positional entity identification: 3) Disallowed, everything is a spatial query
📖
14:13Non-positional entity identification: 3) Disallowed, everything is a spatial query
📖
17:00Consider storing moving and static entities separately
📖
17:00Consider storing moving and static entities separately
📖
17:00Consider storing moving and static entities separately
📖
18:02Consider augmenting world_chunk with a table of movable entities, or unpacked_entity_block with a movable / skippable signifier
📖
18:02Consider augmenting world_chunk with a table of movable entities, or unpacked_entity_block with a movable / skippable signifier
📖
18:02Consider augmenting world_chunk with a table of movable entities, or unpacked_entity_block with a movable / skippable signifier
📖
20:06Remove the #if 0 from unpacked_entity_block and fix the order of declarations
20:06Remove the #if 0 from unpacked_entity_block and fix the order of declarations
20:06Remove the #if 0 from unpacked_entity_block and fix the order of declarations
21:23Determine to store moving and static entities separately, with everything as a spatial query
📖
21:23Determine to store moving and static entities separately, with everything as a spatial query
📖
21:23Determine to store moving and static entities separately, with everything as a spatial query
📖
21:50Determine to implement world_chunk (un)compressing
📖
21:50Determine to implement world_chunk (un)compressing
📖
21:50Determine to implement world_chunk (un)compressing
📖
23:44world_chunk: TODO(casey): Probably need to track access patterns here so we know what to repack for lack of use
23:44world_chunk: TODO(casey): Probably need to track access patterns here so we know what to repack for lack of use
23:44world_chunk: TODO(casey): Probably need to track access patterns here so we know what to repack for lack of use
24:18Consider changing the entity management threading scheme
📖
24:18Consider changing the entity management threading scheme
📖
24:18Consider changing the entity management threading scheme
📖
26:19Describe EnsureRegionIsUnpacked()
📖
26:19Describe EnsureRegionIsUnpacked()
📖
26:19Describe EnsureRegionIsUnpacked()
📖
28:11Determine to enable interleaving of entity unpacking and updating for cache-friendliness
📖
28:11Determine to enable interleaving of entity unpacking and updating for cache-friendliness
📖
28:11Determine to enable interleaving of entity unpacking and updating for cache-friendliness
📖
29:24rct33 I just got here, so no
🗪
29:24rct33 I just got here, so no
🗪
29:24rct33 I just got here, so no
🗪
29:34frizzku Yeah
🗪
29:34frizzku Yeah
🗪
29:34frizzku Yeah
🗪
29:39fat_dratini Yes, you gotta eat your food while it's hot
🗪
29:39fat_dratini Yes, you gotta eat your food while it's hot
🗪
29:39fat_dratini Yes, you gotta eat your food while it's hot
🗪
29:46Respecify EnsureRegionIsUnpacked() to support unpack and update interleaving, introducing world_chunk_iterator, IterateChunks(), IsValid() and Next()
29:46Respecify EnsureRegionIsUnpacked() to support unpack and update interleaving, introducing world_chunk_iterator, IterateChunks(), IsValid() and Next()
29:46Respecify EnsureRegionIsUnpacked() to support unpack and update interleaving, introducing world_chunk_iterator, IterateChunks(), IsValid() and Next()
37:16Implement our world chunk iterator: IterateChunks(), IsValid() and Next(), introducing EnsureValidChunk()
37:16Implement our world chunk iterator: IterateChunks(), IsValid() and Next(), introducing EnsureValidChunk()
37:16Implement our world chunk iterator: IterateChunks(), IsValid() and Next(), introducing EnsureValidChunk()
54:50Fix compile errors in the world chunk iterator
54:50Fix compile errors in the world chunk iterator
54:50Fix compile errors in the world chunk iterator
56:43Consider making the caller unpack the entity block
📖
56:43Consider making the caller unpack the entity block
📖
56:43Consider making the caller unpack the entity block
📖
57:21Change world_chunk_iterator to contain a world_chunk for the caller to unpack as required
57:21Change world_chunk_iterator to contain a world_chunk for the caller to unpack as required
57:21Change world_chunk_iterator to contain a world_chunk for the caller to unpack as required
59:56Introduce EnsureChunkIsUnpacked() and EnsureChunkIsPacked()
59:56Introduce EnsureChunkIsUnpacked() and EnsureChunkIsPacked()
59:56Introduce EnsureChunkIsUnpacked() and EnsureChunkIsPacked()
1:00:49Consider not having a lookup table for unpacked entities in the world
📖
1:00:49Consider not having a lookup table for unpacked entities in the world
📖
1:00:49Consider not having a lookup table for unpacked entities in the world
📖
1:04:01Implement EnsureChunkIsPacked() based on PackEntity()
1:04:01Implement EnsureChunkIsPacked() based on PackEntity()
1:04:01Implement EnsureChunkIsPacked() based on PackEntity()
1:06:00Consider who is responsible for moving entities between chunks
📖
1:06:00Consider who is responsible for moving entities between chunks
📖
1:06:00Consider who is responsible for moving entities between chunks
📖
1:07:47Temporarily introduce MoveEntityToNewChunk()
1:07:47Temporarily introduce MoveEntityToNewChunk()
1:07:47Temporarily introduce MoveEntityToNewChunk()
1:08:16Determine to move entities between chunks immediately
📖
1:08:16Determine to move entities between chunks immediately
📖
1:08:16Determine to move entities between chunks immediately
📖
1:09:18Introduce MoveEntityToNewPosition()
1:09:18Introduce MoveEntityToNewPosition()
1:09:18Introduce MoveEntityToNewPosition()
1:11:14Simplify EnsureRegionIsUnpacked()
1:11:14Simplify EnsureRegionIsUnpacked()
1:11:14Simplify EnsureRegionIsUnpacked()
1:14:40Implement EnsureChunkIsUnpacked() based on EnsureRegionIsUnpacked()
1:14:40Implement EnsureChunkIsUnpacked() based on EnsureRegionIsUnpacked()
1:14:40Implement EnsureChunkIsUnpacked() based on EnsureRegionIsUnpacked()
1:14:50Plan our memory strategy for entity chunk unpacking
📖
1:14:50Plan our memory strategy for entity chunk unpacking
📖
1:14:50Plan our memory strategy for entity chunk unpacking
📖
1:15:39Make EnsureChunkIsPacked() call AddToFreeList()
1:15:39Make EnsureChunkIsPacked() call AddToFreeList()
1:15:39Make EnsureChunkIsPacked() call AddToFreeList()
1:16:20Remove EnsureRegionIsUnpacked(), RepackEntitiesAsRequired(), ClearUnpackedEntityCache() and AcquireUnpackedEntitySlot()
1:16:20Remove EnsureRegionIsUnpacked(), RepackEntitiesAsRequired(), ClearUnpackedEntityCache() and AcquireUnpackedEntitySlot()
1:16:20Remove EnsureRegionIsUnpacked(), RepackEntitiesAsRequired(), ClearUnpackedEntityCache() and AcquireUnpackedEntitySlot()
1:18:56Note the orientation chunk dimensions around their centre
1:18:56Note the orientation chunk dimensions around their centre
1:18:56Note the orientation chunk dimensions around their centre
1:20:09Check the time
🗹
1:20:09Check the time
🗹
1:20:09Check the time
🗹
1:20:39Remove MAX_SIM_REGION_ENTITY_COUNT
1:20:39Remove MAX_SIM_REGION_ENTITY_COUNT
1:20:39Remove MAX_SIM_REGION_ENTITY_COUNT
1:20:49Introduce entity_block_storage to contain packed_entity_block and unpacked_entity_block, making them roughly the same size
1:20:49Introduce entity_block_storage to contain packed_entity_block and unpacked_entity_block, making them roughly the same size
1:20:49Introduce entity_block_storage to contain packed_entity_block and unpacked_entity_block, making them roughly the same size
1:26:01Remove entity packing data from world
1:26:01Remove entity packing data from world
1:26:01Remove entity packing data from world
1:26:42Finish implementing EnsureChunkIsUnpacked(), renaming FirstBlock to FirstPacked in world_chunk
1:26:42Finish implementing EnsureChunkIsUnpacked(), renaming FirstBlock to FirstPacked in world_chunk
1:26:42Finish implementing EnsureChunkIsUnpacked(), renaming FirstBlock to FirstPacked in world_chunk
1:30:54Reacquaint ourselves with FillUnpackedEntity()
📖
1:30:54Reacquaint ourselves with FillUnpackedEntity()
📖
1:30:54Reacquaint ourselves with FillUnpackedEntity()
📖
1:31:29Relieve FillUnpackedEntity() of taking the SimRegion
1:31:29Relieve FillUnpackedEntity() of taking the SimRegion
1:31:29Relieve FillUnpackedEntity() of taking the SimRegion
1:31:42Reacquaint ourselves with FillUnpackedEntity() (cont.)
📖
1:31:42Reacquaint ourselves with FillUnpackedEntity() (cont.)
📖
1:31:42Reacquaint ourselves with FillUnpackedEntity() (cont.)
📖
1:32:09Change UpdateAndRenderEntities(), not EnsureChunkIsUnpacked(), to call FillUnpackedEntity(), adding EntityFlag_Unpacked
1:32:09Change UpdateAndRenderEntities(), not EnsureChunkIsUnpacked(), to call FillUnpackedEntity(), adding EntityFlag_Unpacked
1:32:09Change UpdateAndRenderEntities(), not EnsureChunkIsUnpacked(), to call FillUnpackedEntity(), adding EntityFlag_Unpacked
1:35:16End our streaming with a plug of Molly Rocket's 25% Off Everything sale1
📖
1:35:16End our streaming with a plug of Molly Rocket's 25% Off Everything sale1
📖
1:35:16End our streaming with a plug of Molly Rocket's 25% Off Everything sale1
📖