diff --git a/mods/cnc/maps/nod10b/map.bin b/mods/cnc/maps/nod10b/map.bin new file mode 100644 index 000000000000..69aa73001631 Binary files /dev/null and b/mods/cnc/maps/nod10b/map.bin differ diff --git a/mods/cnc/maps/nod10b/map.png b/mods/cnc/maps/nod10b/map.png new file mode 100644 index 000000000000..c7c4b88e9c5c Binary files /dev/null and b/mods/cnc/maps/nod10b/map.png differ diff --git a/mods/cnc/maps/nod10b/map.yaml b/mods/cnc/maps/nod10b/map.yaml new file mode 100644 index 000000000000..23d7523f069f --- /dev/null +++ b/mods/cnc/maps/nod10b/map.yaml @@ -0,0 +1,722 @@ +MapFormat: 11 + +RequiresMod: cnc + +Title: 10b: Destroy the Mammoth Tank Facility + +Author: Westwood Studios + +Tileset: DESERT + +MapSize: 64,64 + +Bounds: 5,8,56,51 + +Visibility: MissionSelector + +Categories: Campaign + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: gdi + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: Random + PlayerReference@GDI: + Name: GDI + Faction: gdi + Color: F6D679 + Enemies: Nod + PlayerReference@Nod: + Name: Nod + AllowBots: False + Playable: True + Required: True + Faction: nod + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: GDI +Actors: + Actor0: brik + Location: 38,55 + Owner: Neutral + Actor1: brik + Location: 37,55 + Owner: Neutral + Actor2: brik + Location: 36,55 + Owner: Neutral + Actor3: brik + Location: 35,55 + Owner: Neutral + Actor4: brik + Location: 34,55 + Owner: Neutral + Actor5: brik + Location: 33,55 + Owner: Neutral + Actor6: brik + Location: 32,55 + Owner: Neutral + Actor7: brik + Location: 31,55 + Owner: Neutral + Actor8: brik + Location: 30,55 + Owner: Neutral + Actor9: brik + Location: 29,55 + Owner: Neutral + Actor10: brik + Location: 28,55 + Owner: Neutral + Actor11: brik + Location: 27,55 + Owner: Neutral + Actor12: brik + Location: 26,55 + Owner: Neutral + Actor13: brik + Location: 25,55 + Owner: Neutral + Actor14: brik + Location: 24,55 + Owner: Neutral + Actor15: brik + Location: 23,55 + Owner: Neutral + Actor16: brik + Location: 22,55 + Owner: Neutral + Actor17: brik + Location: 21,55 + Owner: Neutral + Actor18: brik + Location: 20,55 + Owner: Neutral + Actor19: brik + Location: 19,55 + Owner: Neutral + Actor20: brik + Location: 18,55 + Owner: Neutral + Actor21: brik + Location: 17,55 + Owner: Neutral + Actor22: brik + Location: 38,54 + Owner: Neutral + Actor23: brik + Location: 37,54 + Owner: Neutral + Actor24: cycl + Location: 30,54 + Owner: Neutral + Actor25: cycl + Location: 29,54 + Owner: Neutral + Actor26: cycl + Location: 28,54 + Owner: Neutral + Actor27: cycl + Location: 27,54 + Owner: Neutral + Actor28: cycl + Location: 26,54 + Owner: Neutral + Actor29: cycl + Location: 25,54 + Owner: Neutral + Actor30: cycl + Location: 24,54 + Owner: Neutral + Actor31: cycl + Location: 23,54 + Owner: Neutral + Actor32: brik + Location: 17,54 + Owner: Neutral + Actor33: brik + Location: 38,53 + Owner: Neutral + Actor34: cycl + Location: 30,53 + Owner: Neutral + Actor35: cycl + Location: 23,53 + Owner: Neutral + Actor36: brik + Location: 17,53 + Owner: Neutral + Actor37: brik + Location: 38,52 + Owner: Neutral + Actor38: cycl + Location: 30,52 + Owner: Neutral + Actor39: cycl + Location: 23,52 + Owner: Neutral + Actor40: brik + Location: 17,52 + Owner: Neutral + Actor41: brik + Location: 38,51 + Owner: Neutral + Actor42: cycl + Location: 30,51 + Owner: Neutral + Actor43: cycl + Location: 23,51 + Owner: Neutral + Actor44: brik + Location: 18,51 + Owner: Neutral + Actor45: brik + Location: 17,51 + Owner: Neutral + Actor46: brik + Location: 38,50 + Owner: Neutral + Actor47: cycl + Location: 30,50 + Owner: Neutral + Actor48: cycl + Location: 29,50 + Owner: Neutral + Actor49: cycl + Location: 28,50 + Owner: Neutral + Actor50: cycl + Location: 25,50 + Owner: Neutral + Actor51: cycl + Location: 24,50 + Owner: Neutral + Actor52: cycl + Location: 23,50 + Owner: Neutral + Actor53: brik + Location: 18,50 + Owner: Neutral + Actor54: brik + Location: 17,50 + Owner: Neutral + Actor55: brik + Location: 38,49 + Owner: Neutral + Actor56: brik + Location: 38,48 + Owner: Neutral + Actor57: brik + Location: 37,48 + Owner: Neutral + Actor58: brik + Location: 38,47 + Owner: Neutral + Actor59: brik + Location: 37,47 + Owner: Neutral + Actor60: brik + Location: 36,47 + Owner: Neutral + Actor61: brik + Location: 35,47 + Owner: Neutral + Actor62: brik + Location: 18,47 + Owner: Neutral + Actor63: brik + Location: 17,47 + Owner: Neutral + Actor64: brik + Location: 35,46 + Owner: Neutral + Actor65: brik + Location: 18,46 + Owner: Neutral + Actor66: brik + Location: 17,46 + Owner: Neutral + Actor67: brik + Location: 35,45 + Owner: Neutral + Actor68: brik + Location: 17,45 + Owner: Neutral + Actor69: brik + Location: 35,44 + Owner: Neutral + Actor70: brik + Location: 17,44 + Owner: Neutral + Actor71: brik + Location: 35,43 + Owner: Neutral + Actor72: brik + Location: 17,43 + Owner: Neutral + Actor73: brik + Location: 35,42 + Owner: Neutral + Actor74: brik + Location: 34,42 + Owner: Neutral + Actor75: brik + Location: 29,42 + Owner: Neutral + Actor76: brik + Location: 28,42 + Owner: Neutral + Actor77: brik + Location: 23,42 + Owner: Neutral + Actor78: brik + Location: 22,42 + Owner: Neutral + Actor79: brik + Location: 18,42 + Owner: Neutral + Actor80: brik + Location: 17,42 + Owner: Neutral + Actor81: brik + Location: 35,41 + Owner: Neutral + Actor82: brik + Location: 34,41 + Owner: Neutral + Actor83: brik + Location: 33,41 + Owner: Neutral + Actor84: brik + Location: 32,41 + Owner: Neutral + Actor85: brik + Location: 31,41 + Owner: Neutral + Actor86: brik + Location: 30,41 + Owner: Neutral + Actor87: brik + Location: 29,41 + Owner: Neutral + Actor88: brik + Location: 28,41 + Owner: Neutral + Actor89: brik + Location: 23,41 + Owner: Neutral + Actor90: brik + Location: 22,41 + Owner: Neutral + Actor91: brik + Location: 21,41 + Owner: Neutral + Actor92: brik + Location: 20,41 + Owner: Neutral + Actor93: brik + Location: 19,41 + Owner: Neutral + Actor94: brik + Location: 18,41 + Owner: Neutral + Actor95: brik + Location: 17,41 + Owner: Neutral + Actor96: t18 + Location: 43,54 + Owner: Neutral + Actor97: t08 + Location: 42,56 + Owner: Neutral + Actor98: t18 + Location: 5,29 + Owner: Neutral + Actor99: t18 + Location: 13,31 + Owner: Neutral + Actor100: t18 + Location: 17,18 + Owner: Neutral + Actor101: t18 + Location: 30,15 + Owner: Neutral + Actor102: t18 + Location: 57,12 + Owner: Neutral + Actor103: t18 + Location: 36,23 + Owner: Neutral + Actor104: t18 + Location: 18,55 + Owner: Neutral + Actor105: t18 + Location: 35,45 + Owner: Neutral + Actor106: t18 + Location: 42,48 + Owner: Neutral + Actor107: t18 + Location: 54,48 + Owner: Neutral + Actor108: t08 + Location: 57,48 + Owner: Neutral + Actor109: t08 + Location: 57,51 + Owner: Neutral + Actor110: t08 + Location: 53,50 + Owner: Neutral + Actor111: t08 + Location: 54,51 + Owner: Neutral + Actor112: t08 + Location: 49,50 + Owner: Neutral + Actor113: t08 + Location: 48,49 + Owner: Neutral + Actor114: t08 + Location: 51,53 + Owner: Neutral + Actor115: t08 + Location: 46,52 + Owner: Neutral + Silo1: silo + Location: 22,43 + Owner: GDI + Silo2: silo + Location: 23,45 + Owner: GDI + WeaponsFactory: weap + Location: 35,49 + Owner: GDI + Actor119: v20 + Location: 56,46 + Owner: Neutral + Actor120: v21 + Location: 54,47 + Owner: Neutral + Actor121: v22 + Location: 48,47 + Owner: Neutral + Actor122: v23 + Location: 52,44 + Owner: Neutral + Actor123: v24 + Location: 57,48 + Owner: Neutral + Actor124: v25 + Location: 57,51 + Owner: Neutral + Actor125: v26 + Location: 47,50 + Owner: Neutral + Actor126: v27 + Location: 50,50 + Owner: Neutral + Actor127: v27 + Location: 51,50 + Owner: Neutral + Actor128: v27 + Location: 59,49 + Owner: Neutral + Actor129: v30 + Location: 59,52 + Owner: Neutral + Actor130: v31 + Location: 43,47 + Owner: Neutral + Actor131: v32 + Location: 42,48 + Owner: Neutral + Actor132: v20 + Location: 47,51 + Owner: Neutral + Actor133: v21 + Location: 52,51 + Owner: Neutral + Actor134: v22 + Location: 54,52 + Owner: Neutral + Actor135: v23 + Location: 44,48 + Owner: Neutral + Actor136: v24 + Location: 46,48 + Owner: Neutral + Actor137: v26 + Location: 54,50 + Owner: Neutral + CommCenter: hq + Location: 30,42 + Owner: GDI + ConYard: fact + Location: 32,44 + Owner: GDI + PowerPlant1: nuke + Location: 33,47 + Owner: GDI + PowerPlant2: nuke + Location: 18,43 + Owner: GDI + PowerPlant3: nuke + Location: 35,52 + Owner: GDI + PowerPlant4: nuke + Location: 20,42 + Owner: GDI + Barracks: pyle + Location: 30,45 + Owner: GDI + PowerPlant5: nuke + Location: 18,52 + Owner: GDI + GuardTower1: gtwr + Location: 23,40 + Owner: GDI + GuardTower2: gtwr + Location: 28,40 + Owner: GDI + Actor148: jeep + Location: 56,17 + Owner: GDI + Facing: 159 + Mammoth1: htnk + Location: 29,53 + Owner: GDI + Mammoth2: htnk + Location: 26,52 + Owner: GDI + Mammoth3: htnk + Location: 24,53 + Owner: GDI + PatrollingMammoth: htnk + Location: 59,42 + Owner: GDI + Facing: 31 + Actor153: arty + Location: 27,28 + Owner: Nod + MediumTank1: mtnk + Location: 43,28 + Owner: GDI + Facing: 191 + MediumTank2: mtnk + Location: 43,29 + Owner: GDI + Facing: 191 + Rifleman1: e1 + Location: 16,54 + Owner: GDI + SubCell: 3 + Rifleman2: e1 + Location: 16,54 + Owner: GDI + SubCell: 1 + Rifleman3: e1 + Location: 16,54 + Owner: GDI + SubCell: 2 + Rifleman4: e1 + Location: 16,54 + Owner: GDI + SubCell: 4 + Actor160: e1 + Location: 17,14 + Owner: GDI + Facing: 191 + SubCell: 3 + Actor161: e1 + Location: 17,15 + Owner: GDI + Facing: 191 + SubCell: 1 + Actor162: e1 + Location: 17,15 + Owner: GDI + Facing: 191 + SubCell: 2 + Actor163: e1 + Location: 17,14 + Owner: GDI + Facing: 191 + SubCell: 4 + Actor164: e2 + Location: 15,28 + Owner: GDI + SubCell: 2 + Actor165: e2 + Location: 15,28 + Owner: GDI + SubCell: 1 + Actor166: e2 + Location: 15,28 + Owner: GDI + SubCell: 3 + Actor167: e2 + Location: 15,28 + Owner: GDI + SubCell: 4 + Actor168: e2 + Location: 36,9 + Owner: GDI + Facing: 159 + SubCell: 4 + Actor169: e2 + Location: 36,9 + Owner: GDI + Facing: 159 + SubCell: 3 + Actor170: e2 + Location: 32,16 + Owner: GDI + SubCell: 1 + Actor171: e2 + Location: 32,16 + Owner: GDI + SubCell: 2 + Actor172: e2 + Location: 57,18 + Owner: GDI + Facing: 159 + SubCell: 2 + Actor173: e2 + Location: 57,18 + Owner: GDI + Facing: 159 + SubCell: 0 + Actor174: c8 + Location: 57,54 + Owner: Neutral + SubCell: 0 + Actor175: c3 + Location: 56,49 + Owner: Neutral + Facing: 95 + SubCell: 2 + Actor176: c4 + Location: 56,49 + Owner: Neutral + Facing: 223 + SubCell: 3 + Actor177: e3 + Location: 26,27 + Owner: Nod + SubCell: 1 + Actor178: e3 + Location: 26,27 + Owner: Nod + SubCell: 3 + Actor179: e3 + Location: 26,27 + Owner: Nod + SubCell: 2 + Actor180: e3 + Location: 26,27 + Owner: Nod + SubCell: 4 + Actor181: e3 + Location: 28,27 + Owner: Nod + SubCell: 2 + Actor182: e3 + Location: 29,27 + Owner: Nod + SubCell: 1 + Actor183: e3 + Location: 29,27 + Owner: Nod + SubCell: 3 + Actor184: e3 + Location: 28,27 + Owner: Nod + SubCell: 4 + Actor185: e6 + Location: 27,27 + Owner: Nod + SubCell: 2 + Actor186: e3 + Location: 29,45 + Owner: GDI + SubCell: 3 + Actor187: e3 + Location: 29,45 + Owner: GDI + SubCell: 4 + Grenadier1: e2 + Location: 40,19 + Owner: GDI + Facing: 191 + SubCell: 2 + Grenadier2: e2 + Location: 40,18 + Owner: GDI + Facing: 191 + SubCell: 4 + Grenadier3: e2 + Location: 41,19 + Owner: GDI + Facing: 191 + SubCell: 1 + Grenadier4: e2 + Location: 41,18 + Owner: GDI + Facing: 191 + SubCell: 3 + Actor192: e3 + Location: 19,51 + Owner: GDI + SubCell: 2 + Actor193: e3 + Location: 20,51 + Owner: GDI + SubCell: 1 + Actor194: e3 + Location: 37,52 + Owner: GDI + Facing: 31 + SubCell: 4 + Actor195: e3 + Location: 33,54 + Owner: GDI + SubCell: 4 + Actor196: e3 + Location: 34,54 + Owner: GDI + SubCell: 3 + DefaultCameraPosition: waypoint + Location: 20,21 + Owner: Neutral + ChinookEntry: waypoint + Location: 20, 8 + Owner: Neutral + ChinookTarget: waypoint + Location: 27,25 + Owner: Neutral + MammothWaypoint1: waypoint + Location: 9,37 + Owner: Neutral + MammothWaypoint2: waypoint + Location: 54,14 + Owner: Neutral + NorthEntrance: waypoint + Location: 29,36 + Owner: Neutral + RiflemenWaypoint1: waypoint + Location: 16,41 + Owner: Neutral + RiflemenWaypoint2: waypoint + Location: 16,54 + Owner: Neutral + +Rules: cnc|rules/campaign-maprules.yaml, cnc|rules/campaign-tooltips.yaml, cnc|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/cnc/maps/nod10b/nod10b.lua b/mods/cnc/maps/nod10b/nod10b.lua new file mode 100644 index 000000000000..b73913bf5b1d --- /dev/null +++ b/mods/cnc/maps/nod10b/nod10b.lua @@ -0,0 +1,167 @@ +--[[ + 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. +]] + +if Map.LobbyOption("difficulty") == "easy" then + Rambo = "rmbo.easy" +elseif Map.LobbyOption("difficulty") == "hard" then + Rambo = "rmbo.hard" +else + Rambo = "rmbo" +end + +GDIBuildings = {ConYard, PowerPlant1, PowerPlant2, PowerPlant3, PowerPlant4, PowerPlant5, Barracks, +Silo1, Silo2, WeaponsFactory, CommCenter, GuardTower1, GuardTower2} + + +function RepairBuilding(building, attacker) + if not building.IsDead and building.Owner == enemy then + building.StartBuildingRepairs(enemy) + end +end + + +Mammoths = {Mammoth1, Mammoth2, Mammoth3} +Grenadiers = {Grenadier1, Grenadier2, Grenadier3, Grenadier4} +MediumTanks = {MediumTank1, MediumTank2} +Riflemen = {Rifleman1, Rifleman2, Rifleman3, Rifleman4} + +MammothPatrolPath = {MammothWaypoint1.Location, MammothWaypoint2.Location} +RiflemenPatrolPath = {RiflemenWaypoint1.Location, RiflemenWaypoint2.Location} + +DamageTrigger = false + + +function TankDamaged(tank, attacker) + if not DamageTrigger then + DamageTrigger = true + Utils.Do(Grenadiers, function(grenadier) + if not grenadier.IsDead then + grenadier.AttackMove(tank.Location) + end + end) + end +end + + +function GrenadierDamaged(grenadier, attacker) + if not DamageTrigger then + DamageTrigger = true + Utils.Do(MediumTanks, function(tank) + if not tank.IsDead then + tank.AttackMove(grenadier.Location) + end + end) + end +end + + +InfantrySquad = {"e1", "e1", "e1", "e1", "e1"} + + +function MoveToNorthEntrance(squad) + Utils.Do(squad, function(unit) + if not unit.IsDead then + unit.AttackMove(NorthEntrance.Location) + end + end) +end + + +function EnteredFromNorth(actor, id) + if actor.Owner == player then + Trigger.RemoveFootprintTrigger(id) + if not Barracks.IsDead and Barracks.Owner == enemy then + Barracks.Build(InfantrySquad, MoveToNorthEntrance) + end + end +end + + +function DeliverCommando() + Media.PlaySpeechNotification(player, "Reinforce") + units = Reinforcements.ReinforceWithTransport(player, 'tran.in', {Rambo}, {ChinookEntry.Location, ChinookTarget.Location}, {ChinookEntry.Location}) + rambo = units[2][1] + Trigger.OnKilled(rambo, function(a, k) + player.MarkFailedObjective(keepRamboAliveObjective) + end) +end + + +function WorldLoaded() + player = Player.GetPlayer("Nod") + enemy = Player.GetPlayer("GDI") + + enemy.Cash = 10000 + + Camera.Position = DefaultCameraPosition.CenterPosition + 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) + + gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area.") + warFactoryObjective = player.AddPrimaryObjective("Destroy or capture the Weapons Factory.") + destroyTanksObjective = player.AddPrimaryObjective("Destroy the Mammoth tanks in the R&D base.") + keepRamboAliveObjective = player.AddSecondaryObjective("Keep your Commando alive.") + + Trigger.OnKilledOrCaptured(WeaponsFactory, function() + player.MarkCompletedObjective(warFactoryObjective) + end) + Trigger.OnAllKilled(Mammoths, function() + player.MarkCompletedObjective(destroyTanksObjective) + end) + + Trigger.AfterDelay(DateTime.Seconds(1), DeliverCommando) + + Utils.Do(Mammoths, function(mammoth) + mammoth.Stance = "HoldFire" + end) + + Utils.Do(MediumTanks, function(tank) + Trigger.OnDamaged(tank, TankDamaged) + end) + + Utils.Do(Grenadiers, function(grenadier) + Trigger.OnDamaged(grenadier, GrenadierDamaged) + end) + + Utils.Do(GDIBuildings, function(building) + Trigger.OnDamaged(building, RepairBuilding) + end) + + Trigger.OnEnteredFootprint({NorthEntrance.Location}, EnteredFromNorth) + + Utils.Do(Riflemen, function(rifleman) + rifleman.Patrol(RiflemenPatrolPath) + end) + + PatrollingMammoth.Patrol(MammothPatrolPath) +end + + +function Tick() + if DateTime.GameTime > 2 then + if player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(gdiObjective) + end + end +end diff --git a/mods/cnc/maps/nod10b/rules.yaml b/mods/cnc/maps/nod10b/rules.yaml new file mode 100644 index 000000000000..ebe6e8f1bcb1 --- /dev/null +++ b/mods/cnc/maps/nod10b/rules.yaml @@ -0,0 +1,54 @@ +World: + LuaScript: + Scripts: nod10b.lua + MissionData: + Briefing: GDI is developing a new, heavily armored tank. Our spies have located the GDI R&D base.\n\nUse your small strike force to locate and penetrate the center. Be sure to destroy the tanks in the base and the factory. + BackgroundVideo: kanepre.vqa + LossVideo: deskill.vqa + WinVideo: tankkill.vqa + BriefingVideo: nod10b.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + -LegacyBridgeLayer: + +Player: + PlayerResources: + DefaultCash: 0 + +TRAN.IN: + Inherits: TRAN + RejectsOrders: + -Selectable: + RenderSprites: + Image: TRAN + Buildable: + Prerequisites: ~disabled + Interactable: + -RevealsShroud: + +RMBO.easy: + Inherits: RMBO + Health: + HP: 30000 + SelfHealing: + Step: 500 + Delay: 10 + HealIfBelow: 50 + DamageCooldown: 200 + RenderSprites: + Image: RMBO + +RMBO.hard: + Inherits: RMBO + -AutoTarget: + -AutoTargetPriority@DEFAULT: + -AutoTargetPriority@ATTACKANYTHING: + -AttackMove: + RenderSprites: + Image: RMBO diff --git a/mods/cnc/missions.yaml b/mods/cnc/missions.yaml index e5a597d0ef9a..e5c15be2bbf3 100644 --- a/mods/cnc/missions.yaml +++ b/mods/cnc/missions.yaml @@ -28,6 +28,7 @@ Nod Campaign: ./mods/cnc/maps/nod08a ./mods/cnc/maps/nod08b ./mods/cnc/maps/nod09 + ./mods/cnc/maps/nod10b Funpark Campaign: ./mods/cnc/maps/funpark01