Move airdrop-related flags to its own variable

This commit is contained in:
yamamama 2026-02-04 09:52:04 -05:00
parent c87c5fd8cd
commit 2a84eda311
4 changed files with 25 additions and 15 deletions

View file

@ -65,16 +65,14 @@ typedef enum
{ {
PF_GODMODE = 1<<0, // Immortal. PF_GODMODE = 1<<0, // Immortal.
// free: 1<<1 // free: 1<<1 and 1<<2
PF_BOUNCYAIRDROP = 1<<2, // Enables bouncy (RR) air-drop for players.
// Look back VFX has been spawned // Look back VFX has been spawned
// TODO: Is there a better way to track this? // TODO: Is there a better way to track this?
PF_GAINAX = 1<<3, PF_GAINAX = 1<<3,
PF_KICKSTARTACCEL = 1<<4, // Accessibility feature: Is accelerate in kickstart mode? PF_KICKSTARTACCEL = 1<<4, // Accessibility feature: Is accelerate in kickstart mode?
PF_WANTSAIRDROP = 1<<5, // Wants air drop (active while holding down brake, used for bouncy air drop) // free: 1<<5 and 1<<6
PF_AIRDROP = 1<<6, // Is in Air Drop (activation / deactivation criteria change if light or heavy)
PF_WANTSTOJOIN = 1<<7, // Spectator that wants to join PF_WANTSTOJOIN = 1<<7, // Spectator that wants to join
@ -113,6 +111,13 @@ typedef enum
PF_SLIDING = 1<<31, // For lua compat, don't use! PF_SLIDING = 1<<31, // For lua compat, don't use!
} pflags_t; } pflags_t;
typedef enum
{
PAF_WANTSAIRDROP = 1<<0, // Wants air drop (active while holding down brake, used for bouncy air drop)
PAF_AIRDROP = 1<<1, // Is in Air Drop (activation / deactivation criteria change if light or heavy)
PAF_BOUNCYAIRDROP = 1<<2, // Enables bouncy (Ring Racers) air-drop for players.
} p_airdropflags_t;
typedef enum typedef enum
{ {
// Are animation frames playing? // Are animation frames playing?
@ -508,6 +513,9 @@ struct player_t
// See pflags_t, above. // See pflags_t, above.
pflags_t pflags; pflags_t pflags;
// Airdrop-exclusive bitflags.
p_airdropflags_t airdropflags;
// playing animation. // playing animation.
panim_t panim; panim_t panim;

View file

@ -6980,7 +6980,7 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
{ {
if (!(cmd->buttons & BT_BRAKE)) if (!(cmd->buttons & BT_BRAKE))
{ {
player->pflags &= ~PF_WANTSAIRDROP; player->airdropflags &= ~PAF_WANTSAIRDROP;
} }
if (!K_AirDropActive() || P_IsObjectOnGround(player->mo) if (!K_AirDropActive() || P_IsObjectOnGround(player->mo)
@ -6989,11 +6989,11 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
|| player->respawn || player->respawn
) )
{ {
if ((player->pflags & PF_AIRDROP)) if ((player->airdropflags & PAF_AIRDROP))
{ {
if (airdropactive == AIRDROP_HEAVY) if (airdropactive == AIRDROP_HEAVY)
{ {
if (player->pflags & PF_BOUNCYAIRDROP) if (player->airdropflags & PAF_BOUNCYAIRDROP)
{ {
const fixed_t maxBounce = mapobjectscale * 10; const fixed_t maxBounce = mapobjectscale * 10;
const fixed_t minBounce = mapobjectscale; const fixed_t minBounce = mapobjectscale;
@ -7053,13 +7053,13 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
} }
} }
player->airdroptime = 0; player->airdroptime = 0;
player->pflags &= ~PF_AIRDROP; player->airdropflags &= ~PAF_AIRDROP;
return; return;
} }
if ((cmd->buttons & BT_BRAKE) && !(player->pflags & PF_WANTSAIRDROP)) if ((cmd->buttons & BT_BRAKE) && !(player->airdropflags & PAF_WANTSAIRDROP))
{ {
if (airdropactive == AIRDROP_HEAVY && !(player->pflags & (PF_AIRDROP|PF_BOUNCYAIRDROP))) if (airdropactive == AIRDROP_HEAVY && !(player->airdropflags & (PAF_AIRDROP|PAF_BOUNCYAIRDROP)))
{ {
// TODO: heavy air drop should allow keeping current boost stack // TODO: heavy air drop should allow keeping current boost stack
S_StartSound(player->mo, sfx_cdfm01); S_StartSound(player->mo, sfx_cdfm01);
@ -7069,22 +7069,22 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd)
player->mo->momy = FixedMul(player->mo->momy, 90*FRACUNIT/100); player->mo->momy = FixedMul(player->mo->momy, 90*FRACUNIT/100);
player->mo->momz -= 8*P_MobjFlip(player->mo)*mapobjectscale; player->mo->momz -= 8*P_MobjFlip(player->mo)*mapobjectscale;
} }
player->pflags |= PF_AIRDROP|PF_WANTSAIRDROP; player->airdropflags |= PAF_AIRDROP|PAF_WANTSAIRDROP;
} }
else else
{ {
if (airdropactive == AIRDROP_LIGHT && !(cmd->buttons & BT_BRAKE)) if (airdropactive == AIRDROP_LIGHT && !(cmd->buttons & BT_BRAKE))
player->pflags &= ~PF_AIRDROP; player->airdropflags &= ~PAF_AIRDROP;
} }
if (player->pflags & PF_AIRDROP) if (player->airdropflags & PAF_AIRDROP)
{ {
K_SpawnFallLines(player, false); K_SpawnFallLines(player, false);
if (airdropactive == AIRDROP_HEAVY) if (airdropactive == AIRDROP_HEAVY)
{ {
if (player->pflags & PF_BOUNCYAIRDROP) if (player->airdropflags & PAF_BOUNCYAIRDROP)
{ {
player->airdroptime = player->mo->momz; player->airdroptime = player->mo->momz;
if (!S_SoundPlaying(player->mo, sfx_s3kd9l)) if (!S_SoundPlaying(player->mo, sfx_s3kd9l))

View file

@ -1190,6 +1190,7 @@ void Command_ObjectPlace_f(void)
// Remove ALL flags and motion. // Remove ALL flags and motion.
P_UnsetThingPosition(players[0].mo); P_UnsetThingPosition(players[0].mo);
players[0].pflags = 0; players[0].pflags = 0;
players[0].airdropflags = 0;
players[0].mo->flags2 = 0; players[0].mo->flags2 = 0;
players[0].mo->eflags = 0; players[0].mo->eflags = 0;
players[0].mo->flags = (MF_NOCLIP|MF_NOGRAVITY|MF_NOBLOCKMAP); players[0].mo->flags = (MF_NOCLIP|MF_NOGRAVITY|MF_NOBLOCKMAP);

View file

@ -501,6 +501,7 @@ static void P_NetSyncPlayers(savebuffer_t *save)
SYNC(players[i].playerstate); SYNC(players[i].playerstate);
SYNC(players[i].pflags); SYNC(players[i].pflags);
SYNC(players[i].airdropflags);
SYNC(players[i].panim); SYNC(players[i].panim);
SYNCBOOLEAN(players[i].spectator); SYNCBOOLEAN(players[i].spectator);
SYNC(players[i].spectatewait); SYNC(players[i].spectatewait);