diff --git a/src/SpecialForce/Firebase.tw b/src/SpecialForce/Firebase.tw index aac416bc94a9b46ee32ce1e9a3eed49e85b0427d..99719e7385c19691bed1e195c6dacaf81a13088a 100644 --- a/src/SpecialForce/Firebase.tw +++ b/src/SpecialForce/Firebase.tw @@ -176,7 +176,11 @@ <</if>> <<if _T1 && _LB> 0>> <br><br>''Launch Bay:'' <<if $SF.Squad.Satellite.lv > 0>> <<= App.SF.UnitText('sat')>> - <<if $SF.Squad.Satellite.InOrbit < 1>> <br> [[Launch it into geostationary orbit.|Firebase][$SF.Squad.Satellite.InOrbit=1]] //You <span class='red'>cannot</span> upgrade the satellite once it has been launched.// <</if>> + <<if $SF.Squad.Satellite.InOrbit < 1>> + <br> [[Launch it into geostationary orbit.|Firebase][$SF.Squad.Satellite.InOrbit = 1]] //You <span class='red'>cannot</span> upgrade the satellite once it has been launched.// + <<else>> + <br> [[Recall the satellite.|Firebase][$SF.Squad.Satellite.InOrbit = 0]] + <</if>> <</if>> <<= App.SF.UnitText('GR')>> <<= App.SF.UnitText('ms')>> <</if>> diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js index 8b7c29d7c7d5a35f200068eaa9a6fa628a1d35f8..f1eb81f911bd6d0d04e87daa432d87bd497e806e 100644 --- a/src/SpecialForce/SpecialForce.js +++ b/src/SpecialForce/SpecialForce.js @@ -3098,6 +3098,14 @@ App.SF.UnitText = function(input) { power1 = ``, scramble1 = ``; + if (V.week % 6 === 0) { + const loc2 = `is moored to the pier in the Naval Yard`; + const loc3 = `is parked on the pier of the Naval Yard, ready to ferry ${tons} tons of soldiers and vehicles`; + } else { + const loc2 = `is patrolling the waters near ${V.arcologies[0].name}`; + const loc3 = `is patrolling the waters near ${V.arcologies[0].name}`; + } + let recom = `has been recommissioned from the old world, and`; let reactor0 = `Because diesel engines provide power and breathing oxygen is kept in pressurized canisters, the sub must frequently surface.`; let reactor1 = ``, @@ -3128,29 +3136,29 @@ App.SF.UnitText = function(input) { const text0 = `<br>''Firebase:''`; if (S.Firebase >= 1) { appear = `has had some organization put into it.`; + barracks = `The majority of weapons, armor, and ammunition have been separated from the soldiers' cots into their own armory.`; + garage = `A section near the outer wall of the arcology has been converted to a garage with an adjoining vehicle maintenance bay`; + drone = `.`; } - barracks = `The majority of weapons, armor, and ammunition have been separated from the soldiers' cots into their own armory.`; - garage = `A section near the outer wall of the arcology has been converted to a garage with an adjoining vehicle maintenance bay`; - drone = `.`; if (V.terrain === "oceanic") { garage += ` for inter-arcology travel`; } if (S.Firebase >= 2) { barracks = `A barracks has been constructed near the armory, allowing soldiers a quieter place to sleep and store their personal spoils.`; + drone = `; as well as a facility for the storage, maintenance, and deployment of armed combat drones.`; } - drone = `; as well as a facility for the storage, maintenance, and deployment of armed combat drones.`; if (S.Firebase >= 3) { appear = `has become more permanent.`; + barracks = `A command center has been constructed near the barracks and armory, allowing for additional support personnel.`; } - barracks = `A command center has been constructed near the barracks and armory, allowing for additional support personnel.`; if (S.Firebase >= 4) { hangar = `Hangar space for storing and repairing aircraft has been converted from unused space on the other side of the garage.`; } if (S.Firebase >= 5) { appear = `is nearing the appearance of a military base.`; + launch = `The rest of the firebase has been designated for special projects.`; + artillery = `Artillery batteries are set around the base of the arcology.`; } - launch = `The rest of the firebase has been designated for special projects.`; - artillery = `Artillery batteries are set around the base of the arcology.`; if (V.terrain === "oceanic" || V.terrain === "marine") { launch += ` A Naval Yard has been constructed in the waters near the arcology.`; } @@ -3267,17 +3275,17 @@ App.SF.UnitText = function(input) { const text4 = `\n\n''Drone Bay:''`; if (S.Drones >= 2) { a = `equipped with missiles are resting on one side of the drone bay`; + b = `; as well as destroying the occasional target.`; } - b = `; as well as destroying the occasional target.`; if (S.Drones >= 3) { c = `A fleet of`; + d = `large delivery quadcopters have been converted for military service to support ground forces as combat drones.`; } - d = `large delivery quadcopters have been converted for military service to support ground forces as combat drones.`; if (S.Drones >= 4) { d = `combat drones take up the rest of the space in the drone bay. They have a`; + e = `small automatic rifle`; + f = `mounted to the underside.`; } - e = `small automatic rifle`; - f = `mounted to the underside.`; if (S.Drones >= 5) { g = `Armor has been added to protect vulnerable components from small arms fire.`; } @@ -3304,9 +3312,9 @@ App.SF.UnitText = function(input) { const text5 = `<br> ''Assault:''`; if (S.AV >= 2) { engine1 = `The engine1 has been overhauled, allowing much faster maneuvering around the battlefield.`; + activate = ``; + mechanics = ``; } - activate = ``; - mechanics = ``; if (S.AV >= 3) { armor2 = `A composite ceramic armor has replaced the original, offering much greater protection from attacks.`; } @@ -3318,10 +3326,10 @@ App.SF.UnitText = function(input) { } if (S.AV >= 6) { fireC0 = `A fire-control system`; + fireC3 = `been installed, guaranteeing`; + fireC2 = `has`; + fireC1 = `accurate fire.`; } - fireC3 = `been installed, guaranteeing`; - fireC2 = `has`; - fireC1 = `accurate fire.`; if (S.AV >= 7) { fireC2 = `and an autoloader have`; } @@ -3343,9 +3351,9 @@ App.SF.UnitText = function(input) { const text6 = `<br> ''Transport:''`; if (S.TV >= 2) { engine3 = `${e0} overhauled, allowing for higher mobility.`; + C = ``; + B = ``; } - C = ``; - B = ``; if (S.TV >= 3) { armor3 = `Composite armor has been bolted to the exterior, increasing the survivability of an explosive attack for the crew and passengers.`; } @@ -3354,24 +3362,24 @@ App.SF.UnitText = function(input) { } if (S.TV >= 5) { m1 = `An automatic missile defense system has been installed,`; + m2 = `targeting any guided missiles with laser dazzlers and deploying a smokescreen.`; } - m2 = `targeting any guided missiles with laser dazzlers and deploying a smokescreen.`; if (S.TV >= 6) { pod1 = `An anti-tank missile pod`; + pod2 = `has been installed on the side of the turret.`; } - pod2 = `has been installed on the side of the turret.`; if (S.TV >= 7) { G1 = `25`; + G2 = `by attacking enemies through cover and destroying light armor`; } - G2 = `by attacking enemies through cover and destroying light armor`; if (S.TV >= 8) { pod2 = `and an anti-aircraft missile pod have been installed on either side of the turret.`; } if (S.TV >= 9) { squad = `two squads`; + armor3 = ``; + m2 = `destroying any incoming missiles with a high-powered laser. Some of the now redundant composite armor has been removed, and the reclaimed space allows for more passengers.`; } - armor3 = ``; - m2 = `destroying any incoming missiles with a high-powered laser. Some of the now redundant composite armor has been removed, and the reclaimed space allows for more passengers.`; if (S.TV >= 10) { engine3 = `${e0} replaced with the newest model, allowing the vehicle to get in and out of the conflict extremely quickly.`; } @@ -3383,18 +3391,18 @@ App.SF.UnitText = function(input) { const text7 = `<br> ''Prototype Goliath Tank:''`; if (S.PGT >= 2) { c1 = `rests in`; + b1 = ``; + engines4 = ` and powered by their own engine, allowing the tank to travel with an unsettling speed for its massive bulk`; } - b1 = ``; - engines4 = ` and powered by their own engine, allowing the tank to travel with an unsettling speed for its massive bulk`; if (S.PGT >= 3) { gun0 = `a railgun capable of`; + gun1 = `firing steel slugs`; + gun2 = `through one tank and into another`; } - gun1 = `firing steel slugs`; - gun2 = `through one tank and into another`; if (S.PGT >= 4) { + armor5 = `The armor has been`; armor6 = `reinforced, increasing survivability for the crew inside.`; } - armor5 = `The armor has been`; if (S.PGT >= 5) { cannon = `A coaxial 30mm autocannon has been installed in the turret, along with automated .50 cal machine guns mounted over the front treads.`; } @@ -3405,7 +3413,7 @@ App.SF.UnitText = function(input) { PGTframe = `The frame has been reinforced, allowing the Goliath to carry more armor and guns.`; } if (S.PGT >= 8) { - armor6 = `redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor5-piercing tank rounds.`; + armor6 = `redesigned with sloping and state-of-the-art materials, allowing the Goliath to shrug off even the most advanced armor-piercing tank rounds.`; } if (S.PGT >= 9) { gun1 = `firing guided projectiles`; @@ -3421,10 +3429,10 @@ App.SF.UnitText = function(input) { const text8 = `<br> ''Assault:''`; if (S.AA >= 2) { W1 = `armed`; + W2 = ` and air-to-air missiles,`; + W3 = `a combination that can defend the arcology from enemy aircraft, as well as`; + support = ` support ground troops`; } - W2 = ` and air-to-air missiles,`; - W3 = `a combination that can defend the arcology from enemy aircraft, as well as`; - support = ` support ground troops`; if (S.AA >= 3) { engines = `The engines have been tuned, allowing faster flight with greater acceleration.`; } @@ -3476,16 +3484,16 @@ App.SF.UnitText = function(input) { } if (S.TA >= 8) { capacity = `large platoon or 20`; + engines01 = `Further tweaks to the engine allow for greater lifting capacity.`; } - engines01 = `Further tweaks to the engine allow for greater lifting capacity.`; if (S.TA >= 9) { Radar = `Radar-absorbent materials have replaced the old skin, making it difficult to pick up the VTOL on radar.`; } if (S.TA >= 10) { type = `tiltjet`; + engines01 = ``; + engines0 = `The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`; } - engines01 = ``; - engines0 = `The tiltrotors have been replaced with tiltjets, allowing for much greater airspeed and acceleration.`; return `${text9} A ${Num} of transport ${type} VTOL have been recommissioned for use by ${V.SF.Lower}. The VTOLs are resting on large pads near the base to load either a ${capacity} tons of material. ${engines0} ${engines01} ${Armor} ${landing} ${counter} ${Radar} ${miniguns}`; } break; @@ -3494,8 +3502,8 @@ App.SF.UnitText = function(input) { const text10 = `<br> ''Spaceplane:''`; if (S.SpacePlane >= 2) { b5 = ``; + shield = `The current heat shielding has been upgraded, reducing the likelihood of heat damage during reentry.`; } - shield = `The current heat shielding has been upgraded, reducing the likelihood of heat damage during reentry.`; if (S.SpacePlane >= 3) { engine2 = ` and liquid rocket engines in orbit that can reach an equivalent Mach 18`; } @@ -3529,21 +3537,21 @@ App.SF.UnitText = function(input) { const text11 = `<br> ''Gunship:''`; if (S.GunS >= 2) { b4 = `Infrared sensors have been added for the gunners to better pick targets.`; + activate2 = ``; } - activate2 = ``; if (S.GunS >= 3) { c2 = `The underside of the aircraft has been better armored against small-arms fire`; + countermeasures = `.`; } - countermeasures = `.`; if (S.GunS >= 4) { fuel = `Larger fuel tanks have been installed in the wings and fuselage, allowing the gunship to provide aerial support for longer periods before refueling.`; } if (S.GunS >= 5) { barrels = `25 mm Gatling cannons`; + distance = `; allowing the gunship to eliminate infantry`; + DFA = ` and light vehicles from above`; + autocannon = ` and a 40 mm autocannon are mounted on`; } - distance = `; allowing the gunship to eliminate infantry`; - DFA = ` and light vehicles from above`; - autocannon = ` and a 40 mm autocannon are mounted on`; if (S.GunS >= 6) { gsSpeed = `The engines have been replaced, allowing both faster travel to a target, and slower travel around a target.`; } @@ -3558,8 +3566,8 @@ App.SF.UnitText = function(input) { } if (S.GunS >= 10) { DFA = `; both light and heavy vehicles, and most enemy cover from above`; + autocannon = `; a 40 mm autocannon, and a 105 mm howitzer are mounted on`; } - autocannon = `; a 40 mm autocannon, and a 105 mm howitzer are mounted on`; return `${text11} A large gunship ${activate2} is being refueled in the hangar. ${barrels}${autocannon} the port side of the fuselage${distance}${DFA}. ${b4} ${ammunition} ${gsSpeed} ${c2}${countermeasures} ${fuel}`; } break; @@ -3572,8 +3580,8 @@ App.SF.UnitText = function(input) { } else { loc1 = `The satellite is in geosynchronous orbit, far above the arcology.`; } + gyro = `A suite of sensors have been installed to ensure the satellite can detect attitude and orbital altitude.`; } - gyro = `A suite of sensors have been installed to ensure the satellite can detect attitude and orbital altitude.`; if (S.Satellite.lv >= 3) { telemetry = `Telemetry systems have been installed to communicate with the satellite in orbit, with strong encryption measures.`; } @@ -3582,12 +3590,12 @@ App.SF.UnitText = function(input) { } if (S.Satellite.lv >= 5) { solar = `A massive folding solar panel array, combined with the latest in battery technology allow the satellite to store an enormous amount of energy relatively quickly.`; + surviv = `Enough of the satellite has been finished that it can expect to survive for a significant period of time in space.`; } - surviv = `Enough of the satellite has been finished that it can expect to survive for a significant period of time in space.`; if (S.Satellite.lv >= 6) { laser1 = `A laser cannon has been mounted facing the earth, capable of cutting through steel in seconds`; + heat = ` while generating a large amount of heat.`; } - heat = ` while generating a large amount of heat.`; if (S.Satellite.lv >= 7) { heat = `. The installed heatsink allows the laser cannon to fire more frequently without damaging the satellite.`; } @@ -3598,9 +3606,9 @@ App.SF.UnitText = function(input) { lens = `A higher quality and adjustable lens has been installed on the laser, allowing scalpel precision on armor or wide-area blasts on unarmored targets.`; } if (S.Satellite.lv >= 10) { - kin = `A magazine of directable tungsten rods have been mounted to the exterior of the satellite, allowing for kinetic bombardment roughly equal to a series of nuclear blasts.`; + kin = `A magazine of directable tungsten rods have been mounted to the exterior of the satellite, allowing for kinetic bombardment roughly equal to a series of nuclear blasts`; } - return `${text12} ${loc1} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser1}${heat} ${lens} ${kin}`; + return `${text12} ${loc1} ${gyro} ${thrusters} ${telemetry} ${solar} ${reactor} ${surviv} ${laser1}${heat} ${lens} ${kin}.`; } break; case 'GR': @@ -3608,8 +3616,8 @@ App.SF.UnitText = function(input) { const text13 = `<br> ''Giant Robot:''`; if (S.GiantRobot >= 2) { loc = ``; + armor8 = `Armor plating has been mounted over the majority of the robot.`; } - armor8 = `Armor plating has been mounted over the majority of the robot.`; if (S.GiantRobot >= 3) { power = `The robot is now powered by an umbilical cable system instead of bulky and short-lived batteries.`; } @@ -3621,15 +3629,15 @@ App.SF.UnitText = function(input) { } if (S.GiantRobot >= 6) { cannon1 = `A custom 45 mm Gatling cannon rifle has been developed for ranged use`; + ammo2 = `; though it lacks enough ammo storage for a main weapon.`; } - ammo2 = `; though it lacks enough ammo storage for a main weapon.`; if (S.GiantRobot >= 7) { heatsink = `Large heatsinks have been installed out of the back to solve a massive overheating problem. These heatsinks resemble wings, and tend to glow red with heat when in heavy use.`; } if (S.GiantRobot >= 8) { armor8 = ``; + actuator = `Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`; } - actuator = `Final actuator tweaks have allowed for the addition of exceptionally thick armor without any loss in speed or power.`; if (S.GiantRobot >= 9) { ammo2 = `; with spare ammunition drums kept along the robot's waist.`; } @@ -3644,8 +3652,8 @@ App.SF.UnitText = function(input) { const text14 = `<br> ''Cruise Missile:''`; if (S.MissileSilo >= 2) { b2 = `a modern missile`; + c8 = `; tipped with a conventional warhead`; } - c8 = `; tipped with a conventional warhead`; if (S.MissileSilo >= 3) { d1 = `The launch systems have been overhauled, allowing a launch within seconds of an attack order being given.`; } @@ -3676,15 +3684,10 @@ App.SF.UnitText = function(input) { case 'AC': if (S.AircraftCarrier >= 1) { const text15 = `<br> ''Aircraft Carrier:''`; - if (V.week % 6 === 0) { - loc2 = `moored to the pier in the Naval Yard`; - } else { - loc2 = `patrolling the waters near ${V.arcologies[0].name}`; - } if (S.AircraftCarrier >= 2) { radar = `The island's radar and comms have been improved.`; + recom1 = ``; } - recom1 = ``; if (S.AircraftCarrier >= 3) { AAG = `The antiair guns have been updated to automatically track and predict enemy aircraft movement.`; } @@ -3709,7 +3712,7 @@ App.SF.UnitText = function(input) { if (S.AircraftCarrier >= 10) { jets = `Attack VTOL from the converted for carrier capability`; } - return `${text15} An aircraft carrier ${recom1} is ${loc2}. ${jets} serve as its airpower. ${scramble1} ${power1} ${radar} ${AAG} ${torp} ${prop} ${armor9}`; + return `${text15} An aircraft carrier ${recom1} ${loc2}. ${jets} serve as its airpower. ${scramble1} ${power1} ${radar} ${AAG} ${torp} ${prop} ${armor9}`; } break; case 'Sub': @@ -3717,9 +3720,9 @@ App.SF.UnitText = function(input) { const text16 = `<br> ''Submarine:''`; if (S.Sub >= 2) { recom = ``; + reactor0 = `A nuclear reactor provides power`; + reactor1 = `; but because oxygen is still kept in pressurized canisters the sub must frequently surface to replenish its oxygen stocks.`; } - reactor0 = `A nuclear reactor provides power`; - reactor1 = `; but because oxygen is still kept in pressurized canisters the sub must frequently surface to replenish its oxygen stocks.`; if (S.Sub >= 3) { reactor1 = ` and an oxygen generator pulls Oâ‚‚ from the surrounding seawater, allowing the submarine to remain underwater for months if necessary.`; } @@ -3731,8 +3734,8 @@ App.SF.UnitText = function(input) { } if (S.Sub >= 6) { tubes = `The torpedo tubes have been redesigned for faster loading speeds`; + torpedoes = `.`; } - torpedoes = `.`; if (S.Sub >= 7) { sonar = `The passive sonar has been finely tuned to detect mechanical noises miles away.`; } @@ -3745,7 +3748,7 @@ App.SF.UnitText = function(input) { if (S.Sub >= 10) { missiles = `The submarine has been outfitted with several cruise missiles to attack land or sea-based targets.`; } - return `${text16} An attack submarine ${recom} is moored to the pier of the Naval Yard. ${reactor0}${reactor1} ${cal} ${hull} ${tubes}${torpedoes} ${sonar} ${control} ${missiles}`; + return `${text16} An attack submarine ${recom} ${loc2}. ${reactor0}${reactor1} ${cal} ${hull} ${tubes}${torpedoes} ${sonar} ${control} ${missiles}`; } break; case 'HAT': @@ -3753,25 +3756,25 @@ App.SF.UnitText = function(input) { const text17 = `<br> ''Amphibious Transport:''`; if (S.HAT >= 2) { skirt = `The skirt has been upgraded to increase durability and improve cushion when traveling over uneven terrain and waves.`; + recom2 = `;`; } - recom2 = `;`; if (S.HAT >= 3) { guns = `A minigun`; + guns2 = `has been mounted on the front corners of the craft to defend against attackers.`; } - guns2 = `has been mounted on the front corners of the craft to defend against attackers.`; if (S.HAT >= 4) { fans = `The turbines powering the rear fans`; + speed = `acceleration and speed.`; + turbines = `have been replaced with a more powerful version, allowing greater`; } - speed = `acceleration and speed.`; - turbines = `have been replaced with a more powerful version, allowing greater`; if (S.HAT >= 5) { armor10 = `The armor protecting its cargo has been increased.`; } if (S.HAT >= 6) { tons = `300`; + fans = `The turbines powering the rear fans and impeller`; + speed = `acceleration, speed, and carrying capacity.`; } - fans = `The turbines powering the rear fans and impeller`; - speed = `acceleration, speed, and carrying capacity.`; if (S.HAT >= 7) { guns = `A minigun and grenade launcher`; } @@ -3784,7 +3787,7 @@ App.SF.UnitText = function(input) { if (S.HAT >= 10) { loadout = `An experimental loadout sacrifices all carrying capacity to instead act as a floating gun platform by mounting several rotary autocannons the deck, should the need arise.`; } - return `${text17} An air cushion transport vehicle, or hovercraft ${recom2} is parked on the pier of the Naval Yard, ready to ferry ${tons} tons of soldiers and vehicles. ${guns} ${guns2} ${fans} ${turbines} ${speed} ${skirt} ${armor10} ${ramps} ${HATframe} ${loadout}`; + return `${text17} An air cushion transport vehicle, or hovercraft ${recom2} ${loc3}. ${guns} ${guns2} ${fans} ${turbines} ${speed} ${skirt} ${armor10} ${ramps} ${HATframe} ${loadout}`; } break; }