diff --git a/src/d_player.h b/src/d_player.h index 05facd9fe8..e09db38a3c 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -150,6 +150,7 @@ public: int MugShotMaxHealth; int RunHealth; int PlayerFlags; + double FullHeight; TObjPtr InvFirst; // first inventory item displayed on inventory bar TObjPtr InvSel; // selected inventory item diff --git a/src/p_actionfunctions.cpp b/src/p_actionfunctions.cpp index 5f7185a072..f89a560ab9 100644 --- a/src/p_actionfunctions.cpp +++ b/src/p_actionfunctions.cpp @@ -6906,6 +6906,10 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetSize) self->LinkToWorld(&ctx); ACTION_RETURN_BOOL(false); } + if (self->player && self->player->mo == self) + { + self->player->mo->FullHeight = newheight; + } ACTION_RETURN_BOOL(true); } diff --git a/src/p_user.cpp b/src/p_user.cpp index af1fbbf2d4..c6b0a7d583 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -689,7 +689,8 @@ void APlayerPawn::Serialize(FSerializer &arc) ("userange", UseRange, def->UseRange) ("aircapacity", AirCapacity, def->AirCapacity) ("viewheight", ViewHeight, def->ViewHeight) - ("viewbob", ViewBob, def->ViewBob); + ("viewbob", ViewBob, def->ViewBob) + ("fullheight", FullHeight, def->FullHeight); } //=========================================================================== @@ -714,7 +715,7 @@ void APlayerPawn::BeginPlay () { Super::BeginPlay (); ChangeStatNum (STAT_PLAYER); - + FullHeight = Height; // Check whether a PWADs normal sprite is to be combined with the base WADs // crouch sprite. In such a case the sprites normally don't match and it is // best to disable the crouch sprite. @@ -766,11 +767,11 @@ void APlayerPawn::Tick() { if (player != NULL && player->mo == this && player->CanCrouch() && player->playerstate != PST_DEAD) { - Height = GetDefault()->Height * player->crouchfactor; + Height = FullHeight * player->crouchfactor; } else { - if (health > 0) Height = GetDefault()->Height; + if (health > 0) Height = FullHeight; } Super::Tick(); } @@ -2309,7 +2310,7 @@ void P_DeathThink (player_t *player) void P_CrouchMove(player_t * player, int direction) { - double defaultheight = player->mo->GetDefault()->Height; + double defaultheight = player->mo->FullHeight; double savedheight = player->mo->Height; double crouchspeed = direction * CROUCHSPEED; double oldheight = player->viewheight; @@ -3245,6 +3246,7 @@ DEFINE_FIELD(APlayerPawn, AirCapacity) DEFINE_FIELD(APlayerPawn, FlechetteType) DEFINE_FIELD(APlayerPawn, DamageFade) DEFINE_FIELD(APlayerPawn, ViewBob) +DEFINE_FIELD(APlayerPawn, FullHeight) DEFINE_FIELD(PClassPlayerPawn, HealingRadiusType) DEFINE_FIELD(PClassPlayerPawn, DisplayName) diff --git a/wadsrc/static/zscript/shared/player.txt b/wadsrc/static/zscript/shared/player.txt index 73b00a269c..d4992e97f1 100644 --- a/wadsrc/static/zscript/shared/player.txt +++ b/wadsrc/static/zscript/shared/player.txt @@ -37,6 +37,7 @@ class PlayerPawn : Actor native native Class FlechetteType; native color DamageFade; // [CW] Fades for when you are being damaged. native double ViewBob; // [SP] ViewBob Multiplier + native double FullHeight; Default {