implement ammo distribution flag

This commit is contained in:
alison wright 2019-09-19 19:41:14 -04:00
parent 71ac1c45a1
commit 6bca60e74a
2 changed files with 46 additions and 43 deletions

View File

@ -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) {

6
todo
View File

@ -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