diff --git a/language.version b/language.version index 838d28312..7045b9bf1 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r790 \cu(Sat 11 Mar 01:07:15 CET 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r790 \cu(2023-03-11 01:07:15)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r791 \cu(Sat 11 Mar 01:27:09 CET 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r791 \cu(2023-03-11 01:27:09)\c-"; diff --git a/zscript/dlc1/swwm_heavymahsheengun.zsc b/zscript/dlc1/swwm_heavymahsheengun.zsc index 0a7c62229..5d2a404a9 100644 --- a/zscript/dlc1/swwm_heavymahsheengun.zsc +++ b/zscript/dlc1/swwm_heavymahsheengun.zsc @@ -159,7 +159,7 @@ Class HeavyMahSheenGun : SWWMWeapon st.hitlist.Clear(); st.shootthroughlist.Clear(); st.waterhitlist.Clear(); - st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,TRACE_HitSky,ignore:self); + st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,0,ignore:self); if ( swwm_omnibust ) { // Wall busting @@ -202,7 +202,7 @@ Class HeavyMahSheenGun : SWWMWeapon hit.HitActor.A_StartSound("misc/slughitf",CHAN_DAMAGE,CHANF_OVERLAP,1.,2.); } } - if ( (st.Results.HitType != TRACE_HitNone) && (st.Results.HitType != TRACE_HasHitSky) && (st.Results.HitType != TRACE_HitActor) ) + if ( (st.Results.HitType != TRACE_HitNone) && (st.Results.HitType != TRACE_HitActor) ) { Vector3 hitnormal = SWWMUtility.GetLineTracerHitNormal(st.Results); let p = Spawn("SWWMBulletImpact",st.Results.HitPos+hitnormal*4); diff --git a/zscript/dlc1/swwm_mister.zsc b/zscript/dlc1/swwm_mister.zsc index 58f060b99..b06ad22c3 100644 --- a/zscript/dlc1/swwm_mister.zsc +++ b/zscript/dlc1/swwm_mister.zsc @@ -76,11 +76,6 @@ Class MisterRailTracer : LineTracer } return TRACE_Skip; } - else if ( Results.HitType == TRACE_HasHitSky ) - { - fullstop = true; - return TRACE_Stop; - } else if ( Results.HitType != TRACE_HitNone ) { if ( Results.HitType == TRACE_HitWall ) @@ -499,7 +494,7 @@ Class MisterRifle : SWWMWeapon dir = SWWMUtility.ConeSpread(x2,y2*2.,z2,a,s); } FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,6); if ( d.HitType == TRACE_HitActor ) { @@ -551,7 +546,7 @@ Class MisterRifle : SWWMWeapon } Vector3 dir = SWWMUtility.GetPlayerAimDir(self); FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { @@ -614,7 +609,7 @@ Class MisterRifle : SWWMWeapon double a = FRandom[Mister](0,360), s = FRandom[Mister](spd[index],spd[index+1]); Vector3 dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s); FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { @@ -730,7 +725,7 @@ Class MisterRifle : SWWMWeapon do { mrt.fullstop = true; - mrt.Trace(norigin,level.PointInSector(norigin.xy),dir,maxdist,TRACE_HitSky|TRACE_ReportPortals,ignore:self); + mrt.Trace(norigin,level.PointInSector(norigin.xy),dir,maxdist,TRACE_ReportPortals,ignore:self); mrt.maxpen -= 100; maxdist -= (mrt.exitpoint-norigin).length(); norigin = mrt.exitpoint; @@ -909,7 +904,7 @@ Class MisterRifle : SWWMWeapon mrc.effectors.Push(b); bi.Push(b); } - if ( (mrt.Results.HitType != TRACE_HitNone) && (mrt.Results.HitType != TRACE_HasHitSky) && (mrt.Results.HitType != TRACE_HitActor) ) + if ( (mrt.Results.HitType != TRACE_HitNone) && (mrt.Results.HitType != TRACE_HitActor) ) { Vector3 hitnormal = SWWMUtility.GetLineTracerHitNormal(mrt.Results); let b = MisterBulletImpact(Spawn("MisterRailEntryImpact",mrt.Results.HitPos+hitnormal*4.)); diff --git a/zscript/dlc1/swwm_notashotgun.zsc b/zscript/dlc1/swwm_notashotgun.zsc index 381c3288f..9cdc5cb03 100644 --- a/zscript/dlc1/swwm_notashotgun.zsc +++ b/zscript/dlc1/swwm_notashotgun.zsc @@ -64,7 +64,7 @@ Class Quadravol : SWWMWeapon for ( int j=0; j<360; j+=(360/rings) ) { dir = SWWMUtility.ConeSpread(x,y,z,j,i); - pointblank |= LineTrace(atan2(dir.y,dir.x),60,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + pointblank |= LineTrace(atan2(dir.y,dir.x),60,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); if ( (d.HitType == TRACE_HitActor) && !fool ) fool = d.HitActor; if ( (d.HitType == TRACE_HitWall) && !fline ) { diff --git a/zscript/items/swwm_miscitems.zsc b/zscript/items/swwm_miscitems.zsc index da6b60935..8053691b5 100644 --- a/zscript/items/swwm_miscitems.zsc +++ b/zscript/items/swwm_miscitems.zsc @@ -590,7 +590,7 @@ Class SaltBeam : SWWMNonInteractiveActor special1 = 1; let [x, y, z] = SWWMUtility.GetAxes(angle,pitch,roll); let t = new("SaltTracer"); - t.Trace(pos,cursector,x,speed,TRACE_HitSky,ignore:target); + t.Trace(pos,cursector,x,speed,0,ignore:target); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -625,16 +625,13 @@ Class SaltBeam : SWWMNonInteractiveActor } Vector3 norm = SWWMUtility.GetLineTracerHitNormal(t.Results); if ( t.Results.HitType == TRACE_HitWall ) t.Results.HitLine.RemoteActivate(tracer,t.Results.Side,SPAC_Impact,t.Results.HitPos); - if ( t.Results.HitType != TRACE_HasHitSky ) - { - let i = Spawn("SaltImpact",level.Vec3Offset(t.Results.HitPos,norm*4)); - i.angle = atan2(norm.y,norm.x); - i.pitch = asin(-norm.z); - i.target = target; - i.special1 = (Stamina-9)/4; - i.special2 = Accuracy; - i.args[0] = args[1]; - } + let i = Spawn("SaltImpact",level.Vec3Offset(t.Results.HitPos,norm*4)); + i.angle = atan2(norm.y,norm.x); + i.pitch = asin(-norm.z); + i.target = target; + i.special1 = (Stamina-9)/4; + i.special2 = Accuracy; + i.args[0] = args[1]; speed = t.Results.Distance; // shortens in minimap return; } diff --git a/zscript/swwm_gesture.zsc b/zscript/swwm_gesture.zsc index fda433b1f..f97669884 100644 --- a/zscript/swwm_gesture.zsc +++ b/zscript/swwm_gesture.zsc @@ -299,7 +299,7 @@ Class SWWMGesture : SWWMWeapon if ( !weap ) return false; Vector3 origin = SWWMUtility.GetFireOffset(self,10,0,0); FLineTraceData d; - LineTrace(angle+viewangle,DEFMELEERANGE*1.5,pitch+viewpitch,TRF_ABSPOSITION|TRF_THRUACTORS|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(angle+viewangle,DEFMELEERANGE*1.5,pitch+viewpitch,TRF_ABSPOSITION|TRF_THRUACTORS,origin.z,origin.x,origin.y,d); return (d.HitType != TRACE_HitNone); } diff --git a/zscript/weapons/swwm_cbt.zsc b/zscript/weapons/swwm_cbt.zsc index 6ca6130fc..536a551be 100644 --- a/zscript/weapons/swwm_cbt.zsc +++ b/zscript/weapons/swwm_cbt.zsc @@ -113,7 +113,7 @@ Class Wallbuster : SWWMWeapon hit.HitActor.A_StartSound("spreadgun/pelletf",CHAN_DAMAGE,CHANF_OVERLAP,.4,4.); } } - if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HasHitSky) && (t.Results.HitType != TRACE_HitActor) ) + if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HitActor) ) { Vector3 hitnormal = SWWMUtility.GetLineTracerHitNormal(t.Results); let p = Spawn(impact,t.Results.HitPos+hitnormal*4); @@ -271,7 +271,7 @@ Class Wallbuster : SWWMWeapon st.hitlist.Clear(); st.shootthroughlist.Clear(); st.waterhitlist.Clear(); - st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,TRACE_HitSky,ignore:self); + st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,0,ignore:self); ProcessTraceHit(st,origin,dir,individualdmg,7000,bc:5+howmany/6,(howmany>1)); } for ( int i=0; i<(16-howmany/2); i++ ) diff --git a/zscript/weapons/swwm_deathlydeathcannon_altfx.zsc b/zscript/weapons/swwm_deathlydeathcannon_altfx.zsc index b72b0edb2..25532c086 100644 --- a/zscript/weapons/swwm_deathlydeathcannon_altfx.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon_altfx.zsc @@ -257,7 +257,7 @@ Class YnykronVoidBeam : SWWMNonInteractiveActor t.ShootThroughList.Clear(); t.WaterHitList.Clear(); t.HitList.Clear(); - t.Trace(pos,cursector,x,16*scale.x,TRACE_HitSky); + t.Trace(pos,cursector,x,16*scale.x,0); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -379,7 +379,7 @@ Class YnykronLightningArc : SWWMNonInteractiveActor t.hitlist.Clear(); let [x, y, z] = SWWMUtility.GetAxes(angle,pitch,roll); t.ShootThroughList.Clear(); - t.Trace(pos,CurSector,x,speed,TRACE_HitSky); + t.Trace(pos,CurSector,x,speed,0); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -395,15 +395,12 @@ Class YnykronLightningArc : SWWMNonInteractiveActor Vector3 normal = SWWMUtility.GetLineTracerHitNormal(t.Results), dir = t.Results.HitVector; if ( t.Results.HitType != TRACE_HitNone ) { - if ( t.Results.HitType != TRACE_HasHitSky ) - { - if ( t.Results.HitType == TRACE_HitWall ) t.Results.HitLine.RemoteActivate(target,t.Results.Side,SPAC_Impact,t.Results.HitPos); - let s = Spawn("YnykronLightningImpact",level.Vec3Offset(t.Results.HitPos,normal*8)); - s.target = target; - s.angle = atan2(normal.y,normal.x); - s.pitch = asin(-normal.z); - if ( swwm_omnibust ) BusterWall.Bust(t.Results,GetMissileDamage(0,0),target,t.Results.HitVector,t.Results.HitPos.z); - } + if ( t.Results.HitType == TRACE_HitWall ) t.Results.HitLine.RemoteActivate(target,t.Results.Side,SPAC_Impact,t.Results.HitPos); + let s = Spawn("YnykronLightningImpact",level.Vec3Offset(t.Results.HitPos,normal*8)); + s.target = target; + s.angle = atan2(normal.y,normal.x); + s.pitch = asin(-normal.z); + if ( swwm_omnibust ) BusterWall.Bust(t.Results,GetMissileDamage(0,0),target,t.Results.HitVector,t.Results.HitPos.z); nextpos = t.Results.HitPos; bAMBUSH = true; speed = t.Results.Distance; // shortens in minimap @@ -1335,7 +1332,7 @@ Class YnykronAltBeam : SWWMNonInteractiveActor let t = new("YnykronAltTracer"); t.ShootThroughList.Clear(); t.WaterHitList.Clear(); - t.Trace(pos,cursector,x,speed,TRACE_HitSky,ignore:target); + t.Trace(pos,cursector,x,speed,0,ignore:target); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -1356,13 +1353,6 @@ Class YnykronAltBeam : SWWMNonInteractiveActor b.A_SetRenderStyle(b.alpha*.3,STYLE_Subtract); b.vel += x*FRandom[Ynykron](-.2,.4); } - if ( t.Results.HitType == TRACE_HasHitSky ) - { - // goodbye - nospread = true; - speed = t.Results.Distance; // shortens in minimap - return; - } if ( t.Results.HitType != TRACE_HitNone ) { // hit something diff --git a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc index eff3cda7e..c3b70996f 100644 --- a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc @@ -617,7 +617,7 @@ Class YnykronBeam : SWWMNonInteractiveActor t.ShootThroughList.Clear(); t.WaterHitList.Clear(); t.HitList.Clear(); - t.Trace(pos,cursector,x,speed,TRACE_HitSky,ignore:target); + t.Trace(pos,cursector,x,speed,0,ignore:target); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -676,13 +676,6 @@ Class YnykronBeam : SWWMNonInteractiveActor if ( YnykronShot(master) ) YnykronShot(master).blastcount++; } - if ( t.Results.HitType == TRACE_HasHitSky ) - { - // goodbye - nospread = true; - speed = t.Results.Distance; // shortens in minimap - return; - } if ( t.Results.HitType != TRACE_HitNone ) { // hit something @@ -719,7 +712,7 @@ Class YnykronBeam : SWWMNonInteractiveActor it.ShootThroughList.Clear(); it.WaterHitList.Clear(); it.HitList.Clear(); - it.Trace(t.Results.HitPos,level.PointInSector(t.Results.HitPos.xy),x,i,TRACE_HitSky,ignore:target); + it.Trace(t.Results.HitPos,level.PointInSector(t.Results.HitPos.xy),x,i,0,ignore:target); foreach ( l:it.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -929,7 +922,7 @@ Class DelayedWallBeam : SWWMNonInteractiveActor YnykronShot(master).blastcount++; // trace back to get the proper "exit surface" so we can trigger lines if needed let at = new("AuxiliarySilverBulletTracer"); - at.Trace(pos,CurSector,-x,2.,TRACE_NoSky,ignoreallactors:true); + at.Trace(pos,CurSector,-x,2.,0,ignoreallactors:true); if ( at.Results.HitType == TRACE_HitWall ) { if ( at.Results.HitLine.sidedef[1] ) diff --git a/zscript/weapons/swwm_shot.zsc b/zscript/weapons/swwm_shot.zsc index 2fa885002..595e0318c 100644 --- a/zscript/weapons/swwm_shot.zsc +++ b/zscript/weapons/swwm_shot.zsc @@ -193,7 +193,7 @@ Class Spreadgun : SWWMWeapon hit.HitActor.A_StartSound("spreadgun/pelletf",CHAN_DAMAGE,CHANF_OVERLAP,.4,4.); } } - if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HasHitSky) && (t.Results.HitType != TRACE_HitActor) ) + if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HitActor) ) { Vector3 hitnormal = SWWMUtility.GetLineTracerHitNormal(t.Results); let p = Spawn(impact,t.Results.HitPos+hitnormal*4); @@ -244,7 +244,7 @@ Class Spreadgun : SWWMWeapon s = FRandom[Spreadgun](0,.01); dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s); FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,2,true); if ( d.HitType != TRACE_HitNone ) { @@ -294,7 +294,7 @@ Class Spreadgun : SWWMWeapon st.hitlist.Clear(); st.shootthroughlist.Clear(); st.waterhitlist.Clear(); - st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,TRACE_HitSky,ignore:self); + st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,0,ignore:self); ProcessTraceHit(st,origin,dir,10,7000,bc:5); } for ( int i=0; i<16; i++ ) diff --git a/zscript/weapons/swwm_sparkyboi_fx.zsc b/zscript/weapons/swwm_sparkyboi_fx.zsc index ed368936e..9ab88cf9d 100644 --- a/zscript/weapons/swwm_sparkyboi_fx.zsc +++ b/zscript/weapons/swwm_sparkyboi_fx.zsc @@ -1007,7 +1007,7 @@ Class BiosparkBeam : SWWMNonInteractiveActor t.hitlist.Clear(); Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch); t.ShootThroughList.Clear(); - t.Trace(pos,CurSector,x,speed,TRACE_HitSky,ignore:target); + t.Trace(pos,CurSector,x,speed,0,ignore:target); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -1041,12 +1041,6 @@ Class BiosparkBeam : SWWMNonInteractiveActor } Vector3 normal = SWWMUtility.GetLineTracerHitNormal(t.Results), dir = t.Results.HitVector; if ( t.Results.HitType == TRACE_HitWall ) t.Results.HitLine.RemoteActivate(target,t.Results.Side,SPAC_Impact,t.Results.HitPos); - if ( t.Results.HitType == TRACE_HasHitSky ) - { - bAMBUSH = true; - speed = t.Results.Distance; // shortens in minimap - return; - } if ( t.Results.HitType != TRACE_HitNone ) { let s = Spawn("BiosparkBeamImpact",t.Results.HitPos+normal*8.); @@ -1328,7 +1322,7 @@ Class BiosparkArc : SWWMNonInteractiveActor t.hitlist.Clear(); let [x, y, z] = SWWMUtility.GetAxes(angle,pitch,roll); t.ShootThroughList.Clear(); - t.Trace(pos,CurSector,x,speed,TRACE_HitSky); + t.Trace(pos,CurSector,x,speed,0); foreach ( l:t.ShootThroughList ) { l.Activate(target,0,SPAC_PCross); @@ -1345,16 +1339,11 @@ Class BiosparkArc : SWWMNonInteractiveActor } Vector3 normal = SWWMUtility.GetLineTracerHitNormal(t.Results), dir = t.Results.HitVector; if ( t.Results.HitType == TRACE_HitWall ) t.Results.HitLine.RemoteActivate(target,t.Results.Side,SPAC_Impact,t.Results.HitPos); - if ( t.Results.HitType == TRACE_HasHitSky ) - { - bAMBUSH = true; - speed = t.Results.Distance; // shortens in minimap - return; - } if ( t.Results.HitType != TRACE_HitNone ) { speed = t.Results.Distance; // shortens in minimap nextpos = level.Vec3Offset(t.Results.HitPos,normal); // offset by normal so next segment doesn't spawn inside walls + dir = dir-(2.*normal*(dir dot normal)); // bounce direction } else nextpos = t.Results.HitPos; double a = FRandom[Sparkster](0,360), s = FRandom[Sparkster](0.,.8); diff --git a/zscript/weapons/swwm_splode.zsc b/zscript/weapons/swwm_splode.zsc index b0e6d1a9f..a1549fc83 100644 --- a/zscript/weapons/swwm_splode.zsc +++ b/zscript/weapons/swwm_splode.zsc @@ -92,7 +92,7 @@ Class ExplodiumGun : SWWMWeapon let [x2, y2, z2] = SWWMUtility.GetPlayerAxesAutoAimed(self); Vector3 dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s); FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { @@ -674,7 +674,7 @@ Class DualExplodiumGun : SWWMWeapon let [x2, y2, z2] = SWWMUtility.GetPlayerAxesAutoAimed(self); Vector3 dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s); FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { diff --git a/zscript/weapons/swwm_tastytreat.zsc b/zscript/weapons/swwm_tastytreat.zsc index 44f551388..6c38768f5 100644 --- a/zscript/weapons/swwm_tastytreat.zsc +++ b/zscript/weapons/swwm_tastytreat.zsc @@ -138,7 +138,7 @@ Class CandyGun : SWWMWeapon let [x2, y2, z2] = SWWMUtility.GetPlayerAxesAutoAimed(self); Vector3 dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s); FLineTraceData d; - LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d); + LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { diff --git a/zscript/weapons/swwm_tastytreat_fx.zsc b/zscript/weapons/swwm_tastytreat_fx.zsc index cf5ce56b5..38a7e89d6 100644 --- a/zscript/weapons/swwm_tastytreat_fx.zsc +++ b/zscript/weapons/swwm_tastytreat_fx.zsc @@ -116,6 +116,7 @@ Class CandyBeam : SWWMNonInteractiveActor { speed = t.Results.Distance; // shortens in minimap nextpos = level.Vec3Offset(t.Results.HitPos,normal); // offset by normal so next segment doesn't spawn inside walls + dir = dir-(2.*normal*(dir dot normal)); // bounce direction } else nextpos = t.Results.HitPos; double a = FRandom[Candy](0,360), s = FRandom[Candy](0.,.8); diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index 520e9d99f..c99c2dbfb 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -76,11 +76,6 @@ Class SilverBulletTracer : SpreadgunTracer } return TRACE_Skip; } - else if ( Results.HitType == TRACE_HasHitSky ) - { - fullstop = true; - return TRACE_Stop; - } else if ( Results.HitType != TRACE_HitNone ) { if ( Results.HitType == TRACE_HitWall ) @@ -353,7 +348,7 @@ Class SilverBullet : SWWMWeapon BusterWall.Bust(faketracer.Results,wp.penetration,self,wp.BustDir,wp.HitPos.z); } } - if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HasHitSky) && (t.Results.HitType != TRACE_HitActor) ) + if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HitActor) ) { Vector3 hitnormal = SWWMUtility.GetLineTracerHitNormal(t.Results); let p = Spawn("SilverImpact",t.Results.HitPos+hitnormal*4); @@ -496,7 +491,7 @@ Class SilverBullet : SWWMWeapon do { sst.fullstop = true; - sst.Trace(norigin,level.PointInSector(norigin.xy),x2,maxdist,TRACE_HitSky,ignore:self); + sst.Trace(norigin,level.PointInSector(norigin.xy),x2,maxdist,0,ignore:self); maxdist -= (sst.exitpoint-norigin).length(); norigin = sst.exitpoint; x2 = sst.Results.HitVector;