diff --git a/mods/ra/maps/soviet-10/map.bin b/mods/ra/maps/soviet-10/map.bin new file mode 100644 index 0000000000..4e9d072793 Binary files /dev/null and b/mods/ra/maps/soviet-10/map.bin differ diff --git a/mods/ra/maps/soviet-10/map.png b/mods/ra/maps/soviet-10/map.png new file mode 100644 index 0000000000..dc774179f2 Binary files /dev/null and b/mods/ra/maps/soviet-10/map.png differ diff --git a/mods/ra/maps/soviet-10/map.yaml b/mods/ra/maps/soviet-10/map.yaml new file mode 100644 index 0000000000..c1c5f07b1d --- /dev/null +++ b/mods/ra/maps/soviet-10/map.yaml @@ -0,0 +1,1134 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 10: Overseer + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 14,50,100,25 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Greece: + Name: Greece + Bot: campaign + Faction: allies + Color: E2E6F6 + Enemies: Turkey, USSR + PlayerReference@Turkey: + Name: Turkey + Bot: campaign + Faction: soviet + Color: D2997D + Allies: USSR + Enemies: Greece + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Allies: Turkey + Enemies: Greece + +Actors: + Actor0: sbag + Location: 24,50 + Owner: Greece + Actor1: sbag + Location: 25,50 + Owner: Greece + Actor2: sbag + Location: 27,52 + Owner: Greece + Actor3: sbag + Location: 27,53 + Owner: Greece + Actor4: sbag + Location: 28,62 + Owner: Greece + Actor5: sbag + Location: 29,62 + Owner: Greece + Actor15: sbag + Location: 18,69 + Owner: Greece + Actor16: sbag + Location: 17,70 + Owner: Greece + Actor17: sbag + Location: 18,70 + Owner: Greece + Actor18: sbag + Location: 19,70 + Owner: Greece + Actor19: sbag + Location: 20,70 + Owner: Greece + Actor20: sbag + Location: 57,70 + Owner: Greece + Actor21: sbag + Location: 58,70 + Owner: Greece + Actor22: sbag + Location: 59,70 + Owner: Greece + Actor6: brik + Location: 21,64 + Owner: Greece + Actor7: brik + Location: 22,64 + Owner: Greece + Actor8: brik + Location: 21,65 + Owner: Greece + Actor9: brik + Location: 22,65 + Owner: Greece + Actor10: brik + Location: 22,66 + Owner: Greece + Actor11: brik + Location: 21,67 + Owner: Greece + Actor12: brik + Location: 22,67 + Owner: Greece + Actor13: brik + Location: 21,68 + Owner: Greece + Actor14: brik + Location: 22,68 + Owner: Greece + Actor23: t14 + Location: 62,55 + Owner: Neutral + Actor24: t11 + Location: 57,51 + Owner: Neutral + Actor25: t10 + Location: 60,53 + Owner: Neutral + Actor26: t11 + Location: 65,50 + Owner: Neutral + Actor27: t10 + Location: 67,49 + Owner: Neutral + Actor28: tc01 + Location: 76,49 + Owner: Neutral + Actor29: tc03 + Location: 81,50 + Owner: Neutral + Actor30: tc05 + Location: 85,51 + Owner: Neutral + Actor31: t01 + Location: 90,53 + Owner: Neutral + Actor32: t02 + Location: 82,52 + Owner: Neutral + Actor33: tc01 + Location: 76,52 + Owner: Neutral + Actor34: t16 + Location: 73,53 + Owner: Neutral + Actor35: t17 + Location: 71,51 + Owner: Neutral + Actor36: t15 + Location: 68,51 + Owner: Neutral + Actor37: tc02 + Location: 69,52 + Owner: Neutral + Actor38: tc02 + Location: 73,58 + Owner: Neutral + Actor39: tc04 + Location: 81,60 + Owner: Neutral + Actor40: tc05 + Location: 85,56 + Owner: Neutral + Actor41: t14 + Location: 24,62 + Owner: Neutral + Actor42: t16 + Location: 24,60 + Owner: Neutral + Actor43: t17 + Location: 24,59 + Owner: Neutral + Actor44: tc02 + Location: 24,61 + Owner: Neutral + Actor45: t15 + Location: 16,72 + Owner: Neutral + Actor46: t12 + Location: 19,49 + Owner: Neutral + Actor47: t16 + Location: 15,52 + Owner: Neutral + Actor48: t17 + Location: 14,51 + Owner: Neutral + Actor49: tc03 + Location: 17,50 + Owner: Neutral + Actor50: tc04 + Location: 14,49 + Owner: Neutral + Actor51: t03 + Location: 27,57 + Owner: Neutral + Actor52: t08 + Location: 24,57 + Owner: Neutral + Actor53: tc04 + Location: 25,56 + Owner: Neutral + Actor54: t08 + Location: 66,58 + Owner: Neutral + Actor55: t01 + Location: 64,57 + Owner: Neutral + Actor56: t06 + Location: 64,63 + Owner: Neutral + Actor57: t05 + Location: 65,64 + Owner: Neutral + Actor58: t11 + Location: 91,53 + Owner: Neutral + Actor59: t12 + Location: 102,65 + Owner: Neutral + Actor60: t15 + Location: 102,67 + Owner: Neutral + Actor61: t12 + Location: 90,64 + Owner: Neutral + Actor62: t15 + Location: 87,70 + Owner: Neutral + Actor63: t17 + Location: 75,72 + Owner: Neutral + Actor64: tc01 + Location: 75,73 + Owner: Neutral + Actor65: t03 + Location: 74,68 + Owner: Neutral + Actor66: tc04 + Location: 71,68 + Owner: Neutral + Actor67: tc01 + Location: 78,67 + Owner: Neutral + Actor68: t12 + Location: 74,65 + Owner: Neutral + Actor69: t16 + Location: 77,65 + Owner: Neutral + Actor70: tc01 + Location: 75,65 + Owner: Neutral + Actor71: t17 + Location: 75,62 + Owner: Neutral + Actor72: tc01 + Location: 112,56 + Owner: Neutral + Actor73: t15 + Location: 105,49 + Owner: Neutral + Actor74: tc01 + Location: 112,49 + Owner: Neutral + Actor75: t15 + Location: 101,49 + Owner: Neutral + Actor76: t14 + Location: 102,54 + Owner: Neutral + Actor77: t11 + Location: 107,55 + Owner: Neutral + Actor78: t02 + Location: 101,52 + Owner: Neutral + Actor79: t01 + Location: 109,57 + Owner: Neutral + Actor80: t10 + Location: 105,57 + Owner: Neutral + Actor81: t08 + Location: 104,58 + Owner: Neutral + Actor82: tc02 + Location: 97,52 + Owner: Neutral + Actor83: t01 + Location: 113,62 + Owner: Neutral + Actor84: t12 + Location: 111,63 + Owner: Neutral + Actor85: tc03 + Location: 105,65 + Owner: Neutral + Actor86: tc04 + Location: 107,65 + Owner: Neutral + Actor87: t17 + Location: 106,66 + Owner: Neutral + Actor88: t16 + Location: 106,67 + Owner: Neutral + Actor89: tc01 + Location: 106,62 + Owner: Neutral + Actor90: t11 + Location: 45,50 + Owner: Neutral + Actor91: t17 + Location: 49,52 + Owner: Neutral + Actor92: tc01 + Location: 22,49 + Owner: Neutral + Actor93: t08 + Location: 106,70 + Owner: Neutral + Actor94: t01 + Location: 54,58 + Owner: Neutral + Actor95: t01 + Location: 14,59 + Owner: Neutral + Actor96: t02 + Location: 14,58 + Owner: Neutral + Actor97: t01 + Location: 53,69 + Owner: Neutral + Actor98: tc04 + Location: 75,59 + Owner: Neutral + Actor99: tc01 + Location: 75,58 + Owner: Neutral + Actor100: t16 + Location: 77,55 + Owner: Neutral + Actor101: t05 + Location: 79,52 + Owner: Neutral + Actor102: tc01 + Location: 17,70 + Owner: Neutral + Actor103: t17 + Location: 26,70 + Owner: Neutral + Actor104: t16 + Location: 98,67 + Owner: Neutral + Actor105: tc05 + Location: 110,52 + Owner: Neutral + Actor106: tc01 + Location: 111,50 + Owner: Neutral + Actor107: t07 + Location: 113,51 + Owner: Neutral + Actor108: t05 + Location: 113,53 + Owner: Neutral + Actor109: t10 + Location: 42,73 + Owner: Neutral + Actor110: tc02 + Location: 42,72 + Owner: Neutral + Actor111: t17 + Location: 44,71 + Owner: Neutral + Actor112: tc02 + Location: 43,70 + Owner: Neutral + Actor113: tc02 + Location: 39,69 + Owner: Neutral + Actor114: t17 + Location: 39,66 + Owner: Neutral + Actor115: tc05 + Location: 31,49 + Owner: Neutral + Actor116: t01 + Location: 19,52 + Owner: Neutral + Actor117: tc04 + Location: 93,73 + Owner: Neutral + Actor118: t07 + Location: 55,51 + Owner: Neutral + Actor119: tc01 + Location: 103,71 + Owner: Neutral + Actor120: t12 + Location: 100,73 + Owner: Neutral + Actor121: t07 + Location: 103,68 + Owner: Neutral + Actor122: tc02 + Location: 102,70 + Owner: Neutral + Actor123: tc02 + Location: 107,67 + Owner: Neutral + Actor124: tc04 + Location: 111,72 + Owner: Neutral + Actor125: t07 + Location: 110,69 + Owner: Neutral + Actor126: t06 + Location: 109,73 + Owner: Neutral + Actor127: t07 + Location: 109,66 + Owner: Neutral + Actor128: t08 + Location: 99,55 + Owner: Neutral + Actor129: tc04 + Location: 92,49 + Owner: Neutral + Actor130: t08 + Location: 95,51 + Owner: Neutral + Actor131: agun + Location: 57,61 + Owner: Greece + Facing: 636 + Actor132: barl + Location: 54,60 + Owner: Greece + Actor133: barl + Location: 55,59 + Owner: Greece + Actor134: barl + Location: 54,61 + Owner: Greece + Actor135: brl3 + Location: 55,61 + Owner: Greece + Actor136: barl + Location: 53,64 + Owner: Greece + Actor137: barl + Location: 53,63 + Owner: Greece + Actor138: brl3 + Location: 54,63 + Owner: Greece + Actor139: brl3 + Location: 54,62 + Owner: Greece + Actor140: gun + Location: 66,62 + Owner: Greece + Facing: 764 + Actor141: tent + Location: 57,58 + Owner: Greece + Actor142: apwr + Location: 60,62 + Owner: Greece + Actor143: apwr + Location: 60,59 + Owner: Greece + Actor144: agun + Location: 65,64 + Owner: Greece + Facing: 636 + Actor145: agun + Location: 65,58 + Owner: Greece + Facing: 892 + Actor146: fact + Location: 63,59 + Owner: Greece + Actor147: brl3 + Location: 86,64 + Owner: Greece + Actor148: brl3 + Location: 88,66 + Owner: Greece + Actor149: barl + Location: 87,65 + Owner: Greece + Actor150: barl + Location: 88,65 + Owner: Greece + AABarrel: brl3 + Location: 89,66 + Owner: Greece + Actor152: gun + Location: 84,65 + Owner: Greece + Facing: 252 + Actor153: dome + Location: 85,64 + Owner: Greece + Airfield1: afld + Location: 102,51 + Owner: USSR + Airfield4: afld + Location: 103,53 + Owner: USSR + Airfield5: afld + Location: 107,53 + Owner: USSR + Airfield2: afld + Location: 105,51 + Owner: USSR + Airfield3: afld + Location: 108,51 + Owner: USSR + Actor159: brl3 + Location: 85,67 + Owner: Greece + Actor160: barl + Location: 87,66 + Owner: Greece + Actor161: barl + Location: 86,67 + Owner: Greece + Actor162: brl3 + Location: 56,61 + Owner: Greece + Actor163: barl + Location: 54,58 + Owner: Greece + AAGun: agun + Location: 89,65 + Owner: Greece + Facing: 892 + Actor165: fact + Location: 36,68 + Owner: Greece + Actor166: fact + Location: 37,53 + Owner: Greece + Actor167: apwr + Location: 36,50 + Owner: Greece + Actor168: apwr + Location: 35,72 + Owner: Greece + Actor169: powr + Location: 39,50 + Owner: Greece + Actor170: powr + Location: 38,72 + Owner: Greece + Actor171: v19 + Location: 40,71 + Owner: Neutral + Actor172: barl + Location: 35,53 + Owner: Greece + Actor173: brl3 + Location: 36,55 + Owner: Greece + Actor174: barl + Location: 35,55 + Owner: Greece + Actor175: gun + Location: 39,58 + Owner: Greece + Actor176: gun + Location: 37,58 + Owner: Greece + Actor177: gun + Location: 38,66 + Owner: Greece + Actor178: gun + Location: 36,58 + Owner: Greece + Actor179: gun + Location: 36,66 + Owner: Greece + Actor180: gun + Location: 37,66 + Owner: Greece + Actor181: gun + Location: 38,58 + Owner: Greece + Actor182: gun + Location: 39,66 + Owner: Greece + Actor183: brl3 + Location: 35,68 + Owner: Greece + Actor184: barl + Location: 35,70 + Owner: Greece + Actor185: brl3 + Location: 39,71 + Owner: Greece + Actor186: brl3 + Location: 36,67 + Owner: Greece + Actor187: barl + Location: 38,67 + Owner: Greece + Actor188: brl3 + Location: 39,68 + Owner: Greece + Actor189: brl3 + Location: 35,67 + Owner: Greece + Actor190: brl3 + Location: 35,69 + Owner: Greece + Actor191: brl3 + Location: 36,57 + Owner: Greece + Actor192: barl + Location: 36,56 + Owner: Greece + Actor193: barl + Location: 35,54 + Owner: Greece + Actor194: barl + Location: 38,57 + Owner: Greece + Actor195: v19 + Location: 25,54 + Owner: Neutral + Actor196: brl3 + Location: 25,53 + Owner: Greece + Actor197: barl + Location: 24,54 + Owner: Greece + Actor198: brl3 + Location: 22,55 + Owner: Greece + Actor199: barl + Location: 23,55 + Owner: Greece + Actor200: barl + Location: 21,56 + Owner: Greece + Actor201: barl + Location: 24,52 + Owner: Greece + Actor202: v19 + Location: 32,69 + Owner: Neutral + Actor203: v19 + Location: 32,71 + Owner: Neutral + Actor204: brl3 + Location: 32,70 + Owner: Greece + Actor205: brl3 + Location: 32,68 + Owner: Greece + Actor206: barl + Location: 31,67 + Owner: Greece + Actor207: brl3 + Location: 31,69 + Owner: Greece + Actor208: brl3 + Location: 32,72 + Owner: Greece + Actor209: brl3 + Location: 31,73 + Owner: Greece + Actor210: barl + Location: 30,74 + Owner: Greece + Actor211: barl + Location: 29,74 + Owner: Greece + Actor212: v19 + Location: 23,63 + Owner: Neutral + Actor213: v19 + Location: 26,63 + Owner: Neutral + Actor214: brl3 + Location: 22,63 + Owner: Greece + Actor215: brl3 + Location: 23,64 + Owner: Greece + Actor216: brl3 + Location: 25,64 + Owner: Greece + Actor217: brl3 + Location: 27,63 + Owner: Greece + Actor218: barl + Location: 26,64 + Owner: Greece + Actor219: v19 + Location: 24,67 + Owner: Neutral + Actor220: brl3 + Location: 23,67 + Owner: Greece + Actor221: brl3 + Location: 25,67 + Owner: Greece + Actor222: barl + Location: 24,68 + Owner: Greece + Actor223: v19 + Location: 75,69 + Owner: Neutral + Health: 51 + Actor224: v19 + Location: 77,70 + Owner: Neutral + Health: 53 + HealCrateBarrel: brl3 + Location: 76,69 + Owner: Greece + Actor226: brl3 + Location: 76,70 + Owner: Greece + Actor227: brl3 + Location: 77,69 + Owner: Greece + Actor228: barl + Location: 78,69 + Owner: Greece + Actor229: v19 + Location: 76,71 + Owner: Neutral + Health: 51 + Actor230: v19 + Location: 73,62 + Owner: Neutral + Actor231: v19 + Location: 72,64 + Owner: Neutral + Actor232: v19 + Location: 68,60 + Owner: Neutral + Actor233: v19 + Location: 69,62 + Owner: Neutral + Actor234: brl3 + Location: 69,61 + Owner: Greece + Actor235: brl3 + Location: 68,59 + Owner: Greece + Actor236: barl + Location: 69,58 + Owner: Greece + Actor237: brl3 + Location: 73,61 + Owner: Greece + Actor238: brl3 + Location: 74,60 + Owner: Greece + Actor239: barl + Location: 72,62 + Owner: Greece + Actor240: brl3 + Location: 72,63 + Owner: Greece + Actor241: brl3 + Location: 71,65 + Owner: Greece + Actor242: barl + Location: 71,66 + Owner: Greece + Actor243: brl3 + Location: 69,63 + Owner: Greece + Actor244: barl + Location: 69,64 + Owner: Greece + Actor245: barl + Location: 68,65 + Owner: Greece + Actor246: barl + Location: 69,60 + Owner: Greece + Actor247: brl3 + Location: 61,71 + Owner: Greece + Actor248: v19 + Location: 59,74 + Owner: Greece + Actor249: v19 + Location: 56,74 + Owner: Greece + Actor250: v19 + Location: 55,72 + Owner: Greece + Actor251: brl3 + Location: 55,71 + Owner: Greece + Actor252: brl3 + Location: 56,73 + Owner: Greece + Actor253: brl3 + Location: 57,74 + Owner: Greece + Actor254: brl3 + Location: 59,73 + Owner: Greece + Actor255: barl + Location: 58,74 + Owner: Greece + Actor256: brl3 + Location: 60,74 + Owner: Greece + Actor257: v19 + Location: 62,74 + Owner: Greece + Actor258: brl3 + Location: 61,74 + Owner: Greece + Actor259: barl + Location: 62,73 + Owner: Greece + Actor260: brl3 + Location: 61,72 + Owner: Greece + Actor261: barl + Location: 56,72 + Owner: Greece + Actor262: barl + Location: 57,73 + Owner: Greece + Actor263: fix + Location: 55,62 + Owner: Greece + Actor264: apwr + Location: 111,70 + Owner: USSR + Actor265: powr + Location: 109,71 + Owner: USSR + Actor266: 1tnk + Location: 54,64 + Owner: Greece + Facing: 636 + StartTank: 2tnk + Location: 99,59 + Owner: Greece + Facing: 764 + Actor268: 1tnk + Location: 100,61 + Owner: Greece + Facing: 764 + Actor269: jeep + Location: 82,74 + Owner: Greece + Facing: 764 + Jeep1: jeep + Location: 82,63 + Owner: Greece + Facing: 508 + Jeep2: jeep + Location: 81,64 + Owner: Greece + Facing: 380 + Ltnk: 1tnk + Location: 82,64 + Owner: Greece + Facing: 636 + Actor273: 2tnk + Location: 24,65 + Owner: Greece + Facing: 764 + Actor274: jeep + Location: 43,70 + Owner: Greece + Facing: 892 + PatrolJeep: jeep + Location: 45,53 + Owner: Greece + Facing: 636 + Actor276: e1 + Location: 65,54 + Owner: Greece + Facing: 764 + SubCell: 2 + Actor277: e1 + Location: 65,53 + Owner: Greece + Facing: 764 + SubCell: 0 + Actor278: e1 + Location: 66,54 + Owner: Greece + Facing: 636 + SubCell: 2 + Actor279: e1 + Location: 81,56 + Owner: Greece + Facing: 636 + SubCell: 0 + Actor280: e1 + Location: 81,55 + Owner: Greece + Facing: 764 + SubCell: 4 + Actor281: e1 + Location: 89,56 + Owner: Greece + SubCell: 4 + Actor282: e1 + Location: 86,60 + Owner: Greece + Facing: 636 + SubCell: 2 + Actor283: e1 + Location: 90,56 + Owner: Greece + Facing: 764 + SubCell: 2 + Actor284: e3 + Location: 79,52 + Owner: Greece + Facing: 892 + SubCell: 4 + Actor285: e3 + Location: 77,59 + Owner: Greece + Facing: 380 + SubCell: 3 + Actor286: e3 + Location: 82,52 + Owner: Greece + Facing: 380 + SubCell: 4 + Actor287: e1 + Location: 55,55 + Owner: Greece + Facing: 764 + SubCell: 2 + Actor288: e1 + Location: 56,57 + Owner: Greece + Facing: 124 + SubCell: 1 + Actor289: e1 + Location: 59,59 + Owner: Greece + Facing: 636 + SubCell: 3 + Actor290: e1 + Location: 57,60 + Owner: Greece + Facing: 636 + SubCell: 1 + Actor291: e1 + Location: 56,59 + Owner: Greece + Facing: 252 + SubCell: 4 + Actor292: e1 + Location: 57,57 + Owner: Greece + Facing: 892 + SubCell: 2 + Actor293: e1 + Location: 84,66 + Owner: Greece + Facing: 380 + SubCell: 4 + Actor294: e1 + Location: 85,64 + Owner: Greece + Facing: 508 + SubCell: 1 + Actor295: e3 + Location: 96,71 + Owner: Greece + Facing: 892 + SubCell: 1 + Actor296: e1 + Location: 94,71 + Owner: Greece + Facing: 252 + SubCell: 4 + Actor297: e1 + Location: 95,72 + Owner: Greece + Facing: 380 + SubCell: 2 + Actor298: e1 + Location: 29,63 + Owner: Greece + Facing: 892 + SubCell: 1 + Actor299: e3 + Location: 30,64 + Owner: Greece + Facing: 892 + SubCell: 0 + Actor300: e1 + Location: 26,51 + Owner: Greece + Facing: 764 + SubCell: 2 + Actor301: e1 + Location: 25,51 + Owner: Greece + Facing: 892 + SubCell: 1 + Actor302: e3 + Location: 26,52 + Owner: Greece + Facing: 764 + SubCell: 0 + Actor303: e3 + Location: 19,69 + Owner: Greece + Facing: 508 + SubCell: 4 + PatrolRifle1: e1 + Location: 44,54 + Owner: Greece + Facing: 252 + SubCell: 3 + PatrolRifle2: e1 + Location: 43,53 + Owner: Greece + Facing: 892 + SubCell: 4 + Actor306: dd + Location: 49,72 + Owner: Greece + Facing: 252 + Actor307: dd + Location: 51,51 + Owner: Greece + Facing: 764 + ConvoyEntry: waypoint + Location: 113,60 + Owner: Neutral + TrucksStop: waypoint + Location: 109,60 + Owner: Neutral + TanksStop: waypoint + Location: 104,60 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 106,54 + Owner: Neutral + EngiDropLZ: waypoint + Location: 75,55 + Owner: Neutral + Mig1: mig + Owner: USSR + Location: 108,50 + Facing: 368 + Mig2: mig + Owner: USSR + Location: 109,50 + Facing: 368 + Yak1: yak + Owner: USSR + Location: 110,50 + Facing: 368 + Yak2: yak + Owner: USSR + Location: 111,50 + Facing: 368 + Yak3: yak + Owner: USSR + Location: 112,50 + Facing: 368 + SouthEntry: waypoint + Location: 97,74 + Owner: Neutral + NorthEntry: waypoint + Location: 44,50 + Owner: Neutral + PatrolA1: waypoint + Location: 98,71 + Owner: Neutral + PatrolA2: waypoint + Location: 82,73 + Owner: Neutral + PatrolA3: waypoint + Location: 82,55 + Owner: Neutral + PatrolA4: waypoint + Location: 98,60 + Owner: Neutral + PatrolB1: waypoint + Location: 44,54 + Owner: Neutral + PatrolB2: waypoint + Location: 43,67 + Owner: Neutral + PatrolB3: waypoint + Location: 69,68 + Owner: Neutral + PatrolB4: waypoint + Location: 66,54 + Owner: Neutral + ChinookEntry: waypoint + Location: 58,74 + Owner: Neutral + ChinookLZ: waypoint + Location: 58,72 + Owner: Neutral + Exit: waypoint + Location: 14,64 + 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-10/rules.yaml b/mods/ra/maps/soviet-10/rules.yaml new file mode 100644 index 0000000000..afa6e1ac63 --- /dev/null +++ b/mods/ra/maps/soviet-10/rules.yaml @@ -0,0 +1,100 @@ +World: + LuaScript: + Scripts: campaign-global.lua, soviet10.lua + MissionData: + Briefing: You must defend a Soviet convoy that is moving through Allied occupied territory. Using the new MIG jet and a compliment of Yaks, get the convoy through the area intact.\n\nBe careful -- your resources for this mission are very limited. If at least one truck makes it through to the other side, the mission will be a success. + BriefingVideo: soviet10.vqa + WinVideo: mig.vqa + LossVideo: aagun.vqa + StartVideo: airfield.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +Player: + PlayerResources: + DefaultCash: 6500 + +ENGIDROP: + ParatroopersPower: + DisplayBeacon: False + DropItems: E6, E6, E6 + AlwaysVisible: + +AFLD: + ParatroopersPower@paratroopers: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + -SpawnActorOnDeath: + +MRJ: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~afld + +CA: + Buildable: + Prerequisites: ~disabled + +THF: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +E7.noautotarget: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +SILO: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ra/maps/soviet-10/soviet10.lua b/mods/ra/maps/soviet-10/soviet10.lua new file mode 100644 index 0000000000..af8af4a225 --- /dev/null +++ b/mods/ra/maps/soviet-10/soviet10.lua @@ -0,0 +1,349 @@ +--[[ + Copyright 2007-2021 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. + + Mission Overview: + Soviet10 features an escort sequence where non-player controlled convoy trucks follow the nearest player controlled ground unit. This is handled by TrucksFollow() and its related functions. + A timer which was linked to capturing buildings or destroying the first conyard has been changed to starting after a few minutes set by difficulty level. + The conesquences of having the timer run out have been increased as well, surrounding the player with several enemy units instead of sending just four tanks. + The starting number of tanks has been altered as well, with hard difficulty having the original amount of four. + + Ommissions from original: + 1. Radar Dome had a sell trigger when 3 rockets north of it were killed. Plan to add when if/when we add sell triggers across all missions. + 2. Turrets at gauntlet rebuild after being destroyed. Plan to add if/when we fix/add base rebuilding across all miissions. + 3. At gauntlet, all four north side turrets in were killed by barrels. Omitted for balance, add when #2 is addressed. + 4. At gauntlet, two of the south side turrets to the west end were killed by barrels. Omitted for balance, add when #2 is addressed. +]] +ConvoyEscort = +{ + easy = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk" }, + normal = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk" }, + hard = { "3tnk", "3tnk", "3tnk", "3tnk" } +} + +StartingPlanes = { Mig1, Mig2, Yak1, Yak2, Yak3 } +Airfields = { Airfield1, Airfield2, Airfield3, Airfield4, Airfield5 } +Migs = { Mig1, Mig2 } +ConvoyTrucks = { "truk", "truk", "truk" } +LightVehicleAttack = { Jeep1, Jeep2, Ltnk } +LightVehicleAttackTrigger = { CPos.New(94, 55), CPos.New(94, 56), CPos.New(94, 57), CPos.New(94, 58), CPos.New(94, 59), CPos.New(94, 70), CPos.New(94, 71), CPos.New(94, 72), CPos.New(94, 73) } +WinTriggerArea = { CPos.New(16, 55), CPos.New(16, 56), CPos.New(16, 57), CPos.New(16, 58), CPos.New(16, 59), CPos.New(16, 60), CPos.New(16, 61), CPos.New(16, 62), CPos.New(16, 63), CPos.New(16, 64), CPos.New(16, 65), CPos.New(16, 66) } +EngiDropTriggerArea = { CPos.New(66, 51), CPos.New(66, 52), CPos.New(66, 53), CPos.New(66, 54), CPos.New(66, 55), CPos.New(66, 67), CPos.New(66, 68), CPos.New(66, 69), CPos.New(66, 70) } +ChinookAmbushTrigger = { CPos.New(54, 70), CPos.New(55, 70), CPos.New(56, 70), CPos.New(57, 70), CPos.New(58, 70), CPos.New(59, 70), CPos.New(60, 70), CPos.New(61, 70) } +ChinookChalk = { "e3", "e3", "e3", "e3", "e3" } +ChinookPath = { ChinookEntry.Location, ChinookLZ.Location } +PatrolA = { "e1", "e1", "e1", "e1", "e1" } +PatrolB = { "e1", "e1", "e1", "e3", "e3" } +PatrolAPath = { PatrolA1.Location, PatrolA2.Location, PatrolA3.Location, PatrolA4.Location } +PatrolBPath = { PatrolB1.Location, PatrolB2.Location, PatrolB3.Location, PatrolB4.Location } +HunterTeam = { "1tnk", "1tnk", "1tnk", "1tnk", "2tnk", "2tnk", "arty" } + +StartTimer = false +TimerColor = Player.GetPlayer("USSR").Color +TimerTicks = DateTime.Minutes(9) +ticked = TimerTicks +StartTimerDelay = +{ + easy = DateTime.Minutes(5), + normal = DateTime.Minutes(3), + hard = DateTime.Minutes(1) +} + +MissionStart = function() + Utils.Do(StartingPlanes, function(a) + a.ReturnToBase() + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() + StartTank.AttackMove(TrucksStop.Location) + Reinforcements.Reinforce(USSR, ConvoyEscort, { ConvoyEntry.Location, TanksStop.Location }) + Media.PlaySpeechNotification(USSR, "ConvoyApproaching") + end) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + local patrol1 = Reinforcements.Reinforce(Greece, PatrolA, { SouthEntry.Location, PatrolA1.Location }) + Utils.Do(patrol1, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(PatrolAPath, true, 80) + end) + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + local patrol2 = Reinforcements.Reinforce(Greece, PatrolB, { NorthEntry.Location, PatrolB1.Location }) + Utils.Do(patrol2, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(PatrolBPath, true, 80) + end) + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(8), function() + Trucks = Reinforcements.Reinforce(Turkey, ConvoyTrucks, { ConvoyEntry.Location, TrucksStop.Location }) + TrucksFollow() + Trigger.OnAnyKilled(Trucks, function() + USSR.MarkFailedObjective(ProtectEveryTruck) + end) + end) +end + +MissionSetup = function() + Trigger.OnEnteredFootprint(WinTriggerArea, function(a, id) + if a.Type == "truk" then + -- Stop truck from looping through TrucksFollow + a.AddTag("Exiting") + a.Stop() + Trigger.OnIdle(a, function() + a.Move(Exit.Location) + end) + end + end) + + Trigger.OnEnteredFootprint({ Exit.Location }, function(a, id) + if a.Type == "truk" then + a.Stop() + a.Destroy() + if not USSR.IsObjectiveCompleted(EscortTrucks) then + USSR.MarkCompletedObjective(EscortTrucks) + if not USSR.IsObjectiveFailed(ProtectEveryTruck) then + USSR.MarkCompletedObjective(ProtectEveryTruck) + end + if not USSR.IsObjectiveFailed(SaveMigs) then + USSR.MarkCompletedObjective(SaveMigs) + end + end + end + end) + + Utils.Do(Airfields, function(runway) + Trigger.OnProduction(runway, function(a, b) + if b.Type == "mig" then + Trigger.OnKilled(b, function() + USSR.MarkFailedObjective(SaveMigs) + end) + end + end) + end) + + Trigger.OnAnyKilled(Migs, function() + USSR.MarkFailedObjective(SaveMigs) + end) + + Trigger.OnKilled(AABarrel, function() + if not AAGun.IsDead then + AAGun.Kill() + end + end) + + Trigger.OnKilled(HealCrateBarrel, function() + Actor.Create("healcrate", true, { Owner = USSR, Location = HealCrateBarrel.Location }) + end) + + Trigger.OnEnteredFootprint(LightVehicleAttackTrigger, function(unit, id) + if not attackTriggered and unit.Type == "3tnk" then + Trigger.RemoveFootprintTrigger(id) + attackTriggered = true + + Utils.Do(LightVehicleAttack, function(unit) + if not unit.IsDead then + IdleHunt(unit) + end + end) + end + end) + + Trigger.OnEnteredFootprint(EngiDropTriggerArea, function(unit, id) + if unit.Owner == USSR and not dropTriggered then + Trigger.RemoveFootprintTrigger(id) + dropTriggered = true + + Media.PlaySpeechNotification(USSR, "SignalFlare") + local engiFlare = Actor.Create("flare", true, { Owner = USSR, Location = EngiDropLZ.Location }) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Engidrop.TargetParatroopers(EngiDropLZ.CenterPosition, Angle.NorthWest) + end) + + Trigger.AfterDelay(DateTime.Seconds(20), function() + engiFlare.Destroy() + end) + end + end) + + Trigger.OnEnteredFootprint(ChinookAmbushTrigger, function(unit, id) + if not chinookTriggered and unit.Owner == USSR then + Trigger.RemoveFootprintTrigger(id) + chinookTriggered = true + + local chalk = Reinforcements.ReinforceWithTransport(Greece, "tran", ChinookChalk , ChinookPath, { ChinookPath[1] })[2] + Utils.Do(chalk, function(unit) + Trigger.OnAddedToWorld(unit, IdleHunt) + end) + end + end) +end + +TrucksFollow = function() + Utils.Do(Trucks, function(truck) + if not truck.IsDead and not Running and not truck.HasTag("Exiting") then + -- Trucks that are next to a guard don't need to move + local guards = Map.ActorsInCircle(truck.CenterPosition, WDist.New(2048), IsValidConvoyGuard) + if #guards == 0 then + -- Search nearby area to find a new guard + guards = Map.ActorsInCircle(truck.CenterPosition, WDist.New(6144), IsValidConvoyGuard) + + if #guards == 0 then + -- Search the whole map as a last resort: this is slow! + guards = Utils.Where(Map.ActorsInWorld, IsValidConvoyGuard) + end + + if #guards == 0 then + -- Runs on the first truck; returns to not loop over the rest. + RunForIt() + return + end + + truck.Move(ClosestActorTo(guards, truck).Location, 3) + end + end + end) + + Trigger.AfterDelay(DateTime.Seconds(2), TrucksFollow) +end + +IsValidConvoyGuard = function(actor) + -- Ground units (not aircraft) owned by USSR + return actor.Owner == USSR and actor.HasProperty("Move") and not actor.HasProperty("Land") +end + +ClosestActorTo = function(actors, target) + local closestDistSq = 0 + local closestActor = nil + Utils.Do(actors, function(actor) + local offset = actor.Location - target.Location + distSq = offset.X * offset.X + offset.Y * offset.Y + if closestActor == nil or distSq < closestDistSq then + closestDistSq = distSq + closestActor = actor + end + end) + + return closestActor +end + +RunForIt = function() + Running = true + Media.PlaySoundNotification(USSR, "AlertBleep") + Media.DisplayMessage("RUN FOR IT!", "Convoy commander") + Utils.Do(Trucks, function(truck) + if not truck.IsDead then + truck.Stop() + Trigger.OnIdle(truck, function(a) + a.Move(Exit.Location) + end) + end + end) +end + +IdleHunt = function(actor) if not actor.IsDead then Trigger.OnIdle(actor, actor.Hunt) end end +SendHunters = function() + Media.PlaySpeechNotification(USSR, "AlliedForcesApproaching") + local Hunters1 = Reinforcements.Reinforce(Greece, HunterTeam, { ConvoyEntry.Location, TrucksStop.Location }) + local Hunters2 = Reinforcements.Reinforce(Greece, HunterTeam, { SouthEntry.Location, PatrolA1.Location }) + local Hunters3 = Reinforcements.Reinforce(Greece, HunterTeam, { NorthEntry.Location, PatrolB1.Location }) + local Hunters4 = Reinforcements.Reinforce(Greece, HunterTeam, { Exit.Location, PatrolB2.Location }) + Utils.Do(Hunters1, IdleHunt) + Utils.Do(Hunters2, IdleHunt) + Utils.Do(Hunters3, IdleHunt) + Utils.Do(Hunters4, IdleHunt) +end + +StartTimerFunction = function() + StartTimer = true + Media.PlaySpeechNotification(USSR, "TimerStarted") + Trigger.AfterDelay(DateTime.Minutes(5), function() + Media.PlaySpeechNotification(USSR, "WarningFourMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(7), function() + Media.PlaySpeechNotification(USSR, "WarningTwoMinutesRemaining") + end) + Trigger.AfterDelay(DateTime.Minutes(8), function() + Media.PlaySpeechNotification(USSR, "WarningOneMinuteRemaining") + end) +end + +FinishTimer = function() + for i = 0, 5, 1 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("We're surrounded!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end) +end + +Tick = function() + if StartTimer then + if ticked > 0 then + UserInterface.SetMissionText("Corridor closes in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 then + FinishTimer() + SendHunters() + ticked = ticked - 1 + end + end + + if Turkey.UnitsLost == 3 then + USSR.MarkFailedObjective(EscortTrucks) + end +end + +WorldLoaded = function() + USSR = Player.GetPlayer("USSR") + Greece = Player.GetPlayer("Greece") + Turkey = Player.GetPlayer("Turkey") + + Trigger.OnObjectiveAdded(USSR, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + EscortTrucks = USSR.AddObjective("Escort the convoy through the mountain pass.") + ProtectEveryTruck = USSR.AddObjective("Do not lose a single truck.", "Secondary", false) + SaveMigs = USSR.AddObjective("Do not squander any of our new MiG aircraft.", "Secondary", false) + BeatUSSR = Greece.AddObjective("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) + + difficulty = Map.LobbyOption("difficulty") + ConvoyEscort = ConvoyEscort[difficulty] + StartTimerDelay = StartTimerDelay[difficulty] + + MissionStart() + MissionSetup() + + Trigger.AfterDelay(StartTimerDelay, StartTimerFunction) + Engidrop = Actor.Create("engidrop", false, { Owner = USSR }) + Camera.Position = DefaultCameraPosition.CenterPosition +end diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 7d0a5da060..067a104625 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -27,6 +27,7 @@ Soviet Campaign: soviet-08a soviet-08b soviet-09 + soviet-10 soviet-11a soviet-11b Counterstrike Allied Missions: