]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/gamemode_invasion.qc
Merge branch 'master' into Mario/vaporizer_damage
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / gamemode_invasion.qc
index 364cb7fe3b513630e6e990db2334ed7e1b0ddb1e..c4750d98228fc6279e3bfa2bbe5f2ba9c83ca0bf 100644 (file)
@@ -1,3 +1,11 @@
+#include "gamemode_invasion.qh"
+#include "../_all.qh"
+
+#include "gamemode.qh"
+
+#include "../../common/monsters/spawn.qh"
+#include "../../common/monsters/sv_monsters.qh"
+
 void spawnfunc_invasion_spawnpoint()
 {
        if(!g_invasion) { remove(self); return; }
@@ -12,7 +20,7 @@ void spawnfunc_invasion_spawnpoint()
 float invasion_PickMonster(float supermonster_count)
 {
        if(autocvar_g_invasion_zombies_only)
-               return MON_ZOMBIE;
+               return MON_ZOMBIE.monsterid;
 
        float i;
        entity mon;
@@ -54,24 +62,24 @@ void invasion_SpawnChosenMonster(float mon)
 
        if(spawn_point == world)
        {
-               dprint("Warning: couldn't find any invasion_spawnpoint spawnpoints, attempting to spawn monsters in random locations\n");
+               LOG_TRACE("Warning: couldn't find any invasion_spawnpoint spawnpoints, attempting to spawn monsters in random locations\n");
                entity e = spawn();
                setsize(e, (get_monsterinfo(mon)).mins, (get_monsterinfo(mon)).maxs);
 
                if(MoveToRandomMapLocation(e, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256))
-                       monster = spawnmonster("", mon, world, world, e.origin, FALSE, FALSE, 2);
+                       monster = spawnmonster("", mon, world, world, e.origin, false, false, 2);
                else return;
 
                e.think = SUB_Remove;
                e.nextthink = time + 0.1;
        }
        else
-               monster = spawnmonster("", ((spawn_point.monsterid) ? spawn_point.monsterid : mon), spawn_point, spawn_point, spawn_point.origin, FALSE, FALSE, 2);
-       
+               monster = spawnmonster("", ((spawn_point.monsterid) ? spawn_point.monsterid : mon), spawn_point, spawn_point, spawn_point.origin, false, false, 2);
+
        if(spawn_point) monster.target2 = spawn_point.target2;
        monster.spawnshieldtime = time;
        if(spawn_point && spawn_point.target_range) monster.target_range = spawn_point.target_range;
-       
+
        if(teamplay)
        if(spawn_point && spawn_point.team && inv_monsters_perteam[spawn_point.team] > 0)
                monster.team = spawn_point.team;
@@ -82,14 +90,14 @@ void invasion_SpawnChosenMonster(float mon)
                if(inv_monsters_perteam[NUM_TEAM_2] > 0) RandomSelection_Add(world, NUM_TEAM_2, string_null, 1, 1);
                if(invasion_teams >= 3) if(inv_monsters_perteam[NUM_TEAM_3] > 0) { RandomSelection_Add(world, NUM_TEAM_3, string_null, 1, 1); }
                if(invasion_teams >= 4) if(inv_monsters_perteam[NUM_TEAM_4] > 0) { RandomSelection_Add(world, NUM_TEAM_4, string_null, 1, 1); }
-               
+
                monster.team = RandomSelection_chosen_float;
        }
-       
+
        if(teamplay)
        {
                monster_setupcolors(monster);
-       
+
                if(monster.sprite)
                {
                        WaypointSprite_UpdateTeamRadar(monster.sprite, RADARICON_DANGER, ((monster.team) ? Team_ColorRGB(monster.team) : '1 0 0'));
@@ -98,8 +106,8 @@ void invasion_SpawnChosenMonster(float mon)
                        monster.sprite.SendFlags |= 1;
                }
        }
-       
-       monster.monster_attack = FALSE; // it's the player's job to kill all the monsters
+
+       monster.monster_attack = false; // it's the player's job to kill all the monsters
 
        if(inv_roundcnt >= inv_maxrounds)
                monster.spawnflags |= MONSTERFLAG_MINIBOSS; // last round spawns minibosses
@@ -118,7 +126,7 @@ float Invasion_CheckWinner()
        if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0)
        {
                FOR_EACH_MONSTER(head)
-                       monster_remove(head);
+                       Monster_Remove(head);
 
                Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_OVER);
                Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_OVER);
@@ -126,7 +134,7 @@ float Invasion_CheckWinner()
                return 1;
        }
 
-       float total_alive_monsters = 0, supermonster_count = 0, red_alive = 0, blue_alive = 0, yellow_alive = 0, pink_alive = 0;;
+       float total_alive_monsters = 0, supermonster_count = 0, red_alive = 0, blue_alive = 0, yellow_alive = 0, pink_alive = 0;
 
        FOR_EACH_MONSTER(head) if(head.health > 0)
        {
@@ -157,7 +165,7 @@ float Invasion_CheckWinner()
 
        if(inv_numspawned < 1)
                return 0; // nothing has spawned yet
-               
+
        if(teamplay)
        {
                if(((red_alive > 0) + (blue_alive > 0) + (yellow_alive > 0) + (pink_alive > 0)) > 1)
@@ -182,7 +190,7 @@ float Invasion_CheckWinner()
                if(pink_alive > 0)
                if(winner_team) { winner_team = 0; }
                else { winner_team = NUM_TEAM_4; }
-       }       
+       }
        else
        FOR_EACH_PLAYER(head)
        {
@@ -195,7 +203,7 @@ float Invasion_CheckWinner()
        }
 
        FOR_EACH_MONSTER(head)
