From: Mario Date: Sun, 10 Feb 2013 05:43:36 +0000 (+1100) Subject: Add some more customizable options for mappers X-Git-Tag: xonotic-v0.8.0~241^2^2~523 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=b7c329385b34d08344162f95ca7b942bd0c79f41;p=xonotic%2Fxonotic-data.pk3dir.git Add some more customizable options for mappers --- diff --git a/gamemodes.cfg b/gamemodes.cfg index a01f05a37..0debc59d2 100644 --- a/gamemodes.cfg +++ b/gamemodes.cfg @@ -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 diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 1c3fa26b9..9d11d27c6 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -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; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index abef8e8d6..3c2b9fb07 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -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: diff --git a/qcsrc/server/mutators/gamemode_rts.qc b/qcsrc/server/mutators/gamemode_rts.qc index 4607abff6..166ffad04 100644 --- a/qcsrc/server/mutators/gamemode_rts.qc +++ b/qcsrc/server/mutators/gamemode_rts.qc @@ -257,7 +257,7 @@ MUTATOR_HOOKFUNCTION(rts_MonsterThink) } if(self.selected) - self.colormod = color * 4; + self.colormod = color * 10; else self.colormod = color; diff --git a/qcsrc/server/mutators/gamemode_td.qc b/qcsrc/server/mutators/gamemode_td.qc index c63f7b88b..46f5d935f 100644 --- a/qcsrc/server/mutators/gamemode_td.qc +++ b/qcsrc/server/mutators/gamemode_td.qc @@ -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); diff --git a/qcsrc/server/mutators/gamemode_td.qh b/qcsrc/server/mutators/gamemode_td.qh index 30d8e25f7..b3a567d87 100644 --- a/qcsrc/server/mutators/gamemode_td.qh +++ b/qcsrc/server/mutators/gamemode_td.qh @@ -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; diff --git a/qcsrc/server/tturrets/system/system_damage.qc b/qcsrc/server/tturrets/system/system_damage.qc index bf6c79936..19974401f 100644 --- a/qcsrc/server/tturrets/system/system_damage.qc +++ b/qcsrc/server/tturrets/system/system_damage.qc @@ -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);