From 352dbe74df09ad63e979cd58985d6579f58e2c74 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 14 Nov 2021 22:19:35 +0100 Subject: [PATCH] - almost done... --- source/games/whaven/src/aigoblin.cpp | 1 - source/games/whaven/src/aigonzo.cpp | 2 -- source/games/whaven/src/aigron.cpp | 1 - source/games/whaven/src/aiimp.cpp | 1 - source/games/whaven/src/aikobold.cpp | 1 - source/games/whaven/src/aispider.cpp | 1 - source/games/whaven/src/weapons.cpp | 31 ++++++++++++++-------------- source/games/whaven/src/wh.cpp | 3 ++- source/games/whaven/src/wh.h | 7 ++++--- source/games/whaven/src/whani.cpp | 5 ++--- source/games/whaven/src/whfx.cpp | 19 +++++++++-------- source/games/whaven/src/whldsv.cpp | 6 +++++- source/games/whaven/src/whmap.cpp | 11 +++++----- source/games/whaven/src/whplr.cpp | 2 +- 14 files changed, 44 insertions(+), 47 deletions(-) diff --git a/source/games/whaven/src/aigoblin.cpp b/source/games/whaven/src/aigoblin.cpp index 07725250c..fe6eac319 100644 --- a/source/games/whaven/src/aigoblin.cpp +++ b/source/games/whaven/src/aigoblin.cpp @@ -538,7 +538,6 @@ static void checkexplgoblin(PLAYER& plr, DWHActor* actor) while (auto sectactor = it.Next()) { SPRITE& spri = sectactor->s(); - int j = sectactor->GetSpriteIndex(); int dx = abs(spr.x - spri.x); // x distance to sprite int dy = abs(spr.y - spri.y); // y distance to sprite diff --git a/source/games/whaven/src/aigonzo.cpp b/source/games/whaven/src/aigonzo.cpp index 73f6b331a..6489a8493 100644 --- a/source/games/whaven/src/aigonzo.cpp +++ b/source/games/whaven/src/aigonzo.cpp @@ -623,7 +623,6 @@ static DWHActor* searchpatrol(SPRITE& spr) { while (auto itActor = it.Next()) { SPRITE& tspr = itActor->s(); - int j = itActor->GetSpriteIndex(); int dist = abs(tspr.x - spr.x) + abs(tspr.y - spr.y); if (dist < mindist) { @@ -693,7 +692,6 @@ static void checkexplgonzo(PLAYER& plr, DWHActor* actor) while (auto sectactor = it.Next()) { SPRITE& tspr = sectactor->s(); - int j = sectactor->GetSpriteIndex(); int dx = abs(spr.x - tspr.x); // x distance to sprite int dy = abs(spr.y - tspr.y); // y distance to sprite diff --git a/source/games/whaven/src/aigron.cpp b/source/games/whaven/src/aigron.cpp index 896f6920f..8c716fd93 100644 --- a/source/games/whaven/src/aigron.cpp +++ b/source/games/whaven/src/aigron.cpp @@ -430,7 +430,6 @@ static void checkexplgron(PLAYER& plr, DWHActor* actor) while (auto sectactor = it.Next()) { SPRITE& spri = sectactor->s(); - int j = sectactor->GetSpriteIndex(); int dx = abs(spr.x - spri.x); // x distance to sprite int dy = abs(spr.y - spri.y); // y distance to sprite diff --git a/source/games/whaven/src/aiimp.cpp b/source/games/whaven/src/aiimp.cpp index 369aef118..8a3edee95 100644 --- a/source/games/whaven/src/aiimp.cpp +++ b/source/games/whaven/src/aiimp.cpp @@ -311,7 +311,6 @@ static void checkexplimp(PLAYER& plr, DWHActor* actor) while (auto sect = it.Next()) { SPRITE& tspr = sect->s(); - int j = sect->GetSpriteIndex(); int dx = abs(spr.x - tspr.x); // x distance to sprite int dy = abs(spr.y - tspr.y); // y distance to sprite diff --git a/source/games/whaven/src/aikobold.cpp b/source/games/whaven/src/aikobold.cpp index 1a4fbeacd..4a0038984 100644 --- a/source/games/whaven/src/aikobold.cpp +++ b/source/games/whaven/src/aikobold.cpp @@ -330,7 +330,6 @@ static void checkexplkobold(PLAYER& plr, DWHActor* actor) while (auto sect = it.Next()) { SPRITE& tspr = sect->s(); - int j = sect->GetSpriteIndex(); int dx = abs(spr.x - tspr.x); // x distance to sprite int dy = abs(spr.y - tspr.y); // y distance to sprite diff --git a/source/games/whaven/src/aispider.cpp b/source/games/whaven/src/aispider.cpp index 452eab2bc..69cb5a2b7 100644 --- a/source/games/whaven/src/aispider.cpp +++ b/source/games/whaven/src/aispider.cpp @@ -293,7 +293,6 @@ static void checkexplspider(PLAYER& plr, DWHActor* actor) while (auto sectactor = it.Next()) { SPRITE& tspr = sectactor->s(); - int j = sectactor->GetSpriteIndex(); int dx = abs(spr.x - tspr.x); // x distance to sprite int dy = abs(spr.y - tspr.y); // y distance to sprite diff --git a/source/games/whaven/src/weapons.cpp b/source/games/whaven/src/weapons.cpp index 47d5977d2..cf2b799e3 100644 --- a/source/games/whaven/src/weapons.cpp +++ b/source/games/whaven/src/weapons.cpp @@ -6,7 +6,7 @@ BEGIN_WH_NS static int weaponuseless = 0; static boolean madeahit; static int weapondropgoal; -static int arrowcnt, throwpikecnt; +int arrowcnt, throwpikecnt; // EG 17 Oct 2017: Backport shield toggle @@ -1692,9 +1692,9 @@ void shootgun(PLAYER& plr, float ang, int guntype) { if (pHitInfo.hitwall > 0 && pHitInfo.hitsprite < 0) { // XXX WH2 sector lotag < 6 || > 8 if (isWh2()) { arrowcnt = (arrowcnt + 1) % ARROWCOUNTLIMIT; - if (arrowsprite[arrowcnt] != -1) { - deletesprite((short) arrowsprite[arrowcnt]); - arrowsprite[arrowcnt] = -1; + if (arrowsprite[arrowcnt] != nullptr) { + DeleteActor(arrowsprite[arrowcnt]); + arrowsprite[arrowcnt] = nullptr; } } @@ -1880,9 +1880,8 @@ void shootgun(PLAYER& plr, float ang, int guntype) { while (auto itActor = it.Next()) { auto& spk = itActor->s(); - int i = itActor->GetSpriteIndex(); // cansee - if (itActor->GetSpriteIndex() != plr.spritenum) { + if (itActor != plr.actor()) { switch (spk.detail) { case FREDTYPE: case KOBOLDTYPE: @@ -1946,16 +1945,16 @@ void shootgun(PLAYER& plr, float ang, int guntype) { if (isWh2()) { throwpikecnt = (throwpikecnt + 1) % THROWPIKELIMIT; - if (throwpikesprite[throwpikecnt] != -1) { - deletesprite(throwpikesprite[throwpikecnt]); - throwpikesprite[throwpikecnt] = -1; + if (throwpikesprite[throwpikecnt] != nullptr) { + DeleteActor(throwpikesprite[throwpikecnt]); + throwpikesprite[throwpikecnt] = nullptr; } if (plr.weapon[plr.currweapon] == 3) { auto spawnedactor = InsertActor(plr.sector, MISSILE); auto& spawned = spawnedactor->s(); - throwpikesprite[throwpikecnt] = spawnedactor->GetSpriteIndex(); + throwpikesprite[throwpikecnt] = spawnedactor; spawned.x = plr.x; spawned.y = plr.y; spawned.z = plr.z + (24 << 8); @@ -1987,7 +1986,7 @@ void shootgun(PLAYER& plr, float ang, int guntype) { auto spawnedactor = InsertActor(plr.sector, MISSILE); auto& spawned = spawnedactor->s(); - throwpikesprite[throwpikecnt] = spawnedactor->GetSpriteIndex(); + throwpikesprite[throwpikecnt] = spawnedactor; spawned.x = plr.x; spawned.y = plr.y; spawned.z = plr.z + (24 << 8); @@ -2045,9 +2044,9 @@ void shootgun(PLAYER& plr, float ang, int guntype) { if (isWh2()) { throwpikecnt = (throwpikecnt + 1) % THROWPIKELIMIT; - if (throwpikesprite[throwpikecnt] != -1) { - deletesprite((short) throwpikesprite[throwpikecnt]); - throwpikesprite[throwpikecnt] = -1; + if (throwpikesprite[throwpikecnt] != nullptr) { + DeleteActor(throwpikesprite[throwpikecnt]); + throwpikesprite[throwpikecnt] = nullptr; } if (plr.weapon[plr.currweapon] == 3) { @@ -2055,7 +2054,7 @@ void shootgun(PLAYER& plr, float ang, int guntype) { auto spawnedactor = InsertActor(plr.sector, MISSILE); auto& spawned = spawnedactor->s(); - throwpikesprite[throwpikecnt] = spawnedactor->GetSpriteIndex(); + throwpikesprite[throwpikecnt] = spawnedactor; spawned.x = plr.x; spawned.y = plr.y; spawned.z = plr.z + (24 << 8); @@ -2084,7 +2083,7 @@ void shootgun(PLAYER& plr, float ang, int guntype) { auto spawnedactor = InsertActor(plr.sector, MISSILE); auto& spawned = spawnedactor->s(); - throwpikesprite[throwpikecnt] = spawnedactor->GetSpriteIndex(); + throwpikesprite[throwpikecnt] = spawnedactor; spawned.x = plr.x; spawned.y = plr.y; spawned.z = plr.z + (24 << 8); diff --git a/source/games/whaven/src/wh.cpp b/source/games/whaven/src/wh.cpp index 4cc129ede..14d02b55a 100644 --- a/source/games/whaven/src/wh.cpp +++ b/source/games/whaven/src/wh.cpp @@ -15,7 +15,8 @@ int difficulty; int treasurescnt, treasuresfound; SPRITE tspritelist[MAXSPRITESONSCREEN + 1]; int tspritelistcnt; -short arrowsprite[ARROWCOUNTLIMIT], throwpikesprite[THROWPIKELIMIT]; +DWHActor* arrowsprite[ARROWCOUNTLIMIT]; +DWHActor* throwpikesprite[THROWPIKELIMIT]; int sparksx, sparksy, sparksz; int playertorch = 0; uint8_t ceilingshadearray[MAXSECTORS]; diff --git a/source/games/whaven/src/wh.h b/source/games/whaven/src/wh.h index c2e401621..f45044d45 100644 --- a/source/games/whaven/src/wh.h +++ b/source/games/whaven/src/wh.h @@ -154,7 +154,8 @@ extern int expgained; extern int difficulty; extern SPRITE tspritelist[MAXSPRITESONSCREEN + 1]; extern int tspritelistcnt; -extern short arrowsprite[ARROWCOUNTLIMIT], throwpikesprite[THROWPIKELIMIT]; +extern DWHActor* throwpikesprite[THROWPIKELIMIT]; +extern DWHActor* arrowsprite[ARROWCOUNTLIMIT]; extern int sparksx, sparksy, sparksz; extern int playertorch; extern uint8_t ceilingshadearray[MAXSECTORS]; @@ -162,6 +163,7 @@ extern uint8_t floorshadearray[MAXSECTORS]; extern uint8_t wallshadearray[MAXWALLS]; extern short floormirrorsector[64]; extern int floormirrorcnt; +extern int arrowcnt, throwpikecnt; extern int zr_ceilz, zr_florz; extern Collision zr_florHit; @@ -353,7 +355,7 @@ extern short skypanlist[64], skypancnt; extern short lavadrylandsector[32]; extern short lavadrylandcnt; extern short bobbingsectorlist[16], bobbingsectorcnt; -extern int lastbat; +extern DWHActor* lastbat; extern short revolveclip[16]; extern short revolvesector[4], revolveang[4], revolvecnt; extern int revolvex[4][32], revolvey[4][32]; @@ -391,7 +393,6 @@ void lavadryland(); void warpfxsprite(DWHActor* s); void resetEffects(); void weaponpowerup(PLAYER& plr); -void makesparks(short i, int type); void shards(DWHActor* i, int type); diff --git a/source/games/whaven/src/whani.cpp b/source/games/whaven/src/whani.cpp index 538eface4..6031710bb 100644 --- a/source/games/whaven/src/whani.cpp +++ b/source/games/whaven/src/whani.cpp @@ -425,7 +425,6 @@ void animateobjs(PLAYER& plr) { while (auto actor = it.Next()) { SPRITE& spr = actor->s(); - int i = actor->GetSpriteIndex(); spr.lotag -= TICSPERFRAME; switch (spr.extra) { @@ -463,7 +462,7 @@ void animateobjs(PLAYER& plr) { } case 2: // fly to roof and get deleted if (spr.lotag < 0) { - if (i == lastbat) { + if (actor == lastbat) { soundEngine->StopSound(CHAN_BAT); } DeleteActor(actor); @@ -474,7 +473,7 @@ void animateobjs(PLAYER& plr) { (bsin(spr.ang) * TICSPERFRAME) << 3, 0, 4 << 8, 4 << 8, 0); SetActorPos(actor, &spr.pos); if (moveStat.type == kHitSector) {// Hits a ceiling / floor - if (i == lastbat) { + if (actor == lastbat) { soundEngine->StopSound(CHAN_BAT); } DeleteActor(actor); diff --git a/source/games/whaven/src/whfx.cpp b/source/games/whaven/src/whfx.cpp index 8ece1d9f3..b65a356ee 100644 --- a/source/games/whaven/src/whfx.cpp +++ b/source/games/whaven/src/whfx.cpp @@ -20,7 +20,7 @@ short lavadrylandsector[32]; short lavadrylandcnt; short bobbingsectorlist[16], bobbingsectorcnt; -int lastbat = -1; +DWHActor* lastbat = nullptr; short revolveclip[16]; short revolvesector[4], revolveang[4], revolvecnt; @@ -916,7 +916,7 @@ void bats(PLAYER& plr, DWHActor* actor) { SetNewStatus(spawnedactor, FLOCK); if (spr.extra == 1) - lastbat = spawnedactor->GetSpriteIndex(); + lastbat = spawnedactor; } void cracks() { @@ -1097,27 +1097,28 @@ void weaponpowerup(PLAYER& plr) { } } -void makesparks(short i, int type) { +void makesparks(DWHActor* actor, int type) { + auto& spr = actor->s(); DWHActor* spawnedactor = nullptr; switch (type) { case 1: - spawnedactor = InsertActor(sprite[i].sectnum, SPARKS); + spawnedactor = InsertActor(spr.sectnum, SPARKS); break; case 2: - spawnedactor = InsertActor(sprite[i].sectnum, SPARKSUP); + spawnedactor = InsertActor(spr.sectnum, SPARKSUP); break; case 3: - spawnedactor = InsertActor(sprite[i].sectnum, SPARKSDN); + spawnedactor = InsertActor(spr.sectnum, SPARKSDN); break; } auto& spawned = spawnedactor->s(); - spawned.x = sprite[i].x; - spawned.y = sprite[i].y; - spawned.z = sprite[i].z; + spawned.x = spr.x; + spawned.y = spr.y; + spawned.z = spr.z; spawned.cstat = 0; spawned.picnum = SPARKBALL; spawned.shade = 0; diff --git a/source/games/whaven/src/whldsv.cpp b/source/games/whaven/src/whldsv.cpp index 88d14d9d6..49c81872b 100644 --- a/source/games/whaven/src/whldsv.cpp +++ b/source/games/whaven/src/whldsv.cpp @@ -162,6 +162,9 @@ void SerializeSectorData(FSerializer& arc) .Array("ironbarsgoal2", ironbarsgoal2, ironbarscnt) .Array("ironbarsdone", ironbarsdone, ironbarscnt) .Array("ironbarsanim", ironbarsanim, ironbarscnt) + ("lastbat", lastbat) + ("throwpikecnt", throwpikecnt) + .Array("throwpikesprite", throwpikesprite, throwpikecnt) .EndObject(); } } @@ -183,7 +186,8 @@ void SerializeStuff(FSerializer& arc) ("droptheshield", droptheshield) ("floormirrorcnt", floormirrorcnt) .Array("floormirrorsector", floormirrorsector, floormirrorcnt) - .Array("arrowsprite", arrowsprite, countof(arrowsprite)) + ("arrowcnt", arrowcnt) + .Array("arrowsprite", arrowsprite, arrowcnt) .Array("ceilingshadearray", ceilingshadearray, numsectors) .Array("floorshadearray", floorshadearray, numsectors) .Array("wallshadearray", wallshadearray, numwalls) diff --git a/source/games/whaven/src/whmap.cpp b/source/games/whaven/src/whmap.cpp index 67c619fae..2aca09abd 100644 --- a/source/games/whaven/src/whmap.cpp +++ b/source/games/whaven/src/whmap.cpp @@ -243,9 +243,9 @@ boolean prepareboard(const char* fname) { tileDelete(FLOORMIRROR); for (i = 0; i < ARROWCOUNTLIMIT; i++) - arrowsprite[i] = -1; + arrowsprite[i] = nullptr; for (i = 0; i < THROWPIKELIMIT; i++) - throwpikesprite[i] = -1; + throwpikesprite[i] = nullptr; lavadrylandcnt = 0; aiInit(); @@ -254,7 +254,6 @@ boolean prepareboard(const char* fname) { while (auto actor = it.Next()) { SPRITE& spr = actor->s(); - i = actor->GetSpriteIndex(); if(!isWh2() && mapon == 5 && i == 0 && spr.lotag == 0 && spr.hitag == 0) { spr.lotag = 1; @@ -266,13 +265,13 @@ boolean prepareboard(const char* fname) { sparksy = spr.y; sparksz = spr.z; for (int j = 0; j < 10; j++) { - makesparks(i, 1); + makesparks(actor, 1); } for (int j = 10; j < 20; j++) { - makesparks(i, 2); + makesparks(actor, 2); } for (int j = 20; j < 30; j++) { - makesparks(i, 3); + makesparks(actor, 3); } spr.cstat &= ~3; spr.cstat |= 0x8000; diff --git a/source/games/whaven/src/whplr.cpp b/source/games/whaven/src/whplr.cpp index a2e388d69..90156a28b 100644 --- a/source/games/whaven/src/whplr.cpp +++ b/source/games/whaven/src/whplr.cpp @@ -20,7 +20,7 @@ int damage_vel, damage_svel, damage_angvel; void viewBackupPlayerLoc( int nPlayer ) { - SPRITE& pSprite = sprite[player[nPlayer].spritenum]; + SPRITE& pSprite = player[nPlayer].actor()->s(); PLOCATION& pPLocation = gPrevPlayerLoc[nPlayer]; pPLocation.x = pSprite.x; pPLocation.y = pSprite.y;