X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fall.qh;h=c9e5ad37ba6448ed85374378affde2e871a6197c;hb=e2763aba040ce6b50c64165ac93e6927309ddb1d;hp=45adf5e5906e3e0ac8988e5712ad9733a5ce1e88;hpb=6ba6b6eb811c3fe293cfdd883e00344caf68f7a9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/all.qh b/qcsrc/common/monsters/all.qh index 45adf5e59..c9e5ad37b 100644 --- a/qcsrc/common/monsters/all.qh +++ b/qcsrc/common/monsters/all.qh @@ -1,57 +1,16 @@ -#include "../registry.qh" +#pragma once -#ifndef MONSTERS_ALL_H -#define MONSTERS_ALL_H +string M_Model(string m_mdl); -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; +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 (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 -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 +#define MON_LAST (Monsters_COUNT - 1) +#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; - -// 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 "monster.qh" -#endif +REGISTER_MONSTER(Null, NEW(Monster));