- scriptified PowerFlight and PowerWeaponLevel2.
This commit is contained in:
parent
4837e1e770
commit
d2d6e5d486
25 changed files with 369 additions and 306 deletions
|
|
@ -1008,230 +1008,6 @@ void APowerTorch::DoEffect ()
|
|||
}
|
||||
}
|
||||
|
||||
// Flight (aka Wings of Wrath) powerup ---------------------------------------
|
||||
|
||||
IMPLEMENT_CLASS(APowerFlight, false, false)
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerFlight :: Serialize
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void APowerFlight::Serialize(FSerializer &arc)
|
||||
{
|
||||
Super::Serialize (arc);
|
||||
arc("hitcenterframe", HitCenterFrame);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerFlight :: InitEffect
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void APowerFlight::InitEffect ()
|
||||
{
|
||||
Super::InitEffect();
|
||||
Owner->flags2 |= MF2_FLY;
|
||||
Owner->flags |= MF_NOGRAVITY;
|
||||
if (Owner->Z() <= Owner->floorz)
|
||||
{
|
||||
Owner->Vel.Z = 4;; // thrust the player in the air a bit
|
||||
}
|
||||
if (Owner->Vel.Z <= -35)
|
||||
{ // stop falling scream
|
||||
S_StopSound (Owner, CHAN_VOICE);
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerFlight :: DoEffect
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void APowerFlight::Tick ()
|
||||
{
|
||||
// The Wings of Wrath only expire in multiplayer and non-hub games
|
||||
if (!multiplayer && (level.flags2 & LEVEL2_INFINITE_FLIGHT))
|
||||
{
|
||||
assert(EffectTics < INT_MAX); // I can't see a game lasting nearly two years, but...
|
||||
EffectTics++;
|
||||
}
|
||||
|
||||
Super::Tick ();
|
||||
|
||||
// Owner->flags |= MF_NOGRAVITY;
|
||||
// Owner->flags2 |= MF2_FLY;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerFlight :: EndEffect
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void APowerFlight::EndEffect ()
|
||||
{
|
||||
Super::EndEffect();
|
||||
if (Owner == NULL || Owner->player == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(Owner->flags7 & MF7_FLYCHEAT))
|
||||
{
|
||||
if (Owner->Z() != Owner->floorz)
|
||||
{
|
||||
Owner->player->centering = true;
|
||||
}
|
||||
Owner->flags2 &= ~MF2_FLY;
|
||||
Owner->flags &= ~MF_NOGRAVITY;
|
||||
}
|
||||
// BorderTopRefresh = screen->GetPageCount (); //make sure the sprite's cleared out
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerFlight :: DrawPowerup
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
bool APowerFlight::DrawPowerup (int x, int y)
|
||||
{
|
||||
// If this item got a valid icon use that instead of the default spinning wings.
|
||||
if (Icon.isValid())
|
||||
{
|
||||
return Super::DrawPowerup(x, y);
|
||||
}
|
||||
|
||||
if (EffectTics > BLINKTHRESHOLD || !(EffectTics & 16))
|
||||
{
|
||||
FTextureID picnum = TexMan.CheckForTexture ("SPFLY0", FTexture::TEX_MiscPatch);
|
||||
int frame = (level.time/3) & 15;
|
||||
|
||||
if (!picnum.isValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (Owner->flags & MF_NOGRAVITY)
|
||||
{
|
||||
if (HitCenterFrame && (frame != 15 && frame != 0))
|
||||
{
|
||||
screen->DrawTexture (TexMan[picnum+15], x, y,
|
||||
DTA_HUDRules, HUD_Normal, TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
screen->DrawTexture (TexMan[picnum+frame], x, y,
|
||||
DTA_HUDRules, HUD_Normal, TAG_DONE);
|
||||
HitCenterFrame = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!HitCenterFrame && (frame != 15 && frame != 0))
|
||||
{
|
||||
screen->DrawTexture (TexMan[picnum+frame], x, y,
|
||||
DTA_HUDRules, HUD_Normal, TAG_DONE);
|
||||
HitCenterFrame = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
screen->DrawTexture (TexMan[picnum+15], x, y,
|
||||
DTA_HUDRules, HUD_Normal, TAG_DONE);
|
||||
HitCenterFrame = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Weapon Level 2 (aka Tome of Power) Powerup --------------------------------
|
||||
|
||||
IMPLEMENT_CLASS(APowerWeaponLevel2, false, false)
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerWeaponLevel2 :: InitEffect
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void APowerWeaponLevel2::InitEffect ()
|
||||
{
|
||||
AWeapon *weapon, *sister;
|
||||
|
||||
Super::InitEffect();
|
||||
|
||||
if (Owner->player == nullptr)
|
||||
return;
|
||||
|
||||
weapon = Owner->player->ReadyWeapon;
|
||||
|
||||
if (weapon == nullptr)
|
||||
return;
|
||||
|
||||
sister = weapon->SisterWeapon;
|
||||
|
||||
if (sister == nullptr)
|
||||
return;
|
||||
|
||||
if (!(sister->WeaponFlags & WIF_POWERED_UP))
|
||||
return;
|
||||
|
||||
assert (sister->SisterWeapon == weapon);
|
||||
|
||||
|
||||
if (weapon->GetReadyState() != sister->GetReadyState())
|
||||
{
|
||||
Owner->player->ReadyWeapon = sister;
|
||||
P_SetPsprite(Owner->player, PSP_WEAPON, sister->GetReadyState());
|
||||
}
|
||||
else
|
||||
{
|
||||
DPSprite *psp = Owner->player->FindPSprite(PSP_WEAPON);
|
||||
if (psp != nullptr && psp->GetCaller() == Owner->player->ReadyWeapon)
|
||||
{
|
||||
// If the weapon changes but the state does not, we have to manually change the PSprite's caller here.
|
||||
psp->SetCaller(sister);
|
||||
Owner->player->ReadyWeapon = sister;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Something went wrong. Initiate a regular weapon change.
|
||||
Owner->player->PendingWeapon = sister;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// APowerWeaponLevel2 :: EndEffect
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void APowerWeaponLevel2::EndEffect ()
|
||||
{
|
||||
player_t *player = Owner != NULL ? Owner->player : NULL;
|
||||
|
||||
Super::EndEffect();
|
||||
if (player != NULL)
|
||||
{
|
||||
if (player->ReadyWeapon != NULL &&
|
||||
player->ReadyWeapon->WeaponFlags & WIF_POWERED_UP)
|
||||
{
|
||||
player->ReadyWeapon->CallEndPowerup ();
|
||||
}
|
||||
if (player->PendingWeapon != NULL && player->PendingWeapon != WP_NOCHANGE &&
|
||||
player->PendingWeapon->WeaponFlags & WIF_POWERED_UP &&
|
||||
player->PendingWeapon->SisterWeapon != NULL)
|
||||
{
|
||||
player->PendingWeapon = player->PendingWeapon->SisterWeapon;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Speed Powerup -------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_CLASS(APowerSpeed, false, false)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue