Add allies04
This commit is contained in:
270
mods/ra/maps/allies-04/allies04-AI.lua
Normal file
270
mods/ra/maps/allies-04/allies04-AI.lua
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
|
||||||
|
IdlingUnits = { }
|
||||||
|
Yaks = { }
|
||||||
|
|
||||||
|
AttackGroupSizes =
|
||||||
|
{
|
||||||
|
easy = 6,
|
||||||
|
normal = 8,
|
||||||
|
hard = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
AttackDelays =
|
||||||
|
{
|
||||||
|
easy = { DateTime.Seconds(4), DateTime.Seconds(9) },
|
||||||
|
normal = { DateTime.Seconds(2), DateTime.Seconds(7) },
|
||||||
|
hard = { DateTime.Seconds(1), DateTime.Seconds(5) }
|
||||||
|
}
|
||||||
|
|
||||||
|
AttackRallyPoints =
|
||||||
|
{
|
||||||
|
{ SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally13.Location, PlayerBase.Location },
|
||||||
|
{ SovietRally7.Location, SovietRally10.Location, PlayerBase.Location },
|
||||||
|
{ SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally12.Location, PlayerBase.Location },
|
||||||
|
{ SovietRally7.Location, ParadropPoint1.Location, PlayerBase.Location },
|
||||||
|
{ SovietRally8.Location, SovietRally9.Location, ParadropPoint1.Location, PlayerBase.Location, }
|
||||||
|
}
|
||||||
|
|
||||||
|
SovietInfantryTypes = { "e1", "e1", "e2" }
|
||||||
|
SovietVehicleTypes = { "3tnk", "3tnk", "3tnk", "ftrk", "ftrk", "apc" }
|
||||||
|
SovietAircraftType = { "yak" }
|
||||||
|
|
||||||
|
AttackOnGoing = false
|
||||||
|
HoldProduction = false
|
||||||
|
HarvesterKilled = false
|
||||||
|
|
||||||
|
Powr1 = { name = "powr", pos = CPos.New(47, 21), prize = 500, exists = true }
|
||||||
|
Barr = { name = "barr", pos = CPos.New(53, 26), prize = 400, exists = true }
|
||||||
|
Proc = { name = "proc", pos = CPos.New(54, 21), prize = 1400, exists = true }
|
||||||
|
Weap = { name = "weap", pos = CPos.New(48, 28), prize = 2000, exists = true }
|
||||||
|
Powr2 = { name = "powr", pos = CPos.New(51, 21), prize = 500, exists = true }
|
||||||
|
Powr3 = { name = "powr", pos = CPos.New(46, 25), prize = 500, exists = true }
|
||||||
|
Powr4 = { name = "powr", pos = CPos.New(49, 21), prize = 500, exists = true }
|
||||||
|
Ftur1 = { name = "powr", pos = CPos.New(56, 27), prize = 600, exists = true }
|
||||||
|
Ftur2 = { name = "powr", pos = CPos.New(51, 32), prize = 600, exists = true }
|
||||||
|
Ftur3 = { name = "powr", pos = CPos.New(54, 30), prize = 600, exists = true }
|
||||||
|
Afld1 = { name = "afld", pos = CPos.New(43, 23), prize = 500, exists = true }
|
||||||
|
Afld2 = { name = "afld", pos = CPos.New(43, 21), prize = 500, exists = true }
|
||||||
|
BaseBuildings = { Powr1, Barr, Proc, Weap, Powr2, Powr3, Powr4, Ftur1, Ftur2, Ftur3, Afld1, Afld2 }
|
||||||
|
InitialBase = { Barracks, Refinery, PowerPlant1, PowerPlant2, PowerPlant3, PowerPlant4, Warfactory, Flametur1, Flametur2, Flametur3, Airfield1, Airfield2 }
|
||||||
|
|
||||||
|
BuildBase = function()
|
||||||
|
if Conyard.IsDead or Conyard.Owner ~= ussr then
|
||||||
|
return
|
||||||
|
elseif Harvester.IsDead and ussr.Resources <= 299 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
for i,v in ipairs(BaseBuildings) do
|
||||||
|
if not v.exists then
|
||||||
|
BuildBuilding(v)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Trigger.AfterDelay(DateTime.Seconds(10), BuildBase)
|
||||||
|
end
|
||||||
|
|
||||||
|
BuildBuilding = function(building)
|
||||||
|
Trigger.AfterDelay(Actor.BuildTime(building.name), function()
|
||||||
|
local actor = Actor.Create(building.name, true, { Owner = ussr, Location = building.pos })
|
||||||
|
ussr.Cash = ussr.Cash - building.prize
|
||||||
|
|
||||||
|
building.exists = true
|
||||||
|
Trigger.OnKilled(actor, function() building.exists = false end)
|
||||||
|
Trigger.OnDamaged(actor, function(building)
|
||||||
|
if building.Owner == ussr and building.Health < building.MaxHealth * 3/4 then
|
||||||
|
building.StartBuildingRepairs()
|
||||||
|
DefendActor(actor)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.AfterDelay(DateTime.Seconds(10), BuildBase)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end
|
||||||
|
|
||||||
|
SetupAttackGroup = function()
|
||||||
|
local units = { }
|
||||||
|
|
||||||
|
for i = 0, AttackGroupSize, 1 do
|
||||||
|
if #IdlingUnits == 0 then
|
||||||
|
return units
|
||||||
|
end
|
||||||
|
|
||||||
|
local number = Utils.RandomInteger(1, #IdlingUnits)
|
||||||
|
|
||||||
|
if IdlingUnits[number] and not IdlingUnits[number].IsDead then
|
||||||
|
units[i] = IdlingUnits[number]
|
||||||
|
table.remove(IdlingUnits, number)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return units
|
||||||
|
end
|
||||||
|
|
||||||
|
SendAttack = function()
|
||||||
|
if Attacking then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
Attacking = true
|
||||||
|
HoldProduction = true
|
||||||
|
|
||||||
|
local units = SetupAttackGroup()
|
||||||
|
local path = Utils.Random(AttackRallyPoints)
|
||||||
|
Utils.Do(units, function(unit)
|
||||||
|
unit.Patrol(path)
|
||||||
|
IdleHunt(unit)
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.OnAllRemovedFromWorld(units, function()
|
||||||
|
Attacking = false
|
||||||
|
HoldProduction = false
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
ProtectHarvester = function(unit)
|
||||||
|
DefendActor(unit)
|
||||||
|
Trigger.OnKilled(unit, function() HarvesterKilled = true end)
|
||||||
|
end
|
||||||
|
|
||||||
|
DefendActor = function(unit)
|
||||||
|
Trigger.OnDamaged(unit, function(self, attacker)
|
||||||
|
if AttackOnGoing then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
AttackOnGoing = true
|
||||||
|
|
||||||
|
local Guards = SetupAttackGroup()
|
||||||
|
|
||||||
|
if #Guards <= 0 then
|
||||||
|
AttackOnGoing = false
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Utils.Do(Guards, function(unit)
|
||||||
|
if not self.IsDead then
|
||||||
|
unit.AttackMove(self.Location)
|
||||||
|
end
|
||||||
|
IdleHunt(unit)
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.OnAllRemovedFromWorld(Guards, function() AttackOnGoing = false end)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
InitAIUnits = function()
|
||||||
|
IdlingUnits = ussr.GetGroundAttackers()
|
||||||
|
|
||||||
|
DefendActor(Conyard)
|
||||||
|
for i,v in ipairs(InitialBase) do
|
||||||
|
DefendActor(v)
|
||||||
|
Trigger.OnDamaged(v, function(building)
|
||||||
|
if building.Owner == ussr and building.Health < building.MaxHealth * 3/4 then
|
||||||
|
building.StartBuildingRepairs()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.OnKilled(v, function()
|
||||||
|
BaseBuildings[i].exists = false
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ProduceInfantry = function()
|
||||||
|
if HoldProduction then
|
||||||
|
Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- See AttackDelay in WorldLoaded
|
||||||
|
local delay = Utils.RandomInteger(AttackDelay[1], AttackDelay[2])
|
||||||
|
local toBuild = { Utils.Random(SovietInfantryTypes) }
|
||||||
|
ussr.Build(toBuild, function(unit)
|
||||||
|
IdlingUnits[#IdlingUnits + 1] = unit[1]
|
||||||
|
Trigger.AfterDelay(delay, ProduceInfantry)
|
||||||
|
|
||||||
|
-- See AttackGroupSize in WorldLoaded
|
||||||
|
if #IdlingUnits >= (AttackGroupSize * 2.5) then
|
||||||
|
SendAttack()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
ProduceVehicles = function()
|
||||||
|
if HoldProduction then
|
||||||
|
Trigger.AfterDelay(DateTime.Minutes(1), ProduceVehicles)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- See AttackDelay in WorldLoaded
|
||||||
|
local delay = Utils.RandomInteger(AttackDelay[1], AttackDelay[2])
|
||||||
|
if HarvesterKilled then
|
||||||
|
ussr.Build({ "harv" }, function(harv)
|
||||||
|
ProtectHarvester(harv[1])
|
||||||
|
HarvesterKilled = false
|
||||||
|
Trigger.AfterDelay(delay, ProduceVehicles)
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
local toBuild = { Utils.Random(SovietVehicleTypes) }
|
||||||
|
ussr.Build(toBuild, function(unit)
|
||||||
|
IdlingUnits[#IdlingUnits + 1] = unit[1]
|
||||||
|
Trigger.AfterDelay(delay, ProduceVehicles)
|
||||||
|
|
||||||
|
-- See AttackGroupSize in WorldLoaded
|
||||||
|
if #IdlingUnits >= (AttackGroupSize * 2.5) then
|
||||||
|
SendAttack()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ProduceAircraft = function()
|
||||||
|
ussr.Build(SovietAircraftType, function(units)
|
||||||
|
local yak = units[1]
|
||||||
|
Yaks[#Yaks + 1] = yak
|
||||||
|
|
||||||
|
Trigger.OnKilled(yak, ProduceAircraft)
|
||||||
|
if #Yaks == 1 then
|
||||||
|
Trigger.AfterDelay(DateTime.Minutes(1), ProduceAircraft)
|
||||||
|
end
|
||||||
|
|
||||||
|
TargetAndAttack(yak)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
TargetAndAttack = function(yak, target)
|
||||||
|
if not target or target.IsDead or (not target.IsInWorld) then
|
||||||
|
local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") end)
|
||||||
|
if #enemies > 0 then
|
||||||
|
target = Utils.Random(enemies)
|
||||||
|
else
|
||||||
|
yak.Wait(DateTime.Seconds(5))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if target and yak.AmmoCount() > 0 then
|
||||||
|
yak.Attack(target)
|
||||||
|
else
|
||||||
|
yak.ReturnToBase()
|
||||||
|
end
|
||||||
|
|
||||||
|
yak.CallFunc(function()
|
||||||
|
TargetAndAttack(yak, target)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
ActivateAI = function()
|
||||||
|
InitAIUnits()
|
||||||
|
ProtectHarvester(Harvester)
|
||||||
|
|
||||||
|
local difficulty = Map.LobbyOption("difficulty")
|
||||||
|
AttackDelay = AttackDelays[difficulty]
|
||||||
|
AttackGroupSize = AttackGroupSizes[difficulty]
|
||||||
|
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||||
|
ProduceInfantry()
|
||||||
|
ProduceVehicles()
|
||||||
|
ProduceAircraft()
|
||||||
|
end)
|
||||||
|
end
|
||||||
170
mods/ra/maps/allies-04/allies04.lua
Normal file
170
mods/ra/maps/allies-04/allies04.lua
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
|
||||||
|
ConvoyUnits =
|
||||||
|
{
|
||||||
|
{ "ftrk", "ftrk", "truk", "truk", "apc", "ftrk" },
|
||||||
|
{ "ftrk", "3tnk", "truk", "truk", "apc" },
|
||||||
|
{ "3tnk", "3tnk", "truk", "truk", "ftrk" }
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvoyRallyPoints =
|
||||||
|
{
|
||||||
|
{ SovietEntry1.Location, SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally6.Location },
|
||||||
|
{ SovietEntry2.Location, SovietRally10.Location, SovietRally11.Location }
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvoyDelays =
|
||||||
|
{
|
||||||
|
easy = { DateTime.Minutes(4), DateTime.Minutes(5) + DateTime.Seconds(20) },
|
||||||
|
normal = { DateTime.Minutes(2) + DateTime.Seconds(30), DateTime.Minutes(4) },
|
||||||
|
hard = { DateTime.Minutes(1) + DateTime.Seconds(30), DateTime.Minutes(2) + DateTime.Seconds(30) }
|
||||||
|
}
|
||||||
|
|
||||||
|
Convoys =
|
||||||
|
{
|
||||||
|
easy = 2,
|
||||||
|
normal = 3,
|
||||||
|
hard = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
ParadropDelays =
|
||||||
|
{
|
||||||
|
easy = { DateTime.Seconds(40), DateTime.Seconds(90) },
|
||||||
|
normal = { DateTime.Seconds(30), DateTime.Seconds(70) },
|
||||||
|
hard = { DateTime.Seconds(20), DateTime.Seconds(50) }
|
||||||
|
}
|
||||||
|
|
||||||
|
ParadropWaves =
|
||||||
|
{
|
||||||
|
easy = 4,
|
||||||
|
normal = 6,
|
||||||
|
hard = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
ParadropLZs = { ParadropPoint1.CenterPosition, ParadropPoint2.CenterPosition, ParadropPoint3.CenterPosition }
|
||||||
|
|
||||||
|
Paradropped = 0
|
||||||
|
Paradrop = function()
|
||||||
|
Trigger.AfterDelay(Utils.RandomInteger(ParadropDelay[1], ParadropDelay[2]), function()
|
||||||
|
local units = PowerProxy.SendParatroopers(Utils.Random(ParadropLZs))
|
||||||
|
Utils.Do(units, function(unit)
|
||||||
|
Trigger.OnAddedToWorld(unit, IdleHunt)
|
||||||
|
end)
|
||||||
|
|
||||||
|
Paradropped = Paradropped + 1
|
||||||
|
if Paradropped <= ParadropWaves[Map.LobbyOption("difficulty")] then
|
||||||
|
Paradrop()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
ConvoysSent = 0
|
||||||
|
SendConvoys = function()
|
||||||
|
Trigger.AfterDelay(Utils.RandomInteger(ConvoyDelay[1], ConvoyDelay[2]), function()
|
||||||
|
local path = Utils.Random(ConvoyRallyPoints)
|
||||||
|
local units = Reinforcements.Reinforce(ussr, Utils.Random(ConvoyUnits), { path[1] })
|
||||||
|
local lastWaypoint = path[#path]
|
||||||
|
|
||||||
|
Utils.Do(units, function(unit)
|
||||||
|
Trigger.OnAddedToWorld(unit, function()
|
||||||
|
if unit.Type == "truk" then
|
||||||
|
Utils.Do(path, function(waypoint)
|
||||||
|
unit.Move(waypoint)
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.OnIdle(unit, function()
|
||||||
|
unit.Move(lastWaypoint)
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
unit.Patrol(path)
|
||||||
|
Trigger.OnIdle(unit, function()
|
||||||
|
unit.AttackMove(lastWaypoint)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
local id = Trigger.OnEnteredFootprint({ lastWaypoint }, function(a, id)
|
||||||
|
if a.Owner == ussr and Utils.Any(units, function(unit) return unit == a end) then
|
||||||
|
|
||||||
|
-- We are at our destination and thus don't care about other queued actions anymore
|
||||||
|
a.Stop()
|
||||||
|
a.Destroy()
|
||||||
|
|
||||||
|
if a.Type == "truk" then
|
||||||
|
player.MarkFailedObjective(DestroyConvoys)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.OnAllRemovedFromWorld(units, function()
|
||||||
|
Trigger.RemoveFootprintTrigger(id)
|
||||||
|
|
||||||
|
ConvoysSent = ConvoysSent + 1
|
||||||
|
if ConvoysSent <= Convoys[Map.LobbyOption("difficulty")] then
|
||||||
|
SendConvoys()
|
||||||
|
else
|
||||||
|
player.MarkCompletedObjective(DestroyConvoys)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
Media.PlaySpeechNotification(player, "ConvoyApproaching")
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
Tick = function()
|
||||||
|
if player.HasNoRequiredUnits() then
|
||||||
|
player.MarkFailedObjective(KillUSSR)
|
||||||
|
end
|
||||||
|
|
||||||
|
if ussr.HasNoRequiredUnits() then
|
||||||
|
player.MarkCompletedObjective(KillUSSR)
|
||||||
|
|
||||||
|
-- We don't care about future convoys anymore
|
||||||
|
player.MarkCompletedObjective(DestroyConvoys)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
InitObjectives = function()
|
||||||
|
Trigger.OnObjectiveAdded(player, function(p, id)
|
||||||
|
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
|
||||||
|
end)
|
||||||
|
|
||||||
|
KillUSSR = player.AddPrimaryObjective("Destroy all Soviet units and buildings in this region.")
|
||||||
|
DestroyConvoys = player.AddSecondaryObjective("Eliminate all passing Soviet convoys.")
|
||||||
|
|
||||||
|
Trigger.OnObjectiveCompleted(player, function(p, id)
|
||||||
|
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
|
||||||
|
end)
|
||||||
|
Trigger.OnObjectiveFailed(player, function(p, id)
|
||||||
|
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
|
||||||
|
end)
|
||||||
|
|
||||||
|
Trigger.OnPlayerLost(player, function()
|
||||||
|
Trigger.AfterDelay(DateTime.Seconds(1), function()
|
||||||
|
Media.PlaySpeechNotification(player, "MissionFailed")
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
Trigger.OnPlayerWon(player, function()
|
||||||
|
Trigger.AfterDelay(DateTime.Seconds(1), function()
|
||||||
|
Media.PlaySpeechNotification(player, "MissionAccomplished")
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
WorldLoaded = function()
|
||||||
|
player = Player.GetPlayer("Greece")
|
||||||
|
ussr = Player.GetPlayer("USSR")
|
||||||
|
|
||||||
|
Camera.Position = AlliedConyard.CenterPosition
|
||||||
|
|
||||||
|
InitObjectives()
|
||||||
|
|
||||||
|
local difficulty = Map.LobbyOption("difficulty")
|
||||||
|
ConvoyDelay = ConvoyDelays[difficulty]
|
||||||
|
ParadropDelay = ParadropDelays[difficulty]
|
||||||
|
PowerProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr })
|
||||||
|
Paradrop()
|
||||||
|
SendConvoys()
|
||||||
|
|
||||||
|
Trigger.AfterDelay(0, ActivateAI)
|
||||||
|
end
|
||||||
BIN
mods/ra/maps/allies-04/map.bin
Normal file
BIN
mods/ra/maps/allies-04/map.bin
Normal file
Binary file not shown.
BIN
mods/ra/maps/allies-04/map.png
Normal file
BIN
mods/ra/maps/allies-04/map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
539
mods/ra/maps/allies-04/map.yaml
Normal file
539
mods/ra/maps/allies-04/map.yaml
Normal file
@@ -0,0 +1,539 @@
|
|||||||
|
MapFormat: 11
|
||||||
|
|
||||||
|
RequiresMod: ra
|
||||||
|
|
||||||
|
Title: 04: Ten to one
|
||||||
|
|
||||||
|
Author: Westwood Studios
|
||||||
|
|
||||||
|
Tileset: SNOW
|
||||||
|
|
||||||
|
MapSize: 128,128
|
||||||
|
|
||||||
|
Bounds: 37,21,56,65
|
||||||
|
|
||||||
|
Visibility: MissionSelector
|
||||||
|
|
||||||
|
Categories: Campaign
|
||||||
|
|
||||||
|
LockPreview: True
|
||||||
|
|
||||||
|
Players:
|
||||||
|
PlayerReference@Neutral:
|
||||||
|
Name: Neutral
|
||||||
|
OwnsWorld: True
|
||||||
|
NonCombatant: True
|
||||||
|
Faction: allies
|
||||||
|
PlayerReference@USSR:
|
||||||
|
Name: USSR
|
||||||
|
Faction: soviet
|
||||||
|
Color: FE1100
|
||||||
|
Enemies: Greece
|
||||||
|
PlayerReference@Greece:
|
||||||
|
Name: Greece
|
||||||
|
Playable: True
|
||||||
|
Required: True
|
||||||
|
LockFaction: True
|
||||||
|
Faction: allies
|
||||||
|
LockColor: True
|
||||||
|
Color: E2E6F5
|
||||||
|
Enemies: USSR
|
||||||
|
|
||||||
|
Actors:
|
||||||
|
Actor0: t17
|
||||||
|
Location: 65,35
|
||||||
|
Owner: Neutral
|
||||||
|
Actor1: tc02
|
||||||
|
Location: 65,36
|
||||||
|
Owner: Neutral
|
||||||
|
Actor2: tc04
|
||||||
|
Location: 85,81
|
||||||
|
Owner: Neutral
|
||||||
|
Actor3: tc01
|
||||||
|
Location: 89,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor4: tc05
|
||||||
|
Location: 90,83
|
||||||
|
Owner: Neutral
|
||||||
|
Actor5: t10
|
||||||
|
Location: 84,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor6: t11
|
||||||
|
Location: 54,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor7: tc04
|
||||||
|
Location: 45,53
|
||||||
|
Owner: Neutral
|
||||||
|
Actor8: t01
|
||||||
|
Location: 45,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor9: t11
|
||||||
|
Location: 59,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor10: tc01
|
||||||
|
Location: 62,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor11: t07
|
||||||
|
Location: 51,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor12: t08
|
||||||
|
Location: 48,85
|
||||||
|
Owner: Neutral
|
||||||
|
Actor13: t14
|
||||||
|
Location: 46,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor14: t11
|
||||||
|
Location: 40,84
|
||||||
|
Owner: Neutral
|
||||||
|
Actor15: t07
|
||||||
|
Location: 87,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor16: t01
|
||||||
|
Location: 92,45
|
||||||
|
Owner: Neutral
|
||||||
|
Actor17: t11
|
||||||
|
Location: 77,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor18: t02
|
||||||
|
Location: 79,47
|
||||||
|
Owner: Neutral
|
||||||
|
Actor19: tc02
|
||||||
|
Location: 44,68
|
||||||
|
Owner: Neutral
|
||||||
|
Actor20: t17
|
||||||
|
Location: 67,62
|
||||||
|
Owner: Neutral
|
||||||
|
Actor21: tc05
|
||||||
|
Location: 68,67
|
||||||
|
Owner: Neutral
|
||||||
|
Actor22: tc04
|
||||||
|
Location: 67,66
|
||||||
|
Owner: Neutral
|
||||||
|
Actor23: t15
|
||||||
|
Location: 71,63
|
||||||
|
Owner: Neutral
|
||||||
|
Actor24: t16
|
||||||
|
Location: 72,62
|
||||||
|
Owner: Neutral
|
||||||
|
Actor25: t08
|
||||||
|
Location: 64,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor26: t17
|
||||||
|
Location: 69,50
|
||||||
|
Owner: Neutral
|
||||||
|
Actor27: tc04
|
||||||
|
Location: 67,49
|
||||||
|
Owner: Neutral
|
||||||
|
Actor28: tc02
|
||||||
|
Location: 67,51
|
||||||
|
Owner: Neutral
|
||||||
|
Actor29: t01
|
||||||
|
Location: 67,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor30: t06
|
||||||
|
Location: 67,54
|
||||||
|
Owner: Neutral
|
||||||
|
Actor31: tc01
|
||||||
|
Location: 70,54
|
||||||
|
Owner: Neutral
|
||||||
|
Actor32: t17
|
||||||
|
Location: 70,55
|
||||||
|
Owner: Neutral
|
||||||
|
Actor33: tc04
|
||||||
|
Location: 67,76
|
||||||
|
Owner: Neutral
|
||||||
|
Actor34: tc03
|
||||||
|
Location: 71,52
|
||||||
|
Owner: Neutral
|
||||||
|
Actor35: t05
|
||||||
|
Location: 40,74
|
||||||
|
Owner: Neutral
|
||||||
|
Actor36: tc02
|
||||||
|
Location: 69,72
|
||||||
|
Owner: Neutral
|
||||||
|
Actor37: t10
|
||||||
|
Location: 68,77
|
||||||
|
Owner: Neutral
|
||||||
|
Actor38: t11
|
||||||
|
Location: 51,71
|
||||||
|
Owner: Neutral
|
||||||
|
Actor39: t08
|
||||||
|
Location: 50,78
|
||||||
|
Owner: Neutral
|
||||||
|
Actor40: t07
|
||||||
|
Location: 44,77
|
||||||
|
Owner: Neutral
|
||||||
|
Actor41: tc01
|
||||||
|
Location: 63,74
|
||||||
|
Owner: Neutral
|
||||||
|
Actor42: tc01
|
||||||
|
Location: 59,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor43: t17
|
||||||
|
Location: 53,66
|
||||||
|
Owner: Neutral
|
||||||
|
Actor44: t01
|
||||||
|
Location: 45,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor45: t10
|
||||||
|
Location: 43,56
|
||||||
|
Owner: Neutral
|
||||||
|
Actor46: t10
|
||||||
|
Location: 55,46
|
||||||
|
Owner: Neutral
|
||||||
|
Actor47: t14
|
||||||
|
Location: 58,49
|
||||||
|
Owner: Neutral
|
||||||
|
Actor48: t16
|
||||||
|
Location: 61,44
|
||||||
|
Owner: Neutral
|
||||||
|
Actor49: t01
|
||||||
|
Location: 89,62
|
||||||
|
Owner: Neutral
|
||||||
|
Actor50: t12
|
||||||
|
Location: 92,63
|
||||||
|
Owner: Neutral
|
||||||
|
Actor51: t08
|
||||||
|
Location: 92,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor52: t03
|
||||||
|
Location: 75,72
|
||||||
|
Owner: Neutral
|
||||||
|
Actor53: t06
|
||||||
|
Location: 75,80
|
||||||
|
Owner: Neutral
|
||||||
|
Actor54: t01
|
||||||
|
Location: 77,41
|
||||||
|
Owner: Neutral
|
||||||
|
Actor55: t03
|
||||||
|
Location: 76,42
|
||||||
|
Owner: Neutral
|
||||||
|
Actor56: t05
|
||||||
|
Location: 83,27
|
||||||
|
Owner: Neutral
|
||||||
|
Actor57: tc02
|
||||||
|
Location: 79,35
|
||||||
|
Owner: Neutral
|
||||||
|
Actor58: tc04
|
||||||
|
Location: 90,26
|
||||||
|
Owner: Neutral
|
||||||
|
Actor59: t17
|
||||||
|
Location: 92,22
|
||||||
|
Owner: Neutral
|
||||||
|
Actor60: tc03
|
||||||
|
Location: 91,31
|
||||||
|
Owner: Neutral
|
||||||
|
Actor61: t01
|
||||||
|
Location: 43,47
|
||||||
|
Owner: Neutral
|
||||||
|
Actor62: t02
|
||||||
|
Location: 37,52
|
||||||
|
Owner: Neutral
|
||||||
|
Actor63: t10
|
||||||
|
Location: 37,37
|
||||||
|
Owner: Neutral
|
||||||
|
Actor64: tc02
|
||||||
|
Location: 41,28
|
||||||
|
Owner: Neutral
|
||||||
|
Actor65: tc03
|
||||||
|
Location: 67,27
|
||||||
|
Owner: Neutral
|
||||||
|
Actor66: t16
|
||||||
|
Location: 63,27
|
||||||
|
Owner: Neutral
|
||||||
|
Actor67: t03
|
||||||
|
Location: 38,27
|
||||||
|
Owner: Neutral
|
||||||
|
Actor68: t06
|
||||||
|
Location: 42,31
|
||||||
|
Owner: Neutral
|
||||||
|
Actor69: t07
|
||||||
|
Location: 77,25
|
||||||
|
Owner: Neutral
|
||||||
|
Actor70: tc02
|
||||||
|
Location: 40,24
|
||||||
|
Owner: Neutral
|
||||||
|
Actor71: t17
|
||||||
|
Location: 37,24
|
||||||
|
Owner: Neutral
|
||||||
|
Actor81: silo
|
||||||
|
Location: 43,27
|
||||||
|
Owner: USSR
|
||||||
|
Actor82: silo
|
||||||
|
Location: 44,28
|
||||||
|
Owner: USSR
|
||||||
|
Actor83: silo
|
||||||
|
Location: 44,26
|
||||||
|
Owner: USSR
|
||||||
|
Actor89: 3tnk
|
||||||
|
Location: 42,35
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 64
|
||||||
|
Actor90: 3tnk
|
||||||
|
Location: 39,34
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 64
|
||||||
|
Actor91: 3tnk
|
||||||
|
Location: 49,31
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 96
|
||||||
|
Actor93: e2
|
||||||
|
Location: 47,40
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 0
|
||||||
|
Actor94: e2
|
||||||
|
Location: 47,36
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 4
|
||||||
|
Actor95: e2
|
||||||
|
Location: 50,40
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 0
|
||||||
|
Actor96: e2
|
||||||
|
Location: 48,40
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 0
|
||||||
|
Actor97: e2
|
||||||
|
Location: 48,36
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 64
|
||||||
|
SubCell: 0
|
||||||
|
Actor98: e2
|
||||||
|
Location: 46,39
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 2
|
||||||
|
Actor99: e1
|
||||||
|
Location: 70,59
|
||||||
|
Owner: Greece
|
||||||
|
Facing: 192
|
||||||
|
SubCell: 4
|
||||||
|
Actor100: e1
|
||||||
|
Location: 44,34
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 4
|
||||||
|
Actor101: e1
|
||||||
|
Location: 43,37
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 96
|
||||||
|
SubCell: 4
|
||||||
|
waypoint17: waypoint
|
||||||
|
Location: 92,68
|
||||||
|
Owner: Neutral
|
||||||
|
waypoint98: waypoint
|
||||||
|
Location: 70,60
|
||||||
|
Owner: Neutral
|
||||||
|
Actor129: proc
|
||||||
|
Owner: Greece
|
||||||
|
Location: 82,54
|
||||||
|
Actor130: powr
|
||||||
|
Owner: Greece
|
||||||
|
Location: 87,53
|
||||||
|
Actor131: tent
|
||||||
|
Owner: Greece
|
||||||
|
Location: 83,49
|
||||||
|
Health: 12
|
||||||
|
Actor88: jeep
|
||||||
|
Location: 70,60
|
||||||
|
Owner: Greece
|
||||||
|
Facing: 224
|
||||||
|
Actor132: jeep
|
||||||
|
Location: 57,65
|
||||||
|
Owner: Greece
|
||||||
|
Actor133: jeep
|
||||||
|
Location: 62,67
|
||||||
|
Owner: Greece
|
||||||
|
Actor134: jeep
|
||||||
|
Location: 74,81
|
||||||
|
Owner: Greece
|
||||||
|
Actor135: jeep
|
||||||
|
Location: 45,71
|
||||||
|
Owner: Greece
|
||||||
|
Actor136: e1
|
||||||
|
Location: 47,71
|
||||||
|
Owner: Greece
|
||||||
|
Actor137: e1
|
||||||
|
Location: 44,72
|
||||||
|
Owner: Greece
|
||||||
|
Actor138: e1
|
||||||
|
Location: 49,73
|
||||||
|
Owner: Greece
|
||||||
|
Actor139: e1
|
||||||
|
Location: 47,73
|
||||||
|
Owner: Greece
|
||||||
|
Actor140: e1
|
||||||
|
Location: 45,73
|
||||||
|
Owner: Greece
|
||||||
|
Actor141: e1
|
||||||
|
Location: 56,69
|
||||||
|
Owner: Greece
|
||||||
|
Actor142: e3
|
||||||
|
Location: 48,72
|
||||||
|
Owner: Greece
|
||||||
|
Actor143: e1
|
||||||
|
Location: 73,80
|
||||||
|
Owner: Greece
|
||||||
|
Actor144: e1
|
||||||
|
Location: 76,79
|
||||||
|
Owner: Greece
|
||||||
|
Actor145: e1
|
||||||
|
Location: 74,80
|
||||||
|
Owner: Greece
|
||||||
|
Actor146: e1
|
||||||
|
Location: 62,69
|
||||||
|
Owner: Greece
|
||||||
|
Actor147: e3
|
||||||
|
Location: 58,69
|
||||||
|
Owner: Greece
|
||||||
|
Actor148: e3
|
||||||
|
Location: 60,68
|
||||||
|
Owner: Greece
|
||||||
|
Actor149: e3
|
||||||
|
Location: 75,79
|
||||||
|
Owner: Greece
|
||||||
|
Actor150: e1
|
||||||
|
Location: 85,54
|
||||||
|
Owner: Greece
|
||||||
|
Actor151: e1
|
||||||
|
Location: 85,51
|
||||||
|
Owner: Greece
|
||||||
|
Actor152: e1
|
||||||
|
Location: 84,48
|
||||||
|
Owner: Greece
|
||||||
|
Actor153: e3
|
||||||
|
Location: 84,55
|
||||||
|
Owner: Greece
|
||||||
|
Actor154: e2
|
||||||
|
Owner: USSR
|
||||||
|
Location: 82,47
|
||||||
|
SubCell: 3
|
||||||
|
Facing: 92
|
||||||
|
TurretFacing: 92
|
||||||
|
Actor155: e1
|
||||||
|
Owner: USSR
|
||||||
|
Location: 87,49
|
||||||
|
SubCell: 3
|
||||||
|
Facing: 92
|
||||||
|
TurretFacing: 92
|
||||||
|
Actor156: e1
|
||||||
|
Owner: USSR
|
||||||
|
Location: 87,49
|
||||||
|
SubCell: 1
|
||||||
|
Facing: 122
|
||||||
|
TurretFacing: 122
|
||||||
|
AlliedConyard: fact
|
||||||
|
Owner: Greece
|
||||||
|
Location: 88,49
|
||||||
|
Health: 88
|
||||||
|
Harvester: harv
|
||||||
|
Location: 57,24
|
||||||
|
Owner: USSR
|
||||||
|
Facing: 64
|
||||||
|
Conyard: fact
|
||||||
|
Location: 49,24
|
||||||
|
Owner: USSR
|
||||||
|
Barracks: barr
|
||||||
|
Location: 53,26
|
||||||
|
Owner: USSR
|
||||||
|
Refinery: proc
|
||||||
|
Location: 54,21
|
||||||
|
Owner: USSR
|
||||||
|
FreeActor: false
|
||||||
|
PowerPlant1: powr
|
||||||
|
Location: 47,21
|
||||||
|
Owner: USSR
|
||||||
|
PowerPlant2: powr
|
||||||
|
Location: 51,21
|
||||||
|
Owner: USSR
|
||||||
|
PowerPlant3: powr
|
||||||
|
Location: 46,25
|
||||||
|
Owner: USSR
|
||||||
|
PowerPlant4: powr
|
||||||
|
Location: 49,21
|
||||||
|
Owner: USSR
|
||||||
|
Warfactory: weap
|
||||||
|
Location: 48,28
|
||||||
|
Owner: USSR
|
||||||
|
Flametur1: ftur
|
||||||
|
Location: 56,27
|
||||||
|
Owner: USSR
|
||||||
|
Flametur2: ftur
|
||||||
|
Location: 51,32
|
||||||
|
Owner: USSR
|
||||||
|
Flametur3: ftur
|
||||||
|
Location: 54,30
|
||||||
|
Owner: USSR
|
||||||
|
Airfield1: afld
|
||||||
|
Location: 43,23
|
||||||
|
Owner: USSR
|
||||||
|
Airfield2: afld
|
||||||
|
Location: 43,21
|
||||||
|
Owner: USSR
|
||||||
|
ParadropPoint1: waypoint
|
||||||
|
Location: 77,40
|
||||||
|
Owner: Neutral
|
||||||
|
ParadropPoint2: waypoint
|
||||||
|
Location: 83,65
|
||||||
|
Owner: Neutral
|
||||||
|
ParadropPoint3: waypoint
|
||||||
|
Location: 76,52
|
||||||
|
Owner: Neutral
|
||||||
|
SovietEntry1: waypoint
|
||||||
|
Location: 37,34
|
||||||
|
Owner: Neutral
|
||||||
|
SovietEntry2: waypoint
|
||||||
|
Location: 88,21
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally1: waypoint
|
||||||
|
Location: 48,38
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally2: waypoint
|
||||||
|
Location: 43,51
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally3: waypoint
|
||||||
|
Location: 49,65
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally4: waypoint
|
||||||
|
Location: 61,80
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally5: waypoint
|
||||||
|
Location: 49,74
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally6: waypoint
|
||||||
|
Location: 80,85
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally7: waypoint
|
||||||
|
Location: 59,32
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally8: waypoint
|
||||||
|
Location: 56,34
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally9: waypoint
|
||||||
|
Location: 62,48
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally10: waypoint
|
||||||
|
Location: 84,30
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally11: waypoint
|
||||||
|
Location: 92,42
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally12: waypoint
|
||||||
|
Location: 72,66
|
||||||
|
Owner: Neutral
|
||||||
|
SovietRally13: waypoint
|
||||||
|
Location: 80,77
|
||||||
|
Owner: Neutral
|
||||||
|
USSRBase: waypoint
|
||||||
|
Location: 50,25
|
||||||
|
Owner: Neutral
|
||||||
|
PlayerBase: waypoint
|
||||||
|
Location: 88,52
|
||||||
|
Owner: Neutral
|
||||||
|
|
||||||
|
Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, rules.yaml
|
||||||
|
|
||||||
107
mods/ra/maps/allies-04/rules.yaml
Normal file
107
mods/ra/maps/allies-04/rules.yaml
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
Player:
|
||||||
|
PlayerResources:
|
||||||
|
DefaultCash: 5000
|
||||||
|
|
||||||
|
World:
|
||||||
|
LuaScript:
|
||||||
|
Scripts: allies04.lua, allies04-AI.lua
|
||||||
|
MissionData:
|
||||||
|
Briefing: Soviet forces are trying to retake the pass you cleared for our convoys.\n\nDon't let this happen. Hold the pass and prevent the Soviets from taking this vital area.\n\nDestroy all Soviet units and buildings in this region.
|
||||||
|
BriefingVideo: ally4.vqa
|
||||||
|
StartVideo: binoc.vqa
|
||||||
|
WinVideo: oildrum.vqa
|
||||||
|
LossVideo: bmap.vqa
|
||||||
|
MapOptions:
|
||||||
|
TechLevel: medium
|
||||||
|
ScriptLobbyDropdown@difficulty:
|
||||||
|
ID: difficulty
|
||||||
|
Label: Difficulty
|
||||||
|
Values:
|
||||||
|
easy: Easy
|
||||||
|
normal: Normal
|
||||||
|
hard: Hard
|
||||||
|
Default: easy
|
||||||
|
|
||||||
|
powerproxy.paratroopers:
|
||||||
|
ParatroopersPower:
|
||||||
|
DropItems: E1,E1,E1,E2,E2
|
||||||
|
|
||||||
|
V2RL:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
2TNK:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
3TNK:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~vehicles.soviet
|
||||||
|
|
||||||
|
ARTY:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
MCV:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
TRUK:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
SPEN:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
SYRD:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
APWR:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
TSLA:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
SAM:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
AGUN:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
AFLD:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
HPAD:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
BRIK:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
E4:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
E6:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
SPY:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
MECH:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
|
|
||||||
|
HIJACKER:
|
||||||
|
Buildable:
|
||||||
|
Prerequisites: ~disabled
|
||||||
@@ -3,6 +3,7 @@ Allied Campaign:
|
|||||||
./mods/ra/maps/allies-02
|
./mods/ra/maps/allies-02
|
||||||
./mods/ra/maps/allies-03a
|
./mods/ra/maps/allies-03a
|
||||||
./mods/ra/maps/allies-03b
|
./mods/ra/maps/allies-03b
|
||||||
|
./mods/ra/maps/allies-04
|
||||||
./mods/ra/maps/allies-05a
|
./mods/ra/maps/allies-05a
|
||||||
Soviet Campaign:
|
Soviet Campaign:
|
||||||
./mods/ra/maps/soviet-01
|
./mods/ra/maps/soviet-01
|
||||||
|
|||||||
Reference in New Issue
Block a user