From 6bca60e74a2a4a278b23ec499ad007dba9c3ac10 Mon Sep 17 00:00:00 2001 From: Alison Watson Date: Thu, 19 Sep 2019 19:41:14 -0400 Subject: [PATCH] implement ammo distribution flag --- source/items.qc | 83 +++++++++++++++++++++++++------------------------ todo | 6 ++-- 2 files changed, 46 insertions(+), 43 deletions(-) diff --git a/source/items.qc b/source/items.qc index bf23253..7f22faf 100644 --- a/source/items.qc +++ b/source/items.qc @@ -442,7 +442,7 @@ void() weapon_touch = { sound(other, CHAN_ITEM, "weapons/pkup.wav", 1, ATTN_NORM); stuffcmd(other, "bf\n"); - bound_other_ammo(); + bound_ammo(other); // change to the weapon old = other.items; @@ -566,65 +566,66 @@ AMMO =============================================================================== */ +void(.float ammo, float max) distribute_ammo = { + entity pl, stemp; + + if(sf_dist_ammo) { + pl = find(world, classname, "player"); + while(pl != world) { + pl.ammo += self.aflag; + bound_ammo(pl); + stemp = self; + self = pl; + W_SetCurrentAmmo(); + self = stemp; + pl = find(pl, classname, "player"); + } + } else { + if(other.ammo >= max) { + return; + } + other.ammo += self.aflag; + bound_ammo(other); + } +}; + void() ammo_touch = { entity stemp; float best; - if(other.classname != "player") { - return; - } - if(other.health <= 0) { + if(other.classname != "player" || other.health <= 0) { return; } - // if the player was using their best weapon, change up to the new one if better + // if the player was using their best weapon, change up to the new one if + // better stemp = self; self = other; best = W_BestWeapon(); self = stemp; - - // shotgun - if(self.weapon == 1) { - if(other.ammo_shells >= 100) { - return; - } - other.ammo_shells = other.ammo_shells + self.aflag; + switch(self.weapon) { + case AMTYPE_SHELLS: + distribute_ammo(ammo_shells, AMMAX_SHELLS); + break; + case AMTYPE_NAILS: + distribute_ammo(ammo_nails, AMMAX_NAILS); + break; + case AMTYPE_ROCKETS: + distribute_ammo(ammo_rockets, AMMAX_ROCKETS); + break; + case AMTYPE_CELLS: + distribute_ammo(ammo_cells, AMMAX_CELLS); + break; } - // spikes - if(self.weapon == 2) { - if(other.ammo_nails >= 200) { - return; - } - other.ammo_nails = other.ammo_nails + self.aflag; - } - - // rockets - if(self.weapon == 3) { - if(other.ammo_rockets >= 100) { - return; - } - other.ammo_rockets = other.ammo_rockets + self.aflag; - } - - // cells - if(self.weapon == 4) { - if(other.ammo_cells >= 100) { - return; - } - other.ammo_cells = other.ammo_cells + self.aflag; - } - - bound_other_ammo(); - sprint(other, "You got the ", self.netname, "\n"); + // ammo touch sound sound(other, CHAN_ITEM, "weapons/lock4.wav", 1, ATTN_NORM); stuffcmd(other, "bf\n"); // change to a better weapon if appropriate - if(other.weapon == best) { stemp = self; self = other; @@ -1100,7 +1101,7 @@ void() BackpackTouch = { old = other.items; other.items = other.items | new; - bound_other_ammo(); + bound_ammo(other); if(self.ammo_shells) { if(acount) { diff --git a/todo b/todo index 179af2e..9342750 100644 --- a/todo +++ b/todo @@ -9,7 +9,8 @@ rename all functions to be lower_underscore core features: -distributed ammo +add registercvar support +restart map after 10 seconds when everyone is dead useful features: @@ -21,7 +22,7 @@ extraneous features: emotes player sound effect option -players shoot through eachother +players shoot through eachother (teamplay 4?) selectable player models and skins sound clips third person player weapon models @@ -30,5 +31,6 @@ done: corpse pickups have keys custom pronouns +distributed ammo lives counting no friendly fire