Handmade Hero»Episode Guide
Adding an In-Game Editor
?
?

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 implementing asset editing features
🗩
0:02Recap and set the stage for the day implementing asset editing features
🗩
0:02Recap and set the stage for the day implementing asset editing features
🗩
2:00Run the game to see our currently misaligned and scaled cat
🏃
2:00Run the game to see our currently misaligned and scaled cat
🏃
2:00Run the game to see our currently misaligned and scaled cat
🏃
3:33Set up to implement asset editing, comparing our procedurally generated situation with the hand-designed situation of a game like Braid
🗩
3:33Set up to implement asset editing, comparing our procedurally generated situation with the hand-designed situation of a game like Braid
🗩
3:33Set up to implement asset editing, comparing our procedurally generated situation with the hand-designed situation of a game like Braid
🗩
8:13Set up to make our asset editing capabilities at the level above our game's modes – title screen, cutscene, world – also available in the shipping game as was the editor in Braid's PC release
🗩
8:13Set up to make our asset editing capabilities at the level above our game's modes – title screen, cutscene, world – also available in the shipping game as was the editor in Braid's PC release
🗩
8:13Set up to make our asset editing capabilities at the level above our game's modes – title screen, cutscene, world – also available in the shipping game as was the editor in Braid's PC release
🗩
11:15Introduce in_game_editor and related structs in a newly created handmade_in_game_editor.cpp
11:15Introduce in_game_editor and related structs in a newly created handmade_in_game_editor.cpp
11:15Introduce in_game_editor and related structs in a newly created handmade_in_game_editor.cpp
18:21A few words on passing to a function its minimum necessary set of parameters
💢
🗩
18:21A few words on passing to a function its minimum necessary set of parameters
💢
🗩
18:21A few words on passing to a function its minimum necessary set of parameters
💢
🗩
20:15Change UpdateAndRenderEntities() to take a new editable_hit_test instead of the entire game_input
20:15Change UpdateAndRenderEntities() to take a new editable_hit_test instead of the entire game_input
20:15Change UpdateAndRenderEntities() to take a new editable_hit_test instead of the entire game_input
31:08Introduce AddHit()
31:08Introduce AddHit()
31:08Introduce AddHit()
38:26Introduce BeginHitTest(), EndHitTest() and ShouldHitTest()
38:26Introduce BeginHitTest(), EndHitTest() and ShouldHitTest()
38:26Introduce BeginHitTest(), EndHitTest() and ShouldHitTest()
45:23Make GameUpdateAndRender(), UpdateAndRenderWorld() and DoWorldSim() use our new asset editing functionality
45:23Make GameUpdateAndRender(), UpdateAndRenderWorld() and DoWorldSim() use our new asset editing functionality
45:23Make GameUpdateAndRender(), UpdateAndRenderWorld() and DoWorldSim() use our new asset editing functionality
49:58Run the game to find that entities with asset index 0 (white bitmap) are already highlit
🏃
49:58Run the game to find that entities with asset index 0 (white bitmap) are already highlit
🏃
49:58Run the game to find that entities with asset index 0 (white bitmap) are already highlit
🏃
50:28Make UpdateAndRenderEntities() only highlight entities whose BitmapID equals the HighlightAssetIndex
50:28Make UpdateAndRenderEntities() only highlight entities whose BitmapID equals the HighlightAssetIndex
50:28Make UpdateAndRenderEntities() only highlight entities whose BitmapID equals the HighlightAssetIndex
50:57Run the game to see that the white bitmaps are no longer highlit
🏃
50:57Run the game to see that the white bitmaps are no longer highlit
🏃
50:57Run the game to see that the white bitmaps are no longer highlit
🏃
51:05Finish implementing AddHit() to append hits
51:05Finish implementing AddHit() to append hits
51:05Finish implementing AddHit() to append hits
52:48Run the game to find that our highlighting works, and consider printing asset information in-game
🏃
52:48Run the game to find that our highlighting works, and consider printing asset information in-game
🏃
52:48Run the game to find that our highlighting works, and consider printing asset information in-game
🏃
55:26Introduce the notion of an in_game_editor_mode
55:26Introduce the notion of an in_game_editor_mode
55:26Introduce the notion of an in_game_editor_mode
58:17Run the game to find that our editor does not pick entities
🏃
58:17Run the game to find that our editor does not pick entities
🏃
58:17Run the game to find that our editor does not pick entities
🏃
58:31Enable BeginHitTest() to toggle the editor mode
58:31Enable BeginHitTest() to toggle the editor mode
58:31Enable BeginHitTest() to toggle the editor mode
1:00:12Run the game and toggle our editor mode
🏃
1:00:12Run the game and toggle our editor mode
🏃
1:00:12Run the game and toggle our editor mode
🏃
1:00:36Flesh out our editor modes, introducing UpdateAndRenderEditor() to print asset information
1:00:36Flesh out our editor modes, introducing UpdateAndRenderEditor() to print asset information
1:00:36Flesh out our editor modes, introducing UpdateAndRenderEditor() to print asset information
1:04:51Refresh our memories on PushFont() and consider rolling the fonts into the main asset system
🗩
1:04:51Refresh our memories on PushFont() and consider rolling the fonts into the main asset system
🗩
1:04:51Refresh our memories on PushFont() and consider rolling the fonts into the main asset system
🗩
1:08:01Continue to implement UpdateAndRenderEditor()
1:08:01Continue to implement UpdateAndRenderEditor()
1:08:01Continue to implement UpdateAndRenderEditor()
1:11:34Run the game to find that the picking still works
🏃
1:11:34Run the game to find that the picking still works
🏃
1:11:34Run the game to find that the picking still works
🏃
1:11:51Consider separating out the layout code from the debug system for use in a non-debug (i.e. profiling) context
🗩
1:11:51Consider separating out the layout code from the debug system for use in a non-debug (i.e. profiling) context
🗩
1:11:51Consider separating out the layout code from the debug system for use in a non-debug (i.e. profiling) context
🗩
1:18:32Introduce AssetEditor() based on PrintContents()
1:18:32Introduce AssetEditor() based on PrintContents()
1:18:32Introduce AssetEditor() based on PrintContents()
1:53:04See how AssetEditor() would shake out if it was FormatString()-centric
1:53:04See how AssetEditor() would shake out if it was FormatString()-centric
1:53:04See how AssetEditor() would shake out if it was FormatString()-centric
1:58:16Decide on the original, function-heavy approach for AssetEditor(), to write tomorrow
1:58:16Decide on the original, function-heavy approach for AssetEditor(), to write tomorrow
1:58:16Decide on the original, function-heavy approach for AssetEditor(), to write tomorrow
1:59:25Q&A
🗩
1:59:25Q&A
🗩
1:59:25Q&A
🗩
2:00:12zrizi Q: Off-topic: How do you index large meshes (index needs more than 16-bit)? Would you divide into multiple chunks (and have more draw calls) or increase bandwidth by using 32-bit for indices? Which approach is better for large meshes?
🗪
2:00:12zrizi Q: Off-topic: How do you index large meshes (index needs more than 16-bit)? Would you divide into multiple chunks (and have more draw calls) or increase bandwidth by using 32-bit for indices? Which approach is better for large meshes?
🗪
2:00:12zrizi Q: Off-topic: How do you index large meshes (index needs more than 16-bit)? Would you divide into multiple chunks (and have more draw calls) or increase bandwidth by using 32-bit for indices? Which approach is better for large meshes?
🗪
2:00:58jim0_o Q: SIMPalaxy asked earlier if you have changed your 4coder custom since you handed it over to Allen, so now I'm wondering the same
🗪
2:00:58jim0_o Q: SIMPalaxy asked earlier if you have changed your 4coder custom since you handed it over to Allen, so now I'm wondering the same
🗪
2:00:58jim0_o Q: SIMPalaxy asked earlier if you have changed your 4coder custom since you handed it over to Allen, so now I'm wondering the same
🗪
2:01:33bulmanator Q: Not really on-topic, but how would you go about implementing a generic resizable array, as you said you don't like to use templates?
🗪
2:01:33bulmanator Q: Not really on-topic, but how would you go about implementing a generic resizable array, as you said you don't like to use templates?
🗪
2:01:33bulmanator Q: Not really on-topic, but how would you go about implementing a generic resizable array, as you said you don't like to use templates?
🗪
2:02:15Example of C++'s offering for implementing generic resizable arrays
💢
🗩
2:02:15Example of C++'s offering for implementing generic resizable arrays
💢
🗩
2:02:15Example of C++'s offering for implementing generic resizable arrays
💢
🗩
2:13:02zrizi Q: Off-topic (pre-multiplied alpha): I watched the episodes in which you presented it and I remember you mentioned that you prefer to defer multiplying by alpha "at the end". Can you explain what this means? Also, what's the benefit of pre-multiplied alpha, other than the fact that it's now a linear operation (if that's the case)? I can only see the value if you're compositing multiple transparent / translucent layers
🗪
2:13:02zrizi Q: Off-topic (pre-multiplied alpha): I watched the episodes in which you presented it and I remember you mentioned that you prefer to defer multiplying by alpha "at the end". Can you explain what this means? Also, what's the benefit of pre-multiplied alpha, other than the fact that it's now a linear operation (if that's the case)? I can only see the value if you're compositing multiple transparent / translucent layers
🗪
2:13:02zrizi Q: Off-topic (pre-multiplied alpha): I watched the episodes in which you presented it and I remember you mentioned that you prefer to defer multiplying by alpha "at the end". Can you explain what this means? Also, what's the benefit of pre-multiplied alpha, other than the fact that it's now a linear operation (if that's the case)? I can only see the value if you're compositing multiple transparent / translucent layers
🗪
2:15:38alchemist_ubi Are you forced to use templates? I don't code in C++ but the language does not force you to do it, right?
🗪
2:15:38alchemist_ubi Are you forced to use templates? I don't code in C++ but the language does not force you to do it, right?
🗪
2:15:38alchemist_ubi Are you forced to use templates? I don't code in C++ but the language does not force you to do it, right?
🗪
2:16:35pythno Q: Is the asset tool fixed? From Day 470 I wasn't able to build some of the tools (commented out in build.bat) for asset file creation
🗪
2:16:35pythno Q: Is the asset tool fixed? From Day 470 I wasn't able to build some of the tools (commented out in build.bat) for asset file creation
🗪
2:16:35pythno Q: Is the asset tool fixed? From Day 470 I wasn't able to build some of the tools (commented out in build.bat) for asset file creation
🗪
2:17:27That's it for today
🗩
2:17:27That's it for today
🗩
2:17:27That's it for today
🗩