[video output=day514 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Separating Image and Metadata Imports" vod_platform=youtube id=Kbw67tdiaHo annotator=Miblo]
[0:00][Recap and set the stage for the day communicating asset data between the .hht and .hha files][:"asset system" :speech]
[4:11][Merging alignment points into .hht][:"asset system" :speech]
[7:18][Our options for merging in alignment points][:"asset system" :speech]
[9:49][Pair up the .hht and .hha files by removing the "HHA" identifier, and make ParseTopLevelBlock() parse in alignment points from .hha up front for rebuilding while :parsing the .hht][:"asset system"]
[22:36][Enable ParseTopLevelBlock() to perform our full and metadata rebuilds][:"asset system" :parsing]
[42:54][Introduce #hha and #include preprocessor directives to re-allow decoupling of .hht and .hha files][:"asset system" :parsing]
[46:36][About @Molly's feeder][:speech :trivia]
[47:39][Make ParseHHT() handle the #hha directive][:"asset system" :parsing]
[51:15][Make ParseHHT() and ImportChangedAssets() handle the #include directive][:"asset system" :parsing]
[57:59][Relieve ParsePieces() of appending tags and WriteImageToHHA() of writing out annotations][:"asset system" :parsing]
[1:20:42][Introduce StampAssets() to merge tags and write out annotations][:"asset system" :parsing]
[1:38:33][:Run the parser for the first time][:"asset system" :parsing :run]
[1:39:18][Fix the sense of the Asset->Type assertion in SetAssetType()][:"asset system" :parsing]
[1:41:46][Trigger an asset reimport and step through the .hht parser][:"asset system" :parsing :run]
[1:44:31][Trigger another asset reimport and step through GetTokenRaw() to find that we fail to tokenize multi-line comments][:"asset system" :parsing :run]
[1:45:26][Fix GetTokenRaw() to account for its character advancement][:"asset system" :parsing]
[1:47:43][Step through GetTokenRaw() to find that we correctly tokenize the whole intro_cutscene.hht and base_game.hht][:"asset system" :parsing :run]
[1:52:06][Enable GetOrCreateHHAByStem() to create a .hha if it doesn't exist, introducing InitSourceHHA()][:"asset system" :"file io" :parsing]
[2:16:46][Trigger an import and step through GetOrCreateHHAByStem() until InitSourceHHA() fails to open our newly created file][:"asset system" :"file io" :parsing :run]
[2:19:16][Fix GetOrCreateHHAByStem() to close the file before calling InitSourceHHA()][:"asset system" :"file io"]
[2:20:14][Q&A][:speech]
[2:20:58][@jasonoftheb][Q: You still parse At\[1\] in one of the newline cases instead of At\[0\]][:"asset system" :parsing]
[2:21:10][Fix typo in GetTokenRaw()][:"asset system" :parsing]
[2:21:29][@jim0_o][Q: You had a NOTE you changed to a TODO, but what if by "with the right data!" indicated the code wasn't or isn't using the right data (yet)?]
[2:22:48][@aidsjorb][Q: You using a KVM in that setup? Do you like it?]
[2:24:31][@devsigner][Q: Do you have an idea as to what the gameplay of [~hero Handmade Hero] will be, or are you just doing more of that design exploration?][:"game design"]
[2:25:54][@rebelavalon][Q: (Repeating my question) What makes asset importing special the way you're doing it, compared to other ways in other game libs?][:"asset loading" :"asset system"]
[2:28:52][@centhusiast][Q: Is CheckSumOf() based on murmur hash?][:hashing]
[2:29:03][@rebelavalon][Q: When you import assets, do they go into some kind of target? Like a texture atlas? I'm new at this game stuff][:"asset loading" :"asset system"]
[2:30:04][Spritesheets and texture atlases][:art :"asset loading" :speech]
[2:33:48][Wrap it up with an announcement of next weekend's ~4coder Jam with [@mr4thdimention Allen]][:speech]
[/video]
