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.
#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)
#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)
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)
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)
}
#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)
}
#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)
}
#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)
}
#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)
}
#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)
}
#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)
}
#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)
}
#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)
#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)
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)
#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)
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)
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)
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
+}
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);
}
ENDCLASS(Nade)
-REGISTER_NADE(Null);
+REGISTER_NADE(Null, NEW(Nade));
REGISTRY_DEFINE_GET(Nades, NADE_TYPE_Null)
Nade Nade_FromProjectile(int proj)