36 error(sprintf(
"Special attack \"%s\" without WEP_FLAG_HIDDEN flag set.", it.m_name));
47#define WEPSET(id) (WEP_##id.m_wepset)
48#define WepSet_FromWeapon(it) ((it).m_wepset)
53#define DEFAULT_FILENAME "weapons_dump.cfg"
64 string filename =
argv(1);
71 else if (filename ==
"-")
81 LOG_INFOF(
"Dumping weapons... File located in ^2data/data/%s^7.", filename);
87 LOG_INFOF(
"^1Error: ^7Could not open file '%s'!", filename);
89 LOG_INFO(
"Weapons dump command only works with sv_cmd.");
98 LOG_HELP(
" if supplied with '-' output to console as well as default,");
99 LOG_HELP(
" if left blank, it will only write to default.");
103#undef DEFAULT_FILENAME
136#define REGISTER_WEAPON(id, inst) REGISTER(Weapons, WEP, id, m_id, inst)
162#define X(fld, T) .T fld; .T wepvar_##fld = fld;
163X(switchdelay_drop,
float)
164X(switchdelay_raise,
float)
165X(weaponreplace,
string)
166X(weaponstartoverride,
float)
168X(weaponthrowable,
float)
171const .float reloading_ammo = reload_ammo;
181 #define Read_int() ReadInt24_t()
182 #define Read_float() ReadFloat()
183 #define Read_string() ReadString()
185 #define Write_int(to, f) WriteInt24_t(to, f)
186 #define Write_float(to, f) WriteFloat(to, f)
187 #define Write_string(to, f) WriteString(to, f)
190#define W_PROPS(L, class, prefix) \
191 L(W_PROP_BEGIN, W_PROP, W_PROP_END, class, prefix) \
192 L(W_CONFIG_BEGIN, W_CONFIG, W_CONFIG_END, class, prefix) \
193 L(W_UPDATE_BEGIN, W_UPDATE, W_UPDATE_END, class, prefix) \
194 L(W_NET_BEGIN, W_NET, W_NET_END, class, prefix) \
198 #define W_PROP(class, wepname, fld, T, m) W_PROP_##m(class, fld, T, wepname)
199 #define W_PROP_NONE(class, fld, T, wepname) _W_PROP(class, fld, T, wepname)
200 #define W_PROP_PRI(class, fld, T, wepname) _W_PROP(class, primary_##fld, T, wepname)
201 #define W_PROP_SEC(class, fld, T, wepname) _W_PROP(class, secondary_##fld, T, wepname)
202 #define W_PROP_BOTH(class, fld, T, wepname) \
203 W_PROP_PRI(class, fld, T, wepname) \
204 W_PROP_SEC(class, fld, T, wepname)
205 #define W_PROP_BEGIN(class)
207 #define _W_PROP(class, fld, T, wepname) \
208 T _W_PROP_CVAR(wepname, fld); \
209 ATTRIB(class, wepvar_##fld, T, _W_PROP_CVAR(wepname, fld));
210 #define _W_PROP_CVAR(wepname, fld) autocvar_g_balance_##wepname##_##fld
212 #define _W_PROP(class, fld, T, wepname) ATTRIB(class, wepvar_##fld, T);
214 #define _W_PROP(class, fld, T, wepname)
220 #define W_CONFIG(class, wepname, fld, T, m) W_CONFIG_##m(class, fld, T, wepname)
221 #define W_CONFIG_NONE(class, fld, T, wepname) _W_CONFIG(class, fld, T, wepname)
222 #define W_CONFIG_PRI(class, fld, T, wepname) _W_CONFIG(class, primary_##fld, T, wepname)
223 #define W_CONFIG_SEC(class, fld, T, wepname) _W_CONFIG(class, secondary_##fld, T, wepname)
224 #define W_CONFIG_BOTH(class, fld, T, wepname) \
225 W_CONFIG_PRI(class, fld, T, wepname) \
226 W_CONFIG_SEC(class, fld, T, wepname)
228 #define W_CONFIG_BEGIN(class) METHOD(class, wr_config, void(class this)) {
229 #define _W_CONFIG(class, fld, T, wepname) if (#wepname == this.netname) WEP_CONFIG_WRITE_CVARS(wepname, fld, T);
230 #define W_CONFIG_END() }
232 #define W_CONFIG_BEGIN(class)
233 #define _W_CONFIG(class, fld, T, wepname)
234 #define W_CONFIG_END()
238 #define W_UPDATE(class, wepname, fld, T, m) W_UPDATE_##m(class, fld, T, wepname)
239 #define W_UPDATE_NONE(class, fld, T, wepname) _W_UPDATE(class, fld, T, wepname)
240 #define W_UPDATE_PRI(class, fld, T, wepname) _W_UPDATE(class, primary_##fld, T, wepname)
241 #define W_UPDATE_SEC(class, fld, T, wepname) _W_UPDATE(class, secondary_##fld, T, wepname)
242 #define W_UPDATE_BOTH(class, fld, T, wepname) \
243 W_UPDATE_PRI(class, fld, T, wepname) \
244 W_UPDATE_SEC(class, fld, T, wepname)
247 #define W_UPDATE_BEGIN(class) \
248 METHOD(class, wr_update, void(class this)) \
250 noref entity b = this.baseline; \
253 b = this.baseline = new_pure(baseline); \
254 b.baseline_target = this; \
257 #define _W_UPDATE(class, fld, T, wepname) \
259 T it = _W_PROP_CVAR(wepname, fld); \
260 b.wepvar_##fld = this.wepvar_##fld; \
261 this.wepvar_##fld = it; \
264 #define _W_UPDATE(class, fld, T, wepname)
266 #define W_UPDATE_END() }
268 #define W_UPDATE_BEGIN(class)
269 #define _W_UPDATE(class, fld, T, wepname)
270 #define W_UPDATE_END()
274 #define W_NET(class, wepname, fld, T, m) W_NET_##m(class, fld, T, wepname)
275 #define W_NET_NONE(class, fld, T, wepname) _W_NET(class, fld, T, wepname)
276 #define W_NET_PRI(class, fld, T, wepname) _W_NET(class, primary_##fld, T, wepname)
277 #define W_NET_SEC(class, fld, T, wepname) _W_NET(class, secondary_##fld, T, wepname)
278 #define W_NET_BOTH(class, fld, T, wepname) \
279 W_NET_PRI(class, fld, T, wepname) \
280 W_NET_SEC(class, fld, T, wepname)
283 #define W_NET_BEGIN(class) \
284 METHOD(class, wr_net, void(class this, int i)) \
287 #define _W_NET(class, fld, T, wepname) \
290 this.wepvar_##fld = Read_##T(); \
292 #define W_NET_END() \
294 .void(
Weapon this,
int i) wr_net;
304 #define W_NET_BEGIN(class) \
305 METHOD(class, wr_net, void(class this, int chan)) \
307 bool commit = false; \
309 #define _W_NET(class, fld, T, wepname) \
312 T it = this.wepvar_##fld; \
313 if (chan == MSG_ONE || it != this.baseline.wepvar_##fld) \
318 WriteHeader(chan, WeaponUpdate); \
319 WriteRegistered(Weapons, chan, this); \
321 WriteByte(chan, i); \
322 Write_##T(chan, it); \
325 #define W_NET_END() \
327 WriteByte(chan, 0); \
330 #define W_NET_BEGIN(class)
331 #define _W_NET(class, fld, T, wepname)
339#define WEP_CVAR(wep, name) (wep.wepvar_##name)
340#define WEP_CVAR_PRI(wep, name) WEP_CVAR(wep, primary_##name)
341#define WEP_CVAR_SEC(wep, name) WEP_CVAR(wep, secondary_##name)
342#define WEP_CVAR_BOTH(wep, isprimary, name) ((isprimary) ? WEP_CVAR_PRI(wep, name) : WEP_CVAR_SEC(wep, name))
345#define WEP_LAST (REGISTRY_COUNT(Weapons) - 1)
352#define WEP_IMPULSE_BEGIN 230
353#define WEP_IMPULSE_END bound(WEP_IMPULSE_BEGIN, WEP_IMPULSE_BEGIN + (REGISTRY_COUNT(Weapons) - 1) - 1, 253)
360 string inaccessible =
"";
376 it.m_unique_impulse =
imp;
379 localcmd(sprintf(
"alias weapon_%s \"impulse %d\"\n", it.netname,
imp));
382 inaccessible =
strcat(inaccessible,
"\n", it.netname);
386 LOG_TRACEF(
"Impulse limit exceeded, weapon(s) will not be directly accessible: %s", inaccessible);
434CASE(WFRAME, DONTCHANGE)
445 #define G_SHOOTFROMFIXEDORIGIN autocvar_g_shootfromfixedorigin
447 string autocvar_cl_shootfromfixedorigin;
448 #define G_SHOOTFROMFIXEDORIGIN autocvar_cl_shootfromfixedorigin
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
virtual void wr_glow()
(BOTH) weapon specific glow
ATTRIB(Weapon, m_canonical_spawnfunc, string)
the canonical spawnfunc name
#define colormapPaletteColor(c, isPants)
const int CMD_REQUEST_COMMAND
const int CMD_REQUEST_USAGE
#define GENERIC_COMMAND(id, description, menubased)
#define ENUMCLASS_END(id)
#define GetProgramCommandPrefix()
#define FOREACH(list, cond, body)
#define NET_HANDLE(id, param)
#define ReadRegistered(r)
#define REGISTER_NET_TEMP(id)
#define REPLICATE_INIT(type, name)
noref int autocvar_developer
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
#define new_pure(class)
purely logical entities (not linked to the area grid)
#define REGISTRY_SORT(...)
#define REGISTER_REGISTRY(id)
#define REGISTRY(id, max)
Declares a new registry.
#define REGISTRY_CHECK(id)
#define REGISTRY_DEFINE_GET(id, null)
#define REGISTRY_GET(id, i)
#define STATIC_INIT_LATE(func)
directly after STATIC_INIT
#define STATIC_INIT(func)
during worldspawn
#define WEP_HARDCODED_IMPULSES
string W_FixWeaponOrder_ForceComplete(string order)
string W_FixWeaponOrder_AllowIncomplete(entity this, string order)
Weapon Weapon_from_name(string s)
void wframe_send(entity actor, entity weaponentity, int wepframe, float attackrate, bool restartanim)
void W_PROP_reload(int chan, entity to)
string W_Model(string w_mdl)
string W_Guide_Keybinds(Weapon wep)
float autocvar_w_prop_interval
void WriteWepSet(float dest, WepSet w)
Weapon Weapon_from_impulse(int imp)
string W_Guide_DPS_primaryMultishot(string name, string pri, string sec, string shots, string refire2)
void CL_WeaponEntity_SetModel(entity this, string name, bool _anim)
supported formats:
WepSet WepSet_GetFromStat_InMap()
string W_Guide_DPS_secondaryMultishot(string name, string pri, string sec, string shots, string refire2, bool sec_variable)
int GetAmmoStat(Resource ammotype)
entity GetAmmoResource(Ammo ammotype)
vector weaponentity_glowmod(Weapon wep, int c, entity wepent)
string autocvar_g_shootfromfixedorigin
string W_NumberWeaponOrder(string order)
string W_FixWeaponOrder_BuildImpulseList(string o)
string W_Guide_DPS(string name, string pri, string sec)
string W_Sound(string w_snd)
string W_Guide_DPS_bothMultishot(string name, string pri, string sec)
string W_NameWeaponOrder(string order)
string W_Guide_DPS_onlySecondary(string name, string sec)
string W_Guide_DPS_onlyOne_andDirectHit(string name, string fire)
void W_MuzzleFlash(Weapon thiswep, entity actor,.entity weaponentity, vector shotorg, vector shotdir)
string W_FixWeaponOrder_ForceComplete_AndBuildImpulseList(entity this, string wo)
string W_Guide_DPS_secondaryMultishotWithCombo(string name, string pri, string sec, string shots, string refire2, string combo, bool sec_variable)
WepSet WepSet_GetFromStat()
string W_Guide_DPS_onlyOneMultishot(string name, string fire, string shots, string refire2)
string W_Guide_DPS_onlyOne_unnamed(string name)
entity exteriorweaponentity
string W_FixWeaponOrder(string order, float complete)
#define WEP_IMPULSE_BEGIN
string W_Guide_DPS_onlyOne(string name, string fire)
#define REGISTER_WEAPON(id, inst)
WepSet WEPSET_SUPERWEAPONS
string W_Guide_DPS_primaryDPS(string name, string pri, string sec)
entity GetAmmoItem(Resource ammotype)
void W_PROP_think(entity this)
vector shotorg_adjust(vector vecs, bool y_is_right, bool visual, int algn)
string W_Guide_DPS_onlyOne_unnamed_andDirectHit(string name)
WepSet _WepSet_FromWeapon(int i)
WepSet W_RandomWeapons(entity e, WepSet remaining, int n)
void Dump_Weapon_Settings()
bool wep_config_alsoprint
const int WEP_FLAG_SUPERWEAPON
powerup timer
const int WEP_FLAG_MUTATORBLOCKED
hides from impulse 99 etc. (mutators are allowed to clear this flag)
const int WEP_FLAG_HIDDEN
hides from menu
const int WEP_TYPE_OTHER
not for damaging people
const int WEP_FLAG_SPECIALATTACK
special attack (not a true weapon); NOTE: if this flag is set then WEP_FLAG_HIDDEN must be set as wel...