diff --git a/OpenRA.sln b/OpenRA.sln index 3cccb24b9b..36602c2f7a 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -49,6 +49,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\intervention\intervention.lua = mods\ra\maps\intervention\intervention.lua mods\ra\maps\fort-lonestar\fort-lonestar.lua = mods\ra\maps\fort-lonestar\fort-lonestar.lua mods\ra\maps\monster-tank-madness\monster-tank-madness.lua = mods\ra\maps\monster-tank-madness\monster-tank-madness.lua + mods\ra\maps\survival01\survival01.lua = mods\ra\maps\survival01\survival01.lua EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "System Lua scripts", "System Lua scripts", "{A4D6AEA4-8009-4256-903B-8D227E50452B}" diff --git a/mods/ra/maps/survival01/map.bin b/mods/ra/maps/survival01/map.bin new file mode 100644 index 0000000000..942e6c2de7 Binary files /dev/null and b/mods/ra/maps/survival01/map.bin differ diff --git a/mods/ra/maps/survival01/map.png b/mods/ra/maps/survival01/map.png new file mode 100644 index 0000000000..aaa1507d66 Binary files /dev/null and b/mods/ra/maps/survival01/map.png differ diff --git a/mods/ra/maps/survival01/map.yaml b/mods/ra/maps/survival01/map.yaml new file mode 100644 index 0000000000..a8f77c20d1 --- /dev/null +++ b/mods/ra/maps/survival01/map.yaml @@ -0,0 +1,1367 @@ +Selectable: False + +MapFormat: 6 + +RequiresMod: ra + +Title: Survival 01 + +Description: LANDCOM 66 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A34\n\nTHE SOVIETS STARTED HEAVY ATTACKS AT OUR POSITION.\n SURVIVE AND HOLD THE BASE UNTIL OUR FRENCH ALLIES ARRIVE.\n\nCONFIRMATION CODE 5593.\n\nTRANSMISSION ENDS. + +Author: Nuke'm Bro + +Tileset: TEMPERAT + +MapSize: 96,64 + +Bounds: 4,4,88,56 + +UseAsShellmap: False + +Type: Mission + +Options: + Crates: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 5000 + ConfigurableStartingUnits: False + Difficulties: Easy, Medium, Hard + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Allies: + Name: Allies + Playable: True + AllowBots: False + Required: True + LockRace: True + Race: allies + LockColor: True + ColorRamp: 115,240,130 + LockSpawn: True + LockTeam: True + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Race: soviet + ColorRamp: 0,255,128 + Enemies: Allies + +Actors: + Actor113: fenc + Location: 46,54 + Owner: Allies + Actor115: fenc + Location: 46,55 + Owner: Allies + Actor88: brik + Location: 48,54 + Owner: Allies + Actor84: hpad + Location: 66,47 + Owner: Allies + Actor5: brik + Location: 72,55 + Owner: Allies + Actor4: brik + Location: 72,54 + Owner: Allies + Actor6: brik + Location: 72,53 + Owner: Allies + Actor77: brik + Location: 67,57 + Owner: Allies + Actor8: brik + Location: 72,52 + Owner: Allies + Actor9: brik + Location: 72,51 + Owner: Allies + Actor13: brik + Location: 75,50 + Owner: Allies + Actor12: brik + Location: 75,51 + Owner: Allies + Actor11: brik + Location: 74,51 + Owner: Allies + Actor10: brik + Location: 73,51 + Owner: Allies + Actor14: brik + Location: 75,49 + Owner: Allies + Actor15: brik + Location: 75,48 + Owner: Allies + Actor16: brik + Location: 76,48 + Owner: Allies + Actor17: brik + Location: 76,47 + Owner: Allies + Actor18: brik + Location: 75,47 + Owner: Allies + Actor19: brik + Location: 75,41 + Owner: Allies + Actor20: brik + Location: 75,42 + Owner: Allies + Actor21: brik + Location: 76,42 + Owner: Allies + Actor22: brik + Location: 76,41 + Owner: Allies + Actor23: brik + Location: 74,41 + Owner: Allies + Actor24: brik + Location: 73,41 + Owner: Allies + Actor25: brik + Location: 72,41 + Owner: Allies + Actor26: brik + Location: 71,41 + Owner: Allies + Actor27: brik + Location: 71,40 + Owner: Allies + Actor28: brik + Location: 70,40 + Owner: Allies + Actor29: brik + Location: 70,41 + Owner: Allies + Actor30: brik + Location: 61,40 + Owner: Allies + Actor31: brik + Location: 61,41 + Owner: Allies + Actor83: hpad + Location: 57,48 + Owner: Allies + Actor33: brik + Location: 60,40 + Owner: Allies + Actor1: brik + Location: 57,56 + Owner: Allies + Actor35: brik + Location: 59,40 + Owner: Allies + Actor36: brik + Location: 58,40 + Owner: Allies + Actor37: brik + Location: 57,40 + Owner: Allies + Actor38: brik + Location: 57,41 + Owner: Allies + Actor39: brik + Location: 56,41 + Owner: Allies + Actor40: brik + Location: 55,41 + Owner: Allies + Actor41: brik + Location: 54,41 + Owner: Allies + Actor42: brik + Location: 53,41 + Owner: Allies + Actor43: brik + Location: 53,42 + Owner: Allies + Actor44: brik + Location: 52,42 + Owner: Allies + Actor45: brik + Location: 51,42 + Owner: Allies + Actor46: brik + Location: 50,42 + Owner: Allies + Actor47: brik + Location: 49,42 + Owner: Allies + Actor48: brik + Location: 48,42 + Owner: Allies + Actor49: brik + Location: 48,43 + Owner: Allies + Actor50: brik + Location: 49,43 + Owner: Allies + Actor51: brik + Location: 48,52 + Owner: Allies + Actor52: brik + Location: 48,51 + Owner: Allies + Actor53: brik + Location: 48,50 + Owner: Allies + Actor54: brik + Location: 48,49 + Owner: Allies + Actor55: brik + Location: 48,48 + Owner: Allies + Actor71: brik + Location: 64,56 + Owner: Allies + Actor58: brik + Location: 46,47 + Owner: Allies + Actor57: brik + Location: 46,48 + Owner: Allies + Actor56: brik + Location: 47,48 + Owner: Allies + Actor59: brik + Location: 47,47 + Owner: Allies + Actor72: brik + Location: 64,57 + Owner: Allies + Actor65: brik + Location: 51,57 + Owner: Allies + Actor66: brik + Location: 50,57 + Owner: Allies + Actor61: brik + Location: 55,57 + Owner: Allies + Actor2: brik + Location: 57,57 + Owner: Allies + Actor34: brik + Location: 56,57 + Owner: Allies + Actor62: brik + Location: 54,57 + Owner: Allies + Actor74: brik + Location: 63,56 + Owner: Allies + Actor79: brik + Location: 65,57 + Owner: Allies + Actor80: apwr + Location: 68,53 + Owner: Allies + Actor81: powr + Location: 65,53 + Owner: Allies + Actor63: brik + Location: 53,57 + Owner: Allies + Actor64: brik + Location: 52,57 + Owner: Allies + Actor68: brik + Location: 72,57 + Owner: Allies + Actor73: brik + Location: 63,57 + Owner: Allies + Actor69: brik + Location: 71,57 + Owner: Allies + Actor76: brik + Location: 68,57 + Owner: Allies + Actor78: brik + Location: 66,57 + Owner: Allies + Actor75: brik + Location: 69,57 + Owner: Allies + Actor70: brik + Location: 70,57 + Owner: Allies + Actor7: brik + Location: 72,56 + Owner: Allies + Actor60: brik + Location: 56,56 + Owner: Allies + Actor 408: weap + Location: 53,46 + Owner: Allies + Actor32: tent + Location: 62,47 + Owner: Allies + Actor0: brik + Location: 48,53 + Owner: Allies + Actor111: proc + Location: 43,55 + Owner: Allies + Actor112: fenc + Location: 45,54 + Owner: Allies + Actor116: fenc + Location: 46,56 + Owner: Allies + Actor89: fenc + Location: 65,46 + Owner: Allies + Actor90: fenc + Location: 66,46 + Owner: Allies + Actor91: fenc + Location: 67,46 + Owner: Allies + Actor92: fenc + Location: 68,46 + Owner: Allies + Actor93: fenc + Location: 68,47 + Owner: Allies + Actor94: fenc + Location: 68,48 + Owner: Allies + Actor95: fenc + Location: 68,49 + Owner: Allies + Actor96: fenc + Location: 57,47 + Owner: Allies + Actor97: fenc + Location: 58,47 + Owner: Allies + Actor98: fenc + Location: 59,47 + Owner: Allies + Actor99: fenc + Location: 59,48 + Owner: Allies + Actor100: fenc + Location: 59,49 + Owner: Allies + Actor101: fix + Location: 50,52 + Owner: Allies + Actor102: dome + Location: 55,53 + Owner: Allies + Actor103: powr + Location: 58,41 + Owner: Allies + Actor104: apwr + Location: 71,47 + Owner: Allies + Actor105: fact + Location: 59,51 + Owner: Allies + Actor106: powr + Location: 55,42 + Owner: Allies + Actor107: gun + Location: 64,42 + Owner: Allies + Actor108: pbox + Location: 67,42 + Owner: Allies + Actor109: pbox + Location: 74,45 + Owner: Allies + Actor110: gun + Location: 50,45 + Owner: Allies + Actor114: fenc + Location: 44,54 + Owner: Allies + Actor118: fenc + Location: 42,57 + Owner: Allies + Actor117: fenc + Location: 46,57 + Owner: Allies + Actor67: brik + Location: 49,57 + Owner: Allies + Actor82: brik + Location: 48,57 + Owner: Allies + Actor85: brik + Location: 48,56 + Owner: Allies + Actor87: brik + Location: 48,55 + Owner: Allies + Actor86: brik + Location: 49,56 + Owner: Allies + Actor119: fenc + Location: 42,56 + Owner: Allies + Actor120: mine + Location: 30,58 + Owner: Neutral + Actor121: oilb + Location: 43,38 + Owner: Neutral + Actor122: oilb + Location: 36,37 + Owner: Neutral + Actor124: oilb + Location: 88,46 + Owner: Allies + Actor123: oilb + Location: 80,46 + Owner: Allies + Actor130: fenc + Location: 88,48 + Owner: Neutral + Actor129: fenc + Location: 89,48 + Owner: Neutral + Actor125: fenc + Location: 90,45 + Owner: Neutral + Actor127: fenc + Location: 90,47 + Owner: Neutral + Actor126: fenc + Location: 90,46 + Owner: Neutral + Actor128: fenc + Location: 90,48 + Owner: Neutral + Actor131: fenc + Location: 87,48 + Owner: Neutral + Actor141: fenc + Location: 78,11 + Owner: Neutral + Sam3: sam + Location: 76,11 + Owner: Soviets + SovietAirfield1: afld.mission + Location: 86,5 + Owner: Soviets + SovietAirfield2: afld.mission + Location: 80,6 + Owner: Soviets + SovietAirfield3: afld.mission + Location: 75,5 + Owner: Soviets + Actor160: fenc + Location: 77,4 + Owner: Neutral + Actor159: fenc + Location: 76,4 + Owner: Neutral + Actor162: fenc + Location: 74,4 + Owner: Neutral + Actor161: fenc + Location: 78,4 + Owner: Neutral + Actor136: fenc + Location: 75,11 + Owner: Neutral + Actor137: fenc + Location: 75,10 + Owner: Neutral + Actor138: fenc + Location: 76,10 + Owner: Neutral + Actor139: fenc + Location: 77,10 + Owner: Neutral + Actor140: fenc + Location: 78,10 + Owner: Neutral + Actor143: barl + Location: 79,6 + Owner: Soviets + Actor144: brl3 + Location: 74,5 + Owner: Soviets + Actor145: brl3 + Location: 75,7 + Owner: Soviets + Actor146: barl + Location: 74,6 + Owner: Soviets + Actor147: barl + Location: 80,5 + Owner: Soviets + Actor148: brl3 + Location: 84,6 + Owner: Soviets + Actor149: brl3 + Location: 85,5 + Owner: Soviets + Actor150: brl3 + Location: 83,6 + Owner: Soviets + Actor151: barl + Location: 84,5 + Owner: Soviets + Actor142: brl3 + Location: 79,5 + Owner: Soviets + Actor152: barl + Location: 82,6 + Owner: Soviets + Actor153: barl + Location: 84,7 + Owner: Soviets + Actor154: barl + Location: 85,6 + Owner: Soviets + Actor155: barl + Location: 89,5 + Owner: Soviets + Actor171: fenc + Location: 87,4 + Owner: Neutral + Actor172: fenc + Location: 88,4 + Owner: Neutral + Actor156: brl3 + Location: 90,5 + Owner: Soviets + Actor170: fenc + Location: 86,4 + Owner: Neutral + Actor169: fenc + Location: 85,4 + Owner: Neutral + Actor158: fenc + Location: 75,4 + Owner: Neutral + Actor168: fenc + Location: 84,4 + Owner: Neutral + Actor157: barl + Location: 90,6 + Owner: Soviets + Actor167: fenc + Location: 83,4 + Owner: Neutral + Actor166: fenc + Location: 82,4 + Owner: Neutral + Actor165: fenc + Location: 81,4 + Owner: Neutral + Actor164: fenc + Location: 80,4 + Owner: Neutral + Actor163: fenc + Location: 79,4 + Owner: Neutral + Actor173: fenc + Location: 89,4 + Owner: Neutral + Actor174: fenc + Location: 90,4 + Owner: Neutral + Actor175: fenc + Location: 91,4 + Owner: Neutral + Actor176: fenc + Location: 91,5 + Owner: Neutral + Actor177: fenc + Location: 91,6 + Owner: Neutral + Actor178: fenc + Location: 91,7 + Owner: Neutral + Actor179: fenc + Location: 91,8 + Owner: Neutral + Actor180: fenc + Location: 90,8 + Owner: Neutral + Actor181: fenc + Location: 90,7 + Owner: Neutral + Refinery: proc + Location: 81,11 + Owner: Soviets + Actor187: t11 + Location: 69,10 + Owner: Neutral + Actor186: t16 + Location: 58,6 + Owner: Neutral + Actor185: tc04 + Location: 57,8 + Owner: Neutral + Actor184: mine + Location: 85,22 + Owner: Neutral + Actor188: tc01 + Location: 69,6 + Owner: Neutral + Actor189: t12 + Location: 62,13 + Owner: Neutral + Actor193: fenc + Location: 75,16 + Owner: Neutral + Actor194: fenc + Location: 75,15 + Owner: Neutral + Actor191: fenc + Location: 74,15 + Owner: Neutral + Actor192: fenc + Location: 74,16 + Owner: Neutral + FlameTower3: ftur + Location: 78,17 + Owner: Soviets + Actor190: fenc + Location: 74,14 + Owner: Neutral + AdvancedPowerPlant3: apwr + Location: 88,12 + Owner: Soviets + Silo1: silo + Location: 84,13 + Owner: Soviets + Silo2: silo + Location: 84,12 + Owner: Soviets + Actor199: e1 + Location: 79,15 + Owner: Soviets + Actor200: e2 + Location: 81,17 + Owner: Soviets + Actor201: v2rl + Location: 76,15 + Owner: Soviets + Actor202: tc04 + Location: 4,15 + Owner: Neutral + Actor203: tc01 + Location: 7,17 + Owner: Neutral + Actor204: t15 + Location: 9,16 + Owner: Neutral + Actor205: tc05 + Location: 4,26 + Owner: Neutral + Actor206: tc02 + Location: 5,24 + Owner: Neutral + Actor207: tc04 + Location: 7,25 + Owner: Neutral + Actor208: tc03 + Location: 40,21 + Owner: Neutral + Sam1: sam + Location: 62,27 + Owner: Soviets + Actor210: tc04 + Location: 34,22 + Owner: Neutral + Actor211: tc02 + Location: 32,33 + Owner: Neutral + Actor212: t16 + Location: 35,33 + Owner: Neutral + Actor213: t11 + Location: 49,37 + Owner: Neutral + Actor214: tc04 + Location: 82,39 + Owner: Neutral + Actor215: tc01 + Location: 89,39 + Owner: Neutral + Actor216: tc05 + Location: 85,39 + Owner: Neutral + Actor217: t16 + Location: 80,41 + Owner: Neutral + Actor218: fenc + Location: 79,48 + Owner: Neutral + Actor219: fenc + Location: 80,48 + Owner: Neutral + Actor220: fenc + Location: 81,48 + Owner: Neutral + Actor221: fenc + Location: 82,48 + Owner: Neutral + Actor222: fenc + Location: 82,47 + Owner: Neutral + Actor223: tc02 + Location: 21,41 + Owner: Neutral + Actor224: tc04 + Location: 35,43 + Owner: Neutral + Actor225: tc02 + Location: 38,44 + Owner: Neutral + Actor226: t16 + Location: 38,42 + Owner: Neutral + Actor227: t13 + Location: 44,33 + Owner: Neutral + Actor228: t02 + Location: 39,31 + Owner: Neutral + Actor229: tc04 + Location: 54,13 + Owner: Neutral + Actor230: t07 + Location: 47,12 + Owner: Neutral + Actor235: brik + Location: 12,18 + Owner: Neutral + Actor267: brik + Location: 33,17 + Owner: Neutral + Actor237: brik + Location: 11,19 + Owner: Neutral + Actor231: brik + Location: 11,16 + Owner: Neutral + Actor238: brik + Location: 12,19 + Owner: Neutral + Actor232: brik + Location: 11,17 + Owner: Neutral + FlameTower1: ftur + Location: 23,16 + Owner: Soviets + FlameTower2: ftur + Location: 29,13 + Owner: Soviets + Actor307: v2rl + Location: 31,9 + Owner: Soviets + Actor306: v2rl + Location: 31,18 + Owner: Soviets + RadarDome: dome + Location: 14,16 + Owner: Soviets + AdvancedPowerPlant1: apwr + Location: 24,5 + Owner: Soviets + Actor234: brik + Location: 12,16 + Owner: Neutral + Actor233: brik + Location: 12,17 + Owner: Neutral + Actor236: brik + Location: 11,18 + Owner: Neutral + Actor293: brik + Location: 25,4 + Owner: Neutral + Actor291: brik + Location: 26,4 + Owner: Neutral + Actor295: brik + Location: 23,4 + Owner: Neutral + Actor294: brik + Location: 24,4 + Owner: Neutral + Actor290: brik + Location: 27,4 + Owner: Neutral + Actor289: brik + Location: 28,4 + Owner: Neutral + Actor288: brik + Location: 29,4 + Owner: Neutral + Actor287: brik + Location: 30,4 + Owner: Neutral + Actor286: brik + Location: 31,4 + Owner: Neutral + Actor285: brik + Location: 32,5 + Owner: Neutral + Actor284: brik + Location: 32,4 + Owner: Neutral + Actor283: brik + Location: 33,4 + Owner: Neutral + Actor261: brik + Location: 29,19 + Owner: Neutral + Actor262: brik + Location: 30,19 + Owner: Neutral + Actor260: brik + Location: 28,19 + Owner: Neutral + Actor265: brik + Location: 32,18 + Owner: Neutral + Actor259: brik + Location: 27,19 + Owner: Neutral + Sam2: sam + Location: 17,31 + Owner: Soviets + Actor264: brik + Location: 32,19 + Owner: Neutral + Actor246: brik + Location: 14,19 + Owner: Neutral + Actor242: brik + Location: 13,19 + Owner: Neutral + Actor263: brik + Location: 31,19 + Owner: Neutral + Actor266: brik + Location: 33,18 + Owner: Neutral + Actor247: brik + Location: 15,19 + Owner: Neutral + Actor248: brik + Location: 16,19 + Owner: Neutral + Actor249: brik + Location: 17,19 + Owner: Neutral + Actor251: brik + Location: 19,19 + Owner: Neutral + Actor250: brik + Location: 18,19 + Owner: Neutral + Actor254: brik + Location: 19,18 + Owner: Neutral + Actor253: brik + Location: 20,18 + Owner: Neutral + Actor252: brik + Location: 20,19 + Owner: Neutral + Actor281: brik + Location: 33,6 + Owner: Neutral + Actor277: brik + Location: 33,9 + Owner: Neutral + Actor276: brik + Location: 32,10 + Owner: Neutral + Actor270: brik + Location: 33,15 + Owner: Neutral + Actor278: brik + Location: 33,8 + Owner: Neutral + Actor275: brik + Location: 33,10 + Owner: Neutral + Actor274: brik + Location: 33,11 + Owner: Neutral + Actor273: brik + Location: 32,15 + Owner: Neutral + Actor271: brik + Location: 32,16 + Owner: Neutral + Actor282: brik + Location: 33,5 + Owner: Neutral + Actor272: brik + Location: 32,11 + Owner: Neutral + Actor279: brik + Location: 33,7 + Owner: Neutral + Actor269: brik + Location: 33,16 + Owner: Neutral + Actor268: brik + Location: 33,19 + Owner: Neutral + WarFactory: weap + Location: 22,12 + Owner: Soviets + AdvancedPowerPlant2: apwr + Location: 16,13 + Owner: Soviets + Actor258: brik + Location: 26,18 + Owner: Neutral + Actor255: brik + Location: 25,18 + Owner: Neutral + Actor256: brik + Location: 25,19 + Owner: Neutral + Actor257: brik + Location: 26,19 + Owner: Neutral + Actor309: e1 + Location: 52,44 + Owner: Allies + Barrack1: barr + Location: 28,7 + Owner: Soviets + Actor305: v2rl + Location: 17,18 + Owner: Soviets + Actor304: e3 + Location: 17,17 + Owner: Soviets + Actor303: e1 + Location: 29,15 + Owner: Soviets + Actor300: e1 + Location: 25,16 + Owner: Soviets + Actor301: e2 + Location: 21,17 + Owner: Soviets + Actor302: e3 + Location: 28,10 + Owner: Soviets + Sam4: sam + Location: 29,17 + Owner: Soviets + Actor310: e1 + Location: 50,47 + Owner: Allies + Actor311: e1 + Location: 62,43 + Owner: Allies + Actor312: e1 + Location: 64,44 + Owner: Allies + Actor313: e3 + Location: 66,44 + Owner: Allies + Actor314: e1 + Location: 69,43 + Owner: Allies + Actor315: e1 + Location: 73,43 + Owner: Allies + Actor316: jeep + Location: 54,49 + Owner: Allies + Actor317: 1tnk + Location: 69,45 + Owner: Allies + Actor318: 1tnk + Location: 52,46 + Owner: Allies + Actor296: tc02 + Location: 73,32 + Owner: Neutral + Actor298: tc01 + Location: 77,34 + Owner: Neutral + Actor299: tc04 + Location: 83,35 + Owner: Neutral + Actor308: tc01 + Location: 86,35 + Owner: Neutral + Actor319: t07 + Location: 90,27 + Owner: Neutral + Actor320: tc01 + Location: 80,26 + Owner: Neutral + Actor321: brik + Location: 60,41 + Owner: Allies + Actor135: e1 + Location: 63,39 + Owner: Soviets + Actor209: e2 + Location: 65,40 + Owner: Soviets + Actor280: e1 + Location: 68,40 + Owner: Soviets + Actor292: e1 + Location: 76,44 + Owner: Soviets + Actor322: e2 + Location: 78,46 + Owner: Soviets + Actor323: e1 + Location: 46,44 + Owner: Soviets + Actor324: e3 + Location: 45,46 + Owner: Soviets + Actor325: e3 + Location: 66,39 + Owner: Soviets + Actor326: v2rl + Location: 61,37 + Owner: Soviets + Actor327: brl3 + Location: 79,47 + Owner: Allies + Actor328: barl + Location: 79,46 + Owner: Allies + Actor329: brl3 + Location: 87,45 + Owner: Allies + Actor330: barl + Location: 87,46 + Owner: Allies + Actor331: barl + Location: 88,45 + Owner: Allies + Actor332: oilb + Location: 74,53 + Owner: Allies + Actor333: fenc + Location: 73,55 + Owner: Allies + Actor334: fenc + Location: 74,55 + Owner: Allies + Actor335: fenc + Location: 75,55 + Owner: Allies + Actor336: fenc + Location: 75,52 + Owner: Allies + Actor337: fenc + Location: 76,52 + Owner: Allies + Actor338: fenc + Location: 74,52 + Owner: Allies + Actor339: brl3 + Location: 73,53 + Owner: Allies + Actor340: barl + Location: 73,52 + Owner: Allies + SubPen: spen + Location: 13,9 + Owner: Soviets + Actor297: brik + Location: 22,4 + Owner: Neutral + Actor341: brik + Location: 21,4 + Owner: Neutral + Actor342: brik + Location: 21,5 + Owner: Neutral + Actor343: brik + Location: 22,5 + Owner: Neutral + Actor346: t15 + Location: 57,24 + Owner: Neutral + Actor1000: camera.large + Location: 1,1 + Owner: Soviets + BadgerEntryPoint1: waypoint + Location: 1,54 + Owner: Neutral + BadgerEntryPoint2: waypoint + Location: 1,47 + Owner: Neutral + ParaDrop1: waypoint + Location: 54,51 + Owner: Neutral + ParaDrop2: waypoint + Location: 67,51 + Owner: Neutral + Alliesbase: waypoint + Location: 60,48 + Owner: Neutral + Alliesbase1: waypoint + Location: 66,45 + Owner: Neutral + Alliesbase2: waypoint + Location: 51,46 + Owner: Neutral + Alliesbase3: waypoint + Location: 72,45 + Owner: Neutral + AlliesEntryPoint: waypoint + Location: 60,59 + Owner: Neutral + AlliesBaseGate1: waypoint + Location: 64,33 + Owner: Neutral + AlliesBaseGate2: waypoint + Location: 42,42 + Owner: Neutral + SovietEntryPoint1: waypoint + Location: 4,31 + Owner: Neutral + SovietEntryPoint2: waypoint + Location: 4,21 + Owner: Neutral + SovietEntryPoint3: waypoint + Location: 37,4 + Owner: Neutral + SovietEntryPoint4: waypoint + Location: 65,4 + Owner: Neutral + SovietEntryPoint5: waypoint + Location: 91,19 + Owner: Neutral + SovietEntryPoint7: waypoint + Location: 91,43 + Owner: Neutral + SovietRallyPoint1: waypoint + Location: 23,39 + Owner: Neutral + SovietRallyPoint2: waypoint + Location: 23,21 + Owner: Neutral + SovietRallyPoint3: waypoint + Location: 37,13 + Owner: Neutral + SovietRallyPoint4: waypoint + Location: 65,13 + Owner: Neutral + SovietRallyPoint5: waypoint + Location: 80,19 + Owner: Neutral + SovietInfantryEntry1: waypoint + Location: 28,9 + Owner: Neutral + SovietInfantryRally1: waypoint + Location: 23,26 + Owner: Neutral + NavalEntryPoint: waypoint + Location: 4,59 + Owner: Neutral + NavalWaypoint1: waypoint + Location: 41,48 + Owner: Neutral + NavalWaypoint2: waypoint + Location: 26,54 + Owner: Neutral + NavalWaypoint3: waypoint + Location: 42,53 + Owner: Neutral + AirReinforcementsEntry1: waypoint + Location: 95,59 + Owner: Neutral + AirReinforcementsEntry2: waypoint + Location: 63,26 + Owner: Neutral + AirReinforcementsRally1: waypoint + Location: 88,63 + Owner: Neutral + AirReinforcementsRally2: waypoint + Location: 17,31 + Owner: Neutral + HiddenATEK: waypoint + Location: 58,61 + Owner: Neutral + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: survival01.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + ^Infantry: + MustBeDestroyed: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Tank: + MustBeDestroyed: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Vehicle: + MustBeDestroyed: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Wall: + Tooltip: + ShowOwnerRow: false + ^Husk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + CAMERA.sam: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + CAMERA.Large: + Inherits: CAMERA + RevealsShroud: + Range: 1000 + ARTY: + Parachutable: + KilledOnImpassableTerrain: false + ParachuteSequence: parach + AFLD.mission: + Inherits: AFLD + -AirstrikePower: + -ParatroopersPower: + -SupportPowerChargeBar: + RenderBuilding: + Image: AFLD + ATEK.mission: + Inherits: ATEK + GpsPower: + ChargeTime: 0 + Power: + Amount: 0 + -Selectable: + -TargetableBuilding: + -GivesBuildableArea: + -Huntable: + RenderBuilding: + Image: ATEK + GUN: + Valued: + Cost: 1000 + E7: + Buildable: + Prerequisites: ~disabled + SHOK: + Buildable: + Prerequisites: ~disabled + MIG: + Buildable: + Prerequisites: ~disabled + HELI: + Buildable: + Prerequisites: ~disabled + MSLO: + Buildable: + Prerequisites: ~disabled + GAP: + Buildable: + Prerequisites: ~disabled + SYRD: + Buildable: + Prerequisites: ~disabled + PDOX: + Buildable: + Prerequisites: ~disabled + AGUN: + Buildable: + Prerequisites: ~disabled + ATEK: + Buildable: + Prerequisites: ~disabled + 4TNK: + Buildable: + Prerequisites: ~disabled + MCV: + Buildable: + Prerequisites: ~disabled + MNLY.AP: + Buildable: + Prerequisites: ~disabled + MNLY.AT: + Buildable: + Prerequisites: ~disabled + TTNK: + Buildable: + Prerequisites: ~disabled + CTNK: + Buildable: + Prerequisites: ~disabled + DOME: + Buildable: + Prerequisites: ~disabled + BRIK: + Buildable: + Prerequisites: ~disabled + MRJ: + Buildable: + Prerequisites: ~disabled + MGG: + Buildable: + Prerequisites: ~disabled + STNK: + Buildable: + Prerequisites: ~disabled + QTNK: + Buildable: + Prerequisites: ~disabled + DTRK: + Buildable: + Prerequisites: ~disabled + +Sequences: + +VoxelSequences: + +Weapons: + +Voices: + +Notifications: + +Translations: diff --git a/mods/ra/maps/survival01/survival01.lua b/mods/ra/maps/survival01/survival01.lua new file mode 100644 index 0000000000..07baa6c804 --- /dev/null +++ b/mods/ra/maps/survival01/survival01.lua @@ -0,0 +1,395 @@ +Difficulty = "Medium" + +if Difficulty == "Easy" then + AttackAtFrameIncrement = DateTime.Seconds(22) + AttackAtFrameIncrementInf = DateTime.Seconds(16) + TimerTicks = DateTime.Minutes(15) + IncrementTurningPoint = TimerTicks / 2 + DamageModifier = 0.5 + LongBowReinforcements = { "heli", "heli" } + ParadropArtillery = true +elseif Difficulty == "Medium" then + AttackAtFrameIncrement = DateTime.Seconds(18) + AttackAtFrameIncrementInf = DateTime.Seconds(12) + TimerTicks = DateTime.Minutes(20) + IncrementTurningPoint = TimerTicks / 2 + MoreParas = true + DamageModifier = 0.75 + LongBowReinforcements = { "heli", "heli" } +else --Difficulty == "Hard" + AttackAtFrameIncrement = DateTime.Seconds(14) + AttackAtFrameIncrementInf = DateTime.Seconds(8) + TimerTicks = DateTime.Minutes(25) + IncrementTurningPoint = DateTime.Minutes(10) + MoreParas = true + AttackAtFrameNaval = DateTime.Minutes(3) + DateTime.Seconds(45) + SpawnNavalUnits = true + DamageModifier = 1 + LongBowReinforcements = { "heli" } +end + +AlliedArtilleryParadrops = { "arty", "arty", "arty" } +AlliedAirReinforcementsWaypoints = +{ + { AirReinforcementsEntry1.Location, AirReinforcementsEntry2.Location }, + { AirReinforcementsRally1.Location, AirReinforcementsRally2.Location } +} +FrenchReinforcements = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "1tnk", "arty", "arty", "arty", "jeep", "jeep" } + +SpawningSovietUnits = true +SpawningInfantry = true +AttackAtFrameInf = DateTime.Seconds(12) +AttackAtFrame = DateTime.Seconds(18) +SovietAttackGroupSize = 5 +SovietInfantryGroupSize = 7 +FactoryClearRange = 10 +ParadropTicks = DateTime.Seconds(30) +BadgerPassengers = { "e1", "e1", "e1", "e2", "e2" } +ParadropWaypoints = +{ + { BadgerEntryPoint1.Location, ParaDrop1.Location }, + { BadgerEntryPoint2.Location, ParaDrop2.Location }, + { BadgerEntryPoint1.Location, Alliesbase2.Location }, + { BadgerEntryPoint2.Location, Alliesbase1.Location } +} +NavalTransportPassengers = { "e1", "e1", "e2", "e4", "e4" } +NavalReinforcementsWaypoints = { NavalWaypoint1, NavalWaypoint2, NavalWaypoint2, NavalWaypoint3 } +Squad1 = { "e1", "e1" } +Squad2 = { "e2", "e2" } +SovietVehicles = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", "ftrk", "ftrk", "apc", "apc" } +SovietInfantry = { "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e4", "e4", "e3" } +SovietEntryPoints = { SovietEntryPoint1, SovietEntryPoint2, SovietEntryPoint3, SovietEntryPoint4, SovietEntryPoint5 } +SovietRallyPoints = { SovietRallyPoint1, SovietRallyPoint2, SovietRallyPoint3, SovietRallyPoint4, SovietRallyPoint5 } +SovietGateRallyPoints = { AlliesBaseGate2, AlliesBaseGate2, AlliesBaseGate1, AlliesBaseGate1, AlliesBaseGate1 } + +Airfields = { SovietAirfield1, SovietAirfield2, SovietAirfield3 } +SovietBuildings = { Barrack1, SubPen, RadarDome, AdvancedPowerPlant1, AdvancedPowerPlant2, AdvancedPowerPlant3, WarFactory, Refinery, Silo1, Silo2, FlameTower1, FlameTower2, FlameTower3, Sam3, Sam4 } + +IdleTrigger = function(units, dest) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function() + local bool = Utils.All(units, function(unit) return unit.IsIdle end) + if bool then + Utils.Do(units, function(unit) + if not unit.IsDead then + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() + if not unit.IsDead then + if dest then unit.AttackMove(dest, 3) end + Trigger.OnIdle(unit, unit.Hunt) + end + end) + end + end) + end + end) + Trigger.OnDamaged(unit, function() + Utils.Do(units, function(unit) + if not unit.IsDead then + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() + if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end + end) + end + end) + end) + end) +end + +Tick = function() + if KillObj and soviets.HasNoRequiredUnits() then + allies.MarkCompletedObjective(KillObj) + end + + if allies.HasNoRequiredUnits() then + soviets.MarkCompletedObjective(SovietObj) + end + + if soviets.Resources > soviets.ResourceCapacity / 2 then + soviets.Resources = soviets.ResourceCapacity / 2 + end + + if DateTime.Minutes(20) == TimerTicks - DateTime.GameTime then + Media.PlaySpeechNotification(allies, "TwentyMinutesRemaining") + elseif DateTime.Minutes(10) == TimerTicks - DateTime.GameTime then + Media.PlaySpeechNotification(allies, "TenMinutesRemaining") + elseif DateTime.Minutes(5) == TimerTicks - DateTime.GameTime then + Media.PlaySpeechNotification(allies, "WarningFiveMinutesRemaining") + InitTimer() + end +end + +SendSovietParadrops = function(table) + local plane = Actor.Create("badr", true, { Owner = soviets, Location = table[1] }) + Utils.Do(BadgerPassengers, function(type) + local unit = Actor.Create(type, false, { Owner = soviets }) + plane.LoadPassenger(unit) + Trigger.OnIdle(unit, unit.Hunt) + end) + plane.Paradrop(table[2]) +end + +SendSovietNavalReinforcements = function() + if SpawnNavalUnits then + local entry = NavalEntryPoint.Location + local units = Reinforcements.ReinforceWithTransport(soviets, "lst", NavalTransportPassengers, { entry, Utils.Random(NavalReinforcementsWaypoints).Location }, { entry })[2] + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, unit.Hunt) + end) + + local delay = Utils.RandomInteger(AttackAtFrameNaval, AttackAtFrameNaval + DateTime.Minutes(2)) + + Trigger.AfterDelay(delay, SendSovietNavalReinforcements) + end +end + +SpawnSovietInfantry = function() + local units = { } + for i = 0, SovietInfantryGroupSize - 1, 1 do + local type = Utils.Random(SovietInfantry) + units[i] = type + end + + soviets.Build(units, function(soldiers) + Trigger.AfterDelay(25, function() IdleTrigger(soldiers) end) + end) +end + +SpawnSovietUnits = function() + local units = { } + for i = 0, SovietAttackGroupSize - 1, 1 do + local type = Utils.Random(SovietVehicles) + units[i] = type + end + + local route = Utils.RandomInteger(1, #SovietEntryPoints + 1) + local attackers = Reinforcements.Reinforce(soviets, units, { SovietEntryPoints[route].Location, SovietRallyPoints[route].Location }) + Trigger.AfterDelay(25, function() + IdleTrigger(attackers, SovietGateRallyPoints[route].Location) + end) +end + +SendInfantryWave = function() + if SpawningInfantry then + SpawnSovietInfantry() + + if DateTime.GameTime < IncrementTurningPoint then + AttackAtFrameIncrementInf = AttackAtFrameIncrementInf + Utils.RandomInteger(DateTime.Seconds(2), DateTime.Seconds(3)) + elseif not (AttackAtFrameIncrementInf <= DateTime.Seconds(4)) then + AttackAtFrameIncrementInf = AttackAtFrameIncrementInf - Utils.RandomInteger(DateTime.Seconds(2), DateTime.Seconds(3)) + end + + Trigger.AfterDelay(AttackAtFrameInf + AttackAtFrameIncrementInf, SendInfantryWave) + end +end + +SendVehicleWave = function() + if SpawningSovietUnits then + SpawnSovietUnits() + + if DateTime.GameTime < IncrementTurningPoint then + AttackAtFrameIncrement = AttackAtFrameIncrement + Utils.RandomInteger(DateTime.Seconds(4), DateTime.Seconds(6)) + elseif not (AttackAtFrameIncrement <= DateTime.Seconds(4)) then + AttackAtFrameIncrement = AttackAtFrameIncrement - Utils.RandomInteger(DateTime.Seconds(4), DateTime.Seconds(6)) + end + + Trigger.AfterDelay(AttackAtFrame + AttackAtFrameIncrement, SendVehicleWave) + end +end + +InitTimer = function() + Trigger.AfterDelay(DateTime.Minutes(1), function() + Media.PlaySpeechNotification(allies, "WarningFourMinutesRemaining") + + Trigger.AfterDelay(ParadropTicks, function() + SendSovietParadrops(ParadropWaypoints[3]) + SendSovietParadrops(ParadropWaypoints[2]) + end) + Trigger.AfterDelay(ParadropTicks * 2, function() + SendSovietParadrops(ParadropWaypoints[4]) + SendSovietParadrops(ParadropWaypoints[1]) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(2), function() Media.PlaySpeechNotification(allies, "WarningThreeMinutesRemaining") end) + Trigger.AfterDelay(DateTime.Minutes(3), function() + Media.PlaySpeechNotification(allies, "WarningTwoMinutesRemaining") + + AttackAtFrameIncrement = DateTime.Seconds(4) + AttackAtFrameIncrementInf = DateTime.Seconds(4) + end) + + Trigger.AfterDelay(DateTime.Minutes(4), function() Media.PlaySpeechNotification(allies, "WarningOneMinuteRemaining") end) + Trigger.AfterDelay(DateTime.Minutes(4) + DateTime.Seconds(45), function() Media.PlaySpeechNotification(allies, "AlliedForcesApproaching") end) + Trigger.AfterDelay(DateTime.Minutes(5), TimerExpired) +end + +TimerExpired = function() + SpawningSovietUnits = false + SpawningInfantry = false + SpawnNavalUnits = false + + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, FrenchReinforcements, { SovietEntryPoint7.Location, Alliesbase.Location }) + + if DestroyObj then + KillObj = allies.AddPrimaryObjective("Take control of French reinforcements and\nkill all remaining soviet forces.") + else + DestroyObj = allies.AddPrimaryObjective("Take control of French reinforcements and\ndismantle the nearby Soviet base.") + end + + allies.MarkCompletedObjective(SurviveObj) + if not allies.IsObjectiveCompleted(KillSams) then + allies.MarkFailedObjective(KillSams) + end +end + +DropAlliedArtillery = function(table) + local plane = Actor.Create("badr", true, { Owner = allies, Location = table[1] }) + Utils.Do(AlliedArtilleryParadrops, function(type) + local unit = Actor.Create(type, false, { Owner = allies }) + plane.LoadPassenger(unit) + end) + plane.Paradrop(table[2]) +end + +SendLongBowReinforcements = function() + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, LongBowReinforcements, AlliedAirReinforcementsWaypoints[1]) + Reinforcements.Reinforce(allies, LongBowReinforcements, AlliedAirReinforcementsWaypoints[2]) + if ParadropArtillery then + DropAlliedArtillery({ Utils.Random(AlliedAirReinforcementsWaypoints)[1], Alliesbase.Location }) + end +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + SurviveObj = allies.AddPrimaryObjective("Enforce your position and hold-out the onslaught\nuntil reinforcements arrive.") + KillSams = allies.AddSecondaryObjective("Destroy the two SAM Sites before reinforcements\narrive.") + Media.DisplayMessage("The soviets are blocking our GPS. We need to investigate their new technology.") + CaptureAirfields = allies.AddSecondaryObjective("Capture and hold the soviet airbase\nin the north east.") + SovietObj = soviets.AddPrimaryObjective("Eliminate all Allied forces.") + + Trigger.OnObjectiveCompleted(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(allies, function() + Media.PlaySpeechNotification(allies, "Lose") + end) + Trigger.OnPlayerWon(allies, function() + Media.PlaySpeechNotification(allies, "Win") + Media.DisplayMessage("The French forces have survived and dismantled the soviet presence in the area!") + end) +end + +InitMission = function() + Camera.Position = Alliesbase.CenterPosition + camera1 = Actor.Create("camera.sam", true, { Owner = allies, Location = Sam1.Location }) + camera2 = Actor.Create("camera.sam", true, { Owner = allies, Location = Sam2.Location }) + Trigger.OnKilled(Sam1, function() + if camera1.IsInWorld then camera1.Destroy() end + end) + Trigger.OnKilled(Sam2, function() + if camera2.IsInWorld then camera2.Destroy() end + end) + Trigger.OnAllKilledOrCaptured({ Sam1, Sam2 }, function() + if not allies.IsObjectiveFailed(KillSams) then + allies.MarkCompletedObjective(KillSams) + SendLongBowReinforcements() + end + end) + + local count = 0 + Utils.Do(Airfields, function(field) + Trigger.OnCapture(field, function() + count = count + 1 + if count == #Airfields then + allies.MarkCompletedObjective(CaptureAirfields) + local atek = Actor.Create("atek.mission", true, { Owner = allies, Location = HiddenATEK.Location }) + Trigger.AfterDelay(DateTime.Seconds(5), atek.Destroy) + end + end) + Trigger.OnKilled(field, function() + allies.MarkFailedObjective(CaptureAirfields) + end) + end) + + Trigger.OnAllKilled(SovietBuildings, function() + if DestroyObj then + if not soviets.HasNoRequiredUnits() then + KillObj = allies.AddPrimaryObjective("Kill all remaining soviet forces.") + end + allies.MarkCompletedObjective(DestroyObj) + else + DestroyObj = allies.AddPrimaryObjective("Dismantle the nearby Soviet base.") + allies.MarkCompletedObjective(DestroyObj) + end + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end) +end + +SetupSoviets = function() + Barrack1.IsPrimaryBuilding = true + Barrack1.RallyPoint = SovietInfantryRally1.Location + Trigger.OnKilled(Barrack1, function() + SpawningInfantry = false + end) + Trigger.OnCapture(Barrack1, function() + SpawningInfantry = false + end) + + Trigger.AfterDelay(0, function() + local buildings = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(self) return self.Owner == soviets and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == soviets and building.Health < building.MaxHealth * DamageModifier then + building.StartBuildingRepairs() + end + end) + end) + end) + + Reinforcements.Reinforce(soviets, Squad1, { AlliesBaseGate1.Location, Alliesbase1.Location }) + Reinforcements.Reinforce(soviets, Squad2, { AlliesBaseGate2.Location, Alliesbase2.Location }) + + Trigger.AfterDelay(ParadropTicks, function() + SendSovietParadrops(ParadropWaypoints[1]) + SendSovietParadrops(ParadropWaypoints[2]) + end) + Trigger.AfterDelay(ParadropTicks * 2, function() + SendSovietParadrops(ParadropWaypoints[3]) + SendSovietParadrops(ParadropWaypoints[4]) + end) + + Trigger.AfterDelay(AttackAtFrame, SendVehicleWave) + Trigger.AfterDelay(AttackAtFrameInf, SendInfantryWave) + + if MoreParas then + local delay = Utils.RandomInteger(TimerTicks/3, TimerTicks*2/3) + Trigger.AfterDelay(delay, function() + SendSovietParadrops(ParadropWaypoints[Utils.RandomInteger(1,3)]) + SendSovietParadrops(ParadropWaypoints[Utils.RandomInteger(3,5)]) + end) + end + if SpawnNavalUnits then + Trigger.AfterDelay(AttackAtFrameNaval, SendSovietNavalReinforcements) + end +end + +WorldLoaded = function() + + allies = Player.GetPlayer("Allies") + soviets = Player.GetPlayer("Soviets") + + InitObjectives() + InitMission() + SetupSoviets() +end diff --git a/mods/ra/notifications.yaml b/mods/ra/notifications.yaml index 7f470e7a85..b96f0f2863 100644 --- a/mods/ra/notifications.yaml +++ b/mods/ra/notifications.yaml @@ -47,6 +47,7 @@ Speech: WarningFiveMinutesRemaining: 5minr ControlCenterDeactivated: cntlded1 OperationControlTerminated: opterm1 + MissionTimerInitialised: mtimein1 Sounds: Notifications: