-
Notifications
You must be signed in to change notification settings - Fork 12
Proper fix for geron speed/screw collision #376
Copy link
Copy link
Open
Description
Ideally we don't extend the hitbox of gerons to prevent bonking
Fix idea 1: Add clipdata that you can only pass through with speed boost / shinespark (with no breaking animation/sound)
Fix idea 2: Add extra logic in the samus/sprite collision function, something like this:
+ cantScrew = gSamusData.pose == SPOSE_SCREW_ATTACKING && !(ProjectileGetSpriteWeakness(i) & WEAKNESS_SCREW_ATTACK);
- if (!SpriteUtilCheckSamusDamagingPose())
+ if (!SpriteUtilCheckSamusDamagingPose() || cantScrew)
{
if (SpriteUtilCheckSamusPseudoScrew(i))
{
gIgnoreSamusAndSpriteCollision = TRUE;
break;
}
if (collisionFlags & SPRITE_COLLISION_FLAG_ON_LEFT)
{
SpriteUtilCheckCollisionAtPosition(samusY, spriteLeft - gSamusData.drawDistanceRight + gSamusData.drawDistanceLeft);
if (gPreviousCollisionCheck == COLLISION_AIR)
gSamusData.xPosition = spriteLeft - gSamusData.drawDistanceRight;
}
else
{
SpriteUtilCheckCollisionAtPosition(samusY, spriteRight - gSamusData.drawDistanceLeft + gSamusData.drawDistanceRight);
if (gPreviousCollisionCheck == COLLISION_AIR)
gSamusData.xPosition = spriteRight - gSamusData.drawDistanceLeft;
}
+ if (cantScrew)
+ break;
if (gSamusData.invincibilityTimer == 0 && !SpriteUtilCheckSamusDamagingPose())
{
SpriteUtilTakeDamageFromSprite(TRUE, i, 1);
}
else
{
SpriteUtilCheckCollisionAtPosition(samusY + ONE_SUB_PIXEL + gSamusData.drawDistanceTop, samusX);
if (gPreviousCollisionCheck == COLLISION_AIR)
{
if (collisionFlags & SPRITE_COLLISION_FLAG_ON_LEFT)
gSamusData.direction = KEY_RIGHT;
else
gSamusData.direction = KEY_LEFT;
SpriteUtilTakeKnockback(i);
}
}
}
gIgnoreSamusAndSpriteCollision = TRUE;
break;Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels