From 253640f3521a23f089f630ffe1dcb193e9ad870e Mon Sep 17 00:00:00 2001 From: otta8634 Date: Fri, 20 Dec 2024 16:26:17 +0800 Subject: [PATCH] Move attributes for items and nades into their classes (cherry-pick 4192f3a1af) This makes it more consistent with weapons, buff, some powerups, monsters, and vehicles. Also fixed issue where REGISTER_NADE had no second parameter, yet one was passed anyway. --- qcsrc/common/items/item/ammo.qh | 96 ++++----- qcsrc/common/items/item/armor.qh | 180 +++++++++-------- qcsrc/common/items/item/health.qh | 183 ++++++++++-------- qcsrc/common/items/item/jetpack.qh | 88 ++++----- .../common/mutators/mutator/instagib/items.qh | 55 +++--- qcsrc/common/mutators/mutator/nades/nades.inc | 112 ++++++----- qcsrc/common/mutators/mutator/nades/nades.qh | 4 +- 7 files changed, 391 insertions(+), 327 deletions(-) diff --git a/qcsrc/common/items/item/ammo.qh b/qcsrc/common/items/item/ammo.qh index 2bd71924d..8397f1fcc 100644 --- a/qcsrc/common/items/item/ammo.qh +++ b/qcsrc/common/items/item/ammo.qh @@ -44,23 +44,21 @@ void ammo_shells_init(Pickup this, entity item) #endif CLASS(Shells, Ammo) -ENDCLASS(Shells) - -REGISTER_ITEM(Shells, NEW(Shells)) { - this.m_canonical_spawnfunc = "item_shells"; +/* spawnfunc */ ATTRIB(Shells, m_canonical_spawnfunc, string, "item_shells"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_Shells_ITEM; +/* spawnflags */ ATTRIB(Shells, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(Shells, m_model, Model, MDL_Shells_ITEM); #endif - this.netname = "shells"; - this.m_name = _("Shells"); - this.m_icon = "ammo_shells"; +/* refname */ ATTRIB(Shells, netname, string, "shells"); +/* itemname */ ATTRIB(Shells, m_name, string, _("Shells")); +/* icon */ ATTRIB(Shells, m_icon, string, "ammo_shells"); #ifdef SVQC - this.m_botvalue = 1000; - this.m_itemid = IT_RESOURCE; - this.m_iteminit = ammo_shells_init; +/* botvalue */ ATTRIB(Shells, m_botvalue, int, 1000); +/* itemid */ ATTRIB(Shells, m_itemid, int, IT_RESOURCE); +/* iteminit */ ATTRIB(Shells, m_iteminit, void(Pickup this, entity item), ammo_shells_init); #endif -} +ENDCLASS(Shells) +REGISTER_ITEM(Shells, NEW(Shells)); SPAWNFUNC_ITEM(item_shells, ITEM_Shells) @@ -80,23 +78,21 @@ void ammo_bullets_init(Pickup this, entity item) #endif CLASS(Bullets, Ammo) -ENDCLASS(Bullets) - -REGISTER_ITEM(Bullets, NEW(Bullets)) { - this.m_canonical_spawnfunc = "item_bullets"; +/* spawnfunc */ ATTRIB(Bullets, m_canonical_spawnfunc, string, "item_bullets"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_Bullets_ITEM; +/* spawnflags */ ATTRIB(Bullets, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(Bullets, m_model, Model, MDL_Bullets_ITEM); #endif - this.netname = "bullets"; - this.m_name = _("Bullets"); - this.m_icon = "ammo_bullets"; +/* refname */ ATTRIB(Bullets, netname, string, "bullets"); +/* itemname */ ATTRIB(Bullets, m_name, string, _("Bullets")); +/* icon */ ATTRIB(Bullets, m_icon, string, "ammo_bullets"); #ifdef SVQC - this.m_botvalue = 1500; - this.m_itemid = IT_RESOURCE; - this.m_iteminit = ammo_bullets_init; +/* botvalue */ ATTRIB(Bullets, m_botvalue, int, 1500); +/* itemid */ ATTRIB(Bullets, m_itemid, int, IT_RESOURCE); +/* iteminit */ ATTRIB(Bullets, m_iteminit, void(Pickup this, entity item), ammo_bullets_init); #endif -} +ENDCLASS(Bullets) +REGISTER_ITEM(Bullets, NEW(Bullets)); SPAWNFUNC_ITEM(item_bullets, ITEM_Bullets) @@ -114,21 +110,23 @@ void ammo_rockets_init(Pickup this, entity item) SetResourceExplicit(item, RES_ROCKETS, g_pickup_rockets); } #endif -REGISTER_ITEM(Rockets, NEW(Ammo)) { - this.m_canonical_spawnfunc = "item_rockets"; + +CLASS(Rockets, Ammo) +/* spawnfunc */ ATTRIB(Rockets, m_canonical_spawnfunc, string, "item_rockets"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_Rockets_ITEM; +/* spawnflags */ ATTRIB(Rockets, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(Rockets, m_model, Model, MDL_Rockets_ITEM); #endif - this.netname = "rockets"; - this.m_name = _("Rockets"); - this.m_icon = "ammo_rockets"; +/* refname */ ATTRIB(Rockets, netname, string, "rockets"); +/* itename */ ATTRIB(Rockets, m_name, string, _("Rockets")); +/* icon */ ATTRIB(Rockets, m_icon, string, "ammo_rockets"); #ifdef SVQC - this.m_botvalue = 1500; - this.m_itemid = IT_RESOURCE; - this.m_iteminit = ammo_rockets_init; +/* botvalue */ ATTRIB(Rockets, m_botvalue, int, 1500); +/* itemid */ ATTRIB(Rockets, m_itemid, int, IT_RESOURCE); +/* iteminit */ ATTRIB(Rockets, m_iteminit, void(Pickup this, entity item), ammo_rockets_init); #endif -} +ENDCLASS(Rockets) +REGISTER_ITEM(Rockets, NEW(Rockets)); SPAWNFUNC_ITEM(item_rockets, ITEM_Rockets) @@ -146,20 +144,22 @@ void ammo_cells_init(Pickup this, entity item) SetResourceExplicit(item, RES_CELLS, g_pickup_cells); } #endif -REGISTER_ITEM(Cells, NEW(Ammo)) { - this.m_canonical_spawnfunc = "item_cells"; + +CLASS(Cells, Ammo) +/* spawnfunc */ ATTRIB(Cells, m_canonical_spawnfunc, string, "item_cells"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_Cells_ITEM; +/* spawnflags */ ATTRIB(Cells, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(Cells, m_model, Model, MDL_Cells_ITEM); #endif - this.netname = "cells"; - this.m_name = _("Cells"); - this.m_icon = "ammo_cells"; +/* refname */ ATTRIB(Cells, netname, string, "cells"); +/* itemname */ ATTRIB(Cells, m_name, string, _("Cells")); +/* icon */ ATTRIB(Cells, m_icon, string, "ammo_cells"); #ifdef SVQC - this.m_botvalue = 1500; - this.m_itemid = IT_RESOURCE; - this.m_iteminit = ammo_cells_init; +/* botvalue */ ATTRIB(Cells, m_botvalue, int, 1500); +/* itemid */ ATTRIB(Cells, m_itemid, int, IT_RESOURCE); +/* iteminit */ ATTRIB(Cells, m_iteminit, void(Pickup this, entity item), ammo_cells_init); #endif -} +ENDCLASS(Cells) +REGISTER_ITEM(Cells, NEW(Cells)); SPAWNFUNC_ITEM(item_cells, ITEM_Cells) diff --git a/qcsrc/common/items/item/armor.qh b/qcsrc/common/items/item/armor.qh index 87452a911..a784530b0 100644 --- a/qcsrc/common/items/item/armor.qh +++ b/qcsrc/common/items/item/armor.qh @@ -29,30 +29,35 @@ void item_armorsmall_init(Pickup this, entity item) } #endif -REGISTER_ITEM(ArmorSmall, NEW(Armor)) { - this.m_canonical_spawnfunc = "item_armor_small"; +CLASS(ArmorSmall, Armor) +/* spawnfunc */ ATTRIB(ArmorSmall, m_canonical_spawnfunc, string, "item_armor_small"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_ArmorSmall_ITEM; - this.m_sound = SND_ArmorSmall; +/* spawnflags */ ATTRIB(ArmorSmall, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(ArmorSmall, m_model, Model, MDL_ArmorSmall_ITEM); +/* sound */ ATTRIB(ArmorSmall, m_sound, Sound, SND_ArmorSmall); #endif - this.netname = "armor_small"; - this.m_name = _("Small armor"); - this.m_icon = "armor_small"; +/* refname */ ATTRIB(ArmorSmall, netname, string, "armor_small"); +/* itemname */ ATTRIB(ArmorSmall, m_name, string, _("Small armor")); +/* icon */ ATTRIB(ArmorSmall, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "armor"; // compatible with Xonotic v0.8.2 or lower + (precache_pic(strcat("gfx/hud/luma/", "health_small")) == "") + ? "armor" // compatible with Xonotic v0.8.2 or lower + : "armor_small" +#else + "armor_small" #endif +); #ifdef SVQC - this.m_mins = ITEM_S_MINS; - this.m_maxs = ITEM_S_MAXS; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_armor_small); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_armor_small); - this.m_pickupanyway = GET(g_pickup_armorsmall_anyway); - this.m_iteminit = item_armorsmall_init; -#endif -} +/* minsize */ ATTRIB(ArmorSmall, m_mins, vector, ITEM_S_MINS); +/* maxsize */ ATTRIB(ArmorSmall, m_maxs, vector, ITEM_S_MAXS); +/* itemid */ ATTRIB(ArmorSmall, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(ArmorSmall, m_respawntime, float, GET(g_pickup_respawntime_armor_small)); +/* */ ATTRIB(ArmorSmall, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_armor_small)); +/* pickupanyway */ ATTRIB(ArmorSmall, m_pickupanyway, float, GET(g_pickup_armorsmall_anyway)); +/* iteminit */ ATTRIB(ArmorSmall, m_iteminit, void(Pickup this, entity item), item_armorsmall_init); +#endif +ENDCLASS(ArmorSmall) +REGISTER_ITEM(ArmorSmall, NEW(ArmorSmall)); SPAWNFUNC_ITEM(item_armor_small, ITEM_ArmorSmall) @@ -73,30 +78,35 @@ void item_armormedium_init(Pickup this, entity item) } #endif -REGISTER_ITEM(ArmorMedium, NEW(Armor)) { - this.m_canonical_spawnfunc = "item_armor_medium"; +CLASS(ArmorMedium, Armor) +/* spawnfunc */ ATTRIB(ArmorMedium, m_canonical_spawnfunc, string, "item_armor_medium"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_ArmorMedium_ITEM; - this.m_sound = SND_ArmorMedium; +/* spawnflags */ ATTRIB(ArmorMedium, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(ArmorMedium, m_model, Model, MDL_ArmorMedium_ITEM); +/* sound */ ATTRIB(ArmorMedium, m_sound, Sound, SND_ArmorMedium); #endif - this.netname = "armor_medium"; - this.m_name = _("Medium armor"); - this.m_icon = "armor_medium"; +/* refname */ ATTRIB(ArmorMedium, netname, string, "armor_medium"); +/* itemname */ ATTRIB(ArmorMedium, m_name, string, _("Medium armor")); +/* icon */ ATTRIB(ArmorMedium, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "armor"; // compatible with Xonotic v0.8.2 or lower + (precache_pic(strcat("gfx/hud/luma/", "armor_medium")) == "") + ? "armor" // compatible with Xonotic v0.8.2 or lower + : "armor_medium" +#else + "armor_medium" #endif +); #ifdef SVQC - this.m_mins = ITEM_S_MINS; - this.m_maxs = ITEM_S_MAXS; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_armor_medium); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_armor_medium); - this.m_pickupanyway = GET(g_pickup_armormedium_anyway); - this.m_iteminit = item_armormedium_init; -#endif -} +/* minsize */ ATTRIB(ArmorMedium, m_mins, vector, ITEM_S_MINS); +/* maxsize */ ATTRIB(ArmorMedium, m_maxs, vector, ITEM_S_MAXS); +/* itemid */ ATTRIB(ArmorMedium, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(ArmorMedium, m_respawntime, float, GET(g_pickup_respawntime_armor_medium)); +/* */ ATTRIB(ArmorMedium, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_armor_medium)); +/* pickupanyway */ ATTRIB(ArmorMedium, m_pickupanyway, float, GET(g_pickup_armormedium_anyway)); +/* iteminit */ ATTRIB(ArmorMedium, m_iteminit, void(Pickup this, entity item), item_armormedium_init); +#endif +ENDCLASS(ArmorMedium) +REGISTER_ITEM(ArmorMedium, NEW(ArmorMedium)); SPAWNFUNC_ITEM(item_armor_medium, ITEM_ArmorMedium) @@ -117,30 +127,35 @@ void item_armorbig_init(Pickup this, entity item) } #endif -REGISTER_ITEM(ArmorBig, NEW(Armor)) { - this.m_canonical_spawnfunc = "item_armor_big"; +CLASS(ArmorBig, Armor) +/* spawnfunc */ ATTRIB(ArmorBig, m_canonical_spawnfunc, string, "item_armor_big"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_ArmorBig_ITEM; - this.m_sound = SND_ArmorBig; +/* spawnflags */ ATTRIB(ArmorBig, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(ArmorBig, m_model, Model, MDL_ArmorBig_ITEM); +/* sound */ ATTRIB(ArmorBig, m_sound, Sound, SND_ArmorBig); #endif - this.netname = "armor_big"; - this.m_name = _("Big armor"); - this.m_icon = "armor_big"; +/* refname */ ATTRIB(ArmorBig, netname, string, "armor_big"); +/* itemname */ ATTRIB(ArmorBig, m_name, string, _("Big armor")); +/* icon */ ATTRIB(ArmorBig, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "armor"; // compatible with Xonotic v0.8.2 or lower -#endif - this.m_color = '0 1 0'; - this.m_waypoint = _("Big armor"); + (precache_pic(strcat("gfx/hud/luma/", "armor_big")) == "") + ? "armor" // compatible with Xonotic v0.8.2 or lower + : "armor_big" +#else + "armor_big" +#endif +); +/* color */ ATTRIB(ArmorBig, m_color, vector, '0 1 0'); +/* wptext */ ATTRIB(ArmorBig, m_waypoint, string, _("Big armor")); #ifdef SVQC - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_armor_big); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_armor_big); - this.m_pickupanyway = GET(g_pickup_armorbig_anyway); - this.m_iteminit = item_armorbig_init; -#endif -} +/* itemid */ ATTRIB(ArmorBig, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(ArmorBig, m_respawntime, float, GET(g_pickup_respawntime_armor_big)); +/* */ ATTRIB(ArmorBig, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_armor_big)); +/* pickupanyway */ ATTRIB(ArmorBig, m_pickupanyway, float, GET(g_pickup_armorbig_anyway)); +/* iteminit */ ATTRIB(ArmorBig, m_iteminit, void(Pickup this, entity item), item_armorbig_init); +#endif +ENDCLASS(ArmorBig) +REGISTER_ITEM(ArmorBig, NEW(ArmorBig)); SPAWNFUNC_ITEM(item_armor_big, ITEM_ArmorBig) @@ -161,31 +176,36 @@ void item_armormega_init(Pickup this, entity item) } #endif -REGISTER_ITEM(ArmorMega, NEW(Armor)) { - this.m_canonical_spawnfunc = "item_armor_mega"; +CLASS(ArmorMega, Armor) +/* spawnfunc */ ATTRIB(ArmorMega, m_canonical_spawnfunc, string, "item_armor_mega"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_ArmorMega_ITEM; - this.m_sound = SND_ArmorMega; +/* spawnflags */ ATTRIB(ArmorMega, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(ArmorMega, m_model, Model, MDL_ArmorMega_ITEM); +/* sound */ ATTRIB(ArmorMega, m_sound, Sound, SND_ArmorMega); #endif - this.netname = "armor_mega"; - this.m_name = _("Mega armor"); - this.m_icon = "armor_mega"; +/* refname */ ATTRIB(ArmorMega, netname, string, "armor_mega"); +/* itemname */ ATTRIB(ArmorMega, m_name, string, _("Mega armor")); +/* icon */ ATTRIB(ArmorMega, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "item_large_armor"; // compatible with Xonotic v0.8.2 or lower -#endif - this.m_color = '0 1 0'; - this.m_waypoint = _("Mega armor"); - this.m_waypointblink = 2; + (precache_pic(strcat("gfx/hud/luma/", "armor_mega")) == "") + ? "item_large_armor" // compatible with Xonotic v0.8.2 or lower + : "armor_mega" +#else + "armor_mega" +#endif +); +/* color */ ATTRIB(ArmorMega, m_color, vector, '0 1 0'); +/* wptext */ ATTRIB(ArmorMega, m_waypoint, string, _("Mega armor")); +/* wpblink */ ATTRIB(ArmorMega, m_waypointblink, int, 2); #ifdef SVQC - this.m_maxs = ITEM_L_MAXS; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_armor_mega); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_armor_mega); - this.m_pickupanyway = GET(g_pickup_armormega_anyway); - this.m_iteminit = item_armormega_init; -#endif -} +/* maxsize */ ATTRIB(ArmorMega, m_maxs, vector, ITEM_L_MAXS); +/* itemid */ ATTRIB(ArmorMega, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(ArmorMega, m_respawntime, float, GET(g_pickup_respawntime_armor_mega)); +/* */ ATTRIB(ArmorMega, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_armor_mega)); +/* pickupanyway */ ATTRIB(ArmorMega, m_pickupanyway, float, GET(g_pickup_armormega_anyway)); +/* iteminit */ ATTRIB(ArmorMega, m_iteminit, void(Pickup this, entity item), item_armormega_init); +#endif +ENDCLASS(ArmorMega) +REGISTER_ITEM(ArmorMega, NEW(ArmorMega)); SPAWNFUNC_ITEM(item_armor_mega, ITEM_ArmorMega) diff --git a/qcsrc/common/items/item/health.qh b/qcsrc/common/items/item/health.qh index c404f388c..6db81bf61 100644 --- a/qcsrc/common/items/item/health.qh +++ b/qcsrc/common/items/item/health.qh @@ -29,31 +29,35 @@ void item_healthsmall_init(Pickup this, entity item) } #endif -REGISTER_ITEM(HealthSmall, NEW(Health)) { - this.m_canonical_spawnfunc = "item_health_small"; +CLASS(HealthSmall, Health) +/* spawnfunc */ ATTRIB(HealthSmall, m_canonical_spawnfunc, string, "item_health_small"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_HealthSmall_ITEM; - this.m_sound = SND_HealthSmall; +/* spawnflags */ ATTRIB(HealthSmall, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(HealthSmall, m_model, Model, MDL_HealthSmall_ITEM); +/* sound */ ATTRIB(HealthSmall, m_sound, Sound, SND_HealthSmall); #endif - this.netname = "health_small"; - this.m_name = _("Small health"); - this.m_icon = "health_small"; +/* refname */ ATTRIB(HealthSmall, netname, string, "health_small"); +/* itemname */ ATTRIB(HealthSmall, m_name, string, _("Small health")); +/* icon */ ATTRIB(HealthSmall, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "health"; // compatible with Xonotic v0.8.2 or lower + (precache_pic(strcat("gfx/hud/luma/", "health_small")) == "") + ? "health" // compatible with Xonotic v0.8.2 or lower + : "health_small" +#else + "health_small" #endif +); #ifdef SVQC - this.m_mins = ITEM_S_MINS; - this.m_maxs = ITEM_S_MAXS; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_health_small); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_health_small); - this.m_pickupanyway = GET(g_pickup_healthsmall_anyway); - this.m_iteminit = item_healthsmall_init; - -#endif -} +/* minsize */ ATTRIB(HealthSmall, m_mins, vector, ITEM_S_MINS); +/* maxsize */ ATTRIB(HealthSmall, m_maxs, vector, ITEM_S_MAXS); +/* itemid */ ATTRIB(HealthSmall, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(HealthSmall, m_respawntime, float, GET(g_pickup_respawntime_health_small)); +/* */ ATTRIB(HealthSmall, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_health_small)); +/* pickupanyway */ ATTRIB(HealthSmall, m_pickupanyway, float, GET(g_pickup_healthsmall_anyway)); +/* iteminit */ ATTRIB(HealthSmall, m_iteminit, void(Pickup this, entity item), item_healthsmall_init); +#endif +ENDCLASS(HealthSmall) +REGISTER_ITEM(HealthSmall, NEW(HealthSmall)); SPAWNFUNC_ITEM(item_health_small, ITEM_HealthSmall) @@ -74,30 +78,35 @@ void item_healthmedium_init(Pickup this, entity item) } #endif -REGISTER_ITEM(HealthMedium, NEW(Health)) { - this.m_canonical_spawnfunc = "item_health_medium"; +CLASS(HealthMedium, Health) +/* spawnfunc */ ATTRIB(HealthMedium, m_canonical_spawnfunc, string, "item_health_medium"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_HealthMedium_ITEM; - this.m_sound = SND_HealthMedium; +/* spawnflags */ ATTRIB(HealthMedium, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(HealthMedium, m_model, Model, MDL_HealthMedium_ITEM); +/* sound */ ATTRIB(HealthMedium, m_sound, Sound, SND_HealthMedium); #endif - this.netname = "health_medium"; - this.m_name = _("Medium health"); - this.m_icon = "health_medium"; +/* refname */ ATTRIB(HealthMedium, netname, string, "health_medium"); +/* itemname */ ATTRIB(HealthMedium, m_name, string, _("Medium health")); +/* icon */ ATTRIB(HealthMedium, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "health"; // compatible with Xonotic v0.8.2 or lower + (precache_pic(strcat("gfx/hud/luma/", "health_medium")) == "") + ? "health" // compatible with Xonotic v0.8.2 or lower + : "health_medium" +#else + "health_medium" #endif +); #ifdef SVQC - this.m_mins = ITEM_S_MINS; - this.m_maxs = ITEM_S_MAXS; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_health_medium); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_health_medium); - this.m_pickupanyway = GET(g_pickup_healthmedium_anyway); - this.m_iteminit = item_healthmedium_init; -#endif -} +/* minsize */ ATTRIB(HealthMedium, m_mins, vector, ITEM_S_MINS); +/* maxsize */ ATTRIB(HealthMedium, m_maxs, vector, ITEM_S_MAXS); +/* itemid */ ATTRIB(HealthMedium, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(HealthMedium, m_respawntime, float, GET(g_pickup_respawntime_health_medium)); +/* */ ATTRIB(HealthMedium, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_health_medium)); +/* pickupanyway */ ATTRIB(HealthMedium, m_pickupanyway, float, GET(g_pickup_healthmedium_anyway)); +/* iteminit */ ATTRIB(HealthMedium, m_iteminit, void(Pickup this, entity item), item_healthmedium_init); +#endif +ENDCLASS(HealthMedium) +REGISTER_ITEM(HealthMedium, NEW(HealthMedium)); SPAWNFUNC_ITEM(item_health_medium, ITEM_HealthMedium) @@ -118,30 +127,35 @@ void item_healthbig_init(Pickup this, entity item) } #endif -REGISTER_ITEM(HealthBig, NEW(Health)) { - this.m_canonical_spawnfunc = "item_health_big"; +CLASS(HealthBig, Health) +/* spawnfunc */ ATTRIB(HealthBig, m_canonical_spawnfunc, string, "item_health_big"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_HealthBig_ITEM; - this.m_sound = SND_HealthBig; -#endif - this.netname = "health_big"; - this.m_name = _("Big health"); - this.m_icon = "health_big"; - this.m_color = '1 0 0'; - this.m_waypoint = _("Big health"); -#ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "health"; // compatible with Xonotic v0.8.2 or lower +/* spawnflags */ ATTRIB(HealthBig, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(HealthBig, m_model, Model, MDL_HealthBig_ITEM); +/* sound */ ATTRIB(HealthBig, m_sound, Sound, SND_HealthBig); #endif +/* refname */ ATTRIB(HealthBig, netname, string, "health_big"); +/* itemname */ ATTRIB(HealthBig, m_name, string, _("Big health")); +/* icon */ ATTRIB(HealthBig, m_icon, string, // ... +#ifdef CSQC + (precache_pic(strcat("gfx/hud/luma/", "health_big")) == "") + ? "health" // compatible with Xonotic v0.8.2 or lower + : "health_big" +#else + "health_big" +#endif +); +/* color */ ATTRIB(HealthBig, m_color, vector, '1 0 0'); +/* wptext */ ATTRIB(HealthBig, m_waypoint, string, _("Big health")); #ifdef SVQC - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_health_big); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_health_big); - this.m_pickupanyway = GET(g_pickup_healthbig_anyway); - this.m_iteminit = item_healthbig_init; -#endif -} +/* itemid */ ATTRIB(HealthBig, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(HealthBig, m_respawntime, float, GET(g_pickup_respawntime_health_big)); +/* */ ATTRIB(HealthBig, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_health_big)); +/* pickupanyway */ ATTRIB(HealthBig, m_pickupanyway, float, GET(g_pickup_healthbig_anyway)); +/* iteminit */ ATTRIB(HealthBig, m_iteminit, void(Pickup this, entity item), item_healthbig_init); +#endif +ENDCLASS(HealthBig) +REGISTER_ITEM(HealthBig, NEW(HealthBig)); SPAWNFUNC_ITEM(item_health_big, ITEM_HealthBig) @@ -162,31 +176,36 @@ void item_healthmega_init(Pickup this, entity item) } #endif -REGISTER_ITEM(HealthMega, NEW(Health)) { - this.m_canonical_spawnfunc = "item_health_mega"; +CLASS(HealthMega, Health) +/* spawnfunc */ ATTRIB(HealthMega, m_canonical_spawnfunc, string, "item_health_mega"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_HealthMega_ITEM; - this.m_sound = SND_HealthMega; +/* spawnflags */ ATTRIB(HealthMega, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(HealthMega, m_model, Model, MDL_HealthMega_ITEM); +/* sound */ ATTRIB(HealthMega, m_sound, Sound, SND_HealthMega); #endif - this.netname = "health_mega"; - this.m_name = _("Mega health"); - this.m_icon = "health_mega"; +/* refname */ ATTRIB(HealthMega, netname, string, "health_mega"); +/* itemname */ ATTRIB(HealthMega, m_name, string, _("Mega health")); +/* icon */ ATTRIB(HealthMega, m_icon, string, // ... #ifdef CSQC - if(precache_pic(strcat("gfx/hud/luma/", this.m_icon)) == "") - this.m_icon = "item_mega_health"; // compatible with Xonotic v0.8.2 or lower -#endif - this.m_color = '1 0 0'; - this.m_waypoint = _("Mega health"); - this.m_waypointblink = 2; + (precache_pic(strcat("gfx/hud/luma/", "health_mega")) == "") + ? "item_mega_health" // compatible with Xonotic v0.8.2 or lower + : "health_mega" +#else + "health_mega" +#endif +); +/* color */ ATTRIB(HealthMega, m_color, vector, '1 0 0'); +/* wptext */ ATTRIB(HealthMega, m_waypoint, string, _("Mega health")); +/* wpblink */ ATTRIB(HealthMega, m_waypointblink, int, 2); #ifdef SVQC - this.m_maxs = ITEM_L_MAXS; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(g_pickup_respawntime_health_mega); - this.m_respawntimejitter = GET(g_pickup_respawntimejitter_health_mega); - this.m_pickupanyway = GET(g_pickup_healthmega_anyway); - this.m_iteminit = item_healthmega_init; -#endif -} +/* maxsize */ ATTRIB(HealthMega, m_maxs, vector, ITEM_L_MAXS); +/* itemid */ ATTRIB(HealthMega, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(HealthMega, m_respawntime, float, GET(g_pickup_respawntime_health_mega)); +/* */ ATTRIB(HealthMega, m_respawntimejitter, float, GET(g_pickup_respawntimejitter_health_mega)); +/* pickupanyway */ ATTRIB(HealthMega, m_pickupanyway, float, GET(g_pickup_healthmega_anyway)); +/* iteminit */ ATTRIB(HealthMega, m_iteminit, void(Pickup this, entity item), item_healthmega_init); +#endif +ENDCLASS(HealthMega) +REGISTER_ITEM(HealthMega, NEW(HealthMega)); SPAWNFUNC_ITEM(item_health_mega, ITEM_HealthMega) diff --git a/qcsrc/common/items/item/jetpack.qh b/qcsrc/common/items/item/jetpack.qh index 41297c898..301723337 100644 --- a/qcsrc/common/items/item/jetpack.qh +++ b/qcsrc/common/items/item/jetpack.qh @@ -29,27 +29,25 @@ void powerup_jetpack_init(Pickup def, entity item) #endif CLASS(Jetpack, Powerup) -ENDCLASS(Jetpack) - -REGISTER_ITEM(Jetpack, NEW(Jetpack)) { - this.m_canonical_spawnfunc = "item_jetpack"; +/* spawnfunc */ ATTRIB(Jetpack, m_canonical_spawnfunc, string, "item_jetpack"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL; - this.m_model = MDL_Jetpack_ITEM; - this.m_itemid = IT_JETPACK; +/* spawnflags */ ATTRIB(Jetpack, spawnflags, int, ITEM_FLAG_NORMAL); +/* model */ ATTRIB(Jetpack, m_model, Model, MDL_Jetpack_ITEM); +/* sound */ ATTRIB(Jetpack, m_itemid, Sound, IT_JETPACK); #endif - this.netname = "jetpack"; - this.m_name = _("Jetpack"); - this.m_icon = "jetpack"; - this.m_color = '0.5 0.5 0.5'; - this.m_waypoint = _("Jetpack"); - this.m_waypointblink = 2; +/* refnmae */ ATTRIB(Jetpack, netname, string, "jetpack"); +/* itemname */ ATTRIB(Jetpack, m_name, string, _("Jetpack")); +/* icon */ ATTRIB(Jetpack, m_icon, string, "jetpack"); +/* color */ ATTRIB(Jetpack, m_color, vector, '0.5 0.5 0.5'); +/* wptext */ ATTRIB(Jetpack, m_waypoint, string, _("Jetpack")); +/* wpblink */ ATTRIB(Jetpack, m_waypointblink, int, 2); #ifdef SVQC - this.m_botvalue = 3000; - this.m_pickupevalfunc = ammo_pickupevalfunc; - this.m_iteminit = powerup_jetpack_init; +/* botvalue */ ATTRIB(Jetpack, m_botvalue, int, 3000); +/* pickupfunc */ ATTRIB(Jetpack, m_pickupevalfunc, float(entity player, entity item), ammo_pickupevalfunc); +/* iteminit */ ATTRIB(Jetpack, m_iteminit, void(Pickup this, entity item), powerup_jetpack_init); #endif -} +ENDCLASS(Jetpack) +REGISTER_ITEM(Jetpack, NEW(Jetpack)); SPAWNFUNC_ITEM(item_jetpack, ITEM_Jetpack) @@ -65,21 +63,23 @@ void ammo_fuel_init(Pickup this, entity item) SetResourceExplicit(item, RES_FUEL, g_pickup_fuel); } #endif -REGISTER_ITEM(JetpackFuel, NEW(Ammo)) { - this.m_canonical_spawnfunc = "item_fuel"; + +CLASS(JetpackFuel, Ammo) +/* spawnfunc */ ATTRIB(JetpackFuel, m_canonical_spawnfunc, string, "item_fuel"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE; - this.m_model = MDL_JetpackFuel_ITEM; +/* spawnflags */ ATTRIB(JetpackFuel, spawnflags, int, ITEM_FLAG_NORMAL | ITEM_FLAG_RESOURCE); +/* model */ ATTRIB(JetpackFuel, m_model, Model, MDL_JetpackFuel_ITEM); #endif - this.netname = "fuel"; - this.m_name = _("Fuel"); - this.m_icon = "ammo_fuel"; +/* refname */ ATTRIB(JetpackFuel, netname, string, "fuel"); +/* itemname */ ATTRIB(JetpackFuel, m_name, string, _("Fuel")); +/* icon */ ATTRIB(JetpackFuel, m_icon, string, "ammo_fuel"); #ifdef SVQC - this.m_botvalue = 2000; - this.m_itemid = IT_RESOURCE; - this.m_iteminit = ammo_fuel_init; +/* botvlaue */ ATTRIB(JetpackFuel, m_botvalue, int, 2000); +/* itemid */ ATTRIB(JetpackFuel, m_itemid, int, IT_RESOURCE); +/* iteminit */ ATTRIB(JetpackFuel, m_iteminit, void(Pickup this, entity item), ammo_fuel_init); #endif -} +ENDCLASS(JetpackFuel) +REGISTER_ITEM(JetpackFuel, NEW(JetpackFuel)); SPAWNFUNC_ITEM(item_fuel, ITEM_JetpackFuel) @@ -97,26 +97,24 @@ void powerup_fuelregen_init(Pickup def, entity item) #endif CLASS(JetpackRegen, Powerup) -ENDCLASS(JetpackRegen) - -REGISTER_ITEM(JetpackRegen, NEW(JetpackRegen)) { - this.m_canonical_spawnfunc = "item_fuel_regen"; +/* spawnfunc */ ATTRIB(JetpackRegen, m_canonical_spawnfunc, string, "item_fuel_regen"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_NORMAL; - this.m_model = MDL_JetpackRegen_ITEM; +/* spawnflags */ ATTRIB(JetpackRegen, spawnflags, int, ITEM_FLAG_NORMAL); +/* model */ ATTRIB(JetpackRegen, m_model, Model, MDL_JetpackRegen_ITEM); #endif - this.netname = "fuel_regen"; - this.m_name = _("Fuel regenerator"); - this.m_icon = "fuelregen"; - this.m_color = '1 0.5 0'; - this.m_waypoint = _("Fuel regen"); - this.m_waypointblink = 2; +/* refname */ ATTRIB(JetpackRegen, netname, string, "fuel_regen"); +/* itemname */ ATTRIB(JetpackRegen, m_name, string, _("Fuel regenerator")); +/* icon */ ATTRIB(JetpackRegen, m_icon, string, "fuelregen"); +/* color */ ATTRIB(JetpackRegen, m_color, vector, '1 0.5 0'); +/* wptext */ ATTRIB(JetpackRegen, m_waypoint, string, _("Fuel regen")); +/* wpblink */ ATTRIB(JetpackRegen, m_waypointblink, int, 2); #ifdef SVQC - this.m_botvalue = 3000; - this.m_itemid = IT_FUEL_REGEN; - this.m_pickupevalfunc = ammo_pickupevalfunc; - this.m_iteminit = powerup_fuelregen_init; +/* botvalue */ ATTRIB(JetpackRegen, m_botvalue, int, 3000); +/* itemid */ ATTRIB(JetpackRegen, m_itemid, int, IT_FUEL_REGEN); +/* pickupfunc */ ATTRIB(JetpackRegen, m_pickupevalfunc, float(entity player, entity item), ammo_pickupevalfunc); +/* iteminit */ ATTRIB(JetpackRegen, m_iteminit, void(Pickup this, entity item), powerup_fuelregen_init); #endif -} +ENDCLASS(JetpackRegen) +REGISTER_ITEM(JetpackRegen, NEW(JetpackRegen)); SPAWNFUNC_ITEM(item_fuel_regen, ITEM_JetpackRegen) diff --git a/qcsrc/common/mutators/mutator/instagib/items.qh b/qcsrc/common/mutators/mutator/instagib/items.qh index 39d0378d5..9858f4b7f 100644 --- a/qcsrc/common/mutators/mutator/instagib/items.qh +++ b/qcsrc/common/mutators/mutator/instagib/items.qh @@ -22,24 +22,26 @@ void ammo_vaporizercells_init(Pickup this, entity item) SetResourceExplicit(item, RES_CELLS, autocvar_g_instagib_ammo_drop); } #endif -REGISTER_ITEM(VaporizerCells, NEW(Ammo)) { - this.m_canonical_spawnfunc = "item_vaporizer_cells"; + +CLASS(VaporizerCells, Ammo) +/* spawnfunc */ ATTRIB(VaporizerCells, m_canonical_spawnfunc, string, "item_vaporizer_cells"); #ifdef GAMEQC - this.spawnflags = ITEM_FLAG_MUTATORBLOCKED; - this.m_model = MDL_VaporizerCells_ITEM; - this.m_sound = SND_VaporizerCells; +/* spawnflags */ ATTRIB(VaporizerCells, spawnflags, int, ITEM_FLAG_MUTATORBLOCKED); +/* model */ ATTRIB(VaporizerCells, m_model, Model, MDL_VaporizerCells_ITEM); +/* sound */ ATTRIB(VaporizerCells, m_sound, Sound, SND_VaporizerCells); #endif - this.netname = "vaporizer_cells"; - this.m_name = _("Vaporizer ammo"); - this.m_icon = "ammo_supercells"; +/* refname */ ATTRIB(VaporizerCells, netname, string, "vaporizer_cells"); +/* itemname */ ATTRIB(VaporizerCells, m_name, string, _("Vaporizer ammo")); +/* icon */ ATTRIB(VaporizerCells, m_icon, string, "ammo_supercells"); #ifdef SVQC - this.m_botvalue = 2000; - this.m_itemid = IT_RESOURCE; - this.m_respawntime = GET(instagib_respawntime_ammo); - this.m_respawntimejitter = GET(instagib_respawntimejitter_ammo); - this.m_iteminit = ammo_vaporizercells_init; +/* botvalue */ ATTRIB(VaporizerCells, m_botvalue, int, 2000); +/* itemid */ ATTRIB(VaporizerCells, m_itemid, int, IT_RESOURCE); +/* respawntime */ ATTRIB(VaporizerCells, m_respawntime, float, GET(instagib_respawntime_ammo)); +/* */ ATTRIB(VaporizerCells, m_respawntimejitter, float, GET(instagib_respawntimejitter_ammo)); +/* iteminit */ ATTRIB(VaporizerCells, m_iteminit, void(Pickup this, entity item), ammo_vaporizercells_init); #endif -} +ENDCLASS(VaporizerCells) +REGISTER_ITEM(VaporizerCells, NEW(VaporizerCells)); SPAWNFUNC_ITEM(item_vaporizer_cells, ITEM_VaporizerCells) SPAWNFUNC_ITEM(item_minst_cells, ITEM_VaporizerCells) @@ -49,21 +51,22 @@ MODEL(ExtraLife_ITEM, Item_Model("g_h100.md3")); SOUND(ExtraLife, Item_Sound("megahealth")); #endif -REGISTER_ITEM(ExtraLife, NEW(Powerup)) { - this.m_canonical_spawnfunc = "item_extralife"; +CLASS(ExtraLife, Powerup) +/* spawnfunc */ ATTRIB(ExtraLife, m_canonical_spawnfun, string, "item_extralife"); #ifdef GAMEQC - this.m_model = MDL_ExtraLife_ITEM; - this.m_sound = SND_ExtraLife; +/* model */ ATTRIB(ExtraLife, m_model, Model, MDL_ExtraLife_ITEM); +/* sound */ ATTRIB(ExtraLife, m_sound, Sound, SND_ExtraLife); #endif - this.netname = "extralife"; - this.m_name = _("Extra life"); - this.m_icon = "item_mega_health"; - this.m_color = '1 0 0'; - this.m_waypoint = _("Extra life"); - this.m_waypointblink = 2; +/* refname */ ATTRIB(ExtraLife, netname, string, "extralife"); +/* itemname */ ATTRIB(ExtraLife, m_name, string, _("Extra life")); +/* icon */ ATTRIB(ExtraLife, m_icon, string, "item_mega_health"); +/* color */ ATTRIB(ExtraLife, m_color, vector, '1 0 0'); +/* wptext */ ATTRIB(ExtraLife, m_waypoint, string, _("Extra life")); +/* wpblink */ ATTRIB(ExtraLife, m_waypointblink, int, 2); #ifdef SVQC - this.m_itemid = IT_RESOURCE; +/* itemid */ ATTRIB(ExtraLife, m_itemid, int, IT_RESOURCE); #endif -} +ENDCLASS(ExtraLife) +REGISTER_ITEM(ExtraLife, NEW(ExtraLife)); SPAWNFUNC_ITEM(item_extralife, ITEM_ExtraLife) diff --git a/qcsrc/common/mutators/mutator/nades/nades.inc b/qcsrc/common/mutators/mutator/nades/nades.inc index b1d1d7c1e..821491930 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.inc +++ b/qcsrc/common/mutators/mutator/nades/nades.inc @@ -5,111 +5,135 @@ MACRO_END #endif -REGISTER_NADE(NORMAL) { - this.m_color = '1 1 1'; +CLASS(NormalNade, Nade) + ATTRIB(NormalNade, m_color, vector, '1 1 1'); + ATTRIB(NormalNade, m_name, string, _("Grenade")); + ATTRIB(NormalNade, m_icon, string, "nade_normal"); +ENDCLASS(NormalNade) +REGISTER_NADE(NORMAL, NEW(NormalNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE, EFFECT_Null); NADE_PROJECTILE(1, PROJECTILE_NADE_BURN, EFFECT_Null); #endif } -REGISTER_NADE(NAPALM) { - this.m_color = '2 0.5 0'; - this.m_name = _("Napalm grenade"); - this.m_icon = "nade_napalm"; +CLASS(NapalmNade, Nade) + ATTRIB(NapalmNade, m_color, vector, '2 0.5 0'); + ATTRIB(NapalmNade, m_name, string, _("Napalm grenade")); + ATTRIB(NapalmNade, m_icon, string, "nade_napalm"); +ENDCLASS(NapalmNade) +REGISTER_NADE(NAPALM, NEW(NapalmNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_NAPALM, EFFECT_TR_ROCKET); NADE_PROJECTILE(1, PROJECTILE_NADE_NAPALM_BURN, EFFECT_SPIDERBOT_ROCKET_TRAIL); #endif } -REGISTER_NADE(ICE) { - this.m_color = '0 0.5 2'; - this.m_name = _("Ice grenade"); - this.m_icon = "nade_ice"; +CLASS(IceNade, Nade) + ATTRIB(IceNade, m_color, vector, '0 0.5 2'); + ATTRIB(IceNade, m_name, string, _("Ice grenade")); + ATTRIB(IceNade, m_icon, string, "nade_ice"); +ENDCLASS(IceNade) +REGISTER_NADE(ICE, NEW(IceNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_ICE, EFFECT_TR_NEXUIZPLASMA); NADE_PROJECTILE(1, PROJECTILE_NADE_ICE_BURN, EFFECT_RACER_ROCKET_TRAIL); #endif } -REGISTER_NADE(TRANSLOCATE) { - this.m_color = '1 0 1'; - this.m_name = _("Translocate grenade"); - this.m_icon = "nade_translocate"; +CLASS(TranslocateNade, Nade) + ATTRIB(TranslocateNade, m_color, vector, '1 0 1'); + ATTRIB(TranslocateNade, m_name, string, _("Translocate grenade")); + ATTRIB(TranslocateNade, m_icon, string, "nade_translocate"); +ENDCLASS(TranslocateNade) +REGISTER_NADE(TRANSLOCATE, NEW(TranslocateNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_TRANSLOCATE, EFFECT_TR_CRYLINKPLASMA); NADE_PROJECTILE(1, PROJECTILE_NADE_TRANSLOCATE, EFFECT_TR_CRYLINKPLASMA); #endif } -REGISTER_NADE(SPAWN) { - this.m_color = '1 0.9 0'; - this.m_name = _("Spawn grenade"); - this.m_icon = "nade_spawn"; +CLASS(SpawnNade, Nade) + ATTRIB(SpawnNade, m_color, vector, '1 0.9 0'); + ATTRIB(SpawnNade, m_name, string, _("Spawn grenade")); + ATTRIB(SpawnNade, m_icon, string, "nade_spawn"); +ENDCLASS(SpawnNade) +REGISTER_NADE(SPAWN, NEW(SpawnNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_SPAWN, EFFECT_NADE_TRAIL_YELLOW); NADE_PROJECTILE(1, PROJECTILE_NADE_SPAWN, EFFECT_NADE_TRAIL_YELLOW); #endif } -REGISTER_NADE(HEAL) { - this.m_color = '1 0 0'; - this.m_name = _("Heal grenade"); - this.m_icon = "nade_heal"; +CLASS(HealNade, Nade) + ATTRIB(HealNade, m_color, vector, '1 0 0'); + ATTRIB(HealNade, m_name, string, _("Heal grenade")); + ATTRIB(HealNade, m_icon, string, "nade_heal"); +ENDCLASS(HealNade) +REGISTER_NADE(HEAL, NEW(HealNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_HEAL, EFFECT_NADE_TRAIL_RED); NADE_PROJECTILE(1, PROJECTILE_NADE_HEAL_BURN, EFFECT_NADE_TRAIL_BURN_RED); #endif } -REGISTER_NADE(MONSTER) { - this.m_color = '0.25 0.75 0'; - this.m_name = _("Monster grenade"); - this.m_icon = "nade_monster"; +CLASS(MonsterNade, Nade) + ATTRIB(MonsterNade, m_color, vector, '0.25 0.75 0'); + ATTRIB(MonsterNade, m_name, string, _("Monster grenade")); + ATTRIB(MonsterNade, m_icon, string, "nade_monster"); +ENDCLASS(MonsterNade) +REGISTER_NADE(MONSTER, NEW(MonsterNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_MONSTER, EFFECT_NADE_TRAIL_RED); NADE_PROJECTILE(1, PROJECTILE_NADE_MONSTER_BURN, EFFECT_NADE_TRAIL_BURN_RED); #endif } -REGISTER_NADE(ENTRAP) { - this.m_color = '0.15 0.85 0'; - this.m_name = _("Entrap grenade"); - this.m_icon = "nade_entrap"; +CLASS(EntrapNade, Nade) + ATTRIB(EntrapNade, m_color, vector, '0.15 0.85 0'); + ATTRIB(EntrapNade, m_name, string, _("Entrap grenade")); + ATTRIB(EntrapNade, m_icon, string, "nade_entrap"); +ENDCLASS(EntrapNade) +REGISTER_NADE(ENTRAP, NEW(EntrapNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_ENTRAP, EFFECT_NADE_TRAIL_YELLOW); NADE_PROJECTILE(1, PROJECTILE_NADE_ENTRAP_BURN, EFFECT_NADE_TRAIL_BURN_YELLOW); #endif } -REGISTER_NADE(VEIL) { - this.m_color = '0.65 0.85 0.65'; - this.m_name = _("Veil grenade"); - this.m_icon = "nade_veil"; - this.m_alpha = 0.45; +CLASS(VeilNade, Nade) + ATTRIB(VeilNade, m_color, vector, '0.65 0.85 0.65'); + ATTRIB(VeilNade, m_name, string, _("Veil grenade")); + ATTRIB(VeilNade, m_icon, string, "nade_veil"); + ATTRIB(VeilNade, m_alpha, float, 0.45); +ENDCLASS(VeilNade) +REGISTER_NADE(VEIL, NEW(VeilNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_VEIL, EFFECT_NADE_TRAIL_NEUTRAL); NADE_PROJECTILE(1, PROJECTILE_NADE_VEIL_BURN, EFFECT_NADE_TRAIL_BURN_NEUTRAL); #endif } -REGISTER_NADE(AMMO) { - this.m_color = '0.66 0.33 0'; - this.m_name = _("Ammo grenade"); - this.m_icon = "nade_ammo"; +CLASS(AmmoNade, Nade) + ATTRIB(AmmoNade, m_color, vector, '0.66 0.33 0'); + ATTRIB(AmmoNade, m_name, string, _("Ammo grenade")); + ATTRIB(AmmoNade, m_icon, string, "nade_ammo"); +ENDCLASS(AmmoNade) +REGISTER_NADE(AMMO, NEW(AmmoNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_AMMO, EFFECT_NADE_TRAIL_BROWN); NADE_PROJECTILE(1, PROJECTILE_NADE_AMMO_BURN, EFFECT_NADE_TRAIL_BURN_BROWN); #endif } -REGISTER_NADE(DARKNESS) { - this.m_color = '0.23 0 0.23'; - this.m_name = _("Darkness grenade"); - this.m_icon = "nade_darkness"; +CLASS(DarknessNade, Nade) + ATTRIB(DarknessNade, m_color, vector, '0.23 0 0.23'); + ATTRIB(DarknessNade, m_name, string, _("Darkness grenade")); + ATTRIB(DarknessNade, m_icon, string, "nade_darkness"); +ENDCLASS(DarknessNade) +REGISTER_NADE(DARKNESS, NEW(DarknessNade)) { #ifdef GAMEQC NADE_PROJECTILE(0, PROJECTILE_NADE_DARKNESS, EFFECT_NADE_TRAIL_PURPLE); NADE_PROJECTILE(1, PROJECTILE_NADE_DARKNESS_BURN, EFFECT_NADE_TRAIL_BURN_PURPLE); #endif -} \ No newline at end of file +} diff --git a/qcsrc/common/mutators/mutator/nades/nades.qh b/qcsrc/common/mutators/mutator/nades/nades.qh index 94088c5d6..6542c9829 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.qh +++ b/qcsrc/common/mutators/mutator/nades/nades.qh @@ -115,7 +115,7 @@ REGISTRY(Nades, BITS(4)) REGISTER_REGISTRY(Nades) REGISTRY_CHECK(Nades) -#define REGISTER_NADE(id) REGISTER(Nades, NADE_TYPE, id, m_id, NEW(Nade)) +#define REGISTER_NADE(id, inst) REGISTER(Nades, NADE_TYPE, id, m_id, inst) CLASS(Nade, Object) ATTRIB(Nade, m_id, int, 0); @@ -130,7 +130,7 @@ CLASS(Nade, Object) } ENDCLASS(Nade) -REGISTER_NADE(Null); +REGISTER_NADE(Null, NEW(Nade)); REGISTRY_DEFINE_GET(Nades, NADE_TYPE_Null) Nade Nade_FromProjectile(int proj) -- 2.39.5