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