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