From a54c1869cb976b66e6441a4705f00324cd080beb Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Wed, 24 Jun 2020 12:00:55 +0200 Subject: [PATCH] Thorough microoptimization of non-interacting actors. Omnisight now handles 3d floors and midtextures, and exit line merging works properly. Reduced Pusher primary fire damage slightly. Cleared improper usages of GetAge(). --- language.version | 2 +- zscript/swwm_ammo.zsc | 1 + zscript/swwm_blazeit.zsc | 13 ++- zscript/swwm_blod.zsc | 4 +- zscript/swwm_cbt.zsc | 8 +- zscript/swwm_common.zsc | 131 +++++++++++++++++++++++++--- zscript/swwm_danmaku.zsc | 12 +-- zscript/swwm_deathlydeathcannon.zsc | 26 ++++-- zscript/swwm_deepdarkimpact.zsc | 1 + zscript/swwm_inventory.zsc | 14 ++- zscript/swwm_jackhammer.zsc | 4 +- zscript/swwm_player.zsc | 6 +- zscript/swwm_powerup.zsc | 16 ++-- zscript/swwm_shot.zsc | 32 +++++-- zscript/swwm_sparkyboi.zsc | 50 +++++++++-- zscript/swwm_splode.zsc | 2 + zscript/swwm_tastytreat.zsc | 16 ++++ zscript/swwm_thiccboolet.zsc | 2 + 18 files changed, 274 insertions(+), 66 deletions(-) diff --git a/language.version b/language.version index 59aaefa99..501410295 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \cwGZ\c- r389 (Wed 24 Jun 10:19:00 CEST 2020)"; +SWWM_MODVER="\chSWWM \cwGZ\c- r391 (Wed 24 Jun 12:07:57 CEST 2020)"; diff --git a/zscript/swwm_ammo.zsc b/zscript/swwm_ammo.zsc index 8969b7bf5..9a3a7e149 100644 --- a/zscript/swwm_ammo.zsc +++ b/zscript/swwm_ammo.zsc @@ -499,6 +499,7 @@ Class GoldShellSparkle : Actor +DONTSPLASH; +NOTELEPORT; +FORCEXYBILLBOARD; + FloatBobPhase 0; } States { diff --git a/zscript/swwm_blazeit.zsc b/zscript/swwm_blazeit.zsc index 51ac4fdba..51ec92c05 100644 --- a/zscript/swwm_blazeit.zsc +++ b/zscript/swwm_blazeit.zsc @@ -42,6 +42,7 @@ Class HellblazerSubExpl : Actor +NOBLOCKMAP; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } States { @@ -63,6 +64,7 @@ Class HellblazerRing : Actor +NOBLOCKMAP; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } States { @@ -84,6 +86,7 @@ Class HellblazerRing2 : Actor +NOBLOCKMAP; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } States { @@ -107,6 +110,7 @@ Class HellblazerTrail : Actor +DONTSPLASH; +NOTELEPORT; +FORCEXYBILLBOARD; + +NOINTERACTION; } override void PostBeginPlay() { @@ -144,11 +148,11 @@ Class HellblazerFlare : Actor +DONTSPLASH; +NOTELEPORT; +FORCEXYBILLBOARD; + +NOINTERACTION; } override void PostBeginPlay() { - Super.PostBeginPlay(); if ( !master ) return; State sp = FindState("Spawn"); if ( master is 'HellblazerCrackshot' ) SetState(sp+1); @@ -158,7 +162,6 @@ Class HellblazerFlare : Actor override void Tick() { - Super.Tick(); if ( !master || !master.bMISSILE ) { Destroy(); @@ -752,6 +755,7 @@ Class HellblazerClusterMini : HellblazerMissile2 void A_ClusterTick( Color smokecol ) { + special2++; Vector3 traildir = -(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch)); for ( int i=0; i<2; i++ ) { @@ -762,7 +766,7 @@ Class HellblazerClusterMini : HellblazerMissile2 s.alpha *= .4; s.vel = .3*vel + (traildir+(FRandom[Hellblazer](-.4,.4),FRandom[Hellblazer](-.4,.4),FRandom[Hellblazer](-.4,.4))).unit()*FRandom[Hellblazer](1.,2.); } - if ( (deto > 1) && (GetAge() > 2) ) + if ( (deto > 1) && (special2 > 2) ) { ExplodeMissile(); return; @@ -1031,7 +1035,7 @@ Class HellblazerRavagerArm : Actor l.ReactionTime = int(2+8*(ReactionTime/20.)); l.target = p; } - if ( !(GetAge()%2) ) + if ( !(ReactionTime%2) ) { SWWMHandler.DoBlast(self,250-6*reactiontime,1000+200*reactiontime,bHITOWNER?null:target); A_Explode(4+reactiontime*4,250-6*reactiontime,bHITOWNER?XF_HURTSOURCE:0); @@ -1073,6 +1077,7 @@ Class HellblazerWarheadTrail : Actor +NOGRAVITY; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; Scale 1.5; } States diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 84e97bc87..d835db469 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -105,6 +105,7 @@ Class mkBloodSpray : Actor Class mkBloodDrop : Actor { int deadtimer; + bool dead; Default { @@ -125,7 +126,7 @@ Class mkBloodDrop : Actor { Super.Tick(); if ( waterlevel > 0 ) A_FadeOut(); - if ( !InStateSequence(CurState,ResolveState("Spawn")) ) + if ( dead ) { deadtimer++; if ( deadtimer > 350 ) A_FadeOut(.01); @@ -150,6 +151,7 @@ Class mkBloodDrop : Actor Death: SBLD E 0 { + invoker.dead = true; A_StartSound("misc/blooddrop",volume:.1); if ( pos.z > floorz ) { diff --git a/zscript/swwm_cbt.zsc b/zscript/swwm_cbt.zsc index 762cbeda5..c8ce51c1c 100644 --- a/zscript/swwm_cbt.zsc +++ b/zscript/swwm_cbt.zsc @@ -422,14 +422,20 @@ Class BustedQuake : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { - Super.PostBeginPlay(); if ( special1 < 4 ) A_StartSound("wallbuster/smallbust",CHAN_VOICE,CHANF_OVERLAP,min(1.,special1*.32),1./max(1.,special1*.35),1.-special1*.05); else A_StartSound("wallbuster/bigbust",CHAN_VOICE,CHANF_OVERLAP,min(1.,special1*.16),1./max(1.,special1*.35),1.-special1*.03); A_QuakeEx(special1,special1,special1,20+special1*5,0,300+special1*90,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:special1*.1); } + override void Tick() + { + if ( isFrozen() ) return; + tics--; + if ( tics <= 0 ) Destroy(); + } States { Spawn: diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index 63b0d4b45..3a2ca2971 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -1507,7 +1507,6 @@ Class SWWMSpark : Actor +FORCEXYBILLBOARD; +MISSILE; +DROPOFF; - +MOVEWITHSECTOR; +THRUACTORS; +NOTELEPORT; +DONTSPLASH; @@ -1575,7 +1574,7 @@ Class SWWMChip : Actor { Super.Tick(); if ( isFrozen() ) return; - if ( InStateSequence(CurState,ResolveState("Death")) ) + if ( CurState == ResolveState("Death") ) { deadtimer++; if ( deadtimer > 300 ) A_FadeOut(0.05); @@ -1643,7 +1642,7 @@ Class FancyConfetti : Actor if ( isFrozen() ) return; vel.xy *= 0.98; if ( vel.z > 0 ) vel.z *= 0.98; - if ( InStateSequence(CurState,ResolveState("Death")) ) + if ( CurState == ResolveState("Death") ) { deadtimer++; if ( deadtimer > 300 ) A_FadeOut(0.05); @@ -1713,6 +1712,7 @@ Class SWWMItemFog : Actor +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; + +NOINTERACTION; } States { @@ -1791,6 +1791,7 @@ Class SWWMTeleportFog : Actor +NOGRAVITY; +NOBLOCKMAP; +DONTSPLASH; + +NOINTERACTION; } override void PostBeginPlay() { @@ -2282,23 +2283,99 @@ Class SWWMHandler : EventHandler ah = (l.v1.p,highestfloor.ZatPoint(l.v1.p)); bl = (l.v2.p,lowestfloor.ZatPoint(l.v2.p)); bh = (l.v2.p,highestfloor.ZatPoint(l.v2.p)); - if ( (al-ah).length() > 0 && (bl-bh).length() > 0 ) + if ( ((al-ah).length() > 0) && ((bl-bh).length() > 0) ) return (al+ah+bl+bh)*.25; // check if upper part available al = (l.v1.p,lowestceiling.ZatPoint(l.v1.p)); ah = (l.v1.p,highestceiling.ZatPoint(l.v1.p)); bl = (l.v2.p,lowestceiling.ZatPoint(l.v2.p)); bh = (l.v2.p,highestceiling.ZatPoint(l.v2.p)); - if ( (al-ah).length() > 0 && (bl-bh).length() > 0 ) + if ( ((al-ah).length() > 0) && ((bl-bh).length() > 0) ) return (al+ah+bl+bh)*.25; - // TODO check for any 3d floors - for ( int i=0; i ah.z) && (fbh.z > bh.z) && (fal.z > al.z) && (fbl.z > bl.z) ) continue; + al = fal; + ah = fah; + bl = fbl; + bh = fbh; + floorfound = true; + } + if ( floorfound ) return (al+ah+bl+bh)*.25; + for ( int i=0; i ah.z) && (fbh.z > bh.z) && (fal.z > al.z) && (fbl.z > bl.z) ) continue; + al = fal; + ah = fah; + bl = fbl; + bh = fbh; + floorfound = true; + } + if ( floorfound ) return (al+ah+bl+bh)*.25; + // check for midtex + if ( !l.sidedef[0].GetTexture(1).IsNull() ) + { + double ofs = l.sidedef[0].GetTextureYOffset(1); + Vector2 siz = TexMan.GetScaledSize(l.sidedef[0].GetTexture(1)); + Vector2 tofs = TexMan.GetScaledOffset(l.sidedef[0].GetTexture(1)); + ofs += tofs.y; + ofs *= l.sidedef[0].GetTextureYScale(1); + siz.y *= l.sidedef[0].GetTextureYScale(1); + if ( l.flags&Line.ML_DONTPEGBOTTOM ) + { + al = (l.v1.p,highestfloor.ZAtPoint(l.v1.p)+ofs); + bl = (l.v2.p,highestfloor.ZAtPoint(l.v2.p)+ofs); + ah = al+(0,0,siz.y); + bh = bl+(0,0,siz.y); + } + else + { + ah = (l.v1.p,lowestceiling.ZAtPoint(l.v1.p)+ofs); + bh = (l.v2.p,lowestceiling.ZAtPoint(l.v2.p)+ofs); + al = ah-(0,0,siz.y); + bl = bh-(0,0,siz.y); + } + return (al+ah+bl+bh)*.25; + } + if ( !l.sidedef[1].GetTexture(1).IsNull() ) + { + double ofs = l.sidedef[1].GetTextureYOffset(1); + Vector2 siz = TexMan.GetScaledSize(l.sidedef[1].GetTexture(1)); + Vector2 tofs = TexMan.GetScaledOffset(l.sidedef[1].GetTexture(1)); + ofs += tofs.y; + ofs *= l.sidedef[1].GetTextureYScale(1); + siz.y *= l.sidedef[1].GetTextureYScale(1); + if ( l.flags&Line.ML_DONTPEGBOTTOM ) + { + al = (l.v1.p,highestfloor.ZAtPoint(l.v1.p)+ofs); + bl = (l.v2.p,highestfloor.ZAtPoint(l.v2.p)+ofs); + ah = al+(0,0,siz.y); + bh = bl+(0,0,siz.y); + } + else + { + ah = (l.v1.p,lowestceiling.ZAtPoint(l.v1.p)+ofs); + bh = (l.v2.p,lowestceiling.ZAtPoint(l.v2.p)+ofs); + al = ah-(0,0,siz.y); + bl = bh-(0,0,siz.y); + } + return (al+ah+bl+bh)*.25; } - // TODO check for midtex // just use the intersection al = (l.v1.p,highestfloor.ZatPoint(l.v1.p)); ah = (l.v1.p,lowestceiling.ZatPoint(l.v1.p)); @@ -2315,7 +2392,7 @@ Class SWWMHandler : EventHandler if ( !e.IsSaveGame && !e.IsReopen ) { // for skipping over merged exit lines (sharing vertices) - Array skipme; + Array skipme; skipme.Clear(); // find exit lines, and use lines that aren't exits for ( int i=0; i 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } } Default { @@ -372,6 +380,7 @@ Class YnykronBeamTrail : Actor +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; + +NOINTERACTION; } States { @@ -518,7 +527,6 @@ Class YnykronBeam : Actor } override void PostBeginPlay() { - Super.PostBeginPlay(); if ( YnykronShot(master) ) YnykronShot(master).beamcount++; // sprite trail @@ -533,12 +541,18 @@ Class YnykronBeam : Actor } override void Tick() { - Super.Tick(); if ( isFrozen() ) return; A_FadeOut(FRandom[Ynykron](.001,.002)); special2++; if ( special2 == 2 ) SpreadOut(); + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } } override void OnDestroy() { @@ -566,6 +580,7 @@ Class YnykronBeam : Actor +FORCERADIUSDMG; +FOILINVUL; +EXTREMEDEATH; + +NOINTERACTION; } States { @@ -620,16 +635,15 @@ Class DelayedWallBeam : Actor +NOBLOCKMAP; +NOTELEPORT; +DONTSPLASH; + +NOINTERACTION; } override void PostBeginPlay() { - Super.PostBeginPlay(); if ( YnykronShot(master) ) YnykronShot(master).beamcount++; } override void Tick() { - Super.Tick(); if ( isFrozen() ) return; special2--; if ( special2 > 0 ) return; @@ -687,6 +701,7 @@ Class YnykronRing : Actor +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; + +NOINTERACTION; } States { @@ -727,6 +742,7 @@ Class YnykronShot : Actor +NOBLOCKMAP; +NOTELEPORT; +DONTSPLASH; + +NOINTERACTION; } override void PostBeginPlay() { diff --git a/zscript/swwm_deepdarkimpact.zsc b/zscript/swwm_deepdarkimpact.zsc index 6ddd29008..f8e2c2e8a 100644 --- a/zscript/swwm_deepdarkimpact.zsc +++ b/zscript/swwm_deepdarkimpact.zsc @@ -147,6 +147,7 @@ Class AirBulletRing : Actor +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; + +NOINTERACTION; Radius 0.1; Height 0; } diff --git a/zscript/swwm_inventory.zsc b/zscript/swwm_inventory.zsc index a04ab9cc6..94d33d099 100644 --- a/zscript/swwm_inventory.zsc +++ b/zscript/swwm_inventory.zsc @@ -435,6 +435,7 @@ Class SWWMBulletImpact : Actor +NOBLOCKMAP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; Scale 0.25; } override void PostBeginPlay() @@ -514,6 +515,7 @@ Class PunchImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -564,6 +566,7 @@ Class BigPunchSplash : Actor +NOTELEPORT; +NODAMAGETHRUST; +FORCERADIUSDMG; + +NOINTERACTION; } override void PostBeginPlay() { @@ -584,6 +587,7 @@ Class BigPunchImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -701,6 +705,7 @@ Class ParryRing : Actor +NOBLOCKMAP; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } States { @@ -724,6 +729,7 @@ Class ParryField : Actor +NONSHOOTABLE; +NOBLOOD; +DONTTHRUST; + +NOINTERACTION; Health int.max; Mass int.max; Radius 20; @@ -740,7 +746,6 @@ Class ParryField : Actor override void Tick() { - Super.Tick(); if ( !master ) { Destroy(); @@ -871,13 +876,6 @@ Class ParryField : Actor } return 0; } - - States - { - Spawn: - TNT1 A -1; - Stop; - } } Class UseList diff --git a/zscript/swwm_jackhammer.zsc b/zscript/swwm_jackhammer.zsc index 7a725bcfa..74b0b057a 100644 --- a/zscript/swwm_jackhammer.zsc +++ b/zscript/swwm_jackhammer.zsc @@ -11,6 +11,7 @@ Class PusherImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -55,6 +56,7 @@ Class BigPusherImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -374,7 +376,7 @@ Class PusherWeapon : SWWMWeapon { A_QuakeEx(3,3,3,7,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.8); A_AlertMonsters(1200); - int dmg = int(10+invoker.chargelevel*5); + int dmg = int(5+invoker.chargelevel*3); if ( d.HitType == TRACE_HitActor ) { double diff = deltaangle(self.angle,AngleTo(d.HitActor)); diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 6ab93de30..0bc376726 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -1739,6 +1739,7 @@ Class DashTrail : Actor +NOBLOCKMAP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -1785,6 +1786,7 @@ Class DashTrail2 : Actor +NOBLOCKMAP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -1826,6 +1828,7 @@ Class DemolitionistRadiusShockwaveTail : Actor +DONTSPLASH; +WALLSPRITE; +NOTELEPORT; + +NOINTERACTION; } States { @@ -1910,6 +1913,7 @@ Class DemolitionistShockwave : Actor +NOTELEPORT; +NODAMAGETHRUST; +FORCERADIUSDMG; + +NOINTERACTION; } override void PostBeginPlay() { @@ -1999,6 +2003,7 @@ Class DemolitionistSelfLight : Actor +NOGRAVITY; +NOBLOCKMAP; +DONTSPLASH; + +NOINTERACTION; } bool activelight() { @@ -2013,7 +2018,6 @@ Class DemolitionistSelfLight : Actor } override void Tick() { - Super.Tick(); if ( !target || !(target is 'Demolitionist') || (Demolitionist(target).selflight != self) ) { Destroy(); diff --git a/zscript/swwm_powerup.zsc b/zscript/swwm_powerup.zsc index 8d85947ec..57659d94d 100644 --- a/zscript/swwm_powerup.zsc +++ b/zscript/swwm_powerup.zsc @@ -136,10 +136,10 @@ Class GhostSnd : Actor { +NOBLOCKMAP; +NOGRAVITY; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( !target || !master ) { Destroy(); @@ -228,6 +228,7 @@ Class GhostArtifactX : Actor +NOGRAVITY; +NOCLIP; +DONTSPLASH; + +NOINTERACTION; Radius 0.1; Height 0; +FLOATBOB; @@ -309,10 +310,10 @@ Class GravSnd : Actor { +NOBLOCKMAP; +NOGRAVITY; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( !target || !master ) { Destroy(); @@ -473,10 +474,10 @@ Class InvinciSnd : Actor { +NOBLOCKMAP; +NOGRAVITY; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( !target || !master ) { Destroy(); @@ -585,8 +586,6 @@ Class InvinciballPower : Powerup { if ( Owner.ApplyDamageFactor(damageType,damage) <= 0 ) return; // this damage type is ignored, so don't flash - if ( damageType == 'Ynykron' ) - return; // can't block this if ( damageType == 'EndLevel' ) return; // don't trigger on endlevel damage if ( damage > 0 ) @@ -700,10 +699,10 @@ Class RageSnd : Actor { +NOBLOCKMAP; +NOGRAVITY; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( !target || !master ) { Destroy(); @@ -1273,13 +1272,14 @@ Class CompanionLamp : Actor void A_Moth() { // count up + special1++; for ( int i=0; i= 30) ) return; + if ( (special1%35) || Random[Moth](0,9) || (moff.Size() >= 30) ) return; // spawn a moth at a random offset double ang = FRandom[Moth](0,360); double pt = FRandom[Moth](-30,30); @@ -1614,10 +1614,10 @@ Class BarrierSnd : Actor { +NOBLOCKMAP; +NOGRAVITY; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( !target || !master ) { Destroy(); diff --git a/zscript/swwm_shot.zsc b/zscript/swwm_shot.zsc index 4665d817a..738fb87fa 100644 --- a/zscript/swwm_shot.zsc +++ b/zscript/swwm_shot.zsc @@ -224,6 +224,7 @@ Class SpreadImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -270,6 +271,7 @@ Class SlugImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -452,7 +454,7 @@ Class DragonBreathArm : Actor l.ReactionTime = int(2+8*(ReactionTime/20.)); l.target = p; } - if ( !(GetAge()%2) ) + if ( !(ReactionTime%2) ) { SWWMHandler.DoBlast(self,150-6*reactiontime,1000+200*reactiontime,bHITOWNER?null:target); A_Explode(1+int(reactiontime/1.5),150-6*reactiontime,bHITOWNER?XF_HURTSOURCE:0); @@ -561,6 +563,7 @@ Class SaltImpact : Actor +FORCEXYBILLBOARD; +NOTELEPORT; +FOILINVUL; + +NOINTERACTION; } override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { @@ -640,6 +643,7 @@ Class SaltBeam : Actor +NODAMAGETHRUST; +FORCERADIUSDMG; +FOILINVUL; + +NOINTERACTION; } override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) @@ -748,15 +752,22 @@ Class SaltBeam : Actor override void Tick() { - Super.Tick(); if ( isFrozen() ) return; A_FadeOut(.04); - if ( Random[Spreadgun](-2,GetAge()/10) == 0 ) + if ( Random[Spreadgun](-2,args[2]/10) == 0 ) { SWWMHandler.DoBlast(self,64,5000,target); A_Explode(5+Accuracy,64,0); } - if ( ((special2%5) || GetAge()) && !special1 ) SpreadOut(); + args[2]++; + if ( ((special2%5) || args[2]) && !special1 ) SpreadOut(); + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } } States @@ -1007,6 +1018,7 @@ Class OnFire : Actor +NOBLOCKMAP; +DONTSPLASH; +NOEXTREMEDEATH; + +NOINTERACTION; Obituary "$O_SPREADGUN_BLACK"; } } @@ -1046,6 +1058,7 @@ Class OnFireTrail : Actor } action void A_Flame() { + special1++; if ( waterlevel > 0 ) vel *= .9; else @@ -1059,7 +1072,7 @@ Class OnFireTrail : Actor s.vel = (FRandom[FlameT](-.2,.2),FRandom[FlameT](-.2,.2),FRandom[FlameT](-.2,.2)); s.vel += vel*.3; s.alpha *= alpha*2; - s.scale *= .5+abs(scale.x)*(.5+GetAge()/6.); + s.scale *= .5+abs(scale.x)*(.5+special1/6.); Destroy(); return; } @@ -1069,7 +1082,7 @@ Class OnFireTrail : Actor s.vel = (FRandom[FlameT](-.2,.2),FRandom[FlameT](-.2,.2),FRandom[FlameT](-.2,.2)); s.vel += vel*.3; s.alpha *= alpha*1.5; - s.scale *= .5+abs(scale.x)*(.5+GetAge()/6.); + s.scale *= .5+abs(scale.x)*(.5+special1/6.); } } Default @@ -1084,8 +1097,6 @@ Class OnFireTrail : Actor +NOGRAVITY; +NOFRICTION; +SLIDESONWALLS; - +ACTIVATEPCROSS; - +ACTIVATEIMPACT; +NOTELEPORT; +FORCEXYBILLBOARD; +ROLLSPRITE; @@ -1093,6 +1104,7 @@ Class OnFireTrail : Actor +DROPOFF; +NOBLOCKMONST; +DONTSPLASH; + +NOINTERACTION; } States { @@ -1269,6 +1281,7 @@ Class BallImpact : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -1600,6 +1613,7 @@ Class GoldenImpact : Actor +FORCEXYBILLBOARD; +NOTELEPORT; +FOILINVUL; + +NOINTERACTION; } override void PostBeginPlay() { @@ -1728,6 +1742,7 @@ Class GoldenSubImpact : Actor +FORCEXYBILLBOARD; +NOTELEPORT; +FOILINVUL; + +NOINTERACTION; } override void PostBeginPlay() { @@ -1853,6 +1868,7 @@ Class GoldenSubSubImpact : Actor +FORCEXYBILLBOARD; +NOTELEPORT; +FOILINVUL; + +NOINTERACTION; } override void PostBeginPlay() { diff --git a/zscript/swwm_sparkyboi.zsc b/zscript/swwm_sparkyboi.zsc index 986032bc7..1eb6aa1c9 100644 --- a/zscript/swwm_sparkyboi.zsc +++ b/zscript/swwm_sparkyboi.zsc @@ -63,10 +63,10 @@ Class BiosparkHitbox : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( !target || !target.InStateSequence(target.CurState,target.FindState("Spawn")) ) { Destroy(); @@ -166,8 +166,9 @@ Class BigBiospark : Actor void A_BigsparkTick() { - if ( !(GetAge()%4) ) + if ( !(special2%4) ) A_QuakeEx(Random[Sparkster](1,3),Random[Sparkster](1,3),Random[Sparkster](1,3),Random[Sparkster](4,6),0,400,"",QF_RELATIVE|QF_SCALEDOWN,falloff:100,rollIntensity:FRandom[Sparkster](.1,.3)); + special2++; int numpt = Random[ExploS](8,12); for ( int i=0; i 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } + } + Default { Obituary "$O_SPARKSTER"; @@ -1221,6 +1238,7 @@ Class BiosparkBeam : Actor +INTERPOLATEANGLES; +NOTELEPORT; +FOILINVUL; + +NOINTERACTION; } States @@ -1252,12 +1270,19 @@ Class BiosparkChildBeam : Actor +NOTELEPORT; +ROLLSPRITE; +ROLLCENTER; + +NOINTERACTION; } override void Tick() { - Super.Tick(); if ( isFrozen() ) return; A_FadeOut(.02); + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } } States { @@ -1485,6 +1510,17 @@ Class BiosparkArc : Actor frame = Random[Sparkster](0,11); if ( !special1 ) special2 = Random[Sparkster](0,8); } + override void Tick() + { + if ( isFrozen() ) return; + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } + } Default { Obituary "$O_SPARKSTER"; @@ -1500,6 +1536,7 @@ Class BiosparkArc : Actor +INTERPOLATEANGLES; +NOTELEPORT; +FOILINVUL; + +NOINTERACTION; } States { @@ -1564,6 +1601,7 @@ Class BiosparkSpark : Actor +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; + +NOINTERACTION; } States { diff --git a/zscript/swwm_splode.zsc b/zscript/swwm_splode.zsc index 62faf4f03..a5a48f52b 100644 --- a/zscript/swwm_splode.zsc +++ b/zscript/swwm_splode.zsc @@ -89,6 +89,7 @@ Class ExplodiumMagTrail : Actor +NOGRAVITY; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; Scale 1.1; } States @@ -224,6 +225,7 @@ Class ExplodiumBulletImpact : Actor +FORCERADIUSDMG; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { diff --git a/zscript/swwm_tastytreat.zsc b/zscript/swwm_tastytreat.zsc index 12cac2030..daf0ccbc3 100644 --- a/zscript/swwm_tastytreat.zsc +++ b/zscript/swwm_tastytreat.zsc @@ -172,6 +172,17 @@ Class CandyBeam : Actor b.special2 = special2; b.frame = frame; } + override void Tick() + { + if ( isFrozen() ) return; + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } + } Default { Obituary "$O_CANDYGUN"; @@ -186,6 +197,7 @@ Class CandyBeam : Actor +DONTSPLASH; +INTERPOLATEANGLES; +NOTELEPORT; + +NOINTERACTION; } States { @@ -214,6 +226,7 @@ Class CandyPop : Actor +ROLLSPRITE; +ROLLCENTER; +NOTELEPORT; + +NOINTERACTION; } void FlashPlayer( int str, double rad ) { @@ -397,6 +410,7 @@ Class CandyMagTrail : Actor +NOGRAVITY; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; Scale 2.4; Alpha 0.7; } @@ -713,6 +727,7 @@ Class CandyBulletImpact : Actor +FORCERADIUSDMG; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } override void PostBeginPlay() { @@ -788,6 +803,7 @@ Class CandyRing : Actor +NOBLOCKMAP; +FORCEXYBILLBOARD; +NOTELEPORT; + +NOINTERACTION; } States { diff --git a/zscript/swwm_thiccboolet.zsc b/zscript/swwm_thiccboolet.zsc index 922e1db66..6c0736ae3 100644 --- a/zscript/swwm_thiccboolet.zsc +++ b/zscript/swwm_thiccboolet.zsc @@ -51,6 +51,7 @@ Class SilverAirRip : Actor +NOTELEPORT; +FORCERADIUSDMG; +NODAMAGETHRUST; + +NOINTERACTION; } override void PostBeginPlay() { @@ -73,6 +74,7 @@ Class SilverImpact : Actor +NOTELEPORT; +FORCERADIUSDMG; +NODAMAGETHRUST; + +NOINTERACTION; } override void PostBeginPlay() {