Implementing Multi-layer Cutscenes ⚠ Click here to regain focus ⚠
?
?

Keyboard Navigation

Global Keys

W, A, P / S, D, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter c Credits

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

Credits Menu

Enter Open URL (in new tab)
0:48Assets: intro_art.hha is released
0:48Assets: intro_art.hha is released
0:48Assets: intro_art.hha is released
3:03Introduce this art pack
3:03Introduce this art pack
3:03Introduce this art pack
4:13handmade_file_formats.h: Add our new asset types and tags to asset_type_id and asset_tag_id
4:13handmade_file_formats.h: Add our new asset types and tags to asset_type_id and asset_tag_id
4:13handmade_file_formats.h: Add our new asset types and tags to asset_type_id and asset_tag_id
5:08Blackboard: CutScene Art
5:08Blackboard: CutScene Art
5:08Blackboard: CutScene Art
9:16Recompile and see that we're running as expected
9:16Recompile and see that we're running as expected
9:16Recompile and see that we're running as expected
11:18Blackboard: Calculate how much space the cutscene requires
11:18Blackboard: Calculate how much space the cutscene requires
11:18Blackboard: Calculate how much space the cutscene requires
12:01handmade.cpp: Increase the amount of memory allocated for the assets
12:01handmade.cpp: Increase the amount of memory allocated for the assets
12:01handmade.cpp: Increase the amount of memory allocated for the assets
13:01handmade_cutscene.cpp: Start writing the cutscene code
13:01handmade_cutscene.cpp: Start writing the cutscene code
13:01handmade_cutscene.cpp: Start writing the cutscene code
14:14handmade_cutscene.cpp: Introduce RenderCutScene
14:14handmade_cutscene.cpp: Introduce RenderCutScene
14:14handmade_cutscene.cpp: Introduce RenderCutScene
19:43handmade.cpp: #include "handmade_cutscene.cpp"
19:43handmade.cpp: #include "handmade_cutscene.cpp"
19:43handmade.cpp: #include "handmade_cutscene.cpp"
20:12handmade.cpp: Call RenderCutScene and introduce UpdateAndRenderGame
20:12handmade.cpp: Call RenderCutScene and introduce UpdateAndRenderGame
20:12handmade.cpp: Call RenderCutScene and introduce UpdateAndRenderGame
24:04Compile and run and hit an assertion in CheckArena
24:04Compile and run and hit an assertion in CheckArena
24:04Compile and run and hit an assertion in CheckArena
25:02handmade.cpp: Do EndTemporaryMemory before CheckArena
25:02handmade.cpp: Do EndTemporaryMemory before CheckArena
25:02handmade.cpp: Do EndTemporaryMemory before CheckArena
25:25Compile and confirm that this is now correct
25:25Compile and confirm that this is now correct
25:25Compile and confirm that this is now correct
25:40handmade.cpp: Toggle from UpdateAndRenderGame to RenderCutScene
25:40handmade.cpp: Toggle from UpdateAndRenderGame to RenderCutScene
25:40handmade.cpp: Toggle from UpdateAndRenderGame to RenderCutScene
26:06Debugger: Step into RenderCutScene and ensure we're getting a bitmap
26:06Debugger: Step into RenderCutScene and ensure we're getting a bitmap
26:06Debugger: Step into RenderCutScene and ensure we're getting a bitmap
26:58handmade_cutscene.cpp: Pass a height to PushBitmap and see the cutscene in action
26:58handmade_cutscene.cpp: Pass a height to PushBitmap and see the cutscene in action
26:58handmade_cutscene.cpp: Pass a height to PushBitmap and see the cutscene in action
27:20handmade_cutscene.cpp: Tweak the size and encounter a bug in the debug stuff
27:20handmade_cutscene.cpp: Tweak the size and encounter a bug in the debug stuff
27:20handmade_cutscene.cpp: Tweak the size and encounter a bug in the debug stuff
27:58build.bat: Turn off HANDMADE_INTERNAL
27:58build.bat: Turn off HANDMADE_INTERNAL
27:58build.bat: Turn off HANDMADE_INTERNAL
28:16handmade_cutscene.cpp: Tweak that size until the image fits the screen, and add layers to the scene
28:16handmade_cutscene.cpp: Tweak that size until the image fits the screen, and add layers to the scene
28:16handmade_cutscene.cpp: Tweak that size until the image fits the screen, and add layers to the scene
29:49What we did todayα
29:49What we did todayα
29:49What we did todayα
30:11Blackboard: Positioning the layers in space
30:11Blackboard: Positioning the layers in space
30:11Blackboard: Positioning the layers in space
32:12handmade.h: Introduce CutSceneTime
32:12handmade.h: Introduce CutSceneTime
32:12handmade.h: Introduce CutSceneTime
32:49handmade_cutscene.cpp: Pass CutSceneTime to RenderCutScene and slowly zoom the camera
32:49handmade_cutscene.cpp: Pass CutSceneTime to RenderCutScene and slowly zoom the camera
32:49handmade_cutscene.cpp: Pass CutSceneTime to RenderCutScene and slowly zoom the camera
37:40Run the game and see the cutscene in action
37:40Run the game and see the cutscene in action
37:40Run the game and see the cutscene in action
38:01build.bat: Temporarily compile in -O2
38:01build.bat: Temporarily compile in -O2
38:01build.bat: Temporarily compile in -O2
38:33Note that the image has no depth to it
38:33Note that the image has no depth to it
38:33Note that the image has no depth to it
39:06handmade_cutscene.cpp: Position the layers in Z based on their LayerIndex
39:06handmade_cutscene.cpp: Position the layers in Z based on their LayerIndex
39:06handmade_cutscene.cpp: Position the layers in Z based on their LayerIndex
40:43See the parallax effect
40:43See the parallax effect
40:43See the parallax effect
41:39handmade_cutscene.cpp: Work on the layers' positioning
41:39handmade_cutscene.cpp: Work on the layers' positioning
41:39handmade_cutscene.cpp: Work on the layers' positioning
42:59handmade_cutscene.cpp: Introduce LayerPlacement
42:59handmade_cutscene.cpp: Introduce LayerPlacement
42:59handmade_cutscene.cpp: Introduce LayerPlacement
44:38handmade_cutscene.cpp: Special-case the sky background
44:38handmade_cutscene.cpp: Special-case the sky background
44:38handmade_cutscene.cpp: Special-case the sky background
46:50"Hey, look! It did what I expected!β
46:50"Hey, look! It did what I expected!β
46:50"Hey, look! It did what I expected!β
47:59handmade_cutscene.cpp: Place the layers
47:59handmade_cutscene.cpp: Place the layers
47:59handmade_cutscene.cpp: Place the layers
57:03Note that the only problem we have left is that we're zooming towards nothing
57:03Note that the only problem we have left is that we're zooming towards nothing
57:03Note that the only problem we have left is that we're zooming towards nothing
57:43handmade_cutscene.cpp: Introduce CameraOffset and set the focus point
57:43handmade_cutscene.cpp: Introduce CameraOffset and set the focus point
57:43handmade_cutscene.cpp: Introduce CameraOffset and set the focus point
1:00:31Q&A
1:00:31Q&A
1:00:31Q&A
1:01:31AlephAnt Would you normally want to get the position / scale for each layer from the artist? If so, how would you go about doing that?
🗪
1:01:31AlephAnt Would you normally want to get the position / scale for each layer from the artist? If so, how would you go about doing that?
🗪
1:01:31AlephAnt Would you normally want to get the position / scale for each layer from the artist? If so, how would you go about doing that?
🗪
1:03:19StrickenDown I am new to programming and know intermediate Java only. Can you explain what you use emacs for if you're using Visual Studio?
🗪
1:03:19StrickenDown I am new to programming and know intermediate Java only. Can you explain what you use emacs for if you're using Visual Studio?
🗪
1:03:19StrickenDown I am new to programming and know intermediate Java only. Can you explain what you use emacs for if you're using Visual Studio?
🗪
1:03:49cubercaleb I think you should move the skylight up a tad bit
🗪
1:03:49cubercaleb I think you should move the skylight up a tad bit
🗪
1:03:49cubercaleb I think you should move the skylight up a tad bit
🗪
1:04:10garlandobloom I feel like we should have some deep voice narration. "Down in the valley..."
🗪
1:04:10garlandobloom I feel like we should have some deep voice narration. "Down in the valley..."
🗪
1:04:10garlandobloom I feel like we should have some deep voice narration. "Down in the valley..."
🗪
1:04:31Ownageinacannn Did you ever have trouble while learning to program? I'm currently getting my rump handed to me in my Java class
🗪
1:04:31Ownageinacannn Did you ever have trouble while learning to program? I'm currently getting my rump handed to me in my Java class
🗪
1:04:31Ownageinacannn Did you ever have trouble while learning to program? I'm currently getting my rump handed to me in my Java class
🗪
1:05:29elxenoaizd Will we ever load png files? If so, will we be writing our own loader or use stb_image.h? I read that it's tricky to load pngs or no?
🗪
1:05:29elxenoaizd Will we ever load png files? If so, will we be writing our own loader or use stb_image.h? I read that it's tricky to load pngs or no?
🗪
1:05:29elxenoaizd Will we ever load png files? If so, will we be writing our own loader or use stb_image.h? I read that it's tricky to load pngs or no?
🗪
1:05:54dsJimEnez Will your cutscenes be coded like this, or be setup as data in a separate file?
🗪
1:05:54dsJimEnez Will your cutscenes be coded like this, or be setup as data in a separate file?
🗪
1:05:54dsJimEnez Will your cutscenes be coded like this, or be setup as data in a separate file?
🗪
1:06:21broxx909 Do you need to know in-depth linear algebra to do this?
🗪
1:06:21broxx909 Do you need to know in-depth linear algebra to do this?
🗪
1:06:21broxx909 Do you need to know in-depth linear algebra to do this?
🗪
1:06:42elxenoaizd You mentioned your codebase is mostly independent for the most part: does that include random number generation or do you use the C library for that?
🗪
1:06:42elxenoaizd You mentioned your codebase is mostly independent for the most part: does that include random number generation or do you use the C library for that?
🗪
1:06:42elxenoaizd You mentioned your codebase is mostly independent for the most part: does that include random number generation or do you use the C library for that?
🗪
1:07:12elxenoaizd How do you handle 3D audio in your other engines and games? OpenAL or you implement something yourself?
🗪
1:07:12elxenoaizd How do you handle 3D audio in your other engines and games? OpenAL or you implement something yourself?
🗪
1:07:12elxenoaizd How do you handle 3D audio in your other engines and games? OpenAL or you implement something yourself?
🗪
1:07:57garlandobloom The sky-light just has a gap at the top was all
🗪
1:07:57garlandobloom The sky-light just has a gap at the top was all
🗪
1:07:57garlandobloom The sky-light just has a gap at the top was all
🗪
1:08:14handmade_cutscene.cpp: Move the sky light a touch closer
1:08:14handmade_cutscene.cpp: Move the sky light a touch closer
1:08:14handmade_cutscene.cpp: Move the sky light a touch closer
1:08:34Jayp2 Have you talked further with Pat Wyatt about coming on the stream, or is that postponed for when networking becomes relevant? I thought his talk was very interesting in particular
🗪
1:08:34Jayp2 Have you talked further with Pat Wyatt about coming on the stream, or is that postponed for when networking becomes relevant? I thought his talk was very interesting in particular
🗪
1:08:34Jayp2 Have you talked further with Pat Wyatt about coming on the stream, or is that postponed for when networking becomes relevant? I thought his talk was very interesting in particular
🗪
1:09:11CaptainKraft Is this code going to be for a cinematic in the game or are you just testing the functionality now?
🗪
1:09:11CaptainKraft Is this code going to be for a cinematic in the game or are you just testing the functionality now?
🗪
1:09:11CaptainKraft Is this code going to be for a cinematic in the game or are you just testing the functionality now?
🗪
1:09:23Kaminate Should I use uint32_t over u32?
🗪
1:09:23Kaminate Should I use uint32_t over u32?
🗪
1:09:23Kaminate Should I use uint32_t over u32?
🗪
1:09:39blah238 What do you think about adding lighting effects to the cutscene, like a flickering or pulsing of the candlelight in the welcome sign?
🗪
1:09:39blah238 What do you think about adding lighting effects to the cutscene, like a flickering or pulsing of the candlelight in the welcome sign?
🗪
1:09:39blah238 What do you think about adding lighting effects to the cutscene, like a flickering or pulsing of the candlelight in the welcome sign?
🗪
1:10:18elxenoaizd I meant the image format before we pack them in asset. I understand we're currently using BMP
🗪
1:10:18elxenoaizd I meant the image format before we pack them in asset. I understand we're currently using BMP
🗪
1:10:18elxenoaizd I meant the image format before we pack them in asset. I understand we're currently using BMP
🗪
1:10:57insofaras For adding more cutscenes or modding, wouldn't it make more sense to keep the parallax constants somewhere in the hha file?
🗪
1:10:57insofaras For adding more cutscenes or modding, wouldn't it make more sense to keep the parallax constants somewhere in the hha file?
🗪
1:10:57insofaras For adding more cutscenes or modding, wouldn't it make more sense to keep the parallax constants somewhere in the hha file?
🗪
1:11:58cubercaleb Don't you need to link to user32, gdi32 and opengl32 for a few things?
🗪
1:11:58cubercaleb Don't you need to link to user32, gdi32 and opengl32 for a few things?
🗪
1:11:58cubercaleb Don't you need to link to user32, gdi32 and opengl32 for a few things?
🗪
1:12:32elxenoaizd If you're writing OpenGL stuff, do you use GLEW or write your own extension loader and load the function pointers yourself?
🗪
1:12:32elxenoaizd If you're writing OpenGL stuff, do you use GLEW or write your own extension loader and load the function pointers yourself?
🗪
1:12:32elxenoaizd If you're writing OpenGL stuff, do you use GLEW or write your own extension loader and load the function pointers yourself?
🗪
1:12:41Longboolean You could make a 2D VR game, just room with a giant video wall
🗪
1:12:41Longboolean You could make a 2D VR game, just room with a giant video wall
🗪
1:12:41Longboolean You could make a 2D VR game, just room with a giant video wall
🗪
1:12:56btnGames Off-topic: Thank you for HandmadeCon, I have watched it twice already
🗪
1:12:56btnGames Off-topic: Thank you for HandmadeCon, I have watched it twice already
🗪
1:12:56btnGames Off-topic: Thank you for HandmadeCon, I have watched it twice already
🗪
1:13:02PurposelyDrifting Not a question. Just wanted to thank you for doing HandmadeCon! And glad to see you back doing Handmade Hero
🗪
1:13:02PurposelyDrifting Not a question. Just wanted to thank you for doing HandmadeCon! And glad to see you back doing Handmade Hero
🗪
1:13:02PurposelyDrifting Not a question. Just wanted to thank you for doing HandmadeCon! And glad to see you back doing Handmade Hero
🗪
1:13:44fwe4 Any plans for crude lighting and shadow support for things like lightposts?
🗪
1:13:44fwe4 Any plans for crude lighting and shadow support for things like lightposts?
🗪
1:13:44fwe4 Any plans for crude lighting and shadow support for things like lightposts?
🗪
1:14:15groggeh Will you show all content creation on stream too? Watching you spend hours doing cutscenes might not be funγ
🗪
1:14:15groggeh Will you show all content creation on stream too? Watching you spend hours doing cutscenes might not be funγ
🗪
1:14:15groggeh Will you show all content creation on stream too? Watching you spend hours doing cutscenes might not be funγ
🗪
1:16:12btnGames Out of interest, if you wanted to implement a zoom that curved to the contours of the hill (forward, drop, forward), would you still look to implement that in code or look at a visual tool for something like that?
🗪
1:16:12btnGames Out of interest, if you wanted to implement a zoom that curved to the contours of the hill (forward, drop, forward), would you still look to implement that in code or look at a visual tool for something like that?
🗪
1:16:12btnGames Out of interest, if you wanted to implement a zoom that curved to the contours of the hill (forward, drop, forward), would you still look to implement that in code or look at a visual tool for something like that?
🗪
1:18:01theGeekPirate Thanks for the stream, Casey
🗪
1:18:01theGeekPirate Thanks for the stream, Casey
🗪
1:18:01theGeekPirate Thanks for the stream, Casey
🗪
1:18:06Ownageinacannn Did you have to study algorithms in depth or did you learn from on-hand experience?
🗪
1:18:06Ownageinacannn Did you have to study algorithms in depth or did you learn from on-hand experience?
🗪
1:18:06Ownageinacannn Did you have to study algorithms in depth or did you learn from on-hand experience?
🗪
1:19:21groggeh Is VSYNC part of the renderer? At least on my end on the stream there is quite a bit of tearing. Not sure if that is the stream or not
🗪
1:19:21groggeh Is VSYNC part of the renderer? At least on my end on the stream there is quite a bit of tearing. Not sure if that is the stream or not
🗪
1:19:21groggeh Is VSYNC part of the renderer? At least on my end on the stream there is quite a bit of tearing. Not sure if that is the stream or not
🗪
1:21:00CaptainKraft Have any of the responses to your questions at HandmadeCon affected your approach to certain problems?
🗪
1:21:00CaptainKraft Have any of the responses to your questions at HandmadeCon affected your approach to certain problems?
🗪
1:21:00CaptainKraft Have any of the responses to your questions at HandmadeCon affected your approach to certain problems?
🗪
1:21:48btnGames Was the snowman intentionally looking down to indicate a feeling of sadness, or am I reading too much into it?
🗪
1:21:48btnGames Was the snowman intentionally looking down to indicate a feeling of sadness, or am I reading too much into it?
🗪
1:21:48btnGames Was the snowman intentionally looking down to indicate a feeling of sadness, or am I reading too much into it?
🗪
1:23:06ciutchism Has a programming problem ever stumped you? Even after googling and or collaboration?δ
🗪
1:23:06ciutchism Has a programming problem ever stumped you? Even after googling and or collaboration?δ
🗪
1:23:06ciutchism Has a programming problem ever stumped you? Even after googling and or collaboration?δ
🗪
1:24:55alephant That's a good quote
🗪
1:24:55alephant That's a good quote
🗪
1:24:55alephant That's a good quote
🗪
1:25:06On using metrics to determine which implementation is the most appropriate for a given situation
1:25:06On using metrics to determine which implementation is the most appropriate for a given situation
1:25:06On using metrics to determine which implementation is the most appropriate for a given situation
1:26:41elxenoaizd When you were an intermediate programmer how often is it that you used Google to help you look up solutions to hard problems? Or do you always try to first approach it yourself?
🗪
1:26:41elxenoaizd When you were an intermediate programmer how often is it that you used Google to help you look up solutions to hard problems? Or do you always try to first approach it yourself?
🗪
1:26:41elxenoaizd When you were an intermediate programmer how often is it that you used Google to help you look up solutions to hard problems? Or do you always try to first approach it yourself?
🗪
1:26:58ChronalDragon It may be obvious but there is an entire class of programmers that seem to think otherwise
🗪
1:26:58ChronalDragon It may be obvious but there is an entire class of programmers that seem to think otherwise
🗪
1:26:58ChronalDragon It may be obvious but there is an entire class of programmers that seem to think otherwise
🗪
1:27:12CaptainKraft Did you notice the triforce in the windows?
🗪
1:27:12CaptainKraft Did you notice the triforce in the windows?
🗪
1:27:12CaptainKraft Did you notice the triforce in the windows?
🗪
1:27:43Pseudonym73 One of my mentors used to say that there should be a book called "Algorithms, Data Structures, and Tradeoffs"
🗪
1:27:43Pseudonym73 One of my mentors used to say that there should be a book called "Algorithms, Data Structures, and Tradeoffs"
🗪
1:27:43Pseudonym73 One of my mentors used to say that there should be a book called "Algorithms, Data Structures, and Tradeoffs"
🗪
1:28:01Wrap things up
1:28:01Wrap things up
1:28:01Wrap things up