35 error(sprintf(
"Special attack \"%s\" without WEP_FLAG_HIDDEN flag set.", it.m_name));
45#define WEPSET(id) (WEP_##id.m_wepset)
46#define WepSet_FromWeapon(it) ((it).m_wepset)
51#define DEFAULT_FILENAME "weapons_dump.cfg"
62 string filename =
argv(1);
69 else if(filename ==
"-")
79 LOG_INFOF(
"Dumping weapons... File located in ^2data/data/%s^7.", filename);
86 LOG_INFOF(
"^1Error: ^7Could not open file '%s'!", filename);
89 LOG_INFO(
"Weapons dump command only works with sv_cmd.");
99 LOG_HELP(
" if supplied with '-' output to console as well as default,");
100 LOG_HELP(
" if left blank, it will only write to default.");
105#undef DEFAULT_FILENAME
136#define REGISTER_WEAPON(id, inst) REGISTER(Weapons, WEP, id, m_id, inst)
160#define X(fld, T) .T fld; .T wepvar_##fld = fld;
161X(switchdelay_drop,
float)
162X(switchdelay_raise,
float)
163X(weaponreplace,
string)
164X(weaponstartoverride,
float)
166X(weaponthrowable,
float)
169const .float reloading_ammo = reload_ammo;
179#define W_PROPS(L, class, prefix) \
180 L(W_PROP_BEGIN, W_PROP, W_PROP_END, class, prefix) \
181 L(W_CONFIG_BEGIN, W_CONFIG, W_CONFIG_END, class, prefix) \
182 L(W_UPDATE_BEGIN, W_UPDATE, W_UPDATE_END, class, prefix) \
183 L(W_NET_BEGIN, W_NET, W_NET_END, class, prefix) \
187 #define W_PROP(class, wepname, fld, T, m) W_PROP_##m(class, fld, T, wepname)
188 #define W_PROP_NONE(class, fld, T, wepname) _W_PROP(class, fld, T, wepname)
189 #define W_PROP_PRI(class, fld, T, wepname) _W_PROP(class, primary_##fld, T, wepname)
190 #define W_PROP_SEC(class, fld, T, wepname) _W_PROP(class, secondary_##fld, T, wepname)
191 #define W_PROP_BOTH(class, fld, T, wepname) \
192 W_PROP_PRI(class, fld, T, wepname) \
193 W_PROP_SEC(class, fld, T, wepname)
194 #define W_PROP_BEGIN(class)
196 #define _W_PROP(class, fld, T, wepname) \
197 T _W_PROP_CVAR(wepname, fld); \
198 ATTRIB(class, wepvar_##fld, T, _W_PROP_CVAR(wepname, fld));
199 #define _W_PROP_CVAR(wepname, fld) autocvar_g_balance_##wepname##_##fld
201 #define _W_PROP(class, fld, T, wepname) ATTRIB(class, wepvar_##fld, T);
203 #define _W_PROP(class, fld, T, wepname)
209 #define W_CONFIG(class, wepname, fld, T, m) W_CONFIG_##m(class, fld, T, wepname)
210 #define W_CONFIG_NONE(class, fld, T, wepname) _W_CONFIG(class, fld, T, wepname)
211 #define W_CONFIG_PRI(class, fld, T, wepname) _W_CONFIG(class, primary_##fld, T, wepname)
212 #define W_CONFIG_SEC(class, fld, T, wepname) _W_CONFIG(class, secondary_##fld, T, wepname)
213 #define W_CONFIG_BOTH(class, fld, T, wepname) \
214 W_CONFIG_PRI(class, fld, T, wepname) \
215 W_CONFIG_SEC(class, fld, T, wepname)
217 #define W_CONFIG_BEGIN(class) METHOD(class, wr_config, void(class this)) {
218 #define _W_CONFIG(class, fld, T, wepname) if (#wepname == this.netname) WEP_CONFIG_WRITE_CVARS(wepname, fld, T);
219 #define W_CONFIG_END() }
221 #define W_CONFIG_BEGIN(class)
222 #define _W_CONFIG(class, fld, T, wepname)
223 #define W_CONFIG_END()
227 #define W_UPDATE(class, wepname, fld, T, m) W_UPDATE_##m(class, fld, T, wepname)
228 #define W_UPDATE_NONE(class, fld, T, wepname) _W_UPDATE(class, fld, T, wepname)
229 #define W_UPDATE_PRI(class, fld, T, wepname) _W_UPDATE(class, primary_##fld, T, wepname)
230 #define W_UPDATE_SEC(class, fld, T, wepname) _W_UPDATE(class, secondary_##fld, T, wepname)
231 #define W_UPDATE_BOTH(class, fld, T, wepname) \
232 W_UPDATE_PRI(class, fld, T, wepname) \
233 W_UPDATE_SEC(class, fld, T, wepname)
236 #define W_UPDATE_BEGIN(class) \
237 METHOD(class, wr_update, void(class this)) \
239 noref entity b = this.baseline; \
242 b = this.baseline = new_pure(baseline); \
243 b.baseline_target = this; \
246 #define _W_UPDATE(class, fld, T, wepname) \
248 T it = _W_PROP_CVAR(wepname, fld); \
249 b.wepvar_##fld = this.wepvar_##fld; \
250 this.wepvar_##fld = it; \
253 #define _W_UPDATE(class, fld, T, wepname)
255 #define W_UPDATE_END() }
257 #define W_UPDATE_BEGIN(class)
258 #define _W_UPDATE(class, fld, T, wepname)
259 #define W_UPDATE_END()
263 #define W_NET(class, wepname, fld, T, m) W_NET_##m(class, fld, T, wepname)
264 #define W_NET_NONE(class, fld, T, wepname) _W_NET(class, fld, T, wepname)
265 #define W_NET_PRI(class, fld, T, wepname) _W_NET(class, primary_##fld, T, wepname)
266 #define W_NET_SEC(class, fld, T, wepname) _W_NET(class, secondary_##fld, T, wepname)
267 #define W_NET_BOTH(class, fld, T, wepname) \
268 W_NET_PRI(class, fld, T, wepname) \
269 W_NET_SEC(class, fld, T, wepname)
272 #define W_NET_BEGIN(class) METHOD(class, wr_net, void(class this, int i)) { int n = 0;
273 #define _W_NET(class, fld, T, wepname) \
275 if (++n == i) this.wepvar_##fld = Read_##T(); \
277 .void(
Weapon this,
int i) wr_net;
287 #define W_NET_END() }
290 #define W_NET_BEGIN(class) \
291 METHOD(class, wr_net, void(class this, int chan)) \
293 bool commit = false; \
295 #define _W_NET(class, fld, T, wepname) \
298 T it = this.wepvar_##fld; \
299 if (chan == MSG_ONE || it != this.baseline.wepvar_##fld) \
304 WriteHeader(chan, WeaponUpdate); \
305 WriteByte(chan, this.m_id); \
307 WriteByte(chan, i); Write_##T(chan, it); \
310 #define W_NET_END() if (commit) WriteByte(chan, 0); }
312 #define W_NET_BEGIN(class)
313 #define _W_NET(class, fld, T, wepname)
321#define WEP_CVAR(wep, name) (wep.wepvar_##name)
322#define WEP_CVAR_PRI(wep, name) WEP_CVAR(wep, primary_##name)
323#define WEP_CVAR_SEC(wep, name) WEP_CVAR(wep, secondary_##name)
324#define WEP_CVAR_BOTH(wep, isprimary, name) ((isprimary) ? WEP_CVAR_PRI(wep, name) : WEP_CVAR_SEC(wep, name))
327#define WEP_LAST (REGISTRY_COUNT(Weapons) - 1)
334#define WEP_IMPULSE_BEGIN 230
335#define WEP_IMPULSE_END bound(WEP_IMPULSE_BEGIN, WEP_IMPULSE_BEGIN + (REGISTRY_COUNT(Weapons) - 1) - 1, 253)
342 string inaccessible =
"";
348 if (it == WEP_Null)
continue;
353 it.m_unique_impulse =
imp;
355 localcmd(sprintf(
"alias weapon_%s \"impulse %d\"\n", it.netname,
imp));
357 inaccessible =
strcat(inaccessible,
"\n", it.netname);
360 if (inaccessible !=
"" &&
autocvar_developer > 0)
LOG_TRACEF(
"Impulse limit exceeded, weapon(s) will not be directly accessible: %s", inaccessible);
407CASE(WFRAME, DONTCHANGE)
418 #define G_SHOOTFROMFIXEDORIGIN autocvar_g_shootfromfixedorigin
420 string autocvar_cl_shootfromfixedorigin;
421 #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 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)
Declare 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
const int WEP_FLAG_MUTATORBLOCKED
const int WEP_FLAG_HIDDEN
const int WEP_FLAG_SPECIALATTACK