diff --git a/cmuratori/hero/code/code624.hmml b/cmuratori/hero/code/code624.hmml new file mode 100644 index 0000000..70834fe --- /dev/null +++ b/cmuratori/hero/code/code624.hmml @@ -0,0 +1,118 @@ +[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]