]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Rename tarbaby to slime & begin cleanup of monster_attack_melee function
authorMario <mario.mario@y7mail.com>
Sat, 27 Apr 2013 18:18:41 +0000 (04:18 +1000)
committerMario <mario.mario@y7mail.com>
Sat, 27 Apr 2013 18:18:41 +0000 (04:18 +1000)
22 files changed:
monsters.cfg
qcsrc/client/monsters.qc
qcsrc/common/deathtypes.qh
qcsrc/common/notifications.qh
qcsrc/server/monsters/lib/defs.qh
qcsrc/server/monsters/lib/monsters_early.qh
qcsrc/server/monsters/monster/demon.qc
qcsrc/server/monsters/monster/dog.qc
qcsrc/server/monsters/monster/fish.qc
qcsrc/server/monsters/monster/hknight.qc
qcsrc/server/monsters/monster/knight.qc
qcsrc/server/monsters/monster/ogre.qc
qcsrc/server/monsters/monster/shalrath.qc
qcsrc/server/monsters/monster/shambler.qc
qcsrc/server/monsters/monster/slime.qc [new file with mode: 0644]
qcsrc/server/monsters/monster/soldier.qc
qcsrc/server/monsters/monster/spider.qc
qcsrc/server/monsters/monster/tarbaby.qc [deleted file]
qcsrc/server/monsters/monster/zombie.qc
qcsrc/server/monsters/monsters.qh
qcsrc/server/mutators/gamemode_towerdefense.qc
qcsrc/server/mutators/gamemode_towerdefense.qh

index 641d31ce36495b6196c31a98e4378f31f6dea92f..0dc489104d298f979075de5941af771fd2210aac 100644 (file)
@@ -130,13 +130,13 @@ set g_monster_dog_drop_size small "Size of the item Rottweilers drop. Possible v
 set g_monster_dog_speed_walk 60 "Rottweiler walk speed"
 set g_monster_dog_speed_run 120 "Rottweiler run speed"
 
-// Spawn
-set g_monster_tarbaby 1 "Enable Spawns"
-set g_monster_tarbaby_health 80 "Spawn health"
-set g_monster_tarbaby_drop ammo "Spawn drops this item when it explodes"
-set g_monster_tarbaby_drop_size rockets "Size of the item Spawns drop. Possible values are: small, medium, large"
-set g_monster_tarbaby_speed_walk 20 "Spawn walk speed"
-set g_monster_tarbaby_speed_run 30 "Spawn run speed"
+// Slime
+set g_monster_slime 1 "Enable Slime"
+set g_monster_slime_health 80 "Slime health"
+set g_monster_slime_drop ammo "Slime drops this item when it explodes"
+set g_monster_slime_drop_size rockets "Size of the item Slime drops. Possible values are: small, medium, large"
+set g_monster_slime_speed_walk 20 "Slime walk speed"
+set g_monster_slime_speed_run 30 "Slime run speed"
 
 // Hell-Knight
 set g_monster_hellknight 1 "Enable Hell-Knights"
index 051f0c6e82fe4c11ac1b1762734a0f12b1918df9..e8b8d990fe24aa0d17e7c1ce617e69266dab51fd 100644 (file)
@@ -59,9 +59,9 @@ void monster_precache(float _mid)
                        precache_model(DOG_MODEL);
                        break;
                }
-               case MONSTER_TARBABY:
+               case MONSTER_SLIME:
                {
-                       precache_model(TARBABY_MODEL);
+                       precache_model(SLIME_MODEL);
                        precache_sound("weapons/rocket_impact.wav");
                        break;
                }
@@ -169,12 +169,12 @@ void monster_mid2info(float _mid)
                        mid2info_max = DOG_MAX;
                        break;
                }
