X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ft_items.qc;h=ef7438c96a186f8f3e4c42c9ba2c03fc07739a11;hb=31ca5938039b6bf61a583aa11f52e0b1ffeb3f63;hp=72bfafd125460dd040405514e5cf1b3f8cdeca56;hpb=5a11b6645d5054238ea01f8a23d016f5bf98c7d1;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index 72bfafd12..ef7438c96 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -15,7 +15,7 @@ #include "constants.qh" #include - #include + #include #include "triggers/subs.qh" #include "util.qh" @@ -479,7 +479,7 @@ void Item_Think() } bool Item_ItemsTime_SpectatorOnly(GameItem it); -bool Item_ItemsTime_Allow(GameItem it, WepSet _weapons); +bool Item_ItemsTime_Allow(GameItem it); float Item_ItemsTime_UpdateTime(entity e, float t); void Item_ItemsTime_SetTime(entity e, float t); void Item_ItemsTime_SetTimesForAllPlayers(); @@ -496,7 +496,7 @@ void Item_Respawn () sound (self, CH_TRIGGER, SND_ITEMRESPAWN, VOL_BASE, ATTEN_NORM); // play respawn sound setorigin (self, self.origin); - if (Item_ItemsTime_Allow(self.itemdef, self.weapons)) + if (Item_ItemsTime_Allow(self.itemdef) || self.weapons & WEPSET_SUPERWEAPONS) { float t = Item_ItemsTime_UpdateTime(self, 0); Item_ItemsTime_SetTime(self, t); @@ -582,7 +582,8 @@ void Item_RespawnThink() void Item_ScheduleRespawnIn(entity e, float t) { - if (Item_ItemsTime_Allow(e.itemdef, e.weapons)) + // if the respawn time is longer than 10 seconds, show a waypoint, otherwise, just respawn normally + if ((Item_ItemsTime_Allow(e.itemdef) || e.weapons & WEPSET_SUPERWEAPONS) && (t - ITEM_RESPAWN_TICKS) > 0) { e.think = Item_RespawnCountdown; e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS); @@ -615,7 +616,7 @@ void Item_ScheduleRespawn(entity e) void Item_ScheduleInitialRespawn(entity e) { Item_Show(e, 0); - Item_ScheduleRespawnIn(e, game_starttime - time + ITEM_RESPAWNTIME_INITIAL(e)); + Item_ScheduleRespawnIn(e, game_starttime - time + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e))); } float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax, float mode) @@ -707,6 +708,14 @@ float Item_GiveTo(entity item, entity player) } } + if (item.itemdef.instanceOfPowerup) + { + if ((item.itemdef == ITEM_JetpackRegen) && !(player.items & IT_FUEL_REGEN)) + Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_ITEM_FUELREGEN_GOT); + else if ((item.itemdef == ITEM_Jetpack) && !(player.items & IT_JETPACK)) + Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_ITEM_JETPACK_GOT); + } + int its; if((its = (item.items - (item.items & player.items)) & IT_PICKUPMASK)) { @@ -894,7 +903,6 @@ void Item_FindTeam() } // Savage: used for item garbage-collection -// TODO: perhaps nice special effect? void RemoveItem() {SELFPARAM(); if(wasfreed(self) || !self) { return; } @@ -1529,7 +1537,7 @@ spawnfunc(target_items) if(self.ammo_plasma != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.ammo_plasma), "plasma"); if(self.ammo_fuel != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.ammo_fuel), "fuel"); if(self.health != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.health), "health"); - if(self.armorvalue != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.health), "armor"); + if(self.armorvalue != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.armorvalue), "armor"); FOREACH(Weapons, it != WEP_Null, LAMBDA(self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.weapons & (it.m_wepset)), it.netname))); } self.netname = strzone(self.netname); @@ -1610,19 +1618,19 @@ float GiveWeapon(entity e, float wpn, float op, float val) return (v0 != v1); } -void GiveSound(entity e, float v0, float v1, float t, string snd_incr, string snd_decr) +void GiveSound(entity e, float v0, float v1, float t, Sound snd_incr, Sound snd_decr) { if(v1 == v0) return; if(v1 <= v0 - t) { - if(snd_decr != "") - _sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM); + if(snd_decr != NULL) + sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM); } else if(v0 >= v0 + t) { - if(snd_incr != "") - _sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM); + if(snd_incr != NULL) + sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM); } } @@ -1780,26 +1788,26 @@ float GiveItems(entity e, float beginarg, float endarg) op = OP_SET; } - POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, SND(ITEMPICKUP), string_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, ITEM_Jetpack.m_itemid, SND(ITEMPICKUP), string_null); + 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, ITEM_Jetpack.m_itemid, SND_ITEMPICKUP, SND_Null); FOREACH(Weapons, it != WEP_Null, LAMBDA( - POSTGIVE_WEAPON(e, it, SND(WEAPONPICKUP), string_null); + POSTGIVE_WEAPON(e, it, SND_WEAPONPICKUP, SND_Null); if(!(save_weapons & (it.m_wepset))) if(e.weapons & (it.m_wepset)) it.wr_init(it); )); - POSTGIVE_VALUE(e, strength_finished, 1, SND(POWERUP), SND(POWEROFF)); - POSTGIVE_VALUE(e, invincible_finished, 1, "misc/powerup_shield.wav", SND(POWEROFF)); - POSTGIVE_VALUE(e, ammo_nails, 0, SND(ITEMPICKUP), string_null); - POSTGIVE_VALUE(e, ammo_cells, 0, SND(ITEMPICKUP), string_null); - POSTGIVE_VALUE(e, ammo_plasma, 0, SND(ITEMPICKUP), string_null); - POSTGIVE_VALUE(e, ammo_shells, 0, SND(ITEMPICKUP), string_null); - POSTGIVE_VALUE(e, ammo_rockets, 0, SND(ITEMPICKUP), string_null); - POSTGIVE_VALUE_ROT(e, ammo_fuel, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, SND(ITEMPICKUP), string_null); - POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND(ARMOR25), string_null); - POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND(MEGAHEALTH), string_null); + POSTGIVE_VALUE(e, strength_finished, 1, SND_POWERUP, SND_POWEROFF); + POSTGIVE_VALUE(e, invincible_finished, 1, SND_Shield, SND_POWEROFF); + POSTGIVE_VALUE(e, ammo_nails, 0, SND_ITEMPICKUP, SND_Null); + POSTGIVE_VALUE(e, ammo_cells, 0, SND_ITEMPICKUP, SND_Null); + POSTGIVE_VALUE(e, ammo_plasma, 0, SND_ITEMPICKUP, SND_Null); + POSTGIVE_VALUE(e, ammo_shells, 0, SND_ITEMPICKUP, SND_Null); + POSTGIVE_VALUE(e, ammo_rockets, 0, SND_ITEMPICKUP, SND_Null); + POSTGIVE_VALUE_ROT(e, ammo_fuel, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, SND_ITEMPICKUP, SND_Null); + POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_ARMOR25, SND_Null); + POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_MEGAHEALTH, SND_Null); if(e.superweapons_finished <= 0) if(self.weapons & WEPSET_SUPERWEAPONS)