Handmade Hero»Episode Guide
Encoding Cube UVs
?
?

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 focusing on the asset system
🗩
0:02Recap and set the stage for the day focusing on the asset system
🗩
0:02Recap and set the stage for the day focusing on the asset system
🗩
4:24Determine to decorate the world and bind assets to entities
🏃
4:24Determine to decorate the world and bind assets to entities
🏃
4:24Determine to decorate the world and bind assets to entities
🏃
11:20Open "Fog is broken!" issue1
🗹
11:20Open "Fog is broken!" issue1
🗹
11:20Open "Fog is broken!" issue1
🗹
12:51A few words on learning GitHub for Meow hash2
🗩
12:51A few words on learning GitHub for Meow hash2
🗩
12:51A few words on learning GitHub for Meow hash2
🗩
13:49Determine to work on asset binding, using Snuffleupagus-Oriented Programming
🗩
13:49Determine to work on asset binding, using Snuffleupagus-Oriented Programming
🗩
13:49Determine to work on asset binding, using Snuffleupagus-Oriented Programming
🗩
17:45Snuffleupagus-Oriented Programming (SOP)
🗩
17:45Snuffleupagus-Oriented Programming (SOP)
🗩
17:45Snuffleupagus-Oriented Programming (SOP)
🗩
19:42Set up to bind assets to entities
🗩
19:42Set up to bind assets to entities
🗩
19:42Set up to bind assets to entities
🗩
24:59Change the multi-dimensional version of AddPiece() to take a v3 Dim
24:59Change the multi-dimensional version of AddPiece() to take a v3 Dim
24:59Change the multi-dimensional version of AddPiece() to take a v3 Dim
30:25Run the game to see that all is well and good
🏃
30:25Run the game to see that all is well and good
🏃
30:25Run the game to see that all is well and good
🏃
32:19Introduce EncodeCubeUVLayout()
32:19Introduce EncodeCubeUVLayout()
32:19Introduce EncodeCubeUVLayout()
46:26Consider the visibility of our art, with an eye to the possible future existence of floor tiles that reflect the undersides of tiles above them
🏃
46:26Consider the visibility of our art, with an eye to the possible future existence of floor tiles that reflect the undersides of tiles above them
🏃
46:26Consider the visibility of our art, with an eye to the possible future existence of floor tiles that reflect the undersides of tiles above them
🏃
49:21Make EncodeCubeUVLayout() encode the BottomIndex and BottomFacingIndex in the final two bits of our UV layout, and PushCube() decode UV layouts
49:21Make EncodeCubeUVLayout() encode the BottomIndex and BottomFacingIndex in the final two bits of our UV layout, and PushCube() decode UV layouts
49:21Make EncodeCubeUVLayout() encode the BottomIndex and BottomFacingIndex in the final two bits of our UV layout, and PushCube() decode UV layouts
1:04:38Enable PushCube() to directly decrypt coordinates without a table lookup
1:04:38Enable PushCube() to directly decrypt coordinates without a table lookup
1:04:38Enable PushCube() to directly decrypt coordinates without a table lookup
1:13:58Switch the Renderer Test over to use our new UV layout
1:13:58Switch the Renderer Test over to use our new UV layout
1:13:58Switch the Renderer Test over to use our new UV layout
1:16:15Run the Renderer Test to see that we may have got our bottom and top reversed
🏃
1:16:15Run the Renderer Test to see that we may have got our bottom and top reversed
🏃
1:16:15Run the Renderer Test to see that we may have got our bottom and top reversed
🏃
1:16:36Fix PushCube() to offset the top faces by 0.75
1:16:36Fix PushCube() to offset the top faces by 0.75
1:16:36Fix PushCube() to offset the top faces by 0.75
1:17:02Run the Renderer Test to see that everything looks correct
🏃
1:17:02Run the Renderer Test to see that everything looks correct
🏃
1:17:02Run the Renderer Test to see that everything looks correct
🏃
1:17:09Test our UV encoding by making PushSimpleScene() rotate the WallEndUV by 90°
1:17:09Test our UV encoding by making PushSimpleScene() rotate the WallEndUV by 90°
1:17:09Test our UV encoding by making PushSimpleScene() rotate the WallEndUV by 90°
1:17:43Run the Renderer Test to see the wall end top-facing texture rotated 90°
🏃
1:17:43Run the Renderer Test to see the wall end top-facing texture rotated 90°
🏃
1:17:43Run the Renderer Test to see the wall end top-facing texture rotated 90°
🏃
1:17:53Further test the UV encoding by rotating the full WallUV by 270°
🏃
🖮
1:17:53Further test the UV encoding by rotating the full WallUV by 270°
🏃
🖮
1:17:53Further test the UV encoding by rotating the full WallUV by 270°
🏃
🖮
1:19:56Enable PushCube() to correctly decode negative offsets for the bottom and top faces
1:19:56Enable PushCube() to correctly decode negative offsets for the bottom and top faces
1:19:56Enable PushCube() to correctly decode negative offsets for the bottom and top faces
1:21:06Orientation of Textures
🖌
1:21:06Orientation of Textures
🖌
1:21:06Orientation of Textures
🖌
1:23:33Fix CubeDecodeX() and CubeDecodeY() to rotate textures 90° anticlockwise from 0 to 3
1:23:33Fix CubeDecodeX() and CubeDecodeY() to rotate textures 90° anticlockwise from 0 to 3
1:23:33Fix CubeDecodeX() and CubeDecodeY() to rotate textures 90° anticlockwise from 0 to 3
1:25:12Run the Renderer Test to see that the rotation is good
🏃
1:25:12Run the Renderer Test to see that the rotation is good
🏃
1:25:12Run the Renderer Test to see that the rotation is good
🏃
1:25:41Reflect on the bandwidth saving of our layout encoding
🗩
1:25:41Reflect on the bandwidth saving of our layout encoding
🗩
1:25:41Reflect on the bandwidth saving of our layout encoding
🗩
1:26:47Augment entity_visible_piece with a CubeUVLayout for AddPiece() to set
1:26:47Augment entity_visible_piece with a CubeUVLayout for AddPiece() to set
1:26:47Augment entity_visible_piece with a CubeUVLayout for AddPiece() to set
1:31:28Consider supporting mirroring
🗩
1:31:28Consider supporting mirroring
🗩
1:31:28Consider supporting mirroring
🗩
1:33:12Move on to asset tagging, possibly using a two-tier system: 1) select asset set; 2) use entity information to pick asset from set
🗩
1:33:12Move on to asset tagging, possibly using a two-tier system: 1) select asset set; 2) use entity information to pick asset from set
🗩
1:33:12Move on to asset tagging, possibly using a two-tier system: 1) select asset set; 2) use entity information to pick asset from set
🗩
1:41:20Introduce the notion of an asset_basic_category
1:41:20Introduce the notion of an asset_basic_category
1:41:20Introduce the notion of an asset_basic_category
1:52:01Run the game with a view to building import tables to bind textures to our scene
🏃
1:52:01Run the game with a view to building import tables to bind textures to our scene
🏃
1:52:01Run the game with a view to building import tables to bind textures to our scene
🏃
1:53:23Q&A
🗩
1:53:23Q&A
🗩
1:53:23Q&A
🗩
1:53:51Rounin Q: In the Renderer Test, the corner blocks that are on the side of the building have their diagonal beams reversed, due to sharing their texture with the front blocks. Do you have a plan for handling that?
🗪
1:53:51Rounin Q: In the Renderer Test, the corner blocks that are on the side of the building have their diagonal beams reversed, due to sharing their texture with the front blocks. Do you have a plan for handling that?
🗪
1:53:51Rounin Q: In the Renderer Test, the corner blocks that are on the side of the building have their diagonal beams reversed, due to sharing their texture with the front blocks. Do you have a plan for handling that?
🗪
1:54:37Change the cube_uv_layout struct to just be a u16 to future-proof the renderer, and enable the Renderer Test to set UV layouts for elements
1:54:37Change the cube_uv_layout struct to just be a u16 to future-proof the renderer, and enable the Renderer Test to set UV layouts for elements
1:54:37Change the cube_uv_layout struct to just be a u16 to future-proof the renderer, and enable the Renderer Test to set UV layouts for elements
2:04:44Run the Renderer Test to see the current texture layout
🏃
2:04:44Run the Renderer Test to see the current texture layout
🏃
2:04:44Run the Renderer Test to see the current texture layout
🏃
2:05:08Enable PlaceRectangularWall() to explicitly lay out the lower-left corner texture
2:05:08Enable PlaceRectangularWall() to explicitly lay out the lower-left corner texture
2:05:08Enable PlaceRectangularWall() to explicitly lay out the lower-left corner texture
2:07:27Run the Renderer Test to see the lower-left corner texture correctly rotated
🏃
2:07:27Run the Renderer Test to see the lower-left corner texture correctly rotated
🏃
2:07:27Run the Renderer Test to see the lower-left corner texture correctly rotated
🏃
2:08:28Enable PlaceRectangularWall() to explicitly lay out the lower-right corner texture
2:08:28Enable PlaceRectangularWall() to explicitly lay out the lower-right corner texture
2:08:28Enable PlaceRectangularWall() to explicitly lay out the lower-right corner texture
2:09:38Run the Renderer Test to see the lower-right corner texture correctly rotated
🏃
2:09:38Run the Renderer Test to see the lower-right corner texture correctly rotated
🏃
2:09:38Run the Renderer Test to see the lower-right corner texture correctly rotated
🏃
2:09:52Enable PlaceRectangularWall() to explicitly lay out the far corner textures
2:09:52Enable PlaceRectangularWall() to explicitly lay out the far corner textures
2:09:52Enable PlaceRectangularWall() to explicitly lay out the far corner textures
2:11:00Run the Renderer Test to see all our exterior wall textures correctly rotated
🏃
2:11:00Run the Renderer Test to see all our exterior wall textures correctly rotated
🏃
2:11:00Run the Renderer Test to see all our exterior wall textures correctly rotated
🏃
2:12:47Enable PlaceRectangularWall() to decorate the horizontal interior walls
2:12:47Enable PlaceRectangularWall() to decorate the horizontal interior walls
2:12:47Enable PlaceRectangularWall() to decorate the horizontal interior walls
2:15:09Run the Renderer Test to see no interior beaming
🏃
2:15:09Run the Renderer Test to see no interior beaming
🏃
2:15:09Run the Renderer Test to see no interior beaming
🏃
2:16:10Fix typo in PlaceRectangularWall()
2:16:10Fix typo in PlaceRectangularWall()
2:16:10Fix typo in PlaceRectangularWall()
2:17:11Run the Renderer Test to see interior beaming
🏃
2:17:11Run the Renderer Test to see interior beaming
🏃
2:17:11Run the Renderer Test to see interior beaming
🏃
2:17:50Enable PlaceRectangularWall() to decorate the vertical interior walls
2:17:50Enable PlaceRectangularWall() to decorate the vertical interior walls
2:17:50Enable PlaceRectangularWall() to decorate the vertical interior walls
2:23:00Run the Renderer Test to see beaming everywhere
🏃
2:23:00Run the Renderer Test to see beaming everywhere
🏃
2:23:00Run the Renderer Test to see beaming everywhere
🏃
2:23:59fzes_95 Q: When will you use the new 4coder update?
🗪
2:23:59fzes_95 Q: When will you use the new 4coder update?
🗪
2:23:59fzes_95 Q: When will you use the new 4coder update?
🗪
2:24:19That's it for today
🗩
2:24:19That's it for today
🗩
2:24:19That's it for today
🗩