[video output=day494 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Preparing Entity Pieces for Alignment Points" vod_platform=youtube id=0Dpi3fIWiBo annotator=Miblo]
[0:01][Recap and set the stage for the day][:"asset system" :speech]
[5:02][Demo the asset editor :UI][:"asset system" :run]
[8:08][Reacquaint ourselves with the bitmap alignment and sizing code][:"asset system" :research]
[10:58][Trim down loaded_bitmap with a view to aligning and sizing bitmaps using the hha data directly][:"asset system"]
[22:21][Check the :performance of _mm_div_ps, _mm_rcp_ps and _mm_mul_ps in the Intel Intrinsics Guide[ref
    site=Intel
    page="Intel Intrinsics Guide"
    url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:research]
[24:13][Replace WidthOverHeight from loaded_bitmap with localised computations][:"asset system"]
[29:17][Make sure that our bitmaps are still there][:"asset system" :run]
[29:30][Remove AlignPercentage from loaded_bitmap, making callers of PushBitmap() responsible for computing this value, and introducing GetFirstAlign()][:"asset system"]
[41:37][:Run the game to find that everything looks fine][:"asset system"]
[42:38][Try making UpdateAndRenderEntities() set the AlignP using GetFirstAlign()][:"asset system"]
[43:30][Try out real-time editing of our asset alignment for the first time][:"asset system" :run :ui]
[44:27][Set up to implement alignment point connections][:"asset system" :speech]
[47:40][Introduce bitmap_piece to specify parent–child connections][:"entity system"]
[52:43][Introduce ConnectPiece() for AddCat() to call][:"entity system"]
[1:04:22][Make ConnectPiece() enforce the rule that the target parent piece must exist][:"entity system"]
[1:05:50][:Run the game and pass this ConnectPiece() test][:"entity system"]
[1:05:58][Make AddCat() try and add the cat's Head before the Body][:"entity system"]
[1:06:25][:Run the game and (correctly) fail that ConnectPiece() test][:"entity system"]
[1:06:30][Introduce a version of PushBitmap() that takes a used_bitmap_dim for UpdateAndRenderEntities() to call][:"entity system"]
[1:15:40][:Run the game with everything being drawn][:"entity system"]
[1:15:49][Consider how to use our alignment points][:"entity system" :speech]
[1:23:20][Move towards the total removal of the object_transform struct from the renderer, first removing Upright][:"entity system" :rendering]
[1:29:27][Check that our bitmaps are all in tact][:"entity system" :rendering :run]
[1:29:53][Remove object_transform entirely][:"entity system" :rendering]
[1:49:14][:Run the game to see that the only breakage was in one cat's bitmap offset][:"entity system" :rendering]
[1:49:50][Fix one GetBitmapDim() call in UpdateAndRenderEntities()][:"entity system" :rendering]
[1:50:23][:Run the game to see that everything is fine][:"entity system" :rendering]
[1:50:57][Q&A][:speech]
[1:51:29][@vkar2][Q: Any news about meowhash?][:hashing]
[1:52:02][@longboolean][Q: Not extremely important, (but Krampus related), just for your information, the word "lauf" in "Krampuslauf" is pronounced more like "ou" in the words "ouch" or "couch". Even less of an issue, in German the "a" in "Krampus" is more of an "ah", more like "Krahmpus". So... "Krahmpuslouf"]
[1:53:03][@guybru5h_vi][Q: I forgot why :sorting was necessary, couldn't we just send it all to the GPU and have the depth buffer sort it out?]
[1:53:53][@somebody_took_my_name][Q: Can you put the shadow offset in the shadow transform now?]
[1:54:33][@blamebauer][Q: When do you plan on shipping the game? I'm really looking forward to play it]
[1:55:04][@hourly_negativity][Q: Are there any particular reasons you use Windows over Linux?]
[1:57:43][@flavioliraviolitest][Q: Hey, just stopped in for the first time, this is really cool. Question is: How much time do you think game devs should spend refactoring code compared to writing new features? I often find it discouraging when I spend too much time refactoring spaghetti code without adding anything new for a while]
[1:59:41][@longboolean][Q: You're dropping the "f"]
[2:00:06][@jessef][Q: Off-topic: Do you have any tips on parsing academic math papers?]
[2:00:54][@abarishu][Q: Are we going to save the changes to the scale and alignment point back to the file they are coming from?][:"asset system"]
[2:01:04][@somebody_took_my_name][@handmade_hero In the TextOp() it still offsets the text][:font]
[2:01:54][@sc4llywag][Off-topic Q: I've heard you mention other :memory management techniques than the arenas as used on [~hero Handmade Hero]]
[2:02:30][@bathat][Q: Should you try and use multi-threading as much as possible, or the other way around? Or does it just depend a lot?][:threading]
[2:05:11][@yesyesyourmother][Q: Can you show [@naysayer88 Jon Blow] how to compile from Emacs with a keyboard shortcut?]
[2:05:21][@sc4llywag][Q: Can you go into a bit of detail about what these :memory allocators / management techniques are?]
[2:05:37][@iof_bastion][Q: So you would never refactor code just for code readability?]
[2:06:45][@plussrolf][Q: Do you plan to add scripts support, i.e: lua scripts (for modding)? If you do, how would you protect the user?]
[2:06:58][@LongBoolean][Q: Also @polijn in twitch chat is right: "pus" in "Krampus" is like "puss" in pussy cat]
[2:07:21][@carbonananas][Q: Unrelated: I just discovered dual quaternions. Are they used in game programming?][:mathematics]
[2:07:42][@somebody_took_my_name][@handmade_hero It's not bad at all, the question was: Could this be in the ShadowTransform?][:ui]
[2:08:20][@guybru5h_vi][Q: What are your thoughts on ISPC for multithreading / SIMD?][:threading]
[2:09:25][Shut down the stream][:speech]
[/video]
