Handmade Hero»Episode Guide
Adding Sparse Unicode Support
?
?

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:15Recap and plan for the day
0:15Recap and plan for the day
0:15Recap and plan for the day
1:48Spaces are not displayed
1:48Spaces are not displayed
1:48Spaces are not displayed
2:50Adding the kerning value for space to the kerning table
2:50Adding the kerning value for space to the kerning table
2:50Adding the kerning value for space to the kerning table
4:05But wait... that kerning value was already there
4:05But wait... that kerning value was already there
4:05But wait... that kerning value was already there
4:51Explanation of Casey's previous assumption of what caused the bug
4:51Explanation of Casey's previous assumption of what caused the bug
4:51Explanation of Casey's previous assumption of what caused the bug
5:54Debugging the asset packer
5:54Debugging the asset packer
5:54Debugging the asset packer
6:26It seems that the asset packer does not process the space codepoint
6:26It seems that the asset packer does not process the space codepoint
6:26It seems that the asset packer does not process the space codepoint
7:45The asset packer ignores the space glyph because it has no visible pixels
7:45The asset packer ignores the space glyph because it has no visible pixels
7:45The asset packer ignores the space glyph because it has no visible pixels
8:17Spaces are back but we have lost the small letters
8:17Spaces are back but we have lost the small letters
8:17Spaces are back but we have lost the small letters
8:18Run Handmade Hero, although...α
8:18Run Handmade Hero, although...α
8:18Run Handmade Hero, although...α
8:50Fixing a bug introduced while fixing the problem of the visibility of the space glyphs
8:50Fixing a bug introduced while fixing the problem of the visibility of the space glyphs
8:50Fixing a bug introduced while fixing the problem of the visibility of the space glyphs
9:38Checking the width of rendered spaces
9:38Checking the width of rendered spaces
9:38Checking the width of rendered spaces
10:17Choosing a target foreign string to test the rendering of non-ASCII characters
10:17Choosing a target foreign string to test the rendering of non-ASCII characters
10:17Choosing a target foreign string to test the rendering of non-ASCII characters
11:21Checking that Arial has all the necessary codepoints
11:21Checking that Arial has all the necessary codepoints
11:21Checking that Arial has all the necessary codepoints
12:11Finding the codepoints associated to the test string
12:11Finding the codepoints associated to the test string
12:11Finding the codepoints associated to the test string
14:52A table that encompassed the complete range of characters necessary to represent both ASCII and our target kanji would be massive
14:52A table that encompassed the complete range of characters necessary to represent both ASCII and our target kanji would be massive
14:52A table that encompassed the complete range of characters necessary to represent both ASCII and our target kanji would be massive
16:10We need a way of condensing the ranges of available characters
16:10We need a way of condensing the ranges of available characters
16:10We need a way of condensing the ranges of available characters
16:43(Blackboard) Layout of the 1-D symbol lookup table
16:43(Blackboard) Layout of the 1-D symbol lookup table
16:43(Blackboard) Layout of the 1-D symbol lookup table
18:11Easiest but slow solution: store the codepoints themselves for each row of the table
18:11Easiest but slow solution: store the codepoints themselves for each row of the table
18:11Easiest but slow solution: store the codepoints themselves for each row of the table
19:22What about preprocessing every string to store the indices to the glyph tables instead of the characters?
19:22What about preprocessing every string to store the indices to the glyph tables instead of the characters?
19:22What about preprocessing every string to store the indices to the glyph tables instead of the characters?
22:02Or we can simply store one big table that maps each character to its associated glyph index
22:02Or we can simply store one big table that maps each character to its associated glyph index
22:02Or we can simply store one big table that maps each character to its associated glyph index
23:03Any objections?β
23:03Any objections?β
23:03Any objections?β
23:27Storing pairs of codepoints and bitmap_ids instead of just bitmap_ids
23:27Storing pairs of codepoints and bitmap_ids instead of just bitmap_ids
23:27Storing pairs of codepoints and bitmap_ids instead of just bitmap_ids
24:40The new codepoint table will be decompressed at runtime and used as a direct lookup table
24:40The new codepoint table will be decompressed at runtime and used as a direct lookup table
24:40The new codepoint table will be decompressed at runtime and used as a direct lookup table
25:31Let's implement that
25:31Let's implement that
25:31Let's implement that
30:50Adding the kanji owl characters by hand to the asset file
30:50Adding the kanji owl characters by hand to the asset file
30:50Adding the kanji owl characters by hand to the asset file
31:20Do AddCharacterAsset for the Kanji Owl straight after adding the other font Assetsγ
31:20Do AddCharacterAsset for the Kanji Owl straight after adding the other font Assetsγ
31:20Do AddCharacterAsset for the Kanji Owl straight after adding the other font Assetsγ
32:14Modifying the code that uses plain characters to use glyph indices instead
32:14Modifying the code that uses plain characters to use glyph indices instead
32:14Modifying the code that uses plain characters to use glyph indices instead
32:42Setting a maximum glyph count
32:42Setting a maximum glyph count
32:42Setting a maximum glyph count
37:07Fonts are doneδ
37:07Fonts are doneδ
37:07Fonts are doneδ
38:02Using a huge table at asset pack time to map every Unicode codepoint to our glyphs
38:02Using a huge table at asset pack time to map every Unicode codepoint to our glyphs
38:02Using a huge table at asset pack time to map every Unicode codepoint to our glyphs
43:25Freeing memory associated to the loaded_font variables
43:25Freeing memory associated to the loaded_font variables
43:25Freeing memory associated to the loaded_font variables
43:59Propagating the last changes through the code
43:59Propagating the last changes through the code
43:59Propagating the last changes through the code
44:51We can't refer to the kerning of a pair of glyphs until we have mapped both glyphs
44:51We can't refer to the kerning of a pair of glyphs until we have mapped both glyphs
44:51We can't refer to the kerning of a pair of glyphs until we have mapped both glyphs
49:18Modifying the HorizontalAdvance table as the last step before writing the font to the asset file
49:18Modifying the HorizontalAdvance table as the last step before writing the font to the asset file
49:18Modifying the HorizontalAdvance table as the last step before writing the font to the asset file
52:01(Blackboard) Writing only the part of the HorizontalAdvance table that we'll use
52:01(Blackboard) Writing only the part of the HorizontalAdvance table that we'll use
52:01(Blackboard) Writing only the part of the HorizontalAdvance table that we'll use
53:04Starting to implement the partial storage of the HorizontalAdvance table
53:04Starting to implement the partial storage of the HorizontalAdvance table
53:04Starting to implement the partial storage of the HorizontalAdvance table
56:12On freeing thingsε
56:12On freeing thingsε
56:12On freeing thingsε
56:21Leaving the code in a compiling state before the end of the stream
56:21Leaving the code in a compiling state before the end of the stream
56:21Leaving the code in a compiling state before the end of the stream
59:07Q&A
🗩
59:07Q&A
🗩
59:07Q&A
🗩
59:26bkboggy I noticed that you rarely comment your code. Your comments mostly consist of TODO comments. What are your thoughts on commenting your code, considering a lot of it is pretty complicated, unless of course you don't see it as such? Or do you think that since you write good code, it doesn't require comments to be readable?
🗪
59:26bkboggy I noticed that you rarely comment your code. Your comments mostly consist of TODO comments. What are your thoughts on commenting your code, considering a lot of it is pretty complicated, unless of course you don't see it as such? Or do you think that since you write good code, it doesn't require comments to be readable?
🗪
59:26bkboggy I noticed that you rarely comment your code. Your comments mostly consist of TODO comments. What are your thoughts on commenting your code, considering a lot of it is pretty complicated, unless of course you don't see it as such? Or do you think that since you write good code, it doesn't require comments to be readable?
🗪
1:01:59robrobby Why was your first calculation of the GlyphTable index size too big (64k) and reduced to 2k, and still later went full-on 64k again? What changed the size?
🗪
1:01:59robrobby Why was your first calculation of the GlyphTable index size too big (64k) and reduced to 2k, and still later went full-on 64k again? What changed the size?
🗪
1:01:59robrobby Why was your first calculation of the GlyphTable index size too big (64k) and reduced to 2k, and still later went full-on 64k again? What changed the size?
🗪
1:02:54ijustwantfood Would it be a good practice to comment after writing all your code for others?
🗪
1:02:54ijustwantfood Would it be a good practice to comment after writing all your code for others?
🗪
1:02:54ijustwantfood Would it be a good practice to comment after writing all your code for others?
🗪
1:05:57cubercaleb Since the questions are slow today, when do you think you will write a proper RNG?
🗪
1:05:57cubercaleb Since the questions are slow today, when do you think you will write a proper RNG?
🗪
1:05:57cubercaleb Since the questions are slow today, when do you think you will write a proper RNG?
🗪
1:06:13pseudonym73 Or a real hash function?
🗪
1:06:13pseudonym73 Or a real hash function?
🗪
1:06:13pseudonym73 Or a real hash function?
🗪
1:07:06jameswidman My comment-writing rule for a while has been: "code should clearly tell you what is being done; comments, if you need them, should only tell you why"
🗪
1:07:06jameswidman My comment-writing rule for a while has been: "code should clearly tell you what is being done; comments, if you need them, should only tell you why"
🗪
1:07:06jameswidman My comment-writing rule for a while has been: "code should clearly tell you what is being done; comments, if you need them, should only tell you why"
🗪
1:07:55drmumba How long have you been coding (years)?
🗪
1:07:55drmumba How long have you been coding (years)?
🗪
1:07:55drmumba How long have you been coding (years)?
🗪
1:08:03abnercoimbre When will you implement the chocolate wine fountain?
🗪
1:08:03abnercoimbre When will you implement the chocolate wine fountain?
🗪
1:08:03abnercoimbre When will you implement the chocolate wine fountain?
🗪
1:08:39Call it
🗩
1:08:39Call it
🗩
1:08:39Call it
🗩