- scriptified the respawn marker.

This commit is contained in:
Christoph Oelckers 2022-11-27 18:06:32 +01:00
parent b485d7a450
commit 99413651b3
12 changed files with 83 additions and 79 deletions

View file

@ -681,28 +681,6 @@ void rpgexplode(DDukeActor *actor, int hit, const DVector3 &pos, int EXPLOSION2,
//
//---------------------------------------------------------------------------
bool respawnmarker(DDukeActor *actor, int yellow, int green)
{
actor->temp_data[0]++;
if (actor->temp_data[0] > gs.respawnitemtime)
{
actor->Destroy();
return false;
}
if (actor->temp_data[0] >= (gs.respawnitemtime >> 1) && actor->temp_data[0] < ((gs.respawnitemtime >> 1) + (gs.respawnitemtime >> 2)))
actor->spr.picnum = yellow;
else if (actor->temp_data[0] > ((gs.respawnitemtime >> 1) + (gs.respawnitemtime >> 2)))
actor->spr.picnum = green;
makeitfall(actor);
return true;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool rat(DDukeActor* actor, bool makesound)
{
makeitfall(actor);

View file

@ -2153,7 +2153,7 @@ DETONATEB:
else
{
actor->temp_data[2] = gs.respawnitemtime;
spawn(actor, RESPAWNMARKERRED);
spawn(actor, PClass::FindActor("DukeRespawnMarker"));
actor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
actor->spr.scale.Y = (0.140625);
return;
@ -2196,7 +2196,7 @@ DETONATEB:
else
{
actor->temp_data[2] = gs.respawnitemtime;
spawn(actor, RESPAWNMARKERRED);
spawn(actor, PClass::FindActor("DukeRespawnMarker"));
actor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
}
}
@ -2284,12 +2284,6 @@ void moveactors_d(void)
}
continue;
case RESPAWNMARKERRED:
case RESPAWNMARKERYELLOW:
case RESPAWNMARKERGREEN:
if (!respawnmarker(act, RESPAWNMARKERYELLOW, RESPAWNMARKERGREEN)) continue;
break;
case HELECOPT:
case DUKECAR:

View file

@ -1904,7 +1904,7 @@ DETONATEB:
else
{
actor->temp_data[2] = gs.respawnitemtime;
spawn(actor, RESPAWNMARKERRED);
spawn(actor, PClass::FindActor("RedneckRespawnMarker"));
actor->spr.cstat = CSTAT_SPRITE_INVISIBLE;
}
}
@ -2037,11 +2037,6 @@ void moveactors_r(void)
}
else switch(act->spr.picnum)
{
case RESPAWNMARKERRED:
case RESPAWNMARKERYELLOW:
case RESPAWNMARKERGREEN:
if (!respawnmarker(act, RESPAWNMARKERYELLOW, RESPAWNMARKERGREEN)) continue;
break;
case RAT:
if (!rat(act, !isRRRA())) continue;
break;

View file

@ -73,12 +73,6 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
case FOOTPRINTS4:
if (t->shade == 127) continue;
break;
case RESPAWNMARKERRED:
case RESPAWNMARKERYELLOW:
case RESPAWNMARKERGREEN:
if (ud.marker == 0)
t->scale = DVector2(0, 0);
continue;
case CHAIR3:
if (hw_models && modelManager.CheckModel(t->picnum, t->pal))
{

View file

@ -176,19 +176,6 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
switch (h->spr.picnum)
{
case RESPAWNMARKERRED:
case RESPAWNMARKERYELLOW:
case RESPAWNMARKERGREEN:
t->picnum = 861 + ((PlayClock >> 4) & 13);
if (h->spr.picnum == RESPAWNMARKERRED)
t->pal = 0;
else if (h->spr.picnum == RESPAWNMARKERYELLOW)
t->pal = 1;
else
t->pal = 2;
if (ud.marker == 0)
t->scale = DVector2(0, 0);
break;
case DUKELYINGDEAD:
h->spr.scale = DVector2(0.375, 0.265625);
if (h->spr.extra > 0)

View file

@ -221,7 +221,20 @@ x(BIGAPPOS, 714)
x(MINIFONT, 718)
x(W_NUMBERS, 810)
x(BLANK, 820)
x(RESPAWNMARKER1, 861)
x(RESPAWNMARKER2, 862)
x(RESPAWNMARKER3, 863)
x(RESPAWNMARKER4, 864)
x(RESPAWNMARKER5, 865)
x(RESPAWNMARKERRED, 866)
x(RESPAWNMARKER7, 867)
x(RESPAWNMARKER8, 868)
x(RESPAWNMARKER9, 869)
x(RESPAWNMARKER10, 870)
x(RESPAWNMARKER11, 871)
x(RESPAWNMARKER12, 872)
x(RESPAWNMARKER13, 873)
x(RESPAWNMARKER14, 874)
x(RESPAWNMARKERYELLOW, 876)
x(RESPAWNMARKERGREEN, 886)
x(SPINNINGNUKEICON0, 896)

View file

@ -434,19 +434,9 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->vel.X = 292 / 16.;
act->vel.Z = 360 / 256.;
[[fallthrough]];
case RESPAWNMARKERRED:
case BLIMP:
if (act->spr.picnum == RESPAWNMARKERRED)
{
act->spr.scale = DVector2(0.375, 0.375);
if (actj) act->spr.pos.Z = actj->floorz; // -(1<<4);
}
else
{
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
act->clipdist = 32;
}
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
act->clipdist = 32;
[[fallthrough]];
case MIKE:
if (act->spr.picnum == MIKE)

View file

@ -343,18 +343,8 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->spr.extra = 1;
act->vel.X = 292 / 16.;
act->vel.Z = 360 / 256.;
[[fallthrough]];
case RESPAWNMARKERRED:
if (act->spr.picnum == RESPAWNMARKERRED)
{
act->spr.scale = DVector2(0.125, 0.125);
if (actj) act->spr.pos.Z = actj->floorz;
}
else
{
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
act->clipdist = 32;
}
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
act->clipdist = 32;
[[fallthrough]];
case MIKE:
if (act->spr.picnum == MIKE)

View file

@ -42,6 +42,7 @@ spawnclasses
623 = DukeCamera
624 = DukeCamera
625 = DukeCamera
3190 = DukeRespawnmarker
1272 = DukeTrash
634 = DukeBolt1

View file

@ -48,6 +48,7 @@ spawnclasses
1414 = DukeTongue
1439 = DukeInnerJaw
1440 = DukeInnerJaw1
866 = RedneckRespawnMarker
285 = RedneckChickenSpawner1
286 = RedneckChickenSpawner2

View file

@ -56,6 +56,7 @@ version "4.10"
#include "zscript/games/duke/actors/touchplate.zs"
#include "zscript/games/duke/actors/soundcontroller.zs"
#include "zscript/games/duke/actors/respawncontroller.zs"
#include "zscript/games/duke/actors/respawnmarker.zs"
#include "zscript/games/duke/actors/jibs.zs"
#include "zscript/games/duke/actors/crane.zs"

View file

@ -0,0 +1,60 @@
class DukeRespawnMarker : DukeActor
{
default
{
spriteset "RESPAWNMARKERRED", "RESPAWNMARKERYELLOW", "RESPAWNMARKERGREEN";
scalex 0.375;
scaley 0.375;
}
override void Initialize()
{
if (ownerActor != self) self.pos.Z = ownerActor.floorZ;
}
override void Tick()
{
self.temp_data[0]++;
if (self.temp_data[0] > gs.respawnitemtime)
{
self.Destroy();
return;
}
if (self.temp_data[0] >= (gs.respawnitemtime >> 1) && self.temp_data[0] < ((gs.respawnitemtime >> 1) + (gs.respawnitemtime >> 2)))
self.setSpritesetImage(1);
else if (self.temp_data[0] > ((gs.respawnitemtime >> 1) + (gs.respawnitemtime >> 2)))
self.setSpritesetImage(2);
self.makeitfall();
}
override bool Animate(tspritetype t)
{
if (ud.marker == 0)
t.scale = (0, 0);
return true;
}
}
class RedneckRespawnMarker : DukeRespawnMarker
{
default
{
spriteset "RESPAWNMARKER1", "RESPAWNMARKER2", "RESPAWNMARKER3", "RESPAWNMARKER4", "RESPAWNMARKER5", "RESPAWNMARKERRED", "RESPAWNMARKER7",
"RESPAWNMARKER8", "RESPAWNMARKER9", "RESPAWNMARKER10", "RESPAWNMARKER11", "RESPAWNMARKER12", "RESPAWNMARKER13", "RESPAWNMARKER14";
scalex 0.125;
scaley 0.125;
}
override bool Animate(tspritetype t)
{
t.setSpritePic(self, ((PlayClock >> 4) % 14));
t.pal = self.spriteSetIndex;
if (ud.marker == 0)
t.scale = (0, 0);
return true;
}
}