From 4fa34fe6e98bf936046428d732c4c74023422686 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Sat, 12 Dec 2020 21:26:35 +0000 Subject: [PATCH] Index hero/code621 --- cmuratori/hero/code/code621.hmml | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 cmuratori/hero/code/code621.hmml diff --git a/cmuratori/hero/code/code621.hmml b/cmuratori/hero/code/code621.hmml new file mode 100644 index 0000000..a7bbc55 --- /dev/null +++ b/cmuratori/hero/code/code621.hmml @@ -0,0 +1,68 @@ +[video output=day621 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Asset Tags in the World Generator" vod_platform=youtube id=l3018wbTGxY annotator=Miblo] +[0:01][Recap and set the stage for the day][:"asset system" :speech] +[0:54][Consider the order-dependence of the asset tag order][:"asset system" :speech] +[3:13][Consider the :performance of Hash32() in terms of order-independence][:"asset system" :hashing :speech] +[6:59][Consider the point of order-independent asset tagging][:"asset system" :hashing :speech] +[8:08][Sketch out updates to base_game.hht][:admin :"asset system"] +[10:38][Check out our compile errors][:"asset system"] +[11:08][Bind "J" globally][:admin] +[12:30][@ryanfleury][@handmade_hero `fleury_toggle_compilation_expand`] +[12:33][Bind "Insert" to fleury_toggle_compilation_expand][:admin] +[13:02][Try making AddPieceLight() and AddPieceOccluder() pass {} to AddPiece()][:"asset system"] +[14:19][Function parameter lookup and failed namespacing in C++[ref + site="Compiler Explorer" + url=https://godbolt.org]][:language :research] +[20:32][Update AddPlayer() to use GetTagHash()][:"asset system"] +[24:03][Reacquaint ourselves with the GEN_CREATE_ENTITY() macro and its calling sites][:"asset system" :research] +[29:46][Shrink the Tags array in gen_entity from 14 to 4][:"asset system" :"data structure"] +[30:18][Consider how to encode (random) variants in our tag hash][:"asset system" :hashing :research] +[38:16][Consider doing GetAssetFrom() exactly as the old GetBestMatchAssetFrom(),[ref + site="Handmade Hero" + page=day596/code/handmade_asset.cpp + url=https://github.com/HandmadeHero/cpp/blob/day596/code/handmade_asset.cpp#L379] just without the WeightVector][:"asset system" :hashing :research] +[43:26][Make GetAssetFrom() match based on the old GetBestMatchAssetFrom(),[ref + site="Handmade Hero" + page=day596/code/handmade_asset.cpp + url=https://github.com/HandmadeHero/cpp/blob/day596/code/handmade_asset.cpp#L379] just without the WeightVector][:"asset system" :hashing] +[50:12][Reflect on our new asset matching, with :optimisation potential and exact matching on tags][:"asset system" :hashing :research] +[51:01][Change asset_match_vector to be an f32 array and remove TagRange from game_assets][:"asset system" :"data structure"] +[51:55][Consider introducing a Modulus() function for facing direction][:"asset system" :"entity system" :mathematics :research] +[54:45][Embark on updating the picking of FacingDirection in UpdateAndRenderEntities()][:"asset system" :"entity system"] +[57:27][Revert the removal of TagRange from game_assets][:"asset system" :"data structure"] +[59:10][Augment entity_visible_piece with an f32 Variant for UpdateAndRenderEntities() to use][:"asset system" :"data structure" :"entity system"] +[1:00:32][Update AllocateGameAssets() to operate on MatchElement][:"asset system"] +[1:01:48][@ryanfleury][Hmmm I don't know, @handmade_hero… He's online so I will ping him about it] +[1:02:59][Consider making GEN_CREATE_ENTITY() take a tag hash][:"asset system" :"entity system" :research] +[1:03:58][@ryanfleury][Yeah, that is weird… because it's different from the virtual whitespace behavior…] +[1:04:04][Make GEN_CREATE_ENTITY() and all entity generation functions take a BaseHash][:"asset system" :"entity system"] +[1:07:44][Look into updating GenerateRoom() to our new asset matching scheme][:"asset system" :research] +[1:09:24][Delete AddTag() and the Tags array from entity, and propagate this change][:"asset system" :"entity system" :"data structure"] +[1:12:05][Consider providing a source of entropy to AddPiece()][:"asset system" :"entity system" :prng :research] +[1:13:34][Introduce entity_piece_asset for entity_visible_piece to contain][:"asset system" :"data structure" :"entity system"] +[1:17:48][Workaround C++'s ambiguous interpretation of {} in our AddPiece() calls][:"asset system" :language] +[1:19:21][Respecify AddTreeTags() as GetTreeTags() and change GEN_CREATE_ENTITY() to take an entity_piece_asset][:"asset system" :"entity system" :prng] +[1:23:22][Introduce ChangeHash()][:"asset system" :"entity system" :hashing] +[1:25:53][Change the AddPiece() forward-declarations to take an entity_piece_asset, and pass {} to AddPiece() again][:"asset system" :language] +[1:26:33][Introduce GetPieceAsset() for AddPlayer() to call][:"asset system" :"entity system"] +[1:29:35][~4coder feature request: Early scrolling out from behind an on-top window][:admin] +[1:30:05][Make AddPlayer() use GetPieceAsset() and ChangeHash()][:"asset system" :"entity system"] +[1:32:55][Defer our GenerateRoom() update to next time][:"asset system" :"procedural generation" :research] +[1:33:52][Fix the GenEntityAtTraversable() call in GenerateRoom()][:"asset system" :"procedural generation"] +[1:34:59][Q&A][:speech] +[1:35:47][@ryanfleury][@handmade_hero I have alerted [@mr4thdimention the 4th dimension] of the bug] +[1:36:11][@exp_ix][Q: Are asset tags used for something like lister panels?][:"asset system"] +[1:36:33][@darthwutface][Q: The :API you mentioned not existing earlier for bulk sending packets: why doesn't it exist? Is there some hardware limitation?][:networking] +[1:40:22][@vironacorus][Q: Thoughts on Unity / Unreal / Godot (their quality)? How would an engine made by you look like?][:"game engine"] +[1:42:49][@kniffel5][Ori and the Will of the Wisps is done in Unity. Doesn't that count for AAA-quality? Though they had to modify it a bit][:"game engine"] +[1:46:51][@hmartarg][Q: Have you ever explained bit-fields and, if not, can you and is it still useful to use today? I just saw that in an old code base to do flags] +[1:50:35][@miles_gloriosus][@HmartArg @handmade_hero If it matters, bit-fields are nice to use in :networking, because you can pack the booleans in 1 or 2 bytes instead of taking up a byte for each one] +[1:51:04][@yrk_][Q: I didn't see you using any version control. Aren't you using any and are you not afraid of losing something valuable due to the mistake of deleting a bunch of code lines too quickly?[ref + site="Handmade Hero" + page=day596/code/handmade_asset.cpp + url=https://github.com/HandmadeHero/cpp/blob/day596/code/handmade_asset.cpp#L379]][:vcs] +[1:52:30][Using :compression, not bit-fields, to minimise transmission bandwidth for :networking][:speech] +[1:53:23][@centhusiast][Q: Could you explain the downside of the JSON data format?] +[1:55:40][@maquinahumana][Q: Why do you use 32-bit bools – bool32 – rather than something smaller?] +[1:56:49][@centhusiast][Q: Have you heard about zstandard data :compression developed by facebook?] +[1:57:31][Wrap it up] +[/video]