From f4b21088a039b888cef61df3c5695c9cee9ce1c1 Mon Sep 17 00:00:00 2001 From: Kp Date: Fri, 20 Sep 2013 23:12:54 +0000 Subject: [PATCH] Track vulcan ammo explicitly --- common/main/multi.h | 2 +- common/main/player.h | 8 ++++++-- d1x-rebirth/main/collide.c | 4 ++-- d1x-rebirth/main/fireball.c | 2 +- d1x-rebirth/main/gameseq.c | 7 +------ d1x-rebirth/main/laser.c | 8 ++++---- d1x-rebirth/main/powerup.c | 6 +----- d2x-rebirth/main/collide.c | 4 ++-- d2x-rebirth/main/escort.c | 2 +- d2x-rebirth/main/fireball.c | 2 +- d2x-rebirth/main/gameseq.c | 7 +------ d2x-rebirth/main/laser.c | 8 ++++---- d2x-rebirth/main/powerup.c | 3 +-- similar/main/gamecntl.c | 9 +++------ similar/main/gauges.c | 14 +++++++------- similar/main/multi.c | 11 ++--------- similar/main/newdemo.c | 38 ++++++++++++++++++++++--------------- similar/main/player.c | 3 +-- similar/main/state.c | 6 ++---- similar/main/weapon.c | 26 +++++++++++++------------ 20 files changed, 78 insertions(+), 92 deletions(-) diff --git a/common/main/multi.h b/common/main/multi.h index ff8439f35..d7bb23ae1 100644 --- a/common/main/multi.h +++ b/common/main/multi.h @@ -60,7 +60,7 @@ extern int multi_protocol; // set and determinate used protocol #define MULTI_PROTO_UDP 1 // UDP protocol // What version of the multiplayer protocol is this? Increment each time something drastic changes in Multiplayer without the version number changes. Can be reset to 0 each time the version of the game changes -#define MULTI_PROTO_VERSION 5 +#define MULTI_PROTO_VERSION 6 // PROTOCOL VARIABLES AND DEFINES - END diff --git a/common/main/player.h b/common/main/player.h index 192f84b2b..a616cd7aa 100644 --- a/common/main/player.h +++ b/common/main/player.h @@ -108,7 +108,7 @@ typedef struct player { ushort primary_weapon_flags; // bit set indicates the player has this weapon. ushort secondary_weapon_flags; // bit set indicates the player has this weapon. #endif - ushort primary_ammo[MAX_PRIMARY_WEAPONS]; // How much ammo of each type. + ushort vulcan_ammo; ushort secondary_ammo[MAX_SECONDARY_WEAPONS]; // How much ammo of each type. #if defined(DXX_BUILD_DESCENT_II) @@ -165,11 +165,15 @@ typedef struct player_rw { #if defined(DXX_BUILD_DESCENT_I) ubyte primary_weapon_flags; // bit set indicates the player has this weapon. ubyte secondary_weapon_flags; // bit set indicates the player has this weapon. + ushort laser_ammo; #elif defined(DXX_BUILD_DESCENT_II) ushort primary_weapon_flags; // bit set indicates the player has this weapon. ushort secondary_weapon_flags; // bit set indicates the player has this weapon. #endif - ushort primary_ammo[MAX_PRIMARY_WEAPONS]; // How much ammo of each type. + ushort vulcan_ammo; +#if defined(DXX_BUILD_DESCENT_I) + ushort spreadfire_ammo, plasma_ammo, fusion_ammo; +#endif ushort secondary_ammo[MAX_SECONDARY_WEAPONS]; // How much ammo of each type. #if defined(DXX_BUILD_DESCENT_II) diff --git a/d1x-rebirth/main/collide.c b/d1x-rebirth/main/collide.c index 3517e863f..2e4a2336d 100644 --- a/d1x-rebirth/main/collide.c +++ b/d1x-rebirth/main/collide.c @@ -1104,7 +1104,7 @@ void drop_player_eggs(object *playerobj) call_object_create_egg(playerobj, 1, OBJ_POWERUP, POW_CLOAK); //Drop the vulcan, gauss, and ammo - vulcan_ammo = Players[pnum].primary_ammo[VULCAN_INDEX]; + vulcan_ammo = Players[pnum].vulcan_ammo; if (vulcan_ammo < VULCAN_AMMO_AMOUNT) vulcan_ammo = VULCAN_AMMO_AMOUNT; //make sure gun has at least as much as a powerup objnum = maybe_drop_primary_weapon_egg(playerobj, VULCAN_INDEX); @@ -1130,7 +1130,7 @@ void drop_player_eggs(object *playerobj) // If player has vulcan ammo, but no vulcan cannon, drop the ammo. if (!(Players[playerobj->id].primary_weapon_flags & HAS_VULCAN_FLAG)) { - int amount = Players[playerobj->id].primary_ammo[VULCAN_INDEX]; + int amount = Players[playerobj->id].vulcan_ammo; if (amount > 200) { amount = 200; } diff --git a/d1x-rebirth/main/fireball.c b/d1x-rebirth/main/fireball.c index 3eb34fc65..7bbac214b 100644 --- a/d1x-rebirth/main/fireball.c +++ b/d1x-rebirth/main/fireball.c @@ -617,7 +617,7 @@ void maybe_replace_powerup_with_energy(object *del_obj) } // Don't drop vulcan ammo if player maxed out. - if ((weapon_index_uses_vulcan_ammo(weapon_index) || (del_obj->contains_id == POW_VULCAN_AMMO)) && (Players[Player_num].primary_ammo[VULCAN_INDEX] >= VULCAN_AMMO_MAX)) + if ((weapon_index_uses_vulcan_ammo(weapon_index) || (del_obj->contains_id == POW_VULCAN_AMMO)) && (Players[Player_num].vulcan_ammo >= VULCAN_AMMO_MAX)) del_obj->contains_count = 0; else if (weapon_index != -1) { if ((player_has_weapon(weapon_index, 0) & HAS_WEAPON_FLAG) || weapon_nearby(del_obj, del_obj->contains_id)) { diff --git a/d1x-rebirth/main/gameseq.c b/d1x-rebirth/main/gameseq.c index 330eb552a..6d6e66829 100644 --- a/d1x-rebirth/main/gameseq.c +++ b/d1x-rebirth/main/gameseq.c @@ -267,10 +267,6 @@ void init_ammo_and_energy(void) if (Players[Player_num].shields < StartingShields) Players[Player_num].shields = StartingShields; -// for (i=0; ienergy >= energy_used) || (weapon_index_uses_vulcan_ammo(Primary_weapon) && (plp->primary_ammo[Primary_weapon] >= ammo_used)) ) { + if ((plp->energy >= energy_used) || (weapon_index_uses_vulcan_ammo(Primary_weapon) && (plp->vulcan_ammo >= ammo_used)) ) { int laser_level, flags, fire_frame_overhead = 0; if (GameTime64 - Next_laser_fire_time <= FrameTime) // if firing is prolonged by FrameTime overhead, let's try to fix that. @@ -1060,10 +1060,10 @@ int do_laser_firing_player(void) if (plp->energy < 0) plp->energy = 0; - if (ammo_used > plp->primary_ammo[Primary_weapon]) - plp->primary_ammo[Primary_weapon] = 0; + if (ammo_used > plp->vulcan_ammo) + plp->vulcan_ammo = 0; else - plp->primary_ammo[Primary_weapon] -= ammo_used; + plp->vulcan_ammo -= ammo_used; auto_select_weapon(0); // Make sure the player can fire from this weapon. diff --git a/d1x-rebirth/main/powerup.c b/d1x-rebirth/main/powerup.c index bc3effb93..3c77b0fa2 100644 --- a/d1x-rebirth/main/powerup.c +++ b/d1x-rebirth/main/powerup.c @@ -134,15 +134,11 @@ void do_megawow_powerup(int quantity) powerup_basic(30, 0, 30, 1, "MEGA-WOWIE-ZOWIE!"); Players[Player_num].primary_weapon_flags = 0xff; Players[Player_num].secondary_weapon_flags = 0xff; - for (i=0; i<3; i++) - Players[Player_num].primary_ammo[i] = 200; + Players[Player_num].vulcan_ammo = 200; for (i=0; i<3; i++) Players[Player_num].secondary_ammo[i] = quantity; - for (i=3; i<5; i++) - Players[Player_num].primary_ammo[i] = 200; - for (i=3; i<5; i++) Players[Player_num].secondary_ammo[i] = quantity/5; diff --git a/d2x-rebirth/main/collide.c b/d2x-rebirth/main/collide.c index 5ab156001..804fda380 100644 --- a/d2x-rebirth/main/collide.c +++ b/d2x-rebirth/main/collide.c @@ -1874,7 +1874,7 @@ void drop_player_eggs(object *playerobj) } //Drop the vulcan, gauss, and ammo - vulcan_ammo = Players[pnum].primary_ammo[VULCAN_INDEX]; + vulcan_ammo = Players[pnum].vulcan_ammo; if ((Players[pnum].primary_weapon_flags & HAS_FLAG(VULCAN_INDEX)) && (Players[pnum].primary_weapon_flags & HAS_FLAG(GAUSS_INDEX))) vulcan_ammo /= 2; //if both vulcan & gauss, each gets half if (vulcan_ammo < VULCAN_AMMO_AMOUNT) @@ -1919,7 +1919,7 @@ void drop_player_eggs(object *playerobj) // If player has vulcan ammo, but no vulcan cannon, drop the ammo. if (!(Players[playerobj->id].primary_weapon_flags & HAS_VULCAN_FLAG)) { - int amount = Players[playerobj->id].primary_ammo[VULCAN_INDEX]; + int amount = Players[playerobj->id].vulcan_ammo; if (amount > 200) { amount = 200; } diff --git a/d2x-rebirth/main/escort.c b/d2x-rebirth/main/escort.c index 6bb6dcd4f..808d676fb 100644 --- a/d2x-rebirth/main/escort.c +++ b/d2x-rebirth/main/escort.c @@ -1426,7 +1426,7 @@ int maybe_steal_secondary_weapon(int player_num, int weapon_num) // ---------------------------------------------------------------------------- int maybe_steal_primary_weapon(int player_num, int weapon_num) { - if ((Players[player_num].primary_weapon_flags & HAS_FLAG(weapon_num)) && Players[player_num].primary_ammo[weapon_num]) { + if ((Players[player_num].primary_weapon_flags & HAS_FLAG(weapon_num)) && (!weapon_index_uses_vulcan_ammo(weapon_num) || Players[player_num].vulcan_ammo)) { if (d_rand() < THIEF_PROBABILITY) { if (weapon_num == 0) { if (Players[player_num].laser_level > 0) { diff --git a/d2x-rebirth/main/fireball.c b/d2x-rebirth/main/fireball.c index 8529fee33..12dec358a 100644 --- a/d2x-rebirth/main/fireball.c +++ b/d2x-rebirth/main/fireball.c @@ -711,7 +711,7 @@ void maybe_replace_powerup_with_energy(object *del_obj) } // Don't drop vulcan ammo if player maxed out. - if ((weapon_index_uses_vulcan_ammo(weapon_index) || (del_obj->contains_id == POW_VULCAN_AMMO)) && (Players[Player_num].primary_ammo[VULCAN_INDEX] >= VULCAN_AMMO_MAX)) + if ((weapon_index_uses_vulcan_ammo(weapon_index) || (del_obj->contains_id == POW_VULCAN_AMMO)) && (Players[Player_num].vulcan_ammo >= VULCAN_AMMO_MAX)) del_obj->contains_count = 0; else if (weapon_index != -1) { if ((player_has_weapon(weapon_index, 0) & HAS_WEAPON_FLAG) || weapon_nearby(del_obj, del_obj->contains_id)) { diff --git a/d2x-rebirth/main/gameseq.c b/d2x-rebirth/main/gameseq.c index 1c8d71ebb..c28eefff7 100644 --- a/d2x-rebirth/main/gameseq.c +++ b/d2x-rebirth/main/gameseq.c @@ -290,10 +290,6 @@ void init_ammo_and_energy(void) if (Players[Player_num].shields < StartingShields) Players[Player_num].shields = StartingShields; -// for (i=0; iprimary_ammo[VULCAN_INDEX]):(plp->primary_ammo[Primary_weapon]); + primary_ammo = (weapon_index_uses_vulcan_ammo(Primary_weapon))?(plp->vulcan_ammo):0; if (!((plp->energy >= energy_used) && (primary_ammo >= ammo_used))) auto_select_weapon(0); // Make sure the player can fire from this weapon. @@ -1570,10 +1570,10 @@ int do_laser_firing_player(void) plp->energy = 0; if (weapon_index_uses_vulcan_ammo(Primary_weapon)) { - if (ammo_used > plp->primary_ammo[VULCAN_INDEX]) - plp->primary_ammo[VULCAN_INDEX] = 0; + if (ammo_used > plp->vulcan_ammo) + plp->vulcan_ammo = 0; else - plp->primary_ammo[VULCAN_INDEX] -= ammo_used; + plp->vulcan_ammo -= ammo_used; } auto_select_weapon(0); // Make sure the player can fire from this weapon. diff --git a/d2x-rebirth/main/powerup.c b/d2x-rebirth/main/powerup.c index 5b455c330..28f71a319 100644 --- a/d2x-rebirth/main/powerup.c +++ b/d2x-rebirth/main/powerup.c @@ -152,8 +152,7 @@ void do_megawow_powerup(int quantity) Players[Player_num].primary_weapon_flags = 0xffff ^ HAS_FLAG(SUPER_LASER_INDEX); //no super laser Players[Player_num].secondary_weapon_flags = 0xffff; - for (i=0; i=5;i--){ @@ -1356,7 +1356,7 @@ void hud_show_weapons(void) #if defined(DXX_BUILD_DESCENT_II) case GAUSS_INDEX: #endif - sprintf(weapon_str, "%s: %i", weapon_name, f2i((unsigned) Players[Player_num].primary_ammo[VULCAN_INDEX] * (unsigned) VULCAN_AMMO_SCALE)); + sprintf(weapon_str, "%s: %i", weapon_name, f2i((unsigned) Players[Player_num].vulcan_ammo * (unsigned) VULCAN_AMMO_SCALE)); convert_1s(weapon_str); disp_primary_weapon_name = weapon_str; break; @@ -2197,8 +2197,8 @@ void draw_weapon_boxes() if (is_vulcan_ammo_weapon) { if (Newdemo_state == ND_STATE_RECORDING) - newdemo_record_primary_ammo(Players[Player_num].primary_ammo[VULCAN_INDEX]); - draw_primary_ammo_info(f2i((unsigned) VULCAN_AMMO_SCALE * (unsigned) Players[Player_num].primary_ammo[VULCAN_INDEX])); + newdemo_record_primary_ammo(Players[Player_num].vulcan_ammo); + draw_primary_ammo_info(f2i((unsigned) VULCAN_AMMO_SCALE * (unsigned) Players[Player_num].vulcan_ammo)); } #if defined(DXX_BUILD_DESCENT_II) @@ -2801,7 +2801,7 @@ void draw_hud() if (Newdemo_state == ND_STATE_RECORDING) { if (Primary_weapon == VULCAN_INDEX) - newdemo_record_primary_ammo(Players[Player_num].primary_ammo[Primary_weapon]); + newdemo_record_primary_ammo(Players[Player_num].vulcan_ammo); #if defined(DXX_BUILD_DESCENT_II) if (Primary_weapon == OMEGA_INDEX) newdemo_record_primary_ammo(Omega_charge); diff --git a/similar/main/multi.c b/similar/main/multi.c index 09f607795..012a384dd 100644 --- a/similar/main/multi.c +++ b/similar/main/multi.c @@ -1788,10 +1788,7 @@ multi_do_player_explode(const ubyte *buf) Players[pnum].secondary_ammo[SMISSILE5_INDEX] = buf[count]; count++; #endif - Players[pnum].primary_ammo[VULCAN_INDEX] = GET_INTEL_SHORT(buf + count); count += 2; -#if defined(DXX_BUILD_DESCENT_II) - Players[pnum].primary_ammo[GAUSS_INDEX] = GET_INTEL_SHORT(buf + count); count += 2; -#endif + Players[pnum].vulcan_ammo = GET_INTEL_SHORT(buf + count); count += 2; Players[pnum].flags = GET_INTEL_INT(buf + count); count += 4; multi_powcap_adjust_remote_cap (pnum); @@ -2667,12 +2664,8 @@ multi_send_player_explode(char type) multibuf[count++] = (char)Players[Player_num].secondary_ammo[SMISSILE5_INDEX]; #endif - PUT_INTEL_SHORT(multibuf+count, Players[Player_num].primary_ammo[VULCAN_INDEX] ); + PUT_INTEL_SHORT(multibuf+count, Players[Player_num].vulcan_ammo ); count += 2; -#if defined(DXX_BUILD_DESCENT_II) - PUT_INTEL_SHORT(multibuf+count, Players[Player_num].primary_ammo[GAUSS_INDEX] ); - count += 2; -#endif PUT_INTEL_INT(multibuf+count, Players[Player_num].flags ); count += 4; diff --git a/similar/main/newdemo.c b/similar/main/newdemo.c index 99f5b0ab7..4a7f726f2 100644 --- a/similar/main/newdemo.c +++ b/similar/main/newdemo.c @@ -917,7 +917,7 @@ void newdemo_record_start_demo() nd_record_v_secondary_ammo = -1; for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) - nd_write_short((short)Players[Player_num].primary_ammo[i]); + nd_write_short(i == VULCAN_INDEX ? Players[Player_num].vulcan_ammo : 0); for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) nd_write_short((short)Players[Player_num].secondary_ammo[i]); @@ -1718,9 +1718,12 @@ int newdemo_read_demo_start(enum purpose_type purpose) for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) { - nd_read_short((short*)&(Players[Player_num].primary_ammo[i])); + short s; + nd_read_short(&s); + if (i == VULCAN_INDEX) + Players[Player_num].vulcan_ammo = s; if (purpose == PURPOSE_REWRITE) - nd_write_short(Players[Player_num].primary_ammo[i]); + nd_write_short(s); } for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) @@ -2791,21 +2794,21 @@ int newdemo_read_frame_information(int rewrite) break; } + unsigned short value; // NOTE: Used (Primary_weapon==GAUSS_INDEX?VULCAN_INDEX:Primary_weapon) because game needs VULCAN_INDEX updated to show Gauss ammo -#if defined(DXX_BUILD_DESCENT_I) if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) - Players[Player_num].primary_ammo[Primary_weapon] = old_ammo; + value = old_ammo; else if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) - Players[Player_num].primary_ammo[Primary_weapon] = new_ammo; -#elif defined(DXX_BUILD_DESCENT_II) - if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) - Players[Player_num].primary_ammo[(Primary_weapon==GAUSS_INDEX?VULCAN_INDEX:Primary_weapon)] = old_ammo; - else if ((Newdemo_vcr_state == ND_STATE_PLAYBACK) || (Newdemo_vcr_state == ND_STATE_FASTFORWARD) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEFORWARD)) - Players[Player_num].primary_ammo[(Primary_weapon==GAUSS_INDEX?VULCAN_INDEX:Primary_weapon)] = new_ammo; - + value = new_ammo; + else + break; +#if defined(DXX_BUILD_DESCENT_II) if (Primary_weapon == OMEGA_INDEX) // If Omega cannon, we need to update Omega_charge - not stored in primary_ammo - Omega_charge = (Players[Player_num].primary_ammo[Primary_weapon]<=0?f1_0:Players[Player_num].primary_ammo[Primary_weapon]); + Omega_charge = (value<=0?f1_0:value); + else #endif + if (weapon_index_uses_vulcan_ammo(Primary_weapon)) + Players[Player_num].vulcan_ammo = value; break; } @@ -3190,7 +3193,12 @@ void newdemo_goto_end(int to_rewrite) nd_read_byte((sbyte *)&Primary_weapon); nd_read_byte((sbyte *)&Secondary_weapon); for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) - nd_read_short((short *)&(Players[Player_num].primary_ammo[i])); + { + short s; + nd_read_short(&s); + if (i == VULCAN_INDEX) + Players[Player_num].vulcan_ammo = s; + } for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) nd_read_short((short *)&(Players[Player_num].secondary_ammo[i])); nd_read_byte(&laser_level); @@ -3607,7 +3615,7 @@ void newdemo_write_end() byte_count += 8; for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) - nd_write_short((short)Players[Player_num].primary_ammo[i]); + nd_write_short(i == VULCAN_INDEX ? Players[Player_num].vulcan_ammo : 0); for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) nd_write_short((short)Players[Player_num].secondary_ammo[i]); diff --git a/similar/main/player.c b/similar/main/player.c index 2ead6b5d6..9cfae8ef1 100644 --- a/similar/main/player.c +++ b/similar/main/player.c @@ -27,8 +27,7 @@ void player_rw_swap(player_rw *p, int swap) p->primary_weapon_flags = SWAPSHORT(p->primary_weapon_flags); p->secondary_weapon_flags = SWAPSHORT(p->secondary_weapon_flags); #endif - for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) - p->primary_ammo[i] = SWAPSHORT(p->primary_ammo[i]); + p->vulcan_ammo = SWAPSHORT(p->vulcan_ammo); for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) p->secondary_ammo[i] = SWAPSHORT(p->secondary_ammo[i]); p->last_score = SWAPINT(p->last_score); diff --git a/similar/main/state.c b/similar/main/state.c index 10f7085a9..2f5d055db 100644 --- a/similar/main/state.c +++ b/similar/main/state.c @@ -476,8 +476,7 @@ void state_player_to_player_rw(player *pl, player_rw *pl_rw) pl_rw->killer_objnum = pl->killer_objnum; pl_rw->primary_weapon_flags = pl->primary_weapon_flags; pl_rw->secondary_weapon_flags = pl->secondary_weapon_flags; - for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) - pl_rw->primary_ammo[i] = pl->primary_ammo[i]; + pl_rw->vulcan_ammo = pl->vulcan_ammo; for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) pl_rw->secondary_ammo[i] = pl->secondary_ammo[i]; pl_rw->last_score = pl->last_score; @@ -530,8 +529,7 @@ void state_player_rw_to_player(player_rw *pl_rw, player *pl) pl->killer_objnum = pl_rw->killer_objnum; pl->primary_weapon_flags = pl_rw->primary_weapon_flags; pl->secondary_weapon_flags = pl_rw->secondary_weapon_flags; - for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) - pl->primary_ammo[i] = pl_rw->primary_ammo[i]; + pl->vulcan_ammo = pl_rw->vulcan_ammo; for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) pl->secondary_ammo[i] = pl_rw->secondary_ammo[i]; pl->last_score = pl_rw->last_score; diff --git a/similar/main/weapon.c b/similar/main/weapon.c index 0f690231d..ce3004467 100644 --- a/similar/main/weapon.c +++ b/similar/main/weapon.c @@ -212,13 +212,15 @@ int player_has_weapon(int weapon_num, int secondary_flag) // Special case: Gauss cannon uses vulcan ammo. if (weapon_index_uses_vulcan_ammo(weapon_num)) { - if (Weapon_info[weapon_index].ammo_usage <= Players[Player_num].primary_ammo[VULCAN_INDEX]) - return_value |= HAS_AMMO_FLAG; - } else - if (Weapon_info[weapon_index].ammo_usage <= Players[Player_num].primary_ammo[weapon_num]) + if (Weapon_info[weapon_index].ammo_usage <= Players[Player_num].vulcan_ammo) return_value |= HAS_AMMO_FLAG; + } #if defined(DXX_BUILD_DESCENT_I) + /* Hack to work around check in do_weapon_select */ + else + return_value |= HAS_AMMO_FLAG; + //added on 1/21/99 by Victor Rachels... yet another hack //fusion has 0 energy usage, HAS_ENERGY_FLAG was always true if(weapon_num==FUSION_INDEX) @@ -834,16 +836,16 @@ int pick_up_ammo(int class_flag,int weapon_index,int ammo_count) max *= 2; #endif - if (Players[Player_num].primary_ammo[weapon_index] == max) + if (Players[Player_num].vulcan_ammo == max) return 0; - old_ammo = Players[Player_num].primary_ammo[weapon_index]; + old_ammo = Players[Player_num].vulcan_ammo; - Players[Player_num].primary_ammo[weapon_index] += ammo_count; + Players[Player_num].vulcan_ammo += ammo_count; - if (Players[Player_num].primary_ammo[weapon_index] > max) { - ammo_count += (max - Players[Player_num].primary_ammo[weapon_index]); - Players[Player_num].primary_ammo[weapon_index] = max; + if (Players[Player_num].vulcan_ammo > max) { + ammo_count += (max - Players[Player_num].vulcan_ammo); + Players[Player_num].vulcan_ammo = max; } cutpoint=POrderList (255); @@ -1218,12 +1220,12 @@ void DropCurrentWeapon () //if it's one of these, drop some ammo with the weapon - ammo = Players[Player_num].primary_ammo[VULCAN_INDEX]; + ammo = Players[Player_num].vulcan_ammo; if ((Players[Player_num].primary_weapon_flags & HAS_FLAG(VULCAN_INDEX)) && (Players[Player_num].primary_weapon_flags & HAS_FLAG(GAUSS_INDEX))) ammo /= 2; //if both vulcan & gauss, drop half - Players[Player_num].primary_ammo[VULCAN_INDEX] -= ammo; + Players[Player_num].vulcan_ammo -= ammo; if (objnum!=-1) Objects[objnum].ctype.powerup_info.count = ammo;