Add freezetics support to all actors that need it.

Remove Demoslayer fun option.
This commit is contained in:
Mari the Deer 2022-10-31 15:08:11 +01:00
commit ab9023d3ee
25 changed files with 312 additions and 291 deletions

View file

@ -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 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 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 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 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_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 nosave string swwm_titlesubhistory = ""; // stores currently seen subtitles for the title screen, for shuffling

View file

@ -149,7 +149,6 @@ SWWM_RESETTOOLTIPS = "Reset Weapon Tooltips";
SWWM_CRESET = "Reset to Defaults"; SWWM_CRESET = "Reset to Defaults";
SWWM_ARESET = "Wipe Achievements"; SWWM_ARESET = "Wipe Achievements";
SWWM_NOINTERTIPS = "Hide Intermission Tips"; SWWM_NOINTERTIPS = "Hide Intermission Tips";
SWWM_DEMOSLAYER = "Demoslayer Mode";
SWWM_BEEPBOOP = "Switch Emoting"; SWWM_BEEPBOOP = "Switch Emoting";
SWWM_VOICEAMP = "Voice Amplification"; SWWM_VOICEAMP = "Voice Amplification";
SWWM_CLEARFX = "Clear All Effects"; 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_SWWMRESETCVARS = "Resets all the mod's settings to their original values.";
TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Erases all your archievement progress."; 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_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_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_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."; TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Fades out any active blood, gore, debris and casings.";

View file

@ -147,7 +147,6 @@ SWWM_RESETTOOLTIPS = "Resetear Ayuda de Armas";
SWWM_CRESET = "Restaurar Predeterminado"; SWWM_CRESET = "Restaurar Predeterminado";
SWWM_ARESET = "Borrar Logros"; SWWM_ARESET = "Borrar Logros";
SWWM_NOINTERTIPS = "Ocultar Consejos de Intermisión"; SWWM_NOINTERTIPS = "Ocultar Consejos de Intermisión";
SWWM_DEMOSLAYER = "Modo Demoslayer";
SWWM_BEEPBOOP = "Ruiditos de Activación"; SWWM_BEEPBOOP = "Ruiditos de Activación";
SWWM_VOICEAMP = "Amplificación de Voz"; SWWM_VOICEAMP = "Amplificación de Voz";
SWWM_CLEARFX = "Limpiar todos los Efectos"; 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_SWWMRESETCVARS = "Resetea todas las opciones del mod a sus valores originales.";
TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Borra todo tu progreso de logros."; 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_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_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_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."; TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Desvanece cualquier sangre, vísceras, escombros y casquillos activos.";

View file

