Handling Glove Collisions
?
?

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 doing glove collision
🗩
0:00Recap and set the stage for the day doing glove collision
🗩
0:00Recap and set the stage for the day doing glove collision
🗩
0:11Demo the glove's chaining move patterns
🏃
0:11Demo the glove's chaining move patterns
🏃
0:11Demo the glove's chaining move patterns
🏃
1:23Determine to handle glove collision, on overlapping hit boxes
🏃
1:23Determine to handle glove collision, on overlapping hit boxes
🏃
1:23Determine to handle glove collision, on overlapping hit boxes
🏃
6:07Define a strike as Street Fighter-esque overlapping hit boxes
📖
6:07Define a strike as Street Fighter-esque overlapping hit boxes
📖
6:07Define a strike as Street Fighter-esque overlapping hit boxes
📖
6:51RayIntersectsBox() is for debug purposes
📖
6:51RayIntersectsBox() is for debug purposes
📖
6:51RayIntersectsBox() is for debug purposes
📖
7:32Prepare to handle glove collision, considering switching to a grid
📖
7:32Prepare to handle glove collision, considering switching to a grid
📖
7:32Prepare to handle glove collision, considering switching to a grid
📖
9:52Set up UpdateAndRenderEntities() to process projectile collisions in a post-pass loop
9:52Set up UpdateAndRenderEntities() to process projectile collisions in a post-pass loop
9:52Set up UpdateAndRenderEntities() to process projectile collisions in a post-pass loop
13:35richardycg That entity_iterator would look lovely with the new C++ for-loop syntax
🗪
13:35richardycg That entity_iterator would look lovely with the new C++ for-loop syntax
🗪
13:35richardycg That entity_iterator would look lovely with the new C++ for-loop syntax
🗪
13:57richardycg lol, no, but it's the one thing they fixed
🗪
13:57richardycg lol, no, but it's the one thing they fixed
🗪
13:57richardycg lol, no, but it's the one thing they fixed
🗪
15:26richardycg for (entity *Projectile : IterateAllEntities(SimRegion)) { /**/ }
🗪
15:26richardycg for (entity *Projectile : IterateAllEntities(SimRegion)) { /**/ }
🗪
15:26richardycg for (entity *Projectile : IterateAllEntities(SimRegion)) { /**/ }
🗪
15:56Add EntityFlag_Collider to entity_flags
15:56Add EntityFlag_Collider to entity_flags
15:56Add EntityFlag_Collider to entity_flags
16:29genughaben By the way, what is your opinion of Rust?
🗪
16:29genughaben By the way, what is your opinion of Rust?
🗪
16:29genughaben By the way, what is your opinion of Rust?
🗪
16:32Set up UpdateAndRenderEntities() to work on EntityFlag_Collider in its post-pass collision loop
16:32Set up UpdateAndRenderEntities() to work on EntityFlag_Collider in its post-pass collision loop
16:32Set up UpdateAndRenderEntities() to work on EntityFlag_Collider in its post-pass collision loop
16:46Further thoughts on modern languages
💢
🗩
16:46Further thoughts on modern languages
💢
🗩
16:46Further thoughts on modern languages
💢
🗩
17:26Set up UpdateAndRenderEntities() to check if a projectile collides
17:26Set up UpdateAndRenderEntities() to check if a projectile collides
17:26Set up UpdateAndRenderEntities() to check if a projectile collides
18:32Try out conversation box checking
🏃
18:32Try out conversation box checking
🏃
18:32Try out conversation box checking
🏃
19:05Consider handling projectile collision like conversation boxes
📖
19:05Consider handling projectile collision like conversation boxes
📖
19:05Consider handling projectile collision like conversation boxes
📖
20:00bryantdrewjones What’s the obviously good for-loop syntax?
🗪
20:00bryantdrewjones What’s the obviously good for-loop syntax?
🗪
20:00bryantdrewjones What’s the obviously good for-loop syntax?
🗪
22:39yuika_lamonting Jai has: for array {action}
🗪
22:39yuika_lamonting Jai has: for array {action}
🗪
22:39yuika_lamonting Jai has: for array {action}
🗪
23:15Make UpdateAndRenderEntities() check if a projectile collides
23:15Make UpdateAndRenderEntities() check if a projectile collides
23:15Make UpdateAndRenderEntities() check if a projectile collides
24:09Consider single-hit application schemes: invincibility frames, projectile disabling
📖
24:09Consider single-hit application schemes: invincibility frames, projectile disabling
📖
24:09Consider single-hit application schemes: invincibility frames, projectile disabling
📖
28:37Toggle to the 1-step attack pattern in ExecuteBrainHero()
28:37Toggle to the 1-step attack pattern in ExecuteBrainHero()
28:37Toggle to the 1-step attack pattern in ExecuteBrainHero()
29:12Try our simple punch
🏃
29:12Try our simple punch
🏃
29:12Try our simple punch
🏃
29:15Toggle off the attack pattern drawing in ExecuteBrainHero()
29:15Toggle off the attack pattern drawing in ExecuteBrainHero()
29:15Toggle off the attack pattern drawing in ExecuteBrainHero()
29:40Desire to repeatedly punch the same enemy
🏃
29:40Desire to repeatedly punch the same enemy
🏃
29:40Desire to repeatedly punch the same enemy
🏃
30:16Consider using a global attack sequence number to makes attacks only hit once
📖
30:16Consider using a global attack sequence number to makes attacks only hit once
📖
30:16Consider using a global attack sequence number to makes attacks only hit once
📖
31:58annonymus Wouldn't that mean a slow projectile could be invalidated by a later fast projectile?
🗪
31:58annonymus Wouldn't that mean a slow projectile could be invalidated by a later fast projectile?
🗪
31:58annonymus Wouldn't that mean a slow projectile could be invalidated by a later fast projectile?
🗪
32:44Consider making hit boxes activated on only one frame
📖
32:44Consider making hit boxes activated on only one frame
📖
32:44Consider making hit boxes activated on only one frame
📖
33:46Spawn multiple heroes
🏃
33:46Spawn multiple heroes
🏃
33:46Spawn multiple heroes
🏃
34:55Consider tracking a list of previously overlapping entities
📖
34:55Consider tracking a list of previously overlapping entities
📖
34:55Consider tracking a list of previously overlapping entities
📖
39:28Introduce an entity_collider_group for entity to contain
39:28Introduce an entity_collider_group for entity to contain
39:28Introduce an entity_collider_group for entity to contain
40:28Make UpdateAndRenderEntities() compare an Old and New entity_collider_group to detect projectile collisions
40:28Make UpdateAndRenderEntities() compare an Old and New entity_collider_group to detect projectile collisions
40:28Make UpdateAndRenderEntities() compare an Old and New entity_collider_group to detect projectile collisions
46:39hmendoza2001 Not from San Francisco, but from Ohio
🗪
46:39hmendoza2001 Not from San Francisco, but from Ohio
🗪
46:39hmendoza2001 Not from San Francisco, but from Ohio
🗪
47:09hellminmunster Hey handmade_hero! I've just started going through this series on YouTube, currently on Day 004. So, now that you are 600+ episodes into the series is there anything you want to tell someone just starting?
🗪
47:09hellminmunster Hey handmade_hero! I've just started going through this series on YouTube, currently on Day 004. So, now that you are 600+ episodes into the series is there anything you want to tell someone just starting?
🗪
47:09hellminmunster Hey handmade_hero! I've just started going through this series on YouTube, currently on Day 004. So, now that you are 600+ episodes into the series is there anything you want to tell someone just starting?
🗪
51:49Make UpdateAndRenderEntities() finally update LastFrameColliders to the NewGroup
51:49Make UpdateAndRenderEntities() finally update LastFrameColliders to the NewGroup
51:49Make UpdateAndRenderEntities() finally update LastFrameColliders to the NewGroup
52:04Describe the projectile collision detection loop, considering exit events
📖
52:04Describe the projectile collision detection loop, considering exit events
📖
52:04Describe the projectile collision detection loop, considering exit events
📖
53:49Describe a SIMD version of the projectile collision detection loop
📖
53:49Describe a SIMD version of the projectile collision detection loop
📖
53:49Describe a SIMD version of the projectile collision detection loop
📖
58:17Remove unused entity_flags, and split EntityFlag_Collider into EntityFlag_AppliesCollision and EntityFlag_ReceivesCollision
58:17Remove unused entity_flags, and split EntityFlag_Collider into EntityFlag_AppliesCollision and EntityFlag_ReceivesCollision
58:17Remove unused entity_flags, and split EntityFlag_Collider into EntityFlag_AppliesCollision and EntityFlag_ReceivesCollision
1:01:57Remove pairwise_collision_rule
1:01:57Remove pairwise_collision_rule
1:01:57Remove pairwise_collision_rule
1:03:47sagian2005 So we can't punch trees…
🗪
1:03:47sagian2005 So we can't punch trees…
🗪
1:03:47sagian2005 So we can't punch trees…
🗪
1:04:38Remove particle_cel and particle, and CanCollide()
1:04:38Remove particle_cel and particle, and CanCollide()
1:04:38Remove particle_cel and particle, and CanCollide()
1:05:09Introduce CollisionResolve()
1:05:09Introduce CollisionResolve()
1:05:09Introduce CollisionResolve()
1:07:02The snakes have hit points
🏃
1:07:02The snakes have hit points
🏃
1:07:02The snakes have hit points
🏃
1:07:56Rename HIT_POINT_SUB_COUNT to HIT_POINT_SUBDIVISIONS
1:07:56Rename HIT_POINT_SUB_COUNT to HIT_POINT_SUBDIVISIONS
1:07:56Rename HIT_POINT_SUB_COUNT to HIT_POINT_SUBDIVISIONS
1:09:02sagian2005 …but Casey can't download Minecraft because the biggest software company in the world wouldn't let him buy the most popular game in the world
🗪
1:09:02sagian2005 …but Casey can't download Minecraft because the biggest software company in the world wouldn't let him buy the most popular game in the world
🗪
1:09:02sagian2005 …but Casey can't download Minecraft because the biggest software company in the world wouldn't let him buy the most popular game in the world
🗪
1:10:49Implement CollisionResolve(), introducing ApplyDamage()
1:10:49Implement CollisionResolve(), introducing ApplyDamage()
1:10:49Implement CollisionResolve(), introducing ApplyDamage()
1:18:22Make AddPlayer() set EntityFlag_AppliesCollision and SnakePattern set EntityFlag_ReceivesCollision
1:18:22Make AddPlayer() set EntityFlag_AppliesCollision and SnakePattern set EntityFlag_ReceivesCollision
1:18:22Make AddPlayer() set EntityFlag_AppliesCollision and SnakePattern set EntityFlag_ReceivesCollision
1:19:45Punching a snake does no damage
🏃
1:19:45Punching a snake does no damage
🏃
1:19:45Punching a snake does no damage
🏃
1:20:38Fail to break on ApplyDamage()
🏃
1:20:38Fail to break on ApplyDamage()
🏃
1:20:38Fail to break on ApplyDamage()
🏃
1:21:10Break in to the projectile collision detection loop in UpdateAndRenderEntities()
🏃
1:21:10Break in to the projectile collision detection loop in UpdateAndRenderEntities()
🏃
1:21:10Break in to the projectile collision detection loop in UpdateAndRenderEntities()
🏃
1:21:38Toggle on collision volume drawing in UpdateAndRenderEntities()
1:21:38Toggle on collision volume drawing in UpdateAndRenderEntities()
1:21:38Toggle on collision volume drawing in UpdateAndRenderEntities()
1:21:58The glove obviously collides with the snake
🏃
1:21:58The glove obviously collides with the snake
🏃
1:21:58The glove obviously collides with the snake
🏃
1:22:46Fix SnakePattern() to OR in EntityFlag_ReceivesCollision
1:22:46Fix SnakePattern() to OR in EntityFlag_ReceivesCollision
1:22:46Fix SnakePattern() to OR in EntityFlag_ReceivesCollision
1:23:37Reacquaint ourselves with EntityOverlapsEntity()
📖
1:23:37Reacquaint ourselves with EntityOverlapsEntity()
📖
1:23:37Reacquaint ourselves with EntityOverlapsEntity()
📖
1:24:46Separate out the ReceivesCollision and EntityOverlapsEntity() checks in UpdateAndRenderEntities()
1:24:46Separate out the ReceivesCollision and EntityOverlapsEntity() checks in UpdateAndRenderEntities()
1:24:46Separate out the ReceivesCollision and EntityOverlapsEntity() checks in UpdateAndRenderEntities()
1:26:42Try unsuccessfully to break in to the projectile collision detection loop in UpdateAndRenderEntities()
🏃
1:26:42Try unsuccessfully to break in to the projectile collision detection loop in UpdateAndRenderEntities()
🏃
1:26:42Try unsuccessfully to break in to the projectile collision detection loop in UpdateAndRenderEntities()
🏃
1:27:26Set EntityFlag_ReceivesCollision to 1 << 3
1:27:26Set EntityFlag_ReceivesCollision to 1 << 3
1:27:26Set EntityFlag_ReceivesCollision to 1 << 3
1:27:55Scour the projectile collision detection loop for bugs
📖
1:27:55Scour the projectile collision detection loop for bugs
📖
1:27:55Scour the projectile collision detection loop for bugs
📖
1:28:09Fix UpdateAndRenderEntities() to set Check to the CheckIter.Entity
1:28:09Fix UpdateAndRenderEntities() to set Check to the CheckIter.Entity
1:28:09Fix UpdateAndRenderEntities() to set Check to the CheckIter.Entity
1:28:21Restart the game into our empty room
🏃
1:28:21Restart the game into our empty room
🏃
1:28:21Restart the game into our empty room
🏃
1:28:25Make CreateOrphanage() generate a snake in the FloorEntranceRoom
1:28:25Make CreateOrphanage() generate a snake in the FloorEntranceRoom
1:28:25Make CreateOrphanage() generate a snake in the FloorEntranceRoom
1:30:43Try unsuccessfully to punch a snake
🏃
1:30:43Try unsuccessfully to punch a snake
🏃
1:30:43Try unsuccessfully to punch a snake
🏃
1:31:14Break in to the projectile collision detection loop
🏃
1:31:14Break in to the projectile collision detection loop
🏃
1:31:14Break in to the projectile collision detection loop
🏃
1:32:19Fix the loop increment direction in ApplyDamage()
1:32:19Fix the loop increment direction in ApplyDamage()
1:32:19Fix the loop increment direction in ApplyDamage()
1:32:44Try unsuccessfully to add a breakpoint on ApplyDamage()
🏃
1:32:44Try unsuccessfully to add a breakpoint on ApplyDamage()
🏃
1:32:44Try unsuccessfully to add a breakpoint on ApplyDamage()
🏃
1:33:05Break on CollisionResolve() and inspect the disassembly
🏃
1:33:05Break on CollisionResolve() and inspect the disassembly
🏃
1:33:05Break on CollisionResolve() and inspect the disassembly
🏃
1:33:36Scour ApplyDamage() for bugs
📖
1:33:36Scour ApplyDamage() for bugs
📖
1:33:36Scour ApplyDamage() for bugs
📖
1:34:37Break on CollisionResolve() in -Od, step through ApplyDamage(), and successfully damage the snake
🏃
1:34:37Break on CollisionResolve() in -Od, step through ApplyDamage(), and successfully damage the snake
🏃
1:34:37Break on CollisionResolve() in -Od, step through ApplyDamage(), and successfully damage the snake
🏃
1:36:46Rebuild in -O2 and successfully damage the snake
🏃
1:36:46Rebuild in -O2 and successfully damage the snake
🏃
1:36:46Rebuild in -O2 and successfully damage the snake
🏃
1:37:31Enable ApplyDamage() to call DeleteEntity() upon death and only apply damage to active entities, introducing IsActive()
1:37:31Enable ApplyDamage() to call DeleteEntity() upon death and only apply damage to active entities, introducing IsActive()
1:37:31Enable ApplyDamage() to call DeleteEntity() upon death and only apply damage to active entities, introducing IsActive()
1:40:17coffeeeeeeeeeee Are you going to implement critical hits?
🗪
1:40:17coffeeeeeeeeeee Are you going to implement critical hits?
🗪
1:40:17coffeeeeeeeeeee Are you going to implement critical hits?
🗪
1:41:23Successfully punch the snake to death
🏃
1:41:23Successfully punch the snake to death
🏃
1:41:23Successfully punch the snake to death
🏃
1:42:34Reacquaint ourselves with DeleteEntity()
📖
1:42:34Reacquaint ourselves with DeleteEntity()
📖
1:42:34Reacquaint ourselves with DeleteEntity()
📖
1:43:59Delete TestWall() and test_wall
1:43:59Delete TestWall() and test_wall
1:43:59Delete TestWall() and test_wall
1:44:24Reacquaint ourselves with TransactionalOccupy()
📖
1:44:24Reacquaint ourselves with TransactionalOccupy()
📖
1:44:24Reacquaint ourselves with TransactionalOccupy()
📖
1:45:42Make DeleteEntity() vacate the occupied tile, introducing Vacate()
1:45:42Make DeleteEntity() vacate the occupied tile, introducing Vacate()
1:45:42Make DeleteEntity() vacate the occupied tile, introducing Vacate()
1:48:58Punch snakes to death, and successfully walk where they were
🏃
1:48:58Punch snakes to death, and successfully walk where they were
🏃
1:48:58Punch snakes to death, and successfully walk where they were
🏃
1:51:54Remove BoxIndex_Down and BoxIndex_Up, and related stairwell code
1:51:54Remove BoxIndex_Down and BoxIndex_Up, and related stairwell code
1:51:54Remove BoxIndex_Down and BoxIndex_Up, and related stairwell code
1:55:07Hit the Room->GenerationIndex == GenerationIndex assertion in Layout()
🏃
1:55:07Hit the Room->GenerationIndex == GenerationIndex assertion in Layout()
🏃
1:55:07Hit the Room->GenerationIndex == GenerationIndex assertion in Layout()
🏃
1:55:44Decrease FloorCount from 4 to 1 in CreateDungeon()
1:55:44Decrease FloorCount from 4 to 1 in CreateDungeon()
1:55:44Decrease FloorCount from 4 to 1 in CreateDungeon()
1:55:50Still hit the Room->GenerationIndex == GenerationIndex assertion in Layout()
🏃
1:55:50Still hit the Room->GenerationIndex == GenerationIndex assertion in Layout()
🏃
1:55:50Still hit the Room->GenerationIndex == GenerationIndex assertion in Layout()
🏃
1:56:18Reacquaint ourselves with the Room->GenerationIndex == GenerationIndex assertion in Layout()
📖
1:56:18Reacquaint ourselves with the Room->GenerationIndex == GenerationIndex assertion in Layout()
📖
1:56:18Reacquaint ourselves with the Room->GenerationIndex == GenerationIndex assertion in Layout()
📖
1:57:28Comment out the Room->GenerationIndex == GenerationIndex assertion in Layout()
1:57:28Comment out the Room->GenerationIndex == GenerationIndex assertion in Layout()
1:57:28Comment out the Room->GenerationIndex == GenerationIndex assertion in Layout()
1:57:39Hit assertion on PlaceEntityAtP() in StandardLightingPattern()
🏃
1:57:39Hit assertion on PlaceEntityAtP() in StandardLightingPattern()
🏃
1:57:39Hit assertion on PlaceEntityAtP() in StandardLightingPattern()
🏃
1:57:51Consider making the procedural generation code more direct
📖
1:57:51Consider making the procedural generation code more direct
📖
1:57:51Consider making the procedural generation code more direct
📖
2:03:32Consider making the forest area not room-based
📖
2:03:32Consider making the forest area not room-based
📖
2:03:32Consider making the forest area not room-based
📖
2:05:32Plan to work on world generation next time
📖
2:05:32Plan to work on world generation next time
📖
2:05:32Plan to work on world generation next time
📖
2:08:49That's it for today
🗩
2:08:49That's it for today
🗩
2:08:49That's it for today
🗩