Rebased against the latest Nuclide commit.

This commit is contained in:
Marco Cawthorne 2022-03-15 19:34:26 -07:00
parent 2979bd82f1
commit d1962767b4
Signed by: eukara
GPG key ID: C196CD8BA993248A
24 changed files with 406 additions and 508 deletions

View file

@ -27,10 +27,3 @@ ClientGame_EntityUpdate(float id, float new)
return (1); return (1);
} }
void
ClientGame_EntityRemove(void)
{
if (self.classname == "player")
Player_DestroyWeaponModel((base_player) self);
}

View file

@ -389,6 +389,7 @@ HUD_DrawLogo(void)
void void
HUD_DrawNotify(void) HUD_DrawNotify(void)
{ {
player pl = (player)self;
vector pos; vector pos;
float a; float a;
@ -403,7 +404,7 @@ HUD_DrawNotify(void)
a = bound(0.0, pSeatLocal->m_flPickupAlpha, 1.0); a = bound(0.0, pSeatLocal->m_flPickupAlpha, 1.0);
pos[1] += 48 * (1.0 - a); pos[1] += 48 * (1.0 - a);
Weapons_HUDPic(pSeatLocal->m_iPickupWeapon, 1, pos, a); Weapons_HUDPic(pl, pSeatLocal->m_iPickupWeapon, 1, pos, a);
HUD_ItemNotify_Draw(pos); HUD_ItemNotify_Draw(pos);
HUD_AmmoNotify_Draw(pos); HUD_AmmoNotify_Draw(pos);
pSeatLocal->m_flPickupAlpha -= (clframetime * 0.5); pSeatLocal->m_flPickupAlpha -= (clframetime * 0.5);
@ -439,7 +440,7 @@ HUD_Draw(void)
g_hud_color = autocvar_con_color * (1 / 255); g_hud_color = autocvar_con_color * (1 / 255);
/* little point in not drawing these, even if you don't have a suit */ /* little point in not drawing these, even if you don't have a suit */
Weapons_DrawCrosshair(); Weapons_DrawCrosshair(pl);
HUD_DrawWeaponSelect(); HUD_DrawWeaponSelect();
Obituary_Draw(); Obituary_Draw();
Textmenu_Draw(); Textmenu_Draw();

View file

@ -83,6 +83,7 @@ HUD_DrawWeaponSelect_Trigger(void)
{ {
player pl = (player)pSeat->m_ePlayer; player pl = (player)pSeat->m_ePlayer;
pl.activeweapon = pSeat->m_iHUDWeaponSelected; pl.activeweapon = pSeat->m_iHUDWeaponSelected;
sendevent("PlayerSwitchWeapon", "i", pSeat->m_iHUDWeaponSelected); sendevent("PlayerSwitchWeapon", "i", pSeat->m_iHUDWeaponSelected);
sound(pSeat->m_ePlayer, CHAN_ITEM, "common/wpn_select.wav", 0.5f, ATTN_NONE); sound(pSeat->m_ePlayer, CHAN_ITEM, "common/wpn_select.wav", 0.5f, ATTN_NONE);
pSeat->m_iHUDWeaponSelected = pSeat->m_flHUDWeaponSelectTime = 0; pSeat->m_iHUDWeaponSelected = pSeat->m_flHUDWeaponSelectTime = 0;
@ -204,13 +205,13 @@ HUD_DrawWeaponSelect(void)
slot_selected = TRUE; slot_selected = TRUE;
if (x == wantpos) { if (x == wantpos) {
// Selected Sprite // Selected Sprite
Weapons_HUDPic(pSeat->m_iHUDWeaponSelected, 1, vecPos, 1.0f); Weapons_HUDPic(pl, pSeat->m_iHUDWeaponSelected, 1, vecPos, 1.0f);
drawsubpic(vecPos, [170,45], g_hud3_spr, drawsubpic(vecPos, [170,45], g_hud3_spr,
[0,180/256], [170/256,45/256], g_hud_color, 1, DRAWFLAG_ADDITIVE); [0,180/256], [170/256,45/256], g_hud_color, 1, DRAWFLAG_ADDITIVE);
vecPos[1] += 50; vecPos[1] += 50;
} else if ((b=HUD_InSlotPos(i, x)) != -1) { } else if ((b=HUD_InSlotPos(i, x)) != -1) {
// Unselected Sprite // Unselected Sprite
Weapons_HUDPic(b, 0, vecPos, 1.0f); Weapons_HUDPic(pl, b, 0, vecPos, 1.0f);
vecPos[1] += 50; vecPos[1] += 50;
} }
} else if (HUD_InSlotPos(i, x) != -1) { } else if (HUD_InSlotPos(i, x) != -1) {

View file

@ -99,15 +99,8 @@ Player_HandleWeaponModel(base_player pp, float thirdperson)
pl.p_model = spawn(); pl.p_model = spawn();
} }
/* only make it visible when it's a thirdperson drawcall */
pl.p_model.drawmask = (thirdperson) ? MASK_ENGINE:0;
/* let's not waste any time doing bone calculations then */
if (pl.p_model.drawmask == 0)
return;
/* what's the current weapon model supposed to be anyway? */ /* what's the current weapon model supposed to be anyway? */
string wmodel = Weapons_GetPlayermodel(pl.activeweapon); string wmodel = Weapons_GetPlayermodel(pl, pl.activeweapon);
/* we changed weapons, update skeletonindex */ /* we changed weapons, update skeletonindex */
if (pl.p_model.model != wmodel) { if (pl.p_model.model != wmodel) {
@ -152,15 +145,6 @@ Player_HandleWeaponModel(base_player pp, float thirdperson)
} }
} }
/* we need to call this when a player entity gets removed */
void
Player_DestroyWeaponModel(entity pp)
{
player pl = (player)pp;
if (pl.p_model)
remove(pl.p_model);
}
void void
Player_PreDraw(base_player pp, int thirdperson) Player_PreDraw(base_player pp, int thirdperson)
{ {
@ -169,10 +153,12 @@ Player_PreDraw(base_player pp, int thirdperson)
/* Handle the flashlights... */ /* Handle the flashlights... */
Player_Flashlight(pl); Player_Flashlight(pl);
Weapons_PreDraw(thirdperson); Weapons_PreDraw(pl, thirdperson);
pl.Physics_SetViewParms(); pl.Physics_SetViewParms();
Animation_PlayerUpdate((player)pl); Animation_PlayerUpdate((player)pl);
Animation_TimerUpdate((player)pl, clframetime); Animation_TimerUpdate((player)pl, clframetime);
if (thirdperson)
Player_HandleWeaponModel(pl, thirdperson); Player_HandleWeaponModel(pl, thirdperson);
} }

View file

@ -15,10 +15,8 @@
*/ */
void void
View_UpdateWeapon(entity vm, entity mflash) View_UpdateWeapon(player pl, entity vm, entity mflash)
{ {
player pl = (player)pSeat->m_ePlayer;
/* only bother upon change */ /* only bother upon change */
if (pSeat->m_iLastWeapon == pl.activeweapon) { if (pSeat->m_iLastWeapon == pl.activeweapon) {
return; return;
@ -30,9 +28,6 @@ View_UpdateWeapon(entity vm, entity mflash)
return; return;
} }
/* hack, we changed the wep, move this into Game_Input/PMove */
Weapons_Draw();
/* we forced a weapon call outside the prediction, /* we forced a weapon call outside the prediction,
* thus we need to update all the net variables to * thus we need to update all the net variables to
* make sure these updates are recognized. this is * make sure these updates are recognized. this is
@ -41,6 +36,20 @@ View_UpdateWeapon(entity vm, entity mflash)
SAVE_STATE(pl.w_idle_next); SAVE_STATE(pl.w_idle_next);
SAVE_STATE(pl.viewzoom); SAVE_STATE(pl.viewzoom);
SAVE_STATE(pl.weapontime); SAVE_STATE(pl.weapontime);
SAVE_STATE(pl.weaponframe);
/* hack, we changed the wep, move this into Game_Input/PMove */
Weapons_Draw(pl);
/* we forced a weapon call outside the prediction,
* thus we need to update all the net variables to
* make sure these updates are recognized. this is
* vile but it'll have to do for now */
ROLL_BACK(pl.w_attack_next);
ROLL_BACK(pl.w_idle_next);
ROLL_BACK(pl.viewzoom);
ROLL_BACK(pl.weapontime);
ROLL_BACK(pl.weaponframe);
/* figure out when the attachments start. in FTE attachments for /* figure out when the attachments start. in FTE attachments for
* HLMDL are treated as bones. they start at numbones + 1 */ * HLMDL are treated as bones. they start at numbones + 1 */

View file

@ -153,7 +153,14 @@ HLMultiplayerRules::ConsoleCommand(base_player pp, string cmd)
switch (argv(0)) { switch (argv(0)) {
case "bot_add": case "bot_add":
Bot_AddQuick(); bot pete = Bot_AddQuick();
Bot_RandomColormap(pete);
searchhandle pm = search_begin("models/player/*/*.mdl", TRUE, TRUE);
int r = floor(random(0, search_getsize(pm)));
string mdl = substring(search_getfilename(pm, r), 0, -5);
tokenizebyseparator(mdl, "/");
forceinfokey(pete, "model", argv(2));
search_end(pm);
break; break;
case "jumptest": case "jumptest":
makevectors(pp.v_angle); makevectors(pp.v_angle);

View file

@ -97,7 +97,7 @@ Player_UseUp(void) {
} }
} }
void Weapons_Draw(void); void Weapons_Draw(player pl);
void void
CSEv_PlayerSwitchWeapon_i(int w) CSEv_PlayerSwitchWeapon_i(int w)
@ -106,7 +106,7 @@ CSEv_PlayerSwitchWeapon_i(int w)
if (pl.activeweapon != w) { if (pl.activeweapon != w) {
pl.activeweapon = w; pl.activeweapon = w;
Weapons_Draw(); Weapons_Draw(pl);
} }
} }

View file

@ -61,7 +61,7 @@ Animation_PlayerUpdate(player pl)
pl.basebone = gettagindex(pl, "Bip01 Spine1"); pl.basebone = gettagindex(pl, "Bip01 Spine1");
if (pl.anim_top_delay <= 0.0f) { if (pl.anim_top_delay <= 0.0f) {
pl.anim_top = Weapons_GetAim(pl.activeweapon); pl.anim_top = Weapons_GetAim(pl, pl.activeweapon);
} }
if (vlen(pl.velocity) == 0) { if (vlen(pl.velocity) == 0) {

View file

@ -15,7 +15,7 @@
*/ */
void void
Game_Input(void) Game_Input(player pl)
{ {
#ifdef SERVER #ifdef SERVER
CGameRules rules = (CGameRules)g_grMode; CGameRules rules = (CGameRules)g_grMode;
@ -30,13 +30,11 @@ Game_Input(void)
else else
Player_UseUp(); Player_UseUp();
if (self.impulse == 100) if (pl.impulse == 100)
Flashlight_Toggle(); Flashlight_Toggle();
if (cvar("sv_cheats") == 1) { if (cvar("sv_cheats") == 1) {
player pl = (player)self; if (pl.impulse == 101) {
if (self.impulse == 101) {
pl.health = 100; pl.health = 100;
pl.armor = 100; pl.armor = 100;
pl.g_items |= ITEM_SUIT; pl.g_items |= ITEM_SUIT;
@ -69,15 +67,15 @@ Game_Input(void)
} }
} }
self.impulse = 0; pl.impulse = 0;
#endif #endif
if (input_buttons & INPUT_BUTTON0) if (input_buttons & INPUT_BUTTON0)
Weapons_Primary(); Weapons_Primary(pl);
else if (input_buttons & INPUT_BUTTON4) else if (input_buttons & INPUT_BUTTON4)
Weapons_Reload(); Weapons_Reload(pl);
else if (input_buttons & INPUT_BUTTON3) else if (input_buttons & INPUT_BUTTON3)
Weapons_Secondary(); Weapons_Secondary(pl);
else else
Weapons_Release(); Weapons_Release(pl);
} }

View file

@ -511,7 +511,7 @@ player::SendEntity(entity ePEnt, float fChanged)
} }
/* other players don't need to know about these attributes */ /* other players don't need to know about these attributes */
if (ePEnt != self) { if (ePEnt != self && ePEnt.classname != "spectator") {
fChanged &= ~PLAYER_ITEMS; fChanged &= ~PLAYER_ITEMS;
fChanged &= ~PLAYER_HEALTH; fChanged &= ~PLAYER_HEALTH;
fChanged &= ~PLAYER_ARMOR; fChanged &= ~PLAYER_ARMOR;

View file

@ -68,7 +68,7 @@ w_crossbow_wmodel(void)
} }
string string
w_crossbow_pmodel(void) w_crossbow_pmodel(player pl)
{ {
return "models/p_crossbow.mdl"; return "models/p_crossbow.mdl";
} }
@ -80,11 +80,9 @@ w_crossbow_deathmsg(void)
} }
int int
w_crossbow_pickup(int new, int startammo) w_crossbow_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (new) { if (new) {
pl.crossbow_mag = 5; pl.crossbow_mag = 5;
return (1); return (1);
@ -102,22 +100,20 @@ w_crossbow_pickup(int new, int startammo)
} }
void void
w_crossbow_draw(void) w_crossbow_draw(player pl)
{ {
player pl = (player)self;
Weapons_SetModel("models/v_crossbow.mdl"); Weapons_SetModel("models/v_crossbow.mdl");
if (pl.crossbow_mag <= 0) if (pl.crossbow_mag <= 0)
Weapons_ViewAnimation(CROSSBOW_DRAW2); Weapons_ViewAnimation(pl, CROSSBOW_DRAW2);
else else
Weapons_ViewAnimation(CROSSBOW_DRAW1); Weapons_ViewAnimation(pl, CROSSBOW_DRAW1);
} }
void void
w_crossbow_holster(void) w_crossbow_holster(player pl)
{ {
Weapons_ViewAnimation(CROSSBOW_HOLSTER1); Weapons_ViewAnimation(pl, CROSSBOW_HOLSTER1);
} }
#ifdef SERVER #ifdef SERVER
@ -158,10 +154,8 @@ void Crossbolt_Touch(void) {
#endif #endif
void void
w_crossbow_primary(void) w_crossbow_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
@ -174,10 +168,10 @@ w_crossbow_primary(void)
pl.crossbow_mag--; pl.crossbow_mag--;
#ifndef CLIENT #ifndef CLIENT
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
entity bolt = spawn(); entity bolt = spawn();
setmodel(bolt, "models/crossbow_bolt.mdl"); setmodel(bolt, "models/crossbow_bolt.mdl");
setorigin(bolt, Weapons_GetCameraPos() + (v_forward * 16)); setorigin(bolt, Weapons_GetCameraPos(pl) + (v_forward * 16));
bolt.owner = self; bolt.owner = self;
bolt.velocity = v_forward * 2000; bolt.velocity = v_forward * 2000;
bolt.movetype = MOVETYPE_FLYMISSILE; bolt.movetype = MOVETYPE_FLYMISSILE;
@ -198,9 +192,9 @@ w_crossbow_primary(void)
#endif #endif
if (pl.crossbow_mag) { if (pl.crossbow_mag) {
Weapons_ViewAnimation(CROSSBOW_FIRE1); Weapons_ViewAnimation(pl, CROSSBOW_FIRE1);
} else { } else {
Weapons_ViewAnimation(CROSSBOW_FIRE3); Weapons_ViewAnimation(pl, CROSSBOW_FIRE3);
} }
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
@ -208,16 +202,15 @@ w_crossbow_primary(void)
else else
Animation_PlayerTop(pl, ANIM_SHOOTBOW, 0.25f); Animation_PlayerTop(pl, ANIM_SHOOTBOW, 0.25f);
Weapons_ViewPunchAngle([-2,0,0]); Weapons_ViewPunchAngle(pl, [-2,0,0]);
pl.w_attack_next = 0.75f; pl.w_attack_next = 0.75f;
pl.w_idle_next = 10.0f; pl.w_idle_next = 10.0f;
} }
void void
w_crossbow_secondary(void) w_crossbow_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
return; return;
} }
@ -231,10 +224,8 @@ w_crossbow_secondary(void)
} }
void void
w_crossbow_reload(void) w_crossbow_reload(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
@ -257,21 +248,19 @@ w_crossbow_reload(void)
Sound_Play(pl, CHAN_ITEM, "weapon_crossbow.reload"); Sound_Play(pl, CHAN_ITEM, "weapon_crossbow.reload");
#endif #endif
Weapons_ViewAnimation(CROSSBOW_RELOAD); Weapons_ViewAnimation(pl, CROSSBOW_RELOAD);
pl.w_attack_next = 4.5f; pl.w_attack_next = 4.5f;
pl.w_idle_next = 10.0f; pl.w_idle_next = 10.0f;
} }
void void
w_crossbow_release(void) w_crossbow_release(player pl)
{ {
player pl = (player)self;
/* auto-reload if need be */ /* auto-reload if need be */
if (pl.w_attack_next <= 0.0) if (pl.w_attack_next <= 0.0)
if (pl.crossbow_mag == 0 && pl.ammo_bolt > 0) { if (pl.crossbow_mag == 0 && pl.ammo_bolt > 0) {
Weapons_Reload(); Weapons_Reload(pl);
return; return;
} }
@ -282,15 +271,15 @@ w_crossbow_release(void)
int r = floor(pseudorandom() * 2.0f); int r = floor(pseudorandom() * 2.0f);
if (r == 1) { if (r == 1) {
if (pl.crossbow_mag) { if (pl.crossbow_mag) {
Weapons_ViewAnimation(CROSSBOW_IDLE1); Weapons_ViewAnimation(pl, CROSSBOW_IDLE1);
} else { } else {
Weapons_ViewAnimation(CROSSBOW_IDLE2); Weapons_ViewAnimation(pl, CROSSBOW_IDLE2);
} }
} else { } else {
if (pl.crossbow_mag) { if (pl.crossbow_mag) {
Weapons_ViewAnimation(CROSSBOW_FIDGET1); Weapons_ViewAnimation(pl, CROSSBOW_FIDGET1);
} else { } else {
Weapons_ViewAnimation(CROSSBOW_FIDGET2); Weapons_ViewAnimation(pl, CROSSBOW_FIDGET2);
} }
} }
@ -298,7 +287,7 @@ w_crossbow_release(void)
} }
void void
w_crossbow_crosshair(void) w_crossbow_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
vector cross_pos; vector cross_pos;
@ -334,16 +323,15 @@ w_crossbow_crosshair(void)
} }
float float
w_crossbow_aimanim(void) w_crossbow_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMBOW : ANIM_AIMBOW; return pl.flags & FL_CROUCHING ? ANIM_CR_AIMBOW : ANIM_AIMBOW;
} }
void void
w_crossbow_hudpic(int selected, vector pos, float a) w_crossbow_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.crossbow_mag == 0 && pl.ammo_bolt == 0) if (pl.crossbow_mag == 0 && pl.ammo_bolt == 0)
@ -380,17 +368,15 @@ w_crossbow_hudpic(int selected, vector pos, float a)
} }
int int
w_crossbow_isempty(void) w_crossbow_isempty(player pl)
{ {
player pl = (player)self;
if (pl.crossbow_mag <= 0 && pl.ammo_bolt <= 0) if (pl.crossbow_mag <= 0 && pl.ammo_bolt <= 0)
return 1; return 1;
return 0; return 0;
} }
weapontype_t w_crossbow_type(void) weapontype_t w_crossbow_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -408,7 +394,7 @@ weapon_t w_crossbow =
.secondary = w_crossbow_secondary, .secondary = w_crossbow_secondary,
.reload = w_crossbow_reload, .reload = w_crossbow_reload,
.release = w_crossbow_release, .release = w_crossbow_release,
.crosshair = w_crossbow_crosshair, .postdraw = w_crossbow_crosshair,
.precache = w_crossbow_precache, .precache = w_crossbow_precache,
.pickup = w_crossbow_pickup, .pickup = w_crossbow_pickup,
.updateammo = w_crossbow_updateammo, .updateammo = w_crossbow_updateammo,

View file

@ -62,7 +62,7 @@ w_crowbar_wmodel(void)
return "models/w_crowbar.mdl"; return "models/w_crowbar.mdl";
} }
string string
w_crowbar_pmodel(void) w_crowbar_pmodel(player pl)
{ {
return "models/p_crowbar.mdl"; return "models/p_crowbar.mdl";
} }
@ -74,30 +74,29 @@ w_crowbar_deathmsg(void)
} }
void void
w_crowbar_draw(void) w_crowbar_draw(player pl)
{ {
Weapons_SetModel("models/v_crowbar.mdl"); Weapons_SetModel("models/v_crowbar.mdl");
Weapons_ViewAnimation(CBAR_DRAW); Weapons_ViewAnimation(pl, CBAR_DRAW);
} }
void void
w_crowbar_holster(void) w_crowbar_holster(player pl)
{ {
Weapons_ViewAnimation(CBAR_HOLSTER); Weapons_ViewAnimation(pl, CBAR_HOLSTER);
} }
void void
w_crowbar_primary(void) w_crowbar_primary(player pl)
{ {
int anim = 0; int anim = 0;
vector src; vector src;
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
return; return;
} }
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
src = pl.origin + pl.view_ofs; src = pl.origin + pl.view_ofs;
/* make sure we can gib corpses */ /* make sure we can gib corpses */
@ -116,13 +115,13 @@ w_crowbar_primary(void)
int r = (float)input_sequence % 3; int r = (float)input_sequence % 3;
switch (r) { switch (r) {
case 0: case 0:
Weapons_ViewAnimation(trace_fraction >= 1 ? CBAR_ATTACK1MISS:CBAR_ATTACK1HIT); Weapons_ViewAnimation(pl, trace_fraction >= 1 ? CBAR_ATTACK1MISS:CBAR_ATTACK1HIT);
break; break;
case 1: case 1:
Weapons_ViewAnimation(trace_fraction >= 1 ? CBAR_ATTACK2MISS:CBAR_ATTACK2HIT); Weapons_ViewAnimation(pl, trace_fraction >= 1 ? CBAR_ATTACK2MISS:CBAR_ATTACK2HIT);
break; break;
default: default:
Weapons_ViewAnimation(trace_fraction >= 1 ? CBAR_ATTACK3MISS:CBAR_ATTACK3HIT); Weapons_ViewAnimation(pl, trace_fraction >= 1 ? CBAR_ATTACK3MISS:CBAR_ATTACK3HIT);
} }
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
@ -156,26 +155,25 @@ w_crowbar_primary(void)
} }
void void
w_crowbar_release(void) w_crowbar_release(player pl)
{ {
player pl = (player)self;
if (pl.w_idle_next) { if (pl.w_idle_next) {
return; return;
} }
Weapons_ViewAnimation(CBAR_IDLE); Weapons_ViewAnimation(pl, CBAR_IDLE);
pl.w_idle_next = 15.0f; pl.w_idle_next = 15.0f;
} }
float float
w_crowbar_aimanim(void) w_crowbar_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR;
} }
void void
w_crowbar_hudpic(int selected, vector pos, float a) w_crowbar_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
if (selected) { if (selected) {
@ -205,12 +203,12 @@ w_crowbar_hudpic(int selected, vector pos, float a)
} }
int int
w_crowbar_isempty(void) w_crowbar_isempty(player pl)
{ {
return 0; return 0;
} }
weapontype_t w_crowbar_type(void) weapontype_t w_crowbar_type(player pl)
{ {
return WPNTYPE_CLOSE; return WPNTYPE_CLOSE;
} }
@ -228,7 +226,7 @@ weapon_t w_crowbar =
.secondary = __NULL__, .secondary = __NULL__,
.reload = __NULL__, .reload = __NULL__,
.release = w_crowbar_release, .release = w_crowbar_release,
.crosshair = __NULL__, .postdraw = __NULL__,
.precache = w_crowbar_precache, .precache = w_crowbar_precache,
.pickup = __NULL__, .pickup = __NULL__,
.updateammo = w_crowbar_updateammo, .updateammo = w_crowbar_updateammo,

View file

