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,7 @@
## rules.yaml
briefing =
GDI has established a prison camp, where they are detaining some of the local political leaders.
Kane wishes to liberate these victims.
Destroy the GDI forces and capture the prison, do not destroy it.

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -0,0 +1,439 @@
MapFormat: 12
RequiresMod: cnc
Title: 03a: Sudanese Prison Break
Author: Westwood Studios
Tileset: DESERT
MapSize: 64,64
Bounds: 13,16,42,33
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: gdi
PlayerReference@GDI:
Name: GDI
Bot: campaign
Faction: gdi
Color: F5D378
Allies: GDI
Enemies: Nod
PlayerReference@Nod:
Name: Nod
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: nod
LockColor: True
Color: FE1100
LockSpawn: True
LockTeam: True
Allies: Nod
Enemies: GDI
Actors:
Actor0: sbag
Location: 30,23
Owner: Neutral
Actor1: sbag
Location: 29,23
Owner: Neutral
Actor2: sbag
Location: 28,23
Owner: Neutral
Actor3: sbag
Location: 22,23
Owner: Neutral
Actor4: sbag
Location: 21,23
Owner: Neutral
Actor5: sbag
Location: 20,23
Owner: Neutral
Actor6: sbag
Location: 19,23
Owner: Neutral
Actor7: sbag
Location: 30,22
Owner: Neutral
Actor8: sbag
Location: 19,22
Owner: Neutral
Actor9: sbag
Location: 30,21
Owner: Neutral
Actor10: sbag
Location: 19,21
Owner: Neutral
Actor11: sbag
Location: 18,21
Owner: Neutral
Actor12: sbag
Location: 17,21
Owner: Neutral
Actor13: sbag
Location: 30,20
Owner: Neutral
Actor14: sbag
Location: 17,20
Owner: Neutral
Actor15: sbag
Location: 16,20
Owner: Neutral
Actor16: sbag
Location: 15,20
Owner: Neutral
Actor17: sbag
Location: 14,20
Owner: Neutral
Actor18: sbag
Location: 13,20
Owner: Neutral
Actor19: sbag
Location: 30,19
Owner: Neutral
Actor20: sbag
Location: 17,19
Owner: Neutral
Actor21: sbag
Location: 13,19
Owner: Neutral
Actor22: sbag
Location: 30,18
Owner: Neutral
Actor23: sbag
Location: 13,18
Owner: Neutral
Actor24: sbag
Location: 30,17
Owner: Neutral
Actor25: sbag
Location: 17,17
Owner: Neutral
Actor26: sbag
Location: 13,17
Owner: Neutral
Actor27: sbag
Location: 30,16
Owner: Neutral
Actor28: sbag
Location: 29,16
Owner: Neutral
Actor29: sbag
Location: 28,16
Owner: Neutral
Actor30: sbag
Location: 27,16
Owner: Neutral
Actor31: sbag
Location: 26,16
Owner: Neutral
Actor32: sbag
Location: 25,16
Owner: Neutral
Actor33: sbag
Location: 24,16
Owner: Neutral
Actor34: sbag
Location: 23,16
Owner: Neutral
Actor35: sbag
Location: 22,16
Owner: Neutral
Actor36: sbag
Location: 21,16
Owner: Neutral
Actor37: sbag
Location: 20,16
Owner: Neutral
Actor38: sbag
Location: 19,16
Owner: Neutral
Actor39: sbag
Location: 18,16
Owner: Neutral
Actor40: sbag
Location: 17,16
Owner: Neutral
Actor41: sbag
Location: 16,16
Owner: Neutral
Actor42: sbag
Location: 15,16
Owner: Neutral
Actor43: sbag
Location: 14,16
Owner: Neutral
Actor44: sbag
Location: 13,16
Owner: Neutral
Actor45: t18
Location: 29,23
Owner: Neutral
Actor46: t08
Location: 43,17
Owner: Neutral
Actor47: t08
Location: 40,17
Owner: Neutral
Actor48: t18
Location: 42,18
Owner: Neutral
Actor49: t18
Location: 37,17
Owner: Neutral
Actor50: t18
Location: 25,42
Owner: Neutral
Actor51: t18
Location: 16,40
Owner: Neutral
Actor52: t08
Location: 39,37
Owner: Neutral
Actor53: t08
Location: 22,35
Owner: Neutral
Actor54: t08
Location: 15,38
Owner: Neutral
Actor55: t18
Location: 38,31
Owner: Neutral
Base2: pyle
Location: 25,20
Owner: GDI
Base1: fact
Location: 27,20
Owner: GDI
Base5: silo
Location: 23,17
Owner: GDI
Base4: silo
Location: 23,19
Owner: GDI
Base3: proc
Location: 20,17
Owner: GDI
Base6: nuke
Location: 25,17
Owner: GDI
Base7: nuke
Location: 27,17
Owner: GDI
GuardTower: gtwr
Location: 28,24
Owner: GDI
Actor64: v24
Location: 20,41
Owner: Neutral
Actor65: v26
Location: 43,18
Owner: Neutral
Actor66: v24
Location: 37,16
Owner: Neutral
Actor67: v20
Location: 13,37
Owner: Neutral
Actor68: v21
Location: 13,39
Owner: Neutral
Actor69: v22
Location: 13,41
Owner: Neutral
Actor70: v24
Location: 15,36
Owner: Neutral
Actor71: v25
Location: 17,41
Owner: Neutral
Actor72: v26
Location: 16,38
Owner: Neutral
Actor73: v19
Location: 27,42
Owner: GDI
Actor74: v19
Location: 29,42
Owner: Neutral
Actor75: v20
Location: 39,17
Owner: Neutral
Actor76: v21
Location: 43,16
Owner: Neutral
Actor78: v22
Location: 39,16
Owner: Neutral
Actor79: v26
Location: 37,19
Owner: Neutral
Humvee2: jeep
Location: 21,22
Owner: GDI
Facing: 512
Humvee1: jeep
Location: 20,22
Owner: GDI
Facing: 512
Actor84: jeep
Location: 18,17
Owner: GDI
Facing: 512
Actor89: jeep
Location: 29,34
Owner: GDI
Facing: 384
Actor95: e1
Location: 33,20
Owner: GDI
Facing: 512
SubCell: 2
Actor96: e1
Location: 34,19
Owner: GDI
Facing: 512
SubCell: 3
Actor99: e1
Location: 14,44
Owner: GDI
SubCell: 1
Actor100: e1
Location: 33,31
Owner: GDI
Facing: 384
SubCell: 4
Patrol3: e1
Location: 34,23
Owner: GDI
SubCell: 2
Facing: 384
Actor102: c1
Location: 19,40
Owner: Neutral
Facing: 384
SubCell: 1
Actor103: c3
Location: 19,39
Owner: Neutral
Facing: 384
SubCell: 3
Actor104: c5
Location: 15,42
Owner: Neutral
Facing: 128
SubCell: 2
Actor105: c6
Location: 14,37
Owner: Neutral
Health: 60
Facing: 384
SubCell: 1
Actor106: c7
Location: 15,41
Owner: Neutral
Facing: 896
SubCell: 0
Actor108: e1
Location: 34,31
Owner: GDI
Facing: 384
SubCell: 3
Patrol1: e1
Location: 34,25
Owner: GDI
SubCell: 2
Facing: 640
Actor111: e1
Location: 39,31
Owner: GDI
SubCell: 3
Actor112: e1
Location: 40,37
Owner: GDI
Facing: 384
SubCell: 0
Patrol4: e2
Location: 34,22
Owner: GDI
SubCell: 3
Facing: 384
Patrol2: e2
Location: 34,23
Owner: GDI
SubCell: 4
Facing: 640
Actor118: e2
Location: 42,18
Owner: GDI
Facing: 512
SubCell: 4
Actor119: e2
Location: 33,19
Owner: GDI
Facing: 512
SubCell: 0
TechCenter: miss
Location: 14,17
Owner: GDI
TibFieldHumvee01: jeep
Location: 52,19
Owner: GDI
VillageGuard01: e1
Location: 38,22
Owner: GDI
Facing: 384
SubCell: 2
VillageGuard02: e1
Location: 38,22
Owner: GDI
Facing: 384
SubCell: 3
VillageGuard03: e1
Location: 39,22
Owner: GDI
Facing: 640
SubCell: 3
PlayerBase: waypoint
Location: 50,38
Owner: Neutral
NodEntry: waypoint
Location: 54,40
Owner: Neutral
NodRallyPoint: waypoint
Location: 45,42
Owner: Neutral
AttackWaveSpawnA: waypoint
Location: 45,16
Owner: Neutral
AttackWaveSpawnB: waypoint
Location: 44,48
Owner: Neutral
AttackWaveSpawnC: waypoint
Location: 33,16
Owner: Neutral
PatrolA: waypoint
Location: 24,26
Owner: Neutral
PatrolB: waypoint
Location: 32,47
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,88 @@
--[[
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.
]]
NodUnits = { "bike", "e3", "e1", "bggy", "e1", "e3", "bike", "bggy" }
FirstAttackWave = { "e1", "e1", "e1", "e2", }
SecondThirdAttackWave = { "e1", "e1", "e2", }
GDIBase = { Base1, Base2, Base3, Base4, Base5, Base6, Base7 }
Humvees = { Humvee1, Humvee2 }
PatrolTeam = { Patrol1, Patrol2, Patrol3, Patrol4 }
PatrolRoute = { PatrolA.Location, PatrolB.Location }
SendAttackWave = function(units, spawnPoint)
Reinforcements.Reinforce(GDI, units, { spawnPoint }, DateTime.Seconds(1), function(actor)
IdleHunt(actor)
end)
end
WorldLoaded = function()
Nod = Player.GetPlayer("Nod")
GDI = Player.GetPlayer("GDI")
InitObjectives(Nod)
CapturePrison = AddPrimaryObjective(Nod, "capture-prison")
DestroyGDI = AddSecondaryObjective(Nod, "destroy-gdi-forces")
Trigger.OnCapture(TechCenter, function()
Trigger.AfterDelay(DateTime.Seconds(2), function()
Nod.MarkCompletedObjective(CapturePrison)
end)
end)
Trigger.OnKilled(TechCenter, function()
Nod.MarkFailedObjective(CapturePrison)
end)
Utils.Do(PatrolTeam, function(a)
a.Patrol(PatrolRoute, true)
end)
Media.PlaySpeechNotification(Nod, "Reinforce")
Reinforcements.Reinforce(Nod, NodUnits, { NodEntry.Location, NodRallyPoint.Location })
Trigger.AfterDelay(DateTime.Seconds(9), function()
Reinforcements.Reinforce(Nod, { "mcv" }, { NodEntry.Location, PlayerBase.Location })
end)
Trigger.AfterDelay(DateTime.Seconds(20), function() SendAttackWave(FirstAttackWave, AttackWaveSpawnA.Location) end)
Trigger.AfterDelay(DateTime.Seconds(50), function() SendAttackWave(SecondThirdAttackWave, AttackWaveSpawnB.Location) end)
Trigger.AfterDelay(DateTime.Seconds(100), function() SendAttackWave(SecondThirdAttackWave, AttackWaveSpawnC.Location) end)
Trigger.OnDamaged(GuardTower, function()
if not TowerDamaged then
TowerDamaged = true
Utils.Do(Humvees, function(unit)
IdleHunt(unit)
end)
end
end)
Trigger.OnAnyKilled(GDIBase, function()
if not BaseAttacked then
BaseAttacked = true
Utils.Do(GDI.GetGroundAttackers(), function(unit)
if not unit.IsDead then
IdleHunt(unit)
end
end)
end
end)
end
Tick = function()
if DateTime.GameTime > 2 then
if Nod.HasNoRequiredUnits() then
Nod.MarkFailedObjective(CapturePrison)
end
if GDI.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(DestroyGDI)
end
end
end

View File

@@ -0,0 +1,102 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, nod03a.lua
MusicPlaylist:
StartingMusic: chrg226m
VictoryMusic: nod_win1
MissionData:
Briefing: briefing
BriefingVideo: nod3.vqa
StartVideo: dessweep.vqa
WinVideo: desflees.vqa
LossVideo: flag.vqa
Player:
PlayerResources:
DefaultCash: 4000
HQ:
AirstrikePower:
Prerequisites: ~disabled
Tooltip:
Buildable:
Description: actor-hq-description
CYCL:
Buildable:
Prerequisites: ~disabled
NUK2:
Buildable:
Prerequisites: ~disabled
AFLD:
Buildable:
Prerequisites: ~disabled
HPAD:
Buildable:
Prerequisites: ~disabled
FIX:
Buildable:
Prerequisites: ~disabled
TMPL:
Buildable:
Prerequisites: ~disabled
GUN:
Buildable:
Prerequisites: ~disabled
SAM:
Buildable:
Prerequisites: ~disabled
OBLI:
Buildable:
Prerequisites: ~disabled
GTWR:
Buildable:
Prerequisites: ~disabled
SBAG:
Buildable:
Prerequisites: ~disabled
BRIK:
Buildable:
Prerequisites: ~disabled
WEAP:
Buildable:
Prerequisites: ~disabled
EYE:
Buildable:
Prerequisites: ~disabled
ATWR:
Buildable:
Prerequisites: ~disabled
E4:
Buildable:
Prerequisites: ~disabled
E5:
Buildable:
Prerequisites: ~disabled
RMBO:
Buildable:
Prerequisites: ~disabled
MISS:
Tooltip:
Name: actor-prison-name
CaptureManager:
Capturable:
Types: building