- fixed: CF_FLY cannot be part of the player_t structure and be tracked properly. It needs to be part of the actor itself that has MF2_FLY set so it got moved to flags7.

- removed some fudging code that tried to work around the shortcomings of CF_FLY but was ultimately causing more problems than it solved.
This commit is contained in:
Christoph Oelckers 2015-02-10 23:40:53 +01:00
parent c0eb39ec72
commit 337682934c
6 changed files with 8 additions and 14 deletions

View file

@ -353,6 +353,7 @@ enum
MF7_HITTARGET = 0x00004000, // The actor the projectile dies on is set to target, provided it's targetable anyway. MF7_HITTARGET = 0x00004000, // The actor the projectile dies on is set to target, provided it's targetable anyway.
MF7_HITMASTER = 0x00008000, // Same as HITTARGET, except it's master instead of target. MF7_HITMASTER = 0x00008000, // Same as HITTARGET, except it's master instead of target.
MF7_HITTRACER = 0x00010000, // Same as HITTARGET, but for tracer. MF7_HITTRACER = 0x00010000, // Same as HITTARGET, but for tracer.
MF7_FLYCHEAT = 0x00020000, // must be part of the actor so that it can be tracked properly

View file

@ -1235,15 +1235,6 @@ void G_FinishTravel ()
pawn->AddToHash (); pawn->AddToHash ();
pawn->SetState(pawn->SpawnState); pawn->SetState(pawn->SpawnState);
pawn->player->SendPitchLimits(); pawn->player->SendPitchLimits();
// Sync the FLY flags.
if (pawn->flags2 & MF2_FLY)
{
pawn->player->cheats |= CF_FLY;
}
else
{
pawn->player->cheats &= ~CF_FLY;
}
for (inv = pawn->Inventory; inv != NULL; inv = inv->Inventory) for (inv = pawn->Inventory; inv != NULL; inv = inv->Inventory)
{ {

View file

@ -997,7 +997,8 @@ void APowerFlight::EndEffect ()
{ {
return; return;
} }
if (!(Owner->player->cheats & CF_FLY))
if (!(Owner->flags7 & MF7_FLYCHEAT))
{ {
if (Owner->z != Owner->floorz) if (Owner->z != Owner->floorz)
{ {

View file

@ -149,8 +149,7 @@ void cht_DoCheat (player_t *player, int cheat)
case CHT_FLY: case CHT_FLY:
if (player->mo != NULL) if (player->mo != NULL)
{ {
player->cheats ^= CF_FLY; if ((player->mo->flags7 ^= MF7_FLYCHEAT) != 0)
if (player->cheats & CF_FLY)
{ {
player->mo->flags |= MF_NOGRAVITY; player->mo->flags |= MF_NOGRAVITY;
player->mo->flags2 |= MF2_FLY; player->mo->flags2 |= MF2_FLY;

View file

@ -2800,7 +2800,7 @@ FUNC(LS_SetPlayerProperty)
mask = CF_INSTANTWEAPSWITCH; mask = CF_INSTANTWEAPSWITCH;
break; break;
case PROP_FLY: case PROP_FLY:
mask = CF_FLY; //mask = CF_FLY;
break; break;
case PROP_TOTALLYFROZEN: case PROP_TOTALLYFROZEN:
mask = CF_TOTALLYFROZEN; mask = CF_TOTALLYFROZEN;
@ -2814,6 +2814,7 @@ FUNC(LS_SetPlayerProperty)
it->player->cheats |= mask; it->player->cheats |= mask;
if (arg2 == PROP_FLY) if (arg2 == PROP_FLY)
{ {
it->flags7 |= MF7_FLYCHEAT;
it->flags2 |= MF2_FLY; it->flags2 |= MF2_FLY;
it->flags |= MF_NOGRAVITY; it->flags |= MF_NOGRAVITY;
} }
@ -2823,6 +2824,7 @@ FUNC(LS_SetPlayerProperty)
it->player->cheats &= ~mask; it->player->cheats &= ~mask;
if (arg2 == PROP_FLY) if (arg2 == PROP_FLY)
{ {
it->flags7 &= ~MF7_FLYCHEAT;
it->flags2 &= ~MF2_FLY; it->flags2 &= ~MF2_FLY;
it->flags &= ~MF_NOGRAVITY; it->flags &= ~MF_NOGRAVITY;
} }

View file

@ -4477,7 +4477,7 @@ APlayerPawn *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags)
p->mo->ResetAirSupply(false); p->mo->ResetAirSupply(false);
p->Uncrouch(); p->Uncrouch();
p->MinPitch = p->MaxPitch = 0; // will be filled in by PostBeginPlay()/netcode p->MinPitch = p->MaxPitch = 0; // will be filled in by PostBeginPlay()/netcode
p->cheats &= ~CF_FLY;
p->velx = p->vely = 0; // killough 10/98: initialize bobbing to 0. p->velx = p->vely = 0; // killough 10/98: initialize bobbing to 0.