@ -75,7 +75,7 @@ string w_egon_wmodel(void)
{ {
return "models/w_egon.mdl"; return "models/w_egon.mdl";
} }
string w_egon_pmodel(void) string w_egon_pmodel(player pl)
{ {
return "models/p_egon.mdl"; return "models/p_egon.mdl";
} }
@ -84,10 +84,9 @@ string w_egon_deathmsg(void)
return ""; return "";
} }
int w_egon_pickup(int new, int startammo) int w_egon_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (pl.ammo_uranium < MAX_A_URANIUM) { if (pl.ammo_uranium < MAX_A_URANIUM) {
pl.ammo_uranium = bound(0, pl.ammo_uranium + 20, MAX_A_URANIUM); pl.ammo_uranium = bound(0, pl.ammo_uranium + 20, MAX_A_URANIUM);
@ -99,38 +98,36 @@ int w_egon_pickup(int new, int startammo)
return (1); return (1);
} }
void w_egon_draw(void) void w_egon_draw(player pl)
{ {
player pl = (player)self;
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
Weapons_SetModel("models/v_egon.mdl"); Weapons_SetModel("models/v_egon.mdl");
Weapons_ViewAnimation(EGON_DRAW); Weapons_ViewAnimation(pl, EGON_DRAW);
} }
void w_egon_holster(void) void w_egon_holster(player pl)
{ {
Weapons_ViewAnimation(EGON_HOLSTER); Weapons_ViewAnimation(pl, EGON_HOLSTER);
} }
void w_egon_release(void); void w_egon_release(player pl);
void w_egon_primary(void) void w_egon_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
/* Ammo check */ /* Ammo check */
if (pl.ammo_uranium <= 0) { if (pl.ammo_uranium <= 0) {
w_egon_release(); w_egon_release(pl);
return; return;
} }
#ifdef SERVER #ifdef SERVER
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
vector src = Weapons_GetCameraPos(); vector src = Weapons_GetCameraPos(pl);
vector endpos = src + v_forward * 1024; vector endpos = src + v_forward * 1024;
traceline(src, endpos, FALSE, pl); traceline(src, endpos, FALSE, pl);
Damage_Radius(trace_endpos, pl, 14, 64, TRUE, DMG_ELECTRO); Damage_Radius(trace_endpos, pl, 14, 64, TRUE, DMG_ELECTRO);
@ -145,13 +142,13 @@ void w_egon_primary(void)
sound(pl, CHAN_WEAPON, "weapons/egon_windup2.wav", 1, ATTN_NORM, 100, 0); sound(pl, CHAN_WEAPON, "weapons/egon_windup2.wav", 1, ATTN_NORM, 100, 0);
#endif #endif
pl.mode_tempstate = 1; pl.mode_tempstate = 1;
Weapons_ViewPunchAngle([-5,0,0]); Weapons_ViewPunchAngle(pl, [-5,0,0]);
Weapons_ViewAnimation(EGON_ALTFIREON); Weapons_ViewAnimation(pl, EGON_ALTFIREON);
pl.w_idle_next = 1.5f; pl.w_idle_next = 1.5f;
} else if not (pl.w_idle_next > 0.0f) { } else if not (pl.w_idle_next > 0.0f) {
/* wait 3 seconds (idle next) */ /* wait 3 seconds (idle next) */
if (pl.mode_tempstate == 1) { if (pl.mode_tempstate == 1) {
Weapons_ViewAnimation(EGON_ALTFIRECYCLE); Weapons_ViewAnimation(pl, EGON_ALTFIRECYCLE);
#ifdef SERVER #ifdef SERVER
sound(pl, CHAN_WEAPON, "weapons/egon_run3.wav", 1, ATTN_NORM, 100); sound(pl, CHAN_WEAPON, "weapons/egon_run3.wav", 1, ATTN_NORM, 100);
#endif #endif
@ -163,27 +160,26 @@ void w_egon_primary(void)
pl.w_attack_next = 0.2f; pl.w_attack_next = 0.2f;
} }
void w_egon_reload(void) void w_egon_reload(player pl)
{ {
} }
void w_egon_release(void) void w_egon_release(player pl)
{ {
player pl = (player)self;
if (pl.mode_tempstate != 0 && pl.mode_tempstate < 3) { if (pl.mode_tempstate != 0 && pl.mode_tempstate < 3) {
#ifdef SERVER #ifdef SERVER
sound(pl, CHAN_WEAPON, "weapons/egon_off1.wav", 1, ATTN_NORM, 100, 0); sound(pl, CHAN_WEAPON, "weapons/egon_off1.wav", 1, ATTN_NORM, 100, 0);
#endif #endif
pl.mode_tempstate = 3; pl.mode_tempstate = 3;
Weapons_ViewPunchAngle([-2,0,0]); Weapons_ViewPunchAngle(pl, [-2,0,0]);
} }
pl.gflags &= ~GF_EGONBEAM; pl.gflags &= ~GF_EGONBEAM;
if (pl.mode_tempstate == 3) { if (pl.mode_tempstate == 3) {
Weapons_ViewAnimation(EGON_ALTFIREOFF); Weapons_ViewAnimation(pl, EGON_ALTFIREOFF);
pl.w_idle_next = 1.0f; pl.w_idle_next = 1.0f;
pl.w_attack_next = 1.1f; pl.w_attack_next = 1.1f;
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
@ -193,10 +189,10 @@ void w_egon_release(void)
} }
int r = floor(pseudorandom() * 3.0f); int r = floor(pseudorandom() * 3.0f);
if (r == 1) { if (r == 1) {
Weapons_ViewAnimation(EGON_FIDGET1); Weapons_ViewAnimation(pl, EGON_FIDGET1);
pl.w_idle_next = 2.666667f; pl.w_idle_next = 2.666667f;
} else { } else {
Weapons_ViewAnimation(EGON_IDLE1); Weapons_ViewAnimation(pl, EGON_IDLE1);
pl.w_idle_next = 2.0f; pl.w_idle_next = 2.0f;
} }
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
@ -204,10 +200,9 @@ void w_egon_release(void)
} }
void void
w_egon_postdraw(int thirdperson) w_egon_postdraw(player pl, int thirdperson)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
if (!(pl.gflags & GF_EGONBEAM)) if (!(pl.gflags & GF_EGONBEAM))
return; return;
@ -249,7 +244,7 @@ w_egon_postdraw(int thirdperson)
#endif #endif
} }
void w_egon_crosshair(void) void w_egon_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
static vector cross_pos; static vector cross_pos;
@ -261,15 +256,14 @@ void w_egon_crosshair(void)
#endif #endif
} }
float w_egon_aimanim(void) float w_egon_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMEGON : ANIM_AIMEGON; return self.flags & FL_CROUCHING ? ANIM_CR_AIMEGON : ANIM_AIMEGON;
} }
void w_egon_hudpic(int selected, vector pos, float a) void w_egon_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.ammo_uranium == 0) if (pl.ammo_uranium == 0)
@ -288,9 +282,8 @@ void w_egon_hudpic(int selected, vector pos, float a)
} }
int int
w_egon_isempty(void) w_egon_isempty(player pl)
{ {
player pl = (player)self;
if (pl.ammo_uranium <= 0) if (pl.ammo_uranium <= 0)
return 1; return 1;
@ -299,9 +292,9 @@ w_egon_isempty(void)
} }
weapontype_t weapontype_t
w_egon_type(void) w_egon_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_FULLAUTO;
} }
weapon_t w_egon = weapon_t w_egon =
@ -317,7 +310,7 @@ weapon_t w_egon =
.secondary = w_egon_release, .secondary = w_egon_release,
.reload = w_egon_reload, .reload = w_egon_reload,
.release = w_egon_release, .release = w_egon_release,
.crosshair = w_egon_crosshair, .postdraw = w_egon_crosshair,
.precache = w_egon_precache, .precache = w_egon_precache,
.pickup = w_egon_pickup, .pickup = w_egon_pickup,
.updateammo = w_egon_updateammo, .updateammo = w_egon_updateammo,

View file

@ -36,7 +36,7 @@ enum
GAUSS_DRAW GAUSS_DRAW
}; };
void w_gauss_release(void); void w_gauss_release(player pl);
void w_gauss_precache(void) void w_gauss_precache(void)
{ {
@ -62,7 +62,7 @@ string w_gauss_wmodel(void)
{ {
return "models/w_gauss.mdl"; return "models/w_gauss.mdl";
} }
string w_gauss_pmodel(void) string w_gauss_pmodel(player pl)
{ {
return "models/p_gauss.mdl"; return "models/p_gauss.mdl";
} }
@ -71,10 +71,9 @@ string w_gauss_deathmsg(void)
return ""; return "";
} }
int w_gauss_pickup(int new, int startammo) int w_gauss_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (pl.ammo_uranium < MAX_A_URANIUM) { if (pl.ammo_uranium < MAX_A_URANIUM) {
pl.ammo_uranium = bound(0, pl.ammo_uranium + 20, MAX_A_URANIUM); pl.ammo_uranium = bound(0, pl.ammo_uranium + 20, MAX_A_URANIUM);
@ -86,27 +85,25 @@ int w_gauss_pickup(int new, int startammo)
return (1); return (1);
} }
void w_gauss_draw(void) void w_gauss_draw(player pl)
{ {
player pl = (player)self;
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
Weapons_SetModel("models/v_gauss.mdl"); Weapons_SetModel("models/v_gauss.mdl");
Weapons_ViewAnimation(GAUSS_DRAW); Weapons_ViewAnimation(pl, GAUSS_DRAW);
} }
void w_gauss_holster(void) void w_gauss_holster(player pl)
{ {
Weapons_ViewAnimation(GAUSS_HOLSTER); Weapons_ViewAnimation(pl, GAUSS_HOLSTER);
} }
#ifdef SERVER #ifdef SERVER
void w_gauss_fire(int one) void w_gauss_fire(player pl, int one)
{ {
player pl = (player)self;
int iLoop = 6; int iLoop = 6;
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
vector src = Weapons_GetCameraPos(); vector src = Weapons_GetCameraPos(pl);
vector endpos = src + v_forward * 1024; vector endpos = src + v_forward * 1024;
traceline(src, endpos, FALSE, pl); traceline(src, endpos, FALSE, pl);
@ -154,9 +151,8 @@ void w_gauss_fire(int one)
} }
#endif #endif
void w_gauss_primary(void) void w_gauss_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
@ -166,11 +162,11 @@ void w_gauss_primary(void)
return; return;
} }
Weapons_ViewAnimation(GAUSS_FIRE2); Weapons_ViewAnimation(pl, GAUSS_FIRE2);
Weapons_ViewPunchAngle([-2,0,0]); Weapons_ViewPunchAngle(pl, [-2,0,0]);
#ifdef SERVER #ifdef SERVER
w_gauss_fire(1); w_gauss_fire(pl, 1);
FX_GaussBeam(Weapons_GetCameraPos(), input_angles, 0, pl); FX_GaussBeam(Weapons_GetCameraPos(pl), input_angles, 0, pl);
#endif #endif
pl.ammo_uranium -= 2; pl.ammo_uranium -= 2;
@ -184,9 +180,8 @@ void w_gauss_primary(void)
pl.w_idle_next = 2.5f; pl.w_idle_next = 2.5f;
} }
void w_gauss_secondary(void) void w_gauss_secondary(player pl)
{ {
player pl = (player)self;
#ifdef CLIENT #ifdef CLIENT
if (pl.mode_tempstate) if (pl.mode_tempstate)
@ -201,7 +196,7 @@ void w_gauss_secondary(void)
/* Ammo check */ /* Ammo check */
if (pl.ammo_uranium <= 0) { if (pl.ammo_uranium <= 0) {
if (pl.mode_tempstate > 0) { if (pl.mode_tempstate > 0) {
w_gauss_release(); w_gauss_release(pl);
} }
return; return;
} }
@ -216,11 +211,11 @@ void w_gauss_secondary(void)
} }
if (pl.mode_tempstate == 1) { if (pl.mode_tempstate == 1) {
Weapons_ViewAnimation(GAUSS_SPIN); Weapons_ViewAnimation(pl, GAUSS_SPIN);
pl.mode_tempstate = 2; pl.mode_tempstate = 2;
pl.w_idle_next = 0.0f; pl.w_idle_next = 0.0f;
} else if (!pl.mode_tempstate) { } else if (!pl.mode_tempstate) {
Weapons_ViewAnimation(GAUSS_SPINUP); Weapons_ViewAnimation(pl, GAUSS_SPINUP);
#ifdef CLIENT #ifdef CLIENT
sound(pl, CHAN_WEAPON, "ambience/pulsemachine.wav", 2, ATTN_NORM); sound(pl, CHAN_WEAPON, "ambience/pulsemachine.wav", 2, ATTN_NORM);
#endif #endif
@ -228,9 +223,8 @@ void w_gauss_secondary(void)
} }
} }
void w_gauss_release(void) void w_gauss_release(player pl)
{ {
player pl = (player)self;
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
return; return;
} }
@ -241,23 +235,23 @@ void w_gauss_release(void)
if (pl.mode_tempstate == 1) { if (pl.mode_tempstate == 1) {
pl.w_attack_next = 0.0f; pl.w_attack_next = 0.0f;
pl.w_idle_next = 4.0f; pl.w_idle_next = 4.0f;
w_gauss_primary(); w_gauss_primary(pl);
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
return; return;
} else if (pl.mode_tempstate == 2) { } else if (pl.mode_tempstate == 2) {
Weapons_ViewAnimation(GAUSS_FIRE1); Weapons_ViewAnimation(pl, GAUSS_FIRE1);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTGAUSS, 0.43f); Animation_PlayerTop(pl, ANIM_CR_SHOOTGAUSS, 0.43f);
else else
Animation_PlayerTop(pl, ANIM_SHOOTGAUSS, 0.43f); Animation_PlayerTop(pl, ANIM_SHOOTGAUSS, 0.43f);
Weapons_ViewPunchAngle([-5,0,0]); Weapons_ViewPunchAngle(pl, [-5,0,0]);
#ifdef CLIENT #ifdef CLIENT
soundupdate(pl, CHAN_WEAPON, "", -1, ATTN_NORM, 0, 0, 0); soundupdate(pl, CHAN_WEAPON, "", -1, ATTN_NORM, 0, 0, 0);
#else #else
w_gauss_fire(0); w_gauss_fire(pl, 0);
FX_GaussBeam(Weapons_GetCameraPos(), input_angles, 6, pl); FX_GaussBeam(Weapons_GetCameraPos(pl), input_angles, 6, pl);
#endif #endif
pl.w_attack_next = 1.5f; pl.w_attack_next = 1.5f;
pl.w_idle_next = 4.0f; pl.w_idle_next = 4.0f;
@ -268,23 +262,23 @@ void w_gauss_release(void)
int r = floor(pseudorandom() * 3.0f); int r = floor(pseudorandom() * 3.0f);
switch (r) { switch (r) {
case 1: case 1:
Weapons_ViewAnimation(GAUSS_IDLE2); Weapons_ViewAnimation(pl, GAUSS_IDLE2);
pl.w_idle_next = 4.0f; pl.w_idle_next = 4.0f;
break; break;
#ifndef GEARBOX #ifndef GEARBOX
case 2: case 2:
Weapons_ViewAnimation(GAUSS_FIDGET); Weapons_ViewAnimation(pl, GAUSS_FIDGET);
pl.w_idle_next = 3.0f; pl.w_idle_next = 3.0f;
break; break;
#endif #endif
default: default:
Weapons_ViewAnimation(GAUSS_IDLE1); Weapons_ViewAnimation(pl, GAUSS_IDLE1);
pl.w_idle_next = 4.0f; pl.w_idle_next = 4.0f;
break; break;
} }
} }
void w_gauss_crosshair(void) void w_gauss_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
vector cross_pos; vector cross_pos;
@ -319,15 +313,14 @@ void w_gauss_crosshair(void)
#endif #endif
} }
float w_gauss_aimanim(void) float w_gauss_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS; return self.flags & FL_CROUCHING ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS;
} }
void w_gauss_hudpic(int selected, vector pos, float a) void w_gauss_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.ammo_uranium == 0) if (pl.ammo_uranium == 0)
@ -364,9 +357,8 @@ void w_gauss_hudpic(int selected, vector pos, float a)
} }
int int
w_gauss_isempty(void) w_gauss_isempty(player pl)
{ {
player pl = (player)self;
if (pl.ammo_uranium <= 0) if (pl.ammo_uranium <= 0)
return 1; return 1;
@ -375,7 +367,7 @@ w_gauss_isempty(void)
} }
weapontype_t weapontype_t
w_gauss_type(void) w_gauss_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -393,7 +385,7 @@ weapon_t w_gauss =
.secondary = w_gauss_secondary, .secondary = w_gauss_secondary,
.reload = __NULL__, .reload = __NULL__,
.release = w_gauss_release, .release = w_gauss_release,
.crosshair = w_gauss_crosshair, .postdraw = w_gauss_crosshair,
.precache = w_gauss_precache, .precache = w_gauss_precache,
.pickup = w_gauss_pickup, .pickup = w_gauss_pickup,
.updateammo = w_gauss_updateammo, .updateammo = w_gauss_updateammo,

