[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]
