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

@ -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 )
{

View file

@ -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) )
{

View file

@ -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")) )
{

View file

@ -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<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
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()
{
if ( freezetics > 0 )
{
freezetics--;
return;
}
if ( isFrozen() ) return;
SetOrigin(Vec3Offset(0,0,vel.z),true);
alpha -= .02;

View file

@ -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));

View file

@ -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);
}
}

View file

@ -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 )

View file

@ -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 )
{

View file

@ -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();

View file

@ -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

View file

@ -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);

View file

@ -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 )

View file

@ -1,219 +1,5 @@
// 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
Class SWWMMagItem play
{

View file

@ -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();

View file

@ -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;

View file

@ -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);

View file

@ -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();
}

View file

@ -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;

View file

@ -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