Handmade Hero»Episode Guide
Cleaning Up Traversables
?
?

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:00Welcome to the stream
🗩
0:00Welcome to the stream
🗩
0:00Welcome to the stream
🗩
0:36Consider throwing in some gameplay stuff
🏃
0:36Consider throwing in some gameplay stuff
🏃
0:36Consider throwing in some gameplay stuff
🏃
2:53Determine to add lockable doors
🏃
2:53Determine to add lockable doors
🏃
2:53Determine to add lockable doors
🏃
4:50Note our broken transactional occupy points
🏃
4:50Note our broken transactional occupy points
🏃
4:50Note our broken transactional occupy points
🏃
5:41Reacquaint ourselves with TransactionalOccupy()
📖
5:41Reacquaint ourselves with TransactionalOccupy()
📖
5:41Reacquaint ourselves with TransactionalOccupy()
📖
9:25Test transactional occupation with a snake entity
🏃
9:25Test transactional occupation with a snake entity
🏃
9:25Test transactional occupation with a snake entity
🏃
10:12Reacquaint ourselves with tree placement in GenerateRoom()
📖
10:12Reacquaint ourselves with tree placement in GenerateRoom()
📖
10:12Reacquaint ourselves with tree placement in GenerateRoom()
📖
11:26Make GenerateRoom() set each tile to be occupied by a tree as not open
11:26Make GenerateRoom() set each tile to be occupied by a tree as not open
11:26Make GenerateRoom() set each tile to be occupied by a tree as not open
11:42Our garden now lacks some trees
🏃
11:42Our garden now lacks some trees
🏃
11:42Our garden now lacks some trees
🏃
11:53Consider this to be an entity packing / unpacking bug
📖
11:53Consider this to be an entity packing / unpacking bug
📖
11:53Consider this to be an entity packing / unpacking bug
📖
14:27Make UpdateAndRenderEntities() mark tiles by occupation
14:27Make UpdateAndRenderEntities() mark tiles by occupation
14:27Make UpdateAndRenderEntities() mark tiles by occupation
15:51Hit a write access violation in PushCube()
🏃
15:51Hit a write access violation in PushCube()
🏃
15:51Hit a write access violation in PushCube()
🏃
16:40Hit an Emission assertion in PushCube()
🏃
16:40Hit an Emission assertion in PushCube()
🏃
16:40Hit an Emission assertion in PushCube()
🏃
16:54Make UpdateAndRenderEntities() pass an Emission value of 1.0f to PushCube()
16:54Make UpdateAndRenderEntities() pass an Emission value of 1.0f to PushCube()
16:54Make UpdateAndRenderEntities() pass an Emission value of 1.0f to PushCube()
17:04See our tile occupation
🏃
17:04See our tile occupation
🏃
17:04See our tile occupation
🏃
17:21Our tile occupation markers do not change colour
🏃
17:21Our tile occupation markers do not change colour
🏃
17:21Our tile occupation markers do not change colour
🏃
17:48Investigate this as an entity packing / unpacking bug
📖
17:48Investigate this as an entity packing / unpacking bug
📖
17:48Investigate this as an entity packing / unpacking bug
📖
21:30Respecify entity_traversable_point to use an entity_id rather than an entity *, introducing an entity_id version of IsValid()
21:30Respecify entity_traversable_point to use an entity_id rather than an entity *, introducing an entity_id version of IsValid()
21:30Respecify entity_traversable_point to use an entity_id rather than an entity *, introducing an entity_id version of IsValid()
26:22Our tile occupation markers still do not change colour
🏃
26:22Our tile occupation markers still do not change colour
🏃
26:22Our tile occupation markers still do not change colour
🏃
26:56Scour the entity system for traversable preservation
26:56Scour the entity system for traversable preservation
26:56Scour the entity system for traversable preservation
28:08Step through TransactionalOccupy()
🏃
28:08Step through TransactionalOccupy()
🏃
28:08Step through TransactionalOccupy()
🏃
31:39Our tile occupation marker has not changed colour
🏃
31:39Our tile occupation marker has not changed colour
🏃
31:39Our tile occupation marker has not changed colour
🏃
32:13Fix UpdateAndRenderEntities() to use our "occupied" Color
32:13Fix UpdateAndRenderEntities() to use our "occupied" Color
32:13Fix UpdateAndRenderEntities() to use our "occupied" Color
32:47Our tile occupation markers now change colour
🏃
32:47Our tile occupation markers now change colour
🏃
32:47Our tile occupation markers now change colour
🏃
33:03Hop over to the garden, yearning for a click-and-move debug feature
🏃
33:03Hop over to the garden, yearning for a click-and-move debug feature
🏃
33:03Hop over to the garden, yearning for a click-and-move debug feature
🏃
34:11Our tree tiles are not marked as occupied
🏃
34:11Our tree tiles are not marked as occupied
🏃
34:11Our tree tiles are not marked as occupied
🏃
35:14Our hero tile is also considered unoccupied on startup
🏃
35:14Our hero tile is also considered unoccupied on startup
🏃
35:14Our hero tile is also considered unoccupied on startup
🏃
35:30Make GenEntityAtTraversable() call TransactionalOccupy()
35:30Make GenEntityAtTraversable() call TransactionalOccupy()
35:30Make GenEntityAtTraversable() call TransactionalOccupy()
37:26Our trees now occupy their tiles
🏃
37:26Our trees now occupy their tiles
🏃
37:26Our trees now occupy their tiles
🏃
37:59We have mysterious tile occupation markers
🏃
37:59We have mysterious tile occupation markers
🏃
37:59We have mysterious tile occupation markers
🏃
39:17thanveershah What is this built on?
🗪
39:17thanveershah What is this built on?
🗪
39:17thanveershah What is this built on?
🗪
39:26belginul Unity
🗪
39:26belginul Unity
🗪
39:26belginul Unity
🗪
39:43On the legitimacy of the question
🗩
39:43On the legitimacy of the question
🗩
39:43On the legitimacy of the question
🗩
40:09pyromaggot Windows is built on Unity
🗪
40:09pyromaggot Windows is built on Unity
🗪
40:09pyromaggot Windows is built on Unity
🗪
40:34Start to investigate our mystery occupation points
📖
40:34Start to investigate our mystery occupation points
📖
40:34Start to investigate our mystery occupation points
📖
41:04silverqraw You'd actually be surprised how many are working on their own engines / games from scratch. It's pretty encouraging
🗪
41:04silverqraw You'd actually be surprised how many are working on their own engines / games from scratch. It's pretty encouraging
🗪
41:04silverqraw You'd actually be surprised how many are working on their own engines / games from scratch. It's pretty encouraging
🗪
41:58rationalcoder There should be disclosure policies in place so we can specifically avoid using hard real-time systems that are written in JavaScript in the future
🗪
41:58rationalcoder There should be disclosure policies in place so we can specifically avoid using hard real-time systems that are written in JavaScript in the future
🗪
41:58rationalcoder There should be disclosure policies in place so we can specifically avoid using hard real-time systems that are written in JavaScript in the future
🗪
42:17Make GenEntityAtTraversable() and PlaceOrphan() use GenEntity_IsNotOccupier
42:17Make GenEntityAtTraversable() and PlaceOrphan() use GenEntity_IsNotOccupier
42:17Make GenEntityAtTraversable() and PlaceOrphan() use GenEntity_IsNotOccupier
47:34Our conversation tiles work fine, but we still have mystery occupation points
🏃
47:34Our conversation tiles work fine, but we still have mystery occupation points
🏃
47:34Our conversation tiles work fine, but we still have mystery occupation points
🏃
49:26Our plan for doors: Supporting multiple door unlocking mechanisms
🏃
49:26Our plan for doors: Supporting multiple door unlocking mechanisms
🏃
49:26Our plan for doors: Supporting multiple door unlocking mechanisms
🏃
52:16We lack a door texture
🗹
52:16We lack a door texture
🗹
52:16We lack a door texture
🗹
52:55Create a locking door entity, augmenting gen_connection with DoorFromAToB and DoorFromBToA
52:55Create a locking door entity, augmenting gen_connection with DoorFromAToB and DoorFromBToA
52:55Create a locking door entity, augmenting gen_connection with DoorFromAToB and DoorFromBToA
58:25Enable GenerateRoom() to create doors, using Intersect() and AddObstacle()
58:25Enable GenerateRoom() to create doors, using Intersect() and AddObstacle()
58:25Enable GenerateRoom() to create doors, using Intersect() and AddObstacle()
1:06:15Introduce GetTileAbs()
1:06:15Introduce GetTileAbs()
1:06:15Introduce GetTileAbs()
1:07:22Finish enabling GenerateRoom() to create doors
1:07:22Finish enabling GenerateRoom() to create doors
1:07:22Finish enabling GenerateRoom() to create doors
1:09:57Our orphanage is no different
🏃
1:09:57Our orphanage is no different
🏃
1:09:57Our orphanage is no different
🏃
1:10:25Make CreateDungeon() request a DoorFromAToB
1:10:25Make CreateDungeon() request a DoorFromAToB
1:10:25Make CreateDungeon() request a DoorFromAToB
1:11:01Our dungeon contains a door
🏃
1:11:01Our dungeon contains a door
🏃
1:11:01Our dungeon contains a door
🏃
1:12:23Disable the tile occupation markers in UpdateAndRenderEntities()
1:12:23Disable the tile occupation markers in UpdateAndRenderEntities()
1:12:23Disable the tile occupation markers in UpdateAndRenderEntities()
1:12:30Plan to sink the doors into the floors next time
🏃
1:12:30Plan to sink the doors into the floors next time
🏃
1:12:30Plan to sink the doors into the floors next time
🏃
1:12:46Q&A
🗩
1:12:46Q&A
🗩
1:12:46Q&A
🗩
1:13:28thesandvichmaker handmade_hero Here's a hot question live off the press: Stack Overflow says you must use smart pointers. The Handmade Hero codebase has no smart pointers, how can this be?!
🗪
1:13:28thesandvichmaker handmade_hero Here's a hot question live off the press: Stack Overflow says you must use smart pointers. The Handmade Hero codebase has no smart pointers, how can this be?!
🗪
1:13:28thesandvichmaker handmade_hero Here's a hot question live off the press: Stack Overflow says you must use smart pointers. The Handmade Hero codebase has no smart pointers, how can this be?!
🗪
1:14:02Programmer stages of mental development wrt architecture
🗩
1:14:02Programmer stages of mental development wrt architecture
🗩
1:14:02Programmer stages of mental development wrt architecture
🗩
1:14:43Programmer stages of mental development wrt architecture: n) individual element thinking / architecture
🗩
1:14:43Programmer stages of mental development wrt architecture: n) individual element thinking / architecture
🗩
1:14:43Programmer stages of mental development wrt architecture: n) individual element thinking / architecture
🗩
1:18:00Programmer stages of mental development wrt architecture: n+1) grouped element thinking
🗩
1:18:00Programmer stages of mental development wrt architecture: n+1) grouped element thinking
🗩
1:18:00Programmer stages of mental development wrt architecture: n+1) grouped element thinking
🗩
1:24:44vaualbus handmade_hero The good of having to learn the Handmade Hero codebase is that the use of internal imposes the inability to use the STL as it is there too defined and broke the compilation. So is the reason why we skip C++ badness
🗪
1:24:44vaualbus handmade_hero The good of having to learn the Handmade Hero codebase is that the use of internal imposes the inability to use the STL as it is there too defined and broke the compilation. So is the reason why we skip C++ badness
🗪
1:24:44vaualbus handmade_hero The good of having to learn the Handmade Hero codebase is that the use of internal imposes the inability to use the STL as it is there too defined and broke the compilation. So is the reason why we skip C++ badness
🗪
1:25:11stuntcoder n+2 is when you reached guru stage after 30 years and your code finally "looks" as simple as written by someone at n-3 stage, but it is free of all the BS
🗪
1:25:11stuntcoder n+2 is when you reached guru stage after 30 years and your code finally "looks" as simple as written by someone at n-3 stage, but it is free of all the BS
🗪
1:25:11stuntcoder n+2 is when you reached guru stage after 30 years and your code finally "looks" as simple as written by someone at n-3 stage, but it is free of all the BS
🗪
1:28:03pythno Q: If you look at the old id code (Wolf3D, Doom, Quake, ...) there they already think of large groups when it comes to memory or at least they allocate just once (for the most part) and then go with it. Then why did we go "backwards"? n) is what I was taught at university from Professors who were around at the "Doom" time. What happened?
🗪
1:28:03pythno Q: If you look at the old id code (Wolf3D, Doom, Quake, ...) there they already think of large groups when it comes to memory or at least they allocate just once (for the most part) and then go with it. Then why did we go "backwards"? n) is what I was taught at university from Professors who were around at the "Doom" time. What happened?
🗪
1:28:03pythno Q: If you look at the old id code (Wolf3D, Doom, Quake, ...) there they already think of large groups when it comes to memory or at least they allocate just once (for the most part) and then go with it. Then why did we go "backwards"? n) is what I was taught at university from Professors who were around at the "Doom" time. What happened?
🗪
1:30:19said6289 Nowadays, engineers aren't engineers
🗪
1:30:19said6289 Nowadays, engineers aren't engineers
🗪
1:30:19said6289 Nowadays, engineers aren't engineers
🗪
1:31:02joeppp Maybe people like Carmack (and you) should be more vocal. Now it's the mediocre guys shouting and the gurus keeping quiet. How are we supposed to learn?
🗪
1:31:02joeppp Maybe people like Carmack (and you) should be more vocal. Now it's the mediocre guys shouting and the gurus keeping quiet. How are we supposed to learn?
🗪
1:31:02joeppp Maybe people like Carmack (and you) should be more vocal. Now it's the mediocre guys shouting and the gurus keeping quiet. How are we supposed to learn?
🗪
1:32:22intraterrestriel Q: Does this stuff apply to game engine programming only or also to corporate logistics (crud)?
🗪
1:32:22intraterrestriel Q: Does this stuff apply to game engine programming only or also to corporate logistics (crud)?
🗪
1:32:22intraterrestriel Q: Does this stuff apply to game engine programming only or also to corporate logistics (crud)?
🗪
1:33:09beastexmachina I really appreciate the way that you presented that. Matches my first response to auto_ptr but I couldn't express the rationale as well. Also why I like C, because you have more pressure to think in the n+1 way
🗪
1:33:09beastexmachina I really appreciate the way that you presented that. Matches my first response to auto_ptr but I couldn't express the rationale as well. Also why I like C, because you have more pressure to think in the n+1 way
🗪
1:33:09beastexmachina I really appreciate the way that you presented that. Matches my first response to auto_ptr but I couldn't express the rationale as well. Also why I like C, because you have more pressure to think in the n+1 way
🗪
1:38:57Example of transitioning from n to n+1: Character creation in Granny
🗩
1:38:57Example of transitioning from n to n+1: Character creation in Granny
🗩
1:38:57Example of transitioning from n to n+1: Character creation in Granny
🗩
1:42:13Designing out memory allocation failure bugs by creating a "working" stub arena
🗩
1:42:13Designing out memory allocation failure bugs by creating a "working" stub arena
🗩
1:42:13Designing out memory allocation failure bugs by creating a "working" stub arena
🗩
1:43:28rockpaperpi Q: A lot of your n category seems to cover error handling. Are you concerned at all with any secure coding concepts to cover undefined behavior with people looking to exploit it?
🗪
1:43:28rockpaperpi Q: A lot of your n category seems to cover error handling. Are you concerned at all with any secure coding concepts to cover undefined behavior with people looking to exploit it?
🗪
1:43:28rockpaperpi Q: A lot of your n category seems to cover error handling. Are you concerned at all with any secure coding concepts to cover undefined behavior with people looking to exploit it?
🗪
1:45:12Growable arenas and failure handling
🗩
1:45:12Growable arenas and failure handling
🗩
1:45:12Growable arenas and failure handling
🗩
1:46:58thesandvichmaker Q: Let's say I want to push some dynamic amount of data, and I run out of space. The calling code expects N bytes, and will write N bytes, but I don't have N bytes. How do you handle this case in that style?
🗪
1:46:58thesandvichmaker Q: Let's say I want to push some dynamic amount of data, and I run out of space. The calling code expects N bytes, and will write N bytes, but I don't have N bytes. How do you handle this case in that style?
🗪
1:46:58thesandvichmaker Q: Let's say I want to push some dynamic amount of data, and I run out of space. The calling code expects N bytes, and will write N bytes, but I don't have N bytes. How do you handle this case in that style?
🗪
1:48:50Programmer stages of mental development wrt architecture: n+2?) ZII
🗩
1:48:50Programmer stages of mental development wrt architecture: n+2?) ZII
🗩
1:48:50Programmer stages of mental development wrt architecture: n+2?) ZII
🗩
1:50:20mindspyke Is a repeat mapped page an OS thing, or is that something custom?
🗪
1:50:20mindspyke Is a repeat mapped page an OS thing, or is that something custom?
🗪
1:50:20mindspyke Is a repeat mapped page an OS thing, or is that something custom?
🗪
1:51:49centhusiast Q: Have you read the paper Fast Efficient Fixed-Size Memory Pool No Loops and No Overhead by Ben Kenwright?
🗪
1:51:49centhusiast Q: Have you read the paper Fast Efficient Fixed-Size Memory Pool No Loops and No Overhead by Ben Kenwright?
🗪
1:51:49centhusiast Q: Have you read the paper Fast Efficient Fixed-Size Memory Pool No Loops and No Overhead by Ben Kenwright?
🗪
1:52:31rationalcoder Q: So all of the code has a check to see if the struct is a stub and doesn't do anything?
🗪
1:52:31rationalcoder Q: So all of the code has a check to see if the struct is a stub and doesn't do anything?
🗪
1:52:31rationalcoder Q: So all of the code has a check to see if the struct is a stub and doesn't do anything?
🗪
1:53:47centhusiast Q: Could you quickly take a look at the paper?1
🗪
1:53:47centhusiast Q: Could you quickly take a look at the paper?1
🗪
1:53:47centhusiast Q: Could you quickly take a look at the paper?1
🗪
2:00:10aphotic44 handmade_hero Are you familiar with Richard Fabian's Data-Oriented Design book?2 He's an advocate of laying out data in normalized form, and representing relationships between entities in tables, much like a relational database though not literally SQL of course
🗪
2:00:10aphotic44 handmade_hero Are you familiar with Richard Fabian's Data-Oriented Design book?2 He's an advocate of laying out data in normalized form, and representing relationships between entities in tables, much like a relational database though not literally SQL of course
🗪
2:00:10aphotic44 handmade_hero Are you familiar with Richard Fabian's Data-Oriented Design book?2 He's an advocate of laying out data in normalized form, and representing relationships between entities in tables, much like a relational database though not literally SQL of course
🗪
2:02:12On publishing papers on known knowledge
🗩
2:02:12On publishing papers on known knowledge
🗩
2:02:12On publishing papers on known knowledge
🗩
2:03:47uncountable In related works it does say "On the other hand, the technique we present here is not novel, but is a modification of an existing technique"3
🗪
2:03:47uncountable In related works it does say "On the other hand, the technique we present here is not novel, but is a modification of an existing technique"3
🗪
2:03:47uncountable In related works it does say "On the other hand, the technique we present here is not novel, but is a modification of an existing technique"3
🗪
2:05:29centhusiast Q: Could you explain about ECC memory?
🗪
2:05:29centhusiast Q: Could you explain about ECC memory?
🗪
2:05:29centhusiast Q: Could you explain about ECC memory?
🗪
2:08:25tarriest_python handmade_hero It's called Hamming codes. It can correct single bit flips, and detect two bit flips. It's all done in very simple hardware. Ben Eater and 3blue1brown have very good videos on the topic
🗪
2:08:25tarriest_python handmade_hero It's called Hamming codes. It can correct single bit flips, and detect two bit flips. It's all done in very simple hardware. Ben Eater and 3blue1brown have very good videos on the topic
🗪
2:08:25tarriest_python handmade_hero It's called Hamming codes. It can correct single bit flips, and detect two bit flips. It's all done in very simple hardware. Ben Eater and 3blue1brown have very good videos on the topic
🗪
2:08:47pythno Q: In Handmade Hero, do you align the elements you put into the arena? Someone told me that nowadays on desktop CPUs the alignment for read / write is not as important but it is probably better to get as many things into a cache line as possible
🗪
2:08:47pythno Q: In Handmade Hero, do you align the elements you put into the arena? Someone told me that nowadays on desktop CPUs the alignment for read / write is not as important but it is probably better to get as many things into a cache line as possible
🗪
2:08:47pythno Q: In Handmade Hero, do you align the elements you put into the arena? Someone told me that nowadays on desktop CPUs the alignment for read / write is not as important but it is probably better to get as many things into a cache line as possible
🗪
2:11:45centhusiast Q: Can hyperthreading cause false sharing?
🗪
2:11:45centhusiast Q: Can hyperthreading cause false sharing?
🗪
2:11:45centhusiast Q: Can hyperthreading cause false sharing?
🗪
2:12:35infinum handmade_hero Did you ever have any problems with your back sitting all day long, or you just buy an expensive chair and all problems go away?
🗪
2:12:35infinum handmade_hero Did you ever have any problems with your back sitting all day long, or you just buy an expensive chair and all problems go away?
🗪
2:12:35infinum handmade_hero Did you ever have any problems with your back sitting all day long, or you just buy an expensive chair and all problems go away?
🗪
2:13:44Plug the Space Series Mesh Back Task Chair4
📖
2:13:44Plug the Space Series Mesh Back Task Chair4
📖
2:13:44Plug the Space Series Mesh Back Task Chair4
📖
2:14:42We are good to go
🗩
2:14:42We are good to go
🗩
2:14:42We are good to go
🗩