Testing changes for GZDoom 4.11/5.0.
This commit is contained in:
parent
75ffce1627
commit
d0fddbf8a3
24 changed files with 104 additions and 331 deletions
|
|
@ -42,13 +42,14 @@ Class Demolitionist : PlayerPawn
|
|||
|
||||
double guideangle, guidepitch, guideroll;
|
||||
|
||||
// for weapon bobbing stuff
|
||||
// for weapon bobbing and stuff
|
||||
double bumpvelz, bumpangle, bumppitch, bumproll;
|
||||
double oldangle, oldpitch, oldroll;
|
||||
double oldlagangle, oldlagpitch, oldlagroll, oldlagready;
|
||||
Vector3 oldlagvel;
|
||||
double lagangle, lagpitch, lagroll, lagready;
|
||||
Vector3 lagvel;
|
||||
|
||||
Vector3 oldangles;
|
||||
Vector3 oldlagangles, lagangles;
|
||||
Vector3 oldlagdangles, lagdangles;
|
||||
Vector3 oldlagvel, lagvel;
|
||||
double oldlagready, lagready;
|
||||
|
||||
enum EUnderType
|
||||
{
|
||||
|
|
@ -143,6 +144,8 @@ Class Demolitionist : PlayerPawn
|
|||
Player.ForwardMove 1., 1.;
|
||||
Player.SideMove 1., 1.;
|
||||
Player.SoundClass "demolitionist";
|
||||
Player.FlyBob 0.;
|
||||
Player.WaterClimbSpeed 0.;
|
||||
DamageFactor "Drowning", 0.;
|
||||
DamageFactor "Poison", 0.;
|
||||
DamageFactor "PoisonCloud", 0.;
|
||||
|
|
@ -180,6 +183,8 @@ Class Demolitionist : PlayerPawn
|
|||
Super.PostBeginPlay();
|
||||
lastground = true; // prevent sudden landing sound on map start
|
||||
blinktime = 30;
|
||||
// prevent jumpy weapon bob on game start
|
||||
oldangles = (angle,pitch,roll);
|
||||
// swap ourselves for a voodoo doll
|
||||
if ( !player || (player.mo != self) )
|
||||
{
|
||||
|
|
@ -327,7 +332,7 @@ Class Demolitionist : PlayerPawn
|
|||
if ( tbox[3] < l.bbox[2] ) continue;
|
||||
if ( tbox[0] < l.bbox[1] ) continue;
|
||||
if ( tbox[1] > l.bbox[0] ) continue;
|
||||
if ( SWWMUtility.BoxOnLineSide(tbox[0],tbox[1],tbox[2],tbox[3],l) != -1 ) continue;
|
||||
if ( Level.BoxOnLineSide(pos.xy,radius+8,l) != -1 ) continue;
|
||||
touching.Push(l);
|
||||
}
|
||||
let pi = swwm_PolyobjectIterator.Create();
|
||||
|
|
@ -441,8 +446,8 @@ Class Demolitionist : PlayerPawn
|
|||
return SWWMUtility.LerpVector2(prevbob,bob,ticfrac)*bobstr*clamp(viewbob,0.,1.5);
|
||||
}
|
||||
|
||||
// [4.11] proper 3D/2D weapon bob separation
|
||||
/*override Vector3, Vector3 BobWeapon3D( double ticfrac )
|
||||
// proper 3D weapon bob
|
||||
override Vector3, Vector3 BobWeapon3D( double ticfrac )
|
||||
{
|
||||
if ( !player || !player.ReadyWeapon || player.ReadyWeapon.bDontBob )
|
||||
return (0,0,0), (0,0,0);
|
||||
|
|
@ -450,33 +455,26 @@ Class Demolitionist : PlayerPawn
|
|||
player.WeaponState |= WF_WEAPONBOBBING; // always bob
|
||||
Vector2 cur = BobWeaponAngle(ticfrac);
|
||||
if ( !oldbob ) player.WeaponState &= ~WF_WEAPONBOBBING;
|
||||
double fangle = SWWMUtility.Lerp(oldangle,angle,ticfrac);
|
||||
double fpitch = SWWMUtility.Lerp(oldpitch,pitch,ticfrac);
|
||||
double froll = SWWMUtility.Lerp(oldroll,roll,ticfrac);
|
||||
double flagangle = SWWMUtility.Lerp(oldlagangle,lagangle,ticfrac);
|
||||
double flagpitch = SWWMUtility.Lerp(oldlagpitch,lagpitch,ticfrac);
|
||||
double flagroll = SWWMUtility.Lerp(oldlagroll,lagroll,ticfrac);
|
||||
double diffang = fangle-flagangle;
|
||||
double diffpitch = fpitch-flagpitch;
|
||||
double diffroll = froll-flagroll;
|
||||
if ( abs(diffang) > 1. )
|
||||
Vector3 angles = SWWMUtility.LerpVector3(oldlagangles,lagangles,ticfrac);
|
||||
Vector3 dangles = SWWMUtility.LerpVector3(oldlagdangles,lagdangles,ticfrac);
|
||||
if ( abs(dangles.x) > 1. )
|
||||
{
|
||||
int sgn = (diffang>0)?1:-1;
|
||||
diffang = abs(diffang)**.7*sgn;
|
||||
int sgn = (dangles.x>0)?1:-1;
|
||||
dangles.x = abs(dangles.x)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffpitch) > 1. )
|
||||
if ( abs(dangles.y) > 1. )
|
||||
{
|
||||
int sgn = (diffpitch>0)?1:-1;
|
||||
diffpitch = abs(diffpitch)**.7*sgn;
|
||||
int sgn = (dangles.y>0)?1:-1;
|
||||
dangles.y = abs(dangles.y)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffroll) > 1. )
|
||||
if ( abs(dangles.z) > 1. )
|
||||
{
|
||||
int sgn = (diffroll>0)?1:-1;
|
||||
diffroll = abs(diffroll)**.7*sgn;
|
||||
int sgn = (dangles.z>0)?1:-1;
|
||||
dangles.z = abs(dangles.z)**.75*sgn;
|
||||
}
|
||||
Vector3 flagvel = SWWMUtility.LerpVector3(oldlagvel,lagvel,ticfrac);
|
||||
let [x, y, z] = SWWMUtility.GetAxes(flagangle,flagpitch,flagroll);
|
||||
let [x2, y2, z2] = SWWMUtility.GetAxes(flagangle,0,flagroll);
|
||||
let [x, y, z] = SWWMUtility.GetAxes(angles.x,angles.y,angles.z);
|
||||
let [x2, y2, z2] = SWWMUtility.GetAxes(angles.x,0,angles.z);
|
||||
double diffx = flagvel dot x;
|
||||
double diffy = flagvel dot y;
|
||||
double diffz = flagvel dot z;
|
||||
|
|
@ -485,35 +483,35 @@ Class Demolitionist : PlayerPawn
|
|||
if ( abs(diffx) > 1. )
|
||||
{
|
||||
int sgn = (diffx>0)?1:-1;
|
||||
diffx = abs(diffx)**.5*sgn;
|
||||
diffx = abs(diffx)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffy) > 1. )
|
||||
{
|
||||
int sgn = (diffy>0)?1:-1;
|
||||
diffy = abs(diffy)**.5*sgn;
|
||||
diffy = abs(diffy)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffz) > 1. )
|
||||
{
|
||||
int sgn = (diffz>0)?1:-1;
|
||||
diffz = abs(diffz)**.5*sgn;
|
||||
diffz = abs(diffz)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffy2) > 1. )
|
||||
{
|
||||
int sgn = (diffy2>0)?1:-1;
|
||||
diffy2 = abs(diffy2)**.5*sgn;
|
||||
diffy2 = abs(diffy2)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffz2) > 1. )
|
||||
{
|
||||
int sgn = (diffz2>0)?1:-1;
|
||||
diffz2 = abs(diffz2)**.5*sgn;
|
||||
diffz2 = abs(diffz2)**.75*sgn;
|
||||
}
|
||||
Vector3 bobvec = (diffy,-diffz,diffx)*20. + (cur.x,-cur.y,0)*10.;
|
||||
Vector3 bobang = (diffang,diffpitch,diffroll)*.1 - (cur.x,cur.y,0)*.04 - (diffy2,diffz2,0)*.2;
|
||||
Vector3 bobvec = (diffy,-diffz,diffx)*20. + (cur.x,-cur.y,cur.y)*15.;
|
||||
Vector3 bobang = (dangles.x,dangles.y,dangles.z)*.15 - (cur.x,cur.y,-cur.x*2.)*.05 - (diffy2,diffz2,0)*.02;
|
||||
double fready = SWWMUtility.Lerp(oldlagready,lagready,ticfrac);
|
||||
return bobvec*fready, bobang*fready;
|
||||
}
|
||||
|
||||
// compatibility with 2D weapons
|
||||
// compatibility with 2D weapons (may cause sprite cutoff)
|
||||
override Vector2 BobWeapon( double ticfrac )
|
||||
{
|
||||
if ( !player || !player.ReadyWeapon || player.ReadyWeapon.bDontBob )
|
||||
|
|
@ -522,88 +520,36 @@ Class Demolitionist : PlayerPawn
|
|||
player.WeaponState |= WF_WEAPONBOBBING; // always bob
|
||||
Vector2 cur = BobWeaponAngle(ticfrac);
|
||||
if ( !oldbob ) player.WeaponState &= ~WF_WEAPONBOBBING;
|
||||
double fangle = SWWMUtility.Lerp(oldangle,angle,ticfrac);
|
||||
double fpitch = SWWMUtility.Lerp(oldpitch,pitch,ticfrac);
|
||||
double flagangle = SWWMUtility.Lerp(oldlagangle,lagangle,ticfrac);
|
||||
double flagpitch = SWWMUtility.Lerp(oldlagpitch,lagpitch,ticfrac);
|
||||
double diffang = fangle-flagangle;
|
||||
double diffpitch = fpitch-flagpitch;
|
||||
if ( abs(diffang) > 1. )
|
||||
Vector3 angles = SWWMUtility.LerpVector3(oldlagangles,lagangles,ticfrac);
|
||||
Vector3 dangles = SWWMUtility.LerpVector3(oldlagdangles,lagdangles,ticfrac);
|
||||
if ( abs(dangles.x) > 1. )
|
||||
{
|
||||
int sgn = (diffang>0)?1:-1;
|
||||
diffang = abs(diffang)**.7*sgn;
|
||||
int sgn = (dangles.x>0)?1:-1;
|
||||
dangles.x = abs(dangles.x)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffpitch) > 1. )
|
||||
if ( abs(dangles.y) > 1. )
|
||||
{
|
||||
int sgn = (diffpitch>0)?1:-1;
|
||||
diffpitch = abs(diffpitch)**.7*sgn;
|
||||
int sgn = (dangles.y>0)?1:-1;
|
||||
dangles.y = abs(dangles.y)**.75*sgn;
|
||||
}
|
||||
cur.x += diffang*.4;
|
||||
cur.y -= diffpitch*.4;
|
||||
cur.x += dangles.x*.4;
|
||||
cur.y -= dangles.y*.4;
|
||||
Vector3 flagvel = SWWMUtility.LerpVector3(oldlagvel,lagvel,ticfrac);
|
||||
double flagroll = SWWMUtility.Lerp(oldlagroll,lagroll,ticfrac);
|
||||
let [x, y, z] = SWWMUtility.GetAxes(flagangle,0,flagroll);
|
||||
let [x, y, z] = SWWMUtility.GetAxes(angles.x,0,angles.z);
|
||||
double diffy = flagvel dot y;
|
||||
double diffz = flagvel dot z;
|
||||
if ( abs(diffy) > 1. )
|
||||
{
|
||||
int sgn = (diffy>0)?1:-1;
|
||||
diffy = abs(diffy)**.5*sgn;
|
||||
diffy = abs(diffy)**.75*sgn;
|
||||
}
|
||||
if ( abs(diffz) > 1. )
|
||||
{
|
||||
int sgn = (diffz>0)?1:-1;
|
||||
diffz = abs(diffz)**.5*sgn;
|
||||
diffz = abs(diffz)**.75*sgn;
|
||||
}
|
||||
cur.x -= diffy*.8;
|
||||
cur.y += diffz*.8;
|
||||
return cur*SWWMUtility.Lerp(oldlagready,lagready,ticfrac);
|
||||
}*/
|
||||
|
||||
override Vector2 BobWeapon( double ticfrac )
|
||||
{
|
||||
if ( !player || !player.ReadyWeapon || player.ReadyWeapon.bDontBob )
|
||||
return (0,0);
|
||||
bool oldbob = !!(player.WeaponState&WF_WEAPONBOBBING);
|
||||
player.WeaponState |= WF_WEAPONBOBBING; // always bob
|
||||
Vector2 cur = BobWeaponAngle(ticfrac);
|
||||
if ( !oldbob ) player.WeaponState &= ~WF_WEAPONBOBBING;
|
||||
double fangle = SWWMUtility.Lerp(oldangle,angle,ticfrac);
|
||||
double fpitch = SWWMUtility.Lerp(oldpitch,pitch,ticfrac);
|
||||
double flagangle = SWWMUtility.Lerp(oldlagangle,lagangle,ticfrac);
|
||||
double flagpitch = SWWMUtility.Lerp(oldlagpitch,lagpitch,ticfrac);
|
||||
double diffang = fangle-flagangle;
|
||||
double diffpitch = fpitch-flagpitch;
|
||||
if ( abs(diffang) > 1. )
|
||||
{
|
||||
int sgn = (diffang>0)?1:-1;
|
||||
diffang = abs(diffang)**.7*sgn;
|
||||
}
|
||||
if ( abs(diffpitch) > 1. )
|
||||
{
|
||||
int sgn = (diffpitch>0)?1:-1;
|
||||
diffpitch = abs(diffpitch)**.7*sgn;
|
||||
}
|
||||
cur.x += diffang*.4;
|
||||
cur.y -= diffpitch*.4;
|
||||
Vector3 flagvel = SWWMUtility.LerpVector3(oldlagvel,lagvel,ticfrac);
|
||||
double flagroll = SWWMUtility.Lerp(oldlagroll,lagroll,ticfrac);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = SWWMUtility.GetAxes(flagangle,0,flagroll);
|
||||
double diffy = flagvel dot y;
|
||||
double diffz = flagvel dot z;
|
||||
if ( abs(diffy) > 1. )
|
||||
{
|
||||
int sgn = (diffy>0)?1:-1;
|
||||
diffy = abs(diffy)**.5*sgn;
|
||||
}
|
||||
if ( abs(diffz) > 1. )
|
||||
{
|
||||
int sgn = (diffz>0)?1:-1;
|
||||
diffz = abs(diffz)**.5*sgn;
|
||||
}
|
||||
cur.x -= diffy*.8;
|
||||
cur.y += diffz*.8;
|
||||
cur.x -= diffy*.4;
|
||||
cur.y += diffz*.4;
|
||||
return cur*SWWMUtility.Lerp(oldlagready,lagready,ticfrac);
|
||||
}
|
||||
|
||||
|
|
@ -752,6 +698,13 @@ Class Demolitionist : PlayerPawn
|
|||
dashboost = 0.;
|
||||
// prevent sudden stomping if we were previously falling
|
||||
lastvelz = vel.z;
|
||||
// clear bob data
|
||||
oldlagangles = lagangles = oldangles = (angle,pitch,roll);
|
||||
oldlagdangles = lagdangles = (0.,0.,0.);
|
||||
oldlagvel = lagvel = vel;
|
||||
bumpvelz = bumpangle = bumppitch = bumproll = 0.;
|
||||
ViewAngle = ViewPitch = ViewRoll = 0.;
|
||||
SetViewPos((0.,0.,0.));
|
||||
// early cancel gestures
|
||||
if ( player )
|
||||
{
|
||||
|
|
@ -783,14 +736,15 @@ Class Demolitionist : PlayerPawn
|
|||
// reset all smooth bob variables if angles/velocity aren't carried over
|
||||
if ( !(flags&TELF_KEEPORIENTATION) )
|
||||
{
|
||||
oldlagangle = lagangle = oldangle = angle;
|
||||
oldlagpitch = lagpitch = oldpitch = pitch;
|
||||
oldlagroll = lagroll = oldroll = roll;
|
||||
oldlagangles = lagangles = oldangles = (angle,pitch,roll);
|
||||
oldlagdangles = lagdangles = (0.,0.,0.);
|
||||
bumpangle = bumppitch = bumproll = 0.;
|
||||
}
|
||||
if ( !(flags&TELF_KEEPVELOCITY) )
|
||||
{
|
||||
oldlagvel = lagvel = vel;
|
||||
lastvelz = vel.z;
|
||||
bumpvelz = 0.;
|
||||
}
|
||||
// notify carried lamp that we just moved
|
||||
let l = SWWMLamp(FindInventory("SWWMLamp"));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue