]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Monsters: remove MON_ACTION
authorTimePath <andrew.hardaker1995@gmail.com>
Fri, 2 Oct 2015 23:03:20 +0000 (09:03 +1000)
committerTimePath <andrew.hardaker1995@gmail.com>
Fri, 2 Oct 2015 23:05:19 +0000 (09:05 +1000)
qcsrc/common/animdecide.qc
qcsrc/common/monsters/monster.qh
qcsrc/common/monsters/monster/mage.qc
qcsrc/common/monsters/monster/shambler.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/monster/wyvern.qc
qcsrc/common/monsters/monster/zombie.qc
qcsrc/common/monsters/sv_monsters.qc
qcsrc/server/mutators/gamemode_invasion.qc

index 7e670ee73691974f8368504073e1a796c6dbe426..0db1a6afdfea74ce714a72b538901783bb3e06bb 100644 (file)
@@ -27,7 +27,7 @@ bool monsters_animoverride(entity e)
 
        if(!monster_id) { return false; }
 
-       MON_ACTION(monster_id, MR_ANIM);
+       monster_id.mr_anim(monster_id);
 
        vector none = '0 0 0';
        e.anim_duckwalk = e.anim_walk;
index 0fd2476948641c0e8b95b7f3ade124f4fa8e845f..0a78b7772292bbb884b9fce938b6a5b384375c0c 100644 (file)
@@ -27,13 +27,9 @@ const int MON_FLAG_RIDE = 4096; // monster can be ridden in special modes
 .vector anim_walk;
 .vector anim_spawn;
 
-bool m_null(entity thismon, int) { return false; }
-bool m_new(entity thismon, int);
-
 /** If you register a new monster, make sure to add it to all.inc */
 CLASS(Monster, Object)
     ATTRIB(Monster, monsterid, int, 0)
-    ATTRIB(Monster, monster_func, bool(Monster, int), m_new)
     /** attributes */
     ATTRIB(Monster, spawnflags, int, 0)
     /** human readable name */
@@ -46,34 +42,20 @@ CLASS(Monster, Object)
     ATTRIB(Monster, mins, vector, '-0 -0 -0')
     /** hitbox size */
     ATTRIB(Monster, maxs, vector, '0 0 0')
-ENDCLASS(Monster)
-
-// monster requests
-const int MR_SETUP = 1; // (SERVER) setup monster data
-.bool(Monster this) mr_setup;
-const int MR_THINK = 2; // (SERVER) logic to run every frame
-.bool(Monster this) mr_think;
-const int MR_DEATH = 3; // (SERVER) called when monster dies
-.bool(Monster this) mr_death;
-const int MR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this monster
-.bool(Monster this) mr_precache;
-const int MR_PAIN = 5; // (SERVER) called when monster is damaged
-.bool(Monster this) mr_pain;
-const int MR_ANIM = 6; // (BOTH?) sets animations for monster
-.bool(Monster this) mr_anim;
+    
+    /** (SERVER) setup monster data */
+    METHOD(Monster, mr_setup, bool(Monster this)) { return false; }
+    /** (SERVER) logic to run every frame */
+    METHOD(Monster, mr_think, bool(Monster this)) { return false; }
+    /** (SERVER) called when monster dies */
+    METHOD(Monster, mr_death, bool(Monster this)) { return false; }
+    /** (BOTH) precaches models/sounds used by this monster */
+    METHOD(Monster, mr_precache, bool(Monster this)) { return false; }
+    /** (SERVER) called when monster is damaged */
+    METHOD(Monster, mr_pain, bool(Monster this)) { return false; }
+    /** (BOTH?) sets animations for monster */
+    METHOD(Monster, mr_anim, bool(Monster this)) { return false; }
 
-// other useful macros
-#define MON_ACTION(mon,mrequest) mon.monster_func(mon, mrequest)
-#define _MON_ACTION(mon,mrequest) MON_ACTION(get_monsterinfo(mon), mrequest)
-
-bool m_new(entity this, int req) {
-    if (req == MR_SETUP) return this.mr_setup ? this.mr_setup(this) : false;
-    if (req == MR_THINK) return this.mr_think ? this.mr_think(this) : false;
-    if (req == MR_DEATH) return this.mr_death ? this.mr_death(this) : false;
-    if (req == MR_PRECACHE) return this.mr_precache ? this.mr_precache(this) : false;
-    if (req == MR_PAIN) return this.mr_pain ? this.mr_pain(this) : false;
-    if (req == MR_ANIM) return this.mr_anim ? this.mr_anim(this) : false;
-    return false;
-}
+ENDCLASS(Monster)
 
 #endif
index 63ebffc9c054f41938637c6346f433e0bdf46703..7194b7e844db521aa028b4dd1e2ec40879da7245 100644 (file)
@@ -18,7 +18,7 @@ ENDCLASS(Mage)
 
 REGISTER_MONSTER(MAGE, NEW(Mage)) {
 #ifndef MENUQC
-    MON_ACTION(this, MR_PRECACHE);
+    this.mr_precache(this);
 #endif
 }
 
index 2c6c74b0e2619cb6e5fd09dfe7f2768476a3dda3..40d0ef6a3f1274982d0eae2352ea2f256d8e93bc 100644 (file)
@@ -18,7 +18,7 @@ ENDCLASS(Shambler)
 
 REGISTER_MONSTER(SHAMBLER, NEW(Shambler)) {
 #ifndef MENUQC
-    MON_ACTION(this, MR_PRECACHE);
+    this.mr_precache(this);
 #endif
 }
 
index 539e66ad2058cc387bba14dc5dc2659f8059c37c..8f3bc11782aae7c026449209e76b616f5971eb3b 100644 (file)
@@ -18,7 +18,7 @@ ENDCLASS(Spider)
 
 REGISTER_MONSTER(SPIDER, NEW(Spider)) {
 #ifndef MENUQC
-    MON_ACTION(this, MR_PRECACHE);
+    this.mr_precache(this);
 #endif
 }
 
index 17b0a96d7bab0991ae8478f3e077739ebc11dca1..2b1c035edd002b12c22e47fe2d1fc30190c5a897 100644 (file)
@@ -18,7 +18,7 @@ ENDCLASS(Wyvern)
 
 REGISTER_MONSTER(WYVERN, NEW(Wyvern)) {
 #ifndef MENUQC
-    MON_ACTION(this, MR_PRECACHE);
+    this.mr_precache(this);
 #endif
 }
 
index 0e06e4ae8ee1ca6ceb3fae5d1f1276a0704a22d1..b9619be19ad5958c9797f8de4b1fd674f4ed2fd3 100644 (file)
@@ -18,7 +18,7 @@ ENDCLASS(Zombie)
 
 REGISTER_MONSTER(ZOMBIE, NEW(Zombie)) {
 #ifndef MENUQC
-    MON_ACTION(this, MR_PRECACHE);
+    this.mr_precache(this);
 #endif
 }
 
index e3e1de4b433d1254389a081c55a556e6e630a8a8..34bd6e5aa4cffb64c6de7793a873143f9c2d89a1 100644 (file)
@@ -471,7 +471,8 @@ void Monster_UpdateModel()
        self.anim_die2   = animfixfps(self, '9 1 0.01', '0 0 0');*/
 
        // then get the real values
-       _MON_ACTION(self.monsterid, MR_ANIM);
+       Monster mon = get_monsterinfo(self.monsterid);
+       mon.mr_anim(mon);
 }
 
 void Monster_Touch()
@@ -1037,7 +1038,8 @@ void Monster_Dead(entity attacker, float gibbed)
 
        CSQCModel_UnlinkEntity();
 
-       _MON_ACTION(self.monsterid, MR_DEATH);
+       Monster mon = get_monsterinfo(self.monsterid);
+       mon.mr_death(mon);
 
        if(self.candrop && self.weapon)
                W_ThrowNewWeapon(self, self.weapon, 0, self.origin, randomvec() * 150 + '0 0 325');
@@ -1070,7 +1072,8 @@ void Monster_Damage(entity inflictor, entity attacker, float damage, int deathty
        damage_take = take;
        frag_attacker = attacker;
        frag_deathtype = deathtype;
-       _MON_ACTION(self.monsterid, MR_PAIN);
+       Monster mon = get_monsterinfo(self.monsterid);
+       mon.mr_pain(mon);
        take = damage_take;
 
        if(take)
@@ -1231,7 +1234,8 @@ void Monster_Think()
                return;
        }
 
-       if(_MON_ACTION(self.monsterid, MR_THINK))
+       Monster mon = get_monsterinfo(self.monsterid);
+       if(mon.mr_think(mon))
                Monster_Move(self.speed2, self.speed, self.stopspeed);
 
        Monster_Anim();
@@ -1241,7 +1245,8 @@ void Monster_Think()
 
 float Monster_Spawn_Setup()
 {SELFPARAM();
-       _MON_ACTION(self.monsterid, MR_SETUP);
+       Monster mon = get_monsterinfo(self.monsterid);
+       mon.mr_setup(mon);
 
        // ensure some basic needs are met
        if(!self.health) { self.health = 100; }
index bb36e26542a0ff3262e167163ea7e747379d8cc0..6bf1b7790b97663a0089852a49deb4b49ac2a585 100644 (file)
@@ -13,8 +13,10 @@ void spawnfunc_invasion_spawnpoint()
        self.classname = "invasion_spawnpoint";
 
        if(autocvar_g_invasion_zombies_only) // precache only if it hasn't been already
-       if(self.monsterid)
-               _MON_ACTION(self.monsterid, MR_PRECACHE);
+       if(self.monsterid) {
+               Monster mon = get_monsterinfo(self.monsterid);
+               mon.mr_precache(mon);
+       }
 }
 
 float invasion_PickMonster(float supermonster_count)
@@ -430,9 +432,10 @@ void invasion_DelayedInit() // Do this check with a delay so we can wait for tea
 
 void invasion_Initialize()
 {
-       if(autocvar_g_invasion_zombies_only)
-               MON_ACTION(MON_ZOMBIE, MR_PRECACHE);
-       else
+       if(autocvar_g_invasion_zombies_only) {
+               Monster mon = MON_ZOMBIE;
+               mon.mr_precache(mon);
+       } else
        {
                float i;
                entity mon;
@@ -442,7 +445,7 @@ void invasion_Initialize()
                        if((mon.spawnflags & MONSTER_TYPE_FLY) || (mon.spawnflags & MONSTER_TYPE_SWIM))
                                continue; // flying/swimming monsters not yet supported
 
-                       MON_ACTION(mon, MR_PRECACHE);
+                       mon.mr_precache(mon);
                }
        }