- added parameter to PLayerPawn::GetMaxHealth to return the real maximum health, including stamina upgrades.

This commit is contained in:
Christoph Oelckers 2017-03-01 00:04:17 +01:00
parent 12915b5f6e
commit cb295e0441
7 changed files with 14 additions and 11 deletions

View file

@ -358,7 +358,7 @@ void DBot::WhatToGet (AActor *item)
} }
else if ((typeis (Megasphere) || typeis (Soulsphere) || typeis (HealthBonus)) && player->mo->health >= deh.MaxSoulsphere) else if ((typeis (Megasphere) || typeis (Soulsphere) || typeis (HealthBonus)) && player->mo->health >= deh.MaxSoulsphere)
return; return;
else if (item->IsKindOf (PClass::FindActor(NAME_Health)) && player->mo->health >= player->mo->GetMaxHealth() + player->mo->stamina) else if (item->IsKindOf (PClass::FindActor(NAME_Health)) && player->mo->health >= player->mo->GetMaxHealth(true))
return; return;
if ((dest == NULL || if ((dest == NULL ||

View file

@ -93,7 +93,7 @@ public:
virtual bool UpdateWaterLevel (bool splash) override; virtual bool UpdateWaterLevel (bool splash) override;
bool ResetAirSupply (bool playgasp = true); bool ResetAirSupply (bool playgasp = true);
int GetMaxHealth() const; int GetMaxHealth(bool withupgrades = false) const;
void TweakSpeeds (double &forwardmove, double &sidemove); void TweakSpeeds (double &forwardmove, double &sidemove);
void MorphPlayerThink (); void MorphPlayerThink ();
void ActivateMorphWeapon (); void ActivateMorphWeapon ();

View file

@ -2744,7 +2744,7 @@ class CommandDrawBar : public SBarInfoCommand
max = 0; max = 0;
} }
else //default to the class's health else //default to the class's health
max = statusBar->CPlayer->mo->GetMaxHealth() + statusBar->CPlayer->mo->stamina; max = statusBar->CPlayer->mo->GetMaxHealth(true);
break; break;
case ARMOR: case ARMOR:
value = statusBar->armor != NULL ? statusBar->armor->Amount : 0; value = statusBar->armor != NULL ? statusBar->armor->Amount : 0;
@ -3251,7 +3251,7 @@ class CommandDrawGem : public SBarInfoCommand
void Tick(const SBarInfoMainBlock *block, const DSBarInfo *statusBar, bool hudChanged) void Tick(const SBarInfoMainBlock *block, const DSBarInfo *statusBar, bool hudChanged)
{ {
goalValue = armor ? (statusBar->armor ? statusBar->armor->Amount : 0) : statusBar->CPlayer->mo->health; goalValue = armor ? (statusBar->armor ? statusBar->armor->Amount : 0) : statusBar->CPlayer->mo->health;
int max = armor ? 100 : statusBar->CPlayer->mo->GetMaxHealth() + statusBar->CPlayer->mo->stamina; int max = armor ? 100 : statusBar->CPlayer->mo->GetMaxHealth(true);
if(max != 0 && goalValue > 0) if(max != 0 && goalValue > 0)
{ {
goalValue = (goalValue*100)/max; goalValue = (goalValue*100)/max;

View file

@ -1330,7 +1330,7 @@ bool P_GiveBody(AActor *actor, int num, int max)
// calls while supporting health pickups. // calls while supporting health pickups.
if (max <= 0) if (max <= 0)
{ {
max = static_cast<APlayerPawn*>(actor)->GetMaxHealth() + player->mo->stamina; max = static_cast<APlayerPawn*>(actor)->GetMaxHealth(true);
// [MH] First step in predictable generic morph effects // [MH] First step in predictable generic morph effects
if (player->morphTics) if (player->morphTics)
{ {

View file

@ -1350,15 +1350,18 @@ const char *APlayerPawn::GetSoundClass() const
// //
//=========================================================================== //===========================================================================
int APlayerPawn::GetMaxHealth() const int APlayerPawn::GetMaxHealth(bool withupgrades) const
{ {
return MaxHealth > 0? MaxHealth : ((i_compatflags&COMPATF_DEHHEALTH)? 100 : deh.MaxHealth); int ret = MaxHealth > 0? MaxHealth : ((i_compatflags&COMPATF_DEHHEALTH)? 100 : deh.MaxHealth);
if (withupgrades) ret += stamina;
return ret;
} }
DEFINE_ACTION_FUNCTION(APlayerPawn, GetMaxHealth) DEFINE_ACTION_FUNCTION(APlayerPawn, GetMaxHealth)
{ {
PARAM_SELF_PROLOGUE(APlayerPawn); PARAM_SELF_PROLOGUE(APlayerPawn);
ACTION_RETURN_INT(self->GetMaxHealth()); PARAM_BOOL_DEF(withupgrades);
ACTION_RETURN_INT(self->GetMaxHealth(withupgrades));
} }
//=========================================================================== //===========================================================================
@ -2869,7 +2872,7 @@ void P_PlayerThink (player_t *player)
// Apply degeneration. // Apply degeneration.
if (dmflags2 & DF2_YES_DEGENERATION) if (dmflags2 & DF2_YES_DEGENERATION)
{ {
int maxhealth = player->mo->GetMaxHealth() + player->mo->stamina; int maxhealth = player->mo->GetMaxHealth(true);
if ((level.time % TICRATE) == 0 && player->health > maxhealth) if ((level.time % TICRATE) == 0 && player->health > maxhealth)
{ {
if (player->health - 5 < maxhealth) if (player->health - 5 < maxhealth)

View file

@ -166,7 +166,7 @@ class PlayerPawn : Actor native
return -1, -1; return -1, -1;
} }
native int GetMaxHealth(); native int GetMaxHealth(bool withupgrades = false);
native bool ResetAirSupply (bool playgasp = false); native bool ResetAirSupply (bool playgasp = false);
native void CheckWeaponSwitch(class<Inventory> item); native void CheckWeaponSwitch(class<Inventory> item);
native static String GetPrintableDisplayName(Class<Actor> cls); native static String GetPrintableDisplayName(Class<Actor> cls);

View file

@ -76,7 +76,7 @@ extend class PlayerPawn
} }
else else
{ {
player.health = health = GetMaxHealth(); player.health = health = GetMaxHealth(true);
} }
} }