From dfc557e0ec78b5bf01d25772a1e33001f126364a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 2 Nov 2021 22:05:24 +0100 Subject: [PATCH] - StarQueue --- source/games/sw/src/sector.cpp | 9 ++++----- source/games/sw/src/weapon.cpp | 27 ++++++++++++--------------- source/games/sw/src/weapon.h | 2 +- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/source/games/sw/src/sector.cpp b/source/games/sw/src/sector.cpp index f1f2fd92d..32314dc36 100644 --- a/source/games/sw/src/sector.cpp +++ b/source/games/sw/src/sector.cpp @@ -2352,14 +2352,13 @@ int DoPlayerGrabStar(PLAYERp pp) { SPRITEp sp = nullptr; int i; - extern short StarQueue[MAX_STAR_QUEUE]; // MUST check exact z's of each star or it will never work for (i = 0; i < MAX_STAR_QUEUE; i++) { - if (StarQueue[i] >= 0) + if (StarQueue[i] != nullptr) { - sp = &sprite[StarQueue[i]]; + sp = &StarQueue[i]->s(); if (FindDistance3D(sp->x - pp->posx, sp->y - pp->posy, sp->z - pp->posz + Z(12)) < 500) { @@ -2373,8 +2372,8 @@ int DoPlayerGrabStar(PLAYERp pp) // Pull a star out of wall and up your ammo PlayerUpdateAmmo(pp, WPN_STAR, 1); PlaySound(DIGI_ITEM, sp, v3df_none); - KillSprite(StarQueue[i]); - StarQueue[i] = -1; + KillActor(StarQueue[i]); + StarQueue[i] = nullptr; if (TEST(pp->WpnFlags, BIT(WPN_STAR))) return true; SET(pp->WpnFlags, BIT(WPN_STAR)); diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index 68fa837ff..f14ac8ae8 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -74,7 +74,7 @@ int ShellCount = 0; //short Zombies = 0; short StarQueueHead=0; -short StarQueue[MAX_STAR_QUEUE]; +DSWActor* StarQueue[MAX_STAR_QUEUE]; short HoleQueueHead=0; short HoleQueue[MAX_HOLE_QUEUE]; short WallBloodQueueHead=0; @@ -19993,8 +19993,8 @@ void SpriteQueueDelete(DSWActor* actor) int SpriteNum = actor->GetSpriteIndex(); for (i = 0; i < MAX_STAR_QUEUE; i++) - if (StarQueue[i] == SpriteNum) - StarQueue[i] = -1; + if (StarQueue[i] == actor) + StarQueue[i] = nullptr; for (i = 0; i < MAX_HOLE_QUEUE; i++) if (HoleQueue[i] == SpriteNum) @@ -20030,7 +20030,7 @@ void QueueReset(void) for (i = 0; i < MAX_STAR_QUEUE; i++) - StarQueue[i] = -1; + StarQueue[i] = nullptr; for (i = 0; i < MAX_HOLE_QUEUE; i++) HoleQueue[i] = -1; @@ -20092,29 +20092,26 @@ int QueueStar(short SpriteNum) } // can and should kill the user portion of the star - if (StarQueue[StarQueueHead] == -1) + if (StarQueue[StarQueueHead] == nullptr) { // new star - User[SpriteNum].Clear(); + actor->clearUser(); change_actor_stat(actor, STAT_STAR_QUEUE); - StarQueue[StarQueueHead] = SpriteNum; + StarQueue[StarQueueHead] = actor; } else { // move old star to new stars place - osp = &sprite[StarQueue[StarQueueHead]]; - osp->x = sp->x; - osp->y = sp->y; - osp->z = sp->z; - changespritesect(StarQueue[StarQueueHead], sp->sectnum); + osp = &StarQueue[StarQueueHead]->s(); + osp->pos = sp->pos; + ChangeActorSect(StarQueue[StarQueueHead], sp->sectnum); KillActor(actor); - SpriteNum = StarQueue[StarQueueHead]; - ASSERT(sprite[SpriteNum].statnum != MAXSTATUS); + actor = StarQueue[StarQueueHead]; } StarQueueHead = (StarQueueHead+1) & (MAX_STAR_QUEUE-1); - return SpriteNum; + return actor->GetSpriteIndex(); } int QueueHole(short hit_sect, short hit_wall, int hit_x, int hit_y, int hit_z) diff --git a/source/games/sw/src/weapon.h b/source/games/sw/src/weapon.h index f3d45f219..257bf7686 100644 --- a/source/games/sw/src/weapon.h +++ b/source/games/sw/src/weapon.h @@ -59,7 +59,7 @@ enum extern short StarQueueHead; -extern short StarQueue[MAX_STAR_QUEUE]; +extern DSWActor* StarQueue[MAX_STAR_QUEUE]; extern short HoleQueueHead; extern short HoleQueue[MAX_HOLE_QUEUE]; extern short WallBloodQueueHead;