diff --git a/src/d_player.h b/src/d_player.h index 05facd9fe..e09db38a3 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 5f7185a07..f89a560ab 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 633cc7f6e..6fd790731 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(); } @@ -2310,7 +2311,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; @@ -3246,6 +3247,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/src/scripting/zscript/zcc_compile.cpp b/src/scripting/zscript/zcc_compile.cpp index 57bfbd0ec..43f5b6774 100644 --- a/src/scripting/zscript/zcc_compile.cpp +++ b/src/scripting/zscript/zcc_compile.cpp @@ -1036,7 +1036,6 @@ bool ZCCCompiler::CompileFields(PStruct *type, TArray &Fiel { auto field = Fields[0]; FieldDesc *fd = nullptr; - FString str = FName(field->Names[0].Name).GetChars(); PType *fieldtype = DetermineType(type, field, field->Names->Name, field->Type, true, true); diff --git a/wadsrc/static/zscript/shared/player.txt b/wadsrc/static/zscript/shared/player.txt index c111de21c..88b0746e1 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 {