Handmade Hero»Episode Guide
Implementing Self-Recompilation
?
?

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:07Recap
0:07Recap
0:07Recap
0:53Plan for today
0:53Plan for today
0:53Plan for today
2:32Features and limitations of our current radial menu
2:32Features and limitations of our current radial menu
2:32Features and limitations of our current radial menu
4:01We will build our UI around the debug features we already have
4:01We will build our UI around the debug features we already have
4:01We will build our UI around the debug features we already have
5:50Let's find a way of turning debug features on and off easily from the debug interface
5:50Let's find a way of turning debug features on and off easily from the debug interface
5:50Let's find a way of turning debug features on and off easily from the debug interface
6:31Quick review of the debug camera
6:31Quick review of the debug camera
6:31Quick review of the debug camera
7:20There's a conflict between the reloading system and the debug event array collation
7:20There's a conflict between the reloading system and the debug event array collation
7:20There's a conflict between the reloading system and the debug event array collation
8:33Maybe we should flush all events after a reload
8:33Maybe we should flush all events after a reload
8:33Maybe we should flush all events after a reload
10:12Flushing the array event buffer
10:12Flushing the array event buffer
10:12Flushing the array event buffer
12:15The DLL reloading already cleared that buffer. We only need to restart the collation process
12:15The DLL reloading already cleared that buffer. We only need to restart the collation process
12:15The DLL reloading already cleared that buffer. We only need to restart the collation process
14:00Moving the ExecutableReloaded flag from the game input to the game memory
14:00Moving the ExecutableReloaded flag from the game input to the game memory
14:00Moving the ExecutableReloaded flag from the game input to the game memory
14:59Testing it
14:59Testing it
14:59Testing it
15:39The current way of switching between regular and debug cameras is inconvenient
15:39The current way of switching between regular and debug cameras is inconvenient
15:39The current way of switching between regular and debug cameras is inconvenient
16:37We would prefer to automate the process of changing the code and recompiling it
16:37We would prefer to automate the process of changing the code and recompiling it
16:37We would prefer to automate the process of changing the code and recompiling it
18:02We will collect all switches inside the globally accessible handmade_config.h
18:02We will collect all switches inside the globally accessible handmade_config.h
18:02We will collect all switches inside the globally accessible handmade_config.h
20:03Be banana-cakesα
20:03Be banana-cakesα
20:03Be banana-cakesα
20:21Assigning a type to config switches
20:21Assigning a type to config switches
20:21Assigning a type to config switches
20:56Rewriting the config file from inside the game code
20:56Rewriting the config file from inside the game code
20:56Rewriting the config file from inside the game code
22:01Implementing WriteHandmadeConfig
22:01Implementing WriteHandmadeConfig
22:01Implementing WriteHandmadeConfig
23:31We resort again to _snprintf_s to minimize the amount of CRT functions we will have to replace later
23:31We resort again to _snprintf_s to minimize the amount of CRT functions we will have to replace later
23:31We resort again to _snprintf_s to minimize the amount of CRT functions we will have to replace later
27:22Rewriting the config file after every debug UI action
27:22Rewriting the config file after every debug UI action
27:22Rewriting the config file after every debug UI action
28:17We want the game to recompile itself
28:17We want the game to recompile itself
28:17We want the game to recompile itself
28:35The platform layer will allow us to execute build.bat via DEBUGExecuteSystemCommand
28:35The platform layer will allow us to execute build.bat via DEBUGExecuteSystemCommand
28:35The platform layer will allow us to execute build.bat via DEBUGExecuteSystemCommand
32:25The OS function we are looking for is CreateProcess
32:25The OS function we are looking for is CreateProcess
32:25The OS function we are looking for is CreateProcess
38:30Testing it. It does not work
38:30Testing it. It does not work
38:30Testing it. It does not work
38:46CreateProcess returned false
38:46CreateProcess returned false
38:46CreateProcess returned false
39:29Using GetLastError to find out why
39:29Using GetLastError to find out why
39:29Using GetLastError to find out why
40:31Providing an explicit path to cmd.exe
40:31Providing an explicit path to cmd.exe
40:31Providing an explicit path to cmd.exe
41:32It works now
41:32It works now
41:32It works now
41:42Toggling the value of DEBUGUI_UseDebugCamera in the config file
41:42Toggling the value of DEBUGUI_UseDebugCamera in the config file
41:42Toggling the value of DEBUGUI_UseDebugCamera in the config file
42:39Introducing the Uber-Debug-UI!
42:39Introducing the Uber-Debug-UI!
42:39Introducing the Uber-Debug-UI!
43:08Getting rid of the compilation window pop-up
43:08Getting rid of the compilation window pop-up
43:08Getting rid of the compilation window pop-up
44:20Hiding the window using the wShowWindow flag inside the startup info parameter
44:20Hiding the window using the wShowWindow flag inside the startup info parameter
44:20Hiding the window using the wShowWindow flag inside the startup info parameter
46:40It works!
46:40It works!
46:40It works!
46:50Getting information about the state of the the compilation process
46:50Getting information about the state of the the compilation process
46:50Getting information about the state of the the compilation process
50:00We will use WaitForSingleObject to find that information
50:00We will use WaitForSingleObject to find that information
50:00We will use WaitForSingleObject to find that information
52:54Querying the platform layer about the state of the compilation process
52:54Querying the platform layer about the state of the compilation process
52:54Querying the platform layer about the state of the compilation process
55:48"We don't care big it is"β
55:48"We don't care big it is"β
55:48"We don't care big it is"β
56:12Implementing DEBUGGetProcessState
56:12Implementing DEBUGGetProcessState
56:12Implementing DEBUGGetProcessState
58:31Using GetExitCodeProcess to confirm the completion of the compilation
58:31Using GetExitCodeProcess to confirm the completion of the compilation
58:31Using GetExitCodeProcess to confirm the completion of the compilation
1:02:05Signalling the ongoing recompilation graphically
1:02:05Signalling the ongoing recompilation graphically
1:02:05Signalling the ongoing recompilation graphically
1:03:21Find that platform_api doesn't have DEBUGGetProcessStateγ
1:03:21Find that platform_api doesn't have DEBUGGetProcessStateγ
1:03:21Find that platform_api doesn't have DEBUGGetProcessStateγ
1:03:38Apologise for the slangδ
1:03:38Apologise for the slangδ
1:03:38Apologise for the slangδ
1:04:49Q&A
🗩
1:04:49Q&A
🗩
1:04:49Q&A
🗩
1:05:31powerc9k Why be able to compile from the game if we can do it from the editor? Is it just to be cool?
🗪
1:05:31powerc9k Why be able to compile from the game if we can do it from the editor? Is it just to be cool?
🗪
1:05:31powerc9k Why be able to compile from the game if we can do it from the editor? Is it just to be cool?
🗪
1:06:30ChronalDragon Compile in mr4th's editor and do all of the game development work from in-game?
🗪
1:06:30ChronalDragon Compile in mr4th's editor and do all of the game development work from in-game?
🗪
1:06:30ChronalDragon Compile in mr4th's editor and do all of the game development work from in-game?
🗪
1:06:51andsz_ I like how it's "STARTUPINFO", but "PROCESS_INFORMATION". Inconsistency even in a single small part of the WinAPI... Do such things annoy you in a "professional" API?
🗪
1:06:51andsz_ I like how it's "STARTUPINFO", but "PROCESS_INFORMATION". Inconsistency even in a single small part of the WinAPI... Do such things annoy you in a "professional" API?
🗪
1:06:51andsz_ I like how it's "STARTUPINFO", but "PROCESS_INFORMATION". Inconsistency even in a single small part of the WinAPI... Do such things annoy you in a "professional" API?
🗪
1:07:33Mr4thDimention Why are we writing to a code file instead of just passing -D to the build line? Seems like it would be a little easier, although I have to admit you made that look pretty easy
🗪
1:07:33Mr4thDimention Why are we writing to a code file instead of just passing -D to the build line? Seems like it would be a little easier, although I have to admit you made that look pretty easy
🗪
1:07:33Mr4thDimention Why are we writing to a code file instead of just passing -D to the build line? Seems like it would be a little easier, although I have to admit you made that look pretty easy
🗪
1:08:24cubercaleb Why not use system() instead of CreateProcess()?
🗪
1:08:24cubercaleb Why not use system() instead of CreateProcess()?
🗪
1:08:24cubercaleb Why not use system() instead of CreateProcess()?
🗪
1:09:43glaman1605 Do you plan on reading the original config file and then rewrite with modified values?
🗪
1:09:43glaman1605 Do you plan on reading the original config file and then rewrite with modified values?
🗪
1:09:43glaman1605 Do you plan on reading the original config file and then rewrite with modified values?
🗪
1:09:52TheSizik Why not just set a boolean variable instead of recompiling a #define?
🗪
1:09:52TheSizik Why not just set a boolean variable instead of recompiling a #define?
🗪
1:09:52TheSizik Why not just set a boolean variable instead of recompiling a #define?
🗪
1:10:38ejunkie64 Will there be a dev console?
🗪
1:10:38ejunkie64 Will there be a dev console?
🗪
1:10:38ejunkie64 Will there be a dev console?
🗪
1:10:50Pseudonym73 Also, system() runs a program through CMD.EXE, which is yet another dependency
🗪
1:10:50Pseudonym73 Also, system() runs a program through CMD.EXE, which is yet another dependency
🗪
1:10:50Pseudonym73 Also, system() runs a program through CMD.EXE, which is yet another dependency
🗪
1:11:57Lkey144 The chat recommended CREATE_NO_WINDOW as a process creation flag. You could probably use that instead of the minimized window
🗪
1:11:57Lkey144 The chat recommended CREATE_NO_WINDOW as a process creation flag. You could probably use that instead of the minimized window
🗪
1:11:57Lkey144 The chat recommended CREATE_NO_WINDOW as a process creation flag. You could probably use that instead of the minimized window
🗪
1:12:38Trystan34 What is in the bat file that is run?
🗪
1:12:38Trystan34 What is in the bat file that is run?
🗪
1:12:38Trystan34 What is in the bat file that is run?
🗪
1:12:48powerc9k Why does it zoom out?
🗪
1:12:48powerc9k Why does it zoom out?
🗪
1:12:48powerc9k Why does it zoom out?
🗪
1:13:02Radar_CS Are you using sublime?
🗪
1:13:02Radar_CS Are you using sublime?
🗪
1:13:02Radar_CS Are you using sublime?
🗪
1:13:07Quantumplation Can you add a radial menu for debug camera, instead of piggybacking off toggle graph? It's bugging me
🗪
1:13:07Quantumplation Can you add a radial menu for debug camera, instead of piggybacking off toggle graph? It's bugging me
🗪
1:13:07Quantumplation Can you add a radial menu for debug camera, instead of piggybacking off toggle graph? It's bugging me
🗪
1:13:19Shut down
🗩
1:13:19Shut down
🗩
1:13:19Shut down
🗩