-               case MONSTER_TARBABY:
+               case MONSTER_SLIME:
                {
-                       mid2info_model = TARBABY_MODEL;
-                       mid2info_name = "Spawn";
-                       mid2info_min = TARBABY_MIN;
-                       mid2info_max = TARBABY_MAX;
+                       mid2info_model = SLIME_MODEL;
+                       mid2info_name = "Slime";
+                       mid2info_min = SLIME_MIN;
+                       mid2info_max = SLIME_MAX;
                        break;
                }
                case MONSTER_HELLKNIGHT:
index 5b84d63ec6221efd5c33578ff09575a009e45ba9..81a53e7f1bd386576a609099452b7e772a5cd89a 100644 (file)
@@ -36,7 +36,7 @@
        DEATHTYPE(DEATH_MONSTER_MARINE_SLAP,    DEATH_SELF_MON_MARINE_SLAP,                     NO_MSG,                                            NORMAL_POS) \
        DEATHTYPE(DEATH_MONSTER_SPIDER,                 DEATH_SELF_MON_SPIDER,                          NO_MSG,                                            NORMAL_POS) \
        DEATHTYPE(DEATH_MONSTER_SPIDER_FIRE,    DEATH_SELF_MON_SPIDER_FIRE,                     NO_MSG,                                            NORMAL_POS) \
-       DEATHTYPE(DEATH_MONSTER_TARBABY,                DEATH_SELF_MON_TARBABY,                         NO_MSG,                                            NORMAL_POS) \
+       DEATHTYPE(DEATH_MONSTER_SLIME,                  DEATH_SELF_MON_SLIME,                           NO_MSG,                                            NORMAL_POS) \
        DEATHTYPE(DEATH_MONSTER_SCRAG,                  DEATH_SELF_MON_SCRAG,                           NO_MSG,                                            NORMAL_POS) \
        DEATHTYPE(DEATH_MONSTER_ZOMBIE_JUMP,    DEATH_SELF_MON_ZOMBIE_JUMP,                     NO_MSG,                                            NORMAL_POS) \
        DEATHTYPE(DEATH_MONSTER_ZOMBIE_MELEE,   DEATH_SELF_MON_ZOMBIE_MELEE,            NO_MSG,                                            DEATH_MONSTER_LAST) \
index f7cca6caa122d8363f857fb0925f723b18d49506..d081e1e65913abafcb2bbcd1fa79e793d2e63bf0 100644 (file)
@@ -308,7 +308,7 @@ void Send_Notification_WOVA(
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_MARINE,              2, 1, "s1 s2loc spree_lost", "s1",           "notify_death",                 _("^BG%s^K1 was gunned down by a Marine%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SPIDER,              2, 1, "s1 s2loc spree_lost", "s1",           "notify_death",                 _("^BG%s^K1 was bitten by a Spider%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SPIDER_FIRE,     2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was incinerated by a Spider%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_TARBABY,         2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 came too close to an exploding Pumpkin%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SLIME,           2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was blown up by a Slime%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_SCRAG,           2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was cursed by a Scrag%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_JUMP,     2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 joins the Zombies%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ZOMBIE_MELEE,    2, 1, "s1 s2loc spree_lost", "s1",               "notify_death",                 _("^BG%s^K1 was given kung fu lessons by a Zombie%s%s\n"), "") \
@@ -664,7 +664,7 @@ void Send_Notification_WOVA(
        MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MARINE,                                NO_MSG,        INFO_DEATH_SELF_MON_MARINE,                                CENTER_DEATH_SELF_MONSTER) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER,                                NO_MSG,        INFO_DEATH_SELF_MON_SPIDER,                                CENTER_DEATH_SELF_MONSTER) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER_FIRE,                   NO_MSG,        INFO_DEATH_SELF_MON_SPIDER_FIRE,                   CENTER_DEATH_SELF_MONSTER) \
