From: TimePath <andrew.hardaker1995@gmail.com>
Date: Mon, 12 Oct 2015 08:36:45 +0000 (+1100)
Subject: Items: source name and pickups from item and weapon definitions
X-Git-Tag: xonotic-v0.8.2~1760^2~9
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=df9ec32eafb1f4c17749f59192daf3dfa0e3974e;p=xonotic%2Fxonotic-data.pk3dir.git

Items: source name and pickups from item and weapon definitions
---

diff --git a/qcsrc/common/gamemodes/gamemode/nexball/weapon.qc b/qcsrc/common/gamemodes/gamemode/nexball/weapon.qc
index ae882bb32a..c6aa4be215 100644
--- a/qcsrc/common/gamemodes/gamemode/nexball/weapon.qc
+++ b/qcsrc/common/gamemodes/gamemode/nexball/weapon.qc
@@ -5,7 +5,7 @@ CLASS(BallStealer, PortoLaunch)
 /* flags     */ ATTRIB(BallStealer, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(BallStealer, impulse, int, 0);
 /* refname   */ ATTRIB(BallStealer, netname, string, "ballstealer");
-/* wepname   */ ATTRIB(BallStealer, message, string, _("Ball Stealer"));
+/* wepname   */ ATTRIB(BallStealer, m_name, string, _("Ball Stealer"));
 ENDCLASS(BallStealer)
 REGISTER_WEAPON(NEXBALL, NEW(BallStealer));
 
diff --git a/qcsrc/common/items/item/armor.qh b/qcsrc/common/items/item/armor.qh
index 48a80f886a..adb93e7c94 100644
--- a/qcsrc/common/items/item/armor.qh
+++ b/qcsrc/common/items/item/armor.qh
@@ -3,6 +3,8 @@
 #include "pickup.qh"
 CLASS(Armor, Pickup)
 #ifdef SVQC
+    ATTRIB(Armor, m_mins, vector, '-16 -16 0')
+    ATTRIB(Armor, m_maxs, vector, '16 16 48')
     ATTRIB(Armor, m_pickupevalfunc, float(entity player, entity item), commodity_pickupevalfunc)
 #endif
 ENDCLASS(Armor)
diff --git a/qcsrc/common/items/item/health.qh b/qcsrc/common/items/item/health.qh
index 15f1f8dd91..f7bfb5c938 100644
--- a/qcsrc/common/items/item/health.qh
+++ b/qcsrc/common/items/item/health.qh
@@ -3,6 +3,8 @@
 #include "pickup.qh"
 CLASS(Health, Pickup)
 #ifdef SVQC
+    ATTRIB(Health, m_mins, vector, '-16 -16 0')
+    ATTRIB(Health, m_maxs, vector, '16 16 48')
     ATTRIB(Health, m_pickupevalfunc, float(entity player, entity item), commodity_pickupevalfunc)
 #endif
 ENDCLASS(Health)
diff --git a/qcsrc/common/items/item/pickup.qh b/qcsrc/common/items/item/pickup.qh
index 67d17a307f..9a25ebe9ad 100644
--- a/qcsrc/common/items/item/pickup.qh
+++ b/qcsrc/common/items/item/pickup.qh
@@ -10,6 +10,8 @@ CLASS(Pickup, GameItem)
     METHOD(Pickup, show, void(entity this));
     void Pickup_show(entity this) { LOG_INFOF("%s: %s\n", etos(this), this.m_name); }
 #ifdef SVQC
+    ATTRIB(Pickup, m_mins, vector, '-16 -16 0')
+    ATTRIB(Pickup, m_maxs, vector, '16 16 32')
     ATTRIB(Pickup, m_botvalue, int, 0)
     ATTRIB(Pickup, m_itemflags, int, 0)
     ATTRIB(Pickup, m_itemid, int, 0)
diff --git a/qcsrc/common/items/item/powerup.qh b/qcsrc/common/items/item/powerup.qh
index d78bd5563e..f443ab0af2 100644
--- a/qcsrc/common/items/item/powerup.qh
+++ b/qcsrc/common/items/item/powerup.qh
@@ -8,6 +8,8 @@
 #include "pickup.qh"
 CLASS(Powerup, Pickup)
 #ifdef SVQC
+    ATTRIB(Powerup, m_mins, vector, '-16 -16 0')
+    ATTRIB(Powerup, m_maxs, vector, '16 16 48')
     ATTRIB(Powerup, m_botvalue, int, 100000)
     ATTRIB(Powerup, m_itemflags, int, FL_POWERUP)
     ATTRIB(Powerup, m_respawntime, float(), GET(g_pickup_respawntime_powerup))
diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc
index fd1c9bb852..f804665f07 100644
--- a/qcsrc/common/monsters/monster/mage.qc
+++ b/qcsrc/common/monsters/monster/mage.qc
@@ -29,7 +29,7 @@ CLASS(MageSpike, PortoLaunch)
 /* flags     */ ATTRIB(MageSpike, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(MageSpike, impulse, int, 9);
 /* refname   */ ATTRIB(MageSpike, netname, string, "magespike");
-/* wepname   */ ATTRIB(MageSpike, message, string, _("Mage spike"));
+/* wepname   */ ATTRIB(MageSpike, m_name, string, _("Mage spike"));
 ENDCLASS(MageSpike)
 REGISTER_WEAPON(MAGE_SPIKE, NEW(MageSpike));
 
diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc
index 93252a39a2..72ec1026a5 100644
--- a/qcsrc/common/monsters/monster/spider.qc
+++ b/qcsrc/common/monsters/monster/spider.qc
@@ -28,7 +28,7 @@ CLASS(SpiderAttack, PortoLaunch)
 /* flags     */ ATTRIB(SpiderAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(SpiderAttack, impulse, int, 9);
 /* refname   */ ATTRIB(SpiderAttack, netname, string, "spider");
-/* wepname   */ ATTRIB(SpiderAttack, message, string, _("Spider attack"));
+/* wepname   */ ATTRIB(SpiderAttack, m_name, string, _("Spider attack"));
 ENDCLASS(SpiderAttack)
 REGISTER_WEAPON(SPIDER_ATTACK, NEW(SpiderAttack));
 
diff --git a/qcsrc/common/monsters/monster/wyvern.qc b/qcsrc/common/monsters/monster/wyvern.qc
index 4acf2093b6..692595bc5a 100644
--- a/qcsrc/common/monsters/monster/wyvern.qc
+++ b/qcsrc/common/monsters/monster/wyvern.qc
@@ -28,7 +28,7 @@ CLASS(WyvernAttack, PortoLaunch)
 /* flags     */ ATTRIB(WyvernAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(WyvernAttack, impulse, int, 9);
 /* refname   */ ATTRIB(WyvernAttack, netname, string, "wyvern");
-/* wepname   */ ATTRIB(WyvernAttack, message, string, _("Wyvern attack"));
+/* wepname   */ ATTRIB(WyvernAttack, m_name, string, _("Wyvern attack"));
 ENDCLASS(WyvernAttack)
 REGISTER_WEAPON(WYVERN_ATTACK, NEW(WyvernAttack));
 
diff --git a/qcsrc/common/turrets/turret/ewheel_weapon.qc b/qcsrc/common/turrets/turret/ewheel_weapon.qc
index 86444bb486..e9912eac7d 100644
--- a/qcsrc/common/turrets/turret/ewheel_weapon.qc
+++ b/qcsrc/common/turrets/turret/ewheel_weapon.qc
@@ -5,7 +5,7 @@ CLASS(EWheelAttack, PortoLaunch)
 /* flags     */ ATTRIB(EWheelAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(EWheelAttack, impulse, int, 5);
 /* refname   */ ATTRIB(EWheelAttack, netname, string, "turret_ewheel");
-/* wepname   */ ATTRIB(EWheelAttack, message, string, _("eWheel"));
+/* wepname   */ ATTRIB(EWheelAttack, m_name, string, _("eWheel"));
 ENDCLASS(EWheelAttack)
 REGISTER_WEAPON(EWHEEL, NEW(EWheelAttack));
 
diff --git a/qcsrc/common/turrets/turret/flac_weapon.qc b/qcsrc/common/turrets/turret/flac_weapon.qc
index 4c60805d26..e5b996eaea 100644
--- a/qcsrc/common/turrets/turret/flac_weapon.qc
+++ b/qcsrc/common/turrets/turret/flac_weapon.qc
@@ -5,7 +5,7 @@ CLASS(FlacAttack, PortoLaunch)
 /* flags     */ ATTRIB(FlacAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(FlacAttack, impulse, int, 5);
 /* refname   */ ATTRIB(FlacAttack, netname, string, "turret_flac");
-/* wepname   */ ATTRIB(FlacAttack, message, string, _("FLAC"));
+/* wepname   */ ATTRIB(FlacAttack, m_name, string, _("FLAC"));
 ENDCLASS(FlacAttack)
 REGISTER_WEAPON(FLAC, NEW(FlacAttack));
 
diff --git a/qcsrc/common/turrets/turret/hellion_weapon.qc b/qcsrc/common/turrets/turret/hellion_weapon.qc
index 491fa734ed..dd72f36a3b 100644
--- a/qcsrc/common/turrets/turret/hellion_weapon.qc
+++ b/qcsrc/common/turrets/turret/hellion_weapon.qc
@@ -5,7 +5,7 @@ CLASS(HellionAttack, PortoLaunch)
 /* flags     */ ATTRIB(HellionAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(HellionAttack, impulse, int, 9);
 /* refname   */ ATTRIB(HellionAttack, netname, string, "turret_hellion");
-/* wepname   */ ATTRIB(HellionAttack, message, string, _("Hellion"));
+/* wepname   */ ATTRIB(HellionAttack, m_name, string, _("Hellion"));
 ENDCLASS(HellionAttack)
 REGISTER_WEAPON(HELLION, NEW(HellionAttack));
 
diff --git a/qcsrc/common/turrets/turret/hk_weapon.qc b/qcsrc/common/turrets/turret/hk_weapon.qc
index 9fe73f8306..0e74bc4bb0 100644
--- a/qcsrc/common/turrets/turret/hk_weapon.qc
+++ b/qcsrc/common/turrets/turret/hk_weapon.qc
@@ -5,7 +5,7 @@ CLASS(HunterKillerAttack, PortoLaunch)
 /* flags     */ ATTRIB(HunterKillerAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(HunterKillerAttack, impulse, int, 9);
 /* refname   */ ATTRIB(HunterKillerAttack, netname, string, "turret_hk");
-/* wepname   */ ATTRIB(HunterKillerAttack, message, string, _("Hunter-Killer"));
+/* wepname   */ ATTRIB(HunterKillerAttack, m_name, string, _("Hunter-Killer"));
 ENDCLASS(HunterKillerAttack)
 REGISTER_WEAPON(HK, NEW(HunterKillerAttack));
 
diff --git a/qcsrc/common/turrets/turret/machinegun_weapon.qc b/qcsrc/common/turrets/turret/machinegun_weapon.qc
index 9b14898298..8acbf3c5d2 100644
--- a/qcsrc/common/turrets/turret/machinegun_weapon.qc
+++ b/qcsrc/common/turrets/turret/machinegun_weapon.qc
@@ -5,7 +5,7 @@ CLASS(MachineGunTurretAttack, PortoLaunch)
 /* flags     */ ATTRIB(MachineGunTurretAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(MachineGunTurretAttack, impulse, int, 9);
 /* refname   */ ATTRIB(MachineGunTurretAttack, netname, string, "turret_machinegun");
-/* wepname   */ ATTRIB(MachineGunTurretAttack, message, string, _("Machinegun"));
+/* wepname   */ ATTRIB(MachineGunTurretAttack, m_name, string, _("Machinegun"));
 ENDCLASS(MachineGunTurretAttack)
 REGISTER_WEAPON(TUR_MACHINEGUN, NEW(MachineGunTurretAttack));
 
diff --git a/qcsrc/common/turrets/turret/mlrs_weapon.qc b/qcsrc/common/turrets/turret/mlrs_weapon.qc
index 3b420f3291..ef3337c043 100644
--- a/qcsrc/common/turrets/turret/mlrs_weapon.qc
+++ b/qcsrc/common/turrets/turret/mlrs_weapon.qc
@@ -5,7 +5,7 @@ CLASS(MLRSTurretAttack, PortoLaunch)
 /* flags     */ ATTRIB(MLRSTurretAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(MLRSTurretAttack, impulse, int, 9);
 /* refname   */ ATTRIB(MLRSTurretAttack, netname, string, "turret_mlrs");
-/* wepname   */ ATTRIB(MLRSTurretAttack, message, string, _("MLRS"));
+/* wepname   */ ATTRIB(MLRSTurretAttack, m_name, string, _("MLRS"));
 ENDCLASS(MLRSTurretAttack)
 REGISTER_WEAPON(TUR_MLRS, NEW(MLRSTurretAttack));
 
diff --git a/qcsrc/common/turrets/turret/phaser_weapon.qc b/qcsrc/common/turrets/turret/phaser_weapon.qc
index 2cb036bc55..d6df0b7ca4 100644
--- a/qcsrc/common/turrets/turret/phaser_weapon.qc
+++ b/qcsrc/common/turrets/turret/phaser_weapon.qc
@@ -5,7 +5,7 @@ CLASS(PhaserTurretAttack, PortoLaunch)
 /* flags     */ ATTRIB(PhaserTurretAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(PhaserTurretAttack, impulse, int, 9);
 /* refname   */ ATTRIB(PhaserTurretAttack, netname, string, "turret_phaser");
-/* wepname   */ ATTRIB(PhaserTurretAttack, message, string, _("Phaser"));
+/* wepname   */ ATTRIB(PhaserTurretAttack, m_name, string, _("Phaser"));
 ENDCLASS(PhaserTurretAttack)
 REGISTER_WEAPON(PHASER, NEW(PhaserTurretAttack));
 
diff --git a/qcsrc/common/turrets/turret/plasma_dual.qc b/qcsrc/common/turrets/turret/plasma_dual.qc
index e1143bc048..ed780b75e0 100644
--- a/qcsrc/common/turrets/turret/plasma_dual.qc
+++ b/qcsrc/common/turrets/turret/plasma_dual.qc
@@ -3,7 +3,7 @@
 
 CLASS(PlasmaDualAttack, PlasmaAttack)
 /* refname   */ ATTRIB(PlasmaDualAttack, netname, string, "turret_plasma_dual");
-/* wepname   */ ATTRIB(PlasmaDualAttack, message, string, _("Dual plasma"));
+/* wepname   */ ATTRIB(PlasmaDualAttack, m_name, string, _("Dual plasma"));
 ENDCLASS(PlasmaDualAttack)
 REGISTER_WEAPON(PLASMA_DUAL, NEW(PlasmaDualAttack));
 
diff --git a/qcsrc/common/turrets/turret/plasma_weapon.qc b/qcsrc/common/turrets/turret/plasma_weapon.qc
index 65a6630574..779412dc4c 100644
--- a/qcsrc/common/turrets/turret/plasma_weapon.qc
+++ b/qcsrc/common/turrets/turret/plasma_weapon.qc
@@ -5,7 +5,7 @@ CLASS(PlasmaAttack, PortoLaunch)
 /* flags     */ ATTRIB(PlasmaAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(PlasmaAttack, impulse, int, 5);
 /* refname   */ ATTRIB(PlasmaAttack, netname, string, "turret_plasma");
-/* wepname   */ ATTRIB(PlasmaAttack, message, string, _("Plasma"));
+/* wepname   */ ATTRIB(PlasmaAttack, m_name, string, _("Plasma"));
 ENDCLASS(PlasmaAttack)
 REGISTER_WEAPON(PLASMA, NEW(PlasmaAttack));
 
diff --git a/qcsrc/common/turrets/turret/tesla_weapon.qc b/qcsrc/common/turrets/turret/tesla_weapon.qc
index 3a8eb1d52b..4208133204 100644
--- a/qcsrc/common/turrets/turret/tesla_weapon.qc
+++ b/qcsrc/common/turrets/turret/tesla_weapon.qc
@@ -5,7 +5,7 @@ CLASS(TeslaCoilTurretAttack, PortoLaunch)
 /* flags     */ ATTRIB(TeslaCoilTurretAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(TeslaCoilTurretAttack, impulse, int, 9);
 /* refname   */ ATTRIB(TeslaCoilTurretAttack, netname, string, "turret_tesla");
-/* wepname   */ ATTRIB(TeslaCoilTurretAttack, message, string, _("Tesla Coil"));
+/* wepname   */ ATTRIB(TeslaCoilTurretAttack, m_name, string, _("Tesla Coil"));
 ENDCLASS(TeslaCoilTurretAttack)
 REGISTER_WEAPON(TESLA, NEW(TeslaCoilTurretAttack));
 
diff --git a/qcsrc/common/turrets/turret/walker_weapon.qc b/qcsrc/common/turrets/turret/walker_weapon.qc
index 9a54f810f5..f088241f6c 100644
--- a/qcsrc/common/turrets/turret/walker_weapon.qc
+++ b/qcsrc/common/turrets/turret/walker_weapon.qc
@@ -5,7 +5,7 @@ CLASS(WalkerTurretAttack, PortoLaunch)
 /* flags     */ ATTRIB(WalkerTurretAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(WalkerTurretAttack, impulse, int, 5);
 /* refname   */ ATTRIB(WalkerTurretAttack, netname, string, "turret_walker");
-/* wepname   */ ATTRIB(WalkerTurretAttack, message, string, _("Walker"));
+/* wepname   */ ATTRIB(WalkerTurretAttack, m_name, string, _("Walker"));
 ENDCLASS(WalkerTurretAttack)
 REGISTER_WEAPON(WALKER, NEW(WalkerTurretAttack));
 
diff --git a/qcsrc/common/vehicles/vehicle/racer_weapon.qc b/qcsrc/common/vehicles/vehicle/racer_weapon.qc
index d5a4c12310..ea243bebe6 100644
--- a/qcsrc/common/vehicles/vehicle/racer_weapon.qc
+++ b/qcsrc/common/vehicles/vehicle/racer_weapon.qc
@@ -7,7 +7,7 @@ CLASS(RacerAttack, PortoLaunch)
 /* flags     */ ATTRIB(RacerAttack, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(RacerAttack, impulse, int, 3);
 /* refname   */ ATTRIB(RacerAttack, netname, string, "racercannon");
-/* wepname   */ ATTRIB(RacerAttack, message, string, _("Racer cannon"));
+/* wepname   */ ATTRIB(RacerAttack, m_name, string, _("Racer cannon"));
 ENDCLASS(RacerAttack)
 REGISTER_WEAPON(RACER, NEW(RacerAttack));
 
diff --git a/qcsrc/common/vehicles/vehicle/raptor_weapons.qc b/qcsrc/common/vehicles/vehicle/raptor_weapons.qc
index a5ddb7f671..350f1e74ca 100644
--- a/qcsrc/common/vehicles/vehicle/raptor_weapons.qc
+++ b/qcsrc/common/vehicles/vehicle/raptor_weapons.qc
@@ -7,7 +7,7 @@ CLASS(RaptorCannon, PortoLaunch)
 /* flags     */ ATTRIB(RaptorCannon, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(RaptorCannon, impulse, int, 3);
 /* refname   */ ATTRIB(RaptorCannon, netname, string, "raptorcannon");
-/* wepname   */ ATTRIB(RaptorCannon, message, string, _("Raptor cannon"));
+/* wepname   */ ATTRIB(RaptorCannon, m_name, string, _("Raptor cannon"));
 ENDCLASS(RaptorCannon)
 REGISTER_WEAPON(RAPTOR, NEW(RaptorCannon));
 
@@ -15,7 +15,7 @@ CLASS(RaptorBomb, PortoLaunch)
 /* flags     */ ATTRIB(RaptorBomb, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(RaptorBomb, impulse, int, 3);
 /* refname   */ ATTRIB(RaptorBomb, netname, string, "raptorbomb");
-/* wepname   */ ATTRIB(RaptorBomb, message, string, _("Raptor bomb"));
+/* wepname   */ ATTRIB(RaptorBomb, m_name, string, _("Raptor bomb"));
 ENDCLASS(RaptorBomb)
 REGISTER_WEAPON(RAPTOR_BOMB, NEW(RaptorBomb));
 
@@ -23,7 +23,7 @@ CLASS(RaptorFlare, PortoLaunch)
 /* flags     */ ATTRIB(RaptorFlare, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED);
 /* impulse   */ ATTRIB(RaptorFlare, impulse, int, 3);
 /* refname   */ ATTRIB(RaptorFlare, netname, string, "raptorflare");
-/* wepname   */ ATTRIB(RaptorFlare, message, string, _("Raptor flare"));
+/* wepname   */ ATTRIB(RaptorFlare, m_name, string, _("Raptor flare"));
 ENDCLASS(RaptorFlare)
 REGISTER_WEAPON(RAPTOR_FLARE, NEW(RaptorFlare));
 
diff --git a/qcsrc/common/weapons/weapon.qh b/qcsrc/common/weapons/weapon.qh
index 7c090a1de3..262a919161 100644
--- a/qcsrc/common/weapons/weapon.qh
+++ b/qcsrc/common/weapons/weapon.qh
@@ -42,7 +42,7 @@ CLASS(Weapon, Object)
     /** M: refname   : reference name name */
     ATTRIB(Weapon, netname, string, "");
     /** M: wepname   : human readable name */
-    ATTRIB(Weapon, message, string, "AOL CD Thrower");
+    ATTRIB(Weapon, m_name, string, "AOL CD Thrower");
 
     ATTRIB(Weapon, m_pickup, entity, NULL);
 
@@ -85,12 +85,14 @@ CLASS(Weapon, Object)
     METHOD(Weapon, wr_pickup, void(Weapon this)) {}
 
 	METHOD(Weapon, display, void(entity this, void(string name, string icon) returns)) {
-		returns(this.message, this.model2 ? sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.model2) : string_null);
+		returns(this.m_name, this.model2 ? sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.model2) : string_null);
 	}
 ENDCLASS(Weapon)
 
 #include "../items/all.qh"
 CLASS(WeaponPickup, Pickup)
+    ATTRIB(WeaponPickup, m_weapon, Weapon, NULL)
+    ATTRIB(WeaponPickup, m_name, string, string_null)
 #ifndef MENUQC
     ATTRIB(WeaponPickup, m_sound, Sound, SND_WEAPONPICKUP)
 #endif
@@ -100,6 +102,8 @@ CLASS(WeaponPickup, Pickup)
 #endif
     CONSTRUCTOR(WeaponPickup, Weapon w) {
         CONSTRUCT(WeaponPickup);
+        this.m_weapon = w;
+        this.m_name = w.m_name;
 #ifndef MENUQC
         this.m_model = w.m_model;
 #endif
@@ -162,6 +166,6 @@ string W_Model(string w_mdl);
 
 // other useful macros
 #define WEP_AMMO(wpn) (WEP_##wpn.ammo_field) // only used inside weapon files/with direct name, don't duplicate prefix
-#define WEP_NAME(wpn) ((get_weaponinfo(wpn)).message)
+#define WEP_NAME(wpn) ((get_weaponinfo(wpn)).m_name)
 
 #endif
diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc
index cc681f8e9c..471e99601e 100644
--- a/qcsrc/common/weapons/weapon/arc.qc
+++ b/qcsrc/common/weapons/weapon/arc.qc
@@ -13,7 +13,7 @@ CLASS(Arc, Weapon)
 /* crosshair */ ATTRIB(Arc, w_crosshair_size, float, 0.7);
 /* wepimg    */ ATTRIB(Arc, model2, string, "weaponarc");
 /* refname   */ ATTRIB(Arc, netname, string, "arc");
-/* wepname   */ ATTRIB(Arc, message, string, _("Arc"));
+/* wepname   */ ATTRIB(Arc, m_name, string, _("Arc"));
 ENDCLASS(Arc)
 REGISTER_WEAPON(ARC, NEW(Arc));
 
diff --git a/qcsrc/common/weapons/weapon/blaster.qc b/qcsrc/common/weapons/weapon/blaster.qc
index f96eb77c2f..f3d46e6d5e 100644
--- a/qcsrc/common/weapons/weapon/blaster.qc
+++ b/qcsrc/common/weapons/weapon/blaster.qc
@@ -13,7 +13,7 @@ CLASS(Blaster, Weapon)
 /* crosshair */ ATTRIB(Blaster, w_crosshair_size, float, 0.5);
 /* wepimg    */ ATTRIB(Blaster, model2, string, "weaponlaser");
 /* refname   */ ATTRIB(Blaster, netname, string, "blaster");
-/* wepname   */ ATTRIB(Blaster, message, string, _("Blaster"));
+/* wepname   */ ATTRIB(Blaster, m_name, string, _("Blaster"));
 ENDCLASS(Blaster)
 REGISTER_WEAPON(BLASTER, NEW(Blaster));
 
diff --git a/qcsrc/common/weapons/weapon/crylink.qc b/qcsrc/common/weapons/weapon/crylink.qc
index 9baa9149c8..87e66997f7 100644
--- a/qcsrc/common/weapons/weapon/crylink.qc
+++ b/qcsrc/common/weapons/weapon/crylink.qc
@@ -13,7 +13,7 @@ CLASS(Crylink, Weapon)
 /* crosshair */ ATTRIB(Crylink, w_crosshair_size, float, 0.5);
 /* wepimg    */ ATTRIB(Crylink, model2, string, "weaponcrylink");
 /* refname   */ ATTRIB(Crylink, netname, string, "crylink");
-/* wepname   */ ATTRIB(Crylink, message, string, _("Crylink"));
+/* wepname   */ ATTRIB(Crylink, m_name, string, _("Crylink"));
 ENDCLASS(Crylink)
 REGISTER_WEAPON(CRYLINK, NEW(Crylink));
 
diff --git a/qcsrc/common/weapons/weapon/devastator.qc b/qcsrc/common/weapons/weapon/devastator.qc
index adef0b2eef..47ab6460af 100644
--- a/qcsrc/common/weapons/weapon/devastator.qc
+++ b/qcsrc/common/weapons/weapon/devastator.qc
@@ -13,7 +13,7 @@ CLASS(Devastator, Weapon)
 /* crosshair */ ATTRIB(Devastator, w_crosshair_size, float, 0.7);
 /* wepimg    */ ATTRIB(Devastator, model2, string, "weaponrocketlauncher");
 /* refname   */ ATTRIB(Devastator, netname, string, "devastator");
-/* wepname   */ ATTRIB(Devastator, message, string, _("Devastator"));
+/* wepname   */ ATTRIB(Devastator, m_name, string, _("Devastator"));
 ENDCLASS(Devastator)
 REGISTER_WEAPON(DEVASTATOR, NEW(Devastator));
 
diff --git a/qcsrc/common/weapons/weapon/electro.qc b/qcsrc/common/weapons/weapon/electro.qc
index 137fd7807d..c0be6c73e2 100644
--- a/qcsrc/common/weapons/weapon/electro.qc
+++ b/qcsrc/common/weapons/weapon/electro.qc
@@ -13,7 +13,7 @@ CLASS(Electro, Weapon)
 /* crosshair */ ATTRIB(Electro, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(Electro, model2, string, "weaponelectro");
 /* refname   */ ATTRIB(Electro, netname, string, "electro");
-/* wepname   */ ATTRIB(Electro, message, string, _("Electro"));
+/* wepname   */ ATTRIB(Electro, m_name, string, _("Electro"));
 ENDCLASS(Electro)
 REGISTER_WEAPON(ELECTRO, NEW(Electro));
 
diff --git a/qcsrc/common/weapons/weapon/fireball.qc b/qcsrc/common/weapons/weapon/fireball.qc
index 990bdfea80..ad14ef49be 100644
--- a/qcsrc/common/weapons/weapon/fireball.qc
+++ b/qcsrc/common/weapons/weapon/fireball.qc
@@ -13,7 +13,7 @@ CLASS(Fireball, Weapon)
 /* crosshair */ //ATTRIB(Fireball, w_crosshair_size, float, 0.65);
 /* wepimg    */ ATTRIB(Fireball, model2, string, "weaponfireball");
 /* refname   */ ATTRIB(Fireball, netname, string, "fireball");
-/* wepname   */ ATTRIB(Fireball, message, string, _("Fireball"));
+/* wepname   */ ATTRIB(Fireball, m_name, string, _("Fireball"));
 ENDCLASS(Fireball)
 REGISTER_WEAPON(FIREBALL, NEW(Fireball));
 
diff --git a/qcsrc/common/weapons/weapon/hagar.qc b/qcsrc/common/weapons/weapon/hagar.qc
index 16c9599239..8e3b469dda 100644
--- a/qcsrc/common/weapons/weapon/hagar.qc
+++ b/qcsrc/common/weapons/weapon/hagar.qc
@@ -13,7 +13,7 @@ CLASS(Hagar, Weapon)
 /* crosshair */ ATTRIB(Hagar, w_crosshair_size, float, 0.8);
 /* wepimg    */ ATTRIB(Hagar, model2, string, "weaponhagar");
 /* refname   */ ATTRIB(Hagar, netname, string, "hagar");
-/* wepname   */ ATTRIB(Hagar, message, string, _("Hagar"));
+/* wepname   */ ATTRIB(Hagar, m_name, string, _("Hagar"));
 ENDCLASS(Hagar)
 REGISTER_WEAPON(HAGAR, NEW(Hagar));
 
diff --git a/qcsrc/common/weapons/weapon/hlac.qc b/qcsrc/common/weapons/weapon/hlac.qc
index bf719ac8eb..81c13162e9 100644
--- a/qcsrc/common/weapons/weapon/hlac.qc
+++ b/qcsrc/common/weapons/weapon/hlac.qc
@@ -13,7 +13,7 @@ CLASS(HLAC, Weapon)
 /* crosshair */ ATTRIB(HLAC, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(HLAC, model2, string, "weaponhlac");
 /* refname   */ ATTRIB(HLAC, netname, string, "hlac");
-/* wepname   */ ATTRIB(HLAC, message, string, _("Heavy Laser Assault Cannon"));
+/* wepname   */ ATTRIB(HLAC, m_name, string, _("Heavy Laser Assault Cannon"));
 ENDCLASS(HLAC)
 REGISTER_WEAPON(HLAC, NEW(HLAC));
 
diff --git a/qcsrc/common/weapons/weapon/hmg.qc b/qcsrc/common/weapons/weapon/hmg.qc
index ac6ed0a675..ebc4a48ff1 100644
--- a/qcsrc/common/weapons/weapon/hmg.qc
+++ b/qcsrc/common/weapons/weapon/hmg.qc
@@ -13,7 +13,7 @@ CLASS(HeavyMachineGun, Weapon)
 /* crosshair */ ATTRIB(HeavyMachineGun, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(HeavyMachineGun, model2, string, "weaponhmg");
 /* refname   */ ATTRIB(HeavyMachineGun, netname, string, "hmg");
-/* wepname   */ ATTRIB(HeavyMachineGun, message, string, _("Heavy Machine Gun"));
+/* wepname   */ ATTRIB(HeavyMachineGun, m_name, string, _("Heavy Machine Gun"));
 ENDCLASS(HeavyMachineGun)
 REGISTER_WEAPON(HMG, NEW(HeavyMachineGun));
 
diff --git a/qcsrc/common/weapons/weapon/hook.qc b/qcsrc/common/weapons/weapon/hook.qc
index b7a6d16db8..d73c7276fd 100644
--- a/qcsrc/common/weapons/weapon/hook.qc
+++ b/qcsrc/common/weapons/weapon/hook.qc
@@ -13,7 +13,7 @@ CLASS(Hook, Weapon)
 /* crosshair */ ATTRIB(Hook, w_crosshair_size, float, 0.5);
 /* wepimg    */ ATTRIB(Hook, model2, string, "weaponhook");
 /* refname   */ ATTRIB(Hook, netname, string, "hook");
-/* wepname   */ ATTRIB(Hook, message, string, _("Grappling Hook"));
+/* wepname   */ ATTRIB(Hook, m_name, string, _("Grappling Hook"));
 	ATTRIB(Hook, ammo_factor, float, 1)
 ENDCLASS(Hook)
 REGISTER_WEAPON(HOOK, NEW(Hook));
diff --git a/qcsrc/common/weapons/weapon/machinegun.qc b/qcsrc/common/weapons/weapon/machinegun.qc
index b3dcf120bd..c42b0274c0 100644
--- a/qcsrc/common/weapons/weapon/machinegun.qc
+++ b/qcsrc/common/weapons/weapon/machinegun.qc
@@ -13,7 +13,7 @@ CLASS(MachineGun, Weapon)
 /* crosshair */ ATTRIB(MachineGun, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(MachineGun, model2, string, "weaponuzi");
 /* refname   */ ATTRIB(MachineGun, netname, string, "machinegun");
-/* wepname   */ ATTRIB(MachineGun, message, string, _("MachineGun"));
+/* wepname   */ ATTRIB(MachineGun, m_name, string, _("MachineGun"));
 ENDCLASS(MachineGun)
 REGISTER_WEAPON(MACHINEGUN, NEW(MachineGun));
 
diff --git a/qcsrc/common/weapons/weapon/minelayer.qc b/qcsrc/common/weapons/weapon/minelayer.qc
index 93e32b9e81..ad96ab56c0 100644
--- a/qcsrc/common/weapons/weapon/minelayer.qc
+++ b/qcsrc/common/weapons/weapon/minelayer.qc
@@ -13,7 +13,7 @@ CLASS(MineLayer, Weapon)
 /* crosshair */ ATTRIB(MineLayer, w_crosshair_size, float, 0.9);
 /* wepimg    */ ATTRIB(MineLayer, model2, string, "weaponminelayer");
 /* refname   */ ATTRIB(MineLayer, netname, string, "minelayer");
-/* wepname   */ ATTRIB(MineLayer, message, string, _("Mine Layer"));
+/* wepname   */ ATTRIB(MineLayer, m_name, string, _("Mine Layer"));
 ENDCLASS(MineLayer)
 REGISTER_WEAPON(MINE_LAYER, NEW(MineLayer));
 
diff --git a/qcsrc/common/weapons/weapon/mortar.qc b/qcsrc/common/weapons/weapon/mortar.qc
index 46f26b049d..d804ed481b 100644
--- a/qcsrc/common/weapons/weapon/mortar.qc
+++ b/qcsrc/common/weapons/weapon/mortar.qc
@@ -13,7 +13,7 @@ CLASS(Mortar, Weapon)
 /* crosshair */ ATTRIB(Mortar, w_crosshair_size, float, 0.7);
 /* wepimg    */ ATTRIB(Mortar, model2, string, "weapongrenadelauncher");
 /* refname   */ ATTRIB(Mortar, netname, string, "mortar");
-/* wepname   */ ATTRIB(Mortar, message, string, _("Mortar"));
+/* wepname   */ ATTRIB(Mortar, m_name, string, _("Mortar"));
 ENDCLASS(Mortar)
 REGISTER_WEAPON(MORTAR, NEW(Mortar));
 
diff --git a/qcsrc/common/weapons/weapon/porto.qc b/qcsrc/common/weapons/weapon/porto.qc
index a4acb98d84..2663d3dd6f 100644
--- a/qcsrc/common/weapons/weapon/porto.qc
+++ b/qcsrc/common/weapons/weapon/porto.qc
@@ -13,7 +13,7 @@ CLASS(PortoLaunch, Weapon)
 /* crosshair */ ATTRIB(PortoLaunch, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(PortoLaunch, model2, string, "weaponporto");
 /* refname   */ ATTRIB(PortoLaunch, netname, string, "porto");
-/* wepname   */ ATTRIB(PortoLaunch, message, string, _("Port-O-Launch"));
+/* wepname   */ ATTRIB(PortoLaunch, m_name, string, _("Port-O-Launch"));
 ENDCLASS(PortoLaunch)
 REGISTER_WEAPON(PORTO, NEW(PortoLaunch));
 
diff --git a/qcsrc/common/weapons/weapon/rifle.qc b/qcsrc/common/weapons/weapon/rifle.qc
index c78e76736c..a87eb56c4c 100644
--- a/qcsrc/common/weapons/weapon/rifle.qc
+++ b/qcsrc/common/weapons/weapon/rifle.qc
@@ -13,7 +13,7 @@ CLASS(Rifle, Weapon)
 /* crosshair */ ATTRIB(Rifle, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(Rifle, model2, string, "weaponrifle");
 /* refname   */ ATTRIB(Rifle, netname, string, "rifle");
-/* wepname   */ ATTRIB(Rifle, message, string, _("Rifle"));
+/* wepname   */ ATTRIB(Rifle, m_name, string, _("Rifle"));
 ENDCLASS(Rifle)
 REGISTER_WEAPON(RIFLE, NEW(Rifle));
 
diff --git a/qcsrc/common/weapons/weapon/rpc.qc b/qcsrc/common/weapons/weapon/rpc.qc
index 28016f08eb..65cb6ba25b 100644
--- a/qcsrc/common/weapons/weapon/rpc.qc
+++ b/qcsrc/common/weapons/weapon/rpc.qc
@@ -13,7 +13,7 @@ CLASS(RocketPropelledChainsaw, Weapon)
 /* crosshair */ ATTRIB(RocketPropelledChainsaw, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(RocketPropelledChainsaw, model2, string, "weaponrpc");
 /* refname   */ ATTRIB(RocketPropelledChainsaw, netname, string, "rpc");
-/* wepname   */ ATTRIB(RocketPropelledChainsaw, message, string, _("Rocket Propelled Chainsaw"));
+/* wepname   */ ATTRIB(RocketPropelledChainsaw, m_name, string, _("Rocket Propelled Chainsaw"));
 ENDCLASS(RocketPropelledChainsaw)
 REGISTER_WEAPON(RPC, NEW(RocketPropelledChainsaw));
 
diff --git a/qcsrc/common/weapons/weapon/seeker.qc b/qcsrc/common/weapons/weapon/seeker.qc
index ad35d72f80..0f3013568c 100644
--- a/qcsrc/common/weapons/weapon/seeker.qc
+++ b/qcsrc/common/weapons/weapon/seeker.qc
@@ -13,7 +13,7 @@ CLASS(Seeker, Weapon)
 /* crosshair */ ATTRIB(Seeker, w_crosshair_size, float, 0.8);
 /* wepimg    */ ATTRIB(Seeker, model2, string, "weaponseeker");
 /* refname   */ ATTRIB(Seeker, netname, string, "seeker");
-/* wepname   */ ATTRIB(Seeker, message, string, _("T.A.G. Seeker"));
+/* wepname   */ ATTRIB(Seeker, m_name, string, _("T.A.G. Seeker"));
 ENDCLASS(Seeker)
 REGISTER_WEAPON(SEEKER, NEW(Seeker));
 
diff --git a/qcsrc/common/weapons/weapon/shockwave.qc b/qcsrc/common/weapons/weapon/shockwave.qc
index 6f71e4d5ce..5fddb3b12d 100644
--- a/qcsrc/common/weapons/weapon/shockwave.qc
+++ b/qcsrc/common/weapons/weapon/shockwave.qc
@@ -13,7 +13,7 @@ CLASS(Shockwave, Weapon)
 /* crosshair */ ATTRIB(Shockwave, w_crosshair_size, float, 0.7);
 /* wepimg    */ ATTRIB(Shockwave, model2, string, "weaponshotgun");
 /* refname   */ ATTRIB(Shockwave, netname, string, "shockwave");
-/* wepname   */ ATTRIB(Shockwave, message, string, _("Shockwave"));
+/* wepname   */ ATTRIB(Shockwave, m_name, string, _("Shockwave"));
 ENDCLASS(Shockwave)
 REGISTER_WEAPON(SHOCKWAVE, NEW(Shockwave));
 
diff --git a/qcsrc/common/weapons/weapon/shotgun.qc b/qcsrc/common/weapons/weapon/shotgun.qc
index 9d1cc5adee..87453494ab 100644
--- a/qcsrc/common/weapons/weapon/shotgun.qc
+++ b/qcsrc/common/weapons/weapon/shotgun.qc
@@ -13,7 +13,7 @@ CLASS(Shotgun, Weapon)
 /* crosshair */ ATTRIB(Shotgun, w_crosshair_size, float, 0.65);
 /* wepimg    */ ATTRIB(Shotgun, model2, string, "weaponshotgun");
 /* refname   */ ATTRIB(Shotgun, netname, string, "shotgun");
-/* wepname   */ ATTRIB(Shotgun, message, string, _("Shotgun"));
+/* wepname   */ ATTRIB(Shotgun, m_name, string, _("Shotgun"));
 ENDCLASS(Shotgun)
 REGISTER_WEAPON(SHOTGUN, NEW(Shotgun));
 
diff --git a/qcsrc/common/weapons/weapon/tuba.qc b/qcsrc/common/weapons/weapon/tuba.qc
index 2936b5e78b..7b83baa8b5 100644
--- a/qcsrc/common/weapons/weapon/tuba.qc
+++ b/qcsrc/common/weapons/weapon/tuba.qc
@@ -14,7 +14,7 @@ CLASS(Tuba, Weapon)
 /* wepimg    */ ATTRIB(Tuba, model2, string, "weapontuba");
 /* refname   */ ATTRIB(Tuba, netname, string, "tuba");
 /* xgettext:no-c-format */
-/* wepname   */ ATTRIB(Tuba, message, string, _("@!#%'n Tuba"));
+/* wepname   */ ATTRIB(Tuba, m_name, string, _("@!#%'n Tuba"));
 ENDCLASS(Tuba)
 REGISTER_WEAPON(TUBA, NEW(Tuba));
 
diff --git a/qcsrc/common/weapons/weapon/vaporizer.qc b/qcsrc/common/weapons/weapon/vaporizer.qc
index 25499065d2..41079791d8 100644
--- a/qcsrc/common/weapons/weapon/vaporizer.qc
+++ b/qcsrc/common/weapons/weapon/vaporizer.qc
@@ -13,7 +13,7 @@ CLASS(Vaporizer, Weapon)
 /* crosshair */ ATTRIB(Vaporizer, w_crosshair_size, float, 0.6);
 /* wepimg    */ ATTRIB(Vaporizer, model2, string, "weaponminstanex");
 /* refname   */ ATTRIB(Vaporizer, netname, string, "vaporizer");
-/* wepname   */ ATTRIB(Vaporizer, message, string, _("Vaporizer"));
+/* wepname   */ ATTRIB(Vaporizer, m_name, string, _("Vaporizer"));
 ENDCLASS(Vaporizer)
 REGISTER_WEAPON(VAPORIZER, NEW(Vaporizer));
 
diff --git a/qcsrc/common/weapons/weapon/vortex.qc b/qcsrc/common/weapons/weapon/vortex.qc
index a2cb19d0a6..1ce575f60d 100644
--- a/qcsrc/common/weapons/weapon/vortex.qc
+++ b/qcsrc/common/weapons/weapon/vortex.qc
@@ -13,7 +13,7 @@ CLASS(Vortex, Weapon)
 /* crosshair */ ATTRIB(Vortex, w_crosshair_size, float, 0.65);
 /* wepimg    */ ATTRIB(Vortex, model2, string, "weaponnex");
 /* refname   */ ATTRIB(Vortex, netname, string, "vortex");
-/* wepname   */ ATTRIB(Vortex, message, string, _("Vortex"));
+/* wepname   */ ATTRIB(Vortex, m_name, string, _("Vortex"));
 ENDCLASS(Vortex)
 REGISTER_WEAPON(VORTEX, NEW(Vortex));
 
diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc
index 750f4e7023..9b8cde9b99 100644
--- a/qcsrc/server/t_items.qc
+++ b/qcsrc/server/t_items.qc
@@ -272,7 +272,8 @@ bool ItemSend(entity this, entity to, int sf)
 
 	if(sf & ISF_SIZE)
 	{
-		WriteByte(MSG_ENTITY, ((self.flags & FL_POWERUP) || self.health || self.armorvalue));
+		Pickup p = this.itemdef;
+		WriteByte(MSG_ENTITY, p.instanceOfPowerup || p.instanceOfHealth || p.instanceOfArmor);
 	}
 
 	if(sf & ISF_STATUS)
@@ -308,9 +309,9 @@ void ItemUpdate(entity item)
 	item.SendFlags |= ISF_LOCATION;
 }
 
-float have_pickup_item(void)
-{SELFPARAM();
-	if(self.flags & FL_POWERUP)
+bool have_pickup_item(entity this)
+{
+	if(this.itemdef.instanceOfPowerup)
 	{
 		if(autocvar_g_powerups > 0)
 			return true;
@@ -324,7 +325,7 @@ float have_pickup_item(void)
 		if(autocvar_g_pickup_items == 0)
 			return false;
 		if(g_weaponarena)
-			if(self.weapons || (self.items & IT_AMMO)) // no item or ammo pickups in weaponarena
+			if(this.weapons || (this.items & IT_AMMO)) // no item or ammo pickups in weaponarena
 				return false;
 	}
 	return true;
@@ -377,7 +378,7 @@ void Item_Show (entity e, float mode)
 		e.spawnshieldtime = 1;
 		e.ItemStatus &= ~ITS_AVAILABLE;
 	}
-	else if((e.flags & FL_WEAPON) && !(e.flags & FL_NO_WEAPON_STAY) && g_weapon_stay)
+	else if(e.itemdef.instanceOfWeaponPickup && !(e.flags & FL_NO_WEAPON_STAY) && g_weapon_stay)
 	{
 		// make the item translucent and not touchable
 		e.model = e.mdl;
@@ -641,7 +642,7 @@ float Item_GiveTo(entity item, entity player)
 	pickedup |= Item_GiveAmmoTo(item, player, health, item.max_health, ITEM_MODE_HEALTH);
 	pickedup |= Item_GiveAmmoTo(item, player, armorvalue, item.max_armorvalue, ITEM_MODE_ARMOR);
 
-	if (item.flags & FL_WEAPON)
+	if (item.itemdef.instanceOfWeaponPickup)
 	{
 		WepSet it;
 		it = item.weapons;
@@ -692,7 +693,7 @@ float Item_GiveTo(entity item, entity player)
 		return 0;
 
 	// crude hack to enforce switching weapons
-	if(g_cts && (item.flags & FL_WEAPON))
+	if(g_cts && item.itemdef.instanceOfWeaponPickup)
 	{
 		W_SwitchWeapon_Force(player, item.weapon);
 		return 1;
@@ -798,7 +799,7 @@ void Item_Reset(entity this)
 		if (this.waypointsprite_attached)
 			WaypointSprite_Kill(this.waypointsprite_attached);
 
-		if ((this.flags & FL_POWERUP) || (this.weapons & WEPSET_SUPERWEAPONS)) // do not spawn powerups initially!
+		if (this.itemdef.instanceOfPowerup || (this.weapons & WEPSET_SUPERWEAPONS)) // do not spawn powerups initially!
 			Item_ScheduleInitialRespawn(this);
 	}
 }
@@ -974,8 +975,9 @@ void Item_Damage(entity inflictor, entity attacker, float damage, int deathtype,
 		RemoveItem();
 }
 
-void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter, string itemname, float itemid, float weaponid, float itemflags)
+void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter, float itemflags)
 {
+	string itemname = def.m_name;
 	Model itemmodel = def.m_model;
     Sound pickupsound = def.m_sound;
 	float(entity player, entity item) pickupevalfunc = def.m_pickupevalfunc;
@@ -992,7 +994,9 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 		this.respawntimejitter = defaultrespawntimejitter;
 	}
 
+	int itemid = def.m_itemid;
 	this.items = itemid;
+	int weaponid = def.instanceOfWeaponPickup ? def.m_weapon.m_id : 0;
 	this.weapon = weaponid;
 
 	if(!this.fade_end)
@@ -1055,7 +1059,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 	}
 	else
 	{
-		if(!have_pickup_item())
+		if(!have_pickup_item(this))
 		{
 			startitem_failed = true;
 			remove (this);
@@ -1079,10 +1083,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 			// first nudge it off the floor a little bit to avoid math errors
 			setorigin(this, this.origin + '0 0 1');
 			// set item size before we spawn a spawnfunc_waypoint
-			if((itemflags & FL_POWERUP) || this.health || this.armorvalue)
-				setsize (this, '-16 -16 0', '16 16 48');
-			else
-				setsize (this, '-16 -16 0', '16 16 32');
+			setsize(this, def.m_mins, def.m_maxs);
 			this.SendFlags |= ISF_SIZE;
 			// note droptofloor returns false if stuck/or would fall too far
 			WITH(entity, self, this, droptofloor());
@@ -1123,8 +1124,12 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 		precache_model(this.model);
 		precache_sound(this.item_pickupsound);
 
-		if ((itemflags & (FL_POWERUP | FL_WEAPON)) || (itemid & (IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2)))
-			this.target = "###item###"; // for finding the nearest item using find()
+		if (   def.instanceOfPowerup
+			|| def.instanceOfWeaponPickup
+			|| (def.instanceOfHealth && def != ITEM_HealthSmall)
+			|| (def.instanceOfArmor && def != ITEM_ArmorSmall)
+			|| (itemid & (IT_KEY1 | IT_KEY2))
+		) this.target = "###item###"; // for finding the nearest item using find()
 
 		Item_ItemsTime_SetTime(this, 0);
 	}
@@ -1138,27 +1143,17 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 	setmodel(this, MDL_Null); // precision set below
 	//this.effects |= EF_LOWPRECISION;
 
-	if((itemflags & FL_POWERUP) || this.health || this.armorvalue)
-	{
-		this.pos1 = '-16 -16 0';
-		this.pos2 = '16 16 48';
-	}
-	else
-	{
-		this.pos1 = '-16 -16 0';
-		this.pos2 = '16 16 32';
-	}
-	setsize (this, this.pos1, this.pos2);
+	setsize (this, this.pos1 =  def.m_mins, this.pos2 = def.m_maxs);
 
 	this.SendFlags |= ISF_SIZE;
 
-	if(itemflags & FL_POWERUP)
+	if(def.instanceOfPowerup)
 		this.ItemStatus |= ITS_ANIMATE1;
 
 	if(this.armorvalue || this.health)
 		this.ItemStatus |= ITS_ANIMATE2;
 
-	if(itemflags & FL_WEAPON)
+	if(def.instanceOfWeaponPickup)
 	{
 		if (this.classname != "droppedweapon") // if dropped, colormap is already set up nicely
 			this.colormap = 1024; // color shirt=0 pants=0 grey
@@ -1181,7 +1176,7 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 	else
 		Item_Reset(this);
 
-	Net_LinkEntity(this, !((itemflags & FL_POWERUP) || this.health || this.armorvalue), 0, ItemSend);
+	Net_LinkEntity(this, !(def.instanceOfPowerup || def.instanceOfHealth || def.instanceOfArmor), 0, ItemSend);
 
 	// call this hook after everything else has been done
 	if (MUTATOR_CALLHOOK(Item_Spawn, this))
@@ -1199,9 +1194,6 @@ void StartItem(entity this, GameItem def)
     	this.itemdef = def,
     	def.m_respawntime(), // defaultrespawntime
     	def.m_respawntimejitter(), // defaultrespawntimejitter
-    	def.m_name, // itemname
-    	def.m_itemid, // itemid
-    	0, // weaponid
     	def.m_itemflags // itemflags
 	);
 }
diff --git a/qcsrc/server/t_items.qh b/qcsrc/server/t_items.qh
index 870f847bf8..230f54634f 100644
--- a/qcsrc/server/t_items.qh
+++ b/qcsrc/server/t_items.qh
@@ -60,7 +60,7 @@ float autocvar_sv_simple_items;
 bool ItemSend(entity this, entity to, int sf);
 
 
-float have_pickup_item(void);
+bool have_pickup_item(entity this);
 
 const float ITEM_RESPAWN_TICKS = 10;
 
@@ -112,7 +112,7 @@ float commodity_pickupevalfunc(entity player, entity item);
 
 .float is_item;
 .entity itemdef;
-void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter, string itemname, float itemid, float weaponid, float itemflags);
+void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter, float itemflags);
 
 
 void target_items_use (void);
diff --git a/qcsrc/server/weapons/spawning.qc b/qcsrc/server/weapons/spawning.qc
index 6351c3031e..420133d377 100644
--- a/qcsrc/server/weapons/spawning.qc
+++ b/qcsrc/server/weapons/spawning.qc
@@ -176,9 +176,6 @@ void weapon_defaultspawnfunc(entity this, Weapon e)
 		this.itemdef = def,
 		this.respawntime, // defaultrespawntime
 		this.respawntimejitter, // defaultrespawntimejitter
-		e.message, // itemname
-		0, // itemid
-		e.weapon, // weaponid
 		f // itemflags
 	);
 	#if 0 // WEAPONTODO