[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Importing Orphans" vod_platform=youtube id=7MnGW4k0LLE annotator=Miblo] [0:00][Welcome to the stream][:speech] [0:19][Show our correct :camera interpolation, and plan to get our hero back in][:run] [2:06][Showcase [@aerettberg Anna]'s new :art pack, with heads and bodies in different files][:admin :"asset system"] [6:53][Tag [@aerettberg Anna]'s new body :art][:admin :"asset system"] [19:38][Name [@aerettberg Anna]'s orphans][:admin :art :"asset system"] [31:41][Add our new tags to the asset_tag_id enum and NameTags array][:"asset system"] [37:49][Introduce ImportBody() and ImportHead() for ParsePieces() to call][:"asset system"] [45:30][Try to import our new assets][:"asset system" :run] [46:21][Make AddPlayer() use our newly imported hero assets][:"asset system"] [53:01][See our hero art in-game, noting that our orientations are backwards][:"asset system" :run] [54:05][Decrease the HeroSizeC in AddPlayer()][:"asset system"] [54:48][Check out our smaller hero in-game][:"asset system" :run] [55:09][Make PushLight() draw our light cube fully transparent][:lighting] [55:52][See our hero more clearly and move towards fixing our facing direction and body picking][:"asset system" :run] [57:49][Change AddPlayer() to add a cat][:"asset system"] [58:44][Find that the cat hero is correctly oriented][:"asset system" :run] [59:40][Investigate our facing direction issue][:"asset system" :research] [1:02:37][Try marking AddPlayer() add Laird][:"asset system"] [1:03:31][Find that Laird is totally correctly oriented][:"asset system" :run] [1:04:01][Try marking AddPlayer() add the baby][:"asset system"] [1:04:16][Find that the baby is also correctly oriented][:"asset system" :run] [1:04:50][Turn off the fire particles in UpdateAndRenderEntities()][:"entity system"] [1:05:17][Spot some garbage above the baby's head][:art :run] [1:05:34][Check out the baby's source :art in GIMP, to determine that it must be an asset-import bug][:admin :"asset system"] [1:07:16][Increase the HeroSizeC in AddPlayer()][:"asset system"] [1:07:28][Check out our baby hero's appearance in-game, noting that the garbage is no longer above the head][:"asset system"] [1:09:24][Make AddPlayer() connect the head to the body][:"asset system"] [1:10:22][Align the baby hero's assets in all orientations][:"asset system" :run] [1:14:17][Increase the head's Z offset in AddPlayer() to prevent Z-fighting][:"asset system"] [1:14:58][Find that our baby hero's head and body no longer Z-fight][:"asset system" :run] [1:16:25][Make AddPlayer() add Viva][:"asset system"] [1:17:48][Align Viva's assets, but find that we've been given the baby's head again][:"asset system" :run] [1:18:41][Make AddPlayer() tag the Body (even for the head)][:"asset system"] [1:19:20][Align Viva's assets][:"asset system" :run] [1:23:29][Take a walk as Viva][:"asset system" :run] [1:24:57][Note the incongruous scaling of the orphans in comparison with the walls][:"asset system" :run] [1:26:01][Decrease the HeroSizeC to 1.25f in AddPlayer()][:"asset system"] [1:26:13][Consider this better because we're not taller than the wall][:"asset system" :run] [1:27:26][Check out Viva's :art in GIMP to find that it is wrong][:admin] [1:29:01][Introduce ReadAssetString() to display annotations in our in-game editor][:"asset system" :ui] [1:34:04][Check out our new "Info" tab in the asset editor][:"asset system" :run :ui] [1:34:27][Enable AssetEditor() to print asset annotations in the "Info" tab][:"asset system" :ui] [1:38:35][See a blank Name in our annotation printout][:"asset system" :run :ui] [1:39:00][Introduce AnnotationLabel() for AssetEditor() to call and print out various annotations that we expect to be populated][:"asset system" :ui] [1:43:39][Switch to the "Info" tab and hit our assertion in GetBitmapInfo()][:"asset system" :run :ui] [1:45:36][Fix GetBitmapInfo() and GetSoundInfo() to handle assets with ID 0][:"asset system"] [1:46:05][Check out the annotated errors in our Info tab][:"asset system" :run :ui] [1:47:07][Investigate our apparent texture transfer bug][:hardware :rendering :research] [1:49:33][Try making BeginTextureOp() fill our required TransferMemory with all white][:hardware :rendering] [1:52:27][Try in vain to trigger our bug][:hardware :rendering :run] [1:54:02][Q&A][:speech] [1:54:56][Introduce AddOrphan() and PlaceOrphan()][:"entity system" :"procedural generation"] [2:00:38][Visit the orphans in the orphanage][:run] [2:01:49][@keebrdb][Q: So are you going to create a Level Editor as well?] [2:02:09][Temporarily expand the :lighting bounds in UpdateAndRenderWorld()] [2:03:29][Find that the :lighting now covers the screen][:run] [2:03:49][@amirrajan][Q: Any thoughts of using dlopen et al to do some :"hot reloading" shenanigans to help with the "feedback" loop?] [2:04:50][@centhusiast][Q: How does the back buffer work when you resize the window? Do you create a new back buffer matching the window size when the window is resized?][:"platform layer"] [2:05:57][Contract the :lighting bounds a little in UpdateAndRenderWorld()] [2:06:53][@philliptrudeau][Q: Quick question, what exactly is the difference between a temp arena and a frame arena? Does the temp arena get collected at a sub-frame interval?][:memory] [2:09:50][@erdomina][Q: Is each character going to have an :animation sequence as NPCs, or are they all playable?][:"entity system"] [2:11:19][@graemephi][Q: Petition to rename the baby Judas][:"asset system"] [2:12:03][Stream has ended][:speech] [/video]