X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fweapons%2Fweaponsystem.qh;h=c0e0c221fff9124a3a5bc81a4f6c66a9e184c760;hb=812dd3215ba88d7bcd2b38b9c4acd19d84a5152b;hp=4ddf5a5159eac5adf534d6c61cafd0dc8a933445;hpb=e57fd111a3279a4aa4789e2c72f9c819a56c7be9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/weapons/weaponsystem.qh b/qcsrc/server/weapons/weaponsystem.qh index 4ddf5a515..c0e0c221f 100644 --- a/qcsrc/server/weapons/weaponsystem.qh +++ b/qcsrc/server/weapons/weaponsystem.qh @@ -1,19 +1,56 @@ #pragma once -#include -#include +#include + +float autocvar_g_weaponspreadfactor; +float autocvar_g_weaponforcefactor; +float autocvar_g_weapondamagefactor; +float autocvar_g_weaponratefactor; +float autocvar_g_weaponspeedfactor; + +#define INDEPENDENT_ATTACK_FINISHED 1 + +// there is 2 weapon tics that can run in one server frame +const int W_TICSPERFRAME = 2; + +// VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies) +.float weapon_nextthink; +.void(Weapon thiswep, entity actor, .entity weaponentity, int fire) weapon_think; float internalteam; -float weaponswapping; entity weapon_dropevent_item; +// reset to 0 on weapon switch +// may be useful to all weapons +.float bulletcounter; + ..entity weaponentity_fld; +.float weapon_load[REGISTRY_MAX(Weapons)]; +.int ammo_none; // used by the reloading system, must always be 0 +.int clip_load; +.int old_clip_load; +.int clip_size; + +.float attack_finished_for[REGISTRY_MAX(Weapons) * MAX_WEAPONSLOTS]; +.float attack_finished_single[MAX_WEAPONSLOTS]; +#if INDEPENDENT_ATTACK_FINISHED +#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).(attack_finished_for[((w) - WEP_FIRST) * MAX_WEAPONSLOTS + (slot)])) +#else +#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).attack_finished_single[slot]) +#endif +#define ATTACK_FINISHED(ent, w) ATTACK_FINISHED_FOR(ent, ent.(w).m_weapon.m_id, weaponslot(w)) + void CL_SpawnWeaponentity(entity e, .entity weaponentity); +void w_clear(Weapon thiswep, entity actor, .entity weaponentity, int fire); + +void w_ready(Weapon thiswep, entity actor, .entity weaponentity, int fire); + vector CL_Weapon_GetShotOrg(float wpn); -bool forbidWeaponUse(entity player); +bool weaponUseForbidden(entity player); +bool weaponLocked(entity player); void W_AttachToShotorg(entity actor, .entity weaponentity, entity flash, vector offset); @@ -23,6 +60,8 @@ void W_DropEvent(.void(Weapon, entity actor, .entity) event, entity player, floa void W_Reload(entity actor, .entity weaponentity, float sent_ammo_min, Sound sent_sound); +void W_ResetGunAlign(entity player, int preferred_alignment); + void W_WeaponFrame(Player actor, .entity weaponentity); float W_WeaponRateFactor(entity this); @@ -36,3 +75,5 @@ bool weapon_prepareattack_check(Weapon thiswep, entity actor, .entity weaponenti void weapon_prepareattack_do(entity actor, .entity weaponentity, float secondary, float attacktime); void weapon_thinkf(entity actor, .entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor, .entity weaponentity, int fire) func); + +//REPLICATE_APPLYCHANGE("cl_gunalign", { W_ResetGunAlign(this, store.cvar_cl_gunalign); });