diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 60911b4f0..a655b3ab7 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -1559,7 +1559,7 @@ bool queball(DDukeActor *actor, int pocket, int queball, int stripeball) if (j > -64 && j < 64) { int l; - findplayer(sa, &l); + findplayer(act2, &l); if (x > l) break; } } @@ -1708,7 +1708,7 @@ void recon(DDukeActor *actor, int explosion, int firelaser, int attacksnd, int p } int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); auto Owner = actor->GetOwner(); // 3 = findplayerz, 4 = shoot @@ -1902,7 +1902,7 @@ void reactor(DDukeActor* actor, int REACTOR, int REACTOR2, int REACTORBURNT, int } int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); t[2]++; if (t[2] == 4) t[2] = 0; @@ -2374,7 +2374,7 @@ bool bloodpool(DDukeActor* actor, bool puke, int TIRE) makeitfall(actor); int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); s->z = actor->floorz - (FOURSLEIGHT); @@ -2880,7 +2880,7 @@ void handle_se14(DDukeActor* actor, bool checkstat, int RPG, int JIBS6) } if ((!checkstat || !statstate) && (ud.monsters_off == 0 && sc->floorpal == 0 && (sc->floorstat & 1) && rnd(8))) { - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); if (x < 20480) { j = s->ang; @@ -3307,7 +3307,7 @@ void handle_se03(DDukeActor *actor) int sh = s->hitag; if (t[4] == 0) return; - int x, p = findplayer(&actor->s, &x); + int x, p = findplayer(actor, &x); int palvals = s->owner; // this type hijacks the Owner field!!! @@ -3432,7 +3432,7 @@ void handle_se05(DDukeActor* actor, int FIRELASER) int sh = s->hitag; int j, l, m; - int x, p = findplayer(&actor->s, &x); + int x, p = findplayer(actor, &x); if (x < 8192) { j = s->ang; @@ -4480,7 +4480,7 @@ void handle_se27(DDukeActor* actor) actor->tempang = s->ang; - p = findplayer(&actor->s, &x); + p = findplayer(actor, &x); if (ps[p].GetActor()->s.extra > 0 && myconnectindex == screenpeek) { if (t[0] < 0) diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index 09d155269..9a8e10f34 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1103,7 +1103,7 @@ static void movetripbomb(DDukeActor *actor) if (actor->temp_data[0] < 32) { - findplayer(&actor->s, &x); + findplayer(actor, &x); if (x > 768) actor->temp_data[0]++; else if (actor->temp_data[0] > 16) actor->temp_data[0]++; } @@ -1295,7 +1295,7 @@ static void moveviewscreen(DDukeActor* actor) else { int x; - findplayer(&actor->s, &x); + findplayer(actor, &x); if (x < 2048) { @@ -1326,7 +1326,7 @@ static void movesidebolt(DDukeActor* actor) int x; int sect = s->sectnum; - auto p = findplayer(&actor->s, &x); + auto p = findplayer(actor, &x); if (x > 20480) return; CLEAR_THE_BOLT2: @@ -1369,7 +1369,7 @@ static void movebolt(DDukeActor *actor) int x; int sect = s->sectnum; - auto p = findplayer(&actor->s, &x); + auto p = findplayer(actor, &x); if (x > 20480) return; if (t[3] == 0) @@ -1541,7 +1541,7 @@ void movestandables_d(void) WATERBUBBLEMAKER)) { int x; - int p = findplayer(&act->s, &x); + int p = findplayer(act, &x); execute(act, p, x); } } @@ -1984,7 +1984,7 @@ void moveweapons_d(void) case SHOTSPARK1: { int x; - int p = findplayer(&act->s, &x); + int p = findplayer(act, &x); execute(act, p, x); break; } @@ -2364,7 +2364,7 @@ static void greenslime(DDukeActor *actor) } int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); if (x > 20480) { @@ -2741,7 +2741,7 @@ static void flamethrowerflame(DDukeActor *actor) int* t = &actor->temp_data[0]; int sect = s->sectnum; int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); execute(actor, p, x); t[0]++; if (sector[sect].lotag == 2) @@ -2857,7 +2857,7 @@ static void heavyhbomb(DDukeActor *actor) return; } - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); if (x < 1220) s->cstat &= ~257; else s->cstat |= 257; @@ -3226,7 +3226,7 @@ void moveactors_d(void) } // #endif - p = findplayer(&act->s, &x); + p = findplayer(act, &x); execute(act, p, x); } @@ -3242,7 +3242,7 @@ void moveactors_d(void) static void fireflyflyingeffect(DDukeActor *actor) { auto t = &actor->temp_data[0]; - int x, p = findplayer(&actor->s, &x); + int x, p = findplayer(actor, &x); execute(actor, p, x); auto Owner = actor->GetOwner(); @@ -3365,7 +3365,7 @@ void moveexplosions_d(void) // STATNUM 5 case INNERJAW: case INNERJAW + 1: - p = findplayer(&act->s, &x); + p = findplayer(act, &x); if (x < 512) { SetPlayerPal(&ps[p], PalEntry(32, 32, 0, 0)); @@ -3441,7 +3441,7 @@ void moveexplosions_d(void) // STATNUM 5 case FORCERIPPLE: case TRANSPORTERSTAR: case TRANSPORTERBEAM: - p = findplayer(&act->s, &x); + p = findplayer(act, &x); execute(act, p, x); continue; @@ -3543,7 +3543,7 @@ static void handle_se28(DDukeActor* actor) if (t[0] == 0) { int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); if (x > 15500) return; t[0] = 1; @@ -3593,7 +3593,7 @@ static void handle_se28(DDukeActor* actor) fi.spawn(j, SMALLSMOKE); int x; - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); auto psa = ps[p].GetActor(); x = ldist(psa, act2); if (x < 768) diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 2d1cbfc89..dbdcff553 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -940,7 +940,7 @@ static void movebolt(DDukeActor* actor) int x; int sect = s->sectnum; - auto p = findplayer(&actor->s, &x); + auto p = findplayer(actor, &x); if (x > 20480) return; if (t[3] == 0) @@ -1091,7 +1091,7 @@ void movestandables_r(void) CEILINGSTEAM)) { int x; - int p = findplayer(&act->s, &x); + int p = findplayer(act, &x); execute(act, p, x); } } @@ -1563,7 +1563,7 @@ void moveweapons_r(void) case SHOTSPARK1: { int x; - int p = findplayer(&proj->s, &x); + int p = findplayer(proj, &x); execute(proj, p, x); continue; } @@ -2499,7 +2499,7 @@ void rr_specialstats() if (s->picnum == RRTILE296) { int x; - int p = findplayer(&act->s, &x); + int p = findplayer(act, &x); if (x < 2047) { DukeStatIterator it2(108); @@ -2549,7 +2549,7 @@ static void heavyhbomb(DDukeActor *actor) return; } - int p = findplayer(&actor->s, &x); + int p = findplayer(actor, &x); if (x < 1220) s->cstat &= ~257; else s->cstat |= 257; @@ -3125,7 +3125,7 @@ void moveactors_r(void) } // #endif - p = findplayer(&act->s,&x); + p = findplayer(act,&x); execute(act,p,x); if (deleteafterexecute) deletesprite(act); @@ -3231,7 +3231,7 @@ void moveexplosions_r(void) // STATNUM 5 case INNERJAW: case INNERJAW + 1: - p = findplayer(&act->s, &x); + p = findplayer(act, &x); if (x < 512) { SetPlayerPal(&ps[p], PalEntry(32, 32, 0, 0)); @@ -3346,7 +3346,7 @@ void moveexplosions_r(void) // STATNUM 5 case FORCERIPPLE: case TRANSPORTERSTAR: case TRANSPORTERBEAM: - p = findplayer(&act->s, &x); + p = findplayer(act, &x); execute(act, p, x); continue; diff --git a/source/games/duke/src/d_menu.cpp b/source/games/duke/src/d_menu.cpp index 96aa69fcb..30bcbc469 100644 --- a/source/games/duke/src/d_menu.cpp +++ b/source/games/duke/src/d_menu.cpp @@ -93,7 +93,7 @@ bool GameInterface::CanSave() { if (ud.recstat == 2 || gamestate != GS_LEVEL) return false; auto &myplayer = ps[myconnectindex]; - return (sprite[myplayer.i].extra > 0); + return (myplayer.GetActor()->s.extra > 0); } bool GameInterface::StartGame(FNewGameStartup& gs) diff --git a/source/games/duke/src/dukeactor.h b/source/games/duke/src/dukeactor.h index 5407dac46..d00c8e5da 100644 --- a/source/games/duke/src/dukeactor.h +++ b/source/games/duke/src/dukeactor.h @@ -274,9 +274,9 @@ inline void getglobalz(int act) getglobalz(&hittype[act]); } -inline int findplayer(DDukeActor* act, int* x) +inline int findplayer(spritetype* act, int* x) { - return findplayer(&act->s, x); + return findplayer(&hittype[act - sprite], x); } inline void operatesectors(int s, DDukeActor* i) diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index 1acd81ada..d9012da1e 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -142,7 +142,7 @@ void shootbloodsplat(int i, int p, int sx, int sy, int sz, int sa, int atwith, i void breakwall(short newpn, short spr, short dawallnum); int callsound(int sectnum,DDukeActor* snum); int hitasprite(int snum,short *hitSprite); -int findplayer(const spritetype* s, int* dist); +int findplayer(const DDukeActor* s, int* dist); void operatejaildoors(int hitag); void allignwarpelevators(void); bool isablockdoor(int tileNum); diff --git a/source/games/duke/src/sectors.cpp b/source/games/duke/src/sectors.cpp index 5a0857e41..75a507aee 100644 --- a/source/games/duke/src/sectors.cpp +++ b/source/games/duke/src/sectors.cpp @@ -211,10 +211,11 @@ bool isanearoperator(int lotag) // //--------------------------------------------------------------------------- -int findplayer(const spritetype* s, int* d) +int findplayer(const DDukeActor* actor, int* d) { short j, closest_player; int x, closest; + auto s = &actor->s.pos; if (ud.multimode < 2) { @@ -228,7 +229,7 @@ int findplayer(const spritetype* s, int* d) for (j = connecthead; j >= 0; j = connectpoint2[j]) { x = abs(ps[j].oposx - s->x) + abs(ps[j].oposy - s->y) + ((abs(ps[j].oposz - s->z + (28 << 8))) >> 4); - if (x < closest && sprite[ps[j].i].extra > 0) + if (x < closest && ps[j].GetActor()->s.extra > 0) { closest_player = j; closest = x;