diff --git a/AUTHORS b/AUTHORS index ed2dbae1c6..7aa6e18462 100644 --- a/AUTHORS +++ b/AUTHORS @@ -104,6 +104,7 @@ Also thanks to: * Michael Rätzel * Michael Silber (frühstück) * Michael Sztolcman (s1w_) + * Mike Gagné (AngryBirdz) * Muh * Mustafa Alperen Seki (MustaphaTR) * Neil Shivkar (havok13888) diff --git a/OpenRA.sln b/OpenRA.sln index ff31a324f8..ae84a57a1f 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -96,6 +96,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\soviet-06b\soviet06b-reinforcements_teams.lua = mods\ra\maps\soviet-06b\soviet06b-reinforcements_teams.lua mods\ra\maps\soviet-06b\soviet06b.lua = mods\ra\maps\soviet-06b\soviet06b.lua mods\ra\maps\soviet-07\soviet07.lua = mods\ra\maps\soviet-07\soviet07.lua + mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea.lua = mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea.lua + mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea-AI.lua = mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea-AI.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 EndProjectSection diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.bin b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.bin new file mode 100644 index 0000000000..174e320f27 Binary files /dev/null and b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.bin differ diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.png b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.png new file mode 100644 index 0000000000..dc774179f2 Binary files /dev/null and b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.png differ diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.yaml b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.yaml new file mode 100644 index 0000000000..b5ef2ac32f --- /dev/null +++ b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/map.yaml @@ -0,0 +1,1442 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Soviet Soldier Volkov & Chitzkoi + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 18,23,60,73 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Greece, GoodGuy, Spain, France, USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: ABB7E4 + Allies: Spain, France, GoodGuy + Enemies: USSR, Creeps + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece, GoodGuy, Spain, France, Creeps + PlayerReference@GoodGuy: + Name: GoodGuy + Faction: allies + Color: ABB7E4 + Allies: Greece, Spain, France + Enemies: USSR, Creeps + PlayerReference@Spain: + Name: Spain + Faction: allies + Color: F6D679 + Allies: Greece, GoodGuy, France + Enemies: USSR, Creeps + PlayerReference@France: + Name: France + Faction: allies + Color: 5DC2A5 + Allies: Greece, GoodGuy, Spain + Enemies: USSR, Creeps + +Actors: + Actor0: cycl + Location: 50,23 + Owner: Greece + Actor1: cycl + Location: 51,23 + Owner: Greece + Actor2: cycl + Location: 59,23 + Owner: Greece + Actor3: cycl + Location: 60,23 + Owner: Greece + Actor4: brik + Location: 92,23 + Owner: Neutral + Actor5: cycl + Location: 50,24 + Owner: Greece + Actor6: cycl + Location: 60,24 + Owner: Greece + Actor7: brik + Location: 92,24 + Owner: Neutral + Actor8: brik + Location: 92,25 + Owner: Neutral + Actor9: brik + Location: 92,26 + Owner: Neutral + Actor10: brik + Location: 92,27 + Owner: Neutral + Actor11: brik + Location: 92,28 + Owner: Neutral + Actor12: brik + Location: 92,29 + Owner: Neutral + Actor13: brik + Location: 92,30 + Owner: Neutral + Actor14: brik + Location: 92,31 + Owner: Neutral + Actor15: brik + Location: 92,32 + Owner: Neutral + Actor16: cycl + Location: 50,33 + Owner: Greece + Actor17: cycl + Location: 60,33 + Owner: Greece + Actor18: brik + Location: 92,33 + Owner: Neutral + Actor19: cycl + Location: 50,34 + Owner: Greece + Actor20: cycl + Location: 51,34 + Owner: Greece + Actor21: cycl + Location: 59,34 + Owner: Greece + Actor22: cycl + Location: 60,34 + Owner: Greece + Actor23: brik + Location: 92,34 + Owner: Neutral + Actor24: cycl + Location: 71,35 + Owner: Greece + Actor25: cycl + Location: 72,35 + Owner: Greece + Actor26: cycl + Location: 73,35 + Owner: Greece + Actor27: cycl + Location: 74,35 + Owner: Greece + Actor28: cycl + Location: 75,35 + Owner: Greece + Actor29: cycl + Location: 76,35 + Owner: Greece + Actor30: cycl + Location: 77,35 + Owner: Greece + Actor31: brik + Location: 92,35 + Owner: Neutral + Actor32: cycl + Location: 71,36 + Owner: Greece + Actor33: cycl + Location: 77,36 + Owner: Greece + Actor34: brik + Location: 92,36 + Owner: Neutral + Actor35: cycl + Location: 77,37 + Owner: Greece + Actor36: brik + Location: 92,37 + Owner: Neutral + Actor37: cycl + Location: 77,38 + Owner: Greece + Actor38: brik + Location: 92,38 + Owner: Neutral + Actor39: cycl + Location: 71,39 + Owner: Greece + Actor40: cycl + Location: 77,39 + Owner: Greece + Actor41: brik + Location: 92,39 + Owner: Neutral + Actor42: cycl + Location: 71,40 + Owner: Greece + Actor43: cycl + Location: 72,40 + Owner: Greece + Actor44: cycl + Location: 73,40 + Owner: Greece + Actor45: cycl + Location: 74,40 + Owner: Greece + Actor46: cycl + Location: 75,40 + Owner: Greece + Actor47: cycl + Location: 76,40 + Owner: Greece + Actor48: cycl + Location: 77,40 + Owner: Greece + Actor49: brik + Location: 92,40 + Owner: Neutral + Actor50: brik + Location: 92,41 + Owner: Neutral + Actor51: brik + Location: 92,42 + Owner: Neutral + Actor52: brik + Location: 92,43 + Owner: Neutral + Actor53: brik + Location: 92,44 + Owner: Neutral + Actor54: brik + Location: 92,45 + Owner: Neutral + Actor55: brik + Location: 92,46 + Owner: Neutral + Actor56: brik + Location: 92,47 + Owner: Neutral + Actor57: brik + Location: 92,48 + Owner: Neutral + Actor58: brik + Location: 92,49 + Owner: Neutral + Actor59: brik + Location: 92,50 + Owner: Neutral + Actor60: brik + Location: 92,51 + Owner: Neutral + Actor61: brik + Location: 92,52 + Owner: Neutral + Actor62: brik + Location: 83,53 + Owner: Neutral + Actor63: brik + Location: 84,53 + Owner: Neutral + Actor64: brik + Location: 85,53 + Owner: Neutral + Actor65: brik + Location: 86,53 + Owner: Neutral + Actor66: brik + Location: 87,53 + Owner: Neutral + Actor67: brik + Location: 88,53 + Owner: Neutral + Actor68: brik + Location: 89,53 + Owner: Neutral + Actor69: brik + Location: 90,53 + Owner: Neutral + Actor70: brik + Location: 91,53 + Owner: Neutral + Actor71: brik + Location: 92,53 + Owner: Neutral + Actor72: brik + Location: 51,56 + Owner: Greece + Actor73: brik + Location: 52,56 + Owner: Greece + Actor74: brik + Location: 53,56 + Owner: Greece + Actor75: brik + Location: 54,56 + Owner: Greece + Actor76: brik + Location: 55,56 + Owner: Greece + Actor77: brik + Location: 56,56 + Owner: Greece + Actor78: brik + Location: 51,57 + Owner: Greece + Actor79: brik + Location: 52,57 + Owner: Greece + Actor80: brik + Location: 55,57 + Owner: Greece + Actor81: brik + Location: 56,57 + Owner: Greece + Actor82: brik + Location: 51,58 + Owner: Greece + Actor83: brik + Location: 52,58 + Owner: Greece + Actor84: brik + Location: 55,58 + Owner: Greece + Actor85: brik + Location: 56,58 + Owner: Greece + Actor86: brik + Location: 51,59 + Owner: Greece + Actor87: brik + Location: 52,59 + Owner: Greece + Actor88: brik + Location: 55,59 + Owner: Greece + Actor89: brik + Location: 56,59 + Owner: Greece + Actor90: cycl + Location: 19,75 + Owner: Greece + Actor91: cycl + Location: 20,75 + Owner: Greece + Actor92: cycl + Location: 21,75 + Owner: Greece + Actor93: cycl + Location: 22,75 + Owner: Greece + Actor94: cycl + Location: 23,75 + Owner: Greece + Actor95: cycl + Location: 19,76 + Owner: Greece + Actor96: cycl + Location: 23,76 + Owner: Greece + Actor97: cycl + Location: 19,77 + Owner: Greece + Actor98: cycl + Location: 23,77 + Owner: Greece + Actor99: cycl + Location: 19,78 + Owner: Greece + Actor100: cycl + Location: 20,78 + Owner: Greece + Actor101: cycl + Location: 22,78 + Owner: Greece + Actor102: cycl + Location: 23,78 + Owner: Greece + Actor103: cycl + Location: 19,85 + Owner: Greece + Actor104: cycl + Location: 20,85 + Owner: Greece + Actor105: cycl + Location: 22,85 + Owner: Greece + Actor106: cycl + Location: 23,85 + Owner: Greece + Actor107: cycl + Location: 19,86 + Owner: Greece + Actor108: cycl + Location: 23,86 + Owner: Greece + Actor109: brik + Location: 55,86 + Owner: USSR + Actor110: brik + Location: 56,86 + Owner: USSR + Actor111: brik + Location: 57,86 + Owner: USSR + Actor112: brik + Location: 58,86 + Owner: USSR + Actor113: brik + Location: 59,86 + Owner: USSR + Actor114: brik + Location: 60,86 + Owner: USSR + Actor115: brik + Location: 61,86 + Owner: USSR + Actor116: brik + Location: 62,86 + Owner: USSR + Actor117: brik + Location: 63,86 + Owner: USSR + Actor118: brik + Location: 64,86 + Owner: USSR + Actor119: brik + Location: 73,86 + Owner: USSR + Actor120: brik + Location: 74,86 + Owner: USSR + Actor121: brik + Location: 75,86 + Owner: USSR + Actor122: brik + Location: 76,86 + Owner: USSR + Actor123: brik + Location: 77,86 + Owner: USSR + Actor124: cycl + Location: 19,87 + Owner: Greece + Actor125: cycl + Location: 23,87 + Owner: Greece + Actor126: brik + Location: 55,87 + Owner: USSR + Actor127: brik + Location: 56,87 + Owner: USSR + Actor128: brik + Location: 63,87 + Owner: USSR + Actor129: brik + Location: 64,87 + Owner: USSR + Actor130: brik + Location: 73,87 + Owner: USSR + Actor131: brik + Location: 74,87 + Owner: USSR + Actor132: cycl + Location: 19,88 + Owner: Greece + Actor133: cycl + Location: 20,88 + Owner: Greece + Actor134: cycl + Location: 21,88 + Owner: Greece + Actor135: cycl + Location: 22,88 + Owner: Greece + Actor136: cycl + Location: 23,88 + Owner: Greece + Actor137: brik + Location: 55,88 + Owner: USSR + Actor138: brik + Location: 55,89 + Owner: USSR + Actor139: brik + Location: 55,90 + Owner: USSR + Actor140: brik + Location: 55,91 + Owner: USSR + Actor141: brik + Location: 55,92 + Owner: USSR + Actor142: brik + Location: 55,93 + Owner: USSR + Actor143: brik + Location: 55,94 + Owner: USSR + Actor144: brik + Location: 55,95 + Owner: USSR + Actor145: brik + Location: 55,96 + Owner: Neutral + Actor146: brik + Location: 78,86 + Owner: Neutral + Actor147: tc02 + Location: 45,23 + Owner: Neutral + Actor148: tc04 + Location: 63,23 + Owner: Neutral + Actor149: tc05 + Location: 72,23 + Owner: Neutral + Actor150: tc03 + Location: 18,30 + Owner: Neutral + Actor151: tc02 + Location: 73,31 + Owner: Neutral + Actor152: ice03 + Location: 45,35 + Owner: Neutral + Actor153: tc01 + Location: 61,34 + Owner: Neutral + Actor154: ice05 + Location: 55,43 + Owner: Neutral + Actor155: tc01 + Location: 38,43 + Owner: Neutral + Actor156: tc01 + Location: 19,45 + Owner: Neutral + Actor157: tc04 + Location: 26,44 + Owner: Neutral + Actor158: tc02 + Location: 21,48 + Owner: Neutral + Actor159: ice01 + Location: 45,50 + Owner: Neutral + Actor160: tc05 + Location: 25,50 + Owner: Neutral + Actor161: tc02 + Location: 48,53 + Owner: Neutral + Actor162: tc04 + Location: 58,55 + Owner: Neutral + Actor163: ice02 + Location: 38,58 + Owner: Neutral + Actor164: tc04 + Location: 75,58 + Owner: Neutral + Actor165: tc03 + Location: 63,62 + Owner: Neutral + Actor166: tc04 + Location: 21,62 + Owner: Neutral + Actor167: tc02 + Location: 65,63 + Owner: Neutral + Actor168: tc04 + Location: 28,63 + Owner: Neutral + Actor169: tc02 + Location: 32,64 + Owner: Neutral + Actor170: tc05 + Location: 18,65 + Owner: Neutral + Actor171: ice04 + Location: 40,67 + Owner: Neutral + Actor172: tc02 + Location: 59,67 + Owner: Neutral + Actor173: tc02 + Location: 41,68 + Owner: Neutral + Actor174: t16 + Location: 51,68 + Owner: Neutral + Actor175: t14 + Location: 40,69 + Owner: Neutral + Actor176: tc01 + Location: 38,70 + Owner: Neutral + Actor177: t03 + Location: 33,72 + Owner: Neutral + Actor178: t11 + Location: 25,73 + Owner: Neutral + Actor179: t13 + Location: 22,75 + Owner: Neutral + Actor180: tc03 + Location: 32,78 + Owner: Neutral + Actor181: tc02 + Location: 37,82 + Owner: Neutral + Actor182: tc05 + Location: 72,81 + Owner: Neutral + Actor183: tc02 + Location: 24,84 + Owner: Neutral + Actor184: tc02 + Location: 46,84 + Owner: Neutral + Actor185: tc03 + Location: 73,84 + Owner: Neutral + Actor186: tc03 + Location: 24,86 + Owner: Neutral + Actor187: tc03 + Location: 53,86 + Owner: Neutral + Actor188: tc01 + Location: 45,88 + Owner: Neutral + Actor189: tc04 + Location: 50,88 + Owner: Neutral + Actor190: tc02 + Location: 53,90 + Owner: Neutral + Actor191: tc03 + Location: 38,91 + Owner: Neutral + Actor192: tc01 + Location: 51,92 + Owner: Neutral + Actor193: t17 + Location: 50,94 + Owner: Neutral + Actor194: tc05 + Location: 52,93 + Owner: Neutral + AlliedBarracks01: tent + Location: 39,23 + Owner: Greece + Actor196: pbox + Location: 51,24 + Owner: Greece + Hospital01: hosp + Location: 54,23 + Owner: Greece + Actor198: pbox + Location: 59,24 + Owner: Greece + Actor199: brl3 + Location: 20,25 + Owner: Greece + Actor200: brl3 + Location: 21,25 + Owner: Greece + Actor201: barl + Location: 21,26 + Owner: Greece + Actor202: brl3 + Location: 23,26 + Owner: Greece + Actor203: brl3 + Location: 20,27 + Owner: Greece + Actor204: barl + Location: 23,27 + Owner: Greece + Actor205: barl + Location: 20,28 + Owner: Greece + Actor206: brl3 + Location: 21,28 + Owner: Greece + Actor207: brl3 + Location: 24,28 + Owner: Greece + Actor208: barl + Location: 20,29 + Owner: Greece + Actor209: pbox + Location: 51,33 + Owner: Greece + Actor210: pbox + Location: 59,33 + Owner: Greece + Actor211: hbox + Location: 70,33 + Owner: Greece + Actor212: minp + Location: 31,38 + Owner: USSR + Actor213: hbox + Location: 62,38 + Owner: Greece + AlliedConYard01: fact + Location: 74,36 + Owner: GoodGuy + Actor215: minp + Location: 28,39 + Owner: USSR + Actor216: minp + Location: 25,40 + Owner: USSR + Actor217: minp + Location: 33,40 + Owner: USSR + Actor218: hbox + Location: 70,40 + Owner: Greece + Actor219: minp + Location: 26,41 + Owner: USSR + Actor220: minp + Location: 29,41 + Owner: USSR + Actor221: minp + Location: 31,41 + Owner: USSR + NavalYard01: syrd + Location: 57,40 + Owner: Greece + Actor223: minp + Location: 33,42 + Owner: USSR + Actor224: minp + Location: 31,43 + Owner: USSR + Actor225: minp + Location: 32,44 + Owner: USSR + Actor226: minp + Location: 34,45 + Owner: USSR + Actor227: minp + Location: 32,47 + Owner: USSR + Actor228: minp + Location: 34,47 + Owner: USSR + OreRefinery01: proc + Location: 70,45 + Owner: Greece + OreRefinery02: proc + Location: 75,45 + Owner: Greece + Actor231: apwr + Location: 49,47 + Owner: Greece + Actor232: barl + Location: 52,48 + Owner: Spain + Actor233: barl + Location: 53,48 + Owner: Spain + Actor234: barl + Location: 54,48 + Owner: Spain + Actor235: minp + Location: 33,49 + Owner: USSR + Actor236: barl + Location: 52,49 + Owner: Spain + Actor237: brl3 + Location: 55,49 + Owner: Spain + Actor238: brl3 + Location: 57,50 + Owner: Spain + Actor239: silo + Location: 75,50 + Owner: Greece + Actor240: silo + Location: 76,50 + Owner: Greece + Actor241: apwr + Location: 52,50 + Owner: GoodGuy + Actor242: silo + Location: 74,51 + Owner: Greece + Actor243: silo + Location: 75,51 + Owner: Greece + Actor244: silo + Location: 76,51 + Owner: Greece + Actor245: apwr + Location: 55,51 + Owner: Greece + Actor246: silo + Location: 75,52 + Owner: Greece + TownHouse01: v07 + Location: 32,56 + Owner: Spain + Actor248: apwr + Location: 46,55 + Owner: Greece + TownChurch: v01 + Location: 21,56 + Owner: Spain + Actor250: brl3 + Location: 74,57 + Owner: Greece + TownHouse02: v02 + Location: 32,57 + Owner: Spain + AlloyFacility: afac + Location: 53,57 + Owner: France + ControlCenter: ccen + Location: 72,57 + Owner: France + Actor254: barl + Location: 74,58 + Owner: Greece + TownHouse03: v05 + Location: 22,59 + Owner: Spain + Actor256: dome + Location: 58,58 + Owner: Greece + Actor257: brl3 + Location: 70,59 + Owner: Greece + Actor258: barl + Location: 71,59 + Owner: Greece + Actor259: apwr + Location: 46,59 + Owner: Greece + Actor260: barl + Location: 72,60 + Owner: Greece + Actor261: brl3 + Location: 73,60 + Owner: Greece + TownHouse04: v04 + Location: 32,60 + Owner: Spain + AlliedWarFact01: weap + Location: 49,61 + Owner: Greece + AlliedWarFact02: weap + Location: 56,61 + Owner: Greece + Actor265: pbox + Location: 52,67 + Owner: Greece + Actor266: pbox + Location: 58,67 + Owner: Greece + HTurret01: hgun + Location: 53,68 + Owner: France + Facing: 127 + HTurret02: hgun + Location: 55,68 + Owner: France + Facing: 127 + HTurret03: hgun + Location: 57,68 + Owner: France + Facing: 127 + Actor270: barl + Location: 26,75 + Owner: Greece + Actor271: v19 + Location: 20,76 + Owner: Greece + Actor272: v19 + Location: 21,76 + Owner: Greece + Actor273: brl3 + Location: 25,76 + Owner: Greece + Actor274: v19 + Location: 20,77 + Owner: Greece + Actor275: v19 + Location: 22,77 + Owner: Greece + Actor276: barl + Location: 25,77 + Owner: Greece + Actor277: brl3 + Location: 24,78 + Owner: Greece + Actor278: brl3 + Location: 22,79 + Owner: Creeps + Barrel: barl + Location: 23,79 + Owner: Creeps + Actor280: barl + Location: 20,80 + Owner: Greece + Actor281: brl3 + Location: 21,80 + Owner: Greece + Actor282: barl + Location: 19,81 + Owner: Greece + Actor283: barl + Location: 20,81 + Owner: Greece + Actor284: brl3 + Location: 23,81 + Owner: Greece + Actor285: brl3 + Location: 19,83 + Owner: Greece + Actor286: brl3 + Location: 22,83 + Owner: Greece + Actor287: barl + Location: 23,83 + Owner: Greece + Actor288: barl + Location: 19,84 + Owner: Greece + Actor289: brl3 + Location: 20,84 + Owner: Greece + Actor290: barl + Location: 21,84 + Owner: Greece + Actor291: v19 + Location: 20,86 + Owner: Greece + Actor292: v19 + Location: 22,86 + Owner: Greece + Actor293: v19 + Location: 20,87 + Owner: Greece + Actor294: v19 + Location: 21,87 + Owner: Greece + Actor295: tsla + Location: 65,88 + Owner: USSR + Actor296: tsla + Location: 74,88 + Owner: USSR + Actor297: sam + Location: 57,89 + Owner: USSR + Actor298: dome + Location: 59,88 + Owner: USSR + Actor299: sam + Location: 61,89 + Owner: USSR + Actor300: apwr + Location: 75,88 + Owner: USSR + Actor301: stek + Location: 63,90 + Owner: USSR + Actor302: apwr + Location: 56,93 + Owner: USSR + Actor303: apwr + Location: 69,93 + Owner: USSR + SupplyTruck01: truk + Location: 57,25 + Owner: Greece + Facing: 159 + LightTankGuard01: 1tnk + Location: 32,26 + Owner: Greece + Facing: 95 + SupplyTruck02: truk + Location: 56,26 + Owner: Greece + Facing: 159 + RangerGuard04: jeep + Location: 52,27 + Owner: Greece + Facing: 63 + LightTankGuard02: 1tnk + Location: 61,30 + Owner: Greece + Facing: 63 + RangerGuard03: jeep + Location: 37,33 + Owner: Greece + Facing: 31 + RangerGuard02: jeep + Location: 21,46 + Owner: Greece + Facing: 223 + LightTankGuard03: 1tnk + Location: 71,56 + Owner: Greece + Facing: 31 + MediumTankGuard01: 2tnk + Location: 19,62 + Owner: Greece + Facing: 159 + RangerGuard01: jeep + Location: 23,72 + Owner: Greece + Facing: 159 + PlyrHvyTnk01: 3tnk + Location: 68,85 + Owner: USSR + Facing: 31 + PlyrMthTnk01: 4tnk + Location: 69,85 + Owner: USSR + Facing: 31 + PlyrHvyTnk02: 3tnk + Location: 71,85 + Owner: USSR + Facing: 31 + PlyrHvyTnk03: 3tnk + Location: 65,86 + Owner: USSR + Facing: 31 + PlyrHvyTnk04: 3tnk + Location: 66,86 + Owner: USSR + Facing: 31 + PlyrMthTnk02: 4tnk + Location: 67,86 + Owner: USSR + Facing: 31 + PlyrHvyTnk05: 3tnk + Location: 72,86 + Owner: USSR + Facing: 31 + PlyrV2RL01: v2rl + Location: 71,87 + Owner: USSR + Facing: 31 + PlyrV2RL02: v2rl + Location: 69,88 + Owner: USSR + Facing: 31 + PlyrV2RL03: v2rl + Location: 73,89 + Owner: USSR + Facing: 31 + PlyrV2RL04: v2rl + Location: 71,90 + Owner: USSR + Facing: 31 + Actor327: c7 + Location: 58,23 + Owner: Greece + SubCell: 3 + Actor328: c5 + Location: 56,24 + Owner: Greece + SubCell: 4 + Actor329: c2 + Location: 57,24 + Owner: Greece + SubCell: 1 + Actor330: c4 + Location: 58,24 + Owner: Greece + SubCell: 1 + Actor331: c6 + Location: 58,25 + Owner: Greece + SubCell: 2 + Actor332: c3 + Location: 58,25 + Owner: Greece + SubCell: 1 + Actor333: e3 + Location: 34,27 + Owner: Greece + Facing: 31 + SubCell: 3 + RiflemanGuard01: e1 + Location: 39,28 + Owner: Greece + Facing: 127 + SubCell: 1 + InfGuardSquad03Unit01: e1 + Location: 53,28 + Owner: Greece + SubCell: 5 + InfGuardSquad03Unit02: e1 + Location: 53,28 + Owner: Greece + SubCell: 4 + InfGuardSquad03Unit03: e1 + Location: 53,28 + Owner: Greece + SubCell: 2 + InfGuardSquad03Unit04: e1 + Location: 54,28 + Owner: Greece + SubCell: 4 + InfGuardSquad03Unit05: e1 + Location: 53,29 + Owner: Greece + SubCell: 2 + Actor340: e3 + Location: 34,35 + Owner: Greece + Facing: 63 + SubCell: 4 + InfGuardSquad02Unit01: e3 + Location: 25,44 + Owner: Greece + SubCell: 4 + InfGuardSquad02Unit02: e3 + Location: 24,45 + Owner: Greece + SubCell: 0 + InfGuardSquad02Unit03: e3 + Location: 25,46 + Owner: Greece + SubCell: 1 + MineSoldier01: e1 + Location: 32,49 + Owner: GoodGuy + Facing: 159 + SubCell: 1 + Stance: HoldFire + TanyaSquadUnit01: e1 + Location: 61,49 + Owner: Greece + SubCell: 5 + TanyaSquadUnit02: e1 + Location: 66,49 + Owner: Greece + SubCell: 5 + MineSoldier02: e1 + Location: 31,50 + Owner: GoodGuy + Facing: 127 + SubCell: 4 + Stance: HoldFire + TanyaSquadUnit03: e1 + Location: 63,50 + Owner: Greece + SubCell: 1 + TanyaSquadTanya: e7 + Location: 64,50 + Owner: Greece + SubCell: 0 + TanyaSquadUnit04: e1 + Location: 66,50 + Owner: Greece + SubCell: 4 + MineSoldier03: e1 + Location: 32,51 + Owner: GoodGuy + Facing: 127 + SubCell: 1 + Stance: HoldFire + MineSoldier04: e1 + Location: 34,51 + Owner: GoodGuy + Facing: 95 + SubCell: 2 + Stance: HoldFire + TanyaSquadUnit05: e1 + Location: 62,51 + Owner: Greece + SubCell: 1 + TanyaSquadUnit06: e1 + Location: 65,51 + Owner: Greece + SubCell: 4 + MineSoldier05: e1 + Location: 30,52 + Owner: GoodGuy + Facing: 127 + SubCell: 2 + Stance: HoldFire + MineSoldier06: e1 + Location: 33,52 + Owner: GoodGuy + Facing: 127 + SubCell: 1 + Stance: HoldFire + TownMedic01: medi + Location: 26,57 + Owner: Greece + Facing: 95 + SubCell: 4 + TownMedic02: medi + Location: 30,57 + Owner: Greece + Facing: 159 + SubCell: 2 + Actor359: e1 + Location: 75,57 + Owner: Greece + SubCell: 4 + TownDude01: c10 + Location: 25,58 + Owner: Spain + SubCell: 1 + TownDude02: c8 + Location: 29,58 + Owner: Spain + SubCell: 1 + TownDude03: c10 + Location: 26,59 + Owner: Spain + SubCell: 1 + TownDude04: c9 + Location: 28,59 + Owner: Spain + SubCell: 1 + TownMedic03: medi + Location: 31,59 + Owner: Greece + Facing: 127 + SubCell: 4 + Actor365: e1 + Location: 69,59 + Owner: Greece + SubCell: 0 + Actor366: e1 + Location: 70,60 + Owner: Greece + SubCell: 3 + Actor367: e1 + Location: 74,60 + Owner: Greece + SubCell: 1 + InfGuardSquad01Unit01: e3 + Location: 23,61 + Owner: Greece + Facing: 127 + SubCell: 5 + InfGuardSquad01Unit02: e3 + Location: 24,61 + Owner: Greece + Facing: 127 + SubCell: 5 + InfGuardSquad01Unit03: e3 + Location: 24,61 + Owner: Greece + Facing: 127 + SubCell: 4 + InfGuardSquad01Unit04: e3 + Location: 24,61 + Owner: Greece + Facing: 127 + SubCell: 1 + InfGuardSquad01Unit05: e3 + Location: 24,62 + Owner: Greece + Facing: 127 + SubCell: 1 + InitialHuntUnit01: e3 + Location: 28,74 + Owner: Greece + SubCell: 3 + InitialHuntUnit02: e3 + Location: 29,74 + Owner: Greece + SubCell: 4 + InitialHuntUnit03: e3 + Location: 29,75 + Owner: Greece + SubCell: 0 + InitialRifleman01: e1 + Location: 24,76 + Owner: Greece + Facing: 95 + SubCell: 4 + Health: 1 + InitialRifleman02: e1 + Location: 24,76 + Owner: Greece + Facing: 95 + SubCell: 5 + Health: 1 + InitialHuntUnit04: e3 + Location: 27,76 + Owner: Greece + SubCell: 1 + InitialHuntUnit05: e3 + Location: 28,76 + Owner: Greece + SubCell: 2 + InitialHuntUnit06: e3 + Location: 30,76 + Owner: Greece + Facing: 95 + SubCell: 3 + InitialHuntUnit07: e3 + Location: 26,77 + Owner: Greece + SubCell: 3 + InitialHuntUnit08: e3 + Location: 27,77 + Owner: Greece + SubCell: 1 + InitialHuntUnit09: e3 + Location: 28,77 + Owner: Greece + SubCell: 1 + TnkGrd01: 2tnk + Location: 54,69 + Owner: Greece + Facing: 127 + TnkGrd02: 2tnk + Location: 53,71 + Owner: Greece + Facing: 127 + TnkGrd03: 2tnk + Location: 57,71 + Owner: Greece + Facing: 127 + TnkGrd04: 2tnk + Location: 56,69 + Owner: Greece + Facing: 127 + waypoint13: waypoint + Location: 56,25 + Owner: Neutral + waypoint89: waypoint + Location: 22,27 + Owner: Neutral + waypoint14: waypoint + Location: 69,36 + Owner: Neutral + waypoint93: waypoint + Location: 25,40 + Owner: Neutral + waypoint76: waypoint + Location: 31,41 + Owner: Neutral + waypoint95: waypoint + Location: 33,42 + Owner: Neutral + waypoint91: waypoint + Location: 34,45 + Owner: Neutral + waypoint92: waypoint + Location: 32,47 + Owner: Neutral + waypoint90: waypoint + Location: 33,49 + Owner: Neutral + waypoint15: waypoint + Location: 57,49 + Owner: Neutral + waypoint85: waypoint + Location: 64,50 + Owner: Neutral + waypoint96: waypoint + Location: 32,52 + Owner: Neutral + waypoint5: waypoint + Location: 21,57 + Owner: Neutral + waypoint4: waypoint + Location: 27,58 + Owner: Neutral + civteam01spawn: waypoint + Location: 22,59 + Owner: Neutral + waypoint6: waypoint + Location: 20,61 + Owner: Neutral + waypoint8: waypoint + Location: 31,61 + Owner: Neutral + civteam02spawn: waypoint + Location: 33,61 + Owner: Neutral + waypoint7: waypoint + Location: 27,62 + Owner: Neutral + waypoint99: waypoint + Location: 63,62 + Owner: Neutral + waypoint12: waypoint + Location: 55,70 + Owner: Neutral + waypoint26: waypoint + Location: 41,65 + Owner: Neutral + waypoint2: waypoint + Location: 54,69 + Owner: Neutral + waypoint11: waypoint + Location: 56,69 + Owner: Neutral + waypoint9: waypoint + Location: 53,71 + Owner: Neutral + waypoint10: waypoint + Location: 57,71 + Owner: Neutral + waypoint53: waypoint + Location: 23,84 + Owner: Neutral + waypoint52: waypoint + Location: 22,23 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 25,81 + Owner: Neutral + superteamdrop: waypoint + Location: 21,82 + Owner: Neutral + superteamspawn: waypoint + Location: 18,87 + Owner: Neutral + waypoint77: waypoint + Location: 70,88 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml + +Notifications: notifications.yaml diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/notifications.yaml b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/notifications.yaml new file mode 100644 index 0000000000..a3da141cfc --- /dev/null +++ b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/notifications.yaml @@ -0,0 +1,3 @@ +Sounds: + Notifications: + rokroll: rokroll1 \ No newline at end of file diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/rules.yaml b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/rules.yaml new file mode 100644 index 0000000000..875dfaef1a --- /dev/null +++ b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/rules.yaml @@ -0,0 +1,206 @@ +World: + LuaScript: + Scripts: scu35ea.lua, scu35ea-AI.lua + MissionData: + Briefing: The Allies have stolen a new armor plating from us. With it, they can make structures nearly invulnerable. Their processing plant must be destroyed.\n\nFor this critical mission, we are allowing you access to Soldier Volkov. Use him and his cybernetic dog to sabotage the Allied control center, allowing our units in the southeast access to the alloy facility.\n\nThe mission is a success when Volkov destroys the control center, and our units destroy the alloy facility.\n + WinVideo: grvestne.vqa + LossVideo: sovcemet.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +Player: + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True + +MSLO: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + Health: + HP: 25000 + Armor: + Type: Heavy + +2TNK: + Buildable: + Prerequisites: ~vehicles.allies, ~techlevel.medium + +CA: + Buildable: + Prerequisites: ~syrd, ~techlevel.high + +C2: + Inherits@2: ^ArmedCivilian + +C3: + Inherits@2: ^ArmedCivilian + +C4: + Inherits@2: ^ArmedCivilian + +C5: + Inherits@2: ^ArmedCivilian + +C6: + Inherits@2: ^ArmedCivilian + +C8: + Inherits@2: ^ArmedCivilian + +C9: + Inherits@2: ^ArmedCivilian + +C10: + Inherits@2: ^ArmedCivilian + +V01: + SpawnActorOnDeath: + Actor: healcrate + +HOSP: + Tooltip: + GenericName: Hospital + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + -TooltipDescription@ally: + -TooltipDescription@other: + SpawnActorOnDeath: + Actor: healcrate + +MONEYCRATE: + GiveCashCrateAction: + Amount: 2000 + +^Vehicle: + -Demolishable: + +^Mine: + Tooltip: + ShowOwnerRow: false + +AFAC: + Inherits: BIO + Buildable: + Prerequisites: ~disabled + Health: + HP: 400000 + Tooltip: + Name: Alloy Facility + GenericName: Alloy Facility + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + -TooltipDescription@ally: + -TooltipDescription@other: + -ExternalCapturable: + -ExternalCapturableBar: + -EngineerRepairable: + -GpsDot: + RenderSprites: + Image: BIO + +CCEN: + Inherits: ATEK + Buildable: + Prerequisites: ~disabled + Tooltip: + Name: Control Center + GenericName: Control Center + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + -ExternalCapturable: + -ExternalCapturableBar: + -EngineerRepairable: + GpsPower: + Prerequisites: ~disabled + Power: + Amount: 200 + RenderSprites: + Image: ATEK + +HGUN: + Inherits: GUN + Buildable: + Prerequisites: ~disabled + Valued: + Cost: 2800 + Tooltip: + Name: Heavy Turret Prototype + Health: + HP: 350000 + Armor: + Type: Heavy + RevealsShroud: + Range: 8c0 + Armament: + Weapon: HeavyTurretGun + RenderSprites: + Image: GUN + +ZKOI: + Inherits: DOG + Buildable: + Prerequisites: ~disabled + Valued: + Cost: 2000 + Tooltip: + Name: Chitzkoi + GenericName: Cyborg Dog + Health: + HP: 100000 + -Crushable: + RevealsShroud: + Range: 7c0 + Armament: + Weapon: CydogJaw + RenderSprites: + Image: DOG + +VOLK: + Inherits: GNRL + Buildable: + Prerequisites: ~disabled + Valued: + Cost: 3000 + Tooltip: + Name: Volkov + Health: + HP: 250000 + Armor: + Type: Heavy + -Crushable: + RevealsShroud: + Range: 10c0 + Demolition: + Mobile: + Voice: Action + AttackFrontal: + Voice: Action + AttackMove: + Voice: Action + Passenger: + Voice: Action + Guard: + Voice: Action + Voiced: + VoiceSet: GenericVoice + Armament: + Weapon: VolkovWeapon + DetectCloaked: + CloakTypes: Cloak, Hijacker + RenderSprites: + Image: GNRL + +powerproxy.pararifles: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E1,E1,E1,E1,E1 \ No newline at end of file diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/scu35ea-AI.lua b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/scu35ea-AI.lua new file mode 100644 index 0000000000..244b39a8a9 --- /dev/null +++ b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/scu35ea-AI.lua @@ -0,0 +1,112 @@ +--[[ + Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you under the terms of the GNU General Public License + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] + +AlliedInfantryTypes = { "e1", "e3" } +if Map.LobbyOption("difficulty") == "easy" then + AlliedArmorTypes = { "1tnk", "1tnk" } +else + AlliedArmorTypes = { "1tnk", "2tnk" } +end +if Map.LobbyOption("difficulty") == "hard" then + AlliedNavyGuard = { "ca", "ca" } +else + AlliedNavyGuard = { "ca" } +end +ArmorAttackNumbers = +{ + easy = 2, + normal = 5, + hard = 8 +} +ArmorAttackDelays = +{ + easy = DateTime.Seconds(45), + normal = DateTime.Seconds(30), + hard = DateTime.Seconds(10) +} +AlliedWarFactRally = { waypoint2, waypoint9, waypoint10, waypoint11 } +InfAttack = { } +ArmorAttack = { } + +SendAttackToBase = function(units) + Utils.Do(units, function(unit) + if not unit.IsDead and unit.HasProperty("Hunt") then + unit.AttackMove(waypoint77.Location, 2) + Trigger.OnIdle(unit, unit.Hunt) + end + end) +end + +UnitsJustHunt = function(units) + Utils.Do(units, function(unit) + if not unit.IsDead and unit.HasProperty("Hunt") then + Trigger.OnIdle(unit, unit.Hunt) + end + end) +end + +ProduceInfantry = function() + if AlliedBarracks01.IsDead then + return + elseif (OreRefinery01.IsDead and OreRefinery02.IsDead or GreeceHarvestersAreDead) and greece.Resources <= 299 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(1), DateTime.Seconds(2)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + greece.Build(toBuild, function(unit) + InfAttack[#InfAttack + 1] = unit[1] + + if #InfAttack >= 5 then + UnitsJustHunt(InfAttack) + InfAttack = { } + Trigger.AfterDelay(DateTime.Seconds(1), ProduceInfantry) + else + Trigger.AfterDelay(delay, ProduceInfantry) + end + end) +end + +ProduceArmor = function() + if AlliedWarFact01.IsDead and AlliedWarFact02.IsDead then + return + elseif (OreRefinery01.IsDead and OreRefinery02.IsDead or GreeceHarvestersAreDead) and greece.Resources <= 699 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(7), DateTime.Seconds(10)) + local toBuild = { Utils.Random(AlliedArmorTypes) } + local Rally = Utils.Random(AlliedWarFactRally) + Utils.Do(AlliedWarFact, function(fact) fact.RallyPoint = Rally.Location end) + greece.Build(toBuild, function(unit) + ArmorAttack[#ArmorAttack + 1] = unit[1] + + if #ArmorAttack >= ArmorAttackNumbers[Map.LobbyOption("difficulty")] then + SendAttackToBase(ArmorAttack) + ArmorAttack = { } + Trigger.AfterDelay(ArmorAttackDelays[Map.LobbyOption("difficulty")], ProduceArmor) + else + Trigger.AfterDelay(delay, ProduceArmor) + end + end) +end + +ProduceNavyGuard = function() + if NavalYard01.IsDead then + return + elseif (OreRefinery01.IsDead and OreRefinery02.IsDead or GreeceHarvestersAreDead) and greece.Resources <= 2399 then + return + end + NavalYard01.RallyPoint = waypoint26.Location + greece.Build(AlliedNavyGuard, function(nvgrd) + Utils.Do(nvgrd, function(unit) + Trigger.OnKilled(unit, ProduceNavyGuard) + end) + end) +end diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/scu35ea.lua b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/scu35ea.lua new file mode 100644 index 0000000000..64bf6cc811 --- /dev/null +++ b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/scu35ea.lua @@ -0,0 +1,376 @@ +--[[ + Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you under the terms of the GNU General Public License + as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. For more + information, see COPYING. +]] +-- Unit Groups Setup +SuperTeam = { "zkoi", "volk" } +PlayerTankDivision = { PlyrHvyTnk01, PlyrHvyTnk02, PlyrHvyTnk03, PlyrHvyTnk04, PlyrHvyTnk05, PlyrMthTnk01, PlyrMthTnk02, PlyrV2RL01, PlyrV2RL02, PlyrV2RL03, PlyrV2RL04 } +InitialHuntTeam = { InitialHuntUnit01, InitialHuntUnit02, InitialHuntUnit03, InitialHuntUnit04, InitialHuntUnit05, InitialHuntUnit06, InitialHuntUnit07, InitialHuntUnit08, InitialHuntUnit09 } +BarrelsShooter = { InitialRifleman01, InitialRifleman02 } +TownPeoples = { TownDude01, TownDude02, TownDude03, TownDude04, TownMedic01, TownMedic02, TownMedic03 } +CivTeam01 = { "c1", "c3", "c4" } +CivTeam02 = { "c4", "c5", "c6" } +InfGuardSquad01 = { InfGuardSquad01Unit01, InfGuardSquad01Unit02, InfGuardSquad01Unit03, InfGuardSquad01Unit04, InfGuardSquad01Unit05, MediumTankGuard01 } +InfGuardSquad02 = { InfGuardSquad02Unit01, InfGuardSquad02Unit02, InfGuardSquad02Unit03, RangerGuard02 } +InfGuardSquad03 = { InfGuardSquad03Unit01, InfGuardSquad03Unit02, InfGuardSquad03Unit03, InfGuardSquad03Unit04, InfGuardSquad03Unit05, RangerGuard04 } +TanyaSquad = { TanyaSquadUnit01, TanyaSquadUnit02, TanyaSquadUnit03, TanyaSquadUnit04, TanyaSquadUnit05, TanyaSquadUnit06, TanyaSquadTanya } + +-- Building Group Setup +AlliedOreRef = { OreRefinery01, OreRefinery02 } +AlliedWarFact = { AlliedWarFact01, AlliedWarFact02 } +HeavyTurrets = { HTurret01, HTurret02, HTurret03 } + +-- Area Triggers Setup +SuperTeamLandCell = { CPos.New(21, 82), CPos.New(20, 81), CPos.New(21, 81), CPos.New(22, 81), CPos.New(20, 82), CPos.New(22, 82), CPos.New(21, 83), CPos.New(20, 83), CPos.New(22, 83) } +CivTeam01Trigger = { CPos.New(21, 58), CPos.New(21, 59), CPos.New(21, 60), CPos.New(22, 60), CPos.New(23, 60), CPos.New(22, 61), CPos.New(23, 61), CPos.New(24, 60), CPos.New(25, 60), CPos.New(24, 59), CPos.New(24, 58), CPos.New(23, 58), CPos.New(22, 58) } +CivTeam02Trigger = { CPos.New(33, 62), CPos.New(33, 63), CPos.New(32, 62), CPos.New(32, 63), CPos.New(31, 62), CPos.New(31, 63), CPos.New(31, 61), CPos.New(31, 60), CPos.New(30, 62), CPos.New(30, 61), CPos.New(30, 60), CPos.New(32, 60), CPos.New(33, 60) } +MineSoldierTrigger = { CPos.New(32, 58), CPos.New(32, 59), CPos.New(33, 58), CPos.New(33, 59), CPos.New(31, 59), CPos.New(30, 59), CPos.New(29, 59), CPos.New(29, 58), CPos.New(28, 59), CPos.New(27, 59), CPos.New(26, 59), CPos.New(25, 59), CPos.New(27, 58), CPos.New(26, 58), CPos.New(25, 58), CPos.New(24, 58), CPos.New(23, 58), CPos.New(26, 57), CPos.New(24, 57), CPos.New(24, 56), CPos.New(24, 55), CPos.New(24, 54), CPos.New(23, 57), CPos.New(23, 56), CPos.New(23, 55), CPos.New(23, 54), CPos.New(22, 57) } +MineRevealTrigger = { CPos.New(30, 46), CPos.New(31, 46), CPos.New(32, 46), CPos.New(33, 46), CPos.New(34, 46), CPos.New(35, 46), CPos.New(36, 46), CPos.New(37, 46) } +ParaTrigger = { CPos.New(18, 34), CPos.New(19, 34), CPos.New(20, 34), CPos.New(21, 34), CPos.New(22, 34), CPos.New(23, 34), CPos.New(24, 34), CPos.New(25, 34), CPos.New(18, 35), CPos.New(19, 35), CPos.New(20, 35), CPos.New(21, 35), CPos.New(22, 35), CPos.New(23, 35), CPos.New(24, 35), CPos.New(25, 35) } +TanyaTrigger = { CPos.New(59, 43), CPos.New(60, 43), CPos.New(61, 43), CPos.New(62, 43), CPos.New(63, 43), CPos.New(64, 43), CPos.New(65, 43), CPos.New(66, 43), CPos.New(67, 43), CPos.New(68, 43), CPos.New(69, 43), CPos.New(59, 44), CPos.New(60, 44), CPos.New(61, 44), CPos.New(62, 44), CPos.New(63, 44), CPos.New(64, 44), CPos.New(65, 44), CPos.New(66, 44), CPos.New(67, 44), CPos.New(68, 44), CPos.New(69, 44) } + +-- Mission Variables Setup +GreeceHarvestersAreDead = false +AlloyFacilityDestroyed = false + +WorldLoaded = function() + +--Players Setup + player = Player.GetPlayer("USSR") + greece = Player.GetPlayer("Greece") + goodguy = Player.GetPlayer("GoodGuy") + spain = Player.GetPlayer("Spain") + france = Player.GetPlayer("France") + + greece.Cash = 20000 + + Camera.Position = DefaultCameraPosition.CenterPosition + +--AI Production Setup + ProduceArmor() + + if Map.LobbyOption("difficulty") == "easy" then + Trigger.AfterDelay(DateTime.Minutes(10), ProduceNavyGuard) + elseif Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Minutes(5), ProduceNavyGuard) + elseif Map.LobbyOption("difficulty") == "hard" then + ProduceNavyGuard() + end + +--Objectives Setup + 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) + + DestroyControlCenter = player.AddPrimaryObjective("Destroy the Control Center.") + KeepTanksAlive = player.AddPrimaryObjective("Your tank division must not be destroyed before\n the alloy facility is dealt with.") + KeepVolkovAlive = player.AddPrimaryObjective("Keep Volkov Alive.") + KeepChitzkoiAlive = player.AddSecondaryObjective("Keep Chitzkoi Alive.") + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + + Trigger.OnKilled(ControlCenter, function() + Utils.Do(HeavyTurrets, function(struc) + if not struc.IsDead then struc.Kill() end + end) + player.MarkCompletedObjective(DestroyControlCenter) + DestroyAlloyFacility = player.AddPrimaryObjective("Destroy the Alloy Facility.") + Media.PlaySpeechNotification(player, "FirstObjectiveMet") + Media.DisplayMessage("Excellent! The heavy turret control center is destroyed\n and now we can deal with the alloy facility.") + end) + + Trigger.OnKilled(AlloyFacility, function() + if not player.IsObjectiveCompleted(DestroyControlCenter) then --Prevent a crash if the player somehow manage to cheese the mission and destroy + player.MarkCompletedObjective(DestroyControlCenter) --the Alloy Facility without destroying the Control Center. + DestroyAlloyFacility = player.AddPrimaryObjective("Destroy the Alloy Facility.") + end + Trigger.AfterDelay(DateTime.Seconds(2), function() + player.MarkCompletedObjective(DestroyAlloyFacility) + player.MarkCompletedObjective(KeepTanksAlive) + player.MarkCompletedObjective(KeepVolkovAlive) + player.MarkCompletedObjective(KeepChitzkoiAlive) + end) + AlloyFacilityDestroyed = true + Media.PlaySpeechNotification(player, "SecondObjectiveMet") + end) + + Trigger.OnAllKilled(PlayerTankDivision, function() + if not AlloyFacilityDestroyed then player.MarkFailedObjective(KeepTanksAlive) end + end) + + Trigger.AfterDelay(0, function() + local AlliedBaseCamera = Actor.Create("camera", true, { Owner = player, Location = waypoint12.Location }) + local SuperTeamCamera = Actor.Create("camera", true, { Owner = player, Location = DefaultCameraPosition.Location }) + Trigger.AfterDelay(1, function() + if AlliedBaseCamera.IsInWorld then AlliedBaseCamera.Destroy() end + end) + Trigger.AfterDelay(DateTime.Seconds(20), function() + if SuperTeamCamera.IsInWorld then SuperTeamCamera.Destroy() end + end) + end) + +--Super Team Setup + Trigger.AfterDelay(DateTime.Seconds(2), function() + local spawn = superteamspawn.CenterPosition + WVec.New(0, 0, Actor.CruiseAltitude("badr")) + local transport = Actor.Create("badr", true, { CenterPosition = spawn, Owner = player, Facing = (superteamdrop.CenterPosition - spawn).Facing, Health = 3 }) + Utils.Do(SuperTeam, function(type) + local a = Actor.Create(type, false, { Owner = player }) + transport.LoadPassenger(a) + if a.Type == "volk" then + VolkovIsDead(a) + end + if a.Type == "zkoi" then + ChitzkoiIsDead(a) + end + end) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + transport.Paradrop(CPos.New(21, 82)) + end) + + Trigger.OnEnteredFootprint(SuperTeamLandCell, function(unit, id) + if unit.Owner == player then + Trigger.RemoveFootprintTrigger(id) + Trigger.AfterDelay(DateTime.Seconds(2), function() + if not BarrelsShooter[1].IsDead then + BarrelsShooter[1].Attack(Barrel, true, true) + elseif not BarrelsShooter[2].IsDead then + BarrelsShooter[2].Attack(Barrel, true, true) + end + Utils.Do(InitialHuntTeam, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + end) + end + end) + +--Guards Squads Setup -- I used proximity triggers to make them hunt you down in order to mimic their behavior from the original mission + Trigger.OnEnteredProximityTrigger(RangerGuard01.CenterPosition, WDist.New(70 * 70), function(unit, id) + if not RangerGuard01.IsDead and unit.Owner == player then + Trigger.OnIdle(RangerGuard01, RangerGuard01.Hunt) + Trigger.RemoveProximityTrigger(id) + end + end) + + Trigger.OnEnteredProximityTrigger(waypoint7.CenterPosition, WDist.FromCells(6), function(unit, id) + if unit.Owner == player then + Utils.Do(InfGuardSquad01, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + Trigger.RemoveProximityTrigger(id) + end + end) + + Trigger.OnEnteredProximityTrigger(InfGuardSquad02Unit01.CenterPosition, WDist.FromCells(6), function(unit, id) + if unit.Owner == player and (unit.Type == "volk" or unit.Type == "zkoi") then + Utils.Do(InfGuardSquad02, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + Trigger.RemoveProximityTrigger(id) + end + end) + + Trigger.OnEnteredProximityTrigger(InfGuardSquad03Unit05.CenterPosition, WDist.FromCells(8), function(unit, id) + if unit.Owner == player then + local HospitalCamera = Actor.Create("camera", true, { Owner = player, Location = waypoint13.Location }) + Utils.Do(InfGuardSquad03, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + if not SupplyTruck01.IsDead then + SupplyTruck01.Move(waypoint14.Location) + Trigger.AfterDelay(DateTime.Seconds(8), function() + if not SupplyTruck01.IsDead then + SupplyTruck01.Move(waypoint15.Location) + end + end) + end + Trigger.AfterDelay(DateTime.Seconds(15), function() + if HospitalCamera.IsInWorld then HospitalCamera.Destroy() end + end) + Trigger.RemoveProximityTrigger(id) + end + end) + + Trigger.OnEnteredProximityTrigger(LightTankGuard02.CenterPosition, WDist.FromCells(8), function(unit, id) + if not LightTankGuard02.IsDead and unit.Owner == player and (unit.Type == "volk" or unit.Type == "zkoi") then + Trigger.OnIdle(LightTankGuard02, LightTankGuard02.Hunt) + Trigger.RemoveProximityTrigger(id) + end + end) + +--Tanya Squad Setup + Trigger.OnEnteredFootprint(TanyaTrigger, function(unit, id) + if unit.Owner == player then + if not TanyaSquadTanya.IsDead then + local TanyaSquadCamera = Actor.Create("camera", true, { Owner = player, Location = waypoint85.Location }) + Media.PlaySoundNotification(player, "rokroll") + Utils.Do(TanyaSquad, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + Trigger.OnKilled(TanyaSquadTanya, function() + if TanyaSquadCamera.IsInWorld then + TanyaSquadCamera.Destroy() + end + end) + end + Trigger.RemoveFootprintTrigger(id) + end + end) + +--Town Setup + Utils.Do(TownPeoples, function(actor) + Trigger.OnDamaged(actor, function() + if not TownMedic01.IsDead then + TownMedic01.Patrol({ waypoint5.Location, waypoint6.Location, waypoint7.Location }, true, 0) + end + if not TownMedic02.IsDead then + TownMedic02.Patrol({ waypoint8.Location, waypoint7.Location, waypoint5.Location, waypoint6.Location }, true, 0) + end + end) + end) + + Trigger.OnEnteredFootprint(CivTeam01Trigger, function(unit, id) + if unit.Owner == player then + if not TownHouse03.IsDead then + local civ01 = Reinforcements.Reinforce(spain, CivTeam01, { civteam01spawn.Location }, 0) + Utils.Do(civ01, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + end + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(CivTeam02Trigger, function(unit, id) + if unit.Owner == player then + if not TownHouse04.IsDead then + local civ02 = Reinforcements.Reinforce(spain, CivTeam02, { civteam02spawn.Location }, 0) + Utils.Do(civ02, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + end + Trigger.RemoveFootprintTrigger(id) + end + end) + +--Minefield Setup + Trigger.OnEnteredFootprint(MineSoldierTrigger, function(unit, id) + if unit.Owner == player then + local MineSoldierCamera1 = Actor.Create("camera", true, { Owner = player, Location = waypoint96.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + if MineSoldierCamera1.IsInWorld then MineSoldierCamera1.Destroy() end + end) + if not MineSoldier01.IsDead then + MineSoldier01.Patrol({ waypoint91.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0) + end + if not MineSoldier02.IsDead then + MineSoldier02.Patrol({ waypoint92.Location, waypoint91.Location, waypoint76.Location, waypoint93.Location }, false, 0) + end + if not MineSoldier03.IsDead then + MineSoldier03.Patrol({ waypoint91.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0) + end + if not MineSoldier04.IsDead then + MineSoldier04.Patrol({ waypoint92.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0) + end + if not MineSoldier05.IsDead then + MineSoldier05.Patrol({ waypoint90.Location, waypoint91.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0) + end + if not MineSoldier06.IsDead then + MineSoldier06.Patrol({ waypoint92.Location, waypoint91.Location, waypoint93.Location }, false, 0) + end + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(MineRevealTrigger, function(unit, id) + if unit.Owner == goodguy then + local MineSoldierCamera2 = Actor.Create("camera", true, { Owner = player, Location = waypoint76.Location }) + Trigger.AfterDelay(DateTime.Seconds(12), function() + if MineSoldierCamera2.IsInWorld then MineSoldierCamera2.Destroy() end + end) + Trigger.RemoveFootprintTrigger(id) + end + end) + +--Paradrop Rifle Team Setup + Trigger.OnEnteredFootprint(ParaTrigger, function(unit, id) + if unit.Owner == player then + local powerproxy = Actor.Create("powerproxy.pararifles", true, { Owner = greece }) + local paratroopers = powerproxy.SendParatroopers(waypoint89.CenterPosition, false, Facing.South) + local prtcamera = Actor.Create("camera", true, { Owner = player, Location = waypoint89.Location }) + Trigger.AfterDelay(DateTime.Seconds(10), function() + if prtcamera.IsInWorld then prtcamera.Destroy() end + end) + Utils.Do(paratroopers, function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, function(unit) + if unit.IsInWorld then + unit.Hunt() + end + end) + end + end) + if Map.LobbyOption("difficulty") == "hard" and not RiflemanGuard01.IsDead then + Trigger.ClearAll(RiflemanGuard01) + ProduceInfantry() --Greece will start infantry production right away if the difficulty is set to hard + end + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnKilled(RiflemanGuard01, function() + ProduceInfantry() --Greece will start infantry production once this unit is dead just like in the original mission + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() + local GreeceHarvesters = greece.GetActorsByType("harv") + Trigger.OnAllKilled(GreeceHarvesters, function() + GreeceHarvestersAreDead = true + end) + end) + +end + +VolkovIsDead = function(a) + Trigger.OnKilled(a, function() + player.MarkFailedObjective(KeepVolkovAlive) + end) +end + +ChitzkoiIsDead = function(a) + Trigger.OnKilled(a, function() + player.MarkFailedObjective(KeepChitzkoiAlive) + Media.DisplayMessage("We can rebuild Chitzkoi. We have the technology.") + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "ObjectiveNotMet") + end) + end) +end diff --git a/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/weapons.yaml b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/weapons.yaml new file mode 100644 index 0000000000..8a8b0039c5 --- /dev/null +++ b/mods/ra/maps/soviet-soldier-volkov-n-chitzkoi/weapons.yaml @@ -0,0 +1,36 @@ +HeavyTurretGun: + Inherits: TurretGun + Range: 10c0 + +CydogJaw: + Inherits: DogJaw + Range: 5c512 + +VolkovWeapon: + Inherits: SilencedPPK + ReloadDelay: 25 + Range: 6c0 + -ValidTargets: + InvalidTargets: Air, Bridge, Structure + Warhead@1Dam: SpreadDamage + Spread: 256 + Versus: + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 + Concrete: 50 + -ValidTargets: + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Warhead@3Eff: CreateEffect + Explosions: artillery_explosion + ImpactSounds: kaboom25.aud + ValidTargets: Ground, Ship, Trees + Warhead@4EffWater: CreateEffect + Explosions: small_splash + ImpactSounds: splash9.aud + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge \ No newline at end of file