int autocvar_ekg;
float autocvar_fov;
float autocvar_g_balance_damagepush_speedfactor;
-float autocvar_g_balance_tuba_attenuation;
-float autocvar_g_balance_tuba_fadetime;
-float autocvar_g_balance_tuba_volume;
-int autocvar_g_balance_tuba_pitchstep;
float autocvar_g_warmup_limit;
bool autocvar_hud_cursormode = true;
float autocvar_hud_colorflash_alpha;
#include "globalsound.qh"
-#include "../common/ent_cs.qh"
+#include "../../ent_cs.qh"
#ifdef IMPLEMENTATION
#include "../../animdecide.qh"
/* wepimg */ ATTRIB(HeavyMachineGun, model2, string, "weaponhmg");
/* refname */ ATTRIB(HeavyMachineGun, netname, string, "hmg");
/* wepname */ ATTRIB(HeavyMachineGun, m_name, string, _("Heavy Machine Gun"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, NONE) \
+ P(class, prefix, damage, float, NONE) \
+ P(class, prefix, force, float, NONE) \
+ P(class, prefix, refire, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, solidpenetration, float, NONE) \
+ P(class, prefix, spread_add, float, NONE) \
+ P(class, prefix, spread_max, float, NONE) \
+ P(class, prefix, spread_min, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, HeavyMachineGun, hmg)
+#undef X
+
ENDCLASS(HeavyMachineGun)
-REGISTER_WEAPON(HMG, NEW(HeavyMachineGun));
-
-#define HMG_SETTINGS(w_cvar,w_prop) HMG_SETTINGS_LIST(w_cvar, w_prop, HMG, hmg)
-#define HMG_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, spread_min) \
- w_cvar(id, sn, NONE, spread_max) \
- w_cvar(id, sn, NONE, spread_add) \
- w_cvar(id, sn, NONE, solidpenetration) \
- w_cvar(id, sn, NONE, damage) \
- w_cvar(id, sn, NONE, force) \
- w_cvar(id, sn, NONE, refire) \
- w_cvar(id, sn, NONE, ammo) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(HMG, hmg, NEW(HeavyMachineGun));
-#ifdef SVQC
-HMG_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
}
}
}
- METHOD(HeavyMachineGun, wr_init, void(entity thiswep))
- {
- HMG_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(HeavyMachineGun, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo);
return ammo_amount;
}
- METHOD(HeavyMachineGun, wr_config, void(entity thiswep))
- {
- HMG_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(HeavyMachineGun, wr_reload, void(entity thiswep))
{
W_Reload(self, WEP_CVAR(hmg, ammo), SND(RELOAD));
/* wepimg */ ATTRIB(RocketPropelledChainsaw, model2, string, "weaponrpc");
/* refname */ ATTRIB(RocketPropelledChainsaw, netname, string, "rpc");
/* wepname */ ATTRIB(RocketPropelledChainsaw, m_name, string, _("Rocket Propelled Chainsaw"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, NONE) \
+ P(class, prefix, animtime, float, NONE) \
+ P(class, prefix, damage2, float, NONE) \
+ P(class, prefix, damageforcescale, float, NONE) \
+ P(class, prefix, damage, float, NONE) \
+ P(class, prefix, edgedamage, float, NONE) \
+ P(class, prefix, force, float, NONE) \
+ P(class, prefix, health, float, NONE) \
+ P(class, prefix, lifetime, float, NONE) \
+ P(class, prefix, radius, float, NONE) \
+ P(class, prefix, refire, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, speedaccel, float, NONE) \
+ P(class, prefix, speed, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, RocketPropelledChainsaw, rpc)
+#undef X
+
ENDCLASS(RocketPropelledChainsaw)
-REGISTER_WEAPON(RPC, NEW(RocketPropelledChainsaw));
-
-#define RPC_SETTINGS(w_cvar,w_prop) RPC_SETTINGS_LIST(w_cvar, w_prop, RPC, rpc)
-#define RPC_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, ammo) \
- w_cvar(id, sn, NONE, animtime) \
- w_cvar(id, sn, NONE, damage) \
- w_cvar(id, sn, NONE, damage2) \
- w_cvar(id, sn, NONE, damageforcescale) \
- w_cvar(id, sn, NONE, edgedamage) \
- w_cvar(id, sn, NONE, force) \
- w_cvar(id, sn, NONE, health) \
- w_cvar(id, sn, NONE, lifetime) \
- w_cvar(id, sn, NONE, radius) \
- w_cvar(id, sn, NONE, refire) \
- w_cvar(id, sn, NONE, speed) \
- w_cvar(id, sn, NONE, speedaccel) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(RPC, rpc, NEW(RocketPropelledChainsaw));
-#ifdef SVQC
-RPC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
}
}
}
- METHOD(RocketPropelledChainsaw, wr_init, void(entity thiswep))
- {
- RPC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(RocketPropelledChainsaw, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount = self.WEP_AMMO(RPC) >= WEP_CVAR(rpc, ammo);
{
return false;
}
- METHOD(RocketPropelledChainsaw, wr_config, void(entity thiswep))
- {
- RPC_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(RocketPropelledChainsaw, wr_reload, void(entity thiswep))
{
W_Reload(self, WEP_CVAR(rpc, ammo), SND(RELOAD));
#define WEPSET(id) (WEP_##id.m_wepset)
#define WepSet_FromWeapon(it) ((it).m_wepset)
WepSet _WepSet_FromWeapon(int i);
-STATIC_INIT(WepSets)
-{
- FOREACH(Weapons, true, LAMBDA(it.m_wepset = _WepSet_FromWeapon(it.m_id)));
-}
+STATIC_INIT(WepSets) { FOREACH(Weapons, true, LAMBDA(it.m_wepset = _WepSet_FromWeapon(it.m_id))); }
GENERIC_COMMAND(dumpweapons, "Dump all weapons into weapons_dump.txt") // WEAPONTODO: make this work with other progs than just server
{
}
}
-#define REGISTER_WEAPON(id, inst) \
- /* WepSet WEPSET_##id; */ \
- REGISTER(Weapons, WEP, id, m_id, inst)
+#ifdef SVQC
+entity W_PROP_reloader;
+float autocvar_w_prop_interval = 0;
+.void(Weapon this) wr_net;
+void W_PROP_reload()
+{
+ SELFPARAM();
+ this.nextthink = time + autocvar_w_prop_interval;
+ FOREACH(Weapons, true, {
+ it.wr_update(it);
+ void(Weapon) f = it.wr_net;
+ if (f) f(it);
+ });
+}
+STATIC_INIT_LATE(W_PROP_reloader)
+{
+ entity e = W_PROP_reloader = new(W_PROP_reloader);
+ make_pure(e);
+ WITH(entity, self, e, (e.think = W_PROP_reload)());
+}
+#endif
-// create cvars for weapon settings
-#define WEP_ADD_CVAR_NONE(wepname,name) [[last]] float autocvar_g_balance_##wepname##_##name;
+#define REGISTER_WEAPON(...) EVAL(OVERLOAD(REGISTER_WEAPON, __VA_ARGS__))
+#define REGISTER_WEAPON_2(id, inst) REGISTER(Weapons, WEP, id, m_id, inst)
+/** TODO: deprecated - remove */
+#define REGISTER_WEAPON_3(id, sname, inst) \
+ REGISTER_WEAPON_2(id, inst); \
+ [[alias("WEP_" #id)]] Weapon _wep_##sname
-#define WEP_ADD_CVAR_PRI(wepname,name) WEP_ADD_CVAR_NONE(wepname, primary_##name)
-#define WEP_ADD_CVAR_SEC(wepname,name) WEP_ADD_CVAR_NONE(wepname, secondary_##name)
-#define WEP_ADD_CVAR_BOTH(wepname,name) \
- WEP_ADD_CVAR_PRI(wepname, name) \
- WEP_ADD_CVAR_SEC(wepname, name)
+REGISTER_WEAPON(Null, NEW(Weapon));
-#define WEP_ADD_CVAR(wepid,wepname,mode,name) WEP_ADD_CVAR_##mode(wepname, name)
-// create properties for weapon settings
-#define WEP_ADD_PROP(wepid,wepname,type,prop,name) \
- .type prop; \
- [[last]] type autocvar_g_balance_##wepname##_##name;
-// read cvars from weapon settings
-#define WEP_CVAR(wepname,name) autocvar_g_balance_##wepname##_##name
-#define WEP_CVAR_PRI(wepname,name) WEP_CVAR(wepname, primary_##name)
-#define WEP_CVAR_SEC(wepname,name) WEP_CVAR(wepname, secondary_##name)
-#define WEP_CVAR_BOTH(wepname,isprimary,name) ((isprimary) ? WEP_CVAR_PRI(wepname, name) : WEP_CVAR_SEC(wepname, name))
+// legacy w_prop mappings
+#define X(fld, T) .T fld; .T wepvar_##fld = fld;
+X(switchdelay_drop, float)
+X(switchdelay_raise, float)
+X(weaponreplace, string)
+X(weaponstartoverride, float)
+X(weaponstart, float)
+X(weaponthrowable, float)
+X(reload_ammo, float)
+.float reloading_ammo = reload_ammo;
+X(reload_time, float)
+.float reloading_time = reload_time;
+#undef X
+
+
+
+#define W_PROPS(L, class, prefix) \
+ L(W_PROP_BEGIN, W_PROP, W_PROP_END, class, prefix) \
+ L(W_CONFIG_BEGIN, W_CONFIG, W_CONFIG_END, class, prefix) \
+ L(W_UPDATE_BEGIN, W_UPDATE, W_UPDATE_END, class, prefix) \
+ L(W_NET_BEGIN, W_NET, W_NET_END, class, prefix) \
+ /**/ \
+
+
+ #define W_PROP(class, wepname, fld, T, m) W_PROP_##m(class, fld, T, wepname)
+ #define W_PROP_NONE(class, fld, T, wepname) _W_PROP(class, fld, T, wepname)
+ #define W_PROP_PRI(class, fld, T, wepname) _W_PROP(class, primary_##fld, T, wepname)
+ #define W_PROP_SEC(class, fld, T, wepname) _W_PROP(class, secondary_##fld, T, wepname)
+ #define W_PROP_BOTH(class, fld, T, wepname) \
+ W_PROP_PRI(class, fld, T, wepname) \
+ W_PROP_SEC(class, fld, T, wepname)
+ #define W_PROP_BEGIN(class)
+ #define _W_PROP(class, fld, T, wepname) \
+ /* static */ T _W_PROP_CVAR(wepname, fld); \
+ ATTRIB(class, wepvar_##fld, T, _W_PROP_CVAR(wepname, fld));
+ #define _W_PROP_CVAR(wepname, fld) autocvar_g_balance_##wepname##_##fld
+ #define W_PROP_END()
+
+
+
+ #define W_CONFIG(class, wepname, fld, T, m) W_CONFIG_##m(class, fld, T, wepname)
+ #define W_CONFIG_NONE(class, fld, T, wepname) _W_CONFIG(class, fld, T, wepname)
+ #define W_CONFIG_PRI(class, fld, T, wepname) _W_CONFIG(class, primary_##fld, T, wepname)
+ #define W_CONFIG_SEC(class, fld, T, wepname) _W_CONFIG(class, secondary_##fld, T, wepname)
+ #define W_CONFIG_BOTH(class, fld, T, wepname) \
+ W_CONFIG_PRI(class, fld, T, wepname) \
+ W_CONFIG_SEC(class, fld, T, wepname)
+ #define W_CONFIG_BEGIN(class) METHOD(class, wr_config, void(class this)) {
+ #ifdef SVQC
+ #define _W_CONFIG(class, fld, T, wepname) if (#wepname == this.netname) WEP_CONFIG_WRITE_CVARS(wepname, fld, T);
+ #else
+ #define _W_CONFIG(class, fld, T, wepname)
+ #endif
+ #define W_CONFIG_END() }
+
+
+ #define W_UPDATE(class, wepname, fld, T, m) W_UPDATE_##m(class, fld, T, wepname)
+ #define W_UPDATE_NONE(class, fld, T, wepname) _W_UPDATE(class, fld, T, wepname)
+ #define W_UPDATE_PRI(class, fld, T, wepname) _W_UPDATE(class, primary_##fld, T, wepname)
+ #define W_UPDATE_SEC(class, fld, T, wepname) _W_UPDATE(class, secondary_##fld, T, wepname)
+ #define W_UPDATE_BOTH(class, fld, T, wepname) \
+ W_UPDATE_PRI(class, fld, T, wepname) \
+ W_UPDATE_SEC(class, fld, T, wepname)
+ .entity baseline, baseline_target;
+ #define W_UPDATE_BEGIN(class) \
+ METHOD(class, wr_update, void(class this)) \
+ { \
+ noref entity b = this.baseline; \
+ if (!b) \
+ { \
+ b = this.baseline = new(baseline); \
+ make_pure(b); \
+ b.baseline_target = this; \
+ }
+ #ifdef SVQC
+ #define _W_UPDATE(class, fld, T, wepname) \
+ { \
+ T it = _W_PROP_CVAR(wepname, fld); \
+ b.wepvar_##fld = this.wepvar_##fld; \
+ this.wepvar_##fld = it; \
+ }
+ #else
+ #define _W_UPDATE(class, fld, T, wepname)
+ #endif
+ #define W_UPDATE_END() }
+
+
+ #define W_NET(class, wepname, fld, T, m) W_NET_##m(class, fld, T, wepname)
+ #define W_NET_NONE(class, fld, T, wepname) _W_NET(class, fld, T, wepname)
+ #define W_NET_PRI(class, fld, T, wepname) _W_NET(class, primary_##fld, T, wepname)
+ #define W_NET_SEC(class, fld, T, wepname) _W_NET(class, secondary_##fld, T, wepname)
+ #define W_NET_BOTH(class, fld, T, wepname) \
+ W_NET_PRI(class, fld, T, wepname) \
+ W_NET_SEC(class, fld, T, wepname)
+ REGISTER_NET_TEMP(WeaponUpdate)
+ #if defined(CSQC)
+ #define W_NET_BEGIN(class) METHOD(class, wr_net, void(class this, int i)) { int n = 0;
+ #define _W_NET(class, fld, T, wepname) \
+ { \
+ if (++n == i) this.wepvar_##fld = Read_##T(); \
+ }
+ .void(Weapon this, int i) wr_net;
+ NET_HANDLE(WeaponUpdate, bool isnew)
+ {
+ Weapon w = Weapons_from(ReadByte());
+ for (int i; (i = ReadByte()); )
+ {
+ w.wr_net(w, i);
+ }
+ return true;
+ }
+ #define W_NET_END() }
+ #elif defined(SVQC)
+ #define W_NET_BEGIN(class) \
+ METHOD(class, wr_net, void(class this)) \
+ { \
+ int chan = MSG_INIT; \
+ for (;;) \
+ { \
+ bool commit = false; \
+ int i = 0;
+ #define _W_NET(class, fld, T, wepname) \
+ { \
+ ++i; \
+ T it = this.wepvar_##fld; \
+ if (it != this.baseline.wepvar_##fld) \
+ { \
+ if (!commit) { commit = true; WriteHeader(chan, WeaponUpdate); WriteByte(chan, this.m_id); } \
+ WriteByte(chan, i); Write_##T(chan, it); \
+ } \
+ }
+ #define W_NET_END() \
+ if (commit) WriteByte(chan, 0); \
+ if (chan == MSG_INIT) chan = MSG_ALL; \
+ else break; \
+ } \
+ }
+ #else
+ #define W_NET_BEGIN(class)
+ #define _W_NET(class, fld, T, wepname)
+ #define W_NET_END()
+ #endif
-// set initialization values for weapon settings
-#define WEP_SKIP_CVAR(unuseda,unusedb,unusedc,unusedd) /* skip cvars */
-#define WEP_SET_PROP(wepid,wepname,type,prop,name) WEP_##wepid.prop = autocvar_g_balance_##wepname##_##name;
+
+
+// read cvars from weapon settings
+#define WEP_CVAR(wepname, name) (_wep_##wepname.wepvar_##name)
+#define WEP_CVAR_PRI(wepname, name) WEP_CVAR(wepname, primary_##name)
+#define WEP_CVAR_SEC(wepname, name) WEP_CVAR(wepname, secondary_##name)
+#define WEP_CVAR_BOTH(wepname, isprimary, name) ((isprimary) ? WEP_CVAR_PRI(wepname, name) : WEP_CVAR_SEC(wepname, name))
const int WEP_FIRST = 1;
#define WEP_LAST (Weapons_COUNT - 1)
WepSet WEPSET_ALL;
WepSet WEPSET_SUPERWEAPONS;
-REGISTER_WEAPON(Null, NEW(Weapon));
-
#include "all.inc"
// TODO: remove after 0.8.2. Retains impulse number compatibility because 0.8.1 clients don't reload the weapons.cfg
if(wep_config_alsoprint) { LOG_INFO(a); } \
} while(0)
-#define WEP_CONFIG_WRITE_CVARS_NONE(wepname,name) \
- { WEP_CONFIG_QUEUE( \
- sprintf("set g_balance_%s_%s %g\n", #wepname, #name, \
- cvar(sprintf("g_balance_%s_%s", #wepname, #name)))) }
-
-#define WEP_CONFIG_WRITE_CVARS_PRI(wepname,name) WEP_CONFIG_WRITE_CVARS_NONE(wepname, primary_##name)
-#define WEP_CONFIG_WRITE_CVARS_SEC(wepname,name) WEP_CONFIG_WRITE_CVARS_NONE(wepname, secondary_##name)
-#define WEP_CONFIG_WRITE_CVARS_BOTH(wepname,name) \
- WEP_CONFIG_WRITE_CVARS_PRI(wepname, name) \
- WEP_CONFIG_WRITE_CVARS_SEC(wepname, name)
-#define WEP_CONFIG_WRITE_CVARS(wepid,wepname,mode,name) WEP_CONFIG_WRITE_CVARS_##mode(wepname, name)
+#define WEP_CONFIG_WRITE_CVARS(wepname, name, T) WEP_CONFIG_WRITE_PROPS_##T(wepname, name)
-#define WEP_CONFIG_WRITE_PROPS_string(wepname,name) \
+#define WEP_CONFIG_WRITE_PROPS_string(wepname, name) \
{ WEP_CONFIG_QUEUE( \
sprintf("set g_balance_%s_%s \"%s\"\n", #wepname, #name, \
cvar_string(sprintf("g_balance_%s_%s", #wepname, #name)))) }
-#define WEP_CONFIG_WRITE_PROPS_float(wepname,name) \
+#define WEP_CONFIG_WRITE_PROPS_float(wepname, name) \
{ WEP_CONFIG_QUEUE( \
sprintf("set g_balance_%s_%s %g\n", #wepname, #name, \
cvar(sprintf("g_balance_%s_%s", #wepname, #name)))) }
-#define WEP_CONFIG_WRITE_PROPS(wepid,wepname,type,prop,name) WEP_CONFIG_WRITE_PROPS_##type(wepname,name)
#endif
#endif
METHOD(Weapon, wr_drop, void(Weapon this)) {}
/** (SERVER) a weapon is picked up */
METHOD(Weapon, wr_pickup, void(Weapon this)) {}
-
+ /** (SERVER) update cvar based properties */
+ METHOD(Weapon, wr_update, void(Weapon this)) {}
METHOD(Weapon, display, void(entity this, void(string name, string icon) returns)) {
returns(this.m_name, this.model2 ? sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.model2) : string_null);
}
/* wepimg */ ATTRIB(Arc, model2, string, "weaponarc");
/* refname */ ATTRIB(Arc, netname, string, "arc");
/* wepname */ ATTRIB(Arc, m_name, string, _("Arc"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, beam_ammo, float, NONE) \
+ P(class, prefix, beam_animtime, float, NONE) \
+ P(class, prefix, beam_botaimlifetime, float, NONE) \
+ P(class, prefix, beam_botaimspeed, float, NONE) \
+ P(class, prefix, beam_damage, float, NONE) \
+ P(class, prefix, beam_degreespersegment, float, NONE) \
+ P(class, prefix, beam_distancepersegment, float, NONE) \
+ P(class, prefix, beam_falloff_halflifedist, float, NONE) \
+ P(class, prefix, beam_falloff_maxdist, float, NONE) \
+ P(class, prefix, beam_falloff_mindist, float, NONE) \
+ P(class, prefix, beam_force, float, NONE) \
+ P(class, prefix, beam_healing_amax, float, NONE) \
+ P(class, prefix, beam_healing_aps, float, NONE) \
+ P(class, prefix, beam_healing_hmax, float, NONE) \
+ P(class, prefix, beam_healing_hps, float, NONE) \
+ P(class, prefix, beam_heat, float, NONE) /* heat increase per second (primary) */ \
+ P(class, prefix, beam_maxangle, float, NONE) \
+ P(class, prefix, beam_nonplayerdamage, float, NONE) \
+ P(class, prefix, beam_range, float, NONE) \
+ P(class, prefix, beam_refire, float, NONE) \
+ P(class, prefix, beam_returnspeed, float, NONE) \
+ P(class, prefix, beam_tightness, float, NONE) \
+ P(class, prefix, burst_ammo, float, NONE) \
+ P(class, prefix, burst_damage, float, NONE) \
+ P(class, prefix, burst_healing_aps, float, NONE) \
+ P(class, prefix, burst_healing_hps, float, NONE) \
+ P(class, prefix, burst_heat, float, NONE) /* heat increase per second (secondary) */ \
+ P(class, prefix, cooldown, float, NONE) /* heat decrease per second when resting */ \
+ P(class, prefix, overheat_max, float, NONE) /* maximum heat before jamming */ \
+ P(class, prefix, overheat_min, float, NONE) /* minimum heat to wait for cooldown */ \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Arc, arc)
+#undef X
+
ENDCLASS(Arc)
-REGISTER_WEAPON(ARC, NEW(Arc));
-
-#define ARC_SETTINGS(w_cvar,w_prop) ARC_SETTINGS_LIST(w_cvar, w_prop, ARC, arc)
-#define ARC_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, beam_ammo) \
- w_cvar(id, sn, NONE, beam_animtime) \
- w_cvar(id, sn, NONE, beam_botaimspeed) \
- w_cvar(id, sn, NONE, beam_botaimlifetime) \
- w_cvar(id, sn, NONE, beam_damage) \
- w_cvar(id, sn, NONE, beam_degreespersegment) \
- w_cvar(id, sn, NONE, beam_distancepersegment) \
- w_cvar(id, sn, NONE, beam_falloff_halflifedist) \
- w_cvar(id, sn, NONE, beam_falloff_maxdist) \
- w_cvar(id, sn, NONE, beam_falloff_mindist) \
- w_cvar(id, sn, NONE, beam_force) \
- w_cvar(id, sn, NONE, beam_healing_amax) \
- w_cvar(id, sn, NONE, beam_healing_aps) \
- w_cvar(id, sn, NONE, beam_healing_hmax) \
- w_cvar(id, sn, NONE, beam_healing_hps) \
- w_cvar(id, sn, NONE, beam_maxangle) \
- w_cvar(id, sn, NONE, beam_nonplayerdamage) \
- w_cvar(id, sn, NONE, beam_range) \
- w_cvar(id, sn, NONE, beam_refire) \
- w_cvar(id, sn, NONE, beam_returnspeed) \
- w_cvar(id, sn, NONE, beam_tightness) \
- w_cvar(id, sn, NONE, burst_ammo) \
- w_cvar(id, sn, NONE, burst_damage) \
- w_cvar(id, sn, NONE, burst_healing_aps) \
- w_cvar(id, sn, NONE, burst_healing_hps) \
- w_cvar(id, sn, NONE, overheat_max)/* maximum heat before jamming */ \
- w_cvar(id, sn, NONE, overheat_min)/* minimum heat to wait for cooldown */ \
- w_cvar(id, sn, NONE, beam_heat) /* heat increase per second (primary) */ \
- w_cvar(id, sn, NONE, burst_heat) /* heat increase per second (secondary) */ \
- w_cvar(id, sn, NONE, cooldown) /* heat decrease per second when resting */ \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(ARC, arc, NEW(Arc));
+
#ifndef MENUQC
const float ARC_MAX_SEGMENTS = 20;
const int ARC_SF_LOCALMASK = ARC_SF_START | ARC_SF_WANTDIR | ARC_SF_BEAMDIR;
#endif
#ifdef SVQC
-ARC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.entity arc_beam;
.bool arc_BUTTON_ATCK_prev; // for better animation control
.float beam_prev;
arc_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 3);
arc_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 4);
}
- ARC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
}
METHOD(Arc, wr_checkammo1, bool(entity thiswep))
{
return WEP_CVAR(arc, overheat_max) > 0 &&
((!WEP_CVAR(arc, burst_ammo)) || (self.WEP_AMMO(ARC) > 0));
}
- METHOD(Arc, wr_config, void(entity thiswep))
- {
- ARC_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Arc, wr_killmessage, int(entity thiswep))
{
return WEAPON_ARC_MURDER;
/* wepimg */ ATTRIB(Blaster, model2, string, "weaponlaser");
/* refname */ ATTRIB(Blaster, netname, string, "blaster");
/* wepname */ ATTRIB(Blaster, m_name, string, _("Blaster"));
-ENDCLASS(Blaster)
-REGISTER_WEAPON(BLASTER, NEW(Blaster));
-#define BLASTER_SETTINGS(w_cvar,w_prop) BLASTER_SETTINGS_LIST(w_cvar, w_prop, BLASTER, blaster)
-#define BLASTER_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, delay) \
- w_cvar(id, sn, BOTH, edgedamage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, force_zscale) \
- w_cvar(id, sn, BOTH, lifetime) \
- w_cvar(id, sn, BOTH, radius) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, shotangle) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, NONE, secondary) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, delay, float, BOTH) \
+ P(class, prefix, edgedamage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, force_zscale, float, BOTH) \
+ P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, radius, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, shotangle, float, BOTH) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Blaster, blaster)
+#undef X
+
+ENDCLASS(Blaster)
+REGISTER_WEAPON(BLASTER, blaster, NEW(Blaster));
#ifdef SVQC
-BLASTER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float blaster_damage;
.float blaster_edgedamage;
.float blaster_radius;
}
}
- METHOD(Blaster, wr_init, void(entity thiswep))
- {
- BLASTER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
-
METHOD(Blaster, wr_setup, void(entity thiswep))
{
self.ammo_field = ammo_none;
return true; // blaster has infinite ammo
}
- METHOD(Blaster, wr_config, void(entity thiswep))
- {
- BLASTER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
-
METHOD(Blaster, wr_suicidemessage, int(entity thiswep))
{
return WEAPON_BLASTER_SUICIDE;
/* wepimg */ ATTRIB(Crylink, model2, string, "weaponcrylink");
/* refname */ ATTRIB(Crylink, netname, string, "crylink");
/* wepname */ ATTRIB(Crylink, m_name, string, _("Crylink"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, bouncedamagefactor, float, BOTH) \
+ P(class, prefix, bounces, float, BOTH) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, edgedamage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, joindelay, float, BOTH) \
+ P(class, prefix, joinexplode, float, BOTH) \
+ P(class, prefix, joinexplode_damage, float, BOTH) \
+ P(class, prefix, joinexplode_edgedamage, float, BOTH) \
+ P(class, prefix, joinexplode_force, float, BOTH) \
+ P(class, prefix, joinexplode_radius, float, BOTH) \
+ P(class, prefix, joinspread, float, BOTH) \
+ P(class, prefix, linkexplode, float, BOTH) \
+ P(class, prefix, middle_fadetime, float, BOTH) \
+ P(class, prefix, middle_lifetime, float, BOTH) \
+ P(class, prefix, other_fadetime, float, BOTH) \
+ P(class, prefix, other_lifetime, float, BOTH) \
+ P(class, prefix, radius, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, shots, float, BOTH) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, spreadtype, float, SEC) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Crylink, crylink)
+#undef X
+
ENDCLASS(Crylink)
-REGISTER_WEAPON(CRYLINK, NEW(Crylink));
-
-#define CRYLINK_SETTINGS(w_cvar,w_prop) CRYLINK_SETTINGS_LIST(w_cvar, w_prop, CRYLINK, crylink)
-#define CRYLINK_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, edgedamage) \
- w_cvar(id, sn, BOTH, radius) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, shots) \
- w_cvar(id, sn, BOTH, bounces) \
- w_cvar(id, sn, BOTH, bouncedamagefactor) \
- w_cvar(id, sn, BOTH, middle_lifetime) \
- w_cvar(id, sn, BOTH, middle_fadetime) \
- w_cvar(id, sn, BOTH, other_lifetime) \
- w_cvar(id, sn, BOTH, other_fadetime) \
- w_cvar(id, sn, BOTH, linkexplode) \
- w_cvar(id, sn, BOTH, joindelay) \
- w_cvar(id, sn, BOTH, joinspread) \
- w_cvar(id, sn, BOTH, joinexplode) \
- w_cvar(id, sn, BOTH, joinexplode_damage) \
- w_cvar(id, sn, BOTH, joinexplode_edgedamage) \
- w_cvar(id, sn, BOTH, joinexplode_radius) \
- w_cvar(id, sn, BOTH, joinexplode_force) \
- w_cvar(id, sn, SEC, spreadtype) \
- w_cvar(id, sn, NONE, secondary) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(CRYLINK, crylink, NEW(Crylink));
#ifdef SVQC
-CRYLINK_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float gravity;
.float crylink_waitrelease;
.entity crylink_lastgroup;
}
}
}
- METHOD(Crylink, wr_init, void(entity thiswep))
- {
- CRYLINK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Crylink, wr_checkammo1, bool(entity thiswep))
{
SELFPARAM();
ammo_amount += self.(weapon_load[WEP_CRYLINK.m_id]) >= WEP_CVAR_SEC(crylink, ammo);
return ammo_amount;
}
- METHOD(Crylink, wr_config, void(entity thiswep))
- {
- CRYLINK_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Crylink, wr_reload, void(entity thiswep))
{
W_Reload(self, min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), SND(RELOAD));
/* wepimg */ ATTRIB(Devastator, model2, string, "weaponrocketlauncher");
/* refname */ ATTRIB(Devastator, netname, string, "devastator");
/* wepname */ ATTRIB(Devastator, m_name, string, _("Devastator"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, NONE) \
+ P(class, prefix, animtime, float, NONE) \
+ P(class, prefix, damageforcescale, float, NONE) \
+ P(class, prefix, damage, float, NONE) \
+ P(class, prefix, detonatedelay, float, NONE) \
+ P(class, prefix, edgedamage, float, NONE) \
+ P(class, prefix, force, float, NONE) \
+ P(class, prefix, guidedelay, float, NONE) \
+ P(class, prefix, guidegoal, float, NONE) \
+ P(class, prefix, guideratedelay, float, NONE) \
+ P(class, prefix, guiderate, float, NONE) \
+ P(class, prefix, guidestop, float, NONE) \
+ P(class, prefix, health, float, NONE) \
+ P(class, prefix, lifetime, float, NONE) \
+ P(class, prefix, radius, float, NONE) \
+ P(class, prefix, refire, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, remote_damage, float, NONE) \
+ P(class, prefix, remote_edgedamage, float, NONE) \
+ P(class, prefix, remote_force, float, NONE) \
+ P(class, prefix, remote_jump_damage, float, NONE) \
+ P(class, prefix, remote_jump_radius, float, NONE) \
+ P(class, prefix, remote_jump_velocity_z_add, float, NONE) \
+ P(class, prefix, remote_jump_velocity_z_max, float, NONE) \
+ P(class, prefix, remote_jump_velocity_z_min, float, NONE) \
+ P(class, prefix, remote_radius, float, NONE) \
+ P(class, prefix, speedaccel, float, NONE) \
+ P(class, prefix, speedstart, float, NONE) \
+ P(class, prefix, speed, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Devastator, devastator)
+#undef X
+
ENDCLASS(Devastator)
-REGISTER_WEAPON(DEVASTATOR, NEW(Devastator));
-
-#define DEVASTATOR_SETTINGS(w_cvar,w_prop) DEVASTATOR_SETTINGS_LIST(w_cvar, w_prop, DEVASTATOR, devastator)
-#define DEVASTATOR_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, ammo) \
- w_cvar(id, sn, NONE, animtime) \
- w_cvar(id, sn, NONE, damage) \
- w_cvar(id, sn, NONE, damageforcescale) \
- w_cvar(id, sn, NONE, detonatedelay) \
- w_cvar(id, sn, NONE, edgedamage) \
- w_cvar(id, sn, NONE, force) \
- w_cvar(id, sn, NONE, guidedelay) \
- w_cvar(id, sn, NONE, guidegoal) \
- w_cvar(id, sn, NONE, guiderate) \
- w_cvar(id, sn, NONE, guideratedelay) \
- w_cvar(id, sn, NONE, guidestop) \
- w_cvar(id, sn, NONE, health) \
- w_cvar(id, sn, NONE, lifetime) \
- w_cvar(id, sn, NONE, radius) \
- w_cvar(id, sn, NONE, refire) \
- w_cvar(id, sn, NONE, remote_damage) \
- w_cvar(id, sn, NONE, remote_edgedamage) \
- w_cvar(id, sn, NONE, remote_force) \
- w_cvar(id, sn, NONE, remote_jump_damage) \
- w_cvar(id, sn, NONE, remote_jump_radius) \
- w_cvar(id, sn, NONE, remote_jump_velocity_z_add) \
- w_cvar(id, sn, NONE, remote_jump_velocity_z_max) \
- w_cvar(id, sn, NONE, remote_jump_velocity_z_min) \
- w_cvar(id, sn, NONE, remote_radius) \
- w_cvar(id, sn, NONE, speed) \
- w_cvar(id, sn, NONE, speedaccel) \
- w_cvar(id, sn, NONE, speedstart) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(DEVASTATOR, devastator, NEW(Devastator));
#ifdef SVQC
-DEVASTATOR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float rl_release;
.float rl_detonate_later;
#endif
}
}
}
- METHOD(Devastator, wr_init, void(entity thiswep))
- {
- DEVASTATOR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Devastator, wr_setup, void(entity thiswep))
{
self.rl_release = 1;
{
return false;
}
- METHOD(Devastator, wr_config, void(entity thiswep))
- {
- DEVASTATOR_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Devastator, wr_resetplayer, void(entity thiswep))
{
self.lastrocket = NULL; // stop rocket guiding, no revenge from the grave!
/* wepimg */ ATTRIB(Electro, model2, string, "weaponelectro");
/* refname */ ATTRIB(Electro, netname, string, "electro");
/* wepname */ ATTRIB(Electro, m_name, string, _("Electro"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, bouncefactor, float, SEC) \
+ P(class, prefix, bouncestop, float, SEC) \
+ P(class, prefix, comboradius, float, PRI) \
+ P(class, prefix, combo_comboradius, float, NONE) \
+ P(class, prefix, combo_comboradius_thruwall, float, NONE) \
+ P(class, prefix, combo_damage, float, NONE) \
+ P(class, prefix, combo_edgedamage, float, NONE) \
+ P(class, prefix, combo_force, float, NONE) \
+ P(class, prefix, combo_radius, float, NONE) \
+ P(class, prefix, combo_safeammocheck, float, NONE) \
+ P(class, prefix, combo_speed, float, NONE) \
+ P(class, prefix, count, float, SEC) \
+ P(class, prefix, damagedbycontents, float, SEC) \
+ P(class, prefix, damageforcescale, float, SEC) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, edgedamage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, health, float, SEC) \
+ P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, midaircombo_explode, float, PRI) \
+ P(class, prefix, midaircombo_interval, float, PRI) \
+ P(class, prefix, midaircombo_radius, float, PRI) \
+ P(class, prefix, radius, float, BOTH) \
+ P(class, prefix, refire2, float, SEC) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, speed_up, float, SEC) \
+ P(class, prefix, speed_z, float, SEC) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, touchexplode, float, SEC) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Electro, electro)
+#undef X
+
ENDCLASS(Electro)
-REGISTER_WEAPON(ELECTRO, NEW(Electro));
-
-#define ELECTRO_SETTINGS(w_cvar,w_prop) ELECTRO_SETTINGS_LIST(w_cvar, w_prop, ELECTRO, electro)
-#define ELECTRO_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, edgedamage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, radius) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, BOTH, lifetime) \
- w_cvar(id, sn, PRI, comboradius) \
- w_cvar(id, sn, PRI, midaircombo_explode) \
- w_cvar(id, sn, PRI, midaircombo_interval) \
- w_cvar(id, sn, PRI, midaircombo_radius) \
- w_cvar(id, sn, SEC, bouncefactor) \
- w_cvar(id, sn, SEC, bouncestop) \
- w_cvar(id, sn, SEC, count) \
- w_cvar(id, sn, SEC, damageforcescale) \
- w_cvar(id, sn, SEC, damagedbycontents) \
- w_cvar(id, sn, SEC, health) \
- w_cvar(id, sn, SEC, refire2) \
- w_cvar(id, sn, SEC, speed_up) \
- w_cvar(id, sn, SEC, speed_z) \
- w_cvar(id, sn, SEC, touchexplode) \
- w_cvar(id, sn, NONE, combo_comboradius) \
- w_cvar(id, sn, NONE, combo_comboradius_thruwall) \
- w_cvar(id, sn, NONE, combo_damage) \
- w_cvar(id, sn, NONE, combo_edgedamage) \
- w_cvar(id, sn, NONE, combo_force) \
- w_cvar(id, sn, NONE, combo_radius) \
- w_cvar(id, sn, NONE, combo_speed) \
- w_cvar(id, sn, NONE, combo_safeammocheck) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(ELECTRO, electro, NEW(Electro));
+
#ifdef SVQC
-ELECTRO_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float electro_count;
.float electro_secondarytime;
void W_Electro_ExplodeCombo();
}
}
}
- METHOD(Electro, wr_init, void(entity thiswep))
- {
- ELECTRO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Electro, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount = self.WEP_AMMO(ELECTRO) >= WEP_CVAR_PRI(electro, ammo);
}
return ammo_amount;
}
- METHOD(Electro, wr_config, void(entity thiswep))
- {
- ELECTRO_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Electro, wr_resetplayer, void(entity thiswep))
{
self.electro_secondarytime = time;
/* wepimg */ ATTRIB(Fireball, model2, string, "weaponfireball");
/* refname */ ATTRIB(Fireball, netname, string, "fireball");
/* wepname */ ATTRIB(Fireball, m_name, string, _("Fireball"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, bfgdamage, float, PRI) \
+ P(class, prefix, bfgforce, float, PRI) \
+ P(class, prefix, bfgradius, float, PRI) \
+ P(class, prefix, damageforcescale, float, BOTH) \
+ P(class, prefix, damagetime, float, SEC) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, edgedamage, float, PRI) \
+ P(class, prefix, force, float, PRI) \
+ P(class, prefix, health, float, PRI) \
+ P(class, prefix, laserburntime, float, BOTH) \
+ P(class, prefix, laserdamage, float, BOTH) \
+ P(class, prefix, laseredgedamage, float, BOTH) \
+ P(class, prefix, laserradius, float, BOTH) \
+ P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, radius, float, PRI) \
+ P(class, prefix, refire2, float, PRI) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, speed_up, float, SEC) \
+ P(class, prefix, speed_z, float, SEC) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Fireball, fireball)
+#undef X
+
ENDCLASS(Fireball)
-REGISTER_WEAPON(FIREBALL, NEW(Fireball));
-
-#define FIREBALL_SETTINGS(w_cvar,w_prop) FIREBALL_SETTINGS_LIST(w_cvar, w_prop, FIREBALL, fireball)
-#define FIREBALL_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, damageforcescale) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, BOTH, lifetime) \
- w_cvar(id, sn, BOTH, laserburntime) \
- w_cvar(id, sn, BOTH, laserdamage) \
- w_cvar(id, sn, BOTH, laseredgedamage) \
- w_cvar(id, sn, BOTH, laserradius) \
- w_cvar(id, sn, PRI, edgedamage) \
- w_cvar(id, sn, PRI, force) \
- w_cvar(id, sn, PRI, radius) \
- w_cvar(id, sn, PRI, health) \
- w_cvar(id, sn, PRI, refire2) \
- w_cvar(id, sn, PRI, bfgdamage) \
- w_cvar(id, sn, PRI, bfgforce) \
- w_cvar(id, sn, PRI, bfgradius) \
- w_cvar(id, sn, SEC, damagetime) \
- w_cvar(id, sn, SEC, speed_up) \
- w_cvar(id, sn, SEC, speed_z) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(FIREBALL, fireball, NEW(Fireball));
#ifdef SVQC
-FIREBALL_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float bot_primary_fireballmooth; // whatever a mooth is
.vector fireball_impactvec;
.float fireball_primarytime;
}
}
}
- METHOD(Fireball, wr_init, void(entity thiswep))
- {
- FIREBALL_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Fireball, wr_setup, void(entity thiswep))
{
self.ammo_field = ammo_none;
{
return true; // fireball has infinite ammo
}
- METHOD(Fireball, wr_config, void(entity thiswep))
- {
- FIREBALL_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Fireball, wr_resetplayer, void(entity thiswep))
{
self.fireball_primarytime = time;
/* wepimg */ ATTRIB(Hagar, model2, string, "weaponhagar");
/* refname */ ATTRIB(Hagar, netname, string, "hagar");
/* wepname */ ATTRIB(Hagar, m_name, string, _("Hagar"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, damageforcescale, float, BOTH) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, edgedamage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, health, float, BOTH) \
+ P(class, prefix, lifetime, float, PRI) \
+ P(class, prefix, lifetime_min, float, SEC) \
+ P(class, prefix, lifetime_rand, float, SEC) \
+ P(class, prefix, load, float, SEC) \
+ P(class, prefix, load_abort, float, SEC) \
+ P(class, prefix, load_animtime, float, SEC) \
+ P(class, prefix, load_hold, float, SEC) \
+ P(class, prefix, load_linkexplode, float, SEC) \
+ P(class, prefix, load_max, float, SEC) \
+ P(class, prefix, load_releasedeath, float, SEC) \
+ P(class, prefix, load_speed, float, SEC) \
+ P(class, prefix, load_spread, float, SEC) \
+ P(class, prefix, load_spread_bias, float, SEC) \
+ P(class, prefix, radius, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Hagar, hagar)
+#undef X
+
ENDCLASS(Hagar)
-REGISTER_WEAPON(HAGAR, NEW(Hagar));
-
-#define HAGAR_SETTINGS(w_cvar,w_prop) HAGAR_SETTINGS_LIST(w_cvar, w_prop, HAGAR, hagar)
-#define HAGAR_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, edgedamage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, radius) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, BOTH, damageforcescale) \
- w_cvar(id, sn, BOTH, health) \
- w_cvar(id, sn, PRI, lifetime) \
- w_cvar(id, sn, SEC, load) \
- w_cvar(id, sn, SEC, load_max) \
- w_cvar(id, sn, SEC, load_abort) \
- w_cvar(id, sn, SEC, load_animtime) \
- w_cvar(id, sn, SEC, load_hold) \
- w_cvar(id, sn, SEC, load_speed) \
- w_cvar(id, sn, SEC, load_releasedeath) \
- w_cvar(id, sn, SEC, load_spread) \
- w_cvar(id, sn, SEC, load_spread_bias) \
- w_cvar(id, sn, SEC, load_linkexplode) \
- w_cvar(id, sn, SEC, lifetime_min) \
- w_cvar(id, sn, SEC, lifetime_rand) \
- w_cvar(id, sn, NONE, secondary) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(HAGAR, hagar, NEW(Hagar));
-#ifdef SVQC
-HAGAR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
W_Hagar_Attack2_Load_Release(weaponentity);
}
}
- METHOD(Hagar, wr_init, void(entity thiswep))
- {
- HAGAR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Hagar, wr_setup, void(entity thiswep))
{
self.hagar_loadblock = false;
ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_SEC(hagar, ammo);
return ammo_amount;
}
- METHOD(Hagar, wr_config, void(entity thiswep))
- {
- HAGAR_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Hagar, wr_resetplayer, void(entity thiswep))
{
self.hagar_load = 0;
/* wepimg */ ATTRIB(HLAC, model2, string, "weaponhlac");
/* refname */ ATTRIB(HLAC, netname, string, "hlac");
/* wepname */ ATTRIB(HLAC, m_name, string, _("Heavy Laser Assault Cannon"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, edgedamage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, radius, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, shots, float, SEC) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, spread, float, SEC) \
+ P(class, prefix, spread_add, float, PRI) \
+ P(class, prefix, spread_crouchmod, float, BOTH) \
+ P(class, prefix, spread_max, float, PRI) \
+ P(class, prefix, spread_min, float, PRI) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, HLAC, hlac)
+#undef X
+
ENDCLASS(HLAC)
-REGISTER_WEAPON(HLAC, NEW(HLAC));
-
-#define HLAC_SETTINGS(w_cvar,w_prop) HLAC_SETTINGS_LIST(w_cvar, w_prop, HLAC, hlac)
-#define HLAC_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, edgedamage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, lifetime) \
- w_cvar(id, sn, BOTH, radius) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, spread_crouchmod) \
- w_cvar(id, sn, PRI, spread_add) \
- w_cvar(id, sn, PRI, spread_max) \
- w_cvar(id, sn, PRI, spread_min) \
- w_cvar(id, sn, NONE, secondary) \
- w_cvar(id, sn, SEC, shots) \
- w_cvar(id, sn, SEC, spread) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(HLAC, hlac, NEW(HLAC));
+
-#ifdef SVQC
-HLAC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
}
}
}
- METHOD(HLAC, wr_init, void(entity thiswep))
- {
- HLAC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(HLAC, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount = self.WEP_AMMO(HLAC) >= WEP_CVAR_PRI(hlac, ammo);
ammo_amount += self.(weapon_load[WEP_HLAC.m_id]) >= WEP_CVAR_SEC(hlac, ammo);
return ammo_amount;
}
- METHOD(HLAC, wr_config, void(entity thiswep))
- {
- HLAC_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(HLAC, wr_reload, void(entity thiswep))
{
W_Reload(self, min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), SND(RELOAD));
/* refname */ ATTRIB(Hook, netname, string, "hook");
/* wepname */ ATTRIB(Hook, m_name, string, _("Grappling Hook"));
ATTRIB(Hook, ammo_factor, float, 1)
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, PRI) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, damageforcescale, float, SEC) \
+ P(class, prefix, damage, float, SEC) \
+ P(class, prefix, duration, float, SEC) \
+ P(class, prefix, edgedamage, float, SEC) \
+ P(class, prefix, force, float, SEC) \
+ P(class, prefix, gravity, float, SEC) \
+ P(class, prefix, health, float, SEC) \
+ P(class, prefix, hooked_ammo, float, PRI) \
+ P(class, prefix, hooked_time_free, float, PRI) \
+ P(class, prefix, hooked_time_max, float, PRI) \
+ P(class, prefix, lifetime, float, SEC) \
+ P(class, prefix, power, float, SEC) \
+ P(class, prefix, radius, float, SEC) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, speed, float, SEC) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Hook, hook)
+#undef X
+
ENDCLASS(Hook)
-REGISTER_WEAPON(HOOK, NEW(Hook));
+REGISTER_WEAPON(HOOK, hook, NEW(Hook));
CLASS(OffhandHook, OffhandWeapon)
#ifdef SVQC
ENDCLASS(OffhandHook)
OffhandHook OFFHAND_HOOK; STATIC_INIT(OFFHAND_HOOK) { OFFHAND_HOOK = NEW(OffhandHook); }
-#define HOOK_SETTINGS(w_cvar,w_prop) HOOK_SETTINGS_LIST(w_cvar, w_prop, HOOK, hook)
-#define HOOK_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, PRI, ammo) \
- w_cvar(id, sn, PRI, hooked_ammo) \
- w_cvar(id, sn, PRI, hooked_time_free) \
- w_cvar(id, sn, PRI, hooked_time_max) \
- w_cvar(id, sn, SEC, damage) \
- w_cvar(id, sn, SEC, duration) \
- w_cvar(id, sn, SEC, edgedamage) \
- w_cvar(id, sn, SEC, force) \
- w_cvar(id, sn, SEC, gravity) \
- w_cvar(id, sn, SEC, lifetime) \
- w_cvar(id, sn, SEC, power) \
- w_cvar(id, sn, SEC, radius) \
- w_cvar(id, sn, SEC, speed) \
- w_cvar(id, sn, SEC, health) \
- w_cvar(id, sn, SEC, damageforcescale) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
-
#ifdef SVQC
-HOOK_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float dmg;
.float dmg_edge;
actor.hook_state &= ~HOOK_REMOVING;
}
}
- METHOD(Hook, wr_init, void(entity thiswep))
- {
- HOOK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Hook, wr_setup, void(entity thiswep))
{
self.hook_state &= ~HOOK_WAITING_FOR_RELEASE;
// infinite ammo for now
return true; // self.ammo_cells >= WEP_CVAR_SEC(hook, ammo); // WEAPONTODO: see above
}
- METHOD(Hook, wr_config, void(entity thiswep))
- {
- HOOK_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Hook, wr_resetplayer, void(entity thiswep))
{
RemoveGrapplingHook(self);
/* wepimg */ ATTRIB(MachineGun, model2, string, "weaponuzi");
/* refname */ ATTRIB(MachineGun, netname, string, "machinegun");
/* wepname */ ATTRIB(MachineGun, m_name, string, _("MachineGun"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, burst, float, NONE) \
+ P(class, prefix, burst_ammo, float, NONE) \
+ P(class, prefix, burst_animtime, float, NONE) \
+ P(class, prefix, burst_refire2, float, NONE) \
+ P(class, prefix, burst_refire, float, NONE) \
+ P(class, prefix, burst_speed, float, NONE) \
+ P(class, prefix, first, float, NONE) \
+ P(class, prefix, first_ammo, float, NONE) \
+ P(class, prefix, first_damage, float, NONE) \
+ P(class, prefix, first_force, float, NONE) \
+ P(class, prefix, first_refire, float, NONE) \
+ P(class, prefix, first_spread, float, NONE) \
+ P(class, prefix, mode, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, solidpenetration, float, NONE) \
+ P(class, prefix, spread_add, float, NONE) \
+ P(class, prefix, spread_max, float, NONE) \
+ P(class, prefix, spread_min, float, NONE) \
+ P(class, prefix, sustained_ammo, float, NONE) \
+ P(class, prefix, sustained_damage, float, NONE) \
+ P(class, prefix, sustained_force, float, NONE) \
+ P(class, prefix, sustained_refire, float, NONE) \
+ P(class, prefix, sustained_spread, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, MachineGun, machinegun)
+#undef X
+
ENDCLASS(MachineGun)
-REGISTER_WEAPON(MACHINEGUN, NEW(MachineGun));
-
-#define MACHINEGUN_SETTINGS(w_cvar,w_prop) MACHINEGUN_SETTINGS_LIST(w_cvar, w_prop, MACHINEGUN, machinegun)
-#define MACHINEGUN_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, spread_min) \
- w_cvar(id, sn, NONE, spread_max) \
- w_cvar(id, sn, NONE, spread_add) \
- w_cvar(id, sn, NONE, mode) \
- w_cvar(id, sn, NONE, first) \
- w_cvar(id, sn, NONE, first_damage) \
- w_cvar(id, sn, NONE, first_force) \
- w_cvar(id, sn, NONE, first_refire) \
- w_cvar(id, sn, NONE, first_spread) \
- w_cvar(id, sn, NONE, first_ammo) \
- w_cvar(id, sn, NONE, solidpenetration) \
- w_cvar(id, sn, NONE, sustained_damage) \
- w_cvar(id, sn, NONE, sustained_force) \
- w_cvar(id, sn, NONE, sustained_refire) \
- w_cvar(id, sn, NONE, sustained_spread) \
- w_cvar(id, sn, NONE, sustained_ammo) \
- w_cvar(id, sn, NONE, burst) \
- w_cvar(id, sn, NONE, burst_refire) \
- w_cvar(id, sn, NONE, burst_refire2) \
- w_cvar(id, sn, NONE, burst_animtime) \
- w_cvar(id, sn, NONE, burst_speed) \
- w_cvar(id, sn, NONE, burst_ammo) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(MACHINEGUN, machinegun, NEW(MachineGun));
+
-#ifdef SVQC
-MACHINEGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
}
}
}
- METHOD(MachineGun, wr_init, void(entity thiswep))
- {
- MACHINEGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(MachineGun, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount;
}
return ammo_amount;
}
- METHOD(MachineGun, wr_config, void(entity thiswep))
- {
- MACHINEGUN_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(MachineGun, wr_reload, void(entity thiswep))
{
W_Reload(self, min(max(WEP_CVAR(machinegun, sustained_ammo), WEP_CVAR(machinegun, first_ammo)), WEP_CVAR(machinegun, burst_ammo)), SND(RELOAD));
/* wepimg */ ATTRIB(MineLayer, model2, string, "weaponminelayer");
/* refname */ ATTRIB(MineLayer, netname, string, "minelayer");
/* wepname */ ATTRIB(MineLayer, m_name, string, _("Mine Layer"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, NONE) \
+ P(class, prefix, animtime, float, NONE) \
+ P(class, prefix, damageforcescale, float, NONE) \
+ P(class, prefix, damage, float, NONE) \
+ P(class, prefix, detonatedelay, float, NONE) \
+ P(class, prefix, edgedamage, float, NONE) \
+ P(class, prefix, force, float, NONE) \
+ P(class, prefix, health, float, NONE) \
+ P(class, prefix, lifetime, float, NONE) \
+ P(class, prefix, lifetime_countdown, float, NONE) \
+ P(class, prefix, limit, float, NONE) \
+ P(class, prefix, protection, float, NONE) \
+ P(class, prefix, proximityradius, float, NONE) \
+ P(class, prefix, radius, float, NONE) \
+ P(class, prefix, refire, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, remote_damage, float, NONE) \
+ P(class, prefix, remote_edgedamage, float, NONE) \
+ P(class, prefix, remote_force, float, NONE) \
+ P(class, prefix, remote_radius, float, NONE) \
+ P(class, prefix, speed, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, time, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, MineLayer, minelayer)
+#undef X
ENDCLASS(MineLayer)
-REGISTER_WEAPON(MINE_LAYER, NEW(MineLayer));
-
-#define MINELAYER_SETTINGS(w_cvar,w_prop) MINELAYER_SETTINGS_LIST(w_cvar, w_prop, MINE_LAYER, minelayer)
-#define MINELAYER_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, ammo) \
- w_cvar(id, sn, NONE, animtime) \
- w_cvar(id, sn, NONE, damage) \
- w_cvar(id, sn, NONE, damageforcescale) \
- w_cvar(id, sn, NONE, detonatedelay) \
- w_cvar(id, sn, NONE, edgedamage) \
- w_cvar(id, sn, NONE, force) \
- w_cvar(id, sn, NONE, health) \
- w_cvar(id, sn, NONE, lifetime) \
- w_cvar(id, sn, NONE, lifetime_countdown) \
- w_cvar(id, sn, NONE, limit) \
- w_cvar(id, sn, NONE, protection) \
- w_cvar(id, sn, NONE, proximityradius) \
- w_cvar(id, sn, NONE, radius) \
- w_cvar(id, sn, NONE, refire) \
- w_cvar(id, sn, NONE, remote_damage) \
- w_cvar(id, sn, NONE, remote_edgedamage) \
- w_cvar(id, sn, NONE, remote_force) \
- w_cvar(id, sn, NONE, remote_radius) \
- w_cvar(id, sn, NONE, speed) \
- w_cvar(id, sn, NONE, time) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(MINE_LAYER, minelayer, NEW(MineLayer));
#ifdef SVQC
-MINELAYER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
void W_MineLayer_Think();
.float minelayer_detonate, mine_explodeanyway;
.float mine_time;
sound(actor, CH_WEAPON_B, SND_MINE_DET, VOL_BASE, ATTN_NORM);
}
}
- METHOD(MineLayer, wr_init, void(entity thiswep))
- {
- MINELAYER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(MineLayer, wr_checkammo1, bool(entity thiswep))
{
int slot = 0; // TODO: unhardcode
else
return false;
}
- METHOD(MineLayer, wr_config, void(entity thiswep))
- {
- MINELAYER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(MineLayer, wr_resetplayers, void(entity thiswep))
{
self.minelayer_mines = 0;
/* wepimg */ ATTRIB(Mortar, model2, string, "weapongrenadelauncher");
/* refname */ ATTRIB(Mortar, netname, string, "mortar");
/* wepname */ ATTRIB(Mortar, m_name, string, _("Mortar"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, bouncefactor, float, NONE) \
+ P(class, prefix, bouncestop, float, NONE) \
+ P(class, prefix, damageforcescale, float, BOTH) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, edgedamage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, health, float, BOTH) \
+ P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, lifetime_bounce, float, SEC) \
+ P(class, prefix, lifetime_stick, float, BOTH) \
+ P(class, prefix, radius, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, remote_detonateprimary, float, SEC) \
+ P(class, prefix, remote_minbouncecnt, float, PRI) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, speed_up, float, BOTH) \
+ P(class, prefix, speed_z, float, BOTH) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, type, float, BOTH) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Mortar, mortar)
+#undef X
ENDCLASS(Mortar)
-REGISTER_WEAPON(MORTAR, NEW(Mortar));
-
-#define MORTAR_SETTINGS(w_cvar,w_prop) MORTAR_SETTINGS_LIST(w_cvar, w_prop, MORTAR, mortar)
-#define MORTAR_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, NONE, bouncefactor) \
- w_cvar(id, sn, NONE, bouncestop) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, damageforcescale) \
- w_cvar(id, sn, BOTH, edgedamage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, health) \
- w_cvar(id, sn, BOTH, lifetime) \
- w_cvar(id, sn, SEC, lifetime_bounce) \
- w_cvar(id, sn, BOTH, lifetime_stick) \
- w_cvar(id, sn, BOTH, radius) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, SEC, remote_detonateprimary) \
- w_cvar(id, sn, PRI, remote_minbouncecnt) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, BOTH, speed_up) \
- w_cvar(id, sn, BOTH, speed_z) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, BOTH, type) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(MORTAR, mortar, NEW(Mortar));
+
#ifdef SVQC
-MORTAR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float gl_detonate_later;
.float gl_bouncecnt;
#endif
}
}
}
- METHOD(Mortar, wr_init, void(entity thiswep))
- {
- MORTAR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Mortar, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount = self.WEP_AMMO(MORTAR) >= WEP_CVAR_PRI(mortar, ammo);
ammo_amount += self.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_SEC(mortar, ammo);
return ammo_amount;
}
- METHOD(Mortar, wr_config, void(entity thiswep))
- {
- MORTAR_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Mortar, wr_reload, void(entity thiswep))
{
W_Reload(self, min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), SND(RELOAD)); // WEAPONTODO
/* wepimg */ ATTRIB(PortoLaunch, model2, string, "weaponporto");
/* refname */ ATTRIB(PortoLaunch, netname, string, "porto");
/* wepname */ ATTRIB(PortoLaunch, m_name, string, _("Port-O-Launch"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, speed, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, PortoLaunch, porto)
+#undef X
ENDCLASS(PortoLaunch)
-REGISTER_WEAPON(PORTO, NEW(PortoLaunch));
-
-#define PORTO_SETTINGS(w_cvar,w_prop) PORTO_SETTINGS_LIST(w_cvar, w_prop, PORTO, porto)
-#define PORTO_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, lifetime) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, speed) \
- w_cvar(id, sn, NONE, secondary) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(PORTO, porto, NEW(PortoLaunch));
#ifdef SVQC
-PORTO_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.entity porto_current;
.vector porto_v_angle; // holds "held" view angles
.float porto_v_angle_held;
if(bot_aim(WEP_CVAR_PRI(porto, speed), 0, WEP_CVAR_PRI(porto, lifetime), false))
self.BUTTON_ATCK = true;
}
- METHOD(PortoLaunch, wr_config, void(entity this))
- {
- PORTO_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(PortoLaunch, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
{
if(WEP_CVAR(porto, secondary))
// always allow infinite ammo
return true;
}
- METHOD(PortoLaunch, wr_init, void(entity this))
- {
- PORTO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(PortoLaunch, wr_setup, void(entity thiswep))
{
SELFPARAM();
/* wepimg */ ATTRIB(Rifle, model2, string, "weaponrifle");
/* refname */ ATTRIB(Rifle, netname, string, "rifle");
/* wepname */ ATTRIB(Rifle, m_name, string, _("Rifle"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, bullethail, float, BOTH) \
+ P(class, prefix, burstcost, float, BOTH) \
+ P(class, prefix, bursttime, float, NONE) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload, float, SEC) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, shots, float, BOTH) \
+ P(class, prefix, solidpenetration, float, BOTH) \
+ P(class, prefix, spread, float, BOTH) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, tracer, float, BOTH) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Rifle, rifle)
+#undef X
ENDCLASS(Rifle)
-REGISTER_WEAPON(RIFLE, NEW(Rifle));
+REGISTER_WEAPON(RIFLE, rifle, NEW(Rifle));
-#define RIFLE_SETTINGS(w_cvar,w_prop) RIFLE_SETTINGS_LIST(w_cvar, w_prop, RIFLE, rifle)
-#define RIFLE_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, bullethail) \
- w_cvar(id, sn, BOTH, burstcost) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, BOTH, shots) \
- w_cvar(id, sn, BOTH, solidpenetration) \
- w_cvar(id, sn, BOTH, spread) \
- w_cvar(id, sn, BOTH, tracer) \
- w_cvar(id, sn, NONE, bursttime) \
- w_cvar(id, sn, NONE, secondary) \
- w_cvar(id, sn, SEC, reload) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
#ifdef SVQC
-RIFLE_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float rifle_accumulator;
#endif
#endif
}
}
}
- METHOD(Rifle, wr_init, void(entity thiswep))
- {
- RIFLE_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Rifle, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount = self.WEP_AMMO(RIFLE) >= WEP_CVAR_PRI(rifle, ammo);
ammo_amount += self.(weapon_load[WEP_RIFLE.m_id]) >= WEP_CVAR_SEC(rifle, ammo);
return ammo_amount;
}
- METHOD(Rifle, wr_config, void(entity thiswep))
- {
- RIFLE_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Rifle, wr_resetplayer, void(entity thiswep))
{
self.rifle_accumulator = time - WEP_CVAR(rifle, bursttime);
/* wepimg */ ATTRIB(Seeker, model2, string, "weaponseeker");
/* refname */ ATTRIB(Seeker, netname, string, "seeker");
/* wepname */ ATTRIB(Seeker, m_name, string, _("T.A.G. Seeker"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, flac_ammo, float, NONE) \
+ P(class, prefix, flac_animtime, float, NONE) \
+ P(class, prefix, flac_damage, float, NONE) \
+ P(class, prefix, flac_edgedamage, float, NONE) \
+ P(class, prefix, flac_force, float, NONE) \
+ P(class, prefix, flac_lifetime, float, NONE) \
+ P(class, prefix, flac_lifetime_rand, float, NONE) \
+ P(class, prefix, flac_radius, float, NONE) \
+ P(class, prefix, flac_refire, float, NONE) \
+ P(class, prefix, flac_speed, float, NONE) \
+ P(class, prefix, flac_speed_up, float, NONE) \
+ P(class, prefix, flac_speed_z, float, NONE) \
+ P(class, prefix, flac_spread, float, NONE) \
+ P(class, prefix, missile_accel, float, NONE) \
+ P(class, prefix, missile_ammo, float, NONE) \
+ P(class, prefix, missile_animtime, float, NONE) \
+ P(class, prefix, missile_count, float, NONE) \
+ P(class, prefix, missile_damageforcescale, float, NONE) \
+ P(class, prefix, missile_damage, float, NONE) \
+ P(class, prefix, missile_decel, float, NONE) \
+ P(class, prefix, missile_delay, float, NONE) \
+ P(class, prefix, missile_edgedamage, float, NONE) \
+ P(class, prefix, missile_force, float, NONE) \
+ P(class, prefix, missile_health, float, NONE) \
+ P(class, prefix, missile_lifetime, float, NONE) \
+ P(class, prefix, missile_proxy, float, NONE) \
+ P(class, prefix, missile_proxy_delay, float, NONE) \
+ P(class, prefix, missile_proxy_maxrange, float, NONE) \
+ P(class, prefix, missile_radius, float, NONE) \
+ P(class, prefix, missile_refire, float, NONE) \
+ P(class, prefix, missile_smart, float, NONE) \
+ P(class, prefix, missile_smart_mindist, float, NONE) \
+ P(class, prefix, missile_smart_trace_max, float, NONE) \
+ P(class, prefix, missile_smart_trace_min, float, NONE) \
+ P(class, prefix, missile_speed, float, NONE) \
+ P(class, prefix, missile_speed_max, float, NONE) \
+ P(class, prefix, missile_speed_up, float, NONE) \
+ P(class, prefix, missile_speed_z, float, NONE) \
+ P(class, prefix, missile_spread, float, NONE) \
+ P(class, prefix, missile_turnrate, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, tag_ammo, float, NONE) \
+ P(class, prefix, tag_animtime, float, NONE) \
+ P(class, prefix, tag_damageforcescale, float, NONE) \
+ P(class, prefix, tag_health, float, NONE) \
+ P(class, prefix, tag_lifetime, float, NONE) \
+ P(class, prefix, tag_refire, float, NONE) \
+ P(class, prefix, tag_speed, float, NONE) \
+ P(class, prefix, tag_spread, float, NONE) \
+ P(class, prefix, tag_tracker_lifetime, float, NONE) \
+ P(class, prefix, type, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Seeker, seeker)
+#undef X
ENDCLASS(Seeker)
-REGISTER_WEAPON(SEEKER, NEW(Seeker));
-
-#define SEEKER_SETTINGS(w_cvar,w_prop) SEEKER_SETTINGS_LIST(w_cvar, w_prop, SEEKER, seeker)
-#define SEEKER_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, type) \
- w_cvar(id, sn, NONE, flac_ammo) \
- w_cvar(id, sn, NONE, flac_animtime) \
- w_cvar(id, sn, NONE, flac_damage) \
- w_cvar(id, sn, NONE, flac_edgedamage) \
- w_cvar(id, sn, NONE, flac_force) \
- w_cvar(id, sn, NONE, flac_lifetime) \
- w_cvar(id, sn, NONE, flac_lifetime_rand) \
- w_cvar(id, sn, NONE, flac_radius) \
- w_cvar(id, sn, NONE, flac_refire) \
- w_cvar(id, sn, NONE, flac_speed) \
- w_cvar(id, sn, NONE, flac_speed_up) \
- w_cvar(id, sn, NONE, flac_speed_z) \
- w_cvar(id, sn, NONE, flac_spread) \
- w_cvar(id, sn, NONE, missile_accel) \
- w_cvar(id, sn, NONE, missile_ammo) \
- w_cvar(id, sn, NONE, missile_animtime) \
- w_cvar(id, sn, NONE, missile_count) \
- w_cvar(id, sn, NONE, missile_damage) \
- w_cvar(id, sn, NONE, missile_damageforcescale) \
- w_cvar(id, sn, NONE, missile_decel) \
- w_cvar(id, sn, NONE, missile_delay) \
- w_cvar(id, sn, NONE, missile_edgedamage) \
- w_cvar(id, sn, NONE, missile_force) \
- w_cvar(id, sn, NONE, missile_health) \
- w_cvar(id, sn, NONE, missile_lifetime) \
- w_cvar(id, sn, NONE, missile_proxy) \
- w_cvar(id, sn, NONE, missile_proxy_delay) \
- w_cvar(id, sn, NONE, missile_proxy_maxrange) \
- w_cvar(id, sn, NONE, missile_radius) \
- w_cvar(id, sn, NONE, missile_refire) \
- w_cvar(id, sn, NONE, missile_smart) \
- w_cvar(id, sn, NONE, missile_smart_mindist) \
- w_cvar(id, sn, NONE, missile_smart_trace_max) \
- w_cvar(id, sn, NONE, missile_smart_trace_min) \
- w_cvar(id, sn, NONE, missile_speed) \
- w_cvar(id, sn, NONE, missile_speed_max) \
- w_cvar(id, sn, NONE, missile_speed_up) \
- w_cvar(id, sn, NONE, missile_speed_z) \
- w_cvar(id, sn, NONE, missile_spread) \
- w_cvar(id, sn, NONE, missile_turnrate) \
- w_cvar(id, sn, NONE, tag_ammo) \
- w_cvar(id, sn, NONE, tag_animtime) \
- w_cvar(id, sn, NONE, tag_damageforcescale) \
- w_cvar(id, sn, NONE, tag_health) \
- w_cvar(id, sn, NONE, tag_lifetime) \
- w_cvar(id, sn, NONE, tag_refire) \
- w_cvar(id, sn, NONE, tag_speed) \
- w_cvar(id, sn, NONE, tag_spread) \
- w_cvar(id, sn, NONE, tag_tracker_lifetime) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(SEEKER, seeker, NEW(Seeker));
+
#ifdef SVQC
-SEEKER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.entity tag_target, wps_tag_tracker;
.float tag_time;
#endif
}
}
}
- METHOD(Seeker, wr_init, void(entity thiswep))
- {
- SEEKER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Seeker, wr_checkammo1, bool(entity thiswep))
{
float ammo_amount;
}
return ammo_amount;
}
- METHOD(Seeker, wr_config, void(entity thiswep))
- {
- SEEKER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Seeker, wr_reload, void(entity thiswep))
{
W_Reload(self, min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), SND(RELOAD));
/* wepimg */ ATTRIB(Shockwave, model2, string, "weaponshotgun");
/* refname */ ATTRIB(Shockwave, netname, string, "shockwave");
/* wepname */ ATTRIB(Shockwave, m_name, string, _("Shockwave"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, blast_animtime, float, NONE) \
+ P(class, prefix, blast_damage, float, NONE) \
+ P(class, prefix, blast_distance, float, NONE) \
+ P(class, prefix, blast_edgedamage, float, NONE) \
+ P(class, prefix, blast_force, float, NONE) \
+ P(class, prefix, blast_force_forwardbias, float, NONE) \
+ P(class, prefix, blast_force_zscale, float, NONE) \
+ P(class, prefix, blast_jump_damage, float, NONE) \
+ P(class, prefix, blast_jump_edgedamage, float, NONE) \
+ P(class, prefix, blast_jump_force, float, NONE) \
+ P(class, prefix, blast_jump_force_velocitybias, float, NONE) \
+ P(class, prefix, blast_jump_force_zscale, float, NONE) \
+ P(class, prefix, blast_jump_multiplier_accuracy, float, NONE) \
+ P(class, prefix, blast_jump_multiplier_distance, float, NONE) \
+ P(class, prefix, blast_jump_multiplier_min, float, NONE) \
+ P(class, prefix, blast_jump_radius, float, NONE) \
+ P(class, prefix, blast_multiplier_accuracy, float, NONE) \
+ P(class, prefix, blast_multiplier_distance, float, NONE) \
+ P(class, prefix, blast_multiplier_min, float, NONE) \
+ P(class, prefix, blast_refire, float, NONE) \
+ P(class, prefix, blast_splash_damage, float, NONE) \
+ P(class, prefix, blast_splash_edgedamage, float, NONE) \
+ P(class, prefix, blast_splash_force, float, NONE) \
+ P(class, prefix, blast_splash_force_forwardbias, float, NONE) \
+ P(class, prefix, blast_splash_multiplier_accuracy, float, NONE) \
+ P(class, prefix, blast_splash_multiplier_distance, float, NONE) \
+ P(class, prefix, blast_splash_multiplier_min, float, NONE) \
+ P(class, prefix, blast_splash_radius, float, NONE) \
+ P(class, prefix, blast_spread_max, float, NONE) \
+ P(class, prefix, blast_spread_min, float, NONE) \
+ P(class, prefix, melee_animtime, float, NONE) \
+ P(class, prefix, melee_damage, float, NONE) \
+ P(class, prefix, melee_delay, float, NONE) \
+ P(class, prefix, melee_force, float, NONE) \
+ P(class, prefix, melee_multihit, float, NONE) \
+ P(class, prefix, melee_no_doubleslap, float, NONE) \
+ P(class, prefix, melee_nonplayerdamage, float, NONE) \
+ P(class, prefix, melee_range, float, NONE) \
+ P(class, prefix, melee_refire, float, NONE) \
+ P(class, prefix, melee_swing_side, float, NONE) \
+ P(class, prefix, melee_swing_up, float, NONE) \
+ P(class, prefix, melee_time, float, NONE) \
+ P(class, prefix, melee_traces, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Shockwave, shockwave)
+#undef X
+
ENDCLASS(Shockwave)
-REGISTER_WEAPON(SHOCKWAVE, NEW(Shockwave));
-
-#define SHOCKWAVE_SETTINGS(w_cvar,w_prop) SHOCKWAVE_SETTINGS_LIST(w_cvar, w_prop, SHOCKWAVE, shockwave)
-#define SHOCKWAVE_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, blast_animtime) \
- w_cvar(id, sn, NONE, blast_damage) \
- w_cvar(id, sn, NONE, blast_distance) \
- w_cvar(id, sn, NONE, blast_edgedamage) \
- w_cvar(id, sn, NONE, blast_force) \
- w_cvar(id, sn, NONE, blast_force_forwardbias) \
- w_cvar(id, sn, NONE, blast_force_zscale) \
- w_cvar(id, sn, NONE, blast_jump_damage) \
- w_cvar(id, sn, NONE, blast_jump_edgedamage) \
- w_cvar(id, sn, NONE, blast_jump_force) \
- w_cvar(id, sn, NONE, blast_jump_force_velocitybias) \
- w_cvar(id, sn, NONE, blast_jump_force_zscale) \
- w_cvar(id, sn, NONE, blast_jump_multiplier_accuracy) \
- w_cvar(id, sn, NONE, blast_jump_multiplier_distance) \
- w_cvar(id, sn, NONE, blast_jump_multiplier_min) \
- w_cvar(id, sn, NONE, blast_jump_radius) \
- w_cvar(id, sn, NONE, blast_multiplier_accuracy) \
- w_cvar(id, sn, NONE, blast_multiplier_distance) \
- w_cvar(id, sn, NONE, blast_multiplier_min) \
- w_cvar(id, sn, NONE, blast_refire) \
- w_cvar(id, sn, NONE, blast_splash_damage) \
- w_cvar(id, sn, NONE, blast_splash_edgedamage) \
- w_cvar(id, sn, NONE, blast_splash_force) \
- w_cvar(id, sn, NONE, blast_splash_force_forwardbias) \
- w_cvar(id, sn, NONE, blast_splash_multiplier_accuracy) \
- w_cvar(id, sn, NONE, blast_splash_multiplier_distance) \
- w_cvar(id, sn, NONE, blast_splash_multiplier_min) \
- w_cvar(id, sn, NONE, blast_splash_radius) \
- w_cvar(id, sn, NONE, blast_spread_max) \
- w_cvar(id, sn, NONE, blast_spread_min) \
- w_cvar(id, sn, NONE, melee_animtime) \
- w_cvar(id, sn, NONE, melee_damage) \
- w_cvar(id, sn, NONE, melee_delay) \
- w_cvar(id, sn, NONE, melee_force) \
- w_cvar(id, sn, NONE, melee_multihit) \
- w_cvar(id, sn, NONE, melee_no_doubleslap) \
- w_cvar(id, sn, NONE, melee_nonplayerdamage) \
- w_cvar(id, sn, NONE, melee_range) \
- w_cvar(id, sn, NONE, melee_refire) \
- w_cvar(id, sn, NONE, melee_swing_side) \
- w_cvar(id, sn, NONE, melee_swing_up) \
- w_cvar(id, sn, NONE, melee_time) \
- w_cvar(id, sn, NONE, melee_traces) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(SHOCKWAVE, shockwave, NEW(Shockwave));
+
-#ifdef SVQC
-SHOCKWAVE_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#ifdef CSQC
void Net_ReadShockwaveParticle();
.vector sw_shotorg;
}
}
}
- METHOD(Shockwave, wr_init, void(entity thiswep))
- {
- SHOCKWAVE_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Shockwave, wr_checkammo1, bool(entity thiswep))
{
return true; // infinite ammo
// shockwave has infinite ammo
return true;
}
- METHOD(Shockwave, wr_config, void(entity thiswep))
- {
- SHOCKWAVE_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Shockwave, wr_suicidemessage, int(entity thiswep))
{
return WEAPON_THINKING_WITH_PORTALS;
/* wepimg */ ATTRIB(Shotgun, model2, string, "weaponshotgun");
/* refname */ ATTRIB(Shotgun, netname, string, "shotgun");
/* wepname */ ATTRIB(Shotgun, m_name, string, _("Shotgun"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, alt_animtime, float, SEC) \
+ P(class, prefix, alt_refire, float, SEC) \
+ P(class, prefix, ammo, float, PRI) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, bullets, float, PRI) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, melee_delay, float, SEC) \
+ P(class, prefix, melee_multihit, float, SEC) \
+ P(class, prefix, melee_nonplayerdamage, float, SEC) \
+ P(class, prefix, melee_no_doubleslap, float, SEC) \
+ P(class, prefix, melee_range, float, SEC) \
+ P(class, prefix, melee_swing_side, float, SEC) \
+ P(class, prefix, melee_swing_up, float, SEC) \
+ P(class, prefix, melee_time, float, SEC) \
+ P(class, prefix, melee_traces, float, SEC) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, solidpenetration, float, PRI) \
+ P(class, prefix, spread, float, PRI) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, weaponreplace, string,NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Shotgun, shotgun)
+#undef X
+
ENDCLASS(Shotgun)
-REGISTER_WEAPON(SHOTGUN, NEW(Shotgun));
-
-#define SHOTGUN_SETTINGS(w_cvar,w_prop) SHOTGUN_SETTINGS_LIST(w_cvar, w_prop, SHOTGUN, shotgun)
-#define SHOTGUN_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, PRI, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, PRI, bullets) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, PRI, solidpenetration) \
- w_cvar(id, sn, PRI, spread) \
- w_cvar(id, sn, NONE, secondary) \
- w_cvar(id, sn, SEC, melee_time) \
- w_cvar(id, sn, SEC, melee_no_doubleslap) \
- w_cvar(id, sn, SEC, melee_traces) \
- w_cvar(id, sn, SEC, melee_swing_up) \
- w_cvar(id, sn, SEC, melee_swing_side) \
- w_cvar(id, sn, SEC, melee_nonplayerdamage) \
- w_cvar(id, sn, SEC, melee_multihit) \
- w_cvar(id, sn, SEC, melee_delay) \
- w_cvar(id, sn, SEC, melee_range) \
- w_cvar(id, sn, SEC, alt_animtime) \
- w_cvar(id, sn, SEC, alt_refire) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(SHOTGUN, shotgun, NEW(Shotgun));
+
-#ifdef SVQC
-SHOTGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-#endif
#endif
#ifdef IMPLEMENTATION
#ifdef SVQC
weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, 0, W_Shotgun_Attack2);
}
}
- METHOD(Shotgun, wr_init, void(entity thiswep))
- {
- SHOTGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Shotgun, wr_setup, void(entity thiswep))
{
self.ammo_field = ammo_none;
default: return false; // secondary unavailable
}
}
- METHOD(Shotgun, wr_config, void(entity thiswep))
- {
- SHOTGUN_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Shotgun, wr_reload, void(entity thiswep))
{
W_Reload(self, WEP_CVAR_PRI(shotgun, ammo), SND(RELOAD)); // WEAPONTODO
/* refname */ ATTRIB(Tuba, netname, string, "tuba");
/* xgettext:no-c-format */
/* wepname */ ATTRIB(Tuba, m_name, string, _("@!#%'n Tuba"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, animtime, float, NONE) \
+ P(class, prefix, attenuation, float, NONE) \
+ P(class, prefix, damage, float, NONE) \
+ P(class, prefix, edgedamage, float, NONE) \
+ P(class, prefix, fadetime, float, NONE) \
+ P(class, prefix, force, float, NONE) \
+ P(class, prefix, pitchstep, float, NONE) \
+ P(class, prefix, radius, float, NONE) \
+ P(class, prefix, refire, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, volume, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Tuba, tuba)
+#undef X
+
ENDCLASS(Tuba)
-REGISTER_WEAPON(TUBA, NEW(Tuba));
-
-#define TUBA_SETTINGS(w_cvar,w_prop) TUBA_SETTINGS_LIST(w_cvar, w_prop, TUBA, tuba)
-#define TUBA_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, NONE, animtime) \
- w_cvar(id, sn, NONE, attenuation) \
- w_cvar(id, sn, NONE, damage) \
- w_cvar(id, sn, NONE, edgedamage) \
- w_cvar(id, sn, NONE, fadetime) \
- w_cvar(id, sn, NONE, force) \
- w_cvar(id, sn, NONE, pitchstep) \
- w_cvar(id, sn, NONE, radius) \
- w_cvar(id, sn, NONE, refire) \
- w_cvar(id, sn, NONE, volume) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(TUBA, tuba, NEW(Tuba));
+
#ifdef SVQC
-TUBA_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
-float W_Tuba_MarkClientOnlyFieldsAsUsed() {
- // These variables are only used by client/tuba.qc. TODO: move client/tuba.qc code here.
- return WEP_CVAR(tuba, fadetime) + WEP_CVAR(tuba, pitchstep) + WEP_CVAR(tuba, volume);
-}
.entity tuba_note;
.float tuba_smoketime;
}
}
}
- METHOD(Tuba, wr_init, void(entity thiswep))
- {
- TUBA_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Tuba, wr_setup, void(entity thiswep))
{
self.ammo_field = ammo_none;
{
return true; // tuba has infinite ammo
}
- METHOD(Tuba, wr_config, void(entity thiswep))
- {
- TUBA_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Tuba, wr_suicidemessage, int(entity thiswep))
{
if(w_deathtype & HITTYPE_BOUNCE)
/* wepimg */ ATTRIB(Vaporizer, model2, string, "weaponminstanex");
/* refname */ ATTRIB(Vaporizer, netname, string, "vaporizer");
/* wepname */ ATTRIB(Vaporizer, m_name, string, _("Vaporizer"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, PRI) \
+ P(class, prefix, animtime, float, PRI) \
+ P(class, prefix, damage, float, PRI) \
+ P(class, prefix, refire, float, PRI) \
+ P(class, prefix, ammo, float, SEC) \
+ P(class, prefix, animtime, float, SEC) \
+ P(class, prefix, damage, float, SEC) \
+ P(class, prefix, delay, float, SEC) \
+ P(class, prefix, edgedamage, float, SEC) \
+ P(class, prefix, force, float, SEC) \
+ P(class, prefix, lifetime, float, SEC) \
+ P(class, prefix, radius, float, SEC) \
+ P(class, prefix, refire, float, SEC) \
+ P(class, prefix, shotangle, float, SEC) \
+ P(class, prefix, speed, float, SEC) \
+ P(class, prefix, spread, float, SEC) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Vaporizer, vaporizer)
+#undef X
+
ENDCLASS(Vaporizer)
-REGISTER_WEAPON(VAPORIZER, NEW(Vaporizer));
-
-#define VAPORIZER_SETTINGS(w_cvar,w_prop) VAPORIZER_SETTINGS_LIST(w_cvar, w_prop, VAPORIZER, vaporizer)
-#define VAPORIZER_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, PRI, ammo) \
- w_cvar(id, sn, PRI, animtime) \
- w_cvar(id, sn, PRI, damage) \
- w_cvar(id, sn, PRI, refire) \
- w_cvar(id, sn, SEC, ammo) \
- w_cvar(id, sn, SEC, animtime) \
- w_cvar(id, sn, SEC, damage) \
- w_cvar(id, sn, SEC, delay) \
- w_cvar(id, sn, SEC, edgedamage) \
- w_cvar(id, sn, SEC, force) \
- w_cvar(id, sn, SEC, lifetime) \
- w_cvar(id, sn, SEC, radius) \
- w_cvar(id, sn, SEC, refire) \
- w_cvar(id, sn, SEC, shotangle) \
- w_cvar(id, sn, SEC, speed) \
- w_cvar(id, sn, SEC, spread) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(VAPORIZER, vaporizer, NEW(Vaporizer));
+
#ifdef SVQC
-VAPORIZER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float vaporizer_lasthit;
.float jump_interval;
.float jump_interval2;
else
actor.held_down = false;
}
- METHOD(Vaporizer, wr_init, void(entity thiswep))
- {
- //W_Blaster(WR_INIT); // Samual: Is this really the proper thing to do? Didn't we already run this previously?
- VAPORIZER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Vaporizer, wr_setup, void(entity thiswep))
{
self.ammo_field = WEP_AMMO(VAPORIZER);
ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= WEP_CVAR_SEC(vaporizer, ammo);
return ammo_amount;
}
- METHOD(Vaporizer, wr_config, void(entity thiswep))
- {
- VAPORIZER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Vaporizer, wr_resetplayer, void(entity thiswep))
{
self.vaporizer_lasthit = 0;
/* wepimg */ ATTRIB(Vortex, model2, string, "weaponnex");
/* refname */ ATTRIB(Vortex, netname, string, "vortex");
/* wepname */ ATTRIB(Vortex, m_name, string, _("Vortex"));
+
+#define X(BEGIN, P, END, class, prefix) \
+ BEGIN(class) \
+ P(class, prefix, ammo, float, BOTH) \
+ P(class, prefix, animtime, float, BOTH) \
+ P(class, prefix, chargepool, float, SEC) \
+ P(class, prefix, chargepool_pause_regen, float, SEC) \
+ P(class, prefix, chargepool_regen, float, SEC) \
+ P(class, prefix, charge, float, NONE) \
+ P(class, prefix, charge_animlimit, float, NONE) \
+ P(class, prefix, charge_limit, float, NONE) \
+ P(class, prefix, charge_maxspeed, float, NONE) \
+ P(class, prefix, charge_mindmg, float, NONE) \
+ P(class, prefix, charge_minspeed, float, NONE) \
+ P(class, prefix, charge_rate, float, NONE) \
+ P(class, prefix, charge_rot_pause, float, NONE) \
+ P(class, prefix, charge_rot_rate, float, NONE) \
+ P(class, prefix, charge_shot_multiplier, float, NONE) \
+ P(class, prefix, charge_start, float, NONE) \
+ P(class, prefix, charge_velocity_rate, float, NONE) \
+ P(class, prefix, damagefalloff_forcehalflife, float, BOTH) \
+ P(class, prefix, damagefalloff_halflife, float, BOTH) \
+ P(class, prefix, damagefalloff_maxdist, float, BOTH) \
+ P(class, prefix, damagefalloff_mindist, float, BOTH) \
+ P(class, prefix, damage, float, BOTH) \
+ P(class, prefix, force, float, BOTH) \
+ P(class, prefix, refire, float, BOTH) \
+ P(class, prefix, secondary, float, NONE) \
+ P(class, prefix, reload_ammo, float, NONE) \
+ P(class, prefix, reload_time, float, NONE) \
+ P(class, prefix, switchdelay_raise, float, NONE) \
+ P(class, prefix, switchdelay_drop, float, NONE) \
+ P(class, prefix, weaponreplace, string, NONE) \
+ P(class, prefix, weaponstart, float, NONE) \
+ P(class, prefix, weaponstartoverride, float, NONE) \
+ P(class, prefix, weaponthrowable, float, NONE) \
+ END()
+ W_PROPS(X, Vortex, vortex)
+#undef X
+
ENDCLASS(Vortex)
-REGISTER_WEAPON(VORTEX, NEW(Vortex));
-
-#define VORTEX_SETTINGS(w_cvar,w_prop) VORTEX_SETTINGS_LIST(w_cvar, w_prop, VORTEX, vortex)
-#define VORTEX_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
- w_cvar(id, sn, BOTH, ammo) \
- w_cvar(id, sn, BOTH, animtime) \
- w_cvar(id, sn, BOTH, damage) \
- w_cvar(id, sn, BOTH, force) \
- w_cvar(id, sn, BOTH, damagefalloff_mindist) \
- w_cvar(id, sn, BOTH, damagefalloff_maxdist) \
- w_cvar(id, sn, BOTH, damagefalloff_halflife) \
- w_cvar(id, sn, BOTH, damagefalloff_forcehalflife) \
- w_cvar(id, sn, BOTH, refire) \
- w_cvar(id, sn, NONE, charge) \
- w_cvar(id, sn, NONE, charge_mindmg) \
- w_cvar(id, sn, NONE, charge_shot_multiplier) \
- w_cvar(id, sn, NONE, charge_animlimit) \
- w_cvar(id, sn, NONE, charge_limit) \
- w_cvar(id, sn, NONE, charge_rate) \
- w_cvar(id, sn, NONE, charge_rot_rate) \
- w_cvar(id, sn, NONE, charge_rot_pause) \
- w_cvar(id, sn, NONE, charge_start) \
- w_cvar(id, sn, NONE, charge_minspeed) \
- w_cvar(id, sn, NONE, charge_maxspeed) \
- w_cvar(id, sn, NONE, charge_velocity_rate) \
- w_cvar(id, sn, NONE, secondary) \
- w_cvar(id, sn, SEC, chargepool) \
- w_cvar(id, sn, SEC, chargepool_regen) \
- w_cvar(id, sn, SEC, chargepool_pause_regen) \
- w_prop(id, sn, float, reloading_ammo, reload_ammo) \
- w_prop(id, sn, float, reloading_time, reload_time) \
- w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \
- w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \
- w_prop(id, sn, string, weaponreplace, weaponreplace) \
- w_prop(id, sn, float, weaponstart, weaponstart) \
- w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) \
- w_prop(id, sn, float, weaponthrowable, weaponthrowable)
+REGISTER_WEAPON(VORTEX, vortex, NEW(Vortex));
+
#ifdef SVQC
-VORTEX_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float vortex_lasthit;
#endif
}
}
}
- METHOD(Vortex, wr_init, void(entity thiswep))
- {
- VORTEX_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
- }
METHOD(Vortex, wr_setup, void(entity thiswep))
{
self.vortex_lasthit = 0;
return false; // zoom is not a fire mode
}
}
- METHOD(Vortex, wr_config, void(entity thiswep))
- {
- VORTEX_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS);
- }
METHOD(Vortex, wr_resetplayer, void(entity thiswep))
{
if (WEP_CVAR(vortex, charge)) {
#endif
#ifdef CSQC
-float autocvar_g_balance_vortex_secondary = 0; // WEAPONTODO
METHOD(Vortex, wr_impacteffect, void(entity thiswep))
{
#define APPROXPASTTIME_MAX (16384 * APPROXPASTTIME_ACCURACY_REQUIREMENT)
#define APPROXPASTTIME_RANGE (64 * APPROXPASTTIME_ACCURACY_REQUIREMENT)
+ #if defined(CSQC)
+ #define Read_float() ReadFloat()
+ #define Read_int() ReadInt24_t()
+ #define Read_string() ReadString()
+ #elif defined(SVQC)
+ #define Write_float(to, f) WriteFloat(to, f)
+ #define Write_int(to, f) WriteInt24_t(to, f)
+ #define Write_string(to, f) WriteString(to, f)
+ #endif
+
#ifdef CSQC
#define ReadRegistry(r) r##_from(ReadByte())
prototype METHOD_REFERENCE(cname, name)
#define METHOD(cname, name, prototype) \
- class(cname).prototype name; \
STATIC_METHOD(cname, name, prototype); \
+ class(cname) .prototype name; \
INIT_STATIC(cname) \
{ \
this.name = METHOD_REFERENCE(cname, name); \