From d8b670276a1bf9612b29db3a429e963799764780 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Tue, 3 Oct 2023 19:55:11 +1100 Subject: [PATCH] - Duke: Convert all the aplWeapon* crap to work on player pointers. --- source/games/duke/src/actors.cpp | 2 +- source/games/duke/src/gamevar.cpp | 30 ++--- source/games/duke/src/gamevar.h | 31 ++--- source/games/duke/src/hudweapon_d.cpp | 8 +- source/games/duke/src/player.cpp | 27 ++-- source/games/duke/src/player_d.cpp | 20 +-- source/games/duke/src/player_w.cpp | 170 +++++++++++++------------- source/games/duke/src/premap.cpp | 4 +- 8 files changed, 149 insertions(+), 143 deletions(-) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 5ed4d4e63..dcdf0cf7a 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -306,7 +306,7 @@ void checkavailweapon(DDukePlayer* player) if (player->curr_weapon >= 0) { - SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(player->curr_weapon, snum), pact, snum); + SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(player->curr_weapon, player), pact, snum); } else { diff --git a/source/games/duke/src/gamevar.cpp b/source/games/duke/src/gamevar.cpp index 9b7e3f269..06483cfcb 100644 --- a/source/games/duke/src/gamevar.cpp +++ b/source/games/duke/src/gamevar.cpp @@ -518,21 +518,21 @@ static int i_aplWeaponFireSound[MAX_WEAPONS]; // Sound made when firing (each ti static int i_aplWeaponSound2Time[MAX_WEAPONS]; // Alternate sound time static int i_aplWeaponSound2Sound[MAX_WEAPONS]; // Alternate sound sound ID -int aplWeaponClip(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponClip[weapon]].safeValue(); } -int aplWeaponReload(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponReload[weapon]].safeValue(); } -int aplWeaponFireDelay(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponFireDelay[weapon]].safeValue(); } -int aplWeaponHoldDelay(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponHoldDelay[weapon]].safeValue(); } -int aplWeaponTotalTime(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponTotalTime[weapon]].safeValue(); } -int aplWeaponFlags(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponFlags[weapon]].safeValue(); } -int aplWeaponShoots(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponShoots[weapon]].safeValue(); } -int aplWeaponSpawnTime(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSpawnTime[weapon]].safeValue(); } -int aplWeaponSpawn(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSpawn[weapon]].safeValue(); } -int aplWeaponShotsPerBurst(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponShotsPerBurst[weapon]].safeValue(); } -int aplWeaponWorksLike(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponWorksLike[weapon]].safeValue(); } -int aplWeaponInitialSound(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponInitialSound[weapon]].safeValue(); } -int aplWeaponFireSound(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponFireSound[weapon]].safeValue(); } -int aplWeaponSound2Time(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSound2Time[weapon]].safeValue(); } -int aplWeaponSound2Sound(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSound2Sound[weapon]].safeValue(); } +int aplWeaponClip(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponClip[weapon]].safeValue(); } +int aplWeaponReload(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponReload[weapon]].safeValue(); } +int aplWeaponFireDelay(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponFireDelay[weapon]].safeValue(); } +int aplWeaponHoldDelay(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponHoldDelay[weapon]].safeValue(); } +int aplWeaponTotalTime(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponTotalTime[weapon]].safeValue(); } +int aplWeaponFlags(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponFlags[weapon]].safeValue(); } +int aplWeaponShoots(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponShoots[weapon]].safeValue(); } +int aplWeaponSpawnTime(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponSpawnTime[weapon]].safeValue(); } +int aplWeaponSpawn(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponSpawn[weapon]].safeValue(); } +int aplWeaponShotsPerBurst(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponShotsPerBurst[weapon]].safeValue(); } +int aplWeaponWorksLike(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponWorksLike[weapon]].safeValue(); } +int aplWeaponInitialSound(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponInitialSound[weapon]].safeValue(); } +int aplWeaponFireSound(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponFireSound[weapon]].safeValue(); } +int aplWeaponSound2Time(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponSound2Time[weapon]].safeValue(); } +int aplWeaponSound2Sound(int weapon, DDukePlayer* const p) { return p->uservars[i_aplWeaponSound2Sound[weapon]].safeValue(); } //--------------------------------------------------------------------------- // diff --git a/source/games/duke/src/gamevar.h b/source/games/duke/src/gamevar.h index 28a244318..dcb62fcaa 100644 --- a/source/games/duke/src/gamevar.h +++ b/source/games/duke/src/gamevar.h @@ -7,6 +7,7 @@ BEGIN_DUKE_NS // gamedef.c class DDukeActor; +class DDukePlayer; // Game vars can reference actors, we need a type-safe way to handle that so that index values won't get misappropriated and actors can be GC'd. class GameVarValue @@ -76,21 +77,21 @@ enum // Keep the gory details away from the main game code. -int aplWeaponClip(int weapon, int player); // number of items in clip -int aplWeaponReload(int weapon, int player); // delay to reload (include fire) -int aplWeaponFireDelay(int weapon, int player); // delay to fire -int aplWeaponHoldDelay(int weapon, int player); // delay after release fire button to fire (0 for none) -int aplWeaponTotalTime(int weapon, int player); // The total time the weapon is cycling before next fire. -int aplWeaponFlags(int weapon, int player); // Flags for weapon -int aplWeaponShoots(int weapon, int player); // what the weapon shoots -int aplWeaponSpawnTime(int weapon, int player); // the frame at which to spawn an item -int aplWeaponSpawn(int weapon, int player); // the item to spawn -int aplWeaponShotsPerBurst(int weapon, int player); // number of shots per 'burst' (one ammo per 'burst' -int aplWeaponWorksLike(int weapon, int player); // What original the weapon works like -int aplWeaponInitialSound(int weapon, int player); // Sound made when initialy firing. zero for no sound -int aplWeaponFireSound(int weapon, int player); // Sound made when firing (each time for automatic) -int aplWeaponSound2Time(int weapon, int player); // Alternate sound time -int aplWeaponSound2Sound(int weapon, int player); // Alternate sound sound ID +int aplWeaponClip(int weapon, DDukePlayer* const p); // number of items in clip +int aplWeaponReload(int weapon, DDukePlayer* const p); // delay to reload (include fire) +int aplWeaponFireDelay(int weapon, DDukePlayer* const p); // delay to fire +int aplWeaponHoldDelay(int weapon, DDukePlayer* const p); // delay after release fire button to fire (0 for none) +int aplWeaponTotalTime(int weapon, DDukePlayer* const p); // The total time the weapon is cycling before next fire. +int aplWeaponFlags(int weapon, DDukePlayer* const p); // Flags for weapon +int aplWeaponShoots(int weapon, DDukePlayer* const p); // what the weapon shoots +int aplWeaponSpawnTime(int weapon, DDukePlayer* const p); // the frame at which to spawn an item +int aplWeaponSpawn(int weapon, DDukePlayer* const p); // the item to spawn +int aplWeaponShotsPerBurst(int weapon, DDukePlayer* const p); // number of shots per 'burst' (one ammo per 'burst' +int aplWeaponWorksLike(int weapon, DDukePlayer* const p); // What original the weapon works like +int aplWeaponInitialSound(int weapon, DDukePlayer* const p); // Sound made when initialy firing. zero for no sound +int aplWeaponFireSound(int weapon, DDukePlayer* const p); // Sound made when firing (each time for automatic) +int aplWeaponSound2Time(int weapon, DDukePlayer* const p); // Alternate sound time +int aplWeaponSound2Sound(int weapon, DDukePlayer* const p); // Alternate sound sound ID enum diff --git a/source/games/duke/src/hudweapon_d.cpp b/source/games/duke/src/hudweapon_d.cpp index 2ae922a6f..1a0bf457b 100644 --- a/source/games/duke/src/hudweapon_d.cpp +++ b/source/games/duke/src/hudweapon_d.cpp @@ -277,7 +277,7 @@ void displayweapon_d(int snum, double interpfrac) offsets.Y -= gun_pos; int cw = p->last_weapon >= 0 ? p->last_weapon : p->curr_weapon; - if (isWW2GI()) cw = aplWeaponWorksLike(cw, snum); + if (isWW2GI()) cw = aplWeaponWorksLike(cw, p); // onevent should go here.. // rest of code should be moved to CON.. @@ -305,9 +305,9 @@ void displayweapon_d(int snum, double interpfrac) int weapTotalTime = 0, weapFireDelay = 0, weapReload = 0; if (isWW2GI()) { - weapTotalTime = aplWeaponTotalTime(p->curr_weapon, snum); - weapFireDelay = aplWeaponFireDelay(p->curr_weapon, snum); - weapReload = aplWeaponReload(p->curr_weapon, snum); + weapTotalTime = aplWeaponTotalTime(p->curr_weapon, p); + weapFireDelay = aplWeaponFireDelay(p->curr_weapon, p); + weapReload = aplWeaponReload(p->curr_weapon, p); } //--------------------------------------------------------------------------- diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index cfd50e2c5..96180c39a 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -244,7 +244,7 @@ DDukeActor* aim(DDukeActor* actor, int abase, bool force, bool* b) } else { - weap = aplWeaponWorksLike(plr->curr_weapon, actor->PlayerIndex()); + weap = aplWeaponWorksLike(plr->curr_weapon, plr); } // The chickens in RRRA are homing and must always autoaim. if (!isRRRA() || plr->curr_weapon != CHICKEN_WEAPON) @@ -265,15 +265,20 @@ DDukeActor* aim(DDukeActor* actor, int abase, bool force, bool* b) gotshrinker = false; gotfreezer = false; } - else if (isWW2GI()) + else if (actor->isPlayer()) { - gotshrinker = actor->isPlayer() && aplWeaponWorksLike(getPlayer(actor->PlayerIndex())->curr_weapon, actor->PlayerIndex()) == SHRINKER_WEAPON; - gotfreezer = actor->isPlayer() && aplWeaponWorksLike(getPlayer(actor->PlayerIndex())->curr_weapon, actor->PlayerIndex()) == FREEZE_WEAPON; - } - else - { - gotshrinker = actor->isPlayer() && getPlayer(actor->PlayerIndex())->curr_weapon == SHRINKER_WEAPON; - gotfreezer = actor->isPlayer() && getPlayer(actor->PlayerIndex())->curr_weapon == FREEZE_WEAPON; + const auto plr = getPlayer(actor->PlayerIndex()); + + if (isWW2GI()) + { + gotshrinker = aplWeaponWorksLike(plr->curr_weapon, plr) == SHRINKER_WEAPON; + gotfreezer = aplWeaponWorksLike(plr->curr_weapon, plr) == FREEZE_WEAPON; + } + else + { + gotshrinker = plr->curr_weapon == SHRINKER_WEAPON; + gotfreezer = plr->curr_weapon == FREEZE_WEAPON; + } } double smax = 0x7fffffff; @@ -971,13 +976,13 @@ bool movementBlocked(DDukePlayer *p) auto blockingweapon = [=]() { if (isRR()) return false; - if (isWW2GI()) return aplWeaponWorksLike(p->curr_weapon, p->GetPlayerNum()) == TRIPBOMB_WEAPON; + if (isWW2GI()) return aplWeaponWorksLike(p->curr_weapon, p) == TRIPBOMB_WEAPON; else return p->curr_weapon == TRIPBOMB_WEAPON; }; auto weapondelay = [=]() { - if (isWW2GI()) return aplWeaponFireDelay(p->curr_weapon, p->GetPlayerNum()); + if (isWW2GI()) return aplWeaponFireDelay(p->curr_weapon, p); else return 4; }; diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 08f40e751..541525725 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -547,7 +547,7 @@ void checkweapons_d(DDukePlayer* p) if (isWW2GI()) { int snum = p->GetActor()->PlayerIndex(); - cw = aplWeaponWorksLike(p->curr_weapon, snum); + cw = aplWeaponWorksLike(p->curr_weapon, p); } else cw = p->curr_weapon; @@ -1463,20 +1463,20 @@ static void processweapon(int snum, ESyncBits actions) { SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum); SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum); - SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, snum), p->GetActor(), snum); + SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum); OnEvent(EVENT_HOLSTER, snum, p->GetActor(), -1); if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0) { // now it uses the game definitions... - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_HOLSTER_CLEARS_CLIP) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_HOLSTER_CLEARS_CLIP) { - if (p->ammo_amount[p->curr_weapon] > aplWeaponClip(p->curr_weapon, snum) - && (p->ammo_amount[p->curr_weapon] % aplWeaponClip(p->curr_weapon, snum)) != 0) + if (p->ammo_amount[p->curr_weapon] > aplWeaponClip(p->curr_weapon, p) + && (p->ammo_amount[p->curr_weapon] % aplWeaponClip(p->curr_weapon, p)) != 0) { // throw away the remaining clip p->ammo_amount[p->curr_weapon] -= - p->ammo_amount[p->curr_weapon] % aplWeaponClip(p->curr_weapon, snum); - p->kickback_pic = aplWeaponTotalTime(p->curr_weapon, snum) + 1; // animate, but don't shoot... + p->ammo_amount[p->curr_weapon] % aplWeaponClip(p->curr_weapon, p); + p->kickback_pic = aplWeaponTotalTime(p->curr_weapon, p) + 1; // animate, but don't shoot... actions &= ~SB_FIRE; // not firing... } return; @@ -1497,7 +1497,7 @@ static void processweapon(int snum, ESyncBits actions) } - if (isWW2GI() && (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_GLOWS)) + if (isWW2GI() && (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_GLOWS)) p->random_club_frame += 64; // Glowing if (!isWW2GI() && (p->curr_weapon == SHRINKER_WEAPON || p->curr_weapon == GROW_WEAPON)) @@ -1665,7 +1665,7 @@ void processinput_d(int snum) fi.doincrements(p); - if (isWW2GI() && aplWeaponWorksLike(p->curr_weapon, snum) == HANDREMOTE_WEAPON) processweapon(snum, actions); + if (isWW2GI() && aplWeaponWorksLike(p->curr_weapon, p) == HANDREMOTE_WEAPON) processweapon(snum, actions); if (!isWW2GI() && p->curr_weapon == HANDREMOTE_WEAPON) processweapon(snum, actions); return; } @@ -1787,7 +1787,7 @@ void processinput_d(int snum) bool check; if (!isWW2GI()) check = ((p->curr_weapon == KNEE_WEAPON && p->kickback_pic > 10 && p->on_ground) || (p->on_ground && (actions & SB_CROUCH))); - else check = ((aplWeaponWorksLike(p->curr_weapon, snum) == KNEE_WEAPON && p->kickback_pic > 10 && p->on_ground) || (p->on_ground && (actions & SB_CROUCH))); + else check = ((aplWeaponWorksLike(p->curr_weapon, p) == KNEE_WEAPON && p->kickback_pic > 10 && p->on_ground) || (p->on_ground && (actions & SB_CROUCH))); if (check) { p->vel.XY() *= gs.playerfriction - 0.125; diff --git a/source/games/duke/src/player_w.cpp b/source/games/duke/src/player_w.cpp index ef65efbc5..bea9dfe6a 100644 --- a/source/games/duke/src/player_w.cpp +++ b/source/games/duke/src/player_w.cpp @@ -52,48 +52,48 @@ void DoFire(DDukePlayer* p, int snum) { int i; - if (aplWeaponWorksLike(p->curr_weapon, snum) != KNEE_WEAPON) + if (aplWeaponWorksLike(p->curr_weapon, p) != KNEE_WEAPON) { p->ammo_amount[p->curr_weapon]--; } - if (aplWeaponFireSound(p->curr_weapon, snum)) + if (aplWeaponFireSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponFireSound(p->curr_weapon, snum), p->GetActor()); + S_PlayActorSound(aplWeaponFireSound(p->curr_weapon, p), p->GetActor()); } SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum); - SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, snum), p->GetActor(), snum); - shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, snum))); - for (i = 1; i < aplWeaponShotsPerBurst(p->curr_weapon, snum); i++) + SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum); + shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, p))); + for (i = 1; i < aplWeaponShotsPerBurst(p->curr_weapon, p); i++) { - shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, snum))); - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_AMMOPERSHOT) + shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, p))); + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_AMMOPERSHOT) { p->ammo_amount[p->curr_weapon]--; } } - if (!(aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_NOVISIBLE)) + if (!(aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_NOVISIBLE)) { // make them visible if not set... lastvisinc = PlayClock + 32; p->visibility = 0; } - if ( //!(aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_CHECKATRELOAD) && - aplWeaponReload(p->curr_weapon, snum) > aplWeaponTotalTime(p->curr_weapon, snum) + if ( //!(aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_CHECKATRELOAD) && + aplWeaponReload(p->curr_weapon, p) > aplWeaponTotalTime(p->curr_weapon, p) && p->ammo_amount[p->curr_weapon] > 0 - && (aplWeaponClip(p->curr_weapon, snum)) - && ((p->ammo_amount[p->curr_weapon] % (aplWeaponClip(p->curr_weapon, snum))) == 0) + && (aplWeaponClip(p->curr_weapon, p)) + && ((p->ammo_amount[p->curr_weapon] % (aplWeaponClip(p->curr_weapon, p))) == 0) ) { // do clip check... - p->kickback_pic = aplWeaponTotalTime(p->curr_weapon, snum); + p->kickback_pic = aplWeaponTotalTime(p->curr_weapon, p); // is same as p->kickback_pic.... } - if (aplWeaponWorksLike(p->curr_weapon, snum) != KNEE_WEAPON) + if (aplWeaponWorksLike(p->curr_weapon, p) != KNEE_WEAPON) { checkavailweapon(p); } @@ -107,13 +107,13 @@ void DoFire(DDukePlayer* p, int snum) void DoSpawn(DDukePlayer *p, int snum) { - if(!aplWeaponSpawn(p->curr_weapon, snum)) + if(!aplWeaponSpawn(p->curr_weapon, p)) return; - auto j = spawn(p->GetActor(), GetSpawnType(aplWeaponSpawn(p->curr_weapon, snum))); + auto j = spawn(p->GetActor(), GetSpawnType(aplWeaponSpawn(p->curr_weapon, p))); if (!j) return; - if((aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_SPAWNTYPE2 ) ) + if((aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_SPAWNTYPE2 ) ) { // like shotgun shells j->spr.Angles.Yaw += DAngle180; @@ -121,7 +121,7 @@ void DoSpawn(DDukePlayer *p, int snum) j->spr.Angles.Yaw += DAngle180; // p->kickback_pic++; } - else if((aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_SPAWNTYPE3 ) ) + else if((aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_SPAWNTYPE3 ) ) { // like chaingun shells j->spr.Angles.Yaw += DAngle90; @@ -158,29 +158,29 @@ void fireweapon_ww(int snum) { SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum); SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum); - SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, snum), p->GetActor(), snum); + SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum); OnEvent(EVENT_FIRE, snum, p->GetActor(), -1); if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0) { - switch (aplWeaponWorksLike(p->curr_weapon, snum)) + switch (aplWeaponWorksLike(p->curr_weapon, p)) { case HANDBOMB_WEAPON: p->hbomb_hold_delay = 0; if (p->ammo_amount[p->curr_weapon] > 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; case HANDREMOTE_WEAPON: p->hbomb_hold_delay = 0; p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } break; @@ -189,9 +189,9 @@ void fireweapon_ww(int snum) { //p->ammo_amount[p->curr_weapon]--; p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -201,9 +201,9 @@ void fireweapon_ww(int snum) if (p->ammo_amount[p->curr_weapon] > 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -212,9 +212,9 @@ void fireweapon_ww(int snum) if (p->ammo_amount[p->curr_weapon] > 0 && p->random_club_frame == 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -222,9 +222,9 @@ void fireweapon_ww(int snum) if (operateTripbomb(snum)) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -233,9 +233,9 @@ void fireweapon_ww(int snum) if (p->ammo_amount[p->curr_weapon] > 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -244,9 +244,9 @@ void fireweapon_ww(int snum) if (p->ammo_amount[p->curr_weapon] > 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -255,9 +255,9 @@ void fireweapon_ww(int snum) if (p->ammo_amount[p->curr_weapon] > 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -266,9 +266,9 @@ void fireweapon_ww(int snum) { p->kickback_pic = 1; p->hbomb_hold_delay = !p->hbomb_hold_delay; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -277,9 +277,9 @@ void fireweapon_ww(int snum) if (p->ammo_amount[RPG_WEAPON] > 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -288,9 +288,9 @@ void fireweapon_ww(int snum) if (p->quick_kick == 0) { p->kickback_pic = 1; - if (aplWeaponInitialSound(p->curr_weapon, snum)) + if (aplWeaponInitialSound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponInitialSound(p->curr_weapon, p), pact); } } break; @@ -311,10 +311,10 @@ void operateweapon_ww(int snum, ESyncBits actions) auto pact = p->GetActor(); // already firing... - if (aplWeaponWorksLike(p->curr_weapon, snum) == HANDBOMB_WEAPON) + if (aplWeaponWorksLike(p->curr_weapon, p) == HANDBOMB_WEAPON) { - if (aplWeaponHoldDelay(p->curr_weapon, snum) // there is a hold delay - && (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, snum)) // and we are 'at' hold + if (aplWeaponHoldDelay(p->curr_weapon, p) // there is a hold delay + && (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, p)) // and we are 'at' hold && (actions & SB_FIRE) // and 'fire' button is still down ) // just hold here... @@ -323,7 +323,7 @@ void operateweapon_ww(int snum, ESyncBits actions) return; } p->kickback_pic++; - if (p->kickback_pic == aplWeaponHoldDelay(p->curr_weapon, snum)) + if (p->kickback_pic == aplWeaponHoldDelay(p->curr_weapon, p)) { double zvel, vel; @@ -372,43 +372,43 @@ void operateweapon_ww(int snum, ESyncBits actions) } } - else if (p->kickback_pic < aplWeaponHoldDelay(p->curr_weapon, snum) && + else if (p->kickback_pic < aplWeaponHoldDelay(p->curr_weapon, p) && (actions & SB_CROUCH)) { p->hbomb_hold_delay++; } - else if (p->kickback_pic > aplWeaponTotalTime(p->curr_weapon, snum)) + else if (p->kickback_pic > aplWeaponTotalTime(p->curr_weapon, p)) { p->okickback_pic = p->kickback_pic = 0; // don't change to remote when in NAM: grenades are timed checkavailweapon(p); } } - else if (aplWeaponWorksLike(p->curr_weapon, snum) == HANDREMOTE_WEAPON) + else if (aplWeaponWorksLike(p->curr_weapon, p) == HANDREMOTE_WEAPON) { p->kickback_pic++; - if (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, snum)) + if (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, p)) { - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_BOMB_TRIGGER) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_BOMB_TRIGGER) { p->hbomb_on = 0; } - if (aplWeaponShoots(p->curr_weapon, snum) != 0) + if (aplWeaponShoots(p->curr_weapon, p) != 0) { - if (!(aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_NOVISIBLE)) + if (!(aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_NOVISIBLE)) { // make them visible if not set... lastvisinc = PlayClock + 32; p->visibility = 0; } SetGameVarID(g_iWeaponVarID, p->curr_weapon, p->GetActor(), snum); - SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, snum), p->GetActor(), snum); - shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, snum))); + SetGameVarID(g_iWorksLikeVarID, aplWeaponWorksLike(p->curr_weapon, p), p->GetActor(), snum); + shoot(p->GetActor(), GetSpawnType(aplWeaponShoots(p->curr_weapon, p))); } } - if (p->kickback_pic >= aplWeaponTotalTime(p->curr_weapon, snum)) + if (p->kickback_pic >= aplWeaponTotalTime(p->curr_weapon, p)) { p->okickback_pic = p->kickback_pic = 0; /// WHAT THE HELL DOES THIS DO....????????????? @@ -425,47 +425,47 @@ void operateweapon_ww(int snum, ESyncBits actions) // the basic weapon... p->kickback_pic++; - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_CHECKATRELOAD) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_CHECKATRELOAD) { - if (p->kickback_pic == aplWeaponReload(p->curr_weapon, snum)) + if (p->kickback_pic == aplWeaponReload(p->curr_weapon, p)) { checkavailweapon(p); } } - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_STANDSTILL - && p->kickback_pic < (aplWeaponFireDelay(p->curr_weapon, snum) + 1)) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_STANDSTILL + && p->kickback_pic < (aplWeaponFireDelay(p->curr_weapon, p) + 1)) { p->GetActor()->restorez(); p->vel.Z = 0; } - if (p->kickback_pic == aplWeaponSound2Time(p->curr_weapon, snum)) + if (p->kickback_pic == aplWeaponSound2Time(p->curr_weapon, p)) { - if (aplWeaponSound2Sound(p->curr_weapon, snum)) + if (aplWeaponSound2Sound(p->curr_weapon, p)) { - S_PlayActorSound(aplWeaponSound2Sound(p->curr_weapon, snum), pact); + S_PlayActorSound(aplWeaponSound2Sound(p->curr_weapon, p), pact); } } - if (p->kickback_pic == aplWeaponSpawnTime(p->curr_weapon, snum)) + if (p->kickback_pic == aplWeaponSpawnTime(p->curr_weapon, p)) { DoSpawn(p, snum); } - if (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, snum)) + if (p->kickback_pic == aplWeaponFireDelay(p->curr_weapon, p)) { DoFire(p, snum); } - if (p->kickback_pic > aplWeaponFireDelay(p->curr_weapon, snum) - && p->kickback_pic < aplWeaponTotalTime(p->curr_weapon, snum)) + if (p->kickback_pic > aplWeaponFireDelay(p->curr_weapon, p) + && p->kickback_pic < aplWeaponTotalTime(p->curr_weapon, p)) { - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_AUTOMATIC) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_AUTOMATIC) { // an 'automatic' if ((actions & SB_FIRE) == 0) { - p->kickback_pic = aplWeaponTotalTime(p->curr_weapon, snum); + p->kickback_pic = aplWeaponTotalTime(p->curr_weapon, p); } - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_FIREEVERYTHIRD) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_FIREEVERYTHIRD) { if (((p->kickback_pic) % 3) == 0) { @@ -474,7 +474,7 @@ void operateweapon_ww(int snum, ESyncBits actions) } } - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_FIREEVERYOTHER) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_FIREEVERYOTHER) { // fire every other... DoFire(p, snum); @@ -483,30 +483,30 @@ void operateweapon_ww(int snum, ESyncBits actions) } // 'automatic } - else if (p->kickback_pic >= aplWeaponTotalTime(p->curr_weapon, snum)) + else if (p->kickback_pic >= aplWeaponTotalTime(p->curr_weapon, p)) { - if ( //!(aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_CHECKATRELOAD) && - aplWeaponReload(p->curr_weapon, snum) > aplWeaponTotalTime(p->curr_weapon, snum) + if ( //!(aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_CHECKATRELOAD) && + aplWeaponReload(p->curr_weapon, p) > aplWeaponTotalTime(p->curr_weapon, p) && p->ammo_amount[p->curr_weapon] > 0 - && (aplWeaponClip(p->curr_weapon, snum)) - && ((p->ammo_amount[p->curr_weapon] % (aplWeaponClip(p->curr_weapon, snum))) == 0) + && (aplWeaponClip(p->curr_weapon, p)) + && ((p->ammo_amount[p->curr_weapon] % (aplWeaponClip(p->curr_weapon, p))) == 0) ) { // reload in progress... - int timer = aplWeaponReload(p->curr_weapon, snum) - aplWeaponTotalTime(p->curr_weapon, snum); + int timer = aplWeaponReload(p->curr_weapon, p) - aplWeaponTotalTime(p->curr_weapon, p); // time for 'reload' - if (p->kickback_pic == (aplWeaponTotalTime(p->curr_weapon, snum) + 1)) + if (p->kickback_pic == (aplWeaponTotalTime(p->curr_weapon, p) + 1)) { // eject shortly after 'total time' S_PlayActorSound(EJECT_CLIP, pact); } - else if (p->kickback_pic == (aplWeaponReload(p->curr_weapon, snum) - (timer / 3))) + else if (p->kickback_pic == (aplWeaponReload(p->curr_weapon, p) - (timer / 3))) { // insert occurs 2/3 of way through reload delay S_PlayActorSound(INSERT_CLIP, pact); } - if (p->kickback_pic >= (aplWeaponReload(p->curr_weapon, snum))) + if (p->kickback_pic >= (aplWeaponReload(p->curr_weapon, p))) { p->okickback_pic = p->kickback_pic = 0; } @@ -514,12 +514,12 @@ void operateweapon_ww(int snum, ESyncBits actions) } else { - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_AUTOMATIC) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_AUTOMATIC) { // an 'automatic' if (actions & SB_FIRE) { // we are an AUTOMATIC. Fire again... - if (aplWeaponFlags(p->curr_weapon, snum) & WEAPON_FLAG_RANDOMRESTART) + if (aplWeaponFlags(p->curr_weapon, p) & WEAPON_FLAG_RANDOMRESTART) { p->kickback_pic = 1 + (krand() & 3); } diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index 1e31a639c..c31d774ef 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -797,13 +797,13 @@ void donewgame(MapRecord* map, int sk) { for (int i = 0; i < 12/*MAX_WEAPONS*/; i++) // aboive 12 have no data defined and would crash. { - if (aplWeaponWorksLike(i, 0) == PISTOL_WEAPON) + if (aplWeaponWorksLike(i, p) == PISTOL_WEAPON) { p->curr_weapon = i; p->gotweapon[i] = true; p->ammo_amount[i] = 48; } - else if (aplWeaponWorksLike(i, 0) == KNEE_WEAPON || aplWeaponWorksLike(i, 0) == HANDREMOTE_WEAPON) + else if (aplWeaponWorksLike(i, p) == KNEE_WEAPON || aplWeaponWorksLike(i, p) == HANDREMOTE_WEAPON) { p->gotweapon[i] = true; }