From 007b31e2e7759511b9e6e296f57a6d6dfbe491f6 Mon Sep 17 00:00:00 2001 From: KJeff01 Date: Sat, 9 Dec 2023 13:56:46 -0600 Subject: [PATCH] Campaign structure update and more (#3552) Mainly: Buffing structures a bit, make price and build times vary according to strength. VTOL weapons buffed and 3-wave offmap VTOL spawn attacks. Various tweaks to improve scripts. --- data/base/script/campaign/cam1-1.js | 1 - data/base/script/campaign/cam1-1s.js | 12 +- data/base/script/campaign/cam1-2.js | 9 +- data/base/script/campaign/cam1-2s.js | 14 +- data/base/script/campaign/cam1-3.js | 23 +- data/base/script/campaign/cam1-3s.js | 14 +- data/base/script/campaign/cam1-4a.js | 19 +- data/base/script/campaign/cam1-4as.js | 14 +- data/base/script/campaign/cam1-5.js | 21 +- data/base/script/campaign/cam1-5s.js | 13 +- data/base/script/campaign/cam1-7.js | 26 +- data/base/script/campaign/cam1-7s.js | 13 +- data/base/script/campaign/cam1-d.js | 15 +- data/base/script/campaign/cam1-ds.js | 13 +- data/base/script/campaign/cam1a-c.js | 1 - data/base/script/campaign/cam1a.js | 58 +- data/base/script/campaign/cam1b.js | 17 +- data/base/script/campaign/cam1c.js | 45 +- data/base/script/campaign/cam1ca.js | 3 +- data/base/script/campaign/cam1end.js | 13 +- data/base/script/campaign/cam2-1s.js | 26 +- data/base/script/campaign/cam2-1x.js | 21 +- data/base/script/campaign/cam2-2.js | 47 +- data/base/script/campaign/cam2-2s.js | 16 +- data/base/script/campaign/cam2-5.js | 10 +- data/base/script/campaign/cam2-5s.js | 16 +- data/base/script/campaign/cam2-6.js | 16 +- data/base/script/campaign/cam2-6s.js | 16 +- data/base/script/campaign/cam2-7.js | 26 +- data/base/script/campaign/cam2-7s.js | 16 +- data/base/script/campaign/cam2-8.js | 36 +- data/base/script/campaign/cam2-8s.js | 16 +- data/base/script/campaign/cam2-a.js | 58 +- data/base/script/campaign/cam2-b.js | 53 +- data/base/script/campaign/cam2-c.js | 23 +- data/base/script/campaign/cam2-d.js | 44 +- data/base/script/campaign/cam2-ds.js | 16 +- data/base/script/campaign/cam2-end.js | 88 ++- data/base/script/campaign/cam3-1.js | 104 ++- data/base/script/campaign/cam3-1s.js | 16 +- data/base/script/campaign/cam3-2.js | 42 +- data/base/script/campaign/cam3-2s.js | 16 +- data/base/script/campaign/cam3-4.js | 38 +- data/base/script/campaign/cam3-4s.js | 19 +- data/base/script/campaign/cam3-a.js | 93 ++- data/base/script/campaign/cam3-ab.js | 63 +- data/base/script/campaign/cam3-ad1.js | 29 +- data/base/script/campaign/cam3-ad2.js | 62 +- data/base/script/campaign/cam3-b.js | 57 +- data/base/script/campaign/cam3-c.js | 28 +- data/base/script/campaign/libcampaign.js | 133 +++- .../campaign/libcampaign_includes/artifact.js | 6 +- .../campaign/libcampaign_includes/events.js | 13 +- .../campaign/libcampaign_includes/misc.js | 4 +- .../campaign/libcampaign_includes/nexus.js | 20 +- .../libcampaign_includes/production.js | 2 +- .../campaign/libcampaign_includes/research.js | 4 +- .../libcampaign_includes/transport.js | 14 +- .../campaign/libcampaign_includes/truck.js | 8 +- .../campaign/libcampaign_includes/victory.js | 26 +- .../campaign/libcampaign_includes/video.js | 3 +- data/base/script/campaign/templates.js | 413 ++++++++--- data/base/script/campaign/transitionTech.js | 32 +- data/base/script/fastplay/fastdemo.js | 5 +- data/base/script/tutorial.js | 22 +- data/base/stats/body.json | 12 +- data/base/stats/research.json | 192 +++-- data/base/stats/structure.json | 670 +++++++++--------- data/base/stats/structuremodifier.json | 14 +- data/base/stats/templates.json | 6 +- data/base/stats/weapons.json | 175 +++-- data/base/wrf/cam2/sub2-8/labels.json | 2 +- data/base/wrf/cam3/sub3-2/labels.json | 6 + 73 files changed, 2056 insertions(+), 1181 deletions(-) diff --git a/data/base/script/campaign/cam1-1.js b/data/base/script/campaign/cam1-1.js index 299563859f8..0b0fae3d52d 100644 --- a/data/base/script/campaign/cam1-1.js +++ b/data/base/script/campaign/cam1-1.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); diff --git a/data/base/script/campaign/cam1-1s.js b/data/base/script/campaign/cam1-1s.js index 2440e0d0b8c..b144df947a3 100644 --- a/data/base/script/campaign/cam1-1s.js +++ b/data/base/script/campaign/cam1-1s.js @@ -2,6 +2,12 @@ include("script/campaign/libcampaign.js"); var cheat; var powModVideoPlayed; +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 1, y: 32} +}; function eventChat(from, to, message) { @@ -43,7 +49,7 @@ function checkForPowerModule() { if (cheat || powerModuleBuilt()) { - camSetupTransporter(11, 52, 1, 32); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); setMissionTime(camChangeOnDiff(camMinutesToSeconds(25))); // 25 min for offworld secondVideo(); @@ -56,8 +62,8 @@ function checkForPowerModule() function eventStartLevel() { - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(10))); // 10 min for building module. camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_1"); cheat = false; diff --git a/data/base/script/campaign/cam1-2.js b/data/base/script/campaign/cam1-2.js index 346bb4e9b1d..e0412eb4e5f 100644 --- a/data/base/script/campaign/cam1-2.js +++ b/data/base/script/campaign/cam1-2.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -87,14 +86,14 @@ function eventStartLevel() "NorthGroup": { cleanup: "NorthBase", detectMsg: "C1-2_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "WestGroup": { cleanup: "WestBase", detectMsg: "C1-2_BASE2", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavLabGroup": { cleanup: "ScavLabCleanup", diff --git a/data/base/script/campaign/cam1-2s.js b/data/base/script/campaign/cam1-2s.js index e4239e90aec..5a83a52616d 100644 --- a/data/base/script/campaign/cam1-2s.js +++ b/data/base/script/campaign/cam1-2s.js @@ -1,11 +1,17 @@ - include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 39, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 39, 1); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); camPlayVideos({video: "SB1_2_MSG", type: CAMP_MSG}); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_2"); diff --git a/data/base/script/campaign/cam1-3.js b/data/base/script/campaign/cam1-3.js index fc237b28376..fb959ebb4a1 100644 --- a/data/base/script/campaign/cam1-3.js +++ b/data/base/script/campaign/cam1-3.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -8,7 +7,7 @@ const mis_newParadigmRes = [ "R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels", "R-Sys-Engineering01", "R-Wpn-MG-Damage03", "R-Wpn-MG-ROF01", "R-Wpn-Cannon-Damage01", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", - "R-Defense-WallUpgrade02", "R-Struc-Materials02", "R-Vehicle-Engine01", + "R-Defense-WallUpgrade01", "R-Struc-Materials01", "R-Vehicle-Engine01", "R-Struc-RprFac-Upgrade01", "R-Wpn-Rocket-Damage01", "R-Wpn-Rocket-ROF02", "R-Wpn-Mortar-Damage02", "R-Wpn-Mortar-ROF01", ]; @@ -16,7 +15,7 @@ const mis_scavengerRes = [ "R-Wpn-Flamer-Damage02", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", "R-Wpn-MG-Damage03", "R-Wpn-MG-ROF01", "R-Wpn-Cannon-Damage01", "R-Wpn-Mortar-Damage02", "R-Wpn-Mortar-ROF01", "R-Wpn-Rocket-ROF03", - "R-Defense-WallUpgrade02","R-Struc-Materials02", + "R-Defense-WallUpgrade01","R-Struc-Materials01", ]; var NPDefenseGroup, NPScoutGroup, NPFactory; @@ -79,7 +78,7 @@ function enableNP(args) repair: 66, }); - camPlayVideos(["pcv455.ogg", {video: "SB1_3_MSG4", type: MISS_MSG}]); + camPlayVideos([cam_sounds.incoming.incomingTransmission, {video: "SB1_3_MSG4", type: MISS_MSG}]); } function NPReinforce() @@ -141,7 +140,7 @@ function eventAttacked(victim, attacker) { function enableReinforcements() { - playSound("pcv440.ogg"); // Reinforcements are available. + playSound(cam_sounds.reinforcementsAreAvailable); camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_1C", { area: "RTLZ", message: "C1-3_LZ", @@ -177,7 +176,7 @@ function camEnemyBaseEliminated_ScavBaseGroup() function playNPWarningMessage() { - camPlayVideos(["pcv455.ogg", {video: "SB1_3_MSG3", type: CAMP_MSG}]); + camPlayVideos([cam_sounds.incoming.incomingTransmission, {video: "SB1_3_MSG3", type: CAMP_MSG}]); } function eventDroidBuilt(droid, structure) @@ -233,20 +232,20 @@ function eventStartLevel() "ScavBaseGroup": { cleanup: "ScavBase", detectMsg: "C1-3_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "NPBaseGroup": { cleanup: "NPBase", detectMsg: "C1-3_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg" + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated }, "ScavBaseGroupSouth": { cleanup: "SouthScavBase", detectMsg: "C1-3_OBJ2", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, }); diff --git a/data/base/script/campaign/cam1-3s.js b/data/base/script/campaign/cam1-3s.js index 6ffd181fa0a..5ff1d9faa05 100644 --- a/data/base/script/campaign/cam1-3s.js +++ b/data/base/script/campaign/cam1-3s.js @@ -1,11 +1,17 @@ - include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 39, y: 126} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 39, 126); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos({video: "SB1_3_UPDATE", type: CAMP_MSG}); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_3"); diff --git a/data/base/script/campaign/cam1-4a.js b/data/base/script/campaign/cam1-4a.js index ff396288faa..cb1caa168d2 100644 --- a/data/base/script/campaign/cam1-4a.js +++ b/data/base/script/campaign/cam1-4a.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -6,7 +5,7 @@ const mis_newParadigmRes = [ "R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels", "R-Sys-Engineering01", "R-Wpn-MG-Damage04", "R-Wpn-MG-ROF01", "R-Wpn-Cannon-Damage03", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", - "R-Defense-WallUpgrade03", "R-Struc-Materials03", "R-Vehicle-Engine02", + "R-Defense-WallUpgrade02", "R-Struc-Materials02", "R-Vehicle-Engine02", "R-Struc-RprFac-Upgrade03", "R-Wpn-Rocket-Damage02", "R-Wpn-Rocket-ROF03", "R-Vehicle-Metals02", "R-Wpn-Mortar-Damage03", "R-Wpn-Rocket-Accuracy01", "R-Wpn-RocketSlow-Damage02", "R-Wpn-Mortar-ROF01", @@ -16,7 +15,7 @@ const mis_scavengerRes = [ "R-Wpn-MG-Damage04", "R-Wpn-MG-ROF01", "R-Wpn-Rocket-Damage02", "R-Wpn-Cannon-Damage02", "R-Wpn-Mortar-Damage03", "R-Wpn-Mortar-ROF01", "R-Wpn-Rocket-ROF03", "R-Vehicle-Metals02", - "R-Defense-WallUpgrade03", "R-Struc-Materials03", + "R-Defense-WallUpgrade02", "R-Struc-Materials02", ]; //Pursue player when nearby but do not go too far away from defense zone. @@ -48,7 +47,7 @@ camAreaEvent("removeRedObjectiveBlip", function() camAreaEvent("LandingZoneTrigger", function() { - camPlayVideos(["pcv456.ogg", {video: "SB1_4_B", type: MISS_MSG}]); + camPlayVideos([cam_sounds.incoming.incomingIntelligenceReport, {video: "SB1_4_B", type: MISS_MSG}]); hackRemoveMessage("C1-4_LZ", PROX_MSG, CAM_HUMAN_PLAYER); //Remove LZ 2 blip. const lz = getObject("LandingZone2"); // will override later @@ -137,20 +136,20 @@ function eventStartLevel() "SouthScavBaseGroup": { cleanup: "SouthScavBase", detectMsg: "C1-4_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "NorthScavBaseGroup": { cleanup: "NorthScavBase", detectMsg: "C1-4_BASE3", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "NPBaseGroup": { cleanup: "NPBase", detectMsg: "C1-4_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg" + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated }, }); diff --git a/data/base/script/campaign/cam1-4as.js b/data/base/script/campaign/cam1-4as.js index b40ad3d8c81..7772c9f6e86 100644 --- a/data/base/script/campaign/cam1-4as.js +++ b/data/base/script/campaign/cam1-4as.js @@ -1,11 +1,17 @@ - include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 80, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 80, 1); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); camPlayVideos({video: "SB1_4_MSG", type: MISS_MSG}); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_4A"); diff --git a/data/base/script/campaign/cam1-5.js b/data/base/script/campaign/cam1-5.js index fe4b9914c97..651321c5a76 100644 --- a/data/base/script/campaign/cam1-5.js +++ b/data/base/script/campaign/cam1-5.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -6,7 +5,7 @@ const mis_newParadigmRes = [ "R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels", "R-Sys-Engineering01", "R-Wpn-MG-Damage04", "R-Wpn-MG-ROF02", "R-Wpn-Cannon-Damage03", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", - "R-Defense-WallUpgrade03", "R-Struc-Materials03", "R-Vehicle-Engine02", + "R-Defense-WallUpgrade02", "R-Struc-Materials02", "R-Vehicle-Engine02", "R-Struc-RprFac-Upgrade03", "R-Wpn-Rocket-Damage02", "R-Wpn-Rocket-ROF03", "R-Vehicle-Metals02", "R-Wpn-Mortar-Damage03", "R-Wpn-Rocket-Accuracy02", "R-Wpn-RocketSlow-Damage02", "R-Wpn-Mortar-ROF01", "R-Cyborg-Metals03", @@ -17,7 +16,7 @@ const mis_scavengerRes = [ "R-Wpn-MG-Damage04", "R-Wpn-MG-ROF01", "R-Wpn-Rocket-Damage02", "R-Wpn-Cannon-Damage03", "R-Wpn-Mortar-Damage03", "R-Wpn-Mortar-ROF01", "R-Wpn-Rocket-Accuracy02", "R-Wpn-Rocket-ROF03", "R-Vehicle-Metals02", - "R-Defense-WallUpgrade03", "R-Struc-Materials03", "R-Wpn-Cannon-Accuracy01", + "R-Defense-WallUpgrade02", "R-Struc-Materials02", "R-Wpn-Cannon-Accuracy01", "R-Wpn-Mortar-Acc01", ]; var useHeavyReinforcement; @@ -210,26 +209,26 @@ function eventStartLevel() "ScavNorthGroup": { cleanup: "ScavNorth", detectMsg: "C1-5_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavSouthWestGroup": { cleanup: "ScavSouthWest", detectMsg: "C1-5_BASE2", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavSouthEastGroup": { cleanup: "ScavSouthEast", detectMsg: "C1-5_BASE3", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "NPBaseGroup": { cleanup: "NPBase", detectMsg: "C1-5_OBJ1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, player: CAM_NEW_PARADIGM }, }); diff --git a/data/base/script/campaign/cam1-5s.js b/data/base/script/campaign/cam1-5s.js index c1a8902e060..65632d9a34c 100644 --- a/data/base/script/campaign/cam1-5s.js +++ b/data/base/script/campaign/cam1-5s.js @@ -1,10 +1,17 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 100, y: 126} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 100, 126); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos({video: "SB1_5_MSG", type: MISS_MSG}); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_5"); diff --git a/data/base/script/campaign/cam1-7.js b/data/base/script/campaign/cam1-7.js index d50d6b53187..c3d707cc204 100644 --- a/data/base/script/campaign/cam1-7.js +++ b/data/base/script/campaign/cam1-7.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -59,7 +58,7 @@ camAreaEvent("NPTransportTrigger", function(droid) entry: { x: 39, y: 2 }, exit: { x: 32, y: 60 } }); - playSound("pcv632.ogg"); //enemy transport escaping warning sound + playSound(cam_sounds.enemyEscaping); } else { @@ -98,7 +97,7 @@ function eventGroupLoss(obj, group, newsize) { if (obj.id === droidWithArtiID) { - const acrate = addFeature("Crate", obj.x, obj.y); + const acrate = addFeature(CAM_ARTIFACT_STAT, obj.x, obj.y); addLabel(acrate, "newArtiLabel"); camSetArtifacts({ @@ -280,28 +279,31 @@ function eventStartLevel() camUpgradeOnMapTemplates(cTempl.rbjeep, cTempl.rbjeep8, CAM_SCAV_7); // New MRA Mantis Tracks units on the hill - addDroid(CAM_NEW_PARADIGM, 29, 16, "MRA Mantis Tracks", "Body12SUP", "tracked01", "", "", "Rocket-MRL"); - addDroid(CAM_NEW_PARADIGM, 29, 17, "MRA Mantis Tracks", "Body12SUP", "tracked01", "", "", "Rocket-MRL"); - addDroid(CAM_NEW_PARADIGM, 29, 18, "MRA Mantis Tracks", "Body12SUP", "tracked01", "", "", "Rocket-MRL"); + if (difficulty >= HARD) + { + addDroid(CAM_NEW_PARADIGM, 29, 16, "MRA Mantis Tracks", tBody.tank.mantis, tProp.tank.tracks, "", "", tWeap.tank.miniRocketArray); + addDroid(CAM_NEW_PARADIGM, 29, 17, "MRA Mantis Tracks", tBody.tank.mantis, tProp.tank.tracks, "", "", tWeap.tank.miniRocketArray); + addDroid(CAM_NEW_PARADIGM, 29, 18, "MRA Mantis Tracks", tBody.tank.mantis, tProp.tank.tracks, "", "", tWeap.tank.miniRocketArray); + } camSetEnemyBases({ "ScavMiddleGroup": { cleanup: "scavMiddle", detectMsg: "C1-7_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavSouthEastGroup": { cleanup: "scavSouthEast", detectMsg: "C1-7_BASE2", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavNorthEastGroup": { cleanup: "scavNorth", detectMsg: "C1-7_BASE3", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, }); diff --git a/data/base/script/campaign/cam1-7s.js b/data/base/script/campaign/cam1-7s.js index 9ccf9c21cbf..9c8d902a075 100644 --- a/data/base/script/campaign/cam1-7s.js +++ b/data/base/script/campaign/cam1-7s.js @@ -1,10 +1,17 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 55, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 55, 1); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); camPlayVideos([{video: "SB1_7_MSG", type: CAMP_MSG}, {video: "SB1_7_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_7"); diff --git a/data/base/script/campaign/cam1-d.js b/data/base/script/campaign/cam1-d.js index e6d7a943458..e6351c8c556 100644 --- a/data/base/script/campaign/cam1-d.js +++ b/data/base/script/campaign/cam1-d.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -171,25 +170,25 @@ function eventStartLevel() "NPSouthEastGroup": { cleanup: "NPSouthEast", detectMsg: "C1D_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NPMiddleGroup": { cleanup: "NPMiddle", detectMsg: "C1D_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NPNorthEastGroup": { cleanup: "NPNorthEast", detectMsg: "C1D_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NPLZGroup": { cleanup: "NPLZ1", detectMsg: "C1D_LZ2", - eliminateSnd: "pcv394.ogg", + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, player: CAM_NEW_PARADIGM // required for LZ-type bases }, }); diff --git a/data/base/script/campaign/cam1-ds.js b/data/base/script/campaign/cam1-ds.js index f0e9441f20b..3aad4632830 100644 --- a/data/base/script/campaign/cam1-ds.js +++ b/data/base/script/campaign/cam1-ds.js @@ -1,10 +1,17 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 126, y: 112} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 126, 112); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(2))); camPlayVideos([{video: "MB1D_MSG", type: CAMP_MSG}, {video: "MB1D_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_D"); diff --git a/data/base/script/campaign/cam1a-c.js b/data/base/script/campaign/cam1a-c.js index f65e08077fb..30318582fbf 100644 --- a/data/base/script/campaign/cam1a-c.js +++ b/data/base/script/campaign/cam1a-c.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); diff --git a/data/base/script/campaign/cam1a.js b/data/base/script/campaign/cam1a.js index eb745a7f05d..8bf44d7e7b0 100644 --- a/data/base/script/campaign/cam1a.js +++ b/data/base/script/campaign/cam1a.js @@ -12,7 +12,7 @@ const mis_scavengerRes = [ // Player zero's droid enters area next to first oil patch. camAreaEvent("launchScavAttack", function(droid) { - camPlayVideos(["pcv456.ogg", {video: "MB1A_MSG", type: MISS_MSG}]); + camPlayVideos([cam_sounds.incoming.incomingIntelligenceReport, {video: "MB1A_MSG", type: MISS_MSG}]); hackAddMessage("C1A_OBJ1", PROX_MSG, CAM_HUMAN_PLAYER, false); // Send scavengers on war path if triggered above. camManageGroup(camMakeGroup("scavAttack1", ENEMIES), CAM_ORDER_ATTACK, { @@ -64,6 +64,8 @@ camAreaEvent("roadblockArea", function(droid) // Scavengers hiding in the split canyon area between base two and three. function raidAttack() { + camCompleteRequiredResearch(mis_scavengerRes, CAM_SCAV_6); + camCompleteRequiredResearch(mis_scavengerRes, CAM_SCAV_7); camManageGroup(camMakeGroup("raidTrigger", ENEMIES), CAM_ORDER_ATTACK, { pos: camMakePos("scavBase3Cleanup") }); @@ -119,8 +121,9 @@ function camEnemyBaseEliminated_scavGroup2() function enableBaseStructures() { const structs = [ - "A0CommandCentre", "A0PowerGenerator", "A0ResourceExtractor", - "A0ResearchFacility", "A0LightFactory", + cam_base_structures.commandCenter, cam_base_structures.powerGenerator, + cam_base_structures.derrick, cam_base_structures.researchLab, + cam_base_structures.factory, ]; for (let i = 0; i < structs.length; ++i) @@ -157,8 +160,13 @@ function eventStartLevel() enableBaseStructures(); camCompleteRequiredResearch(mis_playerRes, CAM_HUMAN_PLAYER); - camCompleteRequiredResearch(mis_scavengerRes, CAM_SCAV_6); - camCompleteRequiredResearch(mis_scavengerRes, CAM_SCAV_7); + completeResearch("R-Wpn-Flamer-Range01-ScavReduce", CAM_SCAV_6); + completeResearch("R-Wpn-Flamer-Range01-ScavReduce", CAM_SCAV_7); + if (difficulty >= HARD) + { + camCompleteRequiredResearch(mis_scavengerRes, CAM_SCAV_6); + camCompleteRequiredResearch(mis_scavengerRes, CAM_SCAV_7); + } if (difficulty === INSANE) { completeResearch("R-Wpn-Flamer-Range01-ScavReduce-Undo", CAM_SCAV_6); @@ -185,47 +193,35 @@ function eventStartLevel() "scavGroup1": { cleanup: "scavBase1Cleanup", detectMsg: "C1A_BASE0", - detectSnd: "pcv375.ogg", - eliminateSnd: "pcv391.ogg" + detectSnd: cam_sounds.baseDetection.scavengerOutpostDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerOutpostEradicated }, "scavGroup2": { cleanup: "scavBase2Cleanup", detectMsg: "C1A_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "scavGroup3": { cleanup: "scavBase3Cleanup", detectMsg: "C1A_BASE2", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "scavGroup4": { cleanup: "scavBase4Cleanup", detectMsg: "C1A_BASE3", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, }); - if (difficulty >= HARD) - { - camSetArtifacts({ - "base1ArtifactPos": { tech: ["R-Wpn-MG-Damage01", "R-Sys-Engineering01"] }, - "base2Factory": { tech: ["R-Wpn-Flamer01Mk1", "R-Sys-MobileRepairTurret01"] }, - "base3Factory": { tech: "R-Wpn-MG-Damage02" }, - "base4Factory": { tech: "R-Wpn-MG-ROF01" }, - }); - } - else - { - camSetArtifacts({ - "base1ArtifactPos": { tech: ["R-Wpn-MG-Damage01", "R-Sys-Engineering01"] }, - "base2Factory": { tech: "R-Wpn-Flamer01Mk1" }, - "base3Factory": { tech: ["R-Wpn-MG-Damage02", "R-Sys-MobileRepairTurret01"] }, - "base4Factory": { tech: "R-Wpn-MG-ROF01" }, - }); - } + camSetArtifacts({ + "base1ArtifactPos": { tech: ["R-Wpn-MG-Damage01", "R-Sys-Engineering01"] }, + "base2Factory": { tech: ["R-Wpn-Flamer01Mk1", "R-Sys-MobileRepairTurret01"] }, + "base3Factory": { tech: "R-Wpn-MG-Damage02" }, + "base4Factory": { tech: "R-Wpn-MG-ROF01" }, + }); camSetFactories({ "base2Factory": { diff --git a/data/base/script/campaign/cam1b.js b/data/base/script/campaign/cam1b.js index 19b1060ea39..3682afa58f0 100644 --- a/data/base/script/campaign/cam1b.js +++ b/data/base/script/campaign/cam1b.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -108,26 +107,26 @@ function eventStartLevel() "base1group": { cleanup: "enemybase1", detectMsg: "C1B_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg", + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated, }, "base2group": { cleanup: "enemybase2", detectMsg: "C1B_BASE0", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg", + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated, }, "base3group": { cleanup: "enemybase3", detectMsg: "C1B_OBJ1", - detectSnd: "pcv375.ogg", - eliminateSnd: "pcv391.ogg", + detectSnd: cam_sounds.baseDetection.scavengerOutpostDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerOutpostEradicated, }, "base4group": { cleanup: "enemybase4", detectMsg: "C1B_BASE2", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv392.ogg", + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam1c.js b/data/base/script/campaign/cam1c.js index 906692ffca8..56b1fcd99b2 100644 --- a/data/base/script/campaign/cam1c.js +++ b/data/base/script/campaign/cam1c.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -6,7 +5,7 @@ const mis_newParadigmRes = [ "R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels", "R-Sys-Engineering01", "R-Wpn-MG-Damage03", "R-Wpn-MG-ROF01", "R-Wpn-Cannon-Damage02", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", - "R-Defense-WallUpgrade03", "R-Struc-Materials03", "R-Vehicle-Engine02", + "R-Defense-WallUpgrade01", "R-Struc-Materials01", "R-Vehicle-Engine02", "R-Struc-RprFac-Upgrade02", "R-Wpn-Rocket-Damage01", "R-Wpn-Rocket-ROF03", "R-Vehicle-Metals01", "R-Wpn-Mortar-Damage02", "R-Wpn-Rocket-Accuracy01", "R-Wpn-RocketSlow-Damage01", "R-Wpn-Mortar-ROF01", @@ -15,7 +14,7 @@ const mis_scavengerRes = [ "R-Wpn-Flamer-Damage02", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", "R-Wpn-MG-Damage03", "R-Wpn-MG-ROF01", "R-Wpn-Rocket-Damage01", "R-Wpn-Cannon-Damage02", "R-Wpn-Mortar-Damage02", "R-Wpn-Mortar-ROF01", - "R-Wpn-Rocket-ROF03", "R-Defense-WallUpgrade03", "R-Struc-Materials03", + "R-Wpn-Rocket-ROF03", "R-Defense-WallUpgrade01", "R-Struc-Materials01", ]; function sendRocketForce() @@ -219,69 +218,69 @@ function eventStartLevel() "ScavSouthDerrickGroup": { cleanup: "ScavSouthDerrick", detectMsg: "C1C_BASE1", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv391.ogg" + detectSnd: cam_sounds.baseDetection.scavengerOutpostDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerOutpostEradicated }, "ScavSouthEastHighgroundGroup": { cleanup: "ScavSouthEastHighground", detectMsg: "C1C_BASE6", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv391.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavNorthBaseGroup": { cleanup: "ScavNorthBase", detectMsg: "C1C_BASE3", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv391.ogg" + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, "ScavSouthPodPitsGroup": { cleanup: "ScavSouthPodPits", detectMsg: "C1C_BASE4", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv391.ogg" + detectSnd: cam_sounds.baseDetection.scavengerOutpostDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerOutpostEradicated }, "ScavCentralBaseGroup": { cleanup: "MixedCentralBase", // two bases with same cleanup region detectMsg: "C1C_BASE5", - detectSnd: "pcv374.ogg", - eliminateSnd: "pcv391.ogg", + detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, + eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated, player: CAM_SCAV_7 // hence discriminate by player filter }, "NPEastBaseGroup": { cleanup: "NPEastBase", detectMsg: "C1C_BASE7", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NPNorthEastGeneratorGroup": { cleanup: "NPNorthEastGenerator", detectMsg: "C1C_BASE8", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NPNorthEastBaseGroup": { cleanup: "NPNorthEastBase", detectMsg: "C1C_BASE9", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NPCentralBaseGroup": { cleanup: "MixedCentralBase", // two bases with same cleanup region detectMsg: "C1C_BASE10", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, player: CAM_NEW_PARADIGM // hence discriminate by player filter }, "NPLZ1Group": { cleanup: "NPLZ1", // kill the four towers to disable LZ detectMsg: "C1C_LZ1", - eliminateSnd: "pcv394.ogg", + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, player: CAM_NEW_PARADIGM // required for LZ-type bases }, "NPLZ2Group": { cleanup: "NPLZ2", // kill the four towers to disable LZ detectMsg: "C1C_LZ2", - eliminateSnd: "pcv394.ogg", + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, player: CAM_NEW_PARADIGM // required for LZ-type bases }, }); diff --git a/data/base/script/campaign/cam1ca.js b/data/base/script/campaign/cam1ca.js index 0549c07b0b6..8e7951f505b 100644 --- a/data/base/script/campaign/cam1ca.js +++ b/data/base/script/campaign/cam1ca.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -6,7 +5,7 @@ const mis_newParadigmRes = [ "R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels", "R-Sys-Engineering01", "R-Wpn-MG-Damage03", "R-Wpn-MG-ROF01", "R-Wpn-Cannon-Damage02", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-Range01", "R-Wpn-Flamer-ROF01", - "R-Defense-WallUpgrade03", "R-Struc-Materials03", "R-Vehicle-Engine02", + "R-Defense-WallUpgrade02", "R-Struc-Materials02", "R-Vehicle-Engine02", "R-Struc-RprFac-Upgrade02", "R-Wpn-Rocket-Damage01", "R-Wpn-Rocket-ROF03", "R-Vehicle-Metals01", "R-Wpn-Mortar-Damage02", "R-Wpn-Rocket-Accuracy01", "R-Wpn-RocketSlow-Damage01", "R-Wpn-Mortar-ROF01", diff --git a/data/base/script/campaign/cam1end.js b/data/base/script/campaign/cam1end.js index 8219679a850..728af96427a 100644 --- a/data/base/script/campaign/cam1end.js +++ b/data/base/script/campaign/cam1end.js @@ -1,10 +1,17 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 13, y: 52}, + lz: {x: 10, y: 51, x2: 12, y2: 53}, + trPlace: {x: 11, y: 52}, + trExit: {x: 40, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(11, 52, 40, 1); - centreView(13, 52); - setNoGoArea(10, 51, 12, 53, CAM_HUMAN_PLAYER); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camMinutesToSeconds(15)); camPlayVideos([{video: "CAM1_OUT", type: CAMP_MSG}, {video: "CAM1_OUT2", type: CAMP_MSG}, {video: "CAM2_BRIEF", type: CAMP_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "CAM_2A"); diff --git a/data/base/script/campaign/cam2-1s.js b/data/base/script/campaign/cam2-1s.js index 97ceb417f01..f82320d2f37 100644 --- a/data/base/script/campaign/cam2-1s.js +++ b/data/base/script/campaign/cam2-1s.js @@ -1,22 +1,20 @@ -/* -SUB_2_1S campaign script -Authors: Cristian Odorico (Alpha93) / KJeff01 - */ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 70, y: 126} +}; + function eventStartLevel() { - //Set Victory Conditions camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_1"); - //Setup Transport - camSetupTransporter(87, 100, 70, 126); - //Centre View on Area - centreView(88, 101); - //Setup Landing Zone - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); - //Set Mission Time + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); - //Give player briefings camPlayVideos([{video: "MB2_1_MSG", type: CAMP_MSG}, {video: "MB2_1_MSG2", type: MISS_MSG}]); } diff --git a/data/base/script/campaign/cam2-1x.js b/data/base/script/campaign/cam2-1x.js index a82f447a06e..4403470c23a 100644 --- a/data/base/script/campaign/cam2-1x.js +++ b/data/base/script/campaign/cam2-1x.js @@ -1,7 +1,3 @@ -/* -SUB_2_1 Script -Authors: Cristian Odorico (Alpha93) / KJeff01 - */ include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); include("script/campaign/transitionTech.js"); @@ -10,7 +6,7 @@ var victoryFlag; const MIS_TRANSPORT_TEAM_PLAYER = 1; const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade04", "R-Struc-Materials04", "R-Sys-Engineering02", "R-Vehicle-Engine03", "R-Vehicle-Metals03", "R-Cyborg-Metals03", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage04", "R-Wpn-Cannon-ROF01", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-ROF01", @@ -31,8 +27,7 @@ camAreaEvent("crashSite", function(droid) return; } - const GOODSND = "pcv615.ogg"; - playSound(GOODSND); + playSound(cam_sounds.rescue.unitsRescued); hackRemoveMessage("C21_OBJECTIVE", PROX_MSG, CAM_HUMAN_PLAYER); @@ -150,20 +145,20 @@ function eventStartLevel() "COHardpointBase": { cleanup: "hardpointBaseCleanup", detectMsg: "C21_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBombardBase": { cleanup: "bombardBaseCleanup", detectMsg: "C21_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBunkerBase": { cleanup: "bunkerBaseCleanup", detectMsg: "C21_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam2-2.js b/data/base/script/campaign/cam2-2.js index 3e086e0c9f0..8acb0b39f16 100644 --- a/data/base/script/campaign/cam2-2.js +++ b/data/base/script/campaign/cam2-2.js @@ -1,9 +1,8 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade05", "R-Struc-Materials05", "R-Sys-Engineering02", "R-Vehicle-Engine04", "R-Vehicle-Metals04", "R-Cyborg-Metals04", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage05", "R-Wpn-Cannon-ROF01", "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF01", @@ -79,8 +78,7 @@ camAreaEvent("wayPoint2Rad", function(droid) repair: 67, }); - const WARN_MESSAGE = "pcv632.ogg"; // Collective commander escaping - playSound(WARN_MESSAGE); + playSound(cam_sounds.enemyEscaping); }); camAreaEvent("failZone", function(droid) @@ -96,10 +94,39 @@ camAreaEvent("failZone", function(droid) } }); -function vtolAttack() +function wave2() { const list = [cTempl.colatv, cTempl.colatv]; - camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPoint", "vtolRemovePoint", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter"); + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPoint", "vtolRemovePoint", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.colcbv, cTempl.colcbv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPoint", "vtolRemovePoint", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); +} + +function vtolAttack() +{ + const list = [cTempl.colpbv, cTempl.colpbv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPoint", "vtolRemovePoint", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } //Order the truck to build some defenses. @@ -185,14 +212,14 @@ function eventStartLevel() "COEastBase": { cleanup: "eastBaseCleanup", detectMsg: "C22_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COWestBase": { cleanup: "westBaseCleanup", detectMsg: "C22_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam2-2s.js b/data/base/script/campaign/cam2-2s.js index 11e5b6b74fc..8e09e1774b6 100644 --- a/data/base/script/campaign/cam2-2s.js +++ b/data/base/script/campaign/cam2-2s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 70, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(87, 100, 70, 1); - centreView(88, 101); - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camMinutesToSeconds(70))); camPlayVideos([{video: "MB2_2_MSG", type: CAMP_MSG}, {video:"MB2_2_MSG2", type: CAMP_MSG}, {video: "MB2_2_MSG3", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_2"); diff --git a/data/base/script/campaign/cam2-5.js b/data/base/script/campaign/cam2-5.js index 63e1c01b302..3c4820bddef 100644 --- a/data/base/script/campaign/cam2-5.js +++ b/data/base/script/campaign/cam2-5.js @@ -2,7 +2,7 @@ include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade05", "R-Struc-Materials05", "R-Sys-Engineering02", "R-Vehicle-Engine04", "R-Vehicle-Metals05", "R-Cyborg-Metals05", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage05", "R-Wpn-Cannon-ROF02", "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage07", @@ -126,14 +126,14 @@ function eventStartLevel() "COEastBase": { cleanup: "baseCleanup", detectMsg: "C25_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "CODamBase": { cleanup: "damBaseCleanup", detectMsg: "C25_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam2-5s.js b/data/base/script/campaign/cam2-5s.js index e26106baf19..a23b7770573 100644 --- a/data/base/script/campaign/cam2-5s.js +++ b/data/base/script/campaign/cam2-5s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 32, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(87, 100, 32, 1); - centreView(88, 101); - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB2_5_MSG", type: CAMP_MSG}, {video: "MB2_5_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_5"); diff --git a/data/base/script/campaign/cam2-6.js b/data/base/script/campaign/cam2-6.js index f1509ba4408..27f9ef383a2 100644 --- a/data/base/script/campaign/cam2-6.js +++ b/data/base/script/campaign/cam2-6.js @@ -143,20 +143,20 @@ function eventStartLevel() "COUplinkBase": { cleanup: "uplinkBaseCleanup", detectMsg: "C26_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COMainBase": { cleanup: "mainBaseCleanup", detectMsg: "C26_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COMediumBase": { cleanup: "mediumBaseCleanup", detectMsg: "C26_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -239,8 +239,8 @@ function eventStartLevel() if (difficulty >= HARD) { - addDroid(CAM_THE_COLLECTIVE, 26, 27, "Truck Panther Tracks", "Body6SUPP", "tracked01", "", "", "Spade1Mk1"); - addDroid(CAM_THE_COLLECTIVE, 42, 4, "Truck Panther Tracks", "Body6SUPP", "tracked01", "", "", "Spade1Mk1"); + addDroid(CAM_THE_COLLECTIVE, 26, 27, "Truck Panther Tracks", tBody.tank.panther, tProp.tank.tracks, "", "", tConstruct.truck); + addDroid(CAM_THE_COLLECTIVE, 42, 4, "Truck Panther Tracks", tBody.tank.panther, tProp.tank.tracks, "", "", tConstruct.truck); camManageTrucks(CAM_THE_COLLECTIVE); setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(6))); } diff --git a/data/base/script/campaign/cam2-6s.js b/data/base/script/campaign/cam2-6s.js index 38ac0c9a3e6..08d2b1e9a1d 100644 --- a/data/base/script/campaign/cam2-6s.js +++ b/data/base/script/campaign/cam2-6s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 16, y: 126} +}; + function eventStartLevel() { - camSetupTransporter(87, 100, 16, 126); - centreView(88, 101); - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB2_6_MSG", type: CAMP_MSG}, {video: "MB2_6_MSG2", type: CAMP_MSG}, {video: "MB2_6_MSG3", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_6"); diff --git a/data/base/script/campaign/cam2-7.js b/data/base/script/campaign/cam2-7.js index dbb169175e1..df034de9b48 100644 --- a/data/base/script/campaign/cam2-7.js +++ b/data/base/script/campaign/cam2-7.js @@ -5,7 +5,7 @@ const mis_collectiveRes = [ "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", "R-Vehicle-Engine05", "R-Vehicle-Metals05", "R-Cyborg-Metals05", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage06", "R-Wpn-Cannon-ROF03", - "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage07", + "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage08", "R-Wpn-MG-ROF03", "R-Wpn-Mortar-Acc02", "R-Wpn-Mortar-Damage06", "R-Wpn-Mortar-ROF03", "R-Wpn-Rocket-Accuracy02", "R-Wpn-Rocket-Damage06", "R-Wpn-Rocket-ROF03", "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-RocketSlow-Damage06", @@ -119,7 +119,7 @@ function eventStartLevel() setNoGoArea(enemyLz.x, enemyLz.y, enemyLz.x2, enemyLz.y2, CAM_THE_COLLECTIVE); camSetArtifacts({ - "COHeavyFac-Arti-b2": { tech: "R-Wpn-Cannon5" }, + "COHeavyFac-Arti-b2": { tech: ["R-Wpn-Cannon5", "R-Wpn-MG-Damage08"] }, "COTankKillerHardpoint": { tech: "R-Wpn-RocketSlow-Damage06" }, "COVtolFactory-b4": { tech: "R-Wpn-Bomb-Damage02" }, }); @@ -132,26 +132,26 @@ function eventStartLevel() "COBase1": { cleanup: "COBase1Cleanup", detectMsg: "C27_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBase2": { cleanup: "COBase2Cleanup", detectMsg: "C27_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBase3": { cleanup: "COBase3Cleanup", detectMsg: "C27_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBase4": { cleanup: "COBase4Cleanup", detectMsg: "C27_BASE4", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -237,12 +237,10 @@ function eventStartLevel() hackAddMessage("C27_OBJECTIVE3", PROX_MSG, CAM_HUMAN_PLAYER, false); hackAddMessage("C27_OBJECTIVE4", PROX_MSG, CAM_HUMAN_PLAYER, false); - if (difficulty >= MEDIUM) + if (difficulty >= HARD) { - addDroid(CAM_THE_COLLECTIVE, 55, 25, "Truck Panther Tracks", "Body6SUPP", "tracked01", "", "", "Spade1Mk1"); - + addDroid(CAM_THE_COLLECTIVE, 55, 25, "Truck Panther Tracks", tBody.tank.panther, tProp.tank.tracks, "", "", tConstruct.truck); camManageTrucks(CAM_THE_COLLECTIVE); - setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(4.5))); } diff --git a/data/base/script/campaign/cam2-7s.js b/data/base/script/campaign/cam2-7s.js index a75d2ab5a6f..e8fde9784d3 100644 --- a/data/base/script/campaign/cam2-7s.js +++ b/data/base/script/campaign/cam2-7s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 100, y: 1} +}; + function eventStartLevel() { - camSetupTransporter(87, 100, 100, 1); - centreView(88, 101); - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camHoursToSeconds(1.5))); camPlayVideos([{video: "MB2_7_MSG", type: CAMP_MSG}, {video: "MB2_7_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_7"); diff --git a/data/base/script/campaign/cam2-8.js b/data/base/script/campaign/cam2-8.js index 30b1772749d..cb9033aefac 100644 --- a/data/base/script/campaign/cam2-8.js +++ b/data/base/script/campaign/cam2-8.js @@ -5,7 +5,7 @@ const mis_collectiveRes = [ "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", "R-Vehicle-Engine06", "R-Vehicle-Metals06", "R-Cyborg-Metals06", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage06", "R-Wpn-Cannon-ROF03", - "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage07", + "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage08", "R-Wpn-MG-ROF03", "R-Wpn-Mortar-Acc02", "R-Wpn-Mortar-Damage06", "R-Wpn-Mortar-ROF03", "R-Wpn-Rocket-Accuracy02", "R-Wpn-Rocket-Damage06", "R-Wpn-Rocket-ROF03", "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-RocketSlow-Damage06", @@ -25,10 +25,10 @@ function vtolAttack() function setupLandGroups() { const hovers = enumArea("NWTankGroup", CAM_THE_COLLECTIVE, false).filter((obj) => ( - obj.type === DROID && obj.propulsion === "hover01" + obj.type === DROID && obj.propulsion === tProp.tank.hover )); const tanks = enumArea("NWTankGroup", CAM_THE_COLLECTIVE, false).filter((obj) => ( - obj.type === DROID && obj.propulsion !== "hover01" + obj.type === DROID && obj.propulsion !== tProp.tank.hover )); camManageGroup(camMakeGroup(hovers), CAM_ORDER_PATROL, { @@ -120,30 +120,30 @@ function eventStartLevel() //New AC Tiger tracked units for Hard and Insane difficulty if (difficulty >= HARD) { - addDroid(CAM_THE_COLLECTIVE, 30, 22, "AC Tiger Tracks", "Body9REC", "tracked01", "", "", "Cannon5VulcanMk1"); - addDroid(CAM_THE_COLLECTIVE, 30, 23, "AC Tiger Tracks", "Body9REC", "tracked01", "", "", "Cannon5VulcanMk1"); - addDroid(CAM_THE_COLLECTIVE, 31, 22, "AC Tiger Tracks", "Body9REC", "tracked01", "", "", "Cannon5VulcanMk1"); - addDroid(CAM_THE_COLLECTIVE, 31, 23, "AC Tiger Tracks", "Body9REC", "tracked01", "", "", "Cannon5VulcanMk1"); + addDroid(CAM_THE_COLLECTIVE, 30, 22, "AC Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.assaultCannon); + addDroid(CAM_THE_COLLECTIVE, 30, 23, "AC Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.assaultCannon); + addDroid(CAM_THE_COLLECTIVE, 31, 22, "AC Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.assaultCannon); + addDroid(CAM_THE_COLLECTIVE, 31, 23, "AC Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.assaultCannon); } camSetEnemyBases({ "COBase1": { cleanup: "COBase1Cleanup", detectMsg: "C28_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBase2": { cleanup: "COBase2Cleanup", detectMsg: "C28_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COBase3": { cleanup: "COBase3Cleanup", detectMsg: "C28_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -152,7 +152,7 @@ function eventStartLevel() assembly: "COCyborgFac-b1Assembly", order: CAM_ORDER_ATTACK, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 27 : 30)), + throttle: camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 30 : 35)), data: { regroup: false, repair: 40, @@ -164,7 +164,7 @@ function eventStartLevel() assembly: "COHeavyFacL-b2Assembly", order: CAM_ORDER_ATTACK, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 50 : 55)), + throttle: camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 70 : 75)), data: { regroup: false, repair: 20, @@ -176,7 +176,7 @@ function eventStartLevel() assembly: "COHeavyFacR-b2Assembly", order: CAM_ORDER_ATTACK, groupSize: 6, - throttle: camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 45 : 50)), + throttle: camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 55 : 60)), data: { regroup: false, repair: 20, @@ -198,8 +198,8 @@ function eventStartLevel() camManageTrucks(CAM_THE_COLLECTIVE); - queue("setupLandGroups", camSecondsToMilliseconds(60)); - queue("vtolAttack", camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 80 : 90))); + queue("setupLandGroups", camSecondsToMilliseconds(90)); + queue("vtolAttack", camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 100 : 110))); queue("enableFactories", camChangeOnDiff(camSecondsToMilliseconds((difficulty <= MEDIUM) ? 135 : 150))); setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(3))); truckDefense(); diff --git a/data/base/script/campaign/cam2-8s.js b/data/base/script/campaign/cam2-8s.js index 49d3a9afacf..0490ac3febd 100644 --- a/data/base/script/campaign/cam2-8s.js +++ b/data/base/script/campaign/cam2-8s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 126, y: 60} +}; + function eventStartLevel() { - camSetupTransporter(87, 100, 126, 60); - centreView(88, 101); - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB2_8_MSG", type: CAMP_MSG}, {video: "MB2_8_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_8"); diff --git a/data/base/script/campaign/cam2-a.js b/data/base/script/campaign/cam2-a.js index 3dbe400232e..bcb29853983 100644 --- a/data/base/script/campaign/cam2-a.js +++ b/data/base/script/campaign/cam2-a.js @@ -111,10 +111,13 @@ function sendPlayerTransporter() } const droids = []; - const bodyList = ["Body12SUP", "Body11ABT"]; - const propulsionList = ["tracked01", "tracked01", "hover01"]; - const weaponList = ["Cannon375mmMk1", "Cannon375mmMk1", "Cannon375mmMk1", "Rocket-LtA-T", "Rocket-LtA-T", "Mortar2Mk1", "Rocket-MRL"]; - const specialList = ["SensorTurret1Mk1", "CommandBrain01"]; + const bodyList = [tBody.tank.mantis, tBody.tank.python]; + const propulsionList = [tProp.tank.tracks, tProp.tank.tracks, tProp.tank.hover]; + const weaponList = [ + tWeap.tank.heavyCannon, tWeap.tank.heavyCannon, tWeap.tank.heavyCannon, + tWeap.tank.lancer, tWeap.tank.lancer, tWeap.tank.bombard, tWeap.tank.miniRocketArray + ]; + const specialList = [tSensor.sensor, tCommand.commander]; const BODY = bodyList[camRand(bodyList.length)]; const PROP = propulsionList[camRand(propulsionList.length)]; @@ -147,10 +150,39 @@ function mapEdgeDroids() camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos("groundUnitPos"), droids, CAM_REINFORCE_GROUND); } +function wave2() +{ + const list = [cTempl.colatv, cTempl.colatv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemoveZone", list, camChangeOnDiff(camMinutesToMilliseconds(4)), "COCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.colcbv, cTempl.colcbv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemoveZone", list, camChangeOnDiff(camMinutesToMilliseconds(4)), "COCommandCenter", ext); +} + function vtolAttack() { - const list = [cTempl.colcbv]; - camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemoveZone", list, camChangeOnDiff(camMinutesToMilliseconds(3)), "COCommandCenter"); + const list = [cTempl.colpbv, cTempl.colpbv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemoveZone", list, camChangeOnDiff(camMinutesToMilliseconds(4)), "COCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } function groupPatrol() @@ -193,7 +225,7 @@ function cam2Setup() { const collectiveRes = [ "R-Wpn-MG1Mk1", "R-Sys-Engineering02", - "R-Defense-WallUpgrade06", "R-Struc-Materials06", + "R-Defense-WallUpgrade04", "R-Struc-Materials04", "R-Vehicle-Engine03", "R-Vehicle-Metals03", "R-Cyborg-Metals03", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage04", "R-Wpn-Cannon-ROF01", "R-Wpn-Flamer-Damage03", "R-Wpn-Flamer-ROF01", @@ -285,7 +317,7 @@ function reallyDownTransporter() removeTimer("sendPlayerTransporter"); } setReinforcementTime(LZ_COMPROMISED_TIME); - playSound("pcv443.ogg"); + playSound(cam_sounds.transport.transportUnderAttack); } function downTransporter() @@ -342,14 +374,14 @@ function eventStartLevel() "CONorthBase": { cleanup: "CONorth", detectMsg: "C2A_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "CONorthWestBase": { cleanup: "CONorthWest", detectMsg: "C2A_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -372,7 +404,7 @@ function eventStartLevel() queue("secondVideo", camSecondsToMilliseconds(12)); queue("groupPatrol", camChangeOnDiff(camMinutesToMilliseconds(1))); - queue("vtolAttack", camChangeOnDiff(camMinutesToMilliseconds(3))); + queue("vtolAttack", camChangeOnDiff(camMinutesToMilliseconds(6))); setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(3))); setTimer("sendCOTransporter", camChangeOnDiff(camMinutesToMilliseconds(4))); setTimer("mapEdgeDroids", camChangeOnDiff(camMinutesToMilliseconds(7))); diff --git a/data/base/script/campaign/cam2-b.js b/data/base/script/campaign/cam2-b.js index 35f3dd906b9..759f245f4c6 100644 --- a/data/base/script/campaign/cam2-b.js +++ b/data/base/script/campaign/cam2-b.js @@ -2,7 +2,7 @@ include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade05", "R-Struc-Materials05", "R-Sys-Engineering02", "R-Vehicle-Engine04", "R-Vehicle-Metals04", "R-Cyborg-Metals04", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage05", "R-Wpn-Cannon-ROF01", "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF01", @@ -82,15 +82,39 @@ function ambushPlayer() }); } +function wave2() +{ + const list = [cTempl.colatv, cTempl.colatv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemove", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.colcbv, cTempl.colcbv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemove", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); +} + function vtolAttack() { - const list = [cTempl.colcbv, cTempl.colatv]; + const list = [cTempl.colpbv, cTempl.colpbv]; const ext = { limit: [4, 4], //paired with list array alternate: true, altIdx: 0 }; camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemove", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } function truckDefense() @@ -109,7 +133,7 @@ function transferPower() { //increase player power level and play sound setPower(playerPower(CAM_HUMAN_PLAYER) + 4000); - playSound("power-transferred.ogg"); + playSound(cam_sounds.powerTransferred); } function eventStartLevel() @@ -128,7 +152,7 @@ function eventStartLevel() camPlayVideos([{video: "MB2_B_MSG", type: CAMP_MSG}, {video: "MB2_B_MSG2", type: MISS_MSG}]); camSetArtifacts({ - "COResearchLab": { tech: "R-Wpn-Flame2" }, + "COResearchLab": { tech: ["R-Wpn-Flame2", "R-Defense-WallUpgrade05"] }, "COHeavyFac-b4": { tech: "R-Wpn-RocketSlow-ROF01" }, "COHeavyFacL-b1": { tech: "R-Wpn-MG-ROF03" }, "COCommandCenter": { tech: "R-Vehicle-Body02" }, //Leopard @@ -144,28 +168,31 @@ function eventStartLevel() } // New HMG Tiger Tracks units in first attack group - addDroid(CAM_THE_COLLECTIVE, 92, 59, "Heavy Machinegun Tiger Tracks", "Body9REC", "tracked01", "", "", "MG3Mk1"); - addDroid(CAM_THE_COLLECTIVE, 96, 59, "Heavy Machinegun Tiger Tracks", "Body9REC", "tracked01", "", "", "MG3Mk1"); - addDroid(CAM_THE_COLLECTIVE, 97, 59, "Heavy Machinegun Tiger Tracks", "Body9REC", "tracked01", "", "", "MG3Mk1"); + if (difficulty >= HARD) + { + addDroid(CAM_THE_COLLECTIVE, 92, 59, "Heavy Machinegun Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.heavyMachinegun); + addDroid(CAM_THE_COLLECTIVE, 96, 59, "Heavy Machinegun Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.heavyMachinegun); + addDroid(CAM_THE_COLLECTIVE, 97, 59, "Heavy Machinegun Tiger Tracks", tBody.tank.tiger, tProp.tank.tracks, "", "", tWeap.tank.heavyMachinegun); + } camSetEnemyBases({ "CONorthBase": { cleanup: "base1Cleanup", detectMsg: "C2B_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COCentralBase": { cleanup: "base2Cleanup", detectMsg: "C2B_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COMiddleBase": { cleanup: "base4Cleanup", detectMsg: "C2B_BASE4", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam2-c.js b/data/base/script/campaign/cam2-c.js index 482766b441d..e5601c76e28 100644 --- a/data/base/script/campaign/cam2-c.js +++ b/data/base/script/campaign/cam2-c.js @@ -1,4 +1,3 @@ - include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); @@ -7,7 +6,7 @@ var civilianPosIndex; //Current location of civilian groups. var shepardGroup; //Enemy group that protects civilians. var lastSoundTime; //Only play the "civilian rescued" sound every so often. const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade05", "R-Struc-Materials05", "R-Sys-Engineering02", "R-Vehicle-Engine04", "R-Vehicle-Metals05", "R-Cyborg-Metals05", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage05", "R-Wpn-Cannon-ROF01", "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage06", @@ -148,7 +147,7 @@ function captureCivilians() for (let i = 0; i < NUM; ++i) { addDroid(CAM_SCAV_7, currPos.x, currPos.y, "Civilian", - "B1BaBaPerson01", "BaBaLegs", "", "", "BabaMG"); + tBody.scav.human, tProp.scav.legs, "", "", tWeap.scav.machinegun); } //Only count civilians that are not in the the transporter base. @@ -205,9 +204,8 @@ function civilianOrders() //Play the "Civilian rescued" sound and throttle it. if (rescued && ((lastSoundTime + camSecondsToMilliseconds(30)) < gameTime)) { - const RESCUE_SND = "pcv612.ogg"; //"Civilian Rescued". lastSoundTime = gameTime; - playSound(RESCUE_SND); + playSound(cam_sounds.rescue.civilianRescued); } } @@ -219,8 +217,7 @@ function eventTransporterLanded(transport) if (civs.length) { - const ESCAPE_SND = "pcv632.ogg"; //"Enemy escaping". - playSound(ESCAPE_SND); + playSound(cam_sounds.enemyEscaping); capturedCivCount += civs.length - 1; for (let i = 0; i < civs.length; ++i) { @@ -311,20 +308,20 @@ function eventStartLevel() "COAirBase": { cleanup: "airBaseCleanup", detectMsg: "C2C_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COCyborgBase": { cleanup: "cyborgBaseCleanup", detectMsg: "C2C_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "COtransportBase": { cleanup: "transportBaseCleanup", detectMsg: "C2C_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam2-d.js b/data/base/script/campaign/cam2-d.js index 6343f64a457..696f391101f 100644 --- a/data/base/script/campaign/cam2-d.js +++ b/data/base/script/campaign/cam2-d.js @@ -3,7 +3,7 @@ include("script/campaign/templates.js"); const MIS_UPLINK_PLAYER = 1; //The satellite uplink player number. const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade05", "R-Struc-Materials05", "R-Sys-Engineering02", "R-Vehicle-Engine04", "R-Vehicle-Metals05", "R-Cyborg-Metals05", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage05", "R-Wpn-Cannon-ROF02", "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage07", @@ -39,18 +39,46 @@ function truckDefense() camQueueBuilding(CAM_THE_COLLECTIVE, list[camRand(list.length)], camMakePos("uplinkPos")); } -//Attacks every 2 minutes until HQ is destroyed. +//Attacks every 3 minutes until HQ is destroyed. +function wave2() +{ + const list = [cTempl.colatv, cTempl.colatv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), "COCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.commorv, cTempl.commorv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), "COCommandCenter", ext); +} + function vtolAttack() { - const list = [cTempl.colatv, cTempl.commorvt]; - camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "COCommandCenter"); + const list = [cTempl.commorvt, cTempl.commorvt]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), "COCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } //The project captured the uplink. function captureUplink() { - const GOODSND = "pcv621.ogg"; //"Objective captured" - playSound(GOODSND); + playSound(cam_sounds.objectiveCaptured); hackRemoveMessage("C2D_OBJ1", PROX_MSG, CAM_HUMAN_PLAYER); } @@ -111,8 +139,8 @@ function eventStartLevel() "COSouthEastBase": { cleanup: "baseCleanup", detectMsg: "C2D_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); diff --git a/data/base/script/campaign/cam2-ds.js b/data/base/script/campaign/cam2-ds.js index 2fc70cd0202..932c79f2a7f 100644 --- a/data/base/script/campaign/cam2-ds.js +++ b/data/base/script/campaign/cam2-ds.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 88, y: 101}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 1, y: 100} +}; + function eventStartLevel() { - camSetupTransporter(87, 100, 1, 100); - centreView(88, 101); - setNoGoArea(86, 99, 88, 101, CAM_HUMAN_PLAYER); - setNoGoArea(49, 83, 51, 85, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camChangeOnDiff(camMinutesToSeconds(75))); camPlayVideos([{video: "MB2_DI_MSG", type: MISS_MSG}, {video: "MB2_DI_MSG2", type: CAMP_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2D"); diff --git a/data/base/script/campaign/cam2-end.js b/data/base/script/campaign/cam2-end.js index 112e86b393e..4fbda8f1c6a 100644 --- a/data/base/script/campaign/cam2-end.js +++ b/data/base/script/campaign/cam2-end.js @@ -6,7 +6,7 @@ const mis_collectiveRes = [ "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", "R-Vehicle-Engine06", "R-Vehicle-Metals06", "R-Cyborg-Metals06", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage06", "R-Wpn-Cannon-ROF03", - "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage07", + "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage08", "R-Wpn-MG-ROF03", "R-Wpn-Mortar-Acc02", "R-Wpn-Mortar-Damage06", "R-Wpn-Mortar-ROF03", "R-Wpn-Rocket-Accuracy02", "R-Wpn-Rocket-Damage06", "R-Wpn-Rocket-ROF03", "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-RocketSlow-Damage06", @@ -15,13 +15,27 @@ const mis_collectiveRes = [ "R-Wpn-Bomb-Damage02", "R-Wpn-AAGun-Damage03", "R-Wpn-AAGun-ROF03", "R-Wpn-AAGun-Accuracy02", "R-Wpn-Howitzer-Accuracy02", "R-Struc-VTOLPad-Upgrade03", ]; -const mis_startPos = {x: 92, y: 99}; +const mis_Labels = { + startPos: {x: 92, y: 99}, + lz: {x: 86, y: 99, x2: 88, y2: 101}, + lz2: {x: 49, y: 83, x2: 51, y2: 85}, + trPlace: {x: 87, y: 100}, + trExit: {x: 0, y: 55}, + northTankAssembly: {x: 95, y: 3}, + southCyborgAssembly: {x: 123, y: 125}, + westTankAssembly: {x: 3, y: 112}, //This was unused. Now part of Hard/Insane playthroughs. + vtolRemovePos: {x: 127, y: 64}, + vtolSpawnPos: {x: 99, y: 1}, + vtolSpawnPos2: {x: 127, y: 65}, + vtolSpawnPos3: {x: 127, y: 28}, + vtolSpawnPos4: {x: 36, y: 1}, + vtolSpawnPos5: {x: 1, y: 28}, +}; //Remove enemy vtols when in the remove zone area. function checkEnemyVtolArea() { - const pos = {x: 127, y: 64}; - const vtols = enumRange(pos.x, pos.y, 2, CAM_THE_COLLECTIVE, false).filter((obj) => (isVTOL(obj))); + const vtols = enumRange(mis_Labels.vtolRemovePos.x, mis_Labels.vtolRemovePos.y, 2, CAM_THE_COLLECTIVE, false).filter((obj) => (isVTOL(obj))); for (let i = 0, l = vtols.length; i < l; ++i) { @@ -95,13 +109,12 @@ function randomTemplates(list, transporterAmount, useWhirlwinds) function vtolAttack() { let vtolPositions = [ - {x: 99, y: 1}, - {x: 127, y: 65}, - {x: 127, y: 28}, - {x: 36, y: 1}, - {x: 1, y: 28}, + mis_Labels.vtolSpawnPos, + mis_Labels.vtolSpawnPos2, + mis_Labels.vtolSpawnPos3, + mis_Labels.vtolSpawnPos4, + mis_Labels.vtolSpawnPos5 ]; - const vtolRemovePos = {x: 127, y: 64}; if (difficulty === INSANE) { @@ -112,20 +125,19 @@ function vtolAttack() cTempl.commorv, cTempl.commorv, cTempl.comhvat, cTempl.commorvt ]; const extras = { - minVTOLs: (difficulty >= HARD) ? 5 : 4, + minVTOLs: 4, maxRandomVTOLs: (difficulty >= HARD) ? 2 : 1 }; - camSetVtolData(CAM_THE_COLLECTIVE, vtolPositions, vtolRemovePos, list, camChangeOnDiff(camSecondsToMilliseconds(30)), undefined, extras); + camSetVtolData(CAM_THE_COLLECTIVE, vtolPositions, mis_Labels.vtolRemovePos, list, camSecondsToMilliseconds(30), undefined, extras); } //SouthEast attackers which are mostly cyborgs. function cyborgAttack() { - const southCyborgAssembly = {x: 123, y: 125}; const list = [cTempl.npcybr, cTempl.cocybag, cTempl.npcybc, cTempl.comhltat, cTempl.cohhpv]; - camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(southCyborgAssembly), randomTemplates(list, false, true), CAM_REINFORCE_GROUND, { + camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(mis_Labels.southCyborgAssembly), randomTemplates(list, false, true), CAM_REINFORCE_GROUND, { data: { regroup: false, count: -1 } }); } @@ -134,7 +146,7 @@ function cyborgAttackRandom() { const list = [cTempl.npcybr, cTempl.cocybag, cTempl.npcybc, cTempl.npcybc, cTempl.comrotm]; //favor cannon cyborg - camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(camGenerateRandomMapEdgeCoordinate(mis_startPos)), randomTemplates(list, false, true).concat(cTempl.comsens), CAM_REINFORCE_GROUND, { + camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(camGenerateRandomMapEdgeCoordinate(mis_Labels.startPos)), randomTemplates(list, false, true).concat(cTempl.comsens), CAM_REINFORCE_GROUND, { data: { regroup: false, count: -1 } }); } @@ -142,29 +154,39 @@ function cyborgAttackRandom() //North road attacker consisting of powerful weaponry. function tankAttack() { - const northTankAssembly = {x: 95, y: 3}; - const list = [cTempl.comhltat, cTempl.cohact, cTempl.cohhpv, cTempl.comagt, cTempl.cohbbt]; + const list = [cTempl.comhltat, cTempl.cohact, cTempl.cohhpv, cTempl.comagt]; + if (getMissionTime() < (60 * 22)) + { + list.push(cTempl.cohbbt); + } - camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(northTankAssembly), randomTemplates(list, false, true), CAM_REINFORCE_GROUND, { + camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(mis_Labels.northTankAssembly), randomTemplates(list, false, true), CAM_REINFORCE_GROUND, { data: { regroup: false, count: -1, }, }); } function tankAttackWest() { - const westTankAssembly = {x: 3, y: 112}; //This was unused. Now part of Hard/Insane playthroughs. - const list = [cTempl.comhltat, cTempl.cohact, cTempl.cohhpv, cTempl.comagt, cTempl.cohbbt]; + const list = [cTempl.comhltat, cTempl.cohact, cTempl.cohhpv, cTempl.comagt]; + if (getMissionTime() < (60 * 22)) + { + list.push(cTempl.cohbbt); + } - camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(westTankAssembly), randomTemplates(list, true, true), CAM_REINFORCE_GROUND, { + camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(mis_Labels.westTankAssembly), randomTemplates(list, true, true), CAM_REINFORCE_GROUND, { data: { regroup: false, count: -1, }, }); } function transporterAttack() { - const droids = [cTempl.cohact, cTempl.comhltat, cTempl.cohbbt, cTempl.cohhpv]; + const droids = [cTempl.cohact, cTempl.comhltat, cTempl.cohhpv]; + if (getMissionTime() < (60 * 22)) + { + droids.push(cTempl.cohbbt); + } - camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(camGenerateRandomMapCoordinate(mis_startPos, 10, 1)), randomTemplates(droids, true, false), + camSendReinforcement(CAM_THE_COLLECTIVE, camMakePos(camGenerateRandomMapCoordinate(mis_Labels.startPos, 10, 1)), randomTemplates(droids, true, false), CAM_REINFORCE_TRANSPORT, { entry: camGenerateRandomMapEdgeCoordinate(), exit: camGenerateRandomMapEdgeCoordinate() @@ -203,19 +225,15 @@ function eventStartLevel() camSetExtraObjectiveMessage(_("Send off as many transporters as you can and bring at least one truck")); } - const lz = {x: 86, y: 99, x2: 88, y2: 101}; - const tCoords = {xStart: 87, yStart: 100, xOut: 0, yOut: 55}; - camSetStandardWinLossConditions(CAM_VICTORY_TIMEOUT, "CAM_3A", { reinforcements: camMinutesToSeconds(7), //Duration the transport "leaves" map. callback: "checkIfLaunched" }); - centreView(mis_startPos.x, mis_startPos.y); - setNoGoArea(lz.x, lz.y, lz.x2, lz.y2, CAM_HUMAN_PLAYER); - camSetupTransporter(tCoords.xStart, tCoords.yStart, tCoords.xOut, tCoords.yOut); - const enemyLz = {x: 49, y: 83, x2: 51, y2: 85}; - setNoGoArea(enemyLz.x, enemyLz.y, enemyLz.x2, enemyLz.y2, CAM_THE_COLLECTIVE); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_THE_COLLECTIVE); setMissionTime(camMinutesToSeconds(30)); camCompleteRequiredResearch(mis_collectiveRes, CAM_THE_COLLECTIVE); @@ -223,16 +241,16 @@ function eventStartLevel() allowWin = false; camPlayVideos([{video: "MB2_DII_MSG", type: CAMP_MSG}, {video: "MB2_DII_MSG2", type: MISS_MSG}]); - queue("vtolAttack", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("vtolAttack", camSecondsToMilliseconds(30)); if (difficulty === INSANE) { setPower(playerPower(CAM_HUMAN_PLAYER) + 12000); - setTimer("transporterAttack", camMinutesToMilliseconds(4)); + setTimer("transporterAttack", camMinutesToMilliseconds(5)); } if (difficulty >= HARD) { - setTimer("tankAttackWest", camChangeOnDiff(camMinutesToMilliseconds(6))); - setTimer("cyborgAttackRandom", camChangeOnDiff(camMinutesToMilliseconds(5))); + setTimer("tankAttackWest", camChangeOnDiff(camMinutesToMilliseconds(7))); + setTimer("cyborgAttackRandom", camChangeOnDiff(camMinutesToMilliseconds(6))); } setTimer("cyborgAttack", camChangeOnDiff(camMinutesToMilliseconds(4))); setTimer("tankAttack", camChangeOnDiff(camMinutesToMilliseconds(3))); diff --git a/data/base/script/campaign/cam3-1.js b/data/base/script/campaign/cam3-1.js index 046eaba9b0a..4d1d5da090d 100644 --- a/data/base/script/campaign/cam3-1.js +++ b/data/base/script/campaign/cam3-1.js @@ -60,11 +60,40 @@ camAreaEvent("hillTriggerZone", function(droid) }); }); +function wave2() +{ + const list = [cTempl.nxlscouv, cTempl.nxlscouv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.nxlneedv, cTempl.nxlneedv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); +} + //Setup Nexus VTOL hit and runners. function vtolAttack() { - const list = [cTempl.nxlscouv, cTempl.nxmtherv]; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter"); + const list = [cTempl.nxmtherv, cTempl.nxmtherv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } //These groups are active immediately. @@ -164,7 +193,7 @@ function setupNextMission() { camSetExtraObjectiveMessage(_("Move all units into the valley")); - camPlayVideos(["labort.ogg", {video: "MB3_1B_MSG", type: CAMP_MSG}, {video: "MB3_1B_MSG2", type: MISS_MSG}]); + camPlayVideos([cam_sounds.missile.launch.missileLaunchAborted, {video: "MB3_1B_MSG", type: CAMP_MSG}, {video: "MB3_1B_MSG2", type: MISS_MSG}]); setScrollLimits(0, 0, 64, 64); //Reveal the whole map. setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); @@ -254,37 +283,37 @@ function eventStartLevel() //Time is in seconds. launchInfo = [ - {sound: "60min.ogg", time: camMinutesToSeconds(60)}, - {sound: "50min.ogg", time: camMinutesToSeconds(50)}, - {sound: "40min.ogg", time: camMinutesToSeconds(40)}, - {sound: "30min.ogg", time: camMinutesToSeconds(30)}, - {sound: "20min.ogg", time: camMinutesToSeconds(20)}, - {sound: "10min.ogg", time: camMinutesToSeconds(10)}, - {sound: "meflp.ogg", time: camMinutesToSeconds(5) + 10}, - {sound: "5min.ogg", time: camMinutesToSeconds(5)}, - {sound: "4min.ogg", time: camMinutesToSeconds(4)}, - {sound: "3min.ogg", time: camMinutesToSeconds(3)}, - {sound: "2min.ogg", time: camMinutesToSeconds(2)}, - {sound: "1min.ogg", time: camMinutesToSeconds(1)}, - {sound: "flseq.ogg", time: 25}, - {sound: "10to1.ogg", time: 11}, - {sound: "mlaunch.ogg", time: 2}, + {sound: cam_sounds.missile.launch.missileLaunchIn60Minutes, time: camMinutesToSeconds(60)}, + {sound: cam_sounds.missile.launch.missileLaunchIn50Minutes, time: camMinutesToSeconds(50)}, + {sound: cam_sounds.missile.launch.missileLaunchIn40Minutes, time: camMinutesToSeconds(40)}, + {sound: cam_sounds.missile.launch.missileLaunchIn30Minutes, time: camMinutesToSeconds(30)}, + {sound: cam_sounds.missile.launch.missileLaunchIn20Minutes, time: camMinutesToSeconds(20)}, + {sound: cam_sounds.missile.launch.missileLaunchIn10Minutes, time: camMinutesToSeconds(10)}, + {sound: cam_sounds.missile.launch.missileEnteringFinalLaunchPeriod, time: camMinutesToSeconds(5) + 10}, + {sound: cam_sounds.missile.launch.missileLaunchIn5Minutes, time: camMinutesToSeconds(5)}, + {sound: cam_sounds.missile.launch.missileLaunchIn4Minutes, time: camMinutesToSeconds(4)}, + {sound: cam_sounds.missile.launch.missileLaunchIn3Minutes, time: camMinutesToSeconds(3)}, + {sound: cam_sounds.missile.launch.missileLaunchIn2Minutes, time: camMinutesToSeconds(2)}, + {sound: cam_sounds.missile.launch.missileLaunchIn1Minute, time: camMinutesToSeconds(1)}, + {sound: cam_sounds.missile.launch.finalMissileLaunchSequenceInitiated, time: 25}, + {sound: cam_sounds.missile.countdown, time: 11}, + {sound: cam_sounds.missile.launch.missileLaunched, time: 2}, ]; detonateInfo = [ - {sound: "mlaunch.ogg", time: camMinutesToSeconds(60) - 9}, - {sound: "det60min.ogg", time: camMinutesToSeconds(60) - 10}, - {sound: "det50min.ogg", time: camMinutesToSeconds(50)}, - {sound: "det40min.ogg", time: camMinutesToSeconds(40)}, - {sound: "det30min.ogg", time: camMinutesToSeconds(30)}, - {sound: "det20min.ogg", time: camMinutesToSeconds(20)}, - {sound: "det10min.ogg", time: camMinutesToSeconds(10)}, - {sound: "det5min.ogg", time: camMinutesToSeconds(5)}, - {sound: "det4min.ogg", time: camMinutesToSeconds(4)}, - {sound: "det3min.ogg", time: camMinutesToSeconds(3)}, - {sound: "det2min.ogg", time: camMinutesToSeconds(2)}, - {sound: "det1min.ogg", time: camMinutesToSeconds(1)}, - {sound: "fdetseq.ogg", time: 20}, - {sound: "10to1.ogg", time: 10}, + {sound: cam_sounds.missile.detonate.warheadActivatedCountdownBegins, time: camMinutesToSeconds(60) - 9}, + {sound: cam_sounds.missile.detonate.detonationIn60Minutes, time: camMinutesToSeconds(60) - 10}, + {sound: cam_sounds.missile.detonate.detonationIn50Minutes, time: camMinutesToSeconds(50)}, + {sound: cam_sounds.missile.detonate.detonationIn40Minutes, time: camMinutesToSeconds(40)}, + {sound: cam_sounds.missile.detonate.detonationIn30Minutes, time: camMinutesToSeconds(30)}, + {sound: cam_sounds.missile.detonate.detonationIn20Minutes, time: camMinutesToSeconds(20)}, + {sound: cam_sounds.missile.detonate.detonationIn10Minutes, time: camMinutesToSeconds(10)}, + {sound: cam_sounds.missile.detonate.detonationIn5Minutes, time: camMinutesToSeconds(5)}, + {sound: cam_sounds.missile.detonate.detonationIn4Minutes, time: camMinutesToSeconds(4)}, + {sound: cam_sounds.missile.detonate.detonationIn3Minutes, time: camMinutesToSeconds(3)}, + {sound: cam_sounds.missile.detonate.detonationIn2Minutes, time: camMinutesToSeconds(2)}, + {sound: cam_sounds.missile.detonate.detonationIn1Minute, time: camMinutesToSeconds(1)}, + {sound: cam_sounds.missile.detonate.finalDetonationSequenceInitiated, time: 20}, + {sound: cam_sounds.missile.countdown, time: 10}, ]; camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_3B", { @@ -305,15 +334,16 @@ function eventStartLevel() camCompleteRequiredResearch(mis_nexusRes, CAM_NEXUS); camSetArtifacts({ - "NXMediumFac": { tech: "R-Wpn-MG-Damage09" }, + "NXMediumFac": { tech: "R-Wpn-Cannon-Damage08" }, + "NXCommandCenter": { tech: "R-Defense-WallUpgrade08" }, }); camSetEnemyBases({ "NX-SWBase": { cleanup: "baseCleanupArea", detectMsg: "CM31_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -322,7 +352,7 @@ function eventStartLevel() assembly: "NXCybFac1Assembly", order: CAM_ORDER_ATTACK, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(30)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(40)), data: { regroup: false, repair: 40, @@ -334,7 +364,7 @@ function eventStartLevel() assembly: "NXCybFac2Assembly", order: CAM_ORDER_ATTACK, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(40)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), data: { regroup: false, repair: 40, diff --git a/data/base/script/campaign/cam3-1s.js b/data/base/script/campaign/cam3-1s.js index a4235bd993f..d90b8cc2287 100644 --- a/data/base/script/campaign/cam3-1s.js +++ b/data/base/script/campaign/cam3-1s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 57, y: 119}, + lz: {x: 55, y: 119, x2: 57, y2: 121}, + lz2: {x: 7, y: 52, x2: 9, y2: 54}, + trPlace: {x: 56, y: 120}, + trExit: {x: 25, y: 87} +}; + function eventStartLevel() { - camSetupTransporter(56, 120, 25, 87); - centreView(57, 119); - setNoGoArea(55, 119, 57, 121, CAM_HUMAN_PLAYER); - setNoGoArea(7, 52, 9, 54, CAM_NEXUS); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_NEXUS); setMissionTime(camChangeOnDiff(camMinutesToSeconds(75))); camPlayVideos([{video: "MB3_1A_MSG", type: CAMP_MSG}, {video: "MB3_1A_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_3_1"); diff --git a/data/base/script/campaign/cam3-2.js b/data/base/script/campaign/cam3-2.js index e3d448a7ac0..ac602f358aa 100644 --- a/data/base/script/campaign/cam3-2.js +++ b/data/base/script/campaign/cam3-2.js @@ -4,7 +4,7 @@ include("script/campaign/transitionTech.js"); const MIS_ALPHA_PLAYER = 1; //Team alpha units belong to player 1. const mis_nexusRes = [ - "R-Sys-Engineering03", "R-Defense-WallUpgrade08", "R-Struc-Materials08", + "R-Sys-Engineering03", "R-Defense-WallUpgrade09", "R-Struc-Materials09", "R-Struc-VTOLPad-Upgrade06", "R-Wpn-Bomb-Damage03", "R-Sys-NEXUSrepair", "R-Vehicle-Prop-Hover02", "R-Vehicle-Prop-VTOL02", "R-Cyborg-Legs02", "R-Wpn-Mortar-Acc03", "R-Wpn-MG-Damage09", "R-Wpn-Mortar-ROF04", @@ -51,7 +51,7 @@ camAreaEvent("rescueTrigger", function(droid) camAbsorbPlayer(MIS_ALPHA_PLAYER, CAM_HUMAN_PLAYER); queue("getAlphaUnitIDs", camSecondsToMilliseconds(0.5)); - setTimer("phantomFactorySE", camChangeOnDiff(camMinutesToMilliseconds(4))); + setTimer("phantomFactorySE", camChangeOnDiff(camMinutesToMilliseconds(5))); camPlayVideos({video: "MB3_2_MSG4", type: MISS_MSG}); }); @@ -59,7 +59,7 @@ camAreaEvent("rescueTrigger", function(droid) //Play videos, donate alpha to the player and setup reinforcements. camAreaEvent("phantomFacTrigger", function(droid) { - camPlayVideos(["pcv456.ogg", {video: "MB3_2_MSG3", type: CAMP_MSG}]); //Warn about VTOLs. + camPlayVideos([cam_sounds.incoming.incomingIntelligenceReport, {video: "MB3_2_MSG3", type: CAMP_MSG}]); //Warn about VTOLs. queue("enableReinforcements", camSecondsToMilliseconds(5)); queue("vtolAttack", camChangeOnDiff(camMinutesToMilliseconds(2))); }); @@ -197,22 +197,46 @@ function setupPatrolGroups() }); } +function wave2() +{ + const list = [cTempl.nxlscouv, cTempl.nxlscouv]; + const ext = { + limit: [3, 3], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXvtolStrikeTower", ext); +} + +function wave3() +{ + const list = [cTempl.nxlneedv, cTempl.nxlneedv]; + const ext = { + limit: [3, 3], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXvtolStrikeTower", ext); +} + //Setup Nexus VTOL hit and runners. function vtolAttack() { - const list = [cTempl.nxlscouv, cTempl.nxmtherv]; + const list = [cTempl.nxmtherv, cTempl.nxmtherv]; const ext = { - limit: [2, 4], //paired with template list + limit: [3, 3], //paired with list array alternate: true, altIdx: 0 }; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), undefined, ext); + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXvtolStrikeTower", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } //Reinforcements not available until team Alpha brief about VTOLS. function enableReinforcements() { - playSound("pcv440.ogg"); // Reinforcements are available. + playSound(cam_sounds.reinforcementsAreAvailable); camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM3A-B", { area: "RTLZ", message: "C32_LZ", @@ -295,6 +319,6 @@ function eventStartLevel() queue("setAlphaExp", camSecondsToMilliseconds(2)); queue("setupPatrolGroups", camChangeOnDiff(camMinutesToMilliseconds(2))); - setTimer("phantomFactoryNE", camChangeOnDiff(camMinutesToMilliseconds(3.5))); - setTimer("phantomFactorySW", camChangeOnDiff(camMinutesToMilliseconds(5.5))); + setTimer("phantomFactoryNE", camChangeOnDiff(camMinutesToMilliseconds(4.5))); + setTimer("phantomFactorySW", camChangeOnDiff(camMinutesToMilliseconds(6.5))); } diff --git a/data/base/script/campaign/cam3-2s.js b/data/base/script/campaign/cam3-2s.js index 6e652493846..c16854c44d1 100644 --- a/data/base/script/campaign/cam3-2s.js +++ b/data/base/script/campaign/cam3-2s.js @@ -1,11 +1,19 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 57, y: 119}, + lz: {x: 55, y: 119, x2: 57, y2: 121}, + lz2: {x: 7, y: 52, x2: 9, y2: 54}, + trPlace: {x: 56, y: 120}, + trExit: {x: 25, y: 87} +}; + function eventStartLevel() { - camSetupTransporter(56, 120, 25, 87); - centreView(57, 119); - setNoGoArea(55, 119, 57, 121, CAM_HUMAN_PLAYER); - setNoGoArea(7, 52, 9, 54, CAM_NEXUS); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_NEXUS); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB3_2_MSG", type: CAMP_MSG}, {video: "MB3_2_MSG2", type: MISS_MSG}]); camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_3_2"); diff --git a/data/base/script/campaign/cam3-4.js b/data/base/script/campaign/cam3-4.js index 79958c1c649..0ef8bb74994 100644 --- a/data/base/script/campaign/cam3-4.js +++ b/data/base/script/campaign/cam3-4.js @@ -2,7 +2,7 @@ include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); const mis_nexusRes = [ - "R-Sys-Engineering03", "R-Defense-WallUpgrade11", "R-Struc-Materials11", + "R-Sys-Engineering03", "R-Defense-WallUpgrade12", "R-Struc-Materials11", "R-Struc-VTOLPad-Upgrade06", "R-Wpn-Bomb-Damage03", "R-Sys-NEXUSrepair", "R-Vehicle-Prop-Hover02", "R-Vehicle-Prop-VTOL02", "R-Cyborg-Legs02", "R-Wpn-Mortar-Acc03", "R-Wpn-MG-Damage09", "R-Wpn-Mortar-ROF04", @@ -114,7 +114,7 @@ function destroyPlayerVtols() function activateNexus() { camSetExtraObjectiveMessage(_("Destroy the Nexus HQ to disable the Nexus Intruder Program")); - playSound(CAM_SYNAPTICS_ACTIVATED_SND); + playSound(cam_sounds.nexus.synapticLinksActivated); camSetNexusState(true); setTimer("nexusHackFeature", camSecondsToMilliseconds((difficulty <= MEDIUM) ? 20 : 10)); } @@ -209,8 +209,8 @@ function truckDefense() { const list = [ "Sys-NEXUSLinkTOW", "P0-AASite-SAM2", "Emplacement-PrisLas", - "NX-Tower-ATMiss", "Sys-NX-CBTower", "Emplacement-HvART-pit", - "Sys-SensoTower02" + "NX-Tower-ATMiss", "Sys-NX-CBTower", "NX-Emp-MultiArtMiss-Pit", + "Sys-NX-SensorTower" ]; for (let i = 0; i < TRUCK_NUM; ++i) @@ -246,6 +246,10 @@ function eventStartLevel() setNoGoArea(enemyLz.x, enemyLz.y, enemyLz.x2, enemyLz.y2, CAM_NEXUS); camCompleteRequiredResearch(mis_nexusRes, CAM_NEXUS); + if (difficulty === INSANE) + { + completeResearch("R-Defense-WallUpgrade13", CAM_NEXUS); + } setupNexusPatrols(); camManageTrucks(CAM_NEXUS); @@ -259,38 +263,38 @@ function eventStartLevel() "NX_SWBase": { cleanup: "SWBaseCleanup", detectMsg: "CM34_OBJ2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NX_NWBase": { cleanup: "NWBaseCleanup", detectMsg: "CM34_BASEA", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NX_NEBase": { cleanup: "NEBaseCleanup", detectMsg: "CM34_BASEB", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NX_WBase": { cleanup: "WBaseCleanup", detectMsg: "CM34_BASEC", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NX_SEBase": { cleanup: "SEBaseCleanup", detectMsg: "CM34_BASED", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NX_VtolBase": { cleanup: "vtolBaseCleanup", detectMsg: "CM34_BASEE", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -433,5 +437,5 @@ function eventStartLevel() hackAddMessage("CM34_OBJ1", PROX_MSG, CAM_HUMAN_PLAYER); queue("enableAllFactories", camChangeOnDiff(camMinutesToMilliseconds(5))); - setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(15))); + setTimer("truckDefense", camMinutesToMilliseconds(20)); } diff --git a/data/base/script/campaign/cam3-4s.js b/data/base/script/campaign/cam3-4s.js index 1a47f5df6e2..b90ba0b0e5a 100644 --- a/data/base/script/campaign/cam3-4s.js +++ b/data/base/script/campaign/cam3-4s.js @@ -1,12 +1,21 @@ include("script/campaign/libcampaign.js"); +const mis_Labels = { + startPos: {x: 50, y: 245}, + lz: {x: 49, y: 244, x2: 51, y2: 246}, + lz2: {x: 7, y: 52, x2: 9, y2: 54}, + trPlace: {x: 50, y: 245}, + trExit: {x: 63, y: 118}, + limits: {x: 0, y: 137, x2: 64, y2: 256} +}; + function eventStartLevel() { - camSetupTransporter(50, 245, 63, 118); - centreView(50, 245); - setNoGoArea(49, 244, 51, 246, CAM_HUMAN_PLAYER); - setNoGoArea(7, 52, 9, 54, CAM_NEXUS); - setScrollLimits(0, 137, 64, 256); + camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); + centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); + setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); + setNoGoArea(mis_Labels.lz2.x, mis_Labels.lz2.y, mis_Labels.lz2.x2, mis_Labels.lz2.y2, CAM_NEXUS); + setScrollLimits(mis_Labels.limits.x, mis_Labels.limits.y, mis_Labels.limits.x2, mis_Labels.limits.y2); setMissionTime(camMinutesToSeconds(30)); setPower(playerPower(CAM_HUMAN_PLAYER) + 50000, CAM_HUMAN_PLAYER); camPlayVideos([{video: "MB3_4_MSG", type: CAMP_MSG}, {video: "MB3_4_MSG2", type: MISS_MSG}]); diff --git a/data/base/script/campaign/cam3-a.js b/data/base/script/campaign/cam3-a.js index dddc31c54f0..09d0d30c10e 100644 --- a/data/base/script/campaign/cam3-a.js +++ b/data/base/script/campaign/cam3-a.js @@ -103,7 +103,7 @@ function truckDefense() return; } - const list = ["Emplacement-Howitzer150", "Emplacement-MdART-pit", "Emplacement-RotHow"]; + const list = ["Emplacement-Howitzer150", "NX-Emp-MedArtMiss-Pit", "Emplacement-RotHow"]; let position; if (truckLocCounter === 0) @@ -137,10 +137,14 @@ function sendPlayerTransporter() } const droids = []; - const bodyList = ["Body9REC", "Body9REC", "Body11ABT", "Body12SUP"]; - const propulsionList = ["hover01", "hover01", "tracked01"]; - const weaponList = ["Cannon5VulcanMk1", "Cannon5VulcanMk1", "Flame2", "Flame2", "MG4ROTARYMk1", "MG4ROTARYMk1", "Cannon4AUTOMk1", "Rocket-HvyA-T"]; - const specialList = ["Spade1Mk1", "Spade1Mk1", "CommandBrain01", "CommandBrain01"]; + const bodyList = [tBody.tank.tiger, tBody.tank.tiger, tBody.tank.python, tBody.tank.mantis]; + const propulsionList = [tProp.tank.hover, tProp.tank.hover, tProp.tank.tracks]; + const weaponList = [ + tWeap.tank.assaultCannon, tWeap.tank.assaultCannon, tWeap.tank.inferno, + tWeap.tank.inferno, tWeap.tank.assaultGun, tWeap.tank.assaultGun, + tWeap.tank.hyperVelocityCannon, tWeap.tank.tankKiller + ]; + const specialList = [tConstruct.truck, tConstruct.truck, tCommand.commander, tCommand.commander]; const BODY = bodyList[camRand(bodyList.length)]; const PROP = propulsionList[camRand(propulsionList.length)]; @@ -150,15 +154,15 @@ function sendPlayerTransporter() let weap = (!transporterIndex && (i < specialList.length)) ? specialList[i] : weaponList[camRand(weaponList.length)]; if (transporterIndex === 1 && i < 4) { - weap = "QuadRotAAGun"; //Bring 4 Whirlwinds on the 2nd transport. + weap = tWeap.tank.whirlwind; //Bring 4 Whirlwinds on the 2nd transport. } - if (BODY === "Body12SUP") + if (BODY === tBody.tank.mantis) { - prop = "tracked01"; //Force Mantis to use Tracks. + prop = tProp.tank.tracks; //Force Mantis to use Tracks. } - if (weap === "Spade1Mk1") + if (weap === tConstruct.truck) { - prop = "hover01"; //Force trucks to use Hover. + prop = tProp.tank.hover; //Force trucks to use Hover. } droids.push({ body: BODY, prop: prop, weap: weap }); } @@ -173,11 +177,40 @@ function sendPlayerTransporter() transporterIndex += 1; } +function wave2() +{ + const list = [cTempl.nxlscouv, cTempl.nxlscouv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.nxlneedv, cTempl.nxlneedv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); +} + //Setup Nexus VTOL hit and runners. function vtolAttack() { - const list = [cTempl.nxlneedv, cTempl.nxlscouv, cTempl.nxmtherv]; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter"); + const list = [cTempl.nxmtherv, cTempl.nxmtherv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } //These groups are active immediately. @@ -220,7 +253,7 @@ function cam3Setup() "R-Sys-Engineering03", "R-Defense-WallUpgrade07", "R-Struc-Materials07", "R-Struc-VTOLPad-Upgrade06", "R-Wpn-Bomb-Damage03", "R-Sys-NEXUSrepair", "R-Vehicle-Prop-Hover02", "R-Vehicle-Prop-VTOL02", "R-Cyborg-Legs02", - "R-Wpn-Mortar-Acc03", "R-Wpn-MG-Damage08", "R-Wpn-Mortar-ROF04", + "R-Wpn-Mortar-Acc03", "R-Wpn-MG-Damage09", "R-Wpn-Mortar-ROF04", "R-Vehicle-Engine07", "R-Vehicle-Metals06", "R-Vehicle-Armor-Heat03", "R-Cyborg-Metals06", "R-Cyborg-Armor-Heat03", "R-Wpn-RocketSlow-ROF04", "R-Wpn-AAGun-Damage05", "R-Wpn-AAGun-ROF04", "R-Wpn-Howitzer-Damage09", @@ -245,7 +278,9 @@ function cam3Setup() } enableResearch("R-Wpn-Howitzer03-Rot", CAM_HUMAN_PLAYER); - enableResearch("R-Wpn-MG-Damage08", CAM_HUMAN_PLAYER); + enableResearch("R-Wpn-MG-Damage09", CAM_HUMAN_PLAYER); + enableResearch("R-Wpn-Flamer-ROF04", CAM_HUMAN_PLAYER); + enableResearch("R-Defense-WallUpgrade07", CAM_HUMAN_PLAYER); } //Normal and lower difficulties has Nexus start off a little bit weaker @@ -289,26 +324,26 @@ function eventStartLevel() "NEXUS-WBase": { cleanup: "westBaseCleanup", detectMsg: "CM3A_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NEXUS-SWBase": { cleanup: "southWestBaseCleanup", detectMsg: "CM3A_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NEXUS-NEBase": { cleanup: "northEastBaseCleanup", detectMsg: "CM3A_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NEXUS-NWBase": { cleanup: "northWestBaseCleanup", detectMsg: "CM3A_BASE4", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -322,7 +357,7 @@ function eventStartLevel() count: -1, }, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(40)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), group: camMakeGroup("NEAttackerGroup"), templates: [cTempl.nxcyrail, cTempl.nxcyscou] }, @@ -335,7 +370,7 @@ function eventStartLevel() count: -1, }, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(30)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(40)), group: camMakeGroup("cybAttackers"), templates: [cTempl.nxcyrail, cTempl.nxcyscou] }, @@ -353,7 +388,7 @@ function eventStartLevel() count: -1, }, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(35)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(60)), group: camMakeGroup("cybValleyPatrol"), templates: [cTempl.nxcyrail, cTempl.nxcyscou] }, @@ -371,7 +406,7 @@ function eventStartLevel() count: -1, }, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(60)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(70)), group: camMakeGroup("hoverPatrolGrp"), templates: [cTempl.nxmscouh] }, @@ -384,17 +419,15 @@ function eventStartLevel() count: -1, }, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(45)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(55)), templates: [cTempl.nxcyrail, cTempl.nxcyscou] }, }); if (difficulty >= HARD) { - addDroid(CAM_NEXUS, 8, 112, "Truck Retribution Hover", "Body7ABT", "hover02", "", "", "Spade1Mk1"); - + addDroid(CAM_NEXUS, 8, 112, "Truck Retribution Hover", tBody.tank.retribution, tProp.tank.hover2, "", "", tConstruct.truck); camManageTrucks(CAM_NEXUS); - setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(4.5))); } diff --git a/data/base/script/campaign/cam3-ab.js b/data/base/script/campaign/cam3-ab.js index 44900722ea4..a58da01e99b 100644 --- a/data/base/script/campaign/cam3-ab.js +++ b/data/base/script/campaign/cam3-ab.js @@ -15,7 +15,6 @@ const mis_nexusRes = [ "R-Wpn-Energy-Damage03", "R-Wpn-Energy-ROF03", "R-Wpn-Energy-Accuracy01", "R-Wpn-AAGun-Accuracy03", "R-Wpn-Howitzer-Accuracy03", ]; -var edgeMapCounter; //how many Nexus reinforcement runs have happened. var hackFailChance; //chance the Nexus Intruder Program will fail var winFlag; @@ -52,11 +51,6 @@ function sendEdgeMapDroids() } let droids = []; - if (!camDef(edgeMapCounter)) - { - edgeMapCounter = 0; - } - for (let i = 0; i < unitCount; ++i) { droids.push(list[camRand(list.length)]); @@ -69,20 +63,42 @@ function sendEdgeMapDroids() data: {regroup: false, count: -1} } ); +} + +function wave2() +{ + const list = [cTempl.nxlscouv, cTempl.nxlscouv]; + const ext = { + limit: [3, 3], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, (difficulty === INSANE) ? undefined : "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3.5)), undefined, ext); +} - edgeMapCounter += 1; +function wave3() +{ + const list = [cTempl.nxlneedv, cTempl.nxlneedv]; + const ext = { + limit: [3, 3], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, (difficulty === INSANE) ? undefined : "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3.5)), undefined, ext); } //Setup Nexus VTOL hit and runners. NOTE: These do not go away in this mission. function vtolAttack() { - const list = [cTempl.nxlscouv, cTempl.nxmtherv, cTempl.nxlscouv, cTempl.nxmheapv]; + const list = [cTempl.nxmtherv, cTempl.nxmheapv]; const ext = { - limit: [2, 4, 2, 4], + limit: [3, 3], //paired with list array alternate: true, altIdx: 0 }; - camSetVtolData(CAM_NEXUS, (difficulty === INSANE) ? undefined : "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), undefined, ext); + camSetVtolData(CAM_NEXUS, (difficulty === INSANE) ? undefined : "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3.5)), undefined, ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } // Order any absorbed trucks to start building defenses near themselves. @@ -180,24 +196,24 @@ function eventObjectTransfer(obj, from) function powerTransfer() { setPower(playerPower(CAM_HUMAN_PLAYER) + 5000); - playSound("power-transferred.ogg"); + playSound(cam_sounds.powerTransferred); } function eventResearched(research, structure, player) { - if (research.name === "R-Sys-Resistance-Upgrade01") + if (research.name === cam_resistance_circuits.first) { - hackFailChance = 55; + hackFailChance = 60; } - else if (research.name === "R-Sys-Resistance-Upgrade02") + else if (research.name === cam_resistance_circuits.second) { - hackFailChance = 70; + hackFailChance = 75; } - else if (research.name === "R-Sys-Resistance-Upgrade03") + else if (research.name === cam_resistance_circuits.third) { - hackFailChance = 85; + hackFailChance = 90; } - else if (research.name === "R-Sys-Resistance-Upgrade04") + else if (research.name === cam_resistance_circuits.fourth) { winFlag = true; hackFailChance = 100; @@ -222,15 +238,14 @@ function hackPlayer() function synapticsSound() { - playSound(CAM_SYNAPTICS_ACTIVATED_SND); + playSound(cam_sounds.nexus.synapticLinksActivated); camHackIntoPlayer(CAM_HUMAN_PLAYER, CAM_NEXUS); } //winFlag is set in eventResearched. function resistanceResearched() { - const MAP_EDGE_COUNT = (difficulty >= MEDIUM) ? 15 : 8; - if (winFlag && edgeMapCounter >= MAP_EDGE_COUNT) + if (winFlag) { return true; } @@ -259,9 +274,9 @@ function eventStartLevel() camCompleteRequiredResearch(mis_nexusRes, CAM_NEXUS); - enableResearch("R-Sys-Resistance-Upgrade01", CAM_HUMAN_PLAYER); + enableResearch(cam_resistance_circuits.first, CAM_HUMAN_PLAYER); winFlag = false; - hackFailChance = (difficulty <= EASY) ? 40 : 30; + hackFailChance = (difficulty <= EASY) ? 45 : 33; queue("vtolAttack", camChangeOnDiff(camMinutesToMilliseconds(2))); @@ -272,5 +287,5 @@ function eventStartLevel() setTimer("truckDefense", camSecondsToMilliseconds(2)); setTimer("hackPlayer", camChangeOnDiff(camSecondsToMilliseconds(8))); setTimer("nexusManufacture", camSecondsToMilliseconds(10)); - setTimer("sendEdgeMapDroids", camChangeOnDiff(camMinutesToMilliseconds(3))); + setTimer("sendEdgeMapDroids", camChangeOnDiff(camMinutesToMilliseconds(4))); } diff --git a/data/base/script/campaign/cam3-ad1.js b/data/base/script/campaign/cam3-ad1.js index 0e43e23a139..0e9bcf3d0df 100644 --- a/data/base/script/campaign/cam3-ad1.js +++ b/data/base/script/campaign/cam3-ad1.js @@ -3,7 +3,7 @@ include("script/campaign/templates.js"); const MIS_SILO_PLAYER = 1; const mis_nexusRes = [ - "R-Sys-Engineering03", "R-Defense-WallUpgrade10", "R-Struc-Materials10", + "R-Sys-Engineering03", "R-Defense-WallUpgrade12", "R-Struc-Materials10", "R-Struc-VTOLPad-Upgrade06", "R-Wpn-Bomb-Damage03", "R-Sys-NEXUSrepair", "R-Vehicle-Prop-Hover02", "R-Vehicle-Prop-VTOL02", "R-Cyborg-Legs02", "R-Wpn-Mortar-Acc03", "R-Wpn-MG-Damage09", "R-Wpn-Mortar-ROF04", @@ -89,7 +89,7 @@ function truckDefense() return; } - const list = ["Emplacement-Howitzer150", "Emplacement-MdART-pit"]; + const list = ["Emplacement-Howitzer150", "NX-Emp-MedArtMiss-Pit"]; let position; if (truckLocCounter === 0) @@ -196,8 +196,7 @@ function laserSatFuzzyStrike(obj) if (camRand(101) < 40) { - const LASSAT_FIRING = "pcv650.ogg"; // LASER SATELLITE FIRING!!! - playSound(LASSAT_FIRING, xCoord, yCoord); + playSound(cam_sounds.laserSatelliteFiring, xCoord, yCoord); } //Missed it so hit close to target. @@ -215,7 +214,7 @@ function laserSatFuzzyStrike(obj) //Donate the silos to the player. Allow capturedSilos victory flag to be true. function allySiloWithPlayer() { - playSound("pcv621.ogg"); //Objective captured + playSound(cam_sounds.objectiveCaptured); hackRemoveMessage("CM3D1_OBJ1", PROX_MSG, CAM_HUMAN_PLAYER); camAbsorbPlayer(MIS_SILO_PLAYER, CAM_HUMAN_PLAYER); capturedSilos = true; @@ -280,7 +279,7 @@ function eventStartLevel() camSetArtifacts({ "NXbase1VtolFacArti": { tech: "R-Wpn-MdArtMissile" }, - "NXcommandCenter": { tech: "R-Wpn-Laser02" }, + "NXcommandCenter": { tech: ["R-Wpn-Laser02", "R-Defense-WallUpgrade11"] }, "NXcyborgFac2Arti": { tech: "R-Wpn-RailGun02" }, }); @@ -288,14 +287,14 @@ function eventStartLevel() "NXMainBase": { cleanup: "mainBaseCleanup", detectMsg: "CM3D1_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NXVtolBase": { cleanup: "NXVtolBaseCleanup", detectMsg: "CM3D1_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -316,7 +315,7 @@ function eventStartLevel() assembly: "NxHeavyAssembly", order: CAM_ORDER_ATTACK, groupSize: 5, - throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(60)), data: { regroup: true, repair: 40, @@ -328,7 +327,7 @@ function eventStartLevel() assembly: "NXcyborgFac1Assembly", order: CAM_ORDER_ATTACK, groupSize: 5, - throttle: camChangeOnDiff(camSecondsToMilliseconds(35)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(45)), data: { regroup: true, repair: 45, @@ -340,7 +339,7 @@ function eventStartLevel() assembly: "NXcyborgFac2Assembly", order: CAM_ORDER_ATTACK, groupSize: 5, - throttle: camChangeOnDiff(camSecondsToMilliseconds(40)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), data: { regroup: true, repair: 50, @@ -352,10 +351,8 @@ function eventStartLevel() if (difficulty >= HARD) { - addDroid(CAM_NEXUS, 15, 234, "Truck Retribution Hover", "Body7ABT", "hover02", "", "", "Spade1Mk1"); - + addDroid(CAM_NEXUS, 15, 234, "Truck Retribution Hover", tBody.tank.retribution, tProp.tank.hover2, "", "", tConstruct.truck); camManageTrucks(CAM_NEXUS); - setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(4.5))); } diff --git a/data/base/script/campaign/cam3-ad2.js b/data/base/script/campaign/cam3-ad2.js index 01601624f14..d7c81fe2aa7 100644 --- a/data/base/script/campaign/cam3-ad2.js +++ b/data/base/script/campaign/cam3-ad2.js @@ -3,7 +3,7 @@ include("script/campaign/templates.js"); const MIS_Y_SCROLL_LIMIT = 137; const mis_nexusRes = [ - "R-Sys-Engineering03", "R-Defense-WallUpgrade10", "R-Struc-Materials10", + "R-Sys-Engineering03", "R-Defense-WallUpgrade12", "R-Struc-Materials10", "R-Struc-VTOLPad-Upgrade06", "R-Wpn-Bomb-Damage03", "R-Sys-NEXUSrepair", "R-Vehicle-Prop-Hover02", "R-Vehicle-Prop-VTOL02", "R-Cyborg-Legs02", "R-Wpn-Mortar-Acc03", "R-Wpn-MG-Damage09", "R-Wpn-Mortar-ROF04", @@ -19,6 +19,12 @@ const mis_nexusRes = [ const mis_vtolPositions = [ "vtolAppearPosW", "vtolAppearPosE", ]; +const mis_researchTargets = { + missileCode1: "R-Comp-MissileCodes01", + missileCode2: "R-Comp-MissileCodes02", + missileCode3: "R-Comp-MissileCodes03", + resistance: "R-Sys-Resistance" +}; var winFlag; var mapLimit; var videoInfo; //holds some info about when to play a video. @@ -58,11 +64,40 @@ function randomTemplates(list) return droids; } -//Chose a random spawn point for the VTOLs. +function wave2() +{ + const list = [cTempl.nxlpulsev, cTempl.nxlpulsev]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, mis_vtolPositions, "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), undefined, ext); +} + +function wave3() +{ + const list = [cTempl.nxlpulsev, cTempl.nxmheapv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, mis_vtolPositions, "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), undefined, ext); +} + +//Setup Nexus VTOL hit and runners. Choose a random spawn point for the VTOLs. function vtolAttack() { - const list = [cTempl.nxmheapv, cTempl.nxlpulsev]; - camSetVtolData(CAM_NEXUS, mis_vtolPositions, "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3))); + const list = [cTempl.nxmheapv, cTempl.nxmtherv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, mis_vtolPositions, "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), undefined, ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } //Chose a random spawn point to send ground reinforcements. @@ -204,8 +239,7 @@ function laserSatFuzzyStrike(obj) { if (camRand(101) < 40) { - const LASSAT_FIRING = "pcv650.ogg"; // LASER SATELLITE FIRING!!! - playSound(LASSAT_FIRING, xCoord, yCoord); + playSound(cam_sounds.laserSatelliteFiring, xCoord, yCoord); } //Missed it so hit close to target @@ -230,11 +264,11 @@ function eventResearched(research, structure, player) { videoInfo[i].played = true; camPlayVideos({video: videoInfo[i].video, type: videoInfo[i].type}); - if (videoInfo[i].res === "R-Sys-Resistance") + if (videoInfo[i].res === mis_researchTargets.resistance) { - enableResearch("R-Comp-MissileCodes01", CAM_HUMAN_PLAYER); + enableResearch(mis_researchTargets.missileCode1, CAM_HUMAN_PLAYER); } - else if (videoInfo[i].res === "R-Comp-MissileCodes03") + else if (videoInfo[i].res === mis_researchTargets.missileCode3) { winFlag = true; } @@ -282,10 +316,10 @@ function eventStartLevel() mapLimit = 137.0; winFlag = false; videoInfo = [ - {played: false, video: "MB3_AD2_MSG3", type: MISS_MSG, res: "R-Sys-Resistance"}, - {played: false, video: "MB3_AD2_MSG4", type: CAMP_MSG, res: "R-Comp-MissileCodes01"}, - {played: false, video: "MB3_AD2_MSG5", type: CAMP_MSG, res: "R-Comp-MissileCodes02"}, - {played: false, video: "MB3_AD2_MSG6", type: CAMP_MSG, res: "R-Comp-MissileCodes03"}, + {played: false, video: "MB3_AD2_MSG3", type: MISS_MSG, res: mis_researchTargets.resistance}, + {played: false, video: "MB3_AD2_MSG4", type: CAMP_MSG, res: mis_researchTargets.missileCode1}, + {played: false, video: "MB3_AD2_MSG5", type: CAMP_MSG, res: mis_researchTargets.missileCode2}, + {played: false, video: "MB3_AD2_MSG6", type: CAMP_MSG, res: mis_researchTargets.missileCode3}, ]; camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM_3_4S", { @@ -304,7 +338,7 @@ function eventStartLevel() centreView(startPos.x, startPos.y); setNoGoArea(lz.x, lz.y, lz.x2, lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camMinutesToSeconds(5)); - enableResearch("R-Sys-Resistance", CAM_HUMAN_PLAYER); + enableResearch(mis_researchTargets.resistance, CAM_HUMAN_PLAYER); camCompleteRequiredResearch(mis_nexusRes, CAM_NEXUS); camPlayVideos({video: "MB3_AD2_MSG", type: MISS_MSG}); diff --git a/data/base/script/campaign/cam3-b.js b/data/base/script/campaign/cam3-b.js index d8a851d2ee8..4562d006975 100644 --- a/data/base/script/campaign/cam3-b.js +++ b/data/base/script/campaign/cam3-b.js @@ -55,17 +55,40 @@ function camEnemyBaseEliminated_NXWestBase() camRemoveEnemyTransporterBlip(); } +function wave2() +{ + const list = [cTempl.nxlscouv, cTempl.nxlscouv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXCommandCenter", ext); +} + +function wave3() +{ + const list = [cTempl.nxlneedv, cTempl.nxlneedv]; + const ext = { + limit: [4, 4], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXCommandCenter", ext); +} + //Setup Nexus VTOL hit and runners. function vtolAttack() { - const list = [cTempl.nxmheapv, cTempl.nxlscouv, cTempl.nxmtherv, cTempl.nxlscouv]; + const list = [cTempl.nxmheapv, cTempl.nxmtherv]; const ext = { - limit: [5, 2, 5, 2], //paired with template list + limit: [4, 4], //paired with list array alternate: true, altIdx: 0 }; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXCommandCenter", ext); + queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); + queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } function enableAllFactories() @@ -153,9 +176,8 @@ function sendNXlandReinforcements() function transferPower() { const AWARD = 5000; - const POWER_TRANSFER_SND = "power-transferred.ogg"; setPower(playerPower(CAM_HUMAN_PLAYER) + AWARD, CAM_HUMAN_PLAYER); - playSound(POWER_TRANSFER_SND); + playSound(cam_sounds.powerTransferred); } function activateNexusGroups() @@ -206,7 +228,7 @@ function truckDefense() return; } - const list = ["Emplacement-Howitzer105", "Emplacement-MdART-pit", "Emplacement-RotHow"]; + const list = ["Emplacement-Howitzer105", "NX-Emp-MedArtMiss-Pit", "Emplacement-RotHow"]; let position; if (truckLocCounter === 0) @@ -237,7 +259,7 @@ function trapSprung() sendNXTransporter(); changePlayerColour(MIS_GAMMA_PLAYER, CAM_NEXUS); // Black painting. - playSound(CAM_SYNAPTICS_ACTIVATED_SND); + playSound(cam_sounds.nexus.synapticLinksActivated); setTimer("sendNXTransporter", camChangeOnDiff(camMinutesToMilliseconds(3))); setTimer("sendNXlandReinforcements", camChangeOnDiff(camMinutesToMilliseconds(4))); @@ -247,7 +269,7 @@ function trapSprung() function setupCapture() { trapActive = true; - playSound("pcv455.ogg"); //Incoming message. + playSound(cam_sounds.incoming.incomingTransmission); setAlliance(MIS_GAMMA_PLAYER, CAM_NEXUS, false); queue("trapSprung", camSecondsToMilliseconds(2)); //call this a few seconds later @@ -304,20 +326,20 @@ function eventStartLevel() "GammaBase": { cleanup: "gammaBaseCleanup", detectMsg: "CM3B_GAMMABASE", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NXEastBase": { cleanup: "NXEastBaseCleanup", detectMsg: "CM3B_BASE4", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NXWestBase": { cleanup: "NXWestBaseCleanup", detectMsg: "CM3B_BASE6", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, } }); @@ -326,7 +348,7 @@ function eventStartLevel() assembly: "gammaFactoryAssembly", order: CAM_ORDER_ATTACK, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(45)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), data: { regroup: false, repair: 45, @@ -352,14 +374,13 @@ function eventStartLevel() //In the event they put all trucks into Gamma 2 and have no completed factories on map... if (enumStruct(CAM_HUMAN_PLAYER, FACTORY).filter((obj) => (obj.status === BUILT)).length === 0 && enumDroid(CAM_HUMAN_PLAYER, DROID_CONSTRUCT).length === 0) { - const failSafeTruck = addDroid(MIS_GAMMA_PLAYER, lz.x, lz.y, "Truck Python Tracks", "Body11ABT", "tracked01", "", "", "Spade1Mk1"); + const failSafeTruck = addDroid(MIS_GAMMA_PLAYER, lz.x, lz.y, "Truck Python Tracks", tBody.tank.python, tProp.tank.tracks, "", "", tConstruct.truck); donateObject(failSafeTruck, CAM_HUMAN_PLAYER); //So the reticules update for the next tick. } if (difficulty >= HARD) { - addDroid(MIS_GAMMA_PLAYER, 28, 5, "Truck Python Tracks", "Body11ABT", "tracked01", "", "", "Spade1Mk1"); - + addDroid(MIS_GAMMA_PLAYER, 28, 5, "Truck Python Tracks", tBody.tank.python, tProp.tank.tracks, "", "", tConstruct.truck); camManageTrucks(MIS_GAMMA_PLAYER); } diff --git a/data/base/script/campaign/cam3-c.js b/data/base/script/campaign/cam3-c.js index b64587e6359..e6281ca57bb 100644 --- a/data/base/script/campaign/cam3-c.js +++ b/data/base/script/campaign/cam3-c.js @@ -79,7 +79,7 @@ function truckDefense() return; } - const list = ["Emplacement-Howitzer150", "Emplacement-MdART-pit"]; + const list = ["Emplacement-Howitzer150", "NX-Emp-MedArtMiss-Pit"]; let position; if (truckLocCounter === 0) @@ -106,8 +106,8 @@ function discoverGammaBase() setMissionTime(camChangeOnDiff(camMinutesToSeconds(90))); setPower(playerPower(CAM_HUMAN_PLAYER) + camChangeOnDiff(10000)); - playSound("power-transferred.ogg"); - playSound("pcv616.ogg"); //Group rescued. + playSound(cam_sounds.powerTransferred); + playSound(cam_sounds.rescue.groupRescued); camAbsorbPlayer(MIS_GAMMA_PLAYER, CAM_HUMAN_PLAYER); //Take everything they got! setAlliance(CAM_NEXUS, MIS_GAMMA_PLAYER, false); @@ -200,27 +200,27 @@ function eventStartLevel() "NXbase1HeavyFacArti": { tech: "R-Vehicle-Body07" }, //retribution "NXcybFacArti": { tech: "R-Wpn-RailGun01" }, "NXvtolFacArti": { tech: "R-Struc-VTOLPad-Upgrade04" }, - "NXcommandCenter": { tech: "R-Wpn-Missile-LtSAM" }, + "NXcommandCenter": { tech: ["R-Wpn-Missile-LtSAM", "R-Defense-WallUpgrade10"] }, }); camSetEnemyBases({ "NXNorthBase": { cleanup: "northBaseCleanup", detectMsg: "CM3C_BASE1", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NXVtolBase": { cleanup: "vtolBaseCleanup", detectMsg: "CM3C_BASE2", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, "NXSouthBase": { cleanup: "southBaseCleanup", detectMsg: "CM3C_BASE3", - detectSnd: "pcv379.ogg", - eliminateSnd: "pcv394.ogg", + detectSnd: cam_sounds.baseDetection.enemyBaseDetected, + eliminateSnd: cam_sounds.baseElimination.enemyBaseEradicated, }, }); @@ -229,7 +229,7 @@ function eventStartLevel() assembly: "NXHeavyAssembly", order: CAM_ORDER_ATTACK, groupSize: 5, - throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(60)), data: { regroup: false, repair: 45, @@ -241,7 +241,7 @@ function eventStartLevel() assembly: "NXsouthCybFacAssembly", order: CAM_ORDER_ATTACK, groupSize: 4, - throttle: camChangeOnDiff(camSecondsToMilliseconds(30)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(45)), data: { regroup: false, repair: 40, @@ -253,7 +253,7 @@ function eventStartLevel() assembly: "NXcybFacArtiAssembly", order: CAM_ORDER_ATTACK, groupSize: 5, - throttle: camChangeOnDiff(camSecondsToMilliseconds(30)), + throttle: camChangeOnDiff(camSecondsToMilliseconds(40)), data: { regroup: false, repair: 40, @@ -277,7 +277,7 @@ function eventStartLevel() if (difficulty >= HARD) { - addDroid(CAM_NEXUS, 31, 185, "Truck Retribution Hover", "Body7ABT", "hover02", "", "", "Spade1Mk1"); + addDroid(CAM_NEXUS, 31, 185, "Truck Retribution Hover", tBody.tank.retribution, tProp.tank.hover2, "", "", tConstruct.truck); camManageTrucks(CAM_NEXUS); } diff --git a/data/base/script/campaign/libcampaign.js b/data/base/script/campaign/libcampaign.js index b448386c372..cadaadf3a8c 100644 --- a/data/base/script/campaign/libcampaign.js +++ b/data/base/script/campaign/libcampaign.js @@ -104,6 +104,26 @@ const __CAM_TICKS_PER_FRAME = 100; const __CAM_AI_POWER = 999999; const __CAM_INCLUDE_PATH = "script/campaign/libcampaign_includes/"; +//Anything stats related +const CAM_ARTIFACT_STAT = "Crate"; +const CAM_GENERIC_TRUCK_STAT = "Spade1Mk1"; +const CAM_GENERIC_LAND_STAT = "wheeled01"; //For propulsionCanReach(). +const CAM_OIL_RESOURCE_STAT = "OilResource"; +const cam_base_structures = { + commandRelay: "A0ComDroidControl", + commandCenter: "A0CommandCentre", + powerGenerator: "A0PowerGenerator", + researchLab: "A0ResearchFacility", + factory: "A0LightFactory", + derrick: "A0ResourceExtractor" +}; +const cam_resistance_circuits = { + first: "R-Sys-Resistance-Upgrade01", + second: "R-Sys-Resistance-Upgrade02", + third: "R-Sys-Resistance-Upgrade03", + fourth: "R-Sys-Resistance-Upgrade04" +}; + //level load codes here for reference. Might be useful for later code. const CAM_GAMMA_OUT = "GAMMA_OUT"; //Fake next level for the final Gamma mission. const __CAM_ALPHA_CAMPAIGN_NUMBER = 1; @@ -125,6 +145,95 @@ const __cam_gammaLevels = [ "CAM3C", "CAM3A-D1", "CAM3A-D2", "CAM_3_4S", "CAM_3_4" ]; +// Holds all the sounds the campaign uses. Try to name things as they are said. +const cam_sounds = { + baseDetection: { + scavengerOutpostDetected: "pcv375.ogg", + scavengerBaseDetected: "pcv374.ogg", + enemyBaseDetected: "pcv379.ogg", + }, + baseElimination: { + scavengerOutpostEradicated: "pcv391.ogg", + scavengerBaseEradicated: "pcv392.ogg", + enemyBaseEradicated: "pcv394.ogg", + }, + lz: { + returnToLZ: "pcv427.ogg", + LZCompromised: "pcv445.ogg", + LZClear: "lz-clear.ogg", + }, + transport: { + transportUnderAttack: "pcv443.ogg", + enemyTransportDetected: "pcv381.ogg", + incomingEnemyTransport: "pcv395.ogg", + }, + incoming: { + incomingIntelligenceReport: "pcv456.ogg", + incomingTransmission: "pcv455.ogg", + }, + rescue: { + unitsRescued: "pcv615.ogg", + groupRescued: "pcv616.ogg", + civilianRescued: "pcv612.ogg", + }, + nexus: { + defensesAbsorbed: "defabsrd.ogg", + defensesNeutralized: "defnut.ogg", + laugh1: "laugh1.ogg", + laugh2: "laugh2.ogg", + laugh3: "laugh3.ogg", + productionCompleted: "pordcomp.ogg", + researchAbsorbed: "resabsrd.ogg", + structureAbsorbed: "strutabs.ogg", + structureNeutralized: "strutnut.ogg", + synapticLinksActivated: "synplnk.ogg", + unitAbsorbed: "untabsrd.ogg", + unitNeutralized: "untnut.ogg", + }, + missile: { + launch: { + missileLaunchAborted: "labort.ogg", + missileLaunched: "mlaunch.ogg", + finalMissileLaunchSequenceInitiated: "flseq.ogg", + missileEnteringFinalLaunchPeriod: "meflp.ogg", + missileLaunchIn60Minutes: "60min.ogg", + missileLaunchIn50Minutes: "50min.ogg", + missileLaunchIn40Minutes: "40min.ogg", + missileLaunchIn30Minutes: "30min.ogg", + missileLaunchIn20Minutes: "20min.ogg", + missileLaunchIn10Minutes: "10min.ogg", + missileLaunchIn5Minutes: "5min.ogg", + missileLaunchIn4Minutes: "4min.ogg", + missileLaunchIn3Minutes: "3min.ogg", + missileLaunchIn2Minutes: "2min.ogg", + missileLaunchIn1Minute: "1min.ogg", + }, + detonate: { + warheadActivatedCountdownBegins: "wactivat.ogg", + finalDetonationSequenceInitiated: "fdetseq.ogg", + detonationIn60Minutes: "det60min.ogg", + detonationIn50Minutes: "det50min.ogg", + detonationIn40Minutes: "det40min.ogg", + detonationIn30Minutes: "det30min.ogg", + detonationIn20Minutes: "det20min.ogg", + detonationIn10Minutes: "det10min.ogg", + detonationIn5Minutes: "det5min.ogg", + detonationIn4Minutes: "det4min.ogg", + detonationIn3Minutes: "det3min.ogg", + detonationIn2Minutes: "det2min.ogg", + detonationIn1Minute: "det1min.ogg", + }, + countdown: "10to1.ogg", + }, + reinforcementsAreAvailable: "pcv440.ogg", + objectiveCaptured: "pcv621.ogg", + enemyEscaping: "pcv632.ogg", + powerTransferred: "power-transferred.ogg", + laserSatelliteFiring: "pcv650.ogg", + artifactRecovered: "pcv352.ogg", + soundIdentifier: ".ogg", //Used by video.js to check for sound before a video. +}; + //artifact var __camArtifacts; var __camNumArtifacts; @@ -159,18 +268,6 @@ var __camCalledOnce = {}; var __camExpLevel; //nexus -const CAM_DEFENSE_ABSORBED_SND = "defabsrd.ogg"; -const CAM_DEFENSE_NEUTRALIZE_SND = "defnut.ogg"; -const CAM_LAUGH1_SND = "laugh1.ogg"; -const CAM_LAUGH2_SND = "laugh2.ogg"; -const CAM_LAUGH3_SND = "laugh3.ogg"; -const CAM_PRODUCTION_COMPLETE_SND = "pordcomp.ogg"; -const CAM_RES_ABSORBED_SND = "resabsrd.ogg"; -const CAM_STRUCTURE_ABSORBED_SND = "strutabs.ogg"; -const CAM_STRUCTURE_NEUTRALIZE_SND = "strutnut.ogg"; -const CAM_SYNAPTICS_ACTIVATED_SND = "synplnk.ogg"; -const CAM_UNIT_ABSORBED_SND = "untabsrd.ogg"; -const CAM_UNIT_NEUTRALIZE_SND = "untnut.ogg"; var __camLastNexusAttack; var __camNexusActivated; @@ -179,6 +276,12 @@ var __camFactoryInfo; var __camFactoryQueue; var __camPropulsionTypeLimit; +//research +const __CAM_AI_INSTANT_PRODUCTION_RESEARCH = "R-Struc-Factory-Upgrade-AI"; +const __cam_nexusTech = [ + "R-Sys-NEXUSrepair" +]; + //tactics const CAM_ORDER_ATTACK = 0; const CAM_ORDER_DEFEND = 1; @@ -200,6 +303,12 @@ const CAM_SECONDS_IN_MINUTE = 60; const CAM_MINUTES_IN_HOUR = 60; //transport +const cam_trComps = { + name: "Transport", + body: "TransporterBody", + propulsion: "V-Tol", + weapon: "MG3-VTOL" +}; var __camNumTransporterExits; var __camPlayerTransports; var __camIncomingTransports; diff --git a/data/base/script/campaign/libcampaign_includes/artifact.js b/data/base/script/campaign/libcampaign_includes/artifact.js index b6a642facfc..9a07bcfcb79 100644 --- a/data/base/script/campaign/libcampaign_includes/artifact.js +++ b/data/base/script/campaign/libcampaign_includes/artifact.js @@ -38,7 +38,7 @@ function camSetArtifacts(artifacts) else { // received position or area, place immediately - const acrate = addFeature("Crate", pos.x, pos.y); + const acrate = addFeature(CAM_ARTIFACT_STAT, pos.x, pos.y); addLabel(acrate, __camGetArtifactLabel(alabel)); ai.placed = true; } @@ -130,7 +130,7 @@ function __camCheckPlaceArtifact(obj) { camTrace("Placing", ai.tech); } - const acrate = addFeature("Crate", obj.x, obj.y); + const acrate = addFeature(CAM_ARTIFACT_STAT, obj.x, obj.y); addLabel(acrate, __camGetArtifactLabel(__ALABEL)); ai.placed = true; } @@ -152,7 +152,7 @@ function __camPickupArtifact(artifact) } camTrace("Picked up", ai.tech); - playSound("pcv352.ogg", artifact.x, artifact.y, artifact.z); + playSound(cam_sounds.artifactRecovered, artifact.x, artifact.y, artifact.z); // artifacts are not self-removing... camSafeRemoveObject(artifact); if (ai.tech instanceof Array) diff --git a/data/base/script/campaign/libcampaign_includes/events.js b/data/base/script/campaign/libcampaign_includes/events.js index 9285c7febb2..583ab9da79c 100644 --- a/data/base/script/campaign/libcampaign_includes/events.js +++ b/data/base/script/campaign/libcampaign_includes/events.js @@ -166,7 +166,7 @@ function cam_eventDroidBuilt(droid, structure) if (camGetNexusState() && droid.player === CAM_NEXUS && __camNextLevel === "CAM3C" && camRand(100) < 7) { // Occasionally hint that NEXUS is producing units on Gamma 5. - playSound(CAM_PRODUCTION_COMPLETE_SND); + playSound(cam_sounds.nexus.productionCompleted); } if (!camDef(__camFactoryInfo)) { @@ -228,8 +228,7 @@ function cam_eventTransporterExit(transport) __camVictoryData.reinforcements > -1) || __camWinLossCallback === CAM_VICTORY_STANDARD)) { - const __REINFORCEMENTS_AVAILABLE_SOUND = "pcv440.ogg"; - playSound(__REINFORCEMENTS_AVAILABLE_SOUND); + playSound(cam_sounds.reinforcementsAreAvailable); //Show the transporter reinforcement timer when it leaves for the first time. if (__camWinLossCallback === CAM_VICTORY_OFFWORLD) { @@ -396,20 +395,20 @@ function cam_eventObjectTransfer(obj, from) { if (obj.stattype === DEFENSE) { - snd = CAM_DEFENSE_ABSORBED_SND; + snd = cam_sounds.nexus.defensesAbsorbed; } else if (obj.stattype === RESEARCH_LAB) { - snd = CAM_RES_ABSORBED_SND; + snd = cam_sounds.nexus.researchAbsorbed; } else { - snd = CAM_STRUCTURE_ABSORBED_SND; + snd = cam_sounds.nexus.structureAbsorbed; } } else if (obj.type === DROID) { - snd = CAM_UNIT_ABSORBED_SND; + snd = cam_sounds.nexus.unitAbsorbed; } if (camDef(snd)) diff --git a/data/base/script/campaign/libcampaign_includes/misc.js b/data/base/script/campaign/libcampaign_includes/misc.js index 28e6d7d1116..fda4a43cf8f 100644 --- a/data/base/script/campaign/libcampaign_includes/misc.js +++ b/data/base/script/campaign/libcampaign_includes/misc.js @@ -455,7 +455,7 @@ function camGenerateRandomMapEdgeCoordinate(reachPosition) } loc = location; - } while (camDef(reachPosition) && reachPosition && !propulsionCanReach("wheeled01", reachPosition.x, reachPosition.y, loc.x, loc.y)); + } while (camDef(reachPosition) && reachPosition && !propulsionCanReach(CAM_GENERIC_LAND_STAT, reachPosition.x, reachPosition.y, loc.x, loc.y)); return loc; } @@ -506,7 +506,7 @@ function camGenerateRandomMapCoordinate(reachPosition, distFromReach, scanObject pos = randomPos; } while (camDef(reachPosition) && reachPosition && - !propulsionCanReach("wheeled01", reachPosition.x, reachPosition.y, pos.x, pos.y) && + !propulsionCanReach(CAM_GENERIC_LAND_STAT, reachPosition.x, reachPosition.y, pos.x, pos.y) && (camDist(pos, reachPosition) < distFromReach) && (enumRange(pos.x, pos.y, scanObjectRadius, ALL_PLAYERS, false).length > 0)); diff --git a/data/base/script/campaign/libcampaign_includes/nexus.js b/data/base/script/campaign/libcampaign_includes/nexus.js index d86e97a6b24..714360ccf5f 100644 --- a/data/base/script/campaign/libcampaign_includes/nexus.js +++ b/data/base/script/campaign/libcampaign_includes/nexus.js @@ -14,7 +14,7 @@ function camNexusLaugh() const __LAUGH_CHANCE = 45; if (camRand(100) < __LAUGH_CHANCE) { - const laughs = [CAM_LAUGH1_SND, CAM_LAUGH2_SND, CAM_LAUGH3_SND]; + const laughs = [cam_sounds.nexus.laugh1, cam_sounds.nexus.laugh2, cam_sounds.nexus.laugh3]; playSound(laughs[camRand(laughs.length)]); } } @@ -126,16 +126,16 @@ function camHackIntoPlayer(player, to) { if (target.stattype === DEFENSE) { - sound = CAM_DEFENSE_NEUTRALIZE_SND; + sound = cam_sounds.nexus.defensesNeutralized; } else { - sound = CAM_STRUCTURE_NEUTRALIZE_SND; + sound = cam_sounds.nexus.structureNeutralized; } } else if (target.type === DROID) { - sound = CAM_UNIT_NEUTRALIZE_SND; + sound = cam_sounds.nexus.unitNeutralized; } if (camDef(sound)) @@ -188,7 +188,7 @@ function __camChooseNexusTarget(player) return enumStruct(player, HQ); } - const __TARGET_UNIT_CHANCE = (getResearch("R-Sys-Resistance-Upgrade01").done) ? 40 : 20; + const __TARGET_UNIT_CHANCE = (getResearch(cam_resistance_circuits.first).done) ? 40 : 20; let objects = []; if (camRand(100) < __TARGET_UNIT_CHANCE) @@ -214,11 +214,11 @@ function __camChooseNexusTarget(player) { return true; //Final mission has a static fail chance to hack everything. } - else if (getResearch("R-Sys-Resistance-Upgrade04").done) + else if (getResearch(cam_resistance_circuits.fourth).done) { return false; //Everything is safe } - else if (getResearch("R-Sys-Resistance-Upgrade03").done) + else if (getResearch(cam_resistance_circuits.third).done) { if (d.droidType === DROID_CONSTRUCT && camRand(100) < 66) { @@ -226,7 +226,7 @@ function __camChooseNexusTarget(player) } return d.experience < exp.regular; } - else if (getResearch("R-Sys-Resistance-Upgrade02").done) + else if (getResearch(cam_resistance_circuits.second).done) { if (d.droidType === DROID_CONSTRUCT && camRand(100) < 50) { @@ -234,7 +234,7 @@ function __camChooseNexusTarget(player) } return d.experience < exp.veteran; } - else if (getResearch("R-Sys-Resistance-Upgrade01").done) + else if (getResearch(cam_resistance_circuits.first).done) { if (d.droidType === DROID_CONSTRUCT && camRand(100) < 20) { @@ -268,7 +268,7 @@ function __camChooseNexusTarget(player) objects = objects.filter((s) => ( //cam3-ab is way too annoying if Nexus can still take factories after the second resistance upgrade. - !(getResearch("R-Sys-Resistance-Upgrade02").done && + !(getResearch(cam_resistance_circuits.second).done && (s.stattype === FACTORY || s.stattype === CYBORG_FACTORY || s.stattype === VTOL_FACTORY)) )); } diff --git a/data/base/script/campaign/libcampaign_includes/production.js b/data/base/script/campaign/libcampaign_includes/production.js index 2eaa8965d6d..aebd840b1d1 100644 --- a/data/base/script/campaign/libcampaign_includes/production.js +++ b/data/base/script/campaign/libcampaign_includes/production.js @@ -346,7 +346,7 @@ function __camBuildDroid(template, structure) } //if not a normal factory and the template is a constructor then keep it in the //queue until a factory can deal with it. - if (template.weap === "Spade1Mk1" && structure.stattype !== FACTORY) + if (template.weap === CAM_GENERIC_TRUCK_STAT && structure.stattype !== FACTORY) { return false; } diff --git a/data/base/script/campaign/libcampaign_includes/research.js b/data/base/script/campaign/libcampaign_includes/research.js index 407efe289e9..ce8c53bb7c2 100644 --- a/data/base/script/campaign/libcampaign_includes/research.js +++ b/data/base/script/campaign/libcampaign_includes/research.js @@ -42,7 +42,7 @@ function camCompleteRequiredResearch(researchIds, playerId) if (reqRes.length === 0) { //HACK: autorepair like upgrades don't work after mission transition. - if (__RESEARCH_ID === "R-Sys-NEXUSrepair") + if (__cam_nexusTech.indexOf(__RESEARCH_ID) !== -1) { completeResearch(__RESEARCH_ID, playerId, true); } @@ -70,7 +70,7 @@ function __camGrantSpecialResearch() if (!allianceExistsBetween(CAM_HUMAN_PLAYER, i) && (countDroid(DROID_ANY, i) > 0 || enumStruct(i).length > 0)) { //Boost AI production to produce all droids within a factory throttle - completeResearch("R-Struc-Factory-Upgrade-AI", i); + completeResearch(__CAM_AI_INSTANT_PRODUCTION_RESEARCH, i); } } } diff --git a/data/base/script/campaign/libcampaign_includes/transport.js b/data/base/script/campaign/libcampaign_includes/transport.js index 50611e1e93d..1ac71808421 100644 --- a/data/base/script/campaign/libcampaign_includes/transport.js +++ b/data/base/script/campaign/libcampaign_includes/transport.js @@ -39,7 +39,7 @@ function camIsTransporter(gameObject) //;; function camSetupTransporter(placeX, placeY, exitX, exitY) { - addDroid(CAM_HUMAN_PLAYER, placeX, placeY, "Transport", "TransporterBody", "V-Tol", "", "", "MG3-VTOL"); + addDroid(CAM_HUMAN_PLAYER, placeX, placeY, cam_trComps.name, cam_trComps.body, cam_trComps.propulsion, "", "", cam_trComps.weapon); setTransporterExit(exitX, exitY, CAM_HUMAN_PLAYER); } @@ -86,10 +86,10 @@ function __camDispatchTransporterUnsafe() { camTrace("Creating a transporter for player", __PLAYER); __camPlayerTransports[__PLAYER] = addDroid(__PLAYER, -1, -1, - "Transporter", - "TransporterBody", - "V-Tol", "", "", - "MG3-VTOL"); + cam_trComps.name, + cam_trComps.body, + cam_trComps.propulsion, "", "", + cam_trComps.weapon); } const transporter = __camPlayerTransports[__PLAYER]; const droids = []; @@ -121,7 +121,7 @@ function __camDispatchTransporterUnsafe() if (__PLAYER !== CAM_HUMAN_PLAYER) { - playSound("pcv381.ogg"); //Enemy transport detected. + playSound(cam_sounds.transport.enemyTransportDetected); } setTransporterExit(data.exit.x, data.exit.y, __PLAYER); @@ -156,7 +156,7 @@ function __camLandTransporter(player, pos) __camTransporterMessage = undefined; } camTrace("Landing transport for player", player); - playSound("pcv395.ogg", pos.x, pos.y, 0); //Incoming enemy transport. + playSound(cam_sounds.transport.incomingEnemyTransport, pos.x, pos.y, 0); camManageGroup(camMakeGroup(ti.droids), ti.order, ti.data); if (player !== CAM_HUMAN_PLAYER) { diff --git a/data/base/script/campaign/libcampaign_includes/truck.js b/data/base/script/campaign/libcampaign_includes/truck.js index 1cdb560b4a8..c0650a80c00 100644 --- a/data/base/script/campaign/libcampaign_includes/truck.js +++ b/data/base/script/campaign/libcampaign_includes/truck.js @@ -134,7 +134,7 @@ function __camTruckTick() } // Then, capture free oils. - const oils = enumFeature(ALL_PLAYERS, "OilResource"); + const oils = enumFeature(ALL_PLAYERS, CAM_OIL_RESOURCE_STAT); if (oils.length === 0) { continue; @@ -143,8 +143,8 @@ function __camTruckTick() truck = __camGetClosestTruck(__PLAYER, oil, freeTrucks); if (camDef(truck) && __PLAYER !== CAM_NEXUS) { - enableStructure("A0ResourceExtractor", __PLAYER); - orderDroidBuild(truck, DORDER_BUILD, "A0ResourceExtractor", oil.x, oil.y); + enableStructure(cam_base_structures.derrick, __PLAYER); + orderDroidBuild(truck, DORDER_BUILD, cam_base_structures.derrick, oil.x, oil.y); continue; } } @@ -161,7 +161,7 @@ function __camCheckDeadTruck(obj) camQueueDroidProduction(obj.player, { body: obj.body, prop: obj.propulsion, - weap: "Spade1Mk1" + weap: CAM_GENERIC_TRUCK_STAT }); } } diff --git a/data/base/script/campaign/libcampaign_includes/victory.js b/data/base/script/campaign/libcampaign_includes/victory.js index 92dc60f1c00..677ed0f6a8f 100644 --- a/data/base/script/campaign/libcampaign_includes/victory.js +++ b/data/base/script/campaign/libcampaign_includes/victory.js @@ -14,32 +14,28 @@ function camNextLevel(nextLevel) { if (__camNeedBonusTime) { - let bonusTime = getMissionTime(); - if (difficulty <= MEDIUM) - { - bonusTime = Math.floor(bonusTime * 0.75); - } - if (bonusTime > 0) + const __POWER_TIME_REMAINING = getMissionTime(); + if (__POWER_TIME_REMAINING > 0) { let bonus = 110; if (difficulty === HARD) { - bonus = 105; + bonus = 90; //Small bonus compared to the regular Hard extraction value. } else if (difficulty === INSANE) { - bonus = 100; + bonus = 70; //Same value for oil extraction. } - camTrace("Bonus time", bonusTime); + camTrace("Bonus time", __POWER_TIME_REMAINING); setPowerModifier(bonus); // Bonus percentage for completing fast - extraPowerTime(bonusTime); + extraPowerTime(__POWER_TIME_REMAINING); setPowerModifier(100); } } camBreakAlliances(); //Set these limits again for the home map before exiting this mission - setStructureLimits("A0CommandCentre", 1, CAM_HUMAN_PLAYER); - setStructureLimits("A0ComDroidControl", 1, CAM_HUMAN_PLAYER); + setStructureLimits(cam_base_structures.commandCenter, 1, CAM_HUMAN_PLAYER); + setStructureLimits(cam_base_structures.commandRelay, 1, CAM_HUMAN_PLAYER); loadLevel(nextLevel); } @@ -443,7 +439,7 @@ function __camVictoryOffworld() if (__camRTLZTicker % __REMIND_RETURN === 0) { const pos = camMakePos(lz); - playSound("pcv427.ogg", pos.x, pos.y, 0); + playSound(cam_sounds.lz.returnToLZ, pos.x, pos.y, 0); console(_("Return to LZ")); } ++__camRTLZTicker; @@ -465,7 +461,7 @@ function __camVictoryOffworld() if (__camLZCompromisedTicker % __REMIND_COMPROMISED === 1) { const pos = camMakePos(lz); - playSound("pcv445.ogg", pos.x, pos.y, 0); + playSound(cam_sounds.lz.LZCompromised, pos.x, pos.y, 0); } ++__camLZCompromisedTicker; if (__camRTLZTicker === 0) @@ -477,7 +473,7 @@ function __camVictoryOffworld() { camTrace("LZ clear"); const pos = camMakePos(lz); - playSound("lz-clear.ogg", pos.x, pos.y, 0); + playSound(cam_sounds.lz.LZClear, pos.x, pos.y, 0); setReinforcementTime(__camVictoryData.reinforcements); __camLZCompromisedTicker = 0; if (__camRTLZTicker === 0) diff --git a/data/base/script/campaign/libcampaign_includes/video.js b/data/base/script/campaign/libcampaign_includes/video.js index 17775275690..082711e850e 100644 --- a/data/base/script/campaign/libcampaign_includes/video.js +++ b/data/base/script/campaign/libcampaign_includes/video.js @@ -61,11 +61,10 @@ function __camEnqueueVideos() return; //Nothing to play } - const __SOUND_IDENTIFER = ".ogg"; const what = __camVideoSequences[0]; // Check if this is a sound to play before some sequence. - if (typeof what === "string" && what.indexOf(__SOUND_IDENTIFER) !== -1) + if (typeof what === "string" && what.indexOf(cam_sounds.soundIdentifier) !== -1) { playSound(what); queue("__camEnqueueVideos", camSecondsToMilliseconds(3.2)); //more than enough for most sounds. diff --git a/data/base/script/campaign/templates.js b/data/base/script/campaign/templates.js index 303846116f9..9ee60ab04c1 100644 --- a/data/base/script/campaign/templates.js +++ b/data/base/script/campaign/templates.js @@ -1,165 +1,384 @@ -var cTempl = { + +const tBody = { + scav: { + //Human + human: "B1BaBaPerson01", + //Scavenger vehicle + trike: "B4body-sml-trike01", + buggy: "B3body-sml-buggy01", + jeep: "B2JeepBody", + rocketJeep: "B2RKJeepBody", + rocketBuggy: "B3bodyRKbuggy01", + bus: "BusBody", + fireTruck: "FireBody", + }, + tank: { + //Light + viper: "Body1REC", + bug: "Body4ABT", + leopard: "Body2SUP", + retaliation: "Body3MBT", + //Medium + cobra: "Body5REC", + scorpion: "Body8MBT", + panther: "Body6SUPP", + retribution: "Body7ABT", + //Heavy + python: "Body11ABT", + mantis: "Body12SUP", + tiger: "Body9REC", + vengeance: "Body10MBT", + }, + cyborg: { + //Light cyborg + lightBody: "CyborgLightBody", + //Nexus light cyborg + nexusRailBody: "CybNXRail1Jmp", + nexusScourgeBody: "CybNXMissJmp", + nexusLaserBody: "CybNXPulseLasJmp", + } +}; +const tProp = { + scav: { + //Scavenger Legs + legs: "BaBaLegs", + //Scavenger Vehicle + vehicle: "BaBaProp", + }, + tank: { + //Wheels + wheels: "wheeled01", + wheels2: "wheeled02", + wheels3: "wheeled03", + //HalfTrack + halfTracks: "HalfTrack", + halfTracks2: "HalfTrack02", + halfTracks3: "HalfTrack03", + //Tracks + tracks: "tracked01", + tracks2: "tracked02", + tracks3: "tracked03", + //Hover + hover: "hover01", + hover2: "hover02", + hover3: "hover03", + }, + air: { + //VTOL + vtol: "V-Tol", + vtol2: "V-Tol02", + vtol3: "V-Tol03", + }, + cyborg: { + //Cyborg Legs + legs: "CyborgLegs", + legs2: "CyborgLegs02", + legs3: "CyborgLegs03", + } +}; +const tWeap = { + scav: { + //MG + machinegun: "BabaMG", + twinMachinegun: "BabaTwinMG", + heavyMachinegun: "BabaHeavyMG", + trikeMachinegun: "BabaTrikeMG", + trikeTwinMachinegun: "BabaTrikeTwinMG", + trikeHeavyMachinegun: "BabaTrikeHeavyMG", + buggyMachinegun: "BabaBuggyMG", + buggyTwinMachinegun: "BabaBuggyTwinMG", + buggyHeavyMachinegun: "BabaBuggyHeavyMG", + jeepMachinegun: "BabaJeepMG", + jeepTwinMachinegun: "BabaJeepTwinMG", + jeepHeavyMachinegun: "BabaJeepHeavyMG", + //cannon + busCannon: "BabaBusCannon", + //rocket + miniRocketPod: "BabaRocket", + //artillery + miniRocketArray: "BabaRocket8", + }, + tank: { + //MG + machinegun: "MG1Mk1", + twinMachinegun: "MG2Mk1", + heavyMachinegun: "MG3Mk1", + assaultGun: "MG4ROTARYMk1", + //Flamer + flamer: "Flame1Mk1", + inferno: "Flame2", + //Cannon + lightCannon: "Cannon1Mk1", + mediumCannon: "Cannon2A-TMk1", + heavyCannon: "Cannon375mmMk1", + hyperVelocityCannon: "Cannon4AUTOMk1", + assaultCannon: "Cannon5VulcanMk1", + //Rocket + miniRocketPod: "Rocket-Pod", + lancer: "Rocket-LtA-T", + tankKiller: "Rocket-HvyA-T", + bunkerBuster: "Rocket-BB", + //Artillery + mortar: "Mortar1Mk1", + bombard: "Mortar2Mk1", + pepperpot: "Mortar3ROTARYMk1", + miniRocketArray: "Rocket-MRL", + rippleRocket: "Rocket-IDF", + howitzer: "Howitzer105Mk1", + groundShaker: "Howitzer150Mk1", + hellstorm: "Howitzer03-Rot", + angel: "Missile-MdArt", + archAngel: "Missile-HvyArt", + heavyPlasmaLauncher: "PlasmaHeavy", + //Anti-Air + hurricane: "QuadMg1AAGun", + cyclone: "AAGun2Mk1", + whirlwind: "QuadRotAAGun", + avenger: "Missile-LtSAM", + vindicator: "Missile-HvySAM", + //Laser + flashlight: "Laser3BEAMMk1", + pulseLaser: "Laser2PULSEMk1", + //Rail + needle: "RailGun1Mk1", + railGun: "RailGun2Mk1", + gaussCannon: "RailGun3Mk1", + //Missile + scourgeMissile: "Missile-A-T", + //Electronic + nexusLink: "NEXUSlink", + }, + cyborg: { + //MG + heavyMachinegun: "CyborgChaingun", + assaultGun: "CyborgRotMG", + //Flamer + flamer: "CyborgFlamer01", + //Cannon + lightCannon: "CyborgCannon", + //Rocket + lancer: "CyborgRocket", + //Laser + flashlight: "Cyb-Wpn-Laser", + nexusFlashlight: "NX-CyborgPulseLas", + //Rail + needle: "Cyb-Wpn-Rail1", + nexusNeedle: "NX-Cyb-Rail1", + //Missile + scourgeMissile: "Cyb-Wpn-Atmiss", + nexusScourgeMissile: "NX-CyborgMiss", + }, + air: { + //MG + machinegun: "MG1-VTOL", + twinMachinegun: "MG2-VTOL", + heavyMachinegun: "MG3-VTOL", + assaultGun: "MG4ROTARY-VTOL", + //Cannon + lightCannon: "Cannon1-VTOL", + heavyCannon: "Cannon375mm-VTOL", + hyperVelocityCannon: "Cannon4AUTO-VTOL", + assaultCannon: "Cannon5Vulcan-VTOL", + //Rocket + miniRocketPod: "Rocket-VTOL-Pod", + lancer: "Rocket-VTOL-LtA-T", + tankKiller: "Rocket-VTOL-HvyA-T", + bunkerBuster: "Rocket-VTOL-BB", + //Bomb + clusterBomb: "Bomb1-VTOL-LtHE", + heapBomb: "Bomb2-VTOL-HvHE", + phosphorBomb: "Bomb3-VTOL-LtINC", + thermiteBomb: "Bomb4-VTOL-HvyINC", + //Laser + flashlight: "Laser3BEAM-VTOL", + pulseLaser: "Laser2PULSE-VTOL", + //Rail + needle: "RailGun1-VTOL", + railGun: "RailGun2-VTOL", + //Missile + scourgeMissile: "Missile-VTOL-AT", + } +}; +const tSensor = { + sensor: "SensorTurret1Mk1", + counterBattery: "Sys-CBTurret01", + vtolStrike: "Sys-VstrikeTurret01", + vtolCounterBattery: "Sys-VTOLCBTurret01", +}; +const tRepair = { + lightRepair: "LightRepair1", +}; +const tConstruct = { + truck: "Spade1Mk1", +}; +const tCommand = { + commander: "CommandBrain01", +}; + +const cTempl = { //////////////////////////////////////////////////////////////////////////////// // CAM_1A -bloke: { body: "B1BaBaPerson01", prop: "BaBaLegs", weap: "BabaMG" }, -trike: { body: "B4body-sml-trike01", prop: "BaBaProp", weap: "BabaTrikeMG" }, -buggy: { body: "B3body-sml-buggy01", prop: "BaBaProp", weap: "BabaBuggyMG" }, -bjeep: { body: "B2JeepBody", prop: "BaBaProp", weap: "BabaJeepMG" }, +bloke: { body: tBody.scav.human, prop: tProp.scav.legs, weap: tWeap.scav.machinegun }, +trike: { body: tBody.scav.trike, prop: tProp.scav.vehicle, weap: tWeap.scav.trikeMachinegun }, +buggy: { body: tBody.scav.buggy, prop: tProp.scav.vehicle, weap: tWeap.scav.buggyMachinegun }, +bjeep: { body: tBody.scav.jeep, prop: tProp.scav.vehicle, weap: tWeap.scav.jeepMachinegun }, // CAM_1B -bloketwin: { body: "B1BaBaPerson01", prop: "BaBaLegs", weap: "BabaTwinMG" }, -triketwin: { body: "B4body-sml-trike01", prop: "BaBaProp", weap: "BabaTrikeTwinMG" }, -buggytwin: { body: "B3body-sml-buggy01", prop: "BaBaProp", weap: "BabaBuggyTwinMG" }, -bjeeptwin: { body: "B2JeepBody", prop: "BaBaProp", weap: "BabaJeepTwinMG" }, +bloketwin: { body: tBody.scav.human, prop: tProp.scav.legs, weap: tWeap.scav.twinMachinegun }, +triketwin: { body: tBody.scav.trike, prop: tProp.scav.vehicle, weap: tWeap.scav.trikeTwinMachinegun }, +buggytwin: { body: tBody.scav.buggy, prop: tProp.scav.vehicle, weap: tWeap.scav.buggyTwinMachinegun }, +bjeeptwin: { body: tBody.scav.jeep, prop: tProp.scav.vehicle, weap: tWeap.scav.jeepTwinMachinegun }, // SUB_1_1 -blokeheavy: { body: "B1BaBaPerson01", prop: "BaBaLegs", weap: "BabaHeavyMG" }, -trikeheavy: { body: "B4body-sml-trike01", prop: "BaBaProp", weap: "BabaTrikeHeavyMG" }, -buggyheavy: { body: "B3body-sml-buggy01", prop: "BaBaProp", weap: "BabaBuggyHeavyMG" }, -bjeepheavy: { body: "B2JeepBody", prop: "BaBaProp", weap: "BabaJeepHeavyMG" }, +blokeheavy: { body: tBody.scav.human, prop: tProp.scav.legs, weap: tWeap.scav.heavyMachinegun }, +trikeheavy: { body: tBody.scav.trike, prop: tProp.scav.vehicle, weap: tWeap.scav.trikeHeavyMachinegun }, +buggyheavy: { body: tBody.scav.buggy, prop: tProp.scav.vehicle, weap: tWeap.scav.buggyHeavyMachinegun }, +bjeepheavy: { body: tBody.scav.jeep, prop: tProp.scav.vehicle, weap: tWeap.scav.jeepHeavyMachinegun }, // SUB_1_2 // SUB_1_3 -rbjeep8: { body: "B2RKJeepBody", prop: "BaBaProp", weap: "BabaRocket8" }, -rbjeep: { body: "B2RKJeepBody", prop: "BaBaProp", weap: "BabaRocket" }, -rbuggy: { body: "B3bodyRKbuggy01", prop: "BaBaProp", weap: "BabaRocket" }, -nppod: { body: "Body4ABT", prop: "wheeled01", weap: "Rocket-Pod" }, -npblc: { body: "Body4ABT", prop: "HalfTrack", weap: "Cannon1Mk1" }, -nphmg: { body: "Body4ABT", prop: "HalfTrack", weap: "MG3Mk1" }, -npsmc: { body: "Body8MBT", prop: "HalfTrack", weap: "Cannon2A-TMk1" }, -buscan: { body: "BusBody", prop: "BaBaProp", weap: "BabaBusCannon" }, -firecan: { body: "FireBody", prop: "BaBaProp", weap: "BabaBusCannon" }, +rbjeep8: { body: tBody.scav.rocketJeep, prop: tProp.scav.vehicle, weap: tWeap.scav.miniRocketArray }, +rbjeep: { body: tBody.scav.rocketJeep, prop: tProp.scav.vehicle, weap: tWeap.scav.miniRocketPod }, +rbuggy: { body: tBody.scav.rocketBuggy, prop: tProp.scav.vehicle, weap: tWeap.scav.miniRocketPod }, +nppod: { body: tBody.tank.bug, prop: tProp.tank.wheels, weap: tWeap.tank.miniRocketPod }, +npblc: { body: tBody.tank.bug, prop: tProp.tank.halfTracks, weap: tWeap.tank.lightCannon }, +nphmg: { body: tBody.tank.bug, prop: tProp.tank.halfTracks, weap: tWeap.tank.heavyMachinegun }, +npsmc: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.mediumCannon }, +buscan: { body: tBody.scav.bus, prop: tProp.scav.vehicle, weap: tWeap.scav.busCannon }, +firecan: { body: tBody.scav.fireTruck, prop: tProp.scav.vehicle, weap: tWeap.scav.busCannon }, // CAM_1C -npsens: { body: "Body4ABT", prop: "wheeled01", weap: "SensorTurret1Mk1" }, -npslc: { body: "Body8MBT", prop: "HalfTrack", weap: "Cannon1Mk1" }, -npmor: { body: "Body8MBT", prop: "HalfTrack", weap: "Mortar1Mk1" }, -npsmct: { body: "Body8MBT", prop: "tracked01", weap: "Cannon2A-TMk1" }, +npsens: { body: tBody.tank.bug, prop: tProp.tank.wheels, weap: tSensor.sensor }, +npslc: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.lightCannon }, +npmor: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.mortar }, +npsmct: { body: tBody.tank.scorpion, prop: tProp.tank.tracks, weap: tWeap.tank.mediumCannon }, // CAM_1CA -npmrl: { body: "Body4ABT", prop: "HalfTrack", weap: "Rocket-MRL" }, -npmmct: { body: "Body12SUP", prop: "tracked01", weap: "Cannon2A-TMk1" }, -npsbb: { body: "Body8MBT", prop: "HalfTrack", weap: "Rocket-BB" }, -npltat: { body: "Body4ABT", prop: "HalfTrack", weap: "Rocket-LtA-T" }, +npmrl: { body: tBody.tank.bug, prop: tProp.tank.halfTracks, weap: tWeap.tank.miniRocketArray }, +npmmct: { body: tBody.tank.mantis, prop: tProp.tank.tracks, weap: tWeap.tank.mediumCannon }, +npsbb: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.bunkerBuster }, +npltat: { body: tBody.tank.bug, prop: tProp.tank.halfTracks, weap: tWeap.tank.lancer }, // SUB_1_4A // CAM_1_5 -nphmgt: { body: "Body8MBT", prop: "tracked01", weap: "MG3Mk1" }, -npcybc: { body: "CyborgLightBody", prop: "CyborgLegs", weap: "CyborgCannon" }, -npcybf: { body: "CyborgLightBody", prop: "CyborgLegs", weap: "CyborgFlamer01" }, -npcybm: { body: "CyborgLightBody", prop: "CyborgLegs", weap: "CyborgChaingun" }, +nphmgt: { body: tBody.tank.scorpion, prop: tProp.tank.tracks, weap: tWeap.tank.heavyMachinegun }, +npcybc: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.lightCannon }, +npcybf: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.flamer }, +npcybm: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.heavyMachinegun }, // CAM_1AC -nphct: { body: "Body12SUP", prop: "tracked01", weap: "Cannon375mmMk1" }, -npmorb: { body: "Body8MBT", prop: "HalfTrack", weap: "Mortar2Mk1" }, -npmsens: { body: "Body8MBT", prop: "HalfTrack", weap: "SensorTurret1Mk1" }, +nphct: { body: tBody.tank.mantis, prop: tProp.tank.tracks, weap: tWeap.tank.heavyCannon }, +npmorb: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.bombard }, +npmsens: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tSensor.sensor }, // SUB_1_7 // CAM_1_D -npcybr: { body: "CyborgLightBody", prop: "CyborgLegs", weap: "CyborgRocket" }, -nphmgh: { body: "Body8MBT", prop: "hover01", weap: "MG3Mk1" }, -npltath: { body: "Body8MBT", prop: "hover01", weap: "Rocket-LtA-T" }, -nphch: { body: "Body12SUP", prop: "hover01", weap: "Cannon375mmMk1" }, -nphbb: { body: "Body12SUP", prop: "hover01", weap: "Rocket-BB" }, +npcybr: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.lancer }, +nphmgh: { body: tBody.tank.scorpion, prop: tProp.tank.hover, weap: tWeap.tank.heavyMachinegun }, +npltath: { body: tBody.tank.scorpion, prop: tProp.tank.hover, weap: tWeap.tank.lancer }, +nphch: { body: tBody.tank.mantis, prop: tProp.tank.hover, weap: tWeap.tank.heavyCannon }, +nphbb: { body: tBody.tank.mantis, prop: tProp.tank.hover, weap: tWeap.tank.bunkerBuster }, // CAM_2_A -commgt: { body: "Body6SUPP", prop: "tracked01", weap: "MG3Mk1" }, -comsens: { body: "Body6SUPP", prop: "tracked01", weap: "SensorTurret1Mk1" }, -cohct: { body: "Body9REC", prop: "tracked01", weap: "Cannon375mmMk1" }, -commc: { body: "Body6SUPP", prop: "tracked01", weap: "Cannon2A-TMk1" }, -commrl: { body: "Body6SUPP", prop: "HalfTrack", weap: "Rocket-MRL" }, -commrp: { body: "Body6SUPP", prop: "tracked01", weap: "Rocket-Pod" }, -comorb: { body: "Body6SUPP", prop: "HalfTrack", weap: "Mortar2Mk1" }, -colcbv: { body: "Body2SUP", prop: "V-Tol", weap: "Bomb1-VTOL-LtHE" }, -prhct: { body: "Body11ABT", prop: "tracked01", weap: "Cannon375mmMk1" }, -prltat: { body: "Body5REC", prop: "tracked01", weap: "Rocket-LtA-T" }, -prrept: { body: "Body5REC", prop: "tracked01", weap: "LightRepair1" }, +commgt: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.heavyMachinegun }, +comsens: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tSensor.sensor }, +cohct: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.heavyCannon }, +commc: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.mediumCannon }, +commrl: { body: tBody.tank.panther, prop: tProp.tank.halfTracks, weap: tWeap.tank.miniRocketArray }, +commrp: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.miniRocketPod }, +comorb: { body: tBody.tank.panther, prop: tProp.tank.halfTracks, weap: tWeap.tank.bombard }, +colcbv: { body: tBody.tank.leopard, prop: tProp.air.vtol, weap: tWeap.air.clusterBomb }, +colpbv: { body: tBody.tank.leopard, prop: tProp.air.vtol, weap: tWeap.air.phosphorBomb }, +colatv: { body: tBody.tank.leopard, prop: tProp.air.vtol, weap: tWeap.air.lancer }, +prhct: { body: tBody.tank.python, prop: tProp.tank.tracks, weap: tWeap.tank.heavyCannon }, +prltat: { body: tBody.tank.cobra, prop: tProp.tank.tracks, weap: tWeap.tank.lancer }, +prrept: { body: tBody.tank.cobra, prop: tProp.tank.tracks, weap: tRepair.lightRepair }, // SUB_2_1 // CAM_2_B -comatt: { body: "Body6SUPP", prop: "tracked01", weap: "Rocket-LtA-T" }, -comit: { body: "Body6SUPP", prop: "tracked01", weap: "Flame2" }, -colatv: { body: "Body2SUP", prop: "V-Tol", weap: "Rocket-VTOL-LtA-T" }, +comatt: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.lancer }, +comit: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.inferno }, // SUB_2_2 -comtath: { body: "Body6SUPP", prop: "hover01", weap: "Rocket-LtA-T" }, -comtathh: { body: "Body6SUPP", prop: "HalfTrack", weap: "Rocket-LtA-T" }, +comtath: { body: tBody.tank.panther, prop: tProp.tank.hover, weap: tWeap.tank.lancer }, +comtathh: { body: tBody.tank.panther, prop: tProp.tank.halfTracks, weap: tWeap.tank.lancer }, // CAM_2_C -commorv: { body: "Body6SUPP", prop: "V-Tol", weap: "Bomb2-VTOL-HvHE" }, -colagv: { body: "Body2SUP", prop: "V-Tol", weap: "MG4ROTARY-VTOL" }, -comhpv: { body: "Body6SUPP", prop: "tracked01", weap: "Cannon4AUTOMk1" }, -cohbbt: { body: "Body9REC", prop: "tracked01", weap: "Rocket-BB" }, +cohcv: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.heavyCannon }, +commorv: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.heapBomb }, +colagv: { body: tBody.tank.leopard, prop: tProp.air.vtol, weap: tWeap.air.assaultGun }, +comhpv: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.hyperVelocityCannon }, +cohbbt: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.bunkerBuster }, // SUB_2_5 -cocybag: { body: "CyborgLightBody", prop: "CyborgLegs", weap: "CyborgRotMG" }, +cocybag: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.assaultGun }, // SUB_2_D -comhltat: { body: "Body6SUPP", prop: "tracked01", weap: "Rocket-HvyA-T" }, -commorvt: { body: "Body6SUPP", prop: "V-Tol", weap: "Bomb4-VTOL-HvyINC" }, -cohhpv: { body: "Body9REC", prop: "tracked01", weap: "Cannon4AUTOMk1" }, -comagt: { body: "Body6SUPP", prop: "tracked01", weap: "MG4ROTARYMk1" }, +comhltat: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.tankKiller }, +commorvt: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.thermiteBomb }, +cohhpv: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.hyperVelocityCannon }, +comagt: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.assaultGun }, // SUB_2_6 -cohact: { body: "Body9REC", prop: "tracked01", weap: "Cannon5VulcanMk1" }, -comrotm: { body: "Body6SUPP", prop: "HalfTrack", weap: "Mortar3ROTARYMk1" }, -comsensh: { body: "Body6SUPP", prop: "HalfTrack", weap: "SensorTurret1Mk1" }, +cohact: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.assaultCannon }, +comrotm: { body: tBody.tank.panther, prop: tProp.tank.halfTracks, weap: tWeap.tank.pepperpot }, +comsensh: { body: tBody.tank.panther, prop: tProp.tank.halfTracks, weap: tSensor.sensor }, // SUB_2_7 -comrotmh: { body: "Body6SUPP", prop: "tracked01", weap: "Mortar3ROTARYMk1" }, -comltath: { body: "Body6SUPP", prop: "hover01", weap: "Rocket-HvyA-T" }, +comrotmh: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.pepperpot }, +comltath: { body: tBody.tank.panther, prop: tProp.tank.hover, weap: tWeap.tank.tankKiller }, // SUB_2_8 -comhvat: { body: "Body6SUPP", prop: "V-Tol", weap: "Rocket-VTOL-HvyA-T" }, +comhvat: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.tankKiller }, // CAM_2_END -cowwt: { body: "Body9REC", prop: "tracked01", weap: "QuadRotAAGun" }, +cowwt: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.whirlwind }, // CAM_3_A -nxmscouh: { body: "Body7ABT", prop: "hover02", weap: "Missile-A-T" }, -nxcyrail: { body: "CybNXRail1Jmp", prop: "CyborgLegs02", weap: "NX-Cyb-Rail1" }, -nxcyscou: { body: "CybNXMissJmp", prop: "CyborgLegs02", weap: "NX-CyborgMiss" }, -nxlneedv: { body: "Body3MBT", prop: "V-Tol02", weap: "RailGun1-VTOL" }, -nxlscouv: { body: "Body3MBT", prop: "V-Tol02", weap: "Missile-VTOL-AT" }, -nxmtherv: { body: "Body7ABT", prop: "V-Tol02", weap: "Bomb4-VTOL-HvyINC" }, -prhasgnt: { body: "Body11ABT", prop: "tracked01", weap: "MG4ROTARYMk1" }, -prhhpvt: { body: "Body11ABT", prop: "tracked01", weap: "Cannon4AUTOMk1" }, -prhaawwt: { body: "Body11ABT", prop: "tracked01", weap: "QuadRotAAGun" }, -prtruck: { body: "Body5REC", prop: "tracked01", weap: "Spade1Mk1" }, +nxmscouh: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tWeap.tank.scourgeMissile }, +nxcyrail: { body: tBody.cyborg.nexusRailBody, prop: tProp.cyborg.legs2, weap: tWeap.cyborg.nexusNeedle }, +nxcyscou: { body: tBody.cyborg.nexusScourgeBody, prop: tProp.cyborg.legs2, weap: tWeap.cyborg.nexusScourgeMissile }, +nxlneedv: { body: tBody.tank.retaliation, prop: tProp.air.vtol2, weap: tWeap.air.needle }, +nxlscouv: { body: tBody.tank.retaliation, prop: tProp.air.vtol2, weap: tWeap.air.scourgeMissile }, +nxmtherv: { body: tBody.tank.retribution, prop: tProp.air.vtol2, weap: tWeap.air.thermiteBomb }, +prhasgnt: { body: tBody.tank.python, prop: tProp.tank.tracks, weap: tWeap.tank.assaultGun }, +prhhpvt: { body: tBody.tank.python, prop: tProp.tank.tracks, weap: tWeap.tank.hyperVelocityCannon }, +prhaawwt: { body: tBody.tank.python, prop: tProp.tank.tracks, weap: tWeap.tank.whirlwind }, +prtruck: { body: tBody.tank.cobra, prop: tProp.tank.tracks, weap: tConstruct.truck }, // SUB_3_1 -nxcylas: { body: "CybNXPulseLasJmp", prop: "CyborgLegs02", weap: "NX-CyborgPulseLas" }, -nxmrailh: { body: "Body7ABT", prop: "hover02", weap: "RailGun2Mk1" }, +nxcylas: { body: tBody.cyborg.nexusLaserBody, prop: tProp.cyborg.legs2, weap: tWeap.cyborg.nexusFlashlight }, +nxmrailh: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tWeap.tank.railGun }, // CAM_3_B -nxmlinkh: { body: "Body7ABT", prop: "hover02", weap: "NEXUSlink" }, -nxmsamh: { body: "Body7ABT", prop: "hover02", weap: "Missile-HvySAM" }, -nxmheapv: { body: "Body7ABT", prop: "V-Tol02", weap: "Bomb2-VTOL-HvHE" }, +nxmlinkh: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tWeap.tank.nexusLink }, +nxmsamh: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tWeap.tank.vindicator }, +nxmheapv: { body: tBody.tank.retribution, prop: tProp.air.vtol2, weap: tWeap.air.heapBomb }, // SUB_3_2 -nxlflash: { body: "Body3MBT", prop: "hover02", weap: "Laser3BEAMMk1" }, +nxlflash: { body: tBody.tank.retaliation, prop: tProp.tank.hover2, weap: tWeap.tank.flashlight }, // CAM_3_A_B -nxmsens: { body: "Body7ABT", prop: "hover02", weap: "SensorTurret1Mk1" }, -nxmangel: { body: "Body7ABT", prop: "hover02", weap: "Missile-MdArt" }, +nxmsens: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tSensor.sensor }, +nxmangel: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tWeap.tank.angel }, // CAM_3_C // CAM_3_A_D_1 -nxmpulseh: { body: "Body7ABT", prop: "hover02", weap: "Laser2PULSEMk1" }, +nxmpulseh: { body: tBody.tank.retribution, prop: tProp.tank.hover2, weap: tWeap.tank.pulseLaser }, // CAM_3_A_D_2 -nxhgauss: { body: "Body10MBT", prop: "hover02", weap: "RailGun3Mk1" }, -nxlpulsev: { body: "Body3MBT", prop: "V-Tol02", weap: "Laser2PULSE-VTOL" }, +nxhgauss: { body: tBody.tank.vengeance, prop: tProp.tank.hover2, weap: tWeap.tank.gaussCannon }, +nxlpulsev: { body: tBody.tank.retaliation, prop: tProp.air.vtol2, weap: tWeap.air.pulseLaser }, // SUB_3_4 -nxllinkh: { body: "Body3MBT", prop: "hover02", weap: "NEXUSlink" }, -nxmpulsev: { body: "Body7ABT", prop: "V-Tol02", weap: "Laser2PULSE-VTOL" }, +nxllinkh: { body: tBody.tank.retaliation, prop: tProp.tank.hover2, weap: tWeap.tank.nexusLink }, +nxmpulsev: { body: tBody.tank.retribution, prop: tProp.air.vtol2, weap: tWeap.air.pulseLaser }, //////////////////////////////////////////////////////////////////////////////// diff --git a/data/base/script/campaign/transitionTech.js b/data/base/script/campaign/transitionTech.js index 9d44aee526c..b2da90865f6 100644 --- a/data/base/script/campaign/transitionTech.js +++ b/data/base/script/campaign/transitionTech.js @@ -28,8 +28,7 @@ const mis_alphaResearchNew = [ "R-Struc-RprFac-Upgrade01", "R-Struc-RprFac-Upgrade02", "R-Defense-MortarPit", "R-Defense-Pillbox01", "R-Defense-Pillbox04", "R-Defense-Pillbox05", "R-Defense-WallTower01", "R-Defense-WallTower02", "R-Defense-WallUpgrade01", - "R-Defense-WallUpgrade02", "R-Defense-WallUpgrade03", "R-Struc-Materials01", - "R-Struc-Materials02", "R-Struc-Materials03", "R-Vehicle-Body05", "R-Vehicle-Body04", + "R-Struc-Materials03", "R-Vehicle-Body05", "R-Vehicle-Body04", // 6 "R-Wpn-Cannon2Mk1", "R-Defense-WallTower03", "R-Wpn-Rocket05-MiniPod", "R-Struc-Research-Module", @@ -37,6 +36,7 @@ const mis_alphaResearchNew = [ "R-Wpn-Rocket-Damage01", "R-Wpn-Rocket-Damage02", "R-Wpn-Rocket-ROF01", "R-Wpn-Rocket-ROF02", "R-Wpn-Rocket-ROF03", "R-Defense-WallTower06", "R-Wpn-Rocket01-LtAT", "R-Wpn-Rocket03-HvAT", "R-Wpn-RocketSlow-Damage01", + "R-Defense-WallUpgrade02", // 7 @@ -52,7 +52,7 @@ const mis_alphaResearchNew = [ "R-Comp-SynapticLink", "R-Vehicle-Body08", "R-Vehicle-Engine02", "R-Struc-Factory-Upgrade03", "R-Struc-Factory-Cyborg", "R-Cyborg-Wpn-MG", "R-Cyborg-Metals01", "R-Cyborg-Metals02", "R-Cyborg-Metals03", "R-Cyborg-Wpn-Cannon", "R-Cyborg-Wpn-Flamer", "R-Cyborg-Wpn-Rocket", - "R-Cyborg-Legs01", + "R-Cyborg-Legs01", "R-Defense-WallUpgrade03", // 10 @@ -83,10 +83,9 @@ const mis_betaResearchNew = [ // 1 "R-Sys-Engineering02", "R-Sys-Sensor-Upgrade01", "R-Wpn-AAGun-Damage03", "R-Wpn-Cannon-Damage04", "R-Wpn-MG-ROF02", "R-Wpn-Rocket-Damage04", - "R-Defense-WallUpgrade06", "R-Sys-CBSensor-Tower01", "R-Wpn-AAGun-ROF02", - "R-Wpn-Cannon-Accuracy02", "R-Wpn-MG-Damage05", - "R-Wpn-RocketSlow-Damage04", "R-Struc-Materials06", "R-Sys-CBSensor-Turret01", - "R-Wpn-RocketSlow-Accuracy02", + "R-Defense-WallUpgrade04", "R-Sys-CBSensor-Tower01", "R-Wpn-AAGun-ROF02", + "R-Wpn-Cannon-Accuracy02", "R-Wpn-MG-Damage05", "R-Wpn-RocketSlow-Damage04", + "R-Struc-Materials06", "R-Sys-CBSensor-Turret01", "R-Wpn-RocketSlow-Accuracy02", // 2 @@ -95,7 +94,7 @@ const mis_betaResearchNew = [ "R-Wpn-RocketSlow-ROF01", "R-Defense-HvyFlamer", "R-Vehicle-Metals04", "R-Wpn-Cannon-Damage05", "R-Wpn-MG-Damage06", "R-Wpn-Rocket-Damage05", "R-Wpn-RocketSlow-Damage05", "R-Cyborg-Metals04", "R-Wpn-Flamer-Damage06", - "R-Wpn-Mortar-Damage04", + "R-Wpn-Mortar-Damage04", "R-Defense-WallUpgrade05", // 4 "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-AAGun-Accuracy01", "R-Wpn-Mortar-Acc02", @@ -118,6 +117,7 @@ const mis_betaResearchNew = [ "R-Wpn-Bomb02", "R-Wpn-Howitzer-Accuracy01", "R-Wpn-Howitzer-Damage02", "R-Wpn-AAGun-Accuracy02", "R-Wpn-Howitzer-ROF02", "R-Struc-Research-Upgrade06", "R-Struc-VTOLPad-Upgrade03", "R-Wpn-Bomb-Damage02", "R-Wpn-Bomb04", + "R-Defense-WallUpgrade06", // 8 "R-Sys-VTOLCBS-Tower01", "R-Wpn-Cannon4AMk1", "R-Wpn-Mortar3", "R-Wpn-Rocket07-Tank-Killer", @@ -128,6 +128,7 @@ const mis_betaResearchNew = [ // 9 "R-Wpn-Cannon5", "R-Wpn-RocketSlow-Damage06", "R-Defense-Wall-VulcanCan", "R-Wpn-Cannon-Damage06", "R-Wpn-RocketSlow-ROF03", "R-Wpn-Cannon-ROF03", + "R-Wpn-MG-Damage08", // 10 "R-Vehicle-Body09", "R-Wpn-HvyHowitzer", "R-Defense-HvyHowitzer", "R-Vehicle-Metals06", @@ -142,13 +143,13 @@ const mis_gammaAllyRes = mis_alphaResearchNew.concat(mis_playerResBeta).concat(m const mis_gammaResearchNew = [ // 1 - "R-Wpn-Howitzer03-Rot", "R-Wpn-MG-Damage08", "R-Struc-Power-Upgrade02", "R-Sys-Engineering03", - "R-Wpn-Cannon-Damage07", "R-Wpn-AAGun-Damage04", "R-Defense-WallUpgrade07", "R-Defense-WallUpgrade08", - "R-Defense-WallUpgrade09", "R-Struc-Materials07", "R-Struc-Materials08", "R-Struc-Materials09", - "R-Defense-RotHow", "R-Wpn-Howitzer-Damage04", + "R-Wpn-Howitzer03-Rot", "R-Wpn-MG-Damage09", "R-Struc-Power-Upgrade02", "R-Sys-Engineering03", + "R-Wpn-Cannon-Damage07", "R-Wpn-AAGun-Damage04", "R-Defense-WallUpgrade07", "R-Struc-Materials09", + "R-Defense-RotHow", "R-Wpn-Howitzer-Damage04", "R-Wpn-Flamer-ROF04", // 2 - "R-Wpn-MG-Damage09", "R-Wpn-Cannon-Damage08", "R-Wpn-AAGun-Damage05", "R-Wpn-Howitzer-Damage05", + "R-Wpn-Cannon-Damage08", "R-Wpn-AAGun-Damage05", "R-Wpn-Howitzer-Damage05", + "R-Defense-WallUpgrade08", // 3 "R-Struc-Research-Upgrade07", "R-Wpn-Laser01", "R-Wpn-Mortar-Acc03", "R-Vehicle-Body03", @@ -158,6 +159,7 @@ const mis_gammaResearchNew = [ "R-Vehicle-Engine07", "R-Wpn-AAGun-ROF04", "R-Wpn-Mortar-ROF04", "R-Wpn-Energy-Damage01", "R-Wpn-Energy-Damage02", "R-Wpn-Energy-ROF01", "R-Cyborg-Metals07", "R-Vehicle-Armor-Heat04", "R-Wpn-Howitzer-ROF04", "R-Cyborg-Armor-Heat04", "R-Wpn-RocketSlow-ROF04", + "R-Defense-WallUpgrade09", // 4 "R-Wpn-Cannon-ROF05", "R-Wpn-Cannon-ROF06", "R-Wpn-Cannon-Damage09", "R-Wpn-AAGun-Damage06", @@ -175,14 +177,14 @@ const mis_gammaResearchNew = [ "R-Wpn-Missile-Damage01", "R-Vehicle-Armor-Heat05", "R-Wpn-Rail-Accuracy01", "R-Wpn-Missile-Accuracy01", "R-Wpn-AAGun-Accuracy03", "R-Wpn-Howitzer-Accuracy03", "R-Wpn-Rail-ROF01", "R-Wpn-Missile2A-T", "R-Cyborg-Wpn-ATMiss", "R-Defense-GuardTower-ATMiss", "R-Defense-WallTower-A-Tmiss", "R-Wpn-Missile-Damage02", - "R-Wpn-Missile-ROF01", "R-Cyborg-Metals08", "R-Cyborg-Armor-Heat05", + "R-Wpn-Missile-ROF01", "R-Cyborg-Metals08", "R-Cyborg-Armor-Heat05", "R-Defense-WallUpgrade10", // 7 "R-Wpn-MdArtMissile", "R-Wpn-Laser02", "R-Wpn-RailGun02", "R-Wpn-Missile-HvSAM", "R-Defense-SamSite2", "R-Wpn-Missile-Accuracy02", "R-Defense-PulseLas", "R-Wpn-Energy-ROF02", "R-Wpn-Energy-Damage03", "R-Wpn-Energy-ROF03", "R-Defense-MdArtMissile", "R-Wpn-Missile-ROF02", "R-Defense-Rail2", "R-Defense-WallTower-Rail2", - "R-Wpn-Rail-Damage02", "R-Wpn-Rail-ROF02", + "R-Wpn-Rail-Damage02", "R-Wpn-Rail-ROF02", "R-Defense-WallUpgrade11", "R-Defense-WallUpgrade12", // 8 "R-Sys-Resistance", "R-Comp-MissileCodes01", "R-Comp-MissileCodes02", "R-Comp-MissileCodes03", diff --git a/data/base/script/fastplay/fastdemo.js b/data/base/script/fastplay/fastdemo.js index d090b33c1ca..318b2b486ae 100644 --- a/data/base/script/fastplay/fastdemo.js +++ b/data/base/script/fastplay/fastdemo.js @@ -49,8 +49,9 @@ function grantStartTech() "R-Wpn-MG1Mk1","R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels" ]; const structs = [ - "A0CommandCentre", "A0PowerGenerator", "A0ResourceExtractor", - "A0ResearchFacility", "A0LightFactory" + cam_base_structures.commandCenter, cam_base_structures.powerGenerator, + cam_base_structures.derrick, cam_base_structures.researchLab, + cam_base_structures.factory, ]; camCompleteRequiredResearch(tech, CAM_HUMAN_PLAYER); diff --git a/data/base/script/tutorial.js b/data/base/script/tutorial.js index 1cc2de88911..78d77c74c90 100644 --- a/data/base/script/tutorial.js +++ b/data/base/script/tutorial.js @@ -147,7 +147,7 @@ function enableBuild() { setReticuleButton(MIS_BUILD_BUTTON, _("Build (F3)"), "image_build_up.png", "image_build_down.png"); setReticuleFlash(MIS_BUILD_BUTTON, true); - enableStructure("A0PowerGenerator", CAM_HUMAN_PLAYER); + enableStructure(cam_base_structures.powerGenerator, CAM_HUMAN_PLAYER); } //show the research button @@ -155,7 +155,7 @@ function enableRes() { setReticuleButton(MIS_RESEARCH_BUTTON, _("Research (F2)"), "image_research_up.png", "image_research_down.png"); setReticuleFlash(MIS_RESEARCH_BUTTON, true); - enableStructure("A0ResearchFacility", CAM_HUMAN_PLAYER); + enableStructure(cam_base_structures.researchLab, CAM_HUMAN_PLAYER); } //They clicked the button so turn off flash @@ -266,7 +266,7 @@ function eventDesignQuit() { increaseTutorialState(); setReticuleButton(MIS_DESIGN_BUTTON, _("Design - construct HQ first"), "", ""); - enableStructure("A0LightFactory", CAM_HUMAN_PLAYER); + enableStructure(cam_base_structures.factory, CAM_HUMAN_PLAYER); setReticuleFlash(MIS_CLOSE_BUTTON, false); setReticuleButton(MIS_BUILD_BUTTON, _("Build (F3)"), "image_build_up.png", "image_build_down.png"); setReticuleFlash(MIS_BUILD_BUTTON, true); @@ -279,7 +279,7 @@ function checkForPowGen() { if (tutState === 4) { - if (countStruct("A0PowerGenerator", CAM_HUMAN_PLAYER) > 0) + if (countStruct(cam_base_structures.powerGenerator, CAM_HUMAN_PLAYER) > 0) { setReticuleButton(MIS_BUILD_BUTTON, _("Build - manufacture constructor droids first"), "", ""); increaseTutorialState(); @@ -312,7 +312,7 @@ function checkResFac() { if (tutState === 11) { - if (countStruct("A0ResearchFacility", CAM_HUMAN_PLAYER) > 0) + if (countStruct(cam_base_structures.researchLab, CAM_HUMAN_PLAYER) > 0) { setReticuleButton(MIS_BUILD_BUTTON, _("Build - manufacture constructor droids first"), "", ""); } @@ -360,7 +360,7 @@ function eventPickup(feature, droid) increaseTutorialState(); setReticuleButton(MIS_BUILD_BUTTON, _("Build (F3)"), "image_build_up.png", "image_build_down.png"); setReticuleFlash(MIS_BUILD_BUTTON, true); - enableStructure("A0ResearchFacility", CAM_HUMAN_PLAYER); + enableStructure(cam_base_structures.researchLab, CAM_HUMAN_PLAYER); } } @@ -424,7 +424,7 @@ function eventSelectionChanged(objects) { if (tut0) { - enableStructure("A0ResourceExtractor", CAM_HUMAN_PLAYER); + enableStructure(cam_base_structures.derrick, CAM_HUMAN_PLAYER); increaseTutorialState(); } else if (tut5 && obj.id !== firstTruckID) @@ -503,10 +503,10 @@ function eventStartLevel() hackStopIngameAudio(); grantStartTech(); - setStructureLimits("A0LightFactory", 1, CAM_HUMAN_PLAYER); - setStructureLimits("A0ResourceExtractor", 1, CAM_HUMAN_PLAYER); - setStructureLimits("A0PowerGenerator", 1, CAM_HUMAN_PLAYER); - setStructureLimits("A0ResearchFacility", 1, CAM_HUMAN_PLAYER); + setStructureLimits(cam_base_structures.factory, 1, CAM_HUMAN_PLAYER); + setStructureLimits(cam_base_structures.derrick, 1, CAM_HUMAN_PLAYER); + setStructureLimits(cam_base_structures.powerGenerator, 1, CAM_HUMAN_PLAYER); + setStructureLimits(cam_base_structures.researchLab, 1, CAM_HUMAN_PLAYER); camSafeRemoveObject("mgArtifact", false); addFeature("OilResource", 24, 26); diff --git a/data/base/stats/body.json b/data/base/stats/body.json index 042cf7c9ee5..27f67cc1565 100644 --- a/data/base/stats/body.json +++ b/data/base/stats/body.json @@ -977,8 +977,8 @@ "weight": 150 }, "CybNXMissJmp": { - "armourHeat": 15, - "armourKinetic": 18, + "armourHeat": 12, + "armourKinetic": 15, "buildPoints": 125, "buildPower": 30, "class": "Cyborgs", @@ -993,8 +993,8 @@ "weight": 150 }, "CybNXPulseLasJmp": { - "armourHeat": 15, - "armourKinetic": 18, + "armourHeat": 12, + "armourKinetic": 15, "buildPoints": 125, "buildPower": 30, "class": "Cyborgs", @@ -1009,8 +1009,8 @@ "weight": 150 }, "CybNXRail1Jmp": { - "armourHeat": 15, - "armourKinetic": 18, + "armourHeat": 12, + "armourKinetic": 15, "buildPoints": 125, "buildPower": 30, "class": "Cyborgs", diff --git a/data/base/stats/research.json b/data/base/stats/research.json index 9fddbee1f09..2495649d0f5 100644 --- a/data/base/stats/research.json +++ b/data/base/stats/research.json @@ -1594,7 +1594,8 @@ "imdName": "BLWALLH.PIE", "name": "Improved Hardcrete Mk2", "requiredResearch": [ - "R-Defense-WallUpgrade01" + "R-Defense-WallUpgrade01", + "R-Struc-Research-Module" ], "researchPoints": 2400, "researchPower": 75, @@ -1623,7 +1624,8 @@ "imdName": "BLWALLH.PIE", "name": "Improved Hardcrete Mk3", "requiredResearch": [ - "R-Defense-WallUpgrade02" + "R-Defense-WallUpgrade02", + "R-Struc-Research-Upgrade01" ], "researchPoints": 3600, "researchPower": 112, @@ -2498,7 +2500,6 @@ "researchPoints": 2400, "researchPower": 75, "resultComponents": [ - "Cannon1-VTOL", "Cannon1Mk1" ], "statID": "Cannon1Mk1" @@ -2540,7 +2541,8 @@ "researchPoints": 7200, "researchPower": 225, "resultComponents": [ - "Cannon375mmMk1" + "Cannon375mmMk1", + "Cannon375mm-VTOL" ], "statID": "Cannon375mmMk1" }, @@ -3200,14 +3202,14 @@ "filterParameter": "ImpactClass", "filterValue": "ROCKET", "parameter": "Damage", - "value": 35 + "value": 30 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "ROCKET", "parameter": "RadiusDamage", - "value": 35 + "value": 30 } ], "statID": "Rocket-Pod", @@ -3229,14 +3231,14 @@ "filterParameter": "ImpactClass", "filterValue": "ROCKET", "parameter": "Damage", - "value": 15 + "value": 20 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "ROCKET", "parameter": "RadiusDamage", - "value": 15 + "value": 20 } ], "statID": "Rocket-Pod", @@ -3417,8 +3419,7 @@ "researchPoints": 1200, "researchPower": 37, "resultComponents": [ - "Rocket-Pod", - "Rocket-VTOL-Pod" + "Rocket-Pod" ], "statID": "Rocket-Pod" }, @@ -3712,6 +3713,9 @@ "id": "R-Defense-HvyHowitzer", "msgName": "RES_EMP_HvHOW", "name": "Ground Shaker Emplacement", + "redStructures": [ + "Emplacement-Howitzer105" + ], "requiredResearch": [ "R-Wpn-HvyHowitzer", "R-Defense-Howitzer" @@ -3914,6 +3918,7 @@ "iconID": "IMAGE_RES_DEFENCE", "id": "R-Defense-WallUpgrade05", "imdName": "BLWALLH.PIE", + "keyTopic": 1, "name": "Supercrete Mk2", "requiredResearch": [ "R-Defense-WallUpgrade04" @@ -3945,7 +3950,8 @@ "imdName": "BLWALLH.PIE", "name": "Supercrete Mk3", "requiredResearch": [ - "R-Defense-WallUpgrade05" + "R-Defense-WallUpgrade05", + "R-Struc-Research-Upgrade04" ], "researchPoints": 10000, "researchPower": 312, @@ -4422,7 +4428,7 @@ { "class": "Construct", "parameter": "ConstructorPoints", - "value": 20 + "value": 30 } ], "subgroupIconID": "IMAGE_RES_GRPUPG" @@ -4437,7 +4443,7 @@ ], "requiredResearch": [ "R-Sys-Sensor-Tower01", - "R-Defense-WallUpgrade02" + "R-Defense-WallUpgrade01" ], "researchPoints": 1200, "researchPower": 37, @@ -5268,7 +5274,7 @@ "name": "Hyper Velocity Cannon", "redComponents": [ "Cannon375mmMk1", - "Cannon1-VTOL" + "Cannon375mm-VTOL" ], "requiredResearch": [ "R-Wpn-Cannon3Mk1" @@ -5465,6 +5471,36 @@ "subgroupIconID": "IMAGE_RES_GRPROF", "techCode": 1 }, + "R-Wpn-Flamer-ROF04": { + "iconID": "IMAGE_RES_WEAPONTECH", + "id": "R-Wpn-Flamer-ROF04", + "keyTopic": 1, + "name": "Flamer Fast Loader", + "requiredResearch": [ + "R-Wpn-Flamer-ROF03" + ], + "researchPoints": 8000, + "researchPower": 250, + "results": [ + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "FLAME", + "parameter": "FirePause", + "value": -10 + }, + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "FLAME", + "parameter": "ReloadTime", + "value": -10 + } + ], + "statID": "Flame1Mk1", + "subgroupIconID": "IMAGE_RES_GRPROF", + "techCode": 1 + }, "R-Wpn-Howitzer-Accuracy01": { "iconID": "IMAGE_RES_WEAPONTECH", "id": "R-Wpn-Howitzer-Accuracy01", @@ -5759,6 +5795,9 @@ "keyTopic": 1, "msgName": "RES_W_HH1", "name": "Heavy Howitzer - Ground Shaker", + "redComponents": [ + "Howitzer105Mk1" + ], "requiredResearch": [ "R-Wpn-HowitzerMk1" ], @@ -6260,7 +6299,6 @@ "name": "Tank Killer Rocket", "redComponents": [ "Rocket-Pod", - "Rocket-VTOL-Pod", "Rocket-LtA-T", "Rocket-VTOL-LtA-T" ], @@ -6801,6 +6839,7 @@ "iconID": "IMAGE_RES_DEFENCE", "id": "R-Defense-WallUpgrade07", "imdName": "BLWALLH.PIE", + "keyTopic": 1, "msgName": "RES_DF_WU7", "name": "Plascrete", "requiredResearch": [ @@ -6822,7 +6861,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "HitPoints", - "value": 40 + "value": 120 } ], "subgroupIconID": "IMAGE_RES_GRPUPG" @@ -6831,6 +6870,7 @@ "iconID": "IMAGE_RES_DEFENCE", "id": "R-Defense-WallUpgrade08", "imdName": "BLWALLH.PIE", + "keyTopic": 1, "name": "Plascrete Mk2", "requiredResearch": [ "R-Defense-WallUpgrade07" @@ -6850,7 +6890,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "HitPoints", - "value": 20 + "value": 40 } ], "subgroupIconID": "IMAGE_RES_GRPUPG", @@ -6862,7 +6902,8 @@ "imdName": "BLWALLH.PIE", "name": "Plascrete Mk3", "requiredResearch": [ - "R-Defense-WallUpgrade08" + "R-Defense-WallUpgrade08", + "R-Struc-Research-Upgrade07" ], "researchPoints": 16000, "researchPower": 450, @@ -6872,7 +6913,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 40 + "value": 60 }, { "class": "Building", @@ -6888,30 +6929,95 @@ "R-Defense-WallUpgrade10": { "iconID": "IMAGE_RES_DEFENCE", "id": "R-Defense-WallUpgrade10", + "imdName": "BLWALLH.PIE", "keyTopic": 1, + "msgName": "RES_DF_WU10", + "name": "Plasteel", + "requiredResearch": [ + "R-Defense-WallUpgrade09" + ], + "researchPoints": 18000, + "researchPower": 450, + "results": [ + { + "class": "Building", + "filterParameter": "Type", + "filterValue": "Wall", + "parameter": "Armour", + "value": 30 + }, + { + "class": "Building", + "filterParameter": "Type", + "filterValue": "Wall", + "parameter": "HitPoints", + "value": 20 + } + ], + "subgroupIconID": "IMAGE_RES_GRPUPG" + }, + "R-Defense-WallUpgrade11": { + "iconID": "IMAGE_RES_DEFENCE", + "id": "R-Defense-WallUpgrade11", "imdName": "BLWALLH.PIE", + "keyTopic": 1, + "name": "Plasteel Mk2", + "requiredResearch": [ + "R-Defense-WallUpgrade10" + ], + "researchPoints": 20000, + "researchPower": 450, "results": [ { "class": "Building", "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 100 + "value": 30 }, { "class": "Building", "filterParameter": "Type", "filterValue": "Wall", "parameter": "HitPoints", - "value": 100 + "value": 20 } ], "subgroupIconID": "IMAGE_RES_GRPUPG", "techCode": 1 }, - "R-Defense-WallUpgrade11": { + "R-Defense-WallUpgrade12": { "iconID": "IMAGE_RES_DEFENCE", - "id": "R-Defense-WallUpgrade11", + "id": "R-Defense-WallUpgrade12", + "imdName": "BLWALLH.PIE", + "name": "Plasteel Mk3", + "requiredResearch": [ + "R-Defense-WallUpgrade11" + ], + "researchPoints": 22000, + "researchPower": 450, + "results": [ + { + "class": "Building", + "filterParameter": "Type", + "filterValue": "Wall", + "parameter": "Armour", + "value": 30 + }, + { + "class": "Building", + "filterParameter": "Type", + "filterValue": "Wall", + "parameter": "HitPoints", + "value": 20 + } + ], + "subgroupIconID": "IMAGE_RES_GRPUPG", + "techCode": 1 + }, + "R-Defense-WallUpgrade13": { + "iconID": "IMAGE_RES_DEFENCE", + "id": "R-Defense-WallUpgrade13", "keyTopic": 1, "imdName": "BLWALLH.PIE", "results": [ @@ -6920,14 +7026,14 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 400 + "value": 200 }, { "class": "Building", "filterParameter": "Type", "filterValue": "Wall", "parameter": "HitPoints", - "value": 100 + "value": 50 } ], "subgroupIconID": "IMAGE_RES_GRPUPG", @@ -7228,7 +7334,7 @@ { "class": "Construct", "parameter": "ConstructorPoints", - "value": 20 + "value": 30 } ], "subgroupIconID": "IMAGE_RES_GRPUPG" @@ -7558,14 +7664,14 @@ "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "Damage", - "value": 30 + "value": 40 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "RadiusDamage", - "value": 30 + "value": 40 } ], "statID": "QuadMg1AAGun", @@ -7587,14 +7693,14 @@ "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "Damage", - "value": 30 + "value": 40 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "RadiusDamage", - "value": 30 + "value": 40 } ], "statID": "QuadMg1AAGun", @@ -7617,14 +7723,14 @@ "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "Damage", - "value": 30 + "value": 40 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "RadiusDamage", - "value": 30 + "value": 40 } ], "statID": "QuadMg1AAGun", @@ -7783,7 +7889,7 @@ "msgName": "RES_W_CN_D7", "name": "HVAPFSDS Cannon Rounds", "requiredResearch": [ - "R-Wpn-MG-Damage08", + "R-Wpn-MG-Damage09", "R-Wpn-Cannon-Damage06" ], "researchPoints": 9600, @@ -7810,10 +7916,10 @@ "R-Wpn-Cannon-Damage08": { "iconID": "IMAGE_RES_WEAPONTECH", "id": "R-Wpn-Cannon-Damage08", + "keyTopic": 1, "name": "HVAPFSDS Cannon Rounds Mk2", "requiredResearch": [ - "R-Wpn-Cannon-Damage07", - "R-Wpn-MG-Damage09" + "R-Wpn-Cannon-Damage07" ], "researchPoints": 10800, "researchPower": 337, @@ -8090,14 +8196,14 @@ "filterParameter": "ImpactClass", "filterValue": "ENERGY", "parameter": "Damage", - "value": 30 + "value": 12 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "ENERGY", "parameter": "RadiusDamage", - "value": 30 + "value": 12 } ], "statID": "Laser2PULSEMk1", @@ -8119,14 +8225,14 @@ "filterParameter": "ImpactClass", "filterValue": "ENERGY", "parameter": "Damage", - "value": 30 + "value": 12 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "ENERGY", "parameter": "RadiusDamage", - "value": 30 + "value": 12 } ], "statID": "Laser2PULSEMk1", @@ -8150,14 +8256,14 @@ "filterParameter": "ImpactClass", "filterValue": "ENERGY", "parameter": "Damage", - "value": 30 + "value": 20 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "ENERGY", "parameter": "RadiusDamage", - "value": 30 + "value": 20 } ], "statID": "Laser2PULSEMk1", @@ -8572,7 +8678,7 @@ "filterParameter": "ImpactClass", "filterValue": "MACHINE GUN", "parameter": "Damage", - "value": 20 + "value": 5 } ], "statID": "MG1Mk1", @@ -8594,7 +8700,7 @@ "filterParameter": "ImpactClass", "filterValue": "MACHINE GUN", "parameter": "Damage", - "value": 20 + "value": 35 } ], "statID": "MG1Mk1", diff --git a/data/base/stats/structure.json b/data/base/stats/structure.json index 5f362ce9078..6ee877665f9 100644 --- a/data/base/stats/structure.json +++ b/data/base/stats/structure.json @@ -19,7 +19,7 @@ "width": 1 }, "A0BaBaBunker": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 10, "buildPower": 100, @@ -34,7 +34,7 @@ "structureModel": [ "blbrbbnk.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "MG3-Tower" @@ -75,11 +75,11 @@ "name": "Scavenger Flame Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "Blbrtowf.pie" ], - "thermal": 7, + "thermal": 5, "type": "DEFENSE", "weapons": [ "BabaFlame" @@ -98,11 +98,11 @@ "name": "Scavenger Gun Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "BLBRBTW1.PIE" ], - "thermal": 7, + "thermal": 5, "type": "DEFENSE", "weapons": [ "BabaTowerMG" @@ -121,11 +121,11 @@ "name": "*Scavenger End Tower*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "Blbrbtw2.PIE" ], - "thermal": 7, + "thermal": 5, "type": "DEFENSE", "weapons": [ "BabaTowerMG" @@ -143,11 +143,11 @@ "id": "A0BaBaHorizontalWall", "name": "Scavenger Horizontal Wall", "sensorID": "BaBaSensor", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "BLBRBWLH.PIE" ], - "thermal": 7, + "thermal": 5, "type": "WALL", "width": 1 }, @@ -163,7 +163,7 @@ "name": "*BaBaMortarPit*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "BLBRMRTP.PIE" ], @@ -208,7 +208,7 @@ "name": "Scavenger Rocket Pit", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "EXROCKET.PIE" ], @@ -231,7 +231,7 @@ "name": "Scavenger AT-Rocket Pit", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "EXROCKET.PIE" ], @@ -253,7 +253,7 @@ "id": "A0BabaCornerWall", "name": "Scavenger CornerWall", "sensorID": "ZNULLSENSOR", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "BLBRBCR1.PIE" ], @@ -273,7 +273,7 @@ "name": "Cannon Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "BLBRTOWR.PIE" ], @@ -437,7 +437,7 @@ "armour": 15, "breadth": 1, "buildPoints": 125, - "buildPower": 25, + "buildPower": 15, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -456,7 +456,7 @@ "armour": 15, "breadth": 1, "buildPoints": 125, - "buildPower": 25, + "buildPower": 15, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -613,12 +613,12 @@ "width": 2 }, "A0ResourceExtractor": { - "armour": 5, + "armour": 4, "breadth": 1, "buildPoints": 100, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 300, + "hitpoints": 200, "id": "A0ResourceExtractor", "name": "Oil Derrick", "resistance": 150, @@ -627,7 +627,7 @@ "structureModel": [ "BLDERIK.PIE" ], - "thermal": 5, + "thermal": 2, "type": "RESOURCE EXTRACTOR", "width": 1 }, @@ -635,14 +635,14 @@ "armour": 10, "breadth": 1, "buildPoints": 40, - "buildPower": 15, + "buildPower": 5, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 100, + "hitpoints": 150, "id": "A0TankTrap", "name": "Tank Traps", "sensorID": "ZNULLSENSOR", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "MITRAP2.PIE" ], @@ -707,7 +707,7 @@ "buildPower": 150, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 250, "id": "AASite-QuadBof", "name": "Cyclone AA Flak Site", "resistance": 150, @@ -726,8 +726,8 @@ "AASite-QuadMg1": { "armour": 12, "breadth": 1, - "buildPoints": 250, - "buildPower": 125, + "buildPoints": 200, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 200, @@ -749,11 +749,11 @@ "AASite-QuadRotMg": { "armour": 12, "breadth": 1, - "buildPoints": 275, - "buildPower": 175, + "buildPoints": 400, + "buildPower": 200, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 250, "id": "AASite-QuadRotMg", "name": "Whirlwind AA Site", "resistance": 150, @@ -770,14 +770,14 @@ "width": 1 }, "CO-Tower-HVCan": { - "armour": 12, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 100, + "buildPoints": 550, + "buildPower": 250, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 700, "id": "CO-Tower-HVCan", "name": "*CO-Tower-HVCan*", "resistance": 150, @@ -786,7 +786,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 12, + "thermal": 15, "type": "DEFENSE", "weapons": [ "Cannon4AUTOMk1" @@ -794,14 +794,14 @@ "width": 1 }, "CO-Tower-HvATRkt": { - "armour": 12, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 100, + "buildPoints": 575, + "buildPower": 275, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 700, "id": "CO-Tower-HvATRkt", "name": "*CO-Tower-HvATRkt*", "resistance": 150, @@ -810,7 +810,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 12, + "thermal": 15, "type": "DEFENSE", "weapons": [ "Rocket-HvyA-T" @@ -818,13 +818,13 @@ "width": 1 }, "CO-Tower-HvFlame": { - "armour": 12, + "armour": 10, "breadth": 1, - "buildPoints": 500, - "buildPower": 100, + "buildPoints": 250, + "buildPower": 110, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 300, + "hitpoints": 350, "id": "CO-Tower-HvFlame", "name": "*CO-Tower-HvFlame*", "resistance": 150, @@ -833,7 +833,7 @@ "structureModel": [ "BLHARDPT.pie" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Flame2" @@ -843,16 +843,16 @@ "CO-Tower-LtATRkt": { "armour": 12, "breadth": 1, - "buildPoints": 500, + "buildPoints": 350, "buildPower": 100, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 450, "id": "CO-Tower-LtATRkt", "name": "*CO-Tower-LtATRkt*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "blguardn.pie" ], @@ -866,16 +866,16 @@ "CO-Tower-MG3": { "armour": 12, "breadth": 1, - "buildPoints": 500, + "buildPoints": 300, "buildPower": 100, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 450, "id": "CO-Tower-MG3", "name": "*CO-Tower-MG3*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "blguardn.PIE" ], @@ -887,14 +887,14 @@ "width": 1 }, "CO-Tower-MdCan": { - "armour": 12, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 100, + "buildPoints": 525, + "buildPower": 200, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 700, "id": "CO-Tower-MdCan", "name": "*CO-Tower-MdCan*", "resistance": 150, @@ -903,7 +903,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 12, + "thermal": 15, "type": "DEFENSE", "weapons": [ "Cannon2A-TMk1" @@ -913,16 +913,16 @@ "CO-Tower-RotMG": { "armour": 12, "breadth": 1, - "buildPoints": 500, + "buildPoints": 300, "buildPower": 100, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 450, "id": "CO-Tower-RotMG", "name": "*CO-Tower-RotMG*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "blguardn.PIE" ], @@ -934,14 +934,14 @@ "width": 1 }, "CO-WallTower-HvCan": { - "armour": 12, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 100, + "buildPoints": 550, + "buildPower": 225, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 700, "id": "CO-WallTower-HvCan", "name": "*CO-WallTower-HvCan*", "resistance": 150, @@ -950,7 +950,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 12, + "thermal": 15, "type": "DEFENSE", "weapons": [ "Cannon375mmMk1" @@ -958,14 +958,14 @@ "width": 1 }, "CO-WallTower-RotCan": { - "armour": 12, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 100, + "buildPoints": 575, + "buildPower": 250, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 700, "id": "CO-WallTower-RotCan", "name": "*CO-WallTower-RotCan*", "resistance": 150, @@ -974,7 +974,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 12, + "thermal": 15, "type": "DEFENSE", "weapons": [ "Cannon5VulcanMk1" @@ -982,13 +982,13 @@ "width": 1 }, "CollectiveCWall": { - "armour": 12, + "armour": 15, "breadth": 1, "buildPoints": 125, - "buildPower": 25, + "buildPower": 15, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 275, "id": "CollectiveCWall", "name": "Collective CWall", "sensorID": "ZNULLSENSOR", @@ -996,18 +996,18 @@ "structureModel": [ "BLWALLC2.pie" ], - "thermal": 12, + "thermal": 15, "type": "CORNER WALL", "width": 1 }, "CollectiveWall": { - "armour": 12, + "armour": 15, "breadth": 1, "buildPoints": 125, - "buildPower": 25, + "buildPower": 15, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 275, "id": "CollectiveWall", "name": "Collective Wall", "sensorID": "ZNULLSENSOR", @@ -1015,7 +1015,7 @@ "structureModel": [ "BLWALL2.pie" ], - "thermal": 12, + "thermal": 15, "type": "WALL", "width": 1 }, @@ -1041,8 +1041,8 @@ "Emplacement-HPVcannon": { "armour": 10, "breadth": 1, - "buildPoints": 400, - "buildPower": 200, + "buildPoints": 275, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 200, @@ -1062,10 +1062,10 @@ "width": 1 }, "Emplacement-Howitzer105": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 500, - "buildPower": 275, + "buildPoints": 600, + "buildPower": 300, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 200, @@ -1077,7 +1077,7 @@ "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Howitzer105Mk1" @@ -1085,10 +1085,10 @@ "width": 1 }, "Emplacement-Howitzer150": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 550, - "buildPower": 375, + "buildPoints": 600, + "buildPower": 350, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 200, @@ -1100,7 +1100,7 @@ "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Howitzer150Mk1" @@ -1110,11 +1110,11 @@ "Emplacement-HvART-pit": { "armour": 10, "breadth": 1, - "buildPoints": 675, + "buildPoints": 700, "buildPower": 525, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 150, "id": "Emplacement-HvART-pit", "name": "Archangel Missile Emplacement", "resistance": 150, @@ -1133,8 +1133,8 @@ "Emplacement-HvyATrocket": { "armour": 10, "breadth": 1, - "buildPoints": 500, - "buildPower": 275, + "buildPoints": 350, + "buildPower": 120, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 200, @@ -1157,10 +1157,10 @@ "armour": 10, "breadth": 1, "buildPoints": 400, - "buildPower": 125, + "buildPower": 170, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 150, "id": "Emplacement-MRL-pit", "name": "Mini-Rocket Battery", "resistance": 150, @@ -1179,11 +1179,11 @@ "Emplacement-MdART-pit": { "armour": 10, "breadth": 1, - "buildPoints": 600, + "buildPoints": 700, "buildPower": 450, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 150, "id": "Emplacement-MdART-pit", "name": "Angel Missile Emplacement", "resistance": 150, @@ -1200,13 +1200,13 @@ "width": 1 }, "Emplacement-MortarPit01": { - "armour": 10, + "armour": 8, "breadth": 1, - "buildPoints": 400, - "buildPower": 125, + "buildPoints": 300, + "buildPower": 150, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 100, "id": "Emplacement-MortarPit01", "name": "Mortar Pit", "resistance": 150, @@ -1215,7 +1215,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 10, + "thermal": 8, "type": "DEFENSE", "weapons": [ "Mortar1Mk1" @@ -1223,13 +1223,13 @@ "width": 1 }, "Emplacement-MortarPit02": { - "armour": 10, + "armour": 8, "breadth": 1, - "buildPoints": 450, - "buildPower": 150, + "buildPoints": 400, + "buildPower": 170, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 100, "id": "Emplacement-MortarPit02", "name": "Bombard Pit", "resistance": 150, @@ -1238,7 +1238,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 10, + "thermal": 8, "type": "DEFENSE", "weapons": [ "Mortar2Mk1" @@ -1248,16 +1248,16 @@ "Emplacement-PrisLas": { "armour": 10, "breadth": 1, - "buildPoints": 450, - "buildPower": 275, + "buildPoints": 275, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 350, "id": "Emplacement-PrisLas", "name": "Flashlight Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLHARDPT.PIE" ], @@ -1271,16 +1271,16 @@ "Emplacement-PulseLaser": { "armour": 10, "breadth": 1, - "buildPoints": 400, - "buildPower": 225, + "buildPoints": 300, + "buildPower": 120, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 350, "id": "Emplacement-PulseLaser", "name": "Pulse Laser Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLHARDPT.PIE" ], @@ -1294,16 +1294,16 @@ "Emplacement-Rail2": { "armour": 10, "breadth": 1, - "buildPoints": 500, - "buildPower": 350, + "buildPoints": 300, + "buildPower": 120, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 350, "id": "Emplacement-Rail2", "name": "Railgun Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLHARDPT.PIE" ], @@ -1317,16 +1317,16 @@ "Emplacement-Rail3": { "armour": 10, "breadth": 1, - "buildPoints": 600, - "buildPower": 450, + "buildPoints": 350, + "buildPower": 130, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 350, "id": "Emplacement-Rail3", "name": "Gauss Cannon Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLHARDPT.PIE" ], @@ -1361,10 +1361,10 @@ "width": 1 }, "Emplacement-RotHow": { - "armour": 10, + "armour": 12, "breadth": 1, "buildPoints": 600, - "buildPower": 425, + "buildPower": 400, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 200, @@ -1376,7 +1376,7 @@ "structureModel": [ "BLHOWMNT.PIE" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Howitzer03-Rot" @@ -1384,13 +1384,13 @@ "width": 1 }, "Emplacement-RotMor": { - "armour": 10, + "armour": 8, "breadth": 1, "buildPoints": 500, - "buildPower": 325, + "buildPower": 190, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 100, "id": "Emplacement-RotMor", "name": "Pepperpot Pit", "resistance": 150, @@ -1399,7 +1399,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 10, + "thermal": 8, "type": "DEFENSE", "weapons": [ "Mortar3ROTARYMk1" @@ -1407,22 +1407,22 @@ "width": 1 }, "GuardTower-ATMiss": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 450, - "buildPower": 325, + "buildPoints": 350, + "buildPower": 200, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 400, "id": "GuardTower-ATMiss", "name": "Scourge Missile Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.pie" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Missile-A-T" @@ -1430,22 +1430,22 @@ "width": 1 }, "GuardTower-BeamLas": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 400, + "buildPoints": 310, "buildPower": 175, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 400, "id": "GuardTower-BeamLas", "name": "*GuardTower-BeamLas*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.pie" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Laser3BEAMMk1" @@ -1453,22 +1453,22 @@ "width": 1 }, "GuardTower-Rail1": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 400, - "buildPower": 275, + "buildPoints": 330, + "buildPower": 175, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 400, "id": "GuardTower-Rail1", "name": "Needle Gun Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.pie" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "RailGun1Mk1" @@ -1476,22 +1476,22 @@ "width": 1 }, "GuardTower-RotMg": { - "armour": 20, + "armour": 12, "breadth": 1, - "buildPoints": 400, + "buildPoints": 300, "buildPower": 150, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 500, + "hitpoints": 400, "id": "GuardTower-RotMg", "name": "Assault Gun Guard Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "blguardr.pie" ], - "thermal": 20, + "thermal": 12, "type": "DEFENSE", "weapons": [ "MG4ROTARYMk1" @@ -1501,8 +1501,8 @@ "GuardTower1": { "armour": 8, "breadth": 1, - "buildPoints": 300, - "buildPower": 120, + "buildPoints": 250, + "buildPower": 80, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -1524,8 +1524,8 @@ "GuardTower1MG": { "armour": 8, "breadth": 1, - "buildPoints": 300, - "buildPower": 100, + "buildPoints": 200, + "buildPower": 60, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 210, @@ -1547,8 +1547,8 @@ "GuardTower2": { "armour": 8, "breadth": 1, - "buildPoints": 300, - "buildPower": 110, + "buildPoints": 225, + "buildPower": 70, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 230, @@ -1570,8 +1570,8 @@ "GuardTower3": { "armour": 8, "breadth": 1, - "buildPoints": 300, - "buildPower": 120, + "buildPoints": 250, + "buildPower": 80, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -1591,10 +1591,10 @@ "width": 1 }, "GuardTower3H": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 350, - "buildPower": 140, + "buildPoints": 300, + "buildPower": 125, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 400, @@ -1602,11 +1602,11 @@ "name": "Hardened Heavy Machinegun Guard Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.PIE" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "MG3-Tower" @@ -1614,13 +1614,13 @@ "width": 1 }, "GuardTower4": { - "armour": 8, + "armour": 6, "breadth": 1, - "buildPoints": 300, - "buildPower": 100, + "buildPoints": 225, + "buildPower": 70, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 230, "id": "GuardTower4", "name": "Flamer Guard Tower", "resistance": 150, @@ -1629,7 +1629,7 @@ "structureModel": [ "BLGUARDM.PIE" ], - "thermal": 8, + "thermal": 6, "type": "DEFENSE", "weapons": [ "Flame1Mk1-Tower" @@ -1637,10 +1637,10 @@ "width": 1 }, "GuardTower4H": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 400, - "buildPower": 140, + "buildPoints": 325, + "buildPower": 125, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 400, @@ -1648,11 +1648,11 @@ "name": "Hardened Flamer Guard Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.PIE" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Flame1Mk1-Tower" @@ -1660,10 +1660,10 @@ "width": 1 }, "GuardTower5": { - "armour": 15, + "armour": 12, "breadth": 1, "buildPoints": 350, - "buildPower": 150, + "buildPower": 200, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 400, @@ -1671,11 +1671,11 @@ "name": "Lancer Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Rocket-LtA-T" @@ -1683,10 +1683,10 @@ "width": 1 }, "GuardTower6": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 325, + "buildPower": 150, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 400, @@ -1694,11 +1694,11 @@ "name": "Mini-Rocket Guard Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Rocket-Pod" @@ -1728,10 +1728,10 @@ "armour": 15, "breadth": 1, "buildPoints": 125, - "buildPower": 25, + "buildPower": 15, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 300, "id": "NEXUSCWall", "name": "NEXUS CWall", "sensorID": "ZNULLSENSOR", @@ -1747,10 +1747,10 @@ "armour": 15, "breadth": 1, "buildPoints": 125, - "buildPower": 25, + "buildPower": 15, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 250, + "hitpoints": 300, "id": "NEXUSWall", "name": "NEXUS Wall", "sensorID": "ZNULLSENSOR", @@ -1803,16 +1803,16 @@ "NX-Emp-MedArtMiss-Pit": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 700, + "buildPower": 450, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 150, "id": "NX-Emp-MedArtMiss-Pit", "name": "*NX-Emp-MedArtMiss-Pit*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLHARDPT.PIE" ], @@ -1826,16 +1826,16 @@ "NX-Emp-MultiArtMiss-Pit": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 700, + "buildPower": 525, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 150, "id": "NX-Emp-MultiArtMiss-Pit", "name": "*NX-Emp-MultiArtMiss-Pit*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLHARDPT.PIE" ], @@ -1849,16 +1849,16 @@ "NX-Emp-Plasma-Pit": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 800, + "buildPower": 600, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 400, "id": "NX-Emp-Plasma-Pit", "name": "*NX-Emp-Plasma-Pit*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "Blaamnt2.PIE" ], @@ -1872,16 +1872,16 @@ "NX-Tower-ATMiss": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 40, + "buildPoints": 350, + "buildPower": 200, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 400, "id": "NX-Tower-ATMiss", "name": "*NX-Tower-ATMiss*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blgrdnex.PIE" ], @@ -1895,16 +1895,16 @@ "NX-Tower-PulseLas": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 40, + "buildPoints": 300, + "buildPower": 200, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 400, "id": "NX-Tower-PulseLas", "name": "*NX-Tower-PulseLas*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blgrdnex.PIE" ], @@ -1918,16 +1918,16 @@ "NX-Tower-Rail1": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 40, + "buildPoints": 330, + "buildPower": 175, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 300, + "hitpoints": 400, "id": "NX-Tower-Rail1", "name": "*NX-Tower-Rail1*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blgrdnex.PIE" ], @@ -1941,12 +1941,12 @@ "NX-WallTower-BeamLas": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 525, + "buildPower": 225, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 750, "id": "NX-WallTower-BeamLas", "name": "*NX-WallTower-BeamLas*", "resistance": 150, @@ -1965,12 +1965,12 @@ "NX-WallTower-Rail2": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 550, + "buildPower": 275, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 750, "id": "NX-WallTower-Rail2", "name": "*NX-WallTower-Rail2*", "resistance": 150, @@ -1989,12 +1989,12 @@ "NX-WallTower-Rail3": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 600, + "buildPower": 300, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 750, "id": "NX-WallTower-Rail3", "name": "*NX-WallTower-Rail3*", "resistance": 150, @@ -2030,22 +2030,22 @@ "width": 2 }, "P0-AASite-SAM1": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 450, + "buildPoints": 500, "buildPower": 250, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 200, + "hitpoints": 300, "id": "P0-AASite-SAM1", "name": "Avenger SAM Site", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "Blaamnt1.PIE" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Missile-LtSAM" @@ -2053,10 +2053,10 @@ "width": 1 }, "P0-AASite-SAM2": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 550, - "buildPower": 350, + "buildPoints": 600, + "buildPower": 300, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 300, @@ -2064,11 +2064,11 @@ "name": "Vindicator SAM Site", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "Blaamnt2.PIE" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Missile-HvySAM" @@ -2078,8 +2078,8 @@ "PillBox1": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 800, + "buildPower": 340, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2101,8 +2101,8 @@ "PillBox2": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 800, + "buildPower": 340, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2124,8 +2124,8 @@ "PillBox3": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 800, + "buildPower": 340, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2147,8 +2147,8 @@ "PillBox4": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 125, + "buildPoints": 825, + "buildPower": 360, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2170,8 +2170,8 @@ "PillBox5": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 825, + "buildPower": 360, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2193,8 +2193,8 @@ "PillBox6": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 850, + "buildPower": 380, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2216,8 +2216,8 @@ "Pillbox-RotMG": { "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 850, + "buildPower": 360, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 500, @@ -2239,11 +2239,11 @@ "Sys-CB-Tower01": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 450, + "buildPower": 300, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 450, "id": "Sys-CB-Tower01", "name": "CB Tower", "resistance": 150, @@ -2259,11 +2259,11 @@ "Sys-NEXUSLinkTOW": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 450, + "buildPower": 350, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 550, "id": "Sys-NEXUSLinkTOW", "name": "*Sys-NEXUSLinkTOW*", "sensorID": "NavGunSensor", @@ -2281,11 +2281,11 @@ "Sys-NX-CBTower": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 350, + "buildPower": 350, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 550, "id": "Sys-NX-CBTower", "name": "*Sys-NX-CBTower*", "resistance": 150, @@ -2301,11 +2301,11 @@ "Sys-NX-SensorTower": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 350, + "buildPower": 350, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 550, "id": "Sys-NX-SensorTower", "name": "*Sys-NX-SensorTower*", "resistance": 150, @@ -2321,11 +2321,11 @@ "Sys-NX-VTOL-CB-Tow": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 350, + "buildPower": 350, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 550, "id": "Sys-NX-VTOL-CB-Tow", "name": "*Sys-NX-VTOL-CB-Tow*", "resistance": 150, @@ -2341,11 +2341,11 @@ "Sys-NX-VTOL-RadTow": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 350, + "buildPower": 350, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 550, "id": "Sys-NX-VTOL-RadTow", "name": "*Sys-NX-VTOL-RadTow*", "resistance": 150, @@ -2362,10 +2362,10 @@ "armour": 10, "breadth": 1, "buildPoints": 300, - "buildPower": 60, + "buildPower": 150, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 300, + "hitpoints": 350, "id": "Sys-SensoTower01", "name": "Sensor Tower", "resistance": 150, @@ -2381,11 +2381,11 @@ "Sys-SensoTower02": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 450, + "buildPower": 300, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 450, "id": "Sys-SensoTower02", "name": "Hardened Sensor Tower", "resistance": 150, @@ -2401,11 +2401,11 @@ "Sys-VTOL-CB-Tower01": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 450, + "buildPower": 300, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 450, "id": "Sys-VTOL-CB-Tower01", "name": "VTOL CB Tower", "resistance": 150, @@ -2421,11 +2421,11 @@ "Sys-VTOL-RadarTower01": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 450, + "buildPower": 300, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 400, + "hitpoints": 450, "id": "Sys-VTOL-RadarTower01", "name": "VTOL Radar Tower", "resistance": 150, @@ -2441,15 +2441,15 @@ "TankTrapC": { "armour": 10, "breadth": 1, - "buildPoints": 200, - "buildPower": 15, + "buildPoints": 40, + "buildPower": 5, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 100, + "hitpoints": 150, "id": "TankTrapC", "name": "Tank Traps", "sensorID": "ZNULLSENSOR", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "MITRAP2.PIE" ], @@ -2458,13 +2458,13 @@ "width": 1 }, "Tower-Projector": { - "armour": 15, + "armour": 10, "breadth": 1, - "buildPoints": 100, - "buildPower": 130, + "buildPoints": 250, + "buildPower": 110, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 350, "id": "Tower-Projector", "name": "Inferno Emplacement", "resistance": 150, @@ -2473,7 +2473,7 @@ "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 15, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Flame2" @@ -2481,10 +2481,10 @@ "width": 1 }, "Tower-RotMg": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 100, - "buildPower": 125, + "buildPoints": 300, + "buildPower": 150, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 400, @@ -2492,11 +2492,11 @@ "name": "Assault Gun Guard Tower 2", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.PIE" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "MG4ROTARYMk1" @@ -2504,10 +2504,10 @@ "width": 1 }, "Tower-VulcanCan": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 100, - "buildPower": 225, + "buildPoints": 325, + "buildPower": 175, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 400, @@ -2515,11 +2515,11 @@ "name": "Assault Cannon Guard Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLGUARDR.PIE" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Cannon4AUTOMk1" @@ -2548,12 +2548,12 @@ "Wall-RotMg": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 500, + "buildPower": 200, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "Wall-RotMg", "name": "Assault Gun Hardpoint", "resistance": 150, @@ -2572,12 +2572,12 @@ "Wall-VulcanCan": { "armour": 15, "breadth": 1, - "buildPoints": 400, + "buildPoints": 575, "buildPower": 250, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "Wall-VulcanCan", "name": "Assault Cannon Hardpoint", "resistance": 150, @@ -2596,12 +2596,12 @@ "WallTower-Atmiss": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 350, + "buildPoints": 600, + "buildPower": 300, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower-Atmiss", "name": "Scourge Missile Hardpoint", "resistance": 150, @@ -2620,12 +2620,12 @@ "WallTower-HPVcannon": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 225, + "buildPoints": 550, + "buildPower": 250, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower-HPVcannon", "name": "Hyper Velocity Cannon Hardpoint", "resistance": 150, @@ -2644,12 +2644,12 @@ "WallTower-HvATrocket": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 300, + "buildPoints": 550, + "buildPower": 275, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower-HvATrocket", "name": "Tank Killer Hardpoint", "resistance": 150, @@ -2666,10 +2666,10 @@ "width": 1 }, "WallTower-Projector": { - "armour": 15, + "armour": 10, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 250, + "buildPower": 130, "ecmID": "ZNULLECM", "height": 1, "hitpoints": 400, @@ -2681,7 +2681,7 @@ "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 15, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Flame2" @@ -2691,12 +2691,12 @@ "WallTower-PulseLas": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 250, + "buildPoints": 525, + "buildPower": 225, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower-PulseLas", "name": "Flashlight Hardpoint", "resistance": 150, @@ -2715,12 +2715,12 @@ "WallTower-Rail2": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 350, + "buildPoints": 550, + "buildPower": 275, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower-Rail2", "name": "Rail Gun Hardpoint", "resistance": 150, @@ -2739,12 +2739,12 @@ "WallTower-Rail3": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 400, + "buildPoints": 600, + "buildPower": 300, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower-Rail3", "name": "Gauss Cannon Hardpoint", "resistance": 150, @@ -2763,12 +2763,12 @@ "WallTower01": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 500, + "buildPower": 175, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower01", "name": "Heavy Machinegun Hardpoint", "resistance": 150, @@ -2787,12 +2787,12 @@ "WallTower02": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 125, + "buildPoints": 525, + "buildPower": 175, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower02", "name": "Light Cannon Hardpoint", "resistance": 150, @@ -2811,12 +2811,12 @@ "WallTower03": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 175, + "buildPoints": 550, + "buildPower": 200, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower03", "name": "Medium Cannon Hardpoint", "resistance": 150, @@ -2835,12 +2835,12 @@ "WallTower04": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 250, + "buildPoints": 575, + "buildPower": 225, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower04", "name": "Heavy Cannon Hardpoint", "resistance": 150, @@ -2859,12 +2859,12 @@ "WallTower05": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 100, + "buildPoints": 500, + "buildPower": 175, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower05", "name": "Flamer Hardpoint", "resistance": 150, @@ -2883,12 +2883,12 @@ "WallTower06": { "armour": 15, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 600, + "buildPower": 250, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 400, + "hitpoints": 650, "id": "WallTower06", "name": "Lancer Hardpoint", "resistance": 150, diff --git a/data/base/stats/structuremodifier.json b/data/base/stats/structuremodifier.json index 42045ea18e7..5b1aa61f9c5 100644 --- a/data/base/stats/structuremodifier.json +++ b/data/base/stats/structuremodifier.json @@ -1,15 +1,15 @@ { "ALL ROUNDER": { - "BUNKER": 40, - "HARD": 60, - "MEDIUM": 80, - "SOFT": 115 + "BUNKER": 45, + "HARD": 65, + "MEDIUM": 85, + "SOFT": 125 }, "ANTI PERSONNEL": { - "BUNKER": 20, + "BUNKER": 25, "HARD": 40, "MEDIUM": 70, - "SOFT": 100 + "SOFT": 80 }, "ANTI TANK": { "BUNKER": 25, @@ -18,7 +18,7 @@ "SOFT": 100 }, "ARTILLERY ROUND": { - "BUNKER": 50, + "BUNKER": 55, "HARD": 75, "MEDIUM": 100, "SOFT": 200 diff --git a/data/base/stats/templates.json b/data/base/stats/templates.json index d6d211b67df..cc71849541d 100644 --- a/data/base/stats/templates.json +++ b/data/base/stats/templates.json @@ -970,7 +970,7 @@ "type": "DROID" }, "NX-Cyb-Miss-JUMP": { - "body": "CyborgLightBody", + "body": "CybNXMissJmp", "id": "NX-Cyb-Miss-JUMP", "name": "*NX-Cyb-Miss-JUMP*", "propulsion": "CyborgLegs", @@ -981,7 +981,7 @@ ] }, "NX-Cyb-PulseLas-JUMP": { - "body": "CyborgLightBody", + "body": "CybNXPulseLasJmp", "id": "NX-Cyb-PulseLas-JUMP", "name": "*NX-Cyb-PulseLas-JUMP*", "propulsion": "CyborgLegs", @@ -992,7 +992,7 @@ ] }, "NX-Cyb-Rail1-JUMP": { - "body": "CyborgLightBody", + "body": "CybNXRail1Jmp", "id": "NX-Cyb-Rail1-JUMP", "name": "*NX-Cyb-JUMP*", "propulsion": "CyborgLegs", diff --git a/data/base/stats/weapons.json b/data/base/stats/weapons.json index 9f297c1ce83..9046a7779e3 100644 --- a/data/base/stats/weapons.json +++ b/data/base/stats/weapons.json @@ -746,7 +746,7 @@ "Bomb1-VTOL-LtHE": { "buildPoints": 600, "buildPower": 150, - "damage": 100, + "damage": 250, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", @@ -760,7 +760,7 @@ "lightWorld": 1, "longHit": 70, "longRange": 512, - "minElevation": -80, + "minElevation": 0, "minimumDamage": 33, "missGfx": "FXLExp.PIE", "mountModel": "trlvtlhe.PIE", @@ -802,7 +802,7 @@ "lightWorld": 1, "longHit": 70, "longRange": 512, - "minElevation": -80, + "minElevation": 0, "minimumDamage": 33, "missGfx": "FXLExp.PIE", "mountModel": "trmvtlhe.PIE", @@ -811,7 +811,7 @@ "name": "VTOL Heap Bomb Bay", "numAttackRuns": 1, "numExplosions": 1, - "numRounds": 2, + "numRounds": 4, "radius": 192, "radiusDamage": 250, "radiusLife": 10, @@ -825,12 +825,12 @@ "weaponEffect": "ARTILLERY ROUND", "weaponSubClass": "BOMB", "weaponWav": "hwtzflgt.ogg", - "weight": 10000 + "weight": 5000 }, "Bomb3-VTOL-LtINC": { "buildPoints": 700, "buildPower": 175, - "damage": 70, + "damage": 180, "designable": 1, "effectSize": 50, "explosionWav": "lrgexpl.ogg", @@ -844,7 +844,7 @@ "lightWorld": 1, "longHit": 70, "longRange": 512, - "minElevation": -80, + "minElevation": 0, "minimumDamage": 33, "missGfx": "FXLExp.PIE", "mountModel": "trlvtlin.PIE", @@ -854,9 +854,9 @@ "numAttackRuns": 1, "numExplosions": 2, "numRounds": 6, - "periodicalDamage": 14, + "periodicalDamage": 90, "periodicalDamageRadius": 192, - "periodicalDamageTime": 50, + "periodicalDamageTime": 100, "recoilValue": 10, "reloadTime": 10, "rotate": 180, @@ -872,7 +872,7 @@ "Bomb4-VTOL-HvyINC": { "buildPoints": 1200, "buildPower": 350, - "damage": 350, + "damage": 300, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", @@ -886,7 +886,7 @@ "lightWorld": 1, "longHit": 70, "longRange": 512, - "minElevation": -80, + "minElevation": 0, "minimumDamage": 33, "missGfx": "FXLExp.PIE", "mountModel": "trmvtlin.PIE", @@ -895,10 +895,10 @@ "name": "VTOL Thermite Bomb Bay", "numAttackRuns": 1, "numExplosions": 1, - "numRounds": 2, - "periodicalDamage": 70, + "numRounds": 3, + "periodicalDamage": 150, "periodicalDamageRadius": 192, - "periodicalDamageTime": 50, + "periodicalDamageTime": 100, "radiusLife": 10, "recoilValue": 10, "reloadTime": 10, @@ -910,13 +910,12 @@ "weaponEffect": "FLAMER", "weaponSubClass": "BOMB", "weaponWav": "hwtzflgt.ogg", - "weight": 9000 + "weight": 5000 }, "Cannon1-VTOL": { "buildPoints": 375, "buildPower": 75, "damage": 60, - "designable": 1, "effectSize": 30, "explosionWav": "smlexpl.ogg", "facePlayer": 1, @@ -1036,6 +1035,49 @@ "weaponWav": "medcan.ogg", "weight": 5000 }, + "Cannon375mm-VTOL": { + "buildPoints": 800, + "buildPower": 200, + "damage": 160, + "designable": 1, + "effectSize": 90, + "explosionWav": "lrgexpl.ogg", + "facePlayer": 1, + "firePause": 40, + "flags": "ShootAir", + "flightGfx": "FXCAmmo.PIE", + "flightSpeed": 1000, + "hitGfx": "FXGRDexl.PIE", + "hitpoints": 10, + "id": "Cannon375mm-VTOL", + "lightWorld": 1, + "longHit": 50, + "longRange": 1024, + "maxElevation": 90, + "minElevation": -60, + "minimumDamage": 33, + "missGfx": "FXGRDexl.PIE", + "model": "GNHCAN.PIE", + "mountModel": "TRHCAN.PIE", + "movement": "DIRECT", + "muzzleGfx": "FxCan75m.PIE", + "name": "VTOL Heavy Cannon", + "numAttackRuns": 6, + "numExplosions": 2, + "radius": 192, + "radiusDamage": 20, + "radiusLife": 100, + "recoilValue": 150, + "rotate": 180, + "shortHit": 70, + "shortRange": 768, + "waterGfx": "FXSSplsh.PIE", + "weaponClass": "KINETIC", + "weaponEffect": "ALL ROUNDER", + "weaponSubClass": "CANNON", + "weaponWav": "lrgcan.ogg", + "weight": 2000 + }, "Cannon375mmMk1": { "buildPoints": 800, "buildPower": 200, @@ -1090,7 +1132,7 @@ "flightGfx": "FXTracer.PIE", "flightSpeed": 1000, "hitGfx": "FXMExp.PIE", - "hitpoints": 10, + "hitpoints": 50, "id": "Cannon4AUTO-VTOL", "lightWorld": 1, "longHit": 50, @@ -1103,7 +1145,7 @@ "movement": "DIRECT", "muzzleGfx": "FXCan20A.PIE", "name": "VTOL Hyper Velocity Cannon", - "numAttackRuns": 4, + "numAttackRuns": 6, "numExplosions": 2, "radius": 96, "radiusDamage": 10, @@ -1163,12 +1205,12 @@ "Cannon5Vulcan-VTOL": { "buildPoints": 800, "buildPower": 200, - "damage": 150, + "damage": 175, "designable": 1, "effectSize": 50, "explosionWav": "smlexpl.ogg", "facePlayer": 1, - "firePause": 12, + "firePause": 8, "flags": "ShootAir", "flightGfx": "FXTracer.PIE", "flightSpeed": 1000, @@ -1186,7 +1228,7 @@ "movement": "DIRECT", "muzzleGfx": "FXVulCan.PIE", "name": "VTOL Assault Cannon", - "numAttackRuns": 4, + "numAttackRuns": 6, "numExplosions": 2, "radius": 96, "recoilValue": 25, @@ -1203,7 +1245,7 @@ "Cannon5VulcanMk1": { "buildPoints": 800, "buildPower": 200, - "damage": 50, + "damage": 52, "designable": 1, "effectSize": 50, "explosionWav": "smlexpl.ogg", @@ -1316,7 +1358,7 @@ "Cyb-Wpn-Laser": { "buildPoints": 600, "buildPower": 150, - "damage": 120, + "damage": 156, "effectSize": 100, "explosionWav": "lsrexpl.ogg", "facePlayer": 1, @@ -1701,7 +1743,7 @@ "Howitzer03-Rot": { "buildPoints": 1600, "buildPower": 400, - "damage": 80, + "damage": 120, "designable": 1, "effectSize": 200, "explosionWav": "lrgexpl.ogg", @@ -1727,15 +1769,21 @@ "name": "Hellstorm", "numExplosions": 2, "numRounds": 3, - "radius": 160, - "radiusDamage": 100, + "periodicalDamage": 60, + "periodicalDamageRadius": 192, + "periodicalDamageTime": 60, + "periodicalDamageWeaponClass": "HEAT", + "periodicalDamageWeaponEffect": "FLAMER", + "periodicalDamageWeaponSubClass": "HOWITZERS", + "radius": 192, + "radiusDamage": 120, "radiusLife": 10, "recoilValue": 250, "reloadTime": 150, "shortHit": 60, "shortRange": 1920, "waterGfx": "FXLSplsh.PIE", - "weaponClass": "KINETIC", + "weaponClass": "HEAT", "weaponEffect": "ARTILLERY ROUND", "weaponSubClass": "HOWITZERS", "weaponWav": "lrgcan.ogg", @@ -1785,7 +1833,7 @@ "Howitzer150Mk1": { "buildPoints": 1250, "buildPower": 350, - "damage": 150, + "damage": 190, "designable": 1, "effectSize": 200, "explosionWav": "lrgexpl.ogg", @@ -1811,7 +1859,7 @@ "name": "Ground Shaker", "numExplosions": 2, "radius": 160, - "radiusDamage": 185, + "radiusDamage": 240, "radiusLife": 10, "recoilValue": 240, "shortHit": 60, @@ -1826,7 +1874,7 @@ "LasSat": { "buildPoints": 500, "buildPower": 100, - "damage": 4000, + "damage": 5000, "effectSize": 100, "explosionWav": "lsrexpl.ogg", "facePlayer": 1, @@ -1853,7 +1901,7 @@ "periodicalDamageRadius": 425, "periodicalDamageTime": 50, "radius": 256, - "radiusDamage": 3000, + "radiusDamage": 4000, "rotate": 180, "shortHit": 70, "shortRange": 640, @@ -1867,7 +1915,7 @@ "Laser2PULSE-VTOL": { "buildPoints": 800, "buildPower": 200, - "damage": 480, + "damage": 312, "designable": 1, "effectSize": 100, "explosionWav": "lsrexpl.ogg", @@ -1890,7 +1938,7 @@ "movement": "DIRECT", "muzzleGfx": "FXLasRot.PIE", "name": "VTOL Pulse Laser", - "numAttackRuns": 2, + "numAttackRuns": 6, "numExplosions": 1, "recoilValue": 15, "rotate": 180, @@ -1906,7 +1954,7 @@ "Laser2PULSEMk1": { "buildPoints": 800, "buildPower": 200, - "damage": 240, + "damage": 312, "designable": 1, "effectSize": 100, "explosionWav": "lsrexpl.ogg", @@ -1944,7 +1992,7 @@ "Laser3BEAM-VTOL": { "buildPoints": 600, "buildPower": 150, - "damage": 240, + "damage": 156, "designable": 1, "effectSize": 100, "explosionWav": "lsrexpl.ogg", @@ -1967,7 +2015,7 @@ "movement": "DIRECT", "muzzleGfx": "FXHBLas.PIE", "name": "VTOL Flashlight", - "numAttackRuns": 2, + "numAttackRuns": 6, "numExplosions": 1, "recoilValue": 10, "rotate": 180, @@ -1983,7 +2031,7 @@ "Laser3BEAMMk1": { "buildPoints": 600, "buildPower": 150, - "damage": 120, + "damage": 156, "designable": 1, "effectSize": 100, "explosionWav": "lsrexpl.ogg", @@ -2398,7 +2446,7 @@ "movement": "DIRECT", "muzzleGfx": "FXMgnVic.PIE", "name": "VTOL Heavy Machinegun", - "numAttackRuns": 4, + "numAttackRuns": 8, "numExplosions": 1, "recoilValue": 20, "rotate": 180, @@ -2505,7 +2553,7 @@ "movement": "DIRECT", "muzzleGfx": "FXMgnVul.PIE", "name": "VTOL Assault Gun", - "numAttackRuns": 6, + "numAttackRuns": 12, "numExplosions": 1, "recoilValue": 30, "rotate": 180, @@ -2776,7 +2824,7 @@ "Missile-VTOL-AT": { "buildPoints": 1200, "buildPower": 300, - "damage": 860, + "damage": 430, "designable": 1, "effectSize": 50, "explosionWav": "smlexpl.ogg", @@ -2800,14 +2848,14 @@ "movement": "HOMING-DIRECT", "muzzleGfx": "FXMRocAt.PIE", "name": "VTOL Scourge Missile", - "numAttackRuns": 1, + "numAttackRuns": 3, "numExplosions": 2, "numRounds": 2, "radius": 64, "radiusDamage": 20, "radiusLife": 10, "recoilValue": 20, - "reloadTime": 180, + "reloadTime": 40, "rotate": 180, "shortHit": 70, "shortRange": 640, @@ -2903,7 +2951,7 @@ "Mortar3ROTARYMk1": { "buildPoints": 900, "buildPower": 300, - "damage": 50, + "damage": 55, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", @@ -3090,7 +3138,7 @@ "NX-CyborgPulseLas": { "buildPoints": 375, "buildPower": 125, - "damage": 240, + "damage": 312, "effectSize": 100, "explosionWav": "lsrexpl.ogg", "facePlayer": 1, @@ -3257,7 +3305,7 @@ "RailGun1-VTOL": { "buildPoints": 1000, "buildPower": 250, - "damage": 400, + "damage": 200, "designable": 1, "effectSize": 75, "explosionWav": "smlexpl.ogg", @@ -3279,7 +3327,7 @@ "movement": "DIRECT", "muzzleGfx": "FXLGauss.PIE", "name": "VTOL Needle Gun", - "numAttackRuns": 4, + "numAttackRuns": 12, "numExplosions": 1, "rotate": 180, "shortHit": 80, @@ -3330,7 +3378,7 @@ "RailGun2-VTOL": { "buildPoints": 1200, "buildPower": 300, - "damage": 600, + "damage": 300, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", @@ -3352,7 +3400,7 @@ "movement": "DIRECT", "muzzleGfx": "FXMGauss.PIE", "name": "VTOL Rail Gun", - "numAttackRuns": 4, + "numAttackRuns": 12, "numExplosions": 1, "rotate": 180, "shortHit": 80, @@ -3483,7 +3531,7 @@ "Rocket-HvyA-T": { "buildPoints": 1250, "buildPower": 250, - "damage": 180, + "damage": 185, "designable": 1, "effectSize": 75, "explosionWav": "lrgexpl.ogg", @@ -3690,9 +3738,9 @@ "weight": 200 }, "Rocket-VTOL-BB": { - "buildPoints": 750, - "buildPower": 150, - "damage": 250, + "buildPoints": 1400, + "buildPower": 375, + "damage": 125, "designable": 1, "effectSize": 25, "explosionWav": "smlexpl.ogg", @@ -3716,7 +3764,7 @@ "movement": "DIRECT", "muzzleGfx": "FXLRocPd.PIE", "name": "VTOL Bunker Buster", - "numAttackRuns": 2, + "numAttackRuns": 6, "numExplosions": 2, "radiusLife": 10, "rotate": 180, @@ -3732,7 +3780,7 @@ "Rocket-VTOL-HvyA-T": { "buildPoints": 1250, "buildPower": 250, - "damage": 360, + "damage": 277, "designable": 1, "effectSize": 75, "explosionWav": "lrgexpl.ogg", @@ -3742,7 +3790,7 @@ "flightGfx": "FXMPLME.PIE", "flightSpeed": 1000, "hitGfx": "FXMExp.PIE", - "hitpoints": 5, + "hitpoints": 50, "id": "Rocket-VTOL-HvyA-T", "lightWorld": 1, "longHit": 60, @@ -3757,11 +3805,11 @@ "movement": "DIRECT", "muzzleGfx": "FXMRocAt.PIE", "name": "VTOL Tank Killer", - "numAttackRuns": 1, + "numAttackRuns": 3, "numExplosions": 2, "numRounds": 2, "radiusLife": 10, - "reloadTime": 160, + "reloadTime": 20, "rotate": 180, "shortHit": 65, "shortRange": 512, @@ -3775,7 +3823,7 @@ "Rocket-VTOL-LtA-T": { "buildPoints": 500, "buildPower": 100, - "damage": 240, + "damage": 160, "designable": 1, "effectSize": 50, "explosionWav": "smlexpl.ogg", @@ -3785,7 +3833,7 @@ "flightGfx": "FXMPLME.PIE", "flightSpeed": 1200, "hitGfx": "FXGRDexl.PIE", - "hitpoints": 5, + "hitpoints": 50, "id": "Rocket-VTOL-LtA-T", "lightWorld": 1, "longHit": 60, @@ -3800,11 +3848,11 @@ "movement": "DIRECT", "muzzleGfx": "FXMRocAt.PIE", "name": "VTOL Lancer", - "numAttackRuns": 1, + "numAttackRuns": 3, "numExplosions": 2, "numRounds": 2, "radiusLife": 10, - "reloadTime": 120, + "reloadTime": 20, "rotate": 180, "shortHit": 65, "shortRange": 512, @@ -3818,8 +3866,7 @@ "Rocket-VTOL-Pod": { "buildPoints": 375, "buildPower": 75, - "damage": 60, - "designable": 1, + "damage": 30, "effectSize": 25, "explosionWav": "smlexpl.ogg", "faceInFlight": 1, @@ -3844,7 +3891,7 @@ "movement": "DIRECT", "muzzleGfx": "FXLRocPd.PIE", "name": "VTOL Mini-Rocket", - "numAttackRuns": 4, + "numAttackRuns": 12, "numExplosions": 2, "radiusLife": 10, "recoilValue": 10, diff --git a/data/base/wrf/cam2/sub2-8/labels.json b/data/base/wrf/cam2/sub2-8/labels.json index aa2e6e34d36..338603031a6 100644 --- a/data/base/wrf/cam2/sub2-8/labels.json +++ b/data/base/wrf/cam2/sub2-8/labels.json @@ -71,7 +71,7 @@ }, "area_1": { "label": "RTLZ", - "pos1": [5504, 5504], + "pos1": [5504, 5888], "pos2": [7808, 7808] }, "area_2": { diff --git a/data/base/wrf/cam3/sub3-2/labels.json b/data/base/wrf/cam3/sub3-2/labels.json index 17f10c5dc69..451759d322b 100644 --- a/data/base/wrf/cam3/sub3-2/labels.json +++ b/data/base/wrf/cam3/sub3-2/labels.json @@ -145,6 +145,12 @@ "player": 3, "type": 0 }, + "object_1": { + "label": "NXvtolStrikeTower", + "id": 350, + "player": 3, + "type": 1 + }, "radius_0": { "label": "vtolRemoveZone",