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)
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 Read_int() ReadInt24_t()
180 #define Read_float() ReadFloat()
181 #define Read_string() ReadString()
183 #define Write_int(to, f) WriteInt24_t(to, f)
184 #define Write_float(to, f) WriteFloat(to, f)
185 #define Write_string(to, f) WriteString(to, f)
188#define W_PROPS(L, class, prefix) \
189 L(W_PROP_BEGIN, W_PROP, W_PROP_END, class, prefix) \
190 L(W_CONFIG_BEGIN, W_CONFIG, W_CONFIG_END, class, prefix) \
191 L(W_UPDATE_BEGIN, W_UPDATE, W_UPDATE_END, class, prefix) \
192 L(W_NET_BEGIN, W_NET, W_NET_END, class, prefix) \
196 #define W_PROP(class, wepname, fld, T, m) W_PROP_##m(class, fld, T, wepname)
197 #define W_PROP_NONE(class, fld, T, wepname) _W_PROP(class, fld, T, wepname)
198 #define W_PROP_PRI(class, fld, T, wepname) _W_PROP(class, primary_##fld, T, wepname)
199 #define W_PROP_SEC(class, fld, T, wepname) _W_PROP(class, secondary_##fld, T, wepname)
200 #define W_PROP_BOTH(class, fld, T, wepname) \
201 W_PROP_PRI(class, fld, T, wepname) \
202 W_PROP_SEC(class, fld, T, wepname)
203 #define W_PROP_BEGIN(class)
205 #define _W_PROP(class, fld, T, wepname) \
206 T _W_PROP_CVAR(wepname, fld); \
207 ATTRIB(class, wepvar_##fld, T, _W_PROP_CVAR(wepname, fld));
208 #define _W_PROP_CVAR(wepname, fld) autocvar_g_balance_##wepname##_##fld
210 #define _W_PROP(class, fld, T, wepname) ATTRIB(class, wepvar_##fld, T);
212 #define _W_PROP(class, fld, T, wepname)
218 #define W_CONFIG(class, wepname, fld, T, m) W_CONFIG_##m(class, fld, T, wepname)
219 #define W_CONFIG_NONE(class, fld, T, wepname) _W_CONFIG(class, fld, T, wepname)
220 #define W_CONFIG_PRI(class, fld, T, wepname) _W_CONFIG(class, primary_##fld, T, wepname)
221 #define W_CONFIG_SEC(class, fld, T, wepname) _W_CONFIG(class, secondary_##fld, T, wepname)
222 #define W_CONFIG_BOTH(class, fld, T, wepname) \
223 W_CONFIG_PRI(class, fld, T, wepname) \
224 W_CONFIG_SEC(class, fld, T, wepname)
226 #define W_CONFIG_BEGIN(class) METHOD(class, wr_config, void(class this)) {
227 #define _W_CONFIG(class, fld, T, wepname) if (#wepname == this.netname) WEP_CONFIG_WRITE_CVARS(wepname, fld, T);
228 #define W_CONFIG_END() }
230 #define W_CONFIG_BEGIN(class)
231 #define _W_CONFIG(class, fld, T, wepname)
232 #define W_CONFIG_END()
236 #define W_UPDATE(class, wepname, fld, T, m) W_UPDATE_##m(class, fld, T, wepname)
237 #define W_UPDATE_NONE(class, fld, T, wepname) _W_UPDATE(class, fld, T, wepname)
238 #define W_UPDATE_PRI(class, fld, T, wepname) _W_UPDATE(class, primary_##fld, T, wepname)
239 #define W_UPDATE_SEC(class, fld, T, wepname) _W_UPDATE(class, secondary_##fld, T, wepname)
240 #define W_UPDATE_BOTH(class, fld, T, wepname) \
241 W_UPDATE_PRI(class, fld, T, wepname) \
242 W_UPDATE_SEC(class, fld, T, wepname)
245 #define W_UPDATE_BEGIN(class) \
246 METHOD(class, wr_update, void(class this)) \
248 noref entity b = this.baseline; \
251 b = this.baseline = new_pure(baseline); \
252 b.baseline_target = this; \
255 #define _W_UPDATE(class, fld, T, wepname) \
257 T it = _W_PROP_CVAR(wepname, fld); \
258 b.wepvar_##fld = this.wepvar_##fld; \
259 this.wepvar_##fld = it; \
262 #define _W_UPDATE(class, fld, T, wepname)
264 #define W_UPDATE_END() }
266 #define W_UPDATE_BEGIN(class)
267 #define _W_UPDATE(class, fld, T, wepname)
268 #define W_UPDATE_END()
272 #define W_NET(class, wepname, fld, T, m) W_NET_##m(class, fld, T, wepname)
273 #define W_NET_NONE(class, fld, T, wepname) _W_NET(class, fld, T, wepname)
274 #define W_NET_PRI(class, fld, T, wepname) _W_NET(class, primary_##fld, T, wepname)
275 #define W_NET_SEC(class, fld, T, wepname) _W_NET(class, secondary_##fld, T, wepname)
276 #define W_NET_BOTH(class, fld, T, wepname) \
277 W_NET_PRI(class, fld, T, wepname) \
278 W_NET_SEC(class, fld, T, wepname)
281 #define W_NET_BEGIN(class) \
282 METHOD(class, wr_net, void(class this, int i)) \
285 #define _W_NET(class, fld, T, wepname) \
288 this.wepvar_##fld = Read_##T(); \
290 #define W_NET_END() \
292 .void(
Weapon this,
int i) wr_net;
302 #define W_NET_BEGIN(class) \
303 METHOD(class, wr_net, void(class this, int chan)) \
305 bool commit = false; \
307 #define _W_NET(class, fld, T, wepname) \
310 T it = this.wepvar_##fld; \
311 if (chan == MSG_ONE || it != this.baseline.wepvar_##fld) \
316 WriteHeader(chan, WeaponUpdate); \
317 WriteRegistered(Weapons, chan, this); \
319 WriteByte(chan, i); \
320 Write_##T(chan, it); \
323 #define W_NET_END() \
325 WriteByte(chan, 0); \
328 #define W_NET_BEGIN(class)
329 #define _W_NET(class, fld, T, wepname)
337#define WEP_CVAR(wep, name) (wep.wepvar_##name)
338#define WEP_CVAR_PRI(wep, name) WEP_CVAR(wep, primary_##name)
339#define WEP_CVAR_SEC(wep, name) WEP_CVAR(wep, secondary_##name)
340#define WEP_CVAR_BOTH(wep, isprimary, name) ((isprimary) ? WEP_CVAR_PRI(wep, name) : WEP_CVAR_SEC(wep, name))
343#define WEP_LAST (REGISTRY_COUNT(Weapons) - 1)
350#define WEP_IMPULSE_BEGIN 230
351#define WEP_IMPULSE_END bound(WEP_IMPULSE_BEGIN, WEP_IMPULSE_BEGIN + (REGISTRY_COUNT(Weapons) - 1) - 1, 253)
358 string inaccessible =
"";
374 it.m_unique_impulse =
imp;
377 localcmd(sprintf(
"alias weapon_%s \"impulse %d\"\n", it.netname,
imp));
380 inaccessible =
strcat(inaccessible,
"\n", it.netname);
384 LOG_TRACEF(
"Impulse limit exceeded, weapon(s) will not be directly accessible: %s", inaccessible);
432CASE(WFRAME, DONTCHANGE)
443 #define G_SHOOTFROMFIXEDORIGIN autocvar_g_shootfromfixedorigin
445 string autocvar_cl_shootfromfixedorigin;
446 #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)
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