Adding Ground Cover
?
?

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
🗩
2:26Consider the need to speed up our lighting solution, determining to generate ground cover to exercise the entity system's new caching
🏃
2:26Consider the need to speed up our lighting solution, determining to generate ground cover to exercise the entity system's new caching
🏃
2:26Consider the need to speed up our lighting solution, determining to generate ground cover to exercise the entity system's new caching
🏃
7:13Temporarily reduce the MaxUnpackedEntityCount in CreateWorld()
7:13Temporarily reduce the MaxUnpackedEntityCount in CreateWorld()
7:13Temporarily reduce the MaxUnpackedEntityCount in CreateWorld()
7:47Take a look at the smaller memory footprint of our entity system
🏃
7:47Take a look at the smaller memory footprint of our entity system
🏃
7:47Take a look at the smaller memory footprint of our entity system
🏃
8:40Revert our MaxUnpackedEntityCount in CreateWorld()
8:40Revert our MaxUnpackedEntityCount in CreateWorld()
8:40Revert our MaxUnpackedEntityCount in CreateWorld()
9:34Determine to produce ground cover to page in and out from the cache
🏃
9:34Determine to produce ground cover to page in and out from the cache
🏃
9:34Determine to produce ground cover to page in and out from the cache
🏃
9:57Organise the entity struct with the disposable Lighting and Cover at the bottom, after a DiscardEverythingAfter value
9:57Organise the entity struct with the disposable Lighting and Cover at the bottom, after a DiscardEverythingAfter value
9:57Organise the entity struct with the disposable Lighting and Cover at the bottom, after a DiscardEverythingAfter value
13:50Set up to discard the Lighting and Cover when packing
🏃
13:50Set up to discard the Lighting and Cover when packing
🏃
13:50Set up to discard the Lighting and Cover when packing
🏃
14:26Set up to enable EnsureRegionIsUnpacked() to stream our minimally-stored entities into packed storage, based on the PNG reader
📖
14:26Set up to enable EnsureRegionIsUnpacked() to stream our minimally-stored entities into packed storage, based on the PNG reader
📖
14:26Set up to enable EnsureRegionIsUnpacked() to stream our minimally-stored entities into packed storage, based on the PNG reader
📖
18:10Enable EnsureRegionIsUnpacked() to stream our minimally-stored entities into packed storage
18:10Enable EnsureRegionIsUnpacked() to stream our minimally-stored entities into packed storage
18:10Enable EnsureRegionIsUnpacked() to stream our minimally-stored entities into packed storage
28:47Check out the smaller memory footprint of our packed entities
🏃
28:47Check out the smaller memory footprint of our packed entities
🏃
28:47Check out the smaller memory footprint of our packed entities
🏃
30:19Introduce FillUnpackedEntity()
30:19Introduce FillUnpackedEntity()
30:19Introduce FillUnpackedEntity()
32:15Plug the grass distribution solution for The Witness1
📖
32:15Plug the grass distribution solution for The Witness1
📖
32:15Plug the grass distribution solution for The Witness1
📖
33:45Implement FillUnpackedEntity(), introducing a ground_cover_spec struct for entity to contain
33:45Implement FillUnpackedEntity(), introducing a ground_cover_spec struct for entity to contain
33:45Implement FillUnpackedEntity(), introducing a ground_cover_spec struct for entity to contain
47:17A few words on white and blue noise
🗩
47:17A few words on white and blue noise
🗩
47:17A few words on white and blue noise
🗩
49:04Enable FillUnpackedEntity() to distribute grass in a white noise "pattern", introducing RandomSeedOffset() and PointFromUVW()
49:04Enable FillUnpackedEntity() to distribute grass in a white noise "pattern", introducing RandomSeedOffset() and PointFromUVW()
49:04Enable FillUnpackedEntity() to distribute grass in a white noise "pattern", introducing RandomSeedOffset() and PointFromUVW()
1:05:31A few words on API design and delivering assets to the game in a way it wants to use them
🗩
1:05:31A few words on API design and delivering assets to the game in a way it wants to use them
🗩
1:05:31A few words on API design and delivering assets to the game in a way it wants to use them
🗩
1:06:36Fix compile errors, passing the GameState->Assets through to FillUnpackedEntity(), and augmenting the world_generator with Assets
1:06:36Fix compile errors, passing the GameState->Assets through to FillUnpackedEntity(), and augmenting the world_generator with Assets
1:06:36Fix compile errors, passing the GameState->Assets through to FillUnpackedEntity(), and augmenting the world_generator with Assets
1:13:40Pack all entities for dispersal on initialisation, introducing ClearUnpackedEntityCache() and PackEntity()
1:13:40Pack all entities for dispersal on initialisation, introducing ClearUnpackedEntityCache() and PackEntity()
1:13:40Pack all entities for dispersal on initialisation, introducing ClearUnpackedEntityCache() and PackEntity()
1:23:15Crash on EndWorldGen()
🏃
1:23:15Crash on EndWorldGen()
🏃
1:23:15Crash on EndWorldGen()
🏃
1:23:57Investigate our crash on the ClearUnpackedEntityCache() call in EndWorldGen()
🏃
1:23:57Investigate our crash on the ClearUnpackedEntityCache() call in EndWorldGen()
🏃
1:23:57Investigate our crash on the ClearUnpackedEntityCache() call in EndWorldGen()
🏃
1:24:43Fix EndWorldGen() to call ClearUnpackedEntityCache() before clearing our memory
1:24:43Fix EndWorldGen() to call ClearUnpackedEntityCache() before clearing our memory
1:24:43Fix EndWorldGen() to call ClearUnpackedEntityCache() before clearing our memory
1:24:54Check out our profiler to see that everything is as expected
🏃
1:24:54Check out our profiler to see that everything is as expected
🏃
1:24:54Check out our profiler to see that everything is as expected
🏃
1:26:16Enable GenerateRoom() to request ground cover for outdoor areas
1:26:16Enable GenerateRoom() to request ground cover for outdoor areas
1:26:16Enable GenerateRoom() to request ground cover for outdoor areas
1:27:27See 0 calls to FillUnpackedEntity()
🏃
1:27:27See 0 calls to FillUnpackedEntity()
🏃
1:27:27See 0 calls to FillUnpackedEntity()
🏃
1:28:17Introduce DrawGroundCover() for UpdateAndRenderEntities() to call, fixing FillUnpackedEntity() to keep ground cover affixed to entities, e.g. moving platforms
1:28:17Introduce DrawGroundCover() for UpdateAndRenderEntities() to call, fixing FillUnpackedEntity() to keep ground cover affixed to entities, e.g. moving platforms
1:28:17Introduce DrawGroundCover() for UpdateAndRenderEntities() to call, fixing FillUnpackedEntity() to keep ground cover affixed to entities, e.g. moving platforms
1:38:06See no ground cover
🏃
1:38:06See no ground cover
🏃
1:38:06See no ground cover
🏃
1:38:34Break in to FillUnpackedEntity()
🏃
1:38:34Break in to FillUnpackedEntity()
🏃
1:38:34Break in to FillUnpackedEntity()
🏃
1:39:25Fix FillUnpackedEntity() to set the Entity->GroundCoverCount
1:39:25Fix FillUnpackedEntity() to set the Entity->GroundCoverCount
1:39:25Fix FillUnpackedEntity() to set the Entity->GroundCoverCount
1:40:04Break in to FillUnpackedEntity() to see that our ground cover's P and the CollisionVolume of its containing entity are unset
🏃
1:40:04Break in to FillUnpackedEntity() to see that our ground cover's P and the CollisionVolume of its containing entity are unset
🏃
1:40:04Break in to FillUnpackedEntity() to see that our ground cover's P and the CollisionVolume of its containing entity are unset
🏃
1:42:01Enable GenerateRoom() to produce collision volumes for all floor entities
1:42:01Enable GenerateRoom() to produce collision volumes for all floor entities
1:42:01Enable GenerateRoom() to produce collision volumes for all floor entities
1:44:30Break in to FillUnpackedEntity() to see that our ground cover's P is now set
🏃
1:44:30Break in to FillUnpackedEntity() to see that our ground cover's P is now set
🏃
1:44:30Break in to FillUnpackedEntity() to see that our ground cover's P is now set
🏃
1:45:04Fix DrawGroundCover() to offset the sprite by the entity's position
1:45:04Fix DrawGroundCover() to offset the sprite by the entity's position
1:45:04Fix DrawGroundCover() to offset the sprite by the entity's position
1:46:29Step in to DrawGroundCover() to see pretty reasonable values for our Sprite
🏃
1:46:29Step in to DrawGroundCover() to see pretty reasonable values for our Sprite
🏃
1:46:29Step in to DrawGroundCover() to see pretty reasonable values for our Sprite
🏃
1:49:22Enable GenerateApron() to request ground cover
1:49:22Enable GenerateApron() to request ground cover
1:49:22Enable GenerateApron() to request ground cover
1:49:54See grass on our apron
🏃
1:49:54See grass on our apron
🏃
1:49:54See grass on our apron
🏃
1:50:10Fix DrawGroundCover() to offset the sprite by the ground cover's position
1:50:10Fix DrawGroundCover() to offset the sprite by the ground cover's position
1:50:10Fix DrawGroundCover() to offset the sprite by the ground cover's position
1:51:08See our lush ground cover
🏃
1:51:08See our lush ground cover
🏃
1:51:08See our lush ground cover
🏃
1:51:46Scale down the ground cover to 0.25f in UpdateAndRenderEntities() and make GenerateRoom() produce collision volumes the same way GenerateApron() does it
1:51:46Scale down the ground cover to 0.25f in UpdateAndRenderEntities() and make GenerateRoom() produce collision volumes the same way GenerateApron() does it
1:51:46Scale down the ground cover to 0.25f in UpdateAndRenderEntities() and make GenerateRoom() produce collision volumes the same way GenerateApron() does it
1:54:18Note that we are not offsetting the ground cover's collision volume by the floor tile's stagger
🏃
1:54:18Note that we are not offsetting the ground cover's collision volume by the floor tile's stagger
🏃
1:54:18Note that we are not offsetting the ground cover's collision volume by the floor tile's stagger
🏃
1:54:35Fix GenerateRoom() to offset the ground cover's collision volume by the floor tile's stagger
1:54:35Fix GenerateRoom() to offset the ground cover's collision volume by the floor tile's stagger
1:54:35Fix GenerateRoom() to offset the ground cover's collision volume by the floor tile's stagger
1:56:39Find that we are sunken into the ground
🏃
1:56:39Find that we are sunken into the ground
🏃
1:56:39Find that we are sunken into the ground
🏃
1:56:55Fix GenerateRoom() to correctly set the traversable position
1:56:55Fix GenerateRoom() to correctly set the traversable position
1:56:55Fix GenerateRoom() to correctly set the traversable position
2:01:04Traverse the orphanage and surrounding areas
🏃
2:01:04Traverse the orphanage and surrounding areas
🏃
2:01:04Traverse the orphanage and surrounding areas
🏃
2:01:40Scale up the ground cover to 0.5f in UpdateAndRenderEntities() and increase their density in GenerateRoom()
2:01:40Scale up the ground cover to 0.5f in UpdateAndRenderEntities() and increase their density in GenerateRoom()
2:01:40Scale up the ground cover to 0.5f in UpdateAndRenderEntities() and increase their density in GenerateRoom()
2:02:21Admire our (unlit) ground cover
🏃
2:02:21Admire our (unlit) ground cover
🏃
2:02:21Admire our (unlit) ground cover
🏃
2:03:23Scale down the ground cover to 0.3f in UpdateAndRenderEntities()
2:03:23Scale down the ground cover to 0.3f in UpdateAndRenderEntities()
2:03:23Scale down the ground cover to 0.3f in UpdateAndRenderEntities()
2:03:42Admire our correctly sized ground cover
🏃
2:03:42Admire our correctly sized ground cover
🏃
2:03:42Admire our correctly sized ground cover
🏃
2:04:19Max out the density of our ground cover in GenerateApron()
2:04:19Max out the density of our ground cover in GenerateApron()
2:04:19Max out the density of our ground cover in GenerateApron()
2:04:31Q&A
🗩
2:04:31Q&A
🗩
2:04:31Q&A
🗩
2:04:45Gauge the performance of our ground cover rendering
🏃
2:04:45Gauge the performance of our ground cover rendering
🏃
2:04:45Gauge the performance of our ground cover rendering
🏃
2:06:01longboolean Q: Do you intend cover to be used for things like footprints, and do you want cover to be interacted with? Like grass shifting as you walk through it to show a path where someone has walked
🗪
2:06:01longboolean Q: Do you intend cover to be used for things like footprints, and do you want cover to be interacted with? Like grass shifting as you walk through it to show a path where someone has walked
🗪
2:06:01longboolean Q: Do you intend cover to be used for things like footprints, and do you want cover to be interacted with? Like grass shifting as you walk through it to show a path where someone has walked
🗪
2:06:40Plant flowers everywhere we hop, augmenting the ground_cover_spec with two Reserved values and introducing StompOnEntity() for UpdateAndRenderEntities() to call
2:06:40Plant flowers everywhere we hop, augmenting the ground_cover_spec with two Reserved values and introducing StompOnEntity() for UpdateAndRenderEntities() to call
2:06:40Plant flowers everywhere we hop, augmenting the ground_cover_spec with two Reserved values and introducing StompOnEntity() for UpdateAndRenderEntities() to call
2:14:00Plant flowers
🏃
2:14:00Plant flowers
🏃
2:14:00Plant flowers
🏃
2:14:21Increase the ENTITY_MAX_GROUND_COVER to provide more space for our planted flowers
2:14:21Increase the ENTITY_MAX_GROUND_COVER to provide more space for our planted flowers
2:14:21Increase the ENTITY_MAX_GROUND_COVER to provide more space for our planted flowers
2:14:41Plant flowers outdoors and in the dungeon
🏃
2:14:41Plant flowers outdoors and in the dungeon
🏃
2:14:41Plant flowers outdoors and in the dungeon
🏃
2:16:04printf_armin Q: Will there be a sort of transition from the doors to the outside? I suspect yes but curious of how?
🗪
2:16:04printf_armin Q: Will there be a sort of transition from the doors to the outside? I suspect yes but curious of how?
🗪
2:16:04printf_armin Q: Will there be a sort of transition from the doors to the outside? I suspect yes but curious of how?
🗪
2:16:54printf_armin Q: Of the grass?
🗪
2:16:54printf_armin Q: Of the grass?
🗪
2:16:54printf_armin Q: Of the grass?
🗪
2:17:41staythirsty90 Q: If you step on a tile more than once do the flowers stack?
🗪
2:17:41staythirsty90 Q: If you step on a tile more than once do the flowers stack?
🗪
2:17:41staythirsty90 Q: If you step on a tile more than once do the flowers stack?
🗪
2:17:57Enable StompOnEntity() to plant more flowers on each stomp
2:17:57Enable StompOnEntity() to plant more flowers on each stomp
2:17:57Enable StompOnEntity() to plant more flowers on each stomp
2:18:19Plant flowers until we wrap the 8-bit density count
🏃
2:18:19Plant flowers until we wrap the 8-bit density count
🏃
2:18:19Plant flowers until we wrap the 8-bit density count
🏃
2:21:33Toggle off the flower planting in StompOnEntity()
2:21:33Toggle off the flower planting in StompOnEntity()
2:21:33Toggle off the flower planting in StompOnEntity()
2:22:00We're done
🗩
2:22:00We're done
🗩
2:22:00We're done
🗩