diff --git a/mods/ra/maps/soviet-07/map.bin b/mods/ra/maps/soviet-07/map.bin new file mode 100644 index 0000000000..b6090bbdf6 Binary files /dev/null and b/mods/ra/maps/soviet-07/map.bin differ diff --git a/mods/ra/maps/soviet-07/map.png b/mods/ra/maps/soviet-07/map.png new file mode 100644 index 0000000000..e92632f70f Binary files /dev/null and b/mods/ra/maps/soviet-07/map.png differ diff --git a/mods/ra/maps/soviet-07/map.yaml b/mods/ra/maps/soviet-07/map.yaml new file mode 100644 index 0000000000..2e3e2dc064 --- /dev/null +++ b/mods/ra/maps/soviet-07/map.yaml @@ -0,0 +1,946 @@ +MapFormat: 7 + +RequiresMod: ra + +Title: Soviet 07: Core of the matter + +Description: The Allies have infiltrated one of our nuclear reactors! They have tampered with the core so that a meltdown is imminent within 30 minutes. They must not succeed!\n\nEnter the base and find any remaining technicians. Guide them to the 4 coolant stations so they can activate them, then activate the main computer. The security systems have been armed so beware.\n\nKill any Allies you find. + +Author: Westwood Studios + +Tileset: INTERIOR + +MapSize: 128,128 + +Bounds: 40,43,70,45 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + Briefing: soviet7.vqa + GameStart: countdwn.vqa + GameWon: averted.vqa + GameLost: nukestok.vqa + +Options: + Crates: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 0 + ConfigurableStartingUnits: False + Difficulties: Easy, Normal, Hard + ShortGame: False + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + PlayerReference@Greece: + Name: Greece + Faction: allies + ColorRamp: 161,134,236 + Allies: Soviet + Enemies: USSR + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + ColorRamp: 3,255,127 + LockSpawn: True + LockTeam: True + Allies: Soviet + Enemies: Greece, Creeps + PlayerReference@Soviet: + Name: Soviet + Faction: soviet + ColorRamp: 3,255,127 + Allies: USSR, Greece + PlayerReference@Spain: + Name: Spain + Faction: allies + ColorRamp: 100,222,100 + +Actors: + Actor0: boxes01 + Location: 49,46 + Owner: Neutral + Actor1: boxes02 + Location: 42,46 + Owner: Neutral + Actor2: boxes03 + Location: 49,48 + Owner: Neutral + Actor3: boxes04 + Location: 42,48 + Owner: Neutral + Actor4: boxes06 + Location: 48,46 + Owner: Neutral + Actor5: boxes07 + Location: 49,47 + Owner: Neutral + Actor6: boxes01 + Location: 67,74 + Owner: Neutral + Actor7: boxes01 + Location: 47,68 + Owner: Neutral + Actor8: boxes02 + Location: 42,67 + Owner: Neutral + Actor9: boxes01 + Location: 43,67 + Owner: Neutral + Actor10: boxes01 + Location: 44,67 + Owner: Neutral + Actor11: boxes03 + Location: 48,60 + Owner: Neutral + Actor12: boxes03 + Location: 44,68 + Owner: Neutral + Actor13: boxes04 + Location: 46,66 + Owner: Neutral + Actor14: boxes04 + Location: 47,69 + Owner: Neutral + Actor15: boxes03 + Location: 44,69 + Owner: Neutral + Actor16: boxes02 + Location: 44,62 + Owner: Neutral + Actor17: boxes02 + Location: 49,68 + Owner: Neutral + Actor18: boxes01 + Location: 48,66 + Owner: Neutral + Actor19: boxes01 + Location: 43,65 + Owner: Neutral + Actor20: boxes02 + Location: 46,65 + Owner: Neutral + Actor21: boxes03 + Location: 44,65 + Owner: Neutral + Actor22: boxes01 + Location: 43,62 + Owner: Neutral + Actor23: boxes04 + Location: 43,63 + Owner: Neutral + Actor24: boxes05 + Location: 43,64 + Owner: Neutral + Actor25: boxes05 + Location: 41,67 + Owner: Neutral + Actor26: boxes05 + Location: 47,66 + Owner: Neutral + Actor27: boxes05 + Location: 46,62 + Owner: Neutral + Actor28: boxes06 + Location: 48,62 + Owner: Neutral + Actor29: boxes04 + Location: 49,62 + Owner: Neutral + Actor30: boxes03 + Location: 49,63 + Owner: Neutral + Actor31: boxes03 + Location: 46,64 + Owner: Neutral + Actor32: boxes03 + Location: 48,68 + Owner: Neutral + Actor33: boxes02 + Location: 46,61 + Owner: Neutral + Actor34: boxes01 + Location: 46,60 + Owner: Neutral + Actor35: boxes04 + Location: 43,59 + Owner: Neutral + Actor36: boxes04 + Location: 43,60 + Owner: Neutral + Actor37: boxes05 + Location: 42,57 + Owner: Neutral + Actor38: boxes06 + Location: 43,58 + Owner: Neutral + Actor39: boxes07 + Location: 45,62 + Owner: Neutral + Actor40: boxes08 + Location: 45,56 + Owner: Neutral + Actor41: boxes05 + Location: 46,57 + Owner: Neutral + Actor42: boxes03 + Location: 48,57 + Owner: Neutral + Actor43: boxes03 + Location: 44,55 + Owner: Neutral + Actor44: boxes09 + Location: 46,54 + Owner: Neutral + Actor45: boxes08 + Location: 45,55 + Owner: Neutral + Actor46: boxes07 + Location: 45,54 + Owner: Neutral + Actor47: boxes05 + Location: 45,53 + Owner: Neutral + Actor48: boxes04 + Location: 47,55 + Owner: Neutral + Actor49: boxes03 + Location: 47,54 + Owner: Neutral + Actor50: boxes03 + Location: 47,60 + Owner: Neutral + Actor51: boxes02 + Location: 46,59 + Owner: Neutral + Actor52: boxes01 + Location: 49,57 + Owner: Neutral + Actor53: boxes05 + Location: 46,63 + Owner: Neutral + Actor54: boxes01 + Location: 41,57 + Owner: Neutral + Actor55: boxes01 + Location: 45,57 + Owner: Neutral + Actor56: boxes02 + Location: 45,58 + Owner: Neutral + Actor57: boxes03 + Location: 45,59 + Owner: Neutral + Actor58: boxes01 + Location: 46,56 + Owner: Neutral + Actor59: boxes01 + Location: 43,57 + Owner: Neutral + Actor60: boxes01 + Location: 46,55 + Owner: Neutral + Actor61: boxes06 + Location: 86,69 + Owner: Neutral + Actor65: barl + Location: 98,45 + Owner: Creeps + Actor66: barl + Location: 98,49 + Owner: Creeps + Actor67: brl3 + Location: 98,46 + Owner: Creeps + Actor68: brl3 + Location: 100,44 + Owner: Creeps + Actor69: barl + Location: 105,48 + Owner: Creeps + Actor70: barl + Location: 106,49 + Owner: Creeps + Actor71: barl + Location: 105,50 + Owner: Creeps + Actor72: brl3 + Location: 105,51 + Owner: Creeps + Actor73: barl + Location: 106,52 + Owner: Creeps + Actor75: barl + Location: 105,54 + Owner: Creeps + Actor76: barl + Location: 105,55 + Owner: Creeps + Actor77: brl3 + Location: 105,56 + Owner: Creeps + Actor78: brl3 + Location: 106,57 + Owner: Creeps + Actor79: barl + Location: 105,58 + Owner: Creeps + Actor80: barl + Location: 105,59 + Owner: Creeps + Actor81: barl + Location: 106,60 + Owner: Creeps + Actor82: barl + Location: 105,61 + Owner: Creeps + Actor83: brl3 + Location: 106,62 + Owner: Creeps + Actor84: barl + Location: 104,63 + Owner: Creeps + Actor86: barl + Location: 98,47 + Owner: Creeps + Actor87: brl3 + Location: 98,48 + Owner: Creeps + Actor88: brl3 + Location: 105,63 + Owner: Creeps + Actor89: barl + Location: 101,44 + Owner: Creeps + Actor90: brl3 + Location: 69,74 + Owner: Creeps + Actor93: brl3 + Location: 64,73 + Owner: Creeps + Actor94: barl + Location: 62,73 + Owner: Creeps + Actor95: barl + Location: 65,73 + Owner: Creeps + Actor97: barl + Location: 70,74 + Owner: Creeps + Actor98: brl3 + Location: 70,72 + Owner: Creeps + Actor99: barl + Location: 69,72 + Owner: Creeps + Actor100: brl3 + Location: 43,46 + Owner: Creeps + Actor101: barl + Location: 45,45 + Owner: Creeps + Actor102: brl3 + Location: 47,46 + Owner: Creeps + Actor103: barl + Location: 44,45 + Owner: Creeps + Actor104: brl3 + Location: 46,45 + Owner: Creeps + Actor105: brl3 + Location: 63,73 + Owner: Creeps + Actor106: brl3 + Location: 49,71 + Owner: Creeps + Actor107: barl + Location: 48,71 + Owner: Creeps + Actor108: brl3 + Location: 47,72 + Owner: Creeps + Actor110: barl + Location: 45,72 + Owner: Creeps + Actor111: brl3 + Location: 45,71 + Owner: Creeps + Actor112: brl3 + Location: 44,70 + Owner: Creeps + Actor113: barl + Location: 43,71 + Owner: Creeps + Actor114: brl3 + Location: 44,72 + Owner: Creeps + Actor115: brl3 + Location: 42,72 + Owner: Creeps + Actor116: barl + Location: 42,70 + Owner: Creeps + Actor117: brl3 + Location: 43,69 + Owner: Creeps + Actor118: barl + Location: 42,73 + Owner: Creeps + Actor119: barl + Location: 42,74 + Owner: Creeps + Actor120: barl + Location: 83,67 + Owner: Creeps + Actor121: barl + Location: 83,68 + Owner: Creeps + Actor122: barl + Location: 83,69 + Owner: Creeps + Actor124: barl + Location: 81,79 + Owner: Creeps + Actor125: barl + Location: 81,80 + Owner: Creeps + Actor126: brl3 + Location: 82,80 + Owner: Creeps + Actor127: bio + Location: 65,46 + Owner: Greece + Actor128: bio + Location: 87,46 + Owner: Greece + Actor130: barl + Location: 80,79 + Owner: Creeps + Actor133: barl + Location: 99,44 + Owner: Creeps + Actor134: brl3 + Location: 98,44 + Owner: Creeps + Actor135: brl3 + Location: 99,45 + Owner: Creeps + Actor136: barl + Location: 102,44 + Owner: Creeps + Actor138: barl + Location: 78,80 + Owner: Creeps + Actor139: brl3 + Location: 79,80 + Owner: Creeps + Actor150: e1 + Location: 84,67 + Owner: Greece + Facing: 192 + SubCell: 4 + Actor172: e1 + Location: 77,80 + Owner: Greece + Facing: 224 + SubCell: 2 + Actor227: flare + Owner: Spain + Location: 75,49 + Actor226: flare + Owner: Spain + Location: 76,49 + Actor228: flare + Owner: Spain + Location: 75,48 + Actor229: flare + Owner: Spain + Location: 76,48 + Actor223: brl3 + Owner: Creeps + Location: 105,53 + BarlCC: barl + Location: 83,70 + Owner: Creeps + CameraCC: camera + Owner: Neutral + Location: 87,69 + CameraFTurBottom: camera + Owner: Neutral + Location: 62,80 + CameraFTurLeft: camera + Owner: Neutral + Location: 59,65 + CameraFTurRight: camera + Owner: Neutral + Location: 93,65 + CameraGoalCenter1: camera + Owner: Neutral + Location: 75,51 + CameraGoalCenter2: camera + Owner: Neutral + Location: 75,55 + CameraGoalCenter3: camera + Owner: Neutral + Location: 75,61 + CameraGoalLeft1: camera + Owner: Neutral + Location: 68,58 + CameraGoalLeft2: camera + Owner: Neutral + Location: 68,63 + CameraGoalRight1: camera + Owner: Neutral + Location: 84,58 + CameraGoalRight2: camera + Owner: Neutral + Location: 84,63 + CameraRSoldier: camera + Owner: Neutral + Location: 62,72 + CameraStart1: camera + Owner: Neutral + Location: 102,48 + CameraStart2: camera + Owner: Neutral + Location: 102,54 + CameraSoldierTrap2: camera + Owner: Neutral + Location: 47,71 + CCGuard1: e1 + Location: 87,67 + Owner: Greece + Facing: 192 + SubCell: 3 + CCGuard2: e1 + Location: 88,67 + Owner: Greece + Facing: 192 + SubCell: 4 + CCGuard3: e1 + Location: 88,68 + Owner: Greece + Facing: 192 + SubCell: 1 + CCGuard4: e1 + Location: 87,68 + Owner: Greece + Facing: 192 + SubCell: 3 + Dog1: dog + Location: 84,84 + Owner: Soviet + Facing: 224 + SubCell: 1 + Dog2: dog + Owner: Soviet + Location: 84,83 + SubCell: 3 + Facing: 92 + Dog3: dog + Location: 82,83 + Owner: Soviet + SubCell: 4 + Dog4: dog + Location: 80,83 + Owner: Soviet + Facing: 64 + SubCell: 2 + Dog5: dog + Location: 85,82 + Owner: Soviet + Facing: 224 + SubCell: 1 + Dog6: dog + Location: 85,79 + Owner: Soviet + Facing: 192 + SubCell: 4 + Dog7: dog + Location: 85,81 + Owner: Soviet + Facing: 192 + SubCell: 4 + Dog8: dog + Location: 86,83 + Owner: Soviet + Facing: 224 + SubCell: 1 + Dog9: dog + Location: 86,84 + Owner: Soviet + SubCell: 0 + Dog10: dog + Location: 86,82 + Owner: Soviet + Facing: 192 + SubCell: 0 + Dog11: dog + Location: 82,84 + Owner: Soviet + Facing: 32 + SubCell: 1 + Dog12: dog + Location: 83,84 + Owner: Soviet + SubCell: 1 + Dog13: dog + Location: 86,81 + Owner: Soviet + Facing: 32 + SubCell: 1 + Dog14: dog + Location: 85,83 + Owner: Soviet + SubCell: 3 + Dog15: dog + Location: 81,83 + Owner: Soviet + SubCell: 4 + Dog16: dog + Location: 86,80 + Owner: Soviet + SubCell: 4 + Dog17: dog + Location: 85,84 + Owner: Soviet + SubCell: 0 + Dog18: dog + Location: 81,84 + Owner: Soviet + SubCell: 1 + Dog19: dog + Location: 86,79 + Owner: Soviet + Facing: 224 + SubCell: 0 + EntranceGuard1: e1 + Location: 100,57 + Owner: Greece + SubCell: 1 + EntranceGuard2: e1 + Location: 99,55 + Owner: Greece + SubCell: 1 + EntranceGuard3: e1 + Location: 100,56 + Owner: Greece + SubCell: 2 + EntranceGuard4: e1 + Location: 98,56 + Owner: Greece + SubCell: 2 + EntranceGuard5: e1 + Location: 98,57 + Owner: Greece + SubCell: 1 + EntranceGuard6: e1 + Location: 99,56 + Owner: Greece + SubCell: 2 + EntranceGuard7: e1 + Location: 97,56 + Owner: Greece + SubCell: 2 + EntranceGuard8: e1 + Location: 99,56 + Owner: Greece + SubCell: 3 + GoalGuard5: e7 + Location: 75,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard1: e1 + Location: 74,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard2: e1 + Location: 73,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard3: e1 + Location: 76,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard4: e1 + Location: 77,54 + Owner: Greece + Facing: 128 + SubCell: 2 + FTurBottom: ftur + Location: 62,79 + Owner: Greece + FTur1Goal: waypoint + Owner: Neutral + Location: 77,53 + FTur2Goal: waypoint + Owner: Neutral + Location: 74,53 + FTurLeft: ftur + Location: 45,50 + Owner: Greece + FTurPrisoners: ftur + Location: 59,64 + Owner: Greece + FTurRight: ftur + Location: 93,64 + Owner: Greece + PBox: pbox + Location: 83,81 + Owner: Greece + PBoxBrl: brl3 + Location: 80,80 + Owner: Creeps + Prisoner1: e6 + Location: 44,46 + Owner: Soviet + Facing: 160 + SubCell: 4 + Prisoner2: e6 + Location: 44,47 + Owner: Soviet + Facing: 128 + SubCell: 4 + Prisoner3: e6 + Location: 46,47 + Owner: Soviet + Facing: 96 + SubCell: 0 + Prisoner4: e6 + Location: 45,47 + Owner: Soviet + Facing: 96 + SubCell: 1 + Prisoner5: e6 + Location: 46,46 + Owner: Soviet + Facing: 128 + SubCell: 3 + Prisoner6: e1 + Location: 46,46 + Owner: Soviet + Health: 51 + SubCell: 4 + PrisonEntranceGuard: e1 + Location: 46,69 + Owner: Greece + Facing: 128 + SubCell: 1 + PrisonerGuard1: e1 + Location: 45,48 + Owner: Greece + SubCell: 0 + PrisonerGuard2: e1 + Location: 46,49 + Owner: Greece + Facing: 128 + SubCell: 0 + PrisonerGuard3: e1 + Location: 44,49 + Owner: Greece + Facing: 128 + SubCell: 0 + RSoldier1: e3 + Owner: Greece + Location: 65,72 + SubCell: 3 + Facing: 92 + TurretFacing: 92 + RSoldier2: e3 + Location: 65,74 + Owner: Greece + Facing: 92 + SubCell: 2 + TurretFacing: 92 + RSoldierTrap1: brl3 + Owner: Creeps + Location: 68,72 + RSoldierTrap2: barl + Owner: Creeps + Location: 68,74 + StartingUnitsSpawn: waypoint + Location: 102,43 + Owner: Neutral + SoldierTrap1: brl3 + Owner: Creeps + Location: 98,50 + SoldierTrap2: barl + Owner: Creeps + Location: 46,71 + SoldierTrap1Waypoint1: waypoint + Location: 102,46 + Owner: Neutral + SoldierTrap1Waypoint2: waypoint + Owner: Neutral + Location: 104,53 + SoldierTrap1Waypoint3: waypoint + Owner: Neutral + Location: 93,72 + SoldierTrap2Waypoint: waypoint + Owner: Neutral + Location: 45,52 + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + -EnemyWatcher: + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: soviet07.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + ^Infantry: + -GivesBounty: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Wall: + Tooltip: + ShowOwnerRow: false + ^Husk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + ^Crate: + Tooltip: + ShowOwnerRow: false + BARL: + Health: + HP: 1 + Explodes: + Weapon: MissionBarrelExplodeInterior + BRL3: + Health: + HP: 1 + Explodes: + Weapon: MissionBarrelExplodeInterior + CAMERA: + RevealsShroud: + Range: 6c0 + E1: + Armament@PRIMARY: + Weapon: M1CarbineInterior + FTUR: + Armament: + Weapon: FireballLauncherInterior + LocalOffset: 512,0,0 + Valued: + Cost: 0 + Power: + Amount: 0 + -Sellable: + PBOX: + -AutoTarget: + +Sequences: + +VoxelSequences: + +Weapons: + M1CarbineInterior: + ReloadDelay: 20 + Range: 3c0 + Report: GUN11.AUD + Projectile: Bullet + Speed: 1c682 + Warhead@1Dam: SpreadDamage + Spread: 128 + Damage: 15 + Versus: + Wood: 25 + Light: 30 + Heavy: 10 + Concrete: 10 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@2Eff: CreateEffect + Explosion: piffs + InvalidImpactTypes: Water + Warhead@3EffWater: CreateEffect + Explosion: water_piffs + ValidImpactTypes: Water + FireballLauncherInterior: + ReloadDelay: 65 + Range: 3c0 + Burst: 2 + BurstDelay: 20 + Projectile: Bullet + Speed: 204 + Trail: fb2 + Image: FB1 + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: 150 + Versus: + None: 90 + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 50 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + Warhead@3Eff: CreateEffect + Explosion: napalm + ImpactSound: firebl3.aud + MissionBarrelExplodeInterior: + Warhead@1Dam: SpreadDamage + Spread: 350 + Damage: 250 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 5 + Versus: + None: 120 + Wood: 200 + Light: 50 + Heavy: 25 + Concrete: 10 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + Size: 2,1 + Delay: 5 + Warhead@3Eff: CreateEffect + Explosion: napalm + ImpactSound: firebl3.aud + Delay: 5 + +Voices: + +Notifications: + +Translations: diff --git a/mods/ra/maps/soviet-07/soviet07.lua b/mods/ra/maps/soviet-07/soviet07.lua new file mode 100644 index 0000000000..3a07ea1c8b --- /dev/null +++ b/mods/ra/maps/soviet-07/soviet07.lua @@ -0,0 +1,302 @@ +if Map.Difficulty == "Easy" then + remainingTime = DateTime.Minutes(7) +elseif Map.Difficulty == "Normal" then + remainingTime = DateTime.Minutes(6) +elseif Map.Difficulty == "Hard" then + remainingTime = DateTime.Minutes(5) +end + +Dogs = { Dog1, Dog2, Dog3, Dog4, Dog5, Dog6, Dog7, Dog8, Dog9, Dog10, Dog11, Dog12, Dog13, Dog14, Dog15, Dog16, Dog17, Dog18, Dog19 } +Engineers = { Prisoner1, Prisoner2, Prisoner3, Prisoner4, Prisoner5 } +PrisonerGuards = { PrisonerGuard1, PrisonerGuard2, PrisonerGuard3 } +EntranceGuards = { EntranceGuard1, EntranceGuard2, EntranceGuard3, EntranceGuard4, EntranceGuard5, EntranceGuard6, EntranceGuard7, EntranceGuard8, EntranceGuard9, EntranceGuard10 } +GoalGuards = { GoalGuard1, GoalGuard2, GoalGuard3, GoalGuard4, GoalGuard5 } +CCGuards = { CCGuard1, CCGuard2, CCGuard3, CCGuard4 } +StartingUnitsReinforcements = { "e1", "e1", "e1", "e1" } + +CameraCCTrigger = { CPos.New(83, 71), CPos.New(84,71) } +CameraGoalCenterTrigger = { CPos.New(74, 66), CPos.New(75, 66), CPos.New(76, 66), CPos.New(77, 66) } +CameraGoalLeftTrigger = { CPos.New(62, 59), CPos.New(62, 60), CPos.New(62, 62), CPos.New(62, 63) } +CameraGoalRightTrigger = { CPos.New(90, 59), CPos.New(90, 60), CPos.New(90, 62), CPos.New(90, 63) } +ControlCenterTrigger = { CPos.New(87, 67), CPos.New(88, 67) } +ControlCenterEngineerTrigger = { CPos.New(87, 67), CPos.New(88, 67) } +FTurBottomTrigger = { CPos.New(67, 82), CPos.New(67, 83) } +FTurLeftTrigger = { CPos.New(57, 70), CPos.New(58, 70), CPos.New(59, 70), CPos.New(60, 70) } +FTurRightTrigger = { CPos.New(97, 68), CPos.New(97, 69), CPos.New(97, 70) } +GoalCenterTrigger = { CPos.New(73, 52), CPos.New(74, 52), CPos.New(75, 52), CPos.New(76, 52), CPos.New(77, 52), CPos.New(78, 52) } +GoalLeft1Trigger = { CPos.New(65, 58), CPos.New(66, 58), CPos.New(67, 58), CPos.New(65, 59), CPos.New(66, 59), CPos.New(67, 59) } +GoalLeft2Trigger = { CPos.New(65, 64), CPos.New(66, 64), CPos.New(67, 64), CPos.New(65, 65), CPos.New(66, 65), CPos.New(67, 65) } +GoalRight1Trigger = { CPos.New(86, 57), CPos.New(87, 57), CPos.New(88, 57), CPos.New(86, 58), CPos.New(87, 58), CPos.New(88, 58) } +GoalRight2Trigger = { CPos.New(86, 64), CPos.New(87, 64), CPos.New(88, 64), CPos.New(86, 65), CPos.New(87, 65), CPos.New(88, 65) } +RSoldierTrapTrigger = { CPos.New(72, 72), CPos.New(72,73), CPos.New(72,74) } +SoldierTrap2Trigger = { CPos.New(51, 73), CPos.New(51, 74) } + +Trigger.OnEnteredFootprint(CameraCCTrigger, function(a, id) + if not cameraCCTrigger and a.Owner == player then + cameraCCTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraCC.Location }) + end +end) + +Trigger.OnEnteredFootprint(CameraGoalCenterTrigger, function(a, id) + if not cameraGoalCenterTrigger and a.Owner == player then + cameraGoalCenterTrigger = true + if not controlCenterEngineerTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter2.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter3.Location }) + end + end +end) + +Trigger.OnEnteredFootprint(CameraGoalLeftTrigger, function(a, id) + if not cameraGoalLeftTrigger and a.Owner == player then + cameraGoalLeftTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraGoalLeft1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalLeft2.Location }) + end +end) + +Trigger.OnEnteredFootprint(CameraGoalRightTrigger, function(a, id) + if not cameraGoalRightTrigger and a.Owner == player then + cameraGoalRightTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraGoalRight1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalRight2.Location }) + end +end) + +Trigger.OnEnteredFootprint(ControlCenterTrigger, function(a, id) + if not controlCenterTrigger and a.Owner == player and a.Type == "e1" then + controlCenterTrigger = true + FTurPrisoners.Kill() + FTurLeft.Kill() + FTurRight.Kill() + FTurBottom.Kill() + player.MarkCompletedObjective(sovietObjective1) + end +end) + +Trigger.OnEnteredFootprint(ControlCenterEngineerTrigger, function(a, id) + if not controlCenterEngineerTrigger and a.Owner == player and a.Type == "e6" then + controlCenterEngineerTrigger = true + Actor.Create("ftur", true, { Owner = player, Location = FTur1Goal.Location}) + Actor.Create("ftur", true, { Owner = player, Location = FTur2Goal.Location}) + Camera.Position = CameraGoalCenter1.CenterPosition + if not cameraGoalRightTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter2.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter3.Location }) + end + Utils.Do(GoalGuards, function(actor) + if not actor.IsDead then + actor.AttackMove(FTur1Goal.Location) + end + end) + player.MarkCompletedObjective(sovietObjective4) + end +end) + +Trigger.OnEnteredFootprint(FTurBottomTrigger, function(a, id) + if not fTurBottomTrigger and a.Owner == player then + fTurBottomTrigger = true + if not rSoldierTrapTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraRSoldier.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraFTurBottom.Location }) + end + end +end) + +Trigger.OnEnteredFootprint(FTurLeftTrigger, function(a, id) + if not fTurLeftTrigger and a.Owner == player then + fTurLeftTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraFTurLeft.Location }) + end +end) + +Trigger.OnEnteredFootprint(FTurRightTrigger, function(a, id) + if not fTurRightTrigger and a.Owner == player then + fTurRightTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraFTurRight.Location }) + end +end) + +Trigger.OnEnteredFootprint(GoalCenterTrigger, function(a, id) + if not goalCenterTrigger and a.Owner == player and a.Type == "e6" then + goalCenterTrigger = true + player.MarkCompletedObjective(sovietObjective5) + end +end) + +Trigger.OnEnteredFootprint(GoalLeft1Trigger, function(a, id) + if not goalLeft1Trigger and a.Owner == player and a.Type == "e6" then + goalLeft1Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(GoalLeft2Trigger, function(a, id) + if not goalLeft2Trigger and a.Owner == player and a.Type == "e6" then + goalLeft2Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(GoalRight1Trigger, function(a, id) + if not goalRight1Trigger and a.Owner == player and a.Type == "e6" then + goalRight1Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(GoalRight2Trigger, function(a, id) + if not goalRight2Trigger and a.Owner == player and a.Type == "e6" then + goalRight2Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(RSoldierTrapTrigger, function(a, id) + if not rSoldierTrapTrigger and a.Owner == player then + rSoldierTrapTrigger = true + if not fTurBottomTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraRSoldier.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraFTurBottom.Location }) + end + if not RSoldier1.IsDead and not RSoldierTrap1.IsDead then + RSoldier1.Attack(RSoldierTrap1) + end + if not RSoldier2.IsDead and not RSoldierTrap2.IsDead then + RSoldier2.Attack(RSoldierTrap2) + end + end +end) + +Trigger.OnEnteredFootprint(SoldierTrap2Trigger, function(a, id) + if not soldierTrap2Trigger and a.Owner == player then + soldierTrap2Trigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraSoldierTrap2.Location }) + if not SoldierTrap2.IsDead then + PrisonEntranceGuard.Attack(SoldierTrap2) + end + PrisonEntranceGuard.Move(SoldierTrap2Waypoint.Location) + end +end) + +Trigger.OnAllKilled(Engineers, function() + enemy.MarkCompletedObjective(alliedObjective) +end) + +Trigger.OnAllKilled(PrisonerGuards, function() + Utils.Do(Engineers, function(actor) + actor.Owner = player + end) + Prisoner6.Owner = player + player.MarkCompletedObjective(sovietObjective2) +end) + +Trigger.OnKilled(BarlCC, function() + if not cameraCCTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraCC.Location }) + cameraCCTrigger = true + end + Utils.Do(CCGuards, function(actor) + if not actor.IsDead then + actor.Hunt() + end + end) +end) + +Trigger.OnKilled(PBoxBrl, function() + PBox.Kill() + Utils.Do(Dogs, function(actor) + actor.Owner = player + end) + player.MarkCompletedObjective(sovietObjective6) +end) + +Trigger.OnKilled(PrisonEntranceGuard, function() + if controlCenterTrigger then + Utils.Do(PrisonerGuards, function(actor) + if not actor.IsDead then + actor.Hunt() + end + end) + end +end) + +IntroSequence = function() + StartingUnits = Reinforcements.Reinforce(player, StartingUnitsReinforcements, { StartingUnitsSpawn.Location, SoldierTrap1Waypoint1.Location }, 0) + Trigger.AfterDelay(DateTime.Seconds(3), function() + Utils.Do(EntranceGuards, function(actor) + if not SoldierTrap1.IsDead then + actor.Attack(SoldierTrap1) + end + actor.AttackMove(SoldierTrap1Waypoint1.Location) + actor.AttackMove(SoldierTrap1Waypoint2.Location) + actor.AttackMove(SoldierTrap1Waypoint3.Location) + end) + Media.PlaySpeechNotification(player, "TimerStarted") + timerStarted = true + end) + Trigger.OnAllKilled(StartingUnits, function() + enemy.MarkCompletedObjective(alliedObjective) + end) +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("Greece") + Camera.Position = SoldierTrap1Waypoint1.CenterPosition + Actor.Create("camera", true, { Owner = player, Location = CameraStart1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraStart2.Location }) + IntroSequence() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective1 = player.AddPrimaryObjective("Deactivate the security system.") + sovietObjective2 = player.AddPrimaryObjective("Rescue the engineers.") + sovietObjective3 = player.AddPrimaryObjective("Get the engineers to the coolant stations.") + sovietObjective4 = player.AddPrimaryObjective("Use an Engineer to reprogram the security system.") + sovietObjective5 = player.AddPrimaryObjective("Get an Engineer to the reactor core.") + sovietObjective6 = player.AddSecondaryObjective("Free the dogs.") +end + +Tick = function() + if player.HasNoRequiredUnits() and timerStarted then + enemy.MarkCompletedObjective(alliedObjective) + end + if remainingTime == DateTime.Minutes(5) and Map.Difficulty ~= "Hard" then + Media.PlaySpeechNotification(player, "WarningFiveMinutesRemaining") + elseif remainingTime == DateTime.Minutes(4) then + Media.PlaySpeechNotification(player, "WarningFourMinutesRemaining") + elseif remainingTime == DateTime.Minutes(3) then + Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining") + elseif remainingTime == DateTime.Minutes(2) then + Media.PlaySpeechNotification(player, "WarningTwoMinutesRemaining") + elseif remainingTime == DateTime.Minutes(1) then + Media.PlaySpeechNotification(player, "WarningOneMinuteRemaining") + end + if goalLeft1Trigger and goalLeft2Trigger and goalRight1Trigger and goalRight2Trigger then + player.MarkCompletedObjective(sovietObjective3) + end + if remainingTime > 0 and timerStarted then + UserInterface.SetMissionText("Time until Meltdown: " .. Utils.FormatTime(remainingTime), player.Color) + remainingTime = remainingTime - 1 + elseif remainingTime == 0 then + UserInterface.SetMissionText("") + enemy.MarkCompletedObjective(alliedObjective) + end +end \ No newline at end of file diff --git a/mods/ra/missions.yaml b/mods/ra/missions.yaml index f287f01db1..2a50e68f3c 100644 --- a/mods/ra/missions.yaml +++ b/mods/ra/missions.yaml @@ -10,3 +10,4 @@ Soviet Campaign: ./mods/ra/maps/soviet-04a ./mods/ra/maps/soviet-04b ./mods/ra/maps/soviet-05 + ./mods/ra/maps/soviet-07