Handmade Hero»Episode Guide
Self-illuminating Floor Tiles
?
?

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:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:18Demo the lighting
🏃
0:18Demo the lighting
🏃
0:18Demo the lighting
🏃
2:10Determine to add self-illuminating tiles
🏃
2:10Determine to add self-illuminating tiles
🏃
2:10Determine to add self-illuminating tiles
🏃
4:11Reacquaint ourselves with our rendering pipeline
📖
4:11Reacquaint ourselves with our rendering pipeline
📖
4:11Reacquaint ourselves with our rendering pipeline
📖
11:14Consider doing self-illumination through the ACES film curve vs directly (like the cutscene)
📖
11:14Consider doing self-illumination through the ACES film curve vs directly (like the cutscene)
📖
11:14Consider doing self-illumination through the ACES film curve vs directly (like the cutscene)
📖
14:50Reacquaint ourselves with the source of FragEmission
📖
14:50Reacquaint ourselves with the source of FragEmission
📖
14:50Reacquaint ourselves with the source of FragEmission
📖
15:57Introduce the notion of FragTone in the vertex and fragment shaders in CompileZBiasProgram()
15:57Introduce the notion of FragTone in the vertex and fragment shaders in CompileZBiasProgram()
15:57Introduce the notion of FragTone in the vertex and fragment shaders in CompileZBiasProgram()
17:02Run successfully
🏃
17:02Run successfully
🏃
17:02Run successfully
🏃
17:16Indent the fragment shader
17:16Indent the fragment shader
17:16Indent the fragment shader
18:08Yearn for lunch
🗩
18:08Yearn for lunch
🗩
18:08Yearn for lunch
🗩
18:58Indent the fragment shader (cont.)
18:58Indent the fragment shader (cont.)
18:58Indent the fragment shader (cont.)
21:39dedknd Not sure if this is part of Buddhist teaching
🗪
21:39dedknd Not sure if this is part of Buddhist teaching
🗪
21:39dedknd Not sure if this is part of Buddhist teaching
🗪
22:23ryanfleury Don't tell me this is about the 4coder layer
🗪
22:23ryanfleury Don't tell me this is about the 4coder layer
🗪
22:23ryanfleury Don't tell me this is about the 4coder layer
🗪
23:13Reacquaint ourselves with the fog, emission, etc. "tuning knobs" in the fragment shader
📖
23:13Reacquaint ourselves with the fog, emission, etc. "tuning knobs" in the fragment shader
📖
23:13Reacquaint ourselves with the fog, emission, etc. "tuning knobs" in the fragment shader
📖
25:43Separate out the fogging and ACES filtered rendering knobs
25:43Separate out the fogging and ACES filtered rendering knobs
25:43Separate out the fogging and ACES filtered rendering knobs
28:22The game is not tone-mapped, and the cutscene looks right
🏃
28:22The game is not tone-mapped, and the cutscene looks right
🏃
28:22The game is not tone-mapped, and the cutscene looks right
🏃
28:53Premiere the cutscene narration
🏃
28:53Premiere the cutscene narration
🏃
28:53Premiere the cutscene narration
🏃
32:09The cutscene is still working
🏃
32:09The cutscene is still working
🏃
32:09The cutscene is still working
🏃
32:32chillagen No way, this game has TF2 hats?
🗪
32:32chillagen No way, this game has TF2 hats?
🗪
32:32chillagen No way, this game has TF2 hats?
🗪
32:58Thank you for the sub gifting
🗩
32:58Thank you for the sub gifting
🗩
32:58Thank you for the sub gifting
🗩
33:56redunlocked Your posh British accent isn't terrible
🗪
33:56redunlocked Your posh British accent isn't terrible
🗪
33:56redunlocked Your posh British accent isn't terrible
🗪
34:42Start to enable PushQuad() to set the Tone renaming Reserved to Tone in textured_quad
34:42Start to enable PushQuad() to set the Tone renaming Reserved to Tone in textured_quad
34:42Start to enable PushQuad() to set the Tone renaming Reserved to Tone in textured_quad
37:54ryanfleury A really sweet 4coder layer feature would be to log per-line edits and correlate them with timestamps in a session
🗪
37:54ryanfleury A really sweet 4coder layer feature would be to log per-line edits and correlate them with timestamps in a session
🗪
37:54ryanfleury A really sweet 4coder layer feature would be to log per-line edits and correlate them with timestamps in a session
🗪
38:08Plug AndrewJDR's annotated Handmade Hero source code linking to the indexed episode guide1
38:08Plug AndrewJDR's annotated Handmade Hero source code linking to the indexed episode guide1
38:08Plug AndrewJDR's annotated Handmade Hero source code linking to the indexed episode guide1
39:08Enable PushQuad() to set Tone to a VertTone, which is either 255 or, if lighting is off, 0
39:08Enable PushQuad() to set Tone to a VertTone, which is either 255 or, if lighting is off, 0
39:08Enable PushQuad() to set Tone to a VertTone, which is either 255 or, if lighting is off, 0
41:29The game remains not tone-mapped
🏃
41:29The game remains not tone-mapped
🏃
41:29The game remains not tone-mapped
🏃
41:40Specify a Tone vertex array in UseProgramEnd() and UseProgramBegin()
41:40Specify a Tone vertex array in UseProgramEnd() and UseProgramBegin()
41:40Specify a Tone vertex array in UseProgramEnd() and UseProgramBegin()
44:27botondar As far as I know, on modern GPUs the input assembler is just shader code, so you can just fetch them manually (if I understood you correctly)
🗪
44:27botondar As far as I know, on modern GPUs the input assembler is just shader code, so you can just fetch them manually (if I understood you correctly)
🗪
44:27botondar As far as I know, on modern GPUs the input assembler is just shader code, so you can just fetch them manually (if I understood you correctly)
🗪
45:27brian_nevec You can in D3D11 with StructuredBuffer
🗪
45:27brian_nevec You can in D3D11 with StructuredBuffer
🗪
45:27brian_nevec You can in D3D11 with StructuredBuffer
🗪
45:46Associate VertTone in OpenGLCreateProgram()
45:46Associate VertTone in OpenGLCreateProgram()
45:46Associate VertTone in OpenGLCreateProgram()
46:18brian_nevec Yeah, you can use the vertexid to index the buffer
🗪
46:18brian_nevec Yeah, you can use the vertexid to index the buffer
🗪
46:18brian_nevec Yeah, you can use the vertexid to index the buffer
🗪
47:00Our tone-mapping is back, the debug overlay is now correctly unlit and the cutscene still looks right
🏃
47:00Our tone-mapping is back, the debug overlay is now correctly unlit and the cutscene still looks right
🏃
47:00Our tone-mapping is back, the debug overlay is now correctly unlit and the cutscene still looks right
🏃
47:35Determine to add self-illuminating blocks
🗩
47:35Determine to add self-illuminating blocks
🗩
47:35Determine to add self-illuminating blocks
🗩
48:23We've have it all
🗩
48:23We've have it all
🗩
48:23We've have it all
🗩
49:32ryanfleury This DLSR autofocus is in... UNACCEPTABLE CONDITION
🗪
49:32ryanfleury This DLSR autofocus is in... UNACCEPTABLE CONDITION
🗪
49:32ryanfleury This DLSR autofocus is in... UNACCEPTABLE CONDITION
🗪
50:28Change CreateWorld() to connect the dungeon entrance room to the north of (rather than below) the forest entrance
50:28Change CreateWorld() to connect the dungeon entrance room to the north of (rather than below) the forest entrance
50:28Change CreateWorld() to connect the dungeon entrance room to the north of (rather than below) the forest entrance
51:24Traverse to the outdoors, where the ground cover is not lit
🏃
51:24Traverse to the outdoors, where the ground cover is not lit
🏃
51:24Traverse to the outdoors, where the ground cover is not lit
🏃
52:13Reacquaint ourselves with the ground cover drawing code
52:13Reacquaint ourselves with the ground cover drawing code
52:13Reacquaint ourselves with the ground cover drawing code
52:58Make VertexOut() set the Tone to 255 (i.e. tone-map and light it)
52:58Make VertexOut() set the Tone to 255 (i.e. tone-map and light it)
52:58Make VertexOut() set the Tone to 255 (i.e. tone-map and light it)
53:05Our ground cover is lit again
🏃
53:05Our ground cover is lit again
🏃
53:05Our ground cover is lit again
🏃
53:14ponkkiz It fixed the blocky lighting bug?
🗪
53:14ponkkiz It fixed the blocky lighting bug?
🗪
53:14ponkkiz It fixed the blocky lighting bug?
🗪
53:24Traverse to the dungeon
🏃
53:24Traverse to the dungeon
🏃
53:24Traverse to the dungeon
🏃
54:22Volunteer voice acting services to "Downward Dungeon"
🗩
54:22Volunteer voice acting services to "Downward Dungeon"
🗩
54:22Volunteer voice acting services to "Downward Dungeon"
🗩
56:52Sample reel for "Downward Dungeon"
🗩
56:52Sample reel for "Downward Dungeon"
🗩
56:52Sample reel for "Downward Dungeon"
🗩
57:14Workshop some dungeon-based game titles
🗩
57:14Workshop some dungeon-based game titles
🗩
57:14Workshop some dungeon-based game titles
🗩
58:50wakeuphate There should be a game about travelling to the dungeon but not actually doing the dungeon
🗪
58:50wakeuphate There should be a game about travelling to the dungeon but not actually doing the dungeon
🗪
58:50wakeuphate There should be a game about travelling to the dungeon but not actually doing the dungeon
🗪
59:43Workshop some dungeon-based game titles (cont.)
🗩
59:43Workshop some dungeon-based game titles (cont.)
🗩
59:43Workshop some dungeon-based game titles (cont.)
🗩
1:00:17vtlmks "Dude, Where's the Dungeon?"
🗪
1:00:17vtlmks "Dude, Where's the Dungeon?"
🗪
1:00:17vtlmks "Dude, Where's the Dungeon?"
🗪
1:00:34technicbeam I wrote a game once called "Walking Simulator" - it was a text adventure where all you did was walk different directions and 'look'
🗪
1:00:34technicbeam I wrote a game once called "Walking Simulator" - it was a text adventure where all you did was walk different directions and 'look'
🗪
1:00:34technicbeam I wrote a game once called "Walking Simulator" - it was a text adventure where all you did was walk different directions and 'look'
🗪
1:00:43Pitch "Dungeon?" / "Imagine Dragons"
🗩
1:00:43Pitch "Dungeon?" / "Imagine Dragons"
🗩
1:00:43Pitch "Dungeon?" / "Imagine Dragons"
🗩
1:03:09kindly_sloth You could make a Tycoon-style game where you design such a town
🗪
1:03:09kindly_sloth You could make a Tycoon-style game where you design such a town
🗪
1:03:09kindly_sloth You could make a Tycoon-style game where you design such a town
🗪
1:04:37sneakybob_wot "Dave Made a Dungeon"
🗪
1:04:37sneakybob_wot "Dave Made a Dungeon"
🗪
1:04:37sneakybob_wot "Dave Made a Dungeon"
🗪
1:05:01Toggle on TileSwitchPattern in CreateDungeon()
1:05:01Toggle on TileSwitchPattern in CreateDungeon()
1:05:01Toggle on TileSwitchPattern in CreateDungeon()
1:06:08spacenaming "My First Dungeon", and make the game all bright red, yellow and blue
🗪
1:06:08spacenaming "My First Dungeon", and make the game all bright red, yellow and blue
🗪
1:06:08spacenaming "My First Dungeon", and make the game all bright red, yellow and blue
🗪
1:06:14Traverse to the dungeon's tile switches
🏃
1:06:14Traverse to the dungeon's tile switches
🏃
1:06:14Traverse to the dungeon's tile switches
🏃
1:07:10Reacquaint ourselves with the tile switch lighting code
📖
1:07:10Reacquaint ourselves with the tile switch lighting code
📖
1:07:10Reacquaint ourselves with the tile switch lighting code
📖
1:07:59Make ExecuteBrainSwitches() decrease the light's brightness from 10 to 1
1:07:59Make ExecuteBrainSwitches() decrease the light's brightness from 10 to 1
1:07:59Make ExecuteBrainSwitches() decrease the light's brightness from 10 to 1
1:08:17Consider making hot reloading work with the procedural generation
📖
1:08:17Consider making hot reloading work with the procedural generation
📖
1:08:17Consider making hot reloading work with the procedural generation
📖
1:08:48Make CreateWorld() place the player in the dungeon
1:08:48Make CreateWorld() place the player in the dungeon
1:08:48Make CreateWorld() place the player in the dungeon
1:09:10Start in the dungeon and toggle the tile switches
🏃
1:09:10Start in the dungeon and toggle the tile switches
🏃
1:09:10Start in the dungeon and toggle the tile switches
🏃
1:09:42Consider not adding a light source, but just setting the emission of the cube
📖
1:09:42Consider not adding a light source, but just setting the emission of the cube
📖
1:09:42Consider not adding a light source, but just setting the emission of the cube
📖
1:10:28e11m Is the light never going away?
🗪
1:10:28e11m Is the light never going away?
🗪
1:10:28e11m Is the light never going away?
🗪
1:10:34Consider removing the AddPieceLight() call from TileSwitchPattern()
📖
1:10:34Consider removing the AddPieceLight() call from TileSwitchPattern()
📖
1:10:34Consider removing the AddPieceLight() call from TileSwitchPattern()
📖
1:10:57Imagine the "Downward Dungeon" theme song
🗩
1:10:57Imagine the "Downward Dungeon" theme song
🗩
1:10:57Imagine the "Downward Dungeon" theme song
🗩
1:11:58Prevent TileSwitchPattern from calling AddPieceLight()
1:11:58Prevent TileSwitchPattern from calling AddPieceLight()
1:11:58Prevent TileSwitchPattern from calling AddPieceLight()
1:12:19The tiles turn on but do not light up
🏃
1:12:19The tiles turn on but do not light up
🏃
1:12:19The tiles turn on but do not light up
🏃
1:12:31Prevent AddPlayer() from adding a head light, and make the glove's light less green
1:12:31Prevent AddPlayer() from adding a head light, and make the glove's light less green
1:12:31Prevent AddPlayer() from adding a head light, and make the glove's light less green
1:13:17The glove light is a bit too bright
🏃
1:13:17The glove light is a bit too bright
🏃
1:13:17The glove light is a bit too bright
🏃
1:13:21Make AddPlayer() dim the (commented out) head light from 0.1 to 0.05
1:13:21Make AddPlayer() dim the (commented out) head light from 0.1 to 0.05
1:13:21Make AddPlayer() dim the (commented out) head light from 0.1 to 0.05
1:13:29The glove light remains too bright
🏃
1:13:29The glove light remains too bright
🏃
1:13:29The glove light remains too bright
🏃
1:13:35Make AddPlayer() dim the glove light from 0.1 to 0.025
1:13:35Make AddPlayer() dim the glove light from 0.1 to 0.025
1:13:35Make AddPlayer() dim the glove light from 0.1 to 0.025
1:13:43Our glove's glow is more like it
🏃
1:13:43Our glove's glow is more like it
🏃
1:13:43Our glove's glow is more like it
🏃
1:13:57Make TileSwitchPattern() apply the Tag_Stone tag
1:13:57Make TileSwitchPattern() apply the Tag_Stone tag
1:13:57Make TileSwitchPattern() apply the Tag_Stone tag
1:15:51Our stone switches look better
🏃
1:15:51Our stone switches look better
🏃
1:15:51Our stone switches look better
🏃
1:16:18aukkras Heh, the certificate for 4coder website2 expired
🗪
1:16:18aukkras Heh, the certificate for 4coder website2 expired
🗪
1:16:18aukkras Heh, the certificate for 4coder website2 expired
🗪
1:16:52The AI goes wherever it wants
🏃
1:16:52The AI goes wherever it wants
🏃
1:16:52The AI goes wherever it wants
🏃
1:17:10kindly_sloth Did one of those heads just phase through the wall?
🗪
1:17:10kindly_sloth Did one of those heads just phase through the wall?
🗪
1:17:10kindly_sloth Did one of those heads just phase through the wall?
🗪
1:19:09dedknd 03/04/22 Allen: I am not currently developing 4coder. But I intend to pick it up again soon to get the codebase organized for open sourcing
🗪
1:19:09dedknd 03/04/22 Allen: I am not currently developing 4coder. But I intend to pick it up again soon to get the codebase organized for open sourcing
🗪
1:19:09dedknd 03/04/22 Allen: I am not currently developing 4coder. But I intend to pick it up again soon to get the codebase organized for open sourcing
🗪
1:19:34Consider how to represent self-illumination
📖
1:19:34Consider how to represent self-illumination
📖
1:19:34Consider how to represent self-illumination
📖
1:21:33Try making UpdateAndRenderEntities() pass 1 as the Emission value to PushCube()
1:21:33Try making UpdateAndRenderEntities() pass 1 as the Emission value to PushCube()
1:21:33Try making UpdateAndRenderEntities() pass 1 as the Emission value to PushCube()
1:21:40All our cubes are lit
🏃
1:21:40All our cubes are lit
🏃
1:21:40All our cubes are lit
🏃
1:21:44Revert UpdateAndRenderEntities() to pass 0 as the Emission value to PushCube()
1:21:44Revert UpdateAndRenderEntities() to pass 0 as the Emission value to PushCube()
1:21:44Revert UpdateAndRenderEntities() to pass 0 as the Emission value to PushCube()
1:22:15Consider how best to articulate our desired Emission value to the system
📖
1:22:15Consider how best to articulate our desired Emission value to the system
📖
1:22:15Consider how best to articulate our desired Emission value to the system
📖
1:24:01Introduce cube_piece containing an Emission value to replace cube_uv_layout in entity_visible_piece
1:24:01Introduce cube_piece containing an Emission value to replace cube_uv_layout in entity_visible_piece
1:24:01Introduce cube_piece containing an Emission value to replace cube_uv_layout in entity_visible_piece
1:25:26The game still runs
🏃
1:25:26The game still runs
🏃
1:25:26The game still runs
🏃
1:25:30Make UpdateAndRenderEntities() unpack the Emission3
1:25:30Make UpdateAndRenderEntities() unpack the Emission3
1:25:30Make UpdateAndRenderEntities() unpack the Emission3
1:26:46There are no emission cubes
🏃
1:26:46There are no emission cubes
🏃
1:26:46There are no emission cubes
🏃
1:26:58Make ExecuteBrainSwitches() set the switch's emission to 50
1:26:58Make ExecuteBrainSwitches() set the switch's emission to 50
1:26:58Make ExecuteBrainSwitches() set the switch's emission to 50
1:27:24The switches don't emit light
🏃
1:27:24The switches don't emit light
🏃
1:27:24The switches don't emit light
🏃
1:27:54Make UpdateAndRenderEntities() pass the unpacked Emission to PushCube()
1:27:54Make UpdateAndRenderEntities() pass the unpacked Emission to PushCube()
1:27:54Make UpdateAndRenderEntities() pass the unpacked Emission to PushCube()
1:28:19The switches emit light, but don't tell the lighting system they're doing it
🏃
1:28:19The switches emit light, but don't tell the lighting system they're doing it
🏃
1:28:19The switches emit light, but don't tell the lighting system they're doing it
🏃
1:28:54Reacquaint ourselves with PushOccluder() and its use
📖
1:28:54Reacquaint ourselves with PushOccluder() and its use
📖
1:28:54Reacquaint ourselves with PushOccluder() and its use
📖
1:36:00Replace the IsLight boolean with an Emission float in lighting_box
1:36:00Replace the IsLight boolean with an Emission float in lighting_box
1:36:00Replace the IsLight boolean with an Emission float in lighting_box
1:38:21The switches still emit light
🏃
1:38:21The switches still emit light
🏃
1:38:21The switches still emit light
🏃
1:38:44Fold PushLight() and PushOccluder() into a unified PushLightingElement()
1:38:44Fold PushLight() and PushOccluder() into a unified PushLightingElement()
1:38:44Fold PushLight() and PushOccluder() into a unified PushLightingElement()
1:41:24The switches still emit light
🏃
1:41:24The switches still emit light
🏃
1:41:24The switches still emit light
🏃
1:41:39Make ExecuteBrainSwitches() set the Emission on the switch's occluder, rather than the base piece
1:41:39Make ExecuteBrainSwitches() set the Emission on the switch's occluder, rather than the base piece
1:41:39Make ExecuteBrainSwitches() set the Emission on the switch's occluder, rather than the base piece
1:41:56The switches are not lit
🏃
1:41:56The switches are not lit
🏃
1:41:56The switches are not lit
🏃
1:42:13Make ExecuteBrainSwitches() also set the Emission on the switch's base piece
1:42:13Make ExecuteBrainSwitches() also set the Emission on the switch's base piece
1:42:13Make ExecuteBrainSwitches() also set the Emission on the switch's base piece
1:43:01sagian2005 What would translucent lighting even be?
🗪
1:43:01sagian2005 What would translucent lighting even be?
🗪
1:43:01sagian2005 What would translucent lighting even be?
🗪
1:43:15The switches remain not telling the lighting system about their emission
🏃
1:43:15The switches remain not telling the lighting system about their emission
🏃
1:43:15The switches remain not telling the lighting system about their emission
🏃
1:44:06The light leaks a little
🏃
1:44:06The light leaks a little
🏃
1:44:06The light leaks a little
🏃
1:45:10Make UpdateAndRenderEntities() unpack and pass the Emission of occluders to PushLightingElement()
1:45:10Make UpdateAndRenderEntities() unpack and pass the Emission of occluders to PushLightingElement()
1:45:10Make UpdateAndRenderEntities() unpack and pass the Emission of occluders to PushLightingElement()
1:45:50The switches emit light and tell the lighting system about it
🏃
1:45:50The switches emit light and tell the lighting system about it
🏃
1:45:50The switches emit light and tell the lighting system about it
🏃
1:46:06Make ExecuteBrainSwitches() set the Color of the switch's occluder piece
1:46:06Make ExecuteBrainSwitches() set the Color of the switch's occluder piece
1:46:06Make ExecuteBrainSwitches() set the Color of the switch's occluder piece
1:46:29The switches emit cyan light
🏃
1:46:29The switches emit cyan light
🏃
1:46:29The switches emit cyan light
🏃
1:47:15Make ExecuteBrainSwitches() dim the light from 50 to 25
1:47:15Make ExecuteBrainSwitches() dim the light from 50 to 25
1:47:15Make ExecuteBrainSwitches() dim the light from 50 to 25
1:47:25Our tile switch light is better
🏃
1:47:25Our tile switch light is better
🏃
1:47:25Our tile switch light is better
🏃
1:47:52That's it, with a plug of Molly Movie Club4
🗩
1:47:52That's it, with a plug of Molly Movie Club4
🗩
1:47:52That's it, with a plug of Molly Movie Club4
🗩
1:49:35me_love_pomegranate Are you watching Better Call Saul season 6?
🗪
1:49:35me_love_pomegranate Are you watching Better Call Saul season 6?
🗪
1:49:35me_love_pomegranate Are you watching Better Call Saul season 6?
🗪
1:50:52rooctag Do I need to watch Interstellar to enjoy the podcast?
🗪
1:50:52rooctag Do I need to watch Interstellar to enjoy the podcast?
🗪
1:50:52rooctag Do I need to watch Interstellar to enjoy the podcast?
🗪
1:57:20Thanks, everyone
🗩
1:57:20Thanks, everyone
🗩
1:57:20Thanks, everyone
🗩