mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-23 04:22:16 +00:00
- Duke: Convert all the aplWeapon* crap to work on player pointers.
This commit is contained in:
parent
836ed7d931
commit
d8b670276a
8 changed files with 149 additions and 143 deletions
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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(); }
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue