Handmade Hero»Episode Guide
Displaying Data Blocks in the Hierarchy
?
?

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:05Intro
0:05Intro
0:05Intro
1:05Recap of the debug system
1:05Recap of the debug system
1:05Recap of the debug system
2:22Ideas for today's work
2:22Ideas for today's work
2:22Ideas for today's work
4:11Remembering how DEBUG_VALUE and DEBUG_BEGIN_DATA_BLOCK worked, considering unifying the unique IDs
4:11Remembering how DEBUG_VALUE and DEBUG_BEGIN_DATA_BLOCK worked, considering unifying the unique IDs
4:11Remembering how DEBUG_VALUE and DEBUG_BEGIN_DATA_BLOCK worked, considering unifying the unique IDs
5:04Thoughts about using the string in BEGIN_DATA_BLOCK for debug UI layout
5:04Thoughts about using the string in BEGIN_DATA_BLOCK for debug UI layout
5:04Thoughts about using the string in BEGIN_DATA_BLOCK for debug UI layout
5:50More thoughts on using EntityDebugID to differentiate entities without touching gameplay code
5:50More thoughts on using EntityDebugID to differentiate entities without touching gameplay code
5:50More thoughts on using EntityDebugID to differentiate entities without touching gameplay code
6:33Recalling how debug data blocks work, and how they differ from the debug switches handled by the MarkDebugValue event type
6:33Recalling how debug data blocks work, and how they differ from the debug switches handled by the MarkDebugValue event type
6:33Recalling how debug data blocks work, and how they differ from the debug switches handled by the MarkDebugValue event type
8:58Discussing the changes to debug data blocks that we want to implement, and how they'd help when debugging
8:58Discussing the changes to debug data blocks that we want to implement, and how they'd help when debugging
8:58Discussing the changes to debug data blocks that we want to implement, and how they'd help when debugging
10:56Thinking about changing the allocation strategy of debug data blocks to match that of debug elements
10:56Thinking about changing the allocation strategy of debug data blocks to match that of debug elements
10:56Thinking about changing the allocation strategy of debug data blocks to match that of debug elements
12:40An idea for unifying the debug data block + debug element code
12:40An idea for unifying the debug data block + debug element code
12:40An idea for unifying the debug data block + debug element code
14:09Changes to the handling of the OpenDataBlock debug event type, to accommodate the new allocation idea
14:09Changes to the handling of the OpenDataBlock debug event type, to accommodate the new allocation idea
14:09Changes to the handling of the OpenDataBlock debug event type, to accommodate the new allocation idea
14:57A quick look at how StoreEvent was working with debug elements
14:57A quick look at how StoreEvent was working with debug elements
14:57A quick look at how StoreEvent was working with debug elements
15:32Clarification of how the debug system is currently working, and the planned changes
15:32Clarification of how the debug system is currently working, and the planned changes
15:32Clarification of how the debug system is currently working, and the planned changes
17:06Changes to the handling of the CloseDataBlock debug event type
17:06Changes to the handling of the CloseDataBlock debug event type
17:06Changes to the handling of the CloseDataBlock debug event type
17:31Updating the AllocateOpenDebugBlock function and open_debug_block struct to store a debug_element
17:31Updating the AllocateOpenDebugBlock function and open_debug_block struct to store a debug_element
17:31Updating the AllocateOpenDebugBlock function and open_debug_block struct to store a debug_element
18:47Allowing debug data blocks to override which debug_element StoreEvent stores into
18:47Allowing debug data blocks to override which debug_element StoreEvent stores into
18:47Allowing debug data blocks to override which debug_element StoreEvent stores into
19:24Actually using the right variable, running the game
19:24Actually using the right variable, running the game
19:24Actually using the right variable, running the game
19:35Removing erroneous quotes from the debug display by no longer passing strings to the DEBUG_BEGIN_DATA_BLOCK macro
19:35Removing erroneous quotes from the debug display by no longer passing strings to the DEBUG_BEGIN_DATA_BLOCK macro
19:35Removing erroneous quotes from the debug display by no longer passing strings to the DEBUG_BEGIN_DATA_BLOCK macro
19:59Running the game again, noticing a problem with a missing group, figuring out why
19:59Running the game again, noticing a problem with a missing group, figuring out why
19:59Running the game again, noticing a problem with a missing group, figuring out why
21:22Start trying to fix the debug data blocks not displaying as a group
21:22Start trying to fix the debug data blocks not displaying as a group
21:22Start trying to fix the debug data blocks not displaying as a group
22:32Adding a flag to GetGroupForHierarchicalName to optionally create an additional group
22:32Adding a flag to GetGroupForHierarchicalName to optionally create an additional group
22:32Adding a flag to GetGroupForHierarchicalName to optionally create an additional group
24:01Backtracking on the flag idea, deciding to directly turn the element into a group instead
24:01Backtracking on the flag idea, deciding to directly turn the element into a group instead
24:01Backtracking on the flag idea, deciding to directly turn the element into a group instead
25:07Verifying how the debug blocks work in the debugger
25:07Verifying how the debug blocks work in the debugger
25:07Verifying how the debug blocks work in the debugger
28:58Explaining how the workings shown in the debugger differ from what was expected
28:58Explaining how the workings shown in the debugger differ from what was expected
28:58Explaining how the workings shown in the debugger differ from what was expected
29:35Debugging GetGroupForHierarchicalName
29:35Debugging GetGroupForHierarchicalName
29:35Debugging GetGroupForHierarchicalName
32:51Gaining an understanding of the behaviour, explanation about how only debug_variable_groups have names
32:51Gaining an understanding of the behaviour, explanation about how only debug_variable_groups have names
32:51Gaining an understanding of the behaviour, explanation about how only debug_variable_groups have names
33:55Discussing potential solutions for getting the name passed in DEBUG_BEGIN_DATA_BLOCK to show up
33:55Discussing potential solutions for getting the name passed in DEBUG_BEGIN_DATA_BLOCK to show up
33:55Discussing potential solutions for getting the name passed in DEBUG_BEGIN_DATA_BLOCK to show up
34:31Choosing to store the OpenDataBlock event as well as the events for its contents, since it will contain the name
34:31Choosing to store the OpenDataBlock event as well as the events for its contents, since it will contain the name
34:31Choosing to store the OpenDataBlock event as well as the events for its contents, since it will contain the name
35:19Looking back at how the debug events are drawn, and adding a case for open debug data blocks (bitmap_id initially by mistake)
35:19Looking back at how the debug events are drawn, and adding a case for open debug data blocks (bitmap_id initially by mistake)
35:19Looking back at how the debug events are drawn, and adding a case for open debug data blocks (bitmap_id initially by mistake)
36:12Questioning why the erroneous change seemingly made a difference in output, figuring out why
36:12Questioning why the erroneous change seemingly made a difference in output, figuring out why
36:12Questioning why the erroneous change seemingly made a difference in output, figuring out why
36:59Back to thinking about why open data block names aren't showing up
36:59Back to thinking about why open data block names aren't showing up
36:59Back to thinking about why open data block names aren't showing up
37:31Adding a temporary change to the CloseDataBlock handling, which causes the data block endings to show up
37:31Adding a temporary change to the CloseDataBlock handling, which causes the data block endings to show up
37:31Adding a temporary change to the CloseDataBlock handling, which causes the data block endings to show up
38:03Adding some debug data block specific handling to DEBUGDrawMainMenu so the values inside the data block can be drawn
38:03Adding some debug data block specific handling to DEBUGDrawMainMenu so the values inside the data block can be drawn
38:03Adding some debug data block specific handling to DEBUGDrawMainMenu so the values inside the data block can be drawn
40:30Creating the DEBUGDrawElement and DEBUGDrawEvent functions to help in the drawing of debug information
40:30Creating the DEBUGDrawElement and DEBUGDrawEvent functions to help in the drawing of debug information
40:30Creating the DEBUGDrawElement and DEBUGDrawEvent functions to help in the drawing of debug information
42:18Talking about the complications of debug_events and debug_elements and how they both relate to the printing of debug info
42:18Talking about the complications of debug_events and debug_elements and how they both relate to the printing of debug info
42:18Talking about the complications of debug_events and debug_elements and how they both relate to the printing of debug info
43:00Changing DEBUGDrawElement to use debug_stored_event instead of debug_event so that it can walk through the next pointers
43:00Changing DEBUGDrawElement to use debug_stored_event instead of debug_event so that it can walk through the next pointers
43:00Changing DEBUGDrawElement to use debug_stored_event instead of debug_event so that it can walk through the next pointers
44:02Moving most code from DEBUGDrawElement into DEBUGDrawEvent
44:02Moving most code from DEBUGDrawElement into DEBUGDrawEvent
44:02Moving most code from DEBUGDrawElement into DEBUGDrawEvent
44:53Changing DEBUGDrawElement to extract the oldest event from the element, and determine if it needs to be forwarded to DEBUGDrawEvent or perform other work
44:53Changing DEBUGDrawElement to extract the oldest event from the element, and determine if it needs to be forwarded to DEBUGDrawEvent or perform other work
44:53Changing DEBUGDrawElement to extract the oldest event from the element, and determine if it needs to be forwarded to DEBUGDrawEvent or perform other work
46:58Fixing some compile errors by passing necessary variables to the new functions
46:58Fixing some compile errors by passing necessary variables to the new functions
46:58Fixing some compile errors by passing necessary variables to the new functions
47:24Adding the debug_tree to the layout struct and setting it in DEBUGDrawMainMenu
47:24Adding the debug_tree to the layout struct and setting it in DEBUGDrawMainMenu
47:24Adding the debug_tree to the layout struct and setting it in DEBUGDrawMainMenu
48:56Thinking about also adding the debug_variable_link to the layout struct, but choosing to re-factor the surrounding code to use debug_id instead
48:56Thinking about also adding the debug_variable_link to the layout struct, but choosing to re-factor the surrounding code to use debug_id instead
48:56Thinking about also adding the debug_variable_link to the layout struct, but choosing to re-factor the surrounding code to use debug_id instead
52:26Updating the interaction code, changing the function VarLinkInteraction to EventInteraction and passing the debug_id and debug_event instead of the debug_tree and debug_variable_link
52:26Updating the interaction code, changing the function VarLinkInteraction to EventInteraction and passing the debug_id and debug_event instead of the debug_tree and debug_variable_link
52:26Updating the interaction code, changing the function VarLinkInteraction to EventInteraction and passing the debug_id and debug_event instead of the debug_tree and debug_variable_link
54:11Removing the debug_tree from the layout struct since the interaction changes make it unnecessary
54:11Removing the debug_tree from the layout struct since the interaction changes make it unnecessary
54:11Removing the debug_tree from the layout struct since the interaction changes make it unnecessary
54:30Finishing off fixing the remaining compile errors
54:30Finishing off fixing the remaining compile errors
54:30Finishing off fixing the remaining compile errors
57:04Removing the now unused GetEventFromLink function
57:04Removing the now unused GetEventFromLink function
57:04Removing the now unused GetEventFromLink function
57:57Running the game
57:57Running the game
57:57Running the game
58:09Starting to add code to the DebugDrawElement function to loop through debug data blocks, and call DebugDrawEvent for each value held inside
58:09Starting to add code to the DebugDrawElement function to loop through debug data blocks, and call DebugDrawEvent for each value held inside
58:09Starting to add code to the DebugDrawElement function to loop through debug data blocks, and call DebugDrawEvent for each value held inside
58:50Changing DebugIDFromLink to DebugIDFromStoredEvent
58:50Changing DebugIDFromLink to DebugIDFromStoredEvent
58:50Changing DebugIDFromLink to DebugIDFromStoredEvent
59:35Adding a debug_tree argument to DEBUGDrawElement so that it can be passed to DebugIDFromStoredEvent, and finishing off its data block handling code
59:35Adding a debug_tree argument to DEBUGDrawElement so that it can be passed to DebugIDFromStoredEvent, and finishing off its data block handling code
59:35Adding a debug_tree argument to DEBUGDrawElement so that it can be passed to DebugIDFromStoredEvent, and finishing off its data block handling code
1:01:56Game running with the entity related data block now being added to the Simulation hierarchy
1:01:56Game running with the entity related data block now being added to the Simulation hierarchy
1:01:56Game running with the entity related data block now being added to the Simulation hierarchy
1:02:10Noticing problems related to the debug_id changing every frame for data block values
1:02:10Noticing problems related to the debug_id changing every frame for data block values
1:02:10Noticing problems related to the debug_id changing every frame for data block values
1:03:55Solving the problem by using event GUIDs to get stable debug_ids for data block values instead of the associated debug_stored_event address which wasn't stable
1:03:55Solving the problem by using event GUIDs to get stable debug_ids for data block values instead of the associated debug_stored_event address which wasn't stable
1:03:55Solving the problem by using event GUIDs to get stable debug_ids for data block values instead of the associated debug_stored_event address which wasn't stable
1:05:42Game running with the problem resolved
1:05:42Game running with the problem resolved
1:05:42Game running with the problem resolved
1:06:41Q&A
🗩
1:06:41Q&A
🗩
1:06:41Q&A
🗩
1:07:06plain_flavored What is the debug collator?
🗪
1:07:06plain_flavored What is the debug collator?
🗪
1:07:06plain_flavored What is the debug collator?
🗪
1:08:33longboolean https://hero.handmadedev.org/forum/code-discussion/902-day-211-gcc-clang-build-report
🗪
1:08:33longboolean https://hero.handmadedev.org/forum/code-discussion/902-day-211-gcc-clang-build-report
🗪
1:08:33longboolean https://hero.handmadedev.org/forum/code-discussion/902-day-211-gcc-clang-build-report
🗪
1:14:10ChronalDragon How do game devs you work with typically handle temporary / non-shipping sound effects?
🗪
1:14:10ChronalDragon How do game devs you work with typically handle temporary / non-shipping sound effects?
🗪
1:14:10ChronalDragon How do game devs you work with typically handle temporary / non-shipping sound effects?
🗪
1:14:54plain_flavored Will there be a pass to strip unused code from HMH?
🗪
1:14:54plain_flavored Will there be a pass to strip unused code from HMH?
🗪
1:14:54plain_flavored Will there be a pass to strip unused code from HMH?
🗪
1:15:19elxenoaizd What do you think about working in constraints and having limited resources? I think it makes programmers write less lousy code and force them to actually care and know what they're doing...
🗪
1:15:19elxenoaizd What do you think about working in constraints and having limited resources? I think it makes programmers write less lousy code and force them to actually care and know what they're doing...
🗪
1:15:19elxenoaizd What do you think about working in constraints and having limited resources? I think it makes programmers write less lousy code and force them to actually care and know what they're doing...
🗪
1:15:38nxsy Can we get rid of the build error (something about introspection of structs) that doesn't seem to affect anything?
🗪
1:15:38nxsy Can we get rid of the build error (something about introspection of structs) that doesn't seem to affect anything?
🗪
1:15:38nxsy Can we get rid of the build error (something about introspection of structs) that doesn't seem to affect anything?
🗪
1:18:31TheSizik You missed Region->ColorIndex = (u16)OpeningEvent->BlockName;
🗪
1:18:31TheSizik You missed Region->ColorIndex = (u16)OpeningEvent->BlockName;
🗪
1:18:31TheSizik You missed Region->ColorIndex = (u16)OpeningEvent->BlockName;
🗪
1:19:09insofaras How many lines are we at now?
🗪
1:19:09insofaras How many lines are we at now?
🗪
1:19:09insofaras How many lines are we at now?
🗪
1:20:01ChronalDragon Sure. What's a quick way to _produce_ temporary sound effects to, for example, figure out where/when they should be played?
🗪
1:20:01ChronalDragon Sure. What's a quick way to _produce_ temporary sound effects to, for example, figure out where/when they should be played?
🗪
1:20:01ChronalDragon Sure. What's a quick way to _produce_ temporary sound effects to, for example, figure out where/when they should be played?
🗪
1:21:16TheSizik Not stripping unused code is how GTA Hot Coffee happened
🗪
1:21:16TheSizik Not stripping unused code is how GTA Hot Coffee happened
🗪
1:21:16TheSizik Not stripping unused code is how GTA Hot Coffee happened
🗪
1:23:49elxenoaizd If a programming job wasn't available to you, what type of work would you be interested in doing other than programming for a living?
🗪
1:23:49elxenoaizd If a programming job wasn't available to you, what type of work would you be interested in doing other than programming for a living?
🗪
1:23:49elxenoaizd If a programming job wasn't available to you, what type of work would you be interested in doing other than programming for a living?
🗪
1:24:10actbinary What do you think of dlc then? ;)
🗪
1:24:10actbinary What do you think of dlc then? ;)
🗪
1:24:10actbinary What do you think of dlc then? ;)
🗪
1:26:41BrutalABK Do you play MMOs, if so, how do you feel about the way they do their leveling?
🗪
1:26:41BrutalABK Do you play MMOs, if so, how do you feel about the way they do their leveling?
🗪
1:26:41BrutalABK Do you play MMOs, if so, how do you feel about the way they do their leveling?
🗪
1:26:52Wind down
🗩
1:26:52Wind down
🗩
1:26:52Wind down
🗩