Guard break, UFO instawhip

This commit is contained in:
AJ Martinez 2023-05-19 18:45:27 -07:00
parent 6f02923d89
commit 9aa4a459ce
7 changed files with 27 additions and 12 deletions

View file

@ -3950,9 +3950,9 @@ state_t states[NUMSTATES] =
{SPR_SLPT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_SLIPTIDEZIP
{SPR_IWHP, FF_FLOORSPRITE|FF_ANIMATE|0, -1, {NULL}, 6, 2, S_NULL}, // S_INSTAWHIP
{SPR_GRNG, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING
{SPR_GBDY, FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
{SPR_IWHP, FF_FULLBRIGHT|FF_FLOORSPRITE|FF_ANIMATE|0, -1, {NULL}, 6, 2, S_NULL}, // S_INSTAWHIP
{SPR_GRNG, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SIGNSPARK2}, // S_SIGNSPARK1
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_SIGNSPARK3}, // S_SIGNSPARK2

View file

@ -811,7 +811,7 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
if (victim != attacker && !P_PlayerInPain(victimPlayer) && victimPlayer->flashing == 0)
{
// BLOW THAT SHIT THE FUCK UP with guard
if (K_PlayerEBrake(victimPlayer) && victimPlayer->spheres > 0)
if (K_PlayerGuard(victimPlayer))
//if (true)
{
victimHitlag = 2*victimHitlag;
@ -876,7 +876,7 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
|| victim->type == MT_BANANA || victim->type == MT_EGGMANITEM || victim->type == MT_BALLHOG
|| victim->type == MT_SSMINE || victim->type == MT_LANDMINE || victim->type == MT_SINK
|| victim->type == MT_GARDENTOP || victim->type == MT_DROPTARGET || victim->type == MT_BATTLECAPSULE
|| victim->type == MT_MONITOR)
|| victim->type == MT_MONITOR || victim->type == MT_SPECIAL_UFO)
{
// Monitor hack. We can hit monitors once per instawhip, no multihit shredding!
// Damage values in Obj_MonitorGetDamage.

View file

@ -718,7 +718,7 @@ static void K_SpawnBumpForObjs(mobj_t *mobj1, mobj_t *mobj2)
}
}
static void K_PlayerJustBumped(player_t *player)
static void K_PlayerJustBumped(player_t *player, boolean guardbreak)
{
mobj_t *playerMobj = NULL;
@ -742,6 +742,13 @@ static void K_PlayerJustBumped(player_t *player)
player->rmomy = playerMobj->momy - player->cmomy;
}
if (guardbreak && K_PlayerGuard(player))
{
S_StartSound(player->mo, sfx_s3k9e);
K_AddHitLag(player->mo, TICRATE, true);
player->instaShieldCooldown = 2*TICRATE;
}
player->justbumped = bumptime;
player->spindash = 0;
@ -933,8 +940,8 @@ boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2)
K_SpawnBumpForObjs(mobj1, mobj2);
K_PlayerJustBumped(mobj1->player);
K_PlayerJustBumped(mobj2->player);
K_PlayerJustBumped(mobj1->player, true);
K_PlayerJustBumped(mobj2->player, true);
return true;
}
@ -1003,7 +1010,7 @@ boolean K_KartSolidBounce(mobj_t *bounceMobj, mobj_t *solidMobj)
bounceMobj->momz = -bounceMobj->momz;
K_SpawnBumpForObjs(bounceMobj, solidMobj);
K_PlayerJustBumped(bounceMobj->player);
K_PlayerJustBumped(bounceMobj->player, false);
return true;
}
@ -9797,6 +9804,11 @@ boolean K_PlayerEBrake(player_t *player)
return false;
}
boolean K_PlayerGuard(player_t *player)
{
return (K_PlayerEBrake(player) && player->spheres > 0 && player->instaShieldCooldown == 0);
}
SINT8 K_Sliptiding(player_t *player)
{
if (player->mo->eflags & MFE_UNDERWATER)

View file

@ -178,6 +178,7 @@ SINT8 K_GetForwardMove(player_t *player);
fixed_t K_GetNewSpeed(player_t *player);
fixed_t K_3dKartMovement(player_t *player);
boolean K_PlayerEBrake(player_t *player);
boolean K_PlayerGuard(player_t *player);
SINT8 K_Sliptiding(player_t *player);
boolean K_FastFallBounce(player_t *player);
fixed_t K_PlayerBaseFriction(player_t *player, fixed_t original);

View file

@ -2,6 +2,7 @@
#include "../info.h"
#include "../k_objects.h"
#include "../p_local.h"
#include "../k_kart.h"
void Obj_BlockRingThink (mobj_t *ring)
{
@ -34,7 +35,7 @@ void Obj_BlockRingThink (mobj_t *ring)
else
ring->renderflags |= RF_DONTDRAW;
if (player->spheres == 0)
if (!K_PlayerGuard(player))
ring->renderflags |= RF_DONTDRAW;
}
}
@ -69,7 +70,7 @@ void Obj_BlockBodyThink (mobj_t *body)
else
body->renderflags |= RF_DONTDRAW;
if (player->spheres == 0)
if (!K_PlayerGuard(player))
body->renderflags |= RF_DONTDRAW;
}
}

View file

@ -670,6 +670,7 @@ static UINT8 GetUFODamage(mobj_t *inflictor, UINT8 damageType)
{
case MT_JAWZ_SHIELD:
case MT_ORBINAUT_SHIELD:
case MT_INSTAWHIP:
{
// Shields deal chip damage.
return 10;

View file

@ -2209,7 +2209,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
{
sfx = sfx_grownd;
}
else if (player->spheres > 0 && K_PlayerEBrake(player))
else if (K_PlayerGuard(player))
{
sfx = sfx_s3k3a;
clash = true;