- scriptified shootMortar.

This commit is contained in:
Christoph Oelckers 2022-12-22 19:46:00 +01:00
parent 48f7690756
commit 76b9314f63
3 changed files with 26 additions and 62 deletions

View file

@ -714,30 +714,6 @@ static void shootrpg(DDukeActor *actor, int p, DVector3 pos, DAngle ang, int atw
//
//---------------------------------------------------------------------------
static void shootmortar(DDukeActor* actor, int p, const DVector3& pos, DAngle ang, int atwith)
{
auto sect = actor->sector();
if (actor->spr.extra >= 0) actor->spr.shade = -96;
double x;
auto plActor = ps[findplayer(actor, &x)].GetActor();
x = (plActor->spr.pos.XY() - actor->spr.pos.XY()).Length();
double zvel = -x * 0.5;
if (zvel < -8)
zvel = -4;
double vel = x / 16.;
CreateActor(sect, pos.plusZ(-6) + ang.ToVector() * 4, atwith, -64, DVector2(0.5, 0.5), ang, vel, zvel, actor, 1);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void shoot_d(DDukeActor* actor, int atwith, PClass *cls)
{
int p;
@ -812,11 +788,6 @@ void shoot_d(DDukeActor* actor, int atwith, PClass *cls)
case DTILE_RPG:
shootrpg(actor, p, spos, sang, atwith);
break;
case DTILE_BOUNCEMINE:
case DTILE_MORTER:
shootmortar(actor, p, spos, sang, atwith);
return;
}
return;
}

View file

@ -735,31 +735,6 @@ static void shootwhip(DDukeActor* actor, int p, DVector3 pos, DAngle ang, int at
//
//---------------------------------------------------------------------------
static void shootmortar(DDukeActor* actor, int p, const DVector3& pos, DAngle ang, int atwith)
{
auto sect = actor->sector();
if (actor->spr.extra >= 0) actor->spr.shade = -96;
double x;
auto plActor = ps[findplayer(actor, &x)].GetActor();
x = (plActor->spr.pos.XY() - actor->spr.pos.XY()).Length();
double zvel = -x * 0.5;
if (zvel < -8)
zvel = -4;
double vel = x / 16.;
double size = atwith == RTILE_CHEERBOMB ? 0.25 : 0.5;
CreateActor(sect, pos.plusZ(-6) + ang.ToVector() * 4, atwith, -64, DVector2(size, size), ang, vel, zvel, actor, 1);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void shoot_r(DDukeActor* actor, int atwith, PClass* cls)
{
int p;
@ -832,12 +807,6 @@ void shoot_r(DDukeActor* actor, int atwith, PClass* cls)
rrra_rpg2:
shootrpg(actor, p, spos, sang, atwith);
break;
case RTILE_CHEERBOMB:
if (!isRRRA()) break;
case RTILE_MORTER:
shootmortar(actor, p, spos, sang, atwith);
break;
}
return;
}

View file

@ -2,13 +2,37 @@ class DukeMortar : DukeActor
{
default
{
pic "MORTAR";
pic "MORTER";
DukeMortar.ceilingdist 3;
DukeMortar.spawnscale 0.5;
}
meta int ceilingdist;
meta double spawnscale;
property ceilingdist: ceilingdist;
property spawnscale: spawnscale;
override bool ShootThis(DukeActor actor, DukePlayer p, Vector3 pos, double ang) const
{
let sect = actor.sector;
if (actor.extra >= 0) actor.shade = -96;
double x;
DukePlayer p;
[p, x] = actor.findplayer();
let plActor = p.Actor;
x = (plActor.pos.XY - actor.pos.XY).Length();
double zvel = -x * 0.5;
if (zvel < -8)
zvel = -4;
double vel = x / 16.;
dlevel.SpawnActor(sect, pos.plusZ(-6) + ang.ToVector() * 4, GetClass(), -64, (self.spawnscale, self.spawnscale), ang, vel, zvel, actor, STAT_ACTOR);
return true;
}
override void Tick()
{
let spawned = self.spawn("DukeFrameEffect");
@ -186,7 +210,6 @@ class RedneckMortar : DukeMortar
{
default
{
pic "MORTAR";
DukeMortar.ceilingdist 16;
}
@ -204,6 +227,7 @@ class RedneckCheerBomb : DukeMortar
spriteset "CHEERBOMB", "CHEERBOMB1", "CHEERBOMB2", "CHEERBOMB3";
DukeMortar.ceilingdist 16;
+NOFLOORPAL;
DukeMortar.spawnscale 0.25;
}
override bool Animate(tspritetype t)