-       MSG_MULTI_NOTIF(1, DEATH_SELF_MON_TARBABY,                               NO_MSG,        INFO_DEATH_SELF_MON_TARBABY,                       CENTER_DEATH_SELF_MONSTER) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SLIME,                                 NO_MSG,        INFO_DEATH_SELF_MON_SLIME,                                 CENTER_DEATH_SELF_MONSTER) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SCRAG,                                 NO_MSG,        INFO_DEATH_SELF_MON_SCRAG,                                 CENTER_DEATH_SELF_MONSTER) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_JUMP,                   NO_MSG,        INFO_DEATH_SELF_MON_ZOMBIE_JUMP,                   CENTER_DEATH_SELF_MONSTER) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_MELEE,                  NO_MSG,        INFO_DEATH_SELF_MON_ZOMBIE_MELEE,                  CENTER_DEATH_SELF_MONSTER) \
index 0e72d578ac42890535c81d1846c6c03e9982e55b..fbeadc6342257ac7256c03976a9e45b7c3be1e52 100644 (file)
@@ -1,4 +1,4 @@
-.void()                attack_melee;
+.float()       attack_melee;
 .float()       attack_ranged;
 .float()       checkattack;
 
index 3493b44a78f9ad3c246c2732e598727a9186a00d..0c0cdfcd0d669825d5146ae4a6dbd5c649df6779 100644 (file)
@@ -30,7 +30,7 @@ float MONSTER_KNIGHT          = 6;
 float MONSTER_MARINE           = 7;
 float MONSTER_SCRAG            = 8;
 float MONSTER_DOG                      = 9;
-float MONSTER_TARBABY          = 10;
+float MONSTER_SLIME            = 10;
 float MONSTER_HELLKNIGHT       = 11;
 float MONSTER_FISH                     = 12;
 float MONSTER_MAGE                     = 13;
index dd3df70adb99dc0e373e0c3aeb675577825ce384..634bdfc1bb55ced254392edace55911976ad3a13 100644 (file)
@@ -31,12 +31,14 @@ void demon_think ()
        monster_move(autocvar_g_monster_demon_speed_run, autocvar_g_monster_demon_speed_walk, 100, demon_anim_run, demon_anim_walk, demon_anim_stand);
 }
 
-void demon_attack_melee ()
+float demon_attack_melee ()
 {
        monsters_setframe(demon_anim_attack);
        self.attack_finished_single = time + 1;
        
        monster_melee(self.enemy, autocvar_g_monster_demon_damage, 0.3, DEATH_MONSTER_FIEND, TRUE);
+       
+       return TRUE;
 }
 
 void Demon_JumpTouch ()
index 654e4363465561a29011ad85e8da12dc2ec33035..99288ae8c075bc24e6e25e46f3f733d0ff461ee2 100644 (file)
@@ -45,12 +45,14 @@ void dog_think ()
        monster_move(autocvar_g_monster_dog_speed_run, autocvar_g_monster_dog_speed_walk, 50, dog_anim_run, dog_anim_walk, dog_anim_idle);
 }
 
-void dog_attack ()
+float dog_attack ()
 {
        monsters_setframe(dog_anim_attack);
        self.attack_finished_single = time + 0.7;
 
        monster_melee(self.enemy, autocvar_g_monster_dog_bite_damage, 0.2, DEATH_MONSTER_DOG_BITE, TRUE);
+       
+       return TRUE;
 }
 
 float dog_jump ()
index 28b71e7983eab2aba8ef6a2388be5b0bfad47ffd..4d490745a08942d06b4df63cf3647ab681669d64 100644 (file)
@@ -27,12 +27,14 @@ void fish_think ()
        monster_move(autocvar_g_monster_fish_speed_run, autocvar_g_monster_fish_speed_walk, 10, fish_anim_swim, fish_anim_swim, fish_anim_swim);
 }
 
-void fish_attack ()
+float fish_attack ()
 {
        monsters_setframe(fish_anim_attack);
        self.attack_finished_single = time + 0.5;
 
        monster_melee(self.enemy, autocvar_g_monster_fish_damage, 0.1, DEATH_MONSTER_FISH, FALSE);
+       
+       return TRUE;
 }
 
 void fish_die ()
