]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add some more customizable options for mappers
authorMario <mario.mario@y7mail.com>
Sun, 10 Feb 2013 05:43:36 +0000 (16:43 +1100)
committerMario <mario.mario@y7mail.com>
Sun, 10 Feb 2013 05:43:36 +0000 (16:43 +1100)
gamemodes.cfg
qcsrc/server/autocvars.qh
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_rts.qc
qcsrc/server/mutators/gamemode_td.qc
qcsrc/server/mutators/gamemode_td.qh
qcsrc/server/tturrets/system/system_damage.qc

index a01f05a37e830163f97db0c42c64115d7f824b14..0debc59d2ad58021745a8818ad186cfac02e828d 100644 (file)
@@ -508,6 +508,9 @@ set g_td_turret_mlrs_cost 80
 set g_td_turret_walker_cost 100
 set g_td_tower_buff_cost 70
 set g_td_turret_upgrade_cost 100
+set g_td_monsters_speed_walk 75
+set g_td_monsters_speed_run 110
+set g_td_monsters_spawn_delay 3
 
 // ====================
 //  real-time strategy
index 1c3fa26b9e97e1d8e3d08ea84473f2adf6f1ac9d..9d11d27c68a446b65e3126cb53282fa7b2a8f5eb 100644 (file)
@@ -1297,6 +1297,9 @@ float autocvar_g_td_turret_walker_cost;
 float autocvar_g_td_tower_buff_cost;
 float autocvar_g_td_monsters_skill_start;
 float autocvar_g_td_monsters_skill_increment;
+float autocvar_g_td_monsters_speed_walk;
+float autocvar_g_td_monsters_speed_run;
+float autocvar_g_td_monsters_spawn_delay;
 float autocvar_g_td_monsters_spawnshield_time;
 float autocvar_g_td_turret_upgrade_cost;
 float autocvar_g_za_monster_count;
index abef8e8d69bf9b1c3acf4aca40c840a37cd5a451..3c2b9fb073c0a863924fcd5601b21c522baed0cc 100644 (file)
@@ -105,6 +105,9 @@ MUTATOR_HOOKABLE(TurretSpawn);
        // return error to request removal
        // INPUT: self - turret
        
+MUTATOR_HOOKABLE(TurretDies);
+       // called when a turret dies
+       
 MUTATOR_HOOKABLE(TurretValidateTarget);
        // return target score
        // INPUT:
index 4607abff6994ba401f2e31ed85fec16a7635c1fa..166ffad049e349d243ab2721430a4824981ae1a8 100644 (file)
@@ -257,7 +257,7 @@ MUTATOR_HOOKFUNCTION(rts_MonsterThink)
        }
        
        if(self.selected)
-               self.colormod = color * 4;
+               self.colormod = color * 10;
        else
                self.colormod = color;
                
index c63f7b88ba77489779e24b44d99910921d969349..46f5d935ff5f4f67952012df09cd0d70480f7211 100644 (file)
@@ -27,6 +27,10 @@ void spawnfunc_td_controller()
        wave_count = ((self.startwave) ? self.startwave : autocvar_g_td_start_wave);
        max_turrets = ((self.maxturrets) ? self.maxturrets : autocvar_g_td_turret_max);
        build_time = ((self.buildtime) ? self.buildtime : autocvar_g_td_buildphase_time);
+       m_speed_walk = ((self.mspeed_walk) ? self.mspeed_walk : autocvar_g_td_monsters_speed_walk);
+       m_speed_run = ((self.mspeed_run) ? self.mspeed_run : autocvar_g_td_monsters_speed_run);
+       spawn_delay = ((self.spawndelay) ? self.spawndelay : autocvar_g_td_monsters_spawn_delay);
+       max_current = ((self.maxcurrent) ? self.maxcurrent : autocvar_g_td_current_monsters);
                
        wave_end(TRUE);
 }
@@ -394,10 +398,10 @@ void combat_phase()
        monstrngth = Monster_GetStrength(whichmon);
        montype = Monster_GetType(whichmon);
        
