[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]