mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-21 11:21:04 +00:00
- scriptified APlayerPawn::Die and fixed a few things I encountered while doing it.
This commit is contained in:
parent
cf9cd58310
commit
fb91982da2
16 changed files with 117 additions and 102 deletions
|
@ -1690,7 +1690,7 @@ static int PatchWeapon (int weapNum)
|
||||||
}
|
}
|
||||||
else if (stricmp (Line1, "Min ammo") == 0)
|
else if (stricmp (Line1, "Min ammo") == 0)
|
||||||
{
|
{
|
||||||
info->MinAmmo1 = val;
|
info->MinSelAmmo1 = val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -94,7 +94,6 @@ public:
|
||||||
virtual bool UseInventory (AInventory *item) override;
|
virtual bool UseInventory (AInventory *item) override;
|
||||||
virtual void MarkPrecacheSounds () const override;
|
virtual void MarkPrecacheSounds () const override;
|
||||||
virtual void BeginPlay () override;
|
virtual void BeginPlay () override;
|
||||||
virtual void Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOfDeath) override;
|
|
||||||
virtual bool UpdateWaterLevel (bool splash) override;
|
virtual bool UpdateWaterLevel (bool splash) override;
|
||||||
|
|
||||||
bool ResetAirSupply (bool playgasp = true);
|
bool ResetAirSupply (bool playgasp = true);
|
||||||
|
|
|
@ -119,9 +119,9 @@ public:
|
||||||
TObjPtr<AWeapon*> SisterWeapon;
|
TObjPtr<AWeapon*> SisterWeapon;
|
||||||
float FOVScale;
|
float FOVScale;
|
||||||
int Crosshair; // 0 to use player's crosshair
|
int Crosshair; // 0 to use player's crosshair
|
||||||
bool GivenAsMorphWeapon;
|
bool GivenAsMorphWeapon; // *** only accessed from ZScript.
|
||||||
|
|
||||||
bool bAltFire; // Set when this weapon's alternate fire is used.
|
bool bAltFire; // *** only accessed from ZScript. Set when this weapon's alternate fire is used.
|
||||||
|
|
||||||
virtual void MarkPrecacheSounds() const;
|
virtual void MarkPrecacheSounds() const;
|
||||||
|
|
||||||
|
|
|
@ -1513,6 +1513,7 @@ void G_InitLevelLocals ()
|
||||||
level.fogdensity = info->fogdensity;
|
level.fogdensity = info->fogdensity;
|
||||||
level.outsidefogdensity = info->outsidefogdensity;
|
level.outsidefogdensity = info->outsidefogdensity;
|
||||||
level.skyfog = info->skyfog;
|
level.skyfog = info->skyfog;
|
||||||
|
level.deathsequence = info->deathsequence;
|
||||||
|
|
||||||
level.pixelstretch = info->pixelstretch;
|
level.pixelstretch = info->pixelstretch;
|
||||||
|
|
||||||
|
@ -2238,6 +2239,7 @@ DEFINE_FIELD(FLevelLocals, fogdensity)
|
||||||
DEFINE_FIELD(FLevelLocals, outsidefogdensity)
|
DEFINE_FIELD(FLevelLocals, outsidefogdensity)
|
||||||
DEFINE_FIELD(FLevelLocals, skyfog)
|
DEFINE_FIELD(FLevelLocals, skyfog)
|
||||||
DEFINE_FIELD(FLevelLocals, pixelstretch)
|
DEFINE_FIELD(FLevelLocals, pixelstretch)
|
||||||
|
DEFINE_FIELD(FLevelLocals, deathsequence)
|
||||||
DEFINE_FIELD_BIT(FLevelLocals, flags, noinventorybar, LEVEL_NOINVENTORYBAR)
|
DEFINE_FIELD_BIT(FLevelLocals, flags, noinventorybar, LEVEL_NOINVENTORYBAR)
|
||||||
DEFINE_FIELD_BIT(FLevelLocals, flags, monsterstelefrag, LEVEL_MONSTERSTELEFRAG)
|
DEFINE_FIELD_BIT(FLevelLocals, flags, monsterstelefrag, LEVEL_MONSTERSTELEFRAG)
|
||||||
DEFINE_FIELD_BIT(FLevelLocals, flags, actownspecial, LEVEL_ACTOWNSPECIAL)
|
DEFINE_FIELD_BIT(FLevelLocals, flags, actownspecial, LEVEL_ACTOWNSPECIAL)
|
||||||
|
@ -2304,3 +2306,12 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, ChangeSky)
|
||||||
R_InitSkyMap();
|
R_InitSkyMap();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(FLevelLocals, StartIntermission)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals);
|
||||||
|
PARAM_NAME(seq);
|
||||||
|
PARAM_INT(state);
|
||||||
|
F_StartIntermission(seq, (uint8_t)state);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -175,6 +175,7 @@ struct FLevelLocals
|
||||||
int outsidefogdensity;
|
int outsidefogdensity;
|
||||||
int skyfog;
|
int skyfog;
|
||||||
|
|
||||||
|
FName deathsequence;
|
||||||
float pixelstretch;
|
float pixelstretch;
|
||||||
float MusicVolume;
|
float MusicVolume;
|
||||||
|
|
||||||
|
|
|
@ -872,7 +872,6 @@ void F_StartIntermission(FName seq, uint8_t state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Called by main loop.
|
// Called by main loop.
|
||||||
|
|
|
@ -4512,8 +4512,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_DropItem)
|
||||||
PARAM_INT(amount);
|
PARAM_INT(amount);
|
||||||
PARAM_INT(chance);
|
PARAM_INT(chance);
|
||||||
|
|
||||||
P_DropItem(self, spawntype, amount, chance);
|
ACTION_RETURN_OBJECT(P_DropItem(self, spawntype, amount, chance));
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -3225,7 +3225,7 @@ void ModifyDropAmount(AInventory *inv, int dropamount)
|
||||||
|
|
||||||
CVAR(Int, sv_dropstyle, 0, CVAR_SERVERINFO | CVAR_ARCHIVE);
|
CVAR(Int, sv_dropstyle, 0, CVAR_SERVERINFO | CVAR_ARCHIVE);
|
||||||
|
|
||||||
AInventory *P_DropItem (AActor *source, PClassActor *type, int dropamount, int chance)
|
AActor *P_DropItem (AActor *source, PClassActor *type, int dropamount, int chance)
|
||||||
{
|
{
|
||||||
if (type != NULL && pr_dropitem() <= chance)
|
if (type != NULL && pr_dropitem() <= chance)
|
||||||
{
|
{
|
||||||
|
@ -3276,9 +3276,8 @@ AInventory *P_DropItem (AActor *source, PClassActor *type, int dropamount, int c
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return inv;
|
|
||||||
}
|
}
|
||||||
// we can't really return an AInventory pointer to a non-inventory item here, can we?
|
return mo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -53,7 +53,7 @@ bool P_CheckMeleeRange2 (AActor *actor);
|
||||||
bool P_Move (AActor *actor);
|
bool P_Move (AActor *actor);
|
||||||
bool P_TryWalk (AActor *actor);
|
bool P_TryWalk (AActor *actor);
|
||||||
void P_NewChaseDir (AActor *actor);
|
void P_NewChaseDir (AActor *actor);
|
||||||
AInventory *P_DropItem (AActor *source, PClassActor *type, int special, int chance);
|
AActor *P_DropItem (AActor *source, PClassActor *type, int special, int chance);
|
||||||
void P_TossItem (AActor *item);
|
void P_TossItem (AActor *item);
|
||||||
bool P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params);
|
bool P_LookForPlayers (AActor *actor, INTBOOL allaround, FLookExParams *params);
|
||||||
void A_Weave(AActor *self, int xyspeed, int zspeed, double xydist, double zdist);
|
void A_Weave(AActor *self, int xyspeed, int zspeed, double xydist, double zdist);
|
||||||
|
|
|
@ -972,6 +972,7 @@ void G_SerializeLevel(FSerializer &arc, bool hubload)
|
||||||
("level.fogdensity", level.fogdensity)
|
("level.fogdensity", level.fogdensity)
|
||||||
("level.outsidefogdensity", level.outsidefogdensity)
|
("level.outsidefogdensity", level.outsidefogdensity)
|
||||||
("level.skyfog", level.skyfog)
|
("level.skyfog", level.skyfog)
|
||||||
|
("level.deathsequence", level.deathsequence)
|
||||||
("level.bodyqueslot", level.bodyqueslot)
|
("level.bodyqueslot", level.bodyqueslot)
|
||||||
.Array("level.bodyque", level.bodyque, level.BODYQUESIZE);
|
.Array("level.bodyque", level.bodyque, level.BODYQUESIZE);
|
||||||
|
|
||||||
|
|
|
@ -1351,88 +1351,6 @@ void APlayerPawn::GiveDefaultInventory ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// APlayerPawn :: Die
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
void APlayerPawn::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOfDeath)
|
|
||||||
{
|
|
||||||
Super::Die (source, inflictor, dmgflags, MeansOfDeath);
|
|
||||||
|
|
||||||
if (player != NULL && player->mo == this) player->bonuscount = 0;
|
|
||||||
|
|
||||||
if (player != NULL && player->mo != this)
|
|
||||||
{ // Make the real player die, too
|
|
||||||
player->mo->CallDie (source, inflictor, dmgflags, MeansOfDeath);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (player != NULL && (dmflags2 & DF2_YES_WEAPONDROP))
|
|
||||||
{ // Voodoo dolls don't drop weapons
|
|
||||||
AWeapon *weap = player->ReadyWeapon;
|
|
||||||
if (weap != NULL)
|
|
||||||
{
|
|
||||||
AInventory *item;
|
|
||||||
|
|
||||||
// kgDROP - start - modified copy from a_action.cpp
|
|
||||||
auto di = weap->GetDropItems();
|
|
||||||
|
|
||||||
if (di != NULL)
|
|
||||||
{
|
|
||||||
while (di != NULL)
|
|
||||||
{
|
|
||||||
if (di->Name != NAME_None)
|
|
||||||
{
|
|
||||||
PClassActor *ti = PClass::FindActor(di->Name);
|
|
||||||
if (ti) P_DropItem (player->mo, ti, di->Amount, di->Probability);
|
|
||||||
}
|
|
||||||
di = di->Next;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
// kgDROP - end
|
|
||||||
if (weap->SpawnState != NULL &&
|
|
||||||
weap->SpawnState != ::GetDefault<AActor>()->SpawnState)
|
|
||||||
{
|
|
||||||
item = P_DropItem (this, weap->GetClass(), -1, 256);
|
|
||||||
if (item != NULL && item->IsKindOf(NAME_Weapon))
|
|
||||||
{
|
|
||||||
if (weap->AmmoGive1 && weap->Ammo1)
|
|
||||||
{
|
|
||||||
static_cast<AWeapon *>(item)->AmmoGive1 = weap->Ammo1->Amount;
|
|
||||||
}
|
|
||||||
if (weap->AmmoGive2 && weap->Ammo2)
|
|
||||||
{
|
|
||||||
static_cast<AWeapon *>(item)->AmmoGive2 = weap->Ammo2->Amount;
|
|
||||||
}
|
|
||||||
item->ItemFlags |= IF_IGNORESKILL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
item = P_DropItem (this, weap->AmmoType1, -1, 256);
|
|
||||||
if (item != NULL)
|
|
||||||
{
|
|
||||||
item->Amount = weap->Ammo1->Amount;
|
|
||||||
item->ItemFlags |= IF_IGNORESKILL;
|
|
||||||
}
|
|
||||||
item = P_DropItem (this, weap->AmmoType2, -1, 256);
|
|
||||||
if (item != NULL)
|
|
||||||
{
|
|
||||||
item->Amount = weap->Ammo2->Amount;
|
|
||||||
item->ItemFlags |= IF_IGNORESKILL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!multiplayer && level.info->deathsequence != NAME_None)
|
|
||||||
{
|
|
||||||
F_StartIntermission(level.info->deathsequence, FSTATE_EndingGame);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// A_PlayerScream
|
// A_PlayerScream
|
||||||
|
|
|
@ -1070,7 +1070,7 @@ class Actor : Thinker native
|
||||||
native void A_Quake(int intensity, int duration, int damrad, int tremrad, sound sfx = "world/quake");
|
native void A_Quake(int intensity, int duration, int damrad, int tremrad, sound sfx = "world/quake");
|
||||||
native void A_QuakeEx(int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, sound sfx = "world/quake", int flags = 0, double mulWaveX = 1, double mulWaveY = 1, double mulWaveZ = 1, int falloff = 0, int highpoint = 0, double rollIntensity = 0, double rollWave = 0);
|
native void A_QuakeEx(int intensityX, int intensityY, int intensityZ, int duration, int damrad, int tremrad, sound sfx = "world/quake", int flags = 0, double mulWaveX = 1, double mulWaveY = 1, double mulWaveZ = 1, int falloff = 0, int highpoint = 0, double rollIntensity = 0, double rollWave = 0);
|
||||||
action native void A_SetTics(int tics);
|
action native void A_SetTics(int tics);
|
||||||
native void A_DropItem(class<Actor> item, int dropamount = -1, int chance = 256);
|
native Actor A_DropItem(class<Actor> item, int dropamount = -1, int chance = 256);
|
||||||
native void A_DamageSelf(int amount, name damagetype = "none", int flags = 0, class<Actor> filter = null, name species = "None", int src = AAPTR_DEFAULT, int inflict = AAPTR_DEFAULT);
|
native void A_DamageSelf(int amount, name damagetype = "none", int flags = 0, class<Actor> filter = null, name species = "None", int src = AAPTR_DEFAULT, int inflict = AAPTR_DEFAULT);
|
||||||
native void A_DamageTarget(int amount, name damagetype = "none", int flags = 0, class<Actor> filter = null, name species = "None", int src = AAPTR_DEFAULT, int inflict = AAPTR_DEFAULT);
|
native void A_DamageTarget(int amount, name damagetype = "none", int flags = 0, class<Actor> filter = null, name species = "None", int src = AAPTR_DEFAULT, int inflict = AAPTR_DEFAULT);
|
||||||
native void A_DamageMaster(int amount, name damagetype = "none", int flags = 0, class<Actor> filter = null, name species = "None", int src = AAPTR_DEFAULT, int inflict = AAPTR_DEFAULT);
|
native void A_DamageMaster(int amount, name damagetype = "none", int flags = 0, class<Actor> filter = null, name species = "None", int src = AAPTR_DEFAULT, int inflict = AAPTR_DEFAULT);
|
||||||
|
|
|
@ -655,6 +655,7 @@ struct LevelLocals native
|
||||||
native readonly int outsidefogdensity;
|
native readonly int outsidefogdensity;
|
||||||
native readonly int skyfog;
|
native readonly int skyfog;
|
||||||
native readonly float pixelstretch;
|
native readonly float pixelstretch;
|
||||||
|
native name deathsequence;
|
||||||
// level_info_t *info cannot be done yet.
|
// level_info_t *info cannot be done yet.
|
||||||
|
|
||||||
native String GetUDMFString(int type, int index, Name key);
|
native String GetUDMFString(int type, int index, Name key);
|
||||||
|
@ -670,6 +671,7 @@ struct LevelLocals native
|
||||||
native bool IsJumpingAllowed() const;
|
native bool IsJumpingAllowed() const;
|
||||||
native bool IsCrouchingAllowed() const;
|
native bool IsCrouchingAllowed() const;
|
||||||
native bool IsFreelookAllowed() const;
|
native bool IsFreelookAllowed() const;
|
||||||
|
native void StartIntermission(Name type, int state) const;
|
||||||
|
|
||||||
native static clearscope bool IsPointInMap(vector3 p);
|
native static clearscope bool IsPointInMap(vector3 p);
|
||||||
|
|
||||||
|
|
|
@ -1257,3 +1257,11 @@ enum RadiusDamageFlags
|
||||||
RADF_THRUSTZ = 16,
|
RADF_THRUSTZ = 16,
|
||||||
RADF_OLDRADIUSDAMAGE = 32
|
RADF_OLDRADIUSDAMAGE = 32
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum IntermissionSequenceType
|
||||||
|
{
|
||||||
|
FSTATE_EndingGame = 0,
|
||||||
|
FSTATE_ChangingLevel = 1,
|
||||||
|
FSTATE_InLevel = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -560,7 +560,7 @@ extend class PlayerPawn
|
||||||
override Actor, int, int MorphedDeath()
|
override Actor, int, int MorphedDeath()
|
||||||
{
|
{
|
||||||
// Voodoo dolls should not unmorph the real player here.
|
// Voodoo dolls should not unmorph the real player here.
|
||||||
if ((player.mo == self) &&
|
if (player && (player.mo == self) &&
|
||||||
(player.morphTics) &&
|
(player.morphTics) &&
|
||||||
(player.MorphStyle & MRF_UNDOBYDEATH) &&
|
(player.MorphStyle & MRF_UNDOBYDEATH) &&
|
||||||
(alternative))
|
(alternative))
|
||||||
|
|
|
@ -154,7 +154,7 @@ class PlayerPawn : Actor native
|
||||||
let invul = Powerup(Spawn("PowerInvulnerable"));
|
let invul = Powerup(Spawn("PowerInvulnerable"));
|
||||||
invul.EffectTics = 3 * TICRATE;
|
invul.EffectTics = 3 * TICRATE;
|
||||||
invul.BlendColor = 0; // don't mess with the view
|
invul.BlendColor = 0; // don't mess with the view
|
||||||
invul.bUndroppable = true; // Don't drop this
|
invul.bUndroppable = true; // Don't drop self
|
||||||
bRespawnInvul = true; // [RH] special effect
|
bRespawnInvul = true; // [RH] special effect
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,7 +363,7 @@ class PlayerPawn : Actor native
|
||||||
//
|
//
|
||||||
// PROC P_CheckWeaponChange
|
// PROC P_CheckWeaponChange
|
||||||
//
|
//
|
||||||
// The player can change to another weapon at this time.
|
// The player can change to another weapon at self time.
|
||||||
// [GZ] This was cut from P_CheckWeaponFire.
|
// [GZ] This was cut from P_CheckWeaponFire.
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -537,6 +537,84 @@ class PlayerPawn : Actor native
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// APlayerPawn :: Die
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
override void Die (Actor source, Actor inflictor, int dmgflags, Name MeansOfDeath)
|
||||||
|
{
|
||||||
|
Super.Die (source, inflictor, dmgflags, MeansOfDeath);
|
||||||
|
|
||||||
|
if (player != NULL && player.mo == self) player.bonuscount = 0;
|
||||||
|
|
||||||
|
if (player != NULL && player.mo != self)
|
||||||
|
{ // Make the real player die, too
|
||||||
|
player.mo.Die (source, inflictor, dmgflags, MeansOfDeath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (player != NULL && sv_weapondrop)
|
||||||
|
{ // Voodoo dolls don't drop weapons
|
||||||
|
let weap = player.ReadyWeapon;
|
||||||
|
if (weap != NULL)
|
||||||
|
{
|
||||||
|
// kgDROP - start - modified copy from a_action.cpp
|
||||||
|
let di = weap.GetDropItems();
|
||||||
|
|
||||||
|
if (di != NULL)
|
||||||
|
{
|
||||||
|
while (di != NULL)
|
||||||
|
{
|
||||||
|
if (di.Name != 'None')
|
||||||
|
{
|
||||||
|
class<Actor> ti = di.Name;
|
||||||
|
if (ti) A_DropItem (ti, di.Amount, di.Probability);
|
||||||
|
}
|
||||||
|
di = di.Next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (weap.SpawnState != NULL &&
|
||||||
|
weap.SpawnState != GetDefaultByType('Actor').SpawnState)
|
||||||
|
{
|
||||||
|
let weapitem = Weapon(A_DropItem (weap.GetClass(), -1, 256));
|
||||||
|
if (weapitem)
|
||||||
|
{
|
||||||
|
if (weap.AmmoGive1 && weap.Ammo1)
|
||||||
|
{
|
||||||
|
weapitem.AmmoGive1 = weap.Ammo1.Amount;
|
||||||
|
}
|
||||||
|
if (weap.AmmoGive2 && weap.Ammo2)
|
||||||
|
{
|
||||||
|
weapitem.AmmoGive2 = weap.Ammo2.Amount;
|
||||||
|
}
|
||||||
|
weapitem.bIgnoreSkill = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let item = Inventory(A_DropItem (weap.AmmoType1, -1, 256));
|
||||||
|
if (item != NULL)
|
||||||
|
{
|
||||||
|
item.Amount = weap.Ammo1.Amount;
|
||||||
|
item.bIgnoreSkill = true;
|
||||||
|
}
|
||||||
|
item = Inventory(A_DropItem (weap.AmmoType2, -1, 256));
|
||||||
|
if (item != NULL)
|
||||||
|
{
|
||||||
|
item.Amount = weap.Ammo2.Amount;
|
||||||
|
item.bIgnoreSkill = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!multiplayer && level.deathsequence != 'None')
|
||||||
|
{
|
||||||
|
level.StartIntermission(level.deathsequence, FSTATE_EndingGame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// PROC P_CheckFOV
|
// PROC P_CheckFOV
|
||||||
|
@ -1244,7 +1322,7 @@ class PlayerPawn : Actor native
|
||||||
CheckUse();
|
CheckUse();
|
||||||
CheckUndoMorph();
|
CheckUndoMorph();
|
||||||
// Cycle psprites.
|
// Cycle psprites.
|
||||||
// Note that after this point the PlayerPawn may have changed due to getting unmorphed so 'self' is no longer safe to use.
|
// Note that after self point the PlayerPawn may have changed due to getting unmorphed so 'self' is no longer safe to use.
|
||||||
player.mo.TickPSprites();
|
player.mo.TickPSprites();
|
||||||
// Other Counters
|
// Other Counters
|
||||||
if (player.damagecount) player.damagecount--;
|
if (player.damagecount) player.damagecount--;
|
||||||
|
@ -1285,7 +1363,7 @@ class PlayerPawn : Actor native
|
||||||
|
|
||||||
let weapon = player.PendingWeapon;
|
let weapon = player.PendingWeapon;
|
||||||
|
|
||||||
// If the player has a tome of power, use this weapon's powered up
|
// If the player has a tome of power, use self weapon's powered up
|
||||||
// version, if one is available.
|
// version, if one is available.
|
||||||
if (weapon != null &&
|
if (weapon != null &&
|
||||||
weapon.SisterWeapon &&
|
weapon.SisterWeapon &&
|
||||||
|
@ -1345,7 +1423,7 @@ class PlayerPawn : Actor native
|
||||||
weap.Ammo1.GetClass() != ammotype))
|
weap.Ammo1.GetClass() != ammotype))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Don't select it if the Tome is active and this isn't the powered-up version.
|
// Don't select it if the Tome is active and self isn't the powered-up version.
|
||||||
if (tomed && weap.SisterWeapon != NULL && weap.SisterWeapon.bPowered_Up)
|
if (tomed && weap.SisterWeapon != NULL && weap.SisterWeapon.bPowered_Up)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1400,7 +1478,7 @@ class PlayerPawn : Actor native
|
||||||
//
|
//
|
||||||
// APlayerPawn :: PickNewWeapon
|
// APlayerPawn :: PickNewWeapon
|
||||||
//
|
//
|
||||||
// Picks a new weapon for this player. Used mostly for running out of ammo,
|
// Picks a new weapon for self player. Used mostly for running out of ammo,
|
||||||
// but it also works when an ACS script explicitly takes the ready weapon
|
// but it also works when an ACS script explicitly takes the ready weapon
|
||||||
// away or the player picks up some ammo they had previously run out of.
|
// away or the player picks up some ammo they had previously run out of.
|
||||||
//
|
//
|
||||||
|
@ -1632,7 +1710,7 @@ enum EPlayerGender
|
||||||
GENDER_OTHER
|
GENDER_OTHER
|
||||||
}
|
}
|
||||||
|
|
||||||
struct PlayerInfo native play // this is what internally is known as player_t
|
struct PlayerInfo native play // self is what internally is known as player_t
|
||||||
{
|
{
|
||||||
// technically engine constants but the only part of the playsim using them is the player.
|
// technically engine constants but the only part of the playsim using them is the player.
|
||||||
const NOFIXEDCOLORMAP = -1;
|
const NOFIXEDCOLORMAP = -1;
|
||||||
|
|
Loading…
Reference in a new issue