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,65 @@
--[[
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.
]]
NodInBaseTeam = { RushBuggy, RushRifle1, RushRifle2, RushRifle3 }
MobileConstructionVehicle = { "mcv" }
EngineerReinforcements = { "e6", "e6", "e6" }
VehicleReinforcements = { "jeep" }
AttackerSquadSize = 3
Reinforce = function(units)
Media.PlaySpeechNotification(GDI, "Reinforce")
ReinforceWithLandingCraft(GDI, units, lstStart.Location, lstEnd.Location)
end
BridgeheadSecured = function()
Reinforce(MobileConstructionVehicle)
Trigger.AfterDelay(DateTime.Seconds(15), NodAttack)
Trigger.AfterDelay(DateTime.Seconds(30), function() Reinforce(EngineerReinforcements) end)
Trigger.AfterDelay(DateTime.Seconds(120), function() Reinforce(VehicleReinforcements) end)
end
NodAttack = function()
local nodUnits = Nod.GetGroundAttackers()
if #nodUnits > AttackerSquadSize * 2 then
local attackers = Utils.Skip(nodUnits, #nodUnits - AttackerSquadSize)
Utils.Do(attackers, function(unit)
unit.AttackMove(NodAttackWaypoint.Location)
IdleHunt(unit)
end)
Trigger.OnAllKilled(attackers, function() Trigger.AfterDelay(DateTime.Seconds(15), NodAttack) end)
end
end
WorldLoaded = function()
GDI = Player.GetPlayer("GDI")
Nod = Player.GetPlayer("Nod")
InitObjectives(GDI)
NodObjective = AddPrimaryObjective(Nod, "")
GDIObjective1 = AddPrimaryObjective(GDI, "eliminate-nod")
GDIObjective2 = AddSecondaryObjective(GDI, "capture-refinery")
Trigger.OnCapture(NodRefinery, function() GDI.MarkCompletedObjective(GDIObjective2) end)
Trigger.OnKilled(NodRefinery, function() GDI.MarkFailedObjective(GDIObjective2) end)
Trigger.OnAllKilled(NodInBaseTeam, BridgeheadSecured)
end
Tick = function()
if GDI.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(NodObjective)
end
if Nod.HasNoRequiredUnits() then
GDI.MarkCompletedObjective(GDIObjective1)
end
end

BIN
mods/cnc/maps/gdi02/map.bin Normal file

Binary file not shown.

View File

@@ -0,0 +1,5 @@
## rules.yaml
briefing =
Defend your position, deploy the MCV, then build a sizable force to search out and destroy the Nod base in the area.
All Nod units and structures must be either destroyed or captured to complete the objective.

BIN
mods/cnc/maps/gdi02/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,629 @@
MapFormat: 12
RequiresMod: cnc
Title: 02: Knock out the Refinery
Author: Westwood Studios
Tileset: TEMPERAT
MapSize: 64,64
Bounds: 31,31,31,31
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@GDI:
Name: GDI
Playable: True
AllowBots: False
Required: True
LockFaction: True
Faction: gdi
LockColor: True
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI
Enemies: Nod
PlayerReference@Nod:
Name: Nod
Faction: nod
Color: FE1100
Allies: Nod
Enemies: GDI
Bot: campaign
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: gdi
Actors:
Actor0: sbag
Location: 50,55
Owner: Neutral
Actor1: sbag
Location: 49,55
Owner: Neutral
Actor2: sbag
Location: 48,55
Owner: Neutral
Actor3: sbag
Location: 51,54
Owner: Neutral
Actor4: sbag
Location: 50,54
Owner: Neutral
Actor5: sbag
Location: 61,38
Owner: Neutral
Actor6: sbag
Location: 60,38
Owner: Neutral
Actor7: sbag
Location: 59,38
Owner: Neutral
Actor8: sbag
Location: 58,38
Owner: Neutral
Actor9: sbag
Location: 57,38
Owner: Neutral
Actor10: sbag
Location: 53,38
Owner: Neutral
Actor11: sbag
Location: 52,38
Owner: Neutral
Actor12: sbag
Location: 51,38
Owner: Neutral
Actor13: sbag
Location: 50,38
Owner: Neutral
Actor14: sbag
Location: 49,38
Owner: Neutral
Actor15: sbag
Location: 48,38
Owner: Neutral
Actor16: sbag
Location: 47,38
Owner: Neutral
Actor17: sbag
Location: 44,38
Owner: Neutral
Actor18: sbag
Location: 43,38
Owner: Neutral
Actor19: sbag
Location: 42,38
Owner: Neutral
Actor20: sbag
Location: 61,37
Owner: Neutral
Actor21: sbag
Location: 47,37
Owner: Neutral
Actor22: sbag
Location: 42,37
Owner: Neutral
Actor23: sbag
Location: 61,36
Owner: Neutral
Actor24: sbag
Location: 47,36
Owner: Neutral
Actor25: sbag
Location: 42,36
Owner: Neutral
Actor26: sbag
Location: 61,35
Owner: Neutral
Actor27: sbag
Location: 61,34
Owner: Neutral
Actor28: sbag
Location: 47,34
Owner: Neutral
Actor29: sbag
Location: 61,33
Owner: Neutral
Actor30: sbag
Location: 47,33
Owner: Neutral
Actor31: sbag
Location: 61,32
Owner: Neutral
Actor32: sbag
Location: 47,32
Owner: Neutral
Actor33: sbag
Location: 61,31
Owner: Neutral
Actor34: sbag
Location: 60,31
Owner: Neutral
Actor35: sbag
Location: 59,31
Owner: Neutral
Actor36: sbag
Location: 58,31
Owner: Neutral
Actor37: sbag
Location: 57,31
Owner: Neutral
Actor38: sbag
Location: 56,31
Owner: Neutral
Actor39: sbag
Location: 55,31
Owner: Neutral
Actor40: sbag
Location: 54,31
Owner: Neutral
Actor41: sbag
Location: 53,31
Owner: Neutral
Actor42: sbag
Location: 52,31
Owner: Neutral
Actor43: sbag
Location: 51,31
Owner: Neutral
Actor44: sbag
Location: 50,31
Owner: Neutral
Actor45: sbag
Location: 49,31
Owner: Neutral
Actor46: sbag
Location: 48,31
Owner: Neutral
Actor47: sbag
Location: 47,31
Owner: Neutral
Actor48: tc04
Location: 49,42
Owner: Neutral
Actor49: t02
Location: 36,48
Owner: Neutral
Actor50: t01
Location: 39,51
Owner: Neutral
Actor51: t02
Location: 48,53
Owner: Neutral
Actor52: t16
Location: 56,46
Owner: Neutral
Actor53: tc04
Location: 57,45
Owner: Neutral
Actor54: tc05
Location: 56,42
Owner: Neutral
Actor55: t01
Location: 57,49
Owner: Neutral
Actor56: t02
Location: 59,47
Owner: Neutral
Actor57: t01
Location: 46,50
Owner: Neutral
Actor58: t01
Location: 49,48
Owner: Neutral
Actor59: tc02
Location: 48,47
Owner: Neutral
Actor60: t16
Location: 43,48
Owner: Neutral
Actor61: t07
Location: 42,40
Owner: Neutral
Actor62: t02
Location: 44,48
Owner: Neutral
Actor63: tc02
Location: 44,49
Owner: Neutral
Actor64: tc01
Location: 42,41
Owner: Neutral
Actor65: tc01
Location: 44,50
Owner: Neutral
Actor66: t06
Location: 40,54
Owner: Neutral
Actor67: tc02
Location: 58,49
Owner: Neutral
Actor68: t07
Location: 41,40
Owner: Neutral
Actor69: t07
Location: 61,40
Owner: Neutral
Actor70: t06
Location: 39,35
Owner: Neutral
Actor71: tc05
Location: 31,34
Owner: Neutral
Actor72: tc04
Location: 37,34
Owner: Neutral
Actor73: tc02
Location: 31,37
Owner: Neutral
Actor74: tc02
Location: 55,45
Owner: Neutral
Actor75: tc01
Location: 54,42
Owner: Neutral
Actor76: t01
Location: 32,31
Owner: Neutral
Actor77: tc02
Location: 33,31
Owner: Neutral
Actor78: pyle
Location: 55,51
Owner: GDI
Health: 34
Actor81: nuke
Location: 55,32
Owner: Nod
Actor82: fact
Location: 52,32
Owner: Nod
Actor83: nuke
Location: 53,52
Owner: GDI
Health: 2
Actor85: bggy
Location: 52,39
Owner: Nod
Health: 52
Facing: 384
Actor87: jeep
Location: 54,49
Owner: GDI
Health: 33
Facing: 384
Actor88: jeep
Location: 57,49
Owner: GDI
Facing: 128
Actor89: bggy
Location: 33,37
Owner: Nod
Health: 58
Facing: 384
Actor91: bggy
Location: 59,39
Owner: Nod
Health: 50
Facing: 640
Actor92: jeep
Location: 56,54
Owner: GDI
Facing: 640
Actor93: e1
Location: 48,32
Owner: Nod
Facing: 384
SubCell: 3
Actor94: e1
Location: 35,31
Owner: Nod
Facing: 384
SubCell: 0
Actor95: e1
Location: 39,31
Owner: Nod
Facing: 128
SubCell: 4
Actor96: e1
Location: 49,32
Owner: Nod
Facing: 640
SubCell: 1
Actor97: e1
Location: 37,32
Owner: Nod
Facing: 896
SubCell: 0
Actor98: e1
Location: 50,34
Owner: Nod
Facing: 256
SubCell: 2
Actor99: e1
Location: 50,32
Owner: Nod
Facing: 896
SubCell: 4
Actor100: e1
Location: 36,31
Owner: Nod
Facing: 128
SubCell: 4
Actor101: e1
Location: 49,34
Owner: Nod
Facing: 512
SubCell: 0
Actor102: e1
Location: 36,32
Owner: Nod
Facing: 512
SubCell: 1
Actor103: e1
Location: 49,33
Owner: Nod
SubCell: 3
Actor104: e1
Location: 48,33
Owner: Nod
Facing: 512
SubCell: 0
Actor105: e1
Location: 46,33
Owner: Nod
Facing: 128
SubCell: 3
Actor106: e1
Location: 46,34
Owner: Nod
Facing: 640
SubCell: 0
Actor107: e1
Location: 40,37
Owner: Nod
Facing: 512
SubCell: 1
Actor108: e1
Location: 40,38
Owner: Nod
Facing: 384
SubCell: 0
Actor109: e1
Location: 41,37
Owner: Nod
Facing: 512
SubCell: 1
Actor110: e1
Location: 41,38
Owner: Nod
Facing: 896
SubCell: 3
Actor111: e1
Location: 50,39
Owner: Nod
Facing: 128
SubCell: 0
Actor112: e1
Location: 60,36
Owner: Nod
SubCell: 0
Actor113: e1
Location: 60,37
Owner: Nod
SubCell: 0
Actor114: e1
Location: 60,37
Owner: Nod
SubCell: 3
Actor115: e1
Location: 35,39
Owner: Nod
Facing: 640
SubCell: 1
Actor116: e1
Location: 50,37
Owner: Nod
Facing: 512
SubCell: 0
Actor117: e1
Location: 58,39
Owner: Nod
Facing: 896
SubCell: 4
Actor118: e1
Location: 60,40
Owner: Nod
Facing: 128
SubCell: 1
Actor119: e1
Location: 61,39
Owner: Nod
SubCell: 3
Actor120: e1
Location: 59,34
Owner: Nod
Facing: 640
SubCell: 3
Actor121: e1
Location: 60,34
Owner: Nod
Facing: 640
SubCell: 1
Actor122: e1
Location: 56,32
Owner: Nod
Facing: 640
SubCell: 2
Actor123: e1
Location: 51,32
Owner: Nod
Facing: 384
SubCell: 0
Actor124: e1
Location: 60,34
Owner: Nod
Facing: 640
SubCell: 4
Actor126: e1
Location: 38,49
Owner: Nod
Facing: 384
SubCell: 2
Actor127: e1
Location: 38,48
Owner: Nod
Facing: 384
SubCell: 3
Actor128: e1
Location: 53,40
Owner: Nod
Facing: 384
SubCell: 2
Actor129: e1
Location: 45,36
Owner: Nod
Facing: 512
SubCell: 4
Actor130: e1
Location: 50,51
Owner: GDI
Facing: 128
SubCell: 2
Actor131: e1
Location: 50,50
Owner: GDI
Facing: 256
SubCell: 0
Actor132: e1
Location: 53,49
Owner: GDI
Facing: 896
SubCell: 3
Actor133: e1
Location: 51,49
Owner: GDI
Health: 98
Facing: 512
SubCell: 4
Actor134: e1
Location: 52,40
Owner: Nod
Facing: 128
SubCell: 2
Actor135: e1
Location: 52,50
Owner: GDI
Health: 52
Facing: 896
SubCell: 4
Actor136: e1
Location: 56,49
Owner: GDI
SubCell: 3
Actor137: e1
Location: 55,42
Owner: Nod
Facing: 384
SubCell: 0
Actor138: e1
Location: 56,42
Owner: Nod
Facing: 640
SubCell: 4
Actor139: e1
Location: 45,36
Owner: Nod
Facing: 640
SubCell: 1
Actor140: e1
Location: 44,36
Owner: Nod
Facing: 384
SubCell: 4
Actor143: e1
Location: 48,37
Owner: Nod
Facing: 640
SubCell: 4
Actor144: e1
Location: 37,37
Owner: Nod
Facing: 384
SubCell: 4
Actor145: e1
Location: 50,37
Owner: Nod
Facing: 128
SubCell: 2
Actor146: e1
Location: 38,32
Owner: Nod
Facing: 896
SubCell: 1
Actor147: e1
Location: 49,36
Owner: Nod
Facing: 128
SubCell: 0
Actor148: e1
Location: 48,36
Owner: Nod
Facing: 896
SubCell: 4
SiloA: silo
Location: 57,32
Owner: Nod
SiloB: silo
Location: 59,32
Owner: Nod
NodRefinery: proc
Location: 57,34
Owner: Nod
RushBuggy: bggy
Location: 51,50
Owner: Nod
Health: 18
Facing: 384
RushRifle1: e1
Location: 54,48
Owner: Nod
Health: 48
Facing: 512
SubCell: 3
RushRifle2: e1
Location: 52,52
Owner: Nod
Health: 32
Facing: 384
SubCell: 0
RushRifle3: e1
Location: 52,53
Owner: Nod
Facing: 128
SubCell: 0
lstEnd: waypoint
Location: 58,57
Owner: GDI
lstStart: waypoint
Location: 58,61
Owner: GDI
NodAttackWaypoint: waypoint
Location: 54,55
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,113 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, gdi02.lua
MusicPlaylist:
StartingMusic: befeared
MissionData:
Briefing: briefing
BriefingVideo: gdi2.vqa
WinVideo: flag.vqa
LossVideo: gameover.vqa
SBAG:
-Crushable:
Buildable:
Prerequisites: ~disabled
CYCL:
-Crushable:
Buildable:
Prerequisites: ~disabled
HARV:
Harvester:
SearchFromProcRadius: 32
SearchFromHarvesterRadius: 20
PROC:
Buildable:
Queue: Building.Nod
SILO:
Buildable:
Prerequisites: ~disabled
WEAP:
Buildable:
Prerequisites: ~disabled
HQ:
Buildable:
Prerequisites: ~disabled
NUK2:
Buildable:
Prerequisites: ~disabled
FIX:
Buildable:
Prerequisites: ~disabled
HPAD:
Buildable:
Prerequisites: ~disabled
EYE:
Buildable:
Prerequisites: ~disabled
GUN:
Buildable:
Prerequisites: ~disabled
GTWR:
Buildable:
Prerequisites: ~disabled
ATWR:
Buildable:
Prerequisites: ~disabled
BRIK:
Buildable:
Prerequisites: ~disabled
E2:
Buildable:
Prerequisites: ~disabled
E3:
Buildable:
Prerequisites: ~disabled
E4:
Buildable:
Prerequisites: ~disabled
E5:
Buildable:
Prerequisites: ~disabled
E6:
Buildable:
Queue: Infantry.Nod
RMBO:
Buildable:
Prerequisites: ~disabled
AFLD:
Buildable:
Prerequisites: ~disabled
TMPL:
Buildable:
Prerequisites: ~disabled
OBLI:
Buildable:
Prerequisites: ~disabled
SAM:
Buildable:
Prerequisites: ~disabled