Handmade Hero»Episode Guide
Cross-entity Manual Sorting
?
?

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:08Recap and set the stage for the day with an embarassing confession
0:08Recap and set the stage for the day with an embarassing confession
0:08Recap and set the stage for the day with an embarassing confession
1:35Run the game and assess our current situation
1:35Run the game and assess our current situation
1:35Run the game and assess our current situation
4:46Blackboard: Manual Edge Specification
4:46Blackboard: Manual Edge Specification
4:46Blackboard: Manual Edge Specification
7:02handmade_entity.cpp: Make UpdateAndRenderEntities() only call BeginAggregateSortKey() if the PieceCount is > 1
7:02handmade_entity.cpp: Make UpdateAndRenderEntities() only call BeginAggregateSortKey() if the PieceCount is > 1
7:02handmade_entity.cpp: Make UpdateAndRenderEntities() only call BeginAggregateSortKey() if the PieceCount is > 1
7:55Consider how to articulate the intention that one sprite (e.g. the head) must always draw in front of another (e.g. the aggregated body)
7:55Consider how to articulate the intention that one sprite (e.g. the head) must always draw in front of another (e.g. the aggregated body)
7:55Consider how to articulate the intention that one sprite (e.g. the head) must always draw in front of another (e.g. the aggregated body)
10:35handmade_entity.h: Add ManualSortInFrontOf and ManualSortKey to the entity struct
10:35handmade_entity.h: Add ManualSortInFrontOf and ManualSortKey to the entity struct
10:35handmade_entity.h: Add ManualSortInFrontOf and ManualSortKey to the entity struct
11:17handmade_brain.cpp: Make ExecuteBrain() set those values when a Head and Body are linked
11:17handmade_brain.cpp: Make ExecuteBrain() set those values when a Head and Body are linked
11:17handmade_brain.cpp: Make ExecuteBrain() set those values when a Head and Body are linked
15:10handmade_brain.cpp: Enable ExecuteBrain() to talk to the RenderGroup
15:10handmade_brain.cpp: Enable ExecuteBrain() to talk to the RenderGroup
15:10handmade_brain.cpp: Enable ExecuteBrain() to talk to the RenderGroup
16:21handmade_entity.cpp: Consider how to specify the render order in UpdateAndRenderEntities()
16:21handmade_entity.cpp: Consider how to specify the render order in UpdateAndRenderEntities()
16:21handmade_entity.cpp: Consider how to specify the render order in UpdateAndRenderEntities()
19:42handmade_render_group.cpp: Consider making BuildSpriteGraph() add some additional edges that force sorts
19:42handmade_render_group.cpp: Consider making BuildSpriteGraph() add some additional edges that force sorts
19:42handmade_render_group.cpp: Consider making BuildSpriteGraph() add some additional edges that force sorts
21:38Consider simplifying things
21:38Consider simplifying things
21:38Consider simplifying things
23:06Blackboard: Putting something into the SortKey to tag it as AlwaysInFrontOf or AlwaysBehind
23:06Blackboard: Putting something into the SortKey to tag it as AlwaysInFrontOf or AlwaysBehind
23:06Blackboard: Putting something into the SortKey to tag it as AlwaysInFrontOf or AlwaysBehind
23:45handmade_render.h: Add AlwaysInFrontOf and AlwaysBehind to the sort_sprite_bound struct
23:45handmade_render.h: Add AlwaysInFrontOf and AlwaysBehind to the sort_sprite_bound struct
23:45handmade_render.h: Add AlwaysInFrontOf and AlwaysBehind to the sort_sprite_bound struct
24:33handmade_render.cpp: Make IsInFrontOf() check if sprite_bound A is AlwaysInFrontOf or AlwaysBehind B, to save having to manually specify edges
24:33handmade_render.cpp: Make IsInFrontOf() check if sprite_bound A is AlwaysInFrontOf or AlwaysBehind B, to save having to manually specify edges
24:33handmade_render.cpp: Make IsInFrontOf() check if sprite_bound A is AlwaysInFrontOf or AlwaysBehind B, to save having to manually specify edges
27:39handmade_platform.h: Add LastUsedManualSortKey to the game_render_commands struct
27:39handmade_platform.h: Add LastUsedManualSortKey to the game_render_commands struct
27:39handmade_platform.h: Add LastUsedManualSortKey to the game_render_commands struct
27:55handmade_render_group.cpp: Introduce ReserveSortKey()
27:55handmade_render_group.cpp: Introduce ReserveSortKey()
27:55handmade_render_group.cpp: Introduce ReserveSortKey()
30:45handmade_entity.cpp: Make UpdateAndRenderEntities() set AlwaysInFrontOf and AlwaysBehind
30:45handmade_entity.cpp: Make UpdateAndRenderEntities() set AlwaysInFrontOf and AlwaysBehind
30:45handmade_entity.cpp: Make UpdateAndRenderEntities() set AlwaysInFrontOf and AlwaysBehind
32:06handmade_render.h: Introduce manual_sort_key struct
32:06handmade_render.h: Introduce manual_sort_key struct
32:06handmade_render.h: Introduce manual_sort_key struct
33:08handmade_render_group.cpp: Erase ComputeSortKey() and make GetBoundFor() copy the ObjectTransform.ManualSort to SpriteBound.Manual
33:08handmade_render_group.cpp: Erase ComputeSortKey() and make GetBoundFor() copy the ObjectTransform.ManualSort to SpriteBound.Manual
33:08handmade_render_group.cpp: Erase ComputeSortKey() and make GetBoundFor() copy the ObjectTransform.ManualSort to SpriteBound.Manual
35:37handmade_platform.h: Move manual_sort_key in from handmade_render.h with a mini-rant on the language
35:37handmade_platform.h: Move manual_sort_key in from handmade_render.h with a mini-rant on the language
35:37handmade_platform.h: Move manual_sort_key in from handmade_render.h with a mini-rant on the language
36:46Run the game and see how we're doing
36:46Run the game and see how we're doing
36:46Run the game and see how we're doing
37:22Debugger: Break into ExecuteBrain() and see if we're setting the SortKey
37:22Debugger: Break into ExecuteBrain() and see if we're setting the SortKey
37:22Debugger: Break into ExecuteBrain() and see if we're setting the SortKey
39:11handmade_entity.cpp: Add a BreakHere in UpdateAndRenderEntities() when an EntityTransform is not AlwaysInFrontOf or AlwaysBehind
39:11handmade_entity.cpp: Add a BreakHere in UpdateAndRenderEntities() when an EntityTransform is not AlwaysInFrontOf or AlwaysBehind
39:11handmade_entity.cpp: Add a BreakHere in UpdateAndRenderEntities() when an EntityTransform is not AlwaysInFrontOf or AlwaysBehind
40:07Debugger: Break in there and inspect the values
40:07Debugger: Break in there and inspect the values
40:07Debugger: Break in there and inspect the values
42:45handmade_render.cp: Correct a typo in IsInFrontOf()
42:45handmade_render.cp: Correct a typo in IsInFrontOf()
42:45handmade_render.cp: Correct a typo in IsInFrontOf()
43:04Run the game and see that that wasn't our only bug
43:04Run the game and see that that wasn't our only bug
43:04Run the game and see that that wasn't our only bug
43:15handmade_render.cpp: Make IsInFrontOf() check AlwaysInFrontOf and AlwaysBehind separately and correctly
43:15handmade_render.cpp: Make IsInFrontOf() check AlwaysInFrontOf and AlwaysBehind separately and correctly
43:15handmade_render.cpp: Make IsInFrontOf() check AlwaysInFrontOf and AlwaysBehind separately and correctly
48:01Run the game and see that we're in a better situation, but not quite perfect
48:01Run the game and see that we're in a better situation, but not quite perfect
48:01Run the game and see that we're in a better situation, but not quite perfect
50:49Toggle on GlobalShowSortGroups and identify that, when the sorting is incorrect, we have a cycle
50:49Toggle on GlobalShowSortGroups and identify that, when the sorting is incorrect, we have a cycle
50:49Toggle on GlobalShowSortGroups and identify that, when the sorting is incorrect, we have a cycle
53:58"Thank you, Mr Cycle Detection"α
53:58"Thank you, Mr Cycle Detection"α
53:58"Thank you, Mr Cycle Detection"α
54:15Q&A
🗩
54:15Q&A
🗩
54:15Q&A
🗩
54:55thesizik Perhaps breaking the cycle on the in-front / behind pair?
🗪
54:55thesizik Perhaps breaking the cycle on the in-front / behind pair?
🗪
54:55thesizik Perhaps breaking the cycle on the in-front / behind pair?
🗪
56:49LongBoolean Will there ever be a case when the character's facing direction will change what we want for the sort order? I can think of a possible case if the characters had arms. Does the current method take these cases into account?
🗪
56:49LongBoolean Will there ever be a case when the character's facing direction will change what we want for the sort order? I can think of a possible case if the characters had arms. Does the current method take these cases into account?
🗪
56:49LongBoolean Will there ever be a case when the character's facing direction will change what we want for the sort order? I can think of a possible case if the characters had arms. Does the current method take these cases into account?
🗪
57:34Miblo Looking forward to rewatching that simplification from early on. I don't think I quite followed that live
🗪
57:34Miblo Looking forward to rewatching that simplification from early on. I don't think I quite followed that live
🗪
57:34Miblo Looking forward to rewatching that simplification from early on. I don't think I quite followed that live
🗪
58:41mnkmnkmnk I'm the communications director at a game development studio in Montreal. I just found your stream minutes ago and it's very fascinating. Your trailer seems to convey the idea that a game is "better" if it's entirely handmade, from scratch. Do you feel a game can't be made with as much "love" if it uses a premade engine as opposed to one that's made entirely from scratch? Do you not feel like reinventing the wheel may be a waste of time?
🗪
58:41mnkmnkmnk I'm the communications director at a game development studio in Montreal. I just found your stream minutes ago and it's very fascinating. Your trailer seems to convey the idea that a game is "better" if it's entirely handmade, from scratch. Do you feel a game can't be made with as much "love" if it uses a premade engine as opposed to one that's made entirely from scratch? Do you not feel like reinventing the wheel may be a waste of time?
🗪
58:41mnkmnkmnk I'm the communications director at a game development studio in Montreal. I just found your stream minutes ago and it's very fascinating. Your trailer seems to convey the idea that a game is "better" if it's entirely handmade, from scratch. Do you feel a game can't be made with as much "love" if it uses a premade engine as opposed to one that's made entirely from scratch? Do you not feel like reinventing the wheel may be a waste of time?
🗪
59:32On the amount of love involved in making games whether from scratch or using a pre-made engine
59:32On the amount of love involved in making games whether from scratch or using a pre-made engine
59:32On the amount of love involved in making games whether from scratch or using a pre-made engine
1:02:56On reinventing the wheel, and the educational responsibility of Handmade Hero
1:02:56On reinventing the wheel, and the educational responsibility of Handmade Hero
1:02:56On reinventing the wheel, and the educational responsibility of Handmade Hero
1:07:52On the assumption that someone made a wheel
1:07:52On the assumption that someone made a wheel
1:07:52On the assumption that someone made a wheel
1:08:49Blackboard: Where the game industry is at in terms of inventing the wheel
1:08:49Blackboard: Where the game industry is at in terms of inventing the wheel
1:08:49Blackboard: Where the game industry is at in terms of inventing the wheel
1:10:55There is no wheelβ
1:10:55There is no wheelβ
1:10:55There is no wheelβ
1:15:52On love and money
1:15:52On love and money
1:15:52On love and money
1:16:34"Your goal has to be that the reason you want money is to make games, not the reason you make games is to make money"γ
1:16:34"Your goal has to be that the reason you want money is to make games, not the reason you make games is to make money"γ
1:16:34"Your goal has to be that the reason you want money is to make games, not the reason you make games is to make money"γ
1:19:03Close up shop
🗩
1:19:03Close up shop
🗩
1:19:03Close up shop
🗩