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,194 @@
--[[
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.
]]
AttackPaths = { WaypointGroup3, WaypointGroup4, WaypointGroup5 }
NodBase = { handofnod, nodairfield, nodrefinery, NodYard, nodpower1, nodpower2, nodpower3, nodpower4, gun1, gun2, nodsilo1, nodsilo2, nodsilo3, nodsilo4}
PatrolProductionQueue = { }
InfantryAttackGroup = { }
InfantryGroupSize = 5
InfantryProductionCooldown = DateTime.Minutes(3)
InfantryProductionTypes = { "e1", "e1", "e1", "e3", "e3", "e4" }
HarvesterProductionType = { "harv" }
VehicleAttackGroup = { }
VehicleGroupSize = 5
VehicleProductionCooldown = DateTime.Minutes(3)
VehicleProductionTypes = { "bggy", "bggy", "bike", "ltnk", "ltnk" }
StartingCash = 14000
BaseRefinery = { type = "proc", pos = CPos.New(24, 16), cost = 1500 }
BaseGun1 = { type = "gun", pos = CPos.New( 21, 19), cost = 600 }
BaseGun2 = { type = "gun", pos = CPos.New( 26, 21), cost = 600 }
BaseNuke1 = { type = "nuke", pos = CPos.New( 23, 14), cost = 500 }
BaseNuke2 = { type = "nuke", pos = CPos.New( 10, 9), cost = 500 }
BaseNuke3 = { type = "nuke", pos = CPos.New( 6, 8), cost = 500 }
BaseNuke4 = { type = "nuke", pos = CPos.New( 8, 8), cost = 500 }
InfantryProduction = { type = "hand", pos = CPos.New(27, 17), cost = 500 }
VehicleProduction = { type = "afld", pos = CPos.New(27, 14), cost = 2000 }
NodGuards = { Actor154, Actor155, Actor218, Actor219 }
BaseBuildings = { BaseRefinery, BaseNuke1, BaseNuke2, BaseNuke3, BaseNuke4, InfantryProduction, VehicleProduction, BaseGun1, BaseGun2 }
BuildBuilding = function(building, cyard)
if CyardIsBuilding or Nod.Cash < building.cost then
Trigger.AfterDelay(DateTime.Seconds(10), function() BuildBuilding(building, cyard) end)
return
end
CyardIsBuilding = true
Nod.Cash = Nod.Cash - building.cost
Trigger.AfterDelay(Actor.BuildTime(building.type), function()
CyardIsBuilding = false
if cyard.IsDead or cyard.Owner ~= Nod then
Nod.Cash = Nod.Cash + building.cost
return
end
local actor = Actor.Create(building.type, true, { Owner = Nod, Location = building.pos })
if actor.Type == 'hand' or actor.Type == 'pyle' then
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceInfantry(actor) end)
elseif actor.Type == 'afld' or actor.Type == 'weap' then
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceVehicle(actor) end)
end
Trigger.OnKilled(actor, function()
BuildBuilding(building, cyard)
end)
RepairBuilding(GDI, actor, 0.75)
end)
end
CheckForHarvester = function()
local harv = Nod.GetActorsByType("harv")
return #harv > 0
end
GuardBase = function()
Utils.Do(NodBase, function(building)
Trigger.OnDamaged(building, function()
Utils.Do(NodGuards, function(guard)
if not guard.IsDead and not building.IsDead then
guard.Stop()
guard.Guard(building)
end
end)
end)
end)
end
ProduceHarvester = function(building)
if not BuildingHarvester then
BuildingHarvester = true
building.Build(HarvesterProductionType, function()
BuildingHarvester = false
end)
end
end
ProduceInfantry = function(building)
if building.IsDead or building.Owner ~= Nod then
return
elseif not CheckForHarvester() then
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceInfantry(building) end)
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9))
local toBuild = { Utils.Random(InfantryProductionTypes) }
local Path = Utils.Random(AttackPaths)
building.Build(toBuild, function(unit)
InfantryAttackGroup[#InfantryAttackGroup + 1] = unit[1]
if #InfantryAttackGroup >= InfantryGroupSize then
MoveAndHunt(InfantryAttackGroup, Path)
InfantryAttackGroup = { }
Trigger.AfterDelay(InfantryProductionCooldown, function() ProduceInfantry(building) end)
else
Trigger.AfterDelay(delay, function() ProduceInfantry(building) end)
end
end)
end
ProduceVehicle = function(building)
if building.IsDead or building.Owner ~= Nod then
return
elseif not CheckForHarvester() then
ProduceHarvester(building)
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceVehicle(building) end)
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17))
local toBuild = { Utils.Random(VehicleProductionTypes) }
local Path = Utils.Random(AttackPaths)
building.Build(toBuild, function(unit)
VehicleAttackGroup[#VehicleAttackGroup + 1] = unit[1]
if #VehicleAttackGroup >= VehicleGroupSize then
MoveAndHunt(VehicleAttackGroup, Path)
VehicleAttackGroup = { }
Trigger.AfterDelay(VehicleProductionCooldown, function() ProduceVehicle(building) end)
else
Trigger.AfterDelay(delay, function() ProduceVehicle(building) end)
end
end)
end
StartAI = function()
Nod.Cash = StartingCash
GuardBase()
end
Trigger.OnAllKilledOrCaptured(NodBase, function()
Utils.Do(Nod.GetGroundAttackers(), IdleHunt)
end)
Trigger.OnKilled(nodrefinery, function()
BuildBuilding(BaseRefinery, NodYard)
end)
Trigger.OnKilled(nodpower1, function()
BuildBuilding(BaseNuke1, NodYard)
end)
Trigger.OnKilled(nodpower2, function()
BuildBuilding(BaseNuke2, NodYard)
end)
Trigger.OnKilled(nodpower3, function()
BuildBuilding(BaseNuke3, NodYard)
end)
Trigger.OnKilled(nodpower4, function()
BuildBuilding(BaseNuke4, NodYard)
end)
Trigger.OnKilled(gun1, function()
BuildBuilding(BaseGun1, NodYard)
end)
Trigger.OnKilled(gun2, function()
BuildBuilding(BaseGun2, NodYard)
end)
Trigger.OnKilled(handofnod, function()
BuildBuilding(InfantryProduction, NodYard)
end)
Trigger.OnKilled(nodairfield, function()
BuildBuilding(VehicleProduction, NodYard)
end)

View File

@@ -0,0 +1,130 @@
--[[
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.
]]
SamSites = { sam1, sam2, sam3 }
WaypointGroup1 = { waypoint4, waypoint5, waypoint6, waypoint7, waypoint10, waypoint11, waypoint12 }
WaypointGroup2 = { waypoint4, waypoint5, waypoint13, waypoint16 }
WaypointGroup3 = { waypoint4, waypoint5, waypoint6, waypoint8 }
WaypointGroup4 = { waypoint4, waypoint5, waypoint6, waypoint7, waypoint9 }
WaypointGroup5 = { waypoint4, waypoint5, waypoint6 }
WaypointGroup6 = { waypoint4, waypoint5, waypoint6, waypoint7, waypoint14, waypoint15 }
WaypointGroup7 = { waypoint4, waypoint5 }
WaypointGroupCiv = { waypoint0, waypoint1, waypoint2, waypoint3 }
Atk1 = { units = { ['ltnk'] = 1 }, waypoints = WaypointGroup1, delay = 0 }
Atk2 = { units = { ['ltnk'] = 1 }, waypoints = WaypointGroup2, delay = 0 }
Civ1 = { units = { ['c3'] = 1 }, waypoints = WaypointGroupCiv, delay = 0 }
Nod1 = { units = { ['e1'] = 2, ['e2'] = 2, ['e4'] = 2 }, waypoints = WaypointGroup3, delay = 90 }
Nod2 = { units = { ['e3'] = 2, ['e4'] = 2 }, waypoints = WaypointGroup3, delay = 130 }
Nod3 = { units = { ['e1'] = 2, ['e3'] = 3 }, waypoints = WaypointGroup3, delay = 50 }
Nod4 = { units = { ['bggy'] = 2 }, waypoints = WaypointGroup3, delay = 200 }
Nod5 = { units = { ['e4'] = 2, ['ltnk'] = 1 }, waypoints = WaypointGroup1, delay = 250 }
Nod6 = { units = { ['arty'] = 1 }, waypoints = WaypointGroup4, delay = 40 }
Nod7 = { units = { ['e3'] = 2, ['e4'] = 2 }, waypoints = WaypointGroup4, delay = 40 }
Nod8 = { units = { ['ltnk'] = 1, ['bggy'] = 1 }, waypoints = WaypointGroup3, delay = 170 }
Auto1 = { units = { ['e1'] = 2, ['e2'] = 2 }, waypoints = WaypointGroup5, delay = 50 }
Auto2 = { units = { ['e3'] = 3, ['e4'] = 2 }, waypoints = WaypointGroup3, delay = 50 }
Auto3 = { units = { ['ltnk'] = 1, ['bggy'] = 1 }, waypoints = WaypointGroup3, delay = 50 }
Auto4 = { units = { ['bggy'] = 2 }, waypoints = WaypointGroup7, delay = 50 }
Auto5 = { units = { ['ltnk'] = 1 }, waypoints = WaypointGroup6, delay = 50 }
Auto6 = { units = { ['arty'] = 1 }, waypoints = WaypointGroup4, delay = 50 }
Auto7 = { units = { ['e3'] = 3, ['e4'] = 2 }, waypoints = WaypointGroup6, delay = 50 }
AutoAttackWaves = { Atk1, Atk2, Nod1, Nod2, Nod3, Nod4, Nod5, Nod6, Nod7, Nod8, Auto1, Auto2, Auto3, Auto4, Auto5, Auto6, Auto7 }
StationaryGuardUnits = { Actor181, Actor182, Actor183, Actor184, Actor198, Actor199, Actor157, Actor175, Actor176, Actor173, Actor174, Actor158, Actor200, Actor159, Actor179, Actor180, Actor184, Actor185, Actor216, Actor217, Actor153, Actor215, Actor214, Actor213}
DamagedGDIAssets = { Actor126, Actor127, Actor128, Actor129, Actor130,Actor131, Actor132, Actor133, Actor134, Actor135, Actor136, Actor137, Actor138, Actor160, Actor161, Actor162, Actor163, Actor164, Actor165, Actor166, Actor168, Actor169, Actor170}
StartStationaryGuards = function(StationaryGuards)
Utils.Do(StationaryGuards, function(unit)
if not unit.IsDead then
unit.Patrol( { unit.Location } , true, 20)
end
end)
end
SendWaves = function(counter, Waves)
if counter <= #Waves then
local team = Waves[counter]
for type, amount in pairs(team.units) do
MoveAndHunt(Utils.Take(amount, Nod.GetActorsByType(type)), team.waypoints)
end
Trigger.AfterDelay(DateTime.Seconds(team.delay), function() SendWaves(counter + 1, Waves) end)
end
end
CheckRepairGDIAssetsObjective = function()
local failed = false
local repaired = true
Utils.Do(DamagedGDIAssets, function(actor)
if actor.IsDead then
failed = true
elseif actor.Health < actor.MaxHealth then
repaired = false
end
end)
if failed then
GDI.MarkFailedObjective(RepairAssets)
return
elseif repaired then
GDI.MarkCompletedObjective(RepairAssets)
return
end
Trigger.AfterDelay(DateTime.Seconds(3), function() CheckRepairGDIAssetsObjective() end)
end
WorldLoaded = function()
GDI = Player.GetPlayer("GDI")
Nod = Player.GetPlayer("Nod")
Camera.Position = DefaultCameraPosition.CenterPosition
StartStationaryGuards(StationaryGuardUnits)
StartAI()
InitObjectives(GDI)
SecureArea = AddPrimaryObjective(GDI, "destroy-nod-force")
KillGDI = AddPrimaryObjective(Nod, "")
RepairAssets = AddSecondaryObjective(GDI, "repair-base-vehicles")
Trigger.AfterDelay(DateTime.Seconds(5), function() CheckRepairGDIAssetsObjective() end)
AirSupport = AddSecondaryObjective(GDI, "destroy-sams")
Trigger.OnAllKilled(SamSites, function()
GDI.MarkCompletedObjective(AirSupport)
Actor.Create("airstrike.proxy", true, { Owner = GDI })
end)
local InitialArrivingUnits = { Actor166 }
Utils.Do(InitialArrivingUnits, function(unit)
unit.Move(unit.Location + CVec.New(1, 1), 0)
end)
Trigger.AfterDelay(DateTime.Minutes(1), function() SendWaves(1, AutoAttackWaves) end)
Trigger.AfterDelay(DateTime.Minutes(2), function() ProduceInfantry(handofnod) end)
Trigger.AfterDelay(DateTime.Minutes(2), function() ProduceVehicle(nodairfield) end)
end
Tick = function()
if DateTime.GameTime > DateTime.Seconds(5) then
if GDI.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(KillGDI)
end
if Nod.HasNoRequiredUnits() then
GDI.MarkCompletedObjective(SecureArea)
end
end
end

Binary file not shown.

View File

@@ -0,0 +1,7 @@
## rules.yaml
briefing =
UN Sanctions have cut funding to the Global Defense Initiative, leaving field units helpless.
Use the repair facility to keep your units in the field long enough to destroy the Nod base in the region.
All Nod units and structures must be destroyed.

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -0,0 +1,891 @@
MapFormat: 12
RequiresMod: cnc
Title: 08a: Restore GDI Presence Near Salzburg
Author: Westwood Studios
Tileset: WINTER
MapSize: 64,64
Bounds: 3,7,51,50
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: gdi
PlayerReference@Nod:
Name: Nod
Faction: nod
Color: FF1400
Allies: Nod
Enemies: GDI
Bot: campaign
PlayerReference@GDI:
Name: GDI
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: gdi
LockColor: True
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI
Enemies: Nod
Actors:
Actor0: sbag
Location: 53,56
Owner: Neutral
Actor1: sbag
Location: 52,56
Owner: Neutral
Actor2: sbag
Location: 51,56
Owner: Neutral
Actor3: sbag
Location: 50,56
Owner: Neutral
Actor4: sbag
Location: 49,56
Owner: Neutral
Actor5: sbag
Location: 48,56
Owner: Neutral
Actor6: sbag
Location: 47,56
Owner: Neutral
Actor7: sbag
Location: 46,56
Owner: Neutral
Actor8: sbag
Location: 45,56
Owner: Neutral
Actor9: sbag
Location: 44,56
Owner: Neutral
Actor10: sbag
Location: 43,56
Owner: Neutral
Actor11: sbag
Location: 41,56
Owner: Neutral
Actor12: sbag
Location: 40,56
Owner: Neutral
Actor13: wood
Location: 5,56
Owner: Neutral
Actor14: wood
Location: 4,56
Owner: Neutral
Actor15: wood
Location: 3,56
Owner: Neutral
Actor16: sbag
Location: 53,55
Owner: Neutral
Actor17: sbag
Location: 40,55
Owner: Neutral
Actor18: v18
Location: 5,55
Owner: Neutral
Actor19: v17
Location: 4,55
Owner: Neutral
Actor20: sbag
Location: 53,54
Owner: Neutral
Actor21: sbag
Location: 40,54
Owner: Neutral
Actor22: wood
Location: 17,54
Owner: Neutral
Actor23: wood
Location: 16,54
Owner: Neutral
Actor24: wood
Location: 15,54
Owner: Neutral
Actor25: wood
Location: 14,54
Owner: Neutral
Actor26: wood
Location: 11,54
Owner: Neutral
Actor27: wood
Location: 10,54
Owner: Neutral
Actor28: v14
Location: 6,54
Owner: Neutral
Actor29: v15
Location: 5,54
Owner: Neutral
Actor30: v16
Location: 4,54
Owner: Neutral
Actor31: sbag
Location: 53,53
Owner: Neutral
Actor32: wood
Location: 6,53
Owner: Neutral
Actor33: wood
Location: 17,52
Owner: Neutral
Actor34: wood
Location: 16,52
Owner: Neutral
Actor35: wood
Location: 15,52
Owner: Neutral
Actor36: wood
Location: 14,52
Owner: Neutral
Actor37: wood
Location: 11,52
Owner: Neutral
Actor38: wood
Location: 10,52
Owner: Neutral
Actor39: sbag
Location: 53,51
Owner: Neutral
Actor40: sbag
Location: 53,50
Owner: Neutral
Actor41: sbag
Location: 40,50
Owner: Neutral
Actor42: sbag
Location: 53,49
Owner: Neutral
Actor43: sbag
Location: 40,49
Owner: Neutral
Actor44: sbag
Location: 53,48
Owner: Neutral
Actor45: sbag
Location: 53,47
Owner: Neutral
Actor46: sbag
Location: 40,47
Owner: Neutral
Actor47: sbag
Location: 53,46
Owner: Neutral
Actor48: sbag
Location: 52,46
Owner: Neutral
Actor49: sbag
Location: 51,46
Owner: Neutral
Actor50: sbag
Location: 50,46
Owner: Neutral
Actor51: sbag
Location: 49,46
Owner: Neutral
Actor52: sbag
Location: 48,46
Owner: Neutral
Actor53: sbag
Location: 42,46
Owner: Neutral
Actor54: sbag
Location: 41,46
Owner: Neutral
Actor55: sbag
Location: 40,46
Owner: Neutral
Actor56: t01
Location: 33,32
Owner: Neutral
Actor57: t01
Location: 33,34
Owner: Neutral
Actor58: tc01
Location: 47,27
Owner: Neutral
Actor59: t01
Location: 42,18
Owner: Neutral
Actor60: t01
Location: 41,16
Owner: Neutral
Actor61: t01
Location: 36,18
Owner: Neutral
Actor62: t01
Location: 15,50
Owner: Neutral
Actor63: t01
Location: 6,54
Owner: Neutral
Actor64: t01
Location: 11,48
Owner: Neutral
Actor65: tc01
Location: 14,33
Owner: Neutral
Actor66: tc04
Location: 17,35
Owner: Neutral
Actor67: tc01
Location: 9,19
Owner: Neutral
Actor68: tc04
Location: 11,20
Owner: Neutral
Actor69: t06
Location: 37,8
Owner: Neutral
Actor70: t03
Location: 33,8
Owner: Neutral
Actor71: t02
Location: 36,9
Owner: Neutral
Actor72: t01
Location: 32,7
Owner: Neutral
Actor73: tc04
Location: 50,9
Owner: Neutral
Actor74: tc01
Location: 45,7
Owner: Neutral
Actor75: tc01
Location: 38,13
Owner: Neutral
Actor76: tc02
Location: 35,22
Owner: Neutral
Actor77: tc05
Location: 32,21
Owner: Neutral
Actor78: t10
Location: 17,47
Owner: Neutral
Actor79: t13
Location: 16,50
Owner: Neutral
Actor80: tc01
Location: 15,48
Owner: Neutral
Actor81: tc02
Location: 6,51
Owner: Neutral
Actor82: tc02
Location: 3,47
Owner: Neutral
Actor83: tc04
Location: 3,51
Owner: Neutral
Actor84: tc04
Location: 5,47
Owner: Neutral
Actor85: tc04
Location: 9,54
Owner: Neutral
Actor86: tc04
Location: 3,40
Owner: Neutral
Actor87: t13
Location: 4,42
Owner: Neutral
Actor88: t11
Location: 10,12
Owner: Neutral
Actor89: t15
Location: 4,10
Owner: Neutral
Actor90: t16
Location: 3,9
Owner: Neutral
Actor91: tc02
Location: 5,12
Owner: Neutral
Actor92: tc01
Location: 4,7
Owner: Neutral
Actor93: tc04
Location: 20,11
Owner: Neutral
Actor94: tc04
Location: 19,47
Owner: Neutral
Actor95: tc05
Location: 20,49
Owner: Neutral
Actor96: tc04
Location: 40,17
Owner: Neutral
Actor97: tc01
Location: 44,36
Owner: Neutral
Actor98: tc04
Location: 39,37
Owner: Neutral
Actor99: tc02
Location: 40,30
Owner: Neutral
Actor100: tc02
Location: 30,32
Owner: Neutral
Actor101: t10
Location: 32,33
Owner: Neutral
Actor102: tc04
Location: 37,54
Owner: Neutral
Actor103: tc02
Location: 34,53
Owner: Neutral
Actor104: t01
Location: 31,53
Owner: Neutral
Actor105: t01
Location: 16,54
Owner: Neutral
Actor106: t02
Location: 18,55
Owner: Neutral
Actor107: t11
Location: 25,32
Owner: Neutral
Actor108: t11
Location: 41,44
Owner: Neutral
Actor109: tc01
Location: 51,44
Owner: Neutral
Actor110: tc04
Location: 27,40
Owner: Neutral
Actor111: tc05
Location: 30,42
Owner: Neutral
Actor112: t07
Location: 31,39
Owner: Neutral
Actor113: t06
Location: 26,42
Owner: Neutral
Actor114: t03
Location: 28,43
Owner: Neutral
sam1: sam
Location: 11,20
Owner: Nod
sam2: sam
Location: 33,18
Owner: Nod
sam3: sam
Location: 16,7
Owner: Nod
Actor118: v05
Location: 17,49
Owner: Neutral
Actor119: v07
Location: 9,49
Owner: Neutral
Actor120: v06
Location: 4,53
Owner: Neutral
Actor121: v05
Location: 6,49
Owner: Neutral
Actor122: v04
Location: 4,50
Owner: Neutral
Actor123: v03
Location: 10,50
Owner: Neutral
Actor124: v01
Location: 3,48
Owner: Neutral
Actor125: v06
Location: 20,49
Owner: Neutral
Actor126: gtwr
Location: 41,54
Owner: GDI
Health: 41
Actor127: gtwr
Location: 41,50
Owner: GDI
Health: 16
Actor128: hq
Location: 51,47
Owner: GDI
Health: 39
Actor129: proc
Location: 44,46
Owner: GDI
Health: 33
FreeActor: False
Actor130: silo
Location: 49,54
Owner: GDI
Health: 53
Actor131: silo
Location: 47,47
Owner: GDI
Health: 20
Actor132: silo
Location: 47,53
Owner: GDI
Health: 13
Actor133: silo
Location: 51,54
Owner: GDI
Health: 28
Actor134: nuke
Location: 49,51
Owner: GDI
Health: 14
Actor135: nuke
Location: 49,48
Owner: GDI
Health: 20
Actor136: nuke
Location: 51,50
Owner: GDI
Health: 35
Actor137: pyle
Location: 47,49
Owner: GDI
Health: 18
Actor138: fix
Location: 44,52
Owner: GDI
Health: 28
gun1: gun
Location: 21,19
Owner: Nod
NodYard: fact
Location: 7,11
Owner: Nod
nodrefinery: proc
Location: 24,16
Owner: Nod
FreeActor: False
nodsilo1: silo
Location: 29,17
Owner: Nod
nodsilo2: silo
Location: 9,7
Owner: Nod
nodsilo3: silo
Location: 12,9
Owner: Nod
nodsilo4: silo
Location: 11,7
Owner: Nod
nodairfield: afld
Location: 27,14
Owner: Nod
nodpower1: nuke
Location: 23,14
Owner: Nod
nodpower2: nuke
Location: 10,9
Owner: Nod
nodpower3: nuke
Location: 6,8
Owner: Nod
nodpower4: nuke
Location: 8,8
Owner: Nod
handofnod: hand
Location: 27,17
Owner: Nod
gun2: gun
Location: 26,21
Owner: Nod
Actor153: arty
Location: 4,12
Owner: Nod
Facing: 508
Actor154: bggy
Location: 20,18
Owner: Nod
Actor155: ltnk
Location: 19,18
Owner: Nod
Actor156: bggy
Location: 10,21
Owner: Nod
Facing: 380
Actor157: ltnk
Location: 40,35
Owner: Nod
Facing: 636
Actor158: ltnk
Location: 45,23
Owner: Nod
Facing: 380
Actor159: ltnk
Location: 41,14
Owner: Nod
Facing: 636
Actor160: mtnk
Location: 42,55
Owner: GDI
Health: 35
Facing: 892
Actor161: mtnk
Location: 33,52
Owner: GDI
Health: 43
Facing: 124
Actor162: apc
Location: 37,50
Owner: GDI
Health: 68
Facing: 508
Actor163: apc
Location: 39,48
Owner: GDI
Health: 45
Facing: 508
Actor164: msam
Location: 42,49
Owner: GDI
Health: 40
Facing: 380
Actor165: msam
Location: 41,51
Owner: GDI
Health: 50
Facing: 636
Actor166: msam
Location: 33,48
Owner: GDI
Health: 65
Facing: 636
Actor167: harv
Location: 23,23
Owner: Nod
Facing: 380
Actor168: harv
Location: 38,53
Owner: GDI
Health: 51
Facing: 124
Actor169: jeep
Location: 36,52
Owner: GDI
Health: 72
Facing: 380
Actor170: jeep
Location: 34,51
Owner: GDI
Health: 31
Facing: 636
Actor171: arty
Location: 19,17
Owner: Nod
Actor172: ltnk
Location: 22,11
Owner: Nod
Facing: 636
Actor173: e1
Location: 45,36
Owner: Nod
SubCell: 3
Actor174: e1
Location: 44,36
Owner: Nod
SubCell: 4
Actor175: e3
Location: 41,36
Owner: Nod
Facing: 636
SubCell: 2
Actor176: e3
Location: 41,36
Owner: Nod
Facing: 636
SubCell: 3
Actor177: e3
Location: 42,17
Owner: Nod
Facing: 636
SubCell: 0
Actor178: e3
Location: 40,17
Owner: Nod
Facing: 636
SubCell: 4
Actor179: e4
Location: 42,15
Owner: Nod
Facing: 636
SubCell: 2
Actor180: e4
Location: 42,15
Owner: Nod
Facing: 636
SubCell: 3
Actor181: e1
Location: 16,53
Owner: Nod
Facing: 764
SubCell: 3
Actor182: e1
Location: 15,53
Owner: Nod
Facing: 764
SubCell: 2
Actor183: e1
Location: 17,53
Owner: Nod
Facing: 764
SubCell: 3
Actor184: e1
Location: 16,53
Owner: Nod
Facing: 764
SubCell: 2
Actor185: c3
Location: 18,50
Owner: Neutral
Facing: 636
SubCell: 1
Actor186: e1
Location: 46,51
Owner: GDI
Facing: 636
SubCell: 1
Actor187: e1
Location: 44,52
Owner: GDI
Health: 87
Facing: 892
SubCell: 2
Actor188: e1
Location: 43,53
Owner: GDI
Health: 31
Facing: 124
SubCell: 4
Actor189: e1
Location: 42,54
Owner: GDI
Health: 75
SubCell: 2
Actor190: e1
Location: 39,52
Owner: GDI
Health: 77
Facing: 636
SubCell: 4
Actor191: e1
Location: 42,53
Owner: GDI
Health: 69
Facing: 636
SubCell: 0
Actor192: e2
Location: 40,53
Owner: GDI
Health: 75
Facing: 124
SubCell: 2
Actor193: e2
Location: 45,51
Owner: GDI
Facing: 508
SubCell: 1
Actor194: e2
Location: 38,50
Owner: GDI
Health: 27
Facing: 892
SubCell: 0
Actor195: e2
Location: 46,52
Owner: GDI
Facing: 124
SubCell: 1
Actor196: e2
Location: 36,53
Owner: GDI
Health: 57
Facing: 636
SubCell: 0
Actor197: e2
Location: 37,54
Owner: GDI
Facing: 124
SubCell: 1
Actor198: e3
Location: 27,40
Owner: Nod
SubCell: 4
Actor199: e3
Location: 29,40
Owner: Nod
SubCell: 3
Actor200: e3
Location: 48,27
Owner: Nod
SubCell: 3
Actor201: e1
Location: 27,21
Owner: Nod
SubCell: 3
Actor202: e1
Location: 27,21
Owner: Nod
SubCell: 4
Actor203: e1
Location: 27,21
Owner: Nod
SubCell: 2
Actor204: e1
Location: 27,21
Owner: Nod
SubCell: 1
Actor205: e3
Location: 28,21
Owner: Nod
SubCell: 4
Actor206: e3
Location: 28,21
Owner: Nod
SubCell: 2
Actor207: e3
Location: 29,21
Owner: Nod
SubCell: 1
Actor208: e3
Location: 29,21
Owner: Nod
SubCell: 3
Actor209: e4
Location: 30,21
Owner: Nod
SubCell: 1
Actor210: e4
Location: 30,21
Owner: Nod
SubCell: 3
Actor211: e4
Location: 30,21
Owner: Nod
SubCell: 2
Actor212: e4
Location: 30,21
Owner: Nod
SubCell: 4
Actor213: e1
Location: 13,12
Owner: Nod
SubCell: 3
Actor214: e1
Location: 14,12
Owner: Nod
SubCell: 1
Actor215: e1
Location: 15,11
Owner: Nod
SubCell: 0
Actor216: e3
Location: 5,7
Owner: Nod
SubCell: 3
Actor217: e3
Location: 7,7
Owner: Nod
SubCell: 3
Actor218: e3
Location: 19,15
Owner: Nod
SubCell: 1
Actor219: e3
Location: 20,16
Owner: Nod
SubCell: 1
DefaultChinookTarget: waypoint
Location: 41,56
Owner: Neutral
DefaultCameraPosition: waypoint
Location: 41,49
Owner: Neutral
waypoint16: waypoint
Location: 10,22
Owner: Neutral
waypoint15: waypoint
Location: 53,45
Owner: Neutral
waypoint14: waypoint
Location: 53,40
Owner: Neutral
waypoint13: waypoint
Location: 13,26
Owner: Neutral
waypoint12: waypoint
Location: 52,25
Owner: Neutral
waypoint11: waypoint
Location: 36,27
Owner: Neutral
waypoint10: waypoint
Location: 38,32
Owner: Neutral
waypoint9: waypoint
Location: 47,43
Owner: Neutral
waypoint8: waypoint
Location: 24,55
Owner: Neutral
waypoint7: waypoint
Location: 43,40
Owner: Neutral
waypoint6: waypoint
Location: 24,38
Owner: Neutral
waypoint5: waypoint
Location: 20,29
Owner: Neutral
waypoint4: waypoint
Location: 23,24
Owner: Neutral
waypoint3: waypoint
Location: 5,43
Owner: Neutral
waypoint2: waypoint
Location: 8,47
Owner: Neutral
waypoint1: waypoint
Location: 8,53
Owner: Neutral
waypoint0: waypoint
Location: 19,53
Owner: Neutral
Actor239: moneycrate
Owner: Neutral
Location: 5,42
Rules: cnc|rules/campaign-maprules.yaml, cnc|rules/campaign-tooltips.yaml, cnc|rules/campaign-palettes.yaml, rules.yaml
FluentMessages: cnc|fluent/lua.ftl, cnc|fluent/campaign.ftl, map.ftl

View File

@@ -0,0 +1,154 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, gdi08a.lua, gdi08a-AI.lua
MusicPlaylist:
StartingMusic: march
VictoryMusic: gdi_win1
MissionData:
Briefing: briefing
BriefingVideo: gdi8a.vqa
BackgroundVideo: tbrinfo1.vqa
WinVideo: paratrop.vqa
LossVideo: gameover.vqa
SmudgeLayer@SCORCH:
InitialSmudges:
42,56: sc1,0
41,52: sc6,0
38,51: sc2,0
43,50: sc3,0
40,48: sc4,0
47,46: sc5,0
ATWR:
Buildable:
Prerequisites: ~disabled
NUK2:
Buildable:
Prerequisites: ~disabled
HPAD:
Buildable:
Prerequisites: ~disabled
BRIK:
Buildable:
Prerequisites: ~disabled
EYE:
Buildable:
Prerequisites: ~disabled
OBLI:
Buildable:
Prerequisites: ~disabled
TMPL:
Buildable:
Prerequisites: ~disabled
HTNK:
Buildable:
Prerequisites: ~disabled
TRAN:
Buildable:
Prerequisites: ~disabled
ORCA:
Buildable:
Prerequisites: ~disabled
RMBO:
Buildable:
Prerequisites: ~disabled
MSAM:
Buildable:
Prerequisites: ~disabled
MCV:
Buildable:
Prerequisites: ~disabled
BOAT:
Buildable:
Prerequisites: ~disabled
FTNK:
Buildable:
Prerequisites: ~disabled
STNK:
Buildable:
Prerequisites: ~disabled
HELI:
Buildable:
Prerequisites: ~disabled
LTNK:
Buildable:
Prerequisites: ~afld
ARTY:
Buildable:
Prerequisites: ~disabled
E4:
Buildable:
Prerequisites: barracks
E5:
Buildable:
Prerequisites: ~disabled
MLRS:
Buildable:
Prerequisites: ~disabled
CYCL:
Buildable:
Prerequisites: ~disabled
GTWR:
Buildable:
Prerequisites: ~disabled
SBAG:
Buildable:
Queue: Support.GDI, Support.Nod
GUN:
Buildable:
Queue: Support.GDI, Support.Nod
C3:
Tooltip:
Name: actor-c3-name
SAM:
Buildable:
Prerequisites: ~disabled
^Bridge:
DamageMultiplier@INVULNERABLE:
Modifier: 0
BRIDGEHUT:
-Targetable:
airstrike.proxy:
AirstrikePower:
SquadSize: 2
SquadOffset: -1536, 1024, 0
HQ:
Tooltip:
-AirstrikePower:
Buildable:
Description: actor-hq-description
AFLD:
RallyPoint:
Path: -5,2