diff --git a/OpenRA.sln b/OpenRA.sln index cc441d80f8..469e1f50a9 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -41,6 +41,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts", mods\cnc\maps\nod05\nod05.lua = mods\cnc\maps\nod05\nod05.lua mods\cnc\maps\funpark01\scj01ea.lua = mods\cnc\maps\funpark01\scj01ea.lua mods\cnc\maps\nod06a\nod06a.lua = mods\cnc\maps\nod06a\nod06a.lua + mods\cnc\maps\nod06b\nod06b.lua = mods\cnc\maps\nod06b\nod06b.lua mods\cnc\maps\shellmap\shellmap.lua = mods\cnc\maps\shellmap\shellmap.lua EndProjectSection EndProject diff --git a/mods/cnc/maps/nod06a/nod06a.lua b/mods/cnc/maps/nod06a/nod06a.lua index f786a1b5a8..d16df4226e 100644 --- a/mods/cnc/maps/nod06a/nod06a.lua +++ b/mods/cnc/maps/nod06a/nod06a.lua @@ -189,7 +189,7 @@ WorldLoaded = function() end) Trigger.OnEnteredFootprint(Win2CellTriggerActivator, function(a, id) - if a.Owner == Nod then + if a.Owner == Nod and NodObjective1 then Nod.MarkCompletedObjective(NodObjective3) Trigger.RemoveFootprintTrigger(id) end diff --git a/mods/cnc/maps/nod06b/map.bin b/mods/cnc/maps/nod06b/map.bin new file mode 100644 index 0000000000..fa72c3da00 Binary files /dev/null and b/mods/cnc/maps/nod06b/map.bin differ diff --git a/mods/cnc/maps/nod06b/map.png b/mods/cnc/maps/nod06b/map.png new file mode 100644 index 0000000000..7c57ce86a7 Binary files /dev/null and b/mods/cnc/maps/nod06b/map.png differ diff --git a/mods/cnc/maps/nod06b/map.yaml b/mods/cnc/maps/nod06b/map.yaml new file mode 100644 index 0000000000..77255941c9 --- /dev/null +++ b/mods/cnc/maps/nod06b/map.yaml @@ -0,0 +1,666 @@ +MapFormat: 7 + +RequiresMod: cnc + +Title: Steal The Detonator (b) + +Description: GDI has imported a Nuclear Detonator in an attempt to sway a few local political leaders. Penetrate the base and steal the detonator. A chopper will be sent to meet you at a designated landing zone. Look for the landing flare once you have stolen the device. + +Author: Westwood Studios + +Tileset: DESERT + +MapSize: 64,64 + +Bounds: 15,12,47,50 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + Briefing: nod6.vqa + GameStart: sundial.vqa + GameLost: banner.vqa + +Options: + Crates: False + Creeps: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 0 + ConfigurableStartingUnits: False + ShortGame: False + +Players: + PlayerReference@GDI: + Name: GDI + Playable: False + Race: gdi + ColorRamp: 31,222,183 + Enemies: Nod + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: gdi + Enemies: Nod, GDI + PlayerReference@Civilians: + Name: Civilians + NonCombatant: True + Race: gdi + Enemies: Nod + PlayerReference@Nod: + Name: Nod + Playable: True + AllowBots: False + Required: True + LockRace: True + Race: nod + LockColor: True + ColorRamp: 3,255,127 + LockSpawn: True + LockTeam: True + Enemies: GDI, Civilians + +Actors: + Actor0: sbag + Location: 54,29 + Owner: GDI + Actor1: sbag + Location: 50,29 + Owner: GDI + Actor2: sbag + Location: 49,29 + Owner: GDI + Actor3: sbag + Location: 48,29 + Owner: GDI + Actor4: sbag + Location: 47,29 + Owner: GDI + Actor5: sbag + Location: 46,29 + Owner: GDI + Actor6: sbag + Location: 45,29 + Owner: GDI + Actor7: sbag + Location: 44,29 + Owner: GDI + Actor8: sbag + Location: 43,29 + Owner: GDI + Actor9: sbag + Location: 42,29 + Owner: GDI + Actor10: sbag + Location: 41,29 + Owner: GDI + Actor11: sbag + Location: 40,29 + Owner: GDI + Actor12: sbag + Location: 54,28 + Owner: GDI + Actor13: cycl + Location: 48,28 + Owner: GDI + Actor14: cycl + Location: 47,28 + Owner: GDI + Actor15: cycl + Location: 46,28 + Owner: GDI + Actor16: sbag + Location: 40,28 + Owner: GDI + Actor17: sbag + Location: 54,27 + Owner: GDI + Actor18: cycl + Location: 48,27 + Owner: GDI + Actor19: cycl + Location: 46,27 + Owner: GDI + Actor20: sbag + Location: 40,27 + Owner: GDI + Actor21: sbag + Location: 54,26 + Owner: GDI + Actor22: cycl + Location: 48,26 + Owner: GDI + Actor23: cycl + Location: 47,26 + Owner: GDI + Actor24: cycl + Location: 46,26 + Owner: GDI + Actor25: sbag + Location: 40,26 + Owner: GDI + Actor26: sbag + Location: 54,25 + Owner: GDI + Actor27: sbag + Location: 40,25 + Owner: GDI + Actor28: sbag + Location: 54,24 + Owner: GDI + Actor29: sbag + Location: 54,23 + Owner: GDI + Actor30: sbag + Location: 54,22 + Owner: GDI + Actor31: sbag + Location: 54,21 + Owner: GDI + Actor32: sbag + Location: 40,21 + Owner: GDI + Actor33: sbag + Location: 54,20 + Owner: GDI + Actor34: sbag + Location: 40,20 + Owner: GDI + Actor35: sbag + Location: 54,19 + Owner: GDI + Actor36: sbag + Location: 40,19 + Owner: GDI + Actor37: sbag + Location: 54,18 + Owner: GDI + Actor38: sbag + Location: 40,18 + Owner: GDI + Actor39: sbag + Location: 54,17 + Owner: GDI + Actor40: sbag + Location: 53,17 + Owner: GDI + Actor41: sbag + Location: 52,17 + Owner: GDI + Actor42: sbag + Location: 51,17 + Owner: GDI + Actor43: sbag + Location: 50,17 + Owner: GDI + Actor44: sbag + Location: 49,17 + Owner: GDI + Actor45: sbag + Location: 48,17 + Owner: GDI + Actor46: sbag + Location: 47,17 + Owner: GDI + Actor47: sbag + Location: 46,17 + Owner: GDI + Actor48: sbag + Location: 45,17 + Owner: GDI + Actor49: sbag + Location: 44,17 + Owner: GDI + Actor50: sbag + Location: 43,17 + Owner: GDI + Actor51: sbag + Location: 42,17 + Owner: GDI + Actor52: sbag + Location: 41,17 + Owner: GDI + Actor53: sbag + Location: 40,17 + Owner: GDI + Actor54: t18 + Location: 28,31 + Owner: Neutral + Actor55: t08 + Location: 25,26 + Owner: Neutral + Actor56: t08 + Location: 27,21 + Owner: Neutral + Actor57: t18 + Location: 25,20 + Owner: Neutral + Actor58: t18 + Location: 33,45 + Owner: Neutral + Actor59: t18 + Location: 23,48 + Owner: Neutral + Actor60: t08 + Location: 52,38 + Owner: Neutral + Actor61: t08 + Location: 55,47 + Owner: Neutral + Actor62: rock6 + Location: 24,55 + Owner: Neutral + Actor63: t08 + Location: 32,58 + Owner: Neutral + Actor64: t08 + Location: 35,56 + Owner: Neutral + Actor65: t08 + Location: 30,50 + Owner: Neutral + Actor66: t08 + Location: 35,52 + Owner: Neutral + Actor67: t08 + Location: 37,56 + Owner: Neutral + Actor68: t08 + Location: 16,53 + Owner: Neutral + Actor69: t08 + Location: 25,61 + Owner: Neutral + Actor70: t08 + Location: 17,41 + Owner: Neutral + Actor71: t08 + Location: 49,34 + Owner: Neutral + Actor72: t08 + Location: 27,48 + Owner: Neutral + Actor73: t08 + Location: 34,36 + Owner: Neutral + Actor74: t08 + Location: 25,52 + Owner: Neutral + Actor75: t08 + Location: 43,30 + Owner: Neutral + Actor76: rock1 + Location: 45,29 + Owner: Neutral + Actor77: t18 + Location: 48,44 + Owner: Neutral + Actor78: t18 + Location: 58,45 + Owner: Neutral + Actor79: t18 + Location: 35,38 + Owner: Neutral + Actor80: t18 + Location: 50,55 + Owner: Neutral + Actor81: t18 + Location: 23,15 + Owner: Neutral + Actor82: t18 + Location: 15,13 + Owner: Neutral + Actor83: t08 + Location: 39,14 + Owner: Neutral + Actor85: nuke + Location: 44,18 + Owner: GDI + Actor86: v35 + Location: 36,57 + Owner: Civilians + Actor87: v34 + Location: 34,56 + Owner: Civilians + Actor88: v33 + Location: 32,56 + Owner: Civilians + Actor89: v30 + Location: 36,51 + Owner: Civilians + Actor90: v30 + Location: 30,52 + Owner: Civilians + Actor91: v29 + Location: 36,52 + Owner: Civilians + Actor92: v27 + Location: 24,53 + Owner: Civilians + Actor93: v27 + Location: 25,53 + Owner: Civilians + Actor94: v27 + Location: 26,53 + Owner: Civilians + Actor95: v26 + Location: 31,53 + Owner: Civilians + Actor96: v25 + Location: 30,50 + Owner: Civilians + Actor97: v24 + Location: 29,52 + Owner: Civilians + Actor98: v23 + Location: 32,57 + Owner: Civilians + Actor99: v22 + Location: 35,53 + Owner: Civilians + Actor100: v21 + Location: 25,57 + Owner: Civilians + Actor101: v20 + Location: 26,54 + Owner: Civilians + Actor104: silo + Location: 52,20 + Owner: GDI + Actor106: gtwr + Location: 55,29 + Owner: GDI + Actor107: gtwr + Location: 49,30 + Owner: GDI + Actor108: hq + Location: 52,25 + Owner: GDI + Actor109: proc + Location: 48,21 + Owner: GDI + Actor110: pyle + Location: 46,18 + Owner: GDI + Actor111: nuke + Location: 42,18 + Owner: GDI + Actor113: mtnk + Location: 19,38 + Owner: GDI + Actor114: jeep + Location: 19,52 + Owner: GDI + Actor115: mtnk + Location: 36,37 + Owner: GDI + Facing: 160 + Actor116: jeep + Location: 29,24 + Owner: GDI + Facing: 96 + Actor117: mtnk + Location: 24,48 + Owner: GDI + Facing: 192 + Actor118: mtnk + Location: 28,42 + Owner: GDI + Facing: 160 + Actor128: e2 + Location: 18,41 + Owner: GDI + SubCell: 1 + Actor129: e2 + Location: 42,28 + Owner: GDI + SubCell: 4 + Actor130: e2 + Location: 43,28 + Owner: GDI + SubCell: 3 + Actor131: e2 + Location: 43,28 + Owner: GDI + SubCell: 1 + Actor132: e2 + Location: 42,28 + Owner: GDI + SubCell: 2 + Actor133: e1 + Location: 41,28 + Owner: GDI + SubCell: 2 + Actor134: e1 + Location: 41,28 + Owner: GDI + SubCell: 3 + Actor135: e1 + Location: 41,28 + Owner: GDI + SubCell: 4 + Actor136: e1 + Location: 41,28 + Owner: GDI + SubCell: 1 + Actor137: e3 + Location: 27,45 + Owner: GDI + Facing: 160 + SubCell: 4 + Actor138: e1 + Location: 25,58 + Owner: GDI + Facing: 160 + SubCell: 3 + Actor139: c3 + Location: 36,58 + Owner: Civilians + SubCell: 0 + Actor140: c5 + Location: 37,58 + Owner: Civilians + SubCell: 0 + Actor141: e1 + Location: 31,59 + Owner: GDI + Facing: 192 + SubCell: 4 + Actor142: e2 + Location: 31,57 + Owner: GDI + SubCell: 4 + Actor143: e2 + Location: 37,54 + Owner: GDI + SubCell: 0 + Actor144: e2 + Location: 34,60 + Owner: GDI + Facing: 192 + SubCell: 3 + Actor157: e1 + Location: 22,60 + Owner: GDI + SubCell: 1 + Actor158: e1 + Location: 17,39 + Owner: GDI + SubCell: 4 + Actor160: e3 + Location: 27,46 + Owner: GDI + Facing: 32 + SubCell: 1 + Actor161: e3 + Location: 33,45 + Owner: GDI + Facing: 192 + SubCell: 4 + Actor162: e2 + Location: 34,45 + Owner: GDI + Facing: 224 + SubCell: 0 + waypoint27: waypoint + Location: 60,18 + Owner: Neutral + waypoint26: waypoint + Location: 15,15 + Owner: Neutral + waypoint25: waypoint + Location: 54,52 + Owner: Neutral + waypoint17: waypoint + Location: 53,53 + Owner: Neutral + waypoint10: waypoint + Location: 59,23 + Owner: Neutral + waypoint9: waypoint + Location: 52,13 + Owner: Neutral + waypoint8: waypoint + Location: 59,13 + Owner: Neutral + waypoint7: waypoint + Location: 23,46 + Owner: Neutral + waypoint6: waypoint + Location: 37,46 + Owner: Neutral + waypoint5: waypoint + Location: 37,41 + Owner: Neutral + waypoint4: waypoint + Location: 26,40 + Owner: Neutral + waypoint3: waypoint + Location: 24,31 + Owner: Neutral + waypoint2: waypoint + Location: 32,23 + Owner: Neutral + waypoint1: waypoint + Location: 44,24 + Owner: Neutral + waypoint0: waypoint + Location: 59,18 + Owner: Neutral + UnitsEntryVehicle: waypoint + Location: 18,12 + Owner: Neutral + UnitsRallyVehicle1: waypoint + Location: 18,21 + Owner: Neutral + UnitsRallyVehicle2: waypoint + Location: 18,19 + Owner: Neutral + UnitsEntryGunner: waypoint + Location: 16,12 + Owner: Neutral + UnitsRallyGunner: waypoint + Location: 16,20 + Owner: Neutral + UnitsEntryRocket: waypoint + Location: 22,12 + Owner: Neutral + UnitsRallyRocket: waypoint + Location: 20,20 + Owner: Neutral + ChnEntry: waypoint + Location: 26,61 + Owner: Neutral + Detonator: CRATE.plain + Location: 47, 27 + Owner: GDI + Chn1Actor1: fact + Location: 48,18 + Owner: GDI + Chn1Actor2: silo + Location: 51,18 + Owner: GDI + Chn2Actor1: weap + Location: 51,21 + Owner: GDI + Atk1Actor1: gtwr + Location: 39,25 + Owner: GDI + Atk1Actor2: gtwr + Location: 39,21 + Owner: GDI + Atk2Actor1: e2 + Location: 18,36 + Owner: GDI + SubCell: 3 + Atk2Actor2: e2 + Location: 17,36 + Owner: GDI + SubCell: 1 + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + LuaScript: + Scripts: nod06b.lua + ^Vehicle: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Tank: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Infantry: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Plane: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Ship: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Husk: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^CivBuildingHusk: + Tooltip: + ShowOwnerRow: false + FLARE: + Tooltip: + ShowOwnerRow: false + +Sequences: + +VoxelSequences: + +Weapons: + +Voices: + +Notifications: + +Translations: diff --git a/mods/cnc/maps/nod06b/nod06b.lua b/mods/cnc/maps/nod06b/nod06b.lua new file mode 100644 index 0000000000..c0e94feba0 --- /dev/null +++ b/mods/cnc/maps/nod06b/nod06b.lua @@ -0,0 +1,189 @@ +NodUnitsVehicle1 = { 'bggy', 'bggy', 'bike', 'bike', 'bike' } +NodUnitsVehicle2 = { 'ltnk', 'ltnk', 'ltnk' } +NodUnitsGunner = { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1' } +NodUnitsRocket = { 'e3', 'e3', 'e3', 'e3', 'e3', 'e3' } +Gdi1Units = { 'e1', 'e1', 'e2', 'e2', 'e2' } + +HuntCellTriggerActivator = { CPos.New(61,34), CPos.New(60,34), CPos.New(59,34), CPos.New(58,34), CPos.New(57,34), CPos.New(56,34), CPos.New(55,34), CPos.New(61,33), CPos.New(60,33), CPos.New(59,33), CPos.New(58,33), CPos.New(57,33), CPos.New(56,33) } +DzneCellTriggerActivator = { CPos.New(50,30), CPos.New(49,30), CPos.New(48,30), CPos.New(47,30), CPos.New(46,30), CPos.New(45,30), CPos.New(50,29), CPos.New(49,29), CPos.New(48,29), CPos.New(47,29), CPos.New(46,29), CPos.New(45,29), CPos.New(50,28), CPos.New(49,28), CPos.New(48,28), CPos.New(47,28), CPos.New(46,28), CPos.New(45,28), CPos.New(50,27), CPos.New(49,27), CPos.New(46,27), CPos.New(45,27), CPos.New(50,26), CPos.New(49,26), CPos.New(48,26), CPos.New(47,26), CPos.New(46,26), CPos.New(45,26), CPos.New(50,25), CPos.New(49,25), CPos.New(48,25), CPos.New(47,25), CPos.New(46,25), CPos.New(45,25) } +Win1CellTriggerActivator = { CPos.New(47,27) } +Win2CellTriggerActivator = { CPos.New(57,57), CPos.New(56,57), CPos.New(55,57), CPos.New(57,56), CPos.New(56,56), CPos.New(55,56), CPos.New(57,55), CPos.New(56,55), CPos.New(55,55), CPos.New(57,54), CPos.New(56,54), CPos.New(55,54), CPos.New(57,53), CPos.New(56,53), CPos.New(55,53), CPos.New(57,52), CPos.New(56,52), CPos.New(55,52) } +ChnCellTriggerActivator = { CPos.New(61,52), CPos.New(60,52), CPos.New(59,52), CPos.New(58,52), CPos.New(61,51), CPos.New(60,51), CPos.New(59,51), CPos.New(58,51), CPos.New(61,50), CPos.New(60,50), CPos.New(59,50), CPos.New(58,50) } + +Chn1ActorTriggerActivator = { Chn1Actor1, Chn1Actor2 } +Chn2ActorTriggerActivator = { Chn2Actor1 } +Atk1ActorTriggerActivator = { Atk1Actor1, Atk1Actor2 } +Atk2ActorTriggerActivator = { Atk2Actor1, Atk2Actor2 } + +Chn1Waypoints = { ChnEntry.Location, waypoint0.Location } +Chn2Waypoints = { ChnEntry.Location, waypoint0.Location } +Gdi5Waypoint = { waypoint1, waypoint2, waypoint3, waypoint4, waypoint5, waypoint6, waypoint7 } + +HuntTriggerFunction = function() + local list = GDI.GetGroundAttackers() + Utils.Do(list, function(unit) + IdleHunt(unit) + end) +end + +Win1TriggerFunction = function() + NodObjective2 = Nod.AddPrimaryObjective("Move to the evacuation point") + Nod.MarkCompletedObjective(NodObjective1) +end + +Chn1TriggerFunction = function() + if not Chn1Switch then + local cargo = Reinforcements.ReinforceWithTransport(GDI, 'tran', Gdi1Units, Chn1Waypoints, { ChnEntry.Location })[2] + Utils.Do(cargo, function(actor) + IdleHunt(actor) + end) + Chn1Switch = true + end +end + +Atk1TriggerFunction = function() + if not Atk1Switch then + for type, count in pairs({ ['e2'] = 2, ['jeep'] = 1, ['e1'] = 2}) do + MyActors = Utils.Take(count, GDI.GetActorsByType(type)) + Utils.Do(MyActors, function(actor) + IdleHunt(actor) + end) + end + Atk1Switch = true + end +end + +Atk2TriggerFunction = function() + if not Atk2Switch then + for type, count in pairs({ ['e2'] = 2, ['e1'] = 2}) do + MyActors = Utils.Take(count, GDI.GetActorsByType(type)) + Utils.Do(MyActors, function(actor) + MoveAndHunt(actor, Gdi5Waypoint) + end) + end + Atk2Switch = true + end +end + +Chn2TriggerFunction = function() + if not Chn2Switch then + local cargo = Reinforcements.ReinforceWithTransport(GDI, 'tran', Gdi1Units, Chn2Waypoints, { ChnEntry.Location })[2] + Utils.Do(cargo, function(actor) + IdleHunt(actor) + end) + Chn2Switch = true + end +end + +MoveAndHunt = function(unit, waypoints) + if unit ~= nil then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) + end +end + +InsertNodUnits = function() + Media.PlaySpeechNotification(Nod, "Reinforce") + Camera.Position = UnitsRallyVehicle2.CenterPosition + + Reinforcements.Reinforce(Nod, NodUnitsVehicle1, { UnitsEntryVehicle.Location, UnitsRallyVehicle1.Location }, 10) + Reinforcements.Reinforce(Nod, NodUnitsVehicle2, { UnitsEntryVehicle.Location, UnitsRallyVehicle2.Location }, 15) + Reinforcements.Reinforce(Nod, NodUnitsGunner, { UnitsEntryGunner.Location, UnitsRallyGunner.Location }, 15) + Reinforcements.Reinforce(Nod, NodUnitsRocket, { UnitsEntryRocket.Location, UnitsRallyRocket.Location }, 25) +end + + +WorldLoaded = function() + GDI = Player.GetPlayer("GDI") + Nod = Player.GetPlayer("Nod") + + Trigger.OnObjectiveAdded(Nod, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(Nod, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(Nod, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerWon(Nod, function() + Media.PlaySpeechNotification(Nod, "Win") + end) + + Trigger.OnPlayerLost(Nod, function() + Media.PlaySpeechNotification(Nod, "Lose") + end) + + NodObjective1 = Nod.AddPrimaryObjective("Steal the GDI nuclear detonator") + GDIObjective = GDI.AddPrimaryObjective("Stop the Nod taskforce from escaping with the detonator") + + InsertNodUnits() + + Trigger.OnEnteredFootprint(HuntCellTriggerActivator, function(a, id) + if a.Owner == Nod then + HuntTriggerFunction() + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(DzneCellTriggerActivator, function(a, id) + if a.Owner == Nod then + Actor.Create('flare', true, { Owner = Nod, Location = waypoint17.Location }) + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(Win1CellTriggerActivator, function(a, id) + if a.Owner == Nod then + Win1TriggerFunction() + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(Win2CellTriggerActivator, function(a, id) + if a.Owner == Nod and NodObjective2 then + Nod.MarkCompletedObjective(NodObjective2) + Trigger.RemoveFootprintTrigger(id) + end + end) + + OnAnyDamaged(Chn1ActorTriggerActivator, Chn1TriggerFunction) + + OnAnyDamaged(Atk1ActorTriggerActivator, Atk1TriggerFunction) + + OnAnyDamaged(Atk2ActorTriggerActivator, Atk2TriggerFunction) + + OnAnyDamaged(Chn2ActorTriggerActivator, Chn2TriggerFunction) + + Trigger.OnEnteredFootprint(ChnCellTriggerActivator, function(a, id) + if a.Owner == Nod then + Reinforcements.Reinforce(Nod, { 'tran' }, { ChnEntry.Location, waypoint17.Location }, 11) + Trigger.RemoveFootprintTrigger(id) + end + end) +end + +Tick = function() + if Nod.HasNoRequiredUnits() then + if DateTime.GameTime > 2 then + GDI.MarkCompletedObjective(GDIObjective) + end + end +end + +IdleHunt = function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + end +end + +OnAnyDamaged = function(actors, func) + Utils.Do(actors, function(actor) + Trigger.OnDamaged(actor, func) + end) +end diff --git a/mods/cnc/missions.yaml b/mods/cnc/missions.yaml index b788cae5e0..9b9f70e58f 100644 --- a/mods/cnc/missions.yaml +++ b/mods/cnc/missions.yaml @@ -18,7 +18,7 @@ Nod Campaign: ./mods/cnc/maps/nod04b ./mods/cnc/maps/nod05 ./mods/cnc/maps/nod06a + ./mods/cnc/maps/nod06b Funpark Campaign: ./mods/cnc/maps/funpark01 -