[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Debugging the Cycle Check" vod_platform=youtube id=trtrBITgktg annotator=Miblo] [0:13][Recap and set the stage for the day] [1:19][Run the game and show where we left things] [2:06][handmade_opengl.cpp: Make OpenGLRenderCommands() draw a black border around the render entries] [8:21][Run the game and see what our outlines are telling us] [10:18][handmade_opengl.cpp and handmade_render.cpp: Look through the collision group drawing routines and consider what could be wrong] [12:15][handmade_render.cpp: Rename RecursiveFromToBack() to RecursiveFrontToBack()] [13:14][handmade_render.cpp: Make RecursiveFrontToBack() set and check things in the correct order] [14:20][Run the game, see the cycles in our sort graph and investigate them] [16:34][handmade_world_mode.cpp: Make AddStandardRoom() only generate one room, run the game and see what happens with cycles] [21:02][handmade_opengl.cpp: Make OpenGLRenderCommands() draw collision groups lightly, then increase their alpha when they cycle] [22:02][Run the game and view the cycles] [23:52][Consider how we're doing the sorting in the first place] [27:18][Continue to investigate what's happening with the cycles] [29:34][handmade_render_group.cpp: Change where PushRectOutline() draws the four edge rectangles] [31:03][Blackboard: Drawing an outline out of non-intersecting rectangles] [35:14][Blackboard: What RectanglesIntersect() is currently doing] [37:06][handmade_render_group.cpp: Make PushRectOuline() add an epsilon into the equation] [37:31][Run the game, see that our outlines no longer cause a cycle, but that our hero still does] [44:05][handmade_debug.cpp: Make DEBUGEnd() draw one character, run the game and step through SortEntries] [47:29][handmade_render_group.cpp: Make GetBoundFor() use the SortBias] [48:51][Run the game and see that the debug text is now correctly sorted] [51:07][handmade_render.cpp: Look at IsInFrontOf()] [54:07][Blackboard: How IsInFrontOf() is working] [55:30][Run the game and illustrate the possibility that we may actually be in okay shape here] [56:50][handmade_world_mode.cpp: Toggle AddMonstar() and AddFamiliar() back on] [58:02][Q&A][:speech] [59:05][@insobot][I couldn't drop that into The Witness, then. FailFish Really. Kappa?] [59:26][@blah238][It looks like the torso sprite occasionally draws on top of the head sprite, e.g. going up stairs] [1:00:01][Blackboard: How the hero is constructed] [1:01:18][@roam00010011][Does collision work between stairs and hero? Because body under and head above the stairs should not happen] [1:04:09][@bryanwwag][Do you anticipate similar (if not identical) graph sorting would be used for any other game purpose (other than sprite sort)?] [1:05:40][@thesgmastr][What language is this?] [1:06:40][@thesgmastr][What are a few pieces of advice you would give to a new programmer?] [1:09:05][@xendash][What is your estimate time it will take for you to finish Handmade Hero? And how different is it from the original estimate? (I assume you are about halfway)] [1:12:53][@roam00010011][Off-topic: At the start of the show, you said that every game programmer uses a dev setup similar to what we use: debug with Visual Studio, but code with a different editor. Why?] [1:15:05][@filiadelski][Are you enjoying this project as a programming challenge or are your efforts mainly put into the teaching part of it?] [1:17:12][@melg1][What do you think about unit testing and test driven development applied to C++ code? Is this technique really useful and worth trying?] [1:26:42][@roam00010011][It's because you are the only programmer! When working in a team that will use your code, you need const] [1:29:24][@sssmcgrath][I programmed in 100% const correct for 5 years. Never again] [1:29:41][Close it on out][:speech] [/video]