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