index 3761f29587f0bce6b210d5d40893b733af98456e..f16cb159310724be9c76183969ef46e98c5d5d58 100644 (file)
@@ -310,7 +310,7 @@ void hellknight_weapon_attack ()
 }
 
 float hknight_type;
-void hknight_melee ()
+float hknight_melee ()
 {
        hknight_type += 1;
 
@@ -323,6 +323,8 @@ void hknight_melee ()
                hellknight_weapon_attack();
                hknight_type = 0;
        }
+       
+       return TRUE;
 }
 
 float hknight_magic ()
index fa33c38e2f339c92c9f9fb8c261a73112a44f4cd..78226208f15a281b67b8802da407d06228d335d4 100644 (file)
@@ -34,7 +34,7 @@ void knight_think ()
        monster_move(autocvar_g_monster_knight_speed_run, autocvar_g_monster_knight_speed_walk, 50, knight_anim_run, knight_anim_walk, knight_anim_stand);
 }
 
-void knight_attack ()
+float knight_attack ()
 {
        float len = vlen(self.velocity);
 
@@ -43,6 +43,8 @@ void knight_attack ()
        self.attack_finished_single = time + 1.25;
        
        monster_melee(self.enemy, autocvar_g_monster_knight_melee_damage, 0.3, DEATH_MONSTER_KNIGHT, FALSE);
+       
+       return TRUE;
 }
 
 void knight_die ()
index ef8d4f9325c55a460c17a07f81395e3792c507f8..7b051a96d4848e7261c090a68cb211277385f357 100644 (file)
@@ -193,10 +193,11 @@ float ogre_missile()
        }
 }
 
-void ogre_melee()
+float ogre_melee()
 {
        self.ogre_cycles = 0;
        ogre_swing();
+       return TRUE;
 }
 
 void ogre_die()
index 992a757f0dd269378d592fcd06a2ba32a81f9126..44f52acdd646ac06221a1debf6c4a4304a747c8c 100644 (file)
@@ -110,12 +110,14 @@ void shalrathattack_melee()
        self.monster_delayedattack = func_null;
 }
 
-void shalrath_attack_melee()
+float shalrath_attack_melee()
 {
        self.monster_delayedattack = shalrathattack_melee;
        self.delay = time + 0.2;
        monsters_setframe(shalrath_anim_attack);
        self.attack_finished_single = time + autocvar_g_monster_shalrath_attack_melee_delay;
+       
+       return TRUE;
 }
 
 void shalrath_grenade_explode()
index 8b77fae53d180562c8dd4861010c7aaeee097f50..f139d72a259b9dbed44aea9777bf2d05e5a64c75 100644 (file)
@@ -79,7 +79,7 @@ void shambler_swing_right ()
        }
 }
 
-void sham_melee ()
+float sham_melee ()
 {
        local float chance = random();
 
@@ -89,6 +89,8 @@ void sham_melee ()
                shambler_swing_right ();
        else
                shambler_swing_left ();
+               
+       return TRUE;
 }
 
 void CastLightning ()
