X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon.qh;h=ec6e14eb668d8ef63e33cb6aaf2577fc464033cb;hb=5ad35ed58c9eb8f52afd13db42f712d308d807df;hp=c4f16cd2139ab03ff633a8f9ebc33a3f55365095;hpb=45d8904a100765555e622598a39967963733df1d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/weapon.qh b/qcsrc/common/weapons/weapon.qh index c4f16cd21..ec6e14eb6 100644 --- a/qcsrc/common/weapons/weapon.qh +++ b/qcsrc/common/weapons/weapon.qh @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #include #ifdef SVQC @@ -45,7 +45,7 @@ CLASS(Weapon, Object) /** control what happens when this weapon is spawned */ METHOD(Weapon, m_spawnfunc_hookreplace, Weapon(Weapon this, entity e)) { return this; } /** M: ammotype : main ammo type */ - ATTRIB(Weapon, ammo_type, int, RES_NONE); + ATTRIB(Weapon, ammo_type, Resource, RES_NONE); /** M: impulse : weapon impulse */ ATTRIB(Weapon, impulse, int, -1); /** M: flags : WEPSPAWNFLAG_... combined */ @@ -56,8 +56,14 @@ CLASS(Weapon, Object) ATTRIB(Weapon, wpcolor, vector, '0 0 0'); /** M: modelname : name of model (without g_ v_ or h_ prefixes) */ ATTRIB(Weapon, mdl, string, ""); +#ifdef GAMEQC /** M: model MDL_id_ITEM */ ATTRIB(Weapon, m_model, entity); + /** M: flash model MDL_id_MUZZLEFLASH */ + ATTRIB(Weapon, m_muzzlemodel, entity, MDL_Null); + /** M: flash effect EFFECT_id_MUZZLEFLASH */ + ATTRIB(Weapon, m_muzzleeffect, entity); +#endif /** M: crosshair : per-weapon crosshair: "CrosshairImage Size" */ ATTRIB(Weapon, w_crosshair, string, "gfx/crosshairmoustache"); /** A: crosshair : per-weapon crosshair size (argument two of "crosshair" field) */ @@ -99,7 +105,7 @@ CLASS(Weapon, Object) METHOD(Weapon, wr_playerdeath, void(Weapon this, entity actor, .entity weaponentity)) {} /** (SERVER) logic to run when weapon is lost */ METHOD(Weapon, wr_gonethink, void(Weapon this, entity actor, .entity weaponentity)) {} - /** (ALL) dump weapon cvars to config in data directory (see: sv_cmd dumpweapons) */ + /** (SERVER) dump weapon cvars to config in data directory (see: sv_cmd dumpweapons) */ METHOD(Weapon, wr_config, void(Weapon this)) {} /** (BOTH) weapon specific zoom reticle */ METHOD(Weapon, wr_zoom, bool(Weapon this, entity actor)) { @@ -110,7 +116,7 @@ CLASS(Weapon, Object) METHOD(Weapon, wr_zoomdir, bool(Weapon this)) {return false;} /** (CLIENT) weapon specific view model */ METHOD(Weapon, wr_viewmodel, string(Weapon this, entity wep)) { return string_null; } - /** (CLIENT) weapon specific glow */ + /** (BOTH) weapon specific glow */ METHOD(Weapon, wr_glow, vector(Weapon this, entity actor, entity wepent)) { return '0 0 0'; } /** (SERVER) the weapon is dropped */ METHOD(Weapon, wr_drop, void(Weapon this, entity actor, .entity weaponentity)) {} @@ -129,6 +135,9 @@ void weapon_defaultspawnfunc(entity this, Weapon e); #define SPAWNFUNC_WEAPON(name, weapon) \ spawnfunc(name) { weapon_defaultspawnfunc(this, weapon); } +#define SPAWNFUNC_WEAPON_COND(name, cond, wep1, wep2) \ + SPAWNFUNC_WEAPON(name, (cond ? wep1 : wep2)) + #else #define SPAWNFUNC_WEAPON(name, weapon) @@ -198,6 +207,8 @@ const int WEP_FLAG_DUALWIELD = BIT(11); // weapon can be dual wielded const int WEP_FLAG_NODUAL = BIT(12); // weapon doesn't work well with dual wielding (fireball etc just explode on fire), doesn't currently prevent anything const int WEP_FLAG_PENETRATEWALLS = BIT(13); // weapon has high calibur bullets that can penetrate thick walls (WEAPONTODO) const int WEP_FLAG_BLEED = BIT(14); // weapon pierces and causes bleeding (used for damage effects) +const int WEP_FLAG_NOTRUEAIM = BIT(15); // weapon doesn't aim directly at targets +const int WEP_FLAG_SPECIALATTACK = BIT(16); // marked as a special attack (not a true weapon), hidden from most weapon lists // variables: string weaponorder_byid; @@ -212,11 +223,16 @@ string W_FixWeaponOrder_AllowIncomplete(entity this, string order); string W_FixWeaponOrder_ForceComplete(string order); WepSet W_RandomWeapons(entity e, WepSet remaining, int n); -string GetAmmoPicture(int ammotype); +string GetAmmoPicture(Resource ammotype); + +string GetAmmoName(Resource ammotype); + +entity GetAmmoItem(Resource ammotype); #ifdef CSQC -int GetAmmoTypeFromNum(int i); -int GetAmmoStat(int ammotype); +Resource GetAmmoTypeFromNum(int i); + +int GetAmmoStat(Resource ammotype); #endif string W_Sound(string w_snd);