diff --git a/cmuratori/hero/code/code664.hmml b/cmuratori/hero/code/code664.hmml new file mode 100644 index 0000000..cb46524 --- /dev/null +++ b/cmuratori/hero/code/code664.hmml @@ -0,0 +1,87 @@ +[video output=day664 member=cmuratori stream_platform=twitch stream_username=molly_rocket project=code title="Simplifying Entity Storage Part II" vod_platform=youtube id=fUGCccR-B3c annotator=Miblo] +[0:00][Recap and set the stage for the day][:speech] +[2:37][Reacquaint ourselves with the brain_type enum][:"entity system" :research] +[4:43][Delete Type_brain_monstar and AddMonstar()][:"entity system"] +[5:32][Seek simplification of UpdateAndRenderEntities()][:"entity system" :research] +[6:12][Delete the BoostTo branch from UpdateAndRenderEntities()][:"entity system"] +[6:21][Scan through code to rewrite and keep][:"entity system" :research] +[7:00][Consider moving the :camera with the entity in question, rather than by doing an entity lookup by ID][:"entity system" :research] +[9:12][Reacquaint ourselves with the Type_brain_familiar case in ExecuteBrain()][:"entity system" :research] +[12:29][Improve the wording of the Type_brain_familiar case in ExecuteBrain()][:"entity system"] +[14:38][Consider changes to the entity struct that may mostly obviate the need for the sim region][:"data structure" :"entity system" :research] +[16:36][Remove dAbsTileZ from entity][:"data structure" :"entity system"] +[16:44][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme][:"entity system"] +[19:07][Consider performing TransactionalOccupy() in the :movement, rather than the brain, code][:"entity system" :research] +[20:16][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)][:"entity system"] +[22:06][Reacquaint ourselves with the familiar velocity setting code][:"entity system" :movement :research] +[24:04][Describe the purpose of TransactionalOccupy() in ExecuteBrain()][:"entity system" :movement :research] +[24:58][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)][:"entity system"] +[25:44][Note popping artifacts in this :movement code][:"entity system" :movement :research] +[26:14][Introduce a v2s overload of V2()] +[26:58][Port the Type_brain_familiar case in ExecuteBrain() to our simplified entity storage scheme (cont.)][:"entity system"] +[27:17][Port UpdateAnimation() to our simplified entity storage scheme][:animation :"entity system"] +[29:14][Port the move queue code in UpdateAndRenderEntities() to our simplified entity storage scheme, changing Delta in move_queue_entry to be a v2s][:"data structure" :"entity system"] +[30:00][Consider making UpdateAndRenderEntities() set the TileIndex directly][:"entity system" :movement :research] +[30:52][Port UpdateAndRenderEntities() to our simplified entity storage scheme, using a v2s TargetTile][:"entity system" :movement] +[31:48][Port ExecuteBrainHero() to our simplified entity storage scheme, changing CanonicalDelta in move_pattern_entry, and AttackX and AttackY to be a v2s, and introducing V2S() and a v2s overload of operator*()][:"data structure" :"entity system"] +[35:32][Port AddPlayer() to our simplified entity storage scheme][:"entity system"] +[37:48][Port CheckForJoiningPlayers() to our simplified entity storage scheme, introducing GetClosestEmptyTileTo() and augmenting sim_region with OriginTileIndex][:"data structure" :"entity system"] +[41:45][Consider introducing TileSpaceToSimRegion()][:"entity system" :research] +[43:26][Respecify UpdateAnimation() to orient :movement around the delta of the current and previous tile][:"entity system"] +[45:02][Fix typo in GetClosestEmptyTileTo()][:"entity system"] +[45:22][Remove the sim_region overloads of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()][:"entity system" :movement] +[46:10][Consider also removing the edit_grid version of PlaceEntityAtTraversable() and related functions][:"entity system" :movement :"procedural generation" :research] +[49:17][Move the edit_tile traversal functions from handmade_edit_grid.cpp to handmade_sim_region.cpp][:"entity system" :"procedural generation"] +[50:00][Consider removing the edit grid entirely][:"entity system" :research :"procedural generation"] +[52:10][#if 0 GenerateApron() and GenerateRoom()][:"entity system" :"procedural generation"] +[52:34][Rename TraversableIsOpen() to TileIsOpen(), and IsOccupied() to TileIsOccupied(), removing the former's check][:"entity system" :movement] +[53:38][Consider changing FindRandomOpenTile() to spiral outwards][:"entity system" :research] +[54:31][Delete handmade_gen_math.{h,cpp}, stowing the cpp code in handmade_math.h][:admin :mathematics :programming] +[1:02:54][Remove the bulk of handmade_edit_grid.cpp][:"entity system" :"procedural generation"] +[1:06:34][Relieve GenerateBlock() of calling BeginGridEdit(), removing the latter, EndGridEdit() and GetAbsoluteTileIndex()][:"entity system" :"procedural generation"] +[1:10:56][Move IsOnEdge() from handmade_edit_grid.cpp to handmade_math.h][:"entity system" :mathematics :"procedural generation"] +[1:12:45][Consider keeping code from handmade_edit_grid.cpp][:"entity system" :"procedural generation" :research] +[1:14:04][Move GetTileVolume() from handmade_edit_grid.cpp to handmade_room_gen.cpp, and rewrite it][:"entity system" :"procedural generation"] +[1:16:25][Move GetMinZCenterP() and GetVolumeFromMinZ() from handmade_edit_grid.cpp to handmade_room_gen.cpp][:"entity system" :"procedural generation"] +[1:17:13][Relieve GenerateBlock() of calling IterateAsPlanarTiles(), removing the latter][:"entity system" :"procedural generation"] +[1:18:21][Delete handmade_edit_grid.{h,cpp}][:admin] +[1:19:16][Decide against debugging Visual Studio with Visual Studio][:admin] +[1:19:49][Change GEN_CREATE_ENTITY_PATTERN() to take a world_generator][:"entity system" :"procedural generation"] +[1:20:05][We can't compile][:admin] +[1:22:41][Declare world_generator before GEN_CREATE_ENTITY_PATTERN()][:"entity system" :"procedural generation"] +[1:23:17][Thoughts on compilers][:language :speech] +[1:25:05][@kwmar][This is awesome though, but work in progress – Circle C++ Compiler[ref + site="Circle C++ Compiler" + url=https://www.circle-lang.org/] – especially the extensions that should've been in C++ for a long time already][:language] +[1:25:23][@kwmar][It's a new C++ compiler][:language] +[1:25:26][@haeristudios][C++ itself is a mess][:language] +[1:25:55][Remove PlaceEntityAtP(), and the edit_grid versions of PlaceEntityAtTraversable() and PlaceEntityOnTraversable()] +[1:26:49][Write the edit grid out of SingleEnemyPattern()][:"entity system" :"procedural generation"] +[1:27:29][@haeristudios][@molly_rocket Have you already discussed Carbon and Go? Would be interesting to hear your take on those languages][:language] +[1:27:38][Write the edit grid out of SingleEnemyPattern() and SnakePattern(), augmenting world_generator with a *SimRegion][:"data structure" :"entity system" :"procedural generation"] +[1:30:41][Change TileAlreadyExists() and AppendTile() to take a v2s][:"entity system" :"procedural generation"] +[1:31:10][Write the edit grid out of TileSwitchPattern()][:"entity system" :"procedural generation"] +[1:34:02][Introduce tile_result for GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() to return][:"entity system" :"procedural generation"] +[1:36:03][Update SingleEnemyPattern() and SnakePattern() to use our new tile_result][:"entity system" :"procedural generation"] +[1:38:05][Investigate our FindAdjacentOpenTile() compile error][:"entity system" :research] +[1:39:27][Make FindRandomOpenTile() and FindAdjacentOpenTile() NotImplemented][:"entity system"] +[1:40:04][Update CheckForJoiningPlayers() to use our new tile_result][:"entity system"] +[1:40:36][#if 0 the compile errors in BeginWorldChange()][:"entity system"] +[1:40:53][Introduce a v2s overload of operator+=()][:language] +[1:41:15][Update TileSwitchPattern() to use our new tile_result][:"entity system" :"procedural generation"] +[1:43:30][Consider making TileSwitchPattern() generate an index list for GenerateBlock() to use][:"entity system" :"procedural generation" :research] +[1:44:25][#if 0 TileSwitchPattern()][:"entity system" :"procedural generation"] +[1:44:45][Update NPCPattern() to use our new tile_result][:"entity system" :"procedural generation"] +[1:46:11][Fix compile errors in StandardLightingPattern() and remove CalcBasePForOffset()][:"entity system" :"procedural generation"] +[1:47:39][Remove Z from SetSize()][:"entity system" :"procedural generation"] +[1:48:10][Remove PlaceRoomInVolume(), PlaceRoom(), GetDeltaAlongAxisForCleanPlacement(), PlaceRoomAlongEdge(), GetRandomDirectionFromMask() and Layout()][:"entity system" :"procedural generation"] +[1:48:58][Switch the block rasterisation code in CreateWorld() to use v2s][:"entity system" :"procedural generation"] +[1:50:05][Switch rectangle2i to contain v2s Min and Max, and propagate this change][:"data structure"] +[1:55:24][@lamarrr___][What do you think about Rust?][:language] +[1:56:13][Switch HeroRoom in CreateWorld() to be a rectangle2i][:"entity system" :"procedural generation"] +[1:56:48][Switch GetCameraOffsetZForDim() to take a v2s][:camera] +[1:56:55][Switch GetMinZCenterP() and GetVolumeFromMinZ() to take a world_generator, not an edit_tile][:"entity system" :"procedural generation"] +[1:58:16][Port GenerateBlock() and WinMainCRTStartup() to our updated rectangle2i][:"entity system" :"procedural generation"] +[2:00:12][Rename Region to SimRegion in GenerateBlock(), and unset it at the end][:"entity system" :"procedural generation"] +[2:00:32][Call it there][:speech] +[/video]