var float autocvar_cl_animate_items = 1;
var float autocvar_cl_ghost_items = 0.45;
var vector autocvar_cl_ghost_items_color = '-1 -1 -1';
-float autocvar_cl_fullbright_items;
-vector autocvar_cl_weapon_stay_color = '2 0.5 0.5';
-float autocvar_cl_weapon_stay_alpha = 0.75;
-float autocvar_cl_simple_items = 0;
-float cl_simple_items;
-float cl_ghost_items_alpha;
-
+var float autocvar_cl_fullbright_items = 0;
+var vector autocvar_cl_weapon_stay_color = '2 0.5 0.5';
+var float autocvar_cl_weapon_stay_alpha = 0.75;
+var float autocvar_cl_simple_items = 0;
+var string autocvr_cl_simpleitems_postfix = "_simple";
.float spawntime;
.float gravity;
.vector colormod;
}
}
-float csqcitems_started; // remove this after a release or two
-void csqcitems_start()
-{
- if(autocvar_cl_ghost_items == 1)
- cl_ghost_items_alpha = 0.55;
- else
- cl_ghost_items_alpha = bound(0, autocvar_cl_ghost_items, 1);
-
- csqcitems_started = TRUE;
-}
-
void ItemRead(float _IsNew)
{
- if(!csqcitems_started)
- csqcitems_start();
-
float sf = ReadByte();
if(sf & ISF_LOCATION)
}
else
{
- if (cl_ghost_items_alpha)
+ if (autocvar_cl_ghost_items_color)
{
self.alpha = autocvar_cl_ghost_items;
self.colormod = self.glowmod = autocvar_cl_ghost_items_color;
self.mdl = "";
string _fn = ReadString();
- if(cl_simple_items && (self.ItemStatus & ITS_ALLOWSI))
+ if(autocvar_cl_simple_items && (self.ItemStatus & ITS_ALLOWSI))
{
string _fn2 = substring(_fn, 0 , strlen(_fn) -4);
self.draw = ItemDrawSimple;
- if(fexists(strcat(_fn2, "_simple.md3")))
- self.mdl = strzone(strcat(_fn2, "_simple.md3"));
- else if(fexists(strcat(_fn2, "_simple.dpm")))
- self.mdl = strzone(strcat(_fn2, "_simple.dpm"));
- else if(fexists(strcat(_fn2, "_simple.iqm")))
- self.mdl = strzone(strcat(_fn2, "_simple.iqm"));
- else if(fexists(strcat(_fn2, "_simple.obj")))
- self.mdl = strzone(strcat(_fn2, "_simple.obj"));
+
+
+ if(fexists(sprintf("%s%s.md3", _fn2, autocvr_cl_simpleitems_postfix)))
+ self.mdl = strzone(sprintf("%s%s.md3", _fn2, autocvr_cl_simpleitems_postfix));
+ else if(fexists(sprintf("%s%s.dpm", _fn2, autocvr_cl_simpleitems_postfix)))
+ self.mdl = strzone(sprintf("%s%s.dpm", _fn2, autocvr_cl_simpleitems_postfix));
+ else if(fexists(sprintf("%s%s.iqm", _fn2, autocvr_cl_simpleitems_postfix)))
+ self.mdl = strzone(sprintf("%s%s.iqm", _fn2, autocvr_cl_simpleitems_postfix));
+ else if(fexists(sprintf("%s%s.obj", _fn2, autocvr_cl_simpleitems_postfix)))
+ self.mdl = strzone(sprintf("%s%s.obj", _fn2, autocvr_cl_simpleitems_postfix));
else
{
self.draw = ItemDraw;
// add more things here (health, armor)
default: error("requested item has no counter field");
}
+#ifdef GMQCC
+ // should never happen
+ return health;
+#endif
}
string Item_CounterFieldName(float it)
// add more things here (health, armor)
default: error("requested item has no counter field name");
}
+#ifdef GMQCC
+ // should never happen
+ return string_null;
+#endif
}
.float max_armorvalue;
rgb = '1 0 0';
}
}
- if(!name)
- {
- print("Unknown powerup-marked item is wanting to respawn\n");
- localcmd(sprintf("prvm_edict server %d\n", num_for_edict(self)));
- }
if(name)
{
WaypointSprite_Spawn(name, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE, RADARICON_POWERUP, rgb);
if(self.waypointsprite_attached)
WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
}
+ else
+ {
+ print("Unknown powerup-marked item is wanting to respawn\n");
+ localcmd(sprintf("prvm_edict server %d\n", num_for_edict(self)));
+ }
}
sound (self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound
if(self.waypointsprite_attached)
pickedup = TRUE;
// sound not available
// AnnounceTo(player, "speed");
- player.invincible_finished = max(player.invincible_finished, time) + autocvar_g_balance_powerup_strength_time;
+ player.invincible_finished = max(player.invincible_finished, time) + autocvar_g_balance_powerup_invincible_time;
}
}
else
void Item_Touch (void)
{
entity e, head;
-
+
// remove the item if it's currnetly in a NODROP brush or hits a NOIMPACT surface (such as sky)
if(self.classname == "droppedweapon")
{
return;
if (self.owner == other)
return;
+ if(MUTATOR_CALLHOOK(ItemTouch))
+ return;
if (self.classname == "droppedweapon")
{
if(self.classname != "droppedweapon")
{
- self.think = SUB_Null;
+ self.think = func_null;
self.nextthink = 0;
if(self.waypointsprite_attached)
Item_Reset();
Net_LinkEntity(self, FALSE, 0, ItemSend);
+
+ // call this hook after everything else has been done
+ if(MUTATOR_CALLHOOK(Item_Spawn))
+ {
+ startitem_failed = TRUE;
+ remove(self);
+ return;
+ }
}
/* replace items in minstagib
valueprefix = "max ";
}
else
+ {
error("invalid spawnflags");
+#ifdef GMQCC
+ itemprefix = string_null;
+ valueprefix = string_null;
+#endif
+ }
self.netname = "";
self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_UNLIMITED_WEAPON_AMMO), "unlimited_weapon_ammo");