- 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) bool rat(DDukeActor* actor, bool makesound)
{ {
makeitfall(actor); makeitfall(actor);

View file

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

View file

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

View file

@ -73,12 +73,6 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
case FOOTPRINTS4: case FOOTPRINTS4:
if (t->shade == 127) continue; if (t->shade == 127) continue;
break; break;
case RESPAWNMARKERRED:
case RESPAWNMARKERYELLOW:
case RESPAWNMARKERGREEN:
if (ud.marker == 0)
t->scale = DVector2(0, 0);
continue;
case CHAIR3: case CHAIR3:
if (hw_models && modelManager.CheckModel(t->picnum, t->pal)) 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) 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: case DUKELYINGDEAD:
h->spr.scale = DVector2(0.375, 0.265625); h->spr.scale = DVector2(0.375, 0.265625);
if (h->spr.extra > 0) if (h->spr.extra > 0)

View file

@ -221,7 +221,20 @@ x(BIGAPPOS, 714)
x(MINIFONT, 718) x(MINIFONT, 718)
x(W_NUMBERS, 810) x(W_NUMBERS, 810)
x(BLANK, 820) x(BLANK, 820)
x(RESPAWNMARKER1, 861)
x(RESPAWNMARKER2, 862)
x(RESPAWNMARKER3, 863)
x(RESPAWNMARKER4, 864)
x(RESPAWNMARKER5, 865)
x(RESPAWNMARKERRED, 866) 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(RESPAWNMARKERYELLOW, 876)
x(RESPAWNMARKERGREEN, 886) x(RESPAWNMARKERGREEN, 886)
x(SPINNINGNUKEICON0, 896) 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.X = 292 / 16.;
act->vel.Z = 360 / 256.; act->vel.Z = 360 / 256.;
[[fallthrough]]; [[fallthrough]];
case RESPAWNMARKERRED:
case BLIMP: case BLIMP:
act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
if (act->spr.picnum == RESPAWNMARKERRED) act->clipdist = 32;
{
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;
}
[[fallthrough]]; [[fallthrough]];
case MIKE: case MIKE:
if (act->spr.picnum == 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->spr.extra = 1;
act->vel.X = 292 / 16.; act->vel.X = 292 / 16.;
act->vel.Z = 360 / 256.; act->vel.Z = 360 / 256.;
[[fallthrough]]; act->spr.cstat |= CSTAT_SPRITE_BLOCK_ALL;
case RESPAWNMARKERRED: act->clipdist = 32;
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;
}
[[fallthrough]]; [[fallthrough]];
case MIKE: case MIKE:
if (act->spr.picnum == MIKE) if (act->spr.picnum == MIKE)

View file

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

View file

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

View file

@ -56,6 +56,7 @@ version "4.10"
#include "zscript/games/duke/actors/touchplate.zs" #include "zscript/games/duke/actors/touchplate.zs"
#include "zscript/games/duke/actors/soundcontroller.zs" #include "zscript/games/duke/actors/soundcontroller.zs"
#include "zscript/games/duke/actors/respawncontroller.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/jibs.zs"
#include "zscript/games/duke/actors/crane.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;
}
}