Beta stage entered. Ynykron Altfire finalized.
|
|
@ -1,4 +1,4 @@
|
|||
**Swimming in Jizz:**
|
||||
~~**Swimming in Jizz:**~~
|
||||
|
||||
- This is where I make all the stuff before beta.
|
||||
- It's been over nine months already, still a shorter dev time than my previous projects.
|
||||
|
|
|
|||
4
TODO.md
|
|
@ -1,7 +1,3 @@
|
|||
**Fundamental things before beta:**
|
||||
|
||||
- Ynykron Artifact altfire
|
||||
|
||||
**Not so fundamental things during first beta:**
|
||||
|
||||
- Extra Demolitionist animations (swimming, additional gestures)
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \cwGZ\c- r547 (Tue 15 Sep 14:11:49 CEST 2020)";
|
||||
SWWM_MODVER="\chSWWM \cwGZ\c- 0.9b r549 (Tue 15 Sep 19:18:10 CEST 2020)";
|
||||
|
|
|
|||
BIN
palettes/Purple.pal
Normal file
BIN
sprites/MOPFA0.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
sprites/XEX4A0.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
sprites/XEX4B0.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
sprites/XEX4C0.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
sprites/XEX4D0.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
sprites/XEX4E0.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
sprites/XEX4F0.png
Normal file
|
After Width: | Height: | Size: 2 KiB |
BIN
sprites/XEX4G0.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
sprites/XEX4H0.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
sprites/XEX4I0.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
sprites/XEX4J0.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
sprites/XEX4K0.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
sprites/XEX4L0.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
sprites/XEX4M0.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
sprites/XEX4N0.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
sprites/XEX4O0.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
sprites/XEX4P0.png
Normal file
|
After Width: | Height: | Size: 3 KiB |
BIN
sprites/XEX4Q0.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
sprites/XEX4R0.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
sprites/XEX4S0.png
Normal file
|
After Width: | Height: | Size: 3 KiB |
BIN
sprites/XEX4T0.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
sprites/XEX4U0.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
sprites/XEX4V0.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
sprites/XEX4W0.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
sprites/XEX4X0.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
sprites/XEX4Y0.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
sprites/XEX4Z0.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
sprites/XEX4[0.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
sprites/XEX4^0.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
|
|
@ -44,6 +44,17 @@ Class HellblazerSubExpl : Actor
|
|||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -66,6 +77,17 @@ Class HellblazerRing : Actor
|
|||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -88,6 +110,17 @@ Class HellblazerRing2 : Actor
|
|||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -117,6 +150,17 @@ Class HellblazerTrail : Actor
|
|||
Super.PostBeginPlay();
|
||||
SetState(FindState("Spawn")+Random[ExploS](0,7));
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -162,6 +206,7 @@ Class HellblazerFlare : Actor
|
|||
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !master || !master.bMISSILE )
|
||||
{
|
||||
Destroy();
|
||||
|
|
@ -939,6 +984,13 @@ Class RavagerPuff : Actor
|
|||
if ( isFrozen() ) return;
|
||||
A_FadeOut((waterlevel>0)?.1:.02);
|
||||
scale += initsc*.2;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -1097,6 +1149,17 @@ Class HellblazerWarheadTrail : Actor
|
|||
+NOINTERACTION;
|
||||
Scale 2.4;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -24,6 +24,17 @@ Class mkBlood : Actor
|
|||
else b.SetShade(Color(80,0,0));
|
||||
b.CopyBloodColor(target);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -483,6 +483,17 @@ Class EvisceratorSubExpl : Actor
|
|||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -505,6 +516,17 @@ Class EvisceratorRing : Actor
|
|||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -219,6 +219,17 @@ Class YnykronImpactTrail : Actor
|
|||
Scale.x *= RandomPick[ExploS](-1,1);
|
||||
Scale.y *= RandomPick[ExploS](-1,1);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -452,6 +463,17 @@ Class YnykronImpact : Actor
|
|||
YnykronShot(master).blastcount--;
|
||||
Super.OnDestroy();
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -901,6 +923,17 @@ Class YnykronRing : Actor
|
|||
+ROLLCENTER;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -927,9 +960,15 @@ Class YnykronImpactRing : Actor
|
|||
}
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( isFrozen() ) return;
|
||||
A_SetScale(scale.x*(special2?1.06:1.03));
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -1830,6 +1869,168 @@ Class SimpleMoveTracer : LineTracer
|
|||
}
|
||||
}
|
||||
|
||||
Class YnykronSingularityRing : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
RenderStyle "Add";
|
||||
Radius 0.1;
|
||||
Height 0;
|
||||
Scale 4.;
|
||||
+NOGRAVITY;
|
||||
+NOBLOCKMAP;
|
||||
+FORCEXYBILLBOARD;
|
||||
+NOTELEPORT;
|
||||
+DONTSPLASH;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
A_SetScale(scale.x*1.05);
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XRG4 ABCDEFGHIJKLMNOPQRSTUVWX 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class YnykronVoidExplLight : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "Purple";
|
||||
ReactionTime 60;
|
||||
Args 0,0,0,1200;
|
||||
}
|
||||
}
|
||||
|
||||
Class YnykronVoidSparkle : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
RenderStyle "Add";
|
||||
Radius 0.1;
|
||||
Height 0;
|
||||
+NOGRAVITY;
|
||||
+NOBLOCKMAP;
|
||||
+DONTSPLASH;
|
||||
+ROLLSPRITE;
|
||||
+ROLLCENTER;
|
||||
+FORCEXYBILLBOARD;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Scale *= FRandom[ExploS](.75,1.5);
|
||||
specialf1 = FRandom[ExploS](.95,.98);
|
||||
specialf2 = FRandom[ExploS](.005,.015);
|
||||
vel = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))*FRandom[ExploS](1,16);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
A_SetScale(scale.x*specialf1);
|
||||
A_FadeOut(specialf2);
|
||||
Vector3 dir = vel;
|
||||
double magvel = dir.length();
|
||||
magvel *= .99;
|
||||
if ( magvel > 0. )
|
||||
{
|
||||
dir /= magvel;
|
||||
dir += .2*(FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1));
|
||||
vel = dir.unit()*magvel;
|
||||
}
|
||||
SetOrigin(level.Vec3Offset(pos,vel),true);
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MOPF A -1 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class YnykronSingularityExplosion : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
Obituary "$O_YNYKRONALT";
|
||||
DamageType "YnykronAlt";
|
||||
RenderStyle "Add";
|
||||
Scale 5.;
|
||||
Radius 0.1;
|
||||
Height 0;
|
||||
+NOGRAVITY;
|
||||
+NOBLOCKMAP;
|
||||
+NODAMAGETHRUST;
|
||||
+FORCERADIUSDMG;
|
||||
+FORCEXYBILLBOARD;
|
||||
+NOTELEPORT;
|
||||
+FOILINVUL;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
if ( !Random[ExploS](0,5) )
|
||||
A_StartSound("ynykron/impact",CHAN_VOICE);
|
||||
SWWMUtility.DoExplosion(self,10000,5000,400,200);
|
||||
A_SprayDecal("WumboScorch",-172);
|
||||
Scale *= FRandom[ExploS](0.8,1.1);
|
||||
Scale.x *= RandomPick[ExploS](-1,1);
|
||||
Scale.y *= RandomPick[ExploS](-1,1);
|
||||
int numpt = Random[ExploS](8,12);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](4,20);
|
||||
let s = Spawn("SWWMSmoke",pos);
|
||||
s.vel = pvel;
|
||||
s.SetShade(Color(1,1,1)*Random[ExploS](128,160)+Color(28,0,31));
|
||||
s.A_SetRenderStyle(.2,STYLE_AddShaded);
|
||||
s.special1 = Random[ExploS](2,5);
|
||||
s.scale *= 8.;
|
||||
}
|
||||
numpt = Random[ExploS](5,10);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
double ang = FRandom[ExploS](0,360);
|
||||
double pt = FRandom[ExploS](-90,90);
|
||||
double ofs = FRandom[ExploS](0.,30.);
|
||||
let s = Spawn("YnykronVoidSparkle",level.Vec3Offset(pos,ofs*(cos(ang)*cos(pt),sin(ang)*cos(pt),sin(-pt))));
|
||||
s.angle = ang;
|
||||
s.pitch = pt;
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
scale *= 1.01;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XEX4 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class YnykronSingularity : Actor
|
||||
{
|
||||
const MAXBEAMS = 20;
|
||||
|
|
@ -2110,45 +2311,90 @@ Class YnykronSingularity : Actor
|
|||
}
|
||||
void A_SingularityBlast()
|
||||
{
|
||||
Console.Printf("// TODO explosion goes here");
|
||||
A_QuakeEx(8,8,8,80,0,65536,"",QF_RELATIVE|QF_SCALEDOWN,falloff:65536,rollIntensity:1.6);
|
||||
A_AlertMonsters();
|
||||
SWWMUtility.DoExplosion(self,int.max,500000,800,400);
|
||||
A_QuakeEx(8,8,8,100,0,65536,"",QF_RELATIVE|QF_SCALEDOWN,falloff:65536,rollIntensity:1.6);
|
||||
A_StopAllSounds();
|
||||
A_StartSound("ynykron/vortexend",CHAN_VOICE,attenuation:0.);
|
||||
FlashPlayer(250,9000);
|
||||
vel *= 0;
|
||||
// kill off and detach any leftover beams
|
||||
// kill off any leftover beams
|
||||
for ( int i=0; i<MAXBEAMS; i++ )
|
||||
{
|
||||
if ( !beamers[i] ) continue;
|
||||
YnykronVoidBeam(beamers[i]).maxlife = 0;
|
||||
beamers[i] = null;
|
||||
}
|
||||
Spawn("YnykronSingularityRing",pos);
|
||||
Spawn("YnykronVoidExplLight",pos);
|
||||
int numpt = Random[ExploS](40,60);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("YnykronVoidSparkle",pos);
|
||||
s.angle = FRandom[ExploS](0,360);
|
||||
s.pitch = FRandom[ExploS](-90,90);
|
||||
s.scale *= 8.;
|
||||
s.alpha *= 5.;
|
||||
}
|
||||
}
|
||||
void A_SingularityExtraBlast()
|
||||
{
|
||||
special1++;
|
||||
if ( special1 > 80 )
|
||||
if ( special1 > 60 )
|
||||
{
|
||||
if ( IsActorPlayingSound(CHAN_VOICE) ) return;
|
||||
for ( int i=0; i<MAXBEAMS; i++ ) if ( beamers[i] ) return;
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
for ( int i=0; i<MAXBEAMS; i++ )
|
||||
double factor = (60-special1)/60.;
|
||||
double invfct = 1.-factor;
|
||||
SWWMUtility.DoExplosion(self,0,-50000*factor,2000*invfct);
|
||||
FlashPlayer(int(100*factor),9000);
|
||||
FLineTraceData d;
|
||||
Vector3 HitNormal;
|
||||
Vector3 origin;
|
||||
double ang, pt;
|
||||
int numpt = clamp(special1/6,2,8);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
if ( beamers[i] )
|
||||
double totaldist = 30+(special1**2.5)*.05;
|
||||
ang = FRandom[ExploS](0,360);
|
||||
pt = FRandom[ExploS](-90,90);
|
||||
origin = pos;
|
||||
while ( totaldist > 0 )
|
||||
{
|
||||
YnykronVoidBeam(beamers[i]).maxlife = 0;
|
||||
continue;
|
||||
LineTrace(ang,totaldist,pt,TRF_THRUACTORS|TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
|
||||
hitnormal = -d.HitDir;
|
||||
if ( d.HitType == TRACE_HitFloor )
|
||||
{
|
||||
if ( d.Hit3DFloor ) hitnormal = -d.Hit3DFloor.top.Normal;
|
||||
else hitnormal = d.HitSector.floorplane.Normal;
|
||||
}
|
||||
else if ( d.HitType == TRACE_HitCeiling )
|
||||
{
|
||||
if ( d.Hit3DFloor ) hitnormal = -d.Hit3DFloor.bottom.Normal;
|
||||
else hitnormal = d.HitSector.ceilingplane.Normal;
|
||||
}
|
||||
else if ( d.HitType == TRACE_HitWall )
|
||||
{
|
||||
hitnormal = (-d.HitLine.delta.y,d.HitLine.delta.x,0).unit();
|
||||
if ( !d.LineSide ) hitnormal *= -1;
|
||||
}
|
||||
totaldist -= d.Distance;
|
||||
if ( totaldist > 0 )
|
||||
{
|
||||
Vector3 bounced = d.HitDir-(2*hitnormal*(d.HitDir dot HitNormal));
|
||||
ang = atan2(bounced.y,bounced.x);
|
||||
pt = asin(-bounced.z);
|
||||
origin = d.HitLocation+hitnormal;
|
||||
}
|
||||
}
|
||||
beamers[i] = Spawn("YnykronVoidBeam",pos);
|
||||
YnykronVoidBeam(beamers[i]).basebeam = beamers[i];
|
||||
beamers[i].target = target;
|
||||
beamers[i].master = self;
|
||||
beamers[i].stamina = 1;
|
||||
beamers[i].scale *= scale.x*10.;
|
||||
let p = Spawn("YnykronSingularityExplosion",d.HitLocation+hitnormal*4);
|
||||
p.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
p.pitch = asin(-hitnormal.z);
|
||||
p.target = target;
|
||||
p.scale *= 1.+special1/40.;
|
||||
}
|
||||
scale.x *= .97;
|
||||
}
|
||||
|
||||
Default
|
||||
|
|
|
|||
|
|
@ -151,6 +151,17 @@ Class AirBulletRing : Actor
|
|||
Radius 0.1;
|
||||
Height 0;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -1077,6 +1077,9 @@ Class SWWMHandler : EventHandler
|
|||
CopyFloatBob(e.Thing);
|
||||
if ( swwm_doomfall && e.Thing.bISMONSTER && !level.monsterfallingdamage )
|
||||
ForcedFallerDamager.TrackBody(e.Thing);
|
||||
// alternate form without extra thinker, just needs PR #1153
|
||||
//if ( swwm_doomfall && e.Thing.bISMONSTER )
|
||||
// e.Thing.bFALLDAMAGE = true;
|
||||
if ( e.Thing is 'Key' )
|
||||
{
|
||||
DoKeyTagFix(e.Thing);
|
||||
|
|
|
|||
|
|
@ -533,6 +533,17 @@ Class SaltImpact : Actor
|
|||
}
|
||||
Spawn("SaltLight2",pos);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -832,13 +843,14 @@ Class OnFire : Actor
|
|||
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !victim )
|
||||
{
|
||||
A_StopSound(CHAN_5);
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
SetOrigin(victim.pos,true);
|
||||
SetOrigin(victim.pos,false);
|
||||
if ( victim.waterlevel > 0 )
|
||||
{
|
||||
if ( lite ) lite.Destroy();
|
||||
|
|
@ -1043,6 +1055,19 @@ Class OnFireTrail : Actor
|
|||
s.scale *= .5+abs(scale.x)*(.5+special1/6.);
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
SetOrigin(level.Vec3Offset(pos,vel),true);
|
||||
UpdateWaterLevel();
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
Default
|
||||
{
|
||||
RenderStyle "Add";
|
||||
|
|
@ -1683,6 +1708,17 @@ Class GoldenImpact : Actor
|
|||
p.target = target;
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -1808,6 +1844,17 @@ Class GoldenSubImpact : Actor
|
|||
p.target = target;
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -1861,6 +1908,17 @@ Class GoldenSubSubImpact : Actor
|
|||
s.alpha *= .2;
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -796,6 +796,17 @@ Class BiosparkBeamImpact : Actor
|
|||
s.ReactionTime += Random[Sparkster](0,int(5*factor));
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -836,6 +847,17 @@ Class BiosparkComboImpactSub : Actor
|
|||
if ( !bAMBUSH ) return;
|
||||
SWWMUtility.DoExplosion(self,100,10000,300,120);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -1042,6 +1064,17 @@ Class BiosparkComboImpact : Actor
|
|||
p.bAMBUSH = bAMBUSH;
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -1636,6 +1669,17 @@ Class BiosparkSpark : Actor
|
|||
+FORCEXYBILLBOARD;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -89,6 +89,17 @@ Class ExplodiumMagTrail : Actor
|
|||
+NOINTERACTION;
|
||||
Scale 1.1;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -262,6 +273,17 @@ Class ExplodiumBulletImpact : Actor
|
|||
}
|
||||
Spawn("ExploLight",pos);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -245,6 +245,17 @@ Class CandyPop : Actor
|
|||
SWWMHandler.DoFlash(mo,Color(str,224,0,255),3);
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -412,6 +423,17 @@ Class CandyMagTrail : Actor
|
|||
Scale 2.4;
|
||||
Alpha 0.7;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -773,6 +795,17 @@ Class CandyBulletImpact : Actor
|
|||
Spawn("CandyLight",pos);
|
||||
Spawn("CandyRing",pos);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -808,6 +841,17 @@ Class CandyRing : Actor
|
|||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -140,6 +140,17 @@ Class SilverImpact : Actor
|
|||
s.vel = pvel;
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -453,6 +464,17 @@ Class FatChodeImpact : Actor
|
|||
}
|
||||
Spawn("ExploLight3",pos);
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -491,6 +513,17 @@ Class FatChodeExplosionTrail : Actor
|
|||
+NOINTERACTION;
|
||||
Scale 3.;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||