-               monster_remove(head);
+               Monster_Remove(head);
 
        if(teamplay)
        {
@@ -218,7 +226,7 @@ float Invasion_CheckWinner()
 
 float Invasion_CheckPlayers()
 {
-       return TRUE;
+       return true;
 }
 
 void Invasion_RoundStart()
@@ -271,13 +279,13 @@ MUTATOR_HOOKFUNCTION(invasion_MonsterDies)
                }
        }
 
-       return FALSE;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_MonsterSpawn)
 {
        if(!(self.spawnflags & MONSTERFLAG_SPAWNED))
-               return TRUE;
+               return true;
 
        if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
        {
@@ -288,20 +296,20 @@ MUTATOR_HOOKFUNCTION(invasion_MonsterSpawn)
        self.monster_skill = inv_monsterskill;
 
        if((get_monsterinfo(self.monsterid)).spawnflags & MON_FLAG_SUPERMONSTER)
-               Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_INVASION_SUPERMONSTER, M_NAME(self.monsterid));
+               Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_INVASION_SUPERMONSTER, self.monster_name);
 
        self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_BOTCLIP | DPCONTENTS_MONSTERCLIP;
 
-       return FALSE;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_OnEntityPreSpawn)
 {
        if(startsWith(self.classname, "monster_"))
        if(!(self.spawnflags & MONSTERFLAG_SPAWNED))
-               return TRUE;
-       
-       return FALSE;
+               return true;
+
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_StartFrame)
@@ -309,19 +317,19 @@ MUTATOR_HOOKFUNCTION(invasion_StartFrame)
        monsters_total = inv_maxspawned; // TODO: make sure numspawned never exceeds maxspawned
        monsters_killed = inv_numkilled;
 
-       return FALSE;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_PlayerRegen)
 {
        // no regeneration in invasion
-       return TRUE;
+       return true;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_PlayerSpawn)
 {
-       self.bot_attack = FALSE;
-       return FALSE;
+       self.bot_attack = false;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_PlayerDamage)
@@ -332,13 +340,13 @@ MUTATOR_HOOKFUNCTION(invasion_PlayerDamage)
                frag_force = '0 0 0';
        }
 
-       return FALSE;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_PlayerCommand)
 {
        if(MUTATOR_RETURNVALUE) // command was already handled?
-               return FALSE;
+               return false;
 
        if(cmd_name == "debuginvasion")
        {
@@ -350,18 +358,18 @@ MUTATOR_HOOKFUNCTION(invasion_PlayerCommand)
                sprint(self, strcat("monsters_killed = ", ftos(monsters_killed), "\n"));
                sprint(self, strcat("inv_monsterskill = ", ftos(inv_monsterskill), "\n"));
 
-               return TRUE;
+               return true;
        }
 
-       return FALSE;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_BotShouldAttack)
 {
-       if(!(checkentity.flags & FL_MONSTER))
-               return TRUE;
-       
-       return FALSE;
+       if(!IS_MONSTER(checkentity))
+               return true;
+
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_SetStartItems)
@@ -369,12 +377,12 @@ MUTATOR_HOOKFUNCTION(invasion_SetStartItems)
        start_health = 200;
        start_armorvalue = 200;
 
-       return FALSE;
+       return false;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_AccuracyTargetValid)
 {
-       if(frag_target.flags & FL_MONSTER)
+       if(IS_MONSTER(frag_target))
                return MUT_ACCADD_INVALID;
        return MUT_ACCADD_INDIFFERENT;
 }
@@ -382,19 +390,19 @@ MUTATOR_HOOKFUNCTION(invasion_AccuracyTargetValid)
 MUTATOR_HOOKFUNCTION(invasion_AllowMobSpawning)
 {
        // monster spawning disabled during an invasion
-       return TRUE;
+       return true;
 }
 
 MUTATOR_HOOKFUNCTION(invasion_GetTeamCount)
 {
        ret_float = invasion_teams;
-       return FALSE;
+       return false;
 }
 
 void invasion_ScoreRules(float inv_teams)
 {
        if(inv_teams) { CheckAllowedTeams(world); }
-       ScoreRules_basics(inv_teams, 0, 0, FALSE);
+       ScoreRules_basics(inv_teams, 0, 0, false);
        if(inv_teams) ScoreInfo_SetLabel_TeamScore(ST_INV_KILLS, "frags", SFL_SORT_PRIO_PRIMARY);
        ScoreInfo_SetLabel_PlayerScore(SP_KILLS, "frags", ((inv_teams) ? SFL_SORT_PRIO_SECONDARY : SFL_SORT_PRIO_PRIMARY));
        ScoreRules_basics_end();
@@ -406,7 +414,7 @@ void invasion_DelayedInit() // Do this check with a delay so we can wait for tea
                invasion_teams = bound(2, autocvar_g_invasion_teams, 4);
        else
                invasion_teams = 0;
-       
+
        independent_players = 1; // to disable extra useless scores
 
        invasion_ScoreRules(invasion_teams);
@@ -423,7 +431,7 @@ 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);
+               MON_ACTION(MON_ZOMBIE.monsterid, MR_PRECACHE);
        else
        {
                float i;
@@ -437,7 +445,7 @@ void invasion_Initialize()
                        MON_ACTION(i, MR_PRECACHE);
                }
        }
-       
+
        InitializeEntity(world, invasion_DelayedInit, INITPRIO_GAMETYPE);
 }
 
@@ -475,7 +483,7 @@ MUTATOR_DEFINITION(gamemode_invasion)
 
        MUTATOR_ONREMOVE
        {
-               print("This is a game type and it cannot be removed at runtime.");
+               LOG_INFO("This is a game type and it cannot be removed at runtime.");
                return -1;
        }