[1:09:26][Traverse the world to our successfully generated stairwell hole][:"procedural generation" :run]
[1:10:10][Make GenerateRoom() create traversable stairs in their stairwells][:"procedural generation"]
[1:20:19][Try out our new stairwell][:"procedural generation" :run]
[1:20:46][Adjust our stairwell in GenerateRoom()][:"procedural generation"]
[1:22:17][Try out our new stairwell][:"procedural generation" :run]
[1:22:58][Make GenerateRoom() compute the depth of the stairs based on the tile depth][:"procedural generation"]
[1:23:54][Step in to GenerateRoom() to see what's going on with the stairs][:"procedural generation" :run]
[1:25:15][Check out our deeper stairwell in-game][:"procedural generation" :run]
[1:26:23][Investigate our inability to traverse deep stairs][:movement :research]
[1:29:14][Allow GetClosestTraversable() to pick locations further below us][:movement]
[1:31:12][Try to get a handle on our stairwell traversal][:movement :run]
[1:32:11][Toggle on the traversable :"debug visualisation" in UpdateAndRenderEntities()][:movement :programming :run]
[1:33:41][Make GetClosestTraversable() consider traversable tiles 0.5f below and above us][:movement]
[1:35:14][Make CreateWorld() place the hero at the forest entrance][:"procedural generation"]
[1:36:30][Try to launch the game with the hero placed at the forest entrance, and crash in GetHashFromID()][:"procedural generation" :run]
[1:40:13][Add a ClippedZ traversable_search_flag for CheckForJoiningPlayer() to pass to GetClosestTraversable()][:"procedural generation"]
[1:41:32][Find that we now start at the forest entrance][:"procedural generation" :run]
[1:41:42][Make ExecuteBrainHero() pass TraversableSearch_ClippedZ to GetClosestTraversable()][:movement]
[1:42:11][Find that we still cannot hop down the stairs][:movement :run]
[1:42:30][Increase the Z search area of GetClosestTraversable()][:movement]
[1:42:53][Try to perform looped live code editing to debug our stairwell traversal][:"input recording" :movement :run]
[1:44:00][Set the FrameArena to PlatformMemory_NotRestored to fix looped live code editing][:"input recording" :memory]
[1:45:52][Try looped live code editing][:"input recording" :run]
[1:46:13][Change the FrameArena to be cleared rather than ended][:memory :"input recording"]
[1:47:36][Try looped live code editing and crash when clearing the FrameArena][:"input recording" :memory :run]
[1:47:56][Refrain from setting FrameArena to PlatformMemory_NotRestored][:"input recording" :memory]
[1:48:23][Try looped live code editing and again crash when clearing the FrameArena][:"input recording" :memory :run]
[1:50:39][Investigate our looped live code editing bug][:"input recording" :memory :research]
[1:59:05][Make Win32AllocateMemory() and Win32DeallocateMemory() respect the PlatformMemory_NotRestored flag][:"input recording" :memory]
[2:00:49][Find that looped live code editing works, but that we are leaking :memory][:"input recording" :run]
[2:01:51][Change the FrameArena to be allocated separately][:"input recording" :memory]
[2:10:06][Find that looped live code editing works without leaking :memory][:"input recording" :run]
[2:10:56][Record a loop trying to traverse the stairs, and break into GetClosestTraversable()][:"input recording" :movement :run]
[2:19:03][Consider simplifying the problem][:movement :speech]
[2:19:43][Try adjusting the stair depth in GenerateRoom()][:movement :programming :run]
[2:21:56][Find that a stair height of 0.75f combined with our Z randomisation can prevent us from traversing them][:movement :programming :run]
[2:23:07][Find out what TileDim.z gets set to][:movement :"procedural generation" :research]
[2:26:39][Make GenerateRoom() and GetClosestTraversable() handle stairs with our understanding of the typical floor height][:movement :"procedural generation"]
[2:27:10][Traverse down our stairs successfully][:movement :"procedural generation" :run]
[2:27:38][Increase the NearClipPlane in UpdateAndRenderWorld()][:camera :programming :run]
[2:30:55][Change UpdateAndRenderWorld() to set the Fog and AlphaClip based on the world Z][:camera]
[2:31:43][Check out our fogging and alpha clipping][:camera :run]
[2:33:25][Adjust the :camera in GetCameraOffsetZForDim()]
[2:34:18][Try out our adjusted :camera][:run]
[2:34:47][Adjust the AlphaClip in UpdateAndRenderWorld() and toggle off the traversable points :"debug visualisation"][:camera]
[2:35:55][Consider that to be pretty good][:camera :run]
[2:36:53][Q&A][:speech]
[2:37:25][Disable the moonlight in ComputeLightPropagation()][:lighting]
[2:37:38][Traverse the orphanage without the moonlight][:lighting :run]
[2:38:17][@pa1les][Q: Hey [@cmuratori Casey], I'm trying to load the "Complete set of V0 HHAs" data set with the latest GitHub [~hero Handmade Hero] code, but it doesn't work. It runs in an access violation in Assets->Tags\[AssetTagIndex\].ID == Tag_BasicCategory. What I'm doing wrong?][:"asset system"]
[2:39:23][@kaervin][Q: What's the status on the RAD debugger?]
[2:39:34][@hexd0t][Q: The head just clipped into the wall, if I saw correctly. Do you plan on doing Z-buffer tricks to keep sprites from being hidden by 3D geometry?][:rendering]
[2:40:22][Temporarily make PushSprite() apply some Z-bias][:rendering]