From c0c4023adf7f693290a4932eca7b1bba7895317c Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Wed, 11 Sep 2019 16:52:02 +0200 Subject: [PATCH] Additional 3D floor support code. Added missing boss land grunt from beta files. Correction: A specific death sound for male and female classes is meant to be used for decapitation. --- sndinfo.txt | 14 ++++---- sounds/Blland01.ogg | Bin 0 -> 6590 bytes zscript/biorifle.zsc | 76 ++++++++++++++++++++++++++++++----------- zscript/shockrifle.zsc | 66 ++++++++++++++++++++++++++++++++--- 4 files changed, 126 insertions(+), 30 deletions(-) create mode 100644 sounds/Blland01.ogg diff --git a/sndinfo.txt b/sndinfo.txt index 2efbb9b..a2c738d 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -8,7 +8,7 @@ $random ut/maledie { ut/maledie1 ut/maledie2 ut/maledie3 } ut/malexdie1 deathc51 ut/malexdie2 deathc52 ut/malexdie3 deathc53 -$random ut/malexdie { ut/malexdie1 ut/malexdie2 ut/malexdie3 } +$random ut/malexdie { ut/malexdie1 ut/malexdie3 } ut/gibp newgib ut/malepain1 injurl2 ut/malepain2 injurl04 @@ -48,6 +48,7 @@ $playeralias tmale1 neutral *usefail ut/malehump1 $playeralias tmale1 neutral *surface ut/malesurface $playeralias tmale1 neutral *gasp ut/malegasp +$playeralias tmale1 neutral *death-decapitated ut/malexdie2 $playeralias tmale1 neutral *death-drowning ut/maledrowned $playeralias tmale1 neutral *xdeath-drowning ut/maledrowned $playeralias tmale1 neutral *pain100-drowning ut/maledrowning @@ -81,7 +82,7 @@ ut/femaledie1 decap01 ut/femaledie2 death1d ut/femaledie3 death2a ut/femaledie4 death3c -$random ut/femaledie { ut/femaledie1 ut/femaledie2 ut/femaledie3 } +$random ut/femaledie { ut/femaledie4 ut/femaledie2 ut/femaledie3 } ut/femalexdie1 death41 ut/femalexdie2 death42 $random ut/femalexdie { ut/femalexdie1 ut/femalexdie2 } @@ -112,6 +113,7 @@ $playeralias tfemale neutral *usefail ut/femalegrunt $playeralias tfemale neutral *surface ut/femalesurf $playeralias tfemale neutral *gasp ut/femalegasp +$playeralias tfemale neutral *death-decapitated ut/femaledie1 $playeralias tfemale neutral *death-drowning ut/femaledrowned $playeralias tfemale neutral *xdeath-drowning ut/femaledrowned $playeralias tfemale neutral *pain100-drowning ut/femaledrowning @@ -131,9 +133,9 @@ ut/bosspain1 binjur1 ut/bosspain2 binjur2 ut/bosspain3 binjur3 ut/bosspain4 binjur4 -ut/bossgrunt bland01 +ut/bossgrunt blland01 +ut/bossland bland01 ut/bossjump bjump1 -ut/bosshump bjump1 $playeralias tboss neutral *death ut/bossdie $playeralias tboss neutral *xdeath ut/bossxdie @@ -144,9 +146,9 @@ $playeralias tboss neutral *pain50 ut/bosspain3 $playeralias tboss neutral *pain25 ut/bosspain4 $playeralias tboss neutral *grunt ut/bossgrunt $playeralias tboss neutral *land DSEMPTY -$playeralias tboss neutral *uland ut/bossgrunt +$playeralias tboss neutral *uland ut/bossland $playeralias tboss neutral *jump ut/bossjump -$playeralias tboss neutral *usefail ut/bosshump +$playeralias tboss neutral *usefail ut/bossgrunt $playeralias tboss neutral *surface ut/malesurf $playeralias tboss neutral *gasp ut/malegasp diff --git a/sounds/Blland01.ogg b/sounds/Blland01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c4c37818dcc99ee0c00d49aa8ca7147843ae4a87 GIT binary patch literal 6590 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 literal 0 HcmV?d00001 diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 93459b8..c7c2c61 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -241,7 +241,7 @@ Class BioGel : Actor } else if ( atsector ) // attempt to follow the movement of the plane { - SetOrigin(Vec2OffsetZ(0,0,atz+cursector.GetPlaneTexZ(atplane)),true); + SetOrigin(Vec2OffsetZ(0,0,atz+atsector.GetPlaneTexZ(atplane)),true); if ( ceilingz-floorz <= 2 ) deadtimer = min(deadtimer,0); } } @@ -270,7 +270,9 @@ Class BioGel : Actor SetStateLabel("XDeath"); } } - // align self to what surface was hit, currently does not support 3d floors + slopes properly + // align self to what surface was hit + // TODO handle plane collision within the very border between two + // sectors (most noticeable with moving 3d floors) virtual void AlignSelf() { F3DFloor ff; @@ -386,41 +388,57 @@ Class BioGel : Actor else if ( BlockingFloor ) { // find closest 3d floor for its normal - for ( int i=0; i 0 ) hittype = HIT_FLOOR; else if ( normal dot (0,0,-1) > 0.7 ) hittype = HIT_CEILING; @@ -442,8 +460,26 @@ Class BioGel : Actor // attempt to guess line part (upper/mid/lower) if ( !atline.sidedef[1] ) atpart = 0; // mid else if ( atline.sidedef[atside?0:1].sector.ceilingplane.ZAtPoint(pos.xy) < pos.z ) atpart = 1; // upper - else if ( atline.sidedef[atside?0:1].sector.floorplane.ZAtPoint(pos.xy) > pos.z ) atpart = -1; // lower - else atpart = 0; + else if ( atline.sidedef[atside?0:1].sector.floorplane.ZAtPoint(pos.xy) > (pos.z+height) ) atpart = -1; // lower + else + { + atpart = 0; + // check if we're touching a 3d floor line + Sector backsector = atline.sidedef[atside?0:1].sector; + for ( int i=0; i (pos.z+height) ) continue; + if ( backsector.Get3DFloor(i).top.ZAtPoint(pos.xy) < pos.z ) continue; + ff = backsector.Get3DFloor(i); + break; + } + // attach to it + if ( ff ) + { + atline = ff.master; + atside = 0; + } + } if ( atpart == 1 ) { if ( atline.flags&Line.ML_DONTPEGTOP ) atz = pos.z-atline.sidedef[atside].sector.GetPlaneTexZ(1); diff --git a/zscript/shockrifle.zsc b/zscript/shockrifle.zsc index 872ead0..ed88756 100644 --- a/zscript/shockrifle.zsc +++ b/zscript/shockrifle.zsc @@ -841,8 +841,37 @@ Class ShockBall : Actor Spawn("ShockExplLight",pos); A_SetScale(1.0); let r = Spawn("ShockBeamRing",pos); - r.angle = angle; - r.pitch = pitch; + Vector3 HitNormal = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch)); + if ( BlockingLine ) HitNormal = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit(); + else if ( BlockingFloor ) + { + // find closest 3d floor for its normal + F3DFloor ff = null; + for ( int i=0; i