From 301ce62a626294118b066bec8d4e50bb7e7ed7ee Mon Sep 17 00:00:00 2001 From: Robert Fritzen Date: Thu, 21 Dec 2017 14:54:47 -0600 Subject: [PATCH] Additional Server Controls, Other Stuff Added more name change capabilities to serverControl.cs, adjusted the Acid Cannon to the new behavior, prep work for sniper zombies and the new mini boss coming in 3.9.2. --- README.md | 11 +- scripts/TWM2/Bosses/ColonelWindshear.cs | 12 +- scripts/TWM2/Bosses/GeneralVegenor.cs | 24 +- scripts/TWM2/Bosses/GhostOfFire.cs | 52 +-- scripts/TWM2/Bosses/GhostOfLightning.cs | 24 +- scripts/TWM2/Bosses/LordRog.cs | 30 +- scripts/TWM2/Bosses/LordVardison.cs | 2 +- scripts/TWM2/Bosses/LordYvex.cs | 26 +- scripts/TWM2/Bosses/LordraniusTrevor.cs | 16 +- scripts/TWM2/Bosses/MajorInsignia.cs | 34 +- scripts/TWM2/Bosses/ShadeLord.cs | 26 +- scripts/TWM2/Bosses/Stormrider.cs | 42 +- scripts/TWM2/MultiUseDatablocks.cs | 337 ++++++++++++++ scripts/TWM2/Systems/BossSystem.cs | 26 +- scripts/TWM2/Zombie/PlayerZombieAttacks.cs | 2 +- scripts/TWM2/Zombie/ZombieCore.cs | 13 +- scripts/TWM2/Zombie/ZombieTypes/Demon.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs | 5 +- scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Lord.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Normal.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Rapier.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Ravager.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Shifter.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Sniper.cs | 55 ++- scripts/TWM2/Zombie/ZombieTypes/Summoner.cs | 1 + .../Zombie/ZombieTypes/VolatileRavager.cs | 1 + scripts/TWM2/Zombie/ZombieTypes/Wraith.cs | 1 + scripts/damageTypes.cs | 12 + scripts/deathMessages.cs | 20 +- scripts/weapons/Other/AcidCannon.cs | 415 ++++++------------ scripts/weapons/Other/NLS22AcidSniper.cs | 217 +++++++++ serverControl.cs | 70 +-- 35 files changed, 1004 insertions(+), 479 deletions(-) create mode 100644 scripts/weapons/Other/NLS22AcidSniper.cs diff --git a/README.md b/README.md index dfb7df1..2a8d65e 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,8 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This * Some projectiles are still tied to bosses and killstreaks, these were not altered. * For the updated damage types, death messages were added to the system such that PvP kills will be more easily tracked now. * Gameplay Changes + * All 'Mini-Boss' Zombies will now have green text in their name. + * All 'Boss' level enemies will now have gold text in their name. * The Helljump 'Oh Lordy' modifier has been changed to 'Reduces the cooldown time of the Zombie Lord's Photon Cannon by 50%'. * The RSA Laser Rifle has been renamed to the 'UR-22 Laser Rifle' * General Bug Fixes @@ -259,4 +261,11 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This * Increased the pellet damage from 0.096 to 0.11 * Increased the number of pellets from 14 to 18 * Reduced the projectile lifetime from 0.5 s to 0.15 seconds - * Added a damage factor of 4.0 to all zombie types \ No newline at end of file + * Added a damage factor of 4.0 to all zombie types + * Misc Weapons + * Acid Cannon + * The weapon that players could only obtain from zombie lords was more of a novelty toy players could pick up an fire back at zombies with + * In 3.9.2, players will find the Acid Cannon as an officer promotion award, so therefore some adjustments were made to this weapon + * Moved the Zombie Acid pulse out of this weapon, and replaced it with it's own custom projectile + * The projectile will flash enemy players when stuck by it, and cause an effective radial damage to serve as a lockdown tool + * The weapon projectile has been given a 3.0 damage modifier across all zombie types to be highly effective against zombies \ No newline at end of file diff --git a/scripts/TWM2/Bosses/ColonelWindshear.cs b/scripts/TWM2/Bosses/ColonelWindshear.cs index a39e2a0..a8614b4 100644 --- a/scripts/TWM2/Bosses/ColonelWindshear.cs +++ b/scripts/TWM2/Bosses/ColonelWindshear.cs @@ -150,7 +150,7 @@ function WindshearAttacks(%drone) { schedule(8100, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(8200, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(8300, 0, "WindshearAttack_FUNC", "Flare", %drone); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Windshear"]@": Did you actually think those missiles could hit me?"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Windshear"]@": Did you actually think those missiles could hit me?"); case 2: %target = DroneFindNearestPilot(2000,%drone); if(%target.player) { @@ -170,10 +170,10 @@ function WindshearAttacks(%drone) { schedule(8100, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(8200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(8300, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Windshear"]@": I've got missiles with "@getTaggedString(%target.name)@"'s name on them"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Windshear"]@": I've got missiles with "@getTaggedString(%target.name)@"'s name on them"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Windshear"]@": No missiles for now...."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Windshear"]@": No missiles for now...."); } case 3: %target = DroneFindNearestPilot(2000,%drone); @@ -189,21 +189,21 @@ function WindshearAttacks(%drone) { schedule(1200, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(1300, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(1400, 0, "WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Windshear"]@": I'ma kill me a "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Windshear"]@": I'ma kill me a "@getTaggedString(%target.name)@"!"); } else { schedule(700, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(1400, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(2100, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(2800, 0, "WindshearAttack_FUNC", "Flare", %drone); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Windshear"]@": FLARES!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Windshear"]@": FLARES!"); } default: schedule(700, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(1400, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(2100, 0, "WindshearAttack_FUNC", "Flare", %drone); schedule(2800, 0, "WindshearAttack_FUNC", "Flare", %drone); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Windshear"]@": FLARES! NOW!!!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Windshear"]@": FLARES! NOW!!!"); } } diff --git a/scripts/TWM2/Bosses/GeneralVegenor.cs b/scripts/TWM2/Bosses/GeneralVegenor.cs index b21687a..6865a16 100644 --- a/scripts/TWM2/Bosses/GeneralVegenor.cs +++ b/scripts/TWM2/Bosses/GeneralVegenor.cs @@ -162,7 +162,7 @@ function SpawnVegenor(%position) { Datablock = "VegenorZombieArmor"; }; %Cpos = vectorAdd(%position, "0 0 5"); - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["Vegenor"]@": Time to engage the enemy soldiers!!!"); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Time to engage the enemy soldiers!!!"); %command = "Vegenormovetotarget"; %zombie.ticks = 0; @@ -201,7 +201,7 @@ function Vegenormovetotarget(%zombie){ %zombie.startFade(1000, 0, false); %zombie.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); %zombie.setVelocity("0 0 0"); - MessageAll('msgAntiFall', "\c4"@$TWM2::BossName["Vegenor"]@": Falling, How about no..."); + MessageAll('msgAntiFall', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Falling, How about no..."); } %closestDistance = getWord(%closestClient,1); %closestClient = getWord(%closestClient,0).Player; @@ -267,9 +267,9 @@ function VegenorAttack_FUNC(%att, %args) { %msg = getrandom(1,2); switch(%msg) { case 1: - messageall('MsgSummon',"\c4"@$TWM2::BossName["Vegenor"]@": Attack the enemy"); + messageall('MsgSummon',"\c4"@$TWM2::BossNameInternal["Vegenor"]@": Attack the enemy"); case 2: - messageall('MsgSummon',"\c4"@$TWM2::BossName["Vegenor"]@": Hunt them all down"); + messageall('MsgSummon',"\c4"@$TWM2::BossNameInternal["Vegenor"]@": Hunt them all down"); } for(%i = 0; %i < 6; %i++) { %pos = vectoradd(%z.getPosition(), TWM2Lib_MainControl("getRandomPosition", 10 TAB 1)); @@ -313,23 +313,23 @@ function VegenorAttack(%z) { case 1: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": Flame on "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Flame on "@getTaggedString(%target.name)@"!"); VegenorAttack_FUNC("SetFire", %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": heh, "@getTaggedString(%target.name)@" is already dead!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": heh, "@getTaggedString(%target.name)@" is already dead!"); } case 2: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": Lets insert some fire into your life, "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Lets insert some fire into your life, "@getTaggedString(%target.name)@"!"); VegenorAttack_FUNC("FlameMissileSingle", %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": Hiding from me "@getTaggedString(%target.name)@"?"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Hiding from me "@getTaggedString(%target.name)@"?"); } case 3: - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": Fire Missiles For ALL!!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Fire Missiles For ALL!!"); for(%i = 0; %i < ClientGroup.getCount(); %i++) { %cl = ClientGroup.getObject(%i); if(isObject(%cl.player) && %cl.player.getState() !$= "dead") { @@ -339,13 +339,13 @@ function VegenorAttack(%z) { case 4: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": Hey "@getTaggedString(%target.name)@", LOOK UP!!!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Hey "@getTaggedString(%target.name)@", LOOK UP!!!"); VegenorAttack_FUNC("MeteorDrop", %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": Hiding does not beat me "@getTaggedString(%target.name)@"!!!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": Hiding does not beat me "@getTaggedString(%target.name)@"!!!"); } default: - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Vegenor"]@": I shall wait!!!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Vegenor"]@": I shall wait!!!"); } } diff --git a/scripts/TWM2/Bosses/GhostOfFire.cs b/scripts/TWM2/Bosses/GhostOfFire.cs index afe7bf6..930e2c8 100644 --- a/scripts/TWM2/Bosses/GhostOfFire.cs +++ b/scripts/TWM2/Bosses/GhostOfFire.cs @@ -408,10 +408,10 @@ function StartGhostFire(%pos) { %Ghost.isGOF = 1; %Ghost.isBoss = 1; MissionCleanup.add(%Ghost); - %Ghost.target = createTarget(%Ghost, ""@$TWM2::BossName["GoF"]@"", "", "Male3", '', %Ghost.team, PlayerSensor); + %Ghost.target = createTarget(%Ghost, ""@$TWM2::BossName["GhostOfFire"]@"", "", "Male3", '', %Ghost.team, PlayerSensor); setTargetSensorData(%Ghost.target, PlayerSensor); setTargetSensorGroup(%Ghost.target, 30); - setTargetName(%Ghost.target, addtaggedstring($TWM2::BossName["GoF"])); + setTargetName(%Ghost.target, addtaggedstring($TWM2::BossName["GhostOfFire"])); GOFAttack_FUNC("ConsiderFlamethrower", %Ghost); GOFDoRandomAttacks(%ghost); @@ -460,7 +460,7 @@ function GOFPerformMove(%ghost,%closestClient,%closestDistance) { %ghost.startFade(1000, 0, false); %ghost.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); %ghost.setVelocity("0 0 0"); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoF"]@": My ghostly powers allow me to laugh aside your hopes of me falling to my death..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": My ghostly powers allow me to laugh aside your hopes of me falling to my death..."); } %pos = %ghost.getworldboxcenter(); %closestClient = %closestClient.Player; @@ -605,7 +605,7 @@ function GOFAttack_FUNC(%att, %args) { %fP = vectorAdd(%cP, %nP2); GOFAttack_FUNC("FireBlast", %g TAB %cP); %g.setTransform(%fP); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Experience the glorious flames.."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Experience the glorious flames.."); case "Flamecano": %g = getWord(%args, 0); @@ -706,18 +706,18 @@ function GOFDoRandomAttacks(%g) { case 1: if(isObject(%target.player)) { GOFAttack_FUNC("FireBlast", %g TAB %target.player.getPosition()); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Time to heat things up "@getTaggedString(%target.name)@"."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Time to heat things up "@getTaggedString(%target.name)@"."); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Frightened of my fire? Good."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Frightened of my fire? Good."); } case 2: if(isObject(%target.player)) { GOFAttack_FUNC("Fireball", %g SPC %target.player); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Hey "@getTaggedString(%target.name)@", Dodge this!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Hey "@getTaggedString(%target.name)@", Dodge this!"); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Frightened of this? Good."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Frightened of this? Good."); } case 3: if(isObject(%target.player)) { @@ -726,10 +726,10 @@ function GOFDoRandomAttacks(%g) { schedule(800, 0, GOFAttack_FUNC, "Fireball", %g SPC %target.player); schedule(1200, 0, GOFAttack_FUNC, "Fireball", %g SPC %target.player); schedule(1600, 0, GOFAttack_FUNC, "Fireball", %g SPC %target.player); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": I have a Flame Storm cooked up nicely for "@getTaggedString(%target.name)@", enjoy..."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": I have a Flame Storm cooked up nicely for "@getTaggedString(%target.name)@", enjoy..."); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": I love Fire.. it's Good your scared."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": I love Fire.. it's Good your scared."); } case 4: if(isObject(%target.player)) { @@ -738,36 +738,36 @@ function GOFDoRandomAttacks(%g) { schedule(800, 0, GOFAttack_FUNC, "FireBlast", %g TAB vectorAdd(%target.player.getPosition(), "0 0 35")); schedule(1200, 0, GOFAttack_FUNC, "FireBlast", %g TAB vectorAdd(%target.player.getPosition(), "0 0 40")); schedule(1600, 0, GOFAttack_FUNC, "FireBlast", %g TAB vectorAdd(%target.player.getPosition(), "0 0 45")); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Hear that, it's the sound of exploding fire ending your life..."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Hear that, it's the sound of exploding fire ending your life..."); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Frightened Of Fire? Good."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Frightened Of Fire? Good."); } case 5: if(isObject(%target.player)) { GOFDoFlameCano(%g, %target); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": I Intend Every Moment... FLAMECANO!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": I Intend Every Moment... FLAMECANO!"); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Oh Well, The Volcanic Explosion Can Wait."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Oh Well, The Volcanic Explosion Can Wait."); } case 6: if(isObject(%target.player)) { GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Clensic Flames Will Persue You "@getTaggedString(%target.name)@"!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Clensic Flames Will Persue You "@getTaggedString(%target.name)@"!"); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Darn, I Love Cursed Fire."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Darn, I Love Cursed Fire."); } case 7: if(isObject(%target.player)) { GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1); GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1500); GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 3000); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": "@getTaggedString(%target.name)@", I present to you the gift, of cursed flames..."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": "@getTaggedString(%target.name)@", I present to you the gift, of cursed flames..."); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Darn, I Love Mega Cursed Fire."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Darn, I Love Mega Cursed Fire."); } case 8: if(isObject(%target.player)) { @@ -776,27 +776,27 @@ function GOFDoRandomAttacks(%g) { %time = %i * 100; schedule(%time, 0, GOFAttack_FUNC, "Fireball", %g SPC %target.player); } - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Lets unleash the fireballs upon "@getTaggedString(%target.name)@"!!!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Lets unleash the fireballs upon "@getTaggedString(%target.name)@"!!!"); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": I love Fire.. it's Good your scared."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": I love Fire.. it's Good your scared."); } case 9: GOFAttack_FUNC("FBSpiral", %g SPC 200); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Let the flaming spinner begin!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Let the flaming spinner begin!"); case 10: GOFAttack_FUNC("FBSpiral", %g SPC 200); schedule(1000, 0, GOFAttack_FUNC, "FBSpiral", %g SPC 200); schedule(2000, 0, GOFAttack_FUNC, "FBSpiral", %g SPC 200); schedule(3000, 0, GOFAttack_FUNC, "FBSpiral", %g SPC 200); schedule(4000, 0, GOFAttack_FUNC, "FBSpiral", %g SPC 200); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": CLENSE ALL!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": CLENSE ALL!"); case 11: GOFAttack_FUNC("Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); schedule(3000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); schedule(6000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); schedule(9000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": ERUPT!!! MY VOLCANO!!!!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": ERUPT!!! MY VOLCANO!!!!"); case 12: GOFAttack_FUNC("Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); schedule(3000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); @@ -806,7 +806,7 @@ function GOFDoRandomAttacks(%g) { schedule(15000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); schedule(18000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); schedule(20000, 0, GOFAttack_FUNC, "Ultracano", %g SPC "0 0" SPC getTerrainHeight("0 0 0")); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": YES YES YES!!!! SUPERVOLCANO GO!!!!!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": YES YES YES!!!! SUPERVOLCANO GO!!!!!"); case 13 or 14 or 15: if(isObject(%target.player)) { %store = %target.player.getPosition(); @@ -818,10 +818,10 @@ function GOFDoRandomAttacks(%g) { schedule(15000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store); schedule(16000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store); schedule(17000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store); - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Rise Mt. Death... Cleanse "@getTaggedString(%target.name)@"!"); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Rise Mt. Death... Cleanse "@getTaggedString(%target.name)@"!"); } else { - messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Mt Death can await...."); + messageall('TheFireMsg',"\c4"@$TWM2::BossNameInternal["GhostOfFire"]@": Mt Death can await...."); } } schedule(25000,0,"GOFDoRandomAttacks", %g); diff --git a/scripts/TWM2/Bosses/GhostOfLightning.cs b/scripts/TWM2/Bosses/GhostOfLightning.cs index 53bd760..4d17a18 100644 --- a/scripts/TWM2/Bosses/GhostOfLightning.cs +++ b/scripts/TWM2/Bosses/GhostOfLightning.cs @@ -148,13 +148,13 @@ function SpawnGhostOfLightning(%position) { Datablock = "LightningGhostArmor"; }; %Cpos = vectorAdd(%position, "0 0 5"); - MessageAll('msgBossAlertreturn', "\c4"@$TWM2::BossName["GoL"]@": It's time to show you the shocking power of electricity"); + MessageAll('msgBossAlertreturn', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": It's time to show you the shocking power of electricity"); %command = "GoLmovetotarget"; InitiateBoss(%Ghost, "GhostOfLightning"); %Ghost.team = 30; - %zname = CollapseEscape("\c7"@$TWM2::BossName["GoL"]@""); + %zname = $TWM2::BossName["GhostOfLightning"]; DoGoLAttacks(%ghost); %Ghost.target = createTarget(%Ghost, %zname, "", "Derm3", '', %Ghost.team, PlayerSensor); @@ -185,12 +185,12 @@ function GoLmovetotarget(%Ghost){ %Ghost.startFade(1000, 0, false); %Ghost.setPosition(vectorAdd(%ghost.getPosition(), "0 0 500")); %Ghost.setVelocity("0 0 0"); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": I'm back!!!"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": I'm back!!!"); } %closestDistance = getWord(%closestClient,1); %closestClient = getWord(%closestClient,0).Player; if(%closestDistance < 20) { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": I don't think so!"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": I don't think so!"); //ATTACK %p = new ShockLanceProjectile() { dataBlock = GoLShocker; @@ -243,10 +243,10 @@ function DoGoLAttacks(%ghost) { %target = FindValidTarget(%ghost); if(!isObject(%target.player)) { schedule(35000, 0, "DoGoLAttacks", %ghost); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Meh, no targets for me."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Meh, no targets for me."); return; } - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Lightning Strike Away!!!"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Lightning Strike Away!!!"); %p = discharge2(%target.player.getPosition(),"0 0 -1"); %p.setEnergyPercentage(1); addToShock(%p); @@ -255,20 +255,20 @@ function DoGoLAttacks(%ghost) { %target = FindValidTarget(%ghost); if(!isObject(%target.player)) { schedule(35000, 0, "DoGoLAttacks", %ghost); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Meh, no targets for me."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Meh, no targets for me."); return; } - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Watch Electricity Chase You!!!"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Watch Electricity Chase You!!!"); %vec = vectorNormalize(vectorSub(%target.player.getPosition(),%ghost.getPosition())); createMissileSeekingProjectile("IonMissile", %target, %ghost, %ghost.getMuzzlePoint(0), %vec, 4, 100); case 3: %target = FindValidTarget(%ghost); if(!isObject(%target.player)) { schedule(35000, 0, "DoGoLAttacks", %ghost); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Meh, no targets for me."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Meh, no targets for me."); return; } - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Die Now..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Die Now..."); %target = %target.player; %p = new ShockLanceProjectile() { dataBlock = GoLShocker; @@ -283,10 +283,10 @@ function DoGoLAttacks(%ghost) { %totalDamage = 50; %target.getDataBlock().damageObject(%target, %ghost, %target.getPosition(), %totalDamage, $DamageType::ShockLance); case 4: - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Its Storm Time"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Its Storm Time"); ionStorm(35 , 1000); case 5: - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoL"]@": Lightning Missiles For ALL!!"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["GhostOfLightning"]@": Lightning Missiles For ALL!!"); for(%i = 0; %i < ClientGroup.getCount(); %i++) { %cl = ClientGroup.getObject(%i); if(isObject(%cl.player) && %cl.player.getState() !$= "dead") { diff --git a/scripts/TWM2/Bosses/LordRog.cs b/scripts/TWM2/Bosses/LordRog.cs index 664303c..8b598a1 100644 --- a/scripts/TWM2/Bosses/LordRog.cs +++ b/scripts/TWM2/Bosses/LordRog.cs @@ -245,7 +245,7 @@ function SpawnLordRog(%position) { Datablock = "LordRogZombieArmor"; }; %Cpos = vectorAdd(%position, "0 0 5"); - MessageAll('msgBossAlertreturn', "\c4"@$TWM2::ZombieName[8]@": I AM ALIVE!!! I SHALL KILL YOU ALL"); + MessageAll('msgBossAlertreturn', "\c4"@$TWM2::BossNameInternal["LordRog"]@": I AM ALIVE!!! I SHALL KILL YOU ALL"); %zombie.iszombie = 1; StartLRAbilities(%zombie); @@ -257,7 +257,7 @@ function SpawnLordRog(%position) { InitiateBoss(%zombie, "LordRog"); %Zombie.team = 30; - %zname = $TWM2::ZombieName[8]; // <- To Hosts, Enjoy, You can + %zname = $TWM2::BossName["LordRog"]; // <- To Hosts, Enjoy, You can //Change the Zombie Names now!!! %zombie.target = createTarget(%zombie, %zname, "", "Derm3", '', %zombie.team, PlayerSensor); setTargetSensorData(%zombie.target, PlayerSensor); @@ -287,7 +287,7 @@ function LordRogmovetotarget(%zombie){ %zombie.startFade(1000, 0, false); %zombie.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); %zombie.setVelocity("0 0 0"); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::ZombieName[8]@": You think I will fall to my death!?!?"); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["LordRog"]@": You think I will fall to my death!?!?"); } %closestDistance = getWord(%closestClient,1); %closestClient = getWord(%closestClient,0).Player; @@ -343,7 +343,7 @@ function LordRogAttack_FUNC(%att, %args) { schedule(30000, 0, LordRogAttack_FUNC, "ZombieSummon", %z); //-------------------- %type = TWM2Lib_Zombie_Core("getRandomZombieType", "1 2 3 4 5 9 12 13 15"); - messageall('RogMsg',"\c4"@$TWM2::ZombieName[8]@": Attack my target!"); + messageall('RogMsg',"\c4"@$TWM2::BossNameInternal["LordRog"]@": Attack my target!"); for(%i = 0; %i < 5; %i++) { %pos = vectoradd(%z.getPosition(), TWM2Lib_MainControl("getRandomPosition", 10 TAB 1)); %fpos = vectoradd("0 0 5",%pos); @@ -360,7 +360,7 @@ function LordRogAttack_FUNC(%att, %args) { } %type = TWM2Lib_Zombie_Core("getRandomZombieType", "1 2 3 4 5 9 12 13 15"); - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Additional Reinforcements!!! NOW!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Additional Reinforcements!!! NOW!"); %typeCaller = %type SPC %type SPC %type SPC %type; %callPos = vectorAdd(%z.getPosition(), "2000 0 400"); spawnHunterDropship(%callPos, "AA", %typeCaller); @@ -496,53 +496,53 @@ function StartLRAbilities(%zombie) { case 1: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Launch!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Launch!"); LordRogAttack_FUNC("TwinLaunch", %z SPC %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Fools, you cannot withstand my power!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Fools, you cannot withstand my power!"); } case 2: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { %z.laserStormSount = 0; - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Laser Storm Begin!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Laser Storm Begin!"); LordRogAttack_FUNC("LaserStrike", %z SPC %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Fools, you cannot withstand my power!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Fools, you cannot withstand my power!"); } case 3: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Metros Maul!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Metros Maul!"); LordRogAttack_FUNC("MetrosMaul", %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Fools, you cannot withstand my power!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Fools, you cannot withstand my power!"); } case 4: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Storm Begins!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Storm Begins!"); LordRogAttack_FUNC("LaunchStorm", %z SPC %target.player); } case 5 or 6: LordRogAttack_FUNC("StaticDischarge", %z); - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Static Discharge!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Static Discharge!"); case 7: %target = FindValidTarget(%z); if(isObject(%target.player) && !%target.ignoredbyZombs) { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Metros EXTREMITY!!!!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Metros EXTREMITY!!!!"); LordRogAttack_FUNC("MeteorOblivion", %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Fools, you cannot withstand my power!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["LordRog"]@": Fools, you cannot withstand my power!"); } case 8: diff --git a/scripts/TWM2/Bosses/LordVardison.cs b/scripts/TWM2/Bosses/LordVardison.cs index 9dbdd50..901c829 100644 --- a/scripts/TWM2/Bosses/LordVardison.cs +++ b/scripts/TWM2/Bosses/LordVardison.cs @@ -923,7 +923,7 @@ function VardisonDoMove(%Boss) { if(%clDst < 6) { //Insta-Kill xD %clPlayer.setInvincible(false); - MessageAll('msgDie', "\c4Lord Vardision: DIE "@getWord(%closest, 0).namebase@"!!!"); + MessageAll('msgDie', "\c4"@$TWM2::BossNameInternal["Vardison"]@": DIE "@getWord(%closest, 0).namebase@"!!!"); %clPlayer.damage(%boss, %clPlayer.getPosition(), 10000, $DamageType::Idiocy); return; } diff --git a/scripts/TWM2/Bosses/LordYvex.cs b/scripts/TWM2/Bosses/LordYvex.cs index 47f406e..b521ffd 100644 --- a/scripts/TWM2/Bosses/LordYvex.cs +++ b/scripts/TWM2/Bosses/LordYvex.cs @@ -153,7 +153,7 @@ function SpawnYvex(%position) { Datablock = "YvexZombieArmor"; }; %Cpos = vectorAdd(%position, "0 0 5"); - MessageAll('MsgYvexreturn', "\c4"@$TWM2::ZombieName[7]@": Did you miss me? Because... I WANT MY REVENGE!!!"); + MessageAll('MsgYvexreturn', "\c4"@$TWM2::BossNameInternal["Yvex"]@": Did you miss me? Because... I WANT MY REVENGE!!!"); %command = "Yvexmovetotarget"; %zombie.ticks = 0; @@ -163,7 +163,7 @@ function SpawnYvex(%position) { YvexAttacks(%zombie); %Zombie.team = 30; - %zname = $TWM2::ZombieName[7]; // <- To Hosts, Enjoy, You can + %zname = $TWM2::BossName["Yvex"]; // <- To Hosts, Enjoy, You can //Change the Zombie Names now!!! %zombie.target = createTarget(%zombie, %zname, "", "Derm3", '', %zombie.team, PlayerSensor); setTargetSensorData(%zombie.target, PlayerSensor); @@ -195,7 +195,7 @@ function Yvexmovetotarget(%zombie){ %zombie.startFade(1000, 0, false); %zombie.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); %zombie.setVelocity("0 0 0"); - MessageAll('msgYvexAttack', "\c4"@$TWM2::ZombieName[7]@": I shall not fall to my end!"); + MessageAll('msgYvexAttack', "\c4"@$TWM2::BossNameInternal["Yvex"]@": I shall not fall to my end!"); } %closestClient = ZombieLookForTarget(%zombie); %closestDistance = getWord(%closestClient,1); @@ -281,11 +281,11 @@ function YvexAttack_FUNC(%att, %args) { %msg = getrandom(1, 3); switch(%msg) { case 1: - messageall('YvexMsg',"\c4"@$TWM2::ZombieName[7]@": Enlisted for revenge... ATTACK"); + messageall('YvexMsg',"\c4"@$TWM2::BossNameInternal["Yvex"]@": Enlisted for revenge... ATTACK"); case 2: - messageall('YvexMsg',"\c4"@$TWM2::ZombieName[7]@": Attack my soldiers.. REVENGE is ours"); + messageall('YvexMsg',"\c4"@$TWM2::BossNameInternal["Yvex"]@": Attack my soldiers.. REVENGE is ours"); case 3: - messageall('YvexMsg',"\c4"@$TWM2::ZombieName[7]@": Take out the enemy, ALL OF THEM!"); + messageall('YvexMsg',"\c4"@$TWM2::BossNameInternal["Yvex"]@": Take out the enemy, ALL OF THEM!"); } for(%i = 0; %i < 5; %i++) { %pos = vectoradd(%z.getPosition(), TWM2Lib_MainControl("getRandomPosition", 10 TAB 1)); @@ -297,7 +297,7 @@ function YvexAttack_FUNC(%att, %args) { %z.schedule(3500, "setMoveState", false); case "FireCurse": - MessageAll('msgWTFH', "\c4"@$TWM2::ZombieName[7]@": DIE!!!"); + MessageAll('msgWTFH', "\c4"@$TWM2::BossNameInternal["Yvex"]@": DIE!!!"); %zombie = getWord(%args, 0); %target = getWord(%args, 1); @@ -387,13 +387,13 @@ function YvexSniperShot::onCollision(%data, %projectile, %targetObject, %modifie %randMessage = getrandom(3)+1; switch(%randMessage) { case 1: - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Let the revenge begin, "@getTaggedString(%targ.name)@"."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Yvex"]@": Let the revenge begin, "@getTaggedString(%targ.name)@"."); case 2: - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Taste my vengance... "@getTaggedString(%targ.name)@"."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Yvex"]@": Taste my vengance... "@getTaggedString(%targ.name)@"."); case 3: - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": Sleep Forever... "@getTaggedString(%targ.name)@"."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Yvex"]@": Sleep Forever... "@getTaggedString(%targ.name)@"."); default: - MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[7]@": This Nightmare will lock you forever "@getTaggedString(%targ.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Yvex"]@": This Nightmare will lock you forever "@getTaggedString(%targ.name)@"!"); } } @@ -444,7 +444,7 @@ function Yvexnightmareloop(%zombie,%viewer) { %viewer.player.damage(0, %viewer.player.position, 0.03, $DamageType::Zombie); %zombie.setDamageLevel(%zombie.getDamageLevel() - 0.15); - BottomPrint(%viewer,"You are locked in "@$TWM2::ZombieName[7]@"'s Nightmare.",5,1); + BottomPrint(%viewer,"You are locked in "@$TWM2::BossNameInternal["Yvex"]@"'s Nightmare.",5,1); schedule(1, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/fem1/avo.deathcry_02.wav"); schedule(5, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/fem2/avo.deathcry_02.wav"); schedule(10, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/fem3/avo.deathcry_02.wav"); @@ -462,7 +462,7 @@ function Yvexnightmareloop(%zombie,%viewer) { function KillerPulse::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) { if (%targetObject.getClassName() $= "Player" && !%targetObject.isBoss) { - messageall('msgkillcurse', "\c5"@getTaggedString(%targetObject.client.name)@" Took a fatal Hit from "@$TWM2::ZombieName[7]@"'s Dark Energy"); + messageall('msgkillcurse', "\c5"@getTaggedString(%targetObject.client.name)@" Took a fatal Hit from "@$TWM2::BossNameInternal["Yvex"]@"'s Dark Energy"); %targetObject.throwWeapon(); %targetObject.clearinventory(); YvexAttack_FUNC("KillLoop", %targetObject); diff --git a/scripts/TWM2/Bosses/LordraniusTrevor.cs b/scripts/TWM2/Bosses/LordraniusTrevor.cs index f1d4832..b412688 100644 --- a/scripts/TWM2/Bosses/LordraniusTrevor.cs +++ b/scripts/TWM2/Bosses/LordraniusTrevor.cs @@ -53,7 +53,7 @@ function StartTrevor(%pos){ TrevorDetermineAttack(%tank); TrevorMove(%tank); - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": It's time to test the harbinger clan's ultimate siege weapon. ON YOU!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": It's time to test the harbinger clan's ultimate siege weapon. ON YOU!"); return %tank; } @@ -159,7 +159,7 @@ function TrevorMove(%tank) { if(%dist < 10 && !%tank.teleporting) { //interesting... trying to cut it close? %tank.teleporting = 1; - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Trying to do that huhn? I think not!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Trying to do that huhn? I think not!"); PhaseShift(%tank); } %vector = vectorscale(%tank.getForwardVector(), 1150); @@ -215,13 +215,13 @@ function TrevorDetermineAttack(%tank) { //3. Phase Shift: Tank Shifts to collider range switch(%attackNum) { case 1: - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Dodge this "@getTaggedString(%target.name)@"!!!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Dodge this "@getTaggedString(%target.name)@"!!!"); RammingSpeed(%tank, %target); case 2: - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Engage sideswipe boosters"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Engage sideswipe boosters"); SlideTarget(%tank, %target); case 3: - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Engage Phase Shift!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Engage Phase Shift!"); PhaseShift(%tank); } } @@ -230,13 +230,13 @@ function TrevorDetermineAttack(%tank) { %attackNum = getRandom(1,3); switch(%attackNum) { case 1: - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Engage missile storm on "@getTaggedString(%target.name)@"!!!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Engage missile storm on "@getTaggedString(%target.name)@"!!!"); MissileStorm(%tank, %target); case 2: - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Let a firey storm of missiles rain upon you, "@getTaggedString(%target.name)@"!!!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Let a firey storm of missiles rain upon you, "@getTaggedString(%target.name)@"!!!"); MissileRain(%tank, %target); case 3: - MessageAll('MsgBossBegin', "\c4"@$TWM2::BossName["Trevor"]@": Engage missile storm on "@getTaggedString(%target.name)@"!!!"); + MessageAll('MsgBossBegin', "\c4"@$TWM2::BossNameInternal["Trevor"]@": Engage missile storm on "@getTaggedString(%target.name)@"!!!"); MissileStorm(%tank, %target); } } diff --git a/scripts/TWM2/Bosses/MajorInsignia.cs b/scripts/TWM2/Bosses/MajorInsignia.cs index c36ee8e..95d5c1e 100644 --- a/scripts/TWM2/Bosses/MajorInsignia.cs +++ b/scripts/TWM2/Bosses/MajorInsignia.cs @@ -172,7 +172,7 @@ function SpawnInsignia(%position) { Datablock = "InsigniaZombieArmor"; }; %Cpos = vectorAdd(%position, "0 0 5"); - MessageAll('msgBossAlertreturn', "\c4"@$TWM2::BossName["Insignia"]@": The battle begins, and now you shall all die..."); + MessageAll('msgBossAlertreturn', "\c4"@$TWM2::BossNameInternal["Insignia"]@": The battle begins, and now you shall all die..."); %command = "Insigniamovetotarget"; %zombie.ticks = 0; @@ -214,7 +214,7 @@ function Insigniamovetotarget(%zombie){ %zombie.startFade(1000, 0, false); %zombie.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); %zombie.setVelocity("0 0 0"); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I won't go away that easily..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I won't go away that easily..."); } %closestDistance = getWord(%closestClient,1); %closestClient = getWord(%closestClient,0).Player; @@ -257,7 +257,7 @@ function InsigniaAttack_FUNC(%att, %args) { schedule(30000, 0, InsigniaAttack_FUNC, "ZombieSummon", %z); //-------------------- %type = TWM2Lib_Zombie_Core("getRandomZombieType", "1 2 3 5 9 12 13 15 17"); //omit 4 in place of 17: Demon -> Elite Demon - messageall('RogMsg',"\c4"@$TWM2::BossName["Insignia"]@": Slay the humans!!!"); + messageall('RogMsg',"\c4"@$TWM2::BossNameInternal["Insignia"]@": Slay the humans!!!"); for(%i = 0; %i < 6; %i++) { %pos = vectoradd(%z.getPosition(), TWM2Lib_MainControl("getRandomPosition", 10 TAB 1)); %fpos = vectoradd("0 0 5",%pos); @@ -270,7 +270,7 @@ function InsigniaAttack_FUNC(%att, %args) { case "Reinforce": %zombie = getWord(%args, 0); %type = TWM2Lib_Zombie_Core("getRandomZombieType", "1 2 3 5 9 12 13 15 17"); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Insignia"]@": It's time for you to take on my reinforcements!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Insignia"]@": It's time for you to take on my reinforcements!"); %typeCaller = %type SPC %type SPC %type SPC %type; %callPos1 = vectorAdd(%zombie.getPosition(), "2000 100 400"); spawnHunterDropship(%callPos1, "AA", %typeCaller); @@ -320,7 +320,7 @@ function InsigniaAttack_FUNC(%att, %args) { %vec = vectorsub(%target.getworldboxcenter(),%zombie.getMuzzlePoint(6)); %vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100)); %p = new TracerProjectile() { - dataBlock = LZombieAcidBall; + dataBlock = ZombieAcidPulse; initialDirection = %vec; initialPosition = %zombie.getMuzzlePoint(6); sourceObject = %zombie; @@ -431,10 +431,10 @@ function InsigniaAttack(%zombie) { %target = FindValidTarget(%zombie); %target = %target.player; if(!isObject(%target) || %target.getState() $= "Dead") { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I suppose I can wait..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I suppose I can wait..."); return; } - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": Lets shorten the distance... "@getTaggedString(%target.client.name)@"."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": Lets shorten the distance... "@getTaggedString(%target.client.name)@"."); %vec = vectorsub(%target.getworldboxcenter(), %zombie.getMuzzlePoint(0)); %vec = vectoradd(%vec, vectorscale(%target.getvelocity(), vectorlen(%vec)/100)); InsigniaAttack_FUNC("GravShot", %zombie SPC %vec); @@ -443,11 +443,11 @@ function InsigniaAttack(%zombie) { %target = FindValidTarget(%zombie); %target = %target.player; if(!isObject(%target) || %target.getState() $= "Dead") { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I suppose I can wait..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I suppose I can wait..."); return; } InsigniaAttack_FUNC("GravShot", %zombie SPC "0 0 200"); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": Death from above "@getTaggedString(%target.client.name)@"."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": Death from above "@getTaggedString(%target.client.name)@"."); %vec = vectorsub(%target.getworldboxcenter(),%zombie.getMuzzlePoint(0)); %vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100)); schedule(1500, 0, InsigniaAttack_FUNC, "GravShot", %zombie SPC %vec); @@ -456,40 +456,40 @@ function InsigniaAttack(%zombie) { %target = FindValidTarget(%zombie); %target = %target.player; if(!isObject(%target) || %target.getState() $= "Dead") { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I suppose I can wait..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I suppose I can wait..."); return; } InsigniaAttack_FUNC("AcidStorm", %zombie SPC %target); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": Acid Storm, just for you... "@getTaggedString(%target.client.name)@"."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": Acid Storm, just for you... "@getTaggedString(%target.client.name)@"."); case 4: %target = FindValidTarget(%zombie); %target = %target.player; if(!isObject(%target) || %target.getState() $= "Dead") { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I suppose I can wait..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I suppose I can wait..."); return; } InsigniaAttack_FUNC("LapseStrike", %zombie SPC %target SPC 0); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": Hey, "@getTaggedString(%target.client.name)@". Watch this."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": Hey, "@getTaggedString(%target.client.name)@". Watch this."); case 5: %target = FindValidTarget(%zombie); %target = %target.player; if(!isObject(%target) || %target.getState() $= "Dead") { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I suppose I can wait..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I suppose I can wait..."); return; } InsigniaAttack_FUNC("AcidMachineGun", %zombie SPC %target); - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": ENOUGH, "@getTaggedString(%target.client.name)@". DIE."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": ENOUGH, "@getTaggedString(%target.client.name)@". DIE."); case 6: %target = FindValidTarget(%zombie); %target = %target.player; if(!isObject(%target) || %target.getState() $= "Dead") { - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": I suppose I can wait..."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": I suppose I can wait..."); return; } - MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["Insignia"]@": C'Mere, "@getTaggedString(%target.client.name)@"."); + MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossNameInternal["Insignia"]@": C'Mere, "@getTaggedString(%target.client.name)@"."); InsigniaAttack_FUNC("DropSummon", %target); case 7: diff --git a/scripts/TWM2/Bosses/ShadeLord.cs b/scripts/TWM2/Bosses/ShadeLord.cs index 3441bfc..76c81a2 100644 --- a/scripts/TWM2/Bosses/ShadeLord.cs +++ b/scripts/TWM2/Bosses/ShadeLord.cs @@ -419,8 +419,8 @@ function SpawnShadeLord(%position) { Datablock = "ShadeLordArmor"; }; %Cpos = vectorAdd(%position, "0 0 5"); - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": Take your stand, and prepare to face your destined fate of death!"); - schedule(3000, 0, MessageAll, 'MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": And so it begins... Let's see how you face your fears..."); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Take your stand, and prepare to face your destined fate of death!"); + schedule(3000, 0, MessageAll, 'MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": And so it begins... Let's see how you face your fears..."); schedule(3500, 0, "ShadeLordFunction", %boss, "ShadeLordToggleCondition", 1); %Boss.ticks = 0; @@ -428,7 +428,7 @@ function SpawnShadeLord(%position) { %Boss.team = 30; %zname = $TWM2::BossName["ShadeLord"]; // <- To Hosts, Enjoy, You can - //Change the Zombie Names now!!! + //Change the Zombie Names now!!! $ShadeLordBoss::AllowedNighttime = 1; %Boss.target = createTarget(%Boss, %zname, "", "Derm3", '', %Boss.team, PlayerSensor); @@ -597,19 +597,19 @@ function ShadeLordFunction(%boss, %function, %args) { %attack = getRandom(1, 3); switch(%attack) { case 1: - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": SHALDORVAAAAAAAAAAAAAAH!!!!!!!"); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": SHALDORVAAAAAAAAAAAAAAH!!!!!!!"); ShadeLordFunction(%boss, "Att_ShadeLordScream", ""); case 2: - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": Descend Mighty Shade Storm, Destroy all who dare oppose us!"); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Descend Mighty Shade Storm, Destroy all who dare oppose us!"); ShadeLordFunction(%boss, "Att_ShadeLordDecend", 0); case 3: %target = FindValidTarget(%boss); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["ShadeLord"]@": Come forth my shade, Destroy "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Come forth my shade, Destroy "@getTaggedString(%target.name)@"!"); if(isObject(%target.player)) { ShadeLordFunction(%boss, "Att_ShadeStrike", %target.player); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["ShadeLord"]@": Hiding in death does not save you "@getTaggedString(%target.name)@""); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Hiding in death does not save you "@getTaggedString(%target.name)@""); } } %boss.attacks = schedule(25000, %boss, "ShadeLordFunction", %boss, "ShadeLordDarkAttacks", ""); @@ -633,10 +633,10 @@ function ShadeLordFunction(%boss, %function, %args) { %attack = getRandom(1, 2); switch(%attack) { case 1: - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": SHALDORVAAAAAAAAAAAAAAH!!!!!!!"); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": SHALDORVAAAAAAAAAAAAAAH!!!!!!!"); ShadeLordFunction(%boss, "Att_ShadeLordScream", ""); case 2: - MessageAll('MsgBossEvilness', "\c4"@$TWM2::BossName["ShadeLord"]@": Come forth, and return to me the power of the shadows!"); + MessageAll('MsgBossEvilness', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Come forth, and return to me the power of the shadows!"); ShadeLordFunction(%boss, "Att_HealSequence", 0); } %boss.attacks = schedule(25000, %boss, "ShadeLordFunction", %boss, "ShadeLordLightAttacks", ""); @@ -770,14 +770,14 @@ function ShadeLordFunction(%boss, %function, %args) { if($ShadeLordBoss::AllowedNighttime == 1) { $ShadeLordBoss::AllowedNighttime = 0; ShadeLordFunction(%boss, "ShadeLordToggleCondition", 0); - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": No, You will not break the barrier of dark!"); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": No, You will not break the barrier of dark!"); } } else { if($ShadeLordBoss::AllowedNighttime == 0) { $ShadeLordBoss::AllowedNighttime = 1; ShadeLordFunction(%boss, "ShadeLordToggleCondition", 1); - MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossName["ShadeLord"]@": Awaken, mighty storm of shade, bring forth the doom of our foes!"); + MessageAll('MsgBossSpawn', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Awaken, mighty storm of shade, bring forth the doom of our foes!"); } } if(isObject(%boss.dayCloak) && !%boss.inDeath) { @@ -823,7 +823,7 @@ function ShadeLordFunction(%boss, %function, %args) { %boss.startFade(1000, 0, false); %boss.setPosition(vectorAdd(vectoradd(%closestclient.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); %boss.setVelocity("0 0 0"); - MessageAll('MsgVardison', "\c4"@$TWM2::BossName["ShadeLord"]@": I'm back...."); + MessageAll('MsgVardison', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": I'm back...."); } %closestDistance = getWord(%closestClient,1); %closestClient = getWord(%closestClient,0).Player; @@ -831,7 +831,7 @@ function ShadeLordFunction(%boss, %function, %args) { if(%closestDistance < 10) { ShadeLordFunction(%boss, "ShadeLordDropKill", %closestClient); %closestClient.client.bossProficiency.shadeTargets++; - MessageAll('MsgVardison', "\c4"@$TWM2::BossName["ShadeLord"]@": Feel The Vengeance of the Shadows "@getTaggedString(%closestClient.client.name)@"."); + MessageAll('MsgVardison', "\c4"@$TWM2::BossNameInternal["ShadeLord"]@": Feel The Vengeance of the Shadows "@getTaggedString(%closestClient.client.name)@"."); //%closestClient.setMoveState(true); ShadeLordFunction(%boss, "ShadeLordRandomTeleport", ""); } diff --git a/scripts/TWM2/Bosses/Stormrider.cs b/scripts/TWM2/Bosses/Stormrider.cs index ba636fb..68192e9 100644 --- a/scripts/TWM2/Bosses/Stormrider.cs +++ b/scripts/TWM2/Bosses/Stormrider.cs @@ -108,7 +108,7 @@ function UltraBossAbilities(%drone) { MessageAll('MessageAll', "\c4Stormrider: Fire!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, no targets for me!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Heh, no targets for me!"); } case 2: %target = DroneFindNearestPilot(2000,%drone); @@ -155,19 +155,19 @@ function UltraBossAbilities(%drone) { schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p3); schedule(1000, 0, WindshearAttack_FUNC, "MissileDrop", %target.player SPC %p4); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Have fun with these "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Have fun with these "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Bah, no targets, no fun."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Bah, no targets, no fun."); } case 3: %target = DroneFindNearestPilot(2000,%drone); if(%target.player) { HeatLoop(%target.player, 0); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Lets see what happens when missiles are completely precice on you, "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Lets see what happens when missiles are completely precice on you, "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I guess it's time to start scanning."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": I guess it's time to start scanning."); } case 4: %target = DroneFindNearestPilot(2000,%drone); @@ -190,10 +190,10 @@ function UltraBossAbilities(%drone) { schedule(6200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(6400,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(6500,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Taste my fury "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Taste my fury "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Aww, My missiles were ready."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Aww, My missiles were ready."); } case 5: %target = DroneFindNearestPilot(2000,%drone); @@ -214,10 +214,10 @@ function UltraBossAbilities(%drone) { schedule(8100,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(8200,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); schedule(8300,0,"WindshearAttack_FUNC", "SidewinderLaunch", %drone SPC %target.player SPC 1); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I have missiles with your name on them "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": I have missiles with your name on them "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Aww, My missile strike was ready."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Aww, My missile strike was ready."); } case 6: schedule(700,0,"WindshearAttack_FUNC", "Flare", %drone); @@ -235,7 +235,7 @@ function UltraBossAbilities(%drone) { schedule(8100,0,"WindshearAttack_FUNC", "Flare", %drone); schedule(8200,0,"WindshearAttack_FUNC", "Flare", %drone); schedule(8300,0,"WindshearAttack_FUNC", "Flare", %drone); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Hahaha, Your Missiles are worthless Now!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Hahaha, Your Missiles are worthless Now!"); case 7: %target = DroneFindNearestPilot(2000,%drone); if(%target.player) { @@ -249,10 +249,10 @@ function UltraBossAbilities(%drone) { schedule(8100,0,"FireSniperShots",%drone, %target.player); schedule(8200,0,"FireSniperShots",%drone, %target.player); schedule(8300,0,"FireSniperShots",%drone, %target.player); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Time to Use My CG, "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Time to Use My CG, "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, you fewls cant withstand this."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Heh, you fewls cant withstand this."); } case 8: %target = DroneFindNearestPilot(2000,%drone); @@ -262,10 +262,10 @@ function UltraBossAbilities(%drone) { schedule(3000,0,"FireSeekerPhotons",%drone,%target.player); schedule(4500,0,"FireSeekerPhotons",%drone,%target.player); schedule(6000,0,"FireSeekerPhotons",%drone,%target.player); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Here, "@getTaggedString(%target.name)@", Catch!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Here, "@getTaggedString(%target.name)@", Catch!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Close up the Seekers. No Targets To hit."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Close up the Seekers. No Targets To hit."); } case 9: %target = DroneFindNearestPilot(2000,%drone); @@ -276,10 +276,10 @@ function UltraBossAbilities(%drone) { schedule(2100,0,"FireSeekerPhotons",%drone,%target.player); schedule(2800,0,"FireSeekerPhotons",%drone,%target.player); schedule(3500,0,"FireSeekerPhotons",%drone,%target.player); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Try these out for size, "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Try these out for size, "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Heh, No enemies in the area."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Heh, No enemies in the area."); } case 10: %target = DroneFindNearestPilot(2000,%drone); @@ -295,16 +295,16 @@ function UltraBossAbilities(%drone) { schedule(4000,0,"FireSeekerPhotons",%drone,%target.player); schedule(4500,0,"FireSeekerPhotons",%drone,%target.player); schedule(5000,0,"FireSeekerPhotons",%drone,%target.player); - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": I have some fun plasma missiles for you, "@getTaggedString(%target.name)@"!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": I have some fun plasma missiles for you, "@getTaggedString(%target.name)@"!"); } else { - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Meh, No targets for my plasma seekers."); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Meh, No targets for my plasma seekers."); } case 11: - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Engage Stealth!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Engage Stealth!"); %drone.setCloaked(true); case 12: - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": My Buddies will handle You!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": My Buddies will handle You!"); %SPos1 = vectorAdd(%drone.getPosition(),"15 0 0"); %SPos2 = vectorAdd(%drone.getPosition(),"-15 0 0"); %SPos3 = vectorAdd(%drone.getPosition(),"0 15 0"); @@ -324,7 +324,7 @@ function UltraBossAbilities(%drone) { %d3 = DroneBattle(%SPos2, 500, 1, 6, 6, 100, 0); //his Other Pal %d2.isUltrally = 1; %d3.isUltrally = 1; - MessageAll('MessageAll', "\c4"@$TWM2::BossName["Stormrider"]@": Get Moving, targets to be hunted!"); + MessageAll('MessageAll', "\c4"@$TWM2::BossNameInternal["Stormrider"]@": Get Moving, targets to be hunted!"); } schedule(30000,0,"UltraBossAbilities",%drone); } diff --git a/scripts/TWM2/MultiUseDatablocks.cs b/scripts/TWM2/MultiUseDatablocks.cs index 90c89ae..cc7f506 100644 --- a/scripts/TWM2/MultiUseDatablocks.cs +++ b/scripts/TWM2/MultiUseDatablocks.cs @@ -40,6 +40,18 @@ datablock AudioProfile(ZombieDeathSound3) { preload = true; }; +datablock AudioProfile(AcidCannonPreFireSound) { + filename = "fx/weapons/targetinglaser_paint.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(NerfBallExplosionSound) { + filename = "fx/weapons/cg_water2.wav"; + description = AudioClosest3d; + preload = true; +}; + //********************************************** // PARTICLE DATABLOCKS //********************************************** @@ -261,7 +273,85 @@ datablock ParticleData(PurpleNightmareEmitParticle) { times[0] = 0.0; times[1] = 1.0; times[2] = 5.0; +}; +datablock ParticleData(ZAcidBombParticle) { + dragCoeffiecient = 0.0; + gravityCoefficient = 0.5; + inheritedVelFactor = 0.5; + + lifetimeMS = 4000; + lifetimeVarianceMS = 500; + + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/bubbles"; + + colors[0] = "0.0 1.0 0.5 0.3"; + colors[1] = "0.0 1.0 0.4 0.2"; + colors[2] = "0.0 1.0 0.3 0.1"; + + sizes[0] = 3.0; + sizes[1] = 2.3; + sizes[2] = 2.1; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleData(ZAcidBallParticle) { + dragCoeffiecient = 0.0; + gravityCoefficient = 0.5; + inheritedVelFactor = 0.5; + + lifetimeMS = 2000; + lifetimeVarianceMS = 200; + + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/bubbles"; + + colors[0] = "0.0 1.0 0.5 0.3"; + colors[1] = "0.0 1.0 0.4 0.2"; + colors[2] = "0.0 1.0 0.3 0.1"; + + sizes[0] = 0.6; + sizes[1] = 0.3; + sizes[2] = 0.1; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleData(FlareguidePurpleStream) { + dragCoeffiecient = 0.0; + gravityCoefficient = 120.0; // drops quickly + inheritedVelFactor = 0; + + lifetimeMS = 1550; // lasts 2 second + lifetimeVarianceMS = 300; // ...more or less + + textureName = "snowflake8x8";//"particletest"; + + useInvAlpha = true; + spinRandomMin = -30.0; + spinRandomMax = 30.0; + + colors[0] = "0.25 0.12 0.40 0.5"; + colors[1] = "0.25 0.12 0.40 0.5"; + colors[2] = "0.4 0.0 0.5 0.0"; + + sizes[0] = 0.4; + sizes[1] = 0.2; + sizes[2] = 0.2; + + times[0] = 0.0; + times[1] = 0.4; + times[2] = 1.0; }; //********************************************** @@ -366,9 +456,153 @@ datablock ParticleEmitterData(ThrowerBaseEmitter) { particles = "ThrowerBaseParticle"; }; +datablock ParticleEmitterData(ZAcidBombExplosionEmitter) { + lifetimeMS = 2000; + + ejectionPeriodMS = 1; + periodVarianceMS = 0; + + ejectionVelocity = 3.0; + velocityVariance = 0.5; + + thetaMin = 0.0; + thetaMax = 90.0; + + orientParticles = false; + orientOnVelocity = false; + + particles = "ZAcidBombParticle"; +}; + +datablock ParticleEmitterData(ZAcidBallExplosionEmitter) { + lifetimeMS = 200; + + ejectionPeriodMS = 1; + periodVarianceMS = 0; + + ejectionVelocity = 3.0; + velocityVariance = 0.5; + + thetaMin = 0.0; + thetaMax = 90.0; + + orientParticles = false; + orientOnVelocity = false; + + particles = "ZAcidBallParticle"; +}; + +datablock ParticleEmitterData(FlareguidePurpleStreamEmitter) { + ejectionPeriodMS = 15; + periodVarianceMS = 5; + + ejectionVelocity = 1.25; + velocityVariance = 0.50; + + thetaMin = 0.0; + thetaMax = 90.0; + + particles = "FlareguidePurpleStream"; +}; + +//********************************************** +// EXPLOSION DATABLOCKS +//********************************************** +datablock ExplosionData(ZAcidBombExplosion) { + emitter[0] = ZAcidBombExplosionEmitter; + soundProfile = NerfBallExplosionSound; +}; + +datablock ExplosionData(ZAcidBallExplosion) { + emitter[0] = ZAcidBallExplosionEmitter; + soundProfile = NerfBallExplosionSound; +}; + //********************************************** // PROJECTILE DATABLOCKS //********************************************** +datablock TracerProjectileData(ZombieAcidPulse) { + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.0; + directDamageType = $DamageType::ZAcid; + hasDamageRadius = true; + indirectDamage = 0.24; + damageRadius = 4.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::ZAcid; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; + + ImageSource = "AcidCannonImage"; + + dryVelocity = 100.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 1000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "0 1 0 1"; + tracerTex[0] = "special/landSpikeBolt"; + tracerTex[1] = "special/landSpikeBoltCross"; + tracerWidth = 0.5; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + +datablock TracerProjectileData(SSZombieAcidBall) { + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.25; + directDamageType = $DamageType::ZAcid; + hasDamageRadius = true; + indirectDamage = 0.1; + damageRadius = 4.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::ZAcid; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; + + dryVelocity = 400.0; + wetVelocity = 400.0; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 4000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "0 1 0 1"; + tracerTex[0] = "special/landSpikeBolt"; + tracerTex[1] = "special/landSpikeBoltCross"; + tracerWidth = 0.5; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + datablock GrenadeProjectileData(DemonFireball) { projectileShapeName = "plasmabolt.dts"; emitterDelay = -1; @@ -530,6 +764,109 @@ datablock LinearFlareProjectileData(DMPlasma) { flareBaseTexture = "flarebase"; }; +datablock TracerProjectileData(SniperZombieAcidShot) { + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.4; + directDamageType = $DamageType::ZAcid; + hasDamageRadius = true; + indirectDamage = 0.25; + damageRadius = 6.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::ZAcid; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; + + dryVelocity = 1000.0; + wetVelocity = 1000.0; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 4000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "0 1 0 1"; + tracerTex[0] = "special/landSpikeBolt"; + tracerTex[1] = "special/landSpikeBoltCross"; + tracerWidth = 0.3; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + +datablock TracerProjectileData(FlareguideSniperZombieAcidShot) { + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.6; + directDamageType = $DamageType::ZAcid; + hasDamageRadius = true; + indirectDamage = 0.25; + damageRadius = 10.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::ZAcid; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; + + dryVelocity = 1500.0; + wetVelocity = 1500.0; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 4000; + explodeOnDeath = true; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "1 0 0.5 1"; + tracerTex[0] = "special/landSpikeBolt"; + tracerTex[1] = "special/landSpikeBoltCross"; + tracerWidth = 0.3; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + +datablock GrenadeProjectileData(FlareguideSniperBurstRound) { + projectileShapeName = "turret_muzzlepoint.dts"; //Really small and hard to see + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = false; + indirectDamage = 0.3; + damageRadius = 4.0; + radiusDamageType = $DamageType::ZAcid; + kickBackStrength = 0; + bubbleEmitTime = 1.0; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; + //explodeOnMaxBounce = true; + velInheritFactor = 0.5; + baseEmitter[0] = FlareguidePurpleStreamEmitter; + + grenadeElasticity = 0.4; + grenadeFriction = 0.2; + armingDelayMS = 100; // was 400 + muzzleVelocity = 0; + drag = 0.1; +}; + datablock SeekerProjectileData(BossMissiles) { casingShapeName = "weapon_missile_casement.dts"; projectileShapeName = "weapon_missile_projectile.dts"; diff --git a/scripts/TWM2/Systems/BossSystem.cs b/scripts/TWM2/Systems/BossSystem.cs index c98aecb..ba9020a 100644 --- a/scripts/TWM2/Systems/BossSystem.cs +++ b/scripts/TWM2/Systems/BossSystem.cs @@ -22,31 +22,31 @@ function InitiateBoss(%Boss, %name) { $TWM2::BossGoing = 1; switch$(%name) { case "Yvex": - %print = "BOSS BATTLE \n LORD YVEX"; + %print = "BOSS BATTLE \n LORD YVEX \n Fist Of Vengeance Field Commander"; case "CnlWindshear": - %print = "BOSS BATTLE \n COLONEL WINDSHEAR"; + %print = "BOSS BATTLE \n COLONEL WINDSHEAR \n Harbinger Aerial Admiral"; case "GhostOfLightning": - %print = "BOSS BATTLE \n GHOST OF LIGHTNING"; + %print = "BOSS BATTLE \n THE GHOST OF LIGHTNING \n Dark Shadow Entity"; case "Vengenor": - %print = "BOSS BATTLE \n GENERAL VENGENOR"; + %print = "BOSS BATTLE \n GENERAL VENGENOR \n Fist of Vengeance Siege General"; case "LordRog": - %print = "BOSS BATTLE \n LORD ROG"; + %print = "BOSS BATTLE \n LORD ROG \n Fist Of Vengeance Field Commander"; case "Insignia": - %print = "BOSS BATTLE \n MAJOR INSIGNIA"; + %print = "BOSS BATTLE \n MAJOR INSIGNIA \n Fist of Vengeance Space Fleet Commander"; case "Vardison1": - %print = "BOSS BATTLE \n LORD VARDISON"; + %print = "BOSS BATTLE \n LORD VARDISON \n Leader of the Fist of Vengeance"; case "Vardison2": %print = "BOSS ALERT \n LORD VARDISON HAS ENTERED HIS SECOND FORM"; case "Vardison3": %print = "BOSS ALERT \n LORD VARDISON HAS ENTERED HIS FINAL FORM"; case "Trevor": - %print = "BOSS BATTLE \n LORDRANIUS TREVOR"; + %print = "BOSS BATTLE \n LORDRANIUS TREVOR \n Leader of the Harbinger Clan"; case "Stormrider": - %print = "CLASSIC BOSS BATTLE \n COMMANDER STORMRIDER"; + %print = "CLASSIC BOSS BATTLE \n COMMANDER STORMRIDER \n Harbinger Air Assault Commander"; case "GhostOfFire": - %print = "CLASSIC BOSS BATTLE \n GHOST OF FIRE"; + %print = "CLASSIC BOSS BATTLE \n THE GHOST OF FIRE \n Dark Shadow Entity"; case "ShadeLord": - %print = "BOSS BATTLE \n THE SHADE LORD"; + %print = "BOSS BATTLE \n THE SHADE LORD \n Guardian of the Realm of Shadows"; } //INITIATE TO CLIENTS %count = ClientGroup.getCount(); @@ -77,7 +77,7 @@ function resetBossProficiency(%client) { function BossCheckUp(%boss, %name) { %percentage = (mFloor(%boss.getDamageLeft()*100) / mFloor(%boss.getMaxDamage()*100)) * 100; - MessageAll('MsgSPCurrentObjective1', "", "Boss Battle: "@$TWM2::BossName[%name]@" [Boss Kill Count: "@$TWM2::BossManager.bossKills@"]"); + MessageAll('MsgSPCurrentObjective1', "", "Boss Battle: "@$TWM2::BossNameInternal[%name]@" [Boss Kill Count: "@$TWM2::BossManager.bossKills@"]"); MessageAll('MsgSPCurrentObjective2', "", "Boss HP: "@mFloor(%boss.getDamageLeft()*100)@"/"@mFloor(%boss.getMaxDamage()*100)@" ("@%percentage@"%)"); if(%name !$= "CnlWindshear" && %name !$= "Trevor" && %name !$= "Stormrider") { @@ -199,7 +199,7 @@ function GameConnection::GiveBossAward(%client, %bossName) { %scriptController.save(%file); %award = mFloor($TWM2::BossXPAward[%bossName] / %scriptController.bossDefeatCount[%bossName]); - GainExperience(%client, %award, ""@%bossName@" defeated, congratulations! "); + GainExperience(%client, %award, ""@$TWM2::BossNameInternal[%bossName]@" defeated, congratulations! "); CheckBossChallenge(%client, %bossName); CheckBossProficiency(%client, %bossName); } diff --git a/scripts/TWM2/Zombie/PlayerZombieAttacks.cs b/scripts/TWM2/Zombie/PlayerZombieAttacks.cs index e01e467..3c00c77 100644 --- a/scripts/TWM2/Zombie/PlayerZombieAttacks.cs +++ b/scripts/TWM2/Zombie/PlayerZombieAttacks.cs @@ -17,7 +17,7 @@ function PlayerLordFire1(%Player) { function PlayerLordFire2(%player) { %p = new TracerProjectile() { - dataBlock = LZombieAcidBall; + dataBlock = ZombieAcidPulse; initialDirection = %player.getMuzzleVector(6); initialPosition = %player.getMuzzlePoint(6); sourceObject = %player; diff --git a/scripts/TWM2/Zombie/ZombieCore.cs b/scripts/TWM2/Zombie/ZombieCore.cs index 3970c96..8bd9af5 100644 --- a/scripts/TWM2/Zombie/ZombieCore.cs +++ b/scripts/TWM2/Zombie/ZombieCore.cs @@ -43,6 +43,7 @@ $Zombie::TypeSpeed[3] = 4000; $Zombie::TypeSpeed[4] = 240; $Zombie::TypeSpeed[5] = 1500; $Zombie::TypeSpeed[6] = 1200; +$Zombie::TypeSpeed[11] = 240; //$Zombie::BaseJumpCooldown: The time zombies must elapse before jumping / lunging $Zombie::BaseJumpCooldown = 1500; @@ -558,6 +559,7 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) { }; %zombie.mountImage(ZSniperImage1, 4); %zombie.mountImage(ZSniperImage2, 5); + %zombie.mountImage(ZSniperImage3, 6); //Ultra-Demon Zombie case 12: @@ -611,7 +613,16 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) { %zombie = new player(){ Datablock = "EliteDemonZombieArmor"; }; - %zombie.mountImage(ZdummyslotImg, 4); + %zombie.mountImage(ZdummyslotImg, 4); + + //Flareguide Sniper Zombie (Mini-Boss) + case 11: + %zombie = new player(){ + Datablock = "FlareguideSniperZombieArmor"; + }; + %zombie.mountImage(ZSniperImage1, 4); + %zombie.mountImage(ZSniperImage2, 5); + %zombie.mountImage(ZSniperImage3, 6); } //Verify that we spawned a zombie object, force spawn a normal zombie if we did not. if(!isObject(%zombie)) { diff --git a/scripts/TWM2/Zombie/ZombieTypes/Demon.cs b/scripts/TWM2/Zombie/ZombieTypes/Demon.cs index f6c73ad..b220d28 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Demon.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Demon.cs @@ -24,6 +24,7 @@ datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::Burn] = 0.001; damageScale[$DamageType::Fire] = 0.001; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs b/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs index 5f90113..04b706c 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs @@ -23,7 +23,8 @@ datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::plasma] = 0.001; damageScale[$DamageType::Napalm] = 0.001; damageScale[$DamageType::Burn] = 0.001; - damageScale[$DamageType::Fire] = 0.001; + damageScale[$DamageType::Fire] = 0.001; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; @@ -224,7 +225,7 @@ function DemonMotherZombieArmor::AttackFunction(%datablock, %zombie, %attackFunc %vec = vectorSub(%target.getWorldBoxCenter(), %zombie.getMuzzlePoint(4)); %vec = vectorAdd(%vec, vectorScale(%target.getVelocity(), vectorLen(%vec) / 100)); %p = new TracerProjectile() { - dataBlock = LZombieAcidBall; + dataBlock = ZombieAcidPulse; initialDirection = %vec; initialPosition = %zombie.getMuzzlePoint(4); sourceObject = %zombie; diff --git a/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs b/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs index 942a74e..671731e 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs @@ -28,6 +28,7 @@ datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs b/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs index a503fc7..04293a7 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs @@ -21,6 +21,7 @@ datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::Fire] = 0.1; damageScale[$DamageType::Napalm] = 0.1; damageScale[$DamageType::Plasma] = 0.1; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Lord.cs b/scripts/TWM2/Zombie/ZombieTypes/Lord.cs index c5a86a5..d94f1f7 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Lord.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Lord.cs @@ -41,6 +41,7 @@ datablock PlayerData(LordZombieArmor) : HeavyMaleBiodermArmor { damageScale[$DamageType::SCD343] = 4.0; damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Normal.cs b/scripts/TWM2/Zombie/ZombieTypes/Normal.cs index 4081bba..cbf7556 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Normal.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Normal.cs @@ -30,6 +30,7 @@ datablock PlayerData(ZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs b/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs index 0a92558..c9e4633 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs @@ -26,6 +26,7 @@ datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor { damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::Missile] = 100.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs b/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs index 8769e3f..c4a66c5 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs @@ -11,6 +11,7 @@ datablock PlayerData(RavagerZombieArmor) : LightMaleBiodermArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs b/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs index 35520df..0f91d45 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs @@ -30,6 +30,7 @@ datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs b/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs index abc0c7d..cccc493 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs @@ -9,6 +9,7 @@ datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs b/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs index 091f1ad..399d029 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs @@ -1,3 +1,7 @@ +//Phantom139 Note: The sniper zombie prefers to stay away from players, it does not infect on contact, but instead runs away +$TWM2::ArmorHasCollisionFunction[SniperZombieArmor] = false; +$TWM2::ArmorHasCollisionFunction[FlareguideSniperZombieArmor] = false; + datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor { boundingBox = "1.63 1.63 2.6"; maxDamage = 2.5; @@ -18,6 +22,26 @@ datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; + + max[RepairKit] = 0; + max[Mine] = 0; + max[Grenade] = 0; +}; + +datablock PlayerData(FlareguideSniperZombieArmor) : SniperZombieArmor { + boundingBox = "1.63 1.63 2.6"; + maxDamage = 20.0; + minImpactSpeed = 35; + shapeFile = "bioderm_heavy.dts"; + + debrisShapeName = "bio_player_debris.dts"; + + //Foot Prints + decalData = HeavyBiodermFootprint; + decalOffset = 0.4; + + waterBreathSound = WaterBreathBiodermSound; max[RepairKit] = 0; max[Mine] = 0; @@ -38,6 +62,14 @@ datablock ShapeBaseImageData(ZSniperImage2) { emap = true; }; +datablock ShapeBaseImageData(ZSniperImage3) { + shapeFile = "weapon_elf.dts"; + offset = "0.0 0.3 0"; + rotation = "1 0 0 90"; + armThread = looksn; + emap = true; +}; + function SniperZombiemovetotarget(%zombie){ if(!isobject(%zombie)) return; @@ -113,7 +145,7 @@ function SniperZombieFire(%zombie,%closestclient){ %accuracy = (vectorlen(%vec) / %num); %vec = vectoradd(%vec, vectorscale(%closestclient.getvelocity(), %accuracy)); %p = new TracerProjectile() { //TWM2 Sniper zombies use ALSWP Snipers :P - dataBlock = ALSWPBullet; + dataBlock = SniperZombieAcidShot; initialDirection = %vec; initialPosition = %zombie.getMuzzlePoint(4); sourceObject = %zombie; @@ -121,3 +153,24 @@ function SniperZombieFire(%zombie,%closestclient){ }; ServerPlay3D(ALSWPFireSound, %zombie.getPosition()); } + + +function FlareguideSniperZombieAcidShot::onExplode(%data, %proj, %pos, %mod) { + Parent::OnExplode(%data, %proj, %pos, %mod); + //Create the mini-pulses + for (%i = 0; %i < 6; %i++) { + %x = getRandom(-3, 3); + %y = getRandom(-3, 3); + %z = 5; + %vec = %x SPC %y SPC %z; + %vec = VectorScale(%vec, 200); + %p = new (GrenadeProjectile)() { + dataBlock = FlareguideSniperBurstRound; + initialDirection = %vec; + initialPosition = %pos; + }; + MissionCleanup.add(%p); + %p.sourceObject = %proj.sourceObject; + return; + } +} \ No newline at end of file diff --git a/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs b/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs index 15a866b..edd6bc8 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs @@ -30,6 +30,7 @@ datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs b/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs index db1d642..3438dfa 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs @@ -9,6 +9,7 @@ datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs b/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs index 8a95235..9a6e78e 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs @@ -22,6 +22,7 @@ datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor { damageScale[$DamageType::SA2400] = 5.0; damageScale[$DamageType::Model1887] = 4.0; damageScale[$DamageType::CrimsonHawk] = 1.9; + damageScale[$DamageType::AcidCannon] = 3.0; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/damageTypes.cs b/scripts/damageTypes.cs index e85d774..080e4b9 100644 --- a/scripts/damageTypes.cs +++ b/scripts/damageTypes.cs @@ -90,6 +90,7 @@ $DamageType::ES77PulsePhaser = 89; $DamageType::Wp400 = 90; $DamageType::SCD343 = 91; $DamageType::Model1887 = 92; +$DamageType::AcidCannon = 93; //Phantom139: TWM2 3.9.2: Updated these "special" damage types to have much higher index values @@ -174,6 +175,17 @@ $DamageTypeText[79] = 'Javelin'; $DamageTypeText[80] = 'Stinger'; $DamageTypeText[81] = 'Static Grenade'; $DamageTypeText[82] = 'Plasmasaber'; +$DamageTypeText[83] = 'Blade of Vengance Assassination'; +$DamageTypeText[84] = 'MG42'; +$DamageTypeText[85] = 'MRXX ZC4'; +$DamageTypeText[86] = 'Plasma Torpedo'; +$DamageTypeText[87] = 'Crimson Hawk'; +$DamageTypeText[88] = 'M93 Trafca'; +$DamageTypeText[89] = 'ES-77 Pulse Phaser'; +$DamageTypeText[90] = 'WP 400'; +$DamageTypeText[91] = 'SCD-343'; +$DamageTypeText[92] = 'Model 1887'; +$DamageTypeText[93] = 'Acid Cannon'; $DamageTypeText[998] = 'water'; $DamageTypeText[998] = 'nexus camping'; diff --git a/scripts/deathMessages.cs b/scripts/deathMessages.cs index b53f15a..a6e365b 100644 --- a/scripts/deathMessages.cs +++ b/scripts/deathMessages.cs @@ -164,6 +164,11 @@ $DeathMessageSelfKill[$DamageType::PTorpedo, 2] = '\c0%1 took proton detonation $DeathMessageSelfKill[$DamageType::PTorpedo, 3] = '\c0%1\'s proton torpedo aiming skills are self-evident.'; $DeathMessageSelfKill[$DamageType::PTorpedo, 4] = '\c0%1 annihilates %2self into dust with a proton torpedo'; +$DeathMessageSelfKill[$DamageType::AcidCannon, 0] = '\c0%1 applied a lethal dose of acid upon %2self.'; +$DeathMessageSelfKill[$DamageType::AcidCannon, 1] = '\c0%1 turned %3 acid cannon on %2self.'; +$DeathMessageSelfKill[$DamageType::AcidCannon, 2] = '\c0%1 still doesn\'t have the hang of FoV acid weapon technology.'; +$DeathMessageSelfKill[$DamageType::AcidCannon, 3] = '\c0%1\'s self melting skills speak for themself.'; +$DeathMessageSelfKill[$DamageType::AcidCannon, 4] = '\c0%1 melts %2self into a liquid pool with the acid cannon.'; //used when a player is killed by a teammate $DeathMessageTeamKillCount = 1; @@ -210,6 +215,7 @@ $DeathMessageTeamKill[$DamageType::PTorpedo, 0] = '\c0%4 vaporized TEAMMATE %1 w $DeathMessageTeamKill[$DamageType::CrimsonHawk, 0] = '\c0%4 eliminates TEAMMATE %1 with %6 crimson hawk pistol!'; $DeathMessageTeamKill[$DamageType::M93, 0] = '\c0%4 nails TEAMMATE %1 with a burst fired M93 pistol!'; $DeathMessageTeamKill[$DamageType::ES77PulsePhaser, 0] = '\c0%4 eliminates TEAMMATE %1 with %6 ES-77 Pulse Phaser!'; +$DeathMessageTeamKill[$DamageType::AcidCannon, 0] = '\c0%4 metled TEAMMATE %1 with %6 Acid Cannon!'; //these used when a player is killed by an enemy $DeathMessageCount = 5; @@ -516,7 +522,7 @@ $DeathMessage[$DamageType::Zombie, 4] = '\c0%1 is sliced and diced by a zombie.' $DeathMessage[$DamageType::ZAcid, 0] = '\c0%1 gets blasted by zombie acid.'; $DeathMessage[$DamageType::ZAcid, 1] = '\c0%1 is in horrible pain from the infectious acid.'; $DeathMessage[$DamageType::ZAcid, 2] = '\c0%1 will be a zombie soon, thanks to that acid.'; -$DeathMessage[$DamageType::ZAcid, 3] = '\c0%1 is blasted by a lord zombie.'; +$DeathMessage[$DamageType::ZAcid, 3] = '\c0%1 is blasted by a zombie acid cannon.'; $DeathMessage[$DamageType::ZAcid, 4] = '\c0%1 burns in pain from zombie acid.'; $DeathMessage[$DamageType::Fire, 0] = '\c0%1 gets %2self burnt again.'; @@ -607,7 +613,7 @@ $DeathMessage[$DamageType::LaserRifle, 0] = '\c0%4 beamed down %1 with a Laser R $DeathMessage[$DamageType::LaserRifle, 1] = '\c0%4 blasts ultimate laser beams into %1.'; $DeathMessage[$DamageType::LaserRifle, 2] = '\c0%4 utilizes advanced Laser Technology on %1'; $DeathMessage[$DamageType::LaserRifle, 3] = '\c0%4 burns holes into %1 from %6 laser rifle.'; -$DeathMessage[$DamageType::LaserRifle, 4] = '\c0%4 gives %1 some laser therapy, too bad it was lethal.'; +$DeathMessage[$DamageType::LaserRifle, 4] = '\c0%4 gives %1 some laser therapy, unfortunately, it was lethal.'; $DeathMessage[$DamageType::Burn, 0] = '\c0%1 screams fire, nobody comes to aid %2.'; $DeathMessage[$DamageType::Burn, 1] = '\c0%1 is to the ³rd Degree.'; @@ -616,7 +622,7 @@ $DeathMessage[$DamageType::Burn, 3] = '\c0%1 becomes engulfed in fire, and dies. $DeathMessage[$DamageType::Burn, 4] = '\c0%1 experiences spontanious combustion.'; $DeathMessage[$DamageType::Fire, 0] = '\c0%4 burns %1 with a flamethrower.'; -$DeathMessage[$DamageType::Fire, 1] = '\c0%4 burns %1, then flips the switch again to ensure.'; +$DeathMessage[$DamageType::Fire, 1] = '\c0%4 burns %1, then flips the switch again to ensure the job is done.'; $DeathMessage[$DamageType::Fire, 2] = '\c0%1 walks into %4\'s stream of flames'; $DeathMessage[$DamageType::Fire, 3] = '\c0%4 defines the words third degree for %1.'; $DeathMessage[$DamageType::Fire, 4] = '\c0%1 experiences spontanious combustion from %4.'; @@ -709,4 +715,10 @@ $DeathMessage[$DamageType::ES77PulsePhaser, 0] = '\c0%4 nails %1 with repeated h $DeathMessage[$DamageType::ES77PulsePhaser, 1] = '\c0%4 eliminates %1 with %6 ES-77 Pulse Phaser.'; $DeathMessage[$DamageType::ES77PulsePhaser, 2] = '\c0%4 shows %1 the power of the pulse phaser.'; $DeathMessage[$DamageType::ES77PulsePhaser, 3] = '\c0%4 fires off superheated pulse shots in %1\'s direction.'; -$DeathMessage[$DamageType::ES77PulsePhaser, 4] = '\c0%4 makes short work of %1 with a pulse phaser.'; \ No newline at end of file +$DeathMessage[$DamageType::ES77PulsePhaser, 4] = '\c0%4 makes short work of %1 with a pulse phaser.'; + +$DeathMessage[$DamageType::AcidCannon, 0] = '\c0%4 strikes down %1 with an acid cannon.'; +$DeathMessage[$DamageType::AcidCannon, 1] = '\c0%4 melts %1 into a puddle with the FoV acid cannon.'; +$DeathMessage[$DamageType::AcidCannon, 2] = '\c0%4 turned FoV weapon\'s tech in %1\'s direction.'; +$DeathMessage[$DamageType::AcidCannon, 3] = '\c0%4 nails %1 with an acid cannon.'; +$DeathMessage[$DamageType::AcidCannon, 4] = '\c0%4 ends %1 quickly and painfully with an acid cannon.'; \ No newline at end of file diff --git a/scripts/weapons/Other/AcidCannon.cs b/scripts/weapons/Other/AcidCannon.cs index 22f5ca1..f5df919 100644 --- a/scripts/weapons/Other/AcidCannon.cs +++ b/scripts/weapons/Other/AcidCannon.cs @@ -1,322 +1,171 @@ // Acid Cannon -datablock AudioProfile(AcidCannonPreFireSound) { - filename = "fx/weapons/targetinglaser_paint.wav"; - description = AudioClosest3d; - preload = true; -}; -datablock AudioProfile(NerfBallExplosionSound) { - filename = "fx/weapons/cg_water2.wav"; - description = AudioClosest3d; - preload = true; -}; +datablock TracerProjectileData(AcidCannonPulse) { + doDynamicClientHits = true; -//acid bomb -datablock ParticleData(ZAcidBombParticle) { - dragCoeffiecient = 0.0; - gravityCoefficient = 0.5; - inheritedVelFactor = 0.5; + projectileShapeName = ""; + directDamage = 0.3; + directDamageType = $DamageType::AcidCannon; + hasDamageRadius = true; + indirectDamage = 0.35; + damageRadius = 10.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::AcidCannon; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; - lifetimeMS = 4000; - lifetimeVarianceMS = 500; + ImageSource = "AcidCannonImage"; - spinRandomMin = -200.0; - spinRandomMax = 200.0; + dryVelocity = 150.0; + wetVelocity = 150.0; + velInheritFactor = 1.0; + fizzleTimeMS = 1200; + lifetimeMS = 1500; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; - textureName = "special/bubbles"; + activateDelayMS = 100; - colors[0] = "0.0 1.0 0.5 0.3"; - colors[1] = "0.0 1.0 0.4 0.2"; - colors[2] = "0.0 1.0 0.3 0.1"; - - sizes[0] = 3.0; - sizes[1] = 2.3; - sizes[2] = 2.1; - - times[0] = 0.0; - times[1] = 0.5; - times[2] = 1.0; - -}; - -datablock ParticleEmitterData(ZAcidBombExplosionEmitter) { - lifetimeMS = 2000; - - ejectionPeriodMS = 1; - periodVarianceMS = 0; - - ejectionVelocity = 3.0; - velocityVariance = 0.5; - - thetaMin = 0.0; - thetaMax = 90.0; - - orientParticles = false; - orientOnVelocity = false; - - particles = "ZAcidBombParticle"; -}; - -datablock ExplosionData(ZAcidBombExplosion) { - emitter[0] = ZAcidBombExplosionEmitter; - soundProfile = NerfBallExplosionSound; -}; -// - -datablock ParticleData(ZAcidBallParticle) { - dragCoeffiecient = 0.0; - gravityCoefficient = 0.5; - inheritedVelFactor = 0.5; - - lifetimeMS = 2000; - lifetimeVarianceMS = 200; - - spinRandomMin = -200.0; - spinRandomMax = 200.0; - - textureName = "special/bubbles"; - - colors[0] = "0.0 1.0 0.5 0.3"; - colors[1] = "0.0 1.0 0.4 0.2"; - colors[2] = "0.0 1.0 0.3 0.1"; - - sizes[0] = 0.6; - sizes[1] = 0.3; - sizes[2] = 0.1; - - times[0] = 0.0; - times[1] = 0.5; - times[2] = 1.0; - -}; - -datablock ParticleEmitterData(ZAcidBallExplosionEmitter) { - lifetimeMS = 200; - - ejectionPeriodMS = 1; - periodVarianceMS = 0; - - ejectionVelocity = 3.0; - velocityVariance = 0.5; - - thetaMin = 0.0; - thetaMax = 90.0; - - orientParticles = false; - orientOnVelocity = false; - - particles = "ZAcidBallParticle"; -}; - -datablock ExplosionData(ZAcidBallExplosion) { - emitter[0] = ZAcidBallExplosionEmitter; - soundProfile = NerfBallExplosionSound; -}; - -datablock TracerProjectileData(LZombieAcidBall) { - doDynamicClientHits = true; - - projectileShapeName = ""; - directDamage = 0.0; - directDamageType = $DamageType::ZAcid; - hasDamageRadius = true; - indirectDamage = 0.24; - damageRadius = 4.0; - kickBackStrength = 0.0; - radiusDamageType = $DamageType::ZAcid; - sound = BlasterProjectileSound; - explosion = ZAcidBallExplosion; - - ImageSource = "AcidCannonImage"; - - dryVelocity = 100.0; - wetVelocity = 100.0; - velInheritFactor = 1.0; - fizzleTimeMS = 4000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = -1; - - activateDelayMS = 100; - - tracerLength = 5; - tracerAlpha = false; - tracerMinPixels = 3; - tracerColor = "0 1 0 1"; + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "0 1 0 1"; tracerTex[0] = "special/landSpikeBolt"; tracerTex[1] = "special/landSpikeBoltCross"; tracerWidth = 0.5; - crossSize = 0.79; - crossViewAng = 0.990; - renderCross = true; - emap = true; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; }; -datablock TracerProjectileData(SSZombieAcidBall) { - doDynamicClientHits = true; - - projectileShapeName = ""; - directDamage = 0.0; - directDamageType = $DamageType::ZAcid; - hasDamageRadius = true; - indirectDamage = 0.4; - damageRadius = 7.0; - kickBackStrength = 0.0; - radiusDamageType = $DamageType::ZAcid; - sound = BlasterProjectileSound; - explosion = ZAcidBallExplosion; - - dryVelocity = 400.0; - wetVelocity = 400.0; - velInheritFactor = 1.0; - fizzleTimeMS = 4000; - lifetimeMS = 4000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = -1; - - activateDelayMS = 100; - - tracerLength = 5; - tracerAlpha = false; - tracerMinPixels = 3; - tracerColor = "0 1 0 1"; - tracerTex[0] = "special/landSpikeBolt"; - tracerTex[1] = "special/landSpikeBoltCross"; - tracerWidth = 0.5; - crossSize = 0.79; - crossViewAng = 0.990; - renderCross = true; - emap = true; -}; +function AcidCannonPulse::onExplode(%data, %proj, %pos, %mod) { + Parent::OnExplode(%data, %proj, %pos, %mod); + %TargetSearchMask = $TypeMasks::PlayerObjectType; + InitContainerRadiusSearch(%pos, %data.damageRadius, %TargetSearchMask); + while ((%potentialTarget = ContainerSearchNext()) != 0) { + if(%potentialTarget.isAlive()) { + if(((%potentialTarget.client.team == %proj.sourceObject.client.team) && $TeamDamage) || %potentialTarget.client.team != %proj.sourceObject.client.team) { + %potentialTarget.setWhiteout(1.0); + } + } + } +} datablock ShapeBaseImageData(AcidCannonImage) { - className = WeaponImage; - shapeFile = "weapon_energy.dts"; - item = AcidCannon; - projectile = LZombieAcidBall; - projectileType = TracerProjectile; - - HasChallenges = 0; - //RankRequire = $TWM2::RankRequire["PulsePhaser"]; - //No rank required, this weapon is picked up from killed zombies + className = WeaponImage; + shapeFile = "weapon_energy.dts"; + item = AcidCannon; + projectile = AcidCannonPulse; + projectileType = TracerProjectile; - usesEnergy = true; - fireEnergy = 4; - minEnergy = 4; + HasChallenges = 0; + //RankRequire = $TWM2::RankRequire["PulsePhaser"]; + //No rank required, this weapon is picked up from killed zombies - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = BlasterSwitchSound; + usesEnergy = true; + fireEnergy = 4; + minEnergy = 4; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = BlasterSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.3; - stateFire[3] = true; - stateRecoil[3] = NoRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - //stateSound[3] = PPWFireSound; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 4.2; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = NoRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + //stateSound[3] = PPWFireSound; + stateScript[3] = "onFire"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 4.2; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateTimeoutValue[6] = 0.3; - stateSound[6] = BlasterDryFireSound; - stateTransitionOnTimeout[6] = "Ready"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateTimeoutValue[6] = 0.3; + stateSound[6] = BlasterDryFireSound; + stateTransitionOnTimeout[6] = "Ready"; }; datablock ItemData(AcidCannon) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_energy.dts"; - image = AcidCannonImage; - mass = 1; - alwaysAllowPickup = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy.dts"; + image = AcidCannonImage; + mass = 1; + alwaysAllowPickup = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "an Acid Cannon"; }; function AcidCannonImage::onMount(%this, %obj, %slot) { - Parent::onMount(%this, %obj, %slot); + Parent::onMount(%this, %obj, %slot); } function AcidCannonImage::onUnmount(%this,%obj,%slot) { - Parent::onUnmount(%this, %obj, %slot); + Parent::onUnmount(%this, %obj, %slot); } function AcidCannonImage::onFire(%data,%obj,%slot) { - AcidCannonAttack(%obj, %slot, 0); + AcidCannonAttack(%obj, %slot, 0); } function AcidCannonAttack(%object, %slot, %chargecount) { - %muzzleVec = %object.getMuzzleVector(%slot); - %muzzlePt = %object.getMuzzlePoint(%slot); - if(%chargecount <= 5) { - if(%chargecount == 1) { - serverPlay3D(AcidCannonPreFireSound, %muzzlePt); - } - %charge = new ParticleEmissionDummy() { - position = %muzzlePt; - dataBlock = "defaultEmissionDummy"; - emitter = "BurnEmitter"; - }; - MissionCleanup.add(%charge); - %charge.schedule(100, "delete"); - } - if(%chargecount == 7) { - %p = new TracerProjectile() { - dataBlock = LZombieAcidBall; - initialDirection = %muzzleVec; - initialPosition = %muzzlePt; - sourceObject = %object; - sourceSlot = 0; - }; - MissionCleanup.add(%p); - serverPlay3D(CentaurArtilleryFireSound, %muzzlePt); - } - if(%chargecount == 9) { - %p = new TracerProjectile() { - dataBlock = LZombieAcidBall; - initialDirection = %muzzleVec; - initialPosition = %muzzlePt; - sourceObject = %object; - sourceSlot = 0; - }; - MissionCleanup.add(%p); - serverPlay3D(CentaurArtilleryFireSound, %muzzlePt); - } - // - if(%chargecount <= 9) { - %chargecount++; - schedule(100, 0, "AcidCannonAttack", %object, %slot, %chargecount); - } + %muzzleVec = %object.getMuzzleVector(%slot); + %muzzlePt = %object.getMuzzlePoint(%slot); + if(%chargecount <= 5) { + if(%chargecount == 1) { + serverPlay3D(AcidCannonPreFireSound, %muzzlePt); + } + %charge = new ParticleEmissionDummy() { + position = %muzzlePt; + dataBlock = "defaultEmissionDummy"; + emitter = "BurnEmitter"; + }; + MissionCleanup.add(%charge); + %charge.schedule(100, "delete"); + } + if(%chargecount == 7 || %chargecount == 9) { + %p = new TracerProjectile() { + dataBlock = AcidCannonPulse; + initialDirection = %muzzleVec; + initialPosition = %muzzlePt; + sourceObject = %object; + sourceSlot = 0; + }; + MissionCleanup.add(%p); + serverPlay3D(CentaurArtilleryFireSound, %muzzlePt); + } + // + if(%chargecount <= 9) { + %chargecount++; + schedule(100, 0, "AcidCannonAttack", %object, %slot, %chargecount); + } } diff --git a/scripts/weapons/Other/NLS22AcidSniper.cs b/scripts/weapons/Other/NLS22AcidSniper.cs new file mode 100644 index 0000000..df2010b --- /dev/null +++ b/scripts/weapons/Other/NLS22AcidSniper.cs @@ -0,0 +1,217 @@ +datablock TracerProjectileData(M1Bullet) { + doDynamicClientHits = true; + + directDamage = 0.65; + directDamageType = $DamageType::M1; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; + + HeadShotKill = 1; + + ImageSource = "NLS22AcidSniperImage"; + + kickBackStrength = 15.0; + sound = ChaingunProjectile; + + dryVelocity = 3000.0; + wetVelocity = 2000.0; + velInheritFactor = 1.0; + fizzleTimeMS = 1000; + lifetimeMS = 1000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + tracerLength = 20.0; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + tracerTex[0] = "special/tracer00"; + tracerTex[1] = "special/tracercross"; + tracerWidth = 0.09; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; + + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; +}; + +datablock ItemData(NLS22AcidSniperAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "Some NLS-22 Acid Sniper Canisters"; + + computeCRC = true; +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ShapeBaseImageData(NLS22AcidSniperImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = NLS22AcidSniper; + ammo = NLS22AcidSniperAmmo; + projectile = M1Bullet; + projectileType = TracerProjectile; + emap = true; + + armThread = looksn; + + //ClipStuff + ClipName = "NLS22AcidSniperClip"; + ClipPickupName["NLS22AcidSniperClip"] = "A Few Boxes Of NLS-22 Acid Canisters"; + ShowsClipInHud = 1; + ClipReloadTime = 4; + ClipReturn = 4; + InitialClips = 5; + // + //Challenges + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "NLS-22 Hunter\t100\t150\tNone"; + Challenge[2] = "NLS-22 Expert\t200\t250\tNone"; + Challenge[3] = "NLS-22 Master\t500\t500\tNone"; + Challenge[4] = "NLS-22 God\t1000\t1000\tNone"; + Challenge[5] = "NLS-22 Bronze Commendation\t2500\t10000\tNone"; + Challenge[6] = "NLS-22 Silver Commendation\t5000\t25000\tNone"; + Challenge[7] = "NLS-22 Gold Commendation\t10000\t50000\tNone"; + Challenge[8] = "NLS-22 Titan Commendation\t25000\t75000\tNone"; + GunName = "NLS-22 Acid Sniper Rifle"; + // + + RankRequire = $TWM2::RankRequire["M1"]; + + casing = ShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 3.0; + + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateSound[3] = "M1FireSound"; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.9; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; + + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; +}; + +datablock ItemData(NLS22AcidSniper) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = NLS22AcidSniperImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a NLS-22 Acid Sniper Rifle"; + + computeCRC = true; + emap = true; +}; + +//Two images make the scope +datablock ShapeBaseImageData(NLS22AcidSniperScopeImage) : NLS22AcidSniperImage { + shapeFile = "turret_belly_barrell.dts"; + offset = "0 0.25 0.25"; + rotation = "1 0 0 180"; +}; + +datablock ShapeBaseImageData(NLS22AcidSniperScopeImage2) : NLS22AcidSniperImage { + shapeFile = "turret_belly_barrell.dts"; + offset = "0 0.3 0.25"; + rotation = "1 0 0 0"; +}; + +datablock ShapeBaseImageData(NLS22AcidSniperBarrelImage) : NLS22AcidSniperImage { + shapeFile = "weapon_elf.dts"; + offset = "0 0.3 0"; + rotation = "1 0 0 0"; +}; + +function NLS22AcidSniperImage::onMount(%this,%obj,%slot) { + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + Parent::onMount(%this, %obj, %slot); + %obj.mountImage(NLS22AcidSniperScopeImage, 5); + %obj.mountImage(NLS22AcidSniperScopeImage2, 6); + %obj.mountImage(NLS22AcidSniperBarrelImage, 7); +} + +function NLS22AcidSniperImage::onUnmount(%this,%obj,%slot) { + Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(5); + %obj.unmountImage(6); + %obj.unmountImage(7); +} + +function M1SniperRifleImage::onFire(%data, %obj, %slot) { + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + %p = Parent::onFire(%data, %obj, %slot); +} \ No newline at end of file diff --git a/serverControl.cs b/serverControl.cs index cf692ba..4dd41e4 100644 --- a/serverControl.cs +++ b/serverControl.cs @@ -28,7 +28,11 @@ $TWM2::AllyBotsOn = 1; //Enable Ally Bots in the Construction Game Mode setPerfCounterEnable(0); //leave this, reduces lag -$TWM2::HostGUID = "SetMeUp"; //Server console to get your GUID +$TWM2::HostGUID = "SetMeUp"; //Use the server console to get your GUID and place it in here + +//NOTE: If you would like to enable telnet access, add a password to both of the empty +// string parameters below and uncomment out the line. +//telnetSetParameters(28000, "", ""); $TWM2::AllowBossVotes = 1; //0 to disable $TWM2::AllowCMVotes = 1; //0 to disable change mission votes @@ -139,43 +143,50 @@ $TWM2::ZombieName[2] = "Ravager Zombie"; $TWM2::ZombieName[3] = "Zombie Lord"; $TWM2::ZombieName[4] = "Demon Zombie"; $TWM2::ZombieName[5] = "Air Rapier Zombie"; -$TWM2::ZombieName[6] = "Demon Lord Zombie"; -$TWM2::ZombieName[7] = "Lord Yvex"; //Yvex -$TWM2::ZombieName[8] = CollapseEscape("\c7Lord Rog"); //Rog +$TWM2::ZombieName[6] = CollapseEscape("\c9Demon Lord Zombie"); $TWM2::ZombieName[9] = "Shifter Zombie"; $TWM2::ZombieName[10] = "Zombie Summoner"; $TWM2::ZombieName[11] = "Sniper Zombie"; $TWM2::ZombieName[12] = "Ultra Demon Zombie"; $TWM2::ZombieName[13] = "Volatile Ravager"; $TWM2::ZombieName[14] = "Slingshot AA Zombie"; -$TWM2::ZombieName[15] = "Wraith Zombie"; -$TWM2::ZombieName[16] = "General Rog"; +$TWM2::ZombieName[15] = CollapseEscape("\c9Wraith Zombie"); +$TWM2::ZombieName[16] = CollapseEscape("\c9General Rog"); $TWM2::ZombieName[17] = "Elite Demon"; +$TWM2::ZombieName[18] = CollapseEscape("\c9FoV Flareguide"); -$TWM2::BossName["Windshear"] = "Colonel Windshear"; -$TWM2::BossName["GoL"] = "The Ghost Of Lightning"; -$TWM2::BossName["Vegenor"] = "General Vegenor"; -$TWM2::BossName["Insignia"] = "Major Insignia"; -$TWM2::BossName["Vardison"] = "Lord Vardison"; -$TWM2::BossName["Trevor"] = "Lordranius Trevor"; -$TWM2::BossName["GoF"] = CollapseEscape("\c7The Ghost Of Fire"); -$TWM2::BossName["Stormrider"] = "Commander Stormrider"; +//$TWM2::BossName: These are the names that show on the boss object itself in the game. +$TWM2::BossName["Yvex"] = CollapseEscape("\c7Lord Yvex"); +$TWM2::BossName["LordRog"] = CollapseEscape("\c7Lord Rog"); +$TWM2::BossName["Windshear"] = CollapseEscape("\c7Colonel Windshear"); +$TWM2::BossName["GhostOfLightning"] = CollapseEscape("\c7The Ghost Of Lightning"); +$TWM2::BossName["Vegenor"] = CollapseEscape("\c7General Vegenor"); +$TWM2::BossName["Insignia"] = CollapseEscape("\c7Major Insignia"); +$TWM2::BossName["Vardison"] = CollapseEscape("\c7Lord Vardison"); +$TWM2::BossName["Vardison1"] = CollapseEscape("\c7Lord Vardison"); +$TWM2::BossName["Vardison2"] = CollapseEscape("\c7Lord Vardison"); +$TWM2::BossName["Vardison3"] = CollapseEscape("\c7Lord Vardison"); +$TWM2::BossName["Trevor"] = CollapseEscape("\c7Lordranius Trevor"); +$TWM2::BossName["GhostOfFire"] = CollapseEscape("\c7The Ghost Of Fire"); +$TWM2::BossName["Stormrider"] = CollapseEscape("\c7Commander Stormrider"); +$TWM2::BossName["ShadeLord"] = CollapseEscape("\c7The Shade Lord"); -//lower left names -$TWM2::BossName["Yvex"] = "Lord Yvex"; -$TWM2::BossName["LordRog"] = "Lord Rog"; -$TWM2::BossName["CnlWindshear"] = "Colonel Windshear"; -$TWM2::BossName["Vegenor"] = "General Vegenor"; -$TWM2::BossName["Insignia"] = "Major Insignia"; -$TWM2::BossName["Vardison"] = "Lord Vardison"; -$TWM2::BossName["Trevor"] = "Lordranius Trevor"; -$TWM2::BossName["GhostOfFire"] = "The Ghost Of Fire"; -$TWM2::BossName["Stormrider"] = "Cmdr. Stormrider"; -$TWM2::BossName["GhostOfLightning"] = "The Ghost Of Lightning"; -$TWM2::BossName["Vardison1"] = "Lord Vardison"; -$TWM2::BossName["Vardison2"] = "Lord Vardison"; -$TWM2::BossName["Vardison3"] = "Lord Vardison"; -$TWM2::BossName["ShadeLord"] = "The Shade Lord"; +//$TWM2::BossNameInternal: These are the names that appear in the chat text box when the boss speaks, or whenever +// an action message is sent to the chat box. +$TWM2::BossNameInternal["Yvex"] = "Lord Yvex"; +$TWM2::BossNameInternal["LordRog"] = "Lord Rog"; +$TWM2::BossNameInternal["CnlWindshear"] = "Colonel Windshear"; +$TWM2::BossNameInternal["Vegenor"] = "General Vegenor"; +$TWM2::BossNameInternal["Insignia"] = "Major Insignia"; +$TWM2::BossNameInternal["Vardison"] = "Lord Vardison"; +$TWM2::BossNameInternal["Trevor"] = "Lordranius Trevor"; +$TWM2::BossNameInternal["GhostOfFire"] = "The Ghost Of Fire"; +$TWM2::BossNameInternal["Stormrider"] = "Cmdr. Stormrider"; +$TWM2::BossNameInternal["GhostOfLightning"] = "The Ghost Of Lightning"; +$TWM2::BossNameInternal["Vardison1"] = "Lord Vardison"; +$TWM2::BossNameInternal["Vardison2"] = "Lord Vardison"; +$TWM2::BossNameInternal["Vardison3"] = "Lord Vardison"; +$TWM2::BossNameInternal["ShadeLord"] = "The Shade Lord"; //-----OFFICIAL VALUES-----\\ $TWM2::ZombieXPAward[1] = 1; // 1 $TWM2::ZombieXPAward[2] = 10; // 10 @@ -192,6 +203,7 @@ $TWM2::ZombieXPAward[14] = 20; // 20 $TWM2::ZombieXPAward[15] = 50; // 50 $TWM2::ZombieXPAward[16] = 1000; // 1000 $TWM2::ZombieXPAward[17] = 25; // 25 +$TWM2::ZombieXPAward[18] = 1000; // 1000 $TWM2::BossXPAward["Yvex"] = 10000; // 10000 $TWM2::BossXPAward["CnlWindshear"] = 12500; // 12500