set g_monsters_skill_hard 5 "Monster hard skill level (used for skill based functions)"
set g_monsters_skill_insane 7 "Monster insane skill level (used for skill based functions)"
set g_monsters_skill_nightmare 10 "Monster nightmare skill level (used for skill based functions)"
-set g_monsters_spawn_list "ogre demon shambler knight soldier scrag dog spawn hellknight fish vore enforcer zombie spider" "monsters not listed here will spawn as knights"
-
-// Enforcer
-set g_monster_enforcer 1 "Enable Enforcers"
-set g_monster_enforcer_health 80 "Enforcer health"
-set g_monster_enforcer_drop armor "Enforcer drops this item on death"
-set g_monster_enforcer_drop_size large "Size of the item Enforcers drop. Possible values are: small, medium, large"
-set g_monster_enforcer_speed_walk 75 "Enforcer walk speed"
-set g_monster_enforcer_speed_run 100 "Enforcer run speed"
-set g_monster_enforcer_attack_uzi_bullets 3 "Number of machine gun bullets Enforcer fires"
+set g_monsters_spawn_list "ogre demon shambler knight soldier scrag dog spawn hellknight fish vore zombie spider" "monsters not listed here will spawn as knights"
// Ogre
set g_monster_ogre 1 "Enable Ogres"
set g_monster_spider_attack_leap_delay 1.5 "Delay after spider attack leap"
set g_monster_spider_attack_stand_damage 35 "Damage when spider hits from a standing position"
set g_monster_spider_attack_stand_delay 1.2 "Delay after a spider hits from a standing position"
+set g_monster_spider_attack_fire_time 2 "Spider fire attack burn time"
+set g_monster_spider_attack_web_speed 1000 "Spider web fly speed"
+set g_monster_spider_attack_web_speed_up 150 "Spider web upwards fly speed"
+set g_monster_spider_attack_web_spread 0 "Spider web spread"
+set g_monster_spider_attack_web_speed_z 0 "Spider web upwards angle"
set g_monster_spider_health 200 "Spider health"
set g_monster_spider_idle_timer_min 1 "Minimum time a spider can stay idle"
set g_monster_spider_speed_walk 150 "Spider walk speed"
precache_model(SHALRATH_MODEL);
break;
}
- case MONSTER_ENFORCER:
- {
- precache_model(ENFORCER_MODEL);
- precache_model("models/turrets/ewheel-gun1.md3");
- break;
- }
case MONSTER_SPIDER:
{
precache_model(SPIDER_MODEL);
mid2info_max = SHALRATH_MAX;
break;
}
- case MONSTER_ENFORCER:
- {
- mid2info_model = ENFORCER_MODEL;
- mid2info_name = "Enforcer";
- mid2info_min = ENFORCER_MIN;
- mid2info_max = ENFORCER_MAX;
- break;
- }
case MONSTER_SPIDER:
{
mid2info_model = SPIDER_MODEL;
DEATHTYPE(DEATH_MIRRORDAMAGE, DEATH_SELF_BETRAYAL, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_MONSTER_DOG_BITE, DEATH_SELF_MON_DOG_BITE, NO_MSG, DEATH_MONSTER_FIRST) \
DEATHTYPE(DEATH_MONSTER_DOG_JUMP, DEATH_SELF_MON_DOG_JUMP, NO_MSG, NORMAL_POS) \
- DEATHTYPE(DEATH_MONSTER_ENFORCER, DEATH_SELF_MON_ENFORCER, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_MONSTER_FIEND, DEATH_SELF_MON_FIEND, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_MONSTER_FISH, DEATH_SELF_MON_FISH, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_MONSTER_HKNIGHT_CRUSH, DEATH_SELF_MON_HKNIGHT_CRUSH, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_MONSTER_MARINE, DEATH_SELF_MON_MARINE, NO_MSG, NORMAL_POS) \
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_SCRAG, DEATH_SELF_MON_SCRAG, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_MONSTER_ZOMBIE_JUMP, DEATH_SELF_MON_ZOMBIE_JUMP, NO_MSG, NORMAL_POS) \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_lava", _("^BG%s^K1 turned into hot slag%s%s\n"), _("^BG%s^K1 found a hot place%s%s\n")) \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_DOG_BITE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was mauled by a Rottweiler%s%s\n"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_DOG_JUMP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 didn't see the pouncing Rottweiler%s%s\n"), "") \
- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_ENFORCER, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted by an Enforcer%s%s\n"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_FIEND, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was eviscerated by a Fiend%s%s\n"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_FISH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was fed to the Rotfish%s%s\n"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_HKNIGHT_CRUSH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was crushed by a pouncing Hell-Knight%s%s\n"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_MON_MARINE_SLAP, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was slapped to death by a Marine%s%s\n"), "") \
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_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_MULTI_NOTIF(1, DEATH_SELF_LAVA, INFO_DEATH_SELF_LAVA, CENTER_DEATH_SELF_LAVA) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_DOG_BITE, INFO_DEATH_SELF_MON_DOG_BITE, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_DOG_JUMP, INFO_DEATH_SELF_MON_DOG_JUMP, CENTER_DEATH_SELF_MONSTER) \
- MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ENFORCER, INFO_DEATH_SELF_MON_ENFORCER, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_FIEND, INFO_DEATH_SELF_MON_FIEND, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_FISH, INFO_DEATH_SELF_MON_FISH, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_HKNIGHT_CRUSH, INFO_DEATH_SELF_MON_HKNIGHT_CRUSH, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MARINE_SLAP, INFO_DEATH_SELF_MON_MARINE_SLAP, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_MARINE, INFO_DEATH_SELF_MON_MARINE, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER, INFO_DEATH_SELF_MON_SPIDER, CENTER_DEATH_SELF_MONSTER) \
+ MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SPIDER_FIRE, INFO_DEATH_SELF_MON_SPIDER_FIRE, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_TARBABY, INFO_DEATH_SELF_MON_TARBABY, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_SCRAG, INFO_DEATH_SELF_MON_SCRAG, CENTER_DEATH_SELF_MONSTER) \
MSG_MULTI_NOTIF(1, DEATH_SELF_MON_ZOMBIE_JUMP, INFO_DEATH_SELF_MON_ZOMBIE_JUMP, CENTER_DEATH_SELF_MONSTER) \
me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "spawn", _("Tarbaby")));
me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "fish", _("Rotfish")));
me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "vore", _("Mage")));
- me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "enforcer", _("Enforcer")));
me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "scrag", _("Scrag")));
me.TR(me);
me.TD(me, 1, 0.25, e = makeXonoticTextLabel(0, _("Name:")));
float MONSTER_HELLKNIGHT = 11;
float MONSTER_FISH = 12;
float MONSTER_MAGE = 13;
-float MONSTER_ENFORCER = 14;
-float MONSTER_SPIDER = 15;
-float MONSTER_LAST = 16;
+float MONSTER_SPIDER = 14;
+float MONSTER_LAST = 15;
float MSF_UPDATE = 2;
float MSF_STATUS = 4;
+++ /dev/null
-#ifndef MENUQC
-// size
-const vector ENFORCER_MIN = '-32 -32 0';
-const vector ENFORCER_MAX = '32 32 64';
-
-// model
-string ENFORCER_MODEL = "models/turrets/ewheel-base2.md3";
-
-#endif
-
-#ifdef SVQC
-// cvars
-float autocvar_g_monster_enforcer;
-float autocvar_g_monster_enforcer_health;
-float autocvar_g_monster_enforcer_speed_walk;
-float autocvar_g_monster_enforcer_speed_run;
-float autocvar_g_monster_enforcer_attack_uzi_bullets;
-
-// animations
-const float enforcer_anim_stop = 0;
-const float enforcer_anim_walk = 1;
-const float enforcer_anim_run = 2;
-const float enforcer_anim_walkback = 3;
-const float enforcer_anim_runback = 4;
-
-void enforcer_think ()
-{
- self.think = enforcer_think;
- self.nextthink = time + self.ticrate;
-
- if(self.delay != -1)
- self.nextthink = self.delay;
-
- monster_move(autocvar_g_monster_enforcer_speed_run, autocvar_g_monster_enforcer_speed_walk, 100, enforcer_anim_run, enforcer_anim_walk, enforcer_anim_stop);
-}
-
-.float enf_cycles;
-void enforcer_uzi_fire ()
-{
- self.enf_cycles += 1;
-
- if(self.enf_cycles > autocvar_g_monster_enforcer_attack_uzi_bullets)
- {
- self.monster_delayedattack = func_null;
- self.delay = -1;
- return;
- }
- W_UZI_Attack(DEATH_MONSTER_ENFORCER);
- self.delay = time + 0.1;
- self.monster_delayedattack = enforcer_uzi_fire;
-}
-
-float enforcer_attack()
-{
- makevectors(self.angles);
- switch(self.weapon)
- {
- case WEP_ROCKET_LAUNCHER:
- {
- self.attack_finished_single = time + 0.8;
- W_Rocket_Attack();
- return TRUE;
- }
- case WEP_ELECTRO:
- {
- self.attack_finished_single = time + 0.8;
- W_Electro_Attack();
- return TRUE;
- }
- case WEP_SHOTGUN:
- {
- self.attack_finished_single = time + 0.8;
- W_Shotgun_Attack();
- return TRUE;
- }
- case WEP_UZI:
- {
- self.enf_cycles = 0;
- self.attack_finished_single = time + 0.8;
- self.delay = time + 0.1;
- self.monster_delayedattack = enforcer_uzi_fire;
- return TRUE;
- }
- case WEP_LASER:
- {
- self.attack_finished_single = time + 0.8;
- W_Laser_Attack(0);
- }
- default:
- return FALSE; // no weapon?
- }
-
- // never gets here
-}
-
-void enforcer_die ()
-{
- Monster_CheckDropCvars ("enforcer");
-
- self.think = Monster_Fade;
- self.nextthink = time + 5;
- monsters_setframe(enforcer_anim_stop);
-
- monster_hook_death(); // for post-death mods
-}
-
-void enforcer_spawn ()
-{
- if not(self.health)
- self.health = autocvar_g_monster_enforcer_health * self.scale;
-
- self.damageforcescale = 0;
- self.classname = "monster_enforcer";
- self.checkattack = GenericCheckAttack;
- self.nextthink = time + random() * 0.5 + 0.1;
- self.think = enforcer_think;
- self.items = (IT_SHELLS | IT_ROCKETS | IT_NAILS | IT_CELLS);
- self.sprite_height = 45;
- self.attack_ranged = enforcer_attack;
- self.view_ofs *= 0.5;
-
- monsters_setframe(enforcer_anim_stop);
-
- monster_setupsounds("enforcer");
-
- setmodel(self, ENFORCER_MODEL); // for weapon entity
-
- self.weaponentity = spawn();
- self.weaponentity.owner = self;
- self.weaponentity.team = self.team;
- self.weaponentity.solid = SOLID_NOT;
- self.weaponentity.owner = self.weaponentity.realowner = self;
- self.weaponentity.movetype = MOVETYPE_NOCLIP;
- setmodel(self.weaponentity, "models/turrets/ewheel-gun1.md3");
- setattachment(self.weaponentity, self, "tag_head");
-
- RandomSelection_Init();
- RandomSelection_Add(world, WEP_ROCKET_LAUNCHER, "", 1, 1);
- RandomSelection_Add(world, WEP_ELECTRO, "", 1, 1);
- RandomSelection_Add(world, WEP_SHOTGUN, "", 1, 1);
- RandomSelection_Add(world, WEP_UZI, "", 1, 1);
- RandomSelection_Add(world, WEP_LASER, "", 1, 1);
-
- self.weapon = RandomSelection_chosen_float;
-
- monster_hook_spawn(); // for post-spawn mods
-}
-
-void spawnfunc_monster_enforcer ()
-{
- if not(autocvar_g_monster_enforcer) { remove(self); return; }
-
- self.monster_spawnfunc = spawnfunc_monster_enforcer;
-
- if(Monster_CheckAppearFlags(self))
- return;
-
- precache_model("models/turrets/ewheel-gun1.md3");
- precache_model(ENFORCER_MODEL);
-
- if not (monster_initialize(
- "Enforcer", MONSTER_ENFORCER,
- ENFORCER_MIN, ENFORCER_MAX,
- FALSE,
- enforcer_die, enforcer_spawn))
- {
- remove(self);
- return;
- }
-}
-
-#endif // SVQC
// cvars
float autocvar_g_monster_knight;
float autocvar_g_monster_knight_health;
-//float autocvar_g_monster_knight_melee_damage;
+float autocvar_g_monster_knight_melee_damage;
float autocvar_g_monster_knight_speed_walk;
float autocvar_g_monster_knight_speed_run;
void knight_attack ()
{
float len = vlen(self.velocity);
-
- W_Shotgun_Attack2();
monsters_setframe((len < 50) ? knight_anim_attack : knight_anim_runattack);
self.attack_finished_single = time + 1.25;
- //monster_melee(self.enemy, autocvar_g_monster_knight_melee_damage, 0.3, DEATH_MONSTER_KNIGHT);
+ monster_melee(self.enemy, autocvar_g_monster_knight_melee_damage, 0.3, DEATH_MONSTER_KNIGHT, FALSE);
}
void knight_die ()
if (time > self.cnt)
{
other = world;
- W_Grenade_Explode ();
+ ogre_grenade_explode();
return;
}
}
float autocvar_g_monster_spider_attack_leap_delay;
float autocvar_g_monster_spider_attack_stand_damage;
float autocvar_g_monster_spider_attack_stand_delay;
+float autocvar_g_monster_spider_attack_fire_time;
float autocvar_g_monster_spider_health;
float autocvar_g_monster_spider_speed_walk;
float autocvar_g_monster_spider_speed_run;
void spider_web_explode ()
{
- RadiusDamage (self, self.realowner, 0, 0, 1, world, 0, self.projectiledeathtype, other);
+ float damg = 0, edamg = 0, rad = 1;
+ switch(self.realowner.spider_type)
+ {
+ case SPIDER_TYPE_ICE:
+ break; // no change
+ case SPIDER_TYPE_FIRE:
+ damg = 15;
+ rad = 25;
+ edamg = 6;
+ break;
+ }
+
+ RadiusDamage (self, self.realowner, damg, edamg, rad, world, 0, self.projectiledeathtype, other);
+
remove (self);
}
void spider_web_touch ()
{
PROJECTILE_TOUCH;
- if (other.takedamage == DAMAGE_AIM)
- Freeze(other, 0.3);
+
+ if(other.takedamage == DAMAGE_AIM)
+ switch(self.realowner.spider_type)
+ {
+ case SPIDER_TYPE_ICE:
+ Freeze(other, 0.3);
+ break;
+ case SPIDER_TYPE_FIRE:
+ Fire_AddDamage(other, self.realowner, 5 * monster_skill, autocvar_g_monster_spider_attack_fire_time, DEATH_MONSTER_SPIDER_FIRE);
+ break;
+ }
spider_web_explode();
}
-void spider_shootweb()
+void spider_shootweb(float ptype)
{
- // clone of the electro secondary attack, with less bouncing
+ float p = 0, dt = 0;
+ string snd = "";
+ switch(ptype)
+ {
+ case SPIDER_TYPE_ICE:
+ p = PROJECTILE_ELECTRO;
+ dt = WEP_ELECTRO;
+ snd = "weapons/electro_fire2.wav";
+ break;
+ case SPIDER_TYPE_FIRE:
+ p = ((self.scale >= 2) ? PROJECTILE_FIREBALL : PROJECTILE_FIREMINE);
+ dt = WEP_FIREBALL;
+ snd = "weapons/fireball_fire.wav";
+ break;
+ }
+
+ vector fmins = ((self.scale >= 2) ? '-16 -16 -16' : '-4 -4 -4'), fmaxs = ((self.scale >= 2) ? '16 16 16' : '4 4 4');
+
entity proj = world;
makevectors(self.angles);
- W_SetupShot_ProjectileSize (self, '0 0 -4', '0 0 -4', FALSE, 2, "weapons/electro_fire2.wav", CH_WEAPON_A, 0);
+ W_SetupShot_ProjectileSize(self, fmins, fmaxs, FALSE, 2, snd, CH_WEAPON_A, 0);
w_shotdir = v_forward; // no TrueAim for grenades please
- pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
-
proj = spawn ();
proj.classname = "plasma";
proj.owner = proj.realowner = self;
proj.think = adaptor_think2use_hittype_splash;
proj.bot_dodge = TRUE;
proj.bot_dodgerating = 0;
- proj.nextthink = time + autocvar_g_balance_electro_secondary_lifetime;
+ proj.nextthink = time + 5;
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_ELECTRO | HITTYPE_SECONDARY;
+ proj.projectiledeathtype = dt | HITTYPE_SECONDARY;
setorigin(proj, w_shotorg);
//proj.glow_size = 50;
//proj.glow_color = 45;
proj.movetype = MOVETYPE_BOUNCE;
- W_SETUPPROJECTILEVELOCITY_UP(proj, g_balance_electro_secondary);
+ W_SETUPPROJECTILEVELOCITY_UP(proj, g_monster_spider_attack_web);
proj.touch = spider_web_touch;
- setsize(proj, '0 0 -4', '0 0 -4');
- proj.takedamage = DAMAGE_YES;
+ setsize(proj, fmins, fmaxs);
+ proj.takedamage = DAMAGE_NO;
proj.damageforcescale = 0;
proj.health = 500;
- proj.event_damage = W_Plasma_Damage;
+ proj.event_damage = func_null;
proj.flags = FL_PROJECTILE;
proj.damagedbycontents = TRUE;
proj.bouncestop = 0.05;
proj.missile_flags = MIF_SPLASH | MIF_ARC;
- CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound
-
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ CSQCProjectile(proj, TRUE, p, FALSE); // no culling, it has sound
}
void spider_attack_leap()
makevectors(self.angles);
- switch(self.spider_type)
- {
- default:
- case SPIDER_TYPE_ICE:
- spider_shootweb(); break; // must... remember... breaks!
- case SPIDER_TYPE_FIRE:
- W_Fireball_Attack2(); break;
- }
+ spider_shootweb(self.spider_type);
}
float spider_attack_ranged()
#include "monster/hknight.qc"
#include "monster/fish.qc"
#include "monster/shalrath.qc"
-#include "monster/enforcer.qc"
#include "monster/zombie.qc"
#include "monster/spider.qc"
case "knight":
case "wizard":
case "soldier":
- case "enforcer":
case "zombie":
case "tarbaby":
case "dog":
default:
case "knight":
case "soldier":
- case "enforcer":
case "zombie":
case "spider":
case "tarbaby":
if(n_shalraths) RandomSelection_Add(world, 0, "vore", 1, 1);
if(n_soldiers) RandomSelection_Add(world, 0, "soldier", 1, 1);
if(n_hknights) RandomSelection_Add(world, 0, "hellknight", 1, 1);
- if(n_enforcers) RandomSelection_Add(world, 0, "enforcer", 1, 1);
if(n_zombies) RandomSelection_Add(world, 0, "zombie", 1, 1);
if(n_spiders) RandomSelection_Add(world, 0, "spider", 1, 1);
if(n_ogres) RandomSelection_Add(world, 0, "ogre", 1, 1);
void queue_monsters(float maxmonsters)
{
- float mc = 11; // note: shambler + tarbaby = 1
+ float mc = 10; // note: shambler + tarbaby = 1
if(waterspawns_count > 0)
mc += 1;
n_shalraths = DistributeEvenly_Get(1);
n_soldiers = DistributeEvenly_Get(1);
n_hknights = DistributeEvenly_Get(1);
- n_enforcers = DistributeEvenly_Get(1);
n_zombies = DistributeEvenly_Get(1);
n_spiders = DistributeEvenly_Get(1);
n_tarbabies = DistributeEvenly_Get(0.7);
case MONSTER_HELLKNIGHT: n_hknights -= 1; break;
case MONSTER_FISH: n_fish -= 1; break;
case MONSTER_MAGE: n_shalraths -= 1; break;
- case MONSTER_ENFORCER: n_enforcers -= 1; break;
case MONSTER_SPIDER: n_spiders -= 1; break;
}
// Counters
float monster_count, totalmonsters;
-float n_knights, n_dogs, n_ogres, n_shamblers, n_wizards, n_shalraths, n_soldiers, n_hknights, n_enforcers, 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_tarbabies, n_fish, n_spiders;
float current_monsters;
float waterspawns_count, flyspawns_count;
float wave_count, max_waves;