// xkan, 10/26/2002 // extracted from Fill_Clip: add the specified ammount of ammo into the clip // returns whether ammo was added to the clip int AddToClip( playerState_t *ps,// which player int weapon, // weapon to add ammo for int ammomove, // ammount to add. 0 means fill the clip if possible int outOfReserve) // is the amount to be added out of reserve { int inclip, maxclip; int ammoweap = BG_FindAmmoForWeapon(weapon); if(weapon < WP_LUGER || weapon >= WP_NUM_WEAPONS) return qfalse; inclip = ps->ammoclip[BG_FindClipForWeapon(weapon)]; maxclip = GetAmmoTableData(weapon)->maxclip; if (!ammomove) // amount to add to the clip not specified ammomove = maxclip - inclip; // max amount that can be moved into the clip else if (ammomove > maxclip - inclip) ammomove = maxclip - inclip; if (outOfReserve) { // cap move amount if it's more than you've got in reserve if(ammomove > ps->ammo[ammoweap]) ammomove = ps->ammo[ammoweap]; } if(ammomove) { if (outOfReserve) ps->ammo[ammoweap] -= ammomove; ps->ammoclip[BG_FindClipForWeapon(weapon)] += ammomove; return qtrue; } return qfalse; }
/** * @brief Add the specified ammount of ammo into the clip. * @param ps which player * @param weapon to add ammo for * @param ammomove amount to add. 0 means fill the clip if possible * @param outOfReserve amount to be added out of reserve * @return qboolean whether ammo was added to the clip. */ int AddToClip(playerState_t *ps, int weapon, int ammomove, int outOfReserve) { int inclip, maxclip; int ammoweap = BG_FindAmmoForWeapon(weapon); if (weapon < WP_LUGER || weapon >= WP_NUM_WEAPONS) { return qfalse; } inclip = ps->ammoclip[BG_FindClipForWeapon(weapon)]; maxclip = GetAmmoTableData(weapon)->maxclip; if (!ammomove) // amount to add to the clip not specified { ammomove = maxclip - inclip; // max amount that can be moved into the clip } else if (ammomove > maxclip - inclip) { ammomove = maxclip - inclip; } if (outOfReserve) { // cap move amount if it's more than you've got in reserve if (ammomove > ps->ammo[ammoweap]) { ammomove = ps->ammo[ammoweap]; } } if (ammomove) { if (outOfReserve) { ps->ammo[ammoweap] -= ammomove; } ps->ammoclip[BG_FindClipForWeapon(weapon)] += ammomove; return qtrue; } return qfalse; }
/* =========== SetWolfSpawnWeapons =========== */ void SetWolfSpawnWeapons(gclient_t *client) { int pc = client->sess.playerType; if (client->sess.sessionTeam == TEAM_SPECTATOR) { return; } // Reset special weapon time client->ps.classWeaponTime = -999999; // Communicate it to cgame client->ps.stats[STAT_PLAYER_CLASS] = pc; // Abuse teamNum to store player class as well (can't see stats for all clients in cgame) client->ps.teamNum = pc; // JPW NERVE -- zero out all ammo counts memset(client->ps.ammo, 0, MAX_WEAPONS * sizeof (int)); // All players start with a knife (not OR-ing so that it clears previous weapons) client->ps.weapons[0] = 0; client->ps.weapons[1] = 0; AddWeaponToPlayer(client, WP_KNIFE, 1, 0, qtrue); client->ps.weaponstate = WEAPON_READY; // Nico, give binoculars to everyone if (AddWeaponToPlayer(client, WP_BINOCULARS, 1, 0, qfalse)) { client->ps.stats[STAT_KEYS] |= (1 << INV_BINOCS); } if (pc == PC_ENGINEER) { // Nico, give pliers AddWeaponToPlayer(client, WP_PLIERS, 0, 1, qfalse); if (client->sess.sessionTeam == TEAM_AXIS) { switch (client->sess.playerWeapon) { case WP_KAR98: AddWeaponToPlayer(client, WP_KAR98, GetAmmoTableData(WP_KAR98)->defaultStartingAmmo, GetAmmoTableData(WP_KAR98)->defaultStartingClip, qtrue); break; default: AddWeaponToPlayer(client, WP_MP40, GetAmmoTableData(WP_MP40)->defaultStartingAmmo, GetAmmoTableData(WP_MP40)->defaultStartingClip, qtrue); break; } } else { switch (client->sess.playerWeapon) { case WP_CARBINE: AddWeaponToPlayer(client, WP_CARBINE, GetAmmoTableData(WP_CARBINE)->defaultStartingAmmo, GetAmmoTableData(WP_CARBINE)->defaultStartingClip, qtrue); break; default: AddWeaponToPlayer(client, WP_THOMPSON, GetAmmoTableData(WP_THOMPSON)->defaultStartingAmmo, GetAmmoTableData(WP_THOMPSON)->defaultStartingClip, qtrue); break; } } } else if (pc == PC_FIELDOPS) { if (client->sess.sessionTeam == TEAM_AXIS) { AddWeaponToPlayer(client, WP_MP40, GetAmmoTableData(WP_MP40)->defaultStartingAmmo, GetAmmoTableData(WP_MP40)->defaultStartingClip, qtrue); } else { AddWeaponToPlayer(client, WP_THOMPSON, GetAmmoTableData(WP_THOMPSON)->defaultStartingAmmo, GetAmmoTableData(WP_THOMPSON)->defaultStartingClip, qtrue); } } else if (pc == PC_MEDIC) { AddWeaponToPlayer(client, WP_MEDKIT, GetAmmoTableData(WP_MEDKIT)->defaultStartingAmmo, GetAmmoTableData(WP_MEDKIT)->defaultStartingClip, qfalse); if (client->sess.sessionTeam == TEAM_AXIS) { AddWeaponToPlayer(client, WP_MP40, 0, GetAmmoTableData(WP_MP40)->defaultStartingClip, qtrue); } else { AddWeaponToPlayer(client, WP_THOMPSON, 0, GetAmmoTableData(WP_THOMPSON)->defaultStartingClip, qtrue); } } else if (pc == PC_SOLDIER) { switch (client->sess.sessionTeam) { case TEAM_AXIS: /* Nico, #todo rocket runs support switch ( client->sess.playerWeapon ) { default: case WP_FLAMETHROWER: case WP_MOBILE_MG42: case WP_MORTAR: case WP_MP40:*/ AddWeaponToPlayer(client, WP_MP40, GetAmmoTableData(WP_MP40)->defaultStartingAmmo, GetAmmoTableData(WP_MP40)->defaultStartingClip, qtrue); /*break; case WP_PANZERFAUST: AddWeaponToPlayer( client, WP_PANZERFAUST, GetAmmoTableData( WP_PANZERFAUST )->defaultStartingAmmo, GetAmmoTableData( WP_PANZERFAUST )->defaultStartingClip, qtrue ); break; } break;*/ case TEAM_ALLIES: /* Nico, #todo rocket runs support switch ( client->sess.playerWeapon ) { default: // Nico, replaced weapons case WP_FLAMETHROWER: case WP_MOBILE_MG42: case WP_MORTAR: case WP_THOMPSON:*/ AddWeaponToPlayer(client, WP_THOMPSON, GetAmmoTableData(WP_THOMPSON)->defaultStartingAmmo, GetAmmoTableData(WP_THOMPSON)->defaultStartingClip, qtrue); /*break; case WP_PANZERFAUST: AddWeaponToPlayer( client, WP_PANZERFAUST, GetAmmoTableData( WP_PANZERFAUST )->defaultStartingAmmo, GetAmmoTableData( WP_PANZERFAUST )->defaultStartingClip, qtrue ); break; } break;*/ default: break; } } else if (pc == PC_COVERTOPS) { switch (client->sess.playerWeapon) { case WP_K43: case WP_GARAND: if (client->sess.sessionTeam == TEAM_AXIS) { if (AddWeaponToPlayer(client, WP_K43, GetAmmoTableData(WP_K43)->defaultStartingAmmo, GetAmmoTableData(WP_K43)->defaultStartingClip, qtrue)) { AddWeaponToPlayer(client, WP_K43_SCOPE, GetAmmoTableData(WP_K43_SCOPE)->defaultStartingAmmo, GetAmmoTableData(WP_K43_SCOPE)->defaultStartingClip, qfalse); } break; } else { if (AddWeaponToPlayer(client, WP_GARAND, GetAmmoTableData(WP_GARAND)->defaultStartingAmmo, GetAmmoTableData(WP_GARAND)->defaultStartingClip, qtrue)) { AddWeaponToPlayer(client, WP_GARAND_SCOPE, GetAmmoTableData(WP_GARAND_SCOPE)->defaultStartingAmmo, GetAmmoTableData(WP_GARAND_SCOPE)->defaultStartingClip, qfalse); } break; } case WP_FG42: if (AddWeaponToPlayer(client, WP_FG42, GetAmmoTableData(WP_FG42)->defaultStartingAmmo, GetAmmoTableData(WP_FG42)->defaultStartingClip, qtrue)) { AddWeaponToPlayer(client, WP_FG42SCOPE, GetAmmoTableData(WP_FG42SCOPE)->defaultStartingAmmo, GetAmmoTableData(WP_FG42SCOPE)->defaultStartingClip, qfalse); } break; default: AddWeaponToPlayer(client, WP_STEN, GetAmmoTableData(WP_STEN)->defaultStartingAmmo, GetAmmoTableData(WP_STEN)->defaultStartingClip, qtrue); break; } } // Nico, note: pistols are given here switch (client->sess.sessionTeam) { case TEAM_AXIS: switch (pc) { case PC_SOLDIER: AddWeaponToPlayer(client, WP_LUGER, GetAmmoTableData(WP_LUGER)->defaultStartingAmmo, GetAmmoTableData(WP_LUGER)->defaultStartingClip, qfalse); break; case PC_COVERTOPS: AddWeaponToPlayer(client, WP_LUGER, GetAmmoTableData(WP_LUGER)->defaultStartingAmmo, GetAmmoTableData(WP_LUGER)->defaultStartingClip, qfalse); AddWeaponToPlayer(client, WP_SILENCER, GetAmmoTableData(WP_SILENCER)->defaultStartingAmmo, GetAmmoTableData(WP_SILENCER)->defaultStartingClip, qfalse); client->pmext.silencedSideArm = 1; break; default: AddWeaponToPlayer(client, WP_LUGER, GetAmmoTableData(WP_LUGER)->defaultStartingAmmo, GetAmmoTableData(WP_LUGER)->defaultStartingClip, qfalse); break; } break; default: switch (pc) { case PC_SOLDIER: AddWeaponToPlayer(client, WP_COLT, GetAmmoTableData(WP_COLT)->defaultStartingAmmo, GetAmmoTableData(WP_COLT)->defaultStartingClip, qfalse); break; case PC_COVERTOPS: AddWeaponToPlayer(client, WP_COLT, GetAmmoTableData(WP_COLT)->defaultStartingAmmo, GetAmmoTableData(WP_COLT)->defaultStartingClip, qfalse); AddWeaponToPlayer(client, WP_SILENCED_COLT, GetAmmoTableData(WP_SILENCED_COLT)->defaultStartingAmmo, GetAmmoTableData(WP_SILENCED_COLT)->defaultStartingClip, qfalse); client->pmext.silencedSideArm = 1; break; default: AddWeaponToPlayer(client, WP_COLT, GetAmmoTableData(WP_COLT)->defaultStartingAmmo, GetAmmoTableData(WP_COLT)->defaultStartingClip, qfalse); break; } } }