X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fall.qh;h=b771984f212b1b4ef3a680099e19e7059600662e;hb=930ef452a1216c30d8aea486b634db1d542506c2;hp=30de42cd9f1051bfb550c140ca0ee96db1aa0848;hpb=fcf4579b494a225ae17c64ccb3acf802c841245c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/all.qh b/qcsrc/common/monsters/all.qh index 30de42cd9..b771984f2 100644 --- a/qcsrc/common/monsters/all.qh +++ b/qcsrc/common/monsters/all.qh @@ -1,56 +1,23 @@ -#include "../registry.qh" - #ifndef MONSTERS_ALL_H #define MONSTERS_ALL_H -void RegisterMonsters(); -const int MON_MAXCOUNT = 24; -entity monster_info[MON_MAXCOUNT]; -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, class, monsterid) #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) -#include "../util.qh" +string M_Model(string m_mdl); -// monster requests -const int MR_SETUP = 1; // (SERVER) setup monster data -const int MR_THINK = 2; // (SERVER) logic to run every frame -const int MR_DEATH = 3; // (SERVER) called when monster dies -const int MR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this monster +REGISTRY(Monsters, BITS(5)) +#define Monsters_from(i) _Monsters_from(i, MON_Null) +#define get_monsterinfo(i) Monsters_from(i) +REGISTER_REGISTRY(Monsters) +REGISTRY_CHECK(Monsters) +const int MON_FIRST = 1; +#define MON_LAST (Monsters_COUNT - 1) +/** If you register a new monster, make sure to add it to all.inc */ +#define REGISTER_MONSTER(id, inst) REGISTER(Monsters, MON, id, monsterid, inst) -// special spawn flags -const int MONSTER_RESPAWN_DEATHPOINT = 16; // re-spawn where we died -const int MONSTER_TYPE_FLY = 32; -const int MONSTER_TYPE_SWIM = 64; -const int MONSTER_SIZE_BROKEN = 128; // TODO: remove when bad models are replaced -const int MON_FLAG_SUPERMONSTER = 256; // incredibly powerful monster -const int MON_FLAG_RANGED = 512; // monster shoots projectiles -const int MON_FLAG_MELEE = 1024; +REGISTER_MONSTER(Null, NEW(Monster)); -// entity properties of monsterinfo: -.string netname; // short name -.string mdl; // currently a copy of the model -.string model; // full name of model -.int spawnflags; -.vector mins, maxs; // monster hitbox size -// other useful macros -#define MON_ACTION(monstertype,mrequest) (get_monsterinfo(monstertype)).monster_func(mrequest) -#define M_NAME(monstertype) (get_monsterinfo(monstertype)).monster_name +#include "all.inc" #endif