[video output=day525 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Cleaning Up Import Tag Grids" vod_platform=youtube id=t81mqx7rf1k annotator=Miblo] [0:00][Recap and set the stage for the day finishing up our WAV file importing][:"asset system" :speech] [4:23][][:speech][quote 645] [5:03][Set up to upgrade ~remedybg][:speech] [6:13][Unpack the backpack from the back room][:admin] [10:48][Fetch a thumb drive from the other room][:afk] [11:10][Upgrade to ~remedybg 0.2.0.1[ref site=RemedyBG url=https://remedybg.itch.io/remedybg]][:admin] [14:52][Set up to tag our audio assets][:"asset system" :research] [20:18][Make SynchronizeAssetFileChanges() call a new CreateAudioChannelTagGrid()][:"asset system"] [21:00][Determine to replace the tag grid building in ParsePieces() with the Context containing import_grid_tags directly][:"asset system" :speech] [22:38][Distinguishing between TagGrid and Hagrid][:speech] [23:45][Augment hht_context with import_grid_tags for ParseTopLevelBlock() to set][:"asset system"] [38:56][Make SynchronizeAssetFileChanges() initialise all of our Context's import_grid_tags, catching an out-of-memory error early][:"asset system" :"error handling"] [47:59][Relieve ImportBody() and ImportHead() of taking the tokenizer, and split ParsePieces() out into various CreateArt*TagGrid() functions][:"asset system"] [51:55][Introduce CreateAudioChannelTagGrid()][:"asset system"] [55:42][Fix compile errors][:"asset system"] [58:53][Move the import_grid_tags from hht_context to game_assets, for AllocateGameAssets() to initialise once at startup][:"asset system"] [1:06:09][Step through AllocateGameAssets() to see how it all behaves][:"asset system" :run] [1:07:59][~remedybg bug: Tree expansion IDs][:admin] [1:08:57][Step through CreateAudioChannelTagGrid()][:"asset system" :run] [1:09:14][~remedybg love: Resolution of enum item names][:admin] [1:09:38][Continue to step through CreateAudioChannelTagGrid()][:"asset system" :run] [1:10:09][~remedybg love: Locking of out-of-scope variables, and sheer responsiveness][:admin] [1:12:29][Step on through SynchronizeAssetFileChanges() to ParseHHT()][:"asset system" :parsing :run] [1:14:02][Fix typos in ParseTopLevelBlock()][:"asset system" :parsing] [1:14:26][Step through ParseTopLevelBlock()][:"asset system" :parsing :run] [1:14:59][~remedybg bug: Disassembly stepping with F10 switches focus back to the source view after stepping][:admin] [1:16:00][Continue to step through ParseTopLevelBlock()][:"asset system" :parsing :run] [1:20:13][Step through the :parsing of our "music" and "sound" blocks][:"asset system" :run] [1:21:10][~remedybg feature request: Display of long strings in the Watch window, potentially in a manner flexible enough to allow for displaying of images, waveforms, etc., and even the contents of other windows like Threads][:admin :ui] [1:25:58][Organise music_test.wav into the correct directory][:admin] [1:26:50][Step back in to the :parsing of a "music" block][:"asset system" :run] [1:29:29][~remedybg bug: Incorrect cursor position][:admin] [1:29:40][Continue to step through ParseWAV()][:"asset system" :parsing :run] [1:31:09][~remedybg love: Expression :parsing, casting and relative scope variable resolution][:admin] [1:36:01][Continue to step through ParseWAV()][:"asset system" :parsing :run] [1:36:46][Prevent ParseWAV() from iterating past the already departed initial chunk][:"asset system" :parsing] [1:37:54][Step back through ParseWAV() to ProcessAudioImport()][:"asset system" :parsing :run] [1:43:17][Fix ProcessAudioImport() to write the correct AssetIndex into our AssetIndexSlot][:"asset system"] [1:46:48][Step back through ProcessAudioImport()][:"asset system" :parsing :run] [1:49:30][Hit assertion in SetAssetType()][:"asset system" :run] [1:49:40][~remedybg feature request: Status line colourisation][:admin] [1:50:28][Investigate our !Asset->NextOfType assertion][:"asset system" :run] [1:53:32][Make AllocateGameAssets() check for a TypeID before calling SetAssetType()][:"asset system"] [1:55:46][Break into our !TypeID test path in AllocateGameAssets() to find that we follow it often][:"asset system" :run] [1:58:18][Check out the existing "plate" processing code in ParsePieces()[ref site=GitHub page="HandmadeHero / cpp / code / handmade_import.cpp" url=https://github.com/HandmadeHero/cpp/blob/day524/code/handmade_import.cpp]][:"asset system" :parsing :research] [2:01:04][Dump base_game.hha and intro_cutscene.hha][:admin :"asset system"] [2:03:41][Check out our dumps of base_game.hha and intro_cutscene.hha in TabView][:admin :"asset system"] [2:03:58][Make PrintContents() print each asset's basic type tag at a higher, more visible level][:"asset system"] [2:06:31][Introduce CategoryTags\[\] and CategoryNameFromID()][:"asset system"] [2:12:59][Finish enabling PrintContents() to print each asset's basic type tag][:"asset system"] [2:15:30][Check out the new .hha dumps in TabView to determine that intro_cutscene.hha is our culprit][:admin :"asset system"] [2:17:35][Reimport intro_cutscene.hha (in our debug build)][:"asset system" :run] [2:21:20][Check out the new intro_cutscene.hha dump in TabView to see many chained audio assets (correctly) tagged basic type "None"][:admin :"asset system"] [2:23:07][Re-run the game and no longer hit our plate export conflict][:"asset system" :run] [2:23:42][Consider how to tag chained audio assets][:"asset system" :speech] [2:26:31][Document hha_sound][:"asset system" :documentation] [2:27:45][Re-run in an optimised build][:run] [2:28:19][Q&A][:speech] [2:28:43][@ivereadthesequel][Q: Have you tried running TabVew with the --no-hermeneutics flag?] [2:29:29][90 / 125 sub points][:admin] [2:32:30][@pythno][Q: You never went to university yet you seem to be very literate in :mathematics. How did you get to this level?] [2:36:12][@Miblo][Q: I got a call from Gary Walsh – Selina Meyer's bag man – while you were unpacking the backpack. He said he's jealous and wants to compare bag layouts...] [2:36:31][@devsigner][Q: What are your thoughts on code introspection or adding metadata to things like structs? Useful, or yet another bad object-oriented idea?][:language] [2:37:50][@jkfsda][Q: Favorite code design learning resources?] [2:37:55][@hexadecimalinteger][Q: Would you use your "from scratch / low level" approach for :"machine learning"? Or just use a :library like TensorFlow?] [2:41:07][@ivereadthesequel][@QuickShift_ asked in the pre-stream: "I guess Dear ImGui is a good example of a properly used global state?"][:language] [2:41:32][@xxy_yxx][Q: Do you have any book recommendations for programming or :mathematics?] [2:42:13][@vapenir][Q: Are you exclusively a C++ guy or have you worked with other languages over the years?][:language] [2:44:00][@theomarest][Q: What's your favorite fairly-new :language? Like the last 10 years] [2:44:31][@ivereadthesequel][Q: What's your impression of Seattle after living there for as long as you have? Where did you live before then?] [2:45:55][@jbcgannon][Q: Come back to Boston] [2:46:49][@hexadecimalinteger][Q: If given a virtually infinite budget, what would you dedicate your time to?] [2:47:12][@insobot][It's still valve] [2:48:14][@victorn][Oh wow, [@cmuratori Casey] is not using Visual Studio debugger anymore! So just the compiler is being used on [~hero Handmade Hero]?] [2:49:08][That's all, folks][:speech] [/video]