View file

@ -107,7 +107,7 @@ w_glock_wmodel(void)
} }
string string
w_glock_pmodel(void) w_glock_pmodel(player pl)
{ {
return "models/p_9mmhandgun.mdl"; return "models/p_9mmhandgun.mdl";
} }
@ -119,10 +119,9 @@ w_glock_deathmsg(void)
} }
int int
w_glock_pickup(int new, int startammo) w_glock_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (new) { if (new) {
pl.glock_mag = 18; pl.glock_mag = 18;
@ -140,22 +139,21 @@ w_glock_pickup(int new, int startammo)
} }
void void
w_glock_draw(void) w_glock_draw(player pl)
{ {
Weapons_SetModel("models/v_9mmhandgun.mdl"); Weapons_SetModel("models/v_9mmhandgun.mdl");
Weapons_ViewAnimation(GLOCK_DRAW); Weapons_ViewAnimation(pl, GLOCK_DRAW);
} }
void void
w_glock_holster(void) w_glock_holster(player pl)
{ {
Weapons_ViewAnimation(GLOCK_HOLSTER); Weapons_ViewAnimation(pl, GLOCK_HOLSTER);
} }
void void
w_glock_primary(void) w_glock_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -177,12 +175,12 @@ w_glock_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_glock.fire"); Sound_Play(pl, CHAN_WEAPON, "weapon_glock.fire");
#endif #endif
Weapons_ViewPunchAngle([-2,0,0]); Weapons_ViewPunchAngle(pl, [-2,0,0]);
if (pl.glock_mag) { if (pl.glock_mag) {
Weapons_ViewAnimation(GLOCK_SHOOT); Weapons_ViewAnimation(pl, GLOCK_SHOOT);
} else { } else {
Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY); Weapons_ViewAnimation(pl, GLOCK_SHOOT_EMPTY);
} }
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
@ -195,9 +193,8 @@ w_glock_primary(void)
} }
void void
w_glock_secondary(void) w_glock_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0) { if (pl.w_attack_next > 0) {
return; return;
@ -218,12 +215,12 @@ w_glock_secondary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_glock.fire"); Sound_Play(pl, CHAN_WEAPON, "weapon_glock.fire");
#endif #endif
Weapons_ViewPunchAngle([-2,0,0]); Weapons_ViewPunchAngle(pl, [-2,0,0]);
if (pl.glock_mag) { if (pl.glock_mag) {
Weapons_ViewAnimation(GLOCK_SHOOT); Weapons_ViewAnimation(pl, GLOCK_SHOOT);
} else { } else {
Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY); Weapons_ViewAnimation(pl, GLOCK_SHOOT_EMPTY);
} }
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
@ -236,9 +233,8 @@ w_glock_secondary(void)
} }
void void
w_glock_reload(void) w_glock_reload(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -252,9 +248,9 @@ w_glock_reload(void)
} }
if (pl.glock_mag) { if (pl.glock_mag) {
Weapons_ViewAnimation(GLOCK_RELOAD); Weapons_ViewAnimation(pl, GLOCK_RELOAD);
} else { } else {
Weapons_ViewAnimation(GLOCK_RELOAD_EMPTY); Weapons_ViewAnimation(pl, GLOCK_RELOAD_EMPTY);
} }
#ifdef SERVER #ifdef SERVER
@ -272,15 +268,14 @@ w_glock_reload(void)
} }
void void
w_glock_release(void) w_glock_release(player pl)
{ {
player pl = (player)self;
int r; int r;
/* auto-reload if need be */ /* auto-reload if need be */
if (pl.w_attack_next <= 0.0) if (pl.w_attack_next <= 0.0)
if (pl.glock_mag == 0 && pl.ammo_9mm > 0) { if (pl.glock_mag == 0 && pl.ammo_9mm > 0) {
Weapons_Reload(); Weapons_Reload(pl);
return; return;
} }
@ -291,28 +286,28 @@ w_glock_release(void)
r = floor(pseudorandom() * 3.0f); r = floor(pseudorandom() * 3.0f);
switch (r) { switch (r) {
case 1: case 1:
Weapons_ViewAnimation(GLOCK_IDLE2); Weapons_ViewAnimation(pl, GLOCK_IDLE2);
pl.w_idle_next = 2.5f; pl.w_idle_next = 2.5f;
break; break;
case 2: case 2:
Weapons_ViewAnimation(GLOCK_IDLE3); Weapons_ViewAnimation(pl, GLOCK_IDLE3);
pl.w_idle_next = 3.5f; pl.w_idle_next = 3.5f;
break; break;
default: default:
Weapons_ViewAnimation(GLOCK_IDLE1); Weapons_ViewAnimation(pl, GLOCK_IDLE1);
pl.w_idle_next = 3.75f; pl.w_idle_next = 3.75f;
break; break;
} }
} }
float float
w_glock_aimanim(void) w_glock_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND; return self.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND;
} }
void void
w_glock_hud(void) w_glock_hud(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
vector cross_pos; vector cross_pos;
@ -349,10 +344,9 @@ w_glock_hud(void)
} }
void void
w_glock_hudpic(int selected, vector pos, float a) w_glock_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.glock_mag == 0 && pl.ammo_9mm == 0) if (pl.glock_mag == 0 && pl.ammo_9mm == 0)
@ -389,9 +383,8 @@ w_glock_hudpic(int selected, vector pos, float a)
} }
int int
w_glock_isempty(void) w_glock_isempty(player pl)
{ {
player pl = (player)self;
if (pl.glock_mag <= 0 && pl.ammo_9mm <= 0) if (pl.glock_mag <= 0 && pl.ammo_9mm <= 0)
return 1; return 1;
@ -400,7 +393,7 @@ w_glock_isempty(void)
} }
weapontype_t weapontype_t
w_glock_type(void) w_glock_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -418,7 +411,7 @@ weapon_t w_glock =
.secondary = w_glock_secondary, .secondary = w_glock_secondary,
.reload = w_glock_reload, .reload = w_glock_reload,
.release = w_glock_release, .release = w_glock_release,
.crosshair = w_glock_hud, .postdraw = w_glock_hud,
.precache = w_glock_precache, .precache = w_glock_precache,
.pickup = w_glock_pickup, .pickup = w_glock_pickup,
.updateammo = w_glock_updateammo, .updateammo = w_glock_updateammo,

View file

@ -53,7 +53,7 @@ string w_handgrenade_wmodel(void)
{ {
return "models/w_grenade.mdl"; return "models/w_grenade.mdl";
} }
string w_handgrenade_pmodel(void) string w_handgrenade_pmodel(player pl)
{ {
return "models/p_grenade.mdl"; return "models/p_grenade.mdl";
} }
@ -62,10 +62,9 @@ string w_handgrenade_deathmsg(void)
return ""; return "";
} }
int w_handgrenade_pickup(int new, int startammo) int w_handgrenade_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (pl.ammo_handgrenade < MAX_A_HANDGRENADE) { if (pl.ammo_handgrenade < MAX_A_HANDGRENADE) {
pl.ammo_handgrenade = bound(0, pl.ammo_handgrenade + 1, MAX_A_HANDGRENADE); pl.ammo_handgrenade = bound(0, pl.ammo_handgrenade + 1, MAX_A_HANDGRENADE);
@ -78,7 +77,7 @@ int w_handgrenade_pickup(int new, int startammo)
} }
#ifdef SERVER #ifdef SERVER
void w_handgrenade_throw(void) void w_handgrenade_throw(player pl)
{ {
static void WeaponFrag_Throw_Explode(void) static void WeaponFrag_Throw_Explode(void)
{ {
@ -99,7 +98,6 @@ void w_handgrenade_throw(void)
self.frame = 0; self.frame = 0;
} }
player pl = (player)self;
vector vPLAngle = pl.v_angle; vector vPLAngle = pl.v_angle;
if (vPLAngle[0] < 0) { if (vPLAngle[0] < 0) {
vPLAngle[0] = -10 + vPLAngle[0] * ((90 - 10) / 90.0); vPLAngle[0] = -10 + vPLAngle[0] * ((90 - 10) / 90.0);
@ -132,22 +130,20 @@ void w_handgrenade_throw(void)
} }
#endif #endif
void w_handgrenade_draw(void) void w_handgrenade_draw(player pl)
{ {
player pl = (player)self;
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
Weapons_SetModel("models/v_grenade.mdl"); Weapons_SetModel("models/v_grenade.mdl");
Weapons_ViewAnimation(HANDGRENADE_DRAW); Weapons_ViewAnimation(pl, HANDGRENADE_DRAW);
} }
void w_handgrenade_holster(void) void w_handgrenade_holster(player pl)
{ {
} }
void w_handgrenade_primary(void) void w_handgrenade_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
@ -162,14 +158,14 @@ void w_handgrenade_primary(void)
return; return;
} }
Weapons_ViewAnimation(HANDGRENADE_PULLPIN); Weapons_ViewAnimation(pl, HANDGRENADE_PULLPIN);
pl.mode_tempstate = 1; pl.mode_tempstate = 1;
pl.w_attack_next = 0.5f; pl.w_attack_next = 0.5f;
pl.w_idle_next = 0.5f; pl.w_idle_next = 0.5f;
} }
void w_handgrenade_hud(void) void w_handgrenade_hud(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
HUD_DrawAmmo2(); HUD_DrawAmmo2();
@ -178,18 +174,17 @@ void w_handgrenade_hud(void)
#endif #endif
} }
void w_handgrenade_release(void) void w_handgrenade_release(player pl)
{ {
player pl = (player)self;
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
return; return;
} }
if (pl.mode_tempstate == 1) { if (pl.mode_tempstate == 1) {
Weapons_ViewAnimation(HANDGRENADE_THROW1); Weapons_ViewAnimation(pl, HANDGRENADE_THROW1);
#ifdef SERVER #ifdef SERVER
w_handgrenade_throw(); w_handgrenade_throw(pl);
#endif #endif
pl.ammo_handgrenade--; pl.ammo_handgrenade--;
pl.mode_tempstate = 2; pl.mode_tempstate = 2;
@ -201,7 +196,7 @@ void w_handgrenade_release(void)
else else
Animation_PlayerTop(pl, ANIM_SHOOTCROWBAR, 0.5f); Animation_PlayerTop(pl, ANIM_SHOOTCROWBAR, 0.5f);
} else if (pl.mode_tempstate == 2) { } else if (pl.mode_tempstate == 2) {
Weapons_ViewAnimation(HANDGRENADE_DRAW); Weapons_ViewAnimation(pl, HANDGRENADE_DRAW);
#ifdef SERVER #ifdef SERVER
if (!pl.ammo_handgrenade) { if (!pl.ammo_handgrenade) {
Weapons_RemoveItem(pl, WEAPON_HANDGRENADE); Weapons_RemoveItem(pl, WEAPON_HANDGRENADE);
@ -213,26 +208,25 @@ void w_handgrenade_release(void)
} else { } else {
int r = floor(pseudorandom() * 8.0f); int r = floor(pseudorandom() * 8.0f);
if (r == 1) { if (r == 1) {
Weapons_ViewAnimation(HANDGRENADE_FIDGET); Weapons_ViewAnimation(pl, HANDGRENADE_FIDGET);
pl.w_idle_next = 2.5f; pl.w_idle_next = 2.5f;
} else { } else {
Weapons_ViewAnimation(HANDGRENADE_IDLE); Weapons_ViewAnimation(pl, HANDGRENADE_IDLE);
pl.w_idle_next = 3.0f; pl.w_idle_next = 3.0f;
} }
} }
} }
float float
w_handgrenade_aimanim(void) w_handgrenade_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR;
} }
void void
w_handgrenade_hudpic(int selected, vector pos, float a) w_handgrenade_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
if (selected) { if (selected) {
drawsubpic(pos, [170,45], g_hud6_spr, [0,0], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE); drawsubpic(pos, [170,45], g_hud6_spr, [0,0], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE);
@ -245,9 +239,8 @@ w_handgrenade_hudpic(int selected, vector pos, float a)
} }
int int
w_handgrenade_isempty(void) w_handgrenade_isempty(player pl)
{ {
player pl = (player)self;
if (pl.ammo_handgrenade <= 0) if (pl.ammo_handgrenade <= 0)
return 1; return 1;
@ -256,7 +249,7 @@ w_handgrenade_isempty(void)
} }
weapontype_t weapontype_t
w_handgrenade_type(void) w_handgrenade_type(player pl)
{ {
return WPNTYPE_THROW; return WPNTYPE_THROW;
} }
@ -274,7 +267,7 @@ weapon_t w_handgrenade =
.secondary = __NULL__, .secondary = __NULL__,
.reload = __NULL__, .reload = __NULL__,
.release = w_handgrenade_release, .release = w_handgrenade_release,
.crosshair = w_handgrenade_hud, .postdraw = w_handgrenade_hud,
.precache = w_handgrenade_precache, .precache = w_handgrenade_precache,
.pickup = w_handgrenade_pickup, .pickup = w_handgrenade_pickup,
.updateammo = w_handgrenade_updateammo, .updateammo = w_handgrenade_updateammo,

View file