diff --git a/qcsrc/server/monsters/monster/slime.qc b/qcsrc/server/monsters/monster/slime.qc
new file mode 100644 (file)
index 0000000..5782155
--- /dev/null
@@ -0,0 +1,141 @@
+// size
+const vector SLIME_MIN = '-16 -16 -24';
+const vector SLIME_MAX = '16 16 16';
+
+// model
+string SLIME_MODEL = "models/monsters/slime.dpm";
+
+#ifdef SVQC
+// cvars
+float autocvar_g_monster_slime;
+float autocvar_g_monster_slime_health;
+float autocvar_g_monster_slime_speed_walk;
+float autocvar_g_monster_slime_speed_run;
+
+// animations
+const float slime_anim_walk            = 0;
+const float slime_anim_idle            = 1;
+const float slime_anim_jump            = 2;
+const float slime_anim_fly             = 3;
+const float slime_anim_die             = 4;
+const float slime_anim_pain            = 5;
+
+void() slime_dead;
+
+void slime_think()
+{
+       self.think = slime_think;
+       self.nextthink = time + self.ticrate;
+       
+       monster_move(autocvar_g_monster_slime_speed_run, autocvar_g_monster_slime_speed_walk, 20, slime_anim_walk, slime_anim_walk, slime_anim_idle);
+}
+
+void slime_touch_jump()
+{
+       if(self.health > 0)
+       if(other.health > 0)
+       if(other.takedamage)
+       if(vlen(self.velocity) > 200)
+       {
+               slime_dead();
+                       
+               return;
+       }
+
+       if (trace_dphitcontents)
+       {
+               self.touch = MonsterTouch;
+               self.movetype = MOVETYPE_WALK;
+       }
+}
+
+float slime_attack()
+{
+       makevectors(self.angles);
+       if(monster_leap(slime_anim_jump, slime_touch_jump, v_forward * 600 + '0 0 200', 0.5))
+               return TRUE;
+       
+       return FALSE;
+}
+
+void slime_explode()
+{
+       RadiusDamage(self, self, 250 * monster_skill, 15, 250 * (monster_skill * 0.7), world, 250, DEATH_MONSTER_SLIME, world);
+       pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
+       sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+       
+       Monster_CheckDropCvars ("slime"); // drop items after exploding to prevent player picking up item before dying
+       
+       setmodel(self, "");
+}
+
+void slime_dead()
+{
+       self.health = -100; // gibbed
+       slime_explode();
+       
+       self.think = Monster_Fade;
+       self.nextthink = time;
+       
+       monster_hook_death();
+       
+       self.event_damage = func_null; // reset by monster_hook_death
+       self.takedamage = DAMAGE_NO;
+}
+
+void slime_die()
+{
+       self.think                      = slime_dead;
+       self.nextthink          = time;
+       self.event_damage   = func_null;
+       self.movetype           = MOVETYPE_NONE;
+       self.enemy                      = world;
+       self.health                     = 0;
+       
+       self.SendFlags |= MSF_MOVE | MSF_STATUS;
+}
+
+void slime_spawn()
+{
+       if not(self.health)
+               self.health = autocvar_g_monster_slime_health;
+       
+       self.damageforcescale   = 0.003;
+       self.classname                  = "monster_slime";
+       self.checkattack                = GenericCheckAttack;
+       self.attack_ranged              = slime_attack;
+       self.attack_melee               = self.attack_ranged;
+       self.nextthink                  = time + random() * 0.5 + 0.1;
+       self.think                              = slime_think;
+       
+       monsters_setframe(slime_anim_idle);
+       
+       monster_setupsounds("slime");
+       
+       monster_hook_spawn(); // for post-spawn mods
+}
+
+void spawnfunc_monster_slime()
+{      
+       if not(autocvar_g_monster_slime) { remove(self); return; }
+       
+       self.monster_spawnfunc = spawnfunc_monster_slime;
+       
+       if(Monster_CheckAppearFlags(self))
+               return;
+       
+       if not (monster_initialize(
+                        "Slime", MONSTER_SLIME,
+                        SLIME_MIN, SLIME_MAX,
+                        FALSE,
+                        slime_die, slime_spawn))
+       {
+               remove(self);
+               return;
+       }
+}
+
+// compatibility with old spawns
+void spawnfunc_monster_tarbaby() { spawnfunc_monster_slime(); }
+
+#endif // SVQC
index 41c563ba5fdc4d8c67bd0e213c24390724133ea0..4a85f8492b095451e29c121b436a8f85ac7325ea 100644 (file)
@@ -285,11 +285,13 @@ float soldier_attack()
        }
 }
 
-void soldier_melee ()
+float soldier_melee ()
 {
        monsters_setframe(soldier_anim_shoot);
        self.attack_finished_single = time + 0.8;
        monster_melee(self.enemy, autocvar_g_monster_soldier_melee_damage, 0.3, DEATH_MONSTER_MARINE_SLAP, TRUE);
+       
+       return TRUE;
 }
 
 void soldier_die()
index cd7c5da4f17d4b2d82179620c1b1f4666438ff6c..3867894bf396c9ab5e1f58bf7d723dd5aa822d78 100644 (file)
@@ -28,13 +28,15 @@ const float spider_anim_attack2             = 3;
 const float SPIDER_TYPE_ICE            = 0;
 const float SPIDER_TYPE_FIRE   = 1;
 
-void spider_attack_standing()
+float spider_attack_standing()
 {      
        monster_melee(self.enemy, autocvar_g_monster_spider_attack_stand_damage, 0.3, DEATH_MONSTER_SPIDER, TRUE);
        
        monsters_setframe((random() > 0.5) ? spider_anim_attack : spider_anim_attack2);
 
        self.attack_finished_single = time + autocvar_g_monster_spider_attack_stand_delay;
+       
+       return TRUE;
 }
 
 void spider_web_explode ()
diff --git a/qcsrc/server/monsters/monster/tarbaby.qc b/qcsrc/server/monsters/monster/tarbaby.qc
deleted file mode 100644 (file)
index fe5b62f..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-// size
-const vector TARBABY_MIN = '-16 -16 -24';
-const vector TARBABY_MAX = '16 16 16';
-
-// model
-string TARBABY_MODEL = "models/monsters/slime.dpm";
-
-#ifdef SVQC
-// cvars
-float autocvar_g_monster_tarbaby;
-float autocvar_g_monster_tarbaby_health;
-float autocvar_g_monster_tarbaby_speed_walk;
-float autocvar_g_monster_tarbaby_speed_run;
-
-// animations
-const float tarbaby_anim_walk          = 0;
-const float tarbaby_anim_idle          = 1;
-const float tarbaby_anim_jump          = 2;
-const float tarbaby_anim_fly           = 3;
-const float tarbaby_anim_die           = 4;
-const float tarbaby_anim_pain          = 5;
-
-void tarbaby_think ()
-{
-       self.think = tarbaby_think;
-       self.nextthink = time + self.ticrate;
-       
-       monster_move(autocvar_g_monster_tarbaby_speed_run, autocvar_g_monster_tarbaby_speed_walk, 20, tarbaby_anim_walk, tarbaby_anim_walk, tarbaby_anim_idle);
-}
-
-void Tar_JumpTouch ()
-{
-       if(self.health > 0)
-       if(other.health > 0)
-       if(other.takedamage)
-       if(vlen(self.velocity) > 200)
-       {
-               // make the monster die
-               self.event_damage(self, self, self.health + self.max_health + 200, DEATH_MONSTER_TARBABY, self.origin, '0 0 0');
-                       
-               return;
-       }
-
-       if (trace_dphitcontents)
-       {
-               self.touch = MonsterTouch;
-               self.movetype = MOVETYPE_WALK;
-       }
-}
-
-void tarbaby_jump ()
-{
-       self.movetype = MOVETYPE_BOUNCE;
-       makevectors(self.angles);
-       monster_leap(tarbaby_anim_jump, Tar_JumpTouch, v_forward * 600 + '0 0 200', 0.5);
-}
-
-float tbaby_jump ()
-{
-       tarbaby_jump();
-       return TRUE;
-}
-
-void tarbaby_blowup ()
-{
-       RadiusDamage(self, self, 250 * monster_skill, 15, 250 * (monster_skill * 0.7), world, 250, DEATH_MONSTER_TARBABY, world);
-       pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
-       sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-       
-       Monster_CheckDropCvars ("tarbaby"); // drop items after exploding to prevent player picking up item before dying
-       
-       setmodel(self, "");
-}
-
-void tarbaby_explode()
-{
-       tarbaby_blowup();
-       
-       self.think = Monster_Fade;
-       self.nextthink = time + 0.1;
-       
-       monster_hook_death();
-       
-       self.event_damage = func_null; // reset by monster_hook_death
-       self.takedamage = DAMAGE_NO;
-}
-
-void tarbaby_die ()
-{
-       self.think                      = tarbaby_explode;
-       self.nextthink          = time + 0.1;
-       self.event_damage   = func_null;
-       self.movetype           = MOVETYPE_NONE;
-       self.enemy                      = world;
-       self.health                     = 0;
-       
-       WaypointSprite_Kill(self.sprite);
-       
-       self.SendFlags |= MSF_MOVE | MSF_STATUS;
-}
-
-void tarbaby_spawn ()
-{
-       if not(self.health)
-               self.health = autocvar_g_monster_tarbaby_health;
-       
-       self.damageforcescale   = 0.003;
-       self.classname                  = "monster_tarbaby";
-       self.checkattack                = GenericCheckAttack;
-       self.attack_ranged              = tbaby_jump;
-       self.attack_melee               = tarbaby_jump;
-       self.nextthink                  = time + random() * 0.5 + 0.1;
-       self.think                              = tarbaby_think;
-       
-       monsters_setframe(tarbaby_anim_idle);
-       
-       monster_setupsounds("tarbaby");
-       
-       monster_hook_spawn(); // for post-spawn mods
-}
-
-void spawnfunc_monster_tarbaby ()
-{      
-       if not(autocvar_g_monster_tarbaby) { remove(self); return; }
-       
-       self.monster_spawnfunc = spawnfunc_monster_tarbaby;
-       
-       if(Monster_CheckAppearFlags(self))
-               return;
-       
-       if not (monster_initialize(
-                        "Slime", MONSTER_TARBABY,
-                        TARBABY_MIN, TARBABY_MAX,
-                        FALSE,
-                        tarbaby_die, tarbaby_spawn))
-       {
-               remove(self);
-               return;
-       }
-}
-
-#endif // SVQC
index 38c61cd0234d353f4511c71acdf16a8e4ca21881..d9c45d9ff7fef2166a3bc93330c0e384d70491fe 100644 (file)
@@ -52,7 +52,7 @@ const float zombie_anim_runforwardleft                = 28;
 const float zombie_anim_runforwardright                = 29;
 const float zombie_anim_spawn                          = 30;
 