-       if(current_monsters <= autocvar_g_td_current_monsters && whichmon != "")
+       if(current_monsters <= max_current && whichmon != "")
        {
                TD_SpawnMonster(whichmon, monstrngth, montype);
-               self.nextthink = time + 3;
+               self.nextthink = time + spawn_delay;
        }
        else
                self.nextthink = time + 6;
@@ -704,16 +708,17 @@ MUTATOR_HOOKFUNCTION(td_PlayerDamage_Calculate)
        if((frag_target.turrcaps_flags & TFL_TURRCAPS_ISTURRET) && !(frag_attacker.flags & FL_MONSTER || frag_attacker.turrcaps_flags & TFL_TURRCAPS_SUPPORT))
                frag_damage = 0;
                
-       if((frag_target.turrcaps_flags & TFL_TURRCAPS_ISTURRET) && frag_target.health <= 0)
-       {
-               // TODO: fix this? calling on damage may be unreliable
-               if(frag_target.realowner)
-                       frag_target.realowner.turret_cnt -= 1;
-       }
-               
        return TRUE;
 }
 
+MUTATOR_HOOKFUNCTION(td_TurretDies)
+{
+       if(self.realowner)
+               self.realowner.turret_cnt -= 1;
+                       
+       return FALSE;
+}
+
 MUTATOR_HOOKFUNCTION(td_MonsterCheckBossFlag)
 {
        // No minibosses in tower defense
@@ -742,8 +747,8 @@ MUTATOR_HOOKFUNCTION(td_MonsterMove)
        if(self.goalentity == world)
                self.goalentity = PickGenerator();
        
-       monster_speed_run = 110 * monster_skill;
-       monster_speed_walk = 75 * monster_skill;
+       monster_speed_run = m_speed_run * monster_skill;
+       monster_speed_walk = m_speed_walk * monster_skill;
        
        return FALSE;
 }
@@ -767,6 +772,8 @@ MUTATOR_HOOKFUNCTION(td_MonsterSpawn)
                return TRUE;
        }
        
+       current_monsters += 1;
+       
        self.spawnshieldtime = time + autocvar_g_td_monsters_spawnshield_time;
        
        self.drop_size = self.health * 0.05;
@@ -1029,6 +1036,7 @@ MUTATOR_DEFINITION(gamemode_td)
        MUTATOR_HOOK(SetStartItems, td_SetStartItems, CBC_ORDER_ANY);
        MUTATOR_HOOK(TurretValidateTarget, td_TurretValidateTarget, CBC_ORDER_ANY);
        MUTATOR_HOOK(TurretSpawn, td_TurretSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(TurretDies, td_TurretDies, CBC_ORDER_ANY);
        MUTATOR_HOOK(GiveFragsForKill, td_GiveFragsForKill, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerPreThink, td_PlayerThink, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerDies, td_PlayerDies, CBC_ORDER_ANY);
index 30d8e25f7b0677681a479132c1ee6c5ed836c047..b3a567d87fd57bc60e3f8c3fd90d67de9794a9e6 100644 (file)
@@ -8,6 +8,8 @@ float max_turrets;
 
 // Monster defs
 .float drop_size;
+float m_speed_run;
+float m_speed_walk;
 
 // Turret defs
 .float turret_buff;
@@ -16,6 +18,8 @@ float max_turrets;
 .float stat_current_wave;
 .float stat_totalwaves;
 .float spawntype;
+float spawn_delay;
+float max_current;
 float SWARM_NORMAL     = 0;
 float SWARM_WEAK       = 1;
 float SWARM_STRONG     = 2;
@@ -45,6 +49,10 @@ float current_phase;
 .float dontend;
 .float maxturrets;
 .float buildtime;
+.float mspeed_run;
+.float mspeed_walk;
+.float spawndelay;
+.float maxcurrent;
 
 // Generator
 float gendestroyed;
index bf6c79936fe0b0604ce67cf24bffa7ba3f846a7f..19974401f325f2407c148d6df02ccaaa45ec221c 100644 (file)
@@ -22,6 +22,8 @@ void turret_stdproc_die()
     self.takedamage             = DAMAGE_NO;
 
     self.health             = 0;
+       
+       MUTATOR_CALLHOOK(TurretDies);
 
 // Go boom
     //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);