[video output=day077 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Entity Ground Points" vod_platform=youtube id=9IGZGfVvc0s annotator=dspecht annotator=Miblo]
[2:00][Recap the bug from yesterday]
[4:02][Blackboard: The discrepancy between the Entities' base points and the Ground position]
[5:30][Look at how these concepts are currently specified]
[7:06][handmade_sim_region.cpp: Add 0.5*Entity->Dim.Z to Ground]
[7:31][Run the game and find that we're not quite right]
[8:46][Debugger: Step into the code where Ground is calculated]
[10:05][handmade.cpp: Look at the current drawing code]
[15:14][Introduce EntityBaseP]
[17:11][Run the game and find that we seem to have solved the problem]
[18:11][handmade.cpp: Add two rectangles to the Stairwell]
[20:00][Work on the ZFudge]
[22:30][Check out the effects on the Familiar]
[23:06][MetersToPixels is getting pre-multiplied by OffsetZ]
[24:17][Run the game and see it looking more correct]
[25:14][handmade.cpp: Don't bother adding OffsetZ]
[25:54][Blackboard: What the ZFudge is doing]
[28:11][handmade_sim_region.cpp: Look at SpeculativeCollide]
[28:53][Introduce GetEntityGroundPoint]
[30:18][Use GetEntityGroundPoint to set EntityBaseP and Ground]
[31:29][Blackboard: Computing the Ground displacement]
[32:41][Run the game and find we can now go upstairs]
[33:09][handmade.cpp: Make stairways extend above the ground]
[34:36][Blackboard: Understanding StepHeight]
[36:58][handmade_sim_region.h: Add WalkableHeight to sim_entity]
[38:01][handmade.cpp: Use that WalkableHeight in SpeculativeCollide]
[38:37][Run the game and try the stairs]
[39:19][handmade_entity.h: Introduce GetStairGround]
[44:01][handmade_sim_region.cpp: Convert HandleOverlap and SpeculativeCollide to use GetStairGround]
[46:55][Run the game and find that that fixed our problem]
[47:28][handmade_sim_region.cpp: SpeculativeCollide needs to know whether we're coming on to or moving off a stairwell]
[50:41][Q&A][:speech]
[52:15][Q: Do you use Clang on Linux?]
[52:48][Q: What is the best way to learn C++ from absolute scratch on my own?]
[53:56][Q: Do you know anything about Voxpel programming?]
[54:35][Q: What versioning and revision control system do you use?]
[54:43][Q: Are you planning on replacing the stairs in your house with ramps?]
[56:16][Q: How did you get the right side of your Visual Studio debug view to be split vertically?]
[57:49][Q: Why do you use so many magic numbers in your code?]
[58:08][Q: What do you think about friend classes?]
[58:30][Q: Is this turning into reverse Doom? Almost complete 3D rendered in 2D, instead of 2D rendered in 3D]
[1:00:30][Q: Is the top layer going to fade in if you go up the stairs into a closed room?]
[1:01:01][Q: When do you plan on doing Z-sorting with the sprites?]
[1:01:16][Q: Why do you use so many magic numbers in your code? Why so many #defines?]
[1:02:13][Q: Are you planning to use advanced shader techniques? If so, which ones?]
[1:02:40][Q: Looks like I skipped an episode in which you made a lower level visible from a higher one. Do you remember when did it happen? Is the floor going to remain transparent in the future?]
[1:03:43][Q: My previous question was on topic. Missed it, maybe]
[1:04:01][Q: Correct me if I'm wrong, but it seems early on we started with a bottom-centre position for collision detection on our hero. We moved to a centre position which was offset in both X and Y. Now it seems we use a centre X and Y and are continuing to compute the bottom-centre position. Do you feel this needs to be consolidated in any way?]
[1:05:50][Q: What's with the floating head in the middle of the forest?]
[1:06:14][Q: Could you explain the line ControlledHeroes\[ArrayCount(((game_input *)0)->Controllers)\]; in handmade.h because it looks like you're casting a null pointer and referencing]
[1:08:50][Q: To workaround the Mischief zoom issue, how about you find the zoom level you want then draw four dots, one in each corner, then when you come back you can align those dots back to the corners]
[1:09:10][@Pseudonym73][You could use C++'s decltype or typeof to find that ArrayCount]
[1:11:11][@mmozeiko][Could you do it: ArrayCount(game_input::Controllers)?]
[1:11:40][Q: declval is what you want]
[1:13:24][Q: Why do you plan on using OpenGL or DirectX for hardware acceleration? Is that something that you have to have knowledge of actual GPU architecture to be able to implement?]
[1:14:47][Q: What do you think of Khronos Vulkan?]
[1:16:18][Q: What is the best way to build a game when you know how to program but you have no art skills? Hire an artist to do it for you? That is my Achilles' heel, but I want to make a game on my own[ref
    site="Mini Metro"
    url="http://dinopoloclub.com/minimetro/"]]
[1:18:18][We have come to the end][:speech]
[/video]
