X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fmonster%2Fmage.qc;h=c531fe0250573e2ed96626a67d2d5e2534c6d883;hb=b60641e56c648beebc66d628305fb652dc6db571;hp=2c8ebd5479d4676d8dc85f2fb54b777826c8d549;hpb=23ad6cc4775660c14ef42575146550887f44775e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index 2c8ebd547..c531fe025 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -1,15 +1,19 @@ -#ifdef REGISTER_MONSTER -REGISTER_MONSTER( +#ifndef MENUQC +bool m_mage(int); +#endif +REGISTER_MONSTER_SIMPLE( /* MON_##id */ MAGE, -/* function */ m_mage, /* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-36 -36 -24', '36 36 50', /* model */ "mage.dpm", /* netname */ "mage", /* fullname */ _("Mage") -); +) { +#ifndef MENUQC + this.monster_func = m_mage; +#endif +} -#else #ifdef SVQC float autocvar_g_monster_mage_health; float autocvar_g_monster_mage_attack_spike_damage; @@ -55,27 +59,27 @@ void() mage_shield; float friend_needshelp(entity e) { if(e == world) - return FALSE; + return false; if(e.health <= 0) - return FALSE; + return false; if(DIFF_TEAM(e, self) && e != self.monster_owner) - return FALSE; - if(e.freezetag_frozen) - return FALSE; + return false; + if(e.frozen) + return false; if(!IS_PLAYER(e)) - return ((e.flags & FL_MONSTER) && e.health < e.max_health); + return (IS_MONSTER(e) && e.health < e.max_health); if(e.items & IT_INVINCIBLE) - return FALSE; + return false; switch(self.skin) { case 0: return (e.health < autocvar_g_balance_health_regenstable); - case 1: return ((e.ammo_cells && e.ammo_cells < g_pickup_cells_max) || (e.ammo_rockets && e.ammo_rockets < g_pickup_rockets_max) || (e.ammo_nails && e.ammo_nails < g_pickup_nails_max) || (e.ammo_shells && e.ammo_shells < g_pickup_shells_max)); + case 1: return ((e.ammo_cells && e.ammo_cells < g_pickup_cells_max) || (e.ammo_plasma && e.ammo_plasma < g_pickup_plasma_max) || (e.ammo_rockets && e.ammo_rockets < g_pickup_rockets_max) || (e.ammo_nails && e.ammo_nails < g_pickup_nails_max) || (e.ammo_shells && e.ammo_shells < g_pickup_shells_max)); case 2: return (e.armorvalue < autocvar_g_balance_armor_regenstable); case 3: return (e.health > 0); } - return FALSE; + return false; } void mage_spike_explode() @@ -87,7 +91,7 @@ void mage_spike_explode() self.realowner.mage_spike = world; pointparticles(particleeffectnum("explosion_small"), self.origin, '0 0 0', 1); - RadiusDamage (self, self.realowner, (autocvar_g_monster_mage_attack_spike_damage), (autocvar_g_monster_mage_attack_spike_damage) * 0.5, (autocvar_g_monster_mage_attack_spike_radius), world, 0, DEATH_MONSTER_MAGE, other); + RadiusDamage (self, self.realowner, (autocvar_g_monster_mage_attack_spike_damage), (autocvar_g_monster_mage_attack_spike_damage) * 0.5, (autocvar_g_monster_mage_attack_spike_radius), world, world, 0, DEATH_MONSTER_MAGE, other); remove (self); } @@ -139,9 +143,9 @@ void mage_spike_think() { // Is it a better idea (shorter distance) to trace to the target itself? if ( vlen(self.origin + olddir * self.wait) < dist) - traceline(self.origin, self.origin + olddir * self.wait, FALSE, self); + traceline(self.origin, self.origin + olddir * self.wait, false, self); else - traceline(self.origin, eorg, FALSE, self); + traceline(self.origin, eorg, false, self); // Setup adaptive tracelength self.wait = bound((autocvar_g_monster_mage_attack_spike_smart_trace_min), vlen(self.origin - trace_endpos), self.wait = (autocvar_g_monster_mage_attack_spike_smart_trace_max)); @@ -187,17 +191,17 @@ void mage_attack_spike() self.mage_spike = missile; - CSQCProjectile(missile, TRUE, PROJECTILE_MAGE_SPIKE, TRUE); + CSQCProjectile(missile, true, PROJECTILE_MAGE_SPIKE, true); } void mage_heal() { entity head; - float washealed = FALSE; + float washealed = false; for(head = findradius(self.origin, (autocvar_g_monster_mage_heal_range)); head; head = head.chain) if(friend_needshelp(head)) { - washealed = TRUE; + washealed = true; string fx = ""; if(IS_PLAYER(head)) { @@ -209,6 +213,7 @@ void mage_heal() break; case 1: if(head.ammo_cells) head.ammo_cells = bound(head.ammo_cells, head.ammo_cells + 1, g_pickup_cells_max); + if(head.ammo_plasma) head.ammo_plasma = bound(head.ammo_plasma, head.ammo_plasma + 1, g_pickup_plasma_max); if(head.ammo_rockets) head.ammo_rockets = bound(head.ammo_rockets, head.ammo_rockets + 1, g_pickup_rockets_max); if(head.ammo_shells) head.ammo_shells = bound(head.ammo_shells, head.ammo_shells + 2, g_pickup_shells_max); if(head.ammo_nails) head.ammo_nails = bound(head.ammo_nails, head.ammo_nails + 5, g_pickup_nails_max); @@ -233,7 +238,8 @@ void mage_heal() { pointparticles(particleeffectnum("healing_fx"), head.origin, '0 0 0', 1); head.health = bound(0, head.health + (autocvar_g_monster_mage_heal_allies), head.max_health); - WaypointSprite_UpdateHealth(head.sprite, head.health); + if(!(head.spawnflags & MONSTERFLAG_INVINCIBLE)) + WaypointSprite_UpdateHealth(head.sprite, head.health); } } @@ -247,7 +253,7 @@ void mage_heal() void mage_push() { sound(self, CH_SHOTS, "weapons/tagexp1.wav", 1, ATTEN_NORM); - RadiusDamage (self, self, (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_radius), world, (autocvar_g_monster_mage_attack_push_force), DEATH_MONSTER_MAGE, self.enemy); + RadiusDamage (self, self, (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_radius), world, world, (autocvar_g_monster_mage_attack_push_force), DEATH_MONSTER_MAGE, self.enemy); pointparticles(particleeffectnum("TE_EXPLOSION"), self.origin, '0 0 0', 1); self.frame = mage_anim_attack; @@ -298,10 +304,10 @@ float mage_attack(float attack_type) if(random() <= 0.7) { mage_push(); - return TRUE; + return true; } - return FALSE; + return false; } case MONSTER_ATTACK_RANGED: { @@ -310,37 +316,32 @@ float mage_attack(float attack_type) if(random() <= 0.4) { mage_teleport(); - return TRUE; + return true; } else { self.frame = mage_anim_attack; self.attack_finished_single = time + (autocvar_g_monster_mage_attack_spike_delay); defer(0.2, mage_attack_spike); - return TRUE; + return true; } } if(self.mage_spike) - return TRUE; + return true; else - return FALSE; + return false; } } - return FALSE; + return false; } void spawnfunc_monster_mage() { self.classname = "monster_mage"; - self.monster_spawnfunc = spawnfunc_monster_mage; - - if(Monster_CheckAppearFlags(self)) - return; - - if(!monster_initialize(MON_MAGE, FALSE)) { remove(self); return; } + if(!monster_initialize(MON_MAGE.monsterid)) { remove(self); return; } } // compatibility with old spawns @@ -353,13 +354,13 @@ float m_mage(float req) case MR_THINK: { entity head; - float need_help = FALSE; + float need_help = false; for(head = findradius(self.origin, (autocvar_g_monster_mage_heal_range)); head; head = head.chain) if(head != self) if(friend_needshelp(head)) { - need_help = TRUE; + need_help = true; break; } @@ -378,12 +379,12 @@ float m_mage(float req) mage_shield(); monster_move((autocvar_g_monster_mage_speed_run), (autocvar_g_monster_mage_speed_walk), (autocvar_g_monster_mage_speed_stop), mage_anim_walk, mage_anim_run, mage_anim_idle); - return TRUE; + return true; } case MR_DEATH: { self.frame = mage_anim_death; - return TRUE; + return true; } case MR_SETUP: { @@ -393,18 +394,18 @@ float m_mage(float req) self.monster_attackfunc = mage_attack; self.frame = mage_anim_walk; - return TRUE; + return true; } case MR_PRECACHE: { - precache_model ("models/monsters/mage.dpm"); + precache_model("models/monsters/mage.dpm"); precache_sound ("weapons/grenade_impact.wav"); precache_sound ("weapons/tagexp1.wav"); - return TRUE; + return true; } } - return TRUE; + return true; } #endif // SVQC @@ -415,13 +416,11 @@ float m_mage(float req) { case MR_PRECACHE: { - precache_model ("models/monsters/mage.dpm"); - return TRUE; + return true; } } - return TRUE; + return true; } #endif // CSQC -#endif // REGISTER_MONSTER