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

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

Binary file not shown.

View File

@@ -0,0 +1,9 @@
## rules.yaml
briefing =
In order for the Brotherhood to gain a foothold, we must begin by eliminating certain elements.
Nikoomba, the nearby village's leader, is one such element.
His views and ours do not coincide.
He and his whole group must be eliminated.

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1,236 @@
MapFormat: 12
RequiresMod: cnc
Title: 01: Nikoomba's Demise
Author: Westwood Studios
Tileset: DESERT
MapSize: 64,64
Bounds: 21,14,37,24
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: gdi
PlayerReference@Villagers:
Name: Villagers
NonCombatant: True
Faction: gdi
Bot: campaign
PlayerReference@GDI:
Name: GDI
Faction: gdi
Color: F5D378
Allies: Villagers
Enemies: Nod
Bot: campaign
PlayerReference@Nod:
Name: Nod
Playable: True
AllowBots: False
Required: True
LockFaction: True
Faction: nod
LockColor: True
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: GDI, Villagers
Actors:
Actor46: e1
Location: 28,28
Owner: GDI
Actor47: e1
Location: 29,28
Owner: GDI
Actor48: e1
Location: 29,30
Owner: GDI
Actor49: e1
Location: 33,35
Owner: GDI
Actor50: e1
Location: 34,36
Owner: GDI
Actor51: e1
Location: 41,19
Owner: GDI
Actor52: e1
Location: 40,19
Owner: GDI
Actor53: e1
Location: 40,18
Owner: GDI
Actor54: e1
Location: 40,31
Owner: GDI
Actor55: e1
Location: 43,34
Owner: GDI
Actor56: e1
Location: 46,22
Owner: GDI
Actor57: e1
Location: 51,25
Owner: GDI
Actor58: e1
Location: 51,30
Owner: GDI
Actor59: e1
Location: 55,33
Owner: GDI
Actor60: e1
Location: 56,32
Owner: GDI
Actor0: rock2
Location: 54,14
Owner: Neutral
Actor1: t08
Location: 47,15
Owner: Neutral
Actor2: t18
Location: 32,16
Owner: Neutral
Actor3: t08
Location: 47,16
Owner: Neutral
Actor4: t08
Location: 21,18
Owner: Neutral
Actor5: t18
Location: 32,21
Owner: Neutral
Actor6: t08
Location: 27,22
Owner: Neutral
Actor7: t08
Location: 23,24
Owner: Neutral
Actor8: rock1
Location: 21,25
Owner: Neutral
Actor9: t08
Location: 56,25
Owner: Neutral
Actor10: t08
Location: 23,26
Owner: Neutral
Actor11: t08
Location: 24,26
Owner: Neutral
Actor12: t08
Location: 28,30
Owner: Neutral
Actor13: t08
Location: 50,30
Owner: Neutral
Actor14: t08
Location: 39,31
Owner: Neutral
Actor15: rock1
Location: 31,34
Owner: Neutral
Actor16: t08
Location: 55,37
Owner: Neutral
Actor27: jeep
Location: 31,28
Owner: GDI
Actor28: jeep
Location: 28,29
Owner: GDI
Vil01: v21
Location: 29,23
Owner: Villagers
Vil02: v24
Location: 22,24
Owner: Villagers
Vil03: v24
Location: 21,16
Owner: Villagers
Vil04: v32
Location: 21,20
Owner: Villagers
Vil05: v27
Location: 22,21
Owner: Villagers
Vil06: v20
Location: 21,21
Owner: Villagers
Vil07: v26
Location: 22,23
Owner: Villagers
Vil08: v20
Location: 27,23
Owner: Villagers
Vil09: v22
Location: 26,23
Owner: Villagers
Vil10: v23
Location: 26,22
Owner: Villagers
Vil11: v26
Location: 26,21
Owner: Villagers
Vil12: v25
Location: 29,21
Owner: Villagers
Vil13: v30
Location: 32,18
Owner: Villagers
Civ01: c9
Location: 28,20
Owner: Villagers
Civ02: c6
Location: 28,19
Owner: Villagers
Civ03: c8
Location: 27,19
Owner: Villagers
Civ04: c7
Location: 29,20
Owner: Villagers
Civ05: c4
Location: 31,19
Owner: Villagers
Civ06: c2
Location: 30,19
Owner: Villagers
Civ07: c5
Location: 29,19
Owner: Villagers
Nikoomba: c10
Location: 29,16
Owner: Villagers
StartSpawnPointLeft: waypoint
Location: 50,14
Owner: Neutral
StartSpawnPointRight: waypoint
Location: 52,14
Owner: Neutral
StartRallyPoint: waypoint
Location: 53,17
Owner: Neutral
VillageSpawnPoint: waypoint
Location: 24,14
Owner: Neutral
VillageRallyPoint: waypoint
Location: 24,17
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,77 @@
--[[
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.
]]
InitialForcesA = { "bggy", "e1", "e1", "e1", "e1" }
InitialForcesB = { "e1", "e1", "bggy", "e1", "e1" }
RifleInfantryReinforcements = { "e1", "e1" }
RocketInfantryReinforcements = { "e3", "e3", "e3", "e3", "e3" }
SendInitialForces = function()
Media.PlaySpeechNotification(Nod, "Reinforce")
Reinforcements.Reinforce(Nod, InitialForcesA, { StartSpawnPointLeft.Location, StartRallyPoint.Location }, 5)
Reinforcements.Reinforce(Nod, InitialForcesB, { StartSpawnPointRight.Location, StartRallyPoint.Location }, 10)
end
SendFirstInfantryReinforcements = function()
Media.PlaySpeechNotification(Nod, "Reinforce")
Reinforcements.Reinforce(Nod, RifleInfantryReinforcements, { StartSpawnPointRight.Location, StartRallyPoint.Location }, 15)
end
SendSecondInfantryReinforcements = function()
Media.PlaySpeechNotification(Nod, "Reinforce")
Reinforcements.Reinforce(Nod, RifleInfantryReinforcements, { StartSpawnPointLeft.Location, StartRallyPoint.Location }, 15)
end
SendLastInfantryReinforcements = function()
Media.PlaySpeechNotification(Nod, "Reinforce")
Reinforcements.Reinforce(Nod, RocketInfantryReinforcements, { VillageSpawnPoint.Location, VillageRallyPoint.Location }, 8)
end
WorldLoaded = function()
Nod = Player.GetPlayer("Nod")
GDI = Player.GetPlayer("GDI")
Villagers = Player.GetPlayer("Villagers")
InitObjectives(Nod)
KillNikoomba = AddPrimaryObjective(Nod, "kill-nikoomba")
DestroyVillage = AddPrimaryObjective(Nod, "destroy-village")
DestroyGDI = AddSecondaryObjective(Nod, "destroy-gdi-troops-area")
GDIObjective = AddPrimaryObjective(GDI, "")
Trigger.OnKilled(Nikoomba, function()
Nod.MarkCompletedObjective(KillNikoomba)
Trigger.AfterDelay(DateTime.Seconds(1), function()
SendLastInfantryReinforcements()
end)
end)
Camera.Position = StartRallyPoint.CenterPosition
SendInitialForces()
Trigger.AfterDelay(DateTime.Seconds(30), SendFirstInfantryReinforcements)
Trigger.AfterDelay(DateTime.Seconds(60), SendSecondInfantryReinforcements)
end
Tick = function()
if DateTime.GameTime > 2 then
if Nod.HasNoRequiredUnits() then
GDI.MarkCompletedObjective(GDIObjective)
end
if Villagers.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(DestroyVillage)
end
if GDI.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(DestroyGDI)
end
end
end

View File

@@ -0,0 +1,37 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, nod01.lua
MusicPlaylist:
StartingMusic: nomercy
VictoryMusic: nod_win1
MissionData:
Briefing: briefing
BackgroundVideo: intro2.vqa
BriefingVideo: nod1.vqa
LossVideo: nodlose.vqa
^Palettes:
IndexedPlayerPalette:
PlayerIndex:
Villagers: 192, 164, 132, 155, 133, 197, 112, 12, 163, 132, 155, 133, 134, 197, 154, 198
IndexedPlayerPalette@units:
PlayerIndex:
Villagers: 192, 164, 132, 155, 133, 197, 112, 12, 163, 132, 155, 133, 134, 197, 154, 198
Player:
PlayerResources:
DefaultCash: 0
C10:
Tooltip:
Name: actor-c10-name
^Bridge:
DamageMultiplier@INVULNERABLE:
Modifier: 0
^CivBuilding:
MustBeDestroyed:
^CivInfantry:
MustBeDestroyed: