Final Collision Resolution Design
?
?

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:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
2:10Determine to switch the collision detection to use voxel-by-voxel stepping
🗩
2:10Determine to switch the collision detection to use voxel-by-voxel stepping
🗩
2:10Determine to switch the collision detection to use voxel-by-voxel stepping
🗩
5:33Introduce an f32 version of Floor()
5:33Introduce an f32 version of Floor()
5:33Introduce an f32 version of Floor()
7:21Center the FromP around stable collision voxel bounds in MoveEntityLocally()
7:21Center the FromP around stable collision voxel bounds in MoveEntityLocally()
7:21Center the FromP around stable collision voxel bounds in MoveEntityLocally()
11:16Introduce a v3 version of Floor()
11:16Introduce a v3 version of Floor()
11:16Introduce a v3 version of Floor()
13:06Continue to switch MoveEntityLocally() to use stable voxel-by-voxel stepping
13:06Continue to switch MoveEntityLocally() to use stable voxel-by-voxel stepping
13:06Continue to switch MoveEntityLocally() to use stable voxel-by-voxel stepping
16:29Thoughts on embedding recovery
📖
16:29Thoughts on embedding recovery
📖
16:29Thoughts on embedding recovery
📖
19:04Introduce move_result for MoveEntityLocally() to return
19:04Introduce move_result for MoveEntityLocally() to return
19:04Introduce move_result for MoveEntityLocally() to return
20:53Voxel collision states: 1) Any legal corners
📖
20:53Voxel collision states: 1) Any legal corners
📖
20:53Voxel collision states: 1) Any legal corners
📖
21:59Voxel collision states: 2) Where would the entity be placed?
📖
21:59Voxel collision states: 2) Where would the entity be placed?
📖
21:59Voxel collision states: 2) Where would the entity be placed?
📖
22:33Make MoveEntityLocally() use GetClosestPointInBox() to compute the entity placement
22:33Make MoveEntityLocally() use GetClosestPointInBox() to compute the entity placement
22:33Make MoveEntityLocally() use GetClosestPointInBox() to compute the entity placement
23:01Deep thoughts on collision
📖
23:01Deep thoughts on collision
📖
23:01Deep thoughts on collision
📖
23:43Consider using GetClosestPointInBox() on repeated subdivisions of the collision voxel
📖
23:43Consider using GetClosestPointInBox() on repeated subdivisions of the collision voxel
📖
23:43Consider using GetClosestPointInBox() on repeated subdivisions of the collision voxel
📖
26:35immibis Something I wondered about The Witness is: Why does the player not move on a navmesh? Then you wouldn't have needed that brute force testing thingy
🗪
26:35immibis Something I wondered about The Witness is: Why does the player not move on a navmesh? Then you wouldn't have needed that brute force testing thingy
🗪
26:35immibis Something I wondered about The Witness is: Why does the player not move on a navmesh? Then you wouldn't have needed that brute force testing thingy
🗪
29:39tadasv123 Are you and Jon Blow on the same team or something?
🗪
29:39tadasv123 Are you and Jon Blow on the same team or something?
🗪
29:39tadasv123 Are you and Jon Blow on the same team or something?
🗪
29:49Introduce CollidesAtP() for MoveEntityLocally() to call
29:49Introduce CollidesAtP() for MoveEntityLocally() to call
29:49Introduce CollidesAtP() for MoveEntityLocally() to call
32:39b1dd1e So, tuned in just in time to witness a Casey epiphany?
🗪
32:39b1dd1e So, tuned in just in time to witness a Casey epiphany?
🗪
32:39b1dd1e So, tuned in just in time to witness a Casey epiphany?
🗪
32:56b1dd1e Yup
🗪
32:56b1dd1e Yup
🗪
32:56b1dd1e Yup
🗪
33:39b1dd1e Do I need a code word?
🗪
33:39b1dd1e Do I need a code word?
🗪
33:39b1dd1e Do I need a code word?
🗪
34:32Introduce Mike Biddlecombe
34:32Introduce Mike Biddlecombe
34:32Introduce Mike Biddlecombe
34:49b1dd1e In Vancouver
🗪
34:49b1dd1e In Vancouver
🗪
34:49b1dd1e In Vancouver
🗪
35:033D movement realisation: If we could place an entity in a cell, we may then root-find1 to pick exactly where
35:033D movement realisation: If we could place an entity in a cell, we may then root-find1 to pick exactly where
35:033D movement realisation: If we could place an entity in a cell, we may then root-find1 to pick exactly where
36:26Introduce a root-finding2 RefineVoxelPlacement() for MoveEntityLocally() to call
36:26Introduce a root-finding2 RefineVoxelPlacement() for MoveEntityLocally() to call
36:26Introduce a root-finding2 RefineVoxelPlacement() for MoveEntityLocally() to call
49:17Explain RefineVoxelPlacement()
📖
49:17Explain RefineVoxelPlacement()
📖
49:17Explain RefineVoxelPlacement()
📖
50:13Fix RefineVoxelPlacement() to halve the tStep each iteration
50:13Fix RefineVoxelPlacement() to halve the tStep each iteration
50:13Fix RefineVoxelPlacement() to halve the tStep each iteration
50:23Explain the root-finding3 of RefineVoxelPlacement() (cont.)
📖
50:23Explain the root-finding3 of RefineVoxelPlacement() (cont.)
📖
50:23Explain the root-finding3 of RefineVoxelPlacement() (cont.)
📖
54:23Make MoveEntity() call RefineVoxelPlacement() at the end
54:23Make MoveEntity() call RefineVoxelPlacement() at the end
54:23Make MoveEntity() call RefineVoxelPlacement() at the end
54:58Recap the parameters passed to RefineVoxelPlacement()
📖
54:58Recap the parameters passed to RefineVoxelPlacement()
📖
54:58Recap the parameters passed to RefineVoxelPlacement()
📖
55:39Handling shifting FromP: 1) Map it into the cell
📖
55:39Handling shifting FromP: 1) Map it into the cell
📖
55:39Handling shifting FromP: 1) Map it into the cell
📖
55:47Handling shifting FromP: 2) Convect it around the centre of voxel faces
📖
55:47Handling shifting FromP: 2) Convect it around the centre of voxel faces
📖
55:47Handling shifting FromP: 2) Convect it around the centre of voxel faces
📖
56:16Make MoveEntity() and MoveEntityLocally() map the FromP and ToP into the cell
56:16Make MoveEntity() and MoveEntityLocally() map the FromP and ToP into the cell
56:16Make MoveEntity() and MoveEntityLocally() map the FromP and ToP into the cell
57:40haeristudios I am really confused with the quality of the video and lighting setup. Why is it so good?
🗪
57:40haeristudios I am really confused with the quality of the video and lighting setup. Why is it so good?
🗪
57:40haeristudios I am really confused with the quality of the video and lighting setup. Why is it so good?
🗪
58:48Remove the voxel subdivision code from MoveEntity()
58:48Remove the voxel subdivision code from MoveEntity()
58:48Remove the voxel subdivision code from MoveEntity()
59:17Plan to pathfind to our nearest legal destination
📖
59:17Plan to pathfind to our nearest legal destination
📖
59:17Plan to pathfind to our nearest legal destination
📖
1:01:41scanberg What happened to the glasses?
🗪
1:01:41scanberg What happened to the glasses?
🗪
1:01:41scanberg What happened to the glasses?
🗪
1:02:12abecderic Now I need to learn this stuff. StarCinematographyGalaxy when?
🗪
1:02:12abecderic Now I need to learn this stuff. StarCinematographyGalaxy when?
🗪
1:02:12abecderic Now I need to learn this stuff. StarCinematographyGalaxy when?
🗪
1:03:25kiewi3 You need a red arrow in the thumbnail
🗪
1:03:25kiewi3 You need a red arrow in the thumbnail
🗪
1:03:25kiewi3 You need a red arrow in the thumbnail
🗪
1:03:42Setup MoveEntity() to pathfind to our nearest legal destination, welding in MoveEntityLocally()
1:03:42Setup MoveEntity() to pathfind to our nearest legal destination, welding in MoveEntityLocally()
1:03:42Setup MoveEntity() to pathfind to our nearest legal destination, welding in MoveEntityLocally()
1:05:18Consider calling RefineVoxelPlacement() on multiple cells
📖
1:05:18Consider calling RefineVoxelPlacement() on multiple cells
📖
1:05:18Consider calling RefineVoxelPlacement() on multiple cells
📖
1:05:43mallesbixie The tip professional Cinematographers do not want you to know!
🗪
1:05:43mallesbixie The tip professional Cinematographers do not want you to know!
🗪
1:05:43mallesbixie The tip professional Cinematographers do not want you to know!
🗪
1:06:00Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:06:00Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:06:00Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:09:12mallesbixie Yeah, now I also spot the divide outside the floor somebody mentioned earlier, at VoxelMinCorner
🗪
1:09:12mallesbixie Yeah, now I also spot the divide outside the floor somebody mentioned earlier, at VoxelMinCorner
🗪
1:09:12mallesbixie Yeah, now I also spot the divide outside the floor somebody mentioned earlier, at VoxelMinCorner
🗪
1:09:18Fix the computation of VoxelMinCorner in MoveEntity()
1:09:18Fix the computation of VoxelMinCorner in MoveEntity()
1:09:18Fix the computation of VoxelMinCorner in MoveEntity()
1:09:42Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:09:42Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:09:42Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:12:29sgtrumbi Is there a return statement in the refine function?
🗪
1:12:29sgtrumbi Is there a return statement in the refine function?
🗪
1:12:29sgtrumbi Is there a return statement in the refine function?
🗪
1:12:56Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:12:56Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:12:56Make MoveEntity() pathfind to our nearest legal destination (cont.)
1:16:32Flipped refinement and movement legality
📖
1:16:32Flipped refinement and movement legality
📖
1:16:32Flipped refinement and movement legality
📖
1:18:34Determine to make MoveEntity() handle movement from a legal place
📖
1:18:34Determine to make MoveEntity() handle movement from a legal place
📖
1:18:34Determine to make MoveEntity() handle movement from a legal place
📖
1:22:24Make MoveEntity() handle movement from a legal place
1:22:24Make MoveEntity() handle movement from a legal place
1:22:24Make MoveEntity() handle movement from a legal place
1:31:16Introduce voxel_move for MoveEntity() to use
1:31:16Introduce voxel_move for MoveEntity() to use
1:31:16Introduce voxel_move for MoveEntity() to use
1:32:09Make MoveEntity() handle movement from a legal place (cont.)
1:32:09Make MoveEntity() handle movement from a legal place (cont.)
1:32:09Make MoveEntity() handle movement from a legal place (cont.)
1:40:38Implement UpdateBest()
1:40:38Implement UpdateBest()
1:40:38Implement UpdateBest()
1:44:02Consider this okay for one day's work
🗩
1:44:02Consider this okay for one day's work
🗩
1:44:02Consider this okay for one day's work
🗩
1:44:33Step through MoveEntity()
🏃
1:44:33Step through MoveEntity()
🏃
1:44:33Step through MoveEntity()
🏃
1:46:06Step through MoveEntity() in -Od
🏃
1:46:06Step through MoveEntity() in -Od
🏃
1:46:06Step through MoveEntity() in -Od
🏃
1:47:06Set MOTION_DISPLACEMENT_SIZE to 0.125 (as the closest power of 2 to 0.1) in MoveEntity()
1:47:06Set MOTION_DISPLACEMENT_SIZE to 0.125 (as the closest power of 2 to 0.1) in MoveEntity()
1:47:06Set MOTION_DISPLACEMENT_SIZE to 0.125 (as the closest power of 2 to 0.1) in MoveEntity()
1:47:40Step through MoveEntity()
🏃
1:47:40Step through MoveEntity()
🏃
1:47:40Step through MoveEntity()
🏃
1:49:45Pull out the DeltaP in UpdateBest() for debugging convenience
1:49:45Pull out the DeltaP in UpdateBest() for debugging convenience
1:49:45Pull out the DeltaP in UpdateBest() for debugging convenience
1:50:23Step in to UpdateBest()
🏃
1:50:23Step in to UpdateBest()
🏃
1:50:23Step in to UpdateBest()
🏃
1:51:57Retain the Best.DistanceSq as the nearest valid distance in MoveEntity()
1:51:57Retain the Best.DistanceSq as the nearest valid distance in MoveEntity()
1:51:57Retain the Best.DistanceSq as the nearest valid distance in MoveEntity()
1:53:31Step wildly
🏃
1:53:31Step wildly
🏃
1:53:31Step wildly
🏃
1:54:17Update remedybg from 0.3.3.3 to 0.3.3.5
🗹
1:54:17Update remedybg from 0.3.3.3 to 0.3.3.5
🗹
1:54:17Update remedybg from 0.3.3.3 to 0.3.3.5
🗹
1:58:28Step wildly still
🏃
1:58:28Step wildly still
🏃
1:58:28Step wildly still
🏃
1:59:27Try stepping in -O2, unsuccessfully
🏃
1:59:27Try stepping in -O2, unsuccessfully
🏃
1:59:27Try stepping in -O2, unsuccessfully
🏃
1:59:40sori_daijin Casey, you might need new glasses
🗪
1:59:40sori_daijin Casey, you might need new glasses
🗪
1:59:40sori_daijin Casey, you might need new glasses
🗪
1:59:49This is still in a bad state
🏃
1:59:49This is still in a bad state
🏃
1:59:49This is still in a bad state
🏃
2:00:03Compile in -Od
2:00:03Compile in -Od
2:00:03Compile in -Od
2:00:33ezioauditorerevs handmade_hero Did you order the glasses from Apple?
🗪
2:00:33ezioauditorerevs handmade_hero Did you order the glasses from Apple?
🗪
2:00:33ezioauditorerevs handmade_hero Did you order the glasses from Apple?
🗪
2:00:40Fallacious positive arguments for Apple vs consumer rights law
💢
🗩
2:00:40Fallacious positive arguments for Apple vs consumer rights law
💢
🗩
2:00:40Fallacious positive arguments for Apple vs consumer rights law
💢
🗩
2:05:42hexadecimalinteger That's where competition comes in
🗪
2:05:42hexadecimalinteger That's where competition comes in
🗪
2:05:42hexadecimalinteger That's where competition comes in
🗪
2:07:31Step through MoveEntity()
🏃
2:07:31Step through MoveEntity()
🏃
2:07:31Step through MoveEntity()
🏃
2:09:40ryuukk_ tl;dr I love capitalism when it works for me. Screw other people
🗪
2:09:40ryuukk_ tl;dr I love capitalism when it works for me. Screw other people
🗪
2:09:40ryuukk_ tl;dr I love capitalism when it works for me. Screw other people
🗪
2:14:37ezioauditorerevs handmade_hero Can we get Handmade Political as a podcast?
🗪
2:14:37ezioauditorerevs handmade_hero Can we get Handmade Political as a podcast?
🗪
2:14:37ezioauditorerevs handmade_hero Can we get Handmade Political as a podcast?
🗪
2:16:25Step through MoveEntity()
🏃
2:16:25Step through MoveEntity()
🏃
2:16:25Step through MoveEntity()
🏃
2:16:55Flip the sense of our Occupied tests in MoveEntity()
2:16:55Flip the sense of our Occupied tests in MoveEntity()
2:16:55Flip the sense of our Occupied tests in MoveEntity()
2:17:26Step through MoveEntity()
🏃
2:17:26Step through MoveEntity()
🏃
2:17:26Step through MoveEntity()
🏃
2:20:19Fix MoveEntity() to reset Best.Moved each iteration
2:20:19Fix MoveEntity() to reset Best.Moved each iteration
2:20:19Fix MoveEntity() to reset Best.Moved each iteration
2:20:36Step through MoveEntity()
🏃
2:20:36Step through MoveEntity()
🏃
2:20:36Step through MoveEntity()
🏃
2:20:53The glove moves by whole voxel steps
🏃
2:20:53The glove moves by whole voxel steps
🏃
2:20:53The glove moves by whole voxel steps
🏃
2:21:13Make MoveEntity() use the result of the pathfinding loop in its final position settings
2:21:13Make MoveEntity() use the result of the pathfinding loop in its final position settings
2:21:13Make MoveEntity() use the result of the pathfinding loop in its final position settings
2:21:50Collision is getting there, but the glove can still penetrate the wall
🏃
2:21:50Collision is getting there, but the glove can still penetrate the wall
🏃
2:21:50Collision is getting there, but the glove can still penetrate the wall
🏃
2:22:25Q&A
🗩
2:22:25Q&A
🗩
2:22:25Q&A
🗩
2:22:43damnzl Hey dude! In love with the stream title, definitely stealing next time I play that game
🗪
2:22:43damnzl Hey dude! In love with the stream title, definitely stealing next time I play that game
🗪
2:22:43damnzl Hey dude! In love with the stream title, definitely stealing next time I play that game
🗪
2:23:22x13pixels Q: My apologies for the stepping issue you were seeing. I'll take a look and see wtf is going on!
🗪
2:23:22x13pixels Q: My apologies for the stepping issue you were seeing. I'll take a look and see wtf is going on!
🗪
2:23:22x13pixels Q: My apologies for the stepping issue you were seeing. I'll take a look and see wtf is going on!
🗪
2:24:02mindmark42 Q: Can you explain how that .125 thing works?
🗪
2:24:02mindmark42 Q: Can you explain how that .125 thing works?
🗪
2:24:02mindmark42 Q: Can you explain how that .125 thing works?
🗪
2:28:19Recommend 'What Every Computer Scientist Should Know About Floating-Point Arithmetic'4
📖
2:28:19Recommend 'What Every Computer Scientist Should Know About Floating-Point Arithmetic'4
📖
2:28:19Recommend 'What Every Computer Scientist Should Know About Floating-Point Arithmetic'4
📖
2:29:32b1dd1e Check out random ASCII (Bruce Dawson) blog posts on floating point5
🗪
2:29:32b1dd1e Check out random ASCII (Bruce Dawson) blog posts on floating point5
🗪
2:29:32b1dd1e Check out random ASCII (Bruce Dawson) blog posts on floating point5
🗪
2:29:45stelios_tv handmade_hero The Floating-Point Guide6
🗪
2:29:45stelios_tv handmade_hero The Floating-Point Guide6
🗪
2:29:45stelios_tv handmade_hero The Floating-Point Guide6
🗪
2:29:57mikeryp But how much of a difference can this minute computation really make in real time?
🗪
2:29:57mikeryp But how much of a difference can this minute computation really make in real time?
🗪
2:29:57mikeryp But how much of a difference can this minute computation really make in real time?
🗪
2:30:54Temporarily set MOTION_DISPLACEMENT_SIZE to 0.1 in MoveEntity()
2:30:54Temporarily set MOTION_DISPLACEMENT_SIZE to 0.1 in MoveEntity()
2:30:54Temporarily set MOTION_DISPLACEMENT_SIZE to 0.1 in MoveEntity()
2:31:26Inspect the ToP
🏃
2:31:26Inspect the ToP
🏃
2:31:26Inspect the ToP
🏃
2:32:01Revert MOTION_DISPLACEMENT_SIZE to 0.125 in MoveEntity()
2:32:01Revert MOTION_DISPLACEMENT_SIZE to 0.125 in MoveEntity()
2:32:01Revert MOTION_DISPLACEMENT_SIZE to 0.125 in MoveEntity()
2:32:40This was a bad example
🏃
2:32:40This was a bad example
🏃
2:32:40This was a bad example
🏃
2:32:56Temporarily set MOTION_DISPLACEMENT_SIZE to 0.1 in MoveEntity()
2:32:56Temporarily set MOTION_DISPLACEMENT_SIZE to 0.1 in MoveEntity()
2:32:56Temporarily set MOTION_DISPLACEMENT_SIZE to 0.1 in MoveEntity()
2:33:10Inspect the values resulting from a MOTION_DISPLACEMENT_SIZE of 0.1
🏃
2:33:10Inspect the values resulting from a MOTION_DISPLACEMENT_SIZE of 0.1
🏃
2:33:10Inspect the values resulting from a MOTION_DISPLACEMENT_SIZE of 0.1
🏃
2:33:25Revert MOTION_DISPLACEMENT_SIZE to 0.125 in MoveEntity()
2:33:25Revert MOTION_DISPLACEMENT_SIZE to 0.125 in MoveEntity()
2:33:25Revert MOTION_DISPLACEMENT_SIZE to 0.125 in MoveEntity()
2:33:39Inspect the values resulting from a MOTION_DISPLACEMENT_SIZE of 0.125
🏃
2:33:39Inspect the values resulting from a MOTION_DISPLACEMENT_SIZE of 0.125
🏃
2:33:39Inspect the values resulting from a MOTION_DISPLACEMENT_SIZE of 0.125
🏃
2:34:22hollowjazz35 How long have you been working on this project?
🗪
2:34:22hollowjazz35 How long have you been working on this project?
🗪
2:34:22hollowjazz35 How long have you been working on this project?
🗪
2:36:03newtothis11 You look like a render
🗪
2:36:03newtothis11 You look like a render
🗪
2:36:03newtothis11 You look like a render
🗪
2:36:19internationalizationist We need more codelesthenics, Casey, and you need it as well
🗪
2:36:19internationalizationist We need more codelesthenics, Casey, and you need it as well
🗪
2:36:19internationalizationist We need more codelesthenics, Casey, and you need it as well
🗪
2:37:29ezioauditorerevs Q: How does your fancy transparent whiteboard work? Did you learn to write backwards, or is it all just mirrored?
🗪
2:37:29ezioauditorerevs Q: How does your fancy transparent whiteboard work? Did you learn to write backwards, or is it all just mirrored?
🗪
2:37:29ezioauditorerevs Q: How does your fancy transparent whiteboard work? Did you learn to write backwards, or is it all just mirrored?
🗪
2:37:44bulmanator I don't understand why we can't show birthdays on the user profile page
🗪
2:37:44bulmanator I don't understand why we can't show birthdays on the user profile page
🗪
2:37:44bulmanator I don't understand why we can't show birthdays on the user profile page
🗪
2:38:00ezioauditorerevs "et-zio" "ow-dit-or-A"
🗪
2:38:00ezioauditorerevs "et-zio" "ow-dit-or-A"
🗪
2:38:00ezioauditorerevs "et-zio" "ow-dit-or-A"
🗪
2:38:17buljanoff Everyone needs to say the word dynamically at least once
🗪
2:38:17buljanoff Everyone needs to say the word dynamically at least once
🗪
2:38:17buljanoff Everyone needs to say the word dynamically at least once
🗪
2:39:00ezioauditorerevs Q: Ezio Auditore is the main character from Assassin's Creed 2
🗪
2:39:00ezioauditorerevs Q: Ezio Auditore is the main character from Assassin's Creed 2
🗪
2:39:00ezioauditorerevs Q: Ezio Auditore is the main character from Assassin's Creed 2
🗪
2:39:17Reflect on the collision routine
🗩
2:39:17Reflect on the collision routine
🗩
2:39:17Reflect on the collision routine
🗩
2:39:35Thanks, everyone
🗩
2:39:35Thanks, everyone
🗩
2:39:35Thanks, everyone
🗩