Basic Ring Shooter freeze implementation

It's probably too easy to break, but this should be enough for testing at least.
This commit is contained in:
Sally Coolatta 2023-04-13 03:47:24 -04:00
parent 92b8e38f11
commit 14d371f00f
3 changed files with 19 additions and 2 deletions

View file

@ -3407,7 +3407,9 @@ SINT8 K_GetForwardMove(player_t *player)
{
SINT8 forwardmove = player->cmd.forwardmove;
if ((player->pflags & PF_STASIS) || (player->carry == CR_SLIDING))
if ((player->pflags & PF_STASIS)
|| (player->carry == CR_SLIDING)
|| Obj_PlayerRingShooterFreeze(player) == true)
{
return 0;
}

View file

@ -108,6 +108,7 @@ boolean Obj_DropTargetMorphThink(mobj_t *morph);
/* Ring Shooter */
boolean Obj_RingShooterThinker(mobj_t *mo);
boolean Obj_PlayerRingShooterFreeze(player_t *const player);
void Obj_RingShooterInput(player_t *player);
void Obj_PlayerUsedRingShooter(mobj_t *base, player_t *player);
void Obj_RingShooterDelete(mobj_t *mo);

View file

@ -645,6 +645,20 @@ static boolean AllowRingShooter(player_t *player)
return false;
}
boolean Obj_PlayerRingShooterFreeze(player_t *const player)
{
mobj_t *const base = player->ringShooter;
if (AllowRingShooter(player) == true
&& (player->cmd.buttons & BT_RESPAWN) == BT_RESPAWN
&& P_MobjWasRemoved(base) == false)
{
return (rs_base_canceled(base) == 0);
}
return false;
}
void Obj_RingShooterInput(player_t *player)
{
mobj_t *const base = player->ringShooter;
@ -658,7 +672,7 @@ void Obj_RingShooterInput(player_t *player)
return;
}
if (rs_base_canceled(base) != 0)
if (rs_base_canceled(base) == 0)
{
if (base->fuse < RS_FUSE_BLINK)
{