diff --git a/OpenRA.sln b/OpenRA.sln index 60e0005e27..9963797ee2 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -36,6 +36,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts", mods\cnc\maps\nod02b\nod02b.lua = mods\cnc\maps\nod02b\nod02b.lua mods\cnc\maps\nod03a\nod03a.lua = mods\cnc\maps\nod03a\nod03a.lua mods\cnc\maps\nod03b\nod03b.lua = mods\cnc\maps\nod03b\nod03b.lua + mods\cnc\maps\nod04a\nod04a.lua = mods\cnc\maps\nod04a\nod04a.lua mods\cnc\maps\shellmap\shellmap.lua = mods\cnc\maps\shellmap\shellmap.lua EndProjectSection EndProject diff --git a/mods/cnc/maps/nod04a/map.bin b/mods/cnc/maps/nod04a/map.bin new file mode 100644 index 0000000000..734f961998 Binary files /dev/null and b/mods/cnc/maps/nod04a/map.bin differ diff --git a/mods/cnc/maps/nod04a/map.png b/mods/cnc/maps/nod04a/map.png new file mode 100644 index 0000000000..94009e6ed1 Binary files /dev/null and b/mods/cnc/maps/nod04a/map.png differ diff --git a/mods/cnc/maps/nod04a/map.yaml b/mods/cnc/maps/nod04a/map.yaml new file mode 100644 index 0000000000..5d246952a8 --- /dev/null +++ b/mods/cnc/maps/nod04a/map.yaml @@ -0,0 +1,704 @@ +MapFormat: 7 + +RequiresMod: cnc + +Title: Mao Civil War (a) + +Description: 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. + +Author: Westwood Studios + +Tileset: DESERT + +MapSize: 64,64 + +Bounds: 11,6,46,34 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + Briefing: nod4b.vqa + GameLost: deskill.vqa + GameStart: retro.vqa + +Options: + Crates: False + Creeps: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 0 + ConfigurableStartingUnits: False + ShortGame: False + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: gdi + Allies: Nod + Enemies: GDI + PlayerReference@NodSupporter: + Name: NodSupporter + NonCombatant: True + Race: nod + PlayerReference@GDI: + Name: GDI + Race: gdi + ColorRamp: 31,222,183 + Enemies: Nod + PlayerReference@Nod: + Name: Nod + Playable: True + AllowBots: False + Required: True + LockRace: True + Race: nod + LockColor: True + ColorRamp: 3,255,127 + LockSpawn: True + LockTeam: True + Enemies: GDI + +Actors: + Actor0: t08 + Location: 34,20 + Owner: Neutral + Actor1: t18 + Location: 33,18 + Owner: Neutral + Actor2: t18 + Location: 33,9 + Owner: Neutral + Actor3: t08 + Location: 41,5 + Owner: Neutral + Actor4: t18 + Location: 42,15 + Owner: Neutral + Actor5: t08 + Location: 45,26 + Owner: Neutral + Actor6: t08 + Location: 56,29 + Owner: Neutral + Actor7: t08 + Location: 55,29 + Owner: Neutral + Actor8: t08 + Location: 51,26 + Owner: Neutral + Actor9: t08 + Location: 56,18 + Owner: Neutral + Actor10: t08 + Location: 52,16 + Owner: Neutral + Actor11: t08 + Location: 45,21 + Owner: Neutral + Actor12: t08 + Location: 38,19 + Owner: Neutral + Actor13: t08 + Location: 23,16 + Owner: Neutral + Actor14: t08 + Location: 14,22 + Owner: Neutral + Actor15: t08 + Location: 26,22 + Owner: Neutral + Actor16: t08 + Location: 21,26 + Owner: Neutral + Actor17: t08 + Location: 48,6 + Owner: Neutral + Actor18: t08 + Location: 15,19 + Owner: Neutral + Actor19: t08 + Location: 31,15 + Owner: Neutral + Actor20: t18 + Location: 49,34 + Owner: Neutral + Actor21: t18 + Location: 48,38 + Owner: Neutral + Actor22: t18 + Location: 42,35 + Owner: Neutral + Actor23: t18 + Location: 54,37 + Owner: Neutral + Actor24: t08 + Location: 51,35 + Owner: Neutral + Actor25: t08 + Location: 45,37 + Owner: Neutral + Actor26: t08 + Location: 47,33 + Owner: Neutral + Actor27: t18 + Location: 13,10 + Owner: Neutral + Actor28: t18 + Location: 20,7 + Owner: Neutral + Actor30: t08 + Location: 12,8 + Owner: Neutral + Actor31: t08 + Location: 23,9 + 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: 0.7265625 + 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 + Actor47: v21 + Location: 12,10 + Owner: GDI + Actor48: v22 + Location: 21,11 + Owner: GDI + Actor49: v23 + Location: 22,8 + Owner: GDI + Actor50: v24 + Location: 18,8 + Owner: GDI + Actor51: v25 + Location: 13,7 + Owner: GDI + Actor52: v26 + Location: 20,9 + Owner: GDI + Actor53: v27 + Location: 15,9 + Owner: GDI + Actor54: v27 + Location: 14,9 + Owner: GDI + Actor55: v27 + Location: 13,9 + Owner: GDI + Actor56: v28 + Location: 21,7 + Owner: GDI + Actor57: v29 + Location: 22,7 + Owner: GDI + Actor58: v30 + Location: 21,10 + Owner: GDI + Actor59: v30 + Location: 23,8 + Owner: GDI + Actor61: jeep + Location: 15,23 + Owner: GDI + Facing: 160 + Actor62: jeep + Location: 36,6 + Owner: GDI + Facing: 96 + Actor65: mtnk + Location: 29,10 + Owner: GDI + Facing: 64 + Actor71: jeep + Location: 24,26 + Owner: GDI + Facing: 96 + Actor72: jeep + Location: 37,19 + Owner: GDI + Facing: 32 + Actor73: jeep + Location: 27,33 + Owner: GDI + Facing: 96 + Actor86: e1 + Location: 43,15 + Owner: GDI + Health: 0.8789063 + Facing: 32 + SubCell: 3 + Actor99: e1 + Location: 45,15 + Owner: GDI + SubCell: 3 + Actor100: e1 + Location: 43,15 + Owner: GDI + Health: 0.9375 + Facing: 32 + SubCell: 4 + Actor105: e1 + Location: 46,14 + Owner: GDI + SubCell: 2 + Actor106: e1 + Location: 18,29 + Owner: GDI + Facing: 96 + 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: 128 + SubCell: 3 + Actor120: e2 + Location: 16,10 + Owner: GDI + Facing: 96 + SubCell: 2 + Actor121: e2 + Location: 27,19 + Owner: GDI + Facing: 128 + SubCell: 1 + Actor122: e2 + Location: 25,34 + Owner: GDI + SubCell: 4 + Actor123: e1 + Location: 13,13 + Owner: GDI + Facing: 128 + SubCell: 1 + Actor124: e1 + Location: 13,13 + Owner: GDI + Facing: 128 + SubCell: 2 + Actor125: e2 + Location: 13,13 + Owner: GDI + Facing: 128 + SubCell: 4 + Actor126: e2 + Location: 13,13 + Owner: GDI + Facing: 128 + SubCell: 3 + Actor127: e2 + Location: 29,18 + Owner: GDI + Facing: 64 + SubCell: 3 + Actor128: e2 + Location: 27,22 + Owner: GDI + Facing: 64 + SubCell: 1 + Actor129: e2 + Location: 36,10 + Owner: GDI + Health: 0.3789063 + Facing: 64 + SubCell: 0 + Actor131: e1 + Location: 21,12 + Owner: GDI + Facing: 128 + SubCell: 4 + Actor132: e1 + Location: 22,12 + Owner: GDI + Facing: 128 + 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: 0.625 + Civilian2: v33 + Location: 54,37 + Owner: Neutral + Soldier1: e2 + Location: 22,15 + Owner: GDI + Facing: 96 + SubCell: 2 + Soldier2: e1 + Location: 17,14 + Owner: GDI + Facing: 96 + SubCell: 4 + Soldier3: e2 + Location: 13,16 + Owner: GDI + Facing: 96 + 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: 128 + SubCell: 2 + NodCiv2: e3 + Location: 48,36 + Owner: NodSupporter + Facing: 192 + SubCell: 4 + NodCiv3: c4 + Location: 52,38 + Owner: NodSupporter + Facing: 192 + SubCell: 1 + NodCiv4: c3 + Location: 45,35 + Owner: NodSupporter + Facing: 32 + SubCell: 4 + NodCiv5: c1 + Location: 51,36 + Owner: NodSupporter + Facing: 224 + SubCell: 2 + NodCiv6: c2 + Location: 45,34 + Owner: NodSupporter + Facing: 0 + SubCell: 1 + NodCiv7: c4 + Location: 54,36 + Owner: NodSupporter + Facing: 160 + SubCell: 0 + NodCiv8: c5 + Location: 50,37 + Owner: NodSupporter + Facing: 96 + SubCell: 2 + NodCiv9: c9 + Location: 47,34 + Owner: NodSupporter + Facing: 192 + SubCell: 2 + Gciv1: e1 + Location: 38,9 + Owner: GDI + Facing: 128 + SubCell: 0 + Gciv2: e1 + Location: 18,10 + Owner: GDI + Facing: 160 + SubCell: 2 + +Smudges: + sc6 37,24 0: + sc6 36,18 0: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + EnemyWatcher: + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: nod04a.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + ^Vehicle: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Tank: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Helicopter: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Infantry: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + AnnounceOnSeen: + ^Plane: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Ship: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Wall: + Tooltip: + ShowOwnerRow: false + ^CivBuilding: + Tooltip: + ShowOwnerRow: false + AnnounceOnSeen: + ^CivBuildingHusk: + Tooltip: + ShowOwnerRow: false + AnnounceOnSeen: + ^Husk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + 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 + LST: + Buildable: + Prerequisites: ~disabled + C17: + 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 + +Sequences: + +VoxelSequences: + +Weapons: + +Voices: + +Notifications: + +Translations: diff --git a/mods/cnc/maps/nod04a/nod04a.lua b/mods/cnc/maps/nod04a/nod04a.lua new file mode 100644 index 0000000000..cf2ef3ac73 --- /dev/null +++ b/mods/cnc/maps/nod04a/nod04a.lua @@ -0,0 +1,307 @@ +NodUnitsBuggy = { 'bggy', 'bggy', 'bggy', 'bggy', 'bggy' } +NodUnitsBikes = { 'bike', 'bike', 'bike' } +NodUnitsGunner = { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1' } +NodUnitsRocket = { 'e3', 'e3', 'e3', 'e3', 'e3', 'e3' } + +Atk6Units = { 'c1', 'c2', 'c3' } +Atk5Units = { 'e1', 'e1', 'e2', 'e2' } +Atk1Units = { 'e1', 'e1' } +XxxxUnits = { 'jeep' } +YyyyUnits = { 'e1', 'e1', 'e2' } +ZzzzUnits = { 'e1', 'e1', 'e2', 'e2' } + +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 } + +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 } + +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) } + +Atk3TriggerCounter = 2 + +Atk1TriggerFunctionTime = DateTime.Seconds(20) +XxxxTriggerFunctionTime = DateTime.Seconds(50) +YyyyTriggerFunctionTime = DateTime.Minutes(1) + DateTime.Seconds(40) +ZzzzTriggerFunctionTime = DateTime.Minutes(2) + DateTime.Seconds(30) + +NodCiviliansActors = { NodCiv1, NodCiv2, NodCiv3, NodCiv4, NodCiv5, NodCiv6, NodCiv7, NodCiv8, NodCiv9 } + +Atk6TriggerFunction = function() + Reinforcements.ReinforceWithTransport(GDI, 'apc', Atk6Units, Atk6WaypointsPart1, Atk6WaypointsPart2, + function(transport, cargo) + Utils.Do(cargo, function(actor) + IdleHunt(actor) + end) + end, + function(unit) + IdleHunt(unit) + end) +end + +Atk5TriggerFunction = function () + if not Atk5TriggerSwitch then + Atk5TriggerSwitch = true + Reinforcements.ReinforceWithTransport(GDI, 'apc', Atk5Units, Atk5Waypoints, nil, + function(transport, cargo) + transport.UnloadPassengers() + Utils.Do(cargo, function(actor) + IdleHunt(actor) + end) + end, + function(unit) + IdleHunt(unit) + end) + end +end + +Atk1TriggerFunction = function() + Reinforcements.Reinforce(GDI, Atk1Units, Spawnpoint, 15, + function(actor) + Atk1Movement(actor) + end) +end + +XxxxTriggerFunction = function() + if not XxxxTriggerSwitch then + Reinforcements.Reinforce(GDI, XxxxUnits, Spawnpoint, 15, + function(actor) + Atk2Movement(actor) + end) + end +end + +YyyyTriggerFunction = function() + if not YyyyTriggerSwitch then + Reinforcements.Reinforce(GDI, YyyyUnits, Spawnpoint, 15, + function(actor) + Atk4Movement(actor) + end) + end +end + +ZzzzTriggerFunction = function() + if not ZzzzTriggerSwitch then + Reinforcements.ReinforceWithTransport(GDI, 'apc', ZzzzUnits, Atk5Waypoints, nil, + function(transport, cargo) + transport.UnloadPassengers() + Utils.Do(cargo, function(actor) + IdleHunt(actor) + end) + end, + function(unit) + IdleHunt(unit) + end) + end +end + +Atk3Movement = function(unit) + Utils.Do(Atk3Waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) +end + +Atk2Movement = function(unit) + Utils.Do(Atk2Waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) +end + +Atk1Movement = function(unit) + Utils.Do(Atk1Waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) +end + +GcivMovement = function(unit) + Utils.Do(GcivWaypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) +end + +Atk4Movement = function(unit) + Utils.Do(Atk4Waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) +end + +InsertNodUnits = function() + 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) +end + +CreateCivilians = function(actor, discoverer) + Utils.Do(NodCiviliansActors, function(actor) + actor.Owner = Nod + end) + + NodObjective2 = Nod.AddPrimaryObjective("Protect the civilians that support Nod.") + Trigger.OnAllKilled(NodCiviliansActors, function() + Nod.MarkFailedObjective(NodObjective2) + 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() + NodSupporter = Player.GetPlayer("NodSupporter") + Nod = Player.GetPlayer("Nod") + GDI = Player.GetPlayer("GDI") + + Trigger.OnObjectiveAdded(Nod, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(Nod, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(Nod, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerWon(Nod, function() + Media.PlaySpeechNotification(Nod, "Win") + end) + + Trigger.OnPlayerLost(Nod, function() + Media.PlaySpeechNotification(Nod, "Lose") + end) + + Trigger.OnAnyKilled(Atk6ActorTriggerActivator, Atk6TriggerFunction) + + OnAnyDamaged(Atk5ActorTriggerActivator, Atk5TriggerFunction) + + Trigger.OnEnteredFootprint(Atk3CellTriggerActivator, function(a, id) + if a.Owner == Nod then + for type, count in pairs({ ['e1'] = 3, ['e2'] = 2, ['mtnk'] = 1 }) do + local myActors = Utils.Take(count, GDI.GetActorsByType(type)) + Utils.Do(myActors, function(actor) + Atk3Movement(actor) + end) + end + + Atk3TriggerCounter = Atk3TriggerCounter - 1 + if Atk3TriggerCounter < 0 then + Trigger.RemoveFootprintTrigger(id) + end + end + end) + + Trigger.OnEnteredFootprint(Atk2CellTriggerActivator, function(a, id) + if a.Owner == Nod then + MyActors = Utils.Take(1, GDI.GetActorsByType('jeep')) + Utils.Do(MyActors, function(actor) + Atk2Movement(actor) + end) + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(GcivCellTriggerActivator, function(a, id) + if a.Owner == Nod then + Utils.Do(GcivActors, function(actor) + GcivMovement(actor) + end) + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.AfterDelay(Atk1TriggerFunctionTime, Atk1TriggerFunction) + + Trigger.OnEnteredFootprint(Atk4CellTriggerActivator, function(a, id) + if a.Owner == Nod then + for type, count in pairs({ ['e1'] = 2,['e2'] = 1 }) do + local myActors = Utils.Take(count, GDI.GetActorsByType(type)) + Utils.Do(myActors, function(actor) + Atk4Movement(actor) + end) + end + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.AfterDelay(XxxxTriggerFunctionTime, XxxxTriggerFunction) + Trigger.AfterDelay(YyyyTriggerFunctionTime, YyyyTriggerFunction) + Trigger.AfterDelay(ZzzzTriggerFunctionTime, ZzzzTriggerFunction) + + Trigger.OnEnteredFootprint(DelxCellTriggerActivator, function(a, id) + if a.Owner == Nod then + XxxxTriggerSwitch = true + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(DelyCellTriggerActivator, function(a, id) + if a.Owner == Nod then + YyyyTriggerSwitch = true + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnEnteredFootprint(DelzCellTriggerActivator, function(a, id) + if a.Owner == Nod then + ZzzzTriggerSwitch = true + Trigger.RemoveFootprintTrigger(id) + end + end) + + Trigger.OnPlayerDiscovered(NodSupporter, CreateCivilians) + + Trigger.OnAllKilled(WinActorTriggerActivator, function() + Nod.MarkCompletedObjective(NodObjective1) + if NodObjective2 then + Nod.MarkCompletedObjective(NodObjective2) + end + end) + + GDIObjective = GDI.AddPrimaryObjective("Eliminate all Nod forces in the area.") + NodObjective1 = Nod.AddPrimaryObjective("Kill all civilian which support the GDI.") + + InsertNodUnits() +end + +Tick = function() + if Nod.HasNoRequiredUnits() then + if DateTime.GameTime > 2 then + GDI.MarkCompletedObjective(GDIObjective) + end + end +end + +OnAnyDamaged = function(actors, func) + Utils.Do(actors, function(actor) + Trigger.OnDamaged(actor, func) + end) +end + +IdleHunt = function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + end +end diff --git a/mods/cnc/missions.yaml b/mods/cnc/missions.yaml index 9a8dfee81f..4478d1d085 100644 --- a/mods/cnc/missions.yaml +++ b/mods/cnc/missions.yaml @@ -14,3 +14,4 @@ Nod Campaign: ./mods/cnc/maps/nod02b ./mods/cnc/maps/nod03a ./mods/cnc/maps/nod03b + ./mods/cnc/maps/nod04a