diff --git a/mods/ra/languages/lua/en.ftl b/mods/ra/languages/lua/en.ftl index 92e61e07ce..db744178f5 100644 --- a/mods/ra/languages/lua/en.ftl +++ b/mods/ra/languages/lua/en.ftl @@ -111,6 +111,15 @@ get-engineers-to-consoles = Get your engineers to each launch control center. spare-the-scientists = Spare the scientists. They are more valuable as prisoners of war. +## allies-13 +place-explosive-charges = Place explosive charges on all generators. +steal-supplies = Secure the base's supply cache. +explosive-charge-placed = Explosive charge placed. +engineer = Engineer +old-flametowers = Commander, the flame towers in this base are older models. We should be able to get closer. +be-sneaky = Be careful, we don't want to alert these guys. +soldier = Soldier + ## ant-01 allied-forces-have-arrived = Allied forces have arrived! defend-outpost-until-reinforcements-arrive = Defend outpost until reinforcements arrive. diff --git a/mods/ra/maps/allies-13/allies13.lua b/mods/ra/maps/allies-13/allies13.lua new file mode 100644 index 0000000000..ea3032d9c2 --- /dev/null +++ b/mods/ra/maps/allies-13/allies13.lua @@ -0,0 +1,305 @@ +--[[ + Copyright (c) The OpenRA Developers and Contributors + 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. +]] +Engineers = { Engi1, Engi2, Engi3, Engi4 } +HeavyTankCamFootprint = { CPos.New(11, 46), CPos.New(12, 47), CPos.New(12, 48), CPos.New(12, 49) } +TankRifles = { TankRifle1, TankRifle2, TankRifle3 } +MRJCamFootprint = { CPos.New(16, 53), CPos.New(16, 54), CPos.New(16, 55) } +DoomRoomFootprint = { CPos.New(78,70), CPos.New(79,70), CPos.New(80,70) } +V2RoomFootprint = { CPos.New(64,71), CPos.New(65,71), CPos.New(66,71) } +CoreRoomFootprint = { CPos.New(55,60), CPos.New(55,61), CPos.New(55,62), CPos.New(65,52), CPos.New(66,52), CPos.New(67,52), CPos.New(75,58), CPos.New(75,59), CPos.New(75,60) } +CoreRoomPath = { CorePathA.Location, CorePathB.Location, CorePathC.Location, CorePathD.Location } +CoreRoomPatrol = { CorePatrol1, CorePatrol2, CorePatrol3 } +DogPatrolAPath = { PatrolPath1.Location, MRJCamera.Location, PatrolPath2.Location, PatrolPath3.Location } +DogPatrolA = { DogPatrolA1, DogPatrolA2, DogPatrolA3 } +DogPatrolBPath = { PatrolPath4.Location, DoomRoomCam.Location, PatrolPath5.Location, DoomRoomCam.Location, PatrolPath4.Location, CorePathA.Location } +DogPatrolB = { DogPatrolB1, DogPatrolB2, DogPatrolB3 } +RiflePatrolAPath = { PatrolPath6.Location, PatrolPath7.Location, PatrolPath2.Location, MRJCamera.Location, PatrolPath1.Location, PatrolPath3.Location, PatrolPath7.Location, CorePathC.Location } +RiflePatrolA = { RiflePatrolA1, RiflePatrolA2 } +RiflePatrolBPath = { PatrolPath8.Location, Generator4.Location, PatrolPath8.Location, CorePathB.Location } +RiflePatrolB = { RiflePatrolB1, RiflePatrolB2 } +RiflePatrolCPath = { PatrolPath9.Location, PatrolPath10.Location, CorePathD.Location, PatrolPath11.Location } +RiflePatrolC = { RiflePatrolC1, RiflePatrolC2 } +Generators = { Generator1, Generator2, Generator3, Generator4, Generator5, Generator6, Generator7, Generator8 } +ChargePlaced = { Charge1Placed, Charge2Placed, Charge3Placed, Charge4Placed, Charge5Placed, Charge6Placed, Charge7Placed, Charge8Placed } +FlameConsoles = { FlameConsole1, FlameConsole2, FlameConsole3, FlameConsole4, FlameConsole5, FlameConsole6, FlameConsole7, FlameConsole8 } +FlameTowers = { FlameTower1, FlameTower2, FlameTower3, FlameTower4, FlameTower5, FlameTower6, FlameTower7, FlameTower8 } +DualTowerActors = { DualTower1, DualTower2, DoomBarrel } +DoomFootprint = { CPos.New(75,77), CPos.New(76,77), CPos.New(77,77), CPos.New(78,77), CPos.New(79,77), CPos.New(80,77), CPos.New(81,77) } +DoomPatrol = { DoomGren1, DoomGren2, DoomGren3, DoomGren4, DoomGren5, DoomRifle1, DoomRifle2, DoomRifle3, DoomRifle4, DoomRifle5, DoomFlamer1, DoomFlamer2, DoomFlamer3, DoomFlamer4, DoomFlamer5 } +V2s = { V21, V22, V23, V24, V25, V26, V27, V28 } + +TimerLength = +{ + easy = DateTime.Minutes(0), + normal = DateTime.Minutes(5), + hard = DateTime.Minutes(10) +} + +MissionTriggers = function() + Trigger.OnAllKilled(Engineers, function() + USSR.MarkCompletedObjective(StopAllies) + end) + + Trigger.OnAllKilled(V2s, function() + Reinforcements.Reinforce(Greece, { "e1", "e1", "e1", "medi" }, { ReinforcementsSouth.Location, SouthTeamStop.Location }, 0) + Media.PlaySpeechNotification(Greece, "ReinforcementsArrived") + end) + + local doomTriggered + Trigger.OnEnteredFootprint(DoomFootprint, function(actor, id) + if actor.Owner == Greece and not doomTriggered then + Trigger.RemoveFootprintTrigger(id) + doomTriggered = true + + Utils.Do(DoomPatrol, IdleHunt) + end + end) + + Trigger.OnEnteredProximityTrigger(MoneyCrates.CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Owner == Greece then + Trigger.RemoveProximityTrigger(id) + Greece.MarkCompletedObjective(TakeMoney) + end + end) + + local flamers = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == USSR and self.Type == "ftur" end) + Utils.Do(flamers, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Health < building.MaxHealth * 9/10 then + building.StartBuildingRepairs() + end + end) + end) + + Trigger.OnTimerExpired(function() + DateTime.TimeLimit = 0 + Trigger.AfterDelay(1, function() UserInterface.SetMissionText("We're too late!", USSR.Color) end) + USSR.MarkCompletedObjective(StopAllies) + end) +end + +PlaceCharges = function() + for generatorID = 1, 8 do + Trigger.OnEnteredProximityTrigger(Generators[generatorID].CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Type == "e6" then + Trigger.RemoveProximityTrigger(id) + ChargePlaced[generatorID] = true + Actor.Create("flare", true, { Owner = Greece, Location = Generators[generatorID].Location + CVec.New(0,-1) }) + Media.PlaySpeechNotification(Greece, "ExplosiveChargePlaced") + Media.DisplayMessage(UserInterface.Translate("explosive-charge-placed"), UserInterface.Translate("engineer")) + end + end) + end +end + +FlameTowerTriggers = function() + for flameID = 1, 8 do + Trigger.OnEnteredProximityTrigger(FlameConsoles[flameID].CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Type == "e6" then + Trigger.RemoveProximityTrigger(id) + if not FlameTowers[flameID].IsDead then + Media.DisplayMessage(UserInterface.Translate("flame-turret-deactivated"), UserInterface.Translate("console")) + FlameTowers[flameID].Kill() + Media.PlaySoundNotification(Greece, "AngryBleep") + end + end + end) + end + + Trigger.OnEnteredProximityTrigger(TurncoatConsole.CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Type == "e6" then + Trigger.RemoveProximityTrigger(id) + Actor.Create("ftur", true, { Owner = Turkey, Location = TurncoatFlameTurret.Location }) + end + end) + + Trigger.OnEnteredProximityTrigger(TwoTowerConsole.CenterPosition, WDist.FromCells(1), function(actor, id) + if actor.Type == "e6" then + Trigger.RemoveProximityTrigger(id) + + Media.DisplayMessage(UserInterface.Translate("flame-turret-deactivated"), UserInterface.Translate("console")) + Utils.Do(DualTowerActors, function(actor) + if not actor.IsDead then + actor.Kill() + end + end) + end + end) + + local towers = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == USSR and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(towers, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == USSR and building.Health < building.MaxHealth * 99/100 then + building.StartBuildingRepairs() + end + end) + end) +end + +CameraTriggers = function() + local heavyCamTriggered + Trigger.OnEnteredFootprint(HeavyTankCamFootprint, function(actor, id) + if actor.Owner == Greece and not heavyCamTriggered then + Trigger.RemoveFootprintTrigger(id) + heavyCamTriggered = true + + local heavyCam = Actor.Create("camera", true, { Owner = Greece, Location = HeavyTankCam.Location }) + Media.DisplayMessage(UserInterface.Translate("old-flametowers"), UserInterface.Translate("engineer")) + Utils.Do(TankRifles, IdleHunt) + Trigger.AfterDelay(DateTime.Minutes(1), function() + heavyCam.Destroy() + end) + end + end) + + local mrjCamTriggered + Trigger.OnEnteredFootprint(MRJCamFootprint, function(actor, id) + if actor.Owner == Greece and not mrjCamTriggered then + Trigger.RemoveFootprintTrigger(id) + mrjCamTriggered = true + + local mrjCam = Actor.Create("camera", true, { Owner = Greece, Location = MRJCamera.Location }) + --The original had the Mobile Radar Jammers attempt to escape. Excluding that for now as MRJs in OpenRA can take much more damage than the original. + Trigger.AfterDelay(DateTime.Minutes(1), function() + mrjCam.Destroy() + end) + end + end) + + local v2CamTriggered + Trigger.OnEnteredFootprint(V2RoomFootprint, function(actor, id) + if actor.Owner == Greece and not v2CamTriggered then + Trigger.RemoveFootprintTrigger(id) + v2CamTriggered = true + + local v2Cam = Actor.Create("camera", true, { Owner = Greece, Location = TurncoatFlameTurret.Location }) + Trigger.AfterDelay(DateTime.Minutes(1), function() + v2Cam.Destroy() + end) + end + end) + + local coreCamTriggered + Trigger.OnEnteredFootprint(CoreRoomFootprint, function(actor, id) + if actor.Owner == Greece and not coreCamTriggered then + Trigger.RemoveFootprintTrigger(id) + coreCamTriggered = true + + Actor.Create("camera", true, { Owner = Greece, Location = GasSpawn.Location + CVec.New(1,0) }) + end + end) + + local doomCamTriggered + Trigger.OnEnteredFootprint(DoomRoomFootprint, function(actor, id) + if actor.Owner == Greece and not doomCamTriggered then + Trigger.RemoveFootprintTrigger(id) + doomCamTriggered = true + + local doomCam = Actor.Create("camera", true, { Owner = Greece, Location = DoomRoomCam.Location }) + Media.PlaySoundNotification(Greece, "AlertBleep") + Media.DisplayMessage(UserInterface.Translate("be-sneaky"), UserInterface.Translate("soldier")) + Trigger.AfterDelay(DateTime.Minutes(1), function() + doomCam.Destroy() + end) + end + end) +end + +SendRifles = function() + RiflesSent = true + Trigger.AfterDelay(DateTime.Seconds(2), function() + Reinforcements.Reinforce(Greece, { "e1", "e1", "e1" }, { ReinforcementsWest.Location, MRJCamera.Location }, 0) + Media.PlaySpeechNotification(Greece, "ReinforcementsArrived") + end) +end + +GroupPatrol = function(units, waypoints, delay) + local i = 1 + local stop = false + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function() + if stop then + return + end + + if unit.Location == waypoints[i] then + local bool = Utils.All(units, function(actor) return actor.IsIdle end) + + if bool then + stop = true + + i = i + 1 + if i > #waypoints then + i = 1 + end + + Trigger.AfterDelay(delay, function() stop = false end) + end + else + unit.AttackMove(waypoints[i]) + end + end) + end) +end + +Tick = function() + USSR.Cash = 5000 + + if ChargePlaced[1] and ChargePlaced[2] and ChargePlaced[3] and ChargePlaced[4] and ChargePlaced[5] and ChargePlaced[6] and ChargePlaced[7] and ChargePlaced[8] then + Greece.MarkCompletedObjective(PlaceExplosives) + if not Greece.IsObjectiveCompleted(TakeMoney) then + Greece.MarkFailedObjective(TakeMoney) + end + end + + if ChargePlaced[1] and ChargePlaced[2] and not RiflesSent then + SendRifles() + end +end + +WorldLoaded = function() + Greece = Player.GetPlayer("Greece") + USSR = Player.GetPlayer("USSR") + Turkey = Player.GetPlayer("Turkey") + England = Player.GetPlayer("England") + + InitObjectives(Greece) + + PlaceExplosives = AddPrimaryObjective(Greece, "place-explosive-charges") + TakeMoney = AddSecondaryObjective(Greece, "steal-supplies") + StopAllies = AddPrimaryObjective(USSR, "") + + Trigger.AfterDelay(DateTime.Minutes(7), function() + Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(1,0) }) + Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(0,-1) }) + end) + Trigger.AfterDelay(DateTime.Minutes(17), function() + Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(2,0) }) + Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(2,-1) }) + end) + Trigger.AfterDelay(DateTime.Minutes(22), function() + Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location + CVec.New(1,-1) }) + Actor.Create("flare", true, { Owner = England, Location = GasSpawn.Location}) + end) + + Camera.Position = DefaultCameraPosition.CenterPosition + MissionTriggers() + PlaceCharges() + FlameTowerTriggers() + CameraTriggers() + GroupPatrol(CoreRoomPatrol, CoreRoomPath, DateTime.Seconds(5)) + GroupPatrol(DogPatrolA, DogPatrolAPath, DateTime.Seconds(5)) + GroupPatrol(DogPatrolB, DogPatrolBPath, DateTime.Seconds(5)) + GroupPatrol(RiflePatrolA, RiflePatrolAPath, DateTime.Seconds(8)) + GroupPatrol(RiflePatrolB, RiflePatrolBPath, DateTime.Seconds(8)) + GroupPatrol(RiflePatrolC, RiflePatrolCPath, DateTime.Seconds(8)) + + DateTime.TimeLimit = (DateTime.Minutes(32) - TimerLength[Difficulty]) +end diff --git a/mods/ra/maps/allies-13/map.bin b/mods/ra/maps/allies-13/map.bin new file mode 100644 index 0000000000..11aaa92828 Binary files /dev/null and b/mods/ra/maps/allies-13/map.bin differ diff --git a/mods/ra/maps/allies-13/map.png b/mods/ra/maps/allies-13/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/allies-13/map.png differ diff --git a/mods/ra/maps/allies-13/map.yaml b/mods/ra/maps/allies-13/map.yaml new file mode 100644 index 0000000000..f9d1da5e2d --- /dev/null +++ b/mods/ra/maps/allies-13/map.yaml @@ -0,0 +1,1214 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: 13: Focused Blast + +Author: Westwood Studios + +Tileset: INTERIOR + +MapSize: 128,128 + +Bounds: 9,31,90,56 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Allies: BadGuy + Enemies: Turkey, Greece + PlayerReference@Turkey: + Name: Turkey + Faction: allies + Color: D2997D + Allies: Greece + Enemies: USSR, BadGuy + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F6 + LockSpawn: True + LockTeam: True + Enemies: USSR, BadGuy + PlayerReference@BadGuy: + Name: BadGuy + Faction: soviet + Color: FF1400 + Allies: USSR + PlayerReference@England: + Name: England + Faction: allies + Color: A0F08C + Allies: USSR + +Actors: + Actor0: boxes02 + Location: 33,68 + Owner: Neutral + Actor1: boxes05 + Location: 31,68 + Owner: Neutral + Actor2: boxes01 + Location: 58,45 + Owner: Neutral + Actor3: boxes02 + Location: 56,47 + Owner: Neutral + Actor4: boxes03 + Location: 57,48 + Owner: Neutral + Actor5: boxes05 + Location: 56,48 + Owner: Neutral + Actor6: boxes06 + Location: 55,50 + Owner: Neutral + Actor7: boxes07 + Location: 58,50 + Owner: Neutral + Actor8: boxes08 + Location: 56,51 + Owner: Neutral + Actor9: boxes08 + Location: 55,45 + Owner: Neutral + Actor10: boxes05 + Location: 25,55 + Owner: Neutral + Actor11: boxes06 + Location: 21,54 + Owner: Neutral + Actor12: boxes03 + Location: 19,54 + Owner: Neutral + Actor13: boxes01 + Location: 75,75 + Owner: Neutral + Actor14: boxes02 + Location: 82,75 + Owner: Neutral + Actor15: boxes03 + Location: 83,75 + Owner: Neutral + Actor16: boxes04 + Location: 75,79 + Owner: Neutral + Actor17: boxes05 + Location: 76,80 + Owner: Neutral + Actor18: boxes06 + Location: 75,80 + Owner: Neutral + Actor19: boxes06 + Location: 76,78 + Owner: Neutral + Actor20: boxes07 + Location: 82,81 + Owner: Neutral + Actor21: boxes08 + Location: 83,80 + Owner: Neutral + Actor22: boxes09 + Location: 75,81 + Owner: Neutral + Actor23: boxes06 + Location: 81,80 + Owner: Neutral + Actor24: boxes01 + Location: 46,38 + Owner: Neutral + Actor25: boxes02 + Location: 46,37 + Owner: Neutral + Actor26: boxes03 + Location: 45,38 + Owner: Neutral + Actor27: boxes09 + Location: 25,41 + Owner: Neutral + Actor28: boxes08 + Location: 24,41 + Owner: Neutral + Actor29: boxes07 + Location: 19,41 + Owner: Neutral + Actor30: boxes06 + Location: 18,42 + Owner: Neutral + Actor31: boxes05 + Location: 25,43 + Owner: Neutral + Actor32: boxes05 + Location: 25,47 + Owner: Neutral + Actor33: boxes04 + Location: 24,47 + Owner: Neutral + Actor34: boxes03 + Location: 24,48 + Owner: Neutral + Actor35: boxes01 + Location: 18,45 + Owner: Neutral + Actor36: boxes02 + Location: 19,44 + Owner: Neutral + Actor37: boxes01 + Location: 42,49 + Owner: Neutral + Actor38: boxes02 + Location: 39,49 + Owner: Neutral + Actor39: boxes05 + Location: 41,48 + Owner: Neutral + Actor40: boxes09 + Location: 72,35 + Owner: Neutral + Actor41: boxes08 + Location: 69,36 + Owner: Neutral + Actor42: boxes07 + Location: 71,36 + Owner: Neutral + Actor43: boxes05 + Location: 72,37 + Owner: Neutral + Actor44: boxes08 + Location: 76,45 + Owner: Neutral + FlameTower4: ftur + Location: 68,65 + Owner: USSR + FlameTower5: ftur + Location: 62,59 + Owner: USSR + Actor47: brl3 + Location: 68,82 + Owner: USSR + Actor48: barl + Location: 67,82 + Owner: USSR + Actor49: brl3 + Location: 56,82 + Owner: USSR + Actor50: barl + Location: 57,82 + Owner: USSR + Actor51: barl + Location: 58,82 + Owner: USSR + Actor52: brl3 + Location: 24,56 + Owner: USSR + Actor53: brl3 + Location: 24,55 + Owner: USSR + Actor54: barl + Location: 19,55 + Owner: USSR + Actor55: brl3 + Location: 20,55 + Owner: USSR + Actor56: brl3 + Location: 24,58 + Owner: USSR + Actor57: barl + Location: 23,59 + Owner: USSR + Actor58: brl3 + Location: 20,59 + Owner: USSR + Actor59: barl + Location: 19,58 + Owner: USSR + Actor60: barl + Location: 23,54 + Owner: USSR + Actor61: brl3 + Location: 22,54 + Owner: USSR + FlameTower2: ftur + Location: 28,46 + Owner: USSR + FlameTower1: ftur + Location: 17,48 + Owner: USSR + Actor64: apwr + Location: 96,35 + Owner: USSR + Actor65: apwr + Location: 96,32 + Owner: USSR + Actor66: apwr + Location: 96,38 + Owner: USSR + FlameTower7: ftur + Location: 59,68 + Owner: USSR + FlameTower6: ftur + Location: 71,56 + Owner: USSR + FlameTower3: ftur + Location: 48,61 + Owner: USSR + DualTower1: ftur + Location: 80,85 + Owner: USSR + DualTower2: ftur + Location: 78,85 + Owner: USSR + Actor72: apwr + Location: 93,35 + Owner: USSR + Actor73: apwr + Location: 93,32 + Owner: USSR + Actor74: apwr + Location: 90,35 + Owner: USSR + Actor75: brl3 + Location: 62,86 + Owner: USSR + Actor76: barl + Location: 62,85 + Owner: USSR + Actor77: brl3 + Location: 62,83 + Owner: USSR + Actor78: barl + Location: 63,82 + Owner: USSR + Actor79: brl3 + Location: 64,82 + Owner: USSR + Actor80: brl3 + Location: 66,82 + Owner: USSR + FlameTower8: ftur + Location: 70,39 + Owner: USSR + Actor82: brl3 + Location: 53,79 + Owner: USSR + Actor83: barl + Location: 52,79 + Owner: USSR + Actor86: brl3 + Location: 43,79 + Owner: USSR + DoomBarrel: brl3 + Location: 79,85 + Owner: USSR + V28: v2rl + Location: 67,80 + Owner: BadGuy + Facing: 380 + V26: v2rl + Location: 65,80 + Owner: BadGuy + Facing: 380 + V24: v2rl + Location: 59,80 + Owner: BadGuy + Facing: 636 + V22: v2rl + Location: 57,80 + Owner: BadGuy + Facing: 636 + V27: v2rl + Location: 67,78 + Owner: BadGuy + Facing: 380 + V25: v2rl + Location: 65,78 + Owner: BadGuy + Facing: 380 + V23: v2rl + Location: 59,78 + Owner: BadGuy + Facing: 636 + V21: v2rl + Location: 57,78 + Owner: BadGuy + Facing: 636 + Actor96: mrj + Location: 20,56 + Owner: USSR + Facing: 636 + Actor97: mrj + Location: 23,56 + Owner: USSR + Facing: 380 + Actor98: mrj + Location: 20,58 + Owner: USSR + Facing: 892 + Actor99: 3tnk + Location: 20,42 + Owner: BadGuy + Actor100: 3tnk + Location: 23,42 + Owner: BadGuy + Actor101: 3tnk + Location: 23,47 + Owner: BadGuy + Facing: 508 + Actor102: 3tnk + Location: 20,47 + Owner: BadGuy + Facing: 508 + Actor103: 4tnk + Location: 66,45 + Owner: BadGuy + Facing: 508 + Actor104: 4tnk + Location: 68,45 + Owner: BadGuy + Facing: 508 + Actor105: 4tnk + Location: 70,45 + Owner: BadGuy + Facing: 508 + Actor106: 4tnk + Location: 72,45 + Owner: BadGuy + Facing: 508 + Actor107: 4tnk + Location: 74,45 + Owner: BadGuy + Facing: 508 + Actor108: e1 + Location: 11,47 + Owner: Greece + Facing: 636 + SubCell: 4 + Actor109: e1 + Location: 11,48 + Owner: Greece + Facing: 636 + SubCell: 0 + Actor110: e1 + Location: 10,48 + Owner: Greece + Facing: 380 + SubCell: 2 + Actor111: e1 + Location: 11,53 + Owner: Greece + Facing: 764 + SubCell: 4 + Actor112: e1 + Location: 11,54 + Owner: Greece + Facing: 636 + SubCell: 2 + Actor113: e1 + Location: 11,55 + Owner: Greece + Facing: 124 + SubCell: 2 + Engi1: e6 + Location: 10,54 + Owner: Greece + Facing: 764 + SubCell: 2 + Engi2: e6 + Location: 10,55 + Owner: Greece + Facing: 636 + SubCell: 2 + Engi3: e6 + Location: 9,47 + Owner: Greece + Facing: 636 + SubCell: 4 + Engi4: e6 + Location: 9,49 + Owner: Greece + Facing: 764 + SubCell: 2 + TheGeneral: gnrl + Location: 79,82 + Owner: USSR + SubCell: 0 + Facing: 508 + Actor119: e1 + Location: 22,58 + Owner: USSR + Facing: 380 + SubCell: 2 + Actor120: e1 + Location: 22,55 + Owner: USSR + Facing: 252 + SubCell: 1 + Actor121: e1 + Location: 19,60 + Owner: USSR + Facing: 124 + SubCell: 2 + DogPatrolA1: e1 + Location: 32,66 + Owner: USSR + SubCell: 1 + DogPatrolA2: e1 + Location: 32,65 + Owner: USSR + SubCell: 4 + DogPatrolA3: dog + Location: 33,66 + Owner: USSR + SubCell: 3 + Actor125: e2 + Location: 31,54 + Owner: USSR + Facing: 380 + SubCell: 1 + Actor126: e2 + Location: 24,79 + Owner: USSR + SubCell: 3 + Actor127: e1 + Location: 21,74 + Owner: USSR + Facing: 380 + SubCell: 0 + Actor128: e1 + Location: 22,74 + Owner: USSR + Facing: 636 + SubCell: 3 + Actor129: e4 + Location: 40,78 + Owner: USSR + Facing: 636 + SubCell: 2 + Actor130: e1 + Location: 22,77 + Owner: USSR + Facing: 636 + SubCell: 1 + TankRifle1: e1 + Location: 22,44 + Owner: USSR + SubCell: 1 + Facing: 380 + TankRifle2: e1 + Location: 21,45 + Owner: USSR + SubCell: 2 + Facing: 252 + Actor133: medi + Location: 10,54 + Owner: Greece + Facing: 636 + SubCell: 1 + Actor134: chan + Location: 25,78 + Owner: USSR + Facing: 252 + SubCell: 3 + Actor135: chan + Location: 19,77 + Owner: USSR + Facing: 636 + SubCell: 0 + DoomRifle1: e1 + Location: 79,84 + Owner: USSR + SubCell: 1 + DoomRifle3: e1 + Location: 79,84 + Owner: USSR + SubCell: 5 + DoomRifle2: e1 + Location: 79,84 + Owner: USSR + SubCell: 4 + DoomRifle5: e1 + Location: 79,84 + Owner: USSR + SubCell: 3 + DoomRifle4: e1 + Location: 79,84 + Owner: USSR + SubCell: 2 + DoomGren3: e2 + Location: 78,84 + Owner: USSR + SubCell: 3 + DoomGren1: e2 + Location: 78,84 + Owner: USSR + SubCell: 1 + DoomGren5: e2 + Location: 78,84 + Owner: USSR + SubCell: 5 + DoomGren4: e2 + Location: 78,84 + Owner: USSR + SubCell: 2 + DoomGren2: e2 + Location: 78,84 + Owner: USSR + SubCell: 4 + Actor145: chan + Location: 45,36 + Owner: USSR + Facing: 252 + SubCell: 0 + Actor146: chan + Location: 38,36 + Owner: USSR + Facing: 636 + SubCell: 0 + Actor147: chan + Location: 40,58 + Owner: USSR + SubCell: 4 + Actor148: chan + Location: 45,69 + Owner: USSR + SubCell: 2 + Actor149: chan + Location: 40,63 + Owner: USSR + SubCell: 4 + Actor150: chan + Location: 38,78 + Owner: USSR + Facing: 636 + SubCell: 0 + Actor151: chan + Location: 94,75 + Owner: USSR + SubCell: 1 + Actor152: chan + Location: 96,80 + Owner: USSR + SubCell: 1 + Actor153: chan + Location: 87,57 + Owner: USSR + Facing: 380 + SubCell: 3 + Actor154: chan + Location: 84,51 + Owner: USSR + Facing: 636 + SubCell: 3 + Actor155: chan + Location: 86,47 + Owner: USSR + Facing: 124 + SubCell: 4 + DoomFlamer4: e4 + Location: 80,84 + Owner: USSR + SubCell: 2 + DoomFlamer1: e4 + Location: 80,84 + Owner: USSR + SubCell: 1 + DoomFlamer3: e4 + Location: 80,84 + Owner: USSR + SubCell: 3 + DoomFlamer5: e4 + Location: 80,84 + Owner: USSR + SubCell: 5 + DoomFlamer2: e4 + Location: 80,84 + Owner: USSR + SubCell: 4 + Actor162: chan + Location: 56,45 + Owner: USSR + Facing: 636 + SubCell: 4 + Actor163: chan + Location: 56,50 + Owner: USSR + Facing: 252 + SubCell: 0 + Actor164: medi + Location: 10,49 + Owner: Greece + Facing: 764 + SubCell: 2 + Actor165: e1 + Location: 11,49 + Owner: Greece + Facing: 508 + SubCell: 2 + Actor166: e1 + Location: 12,55 + Owner: Greece + Facing: 636 + SubCell: 2 + Actor167: e1 + Location: 32,69 + Owner: USSR + Facing: 892 + SubCell: 3 + Actor168: chan + Location: 73,46 + Owner: USSR + Facing: 380 + SubCell: 4 + Actor169: chan + Location: 66,47 + Owner: USSR + Facing: 636 + SubCell: 1 + Actor170: e1 + Location: 57,46 + Owner: USSR + Facing: 252 + SubCell: 2 + Actor171: e1 + Location: 54,47 + Owner: USSR + Facing: 892 + SubCell: 4 + Actor172: e1 + Location: 57,49 + Owner: USSR + Facing: 636 + SubCell: 2 + Actor173: e1 + Location: 45,58 + Owner: USSR + Facing: 636 + SubCell: 3 + Actor174: e1 + Location: 39,61 + Owner: USSR + Facing: 380 + SubCell: 0 + Actor175: e1 + Location: 42,69 + Owner: USSR + Facing: 636 + SubCell: 2 + Actor176: e1 + Location: 40,67 + Owner: USSR + Facing: 252 + SubCell: 1 + CorePatrol3: e1 + Location: 66,57 + Owner: USSR + SubCell: 2 + Facing: 764 + CorePatrol1: e1 + Location: 65,57 + Owner: USSR + SubCell: 4 + Facing: 380 + CorePatrol2: e2 + Location: 66,57 + Owner: USSR + SubCell: 4 + Facing: 380 + Actor180: dog + Location: 56,49 + Owner: USSR + Facing: 124 + SubCell: 4 + Actor181: dog + Location: 57,45 + Owner: USSR + Facing: 380 + SubCell: 0 + Actor182: e1 + Location: 94,76 + Owner: USSR + Facing: 380 + SubCell: 2 + Actor183: e1 + Location: 78,66 + Owner: USSR + Facing: 380 + SubCell: 2 + Actor184: e1 + Location: 85,57 + Owner: USSR + Facing: 636 + SubCell: 2 + Actor185: e1 + Location: 83,49 + Owner: USSR + Facing: 636 + SubCell: 1 + Actor186: e1 + Location: 82,48 + Owner: USSR + Facing: 380 + SubCell: 2 + Actor187: e1 + Location: 84,55 + Owner: USSR + Facing: 380 + SubCell: 3 + Actor188: dog + Location: 85,49 + Owner: USSR + Facing: 380 + SubCell: 2 + Actor189: dog + Location: 65,65 + Owner: USSR + Facing: 380 + SubCell: 1 + Actor190: e1 + Location: 39,48 + Owner: USSR + Facing: 124 + SubCell: 0 + Actor191: e1 + Location: 42,47 + Owner: USSR + Facing: 380 + SubCell: 1 + Actor192: e1 + Location: 41,38 + Owner: USSR + Facing: 380 + SubCell: 0 + Actor193: e1 + Location: 39,38 + Owner: USSR + Facing: 636 + SubCell: 2 + Actor194: e1 + Location: 39,35 + Owner: USSR + Facing: 636 + SubCell: 0 + Actor195: e1 + Location: 60,66 + Owner: USSR + Facing: 892 + SubCell: 3 + Actor196: e1 + Location: 61,67 + Owner: USSR + Facing: 636 + SubCell: 4 + Actor197: e1 + Location: 61,80 + Owner: USSR + Facing: 508 + SubCell: 4 + Actor198: e1 + Location: 62,78 + Owner: USSR + Facing: 892 + SubCell: 2 + Actor199: e1 + Location: 58,79 + Owner: USSR + Facing: 636 + SubCell: 4 + RiflePatrolB1: e1 + Location: 70,58 + Owner: USSR + SubCell: 3 + Facing: 380 + RiflePatrolB2: e1 + Location: 71,58 + Owner: USSR + SubCell: 4 + Facing: 636 + Actor202: e1 + Location: 69,43 + Owner: USSR + Facing: 508 + SubCell: 2 + Actor203: e2 + Location: 70,43 + Owner: USSR + Facing: 380 + SubCell: 2 + Actor204: e2 + Location: 70,43 + Owner: USSR + Facing: 636 + SubCell: 3 + Actor205: e1 + Location: 71,43 + Owner: USSR + Facing: 764 + SubCell: 0 + Actor206: e1 + Location: 67,44 + Owner: USSR + Facing: 636 + SubCell: 1 + Actor207: e1 + Location: 74,44 + Owner: USSR + Facing: 380 + SubCell: 1 + Actor208: dog + Location: 39,46 + Owner: USSR + Facing: 252 + SubCell: 1 + Actor209: dog + Location: 69,37 + Owner: USSR + Facing: 636 + SubCell: 1 + Actor210: e1 + Location: 79,67 + Owner: USSR + SubCell: 3 + Actor211: e1 + Location: 89,54 + Owner: USSR + Facing: 380 + SubCell: 4 + RiflePatrolC1: e1 + Location: 67,48 + Owner: USSR + SubCell: 1 + Facing: 636 + RiflePatrolC2: e1 + Location: 66,48 + Owner: USSR + SubCell: 3 + Facing: 380 + Actor214: dog + Location: 37,77 + Owner: USSR + Facing: 636 + SubCell: 1 + Actor215: dog + Location: 61,81 + Owner: USSR + Facing: 892 + SubCell: 0 + Actor216: spy + Location: 9,53 + Owner: Greece + Facing: 764 + SubCell: 4 + RiflePatrolA1: e1 + Location: 60,61 + Owner: USSR + Facing: 380 + SubCell: 4 + RiflePatrolA2: e1 + Location: 60,61 + Owner: USSR + SubCell: 1 + Actor218: e1 + Location: 11,47 + Owner: Greece + Facing: 636 + SubCell: 3 + Actor219: e1 + Location: 12,53 + Owner: Greece + Facing: 892 + SubCell: 0 + TankRifle3: e1 + Location: 22,45 + Owner: USSR + SubCell: 0 + Facing: 764 + DogPatrolB1: e1 + Location: 70,62 + Owner: USSR + Facing: 380 + SubCell: 3 + DogPatrolB2: e1 + Location: 70,62 + Owner: USSR + Facing: 764 + SubCell: 1 + DogPatrolB3: dog + Location: 70,62 + Owner: USSR + Facing: 636 + SubCell: 2 + Actor225: e2 + Location: 63,79 + Owner: USSR + Facing: 892 + SubCell: 2 + Actor226: e2 + Location: 62,80 + Owner: USSR + Facing: 380 + SubCell: 4 + Actor227: e2 + Location: 60,81 + Owner: USSR + Facing: 636 + SubCell: 4 + Actor228: e2 + Location: 61,79 + Owner: USSR + Facing: 380 + SubCell: 3 + Actor229: e2 + Location: 61,78 + Owner: USSR + Facing: 252 + SubCell: 0 + Actor230: e2 + Location: 64,80 + Owner: USSR + Facing: 636 + SubCell: 0 + Actor231: e1 + Location: 12,54 + Owner: Greece + Facing: 508 + SubCell: 0 + Actor232: e1 + Location: 11,54 + Owner: Greece + Facing: 380 + SubCell: 4 + Actor233: e1 + Location: 11,49 + Owner: Greece + Facing: 636 + SubCell: 0 + Actor234: dog + Location: 72,76 + Owner: USSR + Facing: 636 + SubCell: 0 + Actor235: e1 + Location: 27,46 + Owner: USSR + Facing: 380 + SubCell: 4 + Actor236: e1 + Location: 42,62 + Owner: USSR + SubCell: 0 + Actor273: moneycrate + Owner: Neutral + Location: 69,35 + Actor274: moneycrate + Owner: Neutral + Location: 70,35 + Actor275: moneycrate + Owner: Neutral + Location: 71,35 + Healcrate1: healcrate + Owner: Neutral + Location: 70,36 + Healcrate2: healcrate + Owner: Neutral + Location: 33,70 + Healcrate3: healcrate + Owner: Neutral + Location: 41,49 + Actor291: boxes02 + Owner: Neutral + Location: 77,82 + Actor292: boxes04 + Owner: Neutral + Location: 81,82 + Actor293: boxes07 + Owner: Neutral + Location: 74,85 + Actor294: boxes02 + Owner: Neutral + Location: 83,85 + Actor295: boxes06 + Owner: Neutral + Location: 74,84 + Actor296: boxes04 + Owner: Neutral + Location: 83,84 + Actor298: brl3 + Owner: USSR + Location: 77,80 + Actor297: barl + Owner: USSR + Location: 77,81 + Actor299: brl3 + Owner: USSR + Location: 76,79 + Actor300: barl + Owner: USSR + Location: 81,81 + Actor301: brl3 + Owner: USSR + Location: 82,80 + Actor302: barl + Owner: USSR + Location: 81,79 + Actor303: boxes01 + Owner: Neutral + Location: 74,77 + Actor304: boxes06 + Owner: Neutral + Location: 82,77 + Actor305: boxes05 + Owner: Neutral + Location: 82,76 + DefaultCameraPosition: waypoint + Location: 13,51 + Owner: Neutral + ReinforcementsWest: waypoint + Location: 9,54 + Owner: Neutral + FlameConsole1: waypoint + Location: 11,46 + Owner: Neutral + FlameConsole2: waypoint + Location: 30,53 + Owner: Neutral + FlameConsole3: waypoint + Location: 48,44 + Owner: Neutral + FlameConsole4: waypoint + Location: 60,56 + Owner: Neutral + FlameConsole5: waypoint + Location: 65,64 + Owner: Neutral + FlameConsole6: waypoint + Location: 94,71 + Owner: Neutral + FlameConsole7: waypoint + Location: 49,78 + Owner: Neutral + FlameConsole8: waypoint + Location: 48,78 + Owner: Neutral + TwoTowerConsole: waypoint + Location: 72,76 + Owner: Neutral + TurncoatFlameTurret: waypoint + Location: 62,79 + Owner: Neutral + TurncoatConsole: waypoint + Location: 62,72 + Owner: Neutral + Generator1: waypoint + Location: 23,78 + Owner: Neutral + Generator2: waypoint + Location: 45,35 + Owner: Neutral + Generator3: waypoint + Location: 45,68 + Owner: Neutral + Generator4: waypoint + Location: 39,78 + Owner: Neutral + Generator5: waypoint + Location: 60,68 + Owner: Neutral + Generator6: waypoint + Location: 70,58 + Owner: Neutral + Generator7: waypoint + Location: 88,54 + Owner: Neutral + Generator8: waypoint + Location: 95,75 + Owner: Neutral + MRJCamera: waypoint + Location: 21,57 + Owner: Neutral + HeavyTankCam: waypoint + Location: 21,44 + Owner: Neutral + ReinforcementsSouth: waypoint + Location: 61,86 + Owner: Neutral + SouthTeamStop: waypoint + Location: 61,84 + Owner: Neutral + GasSpawn: waypoint + Location: 64,62 + Owner: Neutral + DoomRoomCam: waypoint + Location: 79,79 + Owner: Neutral + CorePathA: waypoint + Location: 70,62 + Owner: Neutral + CorePathB: waypoint + Location: 65,67 + Owner: Neutral + CorePathC: waypoint + Location: 60,61 + Owner: Neutral + CorePathD: waypoint + Location: 66,57 + Owner: Neutral + PatrolPath1: waypoint + Location: 21,66 + Owner: Neutral + PatrolPath2: waypoint + Location: 32,56 + Owner: Neutral + PatrolPath3: waypoint + Location: 32,66 + Owner: Neutral + PatrolPath4: waypoint + Location: 79,66 + Owner: Neutral + PatrolPath5: waypoint + Location: 95,76 + Owner: Neutral + PatrolPath6: waypoint + Location: 52,61 + Owner: Neutral + PatrolPath7: waypoint + Location: 40,61 + Owner: Neutral + PatrolPath8: waypoint + Location: 61,79 + Owner: Neutral + PatrolPath9: waypoint + Location: 85,48 + Owner: Neutral + PatrolPath10: waypoint + Location: 81,59 + Owner: Neutral + PatrolPath11: waypoint + Location: 66,48 + Owner: Neutral + MoneyCrates: waypoint + Location: 70,35 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Translations: ra|languages/lua/en.ftl, ra|languages/campaign/en.ftl + +Weapons: weapons.yaml diff --git a/mods/ra/maps/allies-13/rules.yaml b/mods/ra/maps/allies-13/rules.yaml new file mode 100644 index 0000000000..cb363baff9 --- /dev/null +++ b/mods/ra/maps/allies-13/rules.yaml @@ -0,0 +1,45 @@ +World: + LuaScript: + Scripts: allies13.lua, campaign.lua, utils.lua + MissionData: + BackgroundVideo: spy.vqa + WinVideo: apcescpe.vqa + LossVideo: bmap.vqa + Briefing: LANDCOM 16 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A9\n\nCONGRATULATIONS. CAPTURING TECH CENTERS HAS REVEALED AN UNDERGROUND WEAPONS FACILITY. PLACE EXPLOSIVE CHARGES ON ALL GENERATORS. RESULTING EXPOSIONS SHOULD DESTROY FACILITY.\nGET OUT BEFORE NERVE GAS IS USED.\n\nTRANSMISSION ENDS. + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: dropdown-difficulty.label + Description: dropdown-difficulty.description + Values: + easy: options-difficulty.easy + normal: options-difficulty.normal + hard: options-difficulty.hard + Default: normal + TimeLimitManager: + CountdownLabel: MISSION_TEXT + CountdownText: Sarin gas released in {0} + StartGameNotification: + Notification: MissionTimerInitialised + +Player: + MissionObjectives: + GameOverDelay: 4000 + +3TNK: + AutoTarget: + InitialStanceAI: HoldFire + +4TNK: + AutoTarget: + InitialStanceAI: HoldFire + +V2RL: + AutoTarget: + InitialStanceAI: HoldFire + +FTUR: + RevealOnDeath: + RevealForRelationships: Enemy + Duration: 60 + Armor: + Type: Concrete diff --git a/mods/ra/maps/allies-13/weapons.yaml b/mods/ra/maps/allies-13/weapons.yaml new file mode 100644 index 0000000000..0ee54e3668 --- /dev/null +++ b/mods/ra/maps/allies-13/weapons.yaml @@ -0,0 +1,32 @@ +FireballLauncher: + Range: 4c0 + Burst: 1 + Projectile: Bullet + Speed: 175 + TrailImage: fb2 + Image: FB1 + +^MG: + Warhead@1Dam: SpreadDamage + Spread: 108 + Falloff: 100, 50, 25, 12, 6, 3, 0 + Damage: 1500 + Versus: + None: 100 + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 1 + +Grenade: + Warhead@1Dam: SpreadDamage + Spread: 256 + Damage: 6000 + Versus: + None: 60 + Wood: 100 + Light: 25 + Heavy: 25 + Concrete: 10 + +# Changes to Rifle and Grenade damage are so flame towers won't be killed by infantry in this mission. \ No newline at end of file diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 22d0ae332f..75f06d21d3 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -15,6 +15,7 @@ Allied Campaign: allies-09a allies-10a allies-10b + allies-13 Soviet Campaign: soviet-01 soviet-02a