From 3f8f688918b0ed61c10d9b51b625ff6b22284a9b Mon Sep 17 00:00:00 2001 From: Biofreak1987 Date: Mon, 16 May 2016 22:56:11 +0200 Subject: [PATCH] Add nod09 --- OpenRA.sln | 2 + mods/cnc/maps/nod09/map.bin | Bin 0 -> 20497 bytes mods/cnc/maps/nod09/map.png | Bin 0 -> 38091 bytes mods/cnc/maps/nod09/map.yaml | 886 +++++++++++++++++++++++++++++++ mods/cnc/maps/nod09/nod09-AI.lua | 220 ++++++++ mods/cnc/maps/nod09/nod09.lua | 276 ++++++++++ mods/cnc/maps/nod09/rules.yaml | 192 +++++++ mods/cnc/maps/nod09/weapons.yaml | 2 + mods/cnc/missions.yaml | 1 + 9 files changed, 1579 insertions(+) create mode 100644 mods/cnc/maps/nod09/map.bin create mode 100644 mods/cnc/maps/nod09/map.png create mode 100644 mods/cnc/maps/nod09/map.yaml create mode 100644 mods/cnc/maps/nod09/nod09-AI.lua create mode 100644 mods/cnc/maps/nod09/nod09.lua create mode 100644 mods/cnc/maps/nod09/rules.yaml create mode 100644 mods/cnc/maps/nod09/weapons.yaml diff --git a/OpenRA.sln b/OpenRA.sln index 5da7941277..a5512bf76d 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -52,6 +52,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts", mods\cnc\maps\nod08a\nod08a.lua = mods\cnc\maps\nod08a\nod08a.lua mods\cnc\maps\nod08b\nod08b-AI.lua = mods\cnc\maps\nod08b\nod08b-AI.lua mods\cnc\maps\nod08b\nod08b.lua = mods\cnc\maps\nod08b\nod08b.lua + mods\cnc\maps\nod09\nod09-AI.lua = mods\cnc\maps\nod09\nod09-AI.lua + mods\cnc\maps\nod09\nod09.lua = mods\cnc\maps\nod09\nod09.lua mods\cnc\maps\funpark01\scj01ea.lua = mods\cnc\maps\funpark01\scj01ea.lua mods\cnc\maps\shellmap\shellmap.lua = mods\cnc\maps\shellmap\shellmap.lua EndProjectSection diff --git a/mods/cnc/maps/nod09/map.bin b/mods/cnc/maps/nod09/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..eea1a1e9e20988ddae52c172a63a0ed5c12c912d GIT binary patch literal 20497 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 literal 0 HcmV?d00001 diff --git a/mods/cnc/maps/nod09/map.png b/mods/cnc/maps/nod09/map.png new file mode 100644 index 0000000000000000000000000000000000000000..d906ad45770f4ae405eea6f579dbe7bfee912933 GIT binary patch literal 38091 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

W46 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 0 +end + +GuardBase = function() + Utils.Do(GDIBase, function(building) + Trigger.OnDamaged(building, function(guard) + Utils.Do(GDIOrcas, function(guard) + if not guard.IsDead and not building.IsDead then + guard.Guard(building) + end + end) + end) + end) +end + +IdleHunt = function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + end +end + +IdlingUnits = function(enemy) + local lazyUnits = enemy.GetGroundAttackers() + + Utils.Do(lazyUnits, function(unit) + IdleHunt(unit) + end) +end + +ProduceHarvester = function(building) + if not buildingHarvester then + buildingHarvester = true + building.Build(HarvesterProductionType, function() + buildingHarvester = false + end) + end +end + +ProduceInfantry = function(building) + if building.IsDead then + return + elseif not CheckForHarvester() then + Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceInfantry(building) end) + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(InfantryProductionTypes) } + local Path = Utils.Random(AttackPaths) + building.Build(toBuild, function(unit) + InfantryAttackGroup[#InfantryAttackGroup + 1] = unit[1] + + if #InfantryAttackGroup >= InfantryGroupSize then + SendUnits(InfantryAttackGroup, Path) + InfantryAttackGroup = { } + Trigger.AfterDelay(InfantryProductionCooldown, function() ProduceInfantry(building) end) + else + Trigger.AfterDelay(delay, function() ProduceInfantry(building) end) + end + end) + +end + +ProduceVehicle = function(building) + if building.IsDead then + return + elseif not CheckForHarvester() then + ProduceHarvester(building) + Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceVehicle(building) end) + end + + local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17)) + local toBuild = { Utils.Random(VehicleProductionTypes) } + local Path = Utils.Random(AttackPaths) + building.Build(toBuild, function(unit) + VehicleAttackGroup[#VehicleAttackGroup + 1] = unit[1] + + if #VehicleAttackGroup >= VehicleGroupSize then + SendUnits(VehicleAttackGroup, Path) + VehicleAttackGroup = { } + Trigger.AfterDelay(VehicleProductionCooldown, function() ProduceVehicle(building) end) + else + Trigger.AfterDelay(delay, function() ProduceVehicle(building) end) + end + end) +end + +SendUnits = function(units, waypoints) + Utils.Do(units, function(unit) + if not unit.IsDead then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) + end + end) +end + +StartAI = function(cyard) + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == enemy and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == enemy and building.Health < 3/4 * building.MaxHealth then + building.StartBuildingRepairs() + end + end) + end + end) + enemy.Cash = StartingCash + BuildBase(cyard) + GuardBase() +end + +Trigger.OnAllKilledOrCaptured(GDIBase, function() + IdlingUnits(enemy) +end) + +Trigger.OnKilled(GDIProc, function(building) + BaseProc.exists = false +end) + +Trigger.OnKilled(GDINuke1, function(building) + BaseNuke1.exists = false +end) + +Trigger.OnKilled(GDINuke2, function(building) + BaseNuke2.exists = false +end) + +Trigger.OnKilled(GDINuke3, function(building) + BaseNuke3.exists = false +end) + +Trigger.OnKilled(GDINuke4, function(building) + BaseNuke4.exists = false +end) + +Trigger.OnKilled(GDIPyle, function(building) + InfantryProduction.exists = false +end) + +Trigger.OnKilled(GDIWeap, function(building) + VehicleProduction.exists = false +end) diff --git a/mods/cnc/maps/nod09/nod09.lua b/mods/cnc/maps/nod09/nod09.lua new file mode 100644 index 0000000000..4219c1e381 --- /dev/null +++ b/mods/cnc/maps/nod09/nod09.lua @@ -0,0 +1,276 @@ +if Map.Difficulty == "Easy" then + Rambo = "rmbo.easy" +elseif Map.Difficulty == "Hard" then + Rambo = "rmbo.hard" +else + Rambo = "rmbo" +end + +WaypointGroup1 = { waypoint0, waypoint3, waypoint2, waypoint4, waypoint5, waypoint7 } +WaypointGroup2 = { waypoint0, waypoint3, waypoint2, waypoint4, waypoint5, waypoint6 } +WaypointGroup3 = { waypoint0, waypoint8, waypoint9, waypoint10, waypoint11, waypoint12, waypoint6, waypoint13 } +Patrol1Waypoints = { waypoint0.Location, waypoint8.Location, waypoint9.Location, waypoint10.Location } +Patrol2Waypoints = { waypoint0.Location, waypoint3.Location, waypoint2.Location, waypoint4.Location } + +GDI1 = { units = { ['e2'] = 3, ['e3'] = 2 }, waypoints = WaypointGroup1, delay = 40 } +GDI2 = { units = { ['e1'] = 2, ['e2'] = 4 }, waypoints = WaypointGroup2, delay = 50 } +GDI4 = { units = { ['jeep'] = 2 }, waypoints = WaypointGroup1, delay = 50 } +GDI5 = { units = { ['mtnk'] = 1 }, waypoints = WaypointGroup1, delay = 40 } +Auto1 = { units = { ['e1'] = 2, ['e3'] = 3 }, waypoints = WaypointGroup3, delay = 40 } +Auto2 = { units = { ['e2'] = 2, ['e3'] = 2 }, waypoints = WaypointGroup3, delay = 50 } +Auto3 = { units = { ['e1'] = 3, ['e2'] = 2 }, waypoints = WaypointGroup2, delay = 60 } +Auto4 = { units = { ['mtnk'] = 1 }, waypoints = WaypointGroup1, delay = 50 } +Auto5 = { units = { ['mtnk'] = 1 }, waypoints = WaypointGroup3, delay = 50 } +Auto6 = { units = { ['e1'] = 2, ['e3'] = 2 }, waypoints = WaypointGroup3, delay = 50 } +Auto7 = { units = { ['msam'] = 1 }, waypoints = WaypointGroup1, delay = 40 } +Auto8 = { units = { ['msam'] = 1 }, waypoints = WaypointGroup3, delay = 50 } + +RmboReinforcements = { Rambo } +EngineerReinforcements = { "e6", "e6" } +RocketReinforcements = { "e3", "e3", "e3", "e3" } + +AutoAttackWaves = { GDI1, GDI2, GDI4, GDI5, Auto1, Auto2, Auto3, Auto4, Auto5, Auto6, Auto7, Auto8 } + +NodBaseTrigger = { CPos.New(9, 52), CPos.New(9, 51), CPos.New(9, 50), CPos.New(9, 49), CPos.New(9, 48), CPos.New(9, 47), CPos.New(9, 46), CPos.New(10, 46), CPos.New(11, 46), CPos.New(12, 46), CPos.New(13, 46), CPos.New(14, 46), CPos.New(15, 46), CPos.New(16, 46), CPos.New(17, 46), CPos.New(18, 46), CPos.New(19, 46), CPos.New(20, 46), CPos.New(21, 46), CPos.New(22, 46), CPos.New(23, 46), CPos.New(24, 46), CPos.New(25, 46), CPos.New(25, 47), CPos.New(25, 48), CPos.New(25, 49), CPos.New(25, 50), CPos.New(25, 51), CPos.New(25, 52) } +EngineerTrigger = { CPos.New(5, 13), CPos.New(6, 13), CPos.New(7, 13), CPos.New(8, 13), CPos.New(9, 13), CPos.New(10, 13), CPos.New(16, 7), CPos.New(16, 6), CPos.New(16, 5), CPos.New(16, 4), CPos.New(16, 3)} +RocketTrigger = { CPos.New(20, 15), CPos.New(21, 15), CPos.New(22, 15), CPos.New(23, 15), CPos.New(24, 15), CPos.New(25, 15), CPos.New(26, 15), CPos.New(32, 15), CPos.New(32, 14), CPos.New(32, 13), CPos.New(32, 12), CPos.New(32, 11)} + +GunboatPatrolPath = { GunboatLeft.Location, GunboatRight.Location } + +AirstrikeDelay = DateTime.Minutes(2) + DateTime.Seconds(30) + +CheckForSams = function(player) + local sams = player.GetActorsByType("sam") + return #sams >= 3 +end + +searches = 0 +getAirstrikeTarget = function() + local list = player.GetGroundAttackers() + + if #list == 0 then + return + end + + local target = list[DateTime.GameTime % #list + 1].CenterPosition + + local sams = Map.ActorsInCircle(target, WDist.New(8 * 1024), function(actor) + return actor.Type == "sam" end) + + if #sams == 0 then + searches = 0 + return target + elseif searches < 6 then + searches = searches + 1 + return getAirstrikeTarget() + else + searches = 0 + return nil + end +end + +SendAttackWave = function(team) + for type, amount in pairs(team.units) do + count = 0 + local actors = enemy.GetActorsByType(type) + Utils.Do(actors, function(actor) + if actor.IsIdle and count < amount then + SetAttackWaypoints(actor, team.waypoints) + IdleHunt(actor) + count = count + 1 + end + end) + end +end + +SetAttackWaypoints = function(actor, waypoints) + if not actor.IsDead then + Utils.Do(waypoints, function(waypoint) + actor.AttackMove(waypoint.Location) + end) + end +end + +SendGDIAirstrike = function(hq, delay) + if not hq.IsDead and hq.Owner == enemy then + local target = getAirstrikeTarget() + + if target then + hq.SendAirstrike(target, false, Facing.NorthEast + 4) + Trigger.AfterDelay(delay, function() SendGDIAirstrike(hq, delay) end) + else + Trigger.AfterDelay(delay/4, function() SendGDIAirstrike(hq, delay) end) + end + end +end + +SendWaves = function(counter, Waves) + if counter <= #Waves then + local team = Waves[counter] + SendAttackWave(team) + Trigger.AfterDelay(DateTime.Seconds(team.delay), function() SendWaves(counter + 1, Waves) end) + end +end + +StartPatrols = function() + local mtnks = enemy.GetActorsByType("mtnk") + local msams = enemy.GetActorsByType("msam") + + if #mtnks >= 1 then + mtnks[1].Patrol(Patrol1Waypoints, true, 20) + end + + if #msams >= 1 then + msams[1].Patrol(Patrol2Waypoints, true, 20) + end +end + +StartWaves = function() + SendWaves(1, AutoAttackWaves) +end + +Trigger.OnEnteredFootprint(NodBaseTrigger, function(a, id) + if not nodBaseTrigger and a.Owner == player then + nodBaseTrigger = true + player.MarkCompletedObjective(NodObjective3) + NodCYard.Owner = player + + local walls = nodBase.GetActorsByType("brik") + Utils.Do(walls, function(actor) + actor.Owner = player + end) + + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.PlaySpeechNotification(player, "NewOptions") + end) + end +end) + +Trigger.OnEnteredFootprint(RocketTrigger, function(a, id) + if not rocketTrigger and a.Owner == player then + rocketTrigger = true + player.MarkCompletedObjective(NodObjective1) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + Media.PlaySpeechNotification(player, "Reinforce") + Reinforcements.ReinforceWithTransport(player, 'tran.in', RocketReinforcements, { HelicopterEntryRocket.Location, HelicopterGoalRocket.Location }, { HelicopterEntryRocket.Location }, nil, nil) + end) + + Trigger.AfterDelay(DateTime.Seconds(10), function() + FlareEngineerCamera1 = Actor.Create("camera", true, { Owner = player, Location = FlareEngineer.Location }) + FlareEngineerCamera2 = Actor.Create("camera", true, { Owner = player, Location = CameraEngineerPath.Location }) + FlareEngineer = Actor.Create("flare", true, { Owner = player, Location = FlareEngineer.Location }) + end) + + Trigger.AfterDelay(DateTime.Minutes(1), function() + FlareRocketCamera.Destroy() + FlareRocket.Destroy() + end) + end +end) + +Trigger.OnEnteredFootprint(EngineerTrigger, function(a, id) + if not engineerTrigger and a.Owner == player then + engineerTrigger = true + player.MarkCompletedObjective(NodObjective2) + + Trigger.AfterDelay(DateTime.Seconds(5), function() + Media.PlaySpeechNotification(player, "Reinforce") + Reinforcements.ReinforceWithTransport(player, 'tran.in', EngineerReinforcements, { HelicopterEntryEngineer.Location, HelicopterGoalEngineer.Location }, { HelicopterEntryEngineer.Location }, nil, nil) + end) + + Trigger.AfterDelay(DateTime.Minutes(1), function() + FlareEngineerCamera1.Destroy() + FlareEngineerCamera2.Destroy() + FlareEngineer.Destroy() + end) + end +end) + +Trigger.OnKilledOrCaptured(OutpostProc, function() + if not outpostCaptured then + outpostCaptured = true + + if OutpostProc.IsDead then + player.MarkFailedObjective(NodObjective4) + else + player.MarkCompletedObjective(NodObjective4) + player.Cash = 1000 + end + + StartPatrols() + + Trigger.AfterDelay(DateTime.Minutes(1), function() StartWaves() end) + Trigger.AfterDelay(AirstrikeDelay, function() SendGDIAirstrike(GDIHQ, AirstrikeDelay) end) + Trigger.AfterDelay(DateTime.Minutes(3), function() ProduceInfantry(GDIPyle) end) + Trigger.AfterDelay(DateTime.Minutes(3), function() ProduceVehicle(GDIWeap) end) + end +end) + +Trigger.OnKilled(Gunboat, function() + GunboatCamera.Destroy() +end) + +WorldLoaded = function() + player = Player.GetPlayer("Nod") + enemy = Player.GetPlayer("GDI") + nodBase = Player.GetPlayer("NodBase") + + Camera.Position = CameraIntro.CenterPosition + Media.PlaySpeechNotification(player, "Reinforce") + Reinforcements.ReinforceWithTransport(player, 'tran.in', RmboReinforcements, { HelicopterEntryRmbo.Location, HelicopterGoalRmbo.Location }, { HelicopterEntryRmbo.Location }, nil, nil) + FlareRocketCamera = Actor.Create("camera", true, { Owner = player, Location = FlareRocket.Location }) + FlareRocket = Actor.Create("flare", true, { Owner = player, Location = FlareRocket.Location }) + + StartAI(GDICYard) + AutoGuard(enemy.GetGroundAttackers()) + + GunboatCamera = Actor.Create("camera.boat", true, { Owner = player, Location = Gunboat.Location }) + Trigger.OnIdle(Gunboat, function() Gunboat.Patrol(GunboatPatrolPath) end) + + 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) + + NodObjective1 = player.AddPrimaryObjective("Secure the first landing zone.") + NodObjective2 = player.AddPrimaryObjective("Secure the second landing zone.") + NodObjective3 = player.AddPrimaryObjective("Locate the Nod base.") + NodObjective4 = player.AddPrimaryObjective("Capture the refinery.") + NodObjective5 = player.AddPrimaryObjective("Eliminate all GDI forces in the area.") + NodObjective6 = player.AddSecondaryObjective("Build 3 SAMs to fend off the GDI bombers.") + GDIObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area.") +end + +Tick = function() + if not Gunboat.IsDead then + GunboatCamera.Teleport(Gunboat.Location) + end + + if DateTime.GameTime > 2 and player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(GDIObjective) + end + + if DateTime.GameTime > 2 and enemy.HasNoRequiredUnits() then + player.MarkCompletedObjective(NodObjective5) + end + + if not player.IsObjectiveCompleted(NodObjective6) and CheckForSams(player) then + player.MarkCompletedObjective(NodObjective6) + end +end diff --git a/mods/cnc/maps/nod09/rules.yaml b/mods/cnc/maps/nod09/rules.yaml new file mode 100644 index 0000000000..fa55a0e344 --- /dev/null +++ b/mods/cnc/maps/nod09/rules.yaml @@ -0,0 +1,192 @@ +World: + LuaScript: + Scripts: nod09.lua, nod09-AI.lua + MusicPlaylist: + StartingMusic: march + VictoryMusic: nod_win1 + MissionData: + Briefing: GDI is attempting to retake Egypt.\n\nUse every available resource in your efforts to stop them.\n\nThe populace has once again swayed in support of GDI forces, so show no mercy in dealing with the villagers. + LossVideo: banner.vqa + BriefingVideo: nod9.vqa + MapOptions: + Difficulties: Easy, Normal, Hard + SmudgeLayer@SCORCH: + InitialSmudges: + 20,55: sc2,0 + 16,55: sc1,0 + 14,55: sc5,0 + 9,55: sc6,0 + 20,54: sc5,0 + 16,54: sc4,0 + 22,53: sc3,0 + 8,53: sc4,0 + 8,52: sc3,0 + 12,51: sc2,0 + SmudgeLayer@CRATER: + InitialSmudges: + 21,55: cr1,0 + 15,55: cr1,0 + 8,55: cr1,0 + 8,54: cr1,0 + 7,54: cr1,0 + +Player: + PlayerResources: + DefaultCash: 0 + +^Bridge: + DamageMultiplier@INVULNERABLE: + Modifier: 0 + +BRIDGEHUT: + -Targetable: + +NUK2: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +EYE: + Buildable: + Prerequisites: ~disabled + +GUN: + Buildable: + Queue: Defence.Nod + +OBLI: + Buildable: + Prerequisites: ~disabled + +TMPL: + Buildable: + Prerequisites: ~disabled + +E2: + Buildable: + Prerequisites: ~pyle + +E5: + Buildable: + Prerequisites: ~disabled + +HARV: + Harvester: + SearchFromOrderRadius: 45 + +HTNK: + Buildable: + Prerequisites: ~disabled + +RMBO: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MLRS: + Buildable: + Prerequisites: ~disabled + +MTNK: + Buildable: + Prerequisites: ~weap + +MSAM: + Buildable: + Prerequisites: ~weap + +HELI: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +GTWR: + Buildable: + Queue: Defence.GDI + +SBAG: + Buildable: + Queue: Defence.GDI, Defence.Nod + +HQ: + AirstrikePower: + Prerequisites: gdi + SquadSize: 2 + +BOAT: + Health: + HP: 1500 + AutoTarget: + InitialStance: AttackAnything + RejectsOrders: + Except: Attack + +TRAN.IN: + Inherits: TRAN + RejectsOrders: + -Selectable: + RenderSprites: + Image: TRAN + Buildable: + Prerequisites: ~disabled + +Camera.Boat: + AlwaysVisible: + Mobile: + TerrainSpeeds: + RevealsShroud: + Range: 4c0 + ScriptTriggers: + +NUKEOUT.IN: + Inherits: NUKE + RenderSprites: + Image: nuke + Buildable: + Prerequisites: ~disabled + ProvidesPrerequisite: + Prerequisite: anypower + Capturable: + CaptureThreshold: 100 + +PROCOUT.IN: + Inherits: PROC + RenderSprites: + Image: proc + Buildable: + Prerequisites: ~disabled + ProvidesPrerequisite: + Prerequisite: proc + Capturable: + CaptureThreshold: 100 + +RMBO.easy: + Inherits: RMBO + Health: + HP: 300 + SelfHealing: + Delay: 10 + HealIfBelow: 50 + DamageCooldown: 200 + RenderSprites: + Image: RMBO + +RMBO.hard: + Inherits: RMBO + -AutoTarget: + -AttackMove: + RenderSprites: + Image: RMBO diff --git a/mods/cnc/maps/nod09/weapons.yaml b/mods/cnc/maps/nod09/weapons.yaml new file mode 100644 index 0000000000..c45d009996 --- /dev/null +++ b/mods/cnc/maps/nod09/weapons.yaml @@ -0,0 +1,2 @@ +BoatMissile: + Range: 5c0 diff --git a/mods/cnc/missions.yaml b/mods/cnc/missions.yaml index 1feabcbd80..28f70ced90 100644 --- a/mods/cnc/missions.yaml +++ b/mods/cnc/missions.yaml @@ -25,6 +25,7 @@ Nod Campaign: ./mods/cnc/maps/nod07b ./mods/cnc/maps/nod08a ./mods/cnc/maps/nod08b + ./mods/cnc/maps/nod09 Funpark Campaign: ./mods/cnc/maps/funpark01