diff --git a/OpenRA.sln b/OpenRA.sln index c224607671..4422943c5e 100644 --- a/OpenRA.sln +++ b/OpenRA.sln @@ -74,8 +74,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re mods\ra\maps\soviet-05\soviet05-reinforcements_teams.lua = mods\ra\maps\soviet-05\soviet05-reinforcements_teams.lua mods\ra\maps\soviet-05\soviet05.lua = mods\ra\maps\soviet-05\soviet05.lua mods\ra\maps\soviet-06a\soviet06a-AI.lua = mods\ra\maps\soviet-06a\soviet06a-AI.lua + mods\ra\maps\soviet-06a\soviet06a-reinforcements_teams.lua = mods\ra\maps\soviet-06a\soviet06a-reinforcements_teams.lua mods\ra\maps\soviet-06a\soviet06a.lua = mods\ra\maps\soviet-06a\soviet06a.lua mods\ra\maps\soviet-06b\soviet06b-AI.lua = mods\ra\maps\soviet-06b\soviet06b-AI.lua + mods\ra\maps\soviet-06b\soviet06b-reinforcements_teams.lua = mods\ra\maps\soviet-06b\soviet06b-reinforcements_teams.lua mods\ra\maps\soviet-06b\soviet06b.lua = mods\ra\maps\soviet-06b\soviet06b.lua mods\ra\maps\soviet-07\soviet07.lua = mods\ra\maps\soviet-07\soviet07.lua mods\ra\maps\survival01\survival01.lua = mods\ra\maps\survival01\survival01.lua diff --git a/mods/ra/maps/soviet-06a/map.yaml b/mods/ra/maps/soviet-06a/map.yaml index f8e35663ad..67acb998f5 100644 --- a/mods/ra/maps/soviet-06a/map.yaml +++ b/mods/ra/maps/soviet-06a/map.yaml @@ -32,6 +32,7 @@ Options: FragileAlliances: False StartingCash: 11500 ConfigurableStartingUnits: False + Difficulties: Easy, Normal, Hard ShortGame: False Players: @@ -544,9 +545,6 @@ Actors: Location: 28,23 Owner: Greece Facing: 128 - Actor161: dome - Location: 23,5 - Owner: Greece Actor163: gap Location: 24,21 Owner: Greece @@ -736,6 +734,10 @@ Actors: waypoint82: waypoint Location: 87,29 Owner: Neutral + AGun: agun + Owner: Greece + Location: 25,4 + TurretFacing: 92 APCWaypoint1: waypoint Location: 52,50 Owner: Neutral @@ -789,6 +791,21 @@ Actors: CYardLocation: waypoint Owner: Neutral Location: 31,4 + Dome: dome + Location: 23,5 + Owner: Greece + EnemyEntry1: waypoint + Owner: Neutral + Location: 10,1 + EnemyEntry2: waypoint + Owner: Neutral + Location: 97,37 + EnemyRally1: waypoint + Owner: Neutral + Location: 9,23 + EnemyRally2: waypoint + Owner: Neutral + Location: 88,37 Harvester: harv Location: 12,10 Owner: Greece @@ -843,7 +860,7 @@ Rules: -SpawnMPUnits: -MPStartLocations: LuaScript: - Scripts: soviet06a.lua, soviet06a-AI.lua + Scripts: soviet06a.lua, soviet06a-AI.lua, soviet06a-reinforcements_teams.lua ObjectivesPanel: PanelName: MISSION_OBJECTIVES ^Building: diff --git a/mods/ra/maps/soviet-06a/soviet06a-reinforcements_teams.lua b/mods/ra/maps/soviet-06a/soviet06a-reinforcements_teams.lua new file mode 100644 index 0000000000..0c5cb91ca7 --- /dev/null +++ b/mods/ra/maps/soviet-06a/soviet06a-reinforcements_teams.lua @@ -0,0 +1,59 @@ +EnemyReinforcements = +{ + Easy = + { + { "e1", "e1", "e3" }, + { "e1", "e3", "jeep" }, + { "e1", "jeep", "1tnk" } + }, + + Normal = + { + { "e1", "e1", "e3", "e3" }, + { "e1", "e3", "jeep", "jeep" }, + { "e1", "jeep", "1tnk", "2tnk" } + }, + + Hard = + { + { "e1", "e1", "e3", "e3", "e1" }, + { "e1", "e3", "jeep", "jeep", "1tnk" }, + { "e1", "jeep", "1tnk", "2tnk", "arty" } + } +} + +EnemyAttackDelay = +{ + Easy = DateTime.Minutes(5), + Normal = DateTime.Minutes(2) + DateTime.Seconds(40), + Hard = DateTime.Minutes(1) + DateTime.Seconds(30) +} + +EnemyPaths = +{ + { EnemyEntry1.Location, EnemyRally1.Location }, + { EnemyEntry2.Location, EnemyRally2.Location } +} + +wave = 0 +SendEnemies = function() + Trigger.AfterDelay(EnemyAttackDelay[Map.Difficulty], function() + + wave = wave + 1 + if wave > 3 then + wave = 1 + end + + if wave == 1 then + local units = Reinforcements.ReinforceWithTransport(enemy, "tran", EnemyReinforcements[Map.Difficulty][wave], EnemyPaths[1], { EnemyPaths[1][1] })[2] + Utils.Do(units, IdleHunt) + else + local units = Reinforcements.ReinforceWithTransport(enemy, "lst", EnemyReinforcements[Map.Difficulty][wave], EnemyPaths[2], { EnemyPaths[2][1] })[2] + Utils.Do(units, IdleHunt) + end + + if not Dome.IsDead then + SendEnemies() + end + end) +end diff --git a/mods/ra/maps/soviet-06a/soviet06a.lua b/mods/ra/maps/soviet-06a/soviet06a.lua index 9ad0beaa17..8fbfb39758 100644 --- a/mods/ra/maps/soviet-06a/soviet06a.lua +++ b/mods/ra/maps/soviet-06a/soviet06a.lua @@ -76,11 +76,17 @@ Trigger.OnKilled(Apwr2, function(building) BaseApwr2.exists = false end) +Trigger.OnKilled(Dome, function() + player.MarkCompletedObjective(sovietObjective2) + Media.PlaySpeechNotification(player, "ObjectiveMet") +end) + -- Activate the AI once the player deployed the Mcv Trigger.OnRemovedFromWorld(Mcv, function() if not mcvDeployed then mcvDeployed = true BuildBase() + SendEnemies() Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor) Trigger.AfterDelay(DateTime.Minutes(2), function() @@ -128,6 +134,7 @@ WorldLoaded = function() end) alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") sovietObjective = player.AddPrimaryObjective("Escort the Convoy.") + sovietObjective2 = player.AddSecondaryObjective("Destroy the Allied radar dome to stop enemy\nreinforcements.") end Tick = function() diff --git a/mods/ra/maps/soviet-06b/map.yaml b/mods/ra/maps/soviet-06b/map.yaml index 60f2ed30dc..210148acc6 100644 --- a/mods/ra/maps/soviet-06b/map.yaml +++ b/mods/ra/maps/soviet-06b/map.yaml @@ -32,6 +32,7 @@ Options: FragileAlliances: False StartingCash: 11500 ConfigurableStartingUnits: False + Difficulties: Easy, Normal, Hard ShortGame: False Players: @@ -325,9 +326,6 @@ Actors: Location: 61,48 Owner: Greece Facing: 160 - Actor95: dome - Location: 67,49 - Owner: Greece Actor103: 2tnk Location: 76,30 Owner: Greece @@ -429,6 +427,9 @@ Actors: Actor147: silo Owner: Greece Location: 73,49 + Actor148: sbag + Owner: Greece + Location: 65,51 waypoint69: waypoint Location: 21,28 Owner: Neutral @@ -450,6 +451,10 @@ Actors: waypoint94: waypoint Location: 49,16 Owner: Neutral + AGun: agun + Owner: Greece + Location: 69,48 + TurretFacing: 92 APCWaypoint1: waypoint Location: 39,62 Owner: Neutral @@ -480,6 +485,21 @@ Actors: CYardLocation: waypoint Owner: Neutral Location: 71,49 + Dome: dome + Location: 67,49 + Owner: Greece + EnemyEntry1: waypoint + Owner: Neutral + Location: 53,10 + EnemyEntry2: waypoint + Owner: Neutral + Location: 18,62 + EnemyRally1: waypoint + Owner: Neutral + Location: 53,31 + EnemyRally2: waypoint + Owner: Neutral + Location: 25,62 Harvester: harv Location: 77,39 Owner: Greece @@ -532,7 +552,7 @@ Rules: -SpawnMPUnits: -MPStartLocations: LuaScript: - Scripts: soviet06b.lua, soviet06b-AI.lua + Scripts: soviet06b.lua, soviet06b-AI.lua, soviet06b-reinforcements_teams.lua ObjectivesPanel: PanelName: MISSION_OBJECTIVES ^Building: diff --git a/mods/ra/maps/soviet-06b/soviet06b-reinforcements_teams.lua b/mods/ra/maps/soviet-06b/soviet06b-reinforcements_teams.lua new file mode 100644 index 0000000000..0c5cb91ca7 --- /dev/null +++ b/mods/ra/maps/soviet-06b/soviet06b-reinforcements_teams.lua @@ -0,0 +1,59 @@ +EnemyReinforcements = +{ + Easy = + { + { "e1", "e1", "e3" }, + { "e1", "e3", "jeep" }, + { "e1", "jeep", "1tnk" } + }, + + Normal = + { + { "e1", "e1", "e3", "e3" }, + { "e1", "e3", "jeep", "jeep" }, + { "e1", "jeep", "1tnk", "2tnk" } + }, + + Hard = + { + { "e1", "e1", "e3", "e3", "e1" }, + { "e1", "e3", "jeep", "jeep", "1tnk" }, + { "e1", "jeep", "1tnk", "2tnk", "arty" } + } +} + +EnemyAttackDelay = +{ + Easy = DateTime.Minutes(5), + Normal = DateTime.Minutes(2) + DateTime.Seconds(40), + Hard = DateTime.Minutes(1) + DateTime.Seconds(30) +} + +EnemyPaths = +{ + { EnemyEntry1.Location, EnemyRally1.Location }, + { EnemyEntry2.Location, EnemyRally2.Location } +} + +wave = 0 +SendEnemies = function() + Trigger.AfterDelay(EnemyAttackDelay[Map.Difficulty], function() + + wave = wave + 1 + if wave > 3 then + wave = 1 + end + + if wave == 1 then + local units = Reinforcements.ReinforceWithTransport(enemy, "tran", EnemyReinforcements[Map.Difficulty][wave], EnemyPaths[1], { EnemyPaths[1][1] })[2] + Utils.Do(units, IdleHunt) + else + local units = Reinforcements.ReinforceWithTransport(enemy, "lst", EnemyReinforcements[Map.Difficulty][wave], EnemyPaths[2], { EnemyPaths[2][1] })[2] + Utils.Do(units, IdleHunt) + end + + if not Dome.IsDead then + SendEnemies() + end + end) +end diff --git a/mods/ra/maps/soviet-06b/soviet06b.lua b/mods/ra/maps/soviet-06b/soviet06b.lua index 660ac7d972..7cd9e7a39a 100644 --- a/mods/ra/maps/soviet-06b/soviet06b.lua +++ b/mods/ra/maps/soviet-06b/soviet06b.lua @@ -47,10 +47,16 @@ Trigger.OnKilled(Apwr2, function(building) BaseApwr2.exists = false end) +Trigger.OnKilled(Dome, function() + player.MarkCompletedObjective(sovietObjective2) + Media.PlaySpeechNotification(player, "ObjectiveMet") +end) + Trigger.OnRemovedFromWorld(Mcv, function() if not mcvDeployed then mcvDeployed = true BuildBase() + SendEnemies() Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor) end @@ -93,6 +99,7 @@ WorldLoaded = function() end) alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") sovietObjective = player.AddPrimaryObjective("Escort the Convoy.") + sovietObjective2 = player.AddSecondaryObjective("Destroy the Allied radar dome to stop enemy\nreinforcements.") end Tick = function()