Adding Stairs to the Generator
?
?

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
🗩
0:55Set up to continue working on the camera, scrolling and zooming
🏃
0:55Set up to continue working on the camera, scrolling and zooming
🏃
0:55Set up to continue working on the camera, scrolling and zooming
🏃
3:45Camera: Scrolling in large rooms
🗩
3:45Camera: Scrolling in large rooms
🗩
3:45Camera: Scrolling in large rooms
🗩
7:15Enable GetCameraOffsetZForDim() to follow the player in large rooms (17×13 tiles and up)
7:15Enable GetCameraOffsetZForDim() to follow the player in large rooms (17×13 tiles and up)
7:15Enable GetCameraOffsetZForDim() to follow the player in large rooms (17×13 tiles and up)
9:06Try out our scrolling camera
🏃
9:06Try out our scrolling camera
🏃
9:06Try out our scrolling camera
🏃
10:02Treat X and Y separately in UpdateCameraForEntityMovement() to make the camera scroll in long, thin corridors
10:02Treat X and Y separately in UpdateCameraForEntityMovement() to make the camera scroll in long, thin corridors
10:02Treat X and Y separately in UpdateCameraForEntityMovement() to make the camera scroll in long, thin corridors
11:26Gauge the width of our first corridor
🏃
11:26Gauge the width of our first corridor
🏃
11:26Gauge the width of our first corridor
🏃
11:45Adjust the camera distances in GetCameraOffsetZForDim()
11:45Adjust the camera distances in GetCameraOffsetZForDim()
11:45Adjust the camera distances in GetCameraOffsetZForDim()
13:35Try out our freely scrolling and room-focused camera
🏃
13:35Try out our freely scrolling and room-focused camera
🏃
13:35Try out our freely scrolling and room-focused camera
🏃
15:00Adjust the camera distances in GetCameraOffsetZForDim()
15:00Adjust the camera distances in GetCameraOffsetZForDim()
15:00Adjust the camera distances in GetCameraOffsetZForDim()
15:35Try out our freely scrolling and room-focused camera
🏃
15:35Try out our freely scrolling and room-focused camera
🏃
15:35Try out our freely scrolling and room-focused camera
🏃
15:55Prevent CreateOrphanage() from sticking a person in the main room
15:55Prevent CreateOrphanage() from sticking a person in the main room
15:55Prevent CreateOrphanage() from sticking a person in the main room
16:18Traverse the orphanage into the large main room and out to the forest
🏃
16:18Traverse the orphanage into the large main room and out to the forest
🏃
16:18Traverse the orphanage into the large main room and out to the forest
🏃
20:06Reduce the ray count to 1 in ComputeLightPropagation()
20:06Reduce the ray count to 1 in ComputeLightPropagation()
20:06Reduce the ray count to 1 in ComputeLightPropagation()
20:22Traverse the orphanage discotheque
🏃
20:22Traverse the orphanage discotheque
🏃
20:22Traverse the orphanage discotheque
🏃
20:46Increase the ray count to 8 in ComputeLightPropagation()
20:46Increase the ray count to 8 in ComputeLightPropagation()
20:46Increase the ray count to 8 in ComputeLightPropagation()
20:50Traverse the orphanage, noting that we'll need a further-reaching lighting solution
🏃
20:50Traverse the orphanage, noting that we'll need a further-reaching lighting solution
🏃
20:50Traverse the orphanage, noting that we'll need a further-reaching lighting solution
🏃
21:31World generation: Stairwells
🗩
21:31World generation: Stairwells
🗩
21:31World generation: Stairwells
🗩
24:54Allow GenerateRoom() to colour-code our entities
24:54Allow GenerateRoom() to colour-code our entities
24:54Allow GenerateRoom() to colour-code our entities
25:18Check out our room connections and stairwell locations
🏃
25:18Check out our room connections and stairwell locations
🏃
25:18Check out our room connections and stairwell locations
🏃
26:50Make PlaceRoomAlongEdge() expand the area of stairwells, introducing AddRadiusTo()
26:50Make PlaceRoomAlongEdge() expand the area of stairwells, introducing AddRadiusTo()
26:50Make PlaceRoomAlongEdge() expand the area of stairwells, introducing AddRadiusTo()
31:36Check out our expanded stairwell
🏃
31:36Check out our expanded stairwell
🏃
31:36Check out our expanded stairwell
🏃
32:37Articulating the direction of stairwells
📖
32:37Articulating the direction of stairwells
📖
32:37Articulating the direction of stairwells
📖
35:50Augment gen_room_connection with PlacedDirection for PlaceRoom() to set, introducing GetOtherSide()
35:50Augment gen_room_connection with PlacedDirection for PlaceRoom() to set, introducing GetOtherSide()
35:50Augment gen_room_connection with PlacedDirection for PlaceRoom() to set, introducing GetOtherSide()
40:26Introduce GetRoomConnectionTo()
40:26Introduce GetRoomConnectionTo()
40:26Introduce GetRoomConnectionTo()
47:44Set up GenerateRoom() to handle stairwells
47:44Set up GenerateRoom() to handle stairwells
47:44Set up GenerateRoom() to handle stairwells
48:40Traverse the orphanage to see that our stairwell generation didn't work
🏃
48:40Traverse the orphanage to see that our stairwell generation didn't work
🏃
48:40Traverse the orphanage to see that our stairwell generation didn't work
🏃
49:12Add Save / Load Startup Location buttons to our UI, introducing CameraEditor()
49:12Add Save / Load Startup Location buttons to our UI, introducing CameraEditor()
49:12Add Save / Load Startup Location buttons to our UI, introducing CameraEditor()
53:38Reorganise the asset editor UI
53:38Reorganise the asset editor UI
53:38Reorganise the asset editor UI
57:10Check out our camera UI
🏃
57:10Check out our camera UI
🏃
57:10Check out our camera UI
🏃
57:56Scan through our stairwell generation code
📖
57:56Scan through our stairwell generation code
📖
57:56Scan through our stairwell generation code
📖
59:25Step in to PlaceRoomAlongEdge() in the stairwell placement cases
🏃
59:25Step in to PlaceRoomAlongEdge() in the stairwell placement cases
🏃
59:25Step in to PlaceRoomAlongEdge() in the stairwell placement cases
🏃
1:01:35Move the stairwell connection code from PlaceRoom() to PlaceRoomAlongEdge()
1:01:35Move the stairwell connection code from PlaceRoom() to PlaceRoomAlongEdge()
1:01:35Move the stairwell connection code from PlaceRoom() to PlaceRoomAlongEdge()
1:04:38Investigate the Intersect() call in PlaceRoomAlongEdge()
📖
1:04:38Investigate the Intersect() call in PlaceRoomAlongEdge()
📖
1:04:38Investigate the Intersect() call in PlaceRoomAlongEdge()
📖
1:07:15Make PlaceRoomAlongEdge() generate room connections
1:07:15Make PlaceRoomAlongEdge() generate room connections
1:07:15Make PlaceRoomAlongEdge() generate room connections
1:09:26Traverse the world to our successfully generated stairwell hole
🏃
1:09:26Traverse the world to our successfully generated stairwell hole
🏃
1:09:26Traverse the world to our successfully generated stairwell hole
🏃
1:10:10Make GenerateRoom() create traversable stairs in their stairwells
1:10:10Make GenerateRoom() create traversable stairs in their stairwells
1:10:10Make GenerateRoom() create traversable stairs in their stairwells
1:20:19Try out our new stairwell
🏃
1:20:19Try out our new stairwell
🏃
1:20:19Try out our new stairwell
🏃
1:20:46Adjust our stairwell in GenerateRoom()
1:20:46Adjust our stairwell in GenerateRoom()
1:20:46Adjust our stairwell in GenerateRoom()
1:22:17Try out our new stairwell
🏃
1:22:17Try out our new stairwell
🏃
1:22:17Try out our new stairwell
🏃
1:22:58Make GenerateRoom() compute the depth of the stairs based on the tile depth
1:22:58Make GenerateRoom() compute the depth of the stairs based on the tile depth
1:22:58Make GenerateRoom() compute the depth of the stairs based on the tile depth
1:23:54Step in to GenerateRoom() to see what's going on with the stairs
🏃
1:23:54Step in to GenerateRoom() to see what's going on with the stairs
🏃
1:23:54Step in to GenerateRoom() to see what's going on with the stairs
🏃
1:25:15Check out our deeper stairwell in-game
🏃
1:25:15Check out our deeper stairwell in-game
🏃
1:25:15Check out our deeper stairwell in-game
🏃
1:26:23Investigate our inability to traverse deep stairs
📖
1:26:23Investigate our inability to traverse deep stairs
📖
1:26:23Investigate our inability to traverse deep stairs
📖
1:29:14Allow GetClosestTraversable() to pick locations further below us
1:29:14Allow GetClosestTraversable() to pick locations further below us
1:29:14Allow GetClosestTraversable() to pick locations further below us
1:31:12Try to get a handle on our stairwell traversal
🏃
1:31:12Try to get a handle on our stairwell traversal
🏃
1:31:12Try to get a handle on our stairwell traversal
🏃
1:32:11Toggle on the traversable debug visualisation in UpdateAndRenderEntities()
🏃
🖮
1:32:11Toggle on the traversable debug visualisation in UpdateAndRenderEntities()
🏃
🖮
1:32:11Toggle on the traversable debug visualisation in UpdateAndRenderEntities()
🏃
🖮
1:33:41Make GetClosestTraversable() consider traversable tiles 0.5f below and above us
1:33:41Make GetClosestTraversable() consider traversable tiles 0.5f below and above us
1:33:41Make GetClosestTraversable() consider traversable tiles 0.5f below and above us
1:35:14Make CreateWorld() place the hero at the forest entrance
1:35:14Make CreateWorld() place the hero at the forest entrance
1:35:14Make CreateWorld() place the hero at the forest entrance
1:36:30Try to launch the game with the hero placed at the forest entrance, and crash in GetHashFromID()
🏃
1:36:30Try to launch the game with the hero placed at the forest entrance, and crash in GetHashFromID()
🏃
1:36:30Try to launch the game with the hero placed at the forest entrance, and crash in GetHashFromID()
🏃
1:40:13Add a ClippedZ traversable_search_flag for CheckForJoiningPlayer() to pass to GetClosestTraversable()
1:40:13Add a ClippedZ traversable_search_flag for CheckForJoiningPlayer() to pass to GetClosestTraversable()
1:40:13Add a ClippedZ traversable_search_flag for CheckForJoiningPlayer() to pass to GetClosestTraversable()
1:41:32Find that we now start at the forest entrance
🏃
1:41:32Find that we now start at the forest entrance
🏃
1:41:32Find that we now start at the forest entrance
🏃
1:41:42Make ExecuteBrainHero() pass TraversableSearch_ClippedZ to GetClosestTraversable()
1:41:42Make ExecuteBrainHero() pass TraversableSearch_ClippedZ to GetClosestTraversable()
1:41:42Make ExecuteBrainHero() pass TraversableSearch_ClippedZ to GetClosestTraversable()
1:42:11Find that we still cannot hop down the stairs
🏃
1:42:11Find that we still cannot hop down the stairs
🏃
1:42:11Find that we still cannot hop down the stairs
🏃
1:42:30Increase the Z search area of GetClosestTraversable()
1:42:30Increase the Z search area of GetClosestTraversable()
1:42:30Increase the Z search area of GetClosestTraversable()
1:42:53Try to perform looped live code editing to debug our stairwell traversal
🏃
1:42:53Try to perform looped live code editing to debug our stairwell traversal
🏃
1:42:53Try to perform looped live code editing to debug our stairwell traversal
🏃
1:44:00Set the FrameArena to PlatformMemory_NotRestored to fix looped live code editing
1:44:00Set the FrameArena to PlatformMemory_NotRestored to fix looped live code editing
1:44:00Set the FrameArena to PlatformMemory_NotRestored to fix looped live code editing
1:45:52Try looped live code editing
🏃
1:45:52Try looped live code editing
🏃
1:45:52Try looped live code editing
🏃
1:46:13Change the FrameArena to be cleared rather than ended
1:46:13Change the FrameArena to be cleared rather than ended
1:46:13Change the FrameArena to be cleared rather than ended
1:47:36Try looped live code editing and crash when clearing the FrameArena
🏃
1:47:36Try looped live code editing and crash when clearing the FrameArena
🏃
1:47:36Try looped live code editing and crash when clearing the FrameArena
🏃
1:47:56Refrain from setting FrameArena to PlatformMemory_NotRestored
1:47:56Refrain from setting FrameArena to PlatformMemory_NotRestored
1:47:56Refrain from setting FrameArena to PlatformMemory_NotRestored
1:48:23Try looped live code editing and again crash when clearing the FrameArena
🏃
1:48:23Try looped live code editing and again crash when clearing the FrameArena
🏃
1:48:23Try looped live code editing and again crash when clearing the FrameArena
🏃
1:50:39Investigate our looped live code editing bug
📖
1:50:39Investigate our looped live code editing bug
📖
1:50:39Investigate our looped live code editing bug
📖
1:59:05Make Win32AllocateMemory() and Win32DeallocateMemory() respect the PlatformMemory_NotRestored flag
1:59:05Make Win32AllocateMemory() and Win32DeallocateMemory() respect the PlatformMemory_NotRestored flag
1:59:05Make Win32AllocateMemory() and Win32DeallocateMemory() respect the PlatformMemory_NotRestored flag
2:00:49Find that looped live code editing works, but that we are leaking memory
🏃
2:00:49Find that looped live code editing works, but that we are leaking memory
🏃
2:00:49Find that looped live code editing works, but that we are leaking memory
🏃
2:01:51Change the FrameArena to be allocated separately
2:01:51Change the FrameArena to be allocated separately
2:01:51Change the FrameArena to be allocated separately
2:10:06Find that looped live code editing works without leaking memory
🏃
2:10:06Find that looped live code editing works without leaking memory
🏃
2:10:06Find that looped live code editing works without leaking memory
🏃
2:10:56Record a loop trying to traverse the stairs, and break into GetClosestTraversable()
🏃
2:10:56Record a loop trying to traverse the stairs, and break into GetClosestTraversable()
🏃
2:10:56Record a loop trying to traverse the stairs, and break into GetClosestTraversable()
🏃
2:19:03Consider simplifying the problem
🗩
2:19:03Consider simplifying the problem
🗩
2:19:03Consider simplifying the problem
🗩
2:19:43Try adjusting the stair depth in GenerateRoom()
🏃
🖮
2:19:43Try adjusting the stair depth in GenerateRoom()
🏃
🖮
2:19:43Try adjusting the stair depth in GenerateRoom()
🏃
🖮
2:21:56Find that a stair height of 0.75f combined with our Z randomisation can prevent us from traversing them
🏃
🖮
2:21:56Find that a stair height of 0.75f combined with our Z randomisation can prevent us from traversing them
🏃
🖮
2:21:56Find that a stair height of 0.75f combined with our Z randomisation can prevent us from traversing them
🏃
🖮
2:23:07Find out what TileDim.z gets set to
📖
2:23:07Find out what TileDim.z gets set to
📖
2:23:07Find out what TileDim.z gets set to
📖
2:26:39Make GenerateRoom() and GetClosestTraversable() handle stairs with our understanding of the typical floor height
2:26:39Make GenerateRoom() and GetClosestTraversable() handle stairs with our understanding of the typical floor height
2:26:39Make GenerateRoom() and GetClosestTraversable() handle stairs with our understanding of the typical floor height
2:27:10Traverse down our stairs successfully
🏃
2:27:10Traverse down our stairs successfully
🏃
2:27:10Traverse down our stairs successfully
🏃
2:27:38Increase the NearClipPlane in UpdateAndRenderWorld()
🏃
🖮
2:27:38Increase the NearClipPlane in UpdateAndRenderWorld()
🏃
🖮
2:27:38Increase the NearClipPlane in UpdateAndRenderWorld()
🏃
🖮
2:30:55Change UpdateAndRenderWorld() to set the Fog and AlphaClip based on the world Z
2:30:55Change UpdateAndRenderWorld() to set the Fog and AlphaClip based on the world Z
2:30:55Change UpdateAndRenderWorld() to set the Fog and AlphaClip based on the world Z
2:31:43Check out our fogging and alpha clipping
🏃
2:31:43Check out our fogging and alpha clipping
🏃
2:31:43Check out our fogging and alpha clipping
🏃
2:33:25Adjust the camera in GetCameraOffsetZForDim()
2:33:25Adjust the camera in GetCameraOffsetZForDim()
2:33:25Adjust the camera in GetCameraOffsetZForDim()
2:34:18Try out our adjusted camera
🏃
2:34:18Try out our adjusted camera
🏃
2:34:18Try out our adjusted camera
🏃
2:34:47Adjust the AlphaClip in UpdateAndRenderWorld() and toggle off the traversable points debug visualisation
2:34:47Adjust the AlphaClip in UpdateAndRenderWorld() and toggle off the traversable points debug visualisation
2:34:47Adjust the AlphaClip in UpdateAndRenderWorld() and toggle off the traversable points debug visualisation
2:35:55Consider that to be pretty good
🏃
2:35:55Consider that to be pretty good
🏃
2:35:55Consider that to be pretty good
🏃
2:36:53Q&A
🗩
2:36:53Q&A
🗩
2:36:53Q&A
🗩
2:37:25Disable the moonlight in ComputeLightPropagation()
2:37:25Disable the moonlight in ComputeLightPropagation()
2:37:25Disable the moonlight in ComputeLightPropagation()
2:37:38Traverse the orphanage without the moonlight
🏃
2:37:38Traverse the orphanage without the moonlight
🏃
2:37:38Traverse the orphanage without the moonlight
🏃
2:38:17pa1les Q: Hey Casey, I'm trying to load the "Complete set of V0 HHAs" data set with the latest GitHub 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?
🗪
2:38:17pa1les Q: Hey Casey, I'm trying to load the "Complete set of V0 HHAs" data set with the latest GitHub 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?
🗪
2:38:17pa1les Q: Hey Casey, I'm trying to load the "Complete set of V0 HHAs" data set with the latest GitHub 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?
🗪
2:39:23kaervin Q: What's the status on the RAD debugger?
🗪
2:39:23kaervin Q: What's the status on the RAD debugger?
🗪
2:39:23kaervin Q: What's the status on the RAD debugger?
🗪
2:39:34hexd0t 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?
🗪
2:39:34hexd0t 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?
🗪
2:39:34hexd0t 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?
🗪
2:40:22Temporarily make PushSprite() apply some Z-bias
2:40:22Temporarily make PushSprite() apply some Z-bias
2:40:22Temporarily make PushSprite() apply some Z-bias
2:40:34Show our Z-bias situation in-game
🏃
2:40:34Show our Z-bias situation in-game
🏃
2:40:34Show our Z-bias situation in-game
🏃
2:41:38Crash in BeginWorldChange()
🏃
2:41:38Crash in BeginWorldChange()
🏃
2:41:38Crash in BeginWorldChange()
🏃
2:42:03Increase the size of our entity_hash array
2:42:03Increase the size of our entity_hash array
2:42:03Increase the size of our entity_hash array
2:42:54pythno Q: Can you explain the difference between HeapAlloc1 and VirtualAlloc2 and for what scenario they are appropriate?
🗪
2:42:54pythno Q: Can you explain the difference between HeapAlloc1 and VirtualAlloc2 and for what scenario they are appropriate?
🗪
2:42:54pythno Q: Can you explain the difference between HeapAlloc1 and VirtualAlloc2 and for what scenario they are appropriate?
🗪
2:46:26messatsugoshoryuu Q: What kind of allocation do you use for assets (stack, heap, etc)?
🗪
2:46:26messatsugoshoryuu Q: What kind of allocation do you use for assets (stack, heap, etc)?
🗪
2:46:26messatsugoshoryuu Q: What kind of allocation do you use for assets (stack, heap, etc)?
🗪
2:47:000lpbm Q: What does the "OnLamp" variable represent?
🗪
2:47:000lpbm Q: What does the "OnLamp" variable represent?
🗪
2:47:000lpbm Q: What does the "OnLamp" variable represent?
🗪
2:47:20Temporarily enable the corner lamps
🏃
🖮
2:47:20Temporarily enable the corner lamps
🏃
🖮
2:47:20Temporarily enable the corner lamps
🏃
🖮
2:48:29Close it down
🗩
2:48:29Close it down
🗩
2:48:29Close it down
🗩