this.onground_time = time + 0.5;
}
}
- else if (autocvar_cl_animate_items)
+ else if (autocvar_cl_animate_items && !this.item_simple) // no bobbing applied to simple items, for consistency's sake (no visual difference between ammo and weapons)
{
if(this.ItemStatus & ITS_ANIMATE1)
{
- if(!this.item_simple)
- this.angles += this.avelocity * frametime;
+ this.angles += this.avelocity * frametime;
float fade_in = bound(0, time - this.onground_time, 1);
setorigin(this, this.oldorigin + fade_in * ('0 0 10' + '0 0 8' * sin((time - this.onground_time) * 2)));
}
if(this.ItemStatus & ITS_ANIMATE2)
{
- if(!this.item_simple)
- this.angles += this.avelocity * frametime;
+ this.angles += this.avelocity * frametime;
float fade_in = bound(0, time - this.onground_time, 1);
setorigin(this, this.oldorigin + fade_in * ('0 0 8' + '0 0 4' * sin((time - this.onground_time) * 3)));
}
{
WriteShort(MSG_ENTITY, this.colormap);
WriteByte(MSG_ENTITY, this.glowmod.x * 255.0);
- WriteByte(MSG_ENTITY, this.glowmod.y * 255.0);
- WriteByte(MSG_ENTITY, this.glowmod.z * 255.0);
+ WriteByte(MSG_ENTITY, this.glowmod.y * 255.0);
+ WriteByte(MSG_ENTITY, this.glowmod.z * 255.0);
}
if(sf & ISF_DROP)
return true;
}
-void Item_Show (entity e, int mode)
+void Item_Show(entity e, int mode)
{
e.effects &= ~(EF_ADDITIVE | EF_STARDUST | EF_FULLBRIGHT | EF_NODEPTHTEST);
e.ItemStatus &= ~ITS_STAYWEP;
void Item_ItemsTime_SetTime(entity e, float t);
void Item_ItemsTime_SetTimesForAllPlayers();
-void Item_Respawn (entity this)
+void Item_Respawn(entity this)
{
Item_Show(this, 1);
sound(this, CH_TRIGGER, this.itemdef.m_respawnsound, VOL_BASE, ATTEN_NORM); // play respawn sound
setorigin(this, this.origin);
- if (Item_ItemsTime_Allow(this.itemdef) || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS))
+ if (Item_ItemsTime_Allow(this.itemdef) || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS))
{
float t = Item_ItemsTime_UpdateTime(this, 0);
Item_ItemsTime_SetTime(this, t);
Send_Effect(EFFECT_ITEM_RESPAWN, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
}
-void Item_RespawnCountdown (entity this)
+void Item_RespawnCountdown(entity this)
{
if(this.item_respawncounter >= ITEM_RESPAWN_TICKS)
{
}
}
TeamBalance_Destroy(balance);
-
+
if (players >= 2) {
return normal_respawntime * (r / (players + o) + l);
} else {
}
}
bool pickedup = false;
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_HEALTH, item.max_health));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_ARMOR, item.max_armorvalue));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_SHELLS, g_pickup_shells_max));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_BULLETS, g_pickup_nails_max));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_ROCKETS, g_pickup_rockets_max));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_CELLS, g_pickup_cells_max));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_PLASMA, g_pickup_plasma_max));
- pickedup = (pickedup || Item_GiveAmmoTo(item, player, RES_FUEL, g_pickup_fuel_max));
+ pickedup |= Item_GiveAmmoTo(item, player, RES_HEALTH, item.max_health);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_ARMOR, item.max_armorvalue);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_SHELLS, g_pickup_shells_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_BULLETS, g_pickup_nails_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_ROCKETS, g_pickup_rockets_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_CELLS, g_pickup_cells_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_PLASMA, g_pickup_plasma_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_FUEL, g_pickup_fuel_max);
if (item.itemdef.instanceOfWeaponPickup)
{
WepSet w;
});
e = RandomSelection_chosen_ent;
- e.state = 0;
- Item_Show(e, 1);
+ if (!e)
+ return;
IL_EACH(g_items, it.team == this.team,
{
Item_Show(it, -1);
it.state = 1; // state 1 = initially hidden item, apparently
}
+ else
+ Item_Reset(it);
it.effects &= ~EF_NODRAW;
}
});
-
- Item_Reset(this);
}
}
{
string itemname = def.m_name;
Model itemmodel = def.m_model;
- Sound pickupsound = def.m_sound;
+ Sound pickupsound = def.m_sound;
float(entity player, entity item) pickupevalfunc = def.m_pickupevalfunc;
float pickupbasevalue = def.m_botvalue;
int itemflags = def.m_itemflags;
startitem_failed = false;
this.item_model_ent = itemmodel;
- this.item_pickupsound_ent = pickupsound;
+ this.item_pickupsound_ent = pickupsound;
- if(def.m_iteminit)
- def.m_iteminit(def, this);
+ if(def.m_iteminit)
+ def.m_iteminit(def, this);
if(!this.respawntime) // both need to be set
{
|| (def.instanceOfHealth && def != ITEM_HealthSmall)
|| (def.instanceOfArmor && def != ITEM_ArmorSmall)
|| (itemid & (IT_KEY1 | IT_KEY2))
- )
+ )
{
if(!this.target || this.target == "")
this.target = "###item###"; // for finding the nearest item using findnearest
}
this.state = 0;
- if(this.team) // broken, no idea why.
+ if(this.team)
{
if(!this.cnt)
this.cnt = 1; // item probability weight
spawnfunc(target_items)
{
- int n;
- string s;
-
this.use = target_items_use;
if(!this.strength_finished)
this.strength_finished = autocvar_g_balance_powerup_strength_time;
if(!this.superweapons_finished)
this.superweapons_finished = autocvar_g_balance_superweapons_time;
- n = tokenize_console(this.netname);
+ int n = tokenize_console(this.netname);
if(argv(0) == "give")
{
this.netname = substring(this.netname, argv_start_index(1), argv_end_index(-1) - argv_start_index(1));
{
for(int j = 0; j < n; ++j)
{
- if (argv(j) == "unlimited_ammo") this.items |= IT_UNLIMITED_AMMO;
- else if(argv(j) == "unlimited_weapon_ammo") this.items |= IT_UNLIMITED_WEAPON_AMMO;
+ // this is from a time when unlimited superweapons were handled together with ammo in some parts of the code
+ if (argv(j) == "unlimited_ammo") this.items |= IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS;
+ else if(argv(j) == "unlimited_weapon_ammo") this.items |= IT_UNLIMITED_AMMO;
else if(argv(j) == "unlimited_superweapons") this.items |= IT_UNLIMITED_SUPERWEAPONS;
else if(argv(j) == "strength") this.items |= ITEM_Strength.m_itemid;
else if(argv(j) == "invincible") this.items |= ITEM_Shield.m_itemid;
{
FOREACH(Buffs, it != BUFF_Null,
{
- s = Buff_UndeprecateName(argv(j));
+ string s = Buff_UndeprecateName(argv(j));
if(s == it.netname)
{
STAT(BUFFS, this) |= (it.m_itemid);
}
});
FOREACH(Weapons, it != WEP_Null, {
- s = W_UndeprecateName(argv(j));
+ string s = W_UndeprecateName(argv(j));
if(s == it.netname)
{
STAT(WEAPONS, this) |= (it.m_wepset);
}
this.netname = "";
- this.netname = sprintf("%s %s%d %s", this.netname, itemprefix, boolean(this.items & IT_UNLIMITED_WEAPON_AMMO), "unlimited_weapon_ammo");
+ this.netname = sprintf("%s %s%d %s", this.netname, itemprefix, boolean(this.items & IT_UNLIMITED_AMMO), "unlimited_weapon_ammo");
this.netname = sprintf("%s %s%d %s", this.netname, itemprefix, boolean(this.items & IT_UNLIMITED_SUPERWEAPONS), "unlimited_superweapons");
this.netname = sprintf("%s %s%d %s", this.netname, valueprefix, this.strength_finished * boolean(this.items & ITEM_Strength.m_itemid), "strength");
this.netname = sprintf("%s %s%d %s", this.netname, valueprefix, this.invincible_finished * boolean(this.items & ITEM_Shield.m_itemid), "invincible");
for(int j = 0; j < n; ++j)
{
FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(argv(j)) == it.netname, {
- it.wr_init(it);
- break;
+ it.wr_init(it);
+ break;
});
}
}
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);
+ got += GiveBit(e, items, IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS, op, val);
case "all":
got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
got += GiveResourceValue(e, RES_HEALTH, op, val);
got += GiveResourceValue(e, RES_FUEL, op, val);
break;
case "unlimited_ammo":
- got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val);
+ // this is from a time when unlimited superweapons were handled together with ammo in some parts of the code
+ got += GiveBit(e, items, IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS, op, val);
break;
case "unlimited_weapon_ammo":
- got += GiveBit(e, items, IT_UNLIMITED_WEAPON_AMMO, op, val);
+ got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val);
break;
case "unlimited_superweapons":
got += GiveBit(e, items, IT_UNLIMITED_SUPERWEAPONS, op, val);
POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, SND_ITEMPICKUP, SND_Null);
POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, SND_POWERUP, SND_POWEROFF);
- POSTGIVE_BIT(e, items, IT_UNLIMITED_WEAPON_AMMO, SND_POWERUP, SND_POWEROFF);
+ POSTGIVE_BIT(e, items, IT_UNLIMITED_AMMO, SND_POWERUP, SND_POWEROFF);
POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, SND_ITEMPICKUP, SND_Null);
FOREACH(Weapons, it != WEP_Null, {
POSTGIVE_WEAPON(e, it, SND_WEAPONPICKUP, SND_Null);