- scriptified the native parts of TRANSPORTERSTAR and TRANSPORTERBEAM

This commit is contained in:
Christoph Oelckers 2022-12-12 09:18:47 +01:00
parent 07ea5d06ae
commit e0bd038391
8 changed files with 78 additions and 49 deletions

View file

@ -176,7 +176,6 @@ void addspritetodelete(int spnum=0);
void checkavailinven(player_struct* p);
bool initspriteforspawn(DDukeActor* spn);
bool commonEnemySetup(DDukeActor* self, DDukeActor* owner);
void spawntransporter(DDukeActor* actj, DDukeActor* acti, bool beam);
int spawnbloodpoolpart1(DDukeActor* acti);
void initshell(DDukeActor* actj, DDukeActor* acti, bool isshell);
void spawneffector(DDukeActor* actor, TArray<DDukeActor*>* actors);

View file

@ -340,44 +340,6 @@ bool commonEnemySetup(DDukeActor* self, DDukeActor* owner)
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void spawntransporter(DDukeActor *actj, DDukeActor* act, bool beam)
{
if (actj == nullptr) return;
if (beam)
{
act->spr.scale = DVector2(0.484375, REPEAT_SCALE);
act->spr.pos.Z = actj->sector()->floorz - gs.playerheight;
}
else
{
if (actj->spr.statnum == 4)
{
act->spr.scale = DVector2(0.125, 0.125);
}
else
{
act->spr.scale = DVector2(0.75, 1);
if (actj->spr.statnum == 10 || badguy(actj))
act->spr.pos.Z -= 32;
}
}
act->spr.shade = -127;
act->spr.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
act->spr.Angles.Yaw = actj->spr.Angles.Yaw;
act->vel.X = 8;
ChangeActorStat(act, STAT_MISC);
ssp(act, CLIPMASK0);
SetActor(act, act->spr.pos);
}
//---------------------------------------------------------------------------
//
//

View file

@ -156,11 +156,6 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->spr.scale = DVector2(0, 0);
ChangeActorStat(act, STAT_MISC);
break;
case DTILE_TRANSPORTERSTAR:
case DTILE_TRANSPORTERBEAM:
spawntransporter(actj, act, act->spr.picnum == DTILE_TRANSPORTERBEAM);
break;
case DTILE_BLOOD:
act->spr.scale = DVector2(0.25, 0.25);
act->spr.pos.Z -= 26;

View file

@ -80,11 +80,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
pistonsound = 1;
break;
case RTILE_TRANSPORTERSTAR:
case RTILE_TRANSPORTERBEAM:
spawntransporter(actj, act, act->spr.picnum == RTILE_TRANSPORTERBEAM);
break;
case RTILE_BLOOD:
act->spr.scale = DVector2(0.0625, 0.0625);
act->spr.pos.Z -= 26;

View file

@ -237,4 +237,7 @@ spawnclasses
// the following actors use CON.
1671 = DukeForceRipple
1630 = DukeTransporterStar
1261 = DukeTransporterBeam
}

View file

@ -270,6 +270,11 @@ spawnclasses
3171 = DukeActor, "*RRTILE3171"
3216 = DukeActor, "*RRTILE3216"
3720 = DukeActor, "*RRTILE3720"
// the following actors use CON
1398 = DukeTransporterStar
1338 = DukeTransporterBeam
}

View file

@ -102,6 +102,8 @@ version "4.10"
#include "zscript/games/duke/actors/bloodpool.zs"
#include "zscript/games/duke/actors/toilet.zs"
#include "zscript/games/duke/actors/transporter.zs"
#include "zscript/games/duke/actors/flamethrowerflame.zs"
#include "zscript/games/duke/actors/firefly.zs"

View file

@ -0,0 +1,68 @@
class DukeTransporterStar : DukeActor
{
default
{
pic "TRANSPORTERSTAR";
}
override void Initialize()
{
let owner = self.ownerActor;
if (owner == nullptr || owner == self)
{
scale = (0, 0);
return;
}
if (owner.statnum == STAT_PROJECTILE)
{
self.scale = (0.125, 0.125);
}
else
{
self.scale = (0.75, 1);
if (owner.statnum == STAT_PLAYER || owner.badguy())
self.pos.Z -= 32;
}
self.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
self.angle = owner.angle;
self.vel.X = 8;
self.DoMove(CLIPMASK0);
self.SetPosition(self.pos);
self.ChangeStat(STAT_MISC);
self.shade = -127;
}
}
class DukeTransporterBeam : DukeActor
{
default
{
pic "TRANSPORTERBEAM";
}
override void Initialize()
{
let owner = self.ownerActor;
if (owner == nullptr || owner == self)
{
scale = (0, 0);
return;
}
self.scale = (0.484375, REPEAT_SCALE);
self.pos.Z = owner.sector.floorz - gs.playerheight;
self.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
self.angle = owner.angle;
self.vel.X = 8;
self.DoMove(CLIPMASK0);
self.SetPosition(self.pos);
self.ChangeStat(STAT_MISC);
self.shade = -127;
}
}