1.0.1 release:

- Prevent the hacky player select See state from being used ingame.
 - Increase armor bonus amount per pickup to 5, like in Doomreal.
 - Add BasicArmor amount to HUD, for compatibility in case it's ever used.
 - Replacements now respect IsFinal.
 - Fix alignment of custom usable item icons in HUD.
 - Revert to vanilla physics if player is frozen/totallyfrozen.
 - Correct water level checks for swimming physics.
 - Allow crouch-jumping and crouching while swimming. This goes against vanilla
   behaviour but it would break a lot of maps otherwise.
This commit is contained in:
Marisa the Magician 2019-10-28 10:49:32 +01:00
commit d45dd3f5bb
4 changed files with 37 additions and 30 deletions

View file

@ -61,7 +61,7 @@ This mod requires GZDoom 4.2.3 or later.
## In progress ## In progress
- N/A, this is the 1.0 release - N/A, this is the 1.0.1 release
## Planned ## Planned

View file

@ -62,7 +62,7 @@ Class UTArmorBonus : UTArmor
{ {
Tag "$T_ARMORBONUS"; Tag "$T_ARMORBONUS";
+COUNTITEM; +COUNTITEM;
Inventory.Amount 1; Inventory.Amount 5;
Inventory.MaxAmount 50; Inventory.MaxAmount 50;
Inventory.InterHubAmount 50; Inventory.InterHubAmount 50;
UTArmor.ArmorAbsorption 25; UTArmor.ArmorAbsorption 25;

View file

@ -238,6 +238,8 @@ Class UTPlayer : DoomPlayer
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( InStateSequence(CurState,FindState("See",true)) )
SetStateLabel("See2");
if ( !player || (player.mo != self) ) return; if ( !player || (player.mo != self) ) return;
if ( flak_utmovement ) if ( flak_utmovement )
{ {
@ -386,7 +388,7 @@ Class UTPlayer : DoomPlayer
override void MovePlayer() override void MovePlayer()
{ {
if ( !flak_utmovement || !player || (player.mo != self) ) if ( !flak_utmovement || !player || (player.mo != self) || (player.cheats&(CF_FROZEN|CF_TOTALLYFROZEN)) )
{ {
Super.MovePlayer(); Super.MovePlayer();
return; return;
@ -457,7 +459,7 @@ Class UTPlayer : DoomPlayer
} }
} }
last_sm = sm; last_sm = sm;
if ( !bNoGravity && player.onground && (waterlevel < 2) ) if ( !bNoGravity && player.onground && (waterlevel < 3) )
{ {
if ( flak_tapdodge && (dodge.length() > 0) && !tempslide ) if ( flak_tapdodge && (dodge.length() > 0) && !tempslide )
{ {
@ -521,7 +523,7 @@ Class UTPlayer : DoomPlayer
else player.vel = vel.xy; else player.vel = vel.xy;
} }
} }
else if ( !bNoGravity && (waterlevel < 2) ) else if ( !bNoGravity && (waterlevel < 1) )
{ {
// air acceleration when falling // air acceleration when falling
float maxaccel = accelrate/TICRATE; float maxaccel = accelrate/TICRATE;
@ -639,7 +641,9 @@ Class UTPlayer : DoomPlayer
return; return;
} }
if ( player.cmd.buttons&BT_JUMP ) player.cmd.buttons &= ~BT_CROUCH; if ( player.cmd.buttons&BT_JUMP ) player.cmd.buttons &= ~BT_CROUCH;
if ( CanCrouch() && (player.health > 0) && level.IsCrouchingAllowed() && player.onground ) // in UT you can't crouch unless you're on the ground // in UT you can't crouch unless you're on the ground
// however for the sake of compatibility with a whole lot of maps, crouch-jumping will be a thing here
if ( CanCrouch() && (player.health > 0) && level.IsCrouchingAllowed() )
{ {
if ( !totallyfrozen ) if ( !totallyfrozen )
{ {
@ -694,10 +698,10 @@ Class UTPlayer : DoomPlayer
override void DeathThink() override void DeathThink()
{ {
Super.DeathThink(); Super.DeathThink();
if ( !flak_utmovement ) return; if ( !flak_utmovement || !player || (player.mo != self) || (player.cheats&(CF_FROZEN|CF_TOTALLYFROZEN)) ) return;
// unreal physics while dead // unreal physics while dead
double friction = FrictionToUnreal(); double friction = FrictionToUnreal();
if ( !bNoGravity && player.onground && (waterlevel < 2) ) if ( !bNoGravity && player.onground && (waterlevel < 3) )
{ {
// Hook in Unreal physics // Hook in Unreal physics
Vector2 dir = (0,0); Vector2 dir = (0,0);
@ -713,7 +717,7 @@ Class UTPlayer : DoomPlayer
if ( vel.xy.length() > maxvel ) vel.xy = vel.xy.unit()*maxvel; if ( vel.xy.length() > maxvel ) vel.xy = vel.xy.unit()*maxvel;
player.vel *= 0; player.vel *= 0;
} }
else if ( !bNoGravity && (waterlevel < 2) ) else if ( !bNoGravity && (waterlevel < 1) )
{ {
// air acceleration when falling // air acceleration when falling
Vector2 dir = (0,0); Vector2 dir = (0,0);
@ -820,13 +824,7 @@ Class UTPlayer : DoomPlayer
override void PlayIdle() override void PlayIdle()
{ {
if ( player.Health <= 0 ) return; if ( player.Health <= 0 ) return;
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) if ( !bNoGravity && player.onground && (waterlevel < 3) )
{
// Crouching
if ( !InStateSequence(CurState,FindState("SpawnCrouch")) )
SetStateLabel("SpawnCrouch");
}
else if ( !bNoGravity && player.onground && (waterlevel < 2) )
{ {
// Ground // Ground
if ( (player && (player.mo == self)) && player.cmd.yaw ) if ( (player && (player.mo == self)) && player.cmd.yaw )
@ -841,6 +839,12 @@ Class UTPlayer : DoomPlayer
|| InStateSequence(CurState,FindState("Spawn")+1) ) || InStateSequence(CurState,FindState("Spawn")+1) )
SetStateLabel("Turn"); SetStateLabel("Turn");
} }
else if ( player.crouchdir == -1 )
{
// Crouching
if ( !InStateSequence(CurState,FindState("SpawnCrouch")) )
SetStateLabel("SpawnCrouch");
}
else else
{ {
if ( InStateSequence(CurState,FindState("See2")) if ( InStateSequence(CurState,FindState("See2"))
@ -853,7 +857,7 @@ Class UTPlayer : DoomPlayer
SetStateLabel("Spawn"); SetStateLabel("Spawn");
} }
} }
else if ( !bNoGravity && (waterlevel < 2) ) else if ( !bNoGravity && (waterlevel < 1) )
{ {
// Falling // Falling
if ( InStateSequence(CurState,FindState("See2")) if ( InStateSequence(CurState,FindState("See2"))
@ -884,16 +888,16 @@ Class UTPlayer : DoomPlayer
override void PlayRunning() override void PlayRunning()
{ {
if ( player.Health <= 0 ) return; if ( player.Health <= 0 ) return;
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) if ( !bNoGravity && player.onground && (waterlevel < 3) )
{
// Crouching
if ( !InStateSequence(CurState,FindState("SeeCrouch")) )
SetStateLabel("SeeCrouch");
}
else if ( !bNoGravity && player.onground && (waterlevel < 2) )
{ {
// Ground // Ground
if ( InStateSequence(CurState,FindState("Spawn")) if ( player.crouchdir == -1 )
{
// Crouching
if ( !InStateSequence(CurState,FindState("SeeCrouch")) )
SetStateLabel("SeeCrouch");
}
else if ( InStateSequence(CurState,FindState("Spawn"))
|| InStateSequence(CurState,FindState("SpawnAir")) || InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnSwim")) || InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch")) || InStateSequence(CurState,FindState("SpawnCrouch"))
@ -903,7 +907,7 @@ Class UTPlayer : DoomPlayer
|| InStateSequence(CurState,FindState("Turn")) ) || InStateSequence(CurState,FindState("Turn")) )
SetStateLabel("See2"); SetStateLabel("See2");
} }
else if ( !bNoGravity && (waterlevel < 2) ) else if ( !bNoGravity && (waterlevel < 1) )
{ {
// Falling // Falling
if ( InStateSequence(CurState,FindState("Spawn")) if ( InStateSequence(CurState,FindState("Spawn"))
@ -1268,7 +1272,7 @@ Class UTUnderSound : Actor
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( !target ) if ( !target || !target.player || (target.waterlevel < 3) )
{ {
Destroy(); Destroy();
return; return;
@ -2838,6 +2842,7 @@ Class UTMainHandler : EventHandler
override void CheckReplacement( ReplaceEvent e ) override void CheckReplacement( ReplaceEvent e )
{ {
if ( e.IsFinal ) return;
if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') ) if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') )
{ {
if ( Random[Replacements](0,1) ) e.Replacement = 'UTChainsaw'; if ( Random[Replacements](0,1) ) e.Replacement = 'UTChainsaw';

View file

@ -497,6 +497,8 @@ Class UTHud : BaseStatusBar
if ( a ) allarmor += a.amount; if ( a ) allarmor += a.amount;
if ( t ) allarmor += t.amount; if ( t ) allarmor += t.amount;
if ( s ) allarmor += s.amount; if ( s ) allarmor += s.amount;
let ba = CPlayer.mo.FindInventory("BasicArmor");
if ( ba ) allarmor += ba.amount;
CurX += 8*hudsize*HScale; CurX += 8*hudsize*HScale;
CurY += 14*hudsize*HScale; CurY += 14*hudsize*HScale;
if ( !showstatus && b ) DrawColor = GoldColor; if ( !showstatus && b ) DrawColor = GoldColor;
@ -748,7 +750,7 @@ Class UTHud : BaseStatusBar
Vector2 scl = TexMan.GetScaledSize(itm.Icon); Vector2 scl = TexMan.GetScaledSize(itm.Icon);
double mscl = 56./max(scl.x,scl.y); double mscl = 56./max(scl.x,scl.y);
CurX = BaseX+(4+(56.-scl.x*mscl)/2.)*hudsize*HScale; CurX = BaseX+(4+(56.-scl.x*mscl)/2.)*hudsize*HScale;
CurY = BaseY+4*hudsize*HScale; CurY = BaseY+(4+(56.-scl.y*mscl)/2.)*hudsize*HScale;
UTDrawTintedTex(itm.Icon,hudsize*mscl); UTDrawTintedTex(itm.Icon,hudsize*mscl);
// amount if >1 // amount if >1
if ( itm.Amount > 1 ) if ( itm.Amount > 1 )
@ -795,7 +797,7 @@ Class UTHud : BaseStatusBar
Vector2 scl = TexMan.GetScaledSize(LastItem); Vector2 scl = TexMan.GetScaledSize(LastItem);
double mscl = 56./max(scl.x,scl.y); double mscl = 56./max(scl.x,scl.y);
CurX += (4+(56.-scl.x*mscl)/2.)*hudsize*HScale; CurX += (4+(56.-scl.x*mscl)/2.)*hudsize*HScale;
CurY += 4*hudsize*HScale; CurY += (4+(56.-scl.y*mscl)/2.)*hudsize*HScale;
UTDrawTintedTex(LastItem,hudsize*mscl); UTDrawTintedTex(LastItem,hudsize*mscl);
if ( LastAmount <= 1 ) return; if ( LastAmount <= 1 ) return;
CurX = 32*hudsize*HScale; CurX = 32*hudsize*HScale;
@ -809,7 +811,7 @@ Class UTHud : BaseStatusBar
Vector2 scl = TexMan.GetScaledSize(CPlayer.mo.InvSel.Icon); Vector2 scl = TexMan.GetScaledSize(CPlayer.mo.InvSel.Icon);
double mscl = 56./max(scl.x,scl.y); double mscl = 56./max(scl.x,scl.y);
CurX += (4+(56.-scl.x*mscl)/2.)*hudsize*HScale; CurX += (4+(56.-scl.x*mscl)/2.)*hudsize*HScale;
CurY += 4*hudsize*HScale; CurY += (4+(56.-scl.y*mscl)/2.)*hudsize*HScale;
UTDrawTintedTex(CPlayer.mo.InvSel.Icon,hudsize*mscl); UTDrawTintedTex(CPlayer.mo.InvSel.Icon,hudsize*mscl);
// amount if >1 // amount if >1
if ( CPlayer.mo.InvSel.Amount <= 1 ) return; if ( CPlayer.mo.InvSel.Amount <= 1 ) return;