Today I learned that SPAC_Impact lines can still be activated by hitscan that crosses through them and this is intended vanilla behavior.

This commit is contained in:
Mari the Deer 2020-12-22 01:34:43 +01:00
commit 41fe50886c
6 changed files with 15 additions and 14 deletions

View file

@ -5,7 +5,7 @@ world/lavasizzle acid5
world/sludgegloop muck5
//you can override the limit values so multiple splashes can play simultaneously
//note that this sounds bad if multiple splashes play all at once (such as when firing a shotgun into liquid), so override these values at your own discretion
/*$Limit world/drip 4
$Limit world/drip 4
$Limit world/watersplash 4
$Limit world/lavasizzle 4
$Limit world/sludgegloop 4*/
$Limit world/sludgegloop 4

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r696 \cu(Tue 22 Dec 00:19:52 CET 2020)";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r697 \cu(Tue 22 Dec 01:34:43 CET 2020)";

View file

@ -1370,7 +1370,7 @@ Class SWWMBulletTrail : LineTracer
Array<Line> ShootThroughList;
Actor ignoreme;
static play void DoTrail( Actor target, Vector3 pos, Vector3 dir, int dist, int bubblechance, bool smoky = false )
static play void DoTrail( Actor target, Vector3 pos, Vector3 dir, double dist, int bubblechance, bool smoky = false )
{
let t = new("SWWMBulletTrail");
t.ignoreme = target;
@ -1379,9 +1379,9 @@ Class SWWMBulletTrail : LineTracer
t.Trace(pos,level.PointInSector(pos.xy),dir,dist,0);
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
{
// have to do both because WOW, HOW THE FUCK IS THIS INTENTIONAL???
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
}
for ( int i=0; i<t.WaterHitList.Size(); i++ )
{

View file

@ -320,6 +320,7 @@ Class DeepImpact : SWWMWeapon
t.hitlist.Clear();
t.hitdist.Clear();
t.Trace(origin,level.PointInSector(origin.xy),dir,150-i*120,0);
SWWMBulletTrail.DoTrail(self,origin,dir,150-i*120,0);
for ( int i=0; i<t.hitlist.Size(); i++ )
{
int inl = -1;
@ -353,6 +354,7 @@ Class DeepImpact : SWWMWeapon
if ( t.Results.FFloor ) hitnormal = -t.Results.FFloor.top.Normal;
else hitnormal = t.Results.HitSector.floorplane.Normal;
wnorm += (hitnormal*.2-dir)/max(50.,t.Results.Distance);
Spawn("InvisibleSplasher",t.Results.HitPos);
}
else if ( t.Results.HitType == TRACE_HitCeiling )
{

View file

@ -878,7 +878,6 @@ Class UseList
Class UseLineTracer : LineTracer
{
Array<UseList> uses;
Array<Line> glass;
static play bool TangibleLine( UseList u )
{
@ -946,8 +945,6 @@ Class UseLineTracer : LineTracer
{
if ( !Results.HitLine.sidedef[1] || (Results.HitLine.Flags&(Line.ML_BlockHitscan|Line.ML_BlockEverything|Line.ML_BlockUse)) )
return TRACE_Stop;
if ( Results.HitLine.special == GlassBreak ) // fuck glass
glass.Push(Results.HitLine);
return TRACE_Skip;
}
}
@ -1390,11 +1387,12 @@ Class SWWMWeapon : Weapon abstract
}
action void A_Melee( int dmg = 40, String hitsound = "", double rangemul = 1. )
{
Vector3 origin = Vec3Offset(0,0,player.viewheight);
Vector3 dir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch));
// check for usables
let ut = new("UseLineTracer");
ut.uses.Clear();
ut.glass.Clear();
ut.Trace(Vec3Offset(0,0,player.viewheight),CurSector,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch)),DEFMELEERANGE*rangemul,0);
ut.Trace(origin,CurSector,dir,DEFMELEERANGE*rangemul,0);
invoker.wallponch = true;
for ( int i=0; i<ut.uses.Size(); i++ )
{
@ -1414,9 +1412,8 @@ Class SWWMWeapon : Weapon abstract
}
}
invoker.wallponch = false;
// fuck glass
for ( int i=0; i<ut.glass.Size(); i++ )
ut.glass[i].Activate(self,0,SPAC_Impact);
// check for shootables
SWWMBulletTrail.DoTrail(self,origin,dir,DEFMELEERANGE*rangemul,0);
let raging = RagekitPower(FindInventory("RagekitPower"));
int maxang = raging?18:12;
for ( int i=0; i<maxang; i++ )

View file

@ -424,6 +424,7 @@ Class PusherWeapon : SWWMWeapon
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+2*y-3.5*z);
FLineTraceData d;
LineTrace(angle,60,pitch,TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
SWWMBulletTrail.DoTrail(self,origin,x,60,0);
if ( d.HitType != TRACE_HitNone )
{
A_QuakeEx(2,2,2,7,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.8);
@ -503,6 +504,7 @@ Class PusherWeapon : SWWMWeapon
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+2*y-3.5*z);
FLineTraceData d;
LineTrace(angle,80,pitch,TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
SWWMBulletTrail.DoTrail(self,origin,x,80,0);
bool gone = false;
if ( d.HitType != TRACE_HitNone )
{