@ -1,3 +1,3 @@
[default] [default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r595 \cu(Sun 30 Oct 22:39:32 CET 2022)\c-"; SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r597 \cu(Mon 31 Oct 15:08:30 CET 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r595 \cu(2022-10-30 22:39:32)\c-"; SWWM_SHORTVER="\cw1.3pre r597 \cu(2022-10-31 15:08:30)\c-";

View file

@ -189,7 +189,6 @@ OptionMenu "SWWMOptionMenu"
Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo" Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo"
Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo" Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo"
Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo" Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo"
Option "$SWWM_DEMOSLAYER", "swwm_demoslayer", "YesNo"
Option "$SWWM_FUNTRAILS", "swwm_funtrails", "SWWMFunTrails" Option "$SWWM_FUNTRAILS", "swwm_funtrails", "SWWMFunTrails"
Option "$SWWM_BONKHAMMER", "swwm_bonkhammer", "YesNo" Option "$SWWM_BONKHAMMER", "swwm_bonkhammer", "YesNo"
TrapOption "$SWWM_ENGINE", "swwm_engine" TrapOption "$SWWM_ENGINE", "swwm_engine"

View file

@ -18,6 +18,11 @@ Class SheenPhantom : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(frame?.02:.05); A_FadeOut(frame?.02:.05);
} }
@ -45,6 +50,11 @@ Class SheenTrail : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
Vector3 oldpos = pos; Vector3 oldpos = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( CurState == SpawnState ) if ( CurState == SpawnState )
{ {

View file

@ -141,6 +141,11 @@ Class MisterBulletImpactPop : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*.9,scale.y*.9); A_SetScale(scale.x*.9,scale.y*.9);
A_FadeOut(.15); A_FadeOut(.15);
@ -186,6 +191,11 @@ Class MisterFuzzy : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
int nhit, nkill; int nhit, nkill;
[nhit, nkill] = SWWMUtility.DoExplosion(self,(special2<0)?4:44,3000,80,80,DE_EXTRAZTHRUST|DE_COUNTENEMIES); [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() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( vel != (0,0,0) ) if ( vel != (0,0,0) )
SetOrigin(level.Vec3Offset(pos,vel),true); SetOrigin(level.Vec3Offset(pos,vel),true);
@ -843,6 +858,11 @@ Class MisterRailBeam : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*.85,scale.y); A_SetScale(scale.x*.85,scale.y);
A_FadeOut(.05); A_FadeOut(.05);
@ -879,6 +899,11 @@ Class MisterRailChildBeam : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*1.05,scale.y); A_SetScale(scale.x*1.05,scale.y);
A_FadeOut(.01); A_FadeOut(.01);
@ -900,6 +925,11 @@ Class MisterGrenadeFlare : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !master || (master.ReactionTime <= 0) ) if ( !master || (master.ReactionTime <= 0) )
{ {

View file

@ -55,6 +55,11 @@ Class QuadFlare : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !master || !master.bMISSILE ) if ( !master || !master.bMISSILE )
{ {
@ -138,6 +143,11 @@ Class QuadEmber : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !InStateSequence(CurState,FindState("Death")) ) if ( !InStateSequence(CurState,FindState("Death")) )
{ {

View file

@ -225,62 +225,6 @@ extend Class SWWMHandler
onehpspree[pnum]++; onehpspree[pnum]++;
SWWMUtility.AchievementProgress("onehp",onehpspree[pnum],src.player); 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<amt; i++ )
{
if ( !Random[Junk](0,2) ) continue;
let a = Actor.Spawn("HealthOrb",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
a.vel.z = FRandom[Junk](4,16);
double ang = FRandom[Junk](0,360);
a.vel.xy = Actor.AngleToVector(ang,FRandom[Junk](4,8));
}
}
if ( src.CountInv("ArmorNugget") < 100 )
{
int amt = clamp(e.Thing.SpawnHealth()/30,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<amt; i++ )
{
if ( Random[Junk](0,1) ) continue;
let a = Actor.Spawn("ArmorOrb",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
a.vel.z = FRandom[Junk](4,16);
double ang = FRandom[Junk](0,360);
a.vel.xy = Actor.AngleToVector(ang,FRandom[Junk](4,8));
}
}
bool needsammo = false;
for ( Inventory i=src.Inv; i; i=i.inv )
{
if ( !(i is 'SWWMAmmo') || (i.Stamina <= 0) || (i.Stamina > 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<amt; i++ )
{
if ( Random[Junk](0,1) ) continue;
let a = Actor.Spawn("AmmoOrb",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
a.vel.z = FRandom[Junk](4,16);
double ang = FRandom[Junk](0,360);
a.vel.xy = Actor.AngleToVector(ang,FRandom[Junk](4,8));
}
}
}
} }
// no credits unless it's a counted kill or marine (that isn't friendly) or another player in DM // no credits unless it's a counted kill or marine (that isn't friendly) or another player in DM
if ( e.Thing.IsFriend(src) || (!e.Thing.default.bCountKill && !(e.Thing is 'ScriptedMarine') && !(deathmatch && e.Thing.player)) ) if ( e.Thing.IsFriend(src) || (!e.Thing.default.bCountKill && !(e.Thing is 'ScriptedMarine') && !(deathmatch && e.Thing.player)) )

View file

@ -70,6 +70,11 @@ Class GoldShellSparkle : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
SetOrigin(Vec3Offset(0,0,vel.z),true); SetOrigin(Vec3Offset(0,0,vel.z),true);
alpha -= .02; alpha -= .02;

View file

@ -144,6 +144,11 @@ Class SWWMRespawnTimer : SWWMNonInteractiveActor
return; return;
} }
special2 = tracer.tics; special2 = tracer.tics;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
double str = 1.-special2/double(special1); double str = 1.-special2/double(special1);
int freq = int(clamp(30*(1.-str),3,30)); int freq = int(clamp(30*(1.-str),3,30));

View file

@ -83,6 +83,7 @@ Class FroggyChair : Actor
wasonground = ((pos.z <= floorz) || !TestMobjZ()); wasonground = ((pos.z <= floorz) || !TestMobjZ());
lastvelz = vel.z; lastvelz = vel.z;
Super.Tick(); Super.Tick();
if ( isFrozen() || (freezetics > 0) ) return;
if ( (pos.z <= floorz) || !TestMobjZ() ) if ( (pos.z <= floorz) || !TestMobjZ() )
{ {
if ( !wasonground && (lastvelz < -1) ) A_StartSound("squeak",CHAN_BODY,CHANF_OVERLAP,clamp(-lastvelz*.05,0.,1.)); 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() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !(special1%5) ) if ( !(special1%5) )
{ {
@ -309,6 +315,11 @@ Class SWWMGasCloud : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
for ( int i=0; i<2; i++ ) for ( int i=0; i<2; i++ )
{ {
@ -367,6 +378,11 @@ Class FancyConfetti : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; // for interpolation prev = pos; // for interpolation
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( dead ) if ( dead )
{ {
@ -509,6 +525,11 @@ Class SuperFancyTrail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*.95,scale.y); A_SetScale(scale.x*.95,scale.y);
A_FadeOut(.01); A_FadeOut(.01);
@ -546,6 +567,11 @@ Class SuperFancySparkle : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*specialf1); A_SetScale(scale.x*specialf1);
A_SetRoll(roll+special1,SPF_INTERPOLATE); A_SetRoll(roll+special1,SPF_INTERPOLATE);
@ -599,7 +625,7 @@ Class SuperPartyLight : PaletteLight
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
SetOrigin(level.Vec3Offset(pos,vel),true); SetOrigin(level.Vec3Offset(pos,vel),true);
} }
} }

View file

@ -290,6 +290,11 @@ Class GhostTarget : Actor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( diedie ) A_FadeOut(.02); if ( diedie ) A_FadeOut(.02);
let bt = BlockThingsIterator.Create(self,300); let bt = BlockThingsIterator.Create(self,300);
@ -1429,7 +1434,7 @@ Class LampMoth : Actor
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
if ( isEntranced() ) if ( isEntranced() )
{ {
lifespan = 100; lifespan = 100;
@ -1612,7 +1617,7 @@ Class CompanionLamp : Actor
Destroy(); Destroy();
return; return;
} }
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
// update trailing position // update trailing position
bool foundspot = false; bool foundspot = false;
for ( int i=0; i<180; i+=5 ) for ( int i=0; i<180; i+=5 )
@ -2346,6 +2351,11 @@ Class MykradvoTendril : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(bMISSILEMORE?.05:bSTANDSTILL?.2:.1); A_FadeOut(bMISSILEMORE?.05:bSTANDSTILL?.2:.1);
if ( !CheckNoDelay() || (tics == -1) ) return; if ( !CheckNoDelay() || (tics == -1) ) return;
@ -2586,6 +2596,11 @@ Class MykradvoBurst : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( (special1++)%3 ) if ( (special1++)%3 )
{ {
@ -3746,7 +3761,7 @@ Class TheBall : Actor
{ {
oldvel = vel; oldvel = vel;
Super.Tick(); Super.Tick();
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
if ( InStateSequence(CurState,ResolveState("Death")) ) if ( InStateSequence(CurState,ResolveState("Death")) )
{ {
deadtimer++; deadtimer++;
@ -4116,6 +4131,11 @@ Class SaltBeam : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(.04); A_FadeOut(.04);
if ( Random[Spreadgun](-2,args[2]/10) == 0 ) if ( Random[Spreadgun](-2,args[2]/10) == 0 )

View file

@ -82,6 +82,11 @@ Class mkBloodSpray : SWWMNonInteractiveActor
Destroy(); Destroy();
return; return;
} }
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
Vector3 setofs = SWWMUtility.RotateVector3(attachofs,target.angle); Vector3 setofs = SWWMUtility.RotateVector3(attachofs,target.angle);
SetOrigin(level.Vec3Offset(target.pos,setofs),false); SetOrigin(level.Vec3Offset(target.pos,setofs),false);
@ -130,6 +135,11 @@ Class mkBloodDrop : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; // for interpolation prev = pos; // for interpolation
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( killme ) A_FadeOut(.01); if ( killme ) A_FadeOut(.01);
if ( dead ) if ( dead )
@ -401,6 +411,11 @@ Class mkBloodSmoke : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
Vector3 newp = level.Vec3Offset(pos,vel); Vector3 newp = level.Vec3Offset(pos,vel);
if ( level.IsPointInLevel(newp) ) SetOrigin(newp,true); if ( level.IsPointInLevel(newp) ) SetOrigin(newp,true);
@ -471,7 +486,7 @@ Class mkFlyingGib : Actor
{ {
oldpos = pos; oldpos = pos;
Super.Tick(); Super.Tick();
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
if ( killme ) A_FadeOut(.01); if ( killme ) A_FadeOut(.01);
if ( CurState == ResolveState("Death2") ) if ( CurState == ResolveState("Death2") )
{ {
@ -662,6 +677,11 @@ Class mkGibber : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !gibbed ) if ( !gibbed )
{ {

View file

@ -29,6 +29,11 @@ Mixin Class SWWMMinimalTick
{ {
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return; if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--; if ( tics > 0 ) tics--;
@ -45,6 +50,11 @@ Mixin Class SWWMMinimalMovingTick
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
SetOrigin(level.Vec3Offset(pos,vel),true); SetOrigin(level.Vec3Offset(pos,vel),true);
if ( !CheckNoDelay() || (tics == -1) ) return; if ( !CheckNoDelay() || (tics == -1) ) return;
@ -62,6 +72,11 @@ Mixin Class SWWMMinimalMovingWaterTick
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
SetOrigin(level.Vec3Offset(pos,vel),true); SetOrigin(level.Vec3Offset(pos,vel),true);
UpdateWaterLevel(); UpdateWaterLevel();

View file

@ -51,7 +51,7 @@ Class PaletteLight : PointLight
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
ReactionTime--; ReactionTime--;
if ( ReactionTime < 0 ) if ( ReactionTime < 0 )
{ {
@ -96,6 +96,11 @@ Class SWWMSmoke : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; // for interpolation prev = pos; // for interpolation
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
vel *= .96; vel *= .96;
vel.z += .01; vel.z += .01;
@ -206,6 +211,11 @@ Class SWWMHalfSmoke : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; // for interpolation prev = pos; // for interpolation
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
vel *= 0.96; vel *= 0.96;
vel.z += 0.01; vel.z += 0.01;
@ -280,6 +290,11 @@ Class SWWMBubble : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
vel *= 0.96; vel *= 0.96;
vel.z += 0.05; vel.z += 0.05;
@ -363,6 +378,11 @@ Class SWWMSparkTrail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*.9,scale.y); A_SetScale(scale.x*.9,scale.y);
A_FadeOut(.06); A_FadeOut(.06);
@ -391,6 +411,11 @@ Class SWWMSpark : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( dead ) if ( dead )
{ {
@ -566,6 +591,11 @@ Class SWWMChip : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; // for interpolation prev = pos; // for interpolation
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( dead ) if ( dead )
{ {
@ -792,6 +822,11 @@ Class SWWMTeleportSparkle : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*specialf1); A_SetScale(scale.x*specialf1);
A_FadeOut(specialf2); A_FadeOut(specialf2);
@ -819,6 +854,11 @@ Class SWWMTeleportDest : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( (level.maptime+special1)%10 ) return; if ( (level.maptime+special1)%10 ) return;
int numpt = Random[ExploS](0,2); int numpt = Random[ExploS](0,2);
@ -847,6 +887,11 @@ Class SWWMTeleportLine : SWWMNonInteractiveActor
Destroy(); Destroy();
return; return;
} }
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( (level.maptime+special1)%5 ) return; if ( (level.maptime+special1)%5 ) return;
Vector3 apos, bpos; Vector3 apos, bpos;
@ -1267,6 +1312,11 @@ Class SWWMShadow : SWWMNonInteractiveActor
Destroy(); Destroy();
return; return;
} }
if ( freezetics > 0 )
{
freezetics--;
return;
}
Update(); Update();
} }
default default

View file

@ -10,6 +10,11 @@ Class LoveHeartTrail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(.01); A_FadeOut(.01);
scale *= .95; scale *= .95;
@ -38,6 +43,11 @@ Class LoveHeartSparkle : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*specialf1); A_SetScale(scale.x*specialf1);
A_FadeOut(specialf2); A_FadeOut(specialf2);

View file

@ -1173,7 +1173,7 @@ Class Demolitionist : PlayerPawn
PoisonPeriodReceived = 0; PoisonPeriodReceived = 0;
PoisonDamageReceived = 0; PoisonDamageReceived = 0;
Super.Tick(); Super.Tick();
if ( (gamestate != GS_LEVEL) || !player || (player.mo != self) ) return; if ( (gamestate != GS_LEVEL) || !player || (player.mo != self) || (freezetics > 0) ) return;
UpdateFace(); UpdateFace();
UpdateTags(); UpdateTags();
if ( hasteleported ) if ( hasteleported )

View file

@ -1,219 +1,5 @@
// player effects // player effects
// drop from monsters when using "Demoslayer" fun option
Class SlayerOrb : Actor abstract
{
Class<Actor> 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<MAXPLAYERS; i++ )
{
if ( !playeringame[i] || (players[i].Health <= 0) || !players[i].mo || !CheckSight(players[i].mo,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
double dist = Distance3D(players[i].mo);
if ( dist > 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<Inventory> 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 // simple object for moving a dropped item towards the player
Class SWWMMagItem play Class SWWMMagItem play
{ {

View file

@ -47,7 +47,7 @@ Class SWWMCasing : Actor abstract
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( isFrozen() ) return; if ( isFrozen() || (freezetics > 0) ) return;
if ( killme ) A_FadeOut(.01); if ( killme ) A_FadeOut(.01);
if ( waterlevel > 0 ) if ( waterlevel > 0 )
{ {
@ -152,6 +152,7 @@ Class SWWMWeaponLight : DynamicLight
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( isFrozen() || (freezetics > 0) ) return;
if ( !target ) if ( !target )
{ {
Destroy(); Destroy();

View file

@ -159,7 +159,6 @@ Class HellblazerFlare : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
if ( isFrozen() ) return;
if ( !master || !master.bMISSILE ) if ( !master || !master.bMISSILE )
{ {
Destroy(); Destroy();
@ -423,7 +422,7 @@ Class HellblazerMissile2 : HellblazerMissile
{ {
oldvel = vel; oldvel = vel;
Super.Tick(); Super.Tick();
if ( isFrozen() || !InStateSequence(CurState,FindState("Spawn")) ) return; if ( isFrozen() || (freezetics > 0) || !InStateSequence(CurState,FindState("Spawn")) ) return;
roll += rollvel; roll += rollvel;
angle += anglevel; angle += anglevel;
pitch += pitchvel; pitch += pitchvel;

View file

@ -14,8 +14,8 @@ Class EvisceratorChunkLight : PointLightAttenuated
Destroy(); Destroy();
return; return;
} }
if ( isFrozen() || (freezetics > 0) ) return;
SetOrigin(target.pos,true); SetOrigin(target.pos,true);
if ( isFrozen() ) return;
double intst = clamp((.7-EvisceratorChunk(target).lifetime)/.7,0.,1.); double intst = clamp((.7-EvisceratorChunk(target).lifetime)/.7,0.,1.);
args[LIGHT_RED] = int(255*intst); args[LIGHT_RED] = int(255*intst);
args[LIGHT_GREEN] = int(224*intst); args[LIGHT_GREEN] = int(224*intst);
@ -68,6 +68,11 @@ Class EvisceratorChunkGlow : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !EvisceratorChunk(target) || EvisceratorChunk(target).justdied ) if ( !EvisceratorChunk(target) || EvisceratorChunk(target).justdied )
{ {
@ -97,6 +102,11 @@ Class EvisceratorChunkTrail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*(.6+specialf1),scale.y); A_SetScale(scale.x*(.6+specialf1),scale.y);
A_FadeOut(.1+specialf2); A_FadeOut(.1+specialf2);
@ -172,7 +182,7 @@ Class EvisceratorChunk : Actor
// otherwise there is a single puff of smoke at the LAST tic // otherwise there is a single puff of smoke at the LAST tic
// of the state, there is no logical explanation for this, // of the state, there is no logical explanation for this,
// I guess I can blame graf, randi, or whoever else // I guess I can blame graf, randi, or whoever else
if ( isFrozen() || justdied ) return; if ( isFrozen() || (freezetics > 0) || justdied ) return;
lifetime += lifespeed; lifetime += lifespeed;
if ( waterlevel > 0 ) lifetime = max(.7,lifetime); if ( waterlevel > 0 ) lifetime = max(.7,lifetime);
A_SetTranslation(tls[clamp(int(lifetime*10),0,7)]); A_SetTranslation(tls[clamp(int(lifetime*10),0,7)]);
@ -386,6 +396,11 @@ Class EvisceratorProjSmoke : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
lifetime += lifespeed; lifetime += lifespeed;
let s = Spawn("SWWMSmoke",pos); let s = Spawn("SWWMSmoke",pos);

View file

@ -5,9 +5,14 @@ Class AshenRemains : SWWMNonInteractiveActor
{ {
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return;
double fz = CurSector.floorplane.ZAtPoint(pos.xy); double fz = CurSector.floorplane.ZAtPoint(pos.xy);
if ( fz != pos.z ) SetOrigin((pos.x,pos.y,fz),true); if ( fz != pos.z ) SetOrigin((pos.x,pos.y,fz),true);
if ( isFrozen() ) return;
special1++; special1++;
if ( special1 > 350 ) A_FadeOut(0.01); if ( special1 > 350 ) A_FadeOut(0.01);
} }
@ -280,6 +285,11 @@ Class YnykronDelayedImpact : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
special1++; special1++;
if ( special1 < 4 ) if ( special1 < 4 )
@ -820,6 +830,11 @@ Class YnykronBeam : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(FRandom[Ynykron](.01,.02)); A_FadeOut(FRandom[Ynykron](.01,.02));
special2++; special2++;
@ -906,6 +921,11 @@ Class DelayedWallBeam : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
special2--; special2--;
if ( special2 > 0 ) return; if ( special2 > 0 ) return;
@ -976,6 +996,11 @@ Class YnykronImpactRing : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*(special2?1.06:1.03)); A_SetScale(scale.x*(special2?1.06:1.03));
if ( !CheckNoDelay() || (tics == -1) ) return; if ( !CheckNoDelay() || (tics == -1) ) return;
@ -1048,6 +1073,11 @@ Class YnykronShot : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
// spawn rings // spawn rings
special1++; special1++;
@ -1130,6 +1160,11 @@ Class YnykronHaloTail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x+.5); A_SetScale(scale.x+.5);
A_FadeOut(.2); A_FadeOut(.2);
@ -1152,6 +1187,11 @@ Class YnykronHalo : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( !target || target.InStateSequence(target.CurState,target.FindState("Death")) ) if ( !target || target.InStateSequence(target.CurState,target.FindState("Death")) )
{ {
@ -1232,6 +1272,11 @@ Class YnykronVoidBeamTail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(); A_FadeOut();
} }
@ -1786,6 +1831,11 @@ Class YnykronVoidSparkleTrail : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*.95,scale.y); A_SetScale(scale.x*.95,scale.y);
A_FadeOut(.04); A_FadeOut(.04);
@ -1816,6 +1866,11 @@ Class YnykronVoidSparkle : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_SetScale(scale.x*specialf1); A_SetScale(scale.x*specialf1);
A_FadeOut(specialf2); A_FadeOut(specialf2);
@ -2052,6 +2107,11 @@ Class YnykronSingularity : SWWMNonInteractiveActor
override void Tick() override void Tick()
{ {
prev = pos; prev = pos;
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
Vector3 newpos; Vector3 newpos;
if ( !mt ) mt = new("SimpleMoveTracer"); if ( !mt ) mt = new("SimpleMoveTracer");
@ -2534,6 +2594,11 @@ Class YnykronAltBeam : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(FRandom[Ynykron](.01,.02)); A_FadeOut(FRandom[Ynykron](.01,.02));
special2++; special2++;
@ -2623,6 +2688,11 @@ Class YnykronAltShot : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() || IsActorPlayingSound(CHAN_VOICE) ) return; if ( isFrozen() || IsActorPlayingSound(CHAN_VOICE) ) return;
Destroy(); Destroy();
} }

View file

@ -91,6 +91,11 @@ Class BigOrbiter : SWWMNonInteractiveActor
Destroy(); Destroy();
return; return;
} }
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
angle += anglevel; angle += anglevel;
pitch += pitchvel; pitch += pitchvel;
@ -1245,6 +1250,11 @@ Class BiosparkChildBeam : SWWMNonInteractiveActor
} }
override void Tick() override void Tick()
{ {
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return; if ( isFrozen() ) return;
A_FadeOut(.02); A_FadeOut(.02);
if ( !CheckNoDelay() || (tics == -1) ) return; if ( !CheckNoDelay() || (tics == -1) ) return;

View file

@ -301,6 +301,7 @@ Class ExplodiumMagAttach : ExplodiumMagProj
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( freezetics > 0 ) return;
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( bKILLED ) return; if ( bKILLED ) return;
if ( atline ) // attempt to follow the movement of the line if ( atline ) // attempt to follow the movement of the line