@ -49,10 +49,9 @@ w_hornetgun_precache(void)
} }
int int
w_hornetgun_pickup(int new, int startammo) w_hornetgun_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
/* only pick it up once */ /* only pick it up once */
if (new) { if (new) {
@ -72,7 +71,7 @@ string w_hornetgun_wmodel(void)
{ {
return "models/w_hgun.mdl"; return "models/w_hgun.mdl";
} }
string w_hornetgun_pmodel(void) string w_hornetgun_pmodel(player pl)
{ {
return "models/p_hgun.mdl"; return "models/p_hgun.mdl";
} }
@ -82,21 +81,21 @@ string w_hornetgun_deathmsg(void)
} }
void void
w_hornetgun_draw(void) w_hornetgun_draw(player pl)
{ {
Weapons_SetModel("models/v_hgun.mdl"); Weapons_SetModel("models/v_hgun.mdl");
Weapons_ViewAnimation(HORNETGUN_DRAW); Weapons_ViewAnimation(pl, HORNETGUN_DRAW);
} }
void void
w_hornetgun_holster(void) w_hornetgun_holster(player pl)
{ {
} }
#ifdef SERVER #ifdef SERVER
void void
w_hornetgun_shoothornet(void) w_hornetgun_shoothornet(player pl)
{ {
static void Hornet_Touch(void) { static void Hornet_Touch(void) {
if (other.takedamage == DAMAGE_YES) { if (other.takedamage == DAMAGE_YES) {
@ -108,10 +107,10 @@ w_hornetgun_shoothornet(void)
remove(self); remove(self);
} }
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
entity bolt = spawn(); entity bolt = spawn();
setmodel(bolt, "models/hornet.mdl"); setmodel(bolt, "models/hornet.mdl");
setorigin(bolt, Weapons_GetCameraPos() + (v_forward * 16) + (v_up * -8)); setorigin(bolt, Weapons_GetCameraPos(pl) + (v_forward * 16) + (v_up * -8));
bolt.owner = self; bolt.owner = self;
bolt.velocity = v_forward * 1000; bolt.velocity = v_forward * 1000;
bolt.movetype = MOVETYPE_FLY; bolt.movetype = MOVETYPE_FLY;
@ -126,9 +125,8 @@ w_hornetgun_shoothornet(void)
#endif #endif
void void
w_hornetgun_release(void) w_hornetgun_release(player pl)
{ {
player pl = (player)self;
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
return; return;
@ -150,40 +148,39 @@ w_hornetgun_release(void)
r = floor(pseudorandom() * 3.0f); r = floor(pseudorandom() * 3.0f);
switch (r) { switch (r) {
case 1: case 1:
Weapons_ViewAnimation(HORNETGUN_FIDGET1); Weapons_ViewAnimation(pl, HORNETGUN_FIDGET1);
pl.w_idle_next = 2.5f; pl.w_idle_next = 2.5f;
break; break;
case 2: case 2:
Weapons_ViewAnimation(HORNETGUN_FIDGET2); Weapons_ViewAnimation(pl, HORNETGUN_FIDGET2);
pl.w_idle_next = 2.1875f; pl.w_idle_next = 2.1875f;
break; break;
default: default:
Weapons_ViewAnimation(HORNETGUN_IDLE); Weapons_ViewAnimation(pl, HORNETGUN_IDLE);
pl.w_idle_next = 1.875f; pl.w_idle_next = 1.875f;
} }
} }
void void
w_hornetgun_primary(void) w_hornetgun_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
/* Ammo check */ /* Ammo check */
if (pl.ammo_hornet <= 0) { if (pl.ammo_hornet <= 0) {
w_hornetgun_release(); w_hornetgun_release(pl);
return; return;
} }
#ifdef SERVER #ifdef SERVER
w_hornetgun_shoothornet(); w_hornetgun_shoothornet(pl);
Sound_Play(pl, CHAN_WEAPON, "weapon_hornetgun.fire"); Sound_Play(pl, CHAN_WEAPON, "weapon_hornetgun.fire");
#endif #endif
pl.ammo_hornet--; pl.ammo_hornet--;
Weapons_ViewAnimation(HORNETGUN_SHOOT); Weapons_ViewAnimation(pl, HORNETGUN_SHOOT);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTHIVE, 0.43f); Animation_PlayerTop(pl, ANIM_CR_SHOOTHIVE, 0.43f);
@ -195,26 +192,25 @@ w_hornetgun_primary(void)
} }
void void
w_hornetgun_secondary(void) w_hornetgun_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
return; return;
} }
/* Ammo check */ /* Ammo check */
if (pl.ammo_hornet <= 0) { if (pl.ammo_hornet <= 0) {
w_hornetgun_release(); w_hornetgun_release(pl);
return; return;
} }
#ifdef SERVER #ifdef SERVER
w_hornetgun_shoothornet(); w_hornetgun_shoothornet(pl);
Sound_Play(pl, CHAN_WEAPON, "weapon_hornetgun.fire"); Sound_Play(pl, CHAN_WEAPON, "weapon_hornetgun.fire");
#endif #endif
pl.ammo_hornet--; pl.ammo_hornet--;
Weapons_ViewAnimation(HORNETGUN_SHOOT); Weapons_ViewAnimation(pl, HORNETGUN_SHOOT);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTHIVE, 0.43f); Animation_PlayerTop(pl, ANIM_CR_SHOOTHIVE, 0.43f);
@ -226,7 +222,7 @@ w_hornetgun_secondary(void)
} }
void void
w_hornetgun_crosshair(void) w_hornetgun_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
vector cross_pos; vector cross_pos;
@ -262,16 +258,15 @@ w_hornetgun_crosshair(void)
} }
float float
w_hornetgun_aimanim(void) w_hornetgun_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMHIVE : ANIM_AIMHIVE; return self.flags & FL_CROUCHING ? ANIM_CR_AIMHIVE : ANIM_AIMHIVE;
} }
void void
w_hornetgun_hudpic(int selected, vector pos, float a) w_hornetgun_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
if (selected) { if (selected) {
drawsubpic( drawsubpic(
@ -302,13 +297,13 @@ w_hornetgun_hudpic(int selected, vector pos, float a)
} }
int int
w_hornetgun_isempty(void) w_hornetgun_isempty(player pl)
{ {
return 0; return 0;
} }
weapontype_t weapontype_t
w_hornetgun_type(void) w_hornetgun_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -326,7 +321,7 @@ weapon_t w_hornetgun =
.secondary = w_hornetgun_secondary, .secondary = w_hornetgun_secondary,
.reload = __NULL__, .reload = __NULL__,
.release = w_hornetgun_release, .release = w_hornetgun_release,
.crosshair = w_hornetgun_crosshair, .postdraw = w_hornetgun_crosshair,
.precache = w_hornetgun_precache, .precache = w_hornetgun_precache,
.pickup = w_hornetgun_pickup, .pickup = w_hornetgun_pickup,
.updateammo = w_hornetgun_updateammo, .updateammo = w_hornetgun_updateammo,

View file

@ -99,10 +99,9 @@ w_mp5_precache(void)
} }
int int
w_mp5_pickup(int new, int startammo) w_mp5_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (new) { if (new) {
pl.mp5_mag = 25; pl.mp5_mag = 25;
@ -132,7 +131,7 @@ w_mp5_wmodel(void)
} }
string string
w_mp5_pmodel(void) w_mp5_pmodel(player pl)
{ {
return "models/p_9mmar.mdl"; return "models/p_9mmar.mdl";
} }
@ -144,22 +143,21 @@ w_mp5_deathmsg(void)
} }
void void
w_mp5_draw(void) w_mp5_draw(player pl)
{ {
Weapons_SetModel("models/v_9mmar.mdl"); Weapons_SetModel("models/v_9mmar.mdl");
Weapons_ViewAnimation(MP5_DRAW); Weapons_ViewAnimation(pl, MP5_DRAW);
} }
void void
w_mp5_holster(void) w_mp5_holster(player pl)
{ {
Weapons_ViewAnimation(MP5_DRAW); Weapons_ViewAnimation(pl, MP5_DRAW);
} }
void void
w_mp5_primary(void) w_mp5_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -175,12 +173,12 @@ w_mp5_primary(void)
/* Actual firing */ /* Actual firing */
int r = (float)input_sequence % 2; int r = (float)input_sequence % 2;
if (r) { if (r) {
Weapons_ViewAnimation(MP5_FIRE1); Weapons_ViewAnimation(pl, MP5_FIRE1);
} else { } else {
Weapons_ViewAnimation(MP5_FIRE2); Weapons_ViewAnimation(pl, MP5_FIRE2);
} }
Weapons_ViewPunchAngle([-2,0,0]); Weapons_ViewPunchAngle(pl, [-2,0,0]);
#ifdef CLIENT #ifdef CLIENT
View_SetMuzzleflash(MUZZLE_RIFLE); View_SetMuzzleflash(MUZZLE_RIFLE);
@ -188,9 +186,9 @@ w_mp5_primary(void)
#else #else
/* singleplayer is more accurate */ /* singleplayer is more accurate */
if (cvar("sv_playerslots") == 1) { if (cvar("sv_playerslots") == 1) {
TraceAttack_FireBullets(1, Weapons_GetCameraPos(), Skill_GetValue("plr_9mmAR_bullet", 5), [0.025,0.025], WEAPON_MP5); TraceAttack_FireBullets(1, Weapons_GetCameraPos(pl), Skill_GetValue("plr_9mmAR_bullet", 5), [0.025,0.025], WEAPON_MP5);
} else { } else {
TraceAttack_FireBullets(1, Weapons_GetCameraPos(), Skill_GetValue("plr_9mmAR_bullet", 5), [0.05,0.05], WEAPON_MP5); TraceAttack_FireBullets(1, Weapons_GetCameraPos(pl), Skill_GetValue("plr_9mmAR_bullet", 5), [0.05,0.05], WEAPON_MP5);
} }
Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.shoot"); Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.shoot");
@ -206,9 +204,8 @@ w_mp5_primary(void)
} }
void void
w_mp5_secondary(void) w_mp5_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -235,10 +232,10 @@ w_mp5_secondary(void)
remove(self); remove(self);
} }
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
entity gren = spawn(); entity gren = spawn();
setmodel(gren, "models/grenade.mdl"); setmodel(gren, "models/grenade.mdl");
setorigin(gren, Weapons_GetCameraPos() + (v_forward * 16)); setorigin(gren, Weapons_GetCameraPos(pl) + (v_forward * 16));
gren.owner = self; gren.owner = self;
gren.velocity = v_forward * 800; gren.velocity = v_forward * 800;
gren.angles = vectoangles(gren.velocity); gren.angles = vectoangles(gren.velocity);
@ -252,8 +249,8 @@ w_mp5_secondary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.gl"); Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.gl");
#endif #endif
Weapons_ViewPunchAngle([-10,0,0]); Weapons_ViewPunchAngle(pl, [-10,0,0]);
Weapons_ViewAnimation(MP5_GRENADE); Weapons_ViewAnimation(pl, MP5_GRENADE);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTMP5, 0.45f); Animation_PlayerTop(pl, ANIM_CR_SHOOTMP5, 0.45f);
@ -265,9 +262,8 @@ w_mp5_secondary(void)
} }
void void
w_mp5_reload(void) w_mp5_reload(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
return; return;
} }
@ -280,7 +276,7 @@ w_mp5_reload(void)
return; return;
} }
Weapons_ViewAnimation(MP5_RELOAD); Weapons_ViewAnimation(pl, MP5_RELOAD);
#ifdef SERVER #ifdef SERVER
static void w_mp5_reload_done(void) { static void w_mp5_reload_done(void) {
@ -297,14 +293,13 @@ w_mp5_reload(void)
} }
void void
w_mp5_release(void) w_mp5_release(player pl)
{ {
player pl = (player)self;
/* auto-reload if need be */ /* auto-reload if need be */
if (pl.w_attack_next <= 0.0) if (pl.w_attack_next <= 0.0)
if (pl.mp5_mag == 0 && pl.ammo_9mm > 0) { if (pl.mp5_mag == 0 && pl.ammo_9mm > 0) {
Weapons_Reload(); Weapons_Reload(pl);
return; return;
} }
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
@ -313,16 +308,16 @@ w_mp5_release(void)
int r = floor(pseudorandom() * 3.0f); int r = floor(pseudorandom() * 3.0f);
if (r == 1) { if (r == 1) {
Weapons_ViewAnimation(MP5_IDLE1); Weapons_ViewAnimation(pl, MP5_IDLE1);
} else { } else {
Weapons_ViewAnimation(MP5_IDLE2); Weapons_ViewAnimation(pl, MP5_IDLE2);
} }
pl.w_idle_next = 15.0f; pl.w_idle_next = 15.0f;
} }
void void
w_mp5_crosshair(void) w_mp5_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
vector cross_pos; vector cross_pos;
@ -372,16 +367,15 @@ w_mp5_crosshair(void)
} }
float float
w_mp5_aimanim(void) w_mp5_aimanim(player pl)
{ {
return self.flags & ANIM_CR_AIMMP5 ? ANIM_CR_AIMCROWBAR : ANIM_AIMMP5; return self.flags & ANIM_CR_AIMMP5 ? ANIM_CR_AIMCROWBAR : ANIM_AIMMP5;
} }
void void
w_mp5_hudpic(int selected, vector pos, float a) w_mp5_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.mp5_mag == 0 && pl.ammo_9mm == 0 && pl.ammo_m203_grenade == 0) if (pl.mp5_mag == 0 && pl.ammo_9mm == 0 && pl.ammo_m203_grenade == 0)
@ -419,9 +413,8 @@ w_mp5_hudpic(int selected, vector pos, float a)
} }
int int
w_mp5_isempty(void) w_mp5_isempty(player pl)
{ {
player pl = (player)self;
if (pl.mp5_mag <= 0 && pl.ammo_9mm <= 0 && pl.ammo_m203_grenade <= 0) if (pl.mp5_mag <= 0 && pl.ammo_9mm <= 0 && pl.ammo_m203_grenade <= 0)
return 1; return 1;
@ -430,7 +423,7 @@ w_mp5_isempty(void)
} }
weapontype_t weapontype_t
w_mp5_type(void) w_mp5_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -448,7 +441,7 @@ weapon_t w_mp5 =
.secondary = w_mp5_secondary, .secondary = w_mp5_secondary,
.reload = w_mp5_reload, .reload = w_mp5_reload,
.release = w_mp5_release, .release = w_mp5_release,
.crosshair = w_mp5_crosshair, .postdraw = w_mp5_crosshair,
.precache = w_mp5_precache, .precache = w_mp5_precache,
.pickup = w_mp5_pickup, .pickup = w_mp5_pickup,
.updateammo = w_mp5_updateammo, .updateammo = w_mp5_updateammo,

