diff --git a/cmuratori/hero/code/code444.hmml b/cmuratori/hero/code/code444.hmml new file mode 100644 index 0000000..5efc20c --- /dev/null +++ b/cmuratori/hero/code/code444.hmml @@ -0,0 +1,65 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Stubbing Out the World Generator" vod_platform=youtube id=-TBSy54d3ZE annotator=Miblo] +[0:06][Recap and set the stage for the day][:speech] +[1:18][:Run the game with a few words on the :art, :camera and world construction][:"procedural generation" :topology] +[8:02][Explain the existing world struct][:research :topology] +[10:45][Introduce world_room stuct][:topology] +[14:31][:Camera Behavior per Room][:blackboard] +[17:16][:Run the game and consider co-op :camera behaviour] +[20:44][Introduce world_room_camera enum for world_room to contain, and add an array of world_room in world][:camera] +[23:33][:Run the game, noting that a :"debug visualisation" of all generated rooms could be helpful][:"procedural generation"] +[25:09][Setup AddStandardRoom() to initialise a WorldRoom][:"procedural generation"] +[31:50][Introduce AddWorldRoom(), with a few words on Asserting even on things that we expect to replace before shipping][:memory] +[34:22][:Run the game with the determination to draw :"debug visualisation" for every generated room][:"procedural generation"] +[35:57][Make UpdateAndRenderWorld() draw :"debug visualisation" lines around all our generated rooms][:"procedural generation"] +[42:13][:Run the game to see that we're nearly correct][:"debug visualisation" :"procedural generation"] +[42:33][Fix typo in the AddWorldRoom() call in AddStandardRoom()][:"procedural generation"] +[43:03][:Run the game to see all our room :"debug visualisation" lines, considering switching to infinite far clip-plane][:"procedural generation" :topology] +[45:02][Determine to make our current :camera code zoom to rooms better][:run] +[47:03][Create handmade_world_gen.h for all of our existing world generation code][:"procedural generation" :topology] +[50:48][:Run the game and crash immediately because there's no world][:"procedural generation"] +[51:37][Introduce CreateWorld() for PlayWorld() to call][:"procedural generation"] +[53:22][:Run the game to see our existing world][:"procedural generation"] +[53:35][Determine to build up our world generation code from the usage code backwards][:"procedural generation" :speech] +[55:58][Introduce CreateOrphanage()][:"procedural generation" :topology] +[58:12][Room][:blackboard :"procedural generation" :topology] +[1:01:03][Continue to implement CreateOrphanage() calling our fictitious GenRoom() function[ref + site="Molly Rocket" + page="Handmade Hero Orphan Concept Art" + url=https://mollyrocket.com/news_0041]][:"procedural generation" :topology] +[1:05:03][Room Connectedness, and cycles][:blackboard :topology] +[1:08:17][Add BackDoorPath and SideAlley in CreateOrphanage(), and connect them up in such a way as to create a cycle][:topology] +[1:11:02][Introduce the notion of a gen_room_spec for CreateOrphanage() to use][:"entity system" :"procedural generation"] +[1:16:07][Introduce CreateWorld() to call CreateOrphanage() and the currently fictitious Layout(), GenerateWorld() and EndWorldgen(), and gen_orphanage that specifies room connections][:"procedural generation" :topology] +[1:19:58][Reflect on having constructed our API from the usage code backwards][:speech] +[1:22:31][Implement our world generation types and functions, with an eye on later differentiating between the world's specification and its generation from that spec][:"procedural generation" :topology] +[1:28:25][Check out our current :memory arena allocation code][:research] +[1:30:41][Consider the sheer amount of memory available these days][:memory :speech] +[1:33:00][Stub out GenSpec(), GenRoom(), Connect(), BeginWorldGen() and EndWorldgen() with :memory management and return values, fixing Clear() to correctly skip the last remaining block[ref + site="HandmadeHero/cpp/Issues" + page="Bug in Clear(memory_arena *)" + url=https://github.com/HandmadeHero/cpp/issues/58]] +[1:39:08][Make CreateWorld() call our new CreateWorld() routine][:"procedural generation"] +[1:39:48][:Run the game and step through our new CreateWorld(), CreateOrphanage(), etc. routine][:memory :"procedural generation"] +[1:42:21][Close "Bug in Clear(memory_arena *)"[ref + site="HandmadeHero/cpp/Issues" + page="Bug in Clear(memory_arena *)" + url=https://github.com/HandmadeHero/cpp/issues/58]][:admin :memory] +[1:42:57][Q&A][:speech] +[1:43:14][@sonoftheright][Q: Any thoughts on Mike Acton joining the Unity dev team?] +[1:46:15][@unknown_20][Q: Is the parenthesis around the returned value used for debugging or just a habit?] +[1:48:08][@kiitos420][Q: Is it a good idea to use events?] +[1:49:22][@frostyninja][Q: Are we going to see the new :art assets soon now? Today was exciting. I can’t wait for worldgen. Should be interesting][:"procedural generation"] +[1:49:33][@vtlmks][Q: Off-topic if you run out of other questions. In C, is there a way to make something similar to function overloading?][:language] +[1:50:15][@unknown_20][@handmade_hero I read somewhere you can #define return and log all your returns that happen] +[1:50:29][@suburbanfilth][Q: What do you think of Golang?][:language] +[1:50:46][@vaualbus][Q: Just as side note on that Nvidia fiasco you had. I found out that in my case I can get Nsight graphics to crash in the same way if I use raw input to get PS4 controller data. As soon as I remove the call that registers raw controllers, Nsight work. Any idea on why that could happen? Maybe Nsight is using something to intercept user input?] +[1:52:06][@x13pixels][Q: I know you did a video on interpolation. Do you know of any good resources for cubic B-splines?] +[1:56:00][Bezier curves, and B-spline orders][:blackboard :mathematics] +[2:00:41][Daisy-chaining Bezier curves to produce more complex curves][:blackboard :mathematics] +[2:04:03][Orders of discontinuity][:blackboard :mathematics] +[2:06:05][Cubic B-spline curves][:blackboard :mathematics] +[2:08:06][@krismeld][Q: I really like the look of the :lighting you have implemented. Will the system be working with many light points?][:rendering] +[2:08:41][@longboolean][Q:So if I am on the same page, if we wanted to make sure that two rooms never touch each other we would still use Connect() plus passing a flag of some kind. Or would you do something else?][:"procedural generation" :topology] +[2:09:36][@schoenhs][Q: Are there any plans to write tools to author rooms or will everything be done in code?] +[2:10:13][Wrap it up for today][:speech] +[/video]