Narrowing in on a Collision Scheme
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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
🗩
0:25Demo the current state of movement
🏃
0:25Demo the current state of movement
🏃
0:25Demo the current state of movement
🏃
1:00Simple and stable collision detection and resolution
🗩
1:00Simple and stable collision detection and resolution
🗩
1:00Simple and stable collision detection and resolution
🗩
2:14Re-enable the MoveEntityLocally() loop in MoveEntity()
2:14Re-enable the MoveEntityLocally() loop in MoveEntity()
2:14Re-enable the MoveEntityLocally() loop in MoveEntity()
2:23We lack collision
🏃
2:23We lack collision
🏃
2:23We lack collision
🏃
2:37Double-check MoveEntity()
📖
2:37Double-check MoveEntity()
📖
2:37Double-check MoveEntity()
📖
3:07Our glove penetrates the wall
🏃
3:07Our glove penetrates the wall
🏃
3:07Our glove penetrates the wall
🏃
3:17Make MoveEntityLocally() draw occupation state
3:17Make MoveEntityLocally() draw occupation state
3:17Make MoveEntityLocally() draw occupation state
3:29We detect collision but then tunnel through the familiar
🏃
3:29We detect collision but then tunnel through the familiar
🏃
3:29We detect collision but then tunnel through the familiar
🏃
3:41Double-check MoveEntityLocally()
📖
3:41Double-check MoveEntityLocally()
📖
3:41Double-check MoveEntityLocally()
📖
4:55Increase the StepCount from 5 to 10 in MoveEntity()
4:55Increase the StepCount from 5 to 10 in MoveEntity()
4:55Increase the StepCount from 5 to 10 in MoveEntity()
5:03We clearly see collision detection in red
🏃
5:03We clearly see collision detection in red
🏃
5:03We clearly see collision detection in red
🏃
5:21Reacquaint ourselves with MoveEntityLocally() and MoveEntity()
📖
5:21Reacquaint ourselves with MoveEntityLocally() and MoveEntity()
📖
5:21Reacquaint ourselves with MoveEntityLocally() and MoveEntity()
📖
8:29The utility of stating a universally minimum thickness, as MOTION_DISPLACEMENT_SIZE
🗩
8:29The utility of stating a universally minimum thickness, as MOTION_DISPLACEMENT_SIZE
🗩
8:29The utility of stating a universally minimum thickness, as MOTION_DISPLACEMENT_SIZE
🗩
10:39Reacquaint ourselves with MoveEntityLocally() and MoveEntity() (cont.)
📖
10:39Reacquaint ourselves with MoveEntityLocally() and MoveEntity() (cont.)
📖
10:39Reacquaint ourselves with MoveEntityLocally() and MoveEntity() (cont.)
📖
11:52Prevent MoveEntity() from capping the StepCount
11:52Prevent MoveEntity() from capping the StepCount
11:52Prevent MoveEntity() from capping the StepCount
12:02We still detect collisions, but tunnel
🏃
12:02We still detect collisions, but tunnel
🏃
12:02We still detect collisions, but tunnel
🏃
12:14Scour MoveEntityLocally() for bugs
📖
12:14Scour MoveEntityLocally() for bugs
📖
12:14Scour MoveEntityLocally() for bugs
📖
16:19Delete VoxelI from MoveEntityLocally()
16:19Delete VoxelI from MoveEntityLocally()
16:19Delete VoxelI from MoveEntityLocally()
16:34Scour MoveEntityLocally() for bugs (cont.)
📖
16:34Scour MoveEntityLocally() for bugs (cont.)
📖
16:34Scour MoveEntityLocally() for bugs (cont.)
📖
16:43Disable the BestP computation loop in MoveEntityLocally()
16:43Disable the BestP computation loop in MoveEntityLocally()
16:43Disable the BestP computation loop in MoveEntityLocally()
16:58Entities can erroneously move
🏃
16:58Entities can erroneously move
🏃
16:58Entities can erroneously move
🏃
17:26Scour MoveEntity() for bugs
📖
17:26Scour MoveEntity() for bugs
📖
17:26Scour MoveEntity() for bugs
📖
18:08Prevent MoveEntity() from modifying Entity->P
18:08Prevent MoveEntity() from modifying Entity->P
18:08Prevent MoveEntity() from modifying Entity->P
18:28Entities can no longer move, as desired
🏃
18:28Entities can no longer move, as desired
🏃
18:28Entities can no longer move, as desired
🏃
18:34Re-enable the BestP computation loop in MoveEntityLocally()
18:34Re-enable the BestP computation loop in MoveEntityLocally()
18:34Re-enable the BestP computation loop in MoveEntityLocally()
18:45Entities now collide, but can get embedded
🏃
18:45Entities now collide, but can get embedded
🏃
18:45Entities now collide, but can get embedded
🏃
20:16Conceptualising the voxelised collision search, to prevent / recover from embedding
📖
20:16Conceptualising the voxelised collision search, to prevent / recover from embedding
📖
20:16Conceptualising the voxelised collision search, to prevent / recover from embedding
📖
28:06Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
28:06Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
28:06Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
31:15Non-embedded entities collide nicely
🏃
31:15Non-embedded entities collide nicely
🏃
31:15Non-embedded entities collide nicely
🏃
33:32A familiar has got stuck underground
🏃
33:32A familiar has got stuck underground
🏃
33:32A familiar has got stuck underground
🏃
34:02Consider pathfinding our collision through a stack of voxels
📖
34:02Consider pathfinding our collision through a stack of voxels
📖
34:02Consider pathfinding our collision through a stack of voxels
📖
37:22Enable MoveEntityLocally() to detect and resolve embedding
37:22Enable MoveEntityLocally() to detect and resolve embedding
37:22Enable MoveEntityLocally() to detect and resolve embedding
39:05Our initially embedded glove may now move, but can tunnel
🏃
39:05Our initially embedded glove may now move, but can tunnel
🏃
39:05Our initially embedded glove may now move, but can tunnel
🏃
39:44Investigate our tunneling issue
📖
39:44Investigate our tunneling issue
📖
39:44Investigate our tunneling issue
📖
40:47Make MoveEntityLocally() test the occupation state of all eight surrounding voxels
40:47Make MoveEntityLocally() test the occupation state of all eight surrounding voxels
40:47Make MoveEntityLocally() test the occupation state of all eight surrounding voxels
40:58We still tunnel
🏃
40:58We still tunnel
🏃
40:58We still tunnel
🏃
41:05Consider drawing more collision information
📖
41:05Consider drawing more collision information
📖
41:05Consider drawing more collision information
📖
42:24Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
42:24Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
42:24Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
42:46Consider drawing more collision information (cont.)
📖
42:46Consider drawing more collision information (cont.)
📖
42:46Consider drawing more collision information (cont.)
📖
44:15Take a closer look at our glove vs familiar collision
🏃
44:15Take a closer look at our glove vs familiar collision
🏃
44:15Take a closer look at our glove vs familiar collision
🏃
44:57Wonder why it fails our AnyOpen check
📖
44:57Wonder why it fails our AnyOpen check
📖
44:57Wonder why it fails our AnyOpen check
📖
45:45Make MoveEntityLocally() test the occupation state of all eight surrounding voxels
45:45Make MoveEntityLocally() test the occupation state of all eight surrounding voxels
45:45Make MoveEntityLocally() test the occupation state of all eight surrounding voxels
46:02We still tunnel
🏃
46:02We still tunnel
🏃
46:02We still tunnel
🏃
46:15Prevent MoveEntityLocally() from using the target position if embedded
46:15Prevent MoveEntityLocally() from using the target position if embedded
46:15Prevent MoveEntityLocally() from using the target position if embedded
46:25We can't test tunneling
🏃
46:25We can't test tunneling
🏃
46:25We can't test tunneling
🏃
46:32Make AddPlayer() elevate the glove
46:32Make AddPlayer() elevate the glove
46:32Make AddPlayer() elevate the glove
47:14We can test it, and no longer tunnel
🏃
47:14We can test it, and no longer tunnel
🏃
47:14We can test it, and no longer tunnel
🏃
49:29Let MoveEntityLocally() use the target position if embedded
49:29Let MoveEntityLocally() use the target position if embedded
49:29Let MoveEntityLocally() use the target position if embedded
49:43We tunnel trivially
🏃
49:43We tunnel trivially
🏃
49:43We tunnel trivially
🏃
49:55Make MoveEntityLocally() set AnyOpen using an OccupiedCount
49:55Make MoveEntityLocally() set AnyOpen using an OccupiedCount
49:55Make MoveEntityLocally() set AnyOpen using an OccupiedCount
51:35We still tunnel
🏃
51:35We still tunnel
🏃
51:35We still tunnel
🏃
51:50Wonder how MoveEntityLocally() detects embedding so often
📖
51:50Wonder how MoveEntityLocally() detects embedding so often
📖
51:50Wonder how MoveEntityLocally() detects embedding so often
📖
53:04Increase the ApronSize to the full MOTION_DISPLACEMENT_SIZE in MoveEntityLocally()
53:04Increase the ApronSize to the full MOTION_DISPLACEMENT_SIZE in MoveEntityLocally()
53:04Increase the ApronSize to the full MOTION_DISPLACEMENT_SIZE in MoveEntityLocally()
53:11We still tunnel, but less easily
🏃
53:11We still tunnel, but less easily
🏃
53:11We still tunnel, but less easily
🏃
54:20How are two frames disagreeing on which collision volumes are occupied?
📖
54:20How are two frames disagreeing on which collision volumes are occupied?
📖
54:20How are two frames disagreeing on which collision volumes are occupied?
📖
56:41Make MoveEntity() only allow one micro-move, i.e. one call to MoveEntityLocally()
56:41Make MoveEntity() only allow one micro-move, i.e. one call to MoveEntityLocally()
56:41Make MoveEntity() only allow one micro-move, i.e. one call to MoveEntityLocally()
57:11We still tunnel
🏃
57:11We still tunnel
🏃
57:11We still tunnel
🏃
57:58Delete VolumeDim and VolumeP from MoveEntityLocally()
57:58Delete VolumeDim and VolumeP from MoveEntityLocally()
57:58Delete VolumeDim and VolumeP from MoveEntityLocally()
58:08Consider drawing more collision information
📖
58:08Consider drawing more collision information
📖
58:08Consider drawing more collision information
📖
1:01:20Should we start visualisation now?
🗩
1:01:20Should we start visualisation now?
🗩
1:01:20Should we start visualisation now?
🗩
1:01:45suspect__zero The game looks like it lags hard when the punch flies around. Is that because of the debugging tools being active?
🗪
1:01:45suspect__zero The game looks like it lags hard when the punch flies around. Is that because of the debugging tools being active?
🗪
1:01:45suspect__zero The game looks like it lags hard when the punch flies around. Is that because of the debugging tools being active?
🗪
1:04:55Compile in -Od
1:04:55Compile in -Od
1:04:55Compile in -Od
1:05:16Show off the performance in -Od
🏃
1:05:16Show off the performance in -Od
🏃
1:05:16Show off the performance in -Od
🏃
1:05:32Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_lighting.cpp
1:05:32Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_lighting.cpp
1:05:32Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_lighting.cpp
1:07:28ComputeLightPropagationWork() takes 78% of our frame time
🏃
1:07:28ComputeLightPropagationWork() takes 78% of our frame time
🏃
1:07:28ComputeLightPropagationWork() takes 78% of our frame time
🏃
1:07:52Toggle off MoveEntity()
1:07:52Toggle off MoveEntity()
1:07:52Toggle off MoveEntity()
1:08:25Gauge our performance in -Od
🏃
1:08:25Gauge our performance in -Od
🏃
1:08:25Gauge our performance in -Od
🏃
1:09:03Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_light_atlas.cpp
1:09:03Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_light_atlas.cpp
1:09:03Use #pragma optimize("gt", on) and #pragma optimize("", on) around handmade_light_atlas.cpp
1:10:23Gauge our performance in -Od
🏃
1:10:23Gauge our performance in -Od
🏃
1:10:23Gauge our performance in -Od
🏃
1:10:45Remove the #prama optimize() and re-enable MoveEntity()
1:10:45Remove the #prama optimize() and re-enable MoveEntity()
1:10:45Remove the #prama optimize() and re-enable MoveEntity()
1:11:52Step through MoveEntityLocally()
🏃
1:11:52Step through MoveEntityLocally()
🏃
1:11:52Step through MoveEntityLocally()
🏃
1:12:48Initialise a TestP in MoveEntityLocally()
1:12:48Initialise a TestP in MoveEntityLocally()
1:12:48Initialise a TestP in MoveEntityLocally()
1:13:29Step through MoveEntityLocally() watching the TestP and other values
🏃
1:13:29Step through MoveEntityLocally() watching the TestP and other values
🏃
1:13:29Step through MoveEntityLocally() watching the TestP and other values
🏃
1:15:24Set a break point in the !AnyOpen path
🏃
1:15:24Set a break point in the !AnyOpen path
🏃
1:15:24Set a break point in the !AnyOpen path
🏃
1:16:47Tunnel through, without hitting that break point
🏃
1:16:47Tunnel through, without hitting that break point
🏃
1:16:47Tunnel through, without hitting that break point
🏃
1:18:18Compile in -O2
1:18:18Compile in -O2
1:18:18Compile in -O2
1:18:27bearexplicit It pushed the skeleton up over the glove?
🗪
1:18:27bearexplicit It pushed the skeleton up over the glove?
🗪
1:18:27bearexplicit It pushed the skeleton up over the glove?
🗪
1:18:36The glove is not tunneling, but passing beneath the familiar
🏃
1:18:36The glove is not tunneling, but passing beneath the familiar
🏃
1:18:36The glove is not tunneling, but passing beneath the familiar
🏃
1:21:09Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
1:21:09Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
1:21:09Make MoveEntityLocally() test the occupation state of only the one voxel en route to the target
1:21:27Our glove and familiar are stuck
🏃
1:21:27Our glove and familiar are stuck
🏃
1:21:27Our glove and familiar are stuck
🏃
1:22:16Enable MoveEntityLocally() to clip away the voxel search directions behind our direction of motion
1:22:16Enable MoveEntityLocally() to clip away the voxel search directions behind our direction of motion
1:22:16Enable MoveEntityLocally() to clip away the voxel search directions behind our direction of motion
1:26:48Our glove may be blocked from moving upwards, but may perhaps move sideways
🏃
1:26:48Our glove may be blocked from moving upwards, but may perhaps move sideways
🏃
1:26:48Our glove may be blocked from moving upwards, but may perhaps move sideways
🏃
1:27:11Consider clipping the collision box
📖
1:27:11Consider clipping the collision box
📖
1:27:11Consider clipping the collision box
📖
1:31:35Start to make MoveEntityLocally() clip the collision box
1:31:35Start to make MoveEntityLocally() clip the collision box
1:31:35Start to make MoveEntityLocally() clip the collision box
1:35:52Consider making MoveEntityLocally() permit movement within the voxel interior
📖
1:35:52Consider making MoveEntityLocally() permit movement within the voxel interior
📖
1:35:52Consider making MoveEntityLocally() permit movement within the voxel interior
📖
1:36:46Enable MoveEntityLocally() to (dis)allow movement on a direction-by-direction basis
1:36:46Enable MoveEntityLocally() to (dis)allow movement on a direction-by-direction basis
1:36:46Enable MoveEntityLocally() to (dis)allow movement on a direction-by-direction basis
1:43:23Our glove and familiar get unstuck
🏃
1:43:23Our glove and familiar get unstuck
🏃
1:43:23Our glove and familiar get unstuck
🏃
1:43:39Make a note to pathfind through the voxel
1:43:39Make a note to pathfind through the voxel
1:43:39Make a note to pathfind through the voxel
1:44:09macielda Q: The second if has a problem: it should be Dir.y not Dir.z
🗪
1:44:09macielda Q: The second if has a problem: it should be Dir.y not Dir.z
🗪
1:44:09macielda Q: The second if has a problem: it should be Dir.y not Dir.z
🗪
1:44:27Our movement is slow
🏃
1:44:27Our movement is slow
🏃
1:44:27Our movement is slow
🏃
1:44:52Let MoveEntity() allow all micro-moves, i.e. multiple calls to MoveEntityLocally()
1:44:52Let MoveEntity() allow all micro-moves, i.e. multiple calls to MoveEntityLocally()
1:44:52Let MoveEntity() allow all micro-moves, i.e. multiple calls to MoveEntityLocally()
1:45:00Our movement is normal
🏃
1:45:00Our movement is normal
🏃
1:45:00Our movement is normal
🏃
1:45:44That's it for today
🗩
1:45:44That's it for today
🗩
1:45:44That's it for today
🗩
1:46:16Q&A
🗩
1:46:16Q&A
🗩
1:46:16Q&A
🗩
1:47:08mindmark42 Q: Can you explain this direction check a bit more?
🗪
1:47:08mindmark42 Q: Can you explain this direction check a bit more?
🗪
1:47:08mindmark42 Q: Can you explain this direction check a bit more?
🗪
1:48:33ommos61 Q: Have you forgotten to upload Day 632 to YouTube?
🗪
1:48:33ommos61 Q: Have you forgotten to upload Day 632 to YouTube?
🗪
1:48:33ommos61 Q: Have you forgotten to upload Day 632 to YouTube?
🗪
1:49:06mindmark42 Q: So it can't move backwards?
🗪
1:49:06mindmark42 Q: So it can't move backwards?
🗪
1:49:06mindmark42 Q: So it can't move backwards?
🗪
1:50:07gheoan After discovering the glove was moving under the skull you are now trying to prevent that?
🗪
1:50:07gheoan After discovering the glove was moving under the skull you are now trying to prevent that?
🗪
1:50:07gheoan After discovering the glove was moving under the skull you are now trying to prevent that?
🗪
1:50:19sagian2005 Q: If you're trapped and have the vector in, why can't you just follow the vector back out?
🗪
1:50:19sagian2005 Q: If you're trapped and have the vector in, why can't you just follow the vector back out?
🗪
1:50:19sagian2005 Q: If you're trapped and have the vector in, why can't you just follow the vector back out?
🗪
1:51:57thesandvichmaker Q: (Semi off-topic) With the live code reloading, I made a thing where global variables in the dll can be saved and restored when you reload the dll. Have you tried that before? I thought it's kind of neat
🗪
1:51:57thesandvichmaker Q: (Semi off-topic) With the live code reloading, I made a thing where global variables in the dll can be saved and restored when you reload the dll. Have you tried that before? I thought it's kind of neat
🗪
1:51:57thesandvichmaker Q: (Semi off-topic) With the live code reloading, I made a thing where global variables in the dll can be saved and restored when you reload the dll. Have you tried that before? I thought it's kind of neat
🗪
1:53:16Wrap it on up
🗩
1:53:16Wrap it on up
🗩
1:53:16Wrap it on up
🗩