From 1d9ed31f7dbeb83e47d928269349a8f95b1e2074 Mon Sep 17 00:00:00 2001 From: Smittytron Date: Sun, 25 Feb 2018 09:35:51 -0600 Subject: [PATCH] Add secondary objective and difficulty levels to nod06b --- mods/cnc/maps/nod06b/map.yaml | 46 ++++++++++++++---------- mods/cnc/maps/nod06b/nod06b.lua | 62 ++++++++++++++++++++++++++------- mods/cnc/maps/nod06b/rules.yaml | 9 +++++ 3 files changed, 87 insertions(+), 30 deletions(-) diff --git a/mods/cnc/maps/nod06b/map.yaml b/mods/cnc/maps/nod06b/map.yaml index d1ae79f817..5369b5f9d3 100644 --- a/mods/cnc/maps/nod06b/map.yaml +++ b/mods/cnc/maps/nod06b/map.yaml @@ -21,7 +21,6 @@ LockPreview: True Players: PlayerReference@GDI: Name: GDI - Playable: False Faction: gdi Color: F5D378 Enemies: Nod @@ -37,8 +36,8 @@ Players: Enemies: Nod PlayerReference@Nod: Name: Nod - Playable: True AllowBots: False + Playable: True Required: True LockFaction: True Faction: nod @@ -304,52 +303,52 @@ Actors: Actor85: nuke Location: 44,18 Owner: GDI - Actor86: v35 + Obj2Actor1: v35 Location: 36,57 Owner: Civilians - Actor87: v34 + Obj2Actor2: v34 Location: 34,56 Owner: Civilians - Actor88: v33 + Obj2Actor3: v33 Location: 32,56 Owner: Civilians - Actor89: v30 + Obj2Actor4: v30 Location: 36,51 Owner: Civilians - Actor90: v30 + Obj2Actor5: v30 Location: 30,52 Owner: Civilians - Actor91: v29 + Obj2Actor6: v29 Location: 36,52 Owner: Civilians - Actor92: v27 + Obj2Actor7: v27 Location: 24,53 Owner: Civilians - Actor93: v27 + Obj2Actor8: v27 Location: 25,53 Owner: Civilians - Actor94: v27 + Obj2Actor9: v27 Location: 26,53 Owner: Civilians - Actor95: v26 + Obj2Actor10: v26 Location: 31,53 Owner: Civilians - Actor96: v25 + Obj2Actor0: v25 Location: 30,50 Owner: Civilians - Actor97: v24 + Obj2Actor11: v24 Location: 29,52 Owner: Civilians Actor98: v23 Location: 32,57 Owner: Civilians - Actor99: v22 + Obj2Actor12: v22 Location: 35,53 Owner: Civilians - Actor100: v21 + Obj2Actor13: v21 Location: 25,57 Owner: Civilians - Actor101: v20 + Obj2Actor14: v20 Location: 26,54 Owner: Civilians Actor104: silo @@ -560,7 +559,7 @@ Actors: Location: 26,61 Owner: Neutral Detonator: CRATE.plain - Location: 47, 27 + Location: 47,27 Owner: GDI Chn1Actor1: fact Location: 48,18 @@ -585,5 +584,16 @@ Actors: Location: 17,36 Owner: GDI SubCell: 1 + waypoint13: waypoint + Owner: Neutral + Location: 43,58 + Obj2UnitsEntry: waypoint + Owner: Neutral + Location: 45,61 + Actor169: mtnk + Owner: GDI + Location: 33,54 + Facing: 92 + TurretFacing: 92 Rules: cnc|rules/campaign-maprules.yaml, cnc|rules/campaign-tooltips.yaml, cnc|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/cnc/maps/nod06b/nod06b.lua b/mods/cnc/maps/nod06b/nod06b.lua index d98b5352c6..a52df48930 100644 --- a/mods/cnc/maps/nod06b/nod06b.lua +++ b/mods/cnc/maps/nod06b/nod06b.lua @@ -6,11 +6,36 @@ the License, or (at your option) any later version. For more information, see COPYING. ]] -NodUnitsVehicle1 = { 'bggy', 'bggy', 'bike', 'bike', 'bike' } -NodUnitsVehicle2 = { 'ltnk', 'ltnk', 'ltnk' } -NodUnitsGunner = { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1' } -NodUnitsRocket = { 'e3', 'e3', 'e3', 'e3', 'e3', 'e3' } +NodUnitsVehicle1 = +{ + tough = { 'bggy', 'bike', 'bike' }, + hard = { 'bggy', 'bggy', 'bike', 'bike' }, + normal = { 'bggy', 'bggy', 'bike', 'bike', 'bike' }, + easy = { 'bggy', 'bggy', 'bggy', 'bike', 'bike', 'bike', 'bike' } +} +NodUnitsVehicle2 = +{ + tough = { 'ltnk', 'ltnk' }, + hard = { 'ltnk', 'ltnk', 'ltnk' }, + normal = { 'ltnk', 'ltnk', 'ltnk', 'ltnk' }, + easy = { 'ltnk', 'ltnk', 'ltnk', 'ltnk', 'ltnk' } +} +NodUnitsGunner = +{ + tough = { 'e1', 'e1', 'e1', 'e1' }, + hard = { 'e1', 'e1', 'e1', 'e1', 'e1' }, + normal = { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1' }, + easy = { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1' } +} +NodUnitsRocket = +{ + tough = { 'e3', 'e3', 'e3', 'e3' }, + hard = { 'e3', 'e3', 'e3', 'e3', 'e3' }, + normal = { 'e3', 'e3', 'e3', 'e3', 'e3', 'e3', 'e3' }, + easy = { 'e3', 'e3', 'e3', 'e3', 'e3', 'e3', 'e3', 'e3', 'e3', 'e3' } +} Gdi1Units = { 'e1', 'e1', 'e2', 'e2', 'e2' } +Obj2Units = { 'ftnk', 'e4', 'e4' } 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) } @@ -22,6 +47,7 @@ Chn1ActorTriggerActivator = { Chn1Actor1, Chn1Actor2 } Chn2ActorTriggerActivator = { Chn2Actor1 } Atk1ActorTriggerActivator = { Atk1Actor1, Atk1Actor2 } Atk2ActorTriggerActivator = { Atk2Actor1, Atk2Actor2 } +Obj2ActorTriggerActivator = { Obj2Actor0, Obj2Actor1, Obj2Actor2, Obj2Actor3, Obj2Actor4, Obj2Actor5, Obj2Actor6, Obj2Actor7, Obj2Actor8, Obj2Actor9, Obj2Actor10, Obj2Actor11, Obj2Actor12, Obj2Actor13, Obj2Actor14 } Chn1Waypoints = { ChnEntry.Location, waypoint0.Location } Chn2Waypoints = { ChnEntry.Location, waypoint0.Location } @@ -34,11 +60,6 @@ HuntTriggerFunction = function() end) end -Win1TriggerFunction = function() - NodObjective2 = player.AddPrimaryObjective("Move to the evacuation point.") - player.MarkCompletedObjective(NodObjective1) -end - Chn1TriggerFunction = function() if not Chn1Switch then local cargo = Reinforcements.ReinforceWithTransport(enemy, 'tran', Gdi1Units, Chn1Waypoints, { ChnEntry.Location })[2] @@ -83,6 +104,12 @@ Chn2TriggerFunction = function() end end +Obj2TriggerFunction = function() + player.MarkCompletedObjective(NodObjective2) + Media.PlaySpeechNotification(player, "Reinforce") + Reinforcements.Reinforce(player, Obj2Units, { Obj2UnitsEntry.Location, waypoint13.Location }, 15) +end + MoveAndHunt = function(unit, waypoints) if unit ~= nil then Utils.Do(waypoints, function(waypoint) @@ -93,6 +120,12 @@ MoveAndHunt = function(unit, waypoints) end InsertNodUnits = function() + local difficulty = Map.LobbyOption("difficulty") + NodUnitsVehicle1 = NodUnitsVehicle1[difficulty] + NodUnitsVehicle2 = NodUnitsVehicle2[difficulty] + NodUnitsGunner = NodUnitsGunner[difficulty] + NodUnitsRocket = NodUnitsRocket[difficulty] + Media.PlaySpeechNotification(player, "Reinforce") Camera.Position = UnitsRallyVehicle2.CenterPosition @@ -127,6 +160,8 @@ WorldLoaded = function() end) NodObjective1 = player.AddPrimaryObjective("Steal the GDI nuclear detonator.") + NodObjective2 = player.AddSecondaryObjective("Destroy the houses of the GDI supporters\nin the village.") + GDIObjective = enemy.AddPrimaryObjective("Stop the Nod taskforce from escaping with the detonator.") InsertNodUnits() @@ -144,17 +179,20 @@ WorldLoaded = function() Trigger.RemoveFootprintTrigger(id) end end) + + Trigger.OnAllRemovedFromWorld(Obj2ActorTriggerActivator, Obj2TriggerFunction) Trigger.OnEnteredFootprint(Win1CellTriggerActivator, function(a, id) if a.Owner == player then - Win1TriggerFunction() + NodObjective3 = player.AddPrimaryObjective("Move to the evacuation point.") + player.MarkCompletedObjective(NodObjective1) Trigger.RemoveFootprintTrigger(id) end end) Trigger.OnEnteredFootprint(Win2CellTriggerActivator, function(a, id) - if a.Owner == player and NodObjective2 then - player.MarkCompletedObjective(NodObjective2) + if a.Owner == player and NodObjective3 then + player.MarkCompletedObjective(NodObjective3) Trigger.RemoveFootprintTrigger(id) end end) diff --git a/mods/cnc/maps/nod06b/rules.yaml b/mods/cnc/maps/nod06b/rules.yaml index 34b943760f..034a077c65 100644 --- a/mods/cnc/maps/nod06b/rules.yaml +++ b/mods/cnc/maps/nod06b/rules.yaml @@ -9,6 +9,15 @@ World: BriefingVideo: nod6.vqa StartVideo: sundial.vqa LossVideo: banner.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + tough: Real tough guy + Default: normal Player: PlayerResources: