Initial commit: OpenRA game engine
Some checks failed
Continuous Integration / Linux (.NET 8.0) (push) Has been cancelled
Continuous Integration / Windows (.NET 8.0) (push) Has been cancelled

Fork from OpenRA/OpenRA with one-click launch script (start-ra.cmd)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
let5sne.win10
2026-01-10 21:46:54 +08:00
commit 9cf6ebb986
4065 changed files with 635973 additions and 0 deletions

View File

@@ -0,0 +1,285 @@
--[[
Copyright (c) The OpenRA Developers and Contributors
This file is part of OpenRA, which is free software. It is made
available to you under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version. For more
information, see COPYING.
]]
ConstructionVehicleReinforcements = { "mcv" }
ConstructionVehiclePath = { ReinforcementsEntryPoint.Location, DeployPoint.Location }
JeepReinforcements = { "e1", "e1", "e1", "jeep" }
JeepPath = { ReinforcementsEntryPoint.Location, ReinforcementsRallyPoint.Location }
TruckReinforcements = { "truk", "truk", "truk" }
TruckPath = { TruckEntryPoint.Location, TruckRallyPoint.Location }
PathGuards = { PathGuard1, PathGuard2, PathGuard3, PathGuard4, PathGuard5, PathGuard6, PathGuard7, PathGuard8, PathGuard9, PathGuard10, PathGuard11, PathGuard12, PathGuard13, PathGuard14, PathGuard15 }
SovietBase = { SovietConyard, SovietRefinery, SovietPower1, SovietPower2, SovietSilo, SovietKennel, SovietBarracks, SovietWarfactory }
IdlingUnits = { }
if Difficulty == "easy" then
DateTime.TimeLimit = DateTime.Minutes(10) + DateTime.Seconds(3)
elseif Difficulty == "normal" then
DateTime.TimeLimit = DateTime.Minutes(5) + DateTime.Seconds(3)
InfantryTypes = { "e1", "e1", "e1", "e2", "e2", "e1" }
InfantryDelay = DateTime.Seconds(18)
AttackGroupSize = 5
elseif Difficulty == "hard" then
DateTime.TimeLimit = DateTime.Minutes(3) + DateTime.Seconds(3)
InfantryTypes = { "e1", "e1", "e1", "e2", "e2", "e1" }
InfantryDelay = DateTime.Seconds(10)
VehicleTypes = { "ftrk" }
VehicleDelay = DateTime.Seconds(30)
AttackGroupSize = 7
else
DateTime.TimeLimit = DateTime.Minutes(1) + DateTime.Seconds(3)
ConstructionVehicleReinforcements = { "jeep" }
InfantryTypes = { "e1", "e1", "e1", "e2", "e2", "dog", "dog" }
InfantryDelay = DateTime.Seconds(10)
VehicleTypes = { "ftrk" }
VehicleDelay = DateTime.Minutes(1) + DateTime.Seconds(10)
AttackGroupSize = 5
end
SendJeepReinforcements = function()
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived")
Reinforcements.Reinforce(Greece, JeepReinforcements, JeepPath, DateTime.Seconds(1))
end
RunInitialActivities = function()
Harvester.FindResources()
Trigger.OnKilled(Harvester, function() HarvesterKilled = true end)
ScheduleEarlyAttackers()
Trigger.OnAllKilled(PathGuards, function()
Greece.MarkCompletedObjective(SecureObjective)
SendTrucks()
end)
Trigger.OnAllKilled(SovietBase, function()
local livePathGuards = Utils.Where(PathGuards, function(pg) return not pg.IsDead end)
Utils.Do(USSR.GetGroundAttackers(), function(unit)
if Utils.Any(livePathGuards, function(pg) return pg == unit end) then
return
end
Trigger.OnIdle(unit, unit.Hunt)
end)
end)
if InfantryTypes then
Trigger.AfterDelay(InfantryDelay, ProduceInfantry)
end
if VehicleTypes then
Trigger.AfterDelay(VehicleDelay, ProduceVehicles)
end
end
ProduceInfantry = function()
if SovietBarracks.IsDead then
return
end
local toBuild = { Utils.Random(InfantryTypes) }
if SovietKennel.IsDead and toBuild == "dog" then
toBuild = { "e1" }
end
USSR.Build(toBuild, function(unit)
IdlingUnits[#IdlingUnits + 1] = unit[1]
Trigger.AfterDelay(InfantryDelay, ProduceInfantry)
if #IdlingUnits >= (AttackGroupSize * 1.5) then
SendAttack()
end
end)
end
ProduceVehicles = function()
if SovietWarfactory.IsDead then
return
end
if HarvesterKilled then
USSR.Build({ "harv" }, function(harv)
harv[1].FindResources()
Trigger.OnKilled(harv[1], function() HarvesterKilled = true end)
HarvesterKilled = false
ProduceVehicles()
end)
return
end
local toBuild = { Utils.Random(VehicleTypes) }
USSR.Build(toBuild, function(unit)
IdlingUnits[#IdlingUnits + 1] = unit[1]
Trigger.AfterDelay(VehicleDelay, ProduceVehicles)
if #IdlingUnits >= (AttackGroupSize * 1.5) then
SendAttack()
end
end)
end
SendAttack = function()
local units = { }
for i = 0, AttackGroupSize, 1 do
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
Utils.Do(units, function(unit)
if Difficulty ~= "tough" then
unit.AttackMove(DeployPoint.Location)
end
Trigger.OnIdle(unit, unit.Hunt)
end)
end
Tick = function()
USSR.Resources = USSR.Resources - (0.01 * USSR.ResourceCapacity / 25)
if USSR.HasNoRequiredUnits() then
Greece.MarkCompletedObjective(ConquestObjective)
end
if Greece.HasNoRequiredUnits() then
USSR.MarkCompletedObjective(USSRobjective)
end
end
FinishTimer = function()
DateTime.TimeLimit = 0
for i = 0, 5, 1 do
local c = TimerColor
if i % 2 == 0 then
c = HSLColor.White
end
Trigger.AfterDelay(DateTime.Seconds(i), function()
UserInterface.SetMissionText(UserInterface.GetFluentMessage("convoy-arrived"), c)
end)
end
Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end)
end
ConvoyOnSite = false
SendTrucks = function()
if not ConvoyOnSite then
ConvoyOnSite = true
DateTime.TimeLimit = 0
UserInterface.SetMissionText("")
ConvoyObjective = AddPrimaryObjective(Greece, "escort-convoy")
Media.PlaySpeechNotification(Greece, "ConvoyApproaching")
Trigger.AfterDelay(DateTime.Seconds(3), function()
ConvoyUnharmed = true
local trucks = Reinforcements.Reinforce(England, TruckReinforcements, TruckPath, DateTime.Seconds(1),
function(truck)
Trigger.OnIdle(truck, function() truck.Move(TruckExitPoint.Location) end)
end)
local count = 0
Trigger.OnEnteredFootprint( { TruckExitPoint.Location }, function(a, id)
if a.Owner == England then
count = count + 1
a.Destroy()
if count == 3 then
Greece.MarkCompletedObjective(ConvoyObjective)
Trigger.RemoveFootprintTrigger(id)
end
end
end)
Trigger.OnAnyKilled(trucks, ConvoyCasualties)
end)
end
end
ConvoyCasualties = function()
Media.PlaySpeechNotification(Greece, "ConvoyUnitLost")
if ConvoyUnharmed then
ConvoyUnharmed = false
Trigger.AfterDelay(DateTime.Seconds(1), function() Greece.MarkFailedObjective(ConvoyObjective) end)
end
end
ScheduleEarlyAttackers = function()
if Difficulty == "tough" then
Trigger.AfterDelay(DateTime.Seconds(12), SendEarlyAttackers)
return
end
Trigger.AfterDelay(DateTime.Seconds(6), function()
if not Greece.HasPrerequisites({ "anypower" }) then
ScheduleEarlyAttackers()
return
end
SendEarlyAttackers()
end)
end
SendEarlyAttackers = function()
local team = { EarlyAttacker1, EarlyAttacker2, EarlyAttacker3, EarlyAttacker4 }
local dogTargets = Greece.GetActorsByType("e1")
Utils.Do(team, function(member)
if member.IsDead then
return
end
-- Get attack dogs sprinting.
if member.Type == "dog" and #dogTargets > 0 then
member.Attack(Utils.Random(dogTargets))
end
Trigger.OnIdle(member, member.Hunt)
end)
end
WorldLoaded = function()
Greece = Player.GetPlayer("Greece")
England = Player.GetPlayer("England")
USSR = Player.GetPlayer("USSR")
InitObjectives(Greece)
USSRobjective = AddPrimaryObjective(USSR, "")
SecureObjective = AddPrimaryObjective(Greece, "secure-convoy")
ConquestObjective = AddPrimaryObjective(Greece, "eliminate-soviets")
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(Allies, "MissionTimerInitialised") end)
RunInitialActivities()
Reinforcements.Reinforce(Greece, ConstructionVehicleReinforcements, ConstructionVehiclePath)
Trigger.AfterDelay(DateTime.Seconds(5), SendJeepReinforcements)
Trigger.AfterDelay(DateTime.Seconds(10), SendJeepReinforcements)
Trigger.OnTimerExpired(function()
FinishTimer()
SendTrucks()
end)
Camera.Position = ReinforcementsEntryPoint.CenterPosition
TimerColor = Greece.Color
end

