diff --git a/OpenRA.sln b/OpenRA.sln index 5ebc8ed7ec..45a00f100d 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -57,6 +57,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\allies-05a\AI.lua = mods\ra\maps\allies-05a\AI.lua mods\ra\maps\soviet-01\soviet01.lua = mods\ra\maps\soviet-01\soviet01.lua mods\ra\maps\soviet-02a\soviet02a.lua = mods\ra\maps\soviet-02a\soviet02a.lua + mods\ra\maps\soviet-03\soviet03.lua = mods\ra\maps\soviet-03\soviet03.lua mods\ra\maps\soviet-07\soviet07.lua = mods\ra\maps\soviet-07\soviet07.lua mods\ra\maps\survival01\survival01.lua = mods\ra\maps\survival01\survival01.lua mods\ra\maps\survival02\survival02.lua = mods\ra\maps\survival02\survival02.lua diff --git a/mods/ra/maps/soviet-03/map.bin b/mods/ra/maps/soviet-03/map.bin new file mode 100644 index 0000000000..df791e30be Binary files /dev/null and b/mods/ra/maps/soviet-03/map.bin differ diff --git a/mods/ra/maps/soviet-03/map.png b/mods/ra/maps/soviet-03/map.png new file mode 100644 index 0000000000..e92632f70f Binary files /dev/null and b/mods/ra/maps/soviet-03/map.png differ diff --git a/mods/ra/maps/soviet-03/map.yaml b/mods/ra/maps/soviet-03/map.yaml new file mode 100644 index 0000000000..e1b117a684 --- /dev/null +++ b/mods/ra/maps/soviet-03/map.yaml @@ -0,0 +1,1304 @@ +MapFormat: 7 + +RequiresMod: ra + +Title: Soviet 03: Covert cleanup + +Description: A spy who has compromised the security of one of the northern sarin gas sites has been traced back to Lund, Sweden, by Nadia's intelligence groups.\n\nHe has been marked for death and a squad of Soviet troops was dispatched to the location to hunt him down. + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 24,22,70,49 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + Briefing: soviet3.vqa + GameStart: search.vqa + GameWon: execute.vqa + GameLost: take_off.vqa + +Options: + Crates: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 0 + ConfigurableStartingUnits: False + Difficulties: Easy, Normal, Hard + ShortGame: False + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + PlayerReference@England: + Name: England + Faction: allies + ColorRamp: 161,134,236 + Allies: Germany, Soviet + Enemies: USSR + PlayerReference@Soviet: + Name: Soviet + Faction: soviet + ColorRamp: 3,255,127 + Allies: England, Germany, USSR + PlayerReference@Germany: + Name: Germany + Faction: allies + ColorRamp: 161,134,236 + Allies: England, Soviet + Enemies: USSR + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + ColorRamp: 3,255,127 + LockSpawn: True + LockTeam: True + Enemies: Germany, England, Creeps + +Actors: + Actor0: wood + Location: 86,36 + Owner: Neutral + Actor1: wood + Location: 88,36 + Owner: Neutral + Actor2: wood + Location: 89,36 + Owner: Neutral + Actor3: wood + Location: 90,36 + Owner: Neutral + Actor4: v16 + Location: 85,37 + Owner: Neutral + Actor5: v17 + Location: 86,37 + Owner: Neutral + Actor6: v14 + Location: 87,37 + Owner: Neutral + Actor7: wood + Location: 90,37 + Owner: Neutral + Actor8: wood + Location: 91,37 + Owner: Neutral + Actor9: wood + Location: 92,37 + Owner: Neutral + Actor10: wood + Location: 93,37 + Owner: Neutral + Actor11: wood + Location: 93,38 + Owner: Neutral + Actor12: wood + Location: 93,39 + Owner: Neutral + Actor13: wood + Location: 90,40 + Owner: Neutral + Actor14: wood + Location: 91,40 + Owner: Neutral + Actor15: wood + Location: 92,40 + Owner: Neutral + Actor16: wood + Location: 93,40 + Owner: Neutral + Actor17: sbag + Location: 60,50 + Owner: Neutral + Actor18: sbag + Location: 61,50 + Owner: Neutral + Actor19: sbag + Location: 62,50 + Owner: Neutral + Actor20: sbag + Location: 63,50 + Owner: Neutral + Actor21: sbag + Location: 67,50 + Owner: Neutral + Actor22: sbag + Location: 68,50 + Owner: Neutral + Actor23: wood + Location: 34,61 + Owner: Neutral + Actor24: wood + Location: 36,61 + Owner: Neutral + Actor25: wood + Location: 37,61 + Owner: Neutral + Actor26: wood + Location: 38,61 + Owner: Neutral + Actor27: wood + Location: 39,61 + Owner: Neutral + Actor28: wood + Location: 39,62 + Owner: Neutral + Actor29: wood + Location: 39,63 + Owner: Neutral + Actor30: wood + Location: 39,64 + Owner: Neutral + Actor31: t14 + Location: 60,55 + Owner: Neutral + Actor32: tc02 + Location: 18,51 + Owner: Neutral + Actor33: tc01 + Location: 7,67 + Owner: Neutral + Actor34: tc03 + Location: 7,61 + Owner: Neutral + Actor35: t15 + Location: 19,47 + Owner: Neutral + Actor36: tc04 + Location: 60,31 + Owner: Neutral + Actor37: t15 + Location: 64,32 + Owner: Neutral + Actor38: t03 + Location: 69,68 + Owner: Neutral + Actor39: tc03 + Location: 63,29 + Owner: Neutral + Actor40: t10 + Location: 14,46 + Owner: Neutral + Actor41: tc03 + Location: 11,48 + Owner: Neutral + Actor42: t01 + Location: 11,45 + Owner: Neutral + Actor43: tc04 + Location: 45,42 + Owner: Neutral + Actor44: t11 + Location: 46,39 + Owner: Neutral + Actor45: t07 + Location: 63,39 + Owner: Neutral + Actor46: t07 + Location: 14,61 + Owner: Neutral + Actor47: t12 + Location: 18,56 + Owner: Neutral + Actor48: tc02 + Location: 70,35 + Owner: Neutral + Actor49: tc01 + Location: 84,43 + Owner: Neutral + Actor50: t10 + Location: 83,37 + Owner: Neutral + Actor51: t02 + Location: 81,37 + Owner: Neutral + Actor52: t08 + Location: 90,35 + Owner: Neutral + Actor53: t12 + Location: 50,41 + Owner: Neutral + Actor54: t01 + Location: 50,64 + Owner: Neutral + Actor55: t13 + Location: 45,45 + Owner: Neutral + Actor56: tc03 + Location: 42,34 + Owner: Neutral + Actor57: tc02 + Location: 44,34 + Owner: Neutral + Actor58: tc05 + Location: 21,55 + Owner: Neutral + Actor59: tc04 + Location: 20,43 + Owner: Neutral + Actor60: tc05 + Location: 17,43 + Owner: Neutral + Actor61: t12 + Location: 18,45 + Owner: Neutral + Actor62: t14 + Location: 21,44 + Owner: Neutral + Actor63: tc05 + Location: 5,38 + Owner: Neutral + Actor64: tc02 + Location: 7,36 + Owner: Neutral + Actor65: tc01 + Location: 5,37 + Owner: Neutral + Actor66: t16 + Location: 5,39 + Owner: Neutral + Actor67: tc03 + Location: 64,37 + Owner: Neutral + Actor68: t02 + Location: 68,53 + Owner: Neutral + Actor69: t03 + Location: 17,69 + Owner: Neutral + Actor70: tc04 + Location: 50,48 + Owner: Neutral + Actor71: tc03 + Location: 48,43 + Owner: Neutral + Actor72: tc04 + Location: 28,38 + Owner: Neutral + Actor73: tc02 + Location: 25,38 + Owner: Neutral + Actor74: tc02 + Location: 80,58 + Owner: Neutral + Actor75: tc01 + Location: 79,66 + Owner: Neutral + Actor76: t17 + Location: 73,65 + Owner: Neutral + Actor77: t15 + Location: 77,65 + Owner: Neutral + Actor78: t10 + Location: 85,62 + Owner: Neutral + Actor79: t14 + Location: 83,58 + Owner: Neutral + Actor80: tc02 + Location: 12,52 + Owner: Neutral + Actor81: t16 + Location: 17,59 + Owner: Neutral + Actor82: tc03 + Location: 5,65 + Owner: Neutral + Actor83: tc02 + Location: 7,52 + Owner: Neutral + Actor84: tc02 + Location: 27,31 + Owner: Neutral + Actor85: tc01 + Location: 21,35 + Owner: Neutral + Actor86: tc03 + Location: 21,34 + Owner: Neutral + Actor87: t14 + Location: 21,39 + Owner: Neutral + Actor88: tc05 + Location: 67,22 + Owner: Neutral + Actor89: t17 + Location: 85,32 + Owner: Neutral + Actor90: tc01 + Location: 18,29 + Owner: Neutral + Actor91: t02 + Location: 39,30 + Owner: Neutral + Actor92: t08 + Location: 38,32 + Owner: Neutral + Actor93: tc03 + Location: 81,61 + Owner: Neutral + Actor94: t12 + Location: 80,62 + Owner: Neutral + Actor95: tc04 + Location: 85,23 + Owner: Neutral + Actor96: tc01 + Location: 81,28 + Owner: Neutral + Actor97: t16 + Location: 89,30 + Owner: Neutral + Actor98: t08 + Location: 71,27 + Owner: Neutral + Actor99: tc01 + Location: 42,62 + Owner: Neutral + Actor100: tc03 + Location: 72,56 + Owner: Neutral + Actor101: t15 + Location: 71,49 + Owner: Neutral + Actor102: t13 + Location: 79,51 + Owner: Neutral + Actor103: tc01 + Location: 33,68 + Owner: Neutral + Actor104: tc05 + Location: 43,68 + Owner: Neutral + Actor105: tc02 + Location: 54,68 + Owner: Neutral + Actor106: t08 + Location: 52,63 + Owner: Neutral + Actor107: t08 + Location: 51,65 + Owner: Neutral + Actor108: t08 + Location: 55,62 + Owner: Neutral + Actor109: t06 + Location: 58,64 + Owner: Neutral + Actor110: t15 + Location: 35,61 + Owner: Neutral + Actor111: t08 + Location: 43,30 + Owner: Neutral + Actor112: tc02 + Location: 50,63 + Owner: Neutral + Actor113: tc03 + Location: 80,47 + Owner: Neutral + Actor117: v03 + Location: 42,66 + Owner: Germany + Actor118: v04 + Location: 45,62 + Owner: Germany + Health: 47 + Actor120: v07 + Location: 42,37 + Owner: Germany + Health: 99 + Actor122: brl3 + Location: 43,38 + Owner: Creeps + Actor123: barl + Location: 44,37 + Owner: Creeps + Actor126: barl + Location: 44,38 + Owner: Creeps + Actor131: barl + Location: 80,31 + Owner: Creeps + Actor132: brl3 + Location: 83,30 + Owner: Creeps + Actor133: brl3 + Location: 74,31 + Owner: Creeps + Actor134: barl + Location: 73,31 + Owner: Creeps + Actor136: v06 + Location: 90,39 + Owner: Germany + Actor138: barl + Location: 81,49 + Owner: Creeps + Actor139: brl3 + Location: 78,49 + Owner: Creeps + Actor140: barl + Location: 79,49 + Owner: Creeps + Actor141: barl + Location: 76,49 + Owner: Creeps + Actor143: v04 + Location: 81,53 + Owner: Germany + Health: 39 + Actor145: v02 + Location: 62,38 + Owner: Germany + Actor146: v04 + Location: 56,39 + Owner: Germany + Health: 41 + Actor148: v08 + Location: 62,41 + Owner: Germany + Actor150: brl3 + Location: 58,43 + Owner: Creeps + Actor151: barl + Location: 59,42 + Owner: Creeps + Actor153: barl + Location: 61,42 + Owner: Creeps + Actor154: brl3 + Location: 62,42 + Owner: Creeps + Actor155: barl + Location: 57,42 + Owner: Creeps + Actor156: barl + Location: 57,43 + Owner: Creeps + Actor157: barl + Location: 55,44 + Owner: Creeps + Actor158: brl3 + Location: 55,45 + Owner: Creeps + Actor159: brl3 + Location: 42,39 + Owner: Creeps + Actor160: brl3 + Location: 45,38 + Owner: Creeps + Actor161: barl + Location: 46,38 + Owner: Creeps + Actor162: brl3 + Location: 55,46 + Owner: Creeps + Actor163: barl + Location: 63,41 + Owner: Creeps + Actor164: brl3 + Location: 76,48 + Owner: Creeps + Actor165: barl + Location: 77,48 + Owner: Creeps + Actor166: barl + Location: 73,30 + Owner: Creeps + Actor167: barl + Location: 83,31 + Owner: Creeps + Actor168: brl3 + Location: 80,49 + Owner: Creeps + Actor169: v13 + Location: 63,36 + Owner: Germany + Actor171: brl3 + Location: 81,31 + Owner: Creeps + Actor172: e1 + Location: 16,31 + Owner: Germany + Facing: 128 + SubCell: 4 + Actor173: e1 + Location: 16,31 + Owner: Germany + Facing: 192 + SubCell: 0 + Actor174: e1 + Location: 17,33 + Owner: Germany + Facing: 160 + SubCell: 1 + Actor175: e1 + Location: 17,33 + Owner: Germany + Facing: 128 + SubCell: 4 + Actor176: e3 + Location: 17,33 + Owner: Germany + Facing: 128 + SubCell: 2 + Actor177: e3 + Location: 17,31 + Owner: Germany + SubCell: 1 + Actor183: e1 + Location: 77,61 + Owner: Germany + SubCell: 2 + Actor184: e1 + Location: 64,41 + Owner: Germany + Facing: 64 + SubCell: 3 + Actor185: e1 + Location: 64,42 + Owner: Germany + Facing: 96 + SubCell: 0 + Actor186: e1 + Location: 63,42 + Owner: Germany + Facing: 128 + SubCell: 0 + Actor187: e1 + Location: 59,45 + Owner: Germany + Facing: 32 + SubCell: 2 + Actor188: e1 + Location: 56,44 + Owner: Germany + Facing: 32 + SubCell: 4 + Actor191: e1 + Location: 56,45 + Owner: Germany + Facing: 64 + SubCell: 4 + Actor192: e1 + Location: 57,44 + Owner: Germany + Facing: 64 + SubCell: 2 + Actor193: e1 + Location: 60,44 + Owner: Germany + Facing: 32 + SubCell: 1 + Actor194: e1 + Location: 56,46 + Owner: Germany + Facing: 64 + SubCell: 4 + Actor195: e1 + Location: 53,37 + Owner: Germany + Facing: 96 + SubCell: 2 + Actor196: e1 + Location: 52,38 + Owner: Germany + Facing: 96 + SubCell: 3 + Actor197: e1 + Location: 52,37 + Owner: Germany + Facing: 96 + SubCell: 4 + Actor264: fenc + Owner: Soviet + Location: 89,32 + Actor265: fenc + Owner: Soviet + Location: 88,32 + Actor266: fenc + Owner: Soviet + Location: 87,32 + Actor267: fenc + Owner: Soviet + Location: 86,32 + Actor268: fenc + Owner: Soviet + Location: 85,32 + Actor269: fenc + Owner: Soviet + Location: 84,32 + Actor270: fenc + Owner: Soviet + Location: 83,32 + Actor271: fenc + Owner: Soviet + Location: 82,32 + Actor272: fenc + Owner: Soviet + Location: 81,32 + Actor273: fenc + Owner: Soviet + Location: 80,32 + Actor274: fenc + Owner: Soviet + Location: 70,22 + Actor275: fenc + Owner: Soviet + Location: 70,23 + Actor276: fenc + Owner: Soviet + Location: 70,24 + Actor277: fenc + Owner: Soviet + Location: 70,25 + Actor278: fenc + Owner: Soviet + Location: 70,26 + Actor279: fenc + Owner: Soviet + Location: 70,27 + Actor280: fenc + Owner: Soviet + Location: 70,28 + Actor281: fenc + Owner: Soviet + Location: 70,29 + Actor282: fenc + Owner: Soviet + Location: 70,30 + Actor283: fenc + Owner: Soviet + Location: 70,31 + Actor284: fenc + Owner: Soviet + Location: 70,32 + Actor285: fenc + Owner: Soviet + Location: 71,32 + Actor286: fenc + Owner: Soviet + Location: 72,32 + Actor287: fenc + Owner: Soviet + Location: 73,32 + Actor288: fenc + Owner: Soviet + Location: 74,32 + Actor289: fenc + Owner: Neutral + Location: 72,43 + Actor290: fenc + Owner: Neutral + Location: 73,43 + Actor291: fenc + Owner: Neutral + Location: 74,43 + Actor292: fenc + Owner: Neutral + Location: 75,43 + Actor293: fenc + Owner: Neutral + Location: 75,42 + Actor294: fenc + Owner: Neutral + Location: 75,44 + Actor295: fenc + Owner: Neutral + Location: 77,44 + Actor296: fenc + Owner: Neutral + Location: 77,43 + Actor297: fenc + Owner: Neutral + Location: 77,42 + Actor298: fenc + Owner: Neutral + Location: 78,43 + Actor299: fenc + Owner: Neutral + Location: 79,43 + Actor300: fenc + Owner: Neutral + Location: 80,43 + Actor301: fenc + Owner: Neutral + Location: 76,46 + Actor302: fenc + Owner: Neutral + Location: 75,46 + Actor303: fenc + Owner: Neutral + Location: 74,46 + Actor304: fenc + Owner: Neutral + Location: 77,46 + Actor305: fenc + Owner: Neutral + Location: 78,46 + Actor306: fenc + Owner: Neutral + Location: 76,58 + Actor307: fenc + Owner: Neutral + Location: 76,59 + Actor308: fenc + Owner: Neutral + Location: 76,60 + Actor309: fenc + Owner: Neutral + Location: 75,60 + Actor310: fenc + Owner: Neutral + Location: 78,60 + Actor311: fenc + Owner: Neutral + Location: 79,60 + Actor312: fenc + Owner: Neutral + Location: 78,59 + Actor313: fenc + Owner: Neutral + Location: 78,58 + Actor314: fenc + Owner: Neutral + Location: 65,41 + Actor315: fenc + Owner: Neutral + Location: 65,42 + Actor316: fenc + Owner: Neutral + Location: 65,43 + Actor317: fenc + Owner: Neutral + Location: 64,43 + Actor318: fenc + Owner: Neutral + Location: 63,43 + Actor319: fenc + Owner: Neutral + Location: 62,43 + Actor320: fenc + Owner: Neutral + Location: 61,43 + Actor321: fenc + Owner: Neutral + Location: 60,43 + Actor322: fenc + Owner: Neutral + Location: 59,43 + Actor323: fenc + Owner: Neutral + Location: 59,44 + Actor324: fenc + Owner: Neutral + Location: 58,44 + Actor325: fenc + Owner: Neutral + Location: 58,45 + Actor326: fenc + Owner: Neutral + Location: 63,45 + Actor327: fenc + Owner: Neutral + Location: 62,45 + Actor328: fenc + Owner: Neutral + Location: 61,45 + Actor329: fenc + Owner: Neutral + Location: 61,46 + Actor330: fenc + Owner: Neutral + Location: 60,46 + Actor331: fenc + Owner: Neutral + Location: 59,46 + Actor332: fenc + Owner: Neutral + Location: 59,47 + Actor333: fenc + Owner: Neutral + Location: 58,47 + Actor334: fenc + Owner: Neutral + Location: 57,47 + Actor335: fenc + Owner: Neutral + Location: 56,47 + Actor336: fenc + Owner: Neutral + Location: 56,46 + Actor337: fenc + Owner: Neutral + Location: 56,45 + Actor338: fenc + Owner: Neutral + Location: 56,44 + Actor339: fenc + Owner: Neutral + Location: 56,43 + Actor340: fenc + Owner: Neutral + Location: 55,43 + Actor341: fenc + Owner: Neutral + Location: 58,40 + Actor342: fenc + Owner: Neutral + Location: 58,41 + Actor343: fenc + Owner: Neutral + Location: 57,41 + Actor344: fenc + Owner: Neutral + Location: 56,41 + Actor345: fenc + Owner: Neutral + Location: 55,41 + Actor346: fenc + Owner: Neutral + Location: 58,42 + Actor347: fenc + Owner: Neutral + Location: 61,41 + Actor348: fenc + Owner: Neutral + Location: 60,41 + Actor349: fenc + Owner: Neutral + Location: 60,40 + waypoint8: waypoint + Location: 79,28 + Owner: Neutral + waypoint12: waypoint + Location: 58,49 + Owner: Neutral + waypoint26: waypoint + Location: 59,62 + Owner: Neutral + waypoint37: waypoint + Location: 72,31 + Owner: Neutral + waypoint38: waypoint + Location: 82,31 + Owner: Neutral + waypoint41: waypoint + Location: 35,37 + Owner: Neutral + waypoint43: waypoint + Location: 73,43 + Owner: Neutral + waypoint56: waypoint + Location: 40,70 + Owner: Neutral + waypoint57: waypoint + Location: 39,73 + Owner: Neutral + waypoint60: waypoint + Location: 58,22 + Owner: Neutral + waypoint61: waypoint + Location: 58,20 + Owner: Neutral + waypoint79: waypoint + Location: 93,65 + Owner: Neutral + waypoint83: waypoint + Location: 37,67 + Owner: Neutral + waypoint85: waypoint + Location: 34,65 + Owner: Neutral + waypoint90: waypoint + Location: 76,29 + Owner: Neutral + waypoint95: waypoint + Location: 77,60 + Owner: Neutral + waypoint99: waypoint + Location: 58,59 + Owner: Neutral + BarrierSoldier1: e1 + Location: 63,49 + Owner: Germany + Facing: 160 + SubCell: 4 + BarrierSoldier2: e1 + Location: 64,50 + Owner: Germany + Facing: 128 + SubCell: 0 + BarrierSoldier3: e1 + Location: 64,49 + Owner: Germany + Facing: 96 + SubCell: 4 + BarrierSoldier4: e1 + Location: 66,50 + Owner: Germany + Facing: 96 + SubCell: 4 + BarrierSoldier5: e1 + Location: 65,49 + Owner: Germany + Facing: 160 + SubCell: 3 + BarrierSoldier6: e1 + Location: 66,49 + Owner: Germany + Facing: 128 + SubCell: 3 + BaseBarrel1: barl + Location: 72,31 + Owner: Creeps + BaseBarrel2: brl3 + Location: 82,31 + Owner: Creeps + BaseBuilding1: ftur + Location: 75,32 + Owner: Soviet + BaseBuilding2: ftur + Location: 79,32 + Owner: Soviet + BaseBuilding3: apwr + Location: 71,22 + Owner: Soviet + BaseBuilding4: apwr + Location: 86,26 + Owner: Soviet + BaseBuilding5: barl + Location: 74,24 + Owner: Creeps + BaseBuilding6: miss + Location: 78,27 + Owner: Soviet + Health: 56 + CameraBarrier: waypoint + Location: 64,51 + Owner: Neutral + CameraFinalArea: waypoint + Location: 38,36 + Owner: Neutral + CameraSpyHideout31: waypoint + Location: 63,40 + Owner: Neutral + CameraSpyHideout32: waypoint + Location: 58,45 + Owner: Neutral + CameraSpyHideout33: waypoint + Location: 58,37 + Owner: Neutral + CameraSpyVillage: waypoint + Location: 58,63 + Owner: Neutral + CameraVillage: waypoint + Location: 40,63 + Owner: Neutral + CameraWater1: camera + Owner: Neutral + Location: 38,48 + CameraWater2: camera + Owner: Neutral + Location: 29,48 + CameraWater3: camera + Owner: Neutral + Location: 29,55 + CameraWater4: camera + Owner: Neutral + Location: 29,63 + CameraWater5: camera + Owner: Neutral + Location: 38,55 + CameraWater6: camera + Owner: Neutral + Location: 50,55 + EnemyReinforcements1: waypoint + Location: 45,63 + Owner: Neutral + EnemyReinforcements2: waypoint + Location: 42,66 + Owner: Neutral + EnemyReinforcements1Goal: waypoint + Location: 44,63 + Owner: Neutral + EnemyReinforcements2Goal: waypoint + Location: 41,65 + Owner: Neutral + FarmArea: waypoint + Location: 89,39 + Owner: Neutral + Farmer1: c7 + Location: 88,39 + Owner: Germany + SubCell: 4 + Farmer2: c6 + Location: 90,38 + Owner: Germany + SubCell: 3 + Farmer3: e3 + Location: 89,37 + Owner: Germany + Facing: 160 + SubCell: 2 + FarmSpawn: waypoint + Location: 90,39 + Owner: Neutral + HelicopterEscape: waypoint + Location: 20,33 + Owner: Neutral + HelicopterGoal: waypoint + Location: 31,33 + Owner: Neutral + HelicopterSpawn: waypoint + Location: 24,33 + Owner: Neutral + Hideout1Barrel: brl3 + Location: 77,49 + Owner: Creeps + Hideout1PBox: pbox + Location: 76,47 + Owner: Germany + Hideout3Barrel: brl3 + Location: 60,42 + Owner: Creeps + IntroCamera: waypoint + Location: 76,40 + Owner: Neutral + Playerbase: waypoint + Location: 77,25 + Owner: Neutral + RedBuilding1: v05 + Location: 37,67 + Owner: Germany + Health: 39 + RedBuilding2: v05 + Location: 56,37 + Owner: Germany + Health: 39 + RedBuilding3: v05 + Location: 72,53 + Owner: Germany + Health: 43 + ReinforcementDropOff: waypoint + Location: 63,61 + Owner: Neutral + ReinforcementGoal: waypoint + Location: 76,25 + Owner: Neutral + ReinforcementSpawn: waypoint + Location: 77,22 + Owner: Neutral + RSoldier1: e3 + Location: 73,35 + Owner: Germany + SubCell: 1 + RSoldier2: e3 + Location: 80,35 + Owner: Germany + SubCell: 2 + RSoldier3: e3 + Location: 36,37 + Owner: Germany + Facing: 64 + SubCell: 1 + RSoldier4: e3 + Location: 36,37 + Owner: Germany + Facing: 64 + SubCell: 4 + RSoldierTrap: barl + Location: 42,38 + Owner: Creeps + RStandoff: waypoint + Location: 77,57 + Owner: Neutral + SpyGoal: waypoint + Location: 31,34 + Owner: Neutral + SpyHideout1: v01 + Location: 77,52 + Owner: Germany + Health: 99 + SpyHideout2: v01 + Location: 37,63 + Owner: Germany + Health: 99 + SpyHideout3: v01 + Location: 61,36 + Owner: Germany + SpyHideout4: v01 + Location: 36,32 + Owner: Germany + Health: 99 + SpyWaypoint1: waypoint + Location: 76,42 + Owner: Neutral + SpyWaypoint2: waypoint + Location: 75,53 + Owner: Neutral + SpyWaypoint3: waypoint + Location: 74,63 + Owner: Neutral + SpyWaypoint4: waypoint + Location: 47,65 + Owner: Neutral + TheSpy: spy + Location: 77,28 + Owner: England + SubCell: 1 + Transport: lst + Location: 28,65 + Owner: Germany + TransportPath1: waypoint + Location: 31,65 + Owner: Neutral + TransportPath1Water: waypoint + Location: 30,65 + Owner: Neutral + TransportPath2Water: waypoint + Location: 47,51 + Owner: Neutral + TransportPath2: waypoint + Location: 47,50 + Owner: Neutral + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + -EnemyWatcher: + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: soviet03.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^TechBuilding: + AutoTargetIgnore: + Tooltip: + ShowOwnerRow: false + ^Infantry: + -GivesBounty: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Ship: + -GivesBounty: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Helicopter: + -GivesBounty: + Health: + HP: 9000 + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Plane: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Wall: + Tooltip: + ShowOwnerRow: false + BARL: + Health: + HP: 1 + Explodes: + Weapon: MissionBarrelExplode + BRL3: + Health: + HP: 1 + Explodes: + Weapon: MissionBarrelExplode + FENC: + Health: + HP: 9000 + HEALCRATE: + Tooltip: + GenericStancePrefix: false + GenericVisibility: Enemy + ShowOwnerRow: false + V01: + Cargo: + Types: Infantry + MaxWeight: 1 + PipCount: 1 + V05: + SpawnActorOnDeath: + Actor: healcrate + DOG: + -GainsExperience: + SPY: + Mobile: + Speed: 80 + powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +Sequences: + +VoxelSequences: + +Weapons: + MissionBarrelExplode: + Warhead@1Dam: SpreadDamage + Spread: 600 + Damage: 200 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 5 + Versus: + None: 120 + Wood: 200 + Light: 50 + Heavy: 25 + Concrete: 10 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + Size: 2,1 + Delay: 5 + Warhead@3Eff: CreateEffect + Explosion: napalm + ImpactSound: firebl3.aud + Delay: 5 + +Voices: + +Notifications: + Sounds: + Notifications: + sking: sking1 + +Translations: diff --git a/mods/ra/maps/soviet-03/soviet03.lua b/mods/ra/maps/soviet-03/soviet03.lua new file mode 100644 index 0000000000..8f7d5c243d --- /dev/null +++ b/mods/ra/maps/soviet-03/soviet03.lua @@ -0,0 +1,387 @@ +if Map.Difficulty == "Easy" then + remainingTime = DateTime.Minutes(7) +elseif Map.Difficulty == "Normal" then + remainingTime = DateTime.Minutes(6) +elseif Map.Difficulty == "Hard" then + remainingTime = DateTime.Minutes(5) +end + +USSRReinforcements1 = { "dog", "dog", "dog", "dog", "dog" } +USSRReinforcements2 = { "e1", "e2", "e2" } +USSRReinforcementsFarm = { "e1", "e1", "e1", "e2", "e2" } +EnemyReinforcements1SpyHideout2 = { "e1", "e3" } +EnemyReinforcements2SpyHideout2 = { "e3", "e3" } +ExtractionHeliType = "tran" +ExtractionPath = { HelicopterSpawn.Location, HelicopterGoal.Location } +Farmers = { Farmer1, Farmer2, Farmer3 } +BarrierSoldiers = { BarrierSoldier1, BarrierSoldier2, BarrierSoldier3, BarrierSoldier4, BarrierSoldier5, BarrierSoldier6 } +RedBuildings = { RedBuildung1, RedBuilding2, RedBuilding3 } +BaseBuildings1 = { BaseBarrel1, BaseBarrel2, BaseBuilding1, BaseBuilding2 } +BaseBuildings2 = { BaseBuilding3, BaseBuilding4, BaseBuilding5, BaseBuilding6 } + +SpyHideout1Trigger = { CPos.New(84, 45), CPos.New(85, 45), CPos.New(86, 45), CPos.New(87, 45), CPos.New(88, 45), CPos.New(89, 45), CPos.New(90, 45) } +SpyHideout2PathTrigger = { CPos.New(70, 61), CPos.New(70, 62), CPos.New(70, 63), CPos.New(70, 64), CPos.New(70, 65) } +SpyHideout2Trigger = { CPos.New(50, 63), CPos.New(50, 64), CPos.New(50, 65), CPos.New(50, 66), CPos.New(50, 67), CPos.New(50, 68), CPos.New(50, 69) } +SpyTransport1CheckpointTrigger = { CPos.New(31, 65) } +SpyTransport2CheckpointTrigger = { CPos.New(47, 51) } +Barrier1Trigger = { CPos.New(59,57), CPos.New(60,57), CPos.New(61,57), CPos.New(62,57), CPos.New(63,57), CPos.New(64,57), CPos.New(65,57), CPos.New(66,57), CPos.New(67,57), CPos.New(68,57) } +Barrier2Trigger = { CPos.New(63, 47), CPos.New(64, 47), CPos.New(65, 47), CPos.New(66, 47), CPos.New(67, 47), CPos.New(68, 47) } +SpyHideout3Trigger = { CPos.New(58, 45), CPos.New(58, 46), CPos.New(58, 47) } +RTrapTrigger = { CPos.New(46, 34), CPos.New(47, 35), CPos.New(48, 36), CPos.New(48, 37), CPos.New(48, 38), CPos.New(48, 39) } +SpyHideout4Trigger = { CPos.New(41, 34), CPos.New(41, 35), CPos.New(41, 36), CPos.New(41, 37), CPos.New(41, 38) } + +IntroSequence = function() + TheSpy.DisguiseAsType("e1", player) + Actor.Create("camera", true, { Owner = player, Location = Playerbase.Location }) + Actor.Create("camera", true, { Owner = player, Location = IntroCamera.Location }) + Actor.Create("camera", true, { Owner = player, Location = FarmArea.Location }) + if not TheSpy.IsDead then + TheSpy.Move(SpyWaypoint1.Location) + TheSpy.Move(SpyWaypoint2.Location) + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySoundNotification(player, "sking") + end) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.PlaySpeechNotification(player, "ExplosiveChargePlaced") + end) + Trigger.AfterDelay(DateTime.Seconds(4), function() + if not RSoldier1.IsDead and not BaseBarrel1.IsDead then + RSoldier1.Attack(BaseBarrel1) + end + if not RSoldier2.IsDead and not BaseBarrel2.IsDead then + RSoldier2.Attack(BaseBarrel2) + end + end) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Utils.Do(BaseBuildings1, function(actor) + if not actor.IsDead then + actor.Kill() + end + end) + end) + Trigger.AfterDelay(DateTime.Seconds(6), function() + Utils.Do(BaseBuildings2, function(actor) + if not actor.IsDead then + actor.Kill() + end + end) + if not RSoldier1.IsDead then + RSoldier1.Move(SpyWaypoint2.Location) + end + if not RSoldier2.IsDead then + RSoldier2.Move(SpyWaypoint2.Location) + end + end) + Trigger.AfterDelay(DateTime.Seconds(8), function() + Dogs = Reinforcements.Reinforce(player, USSRReinforcements1, { ReinforcementSpawn.Location, ReinforcementGoal.Location }, 0) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + timerstarted = true + end) + Trigger.AfterDelay(DateTime.Seconds(9), function() + Media.PlaySoundNotification(player, "AlertBleep") + end) + Trigger.AfterDelay(DateTime.Seconds(10), function() + Media.PlaySpeechNotification(player, "TimerStarted") + end) +end + +SendUSSRParadrops = function() + paraproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = player }) + paraproxy.SendParatroopers(ReinforcementDropOff.CenterPosition, false, 0) + paraproxy.Destroy() +end + +SpyFinalSequency = function() + if not SpyHideout4.IsDead then + SpyHideout4.UnloadPassengers() + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + TheSpy.Move(SpyGoal.Location) + end + end) + end +end + +SpyHelicopterEscape = function() + if not spyHelicopterEscape then + spyHelicopterEscape = true + SpyFinalSequency() + Actor.Create("camera", true, { Owner = player, Location = CameraFinalArea.Location }) + ExtractionHeli = Reinforcements.ReinforceWithTransport(germany, ExtractionHeliType, nil, ExtractionPath)[1] + local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y) + Trigger.AfterDelay(DateTime.Seconds(5), function() + if not TheSpy.IsDead and not ExtractionHeli.IsDead then + TheSpy.EnterTransport(ExtractionHeli) + end + end) + Trigger.AfterDelay(DateTime.Seconds(7), function() + if not ExtractionHeli.IsDead then + ExtractionHeli.Move(HelicopterEscape.Location) + end + end) + Trigger.AfterDelay(DateTime.Seconds(12), function() + enemy.MarkCompletedObjective(alliedObjective) + end) + end +end + +Trigger.OnAllKilled(Farmers, function() + Reinforcements.Reinforce(player, USSRReinforcementsFarm, { FarmSpawn.Location, FarmArea.Location }, 0) + player.MarkCompletedObjective(sovietObjective2) +end) + +Trigger.OnAllKilled(RedBuildings, function() + player.MarkCompletedObjective(sovietObjective3) +end) + +Trigger.OnAnyKilled(BarrierSoldiers, function() + if barrier1Trigger then + Utils.Do(BarrierSoldiers, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + end +end) + +Trigger.OnEnteredFootprint(SpyHideout1Trigger, function(a, id) + if not spyHideout1Trigger and a.Owner == player then + spyHideout1Trigger = true + Trigger.RemoveFootprintTrigger(id) + Actor.Create("camera", true, { Owner = player, Location = SpyHideout1.Location }) + if not TheSpy.IsDead and SpyHideout1.IsDead then + TheSpy.EnterTransport(SpyHideout1) + end + end +end) + +Trigger.OnEnteredFootprint(SpyHideout2PathTrigger, function(a, id) + if not spyHideout2PathTrigger and a.Owner == player then + spyHideout2PathTrigger = true + Trigger.RemoveFootprintTrigger(id) + Actor.Create("camera", true, { Owner = player, Location = CameraSpyVillage.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraVillage.Location }) + if not TheSpy.IsDead and not SpyHideout2.IsDead then + TheSpy.EnterTransport(SpyHideout2) + end + end +end) + +Trigger.OnEnteredFootprint(SpyHideout2Trigger, function(a, id) + if not spyHideout2Trigger and a.Owner == player then + spyHideout2Trigger = true + SpyGuards1 = Reinforcements.Reinforce(germany, EnemyReinforcements1SpyHideout2, { EnemyReinforcements1.Location, EnemyReinforcements1Goal.Location }, 0) + SpyGuards2 = Reinforcements.Reinforce(germany, EnemyReinforcements2SpyHideout2, { EnemyReinforcements2.Location, EnemyReinforcements2Goal.Location }, 0) + Utils.Do(SpyGuards1, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + Utils.Do(SpyGuards2, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + if not SpyHideout2.IsDead and not Transport.IsDead then + SpyHideout2.UnloadPassengers() + Transport.Move(TransportPath1Water.Location) + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + TheSpy.Move(TransportPath1.Location) + TheSpy.EnterTransport(Transport) + end + end) + Trigger.AfterDelay(DateTime.Seconds(7), function() + SendUSSRParadrops() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + end) + end +end) + +Trigger.OnEnteredFootprint(SpyTransport1CheckpointTrigger, function(a, id) + if not spyTransport1CheckpointTrigger and a.Owner == enemy then + spyTransport1CheckpointTrigger = true + Trigger.AfterDelay(DateTime.Seconds(2), function() + Actor.Create("camera", true, { Owner = player, Location = CameraWater1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater2.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater3.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater4.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater5.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater6.Location }) + Actor.Create("camera", true, { Owner = player, Location = TransportPath2.Location }) + if not Transport.IsDead then + Transport.Wait(25) + Transport.Move(TransportPath2Water.Location) + end + end) + end +end) + +Trigger.OnEnteredFootprint(SpyTransport2CheckpointTrigger, function(a, id) + if not spyTransport2CheckpointTrigger and a.Owner == germany then + spyTransport2CheckpointTrigger = true + Transport.UnloadPassengers() + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + if not Hideout3Barrel.IsDead then + TheSpy.EnterTransport(SpyHideout3) + elseif not SpyHideout4.IsDead then + TheSpy.EnterTransport(SpyHideout4) + else + TheSpy.Move(SpyGoal.Location) + end + end + end) + end +end) + +Trigger.OnEnteredFootprint(Barrier1Trigger, function(a, id) + if not barrier1Trigger and a.Owner == player then + barrier1Trigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraBarrier.Location }) + end +end) + +Trigger.OnEnteredFootprint(Barrier2Trigger, function(a, id) + if not barrier2Trigger and a.Owner == player then + barrier2Trigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout31.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout32.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout33.Location }) + end +end) + +Trigger.OnEnteredFootprint(SpyHideout3Trigger, function(a, id) + if not spyHideout3Trigger and a.Owner == player then + spyHideout3Trigger = true + if Map.Difficulty ~= "Hard" then + Reinforcements.Reinforce(player, USSRReinforcements2, { ReinforcementSpawn.Location, CameraSpyHideout33.Location }, 0) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + end + end +end) + +Trigger.OnEnteredFootprint(RTrapTrigger, function(a, id) + if not rTrapTrigger and a.Owner == player then + rTrapTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraFinalArea.Location }) + if not RSoldier3.IsDead and not RSoldierTrap.IsDead then + RSoldier3.Attack(RSoldierTrap) + end + if not RSoldier4.IsDead and not RSoldierTrap.IsDead then + RSoldier4.Attack(RSoldierTrap) + end + end +end) + +Trigger.OnEnteredFootprint(SpyHideout4Trigger, function(a, id) + if not spyHideout4Trigger and a.Owner == player then + spyHideout4Trigger = true + SpyFinalSequency() + Actor.Create("camera", true, { Owner = player, Location = HelicopterGoal.Location }) + end +end) + +Trigger.OnKilled(Hideout1Barrel, function() + if not Hideout1PBox.IsDead then + Hideout1PBox.Kill() + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not SpyHideout1.IsDead then + SpyHideout1.UnloadPassengers() + end + end) + Trigger.AfterDelay(DateTime.Seconds(2), function() + if not TheSpy.IsDead then + TheSpy.Move(SpyWaypoint3.Location) + TheSpy.Move(SpyWaypoint4.Location) + end + end) + if not RSoldier1.IsDead then + RSoldier1.Move(RStandoff.Location) + end + if not RSoldier2.IsDead then + RSoldier2.Move(RStandoff.Location) + end +end) + +Trigger.OnKilled(Hideout3Barrel, function() + if not SpyHideout3.IsDead then + SpyHideout3.UnloadPassengers() + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + TheSpy.Move(SpyGoal.Location) + end + end) + Trigger.AfterDelay(DateTime.Seconds(7), function() + if not TheSpy.IsDead and not SpyHideout4.IsDead then + TheSpy.EnterTransport(SpyHideout4) + end + end) +end) + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("England") + germany = Player.GetPlayer("Germany") + Camera.Position = Playerbase.CenterPosition + IntroSequence() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective1 = player.AddPrimaryObjective("Kill the enemy spy.") + sovietObjective2 = player.AddSecondaryObjective("Clear the nearby farm for reinforcements.") + sovietObjective3 = player.AddSecondaryObjective("Scavenge the civilian buildings for supplies.") +end + +Trigger.OnKilled(TheSpy, function() + player.MarkCompletedObjective(sovietObjective1) +end) + +Tick = function() + Trigger.AfterDelay(DateTime.Seconds(12), function() + if player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(alliedObjective) + end + end) + if not SpyHideout4.IsDead and SpyHideout4.HasPassengers then + spyReachedHideout4 = true + end + if remainingTime == DateTime.Minutes(5) and Map.Difficulty ~= "Hard" then + Media.PlaySpeechNotification(player, "WarningFiveMinutesRemaining") + elseif remainingTime == DateTime.Minutes(4) then + Media.PlaySpeechNotification(player, "WarningFourMinutesRemaining") + elseif remainingTime == DateTime.Minutes(3) then + Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining") + elseif remainingTime == DateTime.Minutes(2) then + Media.PlaySpeechNotification(player, "WarningTwoMinutesRemaining") + elseif remainingTime == DateTime.Minutes(1) then + Media.PlaySpeechNotification(player, "WarningOneMinuteRemaining") + end + if remainingTime > 0 and timerstarted then + UserInterface.SetMissionText("Time Remaining: " .. Utils.FormatTime(remainingTime), player.Color) + remainingTime = remainingTime - 1 + elseif remainingTime == 0 and not spyReachedHideout4 then + UserInterface.SetMissionText("") + enemy.MarkCompletedObjective(alliedObjective) + elseif remainingTime == 0 and spyReachedHideout4 then + UserInterface.SetMissionText("") + SpyHelicopterEscape() + end +end diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 2a50e68f3c..7d69163f97 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -7,6 +7,7 @@ Allied Campaign: Soviet Campaign: ./mods/ra/maps/soviet-01 ./mods/ra/maps/soviet-02a + ./mods/ra/maps/soviet-03 ./mods/ra/maps/soviet-04a ./mods/ra/maps/soviet-04b ./mods/ra/maps/soviet-05