View file

@ -60,10 +60,9 @@ w_python_precache(void)
} }
int int
w_python_pickup(int new, int startammo) w_python_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (new) { if (new) {
pl.python_mag = 6; pl.python_mag = 6;
@ -93,7 +92,7 @@ w_python_wmodel(void)
} }
string string
w_python_pmodel(void) w_python_pmodel(player pl)
{ {
return "models/p_357.mdl"; return "models/p_357.mdl";
} }
@ -105,7 +104,7 @@ w_python_deathmsg(void)
} }
void void
w_python_draw(void) w_python_draw(player pl)
{ {
Weapons_SetModel("models/v_357.mdl"); Weapons_SetModel("models/v_357.mdl");
@ -116,19 +115,18 @@ w_python_draw(void)
Weapons_SetGeomset("geomset 4 2\n"); Weapons_SetGeomset("geomset 4 2\n");
} }
Weapons_ViewAnimation(PYTHON_DRAW); Weapons_ViewAnimation(pl, PYTHON_DRAW);
} }
void void
w_python_holster(void) w_python_holster(player pl)
{ {
Weapons_ViewAnimation(PYTHON_HOLSTER); Weapons_ViewAnimation(pl, PYTHON_HOLSTER);
} }
void void
w_python_primary(void) w_python_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -149,8 +147,8 @@ w_python_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_357.shoot"); Sound_Play(pl, CHAN_WEAPON, "weapon_357.shoot");
#endif #endif
Weapons_ViewPunchAngle([-10,0,0]); Weapons_ViewPunchAngle(pl, [-10,0,0]);
Weapons_ViewAnimation(PYTHON_FIRE1); Weapons_ViewAnimation(pl, PYTHON_FIRE1);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTPYTHON, 0.43f); Animation_PlayerTop(pl, ANIM_CR_SHOOTPYTHON, 0.43f);
@ -162,9 +160,8 @@ w_python_primary(void)
} }
void void
w_python_secondary(void) w_python_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -186,9 +183,8 @@ w_python_secondary(void)
} }
void void
w_python_reload(void) w_python_reload(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -203,7 +199,7 @@ w_python_reload(void)
} }
/* Audio-Visual bit */ /* Audio-Visual bit */
Weapons_ViewAnimation(PYTHON_RELOAD); Weapons_ViewAnimation(pl, PYTHON_RELOAD);
#ifdef SERVER #ifdef SERVER
static void w_python_reload_done(void) { static void w_python_reload_done(void) {
@ -221,14 +217,13 @@ w_python_reload(void)
} }
void void
w_python_release(void) w_python_release(player pl)
{ {
player pl = (player)self;
/* auto-reload if need be */ /* auto-reload if need be */
if (pl.w_attack_next <= 0.0) if (pl.w_attack_next <= 0.0)
if (pl.python_mag == 0 && pl.ammo_357 > 0) { if (pl.python_mag == 0 && pl.ammo_357 > 0) {
Weapons_Reload(); Weapons_Reload(pl);
return; return;
} }
@ -240,26 +235,26 @@ w_python_release(void)
switch (r) { switch (r) {
case 1: case 1:
Weapons_ViewAnimation(PYTHON_IDLE1); Weapons_ViewAnimation(pl, PYTHON_IDLE1);
pl.w_idle_next = 2.33f; pl.w_idle_next = 2.33f;
break; break;
case 2: case 2:
Weapons_ViewAnimation(PYTHON_FIDGET); Weapons_ViewAnimation(pl, PYTHON_FIDGET);
pl.w_idle_next = 5.66f; pl.w_idle_next = 5.66f;
break; break;
case 3: case 3:
Weapons_ViewAnimation(PYTHON_IDLE2); Weapons_ViewAnimation(pl, PYTHON_IDLE2);
pl.w_idle_next = 2.0f; pl.w_idle_next = 2.0f;
break; break;
default: default:
Weapons_ViewAnimation(PYTHON_IDLE3); Weapons_ViewAnimation(pl, PYTHON_IDLE3);
pl.w_idle_next = 2.93f; pl.w_idle_next = 2.93f;
break; break;
} }
} }
void void
w_python_crosshair(void) w_python_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
vector cross_pos; vector cross_pos;
@ -295,16 +290,15 @@ w_python_crosshair(void)
} }
float float
w_python_aimanim(void) w_python_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMPYTHON : ANIM_AIMPYTHON; return self.flags & FL_CROUCHING ? ANIM_CR_AIMPYTHON : ANIM_AIMPYTHON;
} }
void void
w_python_hudpic(int selected, vector pos, float a) w_python_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.python_mag == 0 && pl.ammo_357 == 0) if (pl.python_mag == 0 && pl.ammo_357 == 0)
@ -341,9 +335,8 @@ w_python_hudpic(int selected, vector pos, float a)
} }
int int
w_python_isempty(void) w_python_isempty(player pl)
{ {
player pl = (player)self;
if (pl.python_mag <= 0 && pl.ammo_357 <= 0) if (pl.python_mag <= 0 && pl.ammo_357 <= 0)
return 1; return 1;
@ -352,7 +345,7 @@ w_python_isempty(void)
} }
weapontype_t weapontype_t
w_python_type(void) w_python_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -370,7 +363,7 @@ weapon_t w_python =
.secondary = w_python_secondary, .secondary = w_python_secondary,
.reload = w_python_reload, .reload = w_python_reload,
.release = w_python_release, .release = w_python_release,
.crosshair = w_python_crosshair, .postdraw = w_python_crosshair,
.precache = w_python_precache, .precache = w_python_precache,
.pickup = w_python_pickup, .pickup = w_python_pickup,
.updateammo = w_python_updateammo, .updateammo = w_python_updateammo,

View file

@ -58,7 +58,7 @@ string w_rpg_wmodel(void)
{ {
return "models/w_rpg.mdl"; return "models/w_rpg.mdl";
} }
string w_rpg_pmodel(void) string w_rpg_pmodel(player pl)
{ {
return "models/p_rpg.mdl"; return "models/p_rpg.mdl";
} }
@ -67,10 +67,9 @@ string w_rpg_deathmsg(void)
return ""; return "";
} }
int w_rpg_pickup(int new, int startammo) int w_rpg_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (new) { if (new) {
pl.rpg_mag = 1; pl.rpg_mag = 1;
@ -87,20 +86,19 @@ int w_rpg_pickup(int new, int startammo)
return (1); return (1);
} }
void w_rpg_draw(void) void w_rpg_draw(player pl)
{ {
Weapons_SetModel("models/v_rpg.mdl"); Weapons_SetModel("models/v_rpg.mdl");
Weapons_ViewAnimation(RPG_DRAW1); Weapons_ViewAnimation(pl, RPG_DRAW1);
} }
void w_rpg_holster(void) void w_rpg_holster(player pl)
{ {
} }
void w_rpg_primary(void) void w_rpg_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
@ -134,10 +132,10 @@ void w_rpg_primary(void)
self.nextthink = time; self.nextthink = time;
} }
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
entity rocket = spawn(); entity rocket = spawn();
setmodel(rocket, "models/rpgrocket.mdl"); setmodel(rocket, "models/rpgrocket.mdl");
setorigin(rocket, Weapons_GetCameraPos() + (v_forward * 16)); setorigin(rocket, Weapons_GetCameraPos(pl) + (v_forward * 16));
rocket.owner = self; rocket.owner = self;
rocket.movetype = MOVETYPE_FLY; rocket.movetype = MOVETYPE_FLY;
rocket.solid = SOLID_BBOX; rocket.solid = SOLID_BBOX;
@ -159,8 +157,8 @@ void w_rpg_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_rpg.shoot"); Sound_Play(pl, CHAN_WEAPON, "weapon_rpg.shoot");
#endif #endif
Weapons_ViewAnimation(RPG_FIRE2); Weapons_ViewAnimation(pl, RPG_FIRE2);
Weapons_ViewPunchAngle([-10,0,0]); Weapons_ViewPunchAngle(pl, [-10,0,0]);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTRPG, 0.43f); Animation_PlayerTop(pl, ANIM_CR_SHOOTRPG, 0.43f);
@ -171,9 +169,8 @@ void w_rpg_primary(void)
pl.w_idle_next = 2.5f; pl.w_idle_next = 2.5f;
} }
void w_rpg_reload(void) void w_rpg_reload(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0) { if (pl.w_attack_next > 0) {
return; return;
@ -187,7 +184,7 @@ void w_rpg_reload(void)
return; return;
} }
Weapons_ViewAnimation(RPG_RELOAD); Weapons_ViewAnimation(pl, RPG_RELOAD);
/* Audio-Visual Bit */ /* Audio-Visual Bit */
#ifdef SERVER #ifdef SERVER
@ -204,14 +201,13 @@ void w_rpg_reload(void)
pl.w_idle_next = 10.0f; pl.w_idle_next = 10.0f;
} }
void w_rpg_release(void) void w_rpg_release(player pl)
{ {
player pl = (player)self;
/* auto-reload if need be */ /* auto-reload if need be */
if (pl.w_attack_next <= 0.0) if (pl.w_attack_next <= 0.0)
if (pl.rpg_mag == 0 && pl.ammo_rocket > 0) { if (pl.rpg_mag == 0 && pl.ammo_rocket > 0) {
Weapons_Reload(); Weapons_Reload(pl);
return; return;
} }
@ -223,22 +219,21 @@ void w_rpg_release(void)
if (pl.rpg_mag > 0) { if (pl.rpg_mag > 0) {
if (r == 1) { if (r == 1) {
Weapons_ViewAnimation(RPG_FIDGET); Weapons_ViewAnimation(pl, RPG_FIDGET);
} else { } else {
Weapons_ViewAnimation(RPG_IDLE); Weapons_ViewAnimation(pl, RPG_IDLE);
} }
} else { } else {
if (r == 1) { if (r == 1) {
Weapons_ViewAnimation(RPG_FIDGET_UL); Weapons_ViewAnimation(pl, RPG_FIDGET_UL);
} else { } else {
Weapons_ViewAnimation(RPG_IDLE_UL); Weapons_ViewAnimation(pl, RPG_IDLE_UL);
} }
} }
} }
void w_rpg_secondary(void) void w_rpg_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
@ -248,18 +243,17 @@ void w_rpg_secondary(void)
pl.ammo_rpg_state = 1 - pl.ammo_rpg_state; pl.ammo_rpg_state = 1 - pl.ammo_rpg_state;
pl.w_attack_next = 0.25f; pl.w_attack_next = 0.25f;
w_rpg_release(); w_rpg_release(pl);
} }
float w_rpg_aimanim(void) float w_rpg_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMRPG : ANIM_AIMRPG; return self.flags & FL_CROUCHING ? ANIM_CR_AIMRPG : ANIM_AIMRPG;
} }
void w_rpg_hudpic(int selected, vector pos, float a) void w_rpg_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.rpg_mag == 0 && pl.ammo_rocket == 0) if (pl.rpg_mag == 0 && pl.ammo_rocket == 0)
@ -277,10 +271,9 @@ void w_rpg_hudpic(int selected, vector pos, float a)
#endif #endif
} }
void w_rpg_hud(void) void w_rpg_hud(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector cross_pos; vector cross_pos;
vector aicon_pos; vector aicon_pos;
@ -288,7 +281,7 @@ void w_rpg_hud(void)
if (pl.ammo_rpg_state == 1) { if (pl.ammo_rpg_state == 1) {
float lerp; float lerp;
vector jitter; vector jitter;
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
vector src = pl.origin + pl.view_ofs; vector src = pl.origin + pl.view_ofs;
traceline(src, src + (v_forward * 256), FALSE, pl); traceline(src, src + (v_forward * 256), FALSE, pl);
lerp = Math_Lerp(18,6, trace_fraction); lerp = Math_Lerp(18,6, trace_fraction);
@ -339,9 +332,8 @@ void w_rpg_hud(void)
} }
int int
w_rpg_isempty(void) w_rpg_isempty(player pl)
{ {
player pl = (player)self;
if (pl.rpg_mag <= 0 && pl.ammo_rocket <= 0) if (pl.rpg_mag <= 0 && pl.ammo_rocket <= 0)
return 1; return 1;
@ -350,7 +342,7 @@ w_rpg_isempty(void)
} }
weapontype_t weapontype_t
w_rpg_type(void) w_rpg_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -368,7 +360,7 @@ weapon_t w_rpg =
.secondary = w_rpg_secondary, .secondary = w_rpg_secondary,
.reload = w_rpg_reload, .reload = w_rpg_reload,
.release = w_rpg_release, .release = w_rpg_release,
.crosshair = w_rpg_hud, .postdraw = w_rpg_hud,
.precache = w_rpg_precache, .precache = w_rpg_precache,
.pickup = w_rpg_pickup, .pickup = w_rpg_pickup,
.updateammo = w_rpg_updateammo, .updateammo = w_rpg_updateammo,

View file

@ -97,7 +97,7 @@ w_satchel_wmodel(void)
} }
string string
w_satchel_pmodel(void) w_satchel_pmodel(player pl)
{ {
return "models/p_satchel.mdl"; return "models/p_satchel.mdl";
} }
@ -122,10 +122,9 @@ w_satchel_precache(void)
} }
int int
w_satchel_pickup(int new, int startammo) w_satchel_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (pl.ammo_satchel < MAX_A_SATCHEL) { if (pl.ammo_satchel < MAX_A_SATCHEL) {
pl.ammo_satchel = bound(0, pl.ammo_satchel + 1, MAX_A_SATCHEL); pl.ammo_satchel = bound(0, pl.ammo_satchel + 1, MAX_A_SATCHEL);
@ -138,29 +137,27 @@ w_satchel_pickup(int new, int startammo)
} }
void void
w_satchel_draw(void) w_satchel_draw(player pl)
{ {
player pl = (player)self;
if (pl.satchel_chg > 0) { if (pl.satchel_chg > 0) {
Weapons_SetModel("models/v_satchel_radio.mdl"); Weapons_SetModel("models/v_satchel_radio.mdl");
Weapons_ViewAnimation(RADIO_DRAW); Weapons_ViewAnimation(pl, RADIO_DRAW);
} else { } else {
Weapons_SetModel("models/v_satchel.mdl"); Weapons_SetModel("models/v_satchel.mdl");
Weapons_ViewAnimation(SATCHEL_DRAW); Weapons_ViewAnimation(pl, SATCHEL_DRAW);
} }
} }
void void
w_satchel_holster(void) w_satchel_holster(player pl)
{ {
} }
void void
w_satchel_primary(void) w_satchel_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
return; return;
@ -172,9 +169,9 @@ w_satchel_primary(void)
} }
if (pl.satchel_chg <= 0) { if (pl.satchel_chg <= 0) {
Weapons_ViewAnimation(RADIO_DRAW); Weapons_ViewAnimation(pl, RADIO_DRAW);
} else { } else {
Weapons_ViewAnimation(RADIO_USE); Weapons_ViewAnimation(pl, RADIO_USE);
} }
#ifdef SERVER #ifdef SERVER
@ -182,7 +179,7 @@ w_satchel_primary(void)
if (!pl.satchel_chg) { if (!pl.satchel_chg) {
vector throw; vector throw;
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
throw = pl.velocity + (v_forward * 274); throw = pl.velocity + (v_forward * 274);
s_satchel_drop(self, pl.origin, throw); s_satchel_drop(self, pl.origin, throw);
pl.satchel_chg++; pl.satchel_chg++;
@ -219,9 +216,8 @@ w_satchel_primary(void)
} }
void void
w_satchel_secondary(void) w_satchel_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
return; return;
@ -233,11 +229,11 @@ w_satchel_secondary(void)
} }
Weapons_SetModel("models/v_satchel_radio.mdl"); Weapons_SetModel("models/v_satchel_radio.mdl");
Weapons_ViewAnimation(RADIO_DRAW); Weapons_ViewAnimation(pl, RADIO_DRAW);
#ifdef SERVER #ifdef SERVER
vector throw; vector throw;
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
throw = pl.velocity + (v_forward * 274); throw = pl.velocity + (v_forward * 274);
s_satchel_drop(self, pl.origin, throw); s_satchel_drop(self, pl.origin, throw);
#endif #endif
@ -255,36 +251,35 @@ w_satchel_secondary(void)
} }
void void
w_satchel_reload(void) w_satchel_reload(player pl)
{ {
} }
void void
w_satchel_release(void) w_satchel_release(player pl)
{ {
player pl = (player)self;
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
return; return;
} }
if (pl.satchel_chg <= 0) { if (pl.satchel_chg <= 0) {
Weapons_ViewAnimation(SATCHEL_FIDGET); Weapons_ViewAnimation(pl, SATCHEL_FIDGET);
} else { } else {
Weapons_ViewAnimation(RADIO_FIDGET); Weapons_ViewAnimation(pl, RADIO_FIDGET);
} }
pl.w_idle_next = 15.0f; pl.w_idle_next = 15.0f;
} }
float float
w_satchel_aimanim(void) w_satchel_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK; return self.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK;
} }
void void
w_satchel_hud(void) w_satchel_hud(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
HUD_DrawAmmo2(); HUD_DrawAmmo2();
@ -294,10 +289,9 @@ w_satchel_hud(void)
} }
void void
w_satchel_hudpic(int selected, vector pos, float a) w_satchel_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
if (selected) { if (selected) {
drawsubpic(pos, [170,45], g_hud6_spr, [0,45/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE); drawsubpic(pos, [170,45], g_hud6_spr, [0,45/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE);
@ -310,9 +304,8 @@ w_satchel_hudpic(int selected, vector pos, float a)
} }
int int
w_satchel_isempty(void) w_satchel_isempty(player pl)
{ {
player pl = (player)self;
if (pl.satchel_chg <= 0) if (pl.satchel_chg <= 0)
return 1; return 1;
@ -321,7 +314,7 @@ w_satchel_isempty(void)
} }
weapontype_t weapontype_t
w_satchel_type(void) w_satchel_type(player pl)
{ {
return WPNTYPE_THROW; return WPNTYPE_THROW;
} }
@ -339,7 +332,7 @@ weapon_t w_satchel =
.secondary = w_satchel_secondary, .secondary = w_satchel_secondary,
.reload = w_satchel_reload, .reload = w_satchel_reload,
.release = w_satchel_release, .release = w_satchel_release,
.crosshair = w_satchel_hud, .postdraw = w_satchel_hud,
.precache = w_satchel_precache, .precache = w_satchel_precache,
.pickup = w_satchel_pickup, .pickup = w_satchel_pickup,
.updateammo = w_satchel_updateammo, .updateammo = w_satchel_updateammo,

View file

@ -108,7 +108,7 @@ w_shotgun_wmodel(void)
} }
string string
w_shotgun_pmodel(void) w_shotgun_pmodel(player pl)
{ {
return "models/p_shotgun.mdl"; return "models/p_shotgun.mdl";
} }
@ -120,10 +120,9 @@ w_shotgun_deathmsg(void)
} }
int int
w_shotgun_pickup(int new, int startammo) w_shotgun_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (new) { if (new) {
pl.shotgun_mag = 8; pl.shotgun_mag = 8;
@ -141,46 +140,44 @@ w_shotgun_pickup(int new, int startammo)
} }
void void
w_shotgun_draw(void) w_shotgun_draw(player pl)
{ {
player pl = (player)self;
pl.mode_tempstate = 0; pl.mode_tempstate = 0;
Weapons_SetModel("models/v_shotgun.mdl"); Weapons_SetModel("models/v_shotgun.mdl");
Weapons_ViewAnimation(SHOTGUN_DRAW); Weapons_ViewAnimation(pl, SHOTGUN_DRAW);
} }
void void
w_shotgun_holster(void) w_shotgun_holster(player pl)
{ {
Weapons_ViewAnimation(SHOTGUN_HOLSTER); Weapons_ViewAnimation(pl, SHOTGUN_HOLSTER);
} }
void w_shotgun_release(void); void w_shotgun_release(player pl);
void void
w_shotgun_primary(void) w_shotgun_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} }
/* interrupt reloading if no longer empty */ /* interrupt reloading if no longer empty */
if (pl.mode_tempstate == SHOTTY_RELOAD && pl.shotgun_mag >= 1) { if (pl.mode_tempstate == SHOTTY_RELOAD && pl.shotgun_mag >= 1) {
pl.mode_tempstate = SHOTTY_RELOAD_END; pl.mode_tempstate = SHOTTY_RELOAD_END;
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} else if (pl.mode_tempstate > SHOTTY_IDLE) { } else if (pl.mode_tempstate > SHOTTY_IDLE) {
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} }
/* Ammo check */ /* Ammo check */
if (pl.shotgun_mag <= 0) { if (pl.shotgun_mag <= 0) {
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} }
@ -197,8 +194,8 @@ w_shotgun_primary(void)
View_AddEvent(w_shotgun_ejectshell, 0.5f); View_AddEvent(w_shotgun_ejectshell, 0.5f);
#endif #endif
Weapons_ViewAnimation(SHOTGUN_FIRE1); Weapons_ViewAnimation(pl, SHOTGUN_FIRE1);
Weapons_ViewPunchAngle([-5,0,0]); Weapons_ViewPunchAngle(pl, [-5,0,0]);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTSHOTGUN, 0.41f); Animation_PlayerTop(pl, ANIM_CR_SHOOTSHOTGUN, 0.41f);
@ -215,33 +212,32 @@ w_shotgun_primary(void)
} }
void void
w_shotgun_secondary(void) w_shotgun_secondary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next) { if (pl.w_attack_next) {
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} }
/* interrupt reloading if no longer empty */ /* interrupt reloading if no longer empty */
if (pl.mode_tempstate == SHOTTY_RELOAD && pl.shotgun_mag >= 2) { if (pl.mode_tempstate == SHOTTY_RELOAD && pl.shotgun_mag >= 2) {
pl.mode_tempstate = SHOTTY_RELOAD_END; pl.mode_tempstate = SHOTTY_RELOAD_END;
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} else if (pl.mode_tempstate > SHOTTY_IDLE) { } else if (pl.mode_tempstate > SHOTTY_IDLE) {
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} }
/* Ammo check */ /* Ammo check */
if (pl.shotgun_mag <= 1) { if (pl.shotgun_mag <= 1) {
w_shotgun_release(); w_shotgun_release(pl);
return; return;
} }
Weapons_ViewAnimation(SHOTGUN_FIRE2); Weapons_ViewAnimation(pl, SHOTGUN_FIRE2);
Weapons_ViewPunchAngle([-10,0,0]); Weapons_ViewPunchAngle(pl, [-10,0,0]);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTSHOTGUN, 0.41f); Animation_PlayerTop(pl, ANIM_CR_SHOOTSHOTGUN, 0.41f);
@ -269,9 +265,8 @@ w_shotgun_secondary(void)
} }
void void
w_shotgun_reload(void) w_shotgun_reload(player pl)
{ {
player pl = (player)self;
if (pl.shotgun_mag >= 8) { if (pl.shotgun_mag >= 8) {
return; return;
@ -288,14 +283,13 @@ w_shotgun_reload(void)
} }
void void
w_shotgun_release(void) w_shotgun_release(player pl)
{ {
player pl = (player)self;
/* auto-reload if need be */ /* auto-reload if need be */
if (pl.w_attack_next <= 0.0) if (pl.w_attack_next <= 0.0)
if (pl.mode_tempstate == SHOTTY_IDLE && pl.shotgun_mag == 0 && pl.ammo_buckshot > 0) { if (pl.mode_tempstate == SHOTTY_IDLE && pl.shotgun_mag == 0 && pl.ammo_buckshot > 0) {
Weapons_Reload(); Weapons_Reload(pl);
return; return;
} }
@ -307,24 +301,24 @@ w_shotgun_release(void)
int r = floor(pseudorandom() * 3.0f); int r = floor(pseudorandom() * 3.0f);
switch (r) { switch (r) {
case 1: case 1:
Weapons_ViewAnimation(SHOTGUN_IDLE2); Weapons_ViewAnimation(pl, SHOTGUN_IDLE2);
pl.w_idle_next = 2.222222f; pl.w_idle_next = 2.222222f;
break; break;
case 2: case 2:
Weapons_ViewAnimation(SHOTGUN_IDLE3); Weapons_ViewAnimation(pl, SHOTGUN_IDLE3);
pl.w_idle_next = 5.0f; pl.w_idle_next = 5.0f;
break; break;
default: default:
Weapons_ViewAnimation(SHOTGUN_IDLE1); Weapons_ViewAnimation(pl, SHOTGUN_IDLE1);
pl.w_idle_next = 2.222222f; pl.w_idle_next = 2.222222f;
break; break;
} }
} else if (pl.mode_tempstate == SHOTTY_RELOAD_START) { } else if (pl.mode_tempstate == SHOTTY_RELOAD_START) {
Weapons_ViewAnimation(SHOTGUN_START_RELOAD); Weapons_ViewAnimation(pl, SHOTGUN_START_RELOAD);
pl.mode_tempstate = SHOTTY_RELOAD; pl.mode_tempstate = SHOTTY_RELOAD;
pl.w_idle_next = 0.65f; pl.w_idle_next = 0.65f;
} else if (pl.mode_tempstate == SHOTTY_RELOAD) { } else if (pl.mode_tempstate == SHOTTY_RELOAD) {
Weapons_ViewAnimation(SHOTGUN_RELOAD); Weapons_ViewAnimation(pl, SHOTGUN_RELOAD);
pl.shotgun_mag++; pl.shotgun_mag++;
pl.ammo_buckshot--; pl.ammo_buckshot--;
#ifdef SERVER #ifdef SERVER
@ -336,7 +330,7 @@ w_shotgun_release(void)
Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_buckshot, pl.mode_tempstate); Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_buckshot, pl.mode_tempstate);
pl.w_idle_next = 0.5f; pl.w_idle_next = 0.5f;
} else if (pl.mode_tempstate == SHOTTY_RELOAD_END) { } else if (pl.mode_tempstate == SHOTTY_RELOAD_END) {
Weapons_ViewAnimation(SHOTGUN_PUMP); Weapons_ViewAnimation(pl, SHOTGUN_PUMP);
#ifdef SERVER #ifdef SERVER
Sound_Play(pl, CHAN_WEAPON, "weapon_shotgun.cock"); Sound_Play(pl, CHAN_WEAPON, "weapon_shotgun.cock");
#endif #endif
@ -356,7 +350,7 @@ w_shotgun_release(void)
} }
void void
w_shotgun_crosshair(void) w_shotgun_crosshair(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
static vector cross_pos; static vector cross_pos;
@ -370,16 +364,15 @@ w_shotgun_crosshair(void)
} }
float float
w_shotgun_aimanim(void) w_shotgun_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; return self.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN;
} }
void void
w_shotgun_hudpic(int selected, vector pos, float a) w_shotgun_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
vector hud_col; vector hud_col;
if (pl.shotgun_mag == 0 && pl.ammo_buckshot == 0) if (pl.shotgun_mag == 0 && pl.ammo_buckshot == 0)
@ -398,9 +391,8 @@ w_shotgun_hudpic(int selected, vector pos, float a)
} }
int int
w_shotgun_isempty(void) w_shotgun_isempty(player pl)
{ {
player pl = (player)self;
if (pl.shotgun_mag <= 0 && pl.ammo_buckshot <= 0) if (pl.shotgun_mag <= 0 && pl.ammo_buckshot <= 0)
return 1; return 1;
@ -409,7 +401,7 @@ w_shotgun_isempty(void)
} }
weapontype_t weapontype_t
w_shotgun_type(void) w_shotgun_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -427,7 +419,7 @@ weapon_t w_shotgun =
.secondary = w_shotgun_secondary, .secondary = w_shotgun_secondary,
.reload = w_shotgun_reload, .reload = w_shotgun_reload,
.release = w_shotgun_release, .release = w_shotgun_release,
.crosshair = w_shotgun_crosshair, .postdraw = w_shotgun_crosshair,
.precache = w_shotgun_precache, .precache = w_shotgun_precache,
.pickup = w_shotgun_pickup, .pickup = w_shotgun_pickup,
.updateammo = w_shotgun_updateammo, .updateammo = w_shotgun_updateammo,

View file

@ -147,10 +147,9 @@ monster_snark::monster_snark(void)
} }
#endif #endif
int w_snark_pickup(int new, int startammo) int w_snark_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (pl.ammo_snark < MAX_A_SNARK) { if (pl.ammo_snark < MAX_A_SNARK) {
pl.ammo_snark = bound(0, pl.ammo_snark + 5, MAX_A_SNARK); pl.ammo_snark = bound(0, pl.ammo_snark + 5, MAX_A_SNARK);
@ -162,13 +161,13 @@ int w_snark_pickup(int new, int startammo)
return (1); return (1);
} }
void w_snark_draw(void) void w_snark_draw(player pl)
{ {
Weapons_SetModel("models/v_squeak.mdl"); Weapons_SetModel("models/v_squeak.mdl");
Weapons_ViewAnimation(SNARK_DRAW); Weapons_ViewAnimation(pl, SNARK_DRAW);
} }
void w_snark_holster(void) void w_snark_holster(player pl)
{ {
} }
@ -183,9 +182,8 @@ void w_snark_deploy(void)
} }
#endif #endif
void w_snark_primary(void) void w_snark_primary(player pl)
{ {
player pl = (player)self;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
return; return;
} }
@ -198,7 +196,7 @@ void w_snark_primary(void)
pl.ammo_snark--; pl.ammo_snark--;
/* Audio-Visual Bit */ /* Audio-Visual Bit */
Weapons_ViewAnimation(SNARK_THROW); Weapons_ViewAnimation(pl, SNARK_THROW);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTSQUEAK, 0.41f); Animation_PlayerTop(pl, ANIM_CR_SHOOTSQUEAK, 0.41f);
@ -217,18 +215,17 @@ void w_snark_primary(void)
pl.w_attack_next = 0.25f; pl.w_attack_next = 0.25f;
} }
void w_snark_secondary(void) void w_snark_secondary(player pl)
{ {
} }
void w_snark_reload(void) void w_snark_reload(player pl)
{ {
} }
void w_snark_release(void) void w_snark_release(player pl)
{ {
int r; int r;
player pl = (player)self;
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
return; return;
@ -237,15 +234,15 @@ void w_snark_release(void)
r = floor(pseudorandom() * 3.0f); r = floor(pseudorandom() * 3.0f);
switch (r) { switch (r) {
case 0: case 0:
Weapons_ViewAnimation(SNARK_IDLE); Weapons_ViewAnimation(pl, SNARK_IDLE);
pl.w_idle_next = 1.875f; pl.w_idle_next = 1.875f;
break; break;
case 1: case 1:
Weapons_ViewAnimation(SNARK_FIDGET1); Weapons_ViewAnimation(pl, SNARK_FIDGET1);
pl.w_idle_next = 4.375f; pl.w_idle_next = 4.375f;
break; break;
default: default:
Weapons_ViewAnimation(SNARK_FIDGET2); Weapons_ViewAnimation(pl, SNARK_FIDGET2);
pl.w_idle_next = 5.0f; pl.w_idle_next = 5.0f;
break; break;
} }
@ -276,7 +273,7 @@ string w_snark_wmodel(void)
return "models/w_sqknest.mdl"; return "models/w_sqknest.mdl";
} }
string w_snark_pmodel(void) string w_snark_pmodel(player pl)
{ {
return "models/p_squeak.mdl"; return "models/p_squeak.mdl";
} }
@ -286,12 +283,12 @@ string w_snark_deathmsg(void)
return ""; return "";
} }
float w_snark_aimanim(void) float w_snark_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK; return self.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK;
} }
void w_snark_hud(void) void w_snark_hud(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
HUD_DrawAmmo2(); HUD_DrawAmmo2();
@ -300,10 +297,9 @@ void w_snark_hud(void)
#endif #endif
} }
void w_snark_hudpic(int selected, vector pos, float a) void w_snark_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
if (selected) { if (selected) {
drawsubpic(pos, [170,45], g_hud6_spr, drawsubpic(pos, [170,45], g_hud6_spr,
@ -320,9 +316,8 @@ void w_snark_hudpic(int selected, vector pos, float a)
} }
int int
w_snark_isempty(void) w_snark_isempty(player pl)
{ {
player pl = (player)self;
if (pl.ammo_snark <= 0) if (pl.ammo_snark <= 0)
return 1; return 1;
@ -331,7 +326,7 @@ w_snark_isempty(void)
} }
weapontype_t weapontype_t
w_snark_type(void) w_snark_type(player pl)
{ {
return WPNTYPE_RANGED; return WPNTYPE_RANGED;
} }
@ -349,7 +344,7 @@ weapon_t w_snark =
.secondary = w_snark_secondary, .secondary = w_snark_secondary,
.reload = w_snark_reload, .reload = w_snark_reload,
.release = w_snark_release, .release = w_snark_release,
.crosshair = w_snark_hud, .postdraw = w_snark_hud,
.precache = w_snark_precache, .precache = w_snark_precache,
.pickup = w_snark_pickup, .pickup = w_snark_pickup,
.updateammo = w_snark_updateammo, .updateammo = w_snark_updateammo,

View file

@ -222,7 +222,7 @@ string w_tripmine_wmodel(void)
return "models/v_tripmine.mdl"; return "models/v_tripmine.mdl";
} }
string w_tripmine_pmodel(void) string w_tripmine_pmodel(player pl)
{ {
return "models/p_tripmine.mdl"; return "models/p_tripmine.mdl";
} }
@ -232,10 +232,9 @@ string w_tripmine_deathmsg(void)
return ""; return "";
} }
int w_tripmine_pickup(int new, int startammo) int w_tripmine_pickup(player pl, int new, int startammo)
{ {
#ifdef SERVER #ifdef SERVER
player pl = (player)self;
if (pl.ammo_tripmine < MAX_A_TRIPMINE) { if (pl.ammo_tripmine < MAX_A_TRIPMINE) {
pl.ammo_tripmine = bound(0, pl.ammo_tripmine + 1, MAX_A_TRIPMINE); pl.ammo_tripmine = bound(0, pl.ammo_tripmine + 1, MAX_A_TRIPMINE);
@ -247,21 +246,20 @@ int w_tripmine_pickup(int new, int startammo)
return (1); return (1);
} }
void w_tripmine_draw(void) void w_tripmine_draw(player pl)
{ {
Weapons_SetModel("models/v_tripmine.mdl"); Weapons_SetModel("models/v_tripmine.mdl");
Weapons_ViewAnimation(TRIPMINE_DRAW); Weapons_ViewAnimation(pl, TRIPMINE_DRAW);
} }
void w_tripmine_holster(void) void w_tripmine_holster(player pl)
{ {
} }
void void
w_tripmine_primary(void) w_tripmine_primary(player pl)
{ {
player pl = (player)self;
vector src; vector src;
if (pl.w_attack_next > 0.0) { if (pl.w_attack_next > 0.0) {
@ -272,8 +270,8 @@ w_tripmine_primary(void)
return; return;
} }
src = Weapons_GetCameraPos(); src = Weapons_GetCameraPos(pl);
Weapons_MakeVectors(); Weapons_MakeVectors(pl);
traceline(src, src + v_forward * 64, FALSE, pl); traceline(src, src + v_forward * 64, FALSE, pl);
if (trace_fraction >= 1.0) { if (trace_fraction >= 1.0) {
@ -282,7 +280,7 @@ w_tripmine_primary(void)
pl.ammo_tripmine--; pl.ammo_tripmine--;
Weapons_ViewAnimation(TRIPMINE_FIRE2); Weapons_ViewAnimation(pl, TRIPMINE_FIRE2);
if (self.flags & FL_CROUCHING) if (self.flags & FL_CROUCHING)
Animation_PlayerTop(pl, ANIM_CR_SHOOTTRIPMINE, 0.41f); Animation_PlayerTop(pl, ANIM_CR_SHOOTTRIPMINE, 0.41f);
@ -305,16 +303,15 @@ w_tripmine_primary(void)
} }
void void
w_tripmine_release(void) w_tripmine_release(player pl)
{ {
player pl = (player)self;
if (pl.w_idle_next > 0.0) { if (pl.w_idle_next > 0.0) {
return; return;
} }
if (pl.a_ammo3 == 1) { if (pl.a_ammo3 == 1) {
Weapons_ViewAnimation(TRIPMINE_DRAW); Weapons_ViewAnimation(pl, TRIPMINE_DRAW);
#ifdef SERVER #ifdef SERVER
if (pl.ammo_tripmine <= 0) { if (pl.ammo_tripmine <= 0) {
Weapons_RemoveItem(pl, WEAPON_TRIPMINE); Weapons_RemoveItem(pl, WEAPON_TRIPMINE);
@ -329,28 +326,28 @@ w_tripmine_release(void)
int r = (float)input_sequence % 3; int r = (float)input_sequence % 3;
switch (r) { switch (r) {
case 1: case 1:
Weapons_ViewAnimation(TRIPMINE_IDLE1); Weapons_ViewAnimation(pl, TRIPMINE_IDLE1);
pl.w_idle_next = 3.0f; pl.w_idle_next = 3.0f;
break; break;
case 2: case 2:
Weapons_ViewAnimation(TRIPMINE_IDLE2); Weapons_ViewAnimation(pl, TRIPMINE_IDLE2);
pl.w_idle_next = 2.0f; pl.w_idle_next = 2.0f;
break; break;
default: default:
Weapons_ViewAnimation(TRIPMINE_FIDGET); Weapons_ViewAnimation(pl, TRIPMINE_FIDGET);
pl.w_idle_next = 3.34f; pl.w_idle_next = 3.34f;
break; break;
} }
} }
float float
w_tripmine_aimanim(void) w_tripmine_aimanim(player pl)
{ {
return self.flags & FL_CROUCHING ? ANIM_CR_AIMTRIPMINE : ANIM_AIMTRIPMINE; return self.flags & FL_CROUCHING ? ANIM_CR_AIMTRIPMINE : ANIM_AIMTRIPMINE;
} }
void void
w_tripmine_hud(void) w_tripmine_hud(player pl)
{ {
#ifdef CLIENT #ifdef CLIENT
HUD_DrawAmmo2(); HUD_DrawAmmo2();
@ -360,10 +357,9 @@ w_tripmine_hud(void)
} }
void void
w_tripmine_hudpic(int selected, vector pos, float a) w_tripmine_hudpic(player pl, int selected, vector pos, float a)
{ {
#ifdef CLIENT #ifdef CLIENT
player pl = (player)self;
if (selected) { if (selected) {
drawsubpic(pos, [170,45], g_hud6_spr, [0,90/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE); drawsubpic(pos, [170,45], g_hud6_spr, [0,90/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE);
@ -376,9 +372,8 @@ w_tripmine_hudpic(int selected, vector pos, float a)
} }
int int
w_tripmine_isempty(void) w_tripmine_isempty(player pl)
{ {
player pl = (player)self;
if (pl.ammo_tripmine <= 0) if (pl.ammo_tripmine <= 0)
return 1; return 1;
@ -387,7 +382,7 @@ w_tripmine_isempty(void)
} }
weapontype_t weapontype_t
w_tripmine_type(void) w_tripmine_type(player pl)
{ {
return WPNTYPE_CLOSE; return WPNTYPE_CLOSE;
} }
@ -405,7 +400,7 @@ weapon_t w_tripmine =
.secondary = __NULL__, .secondary = __NULL__,
.reload = __NULL__, .reload = __NULL__,
.release = w_tripmine_release, .release = w_tripmine_release,
.crosshair = w_tripmine_hud, .postdraw = w_tripmine_hud,
.precache = w_tripmine_precache, .precache = w_tripmine_precache,
.pickup = w_tripmine_pickup, .pickup = w_tripmine_pickup,
.updateammo = w_tripmine_updateammo, .updateammo = w_tripmine_updateammo,