diff --git a/OpenRA.sln b/OpenRA.sln index a2e37de2a1..5587c5b745 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -39,6 +39,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts", mods\cnc\maps\nod04a\nod04a.lua = mods\cnc\maps\nod04a\nod04a.lua mods\cnc\maps\nod04b\nod04b.lua = mods\cnc\maps\nod04b\nod04b.lua mods\cnc\maps\nod05\nod05.lua = mods\cnc\maps\nod05\nod05.lua + mods\cnc\maps\funpark01\scj01ea.lua = mods\cnc\maps\funpark01\scj01ea.lua mods\cnc\maps\shellmap\shellmap.lua = mods\cnc\maps\shellmap\shellmap.lua EndProjectSection EndProject diff --git a/artsrc/cnc/campaign/funpark.xcf b/artsrc/cnc/campaign/funpark.xcf new file mode 100644 index 0000000000..37f2991dca Binary files /dev/null and b/artsrc/cnc/campaign/funpark.xcf differ diff --git a/mods/cnc/maps/funpark01/map.bin b/mods/cnc/maps/funpark01/map.bin new file mode 100644 index 0000000000..40ae2c8df4 Binary files /dev/null and b/mods/cnc/maps/funpark01/map.bin differ diff --git a/mods/cnc/maps/funpark01/map.png b/mods/cnc/maps/funpark01/map.png new file mode 100644 index 0000000000..513f7eaa02 Binary files /dev/null and b/mods/cnc/maps/funpark01/map.png differ diff --git a/mods/cnc/maps/funpark01/map.yaml b/mods/cnc/maps/funpark01/map.yaml new file mode 100644 index 0000000000..93e882740c --- /dev/null +++ b/mods/cnc/maps/funpark01/map.yaml @@ -0,0 +1,533 @@ +MapFormat: 7 + +RequiresMod: cnc + +Title: Strange Behavior + +Description: There have been some reports of strange animals in this area. \n\nTake your units to investigate, and report back your findings. + +Author: Westwood Studios + +Tileset: JUNGLE + +MapSize: 64,64 + +Bounds: 10,5,45,52 + +Visibility: MissionSelector + +Type: Campaign + +Videos: + Briefing: generic.vqa + GameStart: dino.vqa + +Options: + Crates: False + Creeps: False + Fog: True + Shroud: True + AllyBuildRadius: False + FragileAlliances: False + StartingCash: 0 + ConfigurableStartingUnits: False + ShortGame: False + Difficulties: Easy,Normal + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: gdi + PlayerReference@Civilian: + Name: Civilian + NonCombatant: True + Race: gdi + Enemies: Nod, Dinosaur + PlayerReference@Dinosaur: + Name: Dinosaur + NonCombatant: True + Race: gdi + ColorRamp: 14,119,96 + Enemies: Nod, Civilian + PlayerReference@Nod: + Name: Nod + Playable: True + AllowBots: False + Required: True + LockRace: True + Race: nod + LockColor: True + ColorRamp: 3,255,127 + LockSpawn: True + LockTeam: True + Allies: Nod + Enemies: Dinosaur + +Actors: + Actor0: wood + Location: 23,18 + Owner: Neutral + Actor1: wood + Location: 22,18 + Owner: Neutral + Actor2: wood + Location: 21,18 + Owner: Neutral + Actor3: wood + Location: 20,18 + Owner: Neutral + Actor4: wood + Location: 23,17 + Owner: Neutral + Actor5: v17 + Location: 22,17 + Owner: Civilian + Actor6: v16 + Location: 21,17 + Owner: Civilian + Actor7: wood + Location: 20,17 + Owner: Neutral + Actor8: wood + Location: 17,17 + Owner: Neutral + Actor9: wood + Location: 23,16 + Owner: Neutral + Actor10: v14 + Location: 22,16 + Owner: Civilian + Actor11: v15 + Location: 21,16 + Owner: Civilian + Actor12: wood + Location: 20,16 + Owner: Neutral + Actor13: wood + Location: 17,16 + Owner: Neutral + Actor14: wood + Location: 16,16 + Owner: Neutral + Actor15: wood + Location: 15,16 + Owner: Neutral + Actor16: wood + Location: 14,16 + Owner: Neutral + Actor17: wood + Location: 13,16 + Owner: Neutral + Actor18: wood + Location: 12,16 + Owner: Neutral + Actor19: wood + Location: 11,16 + Owner: Neutral + Actor20: wood + Location: 23,15 + Owner: Neutral + Actor21: wood + Location: 11,15 + Owner: Neutral + Actor22: wood + Location: 23,13 + Owner: Neutral + Actor23: wood + Location: 23,12 + Owner: Neutral + Actor24: wood + Location: 23,11 + Owner: Neutral + Actor25: wood + Location: 23,10 + Owner: Neutral + Actor26: v17 + Location: 22,10 + Owner: Civilian + Actor27: v18 + Location: 21,10 + Owner: Civilian + Actor28: v12 + Location: 20,10 + Owner: Civilian + Actor29: wood + Location: 23,9 + Owner: Neutral + Actor30: v16 + Location: 22,9 + Owner: Civilian + Actor31: v15 + Location: 21,9 + Owner: Civilian + Actor32: v14 + Location: 20,9 + Owner: Civilian + Actor34: tc04 + Location: 51,39 + Owner: Neutral + Actor35: tc02 + Location: 46,40 + Owner: Neutral + Actor36: tc04 + Location: 51,44 + Owner: Neutral + Actor37: tc01 + Location: 46,38 + Owner: Neutral + Actor38: tc04 + Location: 45,42 + Owner: Neutral + Actor39: t01 + Location: 54,46 + Owner: Neutral + Actor40: t01 + Location: 51,49 + Owner: Neutral + Actor41: t01 + Location: 14,47 + Owner: Neutral + Actor42: t02 + Location: 20,49 + Owner: Neutral + Actor43: t01 + Location: 25,53 + Owner: Neutral + Actor44: t03 + Location: 53,47 + Owner: Neutral + Actor45: t05 + Location: 40,49 + Owner: Neutral + Actor46: t06 + Location: 43,48 + Owner: Neutral + Actor47: tc04 + Location: 37,47 + Owner: Neutral + Actor48: tc04 + Location: 29,51 + Owner: Neutral + Actor49: tc02 + Location: 22,52 + Owner: Neutral + Actor50: tc01 + Location: 21,47 + Owner: Neutral + Actor51: tc01 + Location: 47,44 + Owner: Neutral + Actor52: tc01 + Location: 47,49 + Owner: Neutral + Actor53: t07 + Location: 52,42 + Owner: Neutral + Actor54: t07 + Location: 45,46 + Owner: Neutral + Actor55: t07 + Location: 41,47 + Owner: Neutral + Actor56: t06 + Location: 47,46 + Owner: Neutral + Actor57: t01 + Location: 49,43 + Owner: Neutral + Actor58: t01 + Location: 52,29 + Owner: Neutral + Actor59: tc04 + Location: 41,27 + Owner: Neutral + Actor60: t01 + Location: 13,7 + Owner: Neutral + Actor61: t03 + Location: 18,10 + Owner: Neutral + Actor62: t03 + Location: 20,14 + Owner: Neutral + Actor63: tc04 + Location: 12,9 + Owner: Neutral + Actor64: tc01 + Location: 15,14 + Owner: Neutral + Actor65: tc02 + Location: 20,11 + Owner: Neutral + Actor66: t05 + Location: 12,14 + Owner: Neutral + Actor67: tc01 + Location: 16,8 + Owner: Neutral + Actor68: t07 + Location: 18,8 + Owner: Neutral + Actor69: t07 + Location: 17,12 + Owner: Neutral + Actor70: t07 + Location: 22,10 + Owner: Neutral + Actor71: t07 + Location: 29,11 + Owner: Neutral + Actor72: t08 + Location: 33,14 + Owner: Neutral + Actor73: t02 + Location: 27,17 + Owner: Neutral + Actor74: t02 + Location: 47,7 + Owner: Neutral + Actor75: t01 + Location: 44,6 + Owner: Neutral + Actor76: t01 + Location: 40,10 + Owner: Neutral + Actor77: t03 + Location: 37,8 + Owner: Neutral + Actor78: t05 + Location: 46,12 + Owner: Neutral + Actor79: tc01 + Location: 33,20 + Owner: Neutral + Actor80: tc01 + Location: 50,21 + Owner: Neutral + Actor81: tc01 + Location: 28,16 + Owner: Neutral + Actor82: tc01 + Location: 48,14 + Owner: Neutral + Actor83: tc01 + Location: 42,10 + Owner: Neutral + Actor84: tc02 + Location: 33,18 + Owner: Neutral + Actor85: tc02 + Location: 39,13 + Owner: Neutral + Actor86: tc02 + Location: 36,5 + Owner: Neutral + Actor87: tc02 + Location: 50,9 + Owner: Neutral + Actor88: tc02 + Location: 52,16 + Owner: Neutral + Actor89: tc04 + Location: 38,18 + Owner: Neutral + Actor90: tc04 + Location: 31,12 + Owner: Neutral + Actor91: tc04 + Location: 45,9 + Owner: Neutral + Actor92: tc04 + Location: 43,16 + Owner: Neutral + Actor93: v01 + Location: 16,10 + Owner: Civilian + Actor94: v02 + Location: 21,12 + Owner: Civilian + Actor95: v03 + Location: 13,8 + Owner: Civilian + Actor96: v04 + Location: 19,10 + Owner: Civilian + Actor97: v05 + Location: 12,14 + Owner: Civilian + Actor98: v06 + Location: 21,15 + Owner: Civilian + Actor117: v06 + Owner: Neutral # TREX can't attack it + Location: 21,8 + Actor100: v07 + Location: 12,12 + Owner: Civilian + Actor101: v07 + Location: 17,14 + Owner: Civilian + Vil04: c4 + Location: 16,14 + Owner: Civilian + SubCell: 2 + Vil03: c3 + Location: 15,11 + Owner: Civilian + SubCell: 1 + Vil01: c2 + Location: 14,12 + Owner: Civilian + SubCell: 4 + Vil02: c1 + Location: 18,13 + Owner: Civilian + SubCell: 2 + WP4: waypoint + Location: 13,13 + Owner: Neutral + WP3: waypoint + Location: 17,12 + Owner: Neutral + WP2: waypoint + Location: 22,14 + Owner: Neutral + WP1: waypoint + Location: 42,29 + Owner: Neutral + WP0: waypoint + Location: 52,29 + Owner: Neutral + BeachReinforceA: waypoint + Location: 17,52 + Owner: Neutral + BeachReinforceB: waypoint + Location: 15,52 + Owner: Neutral + SeaEntryB: waypoint + Location: 15,56 + Owner: Neutral + SeaEntryA: waypoint + Location: 17,56 + Owner: Neutral + DinoTrex: trex + Location: 52,12 + Owner: Dinosaur + DinoSteg: steg + Location: 49,22 + Owner: Dinosaur + DinoTric: tric + Location: 53,29 + Owner: Dinosaur + CameraStart: waypoint + Location: 16,50 + Owner: Neutral + +Smudges: + +Rules: + Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + EnemyWatcher: + World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + LuaScript: + Scripts: scj01ea.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 + ^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 + ^CivInfantry: + -ActorLostNotification: + ^CivBuilding: + AnnounceOnSeen: + OLDLST: + Inherits: LST + -WithRoof: + -Selectable: + RejectsOrders: + TREX: + Health: + HP: 750 + Mobile: + Speed: 34 + AutoTarget: + ScanRadius: 5 + TRIC: + Health: + HP: 700 + Mobile: + Speed: 18 + AutoTarget: + ScanRadius: 5 + STEG: + Health: + HP: 600 + Mobile: + Speed: 32 + ^DINO: + Tooltip: + ShowOwnerRow: false + MustBeDestroyed: + +Sequences: + oldlst: + idle: lst + Start: 0 + Facings: 1 + ZOffset: -1024 + +VoxelSequences: + +Weapons: + Teeth: + Range: 1c900 + Warhead@1Dam: SpreadDamage + Versus: + Wood: 35 + +Voices: + +Notifications: + +Translations: diff --git a/mods/cnc/maps/funpark01/scj01ea.lua b/mods/cnc/maps/funpark01/scj01ea.lua new file mode 100644 index 0000000000..550cd76764 --- /dev/null +++ b/mods/cnc/maps/funpark01/scj01ea.lua @@ -0,0 +1,107 @@ +RifleReinforcments = { "e1", "e1", "e1", "bike" } +BazookaReinforcments = { "e3", "e3", "e3", "bike" } +BikeReinforcments = { "bike" } + + +ReinforceWithLandingCraft = function(units, transportStart, transportUnload, rallypoint) + local transport = Actor.Create("oldlst", true, { Owner = nod, Facing = 0, Location = transportStart }) + local subcell = 0 + Utils.Do(units, function(a) + transport.LoadPassenger(Actor.Create(a, false, { Owner = transport.Owner, Facing = transport.Facing, Location = transportUnload, SubCell = subcell })) + subcell = subcell + 1 + end) + + transport.ScriptedMove(transportUnload) + + transport.CallFunc(function() + Utils.Do(units, function() + local a = transport.UnloadPassenger() + a.IsInWorld = true + a.MoveIntoWorld(transport.Location - CVec.New(0, 1)) + + if rallypoint ~= nil then + a.Move(rallypoint) + end + end) + end) + + transport.Wait(5) + transport.ScriptedMove(transportStart) + transport.Destroy() + + Media.PlaySpeechNotification(player, "Reinforce") +end + +initialSong = "j1" +PlayMusic = function() + Media.PlayMusic(initialSong, PlayMusic) + initialSong = nil +end + +WorldLoaded = function() + nod = Player.GetPlayer("Nod") + dinosaur = Player.GetPlayer("Dinosaur") + civilian = Player.GetPlayer("Civilian") + + InvestigateObj = nod.AddPrimaryObjective("Investigate the nearby village for reports of \nstrange activity") + + 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) + + ReachVillageObj = nod.AddPrimaryObjective("Reach the village.") + + Trigger.OnPlayerDiscovered(civilian, function(_, discoverer) + if discoverer == nod and not nod.IsObjectiveCompleted(ReachVillageObj) then + if not dinosaur.HasNoRequiredUnits() then + KillDinos = nod.AddPrimaryObjective("Kill all creatures in the area.") + end + + nod.MarkCompletedObjective(ReachVillageObj) + end + end) + + DinoTric.Patrol({WP0.Location, WP1.Location}, true, 3) + DinoTrex.Patrol({WP2.Location, WP3.Location}, false) + Trigger.OnIdle(DinoTrex, DinoTrex.Hunt) + + ReinforceWithLandingCraft(RifleReinforcments, SeaEntryA.Location, BeachReinforceA.Location, BeachReinforceA.Location) + Trigger.AfterDelay(DateTime.Seconds(1), function() InitialUnitsArrived = true end) + + Trigger.AfterDelay(DateTime.Seconds(15), function() ReinforceWithLandingCraft(BazookaReinforcments, SeaEntryB.Location, BeachReinforceB.Location, BeachReinforceB.Location) end) + if Map.Difficulty == "Easy" then + Trigger.AfterDelay(DateTime.Seconds(25), function() ReinforceWithLandingCraft(BikeReinforcments, SeaEntryA.Location, BeachReinforceA.Location, BeachReinforceA.Location) end) + Trigger.AfterDelay(DateTime.Seconds(30), function() ReinforceWithLandingCraft(BikeReinforcments, SeaEntryB.Location, BeachReinforceB.Location, BeachReinforceB.Location) end) + end + + Camera.Position = CameraStart.CenterPosition + PlayMusic() +end + +Tick = function() + if InitialUnitsArrived then + if nod.HasNoRequiredUnits() then + nod.MarkFailedObjective(InvestigateObj) + end + if dinosaur.HasNoRequiredUnits() then + if KillDinos then nod.MarkCompletedObjective(KillDinos) end + nod.MarkCompletedObjective(InvestigateObj) + end + end +end diff --git a/mods/cnc/missions.yaml b/mods/cnc/missions.yaml index 7a2d167356..d9fe71c965 100644 --- a/mods/cnc/missions.yaml +++ b/mods/cnc/missions.yaml @@ -17,3 +17,6 @@ Nod Campaign: ./mods/cnc/maps/nod04a ./mods/cnc/maps/nod04b ./mods/cnc/maps/nod05 + +Funpark Campaign: + ./mods/cnc/maps/funpark01