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 0000000..c4c3781 Binary files /dev/null and b/sounds/Blland01.ogg differ 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