X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fall.qh;h=0f2f13c5e40c0b036228092bf8ae143af35bfbef;hb=1556aa4ea70b3b275afb1cb4587e555fb44f71c3;hp=570254e9242e3e43c597efa2fc7ab07773d8585c;hpb=9ca8996c2022c821fe36f687b84034bec8269b55;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/all.qh b/qcsrc/common/monsters/all.qh index 570254e92..0f2f13c5e 100644 --- a/qcsrc/common/monsters/all.qh +++ b/qcsrc/common/monsters/all.qh @@ -1,6 +1,29 @@ #ifndef MONSTERS_ALL_H #define MONSTERS_ALL_H +void RegisterMonsters(); +const int MON_MAXCOUNT = 24; +entity monster_info[MON_MAXCOUNT], monster_info_first, monster_info_last; +entity get_monsterinfo(float id); +int MON_COUNT; +const int MON_FIRST = 1; +#define MON_LAST (MON_FIRST + MON_COUNT - 1) +/** If you register a new monster, make sure to add it to all.inc */ +#define REGISTER_MONSTER(id, class) REGISTER(RegisterMonsters, MON, monster_info, MON_COUNT, id, monsterid, NEW(class)) +#include "monster.qh" +#define REGISTER_MONSTER_SIMPLE(id, monsterflags, min_s, max_s, modelname, shortname, mname) \ + REGISTER_MONSTER(id, Monster) { \ + this.netname = shortname; \ + this.monster_name = mname; \ + this.mdl = modelname; \ + this.spawnflags = monsterflags; \ + this.mins = min_s; \ + this.maxs = max_s; \ + this.model = strzone(strcat("models/monsters/", modelname)); \ + } \ + REGISTER_INIT(MON, id) +REGISTER_REGISTRY(RegisterMonsters) + #include "../util.qh" // monster requests @@ -11,9 +34,6 @@ const int MR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this monste const int MR_PAIN = 5; // (SERVER) called when monster is damaged const int MR_ANIM = 6; // (BOTH?) sets animations for monster -// functions -entity get_monsterinfo(float id); - // special spawn flags const int MONSTER_RESPAWN_DEATHPOINT = 16; // re-spawn where we died const int MONSTER_TYPE_FLY = 32; @@ -23,16 +43,13 @@ const int MON_FLAG_SUPERMONSTER = 256; // incredibly powerful monster const int MON_FLAG_RANGED = 512; // monster shoots projectiles const int MON_FLAG_MELEE = 1024; -// entity properties of monsterinfo -.float monsterid; // MON_... +// entity properties of monsterinfo: .string netname; // short name -.string monster_name; // human readable name -.float(float) monster_func; // M_... -.float(float attack_type) monster_attackfunc; // attack function .string mdl; // currently a copy of the model .string model; // full name of model .int spawnflags; .vector mins, maxs; // monster hitbox size +.bool(int) monster_attackfunc; // animations .vector anim_blockend; @@ -49,43 +66,4 @@ const int MON_FLAG_MELEE = 1024; // other useful macros #define MON_ACTION(monstertype,mrequest) (get_monsterinfo(monstertype)).monster_func(mrequest) -// ===================== -// Monster Registration -// ===================== - -float m_null(float dummy); -void register_monster(float id, float(float) func, float(float) attackfunc, float monsterflags, vector min_s, vector max_s, string modelname, string shortname, string mname); -void register_monsters_done(); - -const int MON_MAXCOUNT = 24; // increase as necessary, limit is infinite, but keep loops small! -const int MON_FIRST = 1; -int MON_COUNT; -int MON_LAST; - -#define REGISTER_MONSTER_2(id,func,attackfunc,monsterflags,min_s,max_s,modelname,shortname,mname) \ - int id; \ - float func(float); \ - float attackfunc(float); \ - void RegisterMonsters_##id() \ - { \ - MON_LAST = (id = MON_FIRST + MON_COUNT); \ - ++MON_COUNT; \ - register_monster(id,func,attackfunc,monsterflags,min_s,max_s,modelname,shortname,mname); \ - } \ - ACCUMULATE_FUNCTION(RegisterMonsters, RegisterMonsters_##id) -#ifdef SVQC -#define REGISTER_MONSTER(id,func,attackfunc,monsterflags,min_s,max_s,modelname,shortname,mname) \ - REGISTER_MONSTER_2(MON_##id,func,attackfunc,monsterflags,min_s,max_s,modelname,shortname,mname) -#elif defined(CSQC) -#define REGISTER_MONSTER(id,func,attackfunc,monsterflags,min_s,max_s,modelname,shortname,mname) \ - REGISTER_MONSTER_2(MON_##id,func,m_null,monsterflags,min_s,max_s,modelname,shortname,mname) -#else -#define REGISTER_MONSTER(id,func,attackfunc,monsterflags,min_s,max_s,modelname,shortname,mname) \ - REGISTER_MONSTER_2(MON_##id,m_null,m_null,monsterflags,min_s,max_s,modelname,shortname,mname) -#endif - -#include "all.inc" - -#undef REGISTER_MONSTER -ACCUMULATE_FUNCTION(RegisterMonsters, register_monsters_done); #endif