Additional tweakery. Update readme and other stuff.

This commit is contained in:
Mari the Deer 2021-03-16 22:35:34 +01:00
commit 7d112ab05c
9 changed files with 109 additions and 23 deletions

View file

@ -86,6 +86,8 @@ Class Demolitionist : PlayerPawn
Player.ViewHeight 52;
Player.AirCapacity 0;
Player.GruntSpeed 20;
Player.ForwardMove 1., 1.5;
Player.SideMove 1., 1.5;
Player.SoundClass "demolitionist";
DamageFactor "Drowning", 0.;
DamageFactor "Poison", 0.;
@ -99,6 +101,16 @@ Class Demolitionist : PlayerPawn
+DONTDRAIN;
+DONTCORPSE;
}
// oof
clearscope Vector2 NormalizedMove()
{
if ( !(player.cmd.forwardmove|player.cmd.sidemove) )
return (0,0);
Vector2 mvec = (player.cmd.forwardmove,-player.cmd.sidemove);
double maxmag = max(abs(mvec.x),abs(mvec.y));
mvec /= mvec.length();
return mvec*maxmag;
}
// oh yay, more cheat modification
override void CheatGive( String name, int amount )
{
@ -861,7 +873,12 @@ Class Demolitionist : PlayerPawn
A_AlertMonsters(swwm_uncapalert?0:2500);
bpitch = min(bpitch+30,60);
lastbump *= 1.3;
if ( FindInventory("RagekitPower") ) ReactionTime = 4;
if ( FindInventory("RagekitPower") )
{
// stop for just a split second UNLESS bunnyhopping
if ( !(player.cmd.buttons&BT_RUN) || (level.maptime >= (lastairtic+10)) )
ReactionTime = 6;
}
else
{
A_Stop();
@ -1429,7 +1446,8 @@ Class Demolitionist : PlayerPawn
if ( CanCrouch() && (player.crouchfactor != -1) ) fs *= player.crouchfactor;
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 accel = x*player.cmd.forwardmove+y*player.cmd.sidemove+z*jcmove;
Vector2 nmove = NormalizedMove();
Vector3 accel = x*nmove.x-y*nmove.y+z*jcmove;
accel *= fs/320.;
double spd = vel.length();
if ( spd > 40. ) vel = (vel+accel/GameTicRate).unit()*spd;
@ -1447,23 +1465,75 @@ Class Demolitionist : PlayerPawn
}
else
{
Super.MovePlayer();
if ( player.turnticks )
{
player.turnticks--;
angle = (180./TURN180_TICKS);
}
else angle += player.cmd.yaw*(360./65536.);
player.onground = (pos.z<=floorz)||bOnMobj||bMBFBouncer||(player.cheats&CF_NOCLIP2);
if ( player.cmd.forwardmove|player.cmd.sidemove )
{
double forwardmove, sidemove;
double bobfactor;
double friction, movefactor;
double fm, sm;
[friction, movefactor] = GetFriction();
bobfactor = (friction<ORIG_FRICTION)?movefactor:ORIG_FRICTION_FACTOR;
if ( !player.onground && !bNoGravity && !waterlevel )
{
// [RH] allow very limited movement if not on ground.
movefactor *= level.aircontrol;
bobfactor*= level.aircontrol;
}
// use normalized movement vector, no SR40 (not that we need it with how fast we can run)
Vector2 nmove = NormalizedMove();
fm = nmove.x;
sm = -nmove.y;
[fm, sm] = TweakSpeeds(fm,sm);
fm *= Speed/256.;
sm *= Speed/256.;
if ( !(player.cmd.buttons&BT_RUN) ) bobfactor *= .5;
// When crouching, speed and bobbing have to be reduced
if ( CanCrouch() && (player.crouchfactor != 1) )
{
fm *= player.crouchfactor;
sm *= player.crouchfactor;
bobfactor *= player.crouchfactor;
}
forwardmove = fm*movefactor;
sidemove = sm*movefactor;
if ( forwardmove )
{
Bob(Angle,player.cmd.forwardmove*bobfactor/256.,true);
ForwardThrust(forwardmove,Angle);
}
if ( sidemove )
{
let a = Angle-90;
Bob(a,player.cmd.sidemove*bobfactor/256.,false);
Thrust(sidemove,a);
}
if ( !(player.cheats&CF_PREDICTING) && (forwardmove || sidemove) )
PlayRunning();
if ( player.cheats&CF_REVERTPLEASE )
{
player.cheats &= ~CF_REVERTPLEASE;
player.camera = player.mo;
}
}
// override air control because we REALLY need the extra mobility
if ( !player.onground && !bNOGRAVITY && (waterlevel < 2) )
{
double fs = TweakSpeeds(1.,0.);
if ( CanCrouch() && (player.crouchfactor != -1) ) fs *= player.crouchfactor;
Vector3 accel = (RotateVector((player.cmd.forwardmove,-player.cmd.sidemove),angle),0);
Vector3 accel = (RotateVector(NormalizedMove(),angle),0);
accel *= fs/512.;
double spd = vel.length();
if ( spd > 10. ) vel = (vel+accel/GameTicRate).unit()*spd;
else vel = vel+accel/GameTicRate;
}
else if ( player.onground && !bNOGRAVITY && (waterlevel < 2) )
{
// quickly decelerate if we're not holding movement keys
if ( !(player.cmd.forwardmove|player.cmd.sidemove) ) vel *= .95;
}
else vel *= .95; // quickly decelerate if we're not holding movement keys
if ( abs(roll) > 0. ) A_SetRoll(roll+clamp(deltaangle(roll,0),-3.,3.),SPF_INTERPOLATE);
}
guideangle *= .9;
@ -1611,7 +1681,8 @@ Class Demolitionist : PlayerPawn
}
}
if ( jumpfac > 0 ) jumpvelz *= jumpfac;
if ( FindInventory("RagekitPower") ) jumpvelz *= 2.;
bool raging = FindInventory("RagekitPower");
if ( raging ) jumpvelz *= 2.;
double pvelz = vel.z;
if ( !player.onground && !(player.cheats&CF_PREDICTING) )
{
@ -1634,7 +1705,7 @@ Class Demolitionist : PlayerPawn
{
SWWMUtility.DoKnockback(jumpactor,(-walldir,0),12000);
int dmg = jumpactor.DamageMobj(self,self,10,'Jump');
if ( FindInventory("RagekitPower") )
if ( raging )
{
let ps = Spawn("BigPunchSplash",pos);
ps.damagetype = 'Jump';
@ -1680,16 +1751,22 @@ Class Demolitionist : PlayerPawn
if ( vel.z < 25. ) // don't ramp up too hard
vel.z += jumpvelz*(1.2+vel.length()*.01);
// accelerate
vel.xy += RotateVector((player.cmd.forwardmove,-player.cmd.sidemove),angle)/2400.;
vel.xy += (RotateVector(NormalizedMove(),angle)/2400.)*(1.+vel.length()*.025)*TweakSpeeds(1.,0.);
}
else
{
// first jump
if ( vel.z < 10. ) // don't ramp up too hard
vel.z += (walljump||wallclimb||(player.cmd.buttons&BT_RUN))?(jumpvelz*1.25):jumpvelz; // higher jump if running or wall jumping
{
// multiplier factors
double mult = (player.cmd.buttons&BT_RUN)?1.25:1.;
if ( walljump ) mult *= 1.25;
if ( wallclimb ) mult *= 1.35;
vel.z += jumpvelz*mult;
}
// long jump if running
if ( !walljump && !wallclimb && (player.cmd.buttons&BT_RUN) )
vel.xy += RotateVector((player.cmd.forwardmove,-player.cmd.sidemove),angle)/1200.;
(vel.xy += RotateVector(NormalizedMove(),angle)/1500.)*(raging?2.:1.)*TweakSpeeds(1.,0.);
}
}
SetStateLabel("Jump");
@ -2242,7 +2319,7 @@ Class Demolitionist : PlayerPawn
A_StartSound("demolitionist/run",CHAN_FOOTSTEP,CHANF_OVERLAP,vol);
let b = Spawn("InvisibleSplasher",level.Vec3Offset(pos,(RotateVector((0,yofs*.25*radius),angle),0)));
b.A_CheckTerrain();
vel.xy += RotateVector((player.cmd.forwardmove,-player.cmd.sidemove),angle)/2000.;
vel.xy += (RotateVector(NormalizedMove(),angle)/2000.)*TweakSpeeds(1.,0.);
}
else
{