diff --git a/mods/ra/maps/soviet-08a/map.bin b/mods/ra/maps/soviet-08a/map.bin new file mode 100644 index 0000000000..902442674a Binary files /dev/null and b/mods/ra/maps/soviet-08a/map.bin differ diff --git a/mods/ra/maps/soviet-08a/map.png b/mods/ra/maps/soviet-08a/map.png new file mode 100644 index 0000000000..dc774179f2 Binary files /dev/null and b/mods/ra/maps/soviet-08a/map.png differ diff --git a/mods/ra/maps/soviet-08a/map.yaml b/mods/ra/maps/soviet-08a/map.yaml new file mode 100644 index 0000000000..ec2dc15a10 --- /dev/null +++ b/mods/ra/maps/soviet-08a/map.yaml @@ -0,0 +1,1065 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 08a: Investigate Elba Island + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 17,17,94,94 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Germany, Greece + PlayerReference@Germany: + Name: Germany + Faction: allies + Color: 505050 + Allies: Greece + Enemies: USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F6 + Allies: Germany + Enemies: USSR + +Actors: + Actor0: brik + Location: 50,37 + Owner: Neutral + Actor1: brik + Location: 51,37 + Owner: Neutral + Actor2: brik + Location: 50,38 + Owner: Neutral + Actor3: brik + Location: 51,38 + Owner: Neutral + Actor4: brik + Location: 51,39 + Owner: Neutral + Actor5: brik + Location: 52,39 + Owner: Neutral + Actor6: brik + Location: 51,40 + Owner: Neutral + Actor7: brik + Location: 52,40 + Owner: Neutral + Actor8: brik + Location: 51,45 + Owner: Neutral + Actor9: brik + Location: 52,45 + Owner: Neutral + Actor10: brik + Location: 49,46 + Owner: Neutral + Actor11: brik + Location: 50,46 + Owner: Neutral + Actor12: brik + Location: 51,46 + Owner: Neutral + Actor13: brik + Location: 52,46 + Owner: Neutral + Actor14: brik + Location: 49,47 + Owner: Neutral + Actor15: brik + Location: 46,48 + Owner: Neutral + Actor16: brik + Location: 47,48 + Owner: Neutral + Actor17: brik + Location: 48,48 + Owner: Neutral + Actor18: brik + Location: 49,48 + Owner: Neutral + Actor19: brik + Location: 38,49 + Owner: Neutral + Actor20: brik + Location: 39,49 + Owner: Neutral + Actor21: brik + Location: 44,49 + Owner: Neutral + Actor22: brik + Location: 45,49 + Owner: Neutral + Actor23: brik + Location: 46,49 + Owner: Neutral + Actor24: brik + Location: 38,50 + Owner: Neutral + Actor25: brik + Location: 39,50 + Owner: Neutral + Actor26: brik + Location: 44,50 + Owner: Neutral + Actor27: brik + Location: 45,50 + Owner: Neutral + Actor28: sbag + Location: 77,61 + Owner: Greece + Actor29: sbag + Location: 78,61 + Owner: Greece + Actor30: v15 + Location: 91,61 + Owner: Neutral + Actor31: v16 + Location: 92,61 + Owner: Neutral + Actor32: sbag + Location: 78,62 + Owner: Greece + Actor33: sbag + Location: 78,63 + Owner: Greece + Actor34: sbag + Location: 78,64 + Owner: Greece + Actor35: sbag + Location: 69,65 + Owner: Greece + Actor36: sbag + Location: 78,65 + Owner: Greece + Actor37: v17 + Location: 81,65 + Owner: Neutral + Actor38: v16 + Location: 82,65 + Owner: Neutral + Actor39: sbag + Location: 69,66 + Owner: Greece + Actor40: sbag + Location: 78,66 + Owner: Greece + Actor41: sbag + Location: 69,67 + Owner: Greece + Actor42: sbag + Location: 69,68 + Owner: Greece + Actor43: sbag + Location: 70,68 + Owner: Greece + Actor44: sbag + Location: 83,72 + Owner: Greece + Actor45: sbag + Location: 90,72 + Owner: Greece + Actor46: sbag + Location: 83,73 + Owner: Greece + Actor47: sbag + Location: 84,73 + Owner: Greece + Actor48: sbag + Location: 85,73 + Owner: Greece + Actor49: sbag + Location: 88,73 + Owner: Greece + Actor50: sbag + Location: 89,73 + Owner: Greece + Actor51: sbag + Location: 90,73 + Owner: Greece + Actor52: sbag + Location: 71,74 + Owner: Greece + Actor53: sbag + Location: 77,74 + Owner: Greece + Actor54: sbag + Location: 71,75 + Owner: Greece + Actor55: sbag + Location: 72,75 + Owner: Greece + Actor56: sbag + Location: 76,75 + Owner: Greece + Actor57: sbag + Location: 77,75 + Owner: Greece + Actor58: sbag + Location: 60,82 + Owner: Greece + Actor59: sbag + Location: 60,83 + Owner: Greece + Actor60: sbag + Location: 61,83 + Owner: Greece + Actor61: sbag + Location: 60,86 + Owner: Greece + Actor62: sbag + Location: 61,86 + Owner: Greece + Actor63: sbag + Location: 60,87 + Owner: Greece + Actor64: t01 + Location: 39,96 + Owner: Neutral + Actor65: t02 + Location: 40,98 + Owner: Neutral + Actor66: t05 + Location: 50,84 + Owner: Neutral + Actor67: t13 + Location: 101,24 + Owner: Neutral + Actor68: t15 + Location: 95,51 + Owner: Neutral + Actor69: t16 + Location: 97,51 + Owner: Neutral + Actor70: tc04 + Location: 96,49 + Owner: Neutral + Actor71: tc05 + Location: 97,50 + Owner: Neutral + Actor72: tc02 + Location: 71,49 + Owner: Neutral + Actor73: tc03 + Location: 79,47 + Owner: Neutral + Actor74: tc03 + Location: 29,41 + Owner: Neutral + Actor75: tc01 + Location: 35,25 + Owner: Neutral + Actor76: tc01 + Location: 56,34 + Owner: Neutral + Actor77: tc02 + Location: 60,37 + Owner: Neutral + Actor78: t02 + Location: 62,50 + Owner: Neutral + Actor79: t01 + Location: 70,53 + Owner: Neutral + Actor80: t01 + Location: 46,39 + Owner: Neutral + Actor81: t01 + Location: 37,46 + Owner: Neutral + Actor82: t01 + Location: 46,49 + Owner: Neutral + Actor83: t15 + Location: 66,67 + Owner: Neutral + Actor85: t12 + Location: 33,84 + Owner: Neutral + Actor86: t14 + Location: 39,81 + Owner: Neutral + Actor87: tc01 + Location: 47,51 + Owner: Neutral + Actor88: tc04 + Location: 49,50 + Owner: Neutral + Actor89: tc05 + Location: 90,63 + Owner: Neutral + Actor90: t16 + Location: 55,25 + Owner: Neutral + Actor91: t17 + Location: 55,27 + Owner: Neutral + Actor92: tc01 + Location: 55,26 + Owner: Neutral + Actor93: t01 + Location: 52,27 + Owner: Neutral + Actor94: t05 + Location: 86,54 + Owner: Neutral + Actor95: t07 + Location: 100,53 + Owner: Neutral + Actor96: t06 + Location: 100,52 + Owner: Neutral + Actor97: t01 + Location: 100,85 + Owner: Neutral + Actor98: tc02 + Location: 86,27 + Owner: Neutral + Actor99: t01 + Location: 100,21 + Owner: Neutral + Actor100: t08 + Location: 72,61 + Owner: Neutral + Actor101: t10 + Location: 67,62 + Owner: Neutral + Actor102: tc02 + Location: 55,68 + Owner: Neutral + Actor103: t01 + Location: 85,59 + Owner: Neutral + Actor104: t01 + Location: 73,56 + Owner: Neutral + Actor105: t02 + Location: 70,57 + Owner: Neutral + Actor106: t07 + Location: 54,58 + Owner: Neutral + Actor107: t07 + Location: 45,83 + Owner: Neutral + Actor108: tc03 + Location: 46,76 + Owner: Neutral + Actor109: tc02 + Location: 44,85 + Owner: Neutral + Actor110: tc03 + Location: 50,35 + Owner: Neutral + Actor111: tc05 + Location: 51,47 + Owner: Neutral + Actor112: tc04 + Location: 50,46 + Owner: Neutral + Actor113: tc03 + Location: 54,43 + Owner: Neutral + Actor114: t16 + Location: 66,94 + Owner: Neutral + Actor115: t17 + Location: 40,69 + Owner: Neutral + Actor116: tc04 + Location: 99,60 + Owner: Neutral + Actor117: t01 + Location: 89,34 + Owner: Neutral + Actor118: t10 + Location: 98,33 + Owner: Neutral + Actor119: t14 + Location: 86,40 + Owner: Neutral + Actor120: t08 + Location: 97,42 + Owner: Neutral + Actor121: t10 + Location: 79,57 + Owner: Neutral + Actor122: t01 + Location: 77,41 + Owner: Neutral + Actor123: tc01 + Location: 43,93 + Owner: Neutral + Actor124: t14 + Location: 68,22 + Owner: Neutral + Actor125: tc01 + Location: 70,22 + Owner: Neutral + Actor126: tc01 + Location: 78,16 + Owner: Neutral + Actor127: t01 + Location: 60,70 + Owner: Neutral + Actor128: tc03 + Location: 54,109 + Owner: Neutral + Actor129: tc02 + Location: 58,109 + Owner: Neutral + Actor130: t01 + Location: 69,89 + Owner: Neutral + Actor131: t02 + Location: 67,87 + Owner: Neutral + Actor132: tc01 + Location: 96,109 + Owner: Neutral + Actor333: tc01 + Owner: Neutral + Location: 53,91 + Actor133: t01 + Location: 70,63 + Owner: Neutral + Actor134: tc03 + Location: 90,84 + Owner: Neutral + Actor135: tc01 + Location: 88,81 + Owner: Neutral + Actor136: t02 + Location: 52,55 + Owner: Neutral + Actor137: t10 + Location: 64,59 + Owner: Neutral + Actor138: t11 + Location: 78,81 + Owner: Neutral + Actor139: tc03 + Location: 86,46 + Owner: Neutral + Actor140: t10 + Location: 63,65 + Owner: Neutral + Actor141: t03 + Location: 60,65 + Owner: Neutral + Actor142: t08 + Location: 57,62 + Owner: Neutral + Actor143: t01 + Location: 91,72 + Owner: Neutral + SovietBase: fact + Location: 89,93 + Owner: USSR + Actor145: powr + Location: 93,91 + Owner: USSR + Church: v01 + Location: 88,65 + Owner: Germany + Actor147: v02 + Location: 88,69 + Owner: Germany + Actor148: v03 + Location: 94,65 + Owner: Germany + Actor149: v04 + Location: 88,62 + Owner: Germany + Actor150: v05 + Location: 94,61 + Owner: Germany + Actor151: v06 + Location: 83,62 + Owner: Germany + Actor152: v07 + Location: 83,69 + Owner: Germany + Actor153: v08 + Location: 84,65 + Owner: Germany + GreeceConyard: fact + Location: 39,40 + Owner: Greece + Actor155: spen + Location: 98,94 + Owner: USSR + Actor156: powr + Location: 72,62 + Owner: Germany + Actor157: tent + Location: 76,65 + Owner: Germany + Actor158: hbox + Location: 75,66 + Owner: Germany + Actor159: gun + Location: 70,69 + Owner: Germany + Facing: 159 + Actor160: weaf + Location: 71,65 + Owner: Germany + Actor161: facf + Location: 75,62 + Owner: Germany + Power: powr + Location: 42,36 + Owner: Greece + Actor163: silo + Location: 44,35 + Owner: Greece + Actor164: silo + Location: 45,35 + Owner: Greece + Actor165: silo + Location: 44,34 + Owner: Greece + GreeceTent2: tent + Location: 47,42 + Owner: Greece + Apwr4: apwr + Location: 39,37 + Owner: Greece + GreeceWarFactory: weap + Location: 43,43 + Owner: Greece + Actor169: hbox + Location: 49,42 + Owner: Greece + Actor170: hbox + Location: 41,46 + Owner: Greece + Service: fix + Location: 47,38 + Owner: Greece + GreeceNavalYard: syrd + Location: 41,29 + Owner: Greece + Apwr1: apwr + Location: 36,36 + Owner: Greece + Actor174: gun + Location: 51,41 + Owner: Greece + Radar: dome + Location: 34,37 + Owner: Greece + Actor176: agun + Location: 42,35 + Owner: Greece + Actor177: agun + Location: 38,43 + Owner: Greece + Actor178: agun + Location: 46,41 + Owner: Greece + Apwr2: apwr + Location: 36,40 + Owner: Greece + Actor180: hbox + Location: 35,36 + Owner: Greece + Actor181: hbox + Location: 40,33 + Owner: Greece + Actor182: gun + Location: 34,41 + Owner: Greece + Actor183: gun + Location: 36,35 + Owner: Greece + Actor184: gun + Location: 43,49 + Owner: Greece + Actor185: gun + Location: 51,44 + Owner: Greece + Actor186: gun + Location: 40,49 + Owner: Greece + GreeceTent1: tent + Location: 39,44 + Owner: Greece + Apwr3: apwr + Location: 39,34 + Owner: Greece + Actor189: jeep + Location: 85,92 + Owner: Germany + Facing: 191 + Actor190: 2tnk + Location: 55,49 + Owner: Greece + Facing: 159 + Actor191: 2tnk + Location: 58,47 + Owner: Greece + Facing: 159 + Actor192: 2tnk + Location: 42,69 + Owner: Greece + Facing: 127 + Actor193: 2tnk + Location: 44,69 + Owner: Greece + Facing: 127 + Actor194: 2tnk + Location: 43,52 + Owner: Greece + Facing: 127 + Actor195: 2tnk + Location: 39,52 + Owner: Greece + Facing: 127 + Actor196: 2tnk + Location: 67,43 + Owner: Greece + Facing: 191 + Actor197: 2tnk + Location: 67,45 + Owner: Greece + Facing: 191 + Actor198: jeep + Location: 57,42 + Owner: Greece + Facing: 159 + Actor199: jeep + Location: 54,46 + Owner: Greece + Facing: 159 + Actor200: jeep + Location: 41,51 + Owner: Greece + Facing: 127 + Actor201: jeep + Location: 61,44 + Owner: Greece + Facing: 191 + Actor202: arty + Location: 42,67 + Owner: Greece + Facing: 127 + Actor203: arty + Location: 45,67 + Owner: Greece + Facing: 95 + Actor204: arty + Location: 63,44 + Owner: Greece + Facing: 191 + Actor205: arty + Location: 56,46 + Owner: Greece + Facing: 159 + Actor206: arty + Location: 40,50 + Owner: Greece + Facing: 159 + Actor207: jeep + Location: 72,72 + Owner: Germany + Facing: 159 + Actor208: jeep + Location: 84,70 + Owner: Germany + Facing: 159 + Actor209: 1tnk + Location: 57,96 + Owner: Germany + Facing: 191 + Actor210: 1tnk + Location: 73,68 + Owner: Germany + Facing: 127 + Actor211: 2tnk + Location: 43,68 + Owner: Greece + Facing: 127 + Actor212: 2tnk + Location: 60,65 + Owner: Greece + Facing: 159 + Actor213: 2tnk + Location: 61,64 + Owner: Greece + Facing: 127 + Actor214: 2tnk + Location: 63,65 + Owner: Greece + Facing: 95 + Actor215: 2tnk + Location: 62,64 + Owner: Greece + Facing: 127 + Actor216: e1 + Location: 86,91 + Owner: Germany + Facing: 159 + SubCell: 4 + Actor217: e1 + Location: 86,92 + Owner: Germany + Facing: 159 + SubCell: 3 + Actor218: e1 + Location: 87,91 + Owner: Germany + Facing: 191 + SubCell: 4 + Actor219: e1 + Location: 86,93 + Owner: Germany + Facing: 159 + SubCell: 4 + Actor220: e1 + Location: 88,91 + Owner: USSR + Facing: 95 + SubCell: 4 + Actor221: e1 + Location: 88,93 + Owner: USSR + SubCell: 3 + Actor222: e1 + Location: 87,92 + Owner: USSR + Facing: 63 + SubCell: 4 + Actor223: e1 + Location: 78,68 + Owner: Germany + Facing: 159 + SubCell: 1 + Actor224: e1 + Location: 74,69 + Owner: Germany + Facing: 159 + SubCell: 2 + Actor225: e3 + Location: 70,66 + Owner: Germany + Facing: 159 + SubCell: 2 + Actor226: e3 + Location: 85,72 + Owner: Germany + Facing: 159 + SubCell: 2 + Actor227: e3 + Location: 88,72 + Owner: Germany + Facing: 95 + SubCell: 4 + Actor228: e3 + Location: 87,72 + Owner: Germany + Facing: 223 + SubCell: 3 + Actor229: e3 + Location: 66,97 + Owner: Germany + Facing: 191 + SubCell: 2 + Actor230: e3 + Location: 66,99 + Owner: Germany + Facing: 223 + SubCell: 2 + Actor231: e1 + Location: 60,85 + Owner: Germany + Facing: 191 + SubCell: 3 + Actor232: e1 + Location: 60,84 + Owner: Germany + Facing: 191 + SubCell: 4 + Actor233: e3 + Location: 72,74 + Owner: Germany + Facing: 159 + SubCell: 3 + Actor234: e3 + Location: 76,74 + Owner: Germany + Facing: 95 + SubCell: 4 + Actor235: e3 + Location: 57,97 + Owner: Germany + Facing: 191 + SubCell: 1 + Actor236: e1 + Location: 86,63 + Owner: Germany + Facing: 159 + SubCell: 4 + Actor237: e1 + Location: 92,68 + Owner: Germany + Facing: 95 + SubCell: 2 + Actor238: c3 + Location: 83,64 + Owner: Germany + SubCell: 2 + Actor239: c4 + Location: 95,62 + Owner: Germany + Facing: 159 + SubCell: 3 + Actor240: c5 + Location: 90,67 + Owner: Germany + Facing: 95 + SubCell: 4 + Actor241: c6 + Location: 84,67 + Owner: Germany + SubCell: 2 + Actor242: c1 + Location: 93,64 + Owner: Germany + SubCell: 0 + Actor243: c1 + Location: 90,60 + Owner: Germany + Facing: 95 + SubCell: 3 + Actor244: e3 + Location: 60,64 + Owner: Greece + Facing: 159 + SubCell: 1 + Actor245: e3 + Location: 63,64 + Owner: Greece + Facing: 95 + SubCell: 0 + Actor246: c2 + Location: 88,61 + Owner: Germany + SubCell: 1 + Actor247: c2 + Location: 83,67 + Owner: Germany + SubCell: 1 + Actor248: c2 + Location: 94,63 + Owner: Germany + SubCell: 3 + Actor249: c4 + Location: 88,64 + Owner: Germany + SubCell: 4 + Actor250: c8 + Location: 82,61 + Owner: Germany + SubCell: 0 + Actor251: c8 + Location: 90,70 + Owner: Germany + SubCell: 0 + Actor252: ss + Location: 100,93 + Owner: USSR + Actor253: ss + Location: 101,94 + Owner: USSR + Facing: 191 + Actor254: ss + Location: 101,93 + Owner: USSR + Facing: 223 + Actor255: ss + Location: 101,96 + Owner: USSR + Facing: 191 + Actor256: ss + Location: 101,97 + Owner: USSR + Facing: 159 + Actor257: ss + Location: 100,97 + Owner: USSR + Facing: 127 + Actor258: pt + Location: 19,26 + Owner: Greece + Facing: 191 + Actor259: pt + Location: 19,58 + Owner: Greece + Facing: 159 + Actor260: pt + Location: 49,109 + Owner: Greece + Facing: 223 + Actor261: pt + Location: 109,75 + Owner: Greece + Facing: 31 + Actor262: pt + Location: 109,31 + Owner: Greece + Facing: 63 + Actor263: pt + Location: 69,18 + Owner: Greece + Facing: 63 + Actor264: dd + Location: 48,23 + Owner: Greece + Facing: 159 + Oreref: proc + Owner: Greece + Location: 43,38 + GemMine: gmine + Owner: Neutral + Location: 32,32 + WaterUnloadEntry1: waypoint + Location: 110,74 + Owner: Neutral + WaterUnloadEntry6: waypoint + Location: 110,30 + Owner: Neutral + WaterUnloadEntry4: waypoint + Location: 17,25 + Owner: Neutral + WaterUnloadEntry3: waypoint + Location: 17,57 + Owner: Neutral + WaterUnloadEntry2: waypoint + Location: 50,110 + Owner: Neutral + WaterUnloadEntry5: waypoint + Owner: Neutral + Location: 55,17 + WaterUnload1: waypoint + Location: 99,68 + Owner: Neutral + WaterUnload6: waypoint + Location: 99,41 + Owner: Neutral + WaterUnload5: waypoint + Location: 72,37 + Owner: Neutral + WaterUnload4: waypoint + Location: 28,30 + Owner: Neutral + WaterUnload3: waypoint + Location: 37,61 + Owner: Neutral + WaterUnload2: waypoint + Location: 50,98 + Owner: Neutral + SouthEntry: waypoint + Location: 88,110 + Owner: Neutral + EastEntry: waypoint + Location: 110,93 + Owner: Neutral + EastUnload: waypoint + Location: 96,96 + Owner: Neutral + SouthUnload: waypoint + Location: 92,102 + Owner: Neutral + SovietStart: waypoint + Location: 91,92 + Owner: Neutral + ScoutRetreat: waypoint + Location: 74,82 + Owner: Neutral + ChurchAmbush: waypoint + Location: 88,66 + Owner: Neutral + AmbushMove: waypoint + Location: 86,68 + Owner: Neutral + ScriptedParadrop: waypoint + Location: 83,89 + Owner: Neutral + DDEntry: waypoint + Location: 30,17 + Owner: Neutral + DDEntryStop: waypoint + Location: 37,21 + Owner: Neutral + DDPatrol1Point1: waypoint + Location: 22,25 + Owner: Neutral + DDPatrol1Point2: waypoint + Location: 23,57 + Owner: Neutral + DDPatrol1Point3: waypoint + Location: 37,74 + Owner: Neutral + DDPatrol1Point4: waypoint + Location: 19,81 + Owner: Neutral + DDPatrol1Point5: waypoint + Location: 37,104 + Owner: Neutral + DDPatrol1Point6: waypoint + Location: 67,105 + Owner: Neutral + DDPatrol2Point1: waypoint + Location: 59,22 + Owner: Neutral + DDPatrol2Point2: waypoint + Location: 68,34 + Owner: Neutral + DDPatrol2Point3: waypoint + Location: 93,19 + Owner: Neutral + DDPatrol2Point4: waypoint + Location: 107,19 + Owner: Neutral + DDPatrol2Point5: waypoint + Location: 102,45 + Owner: Neutral + DDPatrol2Point6: waypoint + Location: 109,60 + Owner: Neutral + DDPatrol2Point7: waypoint + Location: 97,78 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ra/maps/soviet-08a/rules.yaml b/mods/ra/maps/soviet-08a/rules.yaml new file mode 100644 index 0000000000..f5e5347c5d --- /dev/null +++ b/mods/ra/maps/soviet-08a/rules.yaml @@ -0,0 +1,134 @@ +World: + LuaScript: + Scripts: soviet08a.lua, soviet08a-AI.lua + MissionData: + Briefing: We have detected Allied activity on Elba island. The Allies plan to use this island to stage an attack on the Soviet Empire.\n\nYou must ensure that the island ceases to be under Allied control. Destroy all Allied units on and around the island.\n\nThe local population has been aiding the Allies as well. There is only one punishment for helping the enemy - Death. + BriefingVideo: soviet8.vqa + StartVideo: slntsrvc.vqa + WinVideo: bombrun.vqa + LossVideo: allymorf.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +Player: + PlayerResources: + DefaultCash: 5000 + +CAMERA: + RevealsShroud: + Range: 6c0 + +LST.Reinforcement: + Inherits: LST + RejectsOrders: + -Buildable: + -Selectable: + RenderSprites: + Image: lst + Interactable: + +SCRIPTEDDROP: + ParatroopersPower: + DisplayBeacon: False + DropItems: E1,E1,E4,E4,E4 + AlwaysVisible: + +AFLD: + AirstrikePower@parabombs: + Prerequisites: aircraft.soviet + ParatroopersPower@paratroopers: + DropItems: E1,E1,E1,E2,E2 + +MONEYCRATE: + GiveCashCrateAction: + Amount: 2000 + +STEK: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~tent diff --git a/mods/ra/maps/soviet-08a/soviet08a-AI.lua b/mods/ra/maps/soviet-08a/soviet08a-AI.lua new file mode 100644 index 0000000000..b9bd3552c7 --- /dev/null +++ b/mods/ra/maps/soviet-08a/soviet08a-AI.lua @@ -0,0 +1,176 @@ +--[[ + 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. +]] +IdlingUnits = { } + +DDPatrol1 = { "dd", "dd" } +DDPatrol2 = { "dd", "dd" } +DDPatrol1Path = { DDPatrol1Point1.Location, DDPatrol1Point2.Location, DDPatrol1Point3.Location, DDPatrol1Point4.Location, DDPatrol1Point5.Location, DDPatrol1Point6.Location } +DDPatrol2Path = { DDPatrol2Point1.Location, DDPatrol2Point2.Location, DDPatrol2Point3.Location, DDPatrol2Point4.Location, DDPatrol2Point5.Location, DDPatrol2Point6.Location, DDPatrol2Point7.Location } +ShipArrivePath = { DDEntry.Location, DDEntryStop.Location } + +WTransWays = +{ + { WaterUnloadEntry1.Location, WaterUnload1.Location }, + { WaterUnloadEntry2.Location, WaterUnload2.Location }, + { WaterUnloadEntry3.Location, WaterUnload3.Location }, + { WaterUnloadEntry4.Location, WaterUnload4.Location }, + { WaterUnloadEntry5.Location, WaterUnload5.Location }, + { WaterUnloadEntry6.Location, WaterUnload6.Location } +} + +WTransUnits = +{ + hard = { { "2tnk", "1tnk", "e1", "e3", "e3" }, { "2tnk", "2tnk", "2tnk" } }, + normal = { { "1tnk", "1tnk", "e3", "e3", "jeep" }, { "2tnk", "e3", "e3", "jeep" } }, + easy = { { "1tnk", "e1", "e1", "e3", "e3" }, { "e3", "e3", "jeep", "jeep" } } +} + +WTransDelays = +{ + easy = 5, + normal = 3, + hard = 2 +} + +AttackGroup = { } +AttackGroupSize = 8 + +ProductionInterval = +{ + easy = DateTime.Seconds(30), + normal = DateTime.Seconds(20), + hard = DateTime.Seconds(10) +} + +AlliedInfantry = { "e1", "e3" } +AlliedVehiclesUpgradeDelay = DateTime.Minutes(15) +AlliedVehicleType = "Normal" +AlliedVehicles = +{ + Normal = { "jeep", "1tnk", "1tnk" }, + Upgraded = { "2tnk", "arty" } +} + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +WTransWaves = function() + local way = Utils.Random(WTransWays) + local units = Utils.Random(WTransUnits) + local attackUnits = Reinforcements.ReinforceWithTransport(greece, "lst", units , way, { way[2], way[1] })[2] + Utils.Do(attackUnits, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(SovietStart.Location) + IdleHunt(a) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end + +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 (GreeceTent1.IsDead or GreeceTent1.Owner ~= greece) and (GreeceTent2.IsDead or GreeceTent2.Owner ~= greece) then + return + end + + greece.Build({ Utils.Random(AlliedInfantry) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceInfantry) + end) +end + +ProduceVehicles = function() + if GreeceWarFactory.IsDead or GreeceWarFactory.Owner ~= greece then + return + end + + greece.Build({ Utils.Random(AlliedVehicles[AlliedVehicleType]) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceVehicles) + end) +end + +BringDDPatrol1 = function() + local units = Reinforcements.Reinforce(greece, DDPatrol1, ShipArrivePath, 0) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(DDPatrol1Path, true, 200) + end) + end) + if GreeceNavalYard.IsDead then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "easy" then + Trigger.AfterDelay(DateTime.Minutes(7), BringDDPatrol1) + else + Trigger.AfterDelay(DateTime.Minutes(4), BringDDPatrol1) + end + end) + end +end + +BringDDPatrol2 = function() + local units = Reinforcements.Reinforce(greece, DDPatrol2, ShipArrivePath, 0) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(DDPatrol2Path, true, 200) + end) + end) + if GreeceNavalYard.IsDead then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "easy" then + Trigger.AfterDelay(DateTime.Minutes(7), BringDDPatrol2) + else + Trigger.AfterDelay(DateTime.Minutes(4), BringDDPatrol2) + end + end) + end +end + +ActivateAI = function() + local difficulty = Map.LobbyOption("difficulty") + WTransUnits = WTransUnits[difficulty] + WTransDelays = WTransDelays[difficulty] + + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == greece and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == greece and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(3), WTransWaves) + + Trigger.AfterDelay(AlliedVehiclesUpgradeDelay, function() AlliedVehicleType = "Upgraded" end) + + ProduceInfantry() + ProduceVehicles() + BringDDPatrol1() + Trigger.AfterDelay(DateTime.Minutes(1), BringDDPatrol2) +end diff --git a/mods/ra/maps/soviet-08a/soviet08a.lua b/mods/ra/maps/soviet-08a/soviet08a.lua new file mode 100644 index 0000000000..879c30f276 --- /dev/null +++ b/mods/ra/maps/soviet-08a/soviet08a.lua @@ -0,0 +1,166 @@ +--[[ + 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. +]] +alliedScouts = { Actor189, Actor216, Actor217, Actor218, Actor219 } + +ussrReinforcements = +{ + east = + { + actors = { "e1", "e1", "e1", "e1", "e1" }, + entryPath = { EastEntry.Location, EastUnload.Location + CVec.New(1, 0) }, + exitPath = { EastEntry.Location }, + }, + south = + { + actors = { "e4", "e4", "e1", "e1", "e1" }, + entryPath = { SouthEntry.Location, SouthUnload.Location + CVec.New(0, 1) }, + exitPath = { SouthEntry.Location } + }, + mammoth = + { + actors = { "4tnk" }, + entryPath = { SouthEntry.Location, SouthUnload.Location + CVec.New(0, 1) }, + exitPath = { SouthEntry.Location } + } +} + +Obj2ActorTriggerActivator = { Church, Actor147, Actor148, Actor149, Actor150, Actor151, Actor152, Actor153 } + +ActivateAIDelay = DateTime.Seconds(45) + +AddEastReinforcementTrigger = function() + Trigger.AfterDelay(DateTime.Seconds(30), function() + Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") + local reinforcement = ussrReinforcements.east + Reinforcements.ReinforceWithTransport(ussr, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) + end) +end + +AddSouthReinforcementTrigger = function() + Trigger.AfterDelay(DateTime.Seconds(60), function() + Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") + local reinforcement = ussrReinforcements.south + Reinforcements.ReinforceWithTransport(ussr, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) + end) +end + +AddParadropReinforcementTrigger = function() + Trigger.AfterDelay(DateTime.Seconds(90), function() + Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") + scripteddrop.SendParatroopers(ScriptedParadrop.CenterPosition, false, 10) + end) +end + +ChurchAmbushTrigger = function() + if not AmbushSwitch then + local hiding = Reinforcements.Reinforce(germany, { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e3', 'e3', 'e3' }, { ChurchAmbush.Location, AmbushMove.Location }) + Utils.Do(hiding, function(actor) + IdleHunt(actor) + end) + end + AmbushSwitch = true +end + +Trigger.OnKilled(Church, function() + Actor.Create("moneycrate", true, { Owner = ussr, Location = ChurchAmbush.Location }) +end) + +Obj2TriggerFunction = function() + ussr.MarkCompletedObjective(DestroyVillageObjective) + Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") + local reinforcement = ussrReinforcements.mammoth + Reinforcements.ReinforceWithTransport(ussr, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) +end + +AddReinforcmentTriggers = function() + AddEastReinforcementTrigger() + AddSouthReinforcementTrigger() + AddParadropReinforcementTrigger() +end + +AddRetreatTrigger = function() + Trigger.OnEnteredProximityTrigger(Actor222.CenterPosition, WDist.FromCells(12), function(actor, id) + if actor.Owner == ussr and actor.Type == "barr" then + alliedScouts = Utils.Where(alliedScouts, function(scout) return not scout.IsDead end) + local removed + Utils.Do(alliedScouts, function(scout) + if scout.Type == "e1" and not removed then + removed = true + else + scout.Stop() + scout.Move(ScoutRetreat.Location, 1) + end + end) + Trigger.RemoveProximityTrigger(id) + end + end) +end + +Tick = function() + greece.Cash = 1000 + + if greece.HasNoRequiredUnits() and germany.HasNoRequiredUnits() then + ussr.MarkCompletedObjective(KillAll) + end + + if ussr.HasNoRequiredUnits() then + greece.MarkCompletedObjective(BeatUSSR) + end +end + +WorldLoaded = function() + ussr = Player.GetPlayer("USSR") + germany = Player.GetPlayer("Germany") + greece = Player.GetPlayer("Greece") + + Trigger.OnObjectiveAdded(ussr, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + KillAll = ussr.AddPrimaryObjective("Destroy all Allied units and structures.") + DestroyVillageObjective = ussr.AddSecondaryObjective("Destroy the village of Allied sympathizers.") + BeatUSSR = greece.AddPrimaryObjective("Defeat the Soviet forces.") + + Trigger.OnObjectiveCompleted(ussr, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(ussr, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(ussr, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(ussr, "MissionFailed") + end) + end) + Trigger.OnPlayerWon(ussr, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(ussr, "MissionAccomplished") + end) + end) + + AddReinforcmentTriggers() + AddRetreatTrigger() + + scripteddrop = Actor.Create("scripteddrop", false, { Owner = ussr }) + + OnAnyDamaged(Obj2ActorTriggerActivator, ChurchAmbushTrigger) + + Trigger.OnAllRemovedFromWorld(Obj2ActorTriggerActivator, Obj2TriggerFunction) + + Camera.Position = SovietBase.CenterPosition + + Trigger.AfterDelay(ActivateAIDelay, ActivateAI) +end + +OnAnyDamaged = function(actors, func) + Utils.Do(actors, function(actor) + Trigger.OnDamaged(actor, func) + end) +end diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 443fde51bc..4d73c58bd6 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -20,6 +20,7 @@ Soviet Campaign: ./mods/ra/maps/soviet-06a ./mods/ra/maps/soviet-06b ./mods/ra/maps/soviet-07 + ./mods/ra/maps/soviet-08a Counterstrike: ./mods/ra/maps/soviet-soldier-volkov-n-chitzkoi Aftermath: