+ startitem_failed = true; // early return means failure
+
+ // some mutators check for resources set by m_iteminit in FilterItem
+ if(def.m_iteminit)
+ def.m_iteminit(def, this);
+
+ // also checked by some mutators in FilterItem
+ this.items = def.m_itemid;
+ this.weapon = def.instanceOfWeaponPickup ? def.m_weapon.m_id : 0;
+ if(this.weapon)
+ STAT(WEAPONS, this) = WepSet_FromWeapon(REGISTRY_GET(Weapons, this.weapon));
+ this.flags = FL_ITEM | def.m_itemflags;
+
+ // FilterItem may change any field of a specific instance of an item, but
+ // it must not change any itemdef field (would cause mutators to break other mutators),
+ // and must not convert items into different ones (StartItem could be refactored to support that).
+ if(MUTATOR_CALLHOOK(FilterItem, this))
+ {
+ delete(this);
+ return;
+ }