[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Minor Art Update, Reenabling Particles, Glove Fixes" vod_platform=youtube id=Ba8W1dpqaRU annotator=Miblo] [0:02][Recap and set the stage for the day incorporating [@aerettberg Anna]'s :art updates[ref site=GitHub page="HandmadeHero / cpp" url=https://github.com/HandmadeHero/cpp/issues]][:speech] [3:34][Start to merge in [@aerettberg Anna]'s :art updates using Meld][:admin] [4:54][Plug Beyond Compare[ref site="Scooter Software: Home of Beyond Compare" url=http://www.scootersoftware.com/]][:speech] [5:44][Use Meld to merge in [@aerettberg Anna]'s :art updates without diffing the .png files][:admin] [7:31][A few words on permissive conformance][:speech] [9:08][Continue to merge in [@aerettberg Anna]'s :art updates, using her filenames][:admin] [10:47][Tag our updated :art files in base_game.hht][:admin :"asset system"] [20:10][Add tags for Stars, Smoke, Cover, Particle and Fire][:"asset system" :parsing] [22:07][Tag our updated scenery :art in base_game.hht][:admin :"asset system"] [24:41][Add tags for Table, Rug and Sofa, and deprecate Evergreen][:"asset system" :parsing] [26:33][Oh hello, @Molly!][:speech] [30:02][Tag our updated tree :art in base_game.hht][:admin :"asset system"] [32:31][Enable GenerateRoom() to plant more tree variants][:"asset system" :"procedural generation"] [33:53][Import our new :art, close the "hero body has left/right directions reversed" issue[ref site="GitHub" page="HandmadeHero / cpp / hero body has left/right directions reversed" url=https://github.com/HandmadeHero/cpp/issues/95] and note that the tree variants are not being picked fairly][:"asset system" :run] [35:55][Close fixed :art issues[ref site=GitHub page="HandmadeHero / cpp" url=https://github.com/HandmadeHero/cpp/issues]][:admin] [36:37][Fair picking of asset variants][:"asset system" :speech] [41:25][Close the "Re-enable sound data loading / caching" issue[ref site="GitHub" page="HandmadeHero / cpp / Re-enable sound data loading / caching" url=https://github.com/HandmadeHero/cpp/issues/80]][:admin] [41:55][Auto-spreading of asset variants][:"asset system" :speech] [42:53][Open "Need to automatically assign variant values" issue[ref site="GitHub" page="HandmadeHero / cpp / Need to automatically assign variant values" url=https://github.com/HandmadeHero/cpp/issues/100]][:admin :"asset system"] [43:38][Set up to re-enable particles][:"particle system" :run] [44:48][Get UpdateAndRenderFire() working again[ref site=Wikipedia page="Material point method" url=https://en.wikipedia.org/wiki/Material_point_method]][:"particle system"] [49:25][Check out our particles in-game][:"particle system" :run] [49:36][Make InitParticleCache() pick smoke particles][:"particle system"] [50:33][See no smoke particles][:"particle system" :run] [51:02][Make InitParticleCache() pick from particle assets][:"particle system"] [51:12][Check out our smoke particles, noting their inconsistent displacement during :camera transitions][:"particle system" :run] [52:27][Trim down particle_4x and add a Size for SpawnFire() to set()][:"particle system"] [55:39][Try changing the M() macro to use the _mm_extract_ps() instruction, before reverting it because this instruction must take an immediate][:isa] [57:57][Make SpawnFire() shrink our particles, and again note their inconsistent displacement][:"particle system" :programming :run] [59:02][Set up to consistently displace particles as the :camera transitions][:camera :"particle system" :research] [1:01:14][Prevent UpdateAndRenderWorld() from :lighting the hero] [1:01:32][Check out our unlit hero][:lighting :run] [1:01:45][Enable UpdateAndRenderWorld() to displace the particles more correctly during :camera transition][:"particle system"] [1:05:33][See that the particles are almost correctly displaced, only wrong on the first frame of a :camera transition][:"particle system" :run] [1:06:05][Fix UpdateAndRenderFire() to apply particle displacement after rendering it for this frame][:"particle system"] [1:07:30][See that the particles are stably displaced][:"particle system" :run] [1:07:52][Tweak SpawnFire() to fade the particles faster][:"particle system"] [1:08:10][Check out our faster fading particles][:"particle system" :run] [1:09:29][Try making UpdateAndRenderFire() square the alpha to try and make particles fade perceptually linearly][:rendering] [1:10:12][Check out the squared alpha fading][:rendering :run] [1:10:29][Try making UpdateAndRenderFire() square-root the alpha][:rendering] [1:10:44][Check out the square-rooted fading][:rendering :run] [1:10:55][Try making UpdateAndRenderFire() cube the alpha][:rendering] [1:11:04][Check out the cubed fading][:rendering :run] [1:11:11][Settle of making UpdateAndRenderFire() square the alpha] [1:11:17][Admire our squared alpha fade][:rendering :run] [1:11:28][Make SpawnFire() disperse the smoke a little wider][:"particle system"] [1:12:02][Check out the weakly dispersed smoke][:"particle system" :run] [1:12:14][Make SpawnFire() disperse the smoke wider still][:"particle system"] [1:12:26][Check out the more dispersed smoke][:"particle system" :run] [1:12:31][Change SpawnFire() to use the same XDir and YDir when both positioning and moving the particles][:"particle system"] [1:13:39][Find that we're spawning four identical particles][:"particle system" :run] [1:13:53][Fix SpawnFire() to produce four different particles per instruction][:"particle system"] [1:15:42][Check out our dispersed particles][:"particle system" :run] [1:16:05][Slow down the particles in SpawnFire()][:"particle system"] [1:16:15][Admire our particles and :art and consider tackling the variant problem][:"asset system" :"particle system" :run] [1:17:07][Prevent GenerateRoom() from sticking that errant chair in the doorway][:"procedural generation"] [1:17:52][Successfully traverse the orphanage down to the dungeons][:"procedural generation" :run] [1:19:06][Consider what small thing we could do next][:speech] [1:21:05][Slow down the punch speed in UpdateAndRenderEntities()][:animation] [1:22:29][Try punching, and note that the glove drops down to the floor][:animation :run] [1:23:12][Make ExecuteBrainHero() elevate the glove to its regular Z position while punching][:animation :"entity system"] [1:24:52][Check out the more correct punching height][:animation :"entity system" :run] [1:25:19][Make ExecuteBrainHero() predicate the glove's hover position on the hero's facing direction][:animation :"entity system"] [1:26:15][Find that the glove is directly in front of the hero][:animation :"entity system" :run] [1:26:52][Make ExecuteBrainHero() position the glove beside the hero's head][:animation :"entity system"] [1:27:11][Check out the glove's sideways position][:animation :"entity system" :run] [1:27:30][Make ExecuteBrainHero() lower the glove's hover height][:animation :"entity system"] [1:28:01][Check out the glove's lower position][:animation :"entity system" :run] [1:28:36][Make ExecuteBrainHero() preserve the glove's position at the end of its swing][:animation :"entity system"] [1:29:30][Check out the glove's preserved position][:animation :"entity system" :run] [1:30:28][Try slowing down the punch speed in UpdateAndRenderEntities()][:animation :"entity system" :programming :run] [1:30:56][Give the snake some hit points][:"entity system"] [1:32:31][Hunt down the snake to see its three hit points][:"entity system" :run] [1:33:17][Toggle on the :collision volume :"debug visualisation" in UpdateAndRenderEntities()] [1:33:42][Check out the hero's :collision volume][:"debug visualisation" :run] [1:34:28][Make AddPlayer() create a :collision volume for the glove][:"entity system"] [1:35:42][Check out the glove's :collision volume][:"debug visualisation" :run] [1:36:02][Make AddSnake() create a :collision volume][:"entity system"] [1:36:51][Check out the snake's :collision volume, and try to herd him up the stairs][:"debug visualisation" :movement :run] [1:38:31][Determine to make our punch damage the snake, preventing UpdateAndRenderEntities() from calling MoveEntity()][:"entity system"] [1:42:42][Find that everything remains fine][:"entity system" :run] [1:42:58][Set up UpdateAndRenderEntities() to perform overlap testing of entities][:"entity system"] [1:44:50][Q&A][:speech] [1:45:16][@vtlmks][Q: The AmigaOS used vblank interrupt (irq 3) for the scheduler, and the DEFAULT_QUANTUM was 4][:hardware :timing] [1:48:02][@vtlmks][Q: 4 frames then changed to next task using prioritized round-robin][:hardware :timing] [1:49:13][@ormone88][Q: Will collisions be solved in a physically-based way, or in a "hacky" way?][:collision :physics] [1:51:34][@philpowers][NTSC is \~30FPS, not 60, no?[ref site=Wikipedia page=PAL url=https://en.wikipedia.org/wiki/PAL]][:hardware] [1:54:40][Close the "Hat 3 (flower) seems to be out-of-order" issue[ref site="GitHub" page="HandmadeHero / cpp / Hat 3 (flower) seems to be out-of-order" url=https://github.com/HandmadeHero/cpp/issues/97]][:admin :art] [1:55:22][Wrap it up][:speech] [/video]