[video output=day624 member=cmuratori stream_platform=twitch stream_username=handmade_hero  project=code title="Turns Out It Really WAS a Feature" vod_platform=youtube id=aHPNZoXOe7A annotator=Miblo]
[0:03][Recap and set the stage for the day][:speech]
[0:59][Try to provoke our :lighting bug][:run]
[2:07][See our "value contamination" :lighting bug][:run]
[3:14][Demo the cutscene asset finding bug][:"asset system" :run]
[3:50][Reacquaint ourselves with the cutscene asset picking code][:"asset system" :research]
[5:39][Fix RenderLayeredScene() to use the Tag_IntroCutscene][:"asset system"]
[5:55][Our cutscene now plays fine][:"asset system" :run]
[7:21][@fatkidforlife][Who did this :art!!!]
[7:31][Cutscene, continued][:"asset system" :run]
[8:43][@rupan3][Are you in Texas?]
[8:49][Cutscene, continued][:"asset system" :run]
[9:28][@thedustydino][I stopped programming two years ago so I haven't watched for a long time, but I still have so much respect for your work]
[9:31][Consider the cutscene good][:"asset system" :run]
[9:53][We don't have trees, but we do have an unaligned baby in the garden][:"asset system" :run]
[10:17][Align the baby][:"asset system" :run]
[11:23][We need our trees back][:"asset system" :run]
[12:23][Investigate our trees absence][:"asset system" :research]
[14:36][Fix GetTreeTags() to use the Tag_Tree][:"asset system"]
[15:15][Our trees are back][:"asset system" :run]
[16:01][Scale and position the trees][:"asset system" :run]
[17:42][Restart with proper trees][:"asset system" :run]
[18:48][Move on to our :lighting bug][:run]
[23:03][Make ValidateTexelComponent() consider values less than −0.1 invalid][:lighting]
[24:45][Invalid values with apparently working :lighting][:run]
[25:46][Add a break line in ValidateTexelComponent() and compile in -Od][:lighting]
[26:46][Try to break in to ValidateTexelComponent()][:lighting :run]
[27:04][~remedybg bug: Breakpoint failure despite fully loaded .dll][:admin]
[29:51][~remedybg bug: Duplicate file loading][:admin]
[31:24][~remedybg bug due to Microsoft change: C:\\ baked in to paths in .pdb, breaking subst drives][:admin]
[33:15][Add our breakpoint in ValidateTexelComponent() but never hit it in -Od][:lighting :run]
[34:54][Resize the window and pick up a snake head partner][:lighting :run]
[35:28][@xxthebigfoxx][Compiling with /fp\:fast on release?]
[36:05][Realise that we've gathered the snake head][:lighting :run]
[38:40][Investigate the gathering of our snake head, breaking in to ExecuteBrain() and ExecuteBrainHero()][:"entity system" :run]
[44:18][AddPlayer() does not use the head (to associate a hat)][:"entity system" :research]
[46:28][Break in to ExecuteBrainHero() to see the Head containing multiple pieces][:"entity system" :run]
[47:38][Investigate this as an improper entity initialisation problem][:"entity system" :research]
[52:16][ClearWorldEntityBlock() does not clear, but CreateEntity() does][:"entity system" :memory :research]
[54:12][Hunt for clues as to how we gathered the snake head][:"entity system" :research]
[57:03][AddBrain() increments the World->LastUsedEntityStorageIndex][:"entity system" :research]
[57:45][CheckForJoiningPlayers() sets BrainID to ReservedBrainID_FirstHero + ControllerIndex][:"entity system" :research]
[59:07][@floorislava][dukedoHand]
[59:15][@enemypanda][I was on reddit]
[59:39][@somebody_took_my_name][The snake gets the controller's brain ID][:"entity system"]
[59:47][@moache][I'm guessing you're using a new brain index instead of a reserved one][:"entity system"]
[1:00:05][Reacquaint ourselves with the ReservedBrainID_ values and usage][:"entity system" :research]
[1:04:55][@xxthebigfoxx][Chat didn't find the bug because there is no bug, obviously]
[1:05:21][Continue to investigate our snake head gathering bug][:"entity system" :memory :research]
[1:07:04][RegisterEntity() does not check slot usage][:"entity system" :memory :research]
[1:15:59][The snake head's tBob, dtBob and ddtBob are FLT_MIN][:"entity system" :research]
[1:19:00][AddSnake() is the only running function that sets HitPointMax to 3][:"entity system" :research]
[1:22:06][Step in to AddSnake() and inspect the BrainID][:"entity system" :run]
[1:23:44][Investigate this as a post-initialisation corruption bug][:"entity system" :memory :research]
[1:26:43][Scour CheckForJoiningPlayers() for possible problems][:"entity system" :memory :research]
[1:28:12][It was a feature all along?][:"entity system" :memory :research]
[1:29:25][Try out our snake head collection feature][:"entity system" :run]
[1:31:14][Make AddPlayer() create the Head as an associable entity][:"entity system"]
[1:32:54][Try out our nearby head swapping feature][:"entity system" :run]
[1:34:17][Make ExecuteBrainHero() position the Head nearer the Body][:"entity system"]
[1:35:13][Our head has a Z-offset and disappears when moving left][:"entity system" :run]
[1:35:48][Make ExecuteBrainHero() decrease the clutch offset][:"entity system"]
[1:36:17][Try out our closer clutch][:"entity system" :run]
[1:36:23][Make ExecuteBrainHero() raise the head][:"entity system"]
[1:36:46][Try making ExecuteBrainHero() set the Head's position to match the Body's][:"entity system"]
[1:36:55][The head no longer disappears][:"entity system" :run]
[1:37:12][Check the ddP computation in ExecuteBrainHero()][:"entity system" :research]
[1:41:32][Try making ExecuteBrainHero() use ConHero->ddP in the Head->P computation][:"entity system"]
[1:41:59][Our head disappears][:"entity system" :run]
[1:42:02][Try making ExecuteBrainHero() use the left-facing (−1, 0, 0) values always][:"entity system"]
[1:42:27][The head is always missing][:"entity system" :run]
[1:42:34][Try making ExecuteBrainHero() use the right-facing (1, 0, 0) values always][:"entity system"]
[1:42:39][The head is always visible][:"entity system" :run]
[1:42:41][Continue to consider our head disappearance][:"entity system" :research]
[1:43:18][@molly][Meow]
[1:45:02][Investigate this as a downstream computation problem][:"entity system" :research]
[1:47:43][Make ExecuteBrainHero() use the left-facing (−1, 0, 0) values, and #if 0 out all Head->P related code][:"entity system"]
[1:48:54][The head has returned][:"entity system" :run]
[1:49:06][Reintroduce the ddP computation code][:"entity system"]
[1:49:14][The head remains][:"entity system" :run]
[1:49:18][Focus on the HeadDelta][:"entity system" :research]
[1:50:01][Let ExecuteBrainHero() use the computed ddP for the Head->P][:"entity system"]
[1:50:15][The head remains][:"entity system" :run]
[1:50:22][Let ExecuteBrainHero() use the HeadDelta][:"entity system"]
[1:51:18][The head disappears][:"entity system" :run]
[1:51:24][Comment out the Body->FloorDisplace setting in ExecuteBrainHero()][:"entity system"]
[1:51:29][The head disappears][:"entity system" :run]
[1:51:32][Instead comment out the Body->YAxis setting in ExecuteBrainHero()][:"entity system"]
[1:51:36][The head remains][:"entity system" :run]
[1:51:42][Investigate our problem in the Body->YAxis][:"entity system" :research]
[1:53:17][Try making ExecuteBrainHero() set Body->YAxis to (0, 1)][:"entity system"]
[1:53:25][The head remains][:"entity system" :run]
[1:53:35][Remove Body->YAxis][:"entity system"]
[1:53:40][Reacquaint ourselves with the Entity->FloorDisplace usage][:"entity system" :research]
[1:53:59][Consider the Entity->FloorDisplace to be fine][:"entity system" :run]
[1:54:03][Try out conversations and swappable heads][:"entity system" :run]
[1:55:26][Q&A][:speech]
[1:56:20][@pikeman_xd]["It's not a bug, it's a feature"]
[1:56:46][@rydgel_][What's your Windows coding environment? Is it Vim inside mingw?]
[1:56:57][@somebody_took_my_name][Q: The Linux branch has the debug / release bug as well, and it triggers all the time on my setup at least]
[1:57:17][@r2game][Yes, it is a Q&A request in Day 290[ref
    site="Handmade Hero Episode Guide"
    page="Finishing Separated Rendering"
    url=https://guide.handmadehero.org/code/day290/#3842]]
[1:57:52][@x13pixels][Q: Looks like MSVC is writing the subst'd drive to the PDB as long as you build from the subst drive (as one would expect). Does building from ~4coder somehow change to the C: drive before building or something like this? In any case, will make ~RemedyBG more resilient to these sorts of things! Thank you!]
[1:58:40][@stuntcoder][@handmade_hero There is something wrong with capturing ~4coder. The screen gets very busy, which is distracting. I saw it last week too, but we thought it might be on my side. It also shows on the YouTube upload of last week's episode.[ref
    site="Handmade Hero Episode Guide"
    page="Investigating a Lighting Bug"
    url=https://guide.handmadehero.org/code/day623/] The older YouTube uploads are clean…]
[2:02:14][@somebody_took_my_name][Q: Someone asked if the swap would work on the orphans as well?][:"entity system"]
[2:02:53][@stuntcoder][Might help if you go black background for the time being. It did not show on your black cmd window]
[2:04:07][@dufji][I would rather blame twitch encoding than your machine]
[2:05:57][@anusaa][Q: [~hero Handmade Hero] is running for a while by now. Is there any scheduled ending? I'm at episode 308[ref
    site="Handmade Hero Episode Guide"
    page="Debugging the Cycle Check"
    url=https://guide.handmadehero.org/code/day308/] and I love the series]
[2:06:27][Thank you, everyone][:speech]
[/video]
