Handmade Hero»Episode Guide
Minor Art Update, Reenabling Particles, Glove Fixes
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

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