cinera_handmade.network/cmuratori/hero/code/code533.hmml

75 lines
6.9 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[video output=day533 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Importing Particles, Scenery, and Items" vod_platform=youtube id=fxSCbuBRxuc annotator=Miblo]
[0:01][Recap and set the stage for the day sprucing up the :"asset system"][:speech]
[6:38][Crash on the GetFontInfo() call in InitializeUI()][:"asset system" :font :run]
[7:12][Determine to investigate the problem with segoeui.hht][:font :speech]
[9:19][Step in to GetFontInfo() to see that it could not find our :font][:run]
[10:40][Reacquaint ourselves with the tagging of :font assets from ParseFontBlock()][:research]
[14:18][Check out the base_game.hha dump in TabView, to find no :font][:admin]
[17:22][Step in to ParseFontBlock() to find that :parsing fails on encountering a negative floating point kerning value][:font :run]
[19:56][Investigate why we are putting negative values into the HorizontalAdvance table[ref
site="Windows Dev Center"
page="GetKerningPairsW function"
url=https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/nf-wingdi-getkerningpairsw][ref
site="Windows Dev Center"
page="KERNINGPAIR structure"
url=https://docs.microsoft.com/en-gb/windows/desktop/api/wingdi/ns-wingdi-tagkerningpair]][:font :research]
[25:57][Fix LoadGlyphBitmap() to compute the AlignPercentage and KerningChange in (signed) 32-bit floating point space][:language]
[27:23][Regenerate our Segoe UI assets, to find that SegoeUI.hht contains purely positive Kerning values][:admin :font]
[29:54][Successfully find the :font, and take a close look at its alpha blending and tight kerning][:run]
[34:04][Swap our :font back to Liberation Mono][:admin]
[34:28][Find that Liberation Mono is loaded okay][:font :run]
[34:54][Prevent GAME_UPDATE_AND_RENDER() from playing the music]
[35:27][Determine to address asset tagging, noting that our floors are erroneously stone][:"asset system" :run]
[36:50][Investigate why our stone texture is never getting selected][:"asset system" :research]
[40:38][Add a breakable place in UpdateAndRenderEntities() when matching Tag_Grass][:"asset system"]
[41:34][Break in to UpdateAndRenderEntities() to see how the Grass tag gets matched][:"asset system" :run]
[44:16][Fix GenerateRoom() to only apply the Manmade tag if the room is not outdoors][:"procedural generation"]
[45:23][Find that our grass texture is correctly applied, and determine to furnish the world][:"procedural generation" :run]
[47:11][Peruse our :art and consider respecifying obstacles, splitting them into their own files][:admin]
[51:52][Start to add our obstacles to base_game.hht][:admin :"asset system"]
[53:01][Split out the red armchair into its own file, including a new green variant][:art :drawing]
[1:02:30][Split out the table lamp into its own file][:art :drawing]
[1:04:03][Consider how to categorise the forestry][:art :drawing]
[1:07:12][Split out and arrange the ground cover foliage into separate files][:art :drawing]
[1:15:32][Delete our obsolete :art files, and add our new packs to base_game.hht][:admin :"asset system"]
[1:23:34][Enable ParseTopLevelBlock() to handle "particle" and "scenery" blocks, introducing CreateArtParticleTagGrid(), CreateArtItemTagGrid() and CreateArtSceneryTagGrid()][:"asset system" :parsing]
[1:37:15][Encounter an "unrecognised tag name" :parsing error][:"asset system" :run]
[1:37:46][Add a Hat tag][:"asset system" :parsing]
[1:38:09][Successfully import our assets][:"asset system" :parsing :run]
[1:38:23][Check out the base_game.hha dump in TabView][:admin :"asset system"]
[1:40:11][Make AddPlayer() add a hat][:"asset system"]
[1:41:48][Find that our hero's head sadly lacks a hat][:"asset system" :run]
[1:42:03][Make AddPlayer() connect the hat to the head]
[1:43:21][Find that our hero's head still sadly lacks a hat][:"asset system" :run]
[1:43:35][Add an alignment point for TopOfHead and see the hat appear][:"asset system" :run]
[1:45:58][View the hats to see that their orientations do not match the template][:admin :"asset system"]
[1:46:39][Investigate why the hat is absent when we are facing downwards][:"asset system" :run]
[1:48:11][Note that the FacingDirection is being set the same and that we imported too many assets from item_hat_03.png][:admin :"asset system"]
[1:49:49][Take a close look at item_hat_03.png][:art :drawing]
[1:53:29][Make AddPlayer() add the Cook tag][:"asset system"]
[1:53:54][Check out our cook's appearance and set the alignment points][:"asset system" :run]
[1:57:52][Q&A][:speech]
[1:58:23][@victorn][Q: Was Michael Abrash around during your time at RAD?]
[1:58:41][@frostyninja][Q: Copy pasta snafu with the variant using YIndex instead of XIndex in the scenery tag grid][:"asset system" :parsing]
[1:58:57][Fix typo in CreateArtSceneryTagGrid()][:"asset system" :parsing]
[1:59:05][@thepr1ms][Q: How about "ornaments" for the oriented furniture instead of "scenery"?][:"asset system"]
[1:59:18][@nordicplayer][Q: I'm creating an OpenGL engine in C#. I really enjoy the language and I'm enjoying the process, but should I just go move to C++?][:language]
[2:01:00][@guybru5h_vi][Q: What's your learning method when faced with a new topic? How do you juggle figuring things out yourself vs reading a textbook. My problem is wanting to move quickly but also wanting to learn deeply]
[2:03:40][@theomarest][Q: Do you have an official code style guide anywhere?][:language]
[2:03:56][@alex_deak][Q: Hi from Hungary! I took your advice you gave me last week and started a blog[ref
site=Variables
url=https://sandordeak.home.blog/] to get involved in the game industry. It contains a few posts already, and some description of my earlier projects. Maybe worth reading sometime]
[2:08:30][@frostyninja][Q: Hi from Bulgaria (er UK now)! Im starting an internship in July at a game studio and Im super excited and I feel I owe you a lot of gratitude for keeping me excited about game dev!]
[2:09:27][@Brian][Q: Greetings [@cmuratori Casey]! You have a distinct coding style and though I realize you may have evolved into it over the years, I was wondering if there was there something specific that directed you? It could even have been you did not like other styles. I know you appreciate good typography too so I wonder if some of your decisions were based on what you like][:language]
[2:12:20][@xxthebigfoxx][Q: You deleted an X]
[2:12:22][Re-fix typo in CreateArtSceneryTagGrid()][:"asset system" :parsing]
[2:12:28][@theomarest][Q: Are u32, f32, etc. aliases or supported by the :language?]
[2:12:59][Thank [@x13pixels George] for fixing our reported ~remedybg bugs][:speech]
[2:15:17][@alexkelbo][Q: When porting to other platforms, do you have to rewrite all your shaders in HLSL and Metal SL? Is there a way to transpile GLSL?][:language]
[2:17:15][Plug [@naysayer88 Jon]'s talk 'Preventing the Collapse of Civilization' from DevGAMM Moscow 2019[ref
site=YouTube
page="Jonathan Blow - Preventing the Collapse of Civilization (English only)"
url=https://www.youtube.com/watch?v=pW-SOdj4Kkk]][:speech]
[2:22:47][Wrap it up][:speech]
[/video]