e.spawnshieldtime = 1;
}
- else if((e.flags & FL_WEAPON) && g_weapon_stay)
+ else if((e.flags & FL_WEAPON) && !(e.flags & FL_NO_WEAPON_STAY) && g_weapon_stay)
{
// make the item translucent and not touchable
e.model = e.mdl;
case IT_FUEL_REGEN: name = "item-fuelregen"; rgb = '1 0.5 0'; break;
case IT_JETPACK: name = "item-jetpack"; rgb = '0.5 0.5 0.5'; break;
}
+ if(self.flags & FL_WEAPON)
+ {
+ entity wi = get_weaponinfo(self.weapon);
+ if(wi)
+ {
+ name = wi.model2;
+ rgb = '0 0 0';
+ }
+ }
if(!name)
{
print("Unknown powerup-marked item is wanting to respawn\n");
void Item_ScheduleRespawnIn(entity e, float t)
{
- if(e.flags & FL_POWERUP)
+ if((e.flags & FL_POWERUP) || (e.weapons & WEPBIT_SUPERWEAPONS))
{
e.think = Item_RespawnCountdown;
e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);
if (item.strength_finished)
{
pickedup = TRUE;
- player.strength_finished = max(player.strength_finished, time) + autocvar_g_balance_powerup_strength_time;
+ player.strength_finished = max(player.strength_finished, time) + item.strength_finished;
}
if (item.invincible_finished)
{
pickedup = TRUE;
- player.invincible_finished = max(player.invincible_finished, time) + autocvar_g_balance_powerup_invincible_time;
+ player.invincible_finished = max(player.invincible_finished, time) + item.invincible_finished;
+ }
+ if (item.superweapons_finished)
+ {
+ pickedup = TRUE;
+ player.superweapons_finished = max(player.superweapons_finished, time) + item.superweapons_finished;
}
}
return;
}
+ if(self.model != "")
+ itemmodel = self.model;
+ if(self.item_pickupsound != "")
+ pickupsound = self.item_pickupsound;
+
self.reset = Item_Reset;
// it's a level item
if(self.spawnflags & 1)
// replace with invis
if (itemid == IT_STRENGTH)
{
- self.strength_finished = 30;
+ if(!self.strength_finished)
+ self.strength_finished = autocvar_g_balance_powerup_strength_time;
StartItem ("models/items/g_strength.md3",
"misc/powerup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
"Invisibility", IT_STRENGTH, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_MID);
// replace with speed
if (itemid == IT_INVINCIBLE)
{
- self.invincible_finished = 30;
+ if(!self.invincible_finished)
+ self.invincible_finished = autocvar_g_balance_powerup_invincible_time;
StartItem ("models/items/g_invincible.md3",
"misc/powerup_shield.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
"Speed", IT_INVINCIBLE, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_MID);
entity oldself;
float i, j;
- // set the respawntime in advance (so replaced weapons can copy it)
-
- if(!self.respawntime)
- {
- e = get_weaponinfo(wpn);
- if(e.items == IT_SUPERWEAPON)
- {
- self.respawntime = g_pickup_respawntime_powerup;
- self.respawntimejitter = g_pickup_respawntimejitter_powerup;
- }
- else
- {
- self.respawntime = g_pickup_respawntime_weapon;
- self.respawntimejitter = g_pickup_respawntimejitter_weapon;
- }
- }
-
if(self.classname != "droppedweapon" && self.classname != "replacedweapon")
{
e = get_weaponinfo(wpn);
e = get_weaponinfo(wpn);
- if(e.items && e.items != IT_SUPERWEAPON)
+ if(!self.respawntime)
+ {
+ if(self.weapons & WEPBIT_SUPERWEAPONS)
+ {
+ self.respawntime = g_pickup_respawntime_superweapon;
+ self.respawntimejitter = g_pickup_respawntimejitter_superweapon;
+ }
+ else
+ {
+ self.respawntime = g_pickup_respawntime_weapon;
+ self.respawntimejitter = g_pickup_respawntimejitter_weapon;
+ }
+ }
+
+ if(self.weapons & WEPBIT_SUPERWEAPONS)
+ if(!self.superweapons_finished)
+ self.superweapons_finished = autocvar_g_balance_superweapons_time;
+
+ if(e.items)
{
for(i = 0, j = 1; i < 24; ++i, j *= 2)
{
}
}
}
- else
- {
+
+ // no weapon-stay on superweapons
+ if(self.weapons & WEPBIT_SUPERWEAPONS)
self.flags |= FL_NO_WEAPON_STAY;
- }
// weapon stay isn't supported for teamed weapons
if(self.team)
minstagib_items(IT_STRENGTH);
} else {
precache_sound("weapons/strength_fire.wav");
- self.strength_finished = 30;
+ if(!self.strength_finished)
+ self.strength_finished = autocvar_g_balance_powerup_strength_time;
StartItem ("models/items/g_strength.md3", "misc/powerup.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Strength Powerup", IT_STRENGTH, 0, FL_POWERUP, generic_pickupevalfunc, 100000);
}
}
if(g_minstagib) {
minstagib_items(IT_INVINCIBLE);
} else {
- self.invincible_finished = 30;
+ if(!self.invincible_finished)
+ self.invincible_finished = autocvar_g_balance_powerup_invincible_time;
StartItem ("models/items/g_invincible.md3", "misc/powerup_shield.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup, "Shield", IT_INVINCIBLE, 0, FL_POWERUP, generic_pickupevalfunc, 100000);
}
}
self.strength_finished = autocvar_g_balance_powerup_strength_time;
if(!self.invincible_finished)
self.invincible_finished = autocvar_g_balance_powerup_invincible_time;
+ if(!self.superweapons_finished)
+ self.superweapons_finished = autocvar_g_balance_superweapons_time;
precache_sound("misc/itempickup.wav");
precache_sound("misc/megahealth.wav");
else if(argv(i) == "unlimited_superweapons") self.items |= IT_UNLIMITED_SUPERWEAPONS;
else if(argv(i) == "strength") self.items |= IT_STRENGTH;
else if(argv(i) == "invincible") self.items |= IT_INVINCIBLE;
+ else if(argv(i) == "superweapons") self.items |= IT_SUPERWEAPON;
else if(argv(i) == "jetpack") self.items |= IT_JETPACK;
else if(argv(i) == "fuel_regen") self.items |= IT_FUEL_REGEN;
else
self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_UNLIMITED_SUPERWEAPONS), "unlimited_superweapons");
self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.strength_finished * !!(self.items & IT_STRENGTH), "strength");
self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.invincible_finished * !!(self.items & IT_INVINCIBLE), "invincible");
+ self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.superweapons_finished * !!(self.items & IT_SUPERWEAPON), "superweapons");
self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_JETPACK), "jetpack");
self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_FUEL_REGEN), "fuel_regen");
if(self.ammo_shells != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.ammo_shells), "shells");
e.strength_finished = max(0, e.strength_finished - time);
e.invincible_finished = max(0, e.invincible_finished - time);
+ e.superweapons_finished = max(0, e.superweapons_finished - time);
PREGIVE(e, items);
PREGIVE(e, weapons);
PREGIVE(e, strength_finished);
PREGIVE(e, invincible_finished);
+ PREGIVE(e, superweapons_finished);
PREGIVE(e, ammo_nails);
PREGIVE(e, ammo_cells);
PREGIVE(e, ammo_shells);
continue;
case "ALL":
got += GiveBit(e, items, IT_FUEL_REGEN, op, val);
- got += GiveValue(e, strength_finished, op, time);
- got += GiveValue(e, invincible_finished, op, time);
+ got += GiveValue(e, strength_finished, op, val);
+ got += GiveValue(e, invincible_finished, op, val);
+ got += GiveValue(e, superweapons_finished, op, val);
got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val);
case "all":
got += GiveBit(e, items, IT_JETPACK, op, val);
case "invincible":
got += GiveValue(e, invincible_finished, op, val);
break;
+ case "superweapons":
+ got += GiveValue(e, superweapons_finished, op, val);
+ break;
case "cells":
got += GiveValue(e, ammo_cells, op, val);
break;
POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, "misc/armor25.wav", string_null);
POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, "misc/megahealth.wav", string_null);
+ if(e.superweapons_finished <= 0)
+ if(self.weapons & WEPBIT_SUPERWEAPONS)
+ e.superweapons_finished = autocvar_g_balance_superweapons_time;
+
if (g_minstagib)
{
e.health = bound(0, e.health, 100);
e.invincible_finished = 0;
else
e.invincible_finished += time;
+ if(e.superweapons_finished <= 0)
+ e.superweapons_finished = 0;
+ else
+ e.superweapons_finished += time;
if not(e.weapons & W_WeaponBit(e.switchweapon))
_switchweapon = TRUE;