mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-26 22:01:13 +00:00
- reviewd script code for spawn calls that did not check their results.
Nothing should ever assume that spawning an actor is unconditionally successful. There can always be some edge cases where this is not the case.
This commit is contained in:
parent
3967156d62
commit
06900ff8be
24 changed files with 222 additions and 130 deletions
|
@ -116,10 +116,13 @@ extend class Actor
|
|||
A_FaceTarget ();
|
||||
|
||||
Actor fog = Spawn (fire, target.Pos, ALLOW_REPLACE);
|
||||
tracer = fog;
|
||||
fog.target = self;
|
||||
fog.tracer = self.target;
|
||||
fog.A_Fire(0);
|
||||
if (fog != null)
|
||||
{
|
||||
tracer = fog;
|
||||
fog.target = self;
|
||||
fog.tracer = self.target;
|
||||
fog.A_Fire(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -188,6 +188,7 @@ extend class Actor
|
|||
|
||||
// Now launch mushroom cloud
|
||||
Actor aimtarget = Spawn("Mapspot", pos, NO_REPLACE); // We need something to aim at.
|
||||
if (aimtarget == null) return;
|
||||
Actor owner = (flags & MSF_DontHurt) ? target : self;
|
||||
aimtarget.Height = Height;
|
||||
|
||||
|
|
|
@ -233,10 +233,13 @@ extend class Actor
|
|||
SpawnPuff ("BulletPuff", pos, angle, angle, 3);
|
||||
Actor smoke = Spawn ("RevenantTracerSmoke", Vec3Offset(-Vel.X, -Vel.Y, 0.), ALLOW_REPLACE);
|
||||
|
||||
smoke.Vel.Z = 1.;
|
||||
smoke.tics -= random[Tracer](0, 3);
|
||||
if (smoke.tics < 1)
|
||||
smoke.tics = 1;
|
||||
if (smoke != null)
|
||||
{
|
||||
smoke.Vel.Z = 1.;
|
||||
smoke.tics -= random[Tracer](0, 3);
|
||||
if (smoke.tics < 1)
|
||||
smoke.tics = 1;
|
||||
}
|
||||
|
||||
// The rest of this function was identical with Strife's version, except for the angle being used.
|
||||
A_Tracer2(16.875);
|
||||
|
|
|
@ -335,11 +335,14 @@ extend class Actor
|
|||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Actor mo = Spawn("Feather", pos + (0, 0, 20), NO_REPLACE);
|
||||
mo.target = self;
|
||||
mo.Vel.X = Random2[Feathers]() / 256.;
|
||||
mo.Vel.Y = Random2[Feathers]() / 256.;
|
||||
mo.Vel.Z = 1. + random[Feathers]() / 128.;
|
||||
mo.SetState (mo.SpawnState + (random[Feathers]()&7));
|
||||
if (mo != null)
|
||||
{
|
||||
mo.target = self;
|
||||
mo.Vel.X = Random2[Feathers]() / 256.;
|
||||
mo.Vel.Y = Random2[Feathers]() / 256.;
|
||||
mo.Vel.Z = 1. + random[Feathers]() / 128.;
|
||||
mo.SetState (mo.SpawnState + (random[Feathers]()&7));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -166,13 +166,14 @@ class Sorcerer1 : Actor
|
|||
{
|
||||
bSolid = false;
|
||||
Actor mo = Spawn("Sorcerer2", Pos, ALLOW_REPLACE);
|
||||
mo.Translation = Translation;
|
||||
mo.SetStateLabel("Rise");
|
||||
mo.angle = angle;
|
||||
mo.CopyFriendliness (self, true);
|
||||
if (mo != null)
|
||||
{
|
||||
mo.Translation = Translation;
|
||||
mo.SetStateLabel("Rise");
|
||||
mo.angle = angle;
|
||||
mo.CopyFriendliness (self, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -434,9 +435,12 @@ class Sorcerer2FX1 : Actor
|
|||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
Actor mo = Spawn("Sorcerer2FXSpark", pos, ALLOW_REPLACE);
|
||||
mo.Vel.X = Random2[BlueSpark]() / 128.;
|
||||
mo.Vel.Y = Random2[BlueSpark]() / 128.;
|
||||
mo.Vel.Z = 1. + Random[BlueSpark]() / 256.;
|
||||
if (mo != null)
|
||||
{
|
||||
mo.Vel.X = Random2[BlueSpark]() / 128.;
|
||||
mo.Vel.Y = Random2[BlueSpark]() / 128.;
|
||||
mo.Vel.Z = 1. + Random[BlueSpark]() / 256.;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,7 +149,7 @@ Class ArtiTimeBomb : Inventory
|
|||
override bool Use (bool pickup)
|
||||
{
|
||||
Actor mo = Spawn("ActivatedTimeBomb", Owner.Vec3Angle(24., Owner.angle, - Owner.Floorclip), ALLOW_REPLACE);
|
||||
mo.target = Owner;
|
||||
if (mo != null) mo.target = Owner;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,14 +102,20 @@ class HereticImp : Actor
|
|||
bNoGravity = false;
|
||||
|
||||
chunk = Spawn("HereticImpChunk1", pos, ALLOW_REPLACE);
|
||||
chunk.vel.x = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.y = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.z = 9;
|
||||
if (chunk != null)
|
||||
{
|
||||
chunk.vel.x = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.y = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.z = 9;
|
||||
}
|
||||
|
||||
chunk = Spawn("HereticImpChunk2", pos, ALLOW_REPLACE);
|
||||
chunk.vel.x = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.y = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.z = 9;
|
||||
if (chunk != null)
|
||||
{
|
||||
chunk.vel.x = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.y = random2[ImpExplode]() / 64.;
|
||||
chunk.vel.z = 9;
|
||||
}
|
||||
|
||||
if (extremecrash)
|
||||
{
|
||||
|
|
|
@ -60,10 +60,13 @@ class Pod : Actor
|
|||
for (int count = chance > 240 ? 2 : 1; count; count--)
|
||||
{
|
||||
Actor goo = Spawn(gootype, pos + (0, 0, 48), ALLOW_REPLACE);
|
||||
goo.target = self;
|
||||
goo.Vel.X = Random2[PodPain]() / 128.;
|
||||
goo.Vel.Y = Random2[PodPain]() / 128.;
|
||||
goo.Vel.Z = 0.5 + random[PodPain]() / 128.;
|
||||
if (goo != null)
|
||||
{
|
||||
goo.target = self;
|
||||
goo.Vel.X = Random2[PodPain]() / 128.;
|
||||
goo.Vel.Y = Random2[PodPain]() / 128.;
|
||||
goo.Vel.Z = 0.5 + random[PodPain]() / 128.;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -295,12 +298,15 @@ class Volcano : Actor
|
|||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Actor blast = Spawn("VolcanoBlast", pos + (0, 0, 44), ALLOW_REPLACE);
|
||||
blast.target = self;
|
||||
blast.Angle = random[VolcanoBlast]() * (360 / 256.);
|
||||
blast.VelFromAngle(1.);
|
||||
blast.Vel.Z = 2.5 + random[VolcanoBlast]() / 64.;
|
||||
blast.A_PlaySound ("world/volcano/shoot", CHAN_BODY);
|
||||
blast.CheckMissileSpawn (radius);
|
||||
if (blast != null)
|
||||
{
|
||||
blast.target = self;
|
||||
blast.Angle = random[VolcanoBlast]() * (360 / 256.);
|
||||
blast.VelFromAngle(1.);
|
||||
blast.Vel.Z = 2.5 + random[VolcanoBlast]() / 64.;
|
||||
blast.A_PlaySound ("world/volcano/shoot", CHAN_BODY);
|
||||
blast.CheckMissileSpawn (radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,12 +102,15 @@ class Ironlich : Actor
|
|||
{
|
||||
A_PlaySound ("ironlich/attack1", CHAN_BODY);
|
||||
}
|
||||
fire.target = baseFire.target;
|
||||
fire.angle = baseFire.angle;
|
||||
fire.Vel = baseFire.Vel;
|
||||
fire.SetDamage(0);
|
||||
fire.health = (i+1) * 2;
|
||||
fire.CheckMissileSpawn (radius);
|
||||
if (fire != null)
|
||||
{
|
||||
fire.target = baseFire.target;
|
||||
fire.angle = baseFire.angle;
|
||||
fire.Vel = baseFire.Vel;
|
||||
fire.SetDamage(0);
|
||||
fire.health = (i+1) * 2;
|
||||
fire.CheckMissileSpawn (radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -167,11 +170,14 @@ class HeadFX1 : Actor
|
|||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
Actor shard = Spawn("HeadFX2", Pos, ALLOW_REPLACE);
|
||||
shard.target = target;
|
||||
shard.angle = i*45.;
|
||||
shard.VelFromAngle();
|
||||
shard.Vel.Z = -.6;
|
||||
shard.CheckMissileSpawn (radius);
|
||||
if (shard != null)
|
||||
{
|
||||
shard.target = target;
|
||||
shard.angle = i*45.;
|
||||
shard.VelFromAngle();
|
||||
shard.Vel.Z = -.6;
|
||||
shard.CheckMissileSpawn (radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -163,8 +163,11 @@ class RedAxe : KnightAxe
|
|||
double xo = random2[DripBlood]() / 32.0;
|
||||
double yo = random2[DripBlood]() / 32.0;
|
||||
Actor mo = Spawn ("Blood", Vec3Offset(xo, yo, 0.), ALLOW_REPLACE);
|
||||
mo.Vel.X = random2[DripBlood]() / 64.0;
|
||||
mo.Vel.Y = random2[DripBlood]() / 64.0;
|
||||
mo.Gravity = 1./8;
|
||||
if (mo != null)
|
||||
{
|
||||
mo.Vel.X = random2[DripBlood]() / 64.0;
|
||||
mo.Vel.Y = random2[DripBlood]() / 64.0;
|
||||
mo.Gravity = 1./8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,10 +160,13 @@ class BlasterFX1 : FastProjectile
|
|||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
Actor ripper = Spawn("Ripper", pos, ALLOW_REPLACE);
|
||||
ripper.target = target;
|
||||
ripper.angle = i*45;
|
||||
ripper.VelFromAngle();
|
||||
ripper.CheckMissileSpawn (radius);
|
||||
if (ripper != null)
|
||||
{
|
||||
ripper.target = target;
|
||||
ripper.angle = i*45;
|
||||
ripper.VelFromAngle();
|
||||
ripper.CheckMissileSpawn (radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,14 +60,17 @@ class Mace : HereticWeapon
|
|||
if (random[MaceAtk]() < 28)
|
||||
{
|
||||
Actor ball = Spawn("MaceFX2", Pos + (0, 0, 28 - Floorclip), ALLOW_REPLACE);
|
||||
ball.Vel.Z = 2 - clamp(tan(pitch), -5, 5);
|
||||
ball.target = self;
|
||||
ball.angle = self.angle;
|
||||
ball.AddZ(ball.Vel.Z);
|
||||
ball.VelFromAngle();
|
||||
ball.Vel += Vel.xy / 2;
|
||||
ball.A_PlaySound ("weapons/maceshoot", CHAN_BODY);
|
||||
ball.CheckMissileSpawn (radius);
|
||||
if (ball != null)
|
||||
{
|
||||
ball.Vel.Z = 2 - clamp(tan(pitch), -5, 5);
|
||||
ball.target = self;
|
||||
ball.angle = self.angle;
|
||||
ball.AddZ(ball.Vel.Z);
|
||||
ball.VelFromAngle();
|
||||
ball.Vel += Vel.xy / 2;
|
||||
ball.A_PlaySound ("weapons/maceshoot", CHAN_BODY);
|
||||
ball.CheckMissileSpawn (radius);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -260,18 +263,24 @@ class MaceFX2 : MaceFX1
|
|||
SetState (SpawnState);
|
||||
|
||||
Actor tiny = Spawn("MaceFX3", Pos, ALLOW_REPLACE);
|
||||
tiny.target = target;
|
||||
tiny.angle = angle + 90.;
|
||||
tiny.VelFromAngle(Vel.Z - 1.);
|
||||
tiny.Vel += (Vel.XY * .5, Vel.Z);
|
||||
tiny.CheckMissileSpawn (radius);
|
||||
if (tiny != null)
|
||||
{
|
||||
tiny.target = target;
|
||||
tiny.angle = angle + 90.;
|
||||
tiny.VelFromAngle(Vel.Z - 1.);
|
||||
tiny.Vel += (Vel.XY * .5, Vel.Z);
|
||||
tiny.CheckMissileSpawn (radius);
|
||||
}
|
||||
|
||||
tiny = Spawn("MaceFX3", Pos, ALLOW_REPLACE);
|
||||
tiny.target = target;
|
||||
tiny.angle = angle - 90.;
|
||||
tiny.VelFromAngle(Vel.Z - 1.);
|
||||
tiny.Vel += (Vel.XY * .5, Vel.Z);
|
||||
tiny.CheckMissileSpawn (radius);
|
||||
if (tiny != null)
|
||||
{
|
||||
tiny.target = target;
|
||||
tiny.angle = angle - 90.;
|
||||
tiny.VelFromAngle(Vel.Z - 1.);
|
||||
tiny.Vel += (Vel.XY * .5, Vel.Z);
|
||||
tiny.CheckMissileSpawn (radius);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -151,16 +151,19 @@ class PhoenixRodPowered : PhoenixRod
|
|||
|
||||
slope += 0.1;
|
||||
Actor mo = Spawn("PhoenixFX2", spawnpos, ALLOW_REPLACE);
|
||||
mo.target = self;
|
||||
mo.Angle = Angle;
|
||||
mo.VelFromAngle();
|
||||
mo.Vel.XY += Vel.XY;
|
||||
mo.Vel.Z = mo.Speed * slope;
|
||||
if (mo != null)
|
||||
{
|
||||
mo.target = self;
|
||||
mo.Angle = Angle;
|
||||
mo.VelFromAngle();
|
||||
mo.Vel.XY += Vel.XY;
|
||||
mo.Vel.Z = mo.Speed * slope;
|
||||
mo.CheckMissileSpawn (radius);
|
||||
}
|
||||
if (!player.refire)
|
||||
{
|
||||
A_PlaySound("weapons/phoenixpowshoot", CHAN_WEAPON, 1, true);
|
||||
}
|
||||
mo.CheckMissileSpawn (radius);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -239,10 +242,16 @@ class PhoenixFX1 : Actor
|
|||
//[RH] Heretic never sets the target for seeking
|
||||
//P_SeekerMissile (self, 5, 10);
|
||||
Actor puff = Spawn("PhoenixPuff", Pos, ALLOW_REPLACE);
|
||||
puff.Vel.XY = AngleToVector(Angle + 90, 1.3);
|
||||
if (puff != null)
|
||||
{
|
||||
puff.Vel.XY = AngleToVector(Angle + 90, 1.3);
|
||||
}
|
||||
|
||||
puff = Spawn("PhoenixPuff", Pos, ALLOW_REPLACE);
|
||||
puff.Vel.XY = AngleToVector(Angle - 90, 1.3);
|
||||
if (puff != null)
|
||||
{
|
||||
puff.Vel.XY = AngleToVector(Angle - 90, 1.3);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -70,7 +70,8 @@ extend class Actor
|
|||
// [RH] Floor and ceiling huggers should not be blasted vertically.
|
||||
if (!victim.bFloorHugger && !victim.bCeilingHugger)
|
||||
{
|
||||
mo.Vel.Z = victim.Vel.Z = 8;
|
||||
victim.Vel.Z = 8;
|
||||
if (mo != null) mo.Vel.Z = 8;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -567,14 +567,17 @@ class HolyTail : Actor
|
|||
static void SpawnSpiritTail (Actor spirit)
|
||||
{
|
||||
Actor tail = Spawn ("HolyTail", spirit.Pos, ALLOW_REPLACE);
|
||||
tail.target = spirit; // parent
|
||||
for (int i = 1; i < 3; i++)
|
||||
if (tail != null)
|
||||
{
|
||||
Actor next = Spawn ("HolyTailTrail", spirit.Pos, ALLOW_REPLACE);
|
||||
tail.tracer = next;
|
||||
tail = next;
|
||||
tail.target = spirit; // parent
|
||||
for (int i = 1; i < 3; i++)
|
||||
{
|
||||
Actor next = Spawn ("HolyTailTrail", spirit.Pos, ALLOW_REPLACE);
|
||||
tail.tracer = next;
|
||||
tail = next;
|
||||
}
|
||||
tail.tracer = null; // last tail bit
|
||||
}
|
||||
tail.tracer = null; // last tail bit
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
|
|
@ -255,10 +255,13 @@ class ArtiPoisonBag : Inventory
|
|||
}
|
||||
|
||||
class<Actor> spawntype = GetFlechetteType(other);
|
||||
Inventory copy = Inventory(Spawn (spawntype));
|
||||
copy.Amount = Amount;
|
||||
copy.MaxAmount = MaxAmount;
|
||||
GoAwayAndDie ();
|
||||
let copy = Inventory(Spawn (spawntype));
|
||||
if (copy != null)
|
||||
{
|
||||
copy.Amount = Amount;
|
||||
copy.MaxAmount = MaxAmount;
|
||||
GoAwayAndDie ();
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -315,17 +315,20 @@ class Korax : Actor
|
|||
private void SpawnKoraxMissile (Vector3 pos, Actor dest, Class<Actor> type)
|
||||
{
|
||||
Actor th = Spawn (type, pos, ALLOW_REPLACE);
|
||||
th.target = self; // Originator
|
||||
double an = th.AngleTo(dest);
|
||||
if (dest.bShadow)
|
||||
{ // Invisible target
|
||||
an += Random2[KoraxMissile]() * (45/256.);
|
||||
if (th != null)
|
||||
{
|
||||
th.target = self; // Originator
|
||||
double an = th.AngleTo(dest);
|
||||
if (dest.bShadow)
|
||||
{ // Invisible target
|
||||
an += Random2[KoraxMissile]() * (45/256.);
|
||||
}
|
||||
th.angle = an;
|
||||
th.VelFromAngle();
|
||||
double dist = dest.DistanceBySpeed(th, th.Speed);
|
||||
th.Vel.Z = (dest.pos.z - pos.Z + 30) / dist;
|
||||
th.CheckMissileSpawn(radius);
|
||||
}
|
||||
th.angle = an;
|
||||
th.VelFromAngle();
|
||||
double dist = dest.DistanceBySpeed(th, th.Speed);
|
||||
th.Vel.Z = (dest.pos.z - pos.Z + 30) / dist;
|
||||
th.CheckMissileSpawn(radius);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
|
|
@ -262,7 +262,7 @@ class Minotaur : Actor
|
|||
type = "PunchPuff";
|
||||
}
|
||||
Actor puff = Spawn (type, Pos, ALLOW_REPLACE);
|
||||
puff.Vel.Z = 2;
|
||||
if (puff != null) puff.Vel.Z = 2;
|
||||
special1--;
|
||||
}
|
||||
else
|
||||
|
@ -710,9 +710,12 @@ class MinotaurFX2 : MinotaurFX1
|
|||
double y = Random2[MntrFloorFire]() / 64.;
|
||||
|
||||
Actor mo = Spawn("MinotaurFX3", Vec2OffsetZ(x, y, floorz), ALLOW_REPLACE);
|
||||
mo.target = target;
|
||||
mo.Vel.X = MinVel; // Force block checking
|
||||
mo.CheckMissileSpawn (radius);
|
||||
if (mo != null)
|
||||
{
|
||||
mo.target = target;
|
||||
mo.Vel.X = MinVel; // Force block checking
|
||||
mo.CheckMissileSpawn (radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -202,9 +202,12 @@ class EntityBoss : SpectralMonster
|
|||
Vector3 pos = spot.Vec3Angle(secondRadius, an, tracer ? 70. : 0.);
|
||||
|
||||
second = Spawn("EntitySecond", pos, ALLOW_REPLACE);
|
||||
second.CopyFriendliness(self, true);
|
||||
second.A_FaceTarget();
|
||||
second.VelFromAngle(i == 0? 4.8828125 : secondRadius * 4., an);
|
||||
if (second != null)
|
||||
{
|
||||
second.CopyFriendliness(self, true);
|
||||
second.A_FaceTarget();
|
||||
second.VelFromAngle(i == 0? 4.8828125 : secondRadius * 4., an);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -171,9 +171,12 @@ class Inquisitor : Actor
|
|||
void A_TossArm ()
|
||||
{
|
||||
Actor foo = Spawn("InquisitorArm", Pos + (0,0,24), ALLOW_REPLACE);
|
||||
foo.angle = angle - 90. + Random2[Inquisitor]() * (360./1024.);
|
||||
foo.VelFromAngle(foo.Speed / 8);
|
||||
foo.Vel.Z = random[Inquisitor]() / 64.;
|
||||
if (foo != null)
|
||||
{
|
||||
foo.angle = angle - 90. + Random2[Inquisitor]() * (360./1024.);
|
||||
foo.VelFromAngle(foo.Speed / 8);
|
||||
foo.Vel.Z = random[Inquisitor]() / 64.;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -163,6 +163,10 @@ class TeleporterBeacon : Inventory
|
|||
{
|
||||
Actor owner = target;
|
||||
Actor rebel = Spawn("Rebel1", (pos.xy, floorz), ALLOW_REPLACE);
|
||||
if (rebel == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!rebel.TryMove (rebel.Pos.xy, true))
|
||||
{
|
||||
rebel.Destroy ();
|
||||
|
|
|
@ -268,7 +268,7 @@ class Sigil : Weapon
|
|||
|
||||
action void A_FireSigil1 ()
|
||||
{
|
||||
Actor spot;
|
||||
Actor spot = null;
|
||||
FTranslatedLineTarget t;
|
||||
|
||||
if (player == null || player.ReadyWeapon == null)
|
||||
|
|
|
@ -62,11 +62,13 @@ class SpectralMonster : Actor
|
|||
return;
|
||||
|
||||
Actor foo = Spawn("SpectralLightningV2", Pos + (0, 0, 32), ALLOW_REPLACE);
|
||||
|
||||
foo.Vel.Z = -12;
|
||||
foo.target = self;
|
||||
foo.FriendPlayer = 0;
|
||||
foo.tracer = target;
|
||||
if (foo != null)
|
||||
{
|
||||
foo.Vel.Z = -12;
|
||||
foo.target = self;
|
||||
foo.FriendPlayer = 0;
|
||||
foo.tracer = target;
|
||||
}
|
||||
|
||||
Angle -= 90.;
|
||||
for (int i = 0; i < 20; ++i)
|
||||
|
@ -217,9 +219,11 @@ class SpectralLightningH1 : SpectralLightningBase
|
|||
void A_SpectralLightningTail ()
|
||||
{
|
||||
Actor foo = Spawn("SpectralLightningHTail", Vec3Offset(-Vel.X, -Vel.Y, 0.), ALLOW_REPLACE);
|
||||
|
||||
foo.Angle = Angle;
|
||||
foo.FriendPlayer = FriendPlayer;
|
||||
if (foo != null)
|
||||
{
|
||||
foo.Angle = Angle;
|
||||
foo.FriendPlayer = FriendPlayer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -386,15 +390,21 @@ class SpectralLightningSpot : SpectralLightningDeath1
|
|||
|
||||
Actor flash = Spawn (cls, Vec2OffsetZ(xo, yo, ONCEILINGZ), ALLOW_REPLACE);
|
||||
|
||||
flash.target = target;
|
||||
flash.Vel.Z = -18;
|
||||
flash.FriendPlayer = FriendPlayer;
|
||||
if (flash != null)
|
||||
{
|
||||
flash.target = target;
|
||||
flash.Vel.Z = -18;
|
||||
flash.FriendPlayer = FriendPlayer;
|
||||
}
|
||||
|
||||
flash = Spawn("SpectralLightningV2", (pos.xy, ONCEILINGZ), ALLOW_REPLACE);
|
||||
|
||||
flash.target = target;
|
||||
flash.Vel.Z = -18;
|
||||
flash.FriendPlayer = FriendPlayer;
|
||||
if (flash != null)
|
||||
{
|
||||
flash.target = target;
|
||||
flash.Vel.Z = -18;
|
||||
flash.FriendPlayer = FriendPlayer;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -133,7 +133,10 @@ extend class Actor
|
|||
void A_DropFire()
|
||||
{
|
||||
Actor drop = Spawn("FireDroplet", pos + (0,0,24), ALLOW_REPLACE);
|
||||
drop.Vel.Z = -1.;
|
||||
if (drop != null)
|
||||
{
|
||||
drop.Vel.Z = -1.;
|
||||
}
|
||||
A_Explode(64, 64, XF_NOSPLASH, damagetype: 'Fire');
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue