diff --git a/mods/cnc/maps/gdi04a/map.png b/mods/cnc/maps/gdi04a/map.png index 251925bb0e..5a4057358d 100644 Binary files a/mods/cnc/maps/gdi04a/map.png and b/mods/cnc/maps/gdi04a/map.png differ diff --git a/mods/cnc/maps/gdi04b/map.png b/mods/cnc/maps/gdi04b/map.png index 5a4057358d..251925bb0e 100644 Binary files a/mods/cnc/maps/gdi04b/map.png and b/mods/cnc/maps/gdi04b/map.png differ diff --git a/mods/cnc/maps/nod02a/map.bin b/mods/cnc/maps/nod02a/map.bin index 4fcece8e79..d0c57bbf75 100644 Binary files a/mods/cnc/maps/nod02a/map.bin and b/mods/cnc/maps/nod02a/map.bin differ diff --git a/mods/cnc/maps/nod02a/map.yaml b/mods/cnc/maps/nod02a/map.yaml index c7952d167c..3874310cd1 100644 --- a/mods/cnc/maps/nod02a/map.yaml +++ b/mods/cnc/maps/nod02a/map.yaml @@ -10,7 +10,7 @@ Tileset: DESERT MapSize: 64,64 -Bounds: 27,34,36,26 +Bounds: 3,23,36,26 Visibility: MissionSelector @@ -23,6 +23,7 @@ Players: Name: GDI Faction: gdi Color: F5D378 + Allies: GDI Enemies: Nod Bot: campaign PlayerReference@Nod: @@ -45,154 +46,192 @@ Players: Actors: Actor0: t08 - Location: 30,52 + Location: 34,38 Owner: Neutral Actor1: t18 - Location: 34,52 + Location: 34,36 Owner: Neutral Actor2: t08 - Location: 57,47 + Location: 25,31 Owner: Neutral Actor3: t08 - Location: 38,59 + Location: 26,31 Owner: Neutral - Actor4: silo - Location: 33,40 - Owner: GDI - Actor9: silo - Location: 32,42 - Owner: GDI - Actor10: jeep - Location: 30,46 - Owner: GDI - Facing: 512 - Actor11: jeep - Location: 31,35 - Owner: GDI - Facing: 256 - Actor17: e1 - Location: 34,56 - Owner: GDI - SubCell: 3 - Actor18: e1 - Location: 43,35 - Owner: GDI - SubCell: 3 - Actor19: e1 - Location: 43,36 - Owner: GDI - SubCell: 3 - Actor31: e1 - Location: 47,53 - Owner: GDI - SubCell: 4 - Actor32: e1 - Location: 49,54 - Owner: GDI - Facing: 896 - SubCell: 1 - Actor35: e1 - Location: 34,57 - Owner: GDI - Facing: 256 - SubCell: 1 - waypoint27: waypoint - Location: 27,51 + Actor4: t08 + Location: 21,40 Owner: Neutral - waypoint26: waypoint - Location: 49,35 + Actor5: t08 + Location: 3,24 Owner: Neutral - waypoint10: waypoint - Location: 30,44 + Actor6: t08 + Location: 3,42 Owner: Neutral - waypoint9: waypoint - Location: 55,40 + Actor7: t08 + Location: 4,42 Owner: Neutral - waypoint8: waypoint - Location: 48,41 + Actor8: t08 + Location: 6,48 Owner: Neutral - waypoint7: waypoint - Location: 60,58 + Actor9: t08 + Location: 16,43 Owner: Neutral - waypoint6: waypoint - Location: 61,47 + Actor10: t08 + Location: 26,48 Owner: Neutral - waypoint5: waypoint - Location: 48,55 + Actor11: t08 + Location: 13,27 Owner: Neutral - waypoint4: waypoint - Location: 41,51 + Actor12: t08 + Location: 6,40 Owner: Neutral - waypoint3: waypoint - Location: 28,36 + Actor13: rock1 + Location: 22,32 Owner: Neutral - waypoint2: waypoint - Location: 28,51 - Owner: Neutral - waypoint1: waypoint - Location: 40,43 - Owner: Neutral - waypoint0: waypoint - Location: 40,35 - Owner: Neutral - Refinery: proc - Location: 30,38 - Owner: GDI - Barracks: pyle - Location: 34,43 - Owner: GDI - Powerplant: nuke - Location: 35,40 - Owner: GDI - Yard: fact - Location: 33,37 - Owner: GDI - Guard1: e1 - Location: 42,39 - Owner: GDI - Facing: 256 - SubCell: 0 - Guard2: e1 - Location: 38,38 - Owner: GDI - Facing: 256 - SubCell: 2 - Guard3: e1 - Location: 35,49 + Actor20: jeep + Location: 5,24 Owner: GDI Facing: 384 - SubCell: 0 - Guard4: e1 - Location: 34,48 + Actor21: jeep + Location: 6,32 Owner: GDI - Facing: 384 - SubCell: 3 - Guard5: e1 - Location: 39,40 - Owner: GDI - Facing: 256 - SubCell: 1 - Guard6: e1 - Location: 40,56 - Owner: GDI - Facing: 384 - SubCell: 4 - Guard7: e1 - Location: 38,54 + Facing: 640 + Actor22: jeep + Location: 12,27 Owner: GDI Facing: 128 + Actor28: e1 + Location: 10,24 + Owner: GDI + Facing: 384 SubCell: 3 + Actor29: e1 + Location: 10,24 + Owner: GDI + Facing: 384 + SubCell: 1 + Actor30: e1 + Location: 9,24 + Owner: GDI + Facing: 384 + SubCell: 4 + Actor31: e1 + Location: 5,34 + Owner: GDI + SubCell: 3 + Actor32: e1 + Location: 5,35 + Owner: GDI + SubCell: 2 + Actor33: e1 + Location: 10,27 + Owner: GDI + SubCell: 2 + Actor34: e1 + Location: 11,27 + Owner: GDI + SubCell: 1 + Actor35: e1 + Location: 10,24 + Owner: GDI + Facing: 384 + SubCell: 2 + Actor37: e1 + Location: 7,40 + Owner: GDI + SubCell: 2 + waypoint26: waypoint + Location: 26,41 + Owner: Neutral + waypoint23: waypoint + Location: 33,45 + Owner: Neutral + waypoint21: waypoint + Location: 32,42 + Owner: Neutral + waypoint17: waypoint + Location: 32,26 + Owner: Neutral + waypoint9: waypoint + Location: 29,47 + Owner: Neutral + waypoint8: waypoint + Location: 16,28 + Owner: Neutral + waypoint7: waypoint + Location: 23,40 + Owner: Neutral + waypoint6: waypoint + Location: 20,47 + Owner: Neutral + waypoint5: waypoint + Location: 10,44 + Owner: Neutral + waypoint4: waypoint + Location: 13,36 + Owner: Neutral + waypoint3: waypoint + Location: 36,41 + Owner: Neutral + waypoint2: waypoint + Location: 31,28 + Owner: Neutral + waypoint1: waypoint + Location: 18,25 + Owner: Neutral + waypoint0: waypoint + Location: 4,26 + Owner: Neutral + Refinery: proc + Location: 7,27 + Owner: GDI + FreeActor: false + Yard: fact + Location: 10,28 + Owner: GDI + Barracks: pyle + Location: 7,32 + Owner: GDI + Plant: nuke + Location: 11,31 + Owner: GDI + Silo1: silo + Location: 9,31 + Owner: GDI + Silo2: silo + Location: 9,33 + Owner: GDI + Guard1: e1 + Location: 8,40 + Owner: GDI + SubCell: 1 + Guard2: e1 + Location: 37,24 + Owner: GDI + SubCell: 3 + Guard3: e1 + Location: 36,24 + Owner: GDI + SubCell: 2 + Guard4: e1 + Location: 27,31 + Owner: GDI + SubCell: 1 + Harvester: harv + Location: 5,29 + Owner: GDI + Health: 39 + Facing: 896 McvEntry: waypoint - Location: 62,43 + Location: 33,48 Owner: Neutral McvRally: waypoint - Location: 57,41 + Location: 33,46 Owner: Neutral UnitsEntry: waypoint - Location: 62,38 + Location: 30,48 Owner: Neutral UnitsRally: waypoint - Location: 56,38 + Location: 30,44 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/nod02a/nod02a.lua b/mods/cnc/maps/nod02a/nod02a.lua index d26c436ce8..98454d945c 100644 --- a/mods/cnc/maps/nod02a/nod02a.lua +++ b/mods/cnc/maps/nod02a/nod02a.lua @@ -10,17 +10,10 @@ NodUnits = { "bggy", "e1", "e1", "e1", "e1", "e1", "bggy", "e1", "e1", "e1", "bggy" } NodBaseBuildings = { "hand", "fact", "nuke" } -GDIBase = { Refinery, Barracks, Powerplant, Yard } -Guards = { Guard1, Guard2, Guard3, Guard4, Guard5, Guard6, Guard7 } +GDIBase = { Refinery, Yard, Barracks, Plant, Silo1, Silo2 } -Atk1CellTriggerActivator = { CPos.New(45,37), CPos.New(44,37), CPos.New(45,36), CPos.New(44,36), CPos.New(45,35), CPos.New(44,35), CPos.New(45,34), CPos.New(44,34) } -Atk4CellTriggerActivator = { CPos.New(50,47), CPos.New(49,47), CPos.New(48,47), CPos.New(47,47), CPos.New(46,47), CPos.New(45,47), CPos.New(44,47), CPos.New(43,47), CPos.New(42,47), CPos.New(41,47), CPos.New(40,47), CPos.New(39,47), CPos.New(38,47), CPos.New(37,47), CPos.New(50,46), CPos.New(49,46), CPos.New(48,46), CPos.New(47,46), CPos.New(46,46), CPos.New(45,46), CPos.New(44,46), CPos.New(43,46), CPos.New(42,46), CPos.New(41,46), CPos.New(40,46), CPos.New(39,46), CPos.New(38,46) } - -Atk1Waypoints = { waypoint2, waypoint4, waypoint5, waypoint6 } -Atk2Waypoints = { waypoint2, waypoint5, waypoint7, waypoint6 } -Atk3Waypoints = { waypoint2, waypoint4, waypoint5, waypoint9 } -Atk4Waypoints = { waypoint0, waypoint8, waypoint9 } -Pat1Waypoints = { waypoint0, waypoint1, waypoint2, waypoint3 } +GDIWaypoints1 = { waypoint0, waypoint1, waypoint2, waypoint3 } +GDIWaypoints2 = { waypoint0, waypoint1, waypoint4, waypoint5, waypoint6, waypoint7, waypoint9 } GetAttackers = function(amount) local units = GDI.GetActorsByType("e1") @@ -38,59 +31,52 @@ WorldLoaded = function() InitObjectives(Nod) - BuildBase = Nod.AddObjective("Build a base.") - DestroyGDI = Nod.AddObjective("Destroy the GDI base.") GDIObjective = GDI.AddObjective("Kill all enemies.") + BuildBase = Nod.AddObjective("Build a base.") + DestroyGDI = Nod.AddObjective("Destroy all GDI units.") - Utils.Do(Guards, function(actor) + Utils.Do({ Refinery, Yard }, function(actor) Trigger.OnDamaged(actor, function() - if Atk3TriggerSwitch then - return + if not Grd2TriggerSwitch then + Grd2TriggerSwitch = true + Utils.Do(GetAttackers(5), IdleHunt) end - - Atk3TriggerSwitch = true - MoveAndHunt(GetAttackers(4), Atk3Waypoints) end) end) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(25), function() + MoveAndHunt(GetAttackers(2), GDIWaypoints1) + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(20), function() + MoveAndHunt(GetAttackers(3), GDIWaypoints2) + end) + + Trigger.OnKilled(Guard1, function() + MoveAndHunt(GetAttackers(3), GDIWaypoints2) + end) + + Trigger.OnKilled(Guard4, function() + MoveAndHunt(GetAttackers(2), GDIWaypoints1) + end) + + Trigger.OnAllKilled({ Guard2, Guard3 }, function() + MoveAndHunt(GetAttackers(2), GDIWaypoints1) + end) + + Trigger.OnDamaged(Harvester, function() + if Atk5TriggerSwitch then + return + end + + Atk5TriggerSwitch = true + MoveAndHunt(GetAttackers(3), GDIWaypoints2) + end) + Trigger.OnAllRemovedFromWorld(GDIBase, function() Utils.Do(GDI.GetGroundAttackers(), IdleHunt) end) - Trigger.AfterDelay(DateTime.Seconds(40), function() - MoveAndHunt(GetAttackers(3), Atk2Waypoints) - end) - - Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(15), function() - MoveAndHunt(GetAttackers(3), Atk2Waypoints) - end) - - Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(20), function() - MoveAndHunt(GetAttackers(3), Atk3Waypoints) - end) - - Trigger.AfterDelay(DateTime.Seconds(50), function() - MoveAndHunt(GetAttackers(3), Atk4Waypoints) - end) - - Trigger.AfterDelay(DateTime.Seconds(30), function() - MoveAndHunt(GetAttackers(3), Pat1Waypoints) - end) - - Trigger.OnEnteredFootprint(Atk1CellTriggerActivator, function(a, id) - if a.Owner == Nod then - MoveAndHunt(GetAttackers(5), Atk1Waypoints) - Trigger.RemoveFootprintTrigger(id) - end - end) - - Trigger.OnEnteredFootprint(Atk4CellTriggerActivator, function(a, id) - if a.Owner == Nod then - MoveAndHunt(GetAttackers(3), Atk2Waypoints) - Trigger.RemoveFootprintTrigger(id) - end - end) - Trigger.AfterDelay(0, function() Utils.Do(GDI.GetActorsByType("e1"), function(unit) RebuildUnit({ unit }, GDI, Barracks) @@ -103,14 +89,14 @@ WorldLoaded = function() end Tick = function() - if GDI.HasNoRequiredUnits() then - Nod.MarkCompletedObjective(DestroyGDI) - end - if DateTime.GameTime > 2 and Nod.HasNoRequiredUnits() then GDI.MarkCompletedObjective(GDIObjective) end + if GDI.HasNoRequiredUnits() then + Nod.MarkCompletedObjective(DestroyGDI) + end + if DateTime.GameTime % DateTime.Seconds(1) == 0 and not Nod.IsObjectiveCompleted(BuildBase) and CheckForBase(Nod, NodBaseBuildings) then Nod.MarkCompletedObjective(BuildBase) end diff --git a/mods/cnc/maps/nod02a/rules.yaml b/mods/cnc/maps/nod02a/rules.yaml index 53b7bec1f0..df5f3ce90d 100644 --- a/mods/cnc/maps/nod02a/rules.yaml +++ b/mods/cnc/maps/nod02a/rules.yaml @@ -1,7 +1,3 @@ -Player: - PlayerResources: - DefaultCash: 4000 - World: LuaScript: Scripts: campaign-global.lua, nod02a.lua @@ -15,60 +11,9 @@ World: WinVideo: airstrk.vqa LossVideo: deskill.vqa -^Vehicle: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - RenderSprites: - PlayerPalette: player-units - -^Tank: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - RenderSprites: - PlayerPalette: player-units - -^Helicopter: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - RenderSprites: - PlayerPalette: player-units - -^Infantry: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - RenderSprites: - PlayerPalette: player-units - -^Plane: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - -^Ship: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - -^Building: - Tooltip: - GenericVisibility: Enemy - ShowOwnerRow: false - -^Wall: - Tooltip: - ShowOwnerRow: false - -^CommonHuskDefaults: - Tooltip: - GenericVisibility: Enemy, Ally, Neutral - GenericStancePrefix: false - ShowOwnerRow: false - RenderSprites: - PlayerPalette: player-units +Player: + PlayerResources: + DefaultCash: 4000 NUK2: Buildable: @@ -129,20 +74,6 @@ MLRS: MCV: Buildable: Prerequisites: ~disabled - RenderSprites: - PlayerPalette: player - -MCV.Husk: - RenderSprites: - PlayerPalette: player - -HARV: - RenderSprites: - PlayerPalette: player - -HARV.Husk: - RenderSprites: - PlayerPalette: player SAM: Buildable: diff --git a/mods/cnc/maps/nod02b/map.bin b/mods/cnc/maps/nod02b/map.bin index d0c57bbf75..4fcece8e79 100644 Binary files a/mods/cnc/maps/nod02b/map.bin and b/mods/cnc/maps/nod02b/map.bin differ diff --git a/mods/cnc/maps/nod02b/map.yaml b/mods/cnc/maps/nod02b/map.yaml index 05dc47b8b2..939830baaf 100644 --- a/mods/cnc/maps/nod02b/map.yaml +++ b/mods/cnc/maps/nod02b/map.yaml @@ -10,7 +10,7 @@ Tileset: DESERT MapSize: 64,64 -Bounds: 3,23,36,26 +Bounds: 27,34,36,26 Visibility: MissionSelector @@ -23,7 +23,6 @@ Players: Name: GDI Faction: gdi Color: F5D378 - Allies: GDI Enemies: Nod Bot: campaign PlayerReference@Nod: @@ -46,192 +45,154 @@ Players: Actors: Actor0: t08 - Location: 34,38 + Location: 30,52 Owner: Neutral Actor1: t18 - Location: 34,36 + Location: 34,52 Owner: Neutral Actor2: t08 - Location: 25,31 + Location: 57,47 Owner: Neutral Actor3: t08 - Location: 26,31 + Location: 38,59 Owner: Neutral - Actor4: t08 - Location: 21,40 + Actor4: silo + Location: 33,40 + Owner: GDI + Actor9: silo + Location: 32,42 + Owner: GDI + Actor10: jeep + Location: 30,46 + Owner: GDI + Facing: 512 + Actor11: jeep + Location: 31,35 + Owner: GDI + Facing: 256 + Actor17: e1 + Location: 34,56 + Owner: GDI + SubCell: 3 + Actor18: e1 + Location: 43,35 + Owner: GDI + SubCell: 3 + Actor19: e1 + Location: 43,36 + Owner: GDI + SubCell: 3 + Actor31: e1 + Location: 47,53 + Owner: GDI + SubCell: 4 + Actor32: e1 + Location: 49,54 + Owner: GDI + Facing: 896 + SubCell: 1 + Actor35: e1 + Location: 34,57 + Owner: GDI + Facing: 256 + SubCell: 1 + waypoint27: waypoint + Location: 27,51 Owner: Neutral - Actor5: t08 - Location: 3,24 + waypoint26: waypoint + Location: 49,35 Owner: Neutral - Actor6: t08 - Location: 3,42 + waypoint10: waypoint + Location: 30,44 Owner: Neutral - Actor7: t08 - Location: 4,42 + waypoint9: waypoint + Location: 55,40 Owner: Neutral - Actor8: t08 - Location: 6,48 + waypoint8: waypoint + Location: 48,41 Owner: Neutral - Actor9: t08 - Location: 16,43 + waypoint7: waypoint + Location: 60,58 Owner: Neutral - Actor10: t08 - Location: 26,48 + waypoint6: waypoint + Location: 61,47 Owner: Neutral - Actor11: t08 - Location: 13,27 + waypoint5: waypoint + Location: 48,55 Owner: Neutral - Actor12: t08 - Location: 6,40 + waypoint4: waypoint + Location: 41,51 Owner: Neutral - Actor13: rock1 - Location: 22,32 + waypoint3: waypoint + Location: 28,36 Owner: Neutral - Actor20: jeep - Location: 5,24 + waypoint2: waypoint + Location: 28,51 + Owner: Neutral + waypoint1: waypoint + Location: 40,43 + Owner: Neutral + waypoint0: waypoint + Location: 40,35 + Owner: Neutral + Refinery: proc + Location: 30,38 + Owner: GDI + Barracks: pyle + Location: 34,43 + Owner: GDI + Powerplant: nuke + Location: 35,40 + Owner: GDI + Yard: fact + Location: 33,37 + Owner: GDI + Guard1: e1 + Location: 42,39 + Owner: GDI + Facing: 256 + SubCell: 0 + Guard2: e1 + Location: 38,38 + Owner: GDI + Facing: 256 + SubCell: 2 + Guard3: e1 + Location: 35,49 Owner: GDI Facing: 384 - Actor21: jeep - Location: 6,32 - Owner: GDI - Facing: 640 - Actor22: jeep - Location: 12,27 - Owner: GDI - Facing: 128 - Actor28: e1 - Location: 10,24 + SubCell: 0 + Guard4: e1 + Location: 34,48 Owner: GDI Facing: 384 SubCell: 3 - Actor29: e1 - Location: 10,24 + Guard5: e1 + Location: 39,40 Owner: GDI - Facing: 384 + Facing: 256 SubCell: 1 - Actor30: e1 - Location: 9,24 + Guard6: e1 + Location: 40,56 Owner: GDI Facing: 384 SubCell: 4 - Actor31: e1 - Location: 5,34 + Guard7: e1 + Location: 38,54 Owner: GDI + Facing: 128 SubCell: 3 - Actor32: e1 - Location: 5,35 - Owner: GDI - SubCell: 2 - Actor33: e1 - Location: 10,27 - Owner: GDI - SubCell: 2 - Actor34: e1 - Location: 11,27 - Owner: GDI - SubCell: 1 - Actor35: e1 - Location: 10,24 - Owner: GDI - Facing: 384 - SubCell: 2 - Actor37: e1 - Location: 7,40 - Owner: GDI - SubCell: 2 - waypoint26: waypoint - Location: 26,41 - Owner: Neutral - waypoint23: waypoint - Location: 33,45 - Owner: Neutral - waypoint21: waypoint - Location: 32,42 - Owner: Neutral - waypoint17: waypoint - Location: 32,26 - Owner: Neutral - waypoint9: waypoint - Location: 29,47 - Owner: Neutral - waypoint8: waypoint - Location: 16,28 - Owner: Neutral - waypoint7: waypoint - Location: 23,40 - Owner: Neutral - waypoint6: waypoint - Location: 20,47 - Owner: Neutral - waypoint5: waypoint - Location: 10,44 - Owner: Neutral - waypoint4: waypoint - Location: 13,36 - Owner: Neutral - waypoint3: waypoint - Location: 36,41 - Owner: Neutral - waypoint2: waypoint - Location: 31,28 - Owner: Neutral - waypoint1: waypoint - Location: 18,25 - Owner: Neutral - waypoint0: waypoint - Location: 4,26 - Owner: Neutral - Refinery: proc - Location: 7,27 - Owner: GDI - FreeActor: false - Yard: fact - Location: 10,28 - Owner: GDI - Barracks: pyle - Location: 7,32 - Owner: GDI - Plant: nuke - Location: 11,31 - Owner: GDI - Silo1: silo - Location: 9,31 - Owner: GDI - Silo2: silo - Location: 9,33 - Owner: GDI - Guard1: e1 - Location: 8,40 - Owner: GDI - SubCell: 1 - Guard2: e1 - Location: 37,24 - Owner: GDI - SubCell: 3 - Guard3: e1 - Location: 36,24 - Owner: GDI - SubCell: 2 - Guard4: e1 - Location: 27,31 - Owner: GDI - SubCell: 1 - Harvester: harv - Location: 5,29 - Owner: GDI - Health: 39 - Facing: 896 McvEntry: waypoint - Location: 33,48 + Location: 62,43 Owner: Neutral McvRally: waypoint - Location: 33,46 + Location: 57,41 Owner: Neutral UnitsEntry: waypoint - Location: 30,48 + Location: 62,38 Owner: Neutral UnitsRally: waypoint - Location: 30,44 + Location: 56,38 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/nod02b/nod02b.lua b/mods/cnc/maps/nod02b/nod02b.lua index 98454d945c..d26c436ce8 100644 --- a/mods/cnc/maps/nod02b/nod02b.lua +++ b/mods/cnc/maps/nod02b/nod02b.lua @@ -10,10 +10,17 @@ NodUnits = { "bggy", "e1", "e1", "e1", "e1", "e1", "bggy", "e1", "e1", "e1", "bggy" } NodBaseBuildings = { "hand", "fact", "nuke" } -GDIBase = { Refinery, Yard, Barracks, Plant, Silo1, Silo2 } +GDIBase = { Refinery, Barracks, Powerplant, Yard } +Guards = { Guard1, Guard2, Guard3, Guard4, Guard5, Guard6, Guard7 } -GDIWaypoints1 = { waypoint0, waypoint1, waypoint2, waypoint3 } -GDIWaypoints2 = { waypoint0, waypoint1, waypoint4, waypoint5, waypoint6, waypoint7, waypoint9 } +Atk1CellTriggerActivator = { CPos.New(45,37), CPos.New(44,37), CPos.New(45,36), CPos.New(44,36), CPos.New(45,35), CPos.New(44,35), CPos.New(45,34), CPos.New(44,34) } +Atk4CellTriggerActivator = { CPos.New(50,47), CPos.New(49,47), CPos.New(48,47), CPos.New(47,47), CPos.New(46,47), CPos.New(45,47), CPos.New(44,47), CPos.New(43,47), CPos.New(42,47), CPos.New(41,47), CPos.New(40,47), CPos.New(39,47), CPos.New(38,47), CPos.New(37,47), CPos.New(50,46), CPos.New(49,46), CPos.New(48,46), CPos.New(47,46), CPos.New(46,46), CPos.New(45,46), CPos.New(44,46), CPos.New(43,46), CPos.New(42,46), CPos.New(41,46), CPos.New(40,46), CPos.New(39,46), CPos.New(38,46) } + +Atk1Waypoints = { waypoint2, waypoint4, waypoint5, waypoint6 } +Atk2Waypoints = { waypoint2, waypoint5, waypoint7, waypoint6 } +Atk3Waypoints = { waypoint2, waypoint4, waypoint5, waypoint9 } +Atk4Waypoints = { waypoint0, waypoint8, waypoint9 } +Pat1Waypoints = { waypoint0, waypoint1, waypoint2, waypoint3 } GetAttackers = function(amount) local units = GDI.GetActorsByType("e1") @@ -31,52 +38,59 @@ WorldLoaded = function() InitObjectives(Nod) - GDIObjective = GDI.AddObjective("Kill all enemies.") BuildBase = Nod.AddObjective("Build a base.") - DestroyGDI = Nod.AddObjective("Destroy all GDI units.") + DestroyGDI = Nod.AddObjective("Destroy the GDI base.") + GDIObjective = GDI.AddObjective("Kill all enemies.") - Utils.Do({ Refinery, Yard }, function(actor) + Utils.Do(Guards, function(actor) Trigger.OnDamaged(actor, function() - if not Grd2TriggerSwitch then - Grd2TriggerSwitch = true - Utils.Do(GetAttackers(5), IdleHunt) + if Atk3TriggerSwitch then + return end + + Atk3TriggerSwitch = true + MoveAndHunt(GetAttackers(4), Atk3Waypoints) end) end) - Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(25), function() - MoveAndHunt(GetAttackers(2), GDIWaypoints1) - end) - - Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(20), function() - MoveAndHunt(GetAttackers(3), GDIWaypoints2) - end) - - Trigger.OnKilled(Guard1, function() - MoveAndHunt(GetAttackers(3), GDIWaypoints2) - end) - - Trigger.OnKilled(Guard4, function() - MoveAndHunt(GetAttackers(2), GDIWaypoints1) - end) - - Trigger.OnAllKilled({ Guard2, Guard3 }, function() - MoveAndHunt(GetAttackers(2), GDIWaypoints1) - end) - - Trigger.OnDamaged(Harvester, function() - if Atk5TriggerSwitch then - return - end - - Atk5TriggerSwitch = true - MoveAndHunt(GetAttackers(3), GDIWaypoints2) - end) - Trigger.OnAllRemovedFromWorld(GDIBase, function() Utils.Do(GDI.GetGroundAttackers(), IdleHunt) end) + Trigger.AfterDelay(DateTime.Seconds(40), function() + MoveAndHunt(GetAttackers(3), Atk2Waypoints) + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(15), function() + MoveAndHunt(GetAttackers(3), Atk2Waypoints) + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(20), function() + MoveAndHunt(GetAttackers(3), Atk3Waypoints) + end) + + Trigger.AfterDelay(DateTime.Seconds(50), function() + MoveAndHunt(GetAttackers(3), Atk4Waypoints) + end) + + Trigger.AfterDelay(DateTime.Seconds(30), function() + MoveAndHunt(GetAttackers(3), Pat1Waypoints) + end) + + Trigger.OnEnteredFootprint(Atk1CellTriggerActivator, function(a, id) + if a.Owner == Nod then + MoveAndHunt(GetAttackers(5), Atk1Waypoints) + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(Atk4CellTriggerActivator, function(a, id) + if a.Owner == Nod then + MoveAndHunt(GetAttackers(3), Atk2Waypoints) + Trigger.RemoveFootprintTrigger(id) + end + end) + Trigger.AfterDelay(0, function() Utils.Do(GDI.GetActorsByType("e1"), function(unit) RebuildUnit({ unit }, GDI, Barracks) @@ -89,14 +103,14 @@ WorldLoaded = function() end Tick = function() - if DateTime.GameTime > 2 and Nod.HasNoRequiredUnits() then - GDI.MarkCompletedObjective(GDIObjective) - end - if GDI.HasNoRequiredUnits() then Nod.MarkCompletedObjective(DestroyGDI) end + if DateTime.GameTime > 2 and Nod.HasNoRequiredUnits() then + GDI.MarkCompletedObjective(GDIObjective) + end + if DateTime.GameTime % DateTime.Seconds(1) == 0 and not Nod.IsObjectiveCompleted(BuildBase) and CheckForBase(Nod, NodBaseBuildings) then Nod.MarkCompletedObjective(BuildBase) end diff --git a/mods/cnc/maps/nod02b/rules.yaml b/mods/cnc/maps/nod02b/rules.yaml index 9407d78484..cc17ed1c17 100644 --- a/mods/cnc/maps/nod02b/rules.yaml +++ b/mods/cnc/maps/nod02b/rules.yaml @@ -1,3 +1,7 @@ +Player: + PlayerResources: + DefaultCash: 4000 + World: LuaScript: Scripts: campaign-global.lua, nod02b.lua @@ -11,9 +15,60 @@ World: WinVideo: airstrk.vqa LossVideo: deskill.vqa -Player: - PlayerResources: - DefaultCash: 4000 +^Vehicle: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + RenderSprites: + PlayerPalette: player-units + +^Tank: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + RenderSprites: + PlayerPalette: player-units + +^Helicopter: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + RenderSprites: + PlayerPalette: player-units + +^Infantry: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + RenderSprites: + PlayerPalette: player-units + +^Plane: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Ship: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Wall: + Tooltip: + ShowOwnerRow: false + +^CommonHuskDefaults: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + RenderSprites: + PlayerPalette: player-units NUK2: Buildable: @@ -74,6 +129,20 @@ MLRS: MCV: Buildable: Prerequisites: ~disabled + RenderSprites: + PlayerPalette: player + +MCV.Husk: + RenderSprites: + PlayerPalette: player + +HARV: + RenderSprites: + PlayerPalette: player + +HARV.Husk: + RenderSprites: + PlayerPalette: player SAM: Buildable: diff --git a/mods/cnc/maps/nod03a/map.png b/mods/cnc/maps/nod03a/map.png index c2266c16db..9a81cbb327 100644 Binary files a/mods/cnc/maps/nod03a/map.png and b/mods/cnc/maps/nod03a/map.png differ diff --git a/mods/cnc/maps/nod03b/map.png b/mods/cnc/maps/nod03b/map.png index 9a81cbb327..c2266c16db 100644 Binary files a/mods/cnc/maps/nod03b/map.png and b/mods/cnc/maps/nod03b/map.png differ diff --git a/mods/cnc/maps/nod04a/map.bin b/mods/cnc/maps/nod04a/map.bin index 734f961998..674281dc6b 100644 Binary files a/mods/cnc/maps/nod04a/map.bin and b/mods/cnc/maps/nod04a/map.bin differ diff --git a/mods/cnc/maps/nod04a/map.yaml b/mods/cnc/maps/nod04a/map.yaml index 17e8cf76af..4299bd60d0 100644 --- a/mods/cnc/maps/nod04a/map.yaml +++ b/mods/cnc/maps/nod04a/map.yaml @@ -2,7 +2,7 @@ MapFormat: 11 RequiresMod: cnc -Title: 04a: Mao Civil War +Title: 04a: Oum Hadjer Author: Westwood Studios @@ -10,7 +10,7 @@ Tileset: DESERT MapSize: 64,64 -Bounds: 11,6,46,34 +Bounds: 7,17,52,44 Visibility: MissionSelector @@ -19,26 +19,21 @@ Categories: Campaign LockPreview: True Players: + PlayerReference@GDI: + Name: GDI + Bot: campaign + Faction: gdi + Color: F5D378 + Enemies: Nod PlayerReference@Neutral: Name: Neutral OwnsWorld: True NonCombatant: True Faction: gdi - PlayerReference@NodSupporter: - Name: NodSupporter - NonCombatant: True - Faction: nod - Bot: campaign - PlayerReference@GDI: - Name: GDI - Faction: gdi - Color: F5D378 - Enemies: Nod - Bot: campaign PlayerReference@Nod: Name: Nod - Playable: True AllowBots: False + Playable: True Required: True LockFaction: True Faction: nod @@ -49,491 +44,437 @@ Players: Enemies: GDI Actors: - Actor0: t08 - Location: 34,20 + Actor0: sbag + Location: 58,26 Owner: Neutral - Actor1: t18 - Location: 33,18 + Actor1: sbag + Location: 57,26 Owner: Neutral - Actor2: t18 - Location: 33,9 + Actor2: sbag + Location: 56,26 Owner: Neutral - Actor3: t08 - Location: 41,5 + Actor3: sbag + Location: 55,26 Owner: Neutral - Actor4: t18 - Location: 42,15 + Actor4: sbag + Location: 54,26 Owner: Neutral - Actor5: t08 - Location: 45,26 + Actor5: sbag + Location: 53,26 Owner: Neutral - Actor6: t08 - Location: 56,29 + Actor6: sbag + Location: 52,26 Owner: Neutral - Actor7: t08 - Location: 55,29 - Owner: Neutral - Actor8: t08 + Actor7: sbag Location: 51,26 Owner: Neutral - Actor9: t08 - Location: 56,18 + Actor8: sbag + Location: 50,26 Owner: Neutral - Actor10: t08 - Location: 52,16 + Actor9: sbag + Location: 49,26 Owner: Neutral - Actor11: t08 - Location: 45,21 + Actor10: sbag + Location: 48,26 Owner: Neutral - Actor12: t08 - Location: 38,19 + Actor11: sbag + Location: 47,26 Owner: Neutral - Actor13: t08 - Location: 23,16 + Actor12: sbag + Location: 58,25 Owner: Neutral - Actor14: t08 - Location: 14,22 + Actor13: sbag + Location: 47,25 Owner: Neutral - Actor15: t08 - Location: 26,22 + Actor14: sbag + Location: 58,24 Owner: Neutral - Actor16: t08 - Location: 21,26 + Actor15: sbag + Location: 47,24 Owner: Neutral - Actor17: t08 - Location: 48,6 + Actor16: sbag + Location: 58,23 Owner: Neutral - Actor18: t08 - Location: 15,19 + Actor17: sbag + Location: 58,22 Owner: Neutral - Actor19: t08 - Location: 31,15 + Actor18: sbag + Location: 58,21 Owner: Neutral - Actor20: t18 - Location: 49,34 + Actor19: sbag + Location: 47,21 Owner: Neutral - Actor21: t18 - Location: 48,38 + Actor20: sbag + Location: 58,20 Owner: Neutral - Actor22: t18 - Location: 42,35 + Actor21: sbag + Location: 47,20 Owner: Neutral - Actor23: t18 - Location: 54,37 + Actor22: sbag + Location: 58,19 Owner: Neutral - Actor24: t08 - Location: 51,35 + Actor23: sbag + Location: 47,19 Owner: Neutral - Actor25: t08 - Location: 45,37 + Actor24: sbag + Location: 58,18 Owner: Neutral - Actor26: t08 - Location: 47,33 + Actor25: sbag + Location: 57,18 Owner: Neutral - Actor27: t18 - Location: 13,10 + Actor26: sbag + Location: 48,18 Owner: Neutral - Actor28: t18 - Location: 20,7 + Actor27: sbag + Location: 47,18 Owner: Neutral - Actor30: t08 - Location: 12,8 + Actor28: sbag + Location: 58,17 Owner: Neutral - Actor31: t08 - Location: 23,9 + Actor29: sbag + Location: 57,17 Owner: Neutral - Actor32: v35 - Location: 48,38 - Owner: NodSupporter - Actor33: v34 - Location: 46,33 - Owner: NodSupporter - Actor35: v32 - Location: 54,35 - Owner: NodSupporter - Actor36: v30 - Location: 48,32 - Owner: NodSupporter - Actor37: v30 - Location: 52,34 - Owner: NodSupporter - Actor38: v31 - Location: 52,35 - Owner: NodSupporter - Actor39: v32 - Location: 46,37 - Owner: NodSupporter - Health: 73 - Actor41: v34 - Location: 49,38 - Owner: NodSupporter - Actor42: v35 - Location: 46,32 - Owner: NodSupporter - Actor43: v36 - Location: 48,37 - Owner: NodSupporter - Actor44: v32 - Location: 49,33 - Owner: NodSupporter - Actor45: v34 - Location: 50,34 - Owner: NodSupporter - Actor46: v20 - Location: 15,10 + Actor30: sbag + Location: 56,17 + Owner: Neutral + Actor31: sbag + Location: 55,17 + Owner: Neutral + Actor32: sbag + Location: 54,17 + Owner: Neutral + Actor33: sbag + Location: 53,17 + Owner: Neutral + Actor34: sbag + Location: 52,17 + Owner: Neutral + Actor35: sbag + Location: 51,17 + Owner: Neutral + Actor36: sbag + Location: 50,17 + Owner: Neutral + Actor37: sbag + Location: 49,17 + Owner: Neutral + Actor38: sbag + Location: 48,17 + Owner: Neutral + Actor39: sbag + Location: 47,17 + Owner: Neutral + Actor40: t18 + Location: 47,50 + Owner: Neutral + Actor41: t18 + Location: 46,31 + Owner: Neutral + Actor42: t08 + Location: 39,26 + Owner: Neutral + Actor43: t18 + Location: 37,25 + Owner: Neutral + Actor44: t18 + Location: 27,28 + Owner: Neutral + Actor45: t18 + Location: 54,26 + Owner: Neutral + Actor46: t18 + Location: 49,18 + Owner: Neutral + Actor47: t18 + Location: 23,54 + Owner: Neutral + Actor48: t18 + Location: 34,40 + Owner: Neutral + Actor49: t08 + Location: 16,45 + Owner: Neutral + Actor50: t08 + Location: 14,53 + Owner: Neutral + Actor52: t18 + Location: 13,44 + Owner: Neutral + Actor57: t18 + Location: 36,49 + Owner: Neutral + Actor58: t18 + Location: 44,59 + Owner: Neutral + Actor59: t18 + Location: 11,37 + Owner: Neutral + Actor60: t18 + Location: 25,20 + Owner: Neutral + Actor61: gtwr + Location: 46,21 Owner: GDI - Actor47: v21 - Location: 12,10 + Actor62: gtwr + Location: 46,24 Owner: GDI - Actor48: v22 - Location: 21,11 + Actor63: hosp + Location: 48,19 Owner: GDI - Actor49: v23 - Location: 22,8 + Actor64: pyle + Location: 50,20 Owner: GDI - Actor50: v24 - Location: 18,8 + Actor65: nuke + Location: 53,21 Owner: GDI - Actor51: v25 - Location: 13,7 + Actor66: nuke + Location: 52,23 Owner: GDI - Actor52: v26 - Location: 20,9 + Actor67: silo + Location: 56,24 Owner: GDI - Actor53: v27 - Location: 15,9 + Actor68: silo + Location: 55,22 Owner: GDI - Actor54: v27 - Location: 14,9 + Actor69: fact + Location: 53,18 Owner: GDI - Actor55: v27 - Location: 13,9 + Actor70: hq + Location: 56,19 Owner: GDI - Actor56: v28 - Location: 21,7 + Actor72: v36 + Location: 12,54 + Owner: Neutral + Actor73: v35 + Location: 10,54 + Owner: Neutral + Actor74: v34 + Location: 11,53 + Owner: Neutral + Actor75: v33 + Location: 15,53 + Owner: Neutral + Actor76: v32 + Location: 12,53 + Owner: Neutral + Actor77: v31 + Location: 10,52 + Owner: Neutral + Actor87: v23 + Location: 9,59 + Owner: Neutral + Jeep1: jeep + Location: 51,25 Owner: GDI - Actor57: v29 - Location: 22,7 + Jeep2: jeep + Location: 50,25 Owner: GDI - Actor58: v30 - Location: 21,10 - Owner: GDI - Actor59: v30 - Location: 23,8 - Owner: GDI - Actor61: jeep - Location: 15,23 - Owner: GDI - Facing: 640 - Actor62: jeep - Location: 36,6 + Actor94: jeep + Location: 39,48 Owner: GDI Facing: 384 - Actor65: mtnk - Location: 29,10 + Actor110: e1 + Location: 40,49 Owner: GDI - Facing: 256 - Actor71: jeep - Location: 24,26 - Owner: GDI - Facing: 384 - Actor72: jeep - Location: 37,19 - Owner: GDI - Facing: 128 - Actor73: jeep - Location: 27,33 - Owner: GDI - Facing: 384 - Actor86: e1 - Location: 43,15 - Owner: GDI - Health: 88 - Facing: 128 - SubCell: 3 - Actor99: e1 - Location: 45,15 - Owner: GDI - SubCell: 3 - Actor100: e1 - Location: 43,15 - Owner: GDI - Health: 94 - Facing: 128 - SubCell: 4 - Actor105: e1 - Location: 46,14 - Owner: GDI - SubCell: 2 - Actor106: e1 - Location: 18,29 - Owner: GDI - Facing: 384 - SubCell: 4 - Actor107: e1 - Location: 12,20 - Owner: GDI - SubCell: 1 - Actor108: e1 - Location: 39,23 - Owner: GDI - SubCell: 1 - Actor119: e2 - Location: 18,8 - Owner: GDI - Facing: 512 - SubCell: 3 - Actor120: e2 - Location: 16,10 - Owner: GDI - Facing: 384 - SubCell: 2 - Actor121: e2 - Location: 27,19 - Owner: GDI - Facing: 512 - SubCell: 1 - Actor122: e2 - Location: 25,34 - Owner: GDI - SubCell: 4 - Actor123: e1 - Location: 13,13 - Owner: GDI - Facing: 512 - SubCell: 1 - Actor124: e1 - Location: 13,13 - Owner: GDI - Facing: 512 - SubCell: 2 - Actor125: e2 - Location: 13,13 - Owner: GDI - Facing: 512 - SubCell: 4 - Actor126: e2 - Location: 13,13 - Owner: GDI - Facing: 512 - SubCell: 3 - Actor127: e2 - Location: 29,18 - Owner: GDI - Facing: 256 - SubCell: 3 - Actor128: e2 - Location: 27,22 - Owner: GDI - Facing: 256 - SubCell: 1 - Actor129: e2 - Location: 36,10 - Owner: GDI - Health: 38 - Facing: 256 + Facing: 896 SubCell: 0 - Actor131: e1 - Location: 21,12 + Actor111: e2 + Location: 38,50 Owner: GDI - Facing: 512 - SubCell: 4 - Actor132: e1 - Location: 22,12 - Owner: GDI - Facing: 512 - SubCell: 3 - Actor29: t18 - Location: 14,7 - Owner: Neutral - waypoint27: waypoint - Location: 35,25 - Owner: Neutral - waypoint26: waypoint - Location: 44,6 - Owner: Neutral - waypoint9: waypoint - Location: 26,19 - Owner: Neutral - waypoint8: waypoint - Location: 53,37 - Owner: Neutral - waypoint7: waypoint - Location: 47,35 - Owner: Neutral - waypoint6: waypoint - Location: 45,11 - Owner: Neutral - waypoint5: waypoint - Location: 40,17 - Owner: Neutral - waypoint4: waypoint - Location: 39,34 - Owner: Neutral - waypoint3: waypoint - Location: 21,38 - Owner: Neutral - waypoint2: waypoint - Location: 20,28 - Owner: Neutral - waypoint1: waypoint - Location: 13,26 - Owner: Neutral - waypoint0: waypoint - Location: 13,14 - Owner: Neutral - Civilian1: v33 - Location: 48,34 - Owner: Neutral - Health: 62 - Civilian2: v33 - Location: 54,37 - Owner: Neutral - Soldier1: e2 - Location: 22,15 - Owner: GDI - Facing: 384 - SubCell: 2 - Soldier2: e1 - Location: 17,14 - Owner: GDI - Facing: 384 - SubCell: 4 - Soldier3: e2 - Location: 13,16 - Owner: GDI - Facing: 384 - SubCell: 1 - GDICiv1: c9 - Location: 20,12 - Owner: GDI - SubCell: 3 - GDICiv2: c4 - Location: 18,7 - Owner: GDI - SubCell: 0 - GDICiv3: c9 - Location: 19,12 - Owner: GDI - SubCell: 1 - GDICiv4: c8 - Location: 16,8 - Owner: GDI - SubCell: 3 - GDICiv5: c7 - Location: 17,9 - Owner: GDI - SubCell: 1 - GDICiv6: c6 - Location: 24,13 - Owner: GDI - SubCell: 2 - GDICiv7: c5 - Location: 20,7 - Owner: GDI - SubCell: 4 - GDICiv8: c4 - Location: 14,12 - Owner: GDI - SubCell: 1 - GDICiv9: c3 - Location: 15,10 - Owner: GDI - SubCell: 2 - GDICiv10: c2 - Location: 14,10 - Owner: GDI - SubCell: 1 - GDICiv11: c1 - Location: 17,7 - Owner: GDI - SubCell: 2 - GDICiv12: c1 - Location: 20,10 - Owner: GDI - SubCell: 1 - GDICiv13: c1 - Location: 20,11 - Owner: GDI - SubCell: 3 - UnitsEntryBuggy: waypoint - Location: 52,6 - Owner: Neutral - UnitsRallyBuggy: waypoint - Location: 52,10 - Owner: Neutral - UnitsEntryBikes: waypoint - Location: 50,6 - Owner: Neutral - UnitsRallyBikes: waypoint - Location: 50,10 - Owner: Neutral - UnitsEntryGunner: waypoint - Location: 54,6 - Owner: Neutral - UnitsRallyGunner: waypoint - Location: 54,10 - Owner: Neutral - UnitsEntryRocket: waypoint - Location: 56,12 - Owner: Neutral - UnitsRallyRocket: waypoint - Location: 54,12 - Owner: Neutral - NodCiv1: c8 - Location: 46,36 - Owner: NodSupporter - Facing: 512 - SubCell: 2 - NodCiv2: e3 - Location: 48,36 - Owner: NodSupporter - Facing: 768 - SubCell: 4 - NodCiv3: c4 - Location: 52,38 - Owner: NodSupporter - Facing: 768 - SubCell: 1 - NodCiv4: c3 - Location: 45,35 - Owner: NodSupporter - Facing: 128 - SubCell: 4 - NodCiv5: c1 - Location: 51,36 - Owner: NodSupporter Facing: 896 SubCell: 2 - NodCiv6: c2 - Location: 45,34 - Owner: NodSupporter - Facing: 0 - SubCell: 1 - NodCiv7: c4 - Location: 54,36 - Owner: NodSupporter - Facing: 640 - SubCell: 0 - NodCiv8: c5 - Location: 50,37 - Owner: NodSupporter - Facing: 384 - SubCell: 2 - NodCiv9: c9 - Location: 47,34 - Owner: NodSupporter - Facing: 768 - SubCell: 2 - Gciv1: e1 - Location: 38,9 + Actor112: e2 + Location: 38,49 Owner: GDI Facing: 512 SubCell: 0 - Gciv2: e1 - Location: 18,10 + Actor113: e2 + Location: 35,40 Owner: GDI - Facing: 640 + SubCell: 0 + Actor114: e2 + Location: 35,40 + Owner: GDI + SubCell: 1 + waypoint27: waypoint + Location: 31,36 + Owner: Neutral + waypoint25: waypoint + Location: 40,43 + Owner: Neutral + waypoint26: waypoint + Location: 28,27 + Owner: Neutral + waypoint11: waypoint + Location: 54,29 + Owner: Neutral + waypoint10: waypoint + Location: 45,28 + Owner: Neutral + GDIBase: waypoint + Location: 52,22 + Owner: Neutral + waypoint8: waypoint + Location: 43,22 + Owner: Neutral + waypoint7: waypoint + Location: 31,22 + Owner: Neutral + waypoint6: waypoint + Location: 21,25 + Owner: Neutral + waypoint5: waypoint + Location: 18,39 + Owner: Neutral + waypoint4: waypoint + Location: 10,48 + Owner: Neutral + waypoint3: waypoint + Location: 19,48 + Owner: Neutral + waypoint2: waypoint + Location: 27,55 + Owner: Neutral + waypoint1: waypoint + Location: 48,56 + Owner: Neutral + waypoint0: waypoint + Location: 54,42 + Owner: Neutral + Convoi: apc + Location: 24,53 + Owner: GDI + CivBuilding1: v26 + Location: 8,51 + Owner: GDI + CivBuilding2: v30 + Location: 17,46 + Owner: GDI + CivBuilding3: v29 + Location: 16,46 + Owner: GDI + CivBuilding4: v28 + Location: 15,45 + Owner: GDI + CivBuilding5: v27 + Location: 14,51 + Owner: GDI + CivBuilding6: v27 + Location: 13,51 + Owner: GDI + CivBuilding7: v27 + Location: 12,51 + Owner: GDI + CivBuilding8: v26 + Location: 14,46 + Owner: GDI + CivBuilding9: v25 + Location: 19,46 + Owner: GDI + CivBuilding10: v24 + Location: 8,47 + Owner: GDI + CivBuilding11: v22 + Location: 9,45 + Owner: GDI + CivBuilding12: v22 + Location: 18,52 + Owner: GDI + CivBuilding13: v21 + Location: 16,51 + Owner: GDI + CivBuilding14: v20 + Location: 8,45 + Owner: GDI + Civilian1: c2 + Location: 11,50 + Owner: GDI + Facing: 896 + SubCell: 0 + Civilian2: c9 + Location: 12,49 + Owner: GDI + Facing: 896 SubCell: 2 + Civilian3: c8 + Location: 14,49 + Owner: GDI + Facing: 256 + SubCell: 3 + Civilian4: c7 + Location: 13,50 + Owner: GDI + Facing: 896 + SubCell: 0 + Civilian5: c6 + Location: 11,49 + Owner: GDI + Facing: 128 + SubCell: 0 + Civilian6: c5 + Location: 12,50 + Owner: GDI + Facing: 896 + SubCell: 2 + Civilian7: c4 + Location: 10,50 + Owner: GDI + Facing: 128 + SubCell: 1 + Civilian8: c3 + Location: 10,51 + Owner: GDI + Facing: 128 + SubCell: 1 + Actor56: t18 + Location: 19,51 + Owner: Neutral + Actor55: t18 + Location: 20,46 + Owner: Neutral + Actor51: t08 + Location: 13,46 + Owner: Neutral + Actor53: t18 + Location: 7,46 + Owner: Neutral + Actor54: t18 + Location: 11,51 + Owner: Neutral + GDIGunner1: e1 + Location: 41,50 + Owner: GDI + Facing: 768 + SubCell: 2 + GDIGunner2: e1 + Location: 39,50 + Owner: GDI + SubCell: 0 + GDIGunner3: e1 + Location: 40,50 + Owner: GDI + Facing: 256 + SubCell: 0 + EntryPointVehicle: waypoint + Location: 33,17 + Owner: Neutral + RallyPointVehicle: waypoint + Location: 33,30 + Owner: Neutral + EntryPointRocket: waypoint + Location: 35,17 + Owner: Neutral + RallyPointRocket: waypoint + Location: 35,32 + Owner: Neutral + EntryPointGunner: waypoint + Location: 31,17 + Owner: Neutral + RallyPointGunner: waypoint + Location: 31,32 + Owner: Neutral + CameraPoint: waypoint + Location: 32,22 + 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/nod04a/nod04a.lua b/mods/cnc/maps/nod04a/nod04a.lua index ac9af88baa..6811b787c0 100644 --- a/mods/cnc/maps/nod04a/nod04a.lua +++ b/mods/cnc/maps/nod04a/nod04a.lua @@ -7,201 +7,124 @@ information, see COPYING. ]] -NodUnitsBuggy = { "bggy", "bggy", "bggy", "bggy", "bggy" } -NodUnitsBikes = { "bike", "bike", "bike" } -NodUnitsGunner = { "e1", "e1", "e1", "e1", "e1", "e1" } +NodUnitsBuggy = { "bggy", "bggy", "bike", "bike" } NodUnitsRocket = { "e3", "e3", "e3", "e3", "e3", "e3" } +NodUnitsGunner = { "e1", "e1", "e1", "e1", "e1", "e1" } -Atk6Units = { "c1", "c2", "c3" } -Atk5Units = { "e1", "e1", "e2", "e2" } -Atk1Units = { "e1", "e1" } -JeepReinforcements = { "jeep" } -GDIUnits = { "e1", "e1", "e2" } -ApcUnits = { "e1", "e1", "e2", "e2" } +Apc3Trigger = { CPos.New(28,58), CPos.New(27,58), CPos.New(28,57), CPos.New(27,57), CPos.New(28,56), CPos.New(27,56), CPos.New(28,55), CPos.New(27,55), CPos.New(28,54), CPos.New(27,54), CPos.New(28,53), CPos.New(27,53) } +NorthernBridgeTrigger = { CPos.New(13,41), CPos.New(14,41), CPos.New(15,41), CPos.New(14,42), CPos.New(15,42), CPos.New(16,42) } +SouthernBridgeTrigger = { CPos.New(26,54), CPos.New(25,54), CPos.New(24,54), CPos.New(25,53), CPos.New(24,53), CPos.New(23,53) } -Spawnpoint = { waypoint0.Location } -Atk6WaypointsPart1 = { waypoint1.Location, waypoint2.Location, waypoint3.Location, waypoint4.Location } -Atk6WaypointsPart2 = { waypoint7.Location, waypoint8.Location, waypoint7.Location } -Atk5Waypoints = { waypoint0.Location, waypoint9.Location} -Atk3Waypoints = { waypoint0 } -Atk2Waypoints = { waypoint6 } -GcivWaypoints = { waypoint0, waypoint1, waypoint2, waypoint3, waypoint4 } -Atk1Waypoints = { waypoint0, waypoint1, waypoint2, waypoint3, waypoint4, waypoint5, waypoint6 } -Atk4Waypoints = { waypoint0, waypoint9 } +Apc1Units = { "c2", "c3", "c4", "c5" } -Atk6ActorTriggerActivator = { Civilian1, Civilian2 } -Atk5ActorTriggerActivator = { Soldier1, Soldier2, Soldier3, Actor105 } -WinActorTriggerActivator = { GDICiv1, GDICiv2, GDICiv3, GDICiv4, GDICiv5, GDICiv6, GDICiv7, GDICiv8, GDICiv9, GDICiv11, GDICiv12, GDICiv13 } -GcivActors = { Gcvi1, Gciv2, GDICiv2, GDICiv9, GDICiv10, GDICiv11 } +Civilians = { Civilian1, Civilian2, Civilian3, Civilian4, Civilian5, Civilian6, Civilian7, Civilian8 } +TargetActors = { Civilian1, Civilian2, Civilian3, Civilian4, Civilian5, Civilian6, Civilian7, Civilian8, CivBuilding1, CivBuilding2, CivBuilding3, CivBuilding4, CivBuilding5, CivBuilding6, CivBuilding7, CivBuilding8, CivBuilding9, CivBuilding10, CivBuilding11, CivBuilding12, CivBuilding13, CivBuilding14 } +Apc2Trigger = { GDIGunner1, GDIGunner2, GDIGunner3 } -Atk2CellTriggerActivator = { CPos.New(41,22), CPos.New(40,22), CPos.New(39,22), CPos.New(41,21), CPos.New(40,21), CPos.New(39,21) } -Atk3CellTriggerActivator = { CPos.New(18,18), CPos.New(17,18), CPos.New(16,18), CPos.New(15,18), CPos.New(14,18), CPos.New(13,18), CPos.New(12,18), CPos.New(11,18), CPos.New(24,17), CPos.New(23,17), CPos.New(22,17), CPos.New(21,17), CPos.New(20,17), CPos.New(19,17), CPos.New(17,17), CPos.New(16,17), CPos.New(15,17), CPos.New(14,17), CPos.New(13,17), CPos.New(12,17), CPos.New(11,17) } -Atk4CellTriggerActivator = { CPos.New(29,28), CPos.New(28,28), CPos.New(29,27), CPos.New(28,27), CPos.New(29,26), CPos.New(28,26), CPos.New(29,25), CPos.New(28,25), CPos.New(29,24), CPos.New(28,24), CPos.New(29,23), CPos.New(28,23), CPos.New(29,22), CPos.New(28,22) } -GcivCellTriggerActivator = { CPos.New(51,17), CPos.New(50,17), CPos.New(49,17), CPos.New(48,17), CPos.New(47,17), CPos.New(46,17), CPos.New(45,17), CPos.New(44,17), CPos.New(43,17), CPos.New(42,17), CPos.New(41,17), CPos.New(40,17), CPos.New(39,17), CPos.New(38,17), CPos.New(37,17), CPos.New(36,17), CPos.New(35,17), CPos.New(52,16), CPos.New(51,16), CPos.New(50,16), CPos.New(49,16), CPos.New(48,16), CPos.New(47,16), CPos.New(46,16), CPos.New(45,16), CPos.New(44,16), CPos.New(43,16), CPos.New(42,16), CPos.New(41,16), CPos.New(40,16), CPos.New(39,16), CPos.New(38,16), CPos.New(37,16), CPos.New(36,16), CPos.New(35,16) } -DelxCellTriggerActivator = { CPos.New(42,20), CPos.New(41,20), CPos.New(40,20), CPos.New(39,20), CPos.New(38,20) } -DelyCellTriggerActivator = { CPos.New(31,28), CPos.New(30,28), CPos.New(31,27), CPos.New(30,27), CPos.New(31,26), CPos.New(30,26), CPos.New(31,25), CPos.New(30,25), CPos.New(31,24), CPos.New(30,24) } -DelzCellTriggerActivator = { CPos.New(18,20), CPos.New(17,20), CPos.New(16,20), CPos.New(15,20), CPos.New(14,20), CPos.New(13,20), CPos.New(12,20), CPos.New(11,20), CPos.New(25,19), CPos.New(24,19), CPos.New(23,19), CPos.New(22,19), CPos.New(21,19), CPos.New(20,19), CPos.New(19,19), CPos.New(18,19), CPos.New(17,19), CPos.New(16,19), CPos.New(15,19), CPos.New(14,19), CPos.New(13,19), CPos.New(12,19), CPos.New(11,19), CPos.New(25,18), CPos.New(24,18), CPos.New(23,18), CPos.New(22,18), CPos.New(21,18), CPos.New(20,18), CPos.New(19,18) } - -NodCiviliansActors = { NodCiv1, NodCiv2, NodCiv3, NodCiv4, NodCiv5, NodCiv6, NodCiv7, NodCiv8, NodCiv9 } - -SendJeepReinforcements = function() - if not PreventJeepReinforcements then - local units = Reinforcements.Reinforce(GDI, JeepReinforcements, Spawnpoint, 15) - MoveAndHunt(units, Atk2Waypoints) - end -end - -SendGDIReinforcements = function() - if not PreventGDIReinforcements then - local units = Reinforcements.Reinforce(GDI, GDIUnits, Spawnpoint, 15) - MoveAndHunt(units, Atk4Waypoints) - end -end - -SendApcReinforcements = function() - if not PreventApcReinforcements then - Reinforcements.ReinforceWithTransport(GDI, "apc", ApcUnits, Atk5Waypoints, nil, - function(transport, cargo) - transport.UnloadPassengers() - Utils.Do(cargo, IdleHunt) - end, IdleHunt) - end -end - -CreateCivilians = function(actor, discoverer) - Utils.Do(NodCiviliansActors, function(actor) - actor.Owner = Nod - end) - - ProtectCivilians = Nod.AddPrimaryObjective("Protect the civilians that support Nod.") - Trigger.OnAllKilled(NodCiviliansActors, function() - Nod.MarkFailedObjective(ProtectCivilians) - end) - - Utils.Do(GcivActors, function(actor) - if not actor.IsDead then - actor.AttackMove(waypoint7.Location) - actor.AttackMove(waypoint8.Location) - IdleHunt(actor) - end - end) -end +Apc1Waypoints = { waypoint0.Location, waypoint11.Location, waypoint10.Location, waypoint8.Location, GDIBase.Location } +Apc2Waypoints = { waypoint8, waypoint7, waypoint6, waypoint5, waypoint4 } +Apc3Waypoints = { waypoint3, waypoint2, waypoint1, waypoint0, waypoint11, waypoint10, waypoint8, GDIBase } +FlightRouteTop = { waypoint4, waypoint5, waypoint6, waypoint7, waypoint8, GDIBase } +FlightRouteBottom = { waypoint3, waypoint2, waypoint1, waypoint11, waypoint10, waypoint8, GDIBase } +Hummer1Waypoints = { waypoint8, waypoint7, waypoint6, waypoint5, waypoint4, waypoint3, waypoint2, waypoint1, waypoint0, waypoint11, waypoint10, waypoint8 } WorldLoaded = function() Nod = Player.GetPlayer("Nod") - NodSupporter = Player.GetPlayer("NodSupporter") GDI = Player.GetPlayer("GDI") - InitObjectives(Nod) + Trigger.AfterDelay(DateTime.Seconds(3), function() + local apc = Actor.Create("apc", true, { Owner = GDI, Location = Apc1Waypoints[1], Cargo = Apc1Units }) + Utils.Do(Apc1Waypoints, function(waypoint) + apc.AttackMove(waypoint) + end) - Trigger.OnAnyKilled(Atk6ActorTriggerActivator, function() - Reinforcements.ReinforceWithTransport(GDI, "apc", Atk6Units, Atk6WaypointsPart1, Atk6WaypointsPart2, - function(transport, cargo) - Utils.Do(cargo, IdleHunt) - end, IdleHunt) - end) - - Utils.Do(Atk5ActorTriggerActivator, function(actor) - Trigger.OnDamaged(actor, function() - if Atk5TriggerSwitch then - return + Trigger.OnEnteredFootprint(Apc3Trigger, function(a, id) + if a.Owner == Nod then + MoveAndHunt({ apc }, Apc3Waypoints) + Trigger.RemoveFootprintTrigger(id) end - - Atk5TriggerSwitch = true - Reinforcements.ReinforceWithTransport(GDI, "apc", Atk5Units, Atk5Waypoints, nil, - function(transport, cargo) - transport.UnloadPassengers() - Utils.Do(cargo, IdleHunt) - end, IdleHunt) end) end) - Trigger.OnEnteredFootprint(Atk3CellTriggerActivator, function(a, id) + Trigger.OnEnteredFootprint(NorthernBridgeTrigger, function(a, id) if a.Owner == Nod then - Trigger.RemoveFootprintTrigger(id) + if not CiviliansEvacuated then + CiviliansEvacuated = true + Utils.Do(Civilians, function(civ) + Utils.Do(FlightRouteBottom, function(waypoint) + civ.Move(waypoint.Location) + end) - for type, count in pairs({ ["e1"] = 3, ["e2"] = 2, ["mtnk"] = 1 }) do - MoveAndHunt(Utils.Take(count, GDI.GetActorsByType(type)), Atk3Waypoints) + Trigger.OnIdle(civ, function() + if civ.Location == GDIBase.Location then + Trigger.Clear(civ, "OnIdle") + else + civ.Move(GDIBase.Location) + end + end) + end) end - end - end) - Trigger.OnEnteredFootprint(Atk2CellTriggerActivator, function(a, id) - if a.Owner == Nod then - MoveAndHunt(Utils.Take(1, GDI.GetActorsByType("jeep")), Atk2Waypoints) Trigger.RemoveFootprintTrigger(id) end end) - Trigger.OnEnteredFootprint(GcivCellTriggerActivator, function(a, id) + Trigger.OnEnteredFootprint(SouthernBridgeTrigger, function(a, id) if a.Owner == Nod then - MoveAndHunt(GcivActors, GcivWaypoints) - Trigger.RemoveFootprintTrigger(id) - end - end) + if not CiviliansEvacuated then + CiviliansEvacuated = true + Utils.Do(Civilians, function(civ) + Utils.Do(FlightRouteTop, function(waypoint) + civ.Move(waypoint.Location) + end) - Trigger.OnEnteredFootprint(Atk4CellTriggerActivator, function(a, id) - if a.Owner == Nod then - for type, count in pairs({ ["e1"] = 2,["e2"] = 1 }) do - MoveAndHunt(Utils.Take(count, GDI.GetActorsByType(type)), Atk4Waypoints) + Trigger.OnIdle(civ, function() + if civ.Location == GDIBase.Location then + Trigger.Clear(civ, "OnIdle") + else + civ.Move(GDIBase.Location) + end + end) + end) end + Trigger.RemoveFootprintTrigger(id) end end) - Trigger.AfterDelay(DateTime.Seconds(20), function() - local units = Reinforcements.Reinforce(GDI, Atk1Units, Spawnpoint, 15) - MoveAndHunt(units, Atk1Waypoints) + Trigger.OnDiscovered(Convoi, function() + MoveAndHunt({ Jeep1, Jeep2 }, Hummer1Waypoints) end) - Trigger.AfterDelay(DateTime.Seconds(50), SendJeepReinforcements) - Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), SendGDIReinforcements) - Trigger.AfterDelay(DateTime.Minutes(2) + DateTime.Seconds(30), SendApcReinforcements) - - Trigger.OnEnteredFootprint(DelxCellTriggerActivator, function(a, id) - if a.Owner == Nod then - PreventJeepReinforcements = true - Trigger.RemoveFootprintTrigger(id) - end + Trigger.OnAllRemovedFromWorld(Apc2Trigger, function() + MoveAndHunt({ Convoi }, Apc2Waypoints) end) - Trigger.OnEnteredFootprint(DelyCellTriggerActivator, function(a, id) - if a.Owner == Nod then - PreventGDIReinforcements = true - Trigger.RemoveFootprintTrigger(id) - end + Trigger.OnAllRemovedFromWorld(TargetActors, function() + Nod.MarkCompletedObjective(KillCivilians) end) - Trigger.OnEnteredFootprint(DelzCellTriggerActivator, function(a, id) - if a.Owner == Nod then - PreventApcReinforcements = true - Trigger.RemoveFootprintTrigger(id) - end - end) + InitObjectives(Nod) - Trigger.OnPlayerDiscovered(NodSupporter, CreateCivilians) + KillCivilians = Nod.AddObjective("Destroy the village and kill all civilians.") + KillGDI = Nod.AddObjective("Kill all GDI units in the area.", "Secondary", false) - Trigger.OnAllKilled(WinActorTriggerActivator, function() - Nod.MarkCompletedObjective(KillGDI) - - if ProtectCivilians then - Nod.MarkCompletedObjective(ProtectCivilians) - end - end) - - KillGDI = Nod.AddObjective("Kill all civilian GDI supporters.") + Camera.Position = CameraPoint.CenterPosition Media.PlaySpeechNotification(Nod, "Reinforce") - Reinforcements.Reinforce(Nod, NodUnitsBuggy, { UnitsEntryBuggy.Location, UnitsRallyBuggy.Location }, 11) - Reinforcements.Reinforce(Nod, NodUnitsBikes, { UnitsEntryBikes.Location, UnitsRallyBikes.Location }, 15) - Reinforcements.Reinforce(Nod, NodUnitsGunner, { UnitsEntryGunner.Location, UnitsRallyGunner.Location }, 15) - Reinforcements.Reinforce(Nod, NodUnitsRocket, { UnitsEntryRocket.Location, UnitsRallyRocket.Location }, 15) - - Camera.Position = waypoint6.CenterPosition + Trigger.AfterDelay(DateTime.Seconds(1), function() + Reinforcements.ReinforceWithTransport(Nod, "tran", NodUnitsBuggy, { EntryPointVehicle.Location, RallyPointVehicle.Location }, { EntryPointVehicle.Location }) + end) + Reinforcements.ReinforceWithTransport(Nod, "tran", NodUnitsRocket, { EntryPointRocket.Location, RallyPointRocket.Location }, { EntryPointRocket.Location }) + Reinforcements.ReinforceWithTransport(Nod, "tran", NodUnitsGunner, { EntryPointGunner.Location, RallyPointGunner.Location }, { EntryPointGunner.Location }) end Tick = function() if DateTime.GameTime > 2 and Nod.HasNoRequiredUnits() then - Nod.MarkFailedObjective(KillGDI) + Nod.MarkFailedObjective(KillCivilians) + end + + if GDI.HasNoRequiredUnits() then + Nod.MarkCompletedObjective(KillGDI) end end diff --git a/mods/cnc/maps/nod04a/rules.yaml b/mods/cnc/maps/nod04a/rules.yaml index adf261c681..cafc14976f 100644 --- a/mods/cnc/maps/nod04a/rules.yaml +++ b/mods/cnc/maps/nod04a/rules.yaml @@ -2,128 +2,27 @@ World: LuaScript: Scripts: campaign-global.lua, nod04a.lua MusicPlaylist: - StartingMusic: valkyrie + StartingMusic: warfare VictoryMusic: nod_win1 MissionData: Briefing: A small village friendly to our cause has been increasingly harassed by GDI, and the Brotherhood wishes you to assist them in their efforts.\n\nSeek out the enemy village and destroy it. The event will be disguised as a GDI attack. BriefingVideo: nod4b.vqa - StartVideo: retro.vqa - LossVideo: deskill.vqa - SmudgeLayer@SCORCH: - InitialSmudges: - 37,24: sc6,0 - 36,18: sc6,0 + LossVideo: nodlose.vqa Player: EnemyWatcher: PlayerResources: DefaultCash: 0 -^Palettes: - IndexedPlayerPalette: - PlayerIndex: - NodSupporter: 192, 164, 132, 155, 133, 197, 112, 12, 163, 132, 155, 133, 134, 197, 154, 198 - IndexedPlayerPalette@units: - PlayerIndex: - NodSupporter: 192, 164, 132, 155, 133, 197, 112, 12, 163, 132, 155, 133, 134, 197, 154, 198 - -^Infantry: +^Vehicle: AnnounceOnSeen: -^CivBuilding: +^Tank: AnnounceOnSeen: -^CivBuildingHusk: - AnnounceOnSeen: - -NUK2: - Buildable: - Prerequisites: ~disabled - -GUN: - Buildable: - Prerequisites: ~disabled - -CYCL: - Buildable: - Prerequisites: ~disabled - -FIX: - Buildable: - Prerequisites: ~disabled - -HPAD: - Buildable: - Prerequisites: ~disabled - -OBLI: - Buildable: - Prerequisites: ~disabled - -BRIK: - Buildable: - Prerequisites: ~disabled - -TMPL: - Buildable: - Prerequisites: ~disabled - -FTNK: - Buildable: - Prerequisites: ~disabled - -STNK: - Buildable: - Prerequisites: ~disabled - -ARTY: - Buildable: - Prerequisites: ~disabled - -E5: - Buildable: - Prerequisites: ~disabled - -RMBO: - Buildable: - Prerequisites: ~disabled - -MLRS: - Buildable: - Prerequisites: ~disabled - -MCV: - Buildable: - Prerequisites: ~disabled - -SAM: - Buildable: - Prerequisites: ~disabled - -AFLD: - Buildable: - Prerequisites: ~disabled - -E4: - Buildable: - Prerequisites: ~disabled - -SBAG: - Buildable: - Prerequisites: ~disabled - -GTWR: - Buildable: - Prerequisites: ~disabled - -WEAP: - Buildable: - Prerequisites: ~disabled - -EYE: - Buildable: - Prerequisites: ~disabled - -ATWR: - Buildable: - Prerequisites: ~disabled +TRAN: + RejectsOrders: + -Selectable: + RevealsShroud: + Range: 5c0 + Interactable: diff --git a/mods/cnc/maps/nod04b/map.bin b/mods/cnc/maps/nod04b/map.bin index 674281dc6b..734f961998 100644 Binary files a/mods/cnc/maps/nod04b/map.bin and b/mods/cnc/maps/nod04b/map.bin differ diff --git a/mods/cnc/maps/nod04b/map.yaml b/mods/cnc/maps/nod04b/map.yaml index b7540f53c3..564e177e79 100644 --- a/mods/cnc/maps/nod04b/map.yaml +++ b/mods/cnc/maps/nod04b/map.yaml @@ -2,7 +2,7 @@ MapFormat: 11 RequiresMod: cnc -Title: 04b: Oum Hadjer +Title: 04b: Mao Civil War Author: Westwood Studios @@ -10,7 +10,7 @@ Tileset: DESERT MapSize: 64,64 -Bounds: 7,17,52,44 +Bounds: 11,6,46,34 Visibility: MissionSelector @@ -19,21 +19,26 @@ Categories: Campaign LockPreview: True Players: - PlayerReference@GDI: - Name: GDI - Bot: campaign - Faction: gdi - Color: F5D378 - Enemies: Nod PlayerReference@Neutral: Name: Neutral OwnsWorld: True NonCombatant: True Faction: gdi + PlayerReference@NodSupporter: + Name: NodSupporter + NonCombatant: True + Faction: nod + Bot: campaign + PlayerReference@GDI: + Name: GDI + Faction: gdi + Color: F5D378 + Enemies: Nod + Bot: campaign PlayerReference@Nod: Name: Nod - AllowBots: False Playable: True + AllowBots: False Required: True LockFaction: True Faction: nod @@ -44,437 +49,491 @@ Players: Enemies: GDI Actors: - Actor0: sbag - Location: 58,26 + Actor0: t08 + Location: 34,20 Owner: Neutral - Actor1: sbag - Location: 57,26 + Actor1: t18 + Location: 33,18 Owner: Neutral - Actor2: sbag - Location: 56,26 + Actor2: t18 + Location: 33,9 Owner: Neutral - Actor3: sbag - Location: 55,26 + Actor3: t08 + Location: 41,5 Owner: Neutral - Actor4: sbag - Location: 54,26 + Actor4: t18 + Location: 42,15 Owner: Neutral - Actor5: sbag - Location: 53,26 + Actor5: t08 + Location: 45,26 Owner: Neutral - Actor6: sbag - Location: 52,26 + Actor6: t08 + Location: 56,29 Owner: Neutral - Actor7: sbag + Actor7: t08 + Location: 55,29 + Owner: Neutral + Actor8: t08 Location: 51,26 Owner: Neutral - Actor8: sbag - Location: 50,26 + Actor9: t08 + Location: 56,18 Owner: Neutral - Actor9: sbag - Location: 49,26 + Actor10: t08 + Location: 52,16 Owner: Neutral - Actor10: sbag - Location: 48,26 + Actor11: t08 + Location: 45,21 Owner: Neutral - Actor11: sbag - Location: 47,26 + Actor12: t08 + Location: 38,19 Owner: Neutral - Actor12: sbag - Location: 58,25 + Actor13: t08 + Location: 23,16 Owner: Neutral - Actor13: sbag - Location: 47,25 + Actor14: t08 + Location: 14,22 Owner: Neutral - Actor14: sbag - Location: 58,24 + Actor15: t08 + Location: 26,22 Owner: Neutral - Actor15: sbag - Location: 47,24 + Actor16: t08 + Location: 21,26 Owner: Neutral - Actor16: sbag - Location: 58,23 + Actor17: t08 + Location: 48,6 Owner: Neutral - Actor17: sbag - Location: 58,22 + Actor18: t08 + Location: 15,19 Owner: Neutral - Actor18: sbag - Location: 58,21 + Actor19: t08 + Location: 31,15 Owner: Neutral - Actor19: sbag - Location: 47,21 + Actor20: t18 + Location: 49,34 Owner: Neutral - Actor20: sbag - Location: 58,20 + Actor21: t18 + Location: 48,38 Owner: Neutral - Actor21: sbag - Location: 47,20 + Actor22: t18 + Location: 42,35 Owner: Neutral - Actor22: sbag - Location: 58,19 + Actor23: t18 + Location: 54,37 Owner: Neutral - Actor23: sbag - Location: 47,19 + Actor24: t08 + Location: 51,35 Owner: Neutral - Actor24: sbag - Location: 58,18 + Actor25: t08 + Location: 45,37 Owner: Neutral - Actor25: sbag - Location: 57,18 + Actor26: t08 + Location: 47,33 Owner: Neutral - Actor26: sbag - Location: 48,18 + Actor27: t18 + Location: 13,10 Owner: Neutral - Actor27: sbag - Location: 47,18 + Actor28: t18 + Location: 20,7 Owner: Neutral - Actor28: sbag - Location: 58,17 + Actor30: t08 + Location: 12,8 Owner: Neutral - Actor29: sbag - Location: 57,17 + Actor31: t08 + Location: 23,9 Owner: Neutral - Actor30: sbag - Location: 56,17 - Owner: Neutral - Actor31: sbag - Location: 55,17 - Owner: Neutral - Actor32: sbag - Location: 54,17 - Owner: Neutral - Actor33: sbag - Location: 53,17 - Owner: Neutral - Actor34: sbag - Location: 52,17 - Owner: Neutral - Actor35: sbag - Location: 51,17 - Owner: Neutral - Actor36: sbag - Location: 50,17 - Owner: Neutral - Actor37: sbag - Location: 49,17 - Owner: Neutral - Actor38: sbag - Location: 48,17 - Owner: Neutral - Actor39: sbag - Location: 47,17 - Owner: Neutral - Actor40: t18 - Location: 47,50 - Owner: Neutral - Actor41: t18 - Location: 46,31 - Owner: Neutral - Actor42: t08 - Location: 39,26 - Owner: Neutral - Actor43: t18 - Location: 37,25 - Owner: Neutral - Actor44: t18 - Location: 27,28 - Owner: Neutral - Actor45: t18 - Location: 54,26 - Owner: Neutral - Actor46: t18 - Location: 49,18 - Owner: Neutral - Actor47: t18 - Location: 23,54 - Owner: Neutral - Actor48: t18 - Location: 34,40 - Owner: Neutral - Actor49: t08 - Location: 16,45 - Owner: Neutral - Actor50: t08 - Location: 14,53 - Owner: Neutral - Actor52: t18 - Location: 13,44 - Owner: Neutral - Actor57: t18 - Location: 36,49 - Owner: Neutral - Actor58: t18 - Location: 44,59 - Owner: Neutral - Actor59: t18 - Location: 11,37 - Owner: Neutral - Actor60: t18 - Location: 25,20 - Owner: Neutral - Actor61: gtwr - Location: 46,21 + Actor32: v35 + Location: 48,38 + Owner: NodSupporter + Actor33: v34 + Location: 46,33 + Owner: NodSupporter + Actor35: v32 + Location: 54,35 + Owner: NodSupporter + Actor36: v30 + Location: 48,32 + Owner: NodSupporter + Actor37: v30 + Location: 52,34 + Owner: NodSupporter + Actor38: v31 + Location: 52,35 + Owner: NodSupporter + Actor39: v32 + Location: 46,37 + Owner: NodSupporter + Health: 73 + Actor41: v34 + Location: 49,38 + Owner: NodSupporter + Actor42: v35 + Location: 46,32 + Owner: NodSupporter + Actor43: v36 + Location: 48,37 + Owner: NodSupporter + Actor44: v32 + Location: 49,33 + Owner: NodSupporter + Actor45: v34 + Location: 50,34 + Owner: NodSupporter + Actor46: v20 + Location: 15,10 Owner: GDI - Actor62: gtwr - Location: 46,24 + Actor47: v21 + Location: 12,10 Owner: GDI - Actor63: hosp - Location: 48,19 + Actor48: v22 + Location: 21,11 Owner: GDI - Actor64: pyle - Location: 50,20 + Actor49: v23 + Location: 22,8 Owner: GDI - Actor65: nuke - Location: 53,21 + Actor50: v24 + Location: 18,8 Owner: GDI - Actor66: nuke - Location: 52,23 + Actor51: v25 + Location: 13,7 Owner: GDI - Actor67: silo - Location: 56,24 + Actor52: v26 + Location: 20,9 Owner: GDI - Actor68: silo - Location: 55,22 + Actor53: v27 + Location: 15,9 Owner: GDI - Actor69: fact - Location: 53,18 + Actor54: v27 + Location: 14,9 Owner: GDI - Actor70: hq - Location: 56,19 + Actor55: v27 + Location: 13,9 Owner: GDI - Actor72: v36 - Location: 12,54 - Owner: Neutral - Actor73: v35 - Location: 10,54 - Owner: Neutral - Actor74: v34 - Location: 11,53 - Owner: Neutral - Actor75: v33 - Location: 15,53 - Owner: Neutral - Actor76: v32 - Location: 12,53 - Owner: Neutral - Actor77: v31 - Location: 10,52 - Owner: Neutral - Actor87: v23 - Location: 9,59 - Owner: Neutral - Jeep1: jeep - Location: 51,25 + Actor56: v28 + Location: 21,7 Owner: GDI - Jeep2: jeep - Location: 50,25 + Actor57: v29 + Location: 22,7 Owner: GDI - Actor94: jeep - Location: 39,48 + Actor58: v30 + Location: 21,10 + Owner: GDI + Actor59: v30 + Location: 23,8 + Owner: GDI + Actor61: jeep + Location: 15,23 + Owner: GDI + Facing: 640 + Actor62: jeep + Location: 36,6 Owner: GDI Facing: 384 - Actor110: e1 - Location: 40,49 + Actor65: mtnk + Location: 29,10 Owner: GDI - Facing: 896 - SubCell: 0 - Actor111: e2 - Location: 38,50 + Facing: 256 + Actor71: jeep + Location: 24,26 + Owner: GDI + Facing: 384 + Actor72: jeep + Location: 37,19 + Owner: GDI + Facing: 128 + Actor73: jeep + Location: 27,33 + Owner: GDI + Facing: 384 + Actor86: e1 + Location: 43,15 + Owner: GDI + Health: 88 + Facing: 128 + SubCell: 3 + Actor99: e1 + Location: 45,15 + Owner: GDI + SubCell: 3 + Actor100: e1 + Location: 43,15 + Owner: GDI + Health: 94 + Facing: 128 + SubCell: 4 + Actor105: e1 + Location: 46,14 Owner: GDI - Facing: 896 SubCell: 2 - Actor112: e2 - Location: 38,49 + Actor106: e1 + Location: 18,29 Owner: GDI - Facing: 512 - SubCell: 0 - Actor113: e2 - Location: 35,40 - Owner: GDI - SubCell: 0 - Actor114: e2 - Location: 35,40 + Facing: 384 + SubCell: 4 + Actor107: e1 + Location: 12,20 Owner: GDI SubCell: 1 - waypoint27: waypoint - Location: 31,36 - Owner: Neutral - waypoint25: waypoint - Location: 40,43 - Owner: Neutral - waypoint26: waypoint - Location: 28,27 - Owner: Neutral - waypoint11: waypoint - Location: 54,29 - Owner: Neutral - waypoint10: waypoint - Location: 45,28 - Owner: Neutral - GDIBase: waypoint - Location: 52,22 - Owner: Neutral - waypoint8: waypoint - Location: 43,22 - Owner: Neutral - waypoint7: waypoint - Location: 31,22 - Owner: Neutral - waypoint6: waypoint - Location: 21,25 - Owner: Neutral - waypoint5: waypoint - Location: 18,39 - Owner: Neutral - waypoint4: waypoint - Location: 10,48 - Owner: Neutral - waypoint3: waypoint - Location: 19,48 - Owner: Neutral - waypoint2: waypoint - Location: 27,55 - Owner: Neutral - waypoint1: waypoint - Location: 48,56 - Owner: Neutral - waypoint0: waypoint - Location: 54,42 - Owner: Neutral - Convoi: apc - Location: 24,53 + Actor108: e1 + Location: 39,23 Owner: GDI - CivBuilding1: v26 - Location: 8,51 + SubCell: 1 + Actor119: e2 + Location: 18,8 Owner: GDI - CivBuilding2: v30 - Location: 17,46 + Facing: 512 + SubCell: 3 + Actor120: e2 + Location: 16,10 Owner: GDI - CivBuilding3: v29 - Location: 16,46 - Owner: GDI - CivBuilding4: v28 - Location: 15,45 - Owner: GDI - CivBuilding5: v27 - Location: 14,51 - Owner: GDI - CivBuilding6: v27 - Location: 13,51 - Owner: GDI - CivBuilding7: v27 - Location: 12,51 - Owner: GDI - CivBuilding8: v26 - Location: 14,46 - Owner: GDI - CivBuilding9: v25 - Location: 19,46 - Owner: GDI - CivBuilding10: v24 - Location: 8,47 - Owner: GDI - CivBuilding11: v22 - Location: 9,45 - Owner: GDI - CivBuilding12: v22 - Location: 18,52 - Owner: GDI - CivBuilding13: v21 - Location: 16,51 - Owner: GDI - CivBuilding14: v20 - Location: 8,45 - Owner: GDI - Civilian1: c2 - Location: 11,50 - Owner: GDI - Facing: 896 - SubCell: 0 - Civilian2: c9 - Location: 12,49 - Owner: GDI - Facing: 896 + Facing: 384 SubCell: 2 - Civilian3: c8 - Location: 14,49 + Actor121: e2 + Location: 27,19 + Owner: GDI + Facing: 512 + SubCell: 1 + Actor122: e2 + Location: 25,34 + Owner: GDI + SubCell: 4 + Actor123: e1 + Location: 13,13 + Owner: GDI + Facing: 512 + SubCell: 1 + Actor124: e1 + Location: 13,13 + Owner: GDI + Facing: 512 + SubCell: 2 + Actor125: e2 + Location: 13,13 + Owner: GDI + Facing: 512 + SubCell: 4 + Actor126: e2 + Location: 13,13 + Owner: GDI + Facing: 512 + SubCell: 3 + Actor127: e2 + Location: 29,18 Owner: GDI Facing: 256 SubCell: 3 - Civilian4: c7 - Location: 13,50 - Owner: GDI - Facing: 896 - SubCell: 0 - Civilian5: c6 - Location: 11,49 - Owner: GDI - Facing: 128 - SubCell: 0 - Civilian6: c5 - Location: 12,50 - Owner: GDI - Facing: 896 - SubCell: 2 - Civilian7: c4 - Location: 10,50 - Owner: GDI - Facing: 128 - SubCell: 1 - Civilian8: c3 - Location: 10,51 - Owner: GDI - Facing: 128 - SubCell: 1 - Actor56: t18 - Location: 19,51 - Owner: Neutral - Actor55: t18 - Location: 20,46 - Owner: Neutral - Actor51: t08 - Location: 13,46 - Owner: Neutral - Actor53: t18 - Location: 7,46 - Owner: Neutral - Actor54: t18 - Location: 11,51 - Owner: Neutral - GDIGunner1: e1 - Location: 41,50 - Owner: GDI - Facing: 768 - SubCell: 2 - GDIGunner2: e1 - Location: 39,50 - Owner: GDI - SubCell: 0 - GDIGunner3: e1 - Location: 40,50 + Actor128: e2 + Location: 27,22 Owner: GDI Facing: 256 + SubCell: 1 + Actor129: e2 + Location: 36,10 + Owner: GDI + Health: 38 + Facing: 256 SubCell: 0 - EntryPointVehicle: waypoint - Location: 33,17 + Actor131: e1 + Location: 21,12 + Owner: GDI + Facing: 512 + SubCell: 4 + Actor132: e1 + Location: 22,12 + Owner: GDI + Facing: 512 + SubCell: 3 + Actor29: t18 + Location: 14,7 Owner: Neutral - RallyPointVehicle: waypoint - Location: 33,30 + waypoint27: waypoint + Location: 35,25 Owner: Neutral - EntryPointRocket: waypoint - Location: 35,17 + waypoint26: waypoint + Location: 44,6 Owner: Neutral - RallyPointRocket: waypoint - Location: 35,32 + waypoint9: waypoint + Location: 26,19 Owner: Neutral - EntryPointGunner: waypoint - Location: 31,17 + waypoint8: waypoint + Location: 53,37 Owner: Neutral - RallyPointGunner: waypoint - Location: 31,32 + waypoint7: waypoint + Location: 47,35 Owner: Neutral - CameraPoint: waypoint - Location: 32,22 + waypoint6: waypoint + Location: 45,11 Owner: Neutral + waypoint5: waypoint + Location: 40,17 + Owner: Neutral + waypoint4: waypoint + Location: 39,34 + Owner: Neutral + waypoint3: waypoint + Location: 21,38 + Owner: Neutral + waypoint2: waypoint + Location: 20,28 + Owner: Neutral + waypoint1: waypoint + Location: 13,26 + Owner: Neutral + waypoint0: waypoint + Location: 13,14 + Owner: Neutral + Civilian1: v33 + Location: 48,34 + Owner: Neutral + Health: 62 + Civilian2: v33 + Location: 54,37 + Owner: Neutral + Soldier1: e2 + Location: 22,15 + Owner: GDI + Facing: 384 + SubCell: 2 + Soldier2: e1 + Location: 17,14 + Owner: GDI + Facing: 384 + SubCell: 4 + Soldier3: e2 + Location: 13,16 + Owner: GDI + Facing: 384 + SubCell: 1 + GDICiv1: c9 + Location: 20,12 + Owner: GDI + SubCell: 3 + GDICiv2: c4 + Location: 18,7 + Owner: GDI + SubCell: 0 + GDICiv3: c9 + Location: 19,12 + Owner: GDI + SubCell: 1 + GDICiv4: c8 + Location: 16,8 + Owner: GDI + SubCell: 3 + GDICiv5: c7 + Location: 17,9 + Owner: GDI + SubCell: 1 + GDICiv6: c6 + Location: 24,13 + Owner: GDI + SubCell: 2 + GDICiv7: c5 + Location: 20,7 + Owner: GDI + SubCell: 4 + GDICiv8: c4 + Location: 14,12 + Owner: GDI + SubCell: 1 + GDICiv9: c3 + Location: 15,10 + Owner: GDI + SubCell: 2 + GDICiv10: c2 + Location: 14,10 + Owner: GDI + SubCell: 1 + GDICiv11: c1 + Location: 17,7 + Owner: GDI + SubCell: 2 + GDICiv12: c1 + Location: 20,10 + Owner: GDI + SubCell: 1 + GDICiv13: c1 + Location: 20,11 + Owner: GDI + SubCell: 3 + UnitsEntryBuggy: waypoint + Location: 52,6 + Owner: Neutral + UnitsRallyBuggy: waypoint + Location: 52,10 + Owner: Neutral + UnitsEntryBikes: waypoint + Location: 50,6 + Owner: Neutral + UnitsRallyBikes: waypoint + Location: 50,10 + Owner: Neutral + UnitsEntryGunner: waypoint + Location: 54,6 + Owner: Neutral + UnitsRallyGunner: waypoint + Location: 54,10 + Owner: Neutral + UnitsEntryRocket: waypoint + Location: 56,12 + Owner: Neutral + UnitsRallyRocket: waypoint + Location: 54,12 + Owner: Neutral + NodCiv1: c8 + Location: 46,36 + Owner: NodSupporter + Facing: 512 + SubCell: 2 + NodCiv2: e3 + Location: 48,36 + Owner: NodSupporter + Facing: 768 + SubCell: 4 + NodCiv3: c4 + Location: 52,38 + Owner: NodSupporter + Facing: 768 + SubCell: 1 + NodCiv4: c3 + Location: 45,35 + Owner: NodSupporter + Facing: 128 + SubCell: 4 + NodCiv5: c1 + Location: 51,36 + Owner: NodSupporter + Facing: 896 + SubCell: 2 + NodCiv6: c2 + Location: 45,34 + Owner: NodSupporter + Facing: 0 + SubCell: 1 + NodCiv7: c4 + Location: 54,36 + Owner: NodSupporter + Facing: 640 + SubCell: 0 + NodCiv8: c5 + Location: 50,37 + Owner: NodSupporter + Facing: 384 + SubCell: 2 + NodCiv9: c9 + Location: 47,34 + Owner: NodSupporter + Facing: 768 + SubCell: 2 + Gciv1: e1 + Location: 38,9 + Owner: GDI + Facing: 512 + SubCell: 0 + Gciv2: e1 + Location: 18,10 + Owner: GDI + Facing: 640 + SubCell: 2 Rules: cnc|rules/campaign-maprules.yaml, cnc|rules/campaign-tooltips.yaml, cnc|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/cnc/maps/nod04b/nod04b.lua b/mods/cnc/maps/nod04b/nod04b.lua index 6811b787c0..ac9af88baa 100644 --- a/mods/cnc/maps/nod04b/nod04b.lua +++ b/mods/cnc/maps/nod04b/nod04b.lua @@ -7,124 +7,201 @@ information, see COPYING. ]] -NodUnitsBuggy = { "bggy", "bggy", "bike", "bike" } -NodUnitsRocket = { "e3", "e3", "e3", "e3", "e3", "e3" } +NodUnitsBuggy = { "bggy", "bggy", "bggy", "bggy", "bggy" } +NodUnitsBikes = { "bike", "bike", "bike" } NodUnitsGunner = { "e1", "e1", "e1", "e1", "e1", "e1" } +NodUnitsRocket = { "e3", "e3", "e3", "e3", "e3", "e3" } -Apc3Trigger = { CPos.New(28,58), CPos.New(27,58), CPos.New(28,57), CPos.New(27,57), CPos.New(28,56), CPos.New(27,56), CPos.New(28,55), CPos.New(27,55), CPos.New(28,54), CPos.New(27,54), CPos.New(28,53), CPos.New(27,53) } -NorthernBridgeTrigger = { CPos.New(13,41), CPos.New(14,41), CPos.New(15,41), CPos.New(14,42), CPos.New(15,42), CPos.New(16,42) } -SouthernBridgeTrigger = { CPos.New(26,54), CPos.New(25,54), CPos.New(24,54), CPos.New(25,53), CPos.New(24,53), CPos.New(23,53) } +Atk6Units = { "c1", "c2", "c3" } +Atk5Units = { "e1", "e1", "e2", "e2" } +Atk1Units = { "e1", "e1" } +JeepReinforcements = { "jeep" } +GDIUnits = { "e1", "e1", "e2" } +ApcUnits = { "e1", "e1", "e2", "e2" } -Apc1Units = { "c2", "c3", "c4", "c5" } +Spawnpoint = { waypoint0.Location } +Atk6WaypointsPart1 = { waypoint1.Location, waypoint2.Location, waypoint3.Location, waypoint4.Location } +Atk6WaypointsPart2 = { waypoint7.Location, waypoint8.Location, waypoint7.Location } +Atk5Waypoints = { waypoint0.Location, waypoint9.Location} +Atk3Waypoints = { waypoint0 } +Atk2Waypoints = { waypoint6 } +GcivWaypoints = { waypoint0, waypoint1, waypoint2, waypoint3, waypoint4 } +Atk1Waypoints = { waypoint0, waypoint1, waypoint2, waypoint3, waypoint4, waypoint5, waypoint6 } +Atk4Waypoints = { waypoint0, waypoint9 } -Civilians = { Civilian1, Civilian2, Civilian3, Civilian4, Civilian5, Civilian6, Civilian7, Civilian8 } -TargetActors = { Civilian1, Civilian2, Civilian3, Civilian4, Civilian5, Civilian6, Civilian7, Civilian8, CivBuilding1, CivBuilding2, CivBuilding3, CivBuilding4, CivBuilding5, CivBuilding6, CivBuilding7, CivBuilding8, CivBuilding9, CivBuilding10, CivBuilding11, CivBuilding12, CivBuilding13, CivBuilding14 } -Apc2Trigger = { GDIGunner1, GDIGunner2, GDIGunner3 } +Atk6ActorTriggerActivator = { Civilian1, Civilian2 } +Atk5ActorTriggerActivator = { Soldier1, Soldier2, Soldier3, Actor105 } +WinActorTriggerActivator = { GDICiv1, GDICiv2, GDICiv3, GDICiv4, GDICiv5, GDICiv6, GDICiv7, GDICiv8, GDICiv9, GDICiv11, GDICiv12, GDICiv13 } +GcivActors = { Gcvi1, Gciv2, GDICiv2, GDICiv9, GDICiv10, GDICiv11 } -Apc1Waypoints = { waypoint0.Location, waypoint11.Location, waypoint10.Location, waypoint8.Location, GDIBase.Location } -Apc2Waypoints = { waypoint8, waypoint7, waypoint6, waypoint5, waypoint4 } -Apc3Waypoints = { waypoint3, waypoint2, waypoint1, waypoint0, waypoint11, waypoint10, waypoint8, GDIBase } -FlightRouteTop = { waypoint4, waypoint5, waypoint6, waypoint7, waypoint8, GDIBase } -FlightRouteBottom = { waypoint3, waypoint2, waypoint1, waypoint11, waypoint10, waypoint8, GDIBase } -Hummer1Waypoints = { waypoint8, waypoint7, waypoint6, waypoint5, waypoint4, waypoint3, waypoint2, waypoint1, waypoint0, waypoint11, waypoint10, waypoint8 } +Atk2CellTriggerActivator = { CPos.New(41,22), CPos.New(40,22), CPos.New(39,22), CPos.New(41,21), CPos.New(40,21), CPos.New(39,21) } +Atk3CellTriggerActivator = { CPos.New(18,18), CPos.New(17,18), CPos.New(16,18), CPos.New(15,18), CPos.New(14,18), CPos.New(13,18), CPos.New(12,18), CPos.New(11,18), CPos.New(24,17), CPos.New(23,17), CPos.New(22,17), CPos.New(21,17), CPos.New(20,17), CPos.New(19,17), CPos.New(17,17), CPos.New(16,17), CPos.New(15,17), CPos.New(14,17), CPos.New(13,17), CPos.New(12,17), CPos.New(11,17) } +Atk4CellTriggerActivator = { CPos.New(29,28), CPos.New(28,28), CPos.New(29,27), CPos.New(28,27), CPos.New(29,26), CPos.New(28,26), CPos.New(29,25), CPos.New(28,25), CPos.New(29,24), CPos.New(28,24), CPos.New(29,23), CPos.New(28,23), CPos.New(29,22), CPos.New(28,22) } +GcivCellTriggerActivator = { CPos.New(51,17), CPos.New(50,17), CPos.New(49,17), CPos.New(48,17), CPos.New(47,17), CPos.New(46,17), CPos.New(45,17), CPos.New(44,17), CPos.New(43,17), CPos.New(42,17), CPos.New(41,17), CPos.New(40,17), CPos.New(39,17), CPos.New(38,17), CPos.New(37,17), CPos.New(36,17), CPos.New(35,17), CPos.New(52,16), CPos.New(51,16), CPos.New(50,16), CPos.New(49,16), CPos.New(48,16), CPos.New(47,16), CPos.New(46,16), CPos.New(45,16), CPos.New(44,16), CPos.New(43,16), CPos.New(42,16), CPos.New(41,16), CPos.New(40,16), CPos.New(39,16), CPos.New(38,16), CPos.New(37,16), CPos.New(36,16), CPos.New(35,16) } +DelxCellTriggerActivator = { CPos.New(42,20), CPos.New(41,20), CPos.New(40,20), CPos.New(39,20), CPos.New(38,20) } +DelyCellTriggerActivator = { CPos.New(31,28), CPos.New(30,28), CPos.New(31,27), CPos.New(30,27), CPos.New(31,26), CPos.New(30,26), CPos.New(31,25), CPos.New(30,25), CPos.New(31,24), CPos.New(30,24) } +DelzCellTriggerActivator = { CPos.New(18,20), CPos.New(17,20), CPos.New(16,20), CPos.New(15,20), CPos.New(14,20), CPos.New(13,20), CPos.New(12,20), CPos.New(11,20), CPos.New(25,19), CPos.New(24,19), CPos.New(23,19), CPos.New(22,19), CPos.New(21,19), CPos.New(20,19), CPos.New(19,19), CPos.New(18,19), CPos.New(17,19), CPos.New(16,19), CPos.New(15,19), CPos.New(14,19), CPos.New(13,19), CPos.New(12,19), CPos.New(11,19), CPos.New(25,18), CPos.New(24,18), CPos.New(23,18), CPos.New(22,18), CPos.New(21,18), CPos.New(20,18), CPos.New(19,18) } + +NodCiviliansActors = { NodCiv1, NodCiv2, NodCiv3, NodCiv4, NodCiv5, NodCiv6, NodCiv7, NodCiv8, NodCiv9 } + +SendJeepReinforcements = function() + if not PreventJeepReinforcements then + local units = Reinforcements.Reinforce(GDI, JeepReinforcements, Spawnpoint, 15) + MoveAndHunt(units, Atk2Waypoints) + end +end + +SendGDIReinforcements = function() + if not PreventGDIReinforcements then + local units = Reinforcements.Reinforce(GDI, GDIUnits, Spawnpoint, 15) + MoveAndHunt(units, Atk4Waypoints) + end +end + +SendApcReinforcements = function() + if not PreventApcReinforcements then + Reinforcements.ReinforceWithTransport(GDI, "apc", ApcUnits, Atk5Waypoints, nil, + function(transport, cargo) + transport.UnloadPassengers() + Utils.Do(cargo, IdleHunt) + end, IdleHunt) + end +end + +CreateCivilians = function(actor, discoverer) + Utils.Do(NodCiviliansActors, function(actor) + actor.Owner = Nod + end) + + ProtectCivilians = Nod.AddPrimaryObjective("Protect the civilians that support Nod.") + Trigger.OnAllKilled(NodCiviliansActors, function() + Nod.MarkFailedObjective(ProtectCivilians) + end) + + Utils.Do(GcivActors, function(actor) + if not actor.IsDead then + actor.AttackMove(waypoint7.Location) + actor.AttackMove(waypoint8.Location) + IdleHunt(actor) + end + end) +end WorldLoaded = function() Nod = Player.GetPlayer("Nod") + NodSupporter = Player.GetPlayer("NodSupporter") GDI = Player.GetPlayer("GDI") - Trigger.AfterDelay(DateTime.Seconds(3), function() - local apc = Actor.Create("apc", true, { Owner = GDI, Location = Apc1Waypoints[1], Cargo = Apc1Units }) - Utils.Do(Apc1Waypoints, function(waypoint) - apc.AttackMove(waypoint) - end) - - Trigger.OnEnteredFootprint(Apc3Trigger, function(a, id) - if a.Owner == Nod then - MoveAndHunt({ apc }, Apc3Waypoints) - Trigger.RemoveFootprintTrigger(id) - end - end) - end) - - Trigger.OnEnteredFootprint(NorthernBridgeTrigger, function(a, id) - if a.Owner == Nod then - if not CiviliansEvacuated then - CiviliansEvacuated = true - Utils.Do(Civilians, function(civ) - Utils.Do(FlightRouteBottom, function(waypoint) - civ.Move(waypoint.Location) - end) - - Trigger.OnIdle(civ, function() - if civ.Location == GDIBase.Location then - Trigger.Clear(civ, "OnIdle") - else - civ.Move(GDIBase.Location) - end - end) - end) - end - - Trigger.RemoveFootprintTrigger(id) - end - end) - - Trigger.OnEnteredFootprint(SouthernBridgeTrigger, function(a, id) - if a.Owner == Nod then - if not CiviliansEvacuated then - CiviliansEvacuated = true - Utils.Do(Civilians, function(civ) - Utils.Do(FlightRouteTop, function(waypoint) - civ.Move(waypoint.Location) - end) - - Trigger.OnIdle(civ, function() - if civ.Location == GDIBase.Location then - Trigger.Clear(civ, "OnIdle") - else - civ.Move(GDIBase.Location) - end - end) - end) - end - - Trigger.RemoveFootprintTrigger(id) - end - end) - - Trigger.OnDiscovered(Convoi, function() - MoveAndHunt({ Jeep1, Jeep2 }, Hummer1Waypoints) - end) - - Trigger.OnAllRemovedFromWorld(Apc2Trigger, function() - MoveAndHunt({ Convoi }, Apc2Waypoints) - end) - - Trigger.OnAllRemovedFromWorld(TargetActors, function() - Nod.MarkCompletedObjective(KillCivilians) - end) - InitObjectives(Nod) - KillCivilians = Nod.AddObjective("Destroy the village and kill all civilians.") - KillGDI = Nod.AddObjective("Kill all GDI units in the area.", "Secondary", false) + Trigger.OnAnyKilled(Atk6ActorTriggerActivator, function() + Reinforcements.ReinforceWithTransport(GDI, "apc", Atk6Units, Atk6WaypointsPart1, Atk6WaypointsPart2, + function(transport, cargo) + Utils.Do(cargo, IdleHunt) + end, IdleHunt) + end) - Camera.Position = CameraPoint.CenterPosition + Utils.Do(Atk5ActorTriggerActivator, function(actor) + Trigger.OnDamaged(actor, function() + if Atk5TriggerSwitch then + return + end + + Atk5TriggerSwitch = true + Reinforcements.ReinforceWithTransport(GDI, "apc", Atk5Units, Atk5Waypoints, nil, + function(transport, cargo) + transport.UnloadPassengers() + Utils.Do(cargo, IdleHunt) + end, IdleHunt) + end) + end) + + Trigger.OnEnteredFootprint(Atk3CellTriggerActivator, function(a, id) + if a.Owner == Nod then + Trigger.RemoveFootprintTrigger(id) + + for type, count in pairs({ ["e1"] = 3, ["e2"] = 2, ["mtnk"] = 1 }) do + MoveAndHunt(Utils.Take(count, GDI.GetActorsByType(type)), Atk3Waypoints) + end + end + end) + + Trigger.OnEnteredFootprint(Atk2CellTriggerActivator, function(a, id) + if a.Owner == Nod then + MoveAndHunt(Utils.Take(1, GDI.GetActorsByType("jeep")), Atk2Waypoints) + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(GcivCellTriggerActivator, function(a, id) + if a.Owner == Nod then + MoveAndHunt(GcivActors, GcivWaypoints) + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(Atk4CellTriggerActivator, function(a, id) + if a.Owner == Nod then + for type, count in pairs({ ["e1"] = 2,["e2"] = 1 }) do + MoveAndHunt(Utils.Take(count, GDI.GetActorsByType(type)), Atk4Waypoints) + end + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.AfterDelay(DateTime.Seconds(20), function() + local units = Reinforcements.Reinforce(GDI, Atk1Units, Spawnpoint, 15) + MoveAndHunt(units, Atk1Waypoints) + end) + + Trigger.AfterDelay(DateTime.Seconds(50), SendJeepReinforcements) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), SendGDIReinforcements) + Trigger.AfterDelay(DateTime.Minutes(2) + DateTime.Seconds(30), SendApcReinforcements) + + Trigger.OnEnteredFootprint(DelxCellTriggerActivator, function(a, id) + if a.Owner == Nod then + PreventJeepReinforcements = true + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(DelyCellTriggerActivator, function(a, id) + if a.Owner == Nod then + PreventGDIReinforcements = true + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(DelzCellTriggerActivator, function(a, id) + if a.Owner == Nod then + PreventApcReinforcements = true + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnPlayerDiscovered(NodSupporter, CreateCivilians) + + Trigger.OnAllKilled(WinActorTriggerActivator, function() + Nod.MarkCompletedObjective(KillGDI) + + if ProtectCivilians then + Nod.MarkCompletedObjective(ProtectCivilians) + end + end) + + KillGDI = Nod.AddObjective("Kill all civilian GDI supporters.") Media.PlaySpeechNotification(Nod, "Reinforce") - Trigger.AfterDelay(DateTime.Seconds(1), function() - Reinforcements.ReinforceWithTransport(Nod, "tran", NodUnitsBuggy, { EntryPointVehicle.Location, RallyPointVehicle.Location }, { EntryPointVehicle.Location }) - end) - Reinforcements.ReinforceWithTransport(Nod, "tran", NodUnitsRocket, { EntryPointRocket.Location, RallyPointRocket.Location }, { EntryPointRocket.Location }) - Reinforcements.ReinforceWithTransport(Nod, "tran", NodUnitsGunner, { EntryPointGunner.Location, RallyPointGunner.Location }, { EntryPointGunner.Location }) + Reinforcements.Reinforce(Nod, NodUnitsBuggy, { UnitsEntryBuggy.Location, UnitsRallyBuggy.Location }, 11) + Reinforcements.Reinforce(Nod, NodUnitsBikes, { UnitsEntryBikes.Location, UnitsRallyBikes.Location }, 15) + Reinforcements.Reinforce(Nod, NodUnitsGunner, { UnitsEntryGunner.Location, UnitsRallyGunner.Location }, 15) + Reinforcements.Reinforce(Nod, NodUnitsRocket, { UnitsEntryRocket.Location, UnitsRallyRocket.Location }, 15) + + Camera.Position = waypoint6.CenterPosition end Tick = function() if DateTime.GameTime > 2 and Nod.HasNoRequiredUnits() then - Nod.MarkFailedObjective(KillCivilians) - end - - if GDI.HasNoRequiredUnits() then - Nod.MarkCompletedObjective(KillGDI) + Nod.MarkFailedObjective(KillGDI) end end diff --git a/mods/cnc/maps/nod04b/rules.yaml b/mods/cnc/maps/nod04b/rules.yaml index acc2a7343d..2ebbc0db0f 100644 --- a/mods/cnc/maps/nod04b/rules.yaml +++ b/mods/cnc/maps/nod04b/rules.yaml @@ -2,27 +2,128 @@ World: LuaScript: Scripts: campaign-global.lua, nod04b.lua MusicPlaylist: - StartingMusic: warfare + StartingMusic: valkyrie VictoryMusic: nod_win1 MissionData: Briefing: A small village friendly to our cause has been increasingly harassed by GDI, and the Brotherhood wishes you to assist them in their efforts.\n\nSeek out the enemy village and destroy it. The event will be disguised as a GDI attack. BriefingVideo: nod4b.vqa - LossVideo: nodlose.vqa + StartVideo: retro.vqa + LossVideo: deskill.vqa + SmudgeLayer@SCORCH: + InitialSmudges: + 37,24: sc6,0 + 36,18: sc6,0 Player: EnemyWatcher: PlayerResources: DefaultCash: 0 -^Vehicle: +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + NodSupporter: 192, 164, 132, 155, 133, 197, 112, 12, 163, 132, 155, 133, 134, 197, 154, 198 + IndexedPlayerPalette@units: + PlayerIndex: + NodSupporter: 192, 164, 132, 155, 133, 197, 112, 12, 163, 132, 155, 133, 134, 197, 154, 198 + +^Infantry: AnnounceOnSeen: -^Tank: +^CivBuilding: AnnounceOnSeen: -TRAN: - RejectsOrders: - -Selectable: - RevealsShroud: - Range: 5c0 - Interactable: +^CivBuildingHusk: + AnnounceOnSeen: + +NUK2: + Buildable: + Prerequisites: ~disabled + +GUN: + Buildable: + Prerequisites: ~disabled + +CYCL: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +OBLI: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +TMPL: + Buildable: + Prerequisites: ~disabled + +FTNK: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +ARTY: + Buildable: + Prerequisites: ~disabled + +E5: + Buildable: + Prerequisites: ~disabled + +RMBO: + Buildable: + Prerequisites: ~disabled + +MLRS: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +SBAG: + Buildable: + Prerequisites: ~disabled + +GTWR: + Buildable: + Prerequisites: ~disabled + +WEAP: + Buildable: + Prerequisites: ~disabled + +EYE: + Buildable: + Prerequisites: ~disabled + +ATWR: + Buildable: + Prerequisites: ~disabled diff --git a/mods/cnc/maps/nod08a/map.png b/mods/cnc/maps/nod08a/map.png index 79a18411c1..7488a87ded 100644 Binary files a/mods/cnc/maps/nod08a/map.png and b/mods/cnc/maps/nod08a/map.png differ diff --git a/mods/cnc/maps/nod08b/map.png b/mods/cnc/maps/nod08b/map.png index 7488a87ded..79a18411c1 100644 Binary files a/mods/cnc/maps/nod08b/map.png and b/mods/cnc/maps/nod08b/map.png differ