From ab9023d3ee10e5e2b10cbee89d7fcd7dcc12d522 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Mon, 31 Oct 2022 15:08:11 +0100 Subject: [PATCH] Add freezetics support to all actors that need it. Remove Demoslayer fun option. --- cvarinfo.base | 1 - language.def_menu | 2 - language.es_menu | 2 - language.version | 4 +- menudef.txt | 1 - zscript/dlc1/swwm_heavymahsheengun_fx.zsc | 10 + zscript/dlc1/swwm_mister_fx.zsc | 30 +++ zscript/dlc1/swwm_notashotgun_fx.zsc | 10 + zscript/handler/swwm_handler_damage.zsc | 56 ----- zscript/items/swwm_ammoitems.zsc | 5 + zscript/items/swwm_baseitem.zsc | 5 + zscript/items/swwm_funstuff.zsc | 28 ++- zscript/items/swwm_powerups.zsc | 26 ++- zscript/swwm_blod.zsc | 22 +- zscript/swwm_common.zsc | 15 ++ zscript/swwm_common_fx.zsc | 52 ++++- zscript/swwm_gesture_fx.zsc | 10 + zscript/swwm_player.zsc | 2 +- zscript/swwm_player_fx.zsc | 214 ------------------ zscript/weapons/swwm_baseweapon_fx.zsc | 3 +- zscript/weapons/swwm_blazeit_fx.zsc | 3 +- zscript/weapons/swwm_danmaku_fx.zsc | 19 +- .../weapons/swwm_deathlydeathcannon_fx.zsc | 72 +++++- zscript/weapons/swwm_sparkyboi_fx.zsc | 10 + zscript/weapons/swwm_splode_fx.zsc | 1 + 25 files changed, 312 insertions(+), 291 deletions(-) diff --git a/cvarinfo.base b/cvarinfo.base index 50264ac82..59951cf6a 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -67,7 +67,6 @@ nosave bool swwm_weapontooltips = true; // shows a tooltip on weapon operation nosave string swwm_tooltipshown = ""; // which weapons have already had their tooltips displayed nosave noarchive bool swwm_tooltipnote = false; // set if the note on how to disable tooltips was already displayed nosave bool swwm_nointertips = false; // hides intermission tips, in case you don't want to see them -server bool swwm_demoslayer = false; // if you're below 100hp, enemies drop healing orbs when you kill them nosave bool swwm_beepboop = false; // prompts the Demolitionist to go "beep", "boop" and "bop" when pressing any switch (may get annoying) nosave string swwm_menuposehistory = ""; // stores currently seen poses for the main menu, for shuffling nosave string swwm_titlesubhistory = ""; // stores currently seen subtitles for the title screen, for shuffling diff --git a/language.def_menu b/language.def_menu index 43b94528b..9b16853d7 100644 --- a/language.def_menu +++ b/language.def_menu @@ -149,7 +149,6 @@ SWWM_RESETTOOLTIPS = "Reset Weapon Tooltips"; SWWM_CRESET = "Reset to Defaults"; SWWM_ARESET = "Wipe Achievements"; SWWM_NOINTERTIPS = "Hide Intermission Tips"; -SWWM_DEMOSLAYER = "Demoslayer Mode"; SWWM_BEEPBOOP = "Switch Emoting"; SWWM_VOICEAMP = "Voice Amplification"; SWWM_CLEARFX = "Clear All Effects"; @@ -261,7 +260,6 @@ TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resets weapon tooltips so you can see them al TOOLTIP_EVENT_SWWMRESETCVARS = "Resets all the mod's settings to their original values."; TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Erases all your archievement progress."; TOOLTIP_SWWM_NOINTERTIPS = "Hides intermission tips, in case you don't want to see them."; -TOOLTIP_SWWM_DEMOSLAYER = "Killed enemies may drop health, armor and ammo orbs."; TOOLTIP_SWWM_BEEPBOOP = "The Demolitionist will make cute noises whenever pressing any usable line. This might get annoying, so it's optional."; TOOLTIP_SWWM_VOICEAMP = "At their default volume, the Demolitionist's voice lines might be drowned out by in-game audio. This sets an additional amplification level so they're louder than other sounds."; TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Fades out any active blood, gore, debris and casings."; diff --git a/language.es_menu b/language.es_menu index f19ffec51..7c4f862c3 100644 --- a/language.es_menu +++ b/language.es_menu @@ -147,7 +147,6 @@ SWWM_RESETTOOLTIPS = "Resetear Ayuda de Armas"; SWWM_CRESET = "Restaurar Predeterminado"; SWWM_ARESET = "Borrar Logros"; SWWM_NOINTERTIPS = "Ocultar Consejos de Intermisión"; -SWWM_DEMOSLAYER = "Modo Demoslayer"; SWWM_BEEPBOOP = "Ruiditos de Activación"; SWWM_VOICEAMP = "Amplificación de Voz"; SWWM_CLEARFX = "Limpiar todos los Efectos"; @@ -259,7 +258,6 @@ TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resetea la ayuda de armas para que puedas vol TOOLTIP_EVENT_SWWMRESETCVARS = "Resetea todas las opciones del mod a sus valores originales."; TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Borra todo tu progreso de logros."; TOOLTIP_SWWM_NOINTERTIPS = "Oculta los consejos de intermisión, por si no quieres verlos."; -TOOLTIP_SWWM_DEMOSLAYER = "Los enemigos que mates soltarán orbes de salud, armadura y munición."; TOOLTIP_SWWM_BEEPBOOP = "La Demolicionista hará ruiditos adorables cuando pulse cualquier línea utilizable. Esto puede que resulte cansino, así que es opcional."; TOOLTIP_SWWM_VOICEAMP = "A su volumen normal, las voces de la Demolicionista pueden ser ahogadas por el audio del juego. Con esto se le dá un nivel de amplificación extra para que sean más estridentes que otros sonidos."; TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Desvanece cualquier sangre, vísceras, escombros y casquillos activos."; diff --git a/language.version b/language.version index 3131be5c0..8bdfdd461 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r595 \cu(Sun 30 Oct 22:39:32 CET 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r595 \cu(2022-10-30 22:39:32)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r597 \cu(Mon 31 Oct 15:08:30 CET 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r597 \cu(2022-10-31 15:08:30)\c-"; diff --git a/menudef.txt b/menudef.txt index ce2613a0f..c3f2cc141 100644 --- a/menudef.txt +++ b/menudef.txt @@ -189,7 +189,6 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo" Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo" Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo" - Option "$SWWM_DEMOSLAYER", "swwm_demoslayer", "YesNo" Option "$SWWM_FUNTRAILS", "swwm_funtrails", "SWWMFunTrails" Option "$SWWM_BONKHAMMER", "swwm_bonkhammer", "YesNo" TrapOption "$SWWM_ENGINE", "swwm_engine" diff --git a/zscript/dlc1/swwm_heavymahsheengun_fx.zsc b/zscript/dlc1/swwm_heavymahsheengun_fx.zsc index 1b412e085..61fc66c71 100644 --- a/zscript/dlc1/swwm_heavymahsheengun_fx.zsc +++ b/zscript/dlc1/swwm_heavymahsheengun_fx.zsc @@ -18,6 +18,11 @@ Class SheenPhantom : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(frame?.02:.05); } @@ -45,6 +50,11 @@ Class SheenTrail : SWWMNonInteractiveActor override void Tick() { Vector3 oldpos = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( CurState == SpawnState ) { diff --git a/zscript/dlc1/swwm_mister_fx.zsc b/zscript/dlc1/swwm_mister_fx.zsc index 677736b88..f50726e61 100644 --- a/zscript/dlc1/swwm_mister_fx.zsc +++ b/zscript/dlc1/swwm_mister_fx.zsc @@ -141,6 +141,11 @@ Class MisterBulletImpactPop : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*.9,scale.y*.9); A_FadeOut(.15); @@ -186,6 +191,11 @@ Class MisterFuzzy : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; int nhit, nkill; [nhit, nkill] = SWWMUtility.DoExplosion(self,(special2<0)?4:44,3000,80,80,DE_EXTRAZTHRUST|DE_COUNTENEMIES); @@ -283,6 +293,11 @@ Class MisterFuzzyTrail : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( vel != (0,0,0) ) SetOrigin(level.Vec3Offset(pos,vel),true); @@ -843,6 +858,11 @@ Class MisterRailBeam : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*.85,scale.y); A_FadeOut(.05); @@ -879,6 +899,11 @@ Class MisterRailChildBeam : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*1.05,scale.y); A_FadeOut(.01); @@ -900,6 +925,11 @@ Class MisterGrenadeFlare : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !master || (master.ReactionTime <= 0) ) { diff --git a/zscript/dlc1/swwm_notashotgun_fx.zsc b/zscript/dlc1/swwm_notashotgun_fx.zsc index 5dec5159e..3cdf228cf 100644 --- a/zscript/dlc1/swwm_notashotgun_fx.zsc +++ b/zscript/dlc1/swwm_notashotgun_fx.zsc @@ -55,6 +55,11 @@ Class QuadFlare : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !master || !master.bMISSILE ) { @@ -138,6 +143,11 @@ Class QuadEmber : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !InStateSequence(CurState,FindState("Death")) ) { diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index 8b1115183..d3fd84812 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -225,62 +225,6 @@ extend Class SWWMHandler onehpspree[pnum]++; SWWMUtility.AchievementProgress("onehp",onehpspree[pnum],src.player); } - // tasty treats - if ( swwm_demoslayer ) - { - if ( src.Health < 100 ) - { - int amt = clamp(e.Thing.SpawnHealth()/20,1,10); - if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") ) amt *= 2; - if ( e.Thing.Health < (e.Thing.GetGibHealth()*2) ) amt *= 3; - else if ( e.Thing.Health < e.Thing.GetGibHealth() ) amt *= 2; - for ( int i=0; i 50000) || (i.Amount >= i.MaxAmount) ) continue; - needsammo = true; - break; - } - if ( needsammo ) - { - int amt = clamp(e.Thing.SpawnHealth()/40,1,10); - if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") ) amt *= 2; - if ( e.Thing.Health < (e.Thing.GetGibHealth()*2) ) amt *= 3; - else if ( e.Thing.Health < e.Thing.GetGibHealth() ) amt *= 2; - for ( int i=0; i 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; SetOrigin(Vec3Offset(0,0,vel.z),true); alpha -= .02; diff --git a/zscript/items/swwm_baseitem.zsc b/zscript/items/swwm_baseitem.zsc index eab19e972..ac7e0a89f 100644 --- a/zscript/items/swwm_baseitem.zsc +++ b/zscript/items/swwm_baseitem.zsc @@ -144,6 +144,11 @@ Class SWWMRespawnTimer : SWWMNonInteractiveActor return; } special2 = tracer.tics; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; double str = 1.-special2/double(special1); int freq = int(clamp(30*(1.-str),3,30)); diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index bce5aadea..1cb9cc91e 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -83,6 +83,7 @@ Class FroggyChair : Actor wasonground = ((pos.z <= floorz) || !TestMobjZ()); lastvelz = vel.z; Super.Tick(); + if ( isFrozen() || (freezetics > 0) ) return; if ( (pos.z <= floorz) || !TestMobjZ() ) { if ( !wasonground && (lastvelz < -1) ) A_StartSound("squeak",CHAN_BODY,CHANF_OVERLAP,clamp(-lastvelz*.05,0.,1.)); @@ -287,6 +288,11 @@ Class SWWMGasCloudSpawner : SWWMNonInteractiveActor { override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !(special1%5) ) { @@ -309,6 +315,11 @@ Class SWWMGasCloud : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; for ( int i=0; i<2; i++ ) { @@ -367,6 +378,11 @@ Class FancyConfetti : SWWMNonInteractiveActor override void Tick() { prev = pos; // for interpolation + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( dead ) { @@ -509,6 +525,11 @@ Class SuperFancyTrail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*.95,scale.y); A_FadeOut(.01); @@ -546,6 +567,11 @@ Class SuperFancySparkle : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*specialf1); A_SetRoll(roll+special1,SPF_INTERPOLATE); @@ -599,7 +625,7 @@ Class SuperPartyLight : PaletteLight override void Tick() { Super.Tick(); - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; SetOrigin(level.Vec3Offset(pos,vel),true); } } diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index cdb1e3e16..038582203 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -290,6 +290,11 @@ Class GhostTarget : Actor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( diedie ) A_FadeOut(.02); let bt = BlockThingsIterator.Create(self,300); @@ -1429,7 +1434,7 @@ Class LampMoth : Actor override void Tick() { Super.Tick(); - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; if ( isEntranced() ) { lifespan = 100; @@ -1612,7 +1617,7 @@ Class CompanionLamp : Actor Destroy(); return; } - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; // update trailing position bool foundspot = false; for ( int i=0; i<180; i+=5 ) @@ -2346,6 +2351,11 @@ Class MykradvoTendril : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(bMISSILEMORE?.05:bSTANDSTILL?.2:.1); if ( !CheckNoDelay() || (tics == -1) ) return; @@ -2586,6 +2596,11 @@ Class MykradvoBurst : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( (special1++)%3 ) { @@ -3746,7 +3761,7 @@ Class TheBall : Actor { oldvel = vel; Super.Tick(); - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; if ( InStateSequence(CurState,ResolveState("Death")) ) { deadtimer++; @@ -4116,6 +4131,11 @@ Class SaltBeam : SWWMNonInteractiveActor override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(.04); if ( Random[Spreadgun](-2,args[2]/10) == 0 ) diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 29d7aed7d..c957a2ef7 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -82,6 +82,11 @@ Class mkBloodSpray : SWWMNonInteractiveActor Destroy(); return; } + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; Vector3 setofs = SWWMUtility.RotateVector3(attachofs,target.angle); SetOrigin(level.Vec3Offset(target.pos,setofs),false); @@ -130,6 +135,11 @@ Class mkBloodDrop : SWWMNonInteractiveActor override void Tick() { prev = pos; // for interpolation + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( killme ) A_FadeOut(.01); if ( dead ) @@ -401,6 +411,11 @@ Class mkBloodSmoke : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; Vector3 newp = level.Vec3Offset(pos,vel); if ( level.IsPointInLevel(newp) ) SetOrigin(newp,true); @@ -471,7 +486,7 @@ Class mkFlyingGib : Actor { oldpos = pos; Super.Tick(); - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; if ( killme ) A_FadeOut(.01); if ( CurState == ResolveState("Death2") ) { @@ -662,6 +677,11 @@ Class mkGibber : SWWMNonInteractiveActor override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !gibbed ) { diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index 2a4a7c417..9c24810e3 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -29,6 +29,11 @@ Mixin Class SWWMMinimalTick { override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !CheckNoDelay() || (tics == -1) ) return; if ( tics > 0 ) tics--; @@ -45,6 +50,11 @@ Mixin Class SWWMMinimalMovingTick override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; SetOrigin(level.Vec3Offset(pos,vel),true); if ( !CheckNoDelay() || (tics == -1) ) return; @@ -62,6 +72,11 @@ Mixin Class SWWMMinimalMovingWaterTick override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; SetOrigin(level.Vec3Offset(pos,vel),true); UpdateWaterLevel(); diff --git a/zscript/swwm_common_fx.zsc b/zscript/swwm_common_fx.zsc index 9826b4f05..1ef82ac02 100644 --- a/zscript/swwm_common_fx.zsc +++ b/zscript/swwm_common_fx.zsc @@ -51,7 +51,7 @@ Class PaletteLight : PointLight override void Tick() { Super.Tick(); - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; ReactionTime--; if ( ReactionTime < 0 ) { @@ -96,6 +96,11 @@ Class SWWMSmoke : SWWMNonInteractiveActor override void Tick() { prev = pos; // for interpolation + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; vel *= .96; vel.z += .01; @@ -206,6 +211,11 @@ Class SWWMHalfSmoke : SWWMNonInteractiveActor override void Tick() { prev = pos; // for interpolation + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; vel *= 0.96; vel.z += 0.01; @@ -280,6 +290,11 @@ Class SWWMBubble : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; vel *= 0.96; vel.z += 0.05; @@ -363,6 +378,11 @@ Class SWWMSparkTrail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*.9,scale.y); A_FadeOut(.06); @@ -391,6 +411,11 @@ Class SWWMSpark : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( dead ) { @@ -566,6 +591,11 @@ Class SWWMChip : SWWMNonInteractiveActor override void Tick() { prev = pos; // for interpolation + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( dead ) { @@ -792,6 +822,11 @@ Class SWWMTeleportSparkle : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*specialf1); A_FadeOut(specialf2); @@ -819,6 +854,11 @@ Class SWWMTeleportDest : SWWMNonInteractiveActor override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( (level.maptime+special1)%10 ) return; int numpt = Random[ExploS](0,2); @@ -847,6 +887,11 @@ Class SWWMTeleportLine : SWWMNonInteractiveActor Destroy(); return; } + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( (level.maptime+special1)%5 ) return; Vector3 apos, bpos; @@ -1267,6 +1312,11 @@ Class SWWMShadow : SWWMNonInteractiveActor Destroy(); return; } + if ( freezetics > 0 ) + { + freezetics--; + return; + } Update(); } default diff --git a/zscript/swwm_gesture_fx.zsc b/zscript/swwm_gesture_fx.zsc index 451dfb833..4c0afe50f 100644 --- a/zscript/swwm_gesture_fx.zsc +++ b/zscript/swwm_gesture_fx.zsc @@ -10,6 +10,11 @@ Class LoveHeartTrail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(.01); scale *= .95; @@ -38,6 +43,11 @@ Class LoveHeartSparkle : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*specialf1); A_FadeOut(specialf2); diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 063a67602..c283052ec 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -1173,7 +1173,7 @@ Class Demolitionist : PlayerPawn PoisonPeriodReceived = 0; PoisonDamageReceived = 0; Super.Tick(); - if ( (gamestate != GS_LEVEL) || !player || (player.mo != self) ) return; + if ( (gamestate != GS_LEVEL) || !player || (player.mo != self) || (freezetics > 0) ) return; UpdateFace(); UpdateTags(); if ( hasteleported ) diff --git a/zscript/swwm_player_fx.zsc b/zscript/swwm_player_fx.zsc index 76b4e4c0c..3b80be0ff 100644 --- a/zscript/swwm_player_fx.zsc +++ b/zscript/swwm_player_fx.zsc @@ -1,219 +1,5 @@ // player effects -// drop from monsters when using "Demoslayer" fun option -Class SlayerOrb : Actor abstract -{ - Class tclass; - - Property TrailClass : tclass; - - Default - { - RenderStyle "Add"; - Radius 4; - Height 8; - Scale .5; - BounceFactor .75; - WallBounceFactor .75; - Gravity .35; - PROJECTILE; - +THRUACTORS; - -NOGRAVITY; - +NOTELEPORT; - +DONTSPLASH; - +BOUNCEONWALLS; - +BOUNCEONFLOORS; - +BOUNCEONCEILINGS; - +CANBOUNCEWATER; - +FORCEXYBILLBOARD; - } - virtual void PickedUp( int np, PlayerPawn mo ) - { - } - override void Tick() - { - Vector3 oldp = pos; - Super.Tick(); - if ( !isFrozen() ) - { - let t = Spawn(tclass,pos); - t.scale *= abs(scale.x); - t.alpha *= alpha; - scale *= .995; - alpha = abs(scale.x)*2.; - if ( abs(scale.x) < .1 ) - { - Destroy(); - return; - } - } - int np = -1; - double mdist = 1000.; - for ( int i=0; i mdist ) continue; - mdist = dist; - np = i; - } - if ( np == -1 ) return; - let mo = players[np].mo; - if ( (GetAge() > 5) && SWWMUtility.BoxIntersect(self,mo,pad:8) ) - { - PickedUp(np,mo); - Destroy(); - return; - } - if ( isFrozen() ) return; - Vector3 dirto = level.Vec3Diff(pos,mo.Vec3Offset(0,0,mo.Height/2)); - double distto = dirto.length(); - dirto /= distto; - double fact = ((1000.-distto)/1000.)**2.; - vel *= 1.-.05*fact; - vel += (dirto+(0,0,.1))*fact*2.; - } - override void PostBeginPlay() - { - Super.PostBeginPlay(); - SpriteOffset = (0,-4); - Scale.x *= RandomPick[Junk](-1,-1); - Scale.y *= RandomPick[Junk](-1,-1); - } -} -Class HealthOrb : SlayerOrb -{ - Default - { - SlayerOrb.TrailClass "HealthOrbTrail"; - } - override void PickedUp( int np, PlayerPawn mo ) - { - int flg = CHANF_OVERLAP|CHANF_MAYBE_LOCAL; - if ( mo.CheckLocalView() ) flg |= CHANF_NOPAUSE; - mo.A_StartSound("misc/health_pkup",CHAN_ITEM,flg); - int hp = int(ceil(abs(scale.x*10))); - mo.GiveBody(hp,100); - SWWMHandler.HealthFlash(np); - } - States - { - Spawn: - BLPF E -1 Bright; - Stop; - - } -} -Class ArmorOrb : SlayerOrb -{ - Default - { - SlayerOrb.TrailClass "ArmorOrbTrail"; - } - override void PickedUp( int np, PlayerPawn mo ) - { - int flg = CHANF_OVERLAP|CHANF_MAYBE_LOCAL; - if ( mo.CheckLocalView() ) flg |= CHANF_NOPAUSE; - mo.A_StartSound("misc/armor_pkup",CHAN_ITEM,flg); - int hp = int(ceil(abs(scale.x*10))); - let n = mo.FindInventory("ArmorNugget"); - if ( !n ) - { - n = Inventory(Spawn("ArmorNugget")); - n.AttachToOwner(mo); - SWWMLoreLibrary.Add(mo.player,"Nugget"); - n.Amount = 0; - } - if ( n.Amount < 100 ) n.Amount = min(n.Amount+hp,100); - SWWMHandler.ArmorFlash(np); - } - States - { - Spawn: - BLPF D -1 Bright; - Stop; - - } -} -Class AmmoOrb : SlayerOrb -{ - Default - { - SlayerOrb.TrailClass "AmmoOrbTrail"; - } - override void PickedUp( int np, PlayerPawn mo ) - { - int flg = CHANF_OVERLAP|CHANF_MAYBE_LOCAL; - if ( mo.CheckLocalView() ) flg |= CHANF_NOPAUSE; - mo.A_StartSound("misc/ammo_pkup",CHAN_ITEM,flg); - int tier = int(ceil(abs(scale.x*10))); - Class cls = "FabricatorTier1"; - if ( tier >= 4 ) cls = "FabricatorTier3"; - else if ( tier >= 2 ) cls = "FabricatorTier2"; - let f = Inventory(Spawn(cls)); - f.bQUIET = true; - if ( !f.CallTryPickup(mo) ) f.Destroy(); - mo.player.bonuscount = Inventory.BONUSADD; - } - States - { - Spawn: - BLPF A -1 Bright; - Stop; - - } -} - -Class SlayerOrbTrail : SWWMNonInteractiveActor abstract -{ - Default - { - RenderStyle "Add"; - Scale .25; - Alpha .5; - +FORCEXYBILLBOARD; - } - override void Tick() - { - if ( isFrozen() ) return; - alpha *= .9; - scale *= 1.05; - if ( alpha < .05 ) Destroy(); - } - override void PostBeginPlay() - { - Super.PostBeginPlay(); - SpriteOffset = (0,-4); - } -} -Class HealthOrbTrail : SlayerOrbTrail -{ - States - { - Spawn: - BLPS E -1 Bright; - Stop; - } -} -Class ArmorOrbTrail : SlayerOrbTrail -{ - States - { - Spawn: - BLPS D -1 Bright; - Stop; - } -} -Class AmmoOrbTrail : SlayerOrbTrail -{ - States - { - Spawn: - BLPS A -1 Bright; - Stop; - } -} - // simple object for moving a dropped item towards the player Class SWWMMagItem play { diff --git a/zscript/weapons/swwm_baseweapon_fx.zsc b/zscript/weapons/swwm_baseweapon_fx.zsc index a3be67cc4..d9b56683c 100644 --- a/zscript/weapons/swwm_baseweapon_fx.zsc +++ b/zscript/weapons/swwm_baseweapon_fx.zsc @@ -47,7 +47,7 @@ Class SWWMCasing : Actor abstract override void Tick() { Super.Tick(); - if ( isFrozen() ) return; + if ( isFrozen() || (freezetics > 0) ) return; if ( killme ) A_FadeOut(.01); if ( waterlevel > 0 ) { @@ -152,6 +152,7 @@ Class SWWMWeaponLight : DynamicLight override void Tick() { Super.Tick(); + if ( isFrozen() || (freezetics > 0) ) return; if ( !target ) { Destroy(); diff --git a/zscript/weapons/swwm_blazeit_fx.zsc b/zscript/weapons/swwm_blazeit_fx.zsc index f48c2274c..b72106e74 100644 --- a/zscript/weapons/swwm_blazeit_fx.zsc +++ b/zscript/weapons/swwm_blazeit_fx.zsc @@ -159,7 +159,6 @@ Class HellblazerFlare : SWWMNonInteractiveActor override void Tick() { - if ( isFrozen() ) return; if ( !master || !master.bMISSILE ) { Destroy(); @@ -423,7 +422,7 @@ Class HellblazerMissile2 : HellblazerMissile { oldvel = vel; Super.Tick(); - if ( isFrozen() || !InStateSequence(CurState,FindState("Spawn")) ) return; + if ( isFrozen() || (freezetics > 0) || !InStateSequence(CurState,FindState("Spawn")) ) return; roll += rollvel; angle += anglevel; pitch += pitchvel; diff --git a/zscript/weapons/swwm_danmaku_fx.zsc b/zscript/weapons/swwm_danmaku_fx.zsc index 99fdb5c24..4a36dc92e 100644 --- a/zscript/weapons/swwm_danmaku_fx.zsc +++ b/zscript/weapons/swwm_danmaku_fx.zsc @@ -14,8 +14,8 @@ Class EvisceratorChunkLight : PointLightAttenuated Destroy(); return; } + if ( isFrozen() || (freezetics > 0) ) return; SetOrigin(target.pos,true); - if ( isFrozen() ) return; double intst = clamp((.7-EvisceratorChunk(target).lifetime)/.7,0.,1.); args[LIGHT_RED] = int(255*intst); args[LIGHT_GREEN] = int(224*intst); @@ -68,6 +68,11 @@ Class EvisceratorChunkGlow : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !EvisceratorChunk(target) || EvisceratorChunk(target).justdied ) { @@ -97,6 +102,11 @@ Class EvisceratorChunkTrail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*(.6+specialf1),scale.y); A_FadeOut(.1+specialf2); @@ -172,7 +182,7 @@ Class EvisceratorChunk : Actor // otherwise there is a single puff of smoke at the LAST tic // of the state, there is no logical explanation for this, // I guess I can blame graf, randi, or whoever else - if ( isFrozen() || justdied ) return; + if ( isFrozen() || (freezetics > 0) || justdied ) return; lifetime += lifespeed; if ( waterlevel > 0 ) lifetime = max(.7,lifetime); A_SetTranslation(tls[clamp(int(lifetime*10),0,7)]); @@ -386,6 +396,11 @@ Class EvisceratorProjSmoke : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; lifetime += lifespeed; let s = Spawn("SWWMSmoke",pos); diff --git a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc index 0e20a6278..ebb71aa80 100644 --- a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc @@ -5,9 +5,14 @@ Class AshenRemains : SWWMNonInteractiveActor { override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } + if ( isFrozen() ) return; double fz = CurSector.floorplane.ZAtPoint(pos.xy); if ( fz != pos.z ) SetOrigin((pos.x,pos.y,fz),true); - if ( isFrozen() ) return; special1++; if ( special1 > 350 ) A_FadeOut(0.01); } @@ -280,6 +285,11 @@ Class YnykronDelayedImpact : SWWMNonInteractiveActor override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; special1++; if ( special1 < 4 ) @@ -820,6 +830,11 @@ Class YnykronBeam : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(FRandom[Ynykron](.01,.02)); special2++; @@ -906,6 +921,11 @@ Class DelayedWallBeam : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; special2--; if ( special2 > 0 ) return; @@ -976,6 +996,11 @@ Class YnykronImpactRing : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*(special2?1.06:1.03)); if ( !CheckNoDelay() || (tics == -1) ) return; @@ -1048,6 +1073,11 @@ Class YnykronShot : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; // spawn rings special1++; @@ -1130,6 +1160,11 @@ Class YnykronHaloTail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x+.5); A_FadeOut(.2); @@ -1152,6 +1187,11 @@ Class YnykronHalo : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; if ( !target || target.InStateSequence(target.CurState,target.FindState("Death")) ) { @@ -1232,6 +1272,11 @@ Class YnykronVoidBeamTail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(); } @@ -1786,6 +1831,11 @@ Class YnykronVoidSparkleTrail : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*.95,scale.y); A_FadeOut(.04); @@ -1816,6 +1866,11 @@ Class YnykronVoidSparkle : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_SetScale(scale.x*specialf1); A_FadeOut(specialf2); @@ -2052,6 +2107,11 @@ Class YnykronSingularity : SWWMNonInteractiveActor override void Tick() { prev = pos; + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; Vector3 newpos; if ( !mt ) mt = new("SimpleMoveTracer"); @@ -2534,6 +2594,11 @@ Class YnykronAltBeam : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(FRandom[Ynykron](.01,.02)); special2++; @@ -2623,6 +2688,11 @@ Class YnykronAltShot : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() || IsActorPlayingSound(CHAN_VOICE) ) return; Destroy(); } diff --git a/zscript/weapons/swwm_sparkyboi_fx.zsc b/zscript/weapons/swwm_sparkyboi_fx.zsc index 475f7b3e5..38077a8ae 100644 --- a/zscript/weapons/swwm_sparkyboi_fx.zsc +++ b/zscript/weapons/swwm_sparkyboi_fx.zsc @@ -91,6 +91,11 @@ Class BigOrbiter : SWWMNonInteractiveActor Destroy(); return; } + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; angle += anglevel; pitch += pitchvel; @@ -1245,6 +1250,11 @@ Class BiosparkChildBeam : SWWMNonInteractiveActor } override void Tick() { + if ( freezetics > 0 ) + { + freezetics--; + return; + } if ( isFrozen() ) return; A_FadeOut(.02); if ( !CheckNoDelay() || (tics == -1) ) return; diff --git a/zscript/weapons/swwm_splode_fx.zsc b/zscript/weapons/swwm_splode_fx.zsc index 868192dd4..54bdf4b9b 100644 --- a/zscript/weapons/swwm_splode_fx.zsc +++ b/zscript/weapons/swwm_splode_fx.zsc @@ -301,6 +301,7 @@ Class ExplodiumMagAttach : ExplodiumMagProj override void Tick() { Super.Tick(); + if ( freezetics > 0 ) return; if ( isFrozen() ) return; if ( bKILLED ) return; if ( atline ) // attempt to follow the movement of the line