Binary file not shown.

View File

@@ -0,0 +1,17 @@
dropdown-difficulty =
.label = Difficulty
.description = The difficulty of the mission
options-difficulty =
.easy = Easy
.normal = Normal
.hard = Hard
.tough = Real tough guy
## rules.yaml
briefing =
A critical supply convoy is due through this area in 10 minutes, but Soviet forces have blocked the road in several places.
Unless you can clear them out, those supplies will never make it to the front.
The convoy will come from the northwest, and time is short, so work quickly.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,661 @@
MapFormat: 12
RequiresMod: ra
Title: 02: Five to One
Author: Westwood Studios
Tileset: SNOW
MapSize: 128,128
Bounds: 43,44,50,42
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@USSR:
Name: USSR
Faction: soviet
Color: FE1100
Enemies: Greece, England
Bot: campaign
PlayerReference@England:
Name: England
NonCombatant: True
Faction: allies
Color: A1EF8C
Allies: Greece
Enemies: USSR
Bot: campaign
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: allies
PlayerReference@Greece:
Name: Greece
Playable: True
AllowBots: False
Required: True
LockFaction: True
Faction: allies
LockColor: True
Color: ABB7E4
LockSpawn: True
LockTeam: True
Allies: England
Enemies: USSR
Actors:
EntryPoint: t06
Location: 75,80
Owner: Neutral
Actor1: t03
Location: 75,72
Owner: Neutral
Actor2: t08
Location: 92,60
Owner: Neutral
Actor3: t12
Location: 92,63
Owner: Neutral
Actor4: t01
Location: 89,62
Owner: Neutral
Actor5: t16
Location: 61,44
Owner: Neutral
Actor6: t14
Location: 58,49
Owner: Neutral
Actor7: t10
Location: 55,46
Owner: Neutral
Actor8: t10
Location: 43,56
Owner: Neutral
Actor9: t01
Location: 45,56
Owner: Neutral
Actor10: t17
Location: 53,66
Owner: Neutral
Actor11: tc01
Location: 59,60
Owner: Neutral
Actor12: tc01
Location: 63,74
Owner: Neutral
Actor13: t07
Location: 44,77
Owner: Neutral
Actor14: t08
Location: 50,78
Owner: Neutral
Actor15: t11
Location: 51,71
Owner: Neutral
Actor16: t10
Location: 68,77
Owner: Neutral
Actor17: tc02
Location: 69,72
Owner: Neutral
Actor18: tc03
Location: 71,52
Owner: Neutral
Actor19: tc04
Location: 67,76
Owner: Neutral
Actor20: t17
Location: 70,55
Owner: Neutral
Actor21: tc01
Location: 70,54
Owner: Neutral
Actor22: t06
Location: 67,54
Owner: Neutral
Actor23: t01
Location: 67,44
Owner: Neutral
Actor24: tc02
Location: 67,51
Owner: Neutral
Actor25: tc04
Location: 67,49
Owner: Neutral
Actor26: t17
Location: 69,50
Owner: Neutral
Actor27: t08
Location: 64,55
Owner: Neutral
Actor28: t16
Location: 72,62
Owner: Neutral
Actor29: t15
Location: 71,63
Owner: Neutral
Actor30: tc04
Location: 67,66
Owner: Neutral
Actor31: tc05
Location: 68,67
Owner: Neutral
Actor32: t17
Location: 67,62
Owner: Neutral
Actor33: tc02
Location: 44,68
Owner: Neutral
Actor37: t02
Location: 79,47
Owner: Neutral
Actor38: t11
Location: 77,56
Owner: Neutral
Actor39: t01
Location: 92,45
Owner: Neutral
Actor42: t07
Location: 87,44
Owner: Neutral
Actor43: t14
Location: 46,84
Owner: Neutral
Actor44: t08
Location: 48,85
Owner: Neutral
Actor45: t07
Location: 51,84
Owner: Neutral
Actor46: tc01
Location: 62,84
Owner: Neutral
Actor47: t11
Location: 59,71
Owner: Neutral
Actor48: t01
Location: 45,44
Owner: Neutral
Actor49: tc04
Location: 45,53
Owner: Neutral
Actor50: t11
Location: 54,55
Owner: Neutral
Actor51: t10
Location: 84,71
Owner: Neutral
Actor52: tc05
Location: 90,83
Owner: Neutral
Actor53: tc01
Location: 89,84
Owner: Neutral
Actor54: tc04
Location: 85,81
Owner: Neutral
Actor55: tc05
Location: 43,71
Owner: Neutral
Actor56: tc03
Location: 43,70
Owner: Neutral
Actor64: brl3
Location: 65,59
Owner: USSR
Actor65: barl
Location: 66,60
Owner: USSR
Actor66: barl
Location: 65,60
Owner: USSR
Actor67: brl3
Location: 64,60
Owner: USSR
Actor68: barl
Location: 65,61
Owner: USSR
Actor69: v19
Location: 67,60
Owner: USSR
Actor70: v19
Location: 67,59
Owner: USSR
Actor71: barl
Location: 65,62
Owner: USSR
Actor73: brl3
Location: 55,70
Owner: USSR
Actor74: brl3
Location: 54,70
Owner: USSR
Actor75: barl
Location: 53,69
Owner: USSR
Actor76: barl
Location: 54,69
Owner: USSR
Actor77: barl
Location: 55,71
Owner: USSR
Actor78: brl3
Location: 56,71
Owner: USSR
Actor79: brl3
Location: 53,68
Owner: USSR
Actor80: v19
Location: 56,70
Owner: USSR
Actor81: barl
Location: 55,69
Owner: USSR
Actor82: brl3
Location: 72,51
Owner: USSR
Actor83: barl
Location: 72,50
Owner: USSR
Actor84: barl
Location: 74,48
Owner: USSR
Actor85: barl
Location: 72,49
Owner: USSR
Actor86: barl
Location: 73,48
Owner: USSR
Actor87: v19
Location: 75,48
Owner: USSR
Health: 52
Actor88: v19
Location: 62,57
Owner: USSR
Actor89: v19
Location: 60,58
Owner: USSR
Actor90: brl3
Location: 62,56
Owner: USSR
Actor91: brl3
Location: 61,58
Owner: USSR
Actor92: barl
Location: 61,57
Owner: USSR
Actor93: brl3
Location: 59,58
Owner: USSR
Actor94: barl
Location: 58,58
Owner: USSR
Actor96: dog
Location: 53,58
Owner: USSR
SubCell: 1
Actor97: dog
Location: 65,68
Owner: USSR
Facing: 768
SubCell: 3
Actor98: dog
Location: 65,66
Owner: USSR
Facing: 896
SubCell: 2
Actor99: dog
Location: 59,70
Owner: USSR
Facing: 384
SubCell: 2
Actor100: e2
Location: 61,56
Owner: USSR
Facing: 896
SubCell: 3
Actor101: e2
Location: 59,57
Owner: USSR
Facing: 128
SubCell: 4
Actor102: e2
Location: 64,67
Owner: USSR
Facing: 640
SubCell: 0
EarlyAttacker3: e1
Location: 78,74
Owner: USSR
SubCell: 2
Facing: 512
Actor104: e1
Location: 80,74
Owner: USSR
Facing: 384
SubCell: 0
Actor105: e1
Location: 56,68
Owner: USSR
Facing: 384
SubCell: 3
Actor107: e1
Location: 73,60
Owner: USSR
Facing: 896
SubCell: 2
Actor108: e1
Location: 74,61
Owner: USSR
Facing: 128
SubCell: 1
Actor109: e1
Location: 72,60
Owner: USSR
Facing: 768
SubCell: 0
Actor115: e1
Location: 60,64
Owner: USSR
Facing: 128
SubCell: 3
Actor116: e2
Location: 68,45
Owner: USSR
Facing: 640
SubCell: 0
Actor118: e1
Location: 57,69
Owner: USSR
Facing: 640
SubCell: 1
Actor119: e2
Location: 60,70
Owner: USSR
Facing: 896
SubCell: 0
Actor120: e1
Location: 89,48
Owner: Greece
Facing: 384
SubCell: 1
Actor121: e1
Location: 87,48
Owner: Greece
Facing: 256
SubCell: 4
Actor122: e1
Location: 87,48
Owner: Greece
Facing: 256
SubCell: 1
Actor123: e1
Location: 88,48
Owner: Greece
Facing: 512
SubCell: 4
Actor124: e1
Location: 88,49
Owner: Greece
Facing: 512
SubCell: 1
EarlyAttacker4: dog
Location: 78,75
Owner: USSR
SubCell: 1
Facing: 384
EarlyAttacker1: e1
Location: 71,61
Owner: USSR
SubCell: 0
Facing: 384
EarlyAttacker2: dog
Location: 70,61
Owner: USSR
SubCell: 4
Facing: 640
Actor136: e2
Location: 69,66
Owner: USSR
SubCell: 3
Actor137: e2
Location: 73,51
Owner: USSR
Facing: 128
SubCell: 4
Actor138: medi
Location: 88,48
Owner: Greece
Facing: 384
SubCell: 1
Actor139: fenc
Location: 57,75
Owner: USSR
Actor140: fenc
Location: 57,76
Owner: USSR
Actor141: fenc
Location: 57,77
Owner: USSR
Actor142: fenc
Location: 58,77
Owner: USSR
Actor143: fenc
Location: 58,78
Owner: USSR
Actor144: fenc
Location: 57,78
Owner: USSR
Actor145: fenc
Location: 58,75
Owner: USSR
Actor146: fenc
Location: 58,74
Owner: USSR
Actor147: fenc
Location: 57,74
Owner: USSR
Actor148: fenc
Location: 66,67
Owner: USSR
Actor149: fenc
Location: 66,68
Owner: USSR
Actor150: fenc
Location: 66,69
Owner: USSR
Actor151: fenc
Location: 66,70
Owner: USSR
Actor152: fenc
Location: 65,70
Owner: USSR
Actor153: fenc
Location: 64,70
Owner: USSR
Actor154: fenc
Location: 63,70
Owner: USSR
Actor155: fenc
Location: 51,68
Owner: USSR
Actor156: fenc
Location: 52,68
Owner: USSR
Actor157: fenc
Location: 52,67
Owner: USSR
Actor158: fenc
Location: 52,66
Owner: USSR
Actor159: fenc
Location: 51,66
Owner: USSR
Actor160: fenc
Location: 51,62
Owner: USSR
Actor161: fenc
Location: 51,63
Owner: USSR
Actor162: fenc
Location: 67,58
Owner: USSR
Actor163: fenc
Location: 66,58
Owner: USSR
Actor164: fenc
Location: 66,59
Owner: USSR
Actor165: fenc
Location: 47,51
Owner: USSR
Actor166: fenc
Location: 47,50
Owner: USSR
Actor167: fenc
Location: 46,50
Owner: USSR
Actor168: fenc
Location: 51,50
Owner: USSR
Actor169: fenc
Location: 50,50
Owner: USSR
Actor170: fenc
Location: 50,51
Owner: USSR
SovietConyard: fact
Location: 62,61
Owner: USSR
SovietRefinery: proc
Location: 53,62
Owner: USSR
FreeActor: False
SovietPower1: powr
Location: 57,62
Owner: USSR
SovietPower2: powr
Location: 59,62
Owner: USSR
SovietSilo: silo
Location: 54,68
Owner: USSR
SovietKennel: kenn
Location: 58,68
Owner: USSR
SovietBarracks: barr
Location: 56,66
Owner: USSR
SovietWarfactory: weap
Location: 60,66
Owner: USSR
Harvester: harv
Location: 55,65
Owner: USSR
Facing: 384
PathGuard1: e1
Location: 50,72
Owner: USSR
Facing: 384
SubCell: 4
PathGuard2: e1
Location: 49,58
Owner: USSR
Facing: 256
SubCell: 0
PathGuard3: e1
Location: 51,58
Owner: USSR
Facing: 896
SubCell: 1
PathGuard4: e1
Location: 60,78
Owner: USSR
Facing: 256
SubCell: 4
PathGuard5: e2
Location: 62,79
Owner: USSR
Facing: 384
SubCell: 4
PathGuard6: e1
Location: 48,72
Owner: USSR
Facing: 640
SubCell: 0
PathGuard7: e1
Location: 50,46
Owner: USSR
Facing: 896
SubCell: 1
PathGuard8: e1
Location: 49,47
Owner: USSR
Facing: 768
SubCell: 0
PathGuard9: e2
Location: 49,49
Owner: USSR
Facing: 384
SubCell: 1
PathGuard10: e2
Location: 47,46
Owner: USSR
Facing: 640
SubCell: 3
PathGuard11: e2
Location: 48,63
Owner: USSR
SubCell: 1
PathGuard12: e1
Location: 49,63
Owner: USSR
Facing: 640
SubCell: 2
PathGuard13: e1
Location: 74,81
Owner: USSR
Facing: 768
SubCell: 3
PathGuard14: e2
Location: 75,83
Owner: USSR
Facing: 640
SubCell: 0
PathGuard15: e1
Location: 57,82
Owner: USSR
Facing: 384
SubCell: 1
TruckEntryPoint: waypoint
Location: 49,44
Owner: Neutral
TruckRallyPoint: waypoint
Location: 49,76
Owner: Neutral
TruckExitPoint: waypoint
Location: 80,85
Owner: Neutral
ReinforcementsEntryPoint: waypoint
Location: 90,44
Owner: Neutral
ReinforcementsRallyPoint: waypoint
Location: 88,49
Owner: Neutral
DeployPoint: waypoint
Location: 89,51
Owner: Neutral
Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml
FluentMessages: ra|fluent/lua.ftl, ra|fluent/campaign.ftl, map.ftl

View File

@@ -0,0 +1,103 @@
Player:
PlayerResources:
DefaultCash: 5700
World:
LuaScript:
Scripts: campaign.lua, utils.lua, allies02.lua
MissionData:
Briefing: briefing
BriefingVideo: ally2.vqa
StartVideo: mcv.vqa
WinVideo: montpass.vqa
LossVideo: frozen.vqa
SmudgeLayer@CRATER:
InitialSmudges:
60,79: cr1,0
ScriptLobbyDropdown@difficulty:
ID: difficulty
Label: dropdown-difficulty.label
Description: dropdown-difficulty.description
Values:
easy: options-difficulty.easy
normal: options-difficulty.normal
hard: options-difficulty.hard
tough: options-difficulty.tough
Default: normal
TimeLimitManager:
CountdownLabel: MISSION_TEXT
CountdownText: The convoy will arrive in {0}
Notification: {0} minute{1} remaining
SkipTimerExpiredNotification: True
APWR:
Buildable:
Prerequisites: ~disabled
FIX:
Buildable:
Prerequisites: ~disabled
SYRD:
Buildable:
Prerequisites: ~disabled
WEAP:
Buildable:
Prerequisites: ~disabled
DOME:
Buildable:
Prerequisites: ~disabled
HPAD:
Buildable:
Prerequisites: ~disabled
ATEK:
Buildable:
Prerequisites: ~disabled
BRIK:
Buildable:
Prerequisites: ~disabled
HBOX:
Buildable:
Prerequisites: ~disabled
GUN:
Buildable:
Prerequisites: ~disabled
AGUN:
Buildable:
Prerequisites: ~disabled
GAP:
Buildable:
Prerequisites: ~disabled
PDOX:
Buildable:
Prerequisites: ~disabled
MSLO:
Buildable:
Prerequisites: ~disabled
E6:
Buildable:
Prerequisites: ~disabled
SPY:
Buildable:
Prerequisites: ~disabled
MECH:
Buildable:
Prerequisites: ~disabled
E7:
Buildable:
Prerequisites: ~disabled