From 4bb3a1e85a7c180b119fbb4817094b14c5fedc3d Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Fri, 14 Oct 2022 21:45:21 +0200 Subject: [PATCH] Several optimizations on non-interactive actors. --- README.md | 6 +- language.version | 4 +- zscript/dlc1/swwm_hammertime_fx.zsc | 19 +- zscript/dlc1/swwm_heavymahsheengun_fx.zsc | 18 +- zscript/dlc1/swwm_mister_fx.zsc | 162 ++------ zscript/dlc1/swwm_notashotgun_fx.zsc | 113 +----- zscript/handler/swwm_handler_debugrender.zsc | 2 +- zscript/hud/swwm_hudextra.zsc | 2 - zscript/items/swwm_ammoitems.zsc | 9 +- zscript/items/swwm_baseitem.zsc | 43 ++- zscript/items/swwm_funstuff.zsc | 65 +--- zscript/items/swwm_powerups.zsc | 186 ++------- zscript/swwm_blod.zsc | 55 +-- zscript/swwm_common.zsc | 70 +++- zscript/swwm_common_fx.zsc | 269 ++----------- zscript/swwm_gesture_fx.zsc | 18 +- zscript/swwm_monsters.zsc | 13 +- zscript/swwm_player_fx.zsc | 116 +----- zscript/utility/swwm_utility.zsc | 6 +- zscript/weapons/swwm_baseweapon_fx.zsc | 37 +- zscript/weapons/swwm_baseweapon_melee.zsc | 21 +- zscript/weapons/swwm_blazeit.zsc | 2 +- zscript/weapons/swwm_blazeit_fx.zsc | 84 +--- zscript/weapons/swwm_cbt_fx.zsc | 18 +- zscript/weapons/swwm_danmaku_fx.zsc | 80 +--- .../weapons/swwm_deathlydeathcannon_fx.zsc | 359 ++---------------- zscript/weapons/swwm_deepdarkimpact_fx.zsc | 19 +- zscript/weapons/swwm_shot_fx.zsc | 94 +---- zscript/weapons/swwm_sparkyboi_fx.zsc | 141 +------ zscript/weapons/swwm_splode_fx.zsc | 36 +- zscript/weapons/swwm_tastytreat_fx.zsc | 96 +---- zscript/weapons/swwm_thiccboolet_fx.zsc | 40 +- 32 files changed, 336 insertions(+), 1867 deletions(-) diff --git a/README.md b/README.md index d9c280cc6..a0d62d875 100644 --- a/README.md +++ b/README.md @@ -133,11 +133,11 @@ Coming from the **Doom** modding side of things, this gun really packs a punch, **Primary fire:** Fires, duh. Depending on the loaded ammo the effects may vary. -**Secondary fire:** Switches to/from special golden shells *(if you've got any)*. +**Secondary fire:** Loads a special golden shell *(if you've got any)*. **Reload:** Reloads the gun, obviously. -The **Spreadgun** uses 6 gauge ammunition, apparently just for the sake of making it feel more powerful due to the increased recoil. +The ***"Rhino Stopper"* Spreadgun** uses 6 gauge ammunition, apparently just for the sake of making it feel more powerful due to the increased recoil. A single shot from this thing is about as powerful as your typical *"super shotgun"*. ### 6ga shells ~ Replaces Clip / Shells, Wand Crystal / Ethereal Arrows ![](docimg/shells.png) @@ -160,7 +160,7 @@ A fine six-shooter for the gunslinger at heart. Particularly, it's a semi-auto r ### SMW.05 rounds ~ Replaces Clip / Shells, Wand Crystal / Ethereal Arrows ![](docimg/smwammo.png) -These 6.9mm ***(nice)*** corkscrew-shaped bullets have some fine drilling power, being capable of piercing nicely through various surfaces. You may find them in various forms, sometimes as speedloaders for the **Beta**, and other times as magazines for the **Gamma**. +These 6.9mm ***(nice)*** corkscrew-shaped bullets have some fine drilling power, being capable of piercing nicely through many things, including walls. You may find them in various forms, sometimes as speedloaders for the **Beta**, and other times as magazines for the **Gamma**. ### Wallbuster *(slot 4)* ~ Replaces SSG, Ethereal Crossbow, Frost Shards ![](docimg/wallbuster.png) diff --git a/language.version b/language.version index 9efda4297..9fad84f73 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r571 \cu(Thu 13 Oct 13:43:32 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r571 \cu(2022-10-13 13:43:32)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r572 \cu(Fri 14 Oct 21:45:22 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r572 \cu(2022-10-14 21:45:22)\c-"; diff --git a/zscript/dlc1/swwm_hammertime_fx.zsc b/zscript/dlc1/swwm_hammertime_fx.zsc index 65030d3b3..354d12468 100644 --- a/zscript/dlc1/swwm_hammertime_fx.zsc +++ b/zscript/dlc1/swwm_hammertime_fx.zsc @@ -1,19 +1,13 @@ // Itamex Hammer projectiles and effects // akin to the land shockwave, but with sliiiiightly different behavior -Class HammerShockwave : Actor +Class HammerShockwave : SWWMNonInteractiveActor { Default { Obituary "$O_HAMMER"; - +NOGRAVITY; - +NOBLOCKMAP; - +NOTELEPORT; +NODAMAGETHRUST; +FORCERADIUSDMG; - +NOINTERACTION; - Radius .1; - Height 0.; } override void PostBeginPlay() { @@ -70,17 +64,6 @@ Class HammerShockwave : Actor raging.DoHitFX(); } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: diff --git a/zscript/dlc1/swwm_heavymahsheengun_fx.zsc b/zscript/dlc1/swwm_heavymahsheengun_fx.zsc index e337355e7..1b412e085 100644 --- a/zscript/dlc1/swwm_heavymahsheengun_fx.zsc +++ b/zscript/dlc1/swwm_heavymahsheengun_fx.zsc @@ -8,18 +8,11 @@ Class SheenCasing : SWWMCasing } } -Class SheenPhantom : Actor +Class SheenPhantom : SWWMNonInteractiveActor { Default { - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; +INTERPOLATEANGLES; - Radius .1; - Height 0.; Alpha .5; RenderStyle "Add"; } @@ -36,23 +29,16 @@ Class SheenPhantom : Actor } } -Class SheenTrail : Actor +Class SheenTrail : SWWMNonInteractiveActor { Default { Obituary "$O_SHEENHMG"; DamageType "Fire"; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; +INTERPOLATEANGLES; +FORCERADIUSDMG; +NODAMAGETHRUST; Speed 200; - Radius .1; - Height 0.; RenderStyle "Add"; } diff --git a/zscript/dlc1/swwm_mister_fx.zsc b/zscript/dlc1/swwm_mister_fx.zsc index 291752012..677736b88 100644 --- a/zscript/dlc1/swwm_mister_fx.zsc +++ b/zscript/dlc1/swwm_mister_fx.zsc @@ -77,30 +77,13 @@ Class MisterMag : SWWMCasing } } -Class MisterRing : Actor +Class MisterRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 1.5; - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -144,23 +127,17 @@ Class MisterExLightTiny : MisterExLight } } -Class MisterBulletImpactPop : Actor +Class MisterBulletImpactPop : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 6.; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +NOTELEPORT; - +NOINTERACTION; } override void Tick() { @@ -189,7 +166,7 @@ Class MisterBulletImpactPop : Actor } } -Class MisterFuzzy : Actor +Class MisterFuzzy : SWWMNonInteractiveActor { MisterRailCounter mrc; Default @@ -197,15 +174,9 @@ Class MisterFuzzy : Actor Obituary "$O_MORTALRIFLE"; DamageType "Mortal"; RenderStyle "Add"; - Radius .1; - Height 0; +NODAMAGETHRUST; +FORCERADIUSDMG; +FOILINVUL; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOINTERACTION; } override void PostBeginPlay() { @@ -300,21 +271,14 @@ Class MisterFuzzy : Actor } } -Class MisterFuzzyTrail : Actor +Class MisterFuzzyTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; Scale 1.5; Alpha .25; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -333,7 +297,7 @@ Class MisterFuzzyTrail : Actor } } -Class MisterPop : Actor +Class MisterPop : SWWMNonInteractiveActor { MisterRailCounter mrc; Default @@ -341,32 +305,14 @@ Class MisterPop : Actor Obituary "$O_MORTALRIFLE"; DamageType "Mortal"; RenderStyle "Add"; - Radius .1; - Height 0.; Scale .2; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; +FOILINVUL; +ROLLSPRITE; +ROLLCENTER; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -394,7 +340,7 @@ Class MisterPop : Actor } } -Class MisterBulletImpact : Actor +Class MisterBulletImpact : SWWMNonInteractiveActor { MisterRailCounter mrc; // simplify code by putting this here Default @@ -402,17 +348,11 @@ Class MisterBulletImpact : Actor Obituary "$O_MORTALRIFLE"; DamageType "Mortal"; RenderStyle "Add"; - Radius .1; - Height 0.; Scale 1.5; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } virtual void A_BulletExplode() { @@ -477,23 +417,15 @@ Class MisterBulletImpact : Actor } special1++; } - override void Tick() - { - if ( isFrozen() ) return; - A_SetScale(scale.x*1.02,scale.y*1.02); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: TNT1 A 0; - XEX7 ABDEGHJKMNPQSTVWYZ\] 1 Bright A_BulletSubExplode(); + XEX7 ABDEGHJKMNPQSTVWYZ\] 1 Bright + { + A_SetScale(scale.x*1.02,scale.y*1.02); + A_BulletSubExplode(); + } Stop; } } @@ -573,7 +505,11 @@ Class MisterBuckshotImpact : MisterBulletImpact { Spawn: TNT1 A 0; - XEX7 ADGJMPSVY\ 1 Bright A_BulletSubExplode(); + XEX7 ADGJMPSVY\ 1 Bright + { + A_SetScale(scale.x*1.02,scale.y*1.02); + A_BulletSubExplode(); + } Stop; } } @@ -653,7 +589,11 @@ Class MisterStreamImpact : MisterBulletImpact { Spawn: TNT1 A 0; - XEX7 ACEGIKMOQSUWY[] 1 Bright A_BulletSubExplode(); + XEX7 ACEGIKMOQSUWY[] 1 Bright + { + A_SetScale(scale.x*1.02,scale.y*1.02); + A_BulletSubExplode(); + } Stop; } } @@ -742,7 +682,11 @@ Class MisterRailEntryImpact : MisterBulletImpact { Spawn: TNT1 A 0; - XEX7 ACEGIKMOQSUWY[] 1 Bright A_BulletSubExplode(); + XEX7 ACEGIKMOQSUWY[] 1 Bright + { + A_SetScale(scale.x*1.02,scale.y*1.02); + A_BulletSubExplode(); + } Stop; } } @@ -830,7 +774,11 @@ Class MisterRailExitImpact : MisterBulletImpact { Spawn: TNT1 A 0; - XEX7 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 1 Bright A_BulletSubExplode(); + XEX7 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 1 Bright + { + A_SetScale(scale.x*1.02,scale.y*1.02); + A_BulletSubExplode(); + } Stop; } } @@ -845,7 +793,7 @@ Class MisterRailLight : PaletteLight } } -Class MisterRailHit : Actor +Class MisterRailHit : SWWMNonInteractiveActor { MisterRailCounter mrc; @@ -853,16 +801,9 @@ Class MisterRailHit : Actor { Obituary "$O_MORTALRIFLE"; DamageType 'Mortal'; - Radius .1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; +FORCERADIUSDMG; +FOILINVUL; +NODAMAGETHRUST; - +NOINTERACTION; } virtual void Explode( bool thruwall = false ) { @@ -870,17 +811,6 @@ Class MisterRailHit : Actor [nhit, nkill] = SWWMUtility.DoExplosion(self,44,120000,100,100,DE_EXTRAZTHRUST|DE_COUNTENEMIES,ignoreme:target); if ( mrc ) mrc.nkill += nkill; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -889,7 +819,7 @@ Class MisterRailHit : Actor } } -Class MisterRailBeam : Actor +Class MisterRailBeam : SWWMNonInteractiveActor { MisterRailCounter mrc; transient CandyBeamTracer cbt; // from wikipedia @@ -898,15 +828,8 @@ Class MisterRailBeam : Actor { Obituary "$O_MORTALRIFLE"; RenderStyle "Add"; - Radius .1; - Height 0.; RenderRadius 10000.; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; +FOILINVUL; } override void PostBeginPlay() @@ -945,21 +868,14 @@ Class MisterRailBeam : Actor Stop; } } -Class MisterRailChildBeam : Actor +Class MisterRailChildBeam : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; Alpha .5; RenderRadius 10000.; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -975,19 +891,12 @@ Class MisterRailChildBeam : Actor } } -Class MisterGrenadeFlare : Actor +Class MisterGrenadeFlare : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; - +NOINTERACTION; } override void Tick() { @@ -999,7 +908,6 @@ Class MisterGrenadeFlare : Actor } SetOrigin(master.Vec3Offset(0,0,master.height/2),true); } - States { Spawn: diff --git a/zscript/dlc1/swwm_notashotgun_fx.zsc b/zscript/dlc1/swwm_notashotgun_fx.zsc index a0eccf18f..5dec5159e 100644 --- a/zscript/dlc1/swwm_notashotgun_fx.zsc +++ b/zscript/dlc1/swwm_notashotgun_fx.zsc @@ -41,26 +41,20 @@ Class QuadExplLight3 : PaletteLight } } -Class QuadFlare : Actor +Class QuadFlare : SWWMNonInteractiveActor { bool bBig; Default { RenderStyle "Add"; - Radius .1; - Height 0.; Alpha .5; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; - +NOINTERACTION; } override void Tick() { + prev = pos; if ( isFrozen() ) return; if ( !master || !master.bMISSILE ) { @@ -84,23 +78,18 @@ Class QuadFlare : Actor } } -Class QuadTrail : Actor +Class QuadTrail : SWWMNonInteractiveActor { + Mixin SWWMMinimalMovingTick; + Default { RenderStyle "Add"; - Radius .1; - Height 0.; Alpha .5; Scale 1.5; - +NOBLOCKMAP; - +NOGRAVITY; - +NOTELEPORT; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +DONTSPLASH; - +NOINTERACTION; } override void PostBeginPlay() { @@ -116,18 +105,6 @@ Class QuadTrail : Actor A_SetScale(scale.x*.96); A_FadeOut(.05); } - override void Tick() - { - if ( isFrozen() ) return; - SetOrigin(level.Vec3Offset(pos,vel),true); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -136,22 +113,15 @@ Class QuadTrail : Actor } } -Class QuadEmber : Actor +Class QuadEmber : SWWMNonInteractiveActor { Vector3 freq, amp, ph; Default { RenderStyle "Add"; - Radius .1; - Height 0; Scale .3; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; } override void PostBeginPlay() { @@ -198,12 +168,6 @@ Class QuadEmber : Actor } else A_FadeOut(FRandom[ExploS](.02,.05)); frame = clamp(int(round(4-alpha*4)),0,4); - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -216,30 +180,13 @@ Class QuadEmber : Actor } } -Class QuadExplRing : Actor +Class QuadExplRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 1.2; - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -481,29 +428,14 @@ Class QuadExplArm2 : QuadExplArm } } -Class QuadExplTrail : Actor +Class QuadExplTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 1.2; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -1094,8 +1026,10 @@ Class OnFire : Inventory } } -Class OnFireTrail : Actor +Class OnFireTrail : SWWMNonInteractiveActor { + Mixin SWWMMinimalMovingWaterTick; + override void PostBeginPlay() { Super.PostBeginPlay(); @@ -1126,40 +1060,15 @@ Class OnFireTrail : Actor A_SetScale(scale.x*.98,scale.y*.98); A_FadeOut(.01); } - override void Tick() - { - if ( isFrozen() ) return; - SetOrigin(level.Vec3Offset(pos,vel),true); - UpdateWaterLevel(); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } - override bool CanCollideWith( Actor Other, bool passive ) - { - return false; - } Default { RenderStyle "Add"; Speed 2; - Radius 2; - Height 4; Alpha .3; Scale .6; - +NOBLOCKMAP; - +NOGRAVITY; - +NOTELEPORT; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +DONTSPLASH; - +NOINTERACTION; - +MBFBOUNCER; } States { diff --git a/zscript/handler/swwm_handler_debugrender.zsc b/zscript/handler/swwm_handler_debugrender.zsc index 987c88d19..bdd358f18 100644 --- a/zscript/handler/swwm_handler_debugrender.zsc +++ b/zscript/handler/swwm_handler_debugrender.zsc @@ -112,7 +112,7 @@ extend Class SWWMHandler if ( a.bINVISIBLE && !(a is 'DynamicLight') ) continue; if ( (a is 'Inventory') && Inventory(a).Owner ) continue; if ( (a is 'SWWMPickupFlash') && (a.CurState == a.FindState('Pickup')) ) continue; - if ( (a is 'SWWMShadow') || (a is 'GhostArtifactX') || (a is 'HeadpatTracker') || (a is 'SWWMExtendedItemHitbox') || (a is 'SWWMTeleportLine') || (a is 'SWWMTeleportDest') ) continue; + if ( (a is 'SWWMShadow') || (a is 'SWWMItemOverlay') || (a is 'HeadpatTracker') || (a is 'SWWMExtendedItemHitbox') || (a is 'SWWMTeleportLine') || (a is 'SWWMTeleportDest') ) continue; if ( a.Distance3DSquared(e.Camera) > 1000000 ) continue; DrawActor(e,a); } diff --git a/zscript/hud/swwm_hudextra.zsc b/zscript/hud/swwm_hudextra.zsc index 30402a973..4060f83fe 100644 --- a/zscript/hud/swwm_hudextra.zsc +++ b/zscript/hud/swwm_hudextra.zsc @@ -537,9 +537,7 @@ Class SWWMDialogueTrigger : Actor default { +NOBLOCKMAP; - +NOGRAVITY; +NOINTERACTION; - +DONTSPLASH; } override void Activate( Actor activator ) { diff --git a/zscript/items/swwm_ammoitems.zsc b/zscript/items/swwm_ammoitems.zsc index 728ea11ed..393a6e572 100644 --- a/zscript/items/swwm_ammoitems.zsc +++ b/zscript/items/swwm_ammoitems.zsc @@ -68,7 +68,7 @@ Class RedShell16 : RedShell } } -Class GoldShellSparkle : Actor +Class GoldShellSparkle : SWWMNonInteractiveActor { override void PostBeginPlay() { @@ -86,14 +86,7 @@ Class GoldShellSparkle : Actor { RenderStyle "Add"; Scale 0.05; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +SYNCHRONIZED; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; - FloatBobPhase 0; } States { diff --git a/zscript/items/swwm_baseitem.zsc b/zscript/items/swwm_baseitem.zsc index 5cbcd5d27..aadd95401 100644 --- a/zscript/items/swwm_baseitem.zsc +++ b/zscript/items/swwm_baseitem.zsc @@ -155,16 +155,10 @@ Mixin Class SWWMOverlapPickupSound } } -Class SWWMRespawnTimer : Actor +Class SWWMRespawnTimer : SWWMNonInteractiveActor { default { - +NOGRAVITY; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; - Radius .1; - Height 0.; Args 0,3,2; } override void PostBeginPlay() @@ -195,12 +189,6 @@ Class SWWMRespawnTimer : Actor A_SpawnParticle(Color(args[0]*85,args[1]*85,args[2]*85),SPF_FULLBRIGHT,Random[ExploS](30,60),FRandom[ExploS](1.,2.),0,0,0,16,FRandom[ExploS](-.8,.8),FRandom[ExploS](-.8,.8),FRandom[ExploS](-.8,.8),0,0,0,FRandom[ExploS](.45,.9)*str,-1,FRandom[ExploS](-.04,-.02)*str); } } - States - { - Spawn: - TNT1 A -1; - Stop; - } } Mixin Class SWWMPickupGlow @@ -219,6 +207,35 @@ Mixin Class SWWMPickupGlow } } +Class SWWMItemOverlay : SWWMNonInteractiveActor +{ + Default + { + RenderStyle "Add"; + +FLOATBOB; + FloatBobStrength .25; + } + override void Tick() + { + if ( !target ) + { + Destroy(); + return; + } + prev = target.prev; + if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+target.vel,true); + if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); + FloatBobPhase = target.FloatBobPhase; + bInvisible = target.bInvisible||Inventory(target).Owner; + } + States + { + Spawn: + XZW1 A -1 Bright; + Stop; + } +} + Mixin Class SWWMRespawn { override void Hide() diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index 2bbe75b40..bce5aadea 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -283,19 +283,11 @@ Class SWWMFlag : Actor } // oof -Class SWWMGasCloudSpawner : Actor +Class SWWMGasCloudSpawner : SWWMNonInteractiveActor { - Default - { - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - } override void Tick() { + if ( isFrozen() ) return; if ( !(special1%5) ) { Vector3 x, y, z; @@ -309,20 +301,15 @@ Class SWWMGasCloudSpawner : Actor } } -Class SWWMGasCloud : Actor +Class SWWMGasCloud : SWWMNonInteractiveActor { Default { - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; +FORCERADIUSDMG; } override void Tick() { + if ( isFrozen() ) return; for ( int i=0; i<2; i++ ) { let e = Spawn("SWWMFart",level.Vec3Offset(pos,specialf1*SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*20.)); @@ -352,7 +339,7 @@ Class SWWMFart : SWWMHalfSmoke } // yay! -Class FancyConfetti : Actor +Class FancyConfetti : SWWMNonInteractiveActor { int deadtimer; bool dead; @@ -362,20 +349,10 @@ Class FancyConfetti : Actor Default { - Radius 2; - Height 2; - +NOBLOCKMAP; - +DROPOFF; - +THRUACTORS; - +NOTELEPORT; - +DONTSPLASH; +INTERPOLATEANGLES; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; - +SYNCHRONIZED; Gravity 0.05; - FloatBobPhase 0; } override void PostBeginPlay() { @@ -522,20 +499,13 @@ Class FancyConfetti : Actor Stop; } } -Class SuperFancyTrail : Actor +Class SuperFancyTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; XScale 24.; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -550,24 +520,16 @@ Class SuperFancyTrail : Actor Stop; } } -Class SuperFancySparkle : Actor +Class SuperFancySparkle : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius 0.1; - Height 0; Scale .25; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; +INTERPOLATEANGLES; +FORCEXYBILLBOARD; - +NOINTERACTION; - +SYNCHRONIZED; - FloatBobPhase 0; } override void PostBeginPlay() { @@ -583,8 +545,8 @@ Class SuperFancySparkle : Actor } override void Tick() { - if ( isFrozen() ) return; prev = pos; + if ( isFrozen() ) return; A_SetScale(scale.x*specialf1); A_SetRoll(roll+special1,SPF_INTERPOLATE); A_FadeOut(specialf2); @@ -641,19 +603,10 @@ Class SuperPartyLight : PaletteLight SetOrigin(level.Vec3Offset(pos,vel),true); } } -Class PartyTime : Actor +Class PartyTime : SWWMNonInteractiveActor { bool ignite; - Default - { - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - } override void PostBeginPlay() { if ( target ) specialf1 = target.Height/2.; diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index ca880bde1..eec72feb1 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -236,14 +236,8 @@ Mixin Class SWWMShadedPowerup } } -Class GhostSnd : Actor +Class GhostSnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -405,44 +399,7 @@ Class GhostPower : PowerInvisibility } } -Class GhostArtifactX : Actor -{ - SpriteID bsprite; - - Default - { - RenderStyle "Add"; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOINTERACTION; - Radius .1; - Height 0; - +FLOATBOB; - FloatBobStrength 0.25; - } - override void Tick() - { - if ( !target ) - { - Destroy(); - return; - } - prev = target.prev; - vel = target.vel; - if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true); - if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); - FloatBobPhase = target.FloatBobPhase; - if ( !bsprite ) bsprite = GetSpriteIndex('XZW1'); - bInvisible = target.bInvisible||(target.sprite!=bsprite); - } - States - { - Spawn: - XZW1 A -1 Bright; - Stop; - } -} +Class GhostArtifactX : SWWMItemOverlay {} Class GhostArtifact : Inventory { @@ -521,14 +478,8 @@ Class GhostArtifact : Inventory } } -Class GravSnd : Actor +Class GravSnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -614,7 +565,7 @@ Class GravityPower : Powerup } -Class GravityX : GhostArtifactX +Class GravityX : SWWMItemOverlay { Default { @@ -717,14 +668,8 @@ Class InvinciballLight : PointLightAttenuated bDORMANT = Powerup(master).isBlinking(); } } -Class InvinciSnd : Actor +Class InvinciSnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -854,7 +799,7 @@ Class InvinciballPower : Powerup } } -Class InvinciballX : GhostArtifactX +Class InvinciballX : SWWMItemOverlay { Default { @@ -967,14 +912,8 @@ Class RagekitLight : PointLightAttenuated } } -Class RageSnd : Actor +Class RageSnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -1140,7 +1079,7 @@ Class RagekitPower : Powerup } } -Class RagekitX : GhostArtifactX +Class RagekitX : SWWMItemOverlay { Default { @@ -2002,14 +1941,8 @@ Class BarrierLight : PointLightAttenuated bDORMANT = Powerup(master).isBlinking(); } } -Class BarrierSnd : Actor +Class BarrierSnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -2273,9 +2206,7 @@ Class EBarrier : Inventory } } -Class EBarrierX : GhostArtifactX -{ -} +Class EBarrierX : SWWMItemOverlay {} Class TendrilTracer : LineTracer { @@ -2308,7 +2239,7 @@ Class TendrilTracer : LineTracer } // main heatseeker -Class MykradvoTendril : Actor +Class MykradvoTendril : SWWMNonInteractiveActor { Vector3 nextpos, nextdir; @@ -2446,15 +2377,8 @@ Class MykradvoTendril : Actor DamageFunction 100; ReactionTime 8; Speed 64; - Radius .1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; +INTERPOLATEANGLES; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; +MISSILEMORE; } States @@ -2622,7 +2546,7 @@ Class MykradvoBurstLight : PaletteLight } // 'splode -Class MykradvoBurst : Actor +Class MykradvoBurst : SWWMNonInteractiveActor { Array targets; int nstep; @@ -2630,11 +2554,7 @@ Class MykradvoBurst : Actor Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 1.4; } void FlashPlayer( int str, double rad ) @@ -2955,7 +2875,7 @@ Class Mykradvo : Inventory } } -Class MykradvoX : GhostArtifactX +Class MykradvoX : SWWMItemOverlay { Default { @@ -2976,14 +2896,12 @@ Class MykradvoX : GhostArtifactX return; } prev = target.prev; - vel = target.vel; if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true); if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); FloatBobPhase = target.FloatBobPhase; A_SetScale(.16+.01*sin(GetAge()*4)); - if ( !bsprite ) bsprite = GetSpriteIndex('XZW0'); bool bOldInvis = bInvisible; - bInvisible = target.bInvisible||(target.sprite!=bsprite); + bInvisible = target.bInvisible||Inventory(target).Owner; if ( bInvisible != bOldInvis ) { SetState(SpawnState+bInvisible); @@ -2999,7 +2917,7 @@ Class MykradvoX : GhostArtifactX } } -Class MykradvoX2 : GhostArtifactX +Class MykradvoX2 : SWWMItemOverlay { Default { @@ -3018,16 +2936,14 @@ Class MykradvoX2 : GhostArtifactX return; } prev = target.prev; - vel = target.vel; if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true); if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); + FloatBobPhase = target.FloatBobPhase; A_SetPitch(sin(GetAge()*special1*8)*5,SPF_INTERPOLATE); A_SetRoll(cos(GetAge()*special1*8)*5,SPF_INTERPOLATE); - FloatBobPhase = target.FloatBobPhase; A_SetScale(1.+.05*cos(GetAge()*4)*special1); - if ( !bsprite ) bsprite = GetSpriteIndex('XZW0'); bool bOldInvis = bInvisible; - bInvisible = target.bInvisible||(target.sprite!=bsprite); + bInvisible = target.bInvisible||Inventory(target).Owner; if ( bInvisible != bOldInvis ) SetState(SpawnState+bInvisible); } @@ -3194,14 +3110,8 @@ Class AngeryLight : PointLightAttenuated bDORMANT = Powerup(master).isBlinking(); } } -Class AngerySnd : Actor +Class AngerySnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -3394,7 +3304,7 @@ Class AngerySigil : Inventory Stop; } } -Class AngerySigilX : GhostArtifactX +Class AngerySigilX : SWWMItemOverlay { Default { @@ -3417,13 +3327,11 @@ Class AngerySigilX : GhostArtifactX return; } prev = target.prev; - vel = target.vel; if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true); if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); FloatBobPhase = target.FloatBobPhase; - if ( !bsprite ) bsprite = GetSpriteIndex('XZW1'); bool bOldInvis = bInvisible; - bInvisible = target.bInvisible||(target.sprite!=bsprite); + bInvisible = target.bInvisible||Inventory(target).Owner; if ( bInvisible != bOldInvis ) { SetState(SpawnState+bInvisible); @@ -3464,14 +3372,8 @@ Class DivineSpriteLight : PointLightAttenuated args[LIGHT_INTENSITY] = Random[Invinciball](10,12)*10; } } -Class DivineSpriteSnd : Actor +Class DivineSpriteSnd : SWWMNonInteractiveActor { - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - } override void Tick() { if ( !target || !master ) @@ -3668,7 +3570,7 @@ Class DivineSprite : Inventory Stop; } } -Class DivineSpriteX : GhostArtifactX +Class DivineSpriteX : SWWMItemOverlay { Default { @@ -3689,13 +3591,11 @@ Class DivineSpriteX : GhostArtifactX return; } prev = target.prev; - vel = target.vel; if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true); if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); FloatBobPhase = target.FloatBobPhase; - if ( !bsprite ) bsprite = GetSpriteIndex('XZW1'); bool bOldInvis = bInvisible; - bInvisible = target.bInvisible||(target.sprite!=bsprite); + bInvisible = target.bInvisible||Inventory(target).Owner; if ( bOldInvis != bInvisible ) { SetState(SpawnState+bInvisible); @@ -3713,18 +3613,8 @@ Class DivineSpriteX : GhostArtifactX // TBD 1.4 Ballsy Bomb -Class BallImpact : Actor +Class BallImpact : SWWMNonInteractiveActor { - Default - { - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { Super.PostBeginPlay(); @@ -4061,24 +3951,18 @@ Class SaltLight2 : PaletteLight } } -Class SaltImpact : Actor +Class SaltImpact : SWWMNonInteractiveActor { Default { Obituary "$O_SALTSHOT"; DamageType "Salt"; RenderStyle "Add"; - Radius 0.1; - Height 0; Scale 1.8; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } override void PostBeginPlay() { @@ -4117,17 +4001,6 @@ Class SaltImpact : Actor } Spawn("SaltLight2",pos); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -4144,27 +4017,20 @@ Class SaltImpact : Actor } } -Class SaltBeam : Actor +Class SaltBeam : SWWMNonInteractiveActor { Default { Obituary "$O_SALTSHOT"; DamageType "Salt"; RenderStyle "Add"; - Radius 0.1; - Height 0; Stamina 9; Speed 32; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; +ROLLSPRITE; +ROLLCENTER; +NODAMAGETHRUST; +FORCERADIUSDMG; +FOILINVUL; - +NOINTERACTION; } void SpreadOut() diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index d20d89d2a..29d7aed7d 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -1,13 +1,10 @@ // Gore FX ported over from Soundless Mound, with some edits // Base blood actor -Class mkBlood : Actor +Class mkBlood : SWWMNonInteractiveActor { Default { - +NOBLOCKMAP; - +NOGRAVITY; - +NOTELEPORT; +PUFFGETSOWNER; } action void A_Bleed( int str = 1 ) @@ -37,17 +34,6 @@ Class mkBlood : Actor s.scale *= .4*str; s.special1 += str-1; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -61,7 +47,7 @@ Class mkBlood : Actor } // a burst of blood attached to a bleeding actor -Class mkBloodSpray : Actor +Class mkBloodSpray : SWWMNonInteractiveActor { double str; int cnt; @@ -69,13 +55,6 @@ Class mkBloodSpray : Actor double baseang; color shadecol; - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { if ( !target ) @@ -129,7 +108,7 @@ Class mkBloodSpray : Actor // drop of salsa // becomes a decal on crash -Class mkBloodDrop : Actor +Class mkBloodDrop : SWWMNonInteractiveActor { bool killme; bool dead, onceiling; @@ -140,17 +119,10 @@ Class mkBloodDrop : Actor Default { +MISSILE; - +NOBLOCKMAP; - +DROPOFF; - +NOTELEPORT; - +THRUACTORS; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; Scale .35; - Radius 2; - Height 2; Mass 1; RenderStyle "Translucent"; } @@ -410,14 +382,10 @@ Class mkBloodDrop : Actor } // chunky salsa in the air -Class mkBloodSmoke : Actor +Class mkBloodSmoke : SWWMNonInteractiveActor { Default { - +NOBLOCKMAP; - +NOGRAVITY; - +NOINTERACTION; - +NOTELEPORT; +FORCEXYBILLBOARD; +ROLLSPRITE; Scale .5; @@ -441,12 +409,6 @@ Class mkBloodSmoke : Actor A_FadeOut(.04/max(1.,special1)); A_SetScale(scale.x*(1.+.04/max(1.,special1))); vel *= 1.-.04/max(1.,special1); - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -617,7 +579,7 @@ Class mkFlyingGib : Actor } // Manually added gibbing -Class mkGibber : Actor +Class mkGibber : SWWMNonInteractiveActor { Actor Gibbed; int gibcount, gibsize; @@ -726,11 +688,6 @@ Class mkGibber : Actor Default { - +NOBLOCKMAP; - +NOGRAVITY; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; Radius 32; Height 16; mkGibber.GibType "mkFlyingGib"; @@ -761,7 +718,7 @@ Class PurpleBloodReference : Actor } // bare actor used for extra gib deaths -Class ExtraGibDeaths : Actor +Class ExtraGibDeaths : SWWMNonInteractiveActor { StateLabel gibstate; diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index e428e17be..c0aaa2a93 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -24,8 +24,76 @@ enum ESWWMGZChannels const FallbackTag = "AWESOME IT'S PENIS"; // used on tag processing, please don't mind the actual string used) const MaxBouncePerTic = 40; // maximum simultaneous bounces in one tic for a lightweight actor before we consider it's stuck +// super-minimal tick override that simply advances states when not frozen +Mixin Class SWWMMinimalTick +{ + override void Tick() + { + if ( isFrozen() ) return; + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } + } +} +// + move by velocity +Mixin Class SWWMMinimalMovingTick +{ + override void Tick() + { + prev = pos; + if ( isFrozen() ) return; + SetOrigin(level.Vec3Offset(pos,vel),true); + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } + } +} +// + check water level after move +Mixin Class SWWMMinimalMovingWaterTick +{ + override void Tick() + { + prev = pos; + if ( isFrozen() ) return; + SetOrigin(level.Vec3Offset(pos,vel),true); + UpdateWaterLevel(); + if ( !CheckNoDelay() || (tics == -1) ) return; + if ( tics > 0 ) tics--; + while ( !tics ) + { + if ( !SetState(CurState.NextState) ) + return; + } + } +} + +// absolutely non-interactive actor that is net-safe for clientside use +Class SWWMNonInteractiveActor : Actor +{ + Mixin SWWMMinimalTick; + + Default + { + +NOINTERACTION; + +NOBLOCKMAP; // needed since we don't use the internal Tick + +SYNCHRONIZED; + +DONTBLAST; + FloatBobPhase 0; + Radius .1; + Height 0; + } +} + // basic "does nothing" actor, used to remove stuff in CheckReplacement -Class SWWMNothing : Actor +Class SWWMNothing : SWWMNonInteractiveActor { States { diff --git a/zscript/swwm_common_fx.zsc b/zscript/swwm_common_fx.zsc index ae64b8117..af350fcc8 100644 --- a/zscript/swwm_common_fx.zsc +++ b/zscript/swwm_common_fx.zsc @@ -68,27 +68,17 @@ Class PaletteLight : PointLight } // Generic smoke, lightweight tick -Class SWWMSmoke : Actor +Class SWWMSmoke : SWWMNonInteractiveActor { Default { RenderStyle "Shaded"; StencilColor "FFFFFF"; - Radius .1; - Height 0; Speed 1; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +THRUACTORS; - +NOTELEPORT; - +NOINTERACTION; - +SYNCHRONIZED; Scale .3; - FloatBobPhase 0; } override void PostBeginPlay() @@ -171,6 +161,7 @@ Class SWWMSmoke : Actor Destroy(); return; } + if ( !CheckNoDelay() || (tics == -1) ) return; if ( tics > 0 ) tics--; while ( !tics ) { @@ -187,27 +178,18 @@ Class SWWMSmoke : Actor } } -// strictly non-interacting smoke, much lighter tick, used for heavier effects -Class SWWMHalfSmoke : Actor +// strictly non-colliding smoke, much lighter tick, used for heavier effects +Class SWWMHalfSmoke : SWWMNonInteractiveActor { Default { RenderStyle "Shaded"; StencilColor "FFFFFF"; - Radius .1; - Height 0; Speed 1; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +NOTELEPORT; - +NOINTERACTION; - +SYNCHRONIZED; Scale 0.3; - FloatBobPhase 0; } override void PostBeginPlay() { @@ -237,6 +219,7 @@ Class SWWMHalfSmoke : Actor Destroy(); return; } + if ( !CheckNoDelay() || (tics == -1) ) return; if ( tics > 0 ) tics--; while ( !tics ) { @@ -276,23 +259,13 @@ Class SWWMSmallSmoke : SWWMHalfSmoke } } -Class SWWMBubble : Actor +Class SWWMBubble : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; +FORCEXYBILLBOARD; - +NOTELEPORT; - +THRUACTORS; - +NOINTERACTION; - +SYNCHRONIZED; Scale 0.5; - FloatBobPhase 0; } override void PostBeginPlay() { @@ -365,6 +338,7 @@ Class SWWMBubble : Actor SetOrigin(newpos,true); UpdateWaterLevel(); if ( (waterlevel <= 0) || !Random[Puff](0,100) ) Destroy(); + if ( !CheckNoDelay() || (tics == -1) ) return; if ( tics > 0 ) tics--; while ( !tics ) { @@ -380,19 +354,12 @@ Class SWWMBubble : Actor } } -Class SWWMSparkTrail : Actor +Class SWWMSparkTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -408,7 +375,7 @@ Class SWWMSparkTrail : Actor } } -Class SWWMSpark : Actor +Class SWWMSpark : SWWMNonInteractiveActor { bool dead; Sector tracksector; @@ -417,18 +384,9 @@ Class SWWMSpark : Actor Default { RenderStyle "Add"; - Radius .1; - Height 0; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +THRUACTORS; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - +SYNCHRONIZED; - Gravity 0.2; - Scale 0.05; - FloatBobPhase 0; + Gravity .2; + Scale .05; } override void Tick() { @@ -554,6 +512,7 @@ Class SWWMSpark : Actor Destroy(); return; } + if ( !CheckNoDelay() || (tics == -1) ) return; if ( tics > 0 ) tics--; while ( !tics ) { @@ -572,7 +531,7 @@ Class SWWMSpark : Actor } } -Class SWWMChip : Actor +Class SWWMChip : SWWMNonInteractiveActor { SWWMChip prevchip, nextchip; bool killme; @@ -583,21 +542,12 @@ Class SWWMChip : Actor Default { - Radius .1; - Height 0; - +NOBLOCKMAP; - +THRUACTORS; - +NOTELEPORT; - +DONTSPLASH; +INTERPOLATEANGLES; +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; - +NOINTERACTION; - +SYNCHRONIZED; - Gravity 0.35; - Scale 0.2; - FloatBobPhase 0; + Gravity .35; + Scale .2; } override void PostBeginPlay() { @@ -781,33 +731,14 @@ Class PoofLight2 : PaletteLight } } -Class SWWMItemFog : Actor +Class SWWMItemFog : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; - +SYNCHRONIZED; +FORCEXYBILLBOARD; - FloatBobPhase 0; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -849,23 +780,15 @@ Class TeleLight : PaletteLight } } -Class SWWMTeleportSparkle : Actor +Class SWWMTeleportSparkle : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Scale 0.3; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; + Scale .3; +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; - +NOINTERACTION; - +SYNCHRONIZED; - FloatBobPhase 0; } override void Tick() { @@ -887,18 +810,8 @@ Class SWWMTeleportSparkle : Actor } } -Class SWWMTeleportDest : Actor +Class SWWMTeleportDest : SWWMNonInteractiveActor { - Default - { - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOINTERACTION; - Radius .1; - Height 0.; - } - override void PostBeginPlay() { special1 = Random[ExploS](0,10); @@ -918,20 +831,10 @@ Class SWWMTeleportDest : Actor } } -Class SWWMTeleportLine : Actor +Class SWWMTeleportLine : SWWMNonInteractiveActor { Line tline; - Default - { - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOINTERACTION; - Radius .1; - Height 0.; - } - override void PostBeginPlay() { special1 = Random[ExploS](0,5); @@ -965,20 +868,12 @@ Class SWWMTeleportLine : Actor } } -Class SWWMTeleportFog : Actor +Class SWWMTeleportFog : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOINTERACTION; - +SYNCHRONIZED; +FORCEXYBILLBOARD; - Radius .1; - Height 0.; - FloatBobPhase 0; } override void PostBeginPlay() { @@ -986,17 +881,6 @@ Class SWWMTeleportFog : Actor A_StartSound("misc/teleport",CHAN_VOICE); Spawn("TeleLight",pos); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -1034,7 +918,7 @@ Class SWWMTeleportFog : Actor } } -Class SWWMPickupFlash : Actor +Class SWWMPickupFlash : SWWMNonInteractiveActor { Vector3 lastitempos; @@ -1042,17 +926,9 @@ Class SWWMPickupFlash : Actor { RenderStyle "Add"; Args 0,3,2,1; - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; - +SYNCHRONIZED; +FORCEXYBILLBOARD; - FloatBobPhase 0; } override void PostBeginPlay() { @@ -1109,17 +985,6 @@ Class SWWMPickupFlash : Actor A_SetScale(FRandom[ClientSparkles](.9,1.1)*(max(target.radius,target.height)/16.)); alpha = FRandom[ClientSparkles](.9,1.)*clamp((max(0,Distance3DSquared(players[consoleplayer].Camera)-40000.)/160000000.)**.25,0.,1.); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -1198,8 +1063,6 @@ Class InvisibleSplasher : Actor Radius 2; Height 4; +NOBLOCKMAP; // needed to prevent infinite loops with some 3D floor water (yes, you read that right) - +SYNCHRONIZED; - FloatBobPhase 0; } States { @@ -1286,7 +1149,7 @@ Class SWWMBulletTrail : LineTracer // Dummy "puff" actor used for hitscan compatibility // (don't forget to pass DMG_INFLICTOR_IS_PUFF to DamageMobj calls for this to work) -Class SWWMPuff : Actor +Class SWWMPuff : SWWMNonInteractiveActor { static Actor Setup( Vector3 pos, Vector3 dir, Actor inflictor = null, Actor source = null, Actor victim = null ) { @@ -1306,32 +1169,12 @@ Class SWWMPuff : Actor return Super.GetObituary(victim,inflictor,mod,playerattack); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } - default { - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOINTERACTION; - +SYNCHRONIZED; - +DONTSPLASH; - +NOTELEPORT; +ALWAYSPUFF; +PUFFONACTORS; +PUFFGETSOWNER; +HITTRACER; - FloatBobPhase 0; } States { @@ -1362,7 +1205,7 @@ Class SWWMItemTracer : LineTracer } // Blob shadows -Class SWWMShadow : Actor +Class SWWMShadow : SWWMNonInteractiveActor { Sector oldfloor; @@ -1422,14 +1265,6 @@ Class SWWMShadow : Actor RenderStyle "Shaded"; StencilColor "000000"; DistanceCheck 'swwm_shadowdist'; - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOINTERACTION; - +SYNCHRONIZED; - +DONTSPLASH; - +NOTELEPORT; - FloatBobPhase 0; } States { @@ -1440,40 +1275,20 @@ Class SWWMShadow : Actor } // Terrain FX (cheap) -Class SWWMBaseSplash : Actor +Class SWWMBaseSplash : SWWMNonInteractiveActor abstract { - default - { - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOINTERACTION; - +SYNCHRONIZED; - +DONTSPLASH; - +NOTELEPORT; - FloatBobPhase 0; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } + abstract void DoSplash(); + States { Spawn: - TNT1 A 1; + TNT1 A 1 NoDelay DoSplash(); Stop; } } Class SWWMWaterSplash : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1492,7 +1307,7 @@ Class SWWMWaterSplash : SWWMBaseSplash } Class SWWMWaterSplash2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1511,7 +1326,7 @@ Class SWWMWaterSplash2 : SWWMBaseSplash } Class SWWMBloodSplash : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1530,7 +1345,7 @@ Class SWWMBloodSplash : SWWMBaseSplash } Class SWWMBloodSplash2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1549,7 +1364,7 @@ Class SWWMBloodSplash2 : SWWMBaseSplash } Class SWWMSludgeSplash : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1568,7 +1383,7 @@ Class SWWMSludgeSplash : SWWMBaseSplash } Class SWWMSludgeSplash2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1587,7 +1402,7 @@ Class SWWMSludgeSplash2 : SWWMBaseSplash } Class SWWMMudSplash : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1606,7 +1421,7 @@ Class SWWMMudSplash : SWWMBaseSplash } Class SWWMMudSplash2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1625,7 +1440,7 @@ Class SWWMMudSplash2 : SWWMBaseSplash } Class SWWMSlimeSplash : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1644,7 +1459,7 @@ Class SWWMSlimeSplash : SWWMBaseSplash } Class SWWMSlimeSplash2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1663,7 +1478,7 @@ Class SWWMSlimeSplash2 : SWWMBaseSplash } Class SWWMLavaSplash : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1683,7 +1498,7 @@ Class SWWMLavaSplash : SWWMBaseSplash } Class SWWMLavaSplash2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1703,7 +1518,7 @@ Class SWWMLavaSplash2 : SWWMBaseSplash } Class SWWMSizzleSmoke : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; @@ -1725,7 +1540,7 @@ Class SWWMSizzleSmoke : SWWMBaseSplash } Class SWWMSizzleSmoke2 : SWWMBaseSplash { - override void PostBeginPlay() + override void DoSplash() { double ang, pt, str; Vector3 dir; diff --git a/zscript/swwm_gesture_fx.zsc b/zscript/swwm_gesture_fx.zsc index 5fdb51bdd..35f6d6755 100644 --- a/zscript/swwm_gesture_fx.zsc +++ b/zscript/swwm_gesture_fx.zsc @@ -1,18 +1,11 @@ // gesture effects -Class LoveHeartTrail : Actor +Class LoveHeartTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Radius .1; - Height 0.; - Alpha .1; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; } override void Tick() @@ -29,18 +22,11 @@ Class LoveHeartTrail : Actor } } -Class LoveHeartSparkle : Actor +Class LoveHeartSparkle : SWWMNonInteractiveActor { Default { - Radius .1; - Height 0.; Scale .03; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; } override void PostBeginPlay() diff --git a/zscript/swwm_monsters.zsc b/zscript/swwm_monsters.zsc index e214c76aa..6858737c4 100644 --- a/zscript/swwm_monsters.zsc +++ b/zscript/swwm_monsters.zsc @@ -96,7 +96,7 @@ Class SWWMDroppedKeen : Actor } } -Class SWWMBossBrainExpl : Actor +Class SWWMBossBrainExpl : SWWMNonInteractiveActor { void A_Ignite() { @@ -141,13 +141,6 @@ Class SWWMBossBrainExpl : Actor { RenderStyle "Add"; Scale 2.5; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; } States @@ -201,13 +194,11 @@ Class SWWMBossBrainExplArm : Actor Wait; } } -Class SWWMBossBrainPain : Actor +Class SWWMBossBrainPain : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; } States { diff --git a/zscript/swwm_player_fx.zsc b/zscript/swwm_player_fx.zsc index 4ca036784..76b4e4c0c 100644 --- a/zscript/swwm_player_fx.zsc +++ b/zscript/swwm_player_fx.zsc @@ -164,21 +164,14 @@ Class AmmoOrb : SlayerOrb } } -Class SlayerOrbTrail : Actor abstract +Class SlayerOrbTrail : SWWMNonInteractiveActor abstract { Default { RenderStyle "Add"; - Radius .1; - Height 0.; Scale .25; Alpha .5; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; } override void Tick() { @@ -264,22 +257,16 @@ Class SWWMMagItem play } } -Class DashTrail : Actor +Class DashTrail : SWWMNonInteractiveActor { + Mixin SWWMMinimalMovingWaterTick; + Default { RenderStyle "Add"; - Radius .1; - Height 0.; - Scale 0.3; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - +SYNCHRONIZED; + Scale .3; +MASTERNOSEE; - FloatBobPhase 0; + +FORCEXYBILLBOARD; } override void PostBeginPlay() { @@ -296,20 +283,6 @@ Class DashTrail : Actor s.scale *= 1.4; s.alpha *= .3; } - override void Tick() - { - if ( isFrozen() ) return; - prev = pos; - SetOrigin(level.Vec3Offset(pos,vel),true); - UpdateWaterLevel(); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -322,43 +295,23 @@ Class DashTrail : Actor } } -Class DashTrail2 : Actor +Class DashTrail2 : SWWMNonInteractiveActor { + Mixin SWWMMinimalMovingWaterTick; + Default { RenderStyle "Add"; - Radius .1; - Height 0.; - Scale 0.2; - Alpha 0.4; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - +SYNCHRONIZED; + Scale .2; + Alpha .4; +MASTERNOSEE; - FloatBobPhase 0; + +FORCEXYBILLBOARD; } override void PostBeginPlay() { Super.PostBeginPlay(); SetState(FindState("Spawn")+Random[ExploS](0,7)); } - override void Tick() - { - if ( isFrozen() ) return; - prev = pos; - SetOrigin(level.Vec3Offset(pos,vel),true); - UpdateWaterLevel(); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -378,33 +331,13 @@ Class DashTrail2 : Actor } } -Class DemolitionistRadiusShockwaveTail : Actor +Class DemolitionistRadiusShockwaveTail : SWWMNonInteractiveActor { + Mixin SWWMMinimalMovingTick; + Default { RenderStyle "Add"; - Radius 16; - Height 8; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - +SYNCHRONIZED; - FloatBobPhase 0; - } - override void Tick() - { - if ( isFrozen() ) return; - prev = pos; - SetOrigin(level.Vec3Offset(pos,vel),true); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -492,18 +425,12 @@ Class DemolitionistRadiusShockwave : Actor } } -Class DemolitionistShockwave : Actor +Class DemolitionistShockwave : SWWMNonInteractiveActor { Default { - +NOGRAVITY; - +NOBLOCKMAP; - +NOTELEPORT; +NODAMAGETHRUST; +FORCERADIUSDMG; - +NOINTERACTION; - Radius .1; - Height 0.; } override void PostBeginPlay() { @@ -570,17 +497,6 @@ Class DemolitionistShockwave : Actor } } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index 61af0468e..9c27c3e27 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -2364,16 +2364,12 @@ Class SWWMUtility } } -Class RadiusDebugSphere : Actor +Class RadiusDebugSphere : SWWMNonInteractiveActor { Default { RenderStyle "AddStencil"; StencilColor "White"; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOINTERACTION; } States { diff --git a/zscript/weapons/swwm_baseweapon_fx.zsc b/zscript/weapons/swwm_baseweapon_fx.zsc index 15c860a1d..a3be67cc4 100644 --- a/zscript/weapons/swwm_baseweapon_fx.zsc +++ b/zscript/weapons/swwm_baseweapon_fx.zsc @@ -94,18 +94,11 @@ Class SWWMCasing : Actor abstract } } -Class SWWMBulletImpact : Actor +Class SWWMBulletImpact : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; Scale 0.25; } override void PostBeginPlay() @@ -176,17 +169,11 @@ Class SWWMWeaponLight : DynamicLight } } -Class PunchImpact : Actor +Class PunchImpact : SWWMNonInteractiveActor { Default { Tag "WallCrack"; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +NOTELEPORT; - +NOINTERACTION; } override void PostBeginPlay() { @@ -224,20 +211,13 @@ Class PunchImpact : Actor } } -Class BigPunchSplash : Actor +Class BigPunchSplash : SWWMNonInteractiveActor { Default { DamageType 'Melee'; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; +NODAMAGETHRUST; +FORCERADIUSDMG; - +NOINTERACTION; } override void PostBeginPlay() { @@ -247,17 +227,8 @@ Class BigPunchSplash : Actor } } -Class BigPunchImpact : Actor +Class BigPunchImpact : SWWMNonInteractiveActor { - Default - { - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { Super.PostBeginPlay(); diff --git a/zscript/weapons/swwm_baseweapon_melee.zsc b/zscript/weapons/swwm_baseweapon_melee.zsc index 5a2dbf8c3..7ea43e5fb 100644 --- a/zscript/weapons/swwm_baseweapon_melee.zsc +++ b/zscript/weapons/swwm_baseweapon_melee.zsc @@ -80,20 +80,14 @@ Class ParryDamageChecker : Inventory } } -Class ParryRing : Actor +Class ParryRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale .1; Alpha .3; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; } States { @@ -103,22 +97,11 @@ Class ParryRing : Actor } } -Class ParryField : Actor +Class ParryField : SWWMNonInteractiveActor { bool critsnd; Array justparried; - Default - { - Radius .1; - Height 0.; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() { if ( !master ) diff --git a/zscript/weapons/swwm_blazeit.zsc b/zscript/weapons/swwm_blazeit.zsc index 4694d6382..e34ea7802 100644 --- a/zscript/weapons/swwm_blazeit.zsc +++ b/zscript/weapons/swwm_blazeit.zsc @@ -1,7 +1,7 @@ // Imanaki Corp Hellfire Cannon Mk3, aka "Hellblazer" (from SWWM series, originally inspired by the Hellraiser from OMGWEAPONS) // Slot 6, replaces Rocket Launcher, Phoenix Rod, Firestorm -Class HellblazerX : GhostArtifactX +Class HellblazerX : SWWMItemOverlay { States { diff --git a/zscript/weapons/swwm_blazeit_fx.zsc b/zscript/weapons/swwm_blazeit_fx.zsc index 0affa312c..f48c2274c 100644 --- a/zscript/weapons/swwm_blazeit_fx.zsc +++ b/zscript/weapons/swwm_blazeit_fx.zsc @@ -9,20 +9,14 @@ Class HellblazerExplLight : PaletteLight ReactionTime 25; } } -Class HellblazerSubExpl : Actor +Class HellblazerSubExpl : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 2.2; - Radius 0.1; - Height 0; Alpha .75; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; +ROLLSPRITE; +ROLLCENTER; } @@ -33,17 +27,6 @@ Class HellblazerSubExpl : Actor scale.x *= RandomPick[ExploS](-1,1); scale.y *= RandomPick[ExploS](-1,1); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -52,30 +35,13 @@ Class HellblazerSubExpl : Actor } } -Class HellblazerRing : Actor +Class HellblazerRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 2.; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -85,29 +51,14 @@ Class HellblazerRing : Actor } } -Class HellblazerArmTrail : Actor +Class HellblazerArmTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 2.5; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -165,38 +116,20 @@ Class HellblazerArm : Actor } } -Class HellblazerTrail : Actor +Class HellblazerTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; Scale .2; Alpha .3; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; - +NOINTERACTION; } override void PostBeginPlay() { Super.PostBeginPlay(); SetState(FindState("Spawn")+Random[ExploS](0,7)); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -216,19 +149,12 @@ Class HellblazerTrail : Actor } } -Class HellblazerFlare : Actor +Class HellblazerFlare : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; - +NOINTERACTION; } override void Tick() diff --git a/zscript/weapons/swwm_cbt_fx.zsc b/zscript/weapons/swwm_cbt_fx.zsc index 6bd2e0304..a887d541f 100644 --- a/zscript/weapons/swwm_cbt_fx.zsc +++ b/zscript/weapons/swwm_cbt_fx.zsc @@ -1,17 +1,7 @@ // Wallbuster effects -Class BustedQuake : Actor +Class BustedQuake : SWWMNonInteractiveActor { - Default - { - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { if ( (special1 < 3) || (special1 > 6) ) @@ -27,12 +17,6 @@ Class BustedQuake : Actor A_QuakeEx(special1,special1,special1,20+special1*5,0,300+special1*90,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:special1*.1); A_AlertMonsters(swwm_uncapalert?0:2500); } - override void Tick() - { - if ( isFrozen() ) return; - tics--; - if ( tics <= 0 ) Destroy(); - } States { Spawn: diff --git a/zscript/weapons/swwm_danmaku_fx.zsc b/zscript/weapons/swwm_danmaku_fx.zsc index dcd57c980..99fdb5c24 100644 --- a/zscript/weapons/swwm_danmaku_fx.zsc +++ b/zscript/weapons/swwm_danmaku_fx.zsc @@ -23,18 +23,8 @@ Class EvisceratorChunkLight : PointLightAttenuated } } -Class ChunkImpact : Actor +Class ChunkImpact : SWWMNonInteractiveActor { - Default - { - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { Super.PostBeginPlay(); @@ -68,20 +58,13 @@ Class ChunkImpact : Actor } } -Class EvisceratorChunkGlow : Actor +Class EvisceratorChunkGlow : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; Scale .25; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -104,20 +87,13 @@ Class EvisceratorChunkGlow : Actor } } -Class EvisceratorChunkTrail : Actor +Class EvisceratorChunkTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; XScale 8.; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -400,19 +376,9 @@ Class EvisceratorChunk : Actor } } -Class EvisceratorProjSmoke : Actor +Class EvisceratorProjSmoke : SWWMNonInteractiveActor { double lifetime, lifespeed; - Default - { - Radius 0.1; - Height 0; - +NOBLOCKMAP; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { lifetime = 0; @@ -620,31 +586,14 @@ Class EvisceratorProj : Actor } } -Class EvisceratorSubExpl : Actor +Class EvisceratorSubExpl : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 2.; Alpha .6; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -654,30 +603,13 @@ Class EvisceratorSubExpl : Actor } } -Class EvisceratorRing : Actor +Class EvisceratorRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 4.; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { diff --git a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc index 7f0debe77..0e20a6278 100644 --- a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc @@ -1,7 +1,7 @@ // Ynykron projectiles and effects // there was an enemy here, but it's gone now -Class AshenRemains : Actor +Class AshenRemains : SWWMNonInteractiveActor { override void Tick() { @@ -27,12 +27,6 @@ Class AshenRemains : Actor { RenderStyle "Shaded"; StencilColor "000000"; - Radius .1; - Height 0.; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } States { @@ -256,20 +250,14 @@ Class YnykronImpactArm : Actor } } -Class YnykronImpactTrail : Actor +Class YnykronImpactTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 2.; Alpha .2; - Radius .1; - Height 0.; } override void PostBeginPlay() { @@ -278,17 +266,6 @@ Class YnykronImpactTrail : Actor Scale.x *= RandomPick[ExploS](-1,1); Scale.y *= RandomPick[ExploS](-1,1); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -297,19 +274,10 @@ Class YnykronImpactTrail : Actor } } -Class YnykronDelayedImpact : Actor +Class YnykronDelayedImpact : SWWMNonInteractiveActor { Vector3 ofs; - Default - { - +NOBLOCKMAP; - +NOGRAVITY; - +NOTELEPORT; - +NOINTERACTION; - Radius .1; - Height 0.; - } override void Tick() { if ( isFrozen() ) return; @@ -332,7 +300,7 @@ Class YnykronDelayedImpact : Actor } } -Class YnykronImpact : Actor +Class YnykronImpact : SWWMNonInteractiveActor { int rad; @@ -342,17 +310,10 @@ Class YnykronImpact : Actor DamageType "Ynykron"; RenderStyle "Add"; Scale 5.; - +NOGRAVITY; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; +FORCEXYBILLBOARD; - +NOINTERACTION; +NODAMAGETHRUST; +FORCERADIUSDMG; +EXTREMEDEATH; - Radius .1; - Height 0.; } private bool CmpDist( Actor a, Actor b ) @@ -544,17 +505,6 @@ Class YnykronImpact : Actor YnykronShot(master).blastcount--; Super.OnDestroy(); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -649,7 +599,7 @@ Class YnykronInWallTracer : YnykronTracer } } -Class YnykronBeam : Actor +Class YnykronBeam : SWWMNonInteractiveActor { bool nospread; @@ -894,15 +844,8 @@ Class YnykronBeam : Actor Obituary "$O_YNYKRON"; DamageType "Ynykron"; RenderStyle "Add"; - Radius .1; - Height 0; Alpha .4; Speed 128; - +NOGRAVITY; - +NOBLOCKMAP; - +NOCLIP; - +NOTELEPORT; - +DONTSPLASH; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; @@ -910,7 +853,6 @@ Class YnykronBeam : Actor +FORCERADIUSDMG; +FOILINVUL; +EXTREMEDEATH; - +NOINTERACTION; } States { @@ -955,18 +897,8 @@ Class YnykronBeam : Actor } } -Class DelayedWallBeam : Actor +Class DelayedWallBeam : SWWMNonInteractiveActor { - Default - { - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - } override void PostBeginPlay() { if ( YnykronShot(master) ) @@ -1014,34 +946,16 @@ Class DelayedWallBeam : Actor } } -Class YnykronRing : Actor +Class YnykronRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius 0.1; - Height 0; Scale .6; Alpha .05; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -1052,20 +966,13 @@ Class YnykronRing : Actor } // non-model version, for impacts -Class YnykronImpactRing : Actor +Class YnykronImpactRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius 0.1; - Height 0; Scale 2.; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; } override void Tick() { @@ -1087,7 +994,7 @@ Class YnykronImpactRing : Actor } } -Class YnykronShot : Actor +Class YnykronShot : SWWMNonInteractiveActor { Array hitlist; bool hitboss; @@ -1096,16 +1003,6 @@ Class YnykronShot : Actor int blastcount; int lastimpact; - Default - { - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - } void FlashPlayer( int str, double rad ) { if ( !SWWMUtility.InPlayerFOV(players[consoleplayer],self,rad) ) return; @@ -1223,19 +1120,12 @@ Class YnykronAltTracer : LineTracer } } -Class YnykronHaloTail : Actor +Class YnykronHaloTail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOBLOCKMAP; - +NOINTERACTION; +FORCEXYBILLBOARD; - Radius .1; - Height 0.; Scale 1.5; } override void Tick() @@ -1252,19 +1142,12 @@ Class YnykronHaloTail : Actor } } -Class YnykronHalo : Actor +Class YnykronHalo : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOBLOCKMAP; - +NOINTERACTION; +FORCEXYBILLBOARD; - Radius .1; - Height 0.; Scale 1.5; } override void Tick() @@ -1288,20 +1171,9 @@ Class YnykronHalo : Actor } } -Class GatherDust : Actor +Class GatherDust : SWWMNonInteractiveActor { - override void Tick() - { - if ( isFrozen() ) return; - SetOrigin(level.Vec3Offset(pos,vel),true); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } + Mixin SWWMMinimalMovingTick; override void PostBeginPlay() { @@ -1339,17 +1211,9 @@ Class GatherDust : Actor Default { RenderStyle "Shaded"; - Radius .1; - Height 0.; Alpha 0.; Scale 3.; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; +FORCEXYBILLBOARD; - +NOCLIP; } States { @@ -1359,19 +1223,12 @@ Class GatherDust : Actor } } -Class YnykronVoidBeamTail : Actor +Class YnykronVoidBeamTail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOGRAVITY; - +DONTSPLASH; - +NOTELEPORT; - +NOBLOCKMAP; - +NOINTERACTION; +FORCEXYBILLBOARD; - Radius .1; - Height 0.; } override void Tick() { @@ -1386,7 +1243,7 @@ Class YnykronVoidBeamTail : Actor } } -Class YnykronVoidBeam : Actor +Class YnykronVoidBeam : SWWMNonInteractiveActor { Actor basebeam, prevbeam, nextbeam; YnykronTracer t; @@ -1401,15 +1258,8 @@ Class YnykronVoidBeam : Actor DamageType 'YnykronAlt'; Obituary "$O_YNYKRONALT"; RenderStyle "Add"; - Radius .1; - Height 0.; Alpha 0.; Stamina 3; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; +INTERPOLATEANGLES; +NODAMAGETHRUST; +FOILINVUL; @@ -1532,18 +1382,6 @@ Class YnykronVoidBeam : Actor h.frame = frame; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } - States { Spawn: @@ -1552,18 +1390,15 @@ Class YnykronVoidBeam : Actor } } -Class YnykronLightningImpact : Actor +Class YnykronLightningImpact : SWWMNonInteractiveActor { Default { Obituary "$O_YNYKRONALT"; DamageType "Electric"; - Radius .1; - Height 0; +FOILINVUL; +FORCERADIUSDMG; +NODAMAGETHRUST; - +NOINTERACTION; } override void PostBeginPlay() { @@ -1600,7 +1435,7 @@ Class YnykronLightningImpact : Actor } } -Class YnykronLightningArc : Actor +Class YnykronLightningArc : SWWMNonInteractiveActor { Vector3 nextpos, nextdir; Vector3 destpos; @@ -1725,32 +1560,14 @@ Class YnykronLightningArc : Actor Super.PostBeginPlay(); frame = Random[Ynykron](0,11); } - 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_YNYKRONALT"; RenderStyle "Add"; DamageFunction 1000; Speed 128; - Radius .1; - Height 0; Alpha 2.; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } States { @@ -1794,7 +1611,7 @@ Class YnykronLightningArcSub : YnykronLightningArc } } -Class YnykronCloud : Actor +Class YnykronCloud : SWWMNonInteractiveActor { Vector3 gx, gy, gz; double phase; @@ -1806,14 +1623,7 @@ Class YnykronCloud : Actor override void Tick() { prev = pos; - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } + Super.Tick(); } void FlashPlayer( int str, double rad ) @@ -1893,18 +1703,10 @@ Class YnykronCloud : Actor DamageType 'YnykronAlt'; Obituary "$O_YNYKRONALT"; RenderStyle "Shaded"; - Radius .1; - Height 0.; Alpha 0.; Scale 3.; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; +FORCEXYBILLBOARD; +ROLLSPRITE; - +NOCLIP; } States { @@ -1948,37 +1750,18 @@ Class SimpleMoveTracer : LineTracer } } -Class YnykronSingularityRing : Actor +Class YnykronSingularityRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius 0.1; - Height 0; Scale 4.; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - A_SetScale(scale.x*1.05); - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { Spawn: - XRG4 ABCDEFGHIJKLMNOPQRSTUVWX 2 Bright; + XRG4 AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXX 1 Bright A_SetScale(scale.x*1.05); Stop; } } @@ -1993,20 +1776,13 @@ Class YnykronVoidExplLight : PaletteLight } } -Class YnykronVoidSparkleTrail : Actor +Class YnykronVoidSparkleTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0.; XScale 6.; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +NOINTERACTION; - +DONTSPLASH; - +NOTELEPORT; } override void Tick() { @@ -2022,20 +1798,14 @@ Class YnykronVoidSparkleTrail : Actor } } -Class YnykronVoidSparkle : Actor +Class YnykronVoidSparkle : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; - +NOINTERACTION; } override void PostBeginPlay() { @@ -2138,20 +1908,14 @@ Class YnykronSingularityExplosionArm : Actor } } -Class YnykronSingularityExplosionTrail : Actor +Class YnykronSingularityExplosionTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 3.; Alpha .2; - Radius 0.1; - Height 0; } override void PostBeginPlay() { @@ -2160,17 +1924,6 @@ Class YnykronSingularityExplosionTrail : Actor Scale.x *= RandomPick[ExploS](-1,1); Scale.y *= RandomPick[ExploS](-1,1); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -2179,7 +1932,7 @@ Class YnykronSingularityExplosionTrail : Actor } } -Class YnykronSingularityExplosion : Actor +Class YnykronSingularityExplosion : SWWMNonInteractiveActor { Default { @@ -2187,16 +1940,10 @@ Class YnykronSingularityExplosion : Actor DamageType "YnykronAlt"; RenderStyle "Add"; Scale 5.; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } override void PostBeginPlay() { @@ -2236,37 +1983,19 @@ Class YnykronSingularityExplosion : Actor s.target = target; } } - override void Tick() - { - if ( isFrozen() ) return; - scale *= 1.01; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: - XEX4 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ 2 Bright; + XEX4 AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\ 1 Bright A_SetScale(scale.x*1.01,scale.y*1.01); Stop; } } -Class YnykronSingularityHitbox : Actor +Class YnykronSingularityHitbox : SWWMNonInteractiveActor { Default { - Radius .1; - Height 0.; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; + -NOBLOCKMAP; } override void Tick() { @@ -2284,7 +2013,7 @@ Class YnykronSingularityHitbox : Actor } } -Class YnykronSingularity : Actor +Class YnykronSingularity : SWWMNonInteractiveActor { const MAXBEAMS = 10; const MAXCLOUDS = 300; @@ -2322,6 +2051,7 @@ Class YnykronSingularity : Actor // lightweight tick, we don't need anything else other than states override void Tick() { + prev = pos; if ( isFrozen() ) return; Vector3 newpos; if ( !mt ) mt = new("SimpleMoveTracer"); @@ -2683,14 +2413,7 @@ Class YnykronSingularity : Actor { DamageType 'YnykronAlt'; Obituary "$O_YNYKRONALT"; - +NOGRAVITY; +MISSILE; - +DROPOFF; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; - Radius .1; - Height 0.; Scale .4; } States @@ -2705,7 +2428,7 @@ Class YnykronSingularity : Actor } } -Class YnykronAltBeam : Actor +Class YnykronAltBeam : SWWMNonInteractiveActor { bool nospread; @@ -2828,19 +2551,11 @@ Class YnykronAltBeam : Actor Default { RenderStyle "Subtract"; - Radius .1; - Height 0; Alpha .4; Speed 64; - +NOGRAVITY; - +NOBLOCKMAP; - +NOCLIP; - +NOTELEPORT; - +DONTSPLASH; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; } States { @@ -2885,18 +2600,8 @@ Class YnykronAltBeam : Actor } } -Class YnykronAltShot : Actor +Class YnykronAltShot : SWWMNonInteractiveActor { - Default - { - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +NOTELEPORT; - +DONTSPLASH; - +NOINTERACTION; - } void FlashPlayer( int str, double rad ) { if ( !SWWMUtility.InPlayerFOV(players[consoleplayer],self,rad) ) return; diff --git a/zscript/weapons/swwm_deepdarkimpact_fx.zsc b/zscript/weapons/swwm_deepdarkimpact_fx.zsc index d5e15d985..1086397c2 100644 --- a/zscript/weapons/swwm_deepdarkimpact_fx.zsc +++ b/zscript/weapons/swwm_deepdarkimpact_fx.zsc @@ -141,31 +141,14 @@ Class AirRingLight : PaletteLight } } -Class AirBulletRing : Actor +Class AirBulletRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; - +NOINTERACTION; - Radius 0.1; - Height 0; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { diff --git a/zscript/weapons/swwm_shot_fx.zsc b/zscript/weapons/swwm_shot_fx.zsc index 9a1f6ab8a..5d82a9209 100644 --- a/zscript/weapons/swwm_shot_fx.zsc +++ b/zscript/weapons/swwm_shot_fx.zsc @@ -20,17 +20,8 @@ Class GoldShellCasing : RedShellCasing } } -Class SpreadImpact : Actor +Class SpreadImpact : SWWMNonInteractiveActor { - Default - { - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +NOTELEPORT; - +NOINTERACTION; - } override void PostBeginPlay() { Super.PostBeginPlay(); @@ -74,30 +65,13 @@ Class GExploLight : PaletteLight } } -Class GExploRing : Actor +Class GExploRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 8.; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -107,23 +81,17 @@ Class GExploRing : Actor } } -Class GoldenImpact : Actor +Class GoldenImpact : SWWMNonInteractiveActor { Default { DamageType "Explodium"; RenderStyle "Add"; - Radius 0.1; - Height 0; Scale 8.; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } override void PostBeginPlay() { @@ -222,17 +190,6 @@ Class GoldenImpact : Actor p.target = target; } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -241,7 +198,7 @@ Class GoldenImpact : Actor } } -Class GoldenSubImpact : Actor +Class GoldenSubImpact : SWWMNonInteractiveActor { Default { @@ -249,16 +206,10 @@ Class GoldenSubImpact : Actor RenderStyle "Add"; Scale 6.; Alpha .8; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } override void PostBeginPlay() { @@ -352,17 +303,6 @@ Class GoldenSubImpact : Actor p.target = target; } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -371,7 +311,7 @@ Class GoldenSubImpact : Actor } } -Class GoldenSubSubImpact : Actor +Class GoldenSubSubImpact : SWWMNonInteractiveActor { Default { @@ -379,16 +319,10 @@ Class GoldenSubSubImpact : Actor RenderStyle "Add"; Scale 3.; Alpha .6; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } override void PostBeginPlay() { @@ -411,26 +345,10 @@ Class GoldenSubSubImpact : Actor s.alpha *= .2; } } - action void A_GoldSubSubSpread() - { - special1++; - if ( (special1%2) || (special1 > 10) ) return; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: - XEX1 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 1 Bright A_GoldSubSubSpread(); + XEX1 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 1 Bright; Stop; } } diff --git a/zscript/weapons/swwm_sparkyboi_fx.zsc b/zscript/weapons/swwm_sparkyboi_fx.zsc index f388c9f7f..475f7b3e5 100644 --- a/zscript/weapons/swwm_sparkyboi_fx.zsc +++ b/zscript/weapons/swwm_sparkyboi_fx.zsc @@ -27,17 +27,13 @@ Class SparkBeamLight : PaletteLight } } -Class BiosparkHitbox : Actor +Class BiosparkHitbox : SWWMNonInteractiveActor { Default { Radius 8; Height 16; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; + -NOBLOCKMAP; } override void Tick() { @@ -62,7 +58,7 @@ Class BigBiosparkHitbox : BiosparkHitbox } } -Class BigOrbiter : Actor +Class BigOrbiter : SWWMNonInteractiveActor { double anglevel, pitchvel; @@ -70,12 +66,6 @@ Class BigOrbiter : Actor { RenderStyle "Add"; Scale 3.; - Radius .1; - Height 0.; - +NOINTERACTION; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; +FORCEXYBILLBOARD; } override void PostBeginPlay() @@ -662,20 +652,17 @@ Class BiosparkTracer : LineTracer } } -Class BiosparkBeamImpact : Actor +Class BiosparkBeamImpact : SWWMNonInteractiveActor { Default { Obituary "$O_SPARKSTER"; DamageType "Biospark"; RenderStyle "Add"; - Radius .1; - Height 0; +FOILINVUL; +FORCERADIUSDMG; +NODAMAGETHRUST; +FORCEXYBILLBOARD; - +NOINTERACTION; } override void PostBeginPlay() { @@ -776,17 +763,6 @@ Class BiosparkBeamImpact : Actor s.ReactionTime += Random[Sparkster](0,int(3*factor)); } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -800,7 +776,7 @@ Class BiosparkBeamImpact : Actor } } -Class BiosparkComboImpactSub : Actor +Class BiosparkComboImpactSub : SWWMNonInteractiveActor { Default { @@ -809,17 +785,10 @@ Class BiosparkComboImpactSub : Actor RenderStyle "Add"; Scale 1.4; Alpha .4; - Radius .1; - Height 0; +FOILINVUL; +FORCERADIUSDMG; +NODAMAGETHRUST; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; } override void PostBeginPlay() { @@ -827,17 +796,6 @@ Class BiosparkComboImpactSub : Actor if ( !bAMBUSH ) return; SWWMUtility.DoExplosion(self,40,10000,300,120,flags:DE_HOWL); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -846,7 +804,7 @@ Class BiosparkComboImpactSub : Actor } } -Class BiosparkComboImpact : Actor +Class BiosparkComboImpact : SWWMNonInteractiveActor { Default { @@ -854,17 +812,10 @@ Class BiosparkComboImpact : Actor DamageType "Biospark"; RenderStyle "Add"; Scale 2.; - Radius .1; - Height 0; +FOILINVUL; +FORCERADIUSDMG; +NODAMAGETHRUST; +FORCEXYBILLBOARD; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOTELEPORT; - +NOINTERACTION; } void FlashPlayer( int str, double rad ) { @@ -1037,17 +988,6 @@ Class BiosparkComboImpact : Actor p.bAMBUSH = bAMBUSH; } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -1066,7 +1006,7 @@ Class BiosparkComboImpact : Actor } } -Class BiosparkBeam : Actor +Class BiosparkBeam : SWWMNonInteractiveActor { Vector3 nextpos, nextdir; @@ -1269,33 +1209,14 @@ Class BiosparkBeam : Actor } } - 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"; RenderStyle "Add"; DamageFunction 15; Speed 256; - Radius .1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; +INTERPOLATEANGLES; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } States @@ -1312,22 +1233,15 @@ Class BiosparkBeam : Actor } } -Class BiosparkChildBeam : Actor +Class BiosparkChildBeam : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - Radius .1; - Height 0; Alpha .4; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; +INTERPOLATEANGLES; - +NOTELEPORT; +ROLLSPRITE; +ROLLCENTER; - +NOINTERACTION; } override void Tick() { @@ -1432,7 +1346,7 @@ Class BiosparkChildBeam : Actor } } -Class BiosparkArc : Actor +Class BiosparkArc : SWWMNonInteractiveActor { Vector3 nextpos, nextdir; @@ -1567,17 +1481,6 @@ 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"; @@ -1585,15 +1488,8 @@ Class BiosparkArc : Actor DamageFunction 6; ReactionTime 15; Speed 16; - Radius .1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; +INTERPOLATEANGLES; - +NOTELEPORT; +FOILINVUL; - +NOINTERACTION; } States { @@ -1644,32 +1540,15 @@ Class BiosparkArcBig : BiosparkArc } } -Class BiosparkSpark : Actor +Class BiosparkSpark : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale .8; - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; +ROLLSPRITE; +ROLLCENTER; +FORCEXYBILLBOARD; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { diff --git a/zscript/weapons/swwm_splode_fx.zsc b/zscript/weapons/swwm_splode_fx.zsc index 8ba5b8dda..868192dd4 100644 --- a/zscript/weapons/swwm_splode_fx.zsc +++ b/zscript/weapons/swwm_splode_fx.zsc @@ -84,29 +84,14 @@ Class ExplodiumMagArm : Actor } } -Class ExplodiumMagTrail : Actor +Class ExplodiumMagTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 1.1; } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -493,23 +478,17 @@ Class ExploLight2 : PaletteLight } } -Class ExplodiumBulletImpact : Actor +Class ExplodiumBulletImpact : SWWMNonInteractiveActor { Default { Obituary "$O_EXPLODIUM"; DamageType "Explodium"; RenderStyle "Add"; - Radius .1; - Height 0.; Scale 1.2; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; } override void PostBeginPlay() { @@ -550,17 +529,6 @@ Class ExplodiumBulletImpact : Actor } Spawn("ExploLight",pos); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: diff --git a/zscript/weapons/swwm_tastytreat_fx.zsc b/zscript/weapons/swwm_tastytreat_fx.zsc index 3a56d42df..08c3fdf5d 100644 --- a/zscript/weapons/swwm_tastytreat_fx.zsc +++ b/zscript/weapons/swwm_tastytreat_fx.zsc @@ -89,7 +89,7 @@ Class CandyBeamTracer : LineTracer } } -Class CandyBeam : Actor +Class CandyBeam : SWWMNonInteractiveActor { Vector3 nextpos, nextdir; @@ -170,17 +170,6 @@ 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"; @@ -188,15 +177,8 @@ Class CandyBeam : Actor Alpha 0.4; DamageFunction 40; ReactionTime 12; - Radius 0.1; - Height 0; Speed 16; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; +INTERPOLATEANGLES; - +NOTELEPORT; - +NOINTERACTION; +FOILINVUL; } States @@ -210,7 +192,7 @@ Class CandyBeam : Actor } } -Class CandyPop : Actor +Class CandyPop : SWWMNonInteractiveActor { Default { @@ -218,17 +200,11 @@ Class CandyPop : Actor DamageType "Candy"; RenderStyle "Add"; Scale 2.; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; +ROLLSPRITE; +ROLLCENTER; - +NOTELEPORT; - +NOINTERACTION; +FOILINVUL; } void FlashPlayer( int str, double rad ) @@ -240,17 +216,6 @@ Class CandyPop : Actor SWWMHandler.DoFlash(mo,Color(str,250,240,255),1); SWWMHandler.DoFlash(mo,Color(str,224,0,255),3); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -408,31 +373,14 @@ Class CandyMagArm : Actor } } -Class CandyMagTrail : Actor +Class CandyMagTrail : SWWMNonInteractiveActor { Default { RenderStyle "Add"; - +NOBLOCKMAP; - +NOGRAVITY; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; Scale 2.4; Alpha 0.7; - Radius .1; - Height 0.; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { @@ -787,7 +735,7 @@ Class CandyMagProj : Actor } } -Class CandyBulletImpact : Actor +Class CandyBulletImpact : SWWMNonInteractiveActor { Default { @@ -795,15 +743,9 @@ Class CandyBulletImpact : Actor DamageType "Candy"; RenderStyle "Add"; Scale 2.5; - Radius .1; - Height 0.; - +NOGRAVITY; - +NOBLOCKMAP; +NODAMAGETHRUST; +FORCERADIUSDMG; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; +FOILINVUL; } override void PostBeginPlay() @@ -846,17 +788,6 @@ Class CandyBulletImpact : Actor Spawn("CandyLight",pos); Spawn("CandyRing",pos); } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -878,30 +809,13 @@ Class CandyBulletImpact : Actor } } -Class CandyRing : Actor +Class CandyRing : SWWMNonInteractiveActor { Default { RenderStyle "Add"; Scale 1.2; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; +FORCEXYBILLBOARD; - +NOTELEPORT; - +NOINTERACTION; - } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } } States { diff --git a/zscript/weapons/swwm_thiccboolet_fx.zsc b/zscript/weapons/swwm_thiccboolet_fx.zsc index b5f9aa0b6..8b8517279 100644 --- a/zscript/weapons/swwm_thiccboolet_fx.zsc +++ b/zscript/weapons/swwm_thiccboolet_fx.zsc @@ -36,21 +36,14 @@ Class SilverBulletMag : SWWMCasing } } -Class SilverAirRip : Actor +Class SilverAirRip : SWWMNonInteractiveActor { Default { Obituary "$O_SILVERBULLET"; DamageType 'Sniped'; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; +FORCERADIUSDMG; +NODAMAGETHRUST; - +NOINTERACTION; +FOILINVUL; } virtual void Explode( bool thruwall = false ) @@ -64,17 +57,6 @@ Class SilverAirRip : Actor if ( thruwall ) SWWMUtility.AchievementProgressInc("thruwall",nkill,target.player); } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: @@ -83,21 +65,14 @@ Class SilverAirRip : Actor } } -Class SilverImpact : Actor +Class SilverImpact : SWWMNonInteractiveActor { Default { Obituary "$O_SILVERBULLET"; DamageType 'Sniped'; - Radius 0.1; - Height 0; - +NOGRAVITY; - +NOCLIP; - +DONTSPLASH; - +NOTELEPORT; +FORCERADIUSDMG; +NODAMAGETHRUST; - +NOINTERACTION; +FOILINVUL; } override void PostBeginPlay() @@ -149,17 +124,6 @@ Class SilverImpact : Actor s.vel = pvel; } } - override void Tick() - { - if ( isFrozen() ) return; - if ( !CheckNoDelay() || (tics == -1) ) return; - if ( tics > 0 ) tics--; - while ( !tics ) - { - if ( !SetState(CurState.NextState) ) - return; - } - } States { Spawn: