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

Binary file not shown.

View File

@@ -0,0 +1,5 @@
## rules.yaml
briefing =
GDI is developing a new, heavily armored tank. Our spies have located the GDI R&D base.
Use your small strike force to breach the facility. Ensure the tanks in the base are destroyed, as well as the factory.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@@ -0,0 +1,729 @@
MapFormat: 12
RequiresMod: cnc
Title: 10b: Destroy the Mammoth Tank Facility
Author: Westwood Studios
Tileset: DESERT
MapSize: 64,64
Bounds: 5,8,56,51
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: gdi
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Faction: Random
PlayerReference@GDI:
Name: GDI
Faction: gdi
Color: F6D679
Enemies: Nod
Bot: campaign
PlayerReference@Nod:
Name: Nod
AllowBots: False
Playable: True
Required: True
Faction: nod
LockFaction: True
LockColor: True
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI
Actors:
Actor0: brik
Location: 38,55
Owner: Neutral
Actor1: brik
Location: 37,55
Owner: Neutral
Actor2: brik
Location: 36,55
Owner: Neutral
Actor3: brik
Location: 35,55
Owner: Neutral
Actor4: brik
Location: 34,55
Owner: Neutral
Actor5: brik
Location: 33,55
Owner: Neutral
Actor6: brik
Location: 32,55
Owner: Neutral
Actor7: brik
Location: 31,55
Owner: Neutral
Actor8: brik
Location: 30,55
Owner: Neutral
Actor9: brik
Location: 29,55
Owner: Neutral
Actor10: brik
Location: 28,55
Owner: Neutral
Actor11: brik
Location: 27,55
Owner: Neutral
Actor12: brik
Location: 26,55
Owner: Neutral
Actor13: brik
Location: 25,55
Owner: Neutral
Actor14: brik
Location: 24,55
Owner: Neutral
Actor15: brik
Location: 23,55
Owner: Neutral
Actor16: brik
Location: 22,55
Owner: Neutral
Actor17: brik
Location: 21,55
Owner: Neutral
Actor18: brik
Location: 20,55
Owner: Neutral
Actor19: brik
Location: 19,55
Owner: Neutral
Actor20: brik
Location: 18,55
Owner: Neutral
Actor21: brik
Location: 17,55
Owner: Neutral
Actor22: brik
Location: 38,54
Owner: Neutral
Actor23: brik
Location: 37,54
Owner: Neutral
Actor24: cycl
Location: 30,54
Owner: Neutral
Actor25: cycl
Location: 29,54
Owner: Neutral
Actor26: cycl
Location: 28,54
Owner: Neutral
Actor27: cycl
Location: 27,54
Owner: Neutral
Actor28: cycl
Location: 26,54
Owner: Neutral
Actor29: cycl
Location: 25,54
Owner: Neutral
Actor30: cycl
Location: 24,54
Owner: Neutral
Actor31: cycl
Location: 23,54
Owner: Neutral
Actor32: brik
Location: 17,54
Owner: Neutral
Actor33: brik
Location: 38,53
Owner: Neutral
Actor34: cycl
Location: 30,53
Owner: Neutral
Actor35: cycl
Location: 23,53
Owner: Neutral
Actor36: brik
Location: 17,53
Owner: Neutral
Actor37: brik
Location: 38,52
Owner: Neutral
Actor38: cycl
Location: 30,52
Owner: Neutral
Actor39: cycl
Location: 23,52
Owner: Neutral
Actor40: brik
Location: 17,52
Owner: Neutral
Actor41: brik
Location: 38,51
Owner: Neutral
Actor42: cycl
Location: 30,51
Owner: Neutral
Actor43: cycl
Location: 23,51
Owner: Neutral
Actor44: brik
Location: 18,51
Owner: Neutral
Actor45: brik
Location: 17,51
Owner: Neutral
Actor46: brik
Location: 38,50
Owner: Neutral
Actor47: cycl
Location: 30,50
Owner: Neutral
Actor48: cycl
Location: 29,50
Owner: Neutral
Actor49: cycl
Location: 28,50
Owner: Neutral
Actor50: cycl
Location: 25,50
Owner: Neutral
Actor51: cycl
Location: 24,50
Owner: Neutral
Actor52: cycl
Location: 23,50
Owner: Neutral
Actor53: brik
Location: 18,50
Owner: Neutral
Actor54: brik
Location: 17,50
Owner: Neutral
Actor55: brik
Location: 38,49
Owner: Neutral
Actor56: brik
Location: 38,48
Owner: Neutral
Actor57: brik
Location: 37,48
Owner: Neutral
Actor58: brik
Location: 38,47
Owner: Neutral
Actor59: brik
Location: 37,47
Owner: Neutral
Actor60: brik
Location: 36,47
Owner: Neutral
Actor61: brik
Location: 35,47
Owner: Neutral
Actor62: brik
Location: 18,47
Owner: Neutral
Actor63: brik
Location: 17,47
Owner: Neutral
Actor64: brik
Location: 35,46
Owner: Neutral
Actor65: brik
Location: 18,46
Owner: Neutral
Actor66: brik
Location: 17,46
Owner: Neutral
Actor67: brik
Location: 35,45
Owner: Neutral
Actor68: brik
Location: 17,45
Owner: Neutral
Actor69: brik
Location: 35,44
Owner: Neutral
Actor70: brik
Location: 17,44
Owner: Neutral
Actor71: brik
Location: 35,43
Owner: Neutral
Actor72: brik
Location: 17,43
Owner: Neutral
Actor73: brik
Location: 35,42
Owner: Neutral
Actor74: brik
Location: 34,42
Owner: Neutral
Actor75: brik
Location: 29,42
Owner: Neutral
Actor76: brik
Location: 28,42
Owner: Neutral
Actor77: brik
Location: 23,42
Owner: Neutral
Actor78: brik
Location: 22,42
Owner: Neutral
Actor79: brik
Location: 18,42
Owner: Neutral
Actor80: brik
Location: 17,42
Owner: Neutral
Actor81: brik
Location: 35,41
Owner: Neutral
Actor82: brik
Location: 34,41
Owner: Neutral
Actor83: brik
Location: 33,41
Owner: Neutral
Actor84: brik
Location: 32,41
Owner: Neutral
Actor85: brik
Location: 31,41
Owner: Neutral
Actor86: brik
Location: 30,41
Owner: Neutral
Actor87: brik
Location: 29,41
Owner: Neutral
Actor88: brik
Location: 28,41
Owner: Neutral
Actor89: brik
Location: 23,41
Owner: Neutral
Actor90: brik
Location: 22,41
Owner: Neutral
Actor91: brik
Location: 21,41
Owner: Neutral
Actor92: brik
Location: 20,41
Owner: Neutral
Actor93: brik
Location: 19,41
Owner: Neutral
Actor94: brik
Location: 18,41
Owner: Neutral
Actor95: brik
Location: 17,41
Owner: Neutral
Actor96: t18
Location: 43,54
Owner: Neutral
Actor97: t08
Location: 42,56
Owner: Neutral
Actor98: t18
Location: 5,29
Owner: Neutral
Actor99: t18
Location: 13,31
Owner: Neutral
Actor100: t18
Location: 17,18
Owner: Neutral
Actor101: t18
Location: 30,15
Owner: Neutral
Actor102: t18
Location: 57,12
Owner: Neutral
Actor103: t18
Location: 36,23
Owner: Neutral
Actor104: t18
Location: 18,55
Owner: Neutral
Actor105: t18
Location: 35,45
Owner: Neutral
Actor106: t18
Location: 42,48
Owner: Neutral
Actor107: t18
Location: 54,48
Owner: Neutral
Actor108: t08
Location: 57,48
Owner: Neutral
Actor109: t08
Location: 57,51
Owner: Neutral
Actor110: t08
Location: 53,50
Owner: Neutral
Actor111: t08
Location: 54,51
Owner: Neutral
Actor112: t08
Location: 49,50
Owner: Neutral
Actor113: t08
Location: 48,49
Owner: Neutral
Actor114: t08
Location: 51,53
Owner: Neutral
Actor115: t08
Location: 46,52
Owner: Neutral
Silo1: silo
Location: 22,43
Owner: GDI
Silo2: silo
Location: 23,45
Owner: GDI
WeaponsFactory: weap
Location: 35,49
Owner: GDI
Actor119: v20
Location: 56,46
Owner: Neutral
Actor120: v21
Location: 54,47
Owner: Neutral
Actor121: v22
Location: 48,47
Owner: Neutral
Actor122: v23
Location: 52,44
Owner: Neutral
Actor123: v24
Location: 57,48
Owner: Neutral
Actor124: v25
Location: 57,51
Owner: Neutral
Actor125: v26
Location: 47,50
Owner: Neutral
Actor126: v27
Location: 50,50
Owner: Neutral
Actor127: v27
Location: 51,50
Owner: Neutral
Actor128: v27
Location: 59,49
Owner: Neutral
Actor129: v30
Location: 59,52
Owner: Neutral
Actor130: v31
Location: 43,47
Owner: Neutral
Actor131: v32
Location: 42,48
Owner: Neutral
Actor132: v20
Location: 47,51
Owner: Neutral
Actor133: v21
Location: 52,51
Owner: Neutral
Actor134: v22
Location: 54,52
Owner: Neutral
Actor135: v23
Location: 44,48
Owner: Neutral
Actor136: v24
Location: 46,48
Owner: Neutral
Actor137: v26
Location: 54,50
Owner: Neutral
CommCenter: hq
Location: 30,42
Owner: GDI
ConYard: fact
Location: 32,44
Owner: GDI
PowerPlant1: nuke
Location: 33,47
Owner: GDI
PowerPlant2: nuke
Location: 18,43
Owner: GDI
PowerPlant3: nuke
Location: 35,52
Owner: GDI
PowerPlant4: nuke
Location: 20,42
Owner: GDI
Barracks: pyle
Location: 30,45
Owner: GDI
PowerPlant5: nuke
Location: 18,52
Owner: GDI
GuardTower1: gtwr
Location: 23,40
Owner: GDI
GuardTower2: gtwr
Location: 28,40
Owner: GDI
Actor148: jeep
Location: 56,17
Owner: GDI
Facing: 636
Mammoth1: htnk
Location: 29,53
Owner: GDI
Mammoth2: htnk
Location: 26,52
Owner: GDI
Mammoth3: htnk
Location: 24,53
Owner: GDI
PatrollingMammoth: htnk
Location: 59,42
Owner: GDI
Facing: 124
Actor153: arty
Location: 27,28
Owner: Nod
MediumTank1: mtnk
Location: 43,28
Owner: GDI
Facing: 764
MediumTank2: mtnk
Location: 43,29
Owner: GDI
Facing: 764
Rifleman1: e1
Location: 16,54
Owner: GDI
SubCell: 3
Rifleman2: e1
Location: 16,54
Owner: GDI
SubCell: 1
Rifleman3: e1
Location: 16,54
Owner: GDI
SubCell: 2
Rifleman4: e1
Location: 16,54
Owner: GDI
SubCell: 4
Actor160: e1
Location: 17,14
Owner: GDI
Facing: 764
SubCell: 3
Actor161: e1
Location: 17,15
Owner: GDI
Facing: 764
SubCell: 1
Actor162: e1
Location: 17,15
Owner: GDI
Facing: 764
SubCell: 2
Actor163: e1
Location: 17,14
Owner: GDI
Facing: 764
SubCell: 4
Actor164: e2
Location: 15,28
Owner: GDI
SubCell: 2
Actor165: e2
Location: 15,28
Owner: GDI
SubCell: 1
Actor166: e2
Location: 15,28
Owner: GDI
SubCell: 3
Actor167: e2
Location: 15,28
Owner: GDI
SubCell: 4
Actor168: e2
Location: 36,9
Owner: GDI
Facing: 636
SubCell: 4
Actor169: e2
Location: 36,9
Owner: GDI
Facing: 636
SubCell: 3
Actor170: e2
Location: 32,16
Owner: GDI
SubCell: 1
Actor171: e2
Location: 32,16
Owner: GDI
SubCell: 2
Actor172: e2
Location: 57,18
Owner: GDI
Facing: 636
SubCell: 2
Actor173: e2
Location: 57,18
Owner: GDI
Facing: 636
SubCell: 0
Actor174: c8
Location: 57,54
Owner: Neutral
SubCell: 0
Actor175: c3
Location: 56,49
Owner: Neutral
Facing: 380
SubCell: 2
Actor176: c4
Location: 56,49
Owner: Neutral
Facing: 892
SubCell: 3
Actor177: e3
Location: 26,27
Owner: Nod
SubCell: 1
Actor178: e3
Location: 26,27
Owner: Nod
SubCell: 3
Actor179: e3
Location: 26,27
Owner: Nod
SubCell: 2
Actor180: e3
Location: 26,27
Owner: Nod
SubCell: 4
Actor181: e3
Location: 28,27
Owner: Nod
SubCell: 2
Actor182: e3
Location: 29,27
Owner: Nod
SubCell: 1
Actor183: e3
Location: 29,27
Owner: Nod
SubCell: 3
Actor184: e3
Location: 28,27
Owner: Nod
SubCell: 4
Actor185: e6
Location: 27,27
Owner: Nod
SubCell: 2
Actor186: e3
Location: 29,45
Owner: GDI
SubCell: 3
Actor187: e3
Location: 29,45
Owner: GDI
SubCell: 4
Grenadier1: e2
Location: 40,19
Owner: GDI
Facing: 764
SubCell: 2
Grenadier2: e2
Location: 40,18
Owner: GDI
Facing: 764
SubCell: 4
Grenadier3: e2
Location: 41,19
Owner: GDI
Facing: 764
SubCell: 1
Grenadier4: e2
Location: 41,18
Owner: GDI
Facing: 764
SubCell: 3
Actor192: e3
Location: 19,51
Owner: GDI
SubCell: 2
Actor193: e3
Location: 20,51
Owner: GDI
SubCell: 1
Actor194: e3
Location: 37,52
Owner: GDI
Facing: 124
SubCell: 4
Actor195: e3
Location: 33,54
Owner: GDI
SubCell: 4
Actor196: e3
Location: 34,54
Owner: GDI
SubCell: 3
DefaultCameraPosition: waypoint
Location: 20,21
Owner: Neutral
ChinookEntry: waypoint
Location: 20, 8
Owner: Neutral
ChinookTarget: waypoint
Location: 27,25
Owner: Neutral
MammothWaypoint1: waypoint
Location: 9,37
Owner: Neutral
MammothWaypoint2: waypoint
Location: 54,14
Owner: Neutral
NorthEntrance: waypoint
Location: 29,36
Owner: Neutral
RiflemenWaypoint1: waypoint
Location: 16,41
Owner: Neutral
RiflemenWaypoint2: waypoint
Location: 16,54
Owner: Neutral
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,137 @@
--[[
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.
]]
if Difficulty == "easy" then
Rambo = "rmbo.easy"
elseif Difficulty == "hard" then
Rambo = "rmbo.hard"
else
Rambo = "rmbo"
end
GDIBuildings = { ConYard, PowerPlant1, PowerPlant2, PowerPlant3, PowerPlant4, PowerPlant5, Barracks, Silo1, Silo2, WeaponsFactory, CommCenter, GuardTower1, GuardTower2 }
Mammoths = { Mammoth1, Mammoth2, Mammoth3 }
Grenadiers = { Grenadier1, Grenadier2, Grenadier3, Grenadier4 }
MediumTanks = { MediumTank1, MediumTank2 }
Riflemen = { Rifleman1, Rifleman2, Rifleman3, Rifleman4 }
MammothPatrolPath = { MammothWaypoint1.Location, MammothWaypoint2.Location }
RiflemenPatrolPath = { RiflemenWaypoint1.Location, RiflemenWaypoint2.Location }
InfantrySquad = { "e1", "e1", "e1", "e1", "e1" }
DeliverCommando = function()
Media.PlaySpeechNotification(Nod, "Reinforce")
local rambo = Reinforcements.ReinforceWithTransport(Nod, "tran.in", { Rambo }, { ChinookEntry.Location, ChinookTarget.Location }, { ChinookEntry.Location })[2][1]
Trigger.OnKilled(rambo, function()
Nod.MarkFailedObjective(KeepRamboAliveObjective)
end)
Trigger.OnPlayerWon(Nod, function(Nod)
if not rambo.IsDead then
Nod.MarkCompletedObjective(KeepRamboAliveObjective)
end
end)
end
WorldLoaded = function()
Nod = Player.GetPlayer("Nod")
GDI = Player.GetPlayer("GDI")
GDI.Cash = 10000
Camera.Position = DefaultCameraPosition.CenterPosition
InitObjectives(Nod)
GDIObjective = AddPrimaryObjective(GDI, "")
WarFactoryObjective = AddPrimaryObjective(Nod, "destroy-capture-warfactory")
DestroyTanksObjective = AddPrimaryObjective(Nod, "destroy-mammoth-tanks")
KeepRamboAliveObjective = AddSecondaryObjective(Nod, "keep-commando-alive")
Trigger.OnKilledOrCaptured(WeaponsFactory, function()
Nod.MarkCompletedObjective(WarFactoryObjective)
end)
Trigger.OnAllKilled(Mammoths, function()
Nod.MarkCompletedObjective(DestroyTanksObjective)
end)
Trigger.AfterDelay(DateTime.Seconds(1), DeliverCommando)
Utils.Do(Mammoths, function(mammoth)
mammoth.Stance = "HoldFire"
end)
Utils.Do(MediumTanks, function(tank)
Trigger.OnDamaged(tank, function()
if DamageTrigger then
return
end
DamageTrigger = true
Utils.Do(Grenadiers, function(grenadier)
if not grenadier.IsDead then
grenadier.AttackMove(tank.Location)
end
end)
end)
end)
Utils.Do(Grenadiers, function(grenadier)
Trigger.OnDamaged(grenadier, function()
if DamageTrigger then
return
end
DamageTrigger = true
Utils.Do(MediumTanks, function(tank)
if not tank.IsDead then
tank.AttackMove(grenadier.Location)
end
end)
end)
end)
Utils.Do(GDIBuildings, function(building)
RepairBuilding(GDI, building, 0.75)
end)
Trigger.OnEnteredFootprint({ NorthEntrance.Location }, function(a, id)
if a.Owner == Nod then
Trigger.RemoveFootprintTrigger(id)
if Barracks.IsDead or Barracks.Owner ~= GDI then
return
end
Barracks.Build(InfantrySquad, function(squad)
Utils.Do(squad, function(unit)
if not unit.IsDead then
unit.AttackMove(NorthEntrance.Location)
end
end)
end)
end
end)
Utils.Do(Riflemen, function(rifleman)
rifleman.Patrol(RiflemenPatrolPath)
end)
PatrollingMammoth.Patrol(MammothPatrolPath)
end
Tick = function()
if DateTime.GameTime > 2 and Nod.HasNoRequiredUnits() then
GDI.MarkCompletedObjective(GDIObjective)
end
end

View File

@@ -0,0 +1,55 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, nod10b.lua
MissionData:
Briefing: briefing
BackgroundVideo: kanepre.vqa
LossVideo: deskill.vqa
WinVideo: tankkill.vqa
BriefingVideo: nod10b.vqa
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
Default: normal
-LegacyBridgeLayer:
Player:
PlayerResources:
DefaultCash: 0
TRAN.IN:
Inherits: TRAN
RejectsOrders:
-Selectable:
RenderSprites:
Image: TRAN
Buildable:
Prerequisites: ~disabled
Interactable:
-RevealsShroud:
RMBO.easy:
Inherits: RMBO
Health:
HP: 30000
ChangesHealth:
Step: 500
Delay: 10
StartIfBelow: 50
DamageCooldown: 200
RenderSprites:
Image: RMBO
RMBO.hard:
Inherits: RMBO
-AutoTarget:
-AutoTargetPriority@DEFAULT:
-AutoTargetPriority@ATTACKANYTHING:
-AttackMove:
RenderSprites:
Image: RMBO