-void zombie_attack_standing()
+float zombie_attack_standing()
 {
        float rand = random(), chosen_anim;
                
@@ -68,6 +68,8 @@ void zombie_attack_standing()
        self.attack_finished_single = time + autocvar_g_monster_zombie_attack_stand_delay;
        
        monster_melee(self.enemy, autocvar_g_monster_zombie_attack_stand_damage, 0.3, DEATH_MONSTER_ZOMBIE_MELEE, TRUE);
+       
+       return TRUE;
 }
 
 void zombie_attack_leap_touch ()
index 014d3251ff4e078772583b8361104518c36fbacf..d1ff2db38c7205c9aad855a672e2d04ed04222ba 100644 (file)
@@ -13,7 +13,7 @@
 #include "monster/soldier.qc"
 #include "monster/wizard.qc"
 #include "monster/dog.qc"
-#include "monster/tarbaby.qc"
+#include "monster/slime.qc"
 #include "monster/hknight.qc"
 #include "monster/fish.qc"
 #include "monster/shalrath.qc"
index 2b2684546a0b0902e935caf98ca5ed7ff919ba17..dcc79b82ce51852fe813a1b83e8666d5066d916d 100644 (file)
@@ -383,7 +383,7 @@ float Monster_GetStrength(float mnster)
                case MONSTER_MARINE:
                case MONSTER_ZOMBIE:
                case MONSTER_SPIDER:
-               case MONSTER_TARBABY:
+               case MONSTER_SLIME:
                case MONSTER_DOG:
                case MONSTER_SCRAG:
                case MONSTER_FISH:
@@ -410,7 +410,7 @@ string monster_type2string(float mnster)
                case MONSTER_MARINE: return "marine";
                case MONSTER_SCRAG: return "scrag";
                case MONSTER_DOG: return "dog";
-               case MONSTER_TARBABY: return "tarbaby";
+               case MONSTER_SLIME: return "slime";
                case MONSTER_HELLKNIGHT: return "hellknight";
                case MONSTER_FISH: return "fish";
                case MONSTER_MAGE: return "mage";
@@ -428,7 +428,7 @@ float Monster_GetType(float mnster)
                case MONSTER_MARINE:
                case MONSTER_ZOMBIE:
                case MONSTER_SPIDER:
-               case MONSTER_TARBABY:
+               case MONSTER_SLIME:
                case MONSTER_DOG:
                case MONSTER_OGRE:
                case MONSTER_SHAMBLER:
@@ -457,7 +457,7 @@ float RandomMonster()
        if(n_dogs) RandomSelection_Add(world, MONSTER_DOG, "", 1, 1);
        if(n_knights) RandomSelection_Add(world, MONSTER_KNIGHT, "", 1, 1);
        if(n_shamblers) RandomSelection_Add(world, MONSTER_SHAMBLER, "", 0.2, 0.2);
-       if(n_tarbabies) RandomSelection_Add(world, MONSTER_TARBABY, "", 0.2, 0.2);
+       if(n_slimes) RandomSelection_Add(world, MONSTER_SLIME, "", 0.2, 0.2);
        if(n_wizards && flyspawns_count) RandomSelection_Add(world, MONSTER_SCRAG, "", 1, 1);
        if(n_fish && waterspawns_count) RandomSelection_Add(world, MONSTER_FISH, "", 0.2, 0.2);
        
@@ -494,7 +494,7 @@ void combat_phase()
 
 void queue_monsters(float maxmonsters)
 {
-       float mc = 10; // note: shambler + tarbaby = 1
+       float mc = 10; // note: shambler + slime = 1
        
        if(waterspawns_count > 0)
                mc += 1;
@@ -511,7 +511,7 @@ void queue_monsters(float maxmonsters)
        n_hknights  = DistributeEvenly_Get(1);
        n_zombies   = DistributeEvenly_Get(1);
        n_spiders   = DistributeEvenly_Get(1);
-       n_tarbabies = DistributeEvenly_Get(0.7);
+       n_slimes = DistributeEvenly_Get(0.7);
        n_shamblers = DistributeEvenly_Get(0.3);
        if(flyspawns_count > 0)
                n_wizards = DistributeEvenly_Get(1);
@@ -846,7 +846,7 @@ MUTATOR_HOOKFUNCTION(td_MonsterSpawn)
                case MONSTER_MARINE: n_soldiers -= 1; break;
                case MONSTER_SCRAG: n_wizards -= 1; break;
                case MONSTER_DOG: n_dogs -= 1; break;
-               case MONSTER_TARBABY: n_tarbabies -= 1; break;
+               case MONSTER_SLIME: n_slimes -= 1; break;
                case MONSTER_HELLKNIGHT: n_hknights -= 1; break;
                case MONSTER_FISH: n_fish -= 1; break;
                case MONSTER_MAGE: n_shalraths -= 1; break;
index fb367b879b14bb668cd04189b1f491322f53fe28..dd78d14ccb20d6719e93cdf714db1528c92df277 100644 (file)
@@ -1,6 +1,6 @@
 // Counters
 float monster_count, totalmonsters;
-float n_knights, n_dogs, n_ogres, n_shamblers, n_wizards, n_shalraths, n_soldiers, n_hknights, n_demons, n_zombies, n_tarbabies, n_fish, n_spiders;
+float n_knights, n_dogs, n_ogres, n_shamblers, n_wizards, n_shalraths, n_soldiers, n_hknights, n_demons, n_zombies, n_slimes, n_fish, n_spiders;
 float current_monsters;
 float waterspawns_count, flyspawns_count;
 float wave_count, max_waves;