diff --git a/source/games/sw/src/actor.cpp b/source/games/sw/src/actor.cpp index 447f96147..089a73927 100644 --- a/source/games/sw/src/actor.cpp +++ b/source/games/sw/src/actor.cpp @@ -324,10 +324,10 @@ void DoDebrisCurrent(DSWActor* actor) int DoActorSectorDamage(DSWActor* actor) { USER* u = actor->u(); - int SpriteNum = u->SpriteNum; SPRITEp sp = &actor->s(); SECT_USERp sectu = SectUser[sp->sectnum].Data(); SECTORp sectp = §or[sp->sectnum]; + int SpriteNum = actor->GetSpriteIndex(); if (u->Health <= 0) return false; @@ -343,7 +343,7 @@ int DoActorSectorDamage(DSWActor* actor) if (u->Health <= 0) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoActorDie(actor, nullptr, WPN_NM_LAVA); return true; } @@ -358,7 +358,7 @@ int DoActorSectorDamage(DSWActor* actor) if (u->Health <= 0) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoActorDie(actor, nullptr, WPN_NM_LAVA); return true; } @@ -373,7 +373,7 @@ int DoActorSectorDamage(DSWActor* actor) u->Health = 0; if (SpawnShrap(SpriteNum, WPN_NM_SECTOR_SQUISH)) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); SetSuicide(SpriteNum); } else diff --git a/source/games/sw/src/coolg.cpp b/source/games/sw/src/coolg.cpp index 8a93d8006..1202950e5 100644 --- a/source/games/sw/src/coolg.cpp +++ b/source/games/sw/src/coolg.cpp @@ -632,7 +632,7 @@ int DoCoolgMatchPlayerZ(DSWActor* actor) { InitBloodSpray(SpriteNum, true, 105); InitBloodSpray(SpriteNum, true, 105); - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); SetSuicide(SpriteNum); } diff --git a/source/games/sw/src/coolie.cpp b/source/games/sw/src/coolie.cpp index e95547273..3bcbebbb0 100644 --- a/source/games/sw/src/coolie.cpp +++ b/source/games/sw/src/coolie.cpp @@ -637,7 +637,7 @@ int DoCoolieMove(DSWActor* actor) if (Distance(sp->x, sp->y, u->targetActor->s().x, u->targetActor->s().y) < 1200) { //DoActorDie(SpriteNum, -3); - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoActorDie(actor, actor, 0); return 0; } diff --git a/source/games/sw/src/ninja.cpp b/source/games/sw/src/ninja.cpp index 177361174..f5831bf14 100644 --- a/source/games/sw/src/ninja.cpp +++ b/source/games/sw/src/ninja.cpp @@ -1946,7 +1946,7 @@ DoNinjaHariKari(DSWActor* actor) SPRITEp sp = User[SpriteNum]->SpriteP; short cnt,i; - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); change_actor_stat(actor, STAT_DEAD_ACTOR); RESET(sp->cstat, CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); SET(u->Flags, SPR_DEAD); @@ -1978,7 +1978,7 @@ DoNinjaGrabThroat(DSWActor* actor) if ((u->WaitTics -= ACTORMOVETICS) <= 0) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); RESET(u->Flags2, SPR2_DYING); RESET(sp->cstat, CSTAT_SPRITE_YFLIP); change_actor_stat(actor, STAT_DEAD_ACTOR); diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index c4bde7fa3..e0190554c 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -2644,7 +2644,7 @@ DriveCrush(PLAYERp pp, int *x, int *y) continue; } - UpdateSinglePlayKills(i); + UpdateSinglePlayKills(actor); if (SpawnShrap(i, -99)) SetSuicide(i); diff --git a/source/games/sw/src/skull.cpp b/source/games/sw/src/skull.cpp index ba61d8900..dbad3e27a 100644 --- a/source/games/sw/src/skull.cpp +++ b/source/games/sw/src/skull.cpp @@ -321,7 +321,7 @@ DoSkullBeginDeath(DSWActor* actor) break; case 3: - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); InitFlashBomb(actor); break; @@ -399,7 +399,7 @@ int DoSkullJump(DSWActor* actor) if (dist < 1000 && SpriteOverlapZ(SpriteNum, short(u->tgt_sp() - sprite), Z(32))) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoSkullBeginDeath(actor); return 0; } @@ -407,7 +407,7 @@ int DoSkullJump(DSWActor* actor) if ((sp->z > u->loz - Z(36))) { sp->z = u->loz - Z(36); - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoSkullBeginDeath(actor); return 0; } @@ -417,7 +417,7 @@ int DoSkullJump(DSWActor* actor) { if (u->jump_speed > 200) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoSkullBeginDeath(actor); } } @@ -425,7 +425,7 @@ int DoSkullJump(DSWActor* actor) } else { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoSkullBeginDeath(actor); } @@ -818,7 +818,7 @@ int DoBettyJump(DSWActor* actor) if (dist < 1000 && SpriteOverlapZ(SpriteNum, short(u->tgt_sp() - sprite), Z(32))) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoBettyBeginDeath(actor); return 0; } @@ -826,7 +826,7 @@ int DoBettyJump(DSWActor* actor) if ((sp->z > u->loz - Z(36))) { sp->z = u->loz - Z(36); - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoBettyBeginDeath(actor); return 0; } @@ -836,7 +836,7 @@ int DoBettyJump(DSWActor* actor) { if (u->jump_speed > 200) { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoBettyBeginDeath(actor); } } @@ -844,7 +844,7 @@ int DoBettyJump(DSWActor* actor) } else { - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); DoBettyBeginDeath(actor); } return 0; diff --git a/source/games/sw/src/vator.cpp b/source/games/sw/src/vator.cpp index 75bf26cf4..b48044e92 100644 --- a/source/games/sw/src/vator.cpp +++ b/source/games/sw/src/vator.cpp @@ -550,6 +550,7 @@ int DoVator(DSWActor* actor) SectIterator it(sp->sectnum); while ((i = it.NextIndex()) >= 0) { + auto itActor = &swActors[i]; bsp = &sprite[i]; bu = User[i].Data(); @@ -558,7 +559,7 @@ int DoVator(DSWActor* actor) if (labs(sectp->ceilingz - sectp->floorz) < SPRITEp_SIZE_Z(bsp)) { InitBloodSpray(i, true, -1); - UpdateSinglePlayKills(i); + UpdateSinglePlayKills(itActor); KillSprite(i); continue; } @@ -602,6 +603,7 @@ int DoVator(DSWActor* actor) SectIterator it(sp->sectnum); while ((i = it.NextIndex()) >= 0) { + auto itActor = &swActors[i]; bsp = &sprite[i]; if (bsp->statnum == STAT_ENEMY) @@ -609,7 +611,7 @@ int DoVator(DSWActor* actor) if (labs(sectp->ceilingz - sectp->floorz) < SPRITEp_SIZE_Z(bsp)) { InitBloodSpray(i, true, -1); - UpdateSinglePlayKills(i); + UpdateSinglePlayKills(itActor); KillSprite(i); continue; } diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index 6d1e18f35..cfe4eea9a 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -4948,19 +4948,19 @@ DoRipperGrow(DSWActor* actor) return 0; } -void UpdateSinglePlayKills(short SpriteNum) +void UpdateSinglePlayKills(DSWActor* actor) { // single play and coop kill count - if (gNet.MultiGameType != MULTI_GAME_COMMBAT) + if (gNet.MultiGameType != MULTI_GAME_COMMBAT && actor->hasU()) { - ASSERT(User[SpriteNum].Data()); + auto u = actor->u(); - if (TEST(User[SpriteNum]->Flags, SPR_SUICIDE)) + if (TEST(u->Flags, SPR_SUICIDE)) { return; } - switch (User[SpriteNum]->ID) + switch (u->ID) { case COOLIE_RUN_R0: case NINJA_RUN_R0: @@ -5004,7 +5004,7 @@ ActorChooseDeath(short SpriteNum, short Weapon) if (u == nullptr || u->Health > 0) return false; - UpdateSinglePlayKills(SpriteNum); + UpdateSinglePlayKills(actor); if (u->Attrib) PlaySpriteSound(SpriteNum,attr_die,v3df_follow); @@ -5034,7 +5034,7 @@ ActorChooseDeath(short SpriteNum, short Weapon) break; default: ActorCoughItem(SpriteNum); - //UpdateSinglePlayKills(SpriteNum); + //UpdateSinglePlayKills(actor); break; } @@ -12754,7 +12754,7 @@ DoSerpRing(DSWActor* actor) // kill off all of his skull children if (sp->owner == -1 || ou->RotNum < 5) { - UpdateSinglePlayKills(Weapon); + UpdateSinglePlayKills(actor); DoSkullBeginDeath(actor); // +2 does not spawn shrapnel u->ID = SKULL_SERP; diff --git a/source/games/sw/src/weapon.h b/source/games/sw/src/weapon.h index 67cbf0b35..228862263 100644 --- a/source/games/sw/src/weapon.h +++ b/source/games/sw/src/weapon.h @@ -201,7 +201,7 @@ enum ShrapPos }; int SetSuicide(short SpriteNum); -void UpdateSinglePlayKills(short SpriteNum); +void UpdateSinglePlayKills(DSWActor* actor); int InitPlasmaFountain(SPRITEp wp, SPRITEp sp); int InitCoolgDrip(short SpriteNum); int InitFireball(PLAYERp pp);