diff --git a/OpenRA.sln b/OpenRA.sln index b4de539a06..8ad593212e 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -31,6 +31,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts", mods\cnc\maps\gdi04a\gdi04a.lua = mods\cnc\maps\gdi04a\gdi04a.lua mods\cnc\maps\gdi04b\gdi04b.lua = mods\cnc\maps\gdi04b\gdi04b.lua mods\cnc\maps\gdi04c\gdi04c.lua = mods\cnc\maps\gdi04c\gdi04c.lua + mods\cnc\maps\gdi05a\gdi05a.lua = mods\cnc\maps\gdi05a\gdi05a.lua mods\cnc\maps\nod01\nod01.lua = mods\cnc\maps\nod01\nod01.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 diff --git a/artsrc/cnc/campaign/gdi05w.psd b/artsrc/cnc/campaign/gdi05w.psd new file mode 100644 index 0000000000..bfe325de7e Binary files /dev/null and b/artsrc/cnc/campaign/gdi05w.psd differ diff --git a/mods/cnc/maps/gdi05a/gdi05a.lua b/mods/cnc/maps/gdi05a/gdi05a.lua new file mode 100644 index 0000000000..bb26935e74 --- /dev/null +++ b/mods/cnc/maps/gdi05a/gdi05a.lua @@ -0,0 +1,230 @@ +RepairThreshold = { Easy = 0.3, Normal = 0.6, Hard = 0.9 } + +ActorRemovals = +{ + Easy = { Actor167, Actor168, Actor190, Actor191, Actor193, Actor194, Actor196, Actor198, Actor200 }, + Normal = { Actor167, Actor194, Actor196, Actor197 }, + Hard = { }, +} + +GdiTanks = { "mtnk", "mtnk" } +GdiApc = { "apc" } +GdiInfantry = { "e1", "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e2", "e2" } +GdiBase = { GdiNuke1, GdiNuke2, GdiProc, GdiSilo1, GdiSilo2, GdiPyle, GdiWeap, GdiHarv } +GdiBaseDiscoveryTrigger = +{ + CPos.New(39, 54), CPos.New(48, 42), CPos.New(49, 42), CPos.New(50, 42), CPos.New(51, 42), + CPos.New(52, 42), CPos.New(53, 42), CPos.New(54, 42), CPos.New(55, 42), CPos.New(56, 42) +} +NodSams = { Sam1, Sam2, Sam3, Sam4 } +CoreNodBase = { NodConYard, NodRefinery, HandOfNod, Airfield } + +Grd1UnitTypes = { "bggy" } +Grd1Path = { waypoint4.Location, waypoint5.Location, waypoint10.Location } +Grd1Delay = { Easy = DateTime.Minutes(2), Normal = DateTime.Minutes(1), Hard = DateTime.Seconds(30) } +Grd2UnitTypes = { "bggy" } +Grd2Path = { waypoint0.Location, waypoint1.Location, waypoint2.Location } +Grd3Units = { GuardTank1, GuardTank2 } +Grd3Path = { waypoint4.Location, waypoint5.Location, waypoint9.Location } + +AttackDelayMin = { Easy = DateTime.Minutes(1), Normal = DateTime.Seconds(45), Hard = DateTime.Seconds(30) } +AttackDelayMax = { Easy = DateTime.Minutes(2), Normal = DateTime.Seconds(90), Hard = DateTime.Minutes(1) } +AttackUnitTypes = +{ + Easy = + { + { HandOfNod, { "e1", "e1" } }, + { HandOfNod, { "e1", "e3" } }, + { HandOfNod, { "e1", "e1", "e3" } }, + { HandOfNod, { "e1", "e3", "e3" } }, + }, + Normal = + { + { HandOfNod, { "e1", "e1", "e3" } }, + { HandOfNod, { "e1", "e3", "e3" } }, + { HandOfNod, { "e1", "e1", "e3", "e3" } }, + { Airfield, { "bggy" } }, + }, + Hard = + { + { HandOfNod, { "e1", "e1", "e3", "e3" } }, + { HandOfNod, { "e1", "e1", "e1", "e3", "e3" } }, + { HandOfNod, { "e1", "e1", "e3", "e3", "e3" } }, + { Airfield, { "bggy" } }, + { Airfield, { "ltnk" } }, + } +} +AttackPaths = +{ + { waypoint0.Location, waypoint1.Location, waypoint2.Location, waypoint3.Location }, + { waypoint4.Location, waypoint9.Location, waypoint7.Location, waypoint8.Location }, +} + +Build = function(factory, units, action) + if factory.IsDead or factory.Owner ~= nod then + return + end + + if not factory.Build(units, action) then + Trigger.AfterDelay(DateTime.Seconds(5), function() + Build(factory, units, action) + end) + end +end + +Attack = function() + local types = Utils.Random(AttackUnitTypes[Map.Difficulty]) + local path = Utils.Random(AttackPaths) + Build(types[1], types[2], function(units) + Utils.Do(units, function(unit) + unit.Patrol(path, false) + Trigger.OnIdle(unit, unit.Hunt) + end) + end) + + Trigger.AfterDelay(Utils.RandomInteger(AttackDelayMin[Map.Difficulty], AttackDelayMax[Map.Difficulty]), Attack) +end + +Grd1Action = function() + Build(Airfield, Grd1UnitTypes, function(units) + Utils.Do(units, function(unit) + Trigger.OnKilled(unit, function() + Trigger.AfterDelay(Grd1Delay[Map.Difficulty], Grd1Action) + end) + unit.Patrol(Grd1Path, true, DateTime.Seconds(7)) + end) + end) +end + +Grd2Action = function() + Build(Airfield, Grd2UnitTypes, function(units) + Utils.Do(units, function(unit) + unit.Patrol(Grd2Path, true, DateTime.Seconds(5)) + end) + end) +end + +Grd3Action = function() + local unit + for i, u in ipairs(Grd3Units) do + if not u.IsDead then + unit = u + break + end + end + + if unit ~= nil then + Trigger.OnKilled(unit, function() + Grd3Action() + end) + + unit.Patrol(Grd3Path, true, DateTime.Seconds(11)) + end +end + +DiscoverGdiBase = function() + Utils.Do(GdiBase, function(actor) + actor.Owner = gdi + end) + GdiHarv.FindResources() + + baseDiscovered = true + + gdiObjective3 = gdi.AddPrimaryObjective("Eliminate all Nod forces in the area") + gdi.MarkCompletedObjective(gdiObjective1) + + Attack() +end + +SetupWorld = function() + Utils.Do(ActorRemovals[Map.Difficulty], function(unit) + unit.Destroy() + end) + + Reinforcements.Reinforce(gdi, GdiTanks, { GdiTankEntry.Location, GdiTankRallyPoint.Location }, DateTime.Seconds(1), function(actor) actor.Stance = "Defend" end) + Reinforcements.Reinforce(gdi, GdiApc, { GdiApcEntry.Location, GdiApcRallyPoint.Location }, DateTime.Seconds(1), function(actor) actor.Stance = "Defend" end) + Reinforcements.Reinforce(gdi, GdiInfantry, { GdiInfantryEntry.Location, GdiInfantryRallyPoint.Location }, 15, function(actor) actor.Stance = "Defend" end) + + Trigger.OnEnteredFootprint(GdiBaseDiscoveryTrigger, function(actor, id) + if actor.Owner == gdi then + DiscoverGdiBase() + Trigger.RemoveFootprintTrigger(id) + end + end) + + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == nod and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == nod and building.Health < RepairThreshold[Map.Difficulty] * building.MaxHealth then + building.StartBuildingRepairs() + end + end) + end + end) + + Trigger.OnAllKilled(NodSams, function() + gdi.MarkCompletedObjective(gdiObjective2) + Actor.Create("airstrike.proxy", true, { Owner = gdi }) + end) + + GdiHarv.Stop() + NodHarv.FindResources() + if Map.Difficulty ~= "Easy" then + Trigger.OnDamaged(NodHarv, function() + Utils.Do(nod.GetGroundAttackers(), function(unit) + unit.AttackMove(NodHarv.Location) + if Map.Difficulty == "Hard" then + unit.Hunt() + end + end) + end) + end + + Trigger.AfterDelay(DateTime.Seconds(45), Grd1Action) + Trigger.AfterDelay(DateTime.Minutes(3), Grd2Action) + Grd3Action() +end + +WorldLoaded = function() + gdi = Player.GetPlayer("GDI") + nod = Player.GetPlayer("Nod") + + Trigger.OnObjectiveAdded(gdi, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(gdi, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(gdi, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(gdi, function() + Media.PlaySpeechNotification(player, "Lose") + end) + + Trigger.OnPlayerWon(gdi, function() + Media.PlaySpeechNotification(player, "Win") + end) + + nodObjective = nod.AddPrimaryObjective("Destroy all GDI troops") + gdiObjective1 = gdi.AddPrimaryObjective("Find the GDI base") + gdiObjective2 = gdi.AddSecondaryObjective("Destroy all SAM sites to receive air support") + + SetupWorld() + + Camera.Position = GdiTankRallyPoint.CenterPosition + + Media.PlayMusic() +end + +Tick = function() + if gdi.HasNoRequiredUnits() then + if DateTime.GameTime > 2 then + nod.MarkCompletedObjective(nodObjective) + end + end + if baseDiscovered and nod.HasNoRequiredUnits() then + gdi.MarkCompletedObjective(gdiObjective3) + end +end \ No newline at end of file diff --git a/mods/cnc/maps/gdi05a/map.bin b/mods/cnc/maps/gdi05a/map.bin new file mode 100644 index 0000000000..8b524d1a8e Binary files /dev/null and b/mods/cnc/maps/gdi05a/map.bin differ diff --git a/mods/cnc/maps/gdi05a/map.png b/mods/cnc/maps/gdi05a/map.png new file mode 100644 index 0000000000..09efcb8f04 Binary files /dev/null and b/mods/cnc/maps/gdi05a/map.png differ diff --git a/mods/cnc/maps/gdi05a/map.yaml b/mods/cnc/maps/gdi05a/map.yaml new file mode 100644 index 0000000000..47703b3908 --- /dev/null +++ b/mods/cnc/maps/gdi05a/map.yaml @@ -0,0 +1,939 @@ +MapFormat: 7 + +RequiresMod: cnc + +Title: Repair the GDI base + +Description: A GDI field base is under attack. They have fended off one attack but will not survive another.\n\nMove to the base, repair the structures and then launch a strike force to destroy the Nod base in the area.\n\nDestroy all Nod units and structures. + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 8,21,49,39 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + BackgroundInfo: podium.vqa + Briefing: gdi5.vqa + GameStart: seige.vqa + GameWon: nodlose.vqa + GameLost: gdilose.vqa + +Options: + Crates: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 2000 + ConfigurableStartingUnits: False + Difficulties: Easy, Normal, Hard + ShortGame: False + +Players: + PlayerReference@Nod: + Name: Nod + Race: nod + ColorRamp: 3,255,127 + Allies: Nod + Enemies: GDI + PlayerReference@GDI: + Name: GDI + Playable: True + AllowBots: False + Required: True + LockRace: True + Race: gdi + LockColor: True + ColorRamp: 31,222,183 + LockSpawn: True + LockTeam: True + Allies: GDI + Enemies: Nod + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: gdi + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: Random + Enemies: Nod, GDI + +Actors: + Actor0: sbag + Location: 53,59 + Owner: Neutral + Actor1: sbag + Location: 52,59 + Owner: Neutral + Actor2: sbag + Location: 51,59 + Owner: Neutral + Actor3: sbag + Location: 50,59 + Owner: Neutral + Actor4: sbag + Location: 49,59 + Owner: Neutral + Actor5: sbag + Location: 45,59 + Owner: Neutral + Actor6: sbag + Location: 44,59 + Owner: Neutral + Actor7: sbag + Location: 43,59 + Owner: Neutral + Actor8: sbag + Location: 42,59 + Owner: Neutral + Actor9: sbag + Location: 41,59 + Owner: Neutral + Actor10: sbag + Location: 41,57 + Owner: Neutral + Actor11: sbag + Location: 41,56 + Owner: Neutral + Actor12: sbag + Location: 41,53 + Owner: Neutral + Actor13: sbag + Location: 41,52 + Owner: Neutral + Actor14: sbag + Location: 44,51 + Owner: Neutral + Actor15: sbag + Location: 43,51 + Owner: Neutral + Actor16: sbag + Location: 42,51 + Owner: Neutral + Actor17: sbag + Location: 41,51 + Owner: Neutral + Actor18: sbag + Location: 54,50 + Owner: Neutral + Actor19: sbag + Location: 53,50 + Owner: Neutral + Actor20: sbag + Location: 52,50 + Owner: Neutral + Actor21: sbag + Location: 46,50 + Owner: Neutral + Actor22: sbag + Location: 45,50 + Owner: Neutral + Actor23: sbag + Location: 44,50 + Owner: Neutral + Actor24: sbag + Location: 15,31 + Owner: Neutral + Actor25: sbag + Location: 14,31 + Owner: Neutral + Actor26: sbag + Location: 13,31 + Owner: Neutral + Actor27: sbag + Location: 12,31 + Owner: Neutral + Actor28: sbag + Location: 8,31 + Owner: Neutral + Actor29: sbag + Location: 15,30 + Owner: Neutral + Actor30: sbag + Location: 8,30 + Owner: Neutral + Actor31: sbag + Location: 25,29 + Owner: Neutral + Actor32: sbag + Location: 24,29 + Owner: Neutral + Actor33: sbag + Location: 23,29 + Owner: Neutral + Actor34: sbag + Location: 22,29 + Owner: Neutral + Actor35: sbag + Location: 21,29 + Owner: Neutral + Actor36: sbag + Location: 20,29 + Owner: Neutral + Actor37: sbag + Location: 19,29 + Owner: Neutral + Actor38: sbag + Location: 18,29 + Owner: Neutral + Actor39: sbag + Location: 17,29 + Owner: Neutral + Actor40: sbag + Location: 16,29 + Owner: Neutral + Actor41: sbag + Location: 15,29 + Owner: Neutral + Actor42: sbag + Location: 8,29 + Owner: Neutral + Actor43: sbag + Location: 25,28 + Owner: Neutral + Actor44: sbag + Location: 8,28 + Owner: Neutral + Actor45: sbag + Location: 25,27 + Owner: Neutral + Actor46: sbag + Location: 8,27 + Owner: Neutral + Actor47: sbag + Location: 8,26 + Owner: Neutral + Actor48: sbag + Location: 8,25 + Owner: Neutral + Actor49: sbag + Location: 25,24 + Owner: Neutral + Actor50: sbag + Location: 8,24 + Owner: Neutral + Actor51: sbag + Location: 25,23 + Owner: Neutral + Actor52: sbag + Location: 8,23 + Owner: Neutral + Actor53: sbag + Location: 25,22 + Owner: Neutral + Actor54: sbag + Location: 8,22 + Owner: Neutral + Actor55: sbag + Location: 25,21 + Owner: Neutral + Actor56: sbag + Location: 24,21 + Owner: Neutral + Actor57: sbag + Location: 23,21 + Owner: Neutral + Actor58: sbag + Location: 22,21 + Owner: Neutral + Actor59: sbag + Location: 21,21 + Owner: Neutral + Actor60: sbag + Location: 20,21 + Owner: Neutral + Actor61: sbag + Location: 19,21 + Owner: Neutral + Actor62: sbag + Location: 18,21 + Owner: Neutral + Actor63: sbag + Location: 17,21 + Owner: Neutral + Actor64: sbag + Location: 16,21 + Owner: Neutral + Actor65: sbag + Location: 15,21 + Owner: Neutral + Actor66: sbag + Location: 14,21 + Owner: Neutral + Actor67: sbag + Location: 13,21 + Owner: Neutral + Actor68: sbag + Location: 12,21 + Owner: Neutral + Actor69: sbag + Location: 11,21 + Owner: Neutral + Actor70: sbag + Location: 10,21 + Owner: Neutral + Actor71: sbag + Location: 9,21 + Owner: Neutral + Actor72: sbag + Location: 8,21 + Owner: Neutral + Actor73: t01 + Location: 12,38 + Owner: Neutral + Actor74: t01 + Location: 44,34 + Owner: Neutral + Actor75: tc01 + Location: 43,36 + Owner: Neutral + Actor76: tc01 + Location: 39,33 + Owner: Neutral + Actor77: t05 + Location: 8,37 + Owner: Neutral + Actor78: t03 + Location: 8,34 + Owner: Neutral + Actor79: t03 + Location: 33,56 + Owner: Neutral + Actor80: tc04 + Location: 13,46 + Owner: Neutral + Actor81: tc02 + Location: 8,50 + Owner: Neutral + Actor82: t02 + Location: 10,49 + Owner: Neutral + Actor83: t01 + Location: 36,34 + Owner: Neutral + Actor84: t01 + Location: 37,39 + Owner: Neutral + Actor85: tc01 + Location: 27,21 + Owner: Neutral + Actor86: tc02 + Location: 26,23 + Owner: Neutral + Actor87: tc04 + Location: 23,29 + Owner: Neutral + Actor88: tc02 + Location: 20,30 + Owner: Neutral + Actor89: t07 + Location: 37,44 + Owner: Neutral + Actor90: t12 + Location: 38,44 + Owner: Neutral + Actor91: tc04 + Location: 35,43 + Owner: Neutral + Actor92: tc02 + Location: 14,39 + Owner: Neutral + Actor93: tc01 + Location: 10,46 + Owner: Neutral + Actor94: tc04 + Location: 10,44 + Owner: Neutral + Actor95: t01 + Location: 10,43 + Owner: Neutral + Actor96: t01 + Location: 11,47 + Owner: Neutral + Actor97: t05 + Location: 8,49 + Owner: Neutral + Actor98: t06 + Location: 16,48 + Owner: Neutral + Actor99: tc01 + Location: 13,49 + Owner: Neutral + Actor100: tc01 + Location: 15,57 + Owner: Neutral + Actor101: tc02 + Location: 9,54 + Owner: Neutral + Actor102: tc05 + Location: 11,55 + Owner: Neutral + Actor103: tc04 + Location: 9,57 + Owner: Neutral + Actor104: tc04 + Location: 40,46 + Owner: Neutral + Actor105: t01 + Location: 38,49 + Owner: Neutral + Actor106: t01 + Location: 30,46 + Owner: Neutral + Actor107: t01 + Location: 16,44 + Owner: Neutral + Actor108: t02 + Location: 33,45 + Owner: Neutral + Actor109: t02 + Location: 21,44 + Owner: Neutral + Actor110: t05 + Location: 21,37 + Owner: Neutral + Actor111: t06 + Location: 20,37 + Owner: Neutral + Actor112: tc02 + Location: 30,44 + Owner: Neutral + Actor113: tc01 + Location: 30,42 + Owner: Neutral + Actor114: tc01 + Location: 21,39 + Owner: Neutral + Actor115: tc04 + Location: 21,40 + Owner: Neutral + Actor116: tc02 + Location: 24,40 + Owner: Neutral + Actor117: t07 + Location: 25,41 + Owner: Neutral + Actor118: t07 + Location: 50,38 + Owner: Neutral + Actor119: t07 + Location: 44,35 + Owner: Neutral + Actor120: t07 + Location: 42,36 + Owner: Neutral + Actor121: t16 + Location: 45,43 + Owner: Neutral + Actor122: tc02 + Location: 43,44 + Owner: Neutral + Actor123: tc02 + Location: 48,39 + Owner: Neutral + Actor124: tc04 + Location: 41,34 + Owner: Neutral + Actor125: t17 + Location: 29,37 + Owner: Neutral + Actor126: tc04 + Location: 35,38 + Owner: Neutral + Actor127: tc01 + Location: 33,38 + Owner: Neutral + Actor128: tc04 + Location: 9,35 + Owner: Neutral + Actor129: t01 + Location: 22,55 + Owner: Neutral + Actor130: t02 + Location: 32,56 + Owner: Neutral + Actor131: t05 + Location: 29,50 + Owner: Neutral + Actor132: t06 + Location: 36,47 + Owner: Neutral + Actor133: tc01 + Location: 36,51 + Owner: Neutral + Actor134: tc02 + Location: 27,58 + Owner: Neutral + Actor135: tc02 + Location: 31,55 + Owner: Neutral + Actor140: gun + Location: 24,23 + Owner: Nod + Facing: 96 + Actor141: gun + Location: 24,28 + Owner: Nod + Facing: 96 + Actor152: silo + Location: 19,22 + Owner: Nod + Actor153: silo + Location: 17,22 + Owner: Nod + Actor154: silo + Location: 14,27 + Owner: Nod + Actor155: silo + Location: 12,28 + Owner: Nod + Actor156: nuke + Location: 11,22 + Owner: Nod + Actor157: nuke + Location: 9,22 + Owner: Nod + Actor159: nuke + Location: 13,22 + Owner: Nod + Actor162: ltnk + Location: 9,34 + Owner: Nod + Facing: 192 + Actor164: ltnk + Location: 29,37 + Owner: Nod + Facing: 96 + Actor167: bggy + Location: 19,27 + Owner: Nod + Actor168: bggy + Location: 19,28 + Owner: Nod + Actor169: bggy + Location: 44,34 + Owner: Nod + Facing: 32 + Actor171: e3 + Location: 21,28 + Owner: Nod + SubCell: 3 + Actor172: e3 + Location: 20,28 + Owner: Nod + SubCell: 3 + Actor173: e3 + Location: 20,28 + Owner: Nod + SubCell: 4 + Actor174: e1 + Location: 20,28 + Owner: Nod + SubCell: 1 + Actor175: e1 + Location: 20,28 + Owner: Nod + SubCell: 2 + Actor176: e1 + Location: 21,28 + Owner: Nod + SubCell: 1 + Actor177: e1 + Location: 29,40 + Owner: Nod + Facing: 96 + SubCell: 1 + Actor178: e3 + Location: 26,43 + Owner: Nod + Facing: 64 + SubCell: 3 + Actor187: e1 + Location: 27,27 + Owner: Nod + Facing: 96 + SubCell: 3 + Actor188: e3 + Location: 28,21 + Owner: Nod + SubCell: 3 + Actor189: e3 + Location: 26,23 + Owner: Nod + Facing: 96 + SubCell: 2 + Actor190: e3 + Location: 33,56 + Owner: Nod + SubCell: 3 + Actor191: e3 + Location: 33,38 + Owner: Nod + Facing: 160 + SubCell: 4 + Actor192: e3 + Location: 26,27 + Owner: Nod + Facing: 96 + SubCell: 1 + Actor193: e3 + Location: 36,51 + Owner: Nod + SubCell: 4 + Actor194: e3 + Location: 37,51 + Owner: Nod + SubCell: 3 + Actor195: e3 + Location: 23,55 + Owner: Nod + Facing: 224 + SubCell: 3 + Actor196: e3 + Location: 30,44 + Owner: Nod + Facing: 192 + SubCell: 0 + Actor197: e3 + Location: 32,49 + Owner: Nod + Facing: 160 + SubCell: 4 + Actor198: e3 + Location: 28,48 + Owner: Nod + Facing: 160 + SubCell: 3 + Actor199: e1 + Location: 24,56 + Owner: Nod + Facing: 224 + SubCell: 4 + Actor200: e1 + Location: 25,55 + Owner: Nod + SubCell: 1 + Actor201: e1 + Location: 17,46 + Owner: Nod + Facing: 96 + SubCell: 0 + Actor202: e1 + Location: 15,48 + Owner: Nod + Facing: 96 + SubCell: 2 + Actor203: e1 + Location: 17,46 + Owner: Nod + Facing: 96 + SubCell: 4 + waypoint27: waypoint + Location: 32,41 + Owner: Neutral + waypoint26: waypoint + Location: 8,50 + Owner: Neutral + waypoint19: waypoint + Location: 17,28 + Owner: Neutral + waypoint18: waypoint + Location: 22,28 + Owner: Neutral + waypoint10: waypoint + Location: 10,34 + Owner: Neutral + waypoint9: waypoint + Location: 28,45 + Owner: Neutral + waypoint8: waypoint + Location: 37,54 + Owner: Neutral + waypoint7: waypoint + Location: 26,54 + Owner: Neutral + waypoint6: waypoint + Location: 37,31 + Owner: Neutral + waypoint5: waypoint + Location: 30,31 + Owner: Neutral + waypoint4: waypoint + Location: 31,25 + Owner: Neutral + waypoint3: waypoint + Location: 52,46 + Owner: Neutral + waypoint2: waypoint + Location: 53,31 + Owner: Neutral + waypoint1: waypoint + Location: 42,29 + Owner: Neutral + waypoint0: waypoint + Location: 36,28 + Owner: Neutral + GdiProc: proc + Location: 50,51 + Owner: Neutral + Health: 0.3085938 + FreeActor: False + GdiHarv: harv + Location: 48,53 + Owner: Neutral + Facing: 64 + GdiWeap: weap + Location: 50,54 + Owner: Neutral + Health: 0.2695313 + GdiNuke1: nuke + Location: 53,55 + Owner: Neutral + Health: 0.2890625 + GdiPyle: pyle + Location: 46,55 + Owner: Neutral + Health: 0.25 + GdiSilo1: silo + Location: 53,51 + Owner: Neutral + Health: 0.3320313 + GdiSilo2: silo + Location: 53,53 + Owner: Neutral + Health: 0.25 + GdiNuke2: nuke + Location: 48,56 + Owner: Neutral + Health: 0.2070313 + NodConYard: fact + Location: 9,29 + Owner: Nod + NodRefinery: proc + Location: 21,22 + Owner: Nod + FreeActor: False + HandOfNod: hand + Location: 15,22 + Owner: Nod + Airfield: afld + Location: 9,25 + Owner: Nod + Sam1: sam + Location: 21,39 + Owner: Nod + Sam2: sam + Location: 41,34 + Owner: Nod + Sam3: sam + Location: 24,31 + Owner: Nod + Sam4: sam + Location: 13,30 + Owner: Nod + NodHarv: harv + Location: 22,26 + Owner: Nod + Facing: 64 + GuardTank1: ltnk + Location: 18,27 + Owner: Nod + GuardTank2: ltnk + Location: 18,28 + Owner: Nod + GdiTankEntry: waypoint + Location: 8,59 + Owner: Neutral + GdiApcEntry: waypoint + Location: 11,59 + Owner: Neutral + GdiInfantryEntry: waypoint + Location: 8,53 + Owner: Neutral + GdiTankRallyPoint: waypoint + Location: 14,54 + Owner: Neutral + GdiApcRallyPoint: waypoint + Location: 15,56 + Owner: Neutral + GdiInfantryRallyPoint: waypoint + Location: 12,53 + Owner: Neutral + MoneyCrate: MoneyCrate + Location: 44,40 + Owner: Neutral + +Smudges: + sc4 41,55 0: + cr1 41,54 0: + cr1 13,52 0: + sc5 48,51 0: + cr1 11,51 0: + sc2 53,50 0: + sc3 51,50 0: + sc4 45,50 0: + sc6 49,48 0: + +Rules: + World: + -SpawnMPUnits: + -MPStartLocations: + -CrateSpawner: + LuaScript: + Scripts: gdi05a.lua + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + ^Vehicle: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Tank: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Helicopter: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Infantry: + SpawnViceroid: + Probability: 0 + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Plane: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Ship: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + ^Wall: + Tooltip: + ShowOwnerRow: false + ^Husk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + E2: + Buildable: + Prerequisites: ~pyle + E3: + Buildable: + Queue: Infantry.Nod + E5: + Buildable: + Prerequisites: ~disabled + RMBO: + Buildable: + Prerequisites: ~disabled + HARV: + Harvester: + SearchFromOrderRadius: 24 + Buildable: + Prerequisites: ~disabled + LTNK: + Buildable: + Prerequisites: ~afld + MCV: + Buildable: + Prerequisites: ~disabled + MTNK: + Buildable: + Prerequisites: ~disabled + HTNK: + Buildable: + Prerequisites: ~disabled + MSAM: + Buildable: + Prerequisites: ~disabled + ARTY: + Buildable: + Prerequisites: ~disabled + STNK: + Buildable: + Prerequisites: ~disabled + WEAP: + Buildable: + Prerequisites: ~disabled + NUK2: + Buildable: + Prerequisites: ~disabled + FIX: + Buildable: + Prerequisites: ~disabled + HPAD: + Buildable: + Prerequisites: ~disabled + EYE: + Buildable: + Prerequisites: ~disabled + GUN: + Buildable: + Prerequisites: ~disabled + ATWR: + Buildable: + Prerequisites: ~disabled + TMPL: + Buildable: + Prerequisites: ~disabled + OBLI: + Buildable: + Prerequisites: ~disabled + MoneyCrate: + Inherits: ^Crate + GiveCashCrateAction: + Amount: 500 + UseCashTick: yes + airstrike.proxy: + AirstrikePower: + Icon: airstrike + StartFullyCharged: True + ChargeTime: 120 + SquadSize: 1 + QuantizedFacings: 8 + Description: Air Strike + LongDesc: Deploy an aerial napalm strike.\nBurns buildings and infantry along a line. + EndChargeSound: airredy1.aud + SelectTargetSound: select1.aud + InsufficientPowerSound: nopower1.aud + IncomingSound: enemya.aud + UnitType: a10 + DisplayBeacon: True + BeaconPoster: airstrike + DisplayRadarPing: True + CameraActor: camera + +Sequences: + +VoxelSequences: + +Weapons: + Tiberium: + Warhead@1Dam: SpreadDamage + Damage: 4 + +Voices: + +Notifications: + +Translations: diff --git a/mods/cnc/missions.yaml b/mods/cnc/missions.yaml index b36e7bb26f..d91e5b1b15 100644 --- a/mods/cnc/missions.yaml +++ b/mods/cnc/missions.yaml @@ -5,6 +5,7 @@ GDI Campaign: ./mods/cnc/maps/gdi04a ./mods/cnc/maps/gdi04b ./mods/cnc/maps/gdi04c + ./mods/cnc/maps/gdi05a Nod Campaign: ./mods/cnc/maps/nod01