From: Mario Date: Sun, 10 Feb 2013 22:33:09 +0000 (+1100) Subject: Add FLAC Cannon support to TD X-Git-Tag: xonotic-v0.8.0~241^2^2~521 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=1b5c35331421357a0060f695db54a01b6edefafa;p=xonotic%2Fxonotic-data.pk3dir.git Add FLAC Cannon support to TD --- diff --git a/gamemodes.cfg b/gamemodes.cfg index 0debc59d2..f60293570 100644 --- a/gamemodes.cfg +++ b/gamemodes.cfg @@ -507,6 +507,7 @@ set g_td_turret_plasma_cost 50 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_flac_cost 40 set g_td_turret_upgrade_cost 100 set g_td_monsters_speed_walk 75 set g_td_monsters_speed_run 110 diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 9d11d27c6..1ed5378b7 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -1295,6 +1295,7 @@ float autocvar_g_td_turret_plasma_cost; float autocvar_g_td_turret_mlrs_cost; float autocvar_g_td_turret_walker_cost; float autocvar_g_td_tower_buff_cost; +float autocvar_g_td_turret_flac_cost; float autocvar_g_td_monsters_skill_start; float autocvar_g_td_monsters_skill_increment; float autocvar_g_td_monsters_speed_walk; diff --git a/qcsrc/server/monsters/monster/hknight.qc b/qcsrc/server/monsters/monster/hknight.qc index a4b42acbd..46c652af5 100644 --- a/qcsrc/server/monsters/monster/hknight.qc +++ b/qcsrc/server/monsters/monster/hknight.qc @@ -80,6 +80,7 @@ void hknight_shoot () setsize (missile, '0 0 0', '0 0 0'); setorigin(missile, self.origin + '0 0 10' + v_forward * 14); missile.scale = self.scale; + missile.flags = FL_PROJECTILE; missile.velocity = dir * 400; missile.avelocity = '300 300 300'; missile.nextthink = time + 5; @@ -231,6 +232,7 @@ void hellknight_fireball () missile.movetype = MOVETYPE_FLYMISSILE; setsize (missile, fmins, fmaxs); setorigin(missile, self.origin + '0 0 10' + v_forward * 14); + missile.flags = FL_PROJECTILE; missile.velocity = dir * 400; missile.avelocity = '300 300 300'; missile.nextthink = time + 5; diff --git a/qcsrc/server/monsters/monster/shalrath.qc b/qcsrc/server/monsters/monster/shalrath.qc index 732ff78ae..caa96b73a 100644 --- a/qcsrc/server/monsters/monster/shalrath.qc +++ b/qcsrc/server/monsters/monster/shalrath.qc @@ -64,47 +64,6 @@ float shal_missile () return TRUE; } -void() ShalHome; -void ShalMissile_Spawn () -{ - local vector dir = '0 0 0'; - local float dist = 0; - - self.realowner.effects |= EF_MUZZLEFLASH; - - dir = normalize((self.owner.enemy.origin + '0 0 10') - self.owner.origin); - dist = vlen (self.owner.enemy.origin - self.owner.origin); - - self.solid = SOLID_BBOX; - self.movetype = MOVETYPE_FLYMISSILE; - CSQCProjectile(self, TRUE, PROJECTILE_CRYLINK, TRUE); - - self.realowner.v_angle = self.realowner.angles; - makevectors (self.realowner.angles); - - setsize (self, '0 0 0', '0 0 0'); - - setorigin (self, self.realowner.origin + v_forward * 14 + '0 0 30' + v_right * -14); - self.velocity = dir * 400; - self.avelocity = '300 300 300'; - self.enemy = self.realowner.enemy; - self.touch = W_Plasma_TouchExplode; - ShalHome(); -} - -void ShalMissile () -{ - local entity missile = world; - - sound (self, CHAN_WEAPON, "weapons/spike.wav", 1, ATTN_NORM); - - missile = spawn (); - missile.owner = missile.realowner = self; - - missile.think = ShalMissile_Spawn; - missile.nextthink = time; -} - .float shal_cycles; void ShalHome () { @@ -118,7 +77,7 @@ void ShalHome () } dir = normalize(vtemp - self.origin); UpdateCSQCProjectile(self); - if (autocvar_skill == 3) + if (monster_skill == 3) self.velocity = dir * 350; else self.velocity = dir * 250; @@ -126,6 +85,40 @@ void ShalHome () self.think = ShalHome; } +void ShalMissile () +{ + local entity missile = world; + local vector dir = '0 0 0'; + local float dist = 0; + + self.effects |= EF_MUZZLEFLASH; + + sound (self, CHAN_WEAPON, "weapons/spike.wav", 1, ATTN_NORM); + + missile = spawn (); + missile.owner = missile.realowner = self; + + self.v_angle = self.angles; + makevectors (self.angles); + + dir = normalize((self.enemy.origin + '0 0 10') - self.origin); + dist = vlen (self.enemy.origin - self.origin); + + missile.think = ShalHome; + missile.nextthink = time; + missile.solid = SOLID_BBOX; + missile.movetype = MOVETYPE_FLYMISSILE; + missile.flags = FL_PROJECTILE; + setorigin (missile, self.origin + v_forward * 14 + '0 0 30' + v_right * -14); + setsize (missile, '0 0 0', '0 0 0'); + missile.velocity = dir * 400; + missile.avelocity = '300 300 300'; + missile.enemy = self.enemy; + missile.touch = W_Plasma_TouchExplode; + + CSQCProjectile(missile, TRUE, PROJECTILE_CRYLINK, TRUE); +} + float ShalrathCheckAttack () { local vector spot1 = '0 0 0', spot2 = '0 0 0'; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 3c2b9fb07..b9203d844 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -113,6 +113,7 @@ MUTATOR_HOOKABLE(TurretValidateTarget); // INPUT: entity turret_target; entity turret; + float turret_flags; MUTATOR_HOOKABLE(OnEntityPreSpawn); // return error to prevent entity spawn, or modify the entity diff --git a/qcsrc/server/mutators/gamemode_td.qc b/qcsrc/server/mutators/gamemode_td.qc index 46f5d935f..99688e396 100644 --- a/qcsrc/server/mutators/gamemode_td.qc +++ b/qcsrc/server/mutators/gamemode_td.qc @@ -645,6 +645,11 @@ void td_Init() MUTATOR_HOOKFUNCTION(td_TurretValidateTarget) { + if(turret_flags & TFL_TARGETSELECT_MISSILESONLY) + if(turret_target.flags & FL_PROJECTILE) + if(turret_target.owner.flags & FL_MONSTER) + return TRUE; // flac support + if(turret.turrcaps_flags & TFL_TURRCAPS_SUPPORT && turret_target.turrcaps_flags & TFL_TURRCAPS_ISTURRET) return TRUE; if not(turret_target.flags & FL_MONSTER) @@ -936,6 +941,14 @@ MUTATOR_HOOKFUNCTION(td_PlayerCommand) sprint(self, "Spawned 1 MLRS turret", "\n"); return TRUE; } + case "flac": + { + if(self.ammo_fuel < autocvar_g_td_turret_flac_cost) break; + self.ammo_fuel -= autocvar_g_td_turret_flac_cost; + spawnturret(self, self, "flac", trace_endpos); + sprint(self, "Spawned 1 FLAC Cannon", "\n"); + return TRUE; + } case "walker": { if(self.ammo_fuel < autocvar_g_td_turret_walker_cost) break; diff --git a/qcsrc/server/tturrets/system/system_main.qc b/qcsrc/server/tturrets/system/system_main.qc index 8907bc41b..ba42215ae 100644 --- a/qcsrc/server/tturrets/system/system_main.qc +++ b/qcsrc/server/tturrets/system/system_main.qc @@ -573,6 +573,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl vector v_tmp; turret_target = e_target; + turret_flags = validate_flags; turret = e_turret; if(MUTATOR_CALLHOOK(TurretValidateTarget)) return 1;