diff --git a/mods/ra/maps/fall-of-greece-1-personal-war/map.bin b/mods/ra/maps/fall-of-greece-1-personal-war/map.bin new file mode 100644 index 0000000000..c000d4abb7 Binary files /dev/null and b/mods/ra/maps/fall-of-greece-1-personal-war/map.bin differ diff --git a/mods/ra/maps/fall-of-greece-1-personal-war/map.png b/mods/ra/maps/fall-of-greece-1-personal-war/map.png new file mode 100644 index 0000000000..29bfd56141 Binary files /dev/null and b/mods/ra/maps/fall-of-greece-1-personal-war/map.png differ diff --git a/mods/ra/maps/fall-of-greece-1-personal-war/map.yaml b/mods/ra/maps/fall-of-greece-1-personal-war/map.yaml new file mode 100644 index 0000000000..c79facdb0a --- /dev/null +++ b/mods/ra/maps/fall-of-greece-1-personal-war/map.yaml @@ -0,0 +1,1310 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Fall of Greece 1: Personal War + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 20,39,85,52 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: A0F08C + Allies: GreekCivilians, Allies + Enemies: USSR, BadGuy + PlayerReference@Allies: + Name: Allies + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: Greece + Enemies: USSR, BadGuy + PlayerReference@GreekCivilians: + Name: GreekCivilians + NonCombatant: True + Faction: allies + Allies: Greece + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Allies: BadGuy + Enemies: Greece, GreekCivilians, Allies + PlayerReference@BadGuy: + Name: BadGuy + Faction: soviet + Color: FF1400 + Allies: USSR + Enemies: Greece, GreekCivilians, Allies + +Actors: + Actor0: brik + Location: 97,44 + Owner: Greece + Actor1: brik + Location: 98,44 + Owner: Greece + Actor2: brik + Location: 101,44 + Owner: Greece + Actor3: brik + Location: 102,44 + Owner: Greece + Actor4: brik + Location: 97,45 + Owner: Greece + Actor5: brik + Location: 98,45 + Owner: Greece + Actor6: brik + Location: 99,45 + Owner: Greece + Actor7: brik + Location: 100,45 + Owner: Greece + Actor8: brik + Location: 101,45 + Owner: Greece + Actor9: brik + Location: 102,45 + Owner: Greece + Actor10: brik + Location: 82,49 + Owner: Greece + Actor11: brik + Location: 83,49 + Owner: Greece + Actor12: brik + Location: 86,49 + Owner: Greece + Actor13: brik + Location: 87,49 + Owner: Greece + Actor16: brik + Location: 82,50 + Owner: Greece + Actor17: brik + Location: 83,50 + Owner: Greece + Actor18: brik + Location: 84,50 + Owner: Greece + Actor19: brik + Location: 85,50 + Owner: Greece + Actor20: brik + Location: 86,50 + Owner: Greece + Actor21: brik + Location: 87,50 + Owner: Greece + Actor14: brik + Location: 27,50 + Owner: USSR + Actor15: brik + Location: 28,50 + Owner: USSR + Actor22: brik + Location: 27,51 + Owner: USSR + Actor23: brik + Location: 28,51 + Owner: USSR + Actor24: brik + Location: 28,52 + Owner: USSR + Actor25: brik + Location: 29,52 + Owner: USSR + Actor26: brik + Location: 30,52 + Owner: USSR + Actor27: brik + Location: 31,52 + Owner: USSR + Actor28: brik + Location: 32,52 + Owner: USSR + Actor29: brik + Location: 33,52 + Owner: USSR + Actor30: brik + Location: 34,52 + Owner: USSR + Actor31: brik + Location: 35,52 + Owner: USSR + Actor32: brik + Location: 36,52 + Owner: USSR + Actor33: brik + Location: 35,53 + Owner: USSR + Actor34: brik + Location: 36,53 + Owner: USSR + Actor35: brik + Location: 35,54 + Owner: USSR + Actor36: brik + Location: 36,54 + Owner: USSR + Actor37: brik + Location: 35,55 + Owner: USSR + Actor38: brik + Location: 36,55 + Owner: USSR + Actor39: brik + Location: 35,59 + Owner: USSR + Actor40: brik + Location: 36,59 + Owner: USSR + Actor41: brik + Location: 35,60 + Owner: USSR + Actor42: brik + Location: 36,60 + Owner: USSR + Actor43: brik + Location: 35,61 + Owner: USSR + Actor44: brik + Location: 36,61 + Owner: USSR + Actor45: brik + Location: 24,62 + Owner: USSR + Actor46: brik + Location: 25,62 + Owner: USSR + Actor47: brik + Location: 35,62 + Owner: USSR + Actor48: brik + Location: 36,62 + Owner: USSR + Actor49: brik + Location: 24,63 + Owner: USSR + Actor50: brik + Location: 25,63 + Owner: USSR + Actor51: brik + Location: 26,63 + Owner: USSR + Actor52: brik + Location: 27,63 + Owner: USSR + Actor53: brik + Location: 28,63 + Owner: USSR + Actor54: brik + Location: 29,63 + Owner: USSR + Actor55: brik + Location: 30,63 + Owner: USSR + Actor56: brik + Location: 31,63 + Owner: USSR + Actor57: brik + Location: 32,63 + Owner: USSR + Actor58: brik + Location: 33,63 + Owner: USSR + Actor59: brik + Location: 34,63 + Owner: USSR + Actor60: brik + Location: 35,63 + Owner: USSR + Actor61: brik + Location: 36,63 + Owner: USSR + Actor69: brik + Location: 40,83 + Owner: USSR + Actor70: brik + Location: 41,83 + Owner: USSR + Actor71: brik + Location: 41,84 + Owner: USSR + Actor72: brik + Location: 41,85 + Owner: USSR + Actor73: brik + Location: 41,86 + Owner: USSR + Actor74: brik + Location: 40,87 + Owner: USSR + Actor75: brik + Location: 41,87 + Owner: USSR + Actor62: wood + Location: 95,72 + Owner: GreekCivilians + Actor63: wood + Location: 90,73 + Owner: GreekCivilians + Actor64: wood + Location: 91,73 + Owner: GreekCivilians + Actor65: wood + Location: 92,73 + Owner: GreekCivilians + Actor66: wood + Location: 93,73 + Owner: GreekCivilians + Actor67: wood + Location: 94,73 + Owner: GreekCivilians + Actor68: wood + Location: 95,73 + Owner: GreekCivilians + Actor76: tc04 + Location: 26,38 + Owner: Neutral + Actor77: tc03 + Location: 20,39 + Owner: Neutral + Actor78: tc02 + Location: 32,45 + Owner: Neutral + Actor79: tc05 + Location: 87,59 + Owner: Neutral + Actor80: tc02 + Location: 87,70 + Owner: Neutral + Actor81: tc04 + Location: 100,45 + Owner: Neutral + Actor82: tc04 + Location: 88,54 + Owner: Neutral + Actor83: tc04 + Location: 58,46 + Owner: Neutral + Actor84: tc03 + Location: 55,43 + Owner: Neutral + Actor85: t16 + Location: 62,55 + Owner: Neutral + Actor86: tc04 + Location: 84,79 + Owner: Neutral + Actor87: tc01 + Location: 77,83 + Owner: Neutral + Actor88: t08 + Location: 68,85 + Owner: Neutral + Actor89: tc04 + Location: 72,52 + Owner: Neutral + Actor90: tc02 + Location: 88,81 + Owner: Neutral + Actor91: tc05 + Location: 100,88 + Owner: Neutral + Actor92: t16 + Location: 86,84 + Owner: Neutral + Actor93: tc02 + Location: 91,68 + Owner: Neutral + Actor94: tc04 + Location: 93,58 + Owner: Neutral + Actor95: tc01 + Location: 84,63 + Owner: Neutral + Actor96: t11 + Location: 100,81 + Owner: Neutral + Actor97: tc02 + Location: 89,74 + Owner: Neutral + Actor98: tc03 + Location: 92,86 + Owner: Neutral + Actor99: tc05 + Location: 96,51 + Owner: Neutral + Actor100: tc02 + Location: 91,62 + Owner: Neutral + Actor101: t16 + Location: 83,74 + Owner: Neutral + Actor102: t01 + Location: 97,60 + Owner: Neutral + Actor103: t05 + Location: 102,72 + Owner: Neutral + Actor104: t13 + Location: 101,63 + Owner: Neutral + Actor105: t01 + Location: 89,89 + Owner: Neutral + Actor106: t02 + Location: 93,78 + Owner: Neutral + Actor107: t10 + Location: 93,73 + Owner: Neutral + Actor108: t11 + Location: 93,65 + Owner: Neutral + Actor109: tc05 + Location: 79,54 + Owner: Neutral + Actor110: tc03 + Location: 81,77 + Owner: Neutral + Actor111: t01 + Location: 71,54 + Owner: Neutral + Actor112: tc02 + Location: 80,79 + Owner: Neutral + Actor113: tc01 + Location: 28,63 + Owner: Neutral + Actor114: tc02 + Location: 42,64 + Owner: Neutral + Actor115: t07 + Location: 43,65 + Owner: Neutral + Actor116: tc01 + Location: 43,61 + Owner: Neutral + Actor117: tc04 + Location: 20,48 + Owner: Neutral + Actor118: tc03 + Location: 42,40 + Owner: Neutral + Actor119: tc02 + Location: 41,56 + Owner: Neutral + Actor120: tc04 + Location: 77,38 + Owner: Neutral + Actor121: tc01 + Location: 85,38 + Owner: Neutral + Actor122: tc05 + Location: 63,86 + Owner: Neutral + Actor123: tc01 + Location: 67,82 + Owner: Neutral + Actor124: t15 + Location: 72,82 + Owner: Neutral + Actor125: tc02 + Location: 73,89 + Owner: Neutral + Actor126: tc02 + Location: 77,62 + Owner: Neutral + Actor127: tc05 + Location: 75,64 + Owner: Neutral + Actor128: t01 + Location: 76,55 + Owner: Neutral + Actor129: t02 + Location: 79,59 + Owner: Neutral + Actor130: t01 + Location: 91,71 + Owner: Neutral + Actor131: tc04 + Location: 64,38 + Owner: Neutral + Actor132: tc02 + Location: 60,41 + Owner: Neutral + Actor133: tc02 + Location: 34,50 + Owner: Neutral + Actor134: tc03 + Location: 44,49 + Owner: Neutral + Actor135: tc02 + Location: 71,72 + Owner: Neutral + Actor136: tc04 + Location: 55,72 + Owner: Neutral + Actor137: tc03 + Location: 78,68 + Owner: Neutral + Actor138: t16 + Location: 63,70 + Owner: Neutral + Actor139: t07 + Location: 76,51 + Owner: Neutral + Actor140: t15 + Location: 61,77 + Owner: Neutral + Actor141: t14 + Location: 63,81 + Owner: Neutral + Actor142: t15 + Location: 57,83 + Owner: Neutral + Actor143: tc05 + Location: 56,89 + Owner: Neutral + Actor144: tc01 + Location: 63,75 + Owner: Neutral + Actor145: tc05 + Location: 42,78 + Owner: Neutral + Actor146: tc04 + Location: 25,73 + Owner: Neutral + Actor147: tc01 + Location: 23,73 + Owner: Neutral + Actor148: tc05 + Location: 26,87 + Owner: Neutral + Actor149: tc02 + Location: 25,79 + Owner: Neutral + Actor150: tc03 + Location: 30,75 + Owner: Neutral + Actor151: tc04 + Location: 39,76 + Owner: Neutral + Actor152: t01 + Location: 24,63 + Owner: Neutral + Actor153: tc04 + Location: 30,89 + Owner: Neutral + Actor154: tc04 + Location: 59,80 + Owner: Neutral + Actor155: tc01 + Location: 55,77 + Owner: Neutral + Actor156: t16 + Location: 61,84 + Owner: Neutral + Actor391: flare + Location: 81,41 + Owner: Greece + Actor157: apwr + Location: 89,40 + Owner: Greece + Actor158: tent + Location: 89,43 + Owner: Greece + Actor159: pbox + Location: 88,50 + Owner: Greece + Actor160: pbox + Location: 96,45 + Owner: Greece + Actor161: gun + Location: 92,47 + Owner: Greece + Facing: 159 + Actor162: v19 + Location: 101,42 + Owner: Greece + Actor163: brl3 + Location: 102,41 + Owner: Greece + Actor164: brl3 + Location: 101,41 + Owner: Greece + Actor165: barl + Location: 100,40 + Owner: Greece + Actor166: brl3 + Location: 99,39 + Owner: Greece + Actor167: barl + Location: 98,39 + Owner: Greece + Actor168: v19 + Location: 97,39 + Owner: Greece + Actor169: brl3 + Location: 96,39 + Owner: Greece + Actor170: barl + Location: 95,40 + Owner: Greece + Actor171: barl + Location: 102,43 + Owner: Greece + Actor172: brl3 + Location: 100,44 + Owner: Greece + Actor173: brl3 + Location: 97,40 + Owner: Greece + Actor174: brl3 + Location: 98,40 + Owner: Greece + Actor175: barl + Location: 102,42 + Owner: Greece + Church: v01 + Location: 93,70 + Owner: GreekCivilians + Trig3House: v02 + Location: 97,67 + Owner: Neutral + Health: 51 + Trig4House: v09 + Location: 100,61 + Owner: Neutral + Health: 56 + Actor179: v10 + Location: 98,87 + Owner: GreekCivilians + Health: 37 + Actor180: v05 + Location: 88,84 + Owner: GreekCivilians + Health: 45 + Actor181: v04 + Location: 92,81 + Owner: GreekCivilians + Health: 41 + Actor182: v03 + Location: 99,80 + Owner: GreekCivilians + Health: 76 + Actor183: v07 + Location: 98,57 + Owner: GreekCivilians + Health: 33 + GuideHut: v09 + Location: 95,77 + Owner: GreekCivilians + Health: 78 + Actor185: v02 + Location: 100,84 + Owner: GreekCivilians + Health: 70 + Actor186: v19 + Location: 82,84 + Owner: Neutral + Actor187: brl3 + Location: 81,84 + Owner: USSR + Actor188: brl3 + Location: 83,84 + Owner: USSR + Actor189: barl + Location: 82,83 + Owner: USSR + Actor190: brl3 + Location: 83,85 + Owner: USSR + Actor191: barl + Location: 80,85 + Owner: USSR + Actor192: barl + Location: 81,85 + Owner: USSR + Actor193: brl3 + Location: 99,43 + Owner: Greece + Actor194: barl + Location: 98,43 + Owner: Greece + CivBarrel: barl + Location: 94,40 + Owner: Greece + Actor196: brl3 + Location: 101,43 + Owner: Greece + SovFact: fact + Location: 31,59 + Owner: USSR + SovPower1: apwr + Location: 27,60 + Owner: USSR + SovPower2: apwr + Location: 25,52 + Owner: USSR + SovRax: barr + Location: 32,53 + Owner: USSR + SovWarFactory: weap + Location: 28,53 + Owner: USSR + SovFlame1: ftur + Location: 27,59 + Owner: USSR + SovFlame2: ftur + Location: 27,55 + Owner: USSR + SovTesla: tsla + Location: 37,59 + Owner: USSR + Actor203: v19 + Location: 21,52 + Owner: USSR + Actor204: v19 + Location: 22,50 + Owner: USSR + Actor205: v19 + Location: 24,50 + Owner: USSR + Actor206: brl3 + Location: 25,50 + Owner: USSR + Actor207: barl + Location: 26,50 + Owner: USSR + Actor208: barl + Location: 24,51 + Owner: USSR + Actor209: brl3 + Location: 23,50 + Owner: USSR + Actor210: brl3 + Location: 21,51 + Owner: USSR + Actor211: barl + Location: 22,51 + Owner: USSR + Actor212: brl3 + Location: 20,52 + Owner: USSR + Actor213: barl + Location: 21,53 + Owner: USSR + Actor214: barl + Location: 20,54 + Owner: USSR + Actor215: barl + Location: 20,53 + Owner: USSR + Actor217: brl3 + Location: 26,51 + Owner: USSR + Actor218: apwr + Location: 80,46 + Owner: Greece + Actor219: dome + Location: 84,47 + Owner: Greece + BridgeBarrel1: brl3 + Location: 85,42 + Owner: Greece + Actor221: barl + Location: 85,41 + Owner: Greece + Actor222: v19 + Location: 68,57 + Owner: Neutral + Actor223: v19 + Location: 66,57 + Owner: Neutral + Actor224: brl3 + Location: 69,56 + Owner: USSR + Actor225: barl + Location: 67,57 + Owner: USSR + Actor226: barl + Location: 68,56 + Owner: USSR + Actor227: brl3 + Location: 69,58 + Owner: USSR + Actor228: barl + Location: 69,57 + Owner: USSR + Actor229: brl3 + Location: 66,56 + Owner: USSR + Actor230: barl + Location: 65,57 + Owner: USSR + Actor231: barl + Location: 64,57 + Owner: USSR + Actor232: brl3 + Location: 65,58 + Owner: USSR + Actor233: v02 + Location: 76,74 + Owner: Neutral + Health: 51 + Actor234: v03 + Location: 74,79 + Owner: Neutral + Health: 35 + Actor235: v04 + Location: 68,79 + Owner: Neutral + Actor236: v05 + Location: 70,76 + Owner: Neutral + Actor237: tsla + Location: 40,85 + Owner: BadGuy + Actor238: apwr + Location: 36,84 + Owner: BadGuy + Actor239: v19 + Location: 37,74 + Owner: Neutral + Actor240: v19 + Location: 35,74 + Owner: Neutral + BridgeBarrel2: brl3 + Location: 35,72 + Owner: USSR + Actor242: barl + Location: 36,72 + Owner: USSR + Actor243: brl3 + Location: 35,73 + Owner: USSR + Actor244: barl + Location: 37,73 + Owner: USSR + Actor245: brl3 + Location: 38,73 + Owner: USSR + Actor246: barl + Location: 34,73 + Owner: USSR + Actor247: brl3 + Location: 35,84 + Owner: USSR + Actor248: barl + Location: 35,85 + Owner: USSR + Actor249: brl3 + Location: 34,84 + Owner: USSR + Actor250: barl + Location: 34,83 + Owner: USSR + Actor251: brl3 + Location: 35,86 + Owner: USSR + Actor253: brl3 + Location: 23,78 + Owner: USSR + Actor254: barl + Location: 23,75 + Owner: USSR + Actor255: brl3 + Location: 23,76 + Owner: USSR + Actor256: barl + Location: 22,79 + Owner: USSR + Actor257: v19 + Location: 23,77 + Owner: Neutral + Actor258: brl3 + Location: 22,77 + Owner: USSR + Actor259: barl + Location: 22,75 + Owner: USSR + VillageMammoth: 4tnk + Location: 97,65 + Owner: USSR + Facing: 127 + Actor261: 4tnk + Location: 67,70 + Owner: BadGuy + Actor262: 4tnk + Location: 73,68 + Owner: USSR + Facing: 31 + BridgeMammoth1: 4tnk + Location: 37,67 + Owner: USSR + Facing: 95 + BridgeMammoth2: 4tnk + Location: 36,67 + Owner: USSR + Facing: 95 + HealCrateTruck: truk + Location: 21,66 + Owner: USSR + Facing: 127 + FlareBoy: e1 + Location: 75,87 + Owner: Greece + Facing: 95 + SubCell: 2 + Actor268: e1 + Location: 82,86 + Owner: USSR + Facing: 63 + SubCell: 3 + Actor269: e1 + Location: 82,88 + Owner: USSR + Facing: 63 + SubCell: 1 + Rifle1: e1 + Location: 88,87 + Owner: USSR + SubCell: 2 + Rifle2: e1 + Location: 89,86 + Owner: USSR + SubCell: 3 + Rifle3: e1 + Location: 89,88 + Owner: USSR + SubCell: 2 + Rifle4: e1 + Location: 90,86 + Owner: USSR + SubCell: 3 + Actor274: e4 + Location: 91,84 + Owner: USSR + SubCell: 3 + Actor275: e2 + Location: 89,89 + Owner: USSR + Facing: 95 + SubCell: 0 + Actor276: e1 + Location: 98,83 + Owner: USSR + SubCell: 4 + Actor277: e1 + Location: 96,86 + Owner: USSR + Facing: 159 + SubCell: 4 + Actor278: c3 + Location: 91,83 + Owner: GreekCivilians + SubCell: 0 + Actor279: c4 + Location: 98,85 + Owner: GreekCivilians + SubCell: 0 + Actor280: c5 + Location: 96,80 + Owner: GreekCivilians + SubCell: 4 + Actor281: c6 + Location: 92,80 + Owner: GreekCivilians + SubCell: 3 + Actor282: c7 + Location: 97,88 + Owner: GreekCivilians + SubCell: 3 + Actor283: c8 + Location: 94,82 + Owner: GreekCivilians + SubCell: 2 + Actor284: c9 + Location: 99,82 + Owner: GreekCivilians + SubCell: 2 + Gren1: e2 + Location: 95,65 + Owner: USSR + SubCell: 2 + Gren2: e2 + Location: 96,64 + Owner: USSR + SubCell: 4 + Gren3: e2 + Location: 98,64 + Owner: USSR + SubCell: 3 + Gren4: e2 + Location: 96,63 + Owner: USSR + SubCell: 4 + Gren5: e2 + Location: 98,63 + Owner: USSR + SubCell: 4 + TeamFive1: e1 + Location: 81,58 + Owner: USSR + SubCell: 0 + TeamFive2: e1 + Location: 83,59 + Owner: USSR + SubCell: 0 + TeamFive3: e2 + Location: 82,59 + Owner: USSR + SubCell: 1 + TeamFive4: e2 + Location: 82,60 + Owner: USSR + SubCell: 2 + TeamFive5: e2 + Location: 81,60 + Owner: USSR + SubCell: 0 + TeamFive6: e4 + Location: 82,60 + Owner: USSR + SubCell: 3 + TeamFive7: e4 + Location: 80,59 + Owner: USSR + SubCell: 2 + Actor299: e1 + Location: 38,60 + Owner: USSR + Facing: 95 + SubCell: 3 + Actor300: e1 + Location: 39,59 + Owner: USSR + Facing: 191 + SubCell: 4 + Actor301: e1 + Location: 41,60 + Owner: USSR + Facing: 127 + SubCell: 3 + Actor302: dog + Location: 95,84 + Owner: USSR + Facing: 95 + SubCell: 0 + SovBaseTeam1: e1 + Location: 33,56 + Owner: USSR + Facing: 159 + SubCell: 1 + SovBaseTeam2: e1 + Location: 32,55 + Owner: USSR + Facing: 63 + SubCell: 4 + SovBaseTeam3: e2 + Location: 33,55 + Owner: USSR + Facing: 191 + SubCell: 4 + SovBaseTeam4: dog + Location: 37,56 + Owner: USSR + Facing: 159 + SubCell: 3 + SovBaseTeam5: dog + Location: 37,58 + Owner: USSR + Facing: 95 + SubCell: 1 + SovBaseTeam6: 3tnk + Location: 35,57 + Owner: USSR + Facing: 159 + Actor306: e4 + Location: 38,59 + Owner: USSR + Facing: 159 + SubCell: 4 + Actor307: e2 + Location: 77,57 + Owner: USSR + Facing: 159 + SubCell: 4 + Actor308: e1 + Location: 78,59 + Owner: USSR + Facing: 159 + SubCell: 0 + Actor309: e2 + Location: 57,83 + Owner: USSR + SubCell: 4 + Actor310: e2 + Location: 60,80 + Owner: USSR + SubCell: 3 + Actor311: e2 + Location: 63,81 + Owner: USSR + SubCell: 4 + Actor312: e1 + Location: 61,84 + Owner: USSR + SubCell: 4 + Actor313: e1 + Location: 61,77 + Owner: USSR + SubCell: 4 + Actor314: e1 + Location: 55,77 + Owner: USSR + SubCell: 4 + Actor315: e2 + Location: 56,77 + Owner: USSR + SubCell: 3 + Actor316: e1 + Location: 25,83 + Owner: USSR + Facing: 191 + SubCell: 3 + Actor317: e1 + Location: 24,84 + Owner: USSR + Facing: 223 + SubCell: 0 + Actor318: e1 + Location: 25,85 + Owner: USSR + Facing: 159 + SubCell: 1 + Actor319: dog + Location: 25,84 + Owner: USSR + Facing: 159 + SubCell: 0 + Actor320: e1 + Location: 37,75 + Owner: USSR + Facing: 159 + SubCell: 4 + Actor321: e1 + Location: 35,75 + Owner: USSR + Facing: 95 + SubCell: 3 + Actor322: e2 + Location: 36,74 + Owner: USSR + Facing: 223 + SubCell: 4 + Sub1: ss + Location: 53,60 + Owner: USSR + Facing: 223 + Sub2: ss + Location: 51,57 + Owner: USSR + Facing: 191 + Sub3: ss + Location: 51,53 + Owner: USSR + Facing: 159 + Sub4: ss + Location: 56,51 + Owner: USSR + Facing: 159 + Actor380: v03 + Owner: Neutral + Location: 59,43 + Actor381: v02 + Owner: Neutral + Location: 63,44 + Actor382: v16 + Owner: Neutral + Location: 62,42 + Actor383: v16 + Owner: Neutral + Location: 63,42 + Actor384: v19 + Owner: Neutral + Location: 61,47 + Actor385: v19 + Owner: Neutral + Location: 62,47 + Actor386: lhus + Owner: Neutral + Location: 57,46 + Actor408: healcrate + Owner: Neutral + Location: 88,44 + Actor409: healcrate + Owner: Neutral + Location: 55,90 + LightFlare: waypoint + Location: 72,87 + Owner: Neutral + InsertionPoint: waypoint + Location: 71,86 + Owner: Neutral + FlareBoyAttack: waypoint + Location: 89,87 + Owner: Neutral + Trigger1Cam: waypoint + Location: 82,87 + Owner: Neutral + Trigger1Move: waypoint + Location: 83,86 + Owner: Neutral + DoomedHeli: waypoint + Location: 83,41 + Owner: Neutral + VillageParadrop: waypoint + Location: 94,88 + Owner: Neutral + GrenEntry: waypoint + Location: 104,78 + Owner: Neutral + ChurchSpawn: waypoint + Location: 93,71 + Owner: Neutral + GuideSpawn: waypoint + Location: 95,77 + Owner: Neutral + SafePath1: waypoint + Location: 85,76 + Owner: Neutral + SafePath2: waypoint + Location: 85,65 + Owner: Neutral + Trigger3Cam: waypoint + Location: 97,64 + Owner: Neutral + CivFlee1: waypoint + Location: 100,61 + Owner: Neutral + CivFlee2: waypoint + Location: 99,57 + Owner: Neutral + CivilianRally: waypoint + Location: 97,41 + Owner: Neutral + Tent: waypoint + Location: 90,44 + Owner: Neutral + TentMove: waypoint + Location: 91,46 + Owner: Neutral + SovietAttack: waypoint + Location: 97,50 + Owner: Neutral + BaseAttackersSpawn: waypoint + Location: 96,90 + Owner: Neutral + DoomedHeliEntry: waypoint + Location: 78,39 + Owner: Neutral + TacticalNuke1: waypoint + Owner: Neutral + Location: 92,43 + TacticalNuke2: waypoint + Owner: Neutral + Location: 84,44 + BoatSpawn: waypoint + Location: 49,39 + Owner: Neutral + BoatUnload1: waypoint + Location: 59,59 + Owner: Neutral + MammothCam: waypoint + Location: 70,70 + Owner: Neutral + House1: waypoint + Location: 70,76 + Owner: Neutral + House2: waypoint + Location: 68,80 + Owner: Neutral + House3: waypoint + Location: 74,79 + Owner: Neutral + House4: waypoint + Location: 76,75 + Owner: Neutral + TacticalNuke3: waypoint + Location: 72,78 + Owner: Neutral + TeslaCam: waypoint + Location: 39,85 + Owner: Neutral + TeslaDrop: waypoint + Location: 43,85 + Owner: Neutral + BridgeCam: waypoint + Location: 35,69 + Owner: Neutral + MammysGo: waypoint + Location: 31,74 + Owner: Neutral + TruckCam: waypoint + Location: 21,76 + Owner: Neutral + TruckGo: waypoint + Location: 20,84 + Owner: Neutral + SovBaseCam: waypoint + Location: 35,57 + Owner: Neutral + SovBaseDrop: waypoint + Location: 29,57 + Owner: Neutral + SovRaxSpawn: waypoint + Location: 33,54 + Owner: Neutral + BoatUnload2: waypoint + Location: 43,47 + Owner: Neutral + ExtractionPoint: waypoint + Location: 26,44 + Owner: Neutral + ChinookEntry: waypoint + Owner: Neutral + Location: 22,39 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ra/maps/fall-of-greece-1-personal-war/personal-war.lua b/mods/ra/maps/fall-of-greece-1-personal-war/personal-war.lua new file mode 100644 index 0000000000..d86231f036 --- /dev/null +++ b/mods/ra/maps/fall-of-greece-1-personal-war/personal-war.lua @@ -0,0 +1,534 @@ +--[[ + Copyright 2007-2020 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. +]] +FootprintTrigger1 = { CPos.New(77, 85), CPos.New(77, 86), CPos.New(77, 87), CPos.New(77, 88) } +Trigger1Rifles = { Rifle1, Rifle2, Rifle3, Rifle4 } +DoomedHeliPath = { DoomedHeliEntry.Location, DoomedHeli.Location } +FootprintTrigger2 = { CPos.New(90, 82), CPos.New(91, 82), CPos.New(93, 82), CPos.New(94, 82), CPos.New(95, 82), CPos.New(96, 82), CPos.New(97, 82), CPos.New(98, 82), CPos.New(99, 82), CPos.New(102, 82) } +Grenadiers = { "e2", "e2", "e2", "e2", "e2" } +FootprintTrigger3 = { CPos.New(88, 77), CPos.New(88, 76), CPos.New(91, 75), CPos.New(92, 75), CPos.New(93, 75), CPos.New(94, 75), CPos.New(95, 75), CPos.New(96, 75), CPos.New(97, 75), CPos.New(98, 75), CPos.New(99, 75), CPos.New(100, 75) } +Trigger3Team = { Gren1, Gren2, Gren3, Gren4, Gren5, VillageMammoth } +FootprintTrigger4 = { CPos.New(94, 60), CPos.New(95, 60), CPos.New(96, 60), CPos.New(97, 60), CPos.New(98, 60), CPos.New(99, 60), CPos.New(100, 60), CPos.New(101, 60), CPos.New(102, 60), CPos.New(103, 60), CPos.New(104, 60) } +CivilianSquad1 = { "c1", "c2", "c3", "c4", "c5" } +CivilianSquad2 = { "c6", "c7", "c8", "c9", "c10" } +FootprintTrigger5 = { CPos.New(99, 53), CPos.New(100, 53), CPos.New(101, 53), CPos.New(102, 53), CPos.New(103, 53), CPos.New(104, 53) } +Trigger5Team = { TeamFive1, TeamFive2, TeamFive3, TeamFive4, TeamFive5, TeamFive6, TeamFive7 } +TentTeam = { "e1", "e1", "e1", "e1", "e3", "e3" } +Doggos = { "dog", "dog", "dog" } +SovietAttackers = { "3tnk", "e2", "e2", "e2", "v2rl" } +MigEntryPath = { BaseAttackersSpawn, GuideSpawn } +FootprintTrigger6 = { CPos.New(81, 57), CPos.New(81, 58), CPos.New(81, 59), CPos.New(81, 60), CPos.New(81, 61) } +FootprintTrigger7 = { CPos.New(73, 58), CPos.New(73, 59), CPos.New(73, 60), CPos.New(73, 61) } +FootprintTrigger8 = { CPos.New(51, 83), CPos.New(51, 84), CPos.New(51, 85), CPos.New(51, 86), CPos.New(51, 87), CPos.New(51, 88) } +FootprintTrigger9 = { CPos.New(28, 77), CPos.New(29, 77), CPos.New(30, 77), CPos.New(31, 77), CPos.New(32, 77), CPos.New(33, 77), CPos.New(34, 77), CPos.New(35, 77), CPos.New(36, 77), CPos.New(37, 77), CPos.New(38, 77) } +BridgeMammoths = { BridgeMammoth1, BridgeMammoth2 } +FootprintTrigger10 = { CPos.New(24, 83), CPos.New(24, 84), CPos.New(24, 85) } +FootprintTrigger11 = { CPos.New(20, 65), CPos.New(21, 65), CPos.New(22, 65) } +SovBase = { SovFact, SovPower1, SovPower2, SovRax, SovWarFactory, SovFlame1, SovFlame2, SovTesla } +SovBaseTeam = { SovBaseTeam1, SovBaseTeam2, SovBaseTeam3, SovBaseTeam4, SovBaseTeam5, SovBaseTeam6 } +RaxTeam = { "e1", "e2", "e2", "e4", "e4", "shok" } +FootprintTrigger12 = { CPos.New(35, 39), CPos.New(35, 40), CPos.New(35, 41), CPos.New(35, 42) } +ExtractionHelicopterType = "tran" +ExtractionPath = { ChinookEntry.Location, ExtractionPoint.Location } + +lstReinforcements = +{ + first = + { + actors = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk" }, + entryPath = { BoatSpawn.Location, BoatUnload1.Location }, + exitPath = { BoatSpawn.Location } + }, + second = + { + actors = { "1tnk", "1tnk", "2tnk", "2tnk", "2tnk" }, + entryPath = { BoatSpawn.Location, BoatUnload2.Location }, + exitPath = { BoatSpawn.Location } + } +} + +IdleHunt = function(actor) if not actor.IsDead then Trigger.OnIdle(actor, actor.Hunt) end end + +VIPs = { } +MissionStart = function() + FlareBoy.Move(LightFlare.Location) + + Trigger.OnEnteredFootprint({ LightFlare.Location }, function(actor, id) + if actor.Owner == Greece then + Trigger.RemoveFootprintTrigger(id) + local insertionFlare = Actor.Create("flare", true, { Owner = Allies, Location = LightFlare.Location }) + Trigger.AfterDelay(DateTime.Seconds(2), function() + FlareBoy.AttackMove(FlareBoyAttack.Location) + if Map.LobbyOption("difficulty") == "normal" then + local normalDrop = InsertionDrop.TargetParatroopers(InsertionPoint.CenterPosition, Angle.New(892)) + Utils.Do(normalDrop, function(a) + Trigger.OnPassengerExited(a, function(t,p) + VIPs[#VIPs + 1] = p + FailTrigger() + end) + end) + else + local hardDrop = InsertionDropHard.TargetParatroopers(InsertionPoint.CenterPosition, Angle.New(892)) + Utils.Do(hardDrop, function(a) + Trigger.OnPassengerExited(a, function(t,p) + VIPs[#VIPs + 1] = p + FailTrigger() + end) + end) + Trigger.AfterDelay(DateTime.Seconds(6), function() + Media.DisplayMessage("Commander, there are several civilians in the area.\nWe'll need you to call out targets.", "Tanya") + end) + end + end) + + Trigger.AfterDelay(DateTime.Seconds(20), function() + insertionFlare.Destroy() + end) + end + end) +end + +FailTrigger = function() + Trigger.OnAnyKilled(VIPs, function() + Allies.MarkFailedObjective(ProtectVIPs) + end) +end + +FootprintTriggers = function() + local foot1Triggered + Trigger.OnEnteredFootprint(FootprintTrigger1, function(actor, id) + if actor.Owner == Allies and not foot1Triggered then + Trigger.RemoveFootprintTrigger(id) + foot1Triggered = true + + local trig1cam = Actor.Create("camera", true, { Owner = Allies, Location = Trigger1Cam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + trig1cam.Destroy() + end) + + Utils.Do(Trigger1Rifles, function(actor) + if not actor.IsDead then + actor.AttackMove(Trigger1Move.Location) + end + end) + + DoomedHeli = Reinforcements.ReinforceWithTransport(Greece, ExtractionHelicopterType, nil, DoomedHeliPath)[1] + end + end) + + local foot2Triggered + Trigger.OnEnteredFootprint(FootprintTrigger2, function(actor, id) + if actor.Owner == Allies and not foot2Triggered then + Trigger.RemoveFootprintTrigger(id) + foot2Triggered = true + + local drop1 = RifleDropS.TargetParatroopers(VillageParadrop.CenterPosition, Angle.SouthWest) + Utils.Do(drop1, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + + local grens = Reinforcements.Reinforce(USSR, Grenadiers, { GrenEntry.Location }, 0) + Utils.Do(grens, IdleHunt) + end + end) + + local foot3Triggered + Trigger.OnEnteredFootprint(FootprintTrigger3, function(actor, id) + if actor.Owner == Allies and not foot3Triggered then + Trigger.RemoveFootprintTrigger(id) + foot3Triggered = true + + Trig3House.Owner = Civilians + local camera3 = Actor.Create("camera", true, { Owner = Allies, Location = Trigger3Cam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + camera3.Destroy() + end) + + if not GuideHut.IsDead then + local guide = Actor.Create("c6", true, { Owner = Greece, Location = GuideSpawn.Location }) + guide.Move(SafePath1.Location) + guide.Move(SafePath2.Location) + guide.Move(CivilianRally.Location) + end + + Utils.Do(Trigger3Team, function(actor) + if not actor.IsDead then + actor.AttackMove(GuideSpawn.Location) + IdleHunt(actor) + end + end) + end + end) + + local foot4Triggered + Trigger.OnEnteredFootprint(FootprintTrigger4, function(actor, id) + if actor.Owner == Allies and not foot4Triggered then + Trigger.RemoveFootprintTrigger(id) + foot4Triggered = true + + Trig4House.Owner = Civilians + Reinforcements.Reinforce(Greece, CivilianSquad1, { CivFlee1.Location, CivilianRally.Location }, 0) + Reinforcements.Reinforce(Greece, CivilianSquad2, { CivFlee2.Location, CivilianRally.Location }, 0) + end + end) + + local foot5Triggered + Trigger.OnEnteredFootprint(FootprintTrigger5, function(actor, id) + if actor.Owner == Allies and not foot5Triggered then + Trigger.RemoveFootprintTrigger(id) + foot5Triggered = true + + Media.PlaySoundNotification(Allies, "AlertBleep") + Media.DisplayMessage("Alfa Niner this is Lima One Six. Be advised, Soviet aircraft and armor moving into your AO.", "Headquarters") + Utils.Do(Trigger5Team, function(actor) + if not actor.IsDead then + actor.AttackMove(TacticalNuke1.Location) + end + end) + + SendMig(MigEntryPath) + local barrelcam1 = Actor.Create("camera", true, { Owner = USSR, Location = TacticalNuke1.Location }) + local barrelcam2 = Actor.Create("camera", true, { Owner = USSR, Location = TacticalNuke2.Location }) + local wave1 = Reinforcements.Reinforce(USSR, SovietAttackers, { BaseAttackersSpawn.Location, SovietAttack.Location }) + Utils.Do(wave1, IdleHunt) + local drop2 = RifleDropS.TargetParatroopers(SovietAttack.CenterPosition, Angle.East) + Utils.Do(drop2, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(20), function() + Media.PlaySoundNotification(Allies, "AlertBuzzer") + Media.DisplayMessage("Extraction point is compromised. Evacuate the base!", "Headquarters") + local defenders = Reinforcements.Reinforce(Greece, TentTeam, { Tent.Location, TentMove.Location }, 0) + Utils.Do(defenders, IdleHunt) + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Seconds(30), function() + local wave2 = Reinforcements.Reinforce(USSR, SovietAttackers, { BaseAttackersSpawn.Location, SovietAttack.Location }) + Utils.Do(wave2, IdleHunt) + end) + end + end) + + Trigger.AfterDelay(DateTime.Seconds(35), function() + local dogs = Reinforcements.Reinforce(USSR, Doggos, { GrenEntry.Location }, 0) + Utils.Do(dogs, IdleHunt) + Media.PlaySpeechNotification(Allies, "AbombLaunchDetected") + local proxy = Actor.Create("powerproxy.parabombs", false, { Owner = USSR }) + proxy.TargetAirstrike(TacticalNuke1.CenterPosition, Angle.NorthWest) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Media.PlaySpeechNotification(Allies, "AbombLaunchDetected") + proxy.TargetAirstrike(TacticalNuke2.CenterPosition, Angle.NorthWest) + end) + proxy.Destroy() + end) + + Trigger.AfterDelay(DateTime.Seconds(50), function() + Media.DisplayMessage("We've set up a new extraction point to the Northwest.", "Headquarters") + end) + end + end) + + local foot6Triggered + Trigger.OnEnteredFootprint(FootprintTrigger6, function(actor, id) + if actor.Owner == Allies and not foot6Triggered then + Trigger.RemoveFootprintTrigger(id) + foot6Triggered = true + + local reinforcement = lstReinforcements.first + Media.PlaySpeechNotification(Allies, "ReinforcementsArrived") + Reinforcements.ReinforceWithTransport(Allies, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) + end + end) + + local foot7Triggered + Trigger.OnEnteredFootprint(FootprintTrigger7, function(actor, id) + if actor.Owner == Allies and not foot7Triggered then + Trigger.RemoveFootprintTrigger(id) + foot7Triggered = true + + local drop3 = RifleDropS.TargetParatroopers(TacticalNuke3.CenterPosition, Angle.West) + Utils.Do(drop3, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + + local trig7camera1 = Actor.Create("camera", true, { Owner = Allies, Location = MammothCam.Location }) + local trig7camera2 = Actor.Create("camera", true, { Owner = Allies, Location = TacticalNuke3.Location }) + Trigger.AfterDelay(DateTime.Seconds(30), function() + trig7camera1.Destroy() + end) + + Trigger.AfterDelay(DateTime.Seconds(20), function() + Media.PlaySpeechNotification(Allies, "AbombLaunchDetected") + local proxy = Actor.Create("powerproxy.parabombs", false, { Owner = USSR }) + proxy.TargetAirstrike(TacticalNuke3.CenterPosition, Angle.SouthWest) + proxy.Destroy() + end) + + Trigger.AfterDelay(DateTime.Seconds(26), function() + Reinforcements.Reinforce(Greece, CivilianSquad1, { House1.Location, TacticalNuke3.Location }, 0) + Reinforcements.Reinforce(Greece, CivilianSquad2, { House2.Location, TacticalNuke3.Location }, 0) + Reinforcements.Reinforce(Greece, CivilianSquad1, { House3.Location, TacticalNuke3.Location }, 0) + Reinforcements.Reinforce(Greece, CivilianSquad2, { House4.Location, TacticalNuke3.Location }, 0) + end) + + Trigger.AfterDelay(DateTime.Seconds(15), function() + trig7camera2.Destroy() + end) + end + end) + + local foot8Triggered + Trigger.OnEnteredFootprint(FootprintTrigger8, function(actor, id) + if actor.Owner == Allies and not foot8Triggered then + Trigger.RemoveFootprintTrigger(id) + foot8Triggered = true + + local trig8camera = Actor.Create("camera", true, { Owner = Allies, Location = TeslaCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + trig8camera.Destroy() + end) + + Media.PlaySpeechNotification(Allies, "ReinforcementsArrived") + RifleDropA.TargetParatroopers(TeslaDrop.CenterPosition, Angle.New(124)) + end + end) + + local foot9Triggered + Trigger.OnEnteredFootprint(FootprintTrigger9, function(actor, id) + if actor.Owner == Allies and not foot9Triggered then + Trigger.RemoveFootprintTrigger(id) + foot9Triggered = true + + local trig9camera = Actor.Create("camera", true, { Owner = Allies, Location = BridgeCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + trig9camera.Destroy() + end) + + Utils.Do(BridgeMammoths, function(actor) + actor.AttackMove(MammysGo.Location) + end) + end + end) + + local foot10Triggered + Trigger.OnEnteredFootprint(FootprintTrigger10, function(actor, id) + if actor.Owner == Allies and not foot10Triggered then + Trigger.RemoveFootprintTrigger(id) + foot10Triggered = true + + local trig10camera = Actor.Create("camera", true, { Owner = Allies, Location = TruckCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + trig10camera.Destroy() + end) + + Media.PlaySpeechNotification(Allies, "SignalFlareNorth") + Actor.Create("camera", true, { Owner = Allies, Location = ExtractionPoint.Location }) + SendExtractionHelicopter() + + HealCrateTruck.Move(TruckGo.Location) + end + end) + + local foot11Triggered + Trigger.OnEnteredFootprint(FootprintTrigger11, function(actor, id) + if actor.Owner == Allies and not foot11Triggered then + Trigger.RemoveFootprintTrigger(id) + foot11Triggered = true + + local trig11camera = Actor.Create("camera", true, { Owner = Allies, Location = SovBaseCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + trig11camera.Destroy() + end) + + local reinforcement = lstReinforcements.second + Media.PlaySpeechNotification(Allies, "ReinforcementsArrived") + Reinforcements.ReinforceWithTransport(Allies, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) + end + end) + + local foot12Triggered + Trigger.OnEnteredFootprint(FootprintTrigger12, function(actor, id) + if (actor.Type == "gnrl" or actor.Type == "gnrl.noautotarget") and not foot12Triggered then + Trigger.RemoveFootprintTrigger(id) + foot12Triggered = true + + Media.PlaySoundNotification(Allies, "AlertBleep") + Media.DisplayMessage("Stalin will pay for what he has done today!\nI will bury him with my own hands!", "Stavros") + end + end) +end + +SetupTriggers = function() + Utils.Do(USSR.GetGroundAttackers(), function(unit) + Trigger.OnDamaged(unit, function() IdleHunt(unit) end) + end) + + Trigger.OnKilled(BridgeBarrel1, function() + local bridge = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge2" end)[1] + if not bridge.IsDead then + bridge.Kill() + end + end) + + Trigger.OnKilled(BridgeBarrel2, function() + local bridgepart1 = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "br2" end)[1] + local bridgepart2 = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "br3" end)[1] + if not bridgepart1.IsDead then + bridgepart1.Kill() + end + if not bridgepart2.IsDead then + bridgepart2.Kill() + end + end) + + local trukEscaped + Trigger.OnEnteredFootprint({ TruckGo.Location }, function(actor, id) + if actor.Type == "truk" and not trukEscaped then + Trigger.RemoveFootprintTrigger(id) + trukEscaped = true + actor.Destroy() + end + end) +end + +ChurchAttack = function() + if not ChurchDamaged then + local churchPanicTeam = Reinforcements.Reinforce(Greece, CivilianSquad1, { ChurchSpawn.Location }, 0) + Utils.Do(churchPanicTeam, function(a) + a.Move(a.Location + CVec.New(-1,-1)) + a.Panic() + end) + end + ChurchDamaged = true +end + +SendMig = function(waypoints) + local MigEntryPath = { waypoints[1].Location, waypoints[2].Location } + local Mig1 = Reinforcements.Reinforce(USSR, { "mig" }, MigEntryPath) + if not BridgeBarrel1.IsDead then + Utils.Do(Mig1, function(mig) + mig.Attack(BridgeBarrel1) + end) + end + + Trigger.AfterDelay(DateTime.Seconds(5), function() + local Mig2 = Reinforcements.Reinforce(USSR, { "mig" }, MigEntryPath) + local Mig3 = Reinforcements.Reinforce(USSR, { "mig" }, MigEntryPath) + if not CivBarrel.IsDead then + Utils.Do(Mig2, function(mig) + mig.Attack(CivBarrel) + end) + end + if not DoomedHeli.IsDead then + Utils.Do(Mig3, function(mig) + mig.Attack(DoomedHeli) + end) + end + end) +end + +SovBaseAttack = function() + if not BaseDamaged then + local drop4 = RifleDropS.TargetParatroopers(SovBaseDrop.CenterPosition, Angle.East) + Utils.Do(drop4, function(a) + Trigger.OnPassengerExited(a, function(t, p) + IdleHunt(p) + end) + end) + + Utils.Do(SovBaseTeam, function(actor) + if not actor.IsDead then + IdleHunt(actor) + end + end) + + if Map.LobbyOption("difficulty") == "hard" then + local barracksTeam = Reinforcements.Reinforce(USSR, RaxTeam, { SovRaxSpawn.Location, SovBaseCam.Location }, 0) + Utils.Do(barracksTeam, IdleHunt) + end + end + BaseDamaged = true +end + +ExtractUnits = function(extractionUnit, pos, after) + if extractionUnit.IsDead or not extractionUnit.HasPassengers then + return + end + + extractionUnit.Move(pos) + extractionUnit.Destroy() + + Trigger.OnRemovedFromWorld(extractionUnit, after) +end + +SendExtractionHelicopter = function() + ExtractionHeli = Reinforcements.ReinforceWithTransport(Allies, ExtractionHelicopterType, nil, ExtractionPath)[1] + local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y) + + Trigger.OnKilled(ExtractionHeli, function() USSR.MarkCompletedObjective(SovietObj) end) + Trigger.OnAllRemovedFromWorld(VIPs, function() + ExtractUnits(ExtractionHeli, exitPos, function() + Allies.MarkCompletedObjective(ProtectVIPs) + Allies.MarkCompletedObjective(ExtractStavros) + end) + end) +end + +WorldLoaded = function() + Allies = Player.GetPlayer("Allies") + USSR = Player.GetPlayer("USSR") + BadGuy = Player.GetPlayer("BadGuy") + Greece = Player.GetPlayer("Greece") + Civilians = Player.GetPlayer("GreekCivilians") + + Trigger.OnObjectiveAdded(Allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + SovietObj = USSR.AddObjective("Kill Stavros.") + ProtectVIPs = Allies.AddObjective("Keep Stavros and Tanya alive.") + ExtractStavros = Allies.AddObjective("Get Stavros and Tanya to the extraction helicopter.") + + 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") + end) + + InsertionDrop = Actor.Create("insertiondrop", false, { Owner = Allies }) + InsertionDropHard = Actor.Create("insertiondrophard", false, { Owner = Allies }) + RifleDropA = Actor.Create("rifledrop", false, { Owner = Allies }) + RifleDropS = Actor.Create("rifledrop", false, { Owner = USSR }) + Camera.Position = LightFlare.CenterPosition + + MissionStart() + FootprintTriggers() + SetupTriggers() + Trigger.OnDamaged(Church, ChurchAttack) + OnAnyDamaged(SovBase, SovBaseAttack) +end + +OnAnyDamaged = function(actors, func) + Utils.Do(actors, function(actor) + Trigger.OnDamaged(actor, func) + end) +end diff --git a/mods/ra/maps/fall-of-greece-1-personal-war/rules.yaml b/mods/ra/maps/fall-of-greece-1-personal-war/rules.yaml new file mode 100644 index 0000000000..1bd4e5eeb7 --- /dev/null +++ b/mods/ra/maps/fall-of-greece-1-personal-war/rules.yaml @@ -0,0 +1,98 @@ +World: + LuaScript: + Scripts: personal-war.lua + MissionData: + WinVideo: toofar.vqa + LossVideo: bmap.vqa + Briefing: With the fighting fast approaching Athens, Stavros has insisted that he be allowed to survey the damage in his own hometown in Greece.\n\nYou must escort Stavros through the town and to a nearby friendly outpost. Once you reach it, evacuate Stavros to safety.\n\nIf anything should happen, get Stavros to safety any way possible. He must be kept alive. + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + normal: Normal + hard: Hard + Default: normal + +INSERTIONDROP: + ParatroopersPower: + DisplayBeacon: False + DropItems: E7, GNRL + AlwaysVisible: + +INSERTIONDROPHARD: + ParatroopersPower: + DisplayBeacon: False + DropItems: E7.noautotarget, GNRL.noautotarget + AlwaysVisible: + +RIFLEDROP: + ParatroopersPower: + DisplayBeacon: False + DropItems: E1, E1, E1, E1, E1 + AlwaysVisible: + +LST.Reinforcement: + Inherits: LST + RejectsOrders: + -Buildable: + -Selectable: + RenderSprites: + Image: lst + Interactable: + +GNRL: + Valued: + Cost: 1000 + Tooltip: + Name: Stavros + Armament: + Weapon: SilencedPPK + Passenger: + CargoType: VIP + +GNRL.noautotarget: + Inherits: GNRL + -AutoTarget: + -AutoTargetPriority@DEFAULT: + -AutoTargetPriority@ATTACKANYTHING: + AttackMove: + -AssaultMoveCondition: + RenderSprites: + Image: GNRL + +E7: + Passenger: + CargoType: VIP + +TRUK: + SpawnActorOnDeath: + Actor: healcrate + +HEALCRATE: + Crate: + Lifetime: 0 + +TRAN: + -Selectable: + RevealsShroud: + Range: 4c0 + Targetable@GROUND: + TargetTypes: GroundActor + Interactable: + Health: + HP: 5000 + Cargo: + Types: VIP + MaxWeight: 2 + +BADR.Bomber: + Aircraft: + Speed: 373 + Tooltip: + Name: Strategic Bomber + RenderSprites: + Image: U2 + +MIG: + Aircraft: + IdleBehavior: LeaveMap diff --git a/mods/ra/maps/fall-of-greece-1-personal-war/weapons.yaml b/mods/ra/maps/fall-of-greece-1-personal-war/weapons.yaml new file mode 100644 index 0000000000..eac4d4521b --- /dev/null +++ b/mods/ra/maps/fall-of-greece-1-personal-war/weapons.yaml @@ -0,0 +1,59 @@ +SilencedPPK: + Range: 4c0 + +ParaBomb: + ReloadDelay: 50 + ValidTargets: Ground, Water, GroundActor, WaterActor, Underwater, AirborneActor, Trees + Warhead@1Dam_impact: SpreadDamage + Spread: 1c0 + Damage: 15000 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + ValidTargets: GroundActor, WaterActor, Underwater, AirborneActor, Trees + Versus: + Wood: 1000 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@3Smu_impact: LeaveSmudge + SmudgeType: Scorch + ValidTargets: Ground, Infantry + Size: 1 + Warhead@4Eff_impact: CreateEffect + Explosions: nuke + ImpactSounds: kaboom1.aud + ImpactActors: false + ValidTargets: Ground, Water, Air + Warhead@5Dam_areanuke1: SpreadDamage + Spread: 2c0 + Damage: 6000 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 5 + ValidTargets: GroundActor, WaterActor, Underwater, AirborneActor, Trees + Versus: + Wood: 1000 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@7Smu_areanuke1: LeaveSmudge + SmudgeType: Scorch + ValidTargets: Ground, Infantry + Size: 2 + Delay: 5 + Warhead@8Eff_areanuke1: CreateEffect + ImpactSounds: kaboom22.aud + Delay: 5 + ImpactActors: false + Warhead@9Dam_areanuke2: SpreadDamage + Spread: 3c0 + Damage: 6000 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 10 + ValidTargets: GroundActor, Trees, WaterActor, Underwater, AirborneActor + Versus: + Wood: 50 + Tree: 200 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@12Smu_areanuke2: LeaveSmudge + SmudgeType: Scorch + ValidTargets: Ground, Infantry + Size: 3 + Delay: 10 diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index 53881f7610..d73638b5d7 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -26,6 +26,7 @@ Soviet Campaign: Counterstrike: sarin-gas-1-crackdown sarin-gas-2-down-under + fall-of-greece-1-personal-war soviet-soldier-volkov-n-chitzkoi top-o-the-world Aftermath: