Handmade Hero»Episode Guide
Associating Tags with PNGs
?
?

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 improving our asset system
🗩
0:00Recap and set the stage for the day improving our asset system
🗩
0:00Recap and set the stage for the day improving our asset system
🗩
2:14Run the game with the determination to texture our world
🏃
2:14Run the game with the determination to texture our world
🏃
2:14Run the game with the determination to texture our world
🏃
3:43Set up to associate asset file contents with tags
🗩
3:43Set up to associate asset file contents with tags
🗩
3:43Set up to associate asset file contents with tags
🗩
10:36Introduce ProcessSingleTileImport() performing functionality pulled out of ProcessTiledImport() into WriteImageToHHA() and DownsampleToFits()
10:36Introduce ProcessSingleTileImport() performing functionality pulled out of ProcessTiledImport() into WriteImageToHHA() and DownsampleToFits()
10:36Introduce ProcessSingleTileImport() performing functionality pulled out of ProcessTiledImport() into WriteImageToHHA() and DownsampleToFits()
37:52Change ProcessMultiTileImport() to include the border when extracting a tile, and introduce import_source_info
37:52Change ProcessMultiTileImport() to include the border when extracting a tile, and introduce import_source_info
37:52Change ProcessMultiTileImport() to include the border when extracting a tile, and introduce import_source_info
50:47Run the game and crash in ProcessMultiTileImport()
🏃
50:47Run the game and crash in ProcessMultiTileImport()
🏃
50:47Run the game and crash in ProcessMultiTileImport()
🏃
51:57Step in to ProcessMultiTileImport() and inspect the TileImage
🏃
51:57Step in to ProcessMultiTileImport() and inspect the TileImage
🏃
51:57Step in to ProcessMultiTileImport() and inspect the TileImage
🏃
53:01Fix ProcessMultiTileImport() to loop over the TileImage
53:01Fix ProcessMultiTileImport() to loop over the TileImage
53:01Fix ProcessMultiTileImport() to loop over the TileImage
53:20Run the game to see that it's close to working
🏃
53:20Run the game to see that it's close to working
🏃
53:20Run the game to see that it's close to working
🏃
54:03Investigate the possibility that we have an offset problem
54:03Investigate the possibility that we have an offset problem
54:03Investigate the possibility that we have an offset problem
59:52Introduce GetDownsampleCountForFit() and introduce Downsample() that takes a DownsampleCount, to make sure all tiles get downsampled the same amount
59:52Introduce GetDownsampleCountForFit() and introduce Downsample() that takes a DownsampleCount, to make sure all tiles get downsampled the same amount
59:52Introduce GetDownsampleCountForFit() and introduce Downsample() that takes a DownsampleCount, to make sure all tiles get downsampled the same amount
1:07:54Run the game to see that it still works as before
🏃
1:07:54Run the game to see that it still works as before
🏃
1:07:54Run the game to see that it still works as before
🏃
1:08:09Set up CheckForArtChanges() to import orphanage wall textures
1:08:09Set up CheckForArtChanges() to import orphanage wall textures
1:08:09Set up CheckForArtChanges() to import orphanage wall textures
1:20:31Introduce ParsePieces() and ProcessPlateImport()
1:20:31Introduce ParsePieces() and ProcessPlateImport()
1:20:31Introduce ParsePieces() and ProcessPlateImport()
1:33:11Specify that an asset's filename determines its tags
1:33:11Specify that an asset's filename determines its tags
1:33:11Specify that an asset's filename determines its tags
1:44:35Introduce BeginTags() and EndTags() for ParsePieces() to call
1:44:35Introduce BeginTags() and EndTags() for ParsePieces() to call
1:44:35Introduce BeginTags() and EndTags() for ParsePieces() to call
1:53:39Make ParsePieces() perform multiple parsing passes, each pulling out particular pieces of information, and introduce PopToken()
🎩
🖮
1:53:39Make ParsePieces() perform multiple parsing passes, each pulling out particular pieces of information, and introduce PopToken()
🎩
🖮
1:53:39Make ParsePieces() perform multiple parsing passes, each pulling out particular pieces of information, and introduce PopToken()
🎩
🖮
2:01:26Implement BeginTags(), introducing TagIDFrom()
🎩
🖮
2:01:26Implement BeginTags(), introducing TagIDFrom()
🎩
🖮
2:01:26Implement BeginTags(), introducing TagIDFrom()
🎩
🖮
2:06:43“There's gotta be a "none", said the priest”α
🎩
🗩
2:06:43“There's gotta be a "none", said the priest”α
🎩
🗩
2:06:43“There's gotta be a "none", said the priest”α
🎩
🗩
2:06:49Add a Tag_None asset_tag_id, and continue implementing BeginTags()
🎩
🖮
2:06:49Add a Tag_None asset_tag_id, and continue implementing BeginTags()
🎩
🖮
2:06:49Add a Tag_None asset_tag_id, and continue implementing BeginTags()
🎩
🖮
2:13:24Introduce AddTag() and fix up compile errors
🎩
🖮
2:13:24Introduce AddTag() and fix up compile errors
🎩
🖮
2:13:24Introduce AddTag() and fix up compile errors
🎩
🖮
2:17:29Implement AddTag()
🎩
🖮
2:17:29Implement AddTag()
🎩
🖮
2:17:29Implement AddTag()
🎩
🖮
2:27:40Step through ParsePieces() to see what happens
🎩
🏃
2:27:40Step through ParsePieces() to see what happens
🎩
🏃
2:27:40Step through ParsePieces() to see what happens
🎩
🏃
2:31:50Step through EndTags() into PopToken() to discover that our bug occurs in the final item
🎩
🏃
2:31:50Step through EndTags() into PopToken() to discover that our bug occurs in the final item
🎩
🏃
2:31:50Step through EndTags() into PopToken() to discover that our bug occurs in the final item
🎩
🏃
2:33:20Fix PopToken() to correctly parse out the full set
🎩
🖮
2:33:20Fix PopToken() to correctly parse out the full set
🎩
🖮
2:33:20Fix PopToken() to correctly parse out the full set
🎩
🖮
2:35:10Step through EndTags() and into the game with the skeleton hand mostly imported
🎩
🏃
2:35:10Step through EndTags() and into the game with the skeleton hand mostly imported
🎩
🏃
2:35:10Step through EndTags() and into the game with the skeleton hand mostly imported
🎩
🏃
2:36:25Fix AddTag() to correctly increment the TagCount and prevent tags from overwriting each other
🎩
🖮
2:36:25Fix AddTag() to correctly increment the TagCount and prevent tags from overwriting each other
🎩
🖮
2:36:25Fix AddTag() to correctly increment the TagCount and prevent tags from overwriting each other
🎩
🖮
2:38:59Run the game to see all facing directions of our skeleton hand imported correctly
🎩
🏃
2:38:59Run the game to see all facing directions of our skeleton hand imported correctly
🎩
🏃
2:38:59Run the game to see all facing directions of our skeleton hand imported correctly
🎩
🏃
2:39:47Try making UpdateAndRenderEntities() set the glove's MatchVector and WeightVector to 1 and 0.5 respectively, to see that it doesn't fix up our scaling issue
🎩
🏃
🖮
2:39:47Try making UpdateAndRenderEntities() set the glove's MatchVector and WeightVector to 1 and 0.5 respectively, to see that it doesn't fix up our scaling issue
🎩
🏃
🖮
2:39:47Try making UpdateAndRenderEntities() set the glove's MatchVector and WeightVector to 1 and 0.5 respectively, to see that it doesn't fix up our scaling issue
🎩
🏃
🖮
2:41:39Enable ParsePieces() to parse (wall) block textures
🎩
🖮
2:41:39Enable ParsePieces() to parse (wall) block textures
🎩
🖮
2:41:39Enable ParsePieces() to parse (wall) block textures
🎩
🖮
2:43:15Run the game to see that we may not have imported the block texture
🎩
🏃
2:43:15Run the game to see that we may not have imported the block texture
🎩
🏃
2:43:15Run the game to see that we may not have imported the block texture
🎩
🏃
2:43:46Step through ParsePieces() to see what it does with the block textures
🎩
🏃
2:43:46Step through ParsePieces() to see what it does with the block textures
🎩
🏃
2:43:46Step through ParsePieces() to see what it does with the block textures
🎩
🏃
2:44:53Make UpdateAndRenderEntities() pass the BitmapID to PushCube(), updating PushCube() itself to handle bitmaps
🎩
🖮
2:44:53Make UpdateAndRenderEntities() pass the BitmapID to PushCube(), updating PushCube() itself to handle bitmaps
🎩
🖮
2:44:53Make UpdateAndRenderEntities() pass the BitmapID to PushCube(), updating PushCube() itself to handle bitmaps
🎩
🖮
2:47:17Run the game to see no wall textures
🎩
🏃
2:47:17Run the game to see no wall textures
🎩
🏃
2:47:17Run the game to see no wall textures
🎩
🏃
2:48:37Try to break in to UpdateAndRenderEntities(), and find that our block texture has not been correctly categorised
🎩
🏃
💢
2:48:37Try to break in to UpdateAndRenderEntities(), and find that our block texture has not been correctly categorised
🎩
🏃
💢
2:48:37Try to break in to UpdateAndRenderEntities(), and find that our block texture has not been correctly categorised
🎩
🏃
💢
2:52:23Fix ParsePieces() to set the import type for a block
🎩
🖮
2:52:23Fix ParsePieces() to set the import type for a block
🎩
🖮
2:52:23Fix ParsePieces() to set the import type for a block
🎩
🖮
2:52:48Run the game and see textured walls
🎩
🏃
2:52:48Run the game and see textured walls
🎩
🏃
2:52:48Run the game and see textured walls
🎩
🏃
2:53:57Rename the non-orphanage block textures out of the equation
🗹
🎩
2:53:57Rename the non-orphanage block textures out of the equation
🗹
🎩
2:53:57Rename the non-orphanage block textures out of the equation
🗹
🎩
2:54:46Run the game to see our orphanage texture, possibly upside-down
🎩
🏃
2:54:46Run the game to see our orphanage texture, possibly upside-down
🎩
🏃
2:54:46Run the game to see our orphanage texture, possibly upside-down
🎩
🏃
2:55:10Change GenerateRoom() to hard set the Color to all 1s
🎩
🖮
2:55:10Change GenerateRoom() to hard set the Color to all 1s
🎩
🖮
2:55:10Change GenerateRoom() to hard set the Color to all 1s
🎩
🖮
2:55:32Run the game to see deep blue textures
🎩
🏃
2:55:32Run the game to see deep blue textures
🎩
🏃
2:55:32Run the game to see deep blue textures
🎩
🏃
2:59:00Take a cursory look at ProcessMultiTileImport() for what could be wrong
🎩
🖮
2:59:00Take a cursory look at ProcessMultiTileImport() for what could be wrong
🎩
🖮
2:59:00Take a cursory look at ProcessMultiTileImport() for what could be wrong
🎩
🖮
3:00:29Call it
🎩
🗩
3:00:29Call it
🎩
🗩
3:00:29Call it
🎩
🗩