diff --git a/mods/ra/maps/allies-08b/allies08b-AI.lua b/mods/ra/maps/allies-08b/allies08b-AI.lua new file mode 100644 index 0000000000..3fd85bc031 --- /dev/null +++ b/mods/ra/maps/allies-08b/allies08b-AI.lua @@ -0,0 +1,241 @@ +--[[ + Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you under the terms of the GNU General Public License + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] +AttackGroup = { } +AttackGroupSize = 10 +SovietInfantry = { "e1", "e2", "e4" } +SovietVehicles = { "3tnk", "3tnk", "v2rl" } +SovietAircraftType = { "mig" } +Migs = { } + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +GroundWavesUpgradeDelay = DateTime.Minutes(12) +GroundAttackUnitType = "Normal" +GroundAttackUnits = +{ + Normal = { {"4tnk", "3tnk", "e2", "e2", "e2" }, { "3tnk", "v2rl", "e4", "e4", "e4" } }, + Upgraded = { {"4tnk", "3tnk", "ftrk", "apc", "apc", "e1", "e1", "e1", "e1", "e1", "e2", "e2", "e2" }, { "3tnk", "v2rl", "ftrk", "apc", "apc", "e1", "e1", "e1", "e1", "e1", "e4", "e4", "e4" } } +} +GroundAttackPaths = +{ + { SovEntry1.Location, ParaLZ2.Location, AttackChrono.Location }, + { SovEntry2.Location, ParaLZ2.Location, AttackChrono.Location }, + { SovEntry3.Location, ParaLZ4.Location, AttackChrono.Location } +} +GroundWavesDelays = +{ + easy = 4, + normal = 3, + hard = 2 +} + +WTransUnits = { { "4tnk", "3tnk", "e2", "e2", "e2" }, { "3tnk", "v2rl", "e4", "e4", "e4" } } +WTransWays = +{ + { DDEntry.Location, WaterLanding1.Location }, + { WaterEntry2.Location, WaterLanding2.Location } +} +WTransDelays = +{ + easy = 5, + normal = 4, + hard = 3 +} + +ParadropLZs = { ParaLZ1.CenterPosition, ParaLZ2.CenterPosition, ParaLZ3.CenterPosition, ParaLZ4.CenterPosition, ParaLZ5.CenterPosition } +ParadropDelays = +{ + easy = 3, + normal = 2, + hard = 1 +} + +BombDelays = +{ + easy = 4, + normal = 3, + hard = 2 +} + +ProductionInterval = +{ + easy = DateTime.Seconds(20), + normal = DateTime.Seconds(10), + hard = DateTime.Seconds(5) +} + +SendAttackGroup = function() + if #AttackGroup < AttackGroupSize then + return + end + + Utils.Do(AttackGroup, function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + end + end) + + AttackGroup = { } +end + +ProduceInfantry = function() + if USSRRax.IsDead or USSRRax.Owner ~= ussr then + return + end + + ussr.Build({ Utils.Random(SovietInfantry) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceInfantry) + end) +end + +ProduceVehicles = function() + if USSRWarFactory.IsDead or USSRWarFactory.Owner ~= ussr then + return + end + + ussr.Build({ Utils.Random(SovietVehicles) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceVehicles) + end) +end + +ProduceAircraft = function() + if (Airfield1.IsDead or Airfield1.Owner ~= ussr) and (Airfield2.IsDead or Airfield2.Owner ~= ussr) then + return + end + + ussr.Build(SovietAircraftType, function(units) + local mig = units[1] + Migs[#Migs + 1] = mig + + Trigger.OnKilled(mig, ProduceAircraft) + + local alive = Utils.Where(Migs, function(y) return not y.IsDead end) + if #alive < 2 then + Trigger.AfterDelay(DateTime.Seconds(ProductionInterval[Map.LobbyOption("difficulty")] / 2), ProduceAircraft) + end + + TargetAndAttack(mig) + end) +end + +TargetAndAttack = function(mig, target) + if not target or target.IsDead or (not target.IsInWorld) then + local enemies = Utils.Where(greece.GetActors(), function(actor) + return actor.HasProperty("Health") and actor.Type ~= "brik" + end) + if #enemies > 0 then + target = Utils.Random(enemies) + end + end + + if target and mig.AmmoCount() > 0 and mig.CanTarget(target) then + mig.Attack(target) + else + mig.ReturnToBase() + end + + mig.CallFunc(function() + TargetAndAttack(mig, target) + end) +end + +GroundWaves = function() + local path = Utils.Random(GroundAttackPaths) + local units = Reinforcements.Reinforce(ussr, Utils.Random(GroundAttackUnits[GroundAttackUnitType]), { path[1] }) + local lastWaypoint = path[#path] + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, function() + unit.Patrol(path) + Trigger.OnIdle(unit, function() + unit.AttackMove(lastWaypoint) + end) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(GroundWavesDelays), GroundWaves) +end + +WTransWaves = function() + local way = Utils.Random(WTransWays) + local units = Utils.Random(WTransUnits) + local attackUnits = Reinforcements.ReinforceWithTransport(ussr, "lst", units , way, { way[2], way[1] })[2] + Utils.Do(attackUnits, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(AttackChrono.Location) + IdleHunt(a) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end + +Paradrop = function() + local units = PowerProxy.SendParatroopers(Utils.Random(ParadropLZs)) + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, IdleHunt) + end) + + Trigger.AfterDelay(DateTime.Minutes(ParadropDelays), Paradrop) +end + +SendParabombs = function() + local airfield = Airfield1 + if Airfield1.IsDead or Airfield1.Owner ~= ussr then + if Airfield2.IsDead or Airfield2.Owner ~= ussr then + return + end + + airfield = Airfield2 + end + + local targets = Utils.Where(greece.GetActors(), function(actor) + return + actor.HasProperty("Sell") and + actor.Type ~= "brik" and + actor.Type ~= "sbag" or + actor.Type == "pdox" or + actor.Type == "atek" + end) + + if #targets > 0 then + airfield.SendAirstrike(Utils.Random(targets).CenterPosition, true, 0) + end + + Trigger.AfterDelay(DateTime.Minutes(BombDelays), SendParabombs) +end + +ActivateAI = function() + local difficulty = Map.LobbyOption("difficulty") + GroundWavesDelays = GroundWavesDelays[difficulty] + WTransDelays = WTransDelays[difficulty] + ParadropDelays = ParadropDelays[difficulty] + BombDelays = BombDelays[difficulty] + + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == ussr and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == ussr and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + end) + + ProduceInfantry() + ProduceVehicles() + ProduceAircraft() + Trigger.AfterDelay(DateTime.Minutes(GroundWavesDelays), GroundWaves) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) + Trigger.AfterDelay(DateTime.Minutes(ParadropDelays), Paradrop) + Trigger.AfterDelay(DateTime.Minutes(BombDelays), SendParabombs) + Trigger.AfterDelay(GroundWavesUpgradeDelay, function() GroundAttackUnitType = "Upgraded" end) +end diff --git a/mods/ra/maps/allies-08b/allies08b.lua b/mods/ra/maps/allies-08b/allies08b.lua new file mode 100644 index 0000000000..1af9916f31 --- /dev/null +++ b/mods/ra/maps/allies-08b/allies08b.lua @@ -0,0 +1,191 @@ +--[[ + Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you under the terms of the GNU General Public License + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] +AlliedBoatReinforcements = { "dd", "dd" } +TimerTicks = DateTime.Minutes(21) +ObjectiveBuildings = { Chronosphere, AlliedTechCenter } +ScientistTypes = { "chan", "chan", "chan", "chan" } +ScientistDiscoveryFootprint = { CPos.New(99, 63), CPos.New(99, 64), CPos.New(99, 65), CPos.New(99, 66), CPos.New(99, 67), CPos.New(100, 63), CPos.New(101, 63), CPos.New(102, 63), CPos.New(103, 63) } +ScientistEvacuationFootprint = { CPos.New(98, 88), CPos.New(98, 87), CPos.New(99, 87), CPos.New(100, 87), CPos.New(101, 87), CPos.New(102, 87), CPos.New(103, 87) } + +InitialAlliedReinforcements = function() + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.PlaySpeechNotification(greece, "ReinforcementsArrived") + Reinforcements.Reinforce(greece, { "mcv" }, { MCVEntry.Location, MCVStop.Location }) + Reinforcements.Reinforce(greece, AlliedBoatReinforcements, { DDEntry.Location, DDStop.Location }) + end) +end + +CreateScientists = function() + scientists = Reinforcements.Reinforce(greece, ScientistTypes, { ScientistsExit.Location }) + Utils.Do(scientists, function(s) + s.Move(s.Location + CVec.New(0, 1)) + s.Scatter() + end) + + local flare = Actor.Create("flare", true, { Owner = greece, Location = DefaultCameraPosition.Location + CVec.New(-1, 0) }) + Trigger.AfterDelay(DateTime.Seconds(2), function() Media.PlaySpeechNotification(player, "SignalFlareSouth") end) + + Trigger.OnAnyKilled(scientists, function() + Media.PlaySpeechNotification(greece, "ObjectiveNotMet") + greece.MarkFailedObjective(EvacuateScientists) + end) + + -- Add the footprint trigger in a frame end task (delay 0) to avoid crashes + local left = #scientists + Trigger.AfterDelay(0, function() + local changeOwnerTrigger = Trigger.OnEnteredFootprint(ScientistEvacuationFootprint, function(a, id) + if a.Owner == greece and a.Type == "chan" then + a.Owner = england + a.Stop() + a.Move(MCVEntry.Location) + + -- Constantly try to reach the exit (and thus avoid getting stuck if the path was blocked) + Trigger.OnIdle(a, function() + a.Move(MCVEntry.Location) + end) + end + end) + + -- Use a cell trigger to destroy the scientists preventing the player from causing glitchs by blocking the path + Trigger.OnEnteredFootprint({ MCVEntry.Location }, function(a, id) + if a.Owner == england then + a.Stop() + a.Destroy() + + left = left - 1 + if left == 0 then + Trigger.RemoveFootprintTrigger(id) + Trigger.RemoveFootprintTrigger(changeOwnerTrigger) + flare.Destroy() + + if not greece.IsObjectiveCompleted(EvacuateScientists) and not greece.IsObjectiveFailed(EvacuateScientists) then + Media.PlaySpeechNotification(greece, "ObjectiveMet") + greece.MarkCompletedObjective(EvacuateScientists) + end + end + end + end) + end) +end + +FinishTimer = function() + for i = 0, 5 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("The experiment is a success!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end) +end + +DefendChronosphereCompleted = function() + local cells = Utils.ExpandFootprint({ ChronoshiftLocation.Location }, false) + local units = { } + for i = 1, #cells do + local unit = Actor.Create("2tnk", true, { Owner = greece, Facing = 0 }) + units[unit] = cells[i] + end + Chronosphere.Chronoshift(units) + + Trigger.AfterDelay(DateTime.Seconds(3), function() + greece.MarkCompletedObjective(DefendChronosphere) + greece.MarkCompletedObjective(KeepBasePowered) + end) +end + +ticked = TimerTicks +Tick = function() + ussr.Cash = 5000 + + if ussr.HasNoRequiredUnits() then + greece.MarkCompletedObjective(DefendChronosphere) + greece.MarkCompletedObjective(KeepBasePowered) + end + + if greece.HasNoRequiredUnits() then + ussr.MarkCompletedObjective(BeatAllies) + end + + if ticked > 0 then + UserInterface.SetMissionText("Chronosphere experiment completes in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 and (greece.PowerState ~= "Normal") then + greece.MarkFailedObjective(KeepBasePowered) + elseif ticked == 0 then + DefendChronosphereCompleted() + ticked = ticked - 1 + end +end + +WorldLoaded = function() + greece = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + england = Player.GetPlayer("England") + + DefendChronosphere = greece.AddPrimaryObjective("Defend the Chronosphere and the Tech Center\nat all costs.") + KeepBasePowered = greece.AddPrimaryObjective("The Chronosphere must have power when the\ntimer runs out.") + EvacuateScientists = greece.AddSecondaryObjective("Evacuate all scientists from the island to\nthe east.") + BeatAllies = ussr.AddPrimaryObjective("Defeat the Allied forces.") + + Trigger.OnObjectiveCompleted(greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(greece, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(greece, "MissionFailed") + end) + end) + Trigger.OnPlayerWon(greece, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(greece, "MissionAccomplished") + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(1), function() + Media.PlaySpeechNotification(greece, "TwentyMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(11), function() + Media.PlaySpeechNotification(greece, "TenMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(16), function() + Media.PlaySpeechNotification(greece, "WarningFiveMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(18), function() + Media.PlaySpeechNotification(greece, "WarningThreeMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(20), function() + Media.PlaySpeechNotification(greece, "WarningOneMinuteRemaining") + end) + + PowerProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr }) + + Camera.Position = DefaultCameraPosition.CenterPosition + TimerColor = greece.Color + + Trigger.OnAnyKilled(ObjectiveBuildings, function() + greece.MarkFailedObjective(DefendChronosphere) + end) + + Trigger.OnEnteredFootprint(ScientistDiscoveryFootprint, function(a, id) + if a.Owner == greece and not scientistsTriggered then + scientistsTriggered = true + Trigger.RemoveFootprintTrigger(id) + CreateScientists() + end + end) + + InitialAlliedReinforcements() + ActivateAI() +end diff --git a/mods/ra/maps/allies-08b/map.bin b/mods/ra/maps/allies-08b/map.bin new file mode 100644 index 0000000000..77cb1d7858 Binary files /dev/null and b/mods/ra/maps/allies-08b/map.bin differ diff --git a/mods/ra/maps/allies-08b/map.png b/mods/ra/maps/allies-08b/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/allies-08b/map.png differ diff --git a/mods/ra/maps/allies-08b/map.yaml b/mods/ra/maps/allies-08b/map.yaml new file mode 100644 index 0000000000..ce91ea1148 --- /dev/null +++ b/mods/ra/maps/allies-08b/map.yaml @@ -0,0 +1,827 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 08b: Protect the Chronosphere + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 28,36,80,54 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Enemies: Greece, England + PlayerReference@England: + Name: England + Faction: allies + Color: A0F08C + Enemies: USSR + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F6 + LockSpawn: True + LockTeam: True + Enemies: USSR + +Actors: + Actor0: brik + Location: 64,43 + Owner: Greece + Actor1: brik + Location: 65,43 + Owner: Greece + Actor2: brik + Location: 70,43 + Owner: Greece + Actor3: brik + Location: 71,43 + Owner: Greece + Actor4: brik + Location: 64,44 + Owner: Greece + Actor5: brik + Location: 65,44 + Owner: Greece + Actor6: brik + Location: 70,44 + Owner: Greece + Actor7: brik + Location: 71,44 + Owner: Greece + Actor8: brik + Location: 65,45 + Owner: Greece + Actor9: brik + Location: 66,45 + Owner: Greece + Actor10: brik + Location: 69,45 + Owner: Greece + Actor11: brik + Location: 70,45 + Owner: Greece + Actor12: brik + Location: 65,46 + Owner: Greece + Actor13: brik + Location: 66,46 + Owner: Greece + Actor14: brik + Location: 69,46 + Owner: Greece + Actor15: brik + Location: 70,46 + Owner: Greece + Actor16: brik + Location: 52,47 + Owner: Greece + Actor17: brik + Location: 53,47 + Owner: Greece + Actor18: brik + Location: 52,48 + Owner: Greece + Actor19: brik + Location: 53,48 + Owner: Greece + Actor20: brik + Location: 52,52 + Owner: Greece + Actor21: brik + Location: 53,52 + Owner: Greece + Actor22: brik + Location: 52,53 + Owner: Greece + Actor23: brik + Location: 53,53 + Owner: Greece + Actor24: brik + Location: 65,53 + Owner: Greece + Actor25: brik + Location: 66,53 + Owner: Greece + Actor26: brik + Location: 65,54 + Owner: Greece + Actor27: brik + Location: 66,54 + Owner: Greece + Actor28: brik + Location: 69,54 + Owner: Greece + Actor29: brik + Location: 70,54 + Owner: Greece + Actor30: brik + Location: 74,54 + Owner: Greece + Actor31: brik + Location: 75,54 + Owner: Greece + Actor32: brik + Location: 79,54 + Owner: Greece + Actor33: brik + Location: 80,54 + Owner: Greece + Actor34: brik + Location: 66,55 + Owner: Greece + Actor35: brik + Location: 67,55 + Owner: Greece + Actor36: brik + Location: 68,55 + Owner: Greece + Actor37: brik + Location: 69,55 + Owner: Greece + Actor38: brik + Location: 70,55 + Owner: Greece + Actor39: brik + Location: 74,55 + Owner: Greece + Actor40: brik + Location: 75,55 + Owner: Greece + Actor41: brik + Location: 76,55 + Owner: Greece + Actor42: brik + Location: 77,55 + Owner: Greece + Actor43: brik + Location: 78,55 + Owner: Greece + Actor44: brik + Location: 79,55 + Owner: Greece + Actor45: brik + Location: 80,55 + Owner: Greece + Actor46: brik + Location: 47,86 + Owner: USSR + Actor47: brik + Location: 48,86 + Owner: USSR + Actor48: brik + Location: 47,87 + Owner: USSR + Actor49: brik + Location: 48,87 + Owner: USSR + Actor50: brik + Location: 46,88 + Owner: USSR + Actor51: brik + Location: 47,88 + Owner: USSR + Actor52: brik + Location: 46,89 + Owner: USSR + Actor53: brik + Location: 47,89 + Owner: USSR + Actor54: tc02 + Location: 104,84 + Owner: Neutral + Actor55: tc01 + Location: 68,41 + Owner: Neutral + Actor56: t01 + Location: 48,53 + Owner: Neutral + Actor57: tc05 + Location: 61,55 + Owner: Neutral + Actor58: tc03 + Location: 52,59 + Owner: Neutral + Actor59: tc02 + Location: 51,57 + Owner: Neutral + Actor60: tc03 + Location: 59,53 + Owner: Neutral + Actor61: tc04 + Location: 52,38 + Owner: Neutral + Actor62: tc04 + Location: 70,38 + Owner: Neutral + Actor63: tc01 + Location: 46,56 + Owner: Neutral + Actor64: t14 + Location: 48,55 + Owner: Neutral + Actor65: t16 + Location: 50,53 + Owner: Neutral + Actor66: t15 + Location: 49,54 + Owner: Neutral + Actor67: t12 + Location: 48,59 + Owner: Neutral + Actor68: tc02 + Location: 75,39 + Owner: Neutral + Actor69: tc05 + Location: 95,69 + Owner: Neutral + Actor70: tc04 + Location: 90,61 + Owner: Neutral + Actor71: tc03 + Location: 105,71 + Owner: Neutral + Actor72: tc05 + Location: 105,49 + Owner: Neutral + Actor73: tc02 + Location: 102,72 + Owner: Neutral + Actor74: tc05 + Location: 105,67 + Owner: Neutral + Actor75: tc02 + Location: 104,60 + Owner: Neutral + Actor76: t16 + Location: 104,53 + Owner: Neutral + Actor77: t15 + Location: 99,60 + Owner: Neutral + Actor78: tc01 + Location: 53,35 + Owner: Neutral + Actor79: tc02 + Location: 59,39 + Owner: Neutral + Actor80: tc03 + Location: 66,36 + Owner: Neutral + Actor81: t01 + Location: 29,36 + Owner: Neutral + Actor82: tc05 + Location: 49,43 + Owner: Neutral + Actor83: tc02 + Location: 48,42 + Owner: Neutral + Actor84: tc05 + Location: 64,88 + Owner: Neutral + Actor85: tc01 + Location: 68,86 + Owner: Neutral + Actor86: tc02 + Location: 73,88 + Owner: Neutral + Actor87: tc02 + Location: 56,64 + Owner: Neutral + Actor88: tc04 + Location: 61,59 + Owner: Neutral + Actor89: tc05 + Location: 29,71 + Owner: Neutral + Actor90: tc04 + Location: 28,70 + Owner: Neutral + Actor91: tc05 + Location: 28,87 + Owner: Neutral + Actor92: t17 + Location: 28,88 + Owner: Neutral + Actor93: tc01 + Location: 31,88 + Owner: Neutral + Actor94: t01 + Location: 52,86 + Owner: Neutral + Actor95: t02 + Location: 59,83 + Owner: Neutral + Actor96: tc04 + Location: 43,73 + Owner: Neutral + Actor97: tc05 + Location: 48,88 + Owner: Neutral + Actor98: tc04 + Location: 33,74 + Owner: Neutral + Actor99: t01 + Location: 53,36 + Owner: Neutral + Actor100: t02 + Location: 53,37 + Owner: Neutral + Actor101: t03 + Location: 54,36 + Owner: Neutral + Actor102: t05 + Location: 55,36 + Owner: Neutral + Actor103: tc01 + Location: 55,37 + Owner: Neutral + Actor104: t06 + Location: 54,37 + Owner: Neutral + Actor105: tc01 + Location: 34,69 + Owner: Neutral + Actor106: tc03 + Location: 37,64 + Owner: Neutral + Actor107: tc05 + Location: 89,49 + Owner: Neutral + Actor108: tc03 + Location: 73,62 + Owner: Neutral + Actor109: tc04 + Location: 85,35 + Owner: Neutral + Actor110: tc01 + Location: 90,35 + Owner: Neutral + Actor111: t17 + Location: 77,79 + Owner: Neutral + Actor112: t17 + Location: 28,72 + Owner: Neutral + Actor113: tc02 + Location: 33,56 + Owner: Neutral + Actor114: t01 + Location: 57,59 + Owner: Neutral + Actor115: mine + Location: 95,38 + Owner: Neutral + Actor116: t02 + Location: 92,64 + Owner: Neutral + Chronosphere: pdox + Location: 67,44 + Owner: Greece + AAGun1: agun + Location: 64,45 + Owner: Greece + Facing: 95 + AAGun2: agun + Location: 71,45 + Owner: Greece + Facing: 159 + Gap1: gap + Location: 66,44 + Owner: Greece + Gap2: gap + Location: 69,44 + Owner: Greece + Apwr1: apwr + Location: 85,38 + Owner: Greece + Apwr2: apwr + Location: 82,42 + Owner: Greece + Apwr3: apwr + Location: 85,41 + Owner: Greece + Apwr4: apwr + Location: 79,41 + Owner: Greece + Apwr5: apwr + Location: 82,39 + Owner: Greece + ServiceDepot: fix + Location: 76,44 + Owner: Greece + AlliedTechCenter: atek + Location: 73,43 + Owner: Greece + OreRef: proc + Location: 60,43 + Owner: Greece + Gun1: gun + Location: 51,48 + Owner: Greece + Facing: 63 + Gun2: gun + Location: 74,56 + Owner: Greece + Facing: 95 + Gun3: gun + Location: 70,56 + Owner: Greece + Facing: 95 + Gun4: gun + Location: 51,52 + Owner: Greece + Facing: 63 + Dome: dome + Location: 75,41 + Owner: Greece + Actor135: fact + Location: 33,82 + Owner: USSR + Actor136: powr + Location: 35,87 + Owner: USSR + Actor137: powr + Location: 33,87 + Owner: USSR + Actor138: silo + Location: 31,86 + Owner: USSR + Actor139: silo + Location: 29,86 + Owner: USSR + USSRWarFactory: weap + Location: 41,81 + Owner: USSR + Actor141: apwr + Location: 30,76 + Owner: USSR + Actor142: apwr + Location: 28,79 + Owner: USSR + Actor143: apwr + Location: 37,87 + Owner: USSR + Actor144: apwr + Location: 40,87 + Owner: USSR + USSRRax: barr + Location: 39,77 + Owner: USSR + Airfield1: afld.ukraine + Owner: USSR + Location: 37,81 + Airfield2: afld + Owner: USSR + Location: 34,78 + Actor226: stek + Owner: USSR + Location: 36,84 + Actor146: tsla + Location: 43,80 + Owner: USSR + Actor147: ftur + Location: 40,75 + Owner: USSR + Actor148: ftur + Location: 46,83 + Owner: USSR + Actor149: silo + Location: 30,85 + Owner: USSR + Actor150: miss + Location: 100,64 + Owner: England + Health: 8 + Actor151: v04 + Location: 96,63 + Owner: England + Actor152: v03 + Location: 104,56 + Owner: England + Actor153: v02 + Location: 100,58 + Owner: England + Actor154: v01 + Location: 105,51 + Owner: England + Actor155: v02 + Location: 103,69 + Owner: England + Actor156: harv + Location: 60,47 + Owner: Greece + Facing: 95 + Actor157: 3tnk + Location: 68,81 + Owner: USSR + Facing: 159 + Actor158: 3tnk + Location: 66,82 + Owner: USSR + Facing: 159 + Actor159: 3tnk + Location: 64,83 + Owner: USSR + Facing: 159 + Actor160: 3tnk + Location: 65,80 + Owner: USSR + Facing: 159 + Actor161: 3tnk + Location: 63,81 + Owner: USSR + Facing: 159 + Actor162: v2rl + Location: 66,78 + Owner: USSR + Facing: 159 + Actor163: v2rl + Location: 61,81 + Owner: USSR + Facing: 159 + Actor164: 2tnk + Location: 100,86 + Owner: Greece + Facing: 63 + Actor165: 2tnk + Location: 98,86 + Owner: Greece + Facing: 63 + Actor166: 2tnk + Location: 98,88 + Owner: Greece + Facing: 63 + Actor167: 2tnk + Location: 99,87 + Owner: Greece + Facing: 63 + Actor168: 1tnk + Location: 96,85 + Owner: Greece + Facing: 63 + Actor169: 1tnk + Location: 96,87 + Owner: Greece + Facing: 63 + Actor170: jeep + Location: 94,87 + Owner: Greece + Facing: 63 + Actor171: arty + Location: 101,87 + Owner: Greece + Facing: 31 + Actor172: arty + Location: 100,88 + Owner: Greece + Facing: 31 + Actor173: mnly + Location: 99,89 + Owner: Greece + Facing: 31 + Actor174: mnly + Location: 102,86 + Owner: Greece + Facing: 31 + Actor175: 3tnk + Location: 47,82 + Owner: USSR + Facing: 191 + Actor176: 3tnk + Location: 47,85 + Owner: USSR + Facing: 191 + Actor177: v2rl + Location: 36,82 + Owner: USSR + Actor178: 3tnk + Location: 38,74 + Owner: USSR + Facing: 223 + Actor179: 3tnk + Location: 41,74 + Owner: USSR + Facing: 31 + Actor180: e1 + Location: 67,47 + Owner: Greece + Facing: 127 + SubCell: 1 + Actor181: e1 + Location: 68,47 + Owner: Greece + Facing: 127 + SubCell: 2 + Actor182: e1 + Location: 70,48 + Owner: Greece + Facing: 127 + SubCell: 1 + Actor183: e1 + Location: 67,48 + Owner: Greece + Facing: 127 + SubCell: 2 + Actor184: e1 + Location: 64,47 + Owner: Greece + Facing: 95 + SubCell: 4 + Actor185: e1 + Location: 71,47 + Owner: Greece + Facing: 159 + SubCell: 3 + Actor186: e1 + Location: 71,47 + Owner: Greece + Facing: 191 + SubCell: 2 + Actor187: e1 + Location: 64,47 + Owner: Greece + Facing: 63 + SubCell: 1 + Actor188: e1 + Location: 68,48 + Owner: Greece + Facing: 127 + SubCell: 1 + Actor189: e1 + Location: 65,48 + Owner: Greece + Facing: 127 + SubCell: 2 + Actor190: e1 + Location: 70,53 + Owner: Greece + Facing: 159 + SubCell: 4 + Actor191: e1 + Location: 73,53 + Owner: Greece + Facing: 95 + SubCell: 4 + Actor192: e1 + Location: 40,79 + Owner: USSR + Facing: 159 + SubCell: 0 + Actor193: e1 + Location: 39,79 + Owner: USSR + Facing: 95 + SubCell: 3 + Actor194: e2 + Location: 46,81 + Owner: USSR + SubCell: 0 + Actor195: e2 + Location: 45,85 + Owner: USSR + Facing: 159 + SubCell: 4 + Actor196: e2 + Location: 40,85 + Owner: USSR + Facing: 159 + SubCell: 4 + Actor197: c1 + Location: 97,66 + Owner: England + Facing: 95 + SubCell: 3 + Actor198: c2 + Location: 102,56 + Owner: England + SubCell: 4 + Actor199: c1 + Location: 106,53 + Owner: England + Facing: 95 + SubCell: 4 + Actor200: c3 + Location: 102,60 + Owner: England + SubCell: 1 + Actor201: c4 + Location: 102,67 + Owner: England + Facing: 159 + SubCell: 4 + Actor202: c4 + Location: 90,64 + Owner: England + SubCell: 4 + Actor203: c5 + Location: 104,51 + Owner: England + Facing: 127 + SubCell: 3 + Actor204: c6 + Location: 98,67 + Owner: England + Facing: 95 + SubCell: 1 + Actor205: c8 + Location: 104,68 + Owner: England + Facing: 159 + SubCell: 3 + MCVEntry: waypoint + Location: 102,89 + Owner: Neutral + MCVStop: waypoint + Location: 100,87 + Owner: Neutral + DDStop: waypoint + Location: 98,78 + Owner: Neutral + waypoint5: waypoint + Location: 83,39 + Owner: Neutral + waypoint6: waypoint + Location: 83,42 + Owner: Neutral + ParaLZ1: waypoint + Owner: Neutral + Location: 33,46 + ParaLZ2: waypoint + Location: 42,52 + Owner: Neutral + ParaLZ3: waypoint + Owner: Neutral + Location: 54,50 + ParaLZ4: waypoint + Location: 64,64 + Owner: Neutral + ParaLZ5: waypoint + Owner: Neutral + Location: 90,43 + SovEntry2: waypoint + Location: 28,83 + Owner: Neutral + waypoint9: waypoint + Location: 34,83 + Owner: Neutral + DDEntry: waypoint + Location: 107,78 + Owner: Neutral + WaterEntry2: waypoint + Location: 107,45 + Owner: Neutral + SovEntry3: waypoint + Location: 45,89 + Owner: Neutral + WaterLanding1: waypoint + Location: 71,78 + Owner: Neutral + WaterLanding2: waypoint + Location: 84,55 + Owner: Neutral + SovEntry1: waypoint + Location: 28,65 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 98,87 + Owner: Neutral + ScientistsExit: waypoint + Owner: Neutral + Location: 101,65 + AttackChrono: waypoint + Owner: Neutral + Location: 68,47 + ChronoshiftLocation: waypoint + Owner: Neutral + Location: 72,60 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ra/maps/allies-08b/rules.yaml b/mods/ra/maps/allies-08b/rules.yaml new file mode 100644 index 0000000000..9b78f0f430 --- /dev/null +++ b/mods/ra/maps/allies-08b/rules.yaml @@ -0,0 +1,115 @@ +Player: + PlayerResources: + DefaultCash: 15000 + +World: + LuaScript: + Scripts: allies08b.lua, allies08b-AI.lua + MissionData: + Briefing: Our latest technology, the Chronosphere, is housed in this research station. The timer represents the appointed time for the completion of a vital experiment. The Soviets have learned of this and are moving in. \n\nProtect the Chronosphere and the Advanced-Tech research center. Make sure the base is fully powered at the appointed time. If not, all will be lost! + BriefingVideo: ally8.vqa + WinVideo: crontest.vqa + LossVideo: cronfail.vqa + StartVideo: aagun.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +V2RL: + Buildable: + Prerequisites: ~vehicles.soviet + +4TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +QTNK: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +AFLD.Ukraine: + -AirstrikePower@spyplane: + +ATEK: + Buildable: + Prerequisites: ~disabled + GpsPower: + ChargeInterval: 15000 + -Sellable: + +PDOX: + Inherits@IDISABLE: ^DisableOnLowPower + Buildable: + Prerequisites: ~disabled + ChronoshiftPower@chronoshift: + Prerequisites: ~disabled + -Sellable: + +IRON: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +E7.noautotarget: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 4d73c58bd6..6fdbf48534 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -9,6 +9,7 @@ Allied Campaign: ./mods/ra/maps/allies-06b ./mods/ra/maps/allies-07 ./mods/ra/maps/allies-08a + ./mods/ra/maps/allies-08b Soviet Campaign: ./mods/ra/maps/soviet-01 ./mods/ra/maps/soviet-02a