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,217 @@
--[[
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.
]]
InsertionHelicopterType = "tran.insertion"
InsertionPath = { InsertionEntry.Location, InsertionLZ.Location }
ExtractionHelicopterType = "tran.extraction"
ExtractionPath = { SouthReinforcementsPoint.Location, ExtractionLZ.Location }
JeepReinforcements = { "jeep", "jeep" }
TanyaReinforcements = { "e7.noautotarget" }
EinsteinType = "einstein"
FlareType = "flare"
CruisersReinforcements = { "ca", "ca", "ca", "ca" }
OpeningAttack = { Patrol1, Patrol2, Patrol3, Patrol4 }
Responders = { Response1, Response2, Response3, Response4, Response5 }
LabGuardsTeam = { LabGuard1, LabGuard2, LabGuard3 }
SendInsertionHelicopter = function()
local passengers = Reinforcements.ReinforceWithTransport(Greece, InsertionHelicopterType,
TanyaReinforcements, InsertionPath, { InsertionEntry.Location })[2]
local tanya = passengers[1]
Trigger.OnKilled(tanya, TanyaKilledInAction)
Trigger.AfterDelay(DateTime.Seconds(4), function()
Media.DisplayMessage(UserInterface.GetFluentMessage("tanya-rules-of-engagement"), UserInterface.GetFluentMessage("tanya"))
end)
end
SendJeeps = function()
Reinforcements.Reinforce(Greece, JeepReinforcements, InsertionPath, DateTime.Seconds(2))
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived")
end
RunInitialActivities = function()
SendInsertionHelicopter()
Utils.Do(OpeningAttack, function(a)
IdleHunt(a)
end)
Trigger.OnKilled(Patrol3, function()
if not Civilian1.IsDead then
Civilian1.Move(CivMove.Location)
end
end)
Trigger.OnKilled(BarrelPower, function()
if not Civilian2.IsDead then
Civilian2.Move(CivMove.Location)
end
Utils.Do(Responders, function(r)
if not r.IsDead then
IdleHunt(r)
end
end)
end)
end
LabGuardsKilled = function()
CreateEinstein()
Trigger.AfterDelay(DateTime.Seconds(2), function()
Actor.Create(FlareType, true, { Owner = England, Location = ExtractionFlarePoint.Location })
Media.PlaySpeechNotification(Greece, "SignalFlareNorth")
SendExtractionHelicopter()
end)
Trigger.AfterDelay(DateTime.Seconds(10), function()
Media.PlaySpeechNotification(Greece, "AlliedReinforcementsArrived")
Actor.Create("camera", true, { Owner = Greece, Location = CruiserCameraPoint.Location })
SendCruisers()
end)
Trigger.AfterDelay(DateTime.Seconds(12), function()
for i = 0, 2 do
Trigger.AfterDelay(DateTime.Seconds(i), function()
Media.PlaySoundNotification(Greece, "AlertBuzzer")
end)
end
Utils.Do(SovietArmy, function(a)
if not a.IsDead and a.HasProperty("Hunt") then
Trigger.OnIdle(a, a.Hunt)
end
end)
end)
end
SendExtractionHelicopter = function()
Heli = Reinforcements.ReinforceWithTransport(Greece, ExtractionHelicopterType, nil, ExtractionPath)[1]
if not Einstein.IsDead then
Trigger.OnRemovedFromWorld(Einstein, EvacuateHelicopter)
end
Trigger.OnKilled(Heli, RescueFailed)
Trigger.OnRemovedFromWorld(Heli, HelicopterGone)
end
EvacuateHelicopter = function()
if Heli.HasPassengers then
Heli.Move(ExtractionExitPoint.Location)
Heli.Destroy()
end
end
SendCruisers = function()
local i = 1
Utils.Do(CruisersReinforcements, function(cruiser)
local ca = Actor.Create(cruiser, true, { Owner = England, Location = SouthReinforcementsPoint.Location + CVec.New(2 * i, 0) })
ca.Move(Map.NamedActor("CruiserPoint" .. i).Location)
i = i + 1
end)
end
LabDestroyed = function()
if not Einstein then
RescueFailed()
end
end
RescueFailed = function()
Media.PlaySpeechNotification(Greece, "ObjectiveNotMet")
Greece.MarkFailedObjective(EinsteinSurviveObjective)
end
TanyaKilledInAction = function()
Media.PlaySpeechNotification(Greece, "ObjectiveNotMet")
Greece.MarkFailedObjective(TanyaSurviveObjective)
end
OilPumpDestroyed = function()
Trigger.AfterDelay(DateTime.Seconds(5), SendJeeps)
end
CiviliansKilled = function()
Greece.MarkFailedObjective(CivilProtectionObjective)
Media.PlaySpeechNotification(Greece, "ObjectiveNotMet")
CollateralDamage = true
end
LostMate = function()
if not Civilian2.IsDead then
Civilian2.Panic()
end
end
CreateEinstein = function()
Greece.MarkCompletedObjective(FindEinsteinObjective)
Media.PlaySpeechNotification(Greece, "ObjectiveMet")
Einstein = Actor.Create(EinsteinType, true, { Location = EinsteinSpawnPoint.Location, Owner = Greece })
Einstein.Scatter()
Trigger.OnKilled(Einstein, RescueFailed)
ExtractObjective = AddPrimaryObjective(Greece, "extract-einstein-helicopter")
Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(Greece, "TargetFreed") end)
end
HelicopterGone = function()
if not Heli.IsDead then
Media.PlaySpeechNotification(Greece, "TargetRescued")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Greece.MarkCompletedObjective(ExtractObjective)
Greece.MarkCompletedObjective(EinsteinSurviveObjective)
if not Greece.IsObjectiveFailed(TanyaSurviveObjective) then
Greece.MarkCompletedObjective(TanyaSurviveObjective)
end
if not CollateralDamage then
Greece.MarkCompletedObjective(CivilProtectionObjective)
end
end)
end
end
SetUnitStances = function()
Utils.Do(Map.NamedActors, function(a)
if a.Owner == Greece then
a.Stance = "Defend"
end
end)
end
Tick = function()
USSR.Resources = USSR.Resources - (0.01 * USSR.ResourceCapacity / 25)
end
WorldLoaded = function()
Greece = Player.GetPlayer("Greece")
England = Player.GetPlayer("England")
USSR = Player.GetPlayer("USSR")
InitObjectives(Greece)
FindEinsteinObjective = AddPrimaryObjective(Greece, "find-einstein")
TanyaSurviveObjective = AddPrimaryObjective(Greece, "tanya-survive")
EinsteinSurviveObjective = AddPrimaryObjective(Greece, "einstein-survive")
CivilProtectionObjective = AddSecondaryObjective(Greece, "protect-civilians")
RunInitialActivities()
Trigger.OnKilled(Lab, LabDestroyed)
Trigger.OnKilled(OilPump, OilPumpDestroyed)
SovietArmy = USSR.GetGroundAttackers()
Trigger.OnAllKilled(LabGuardsTeam, LabGuardsKilled)
CollateralDamage = false
local civilianTeam = { Civilian1, Civilian2 }
Trigger.OnAnyKilled(civilianTeam, CiviliansKilled)
Trigger.OnKilled(Civilian1, LostMate)
SetUnitStances()
Trigger.AfterDelay(DateTime.Seconds(5), function() Actor.Create("camera", true, { Owner = Greece, Location = BaseCameraPoint.Location }) end)
Camera.Position = InsertionLZ.CenterPosition
end

Binary file not shown.

View File

@@ -0,0 +1,11 @@
## rules.yaml
briefing =
Rescue Einstein from the Headquarters inside the Soviet complex.
Once found, evacuate him via helicopter from the signal flare's location.
Einstein and Tanya must be kept alive at all costs.
Beware the Soviet's Tesla Coils.
Direct Tanya to destroy the westmost power plants to take them offline.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,452 @@
MapFormat: 12
RequiresMod: ra
Title: 01: In the Thick of It
Author: Westwood Studios
Tileset: SNOW
MapSize: 128,128
Bounds: 49,45,30,36
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@USSR:
Name: USSR
Bot: campaign
Faction: soviet
Color: FE1100
Enemies: Greece, England
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: allies
PlayerReference@Greece:
Name: Greece
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: allies
LockColor: True
Color: ABB7E4
LockSpawn: True
LockTeam: True
Allies: England
Enemies: USSR
PlayerReference@England:
Name: England
Bot: campaign
Faction: allies
Color: A1EF8C
Allies: Greece
Enemies: USSR
Actors:
Actor0: t16
Location: 66,46
Owner: Neutral
Actor1: t17
Location: 59,46
Owner: Neutral
Actor2: tc04
Location: 75,44
Owner: Neutral
Actor3: tc05
Location: 76,45
Owner: Neutral
Actor4: t01
Location: 52,50
Owner: Neutral
Actor5: t02
Location: 70,68
Owner: Neutral
Actor6: t05
Location: 73,64
Owner: Neutral
Actor7: t14
Location: 59,50
Owner: Neutral
Actor8: t17
Location: 56,61
Owner: Neutral
Actor9: tc01
Location: 53,64
Owner: Neutral
Actor10: tc02
Location: 49,66
Owner: Neutral
Actor11: t07
Location: 49,59
Owner: Neutral
Actor12: tc05
Location: 49,60
Owner: Neutral
Actor13: tc04
Location: 50,58
Owner: Neutral
Actor14: tc03
Location: 69,50
Owner: Neutral
Actor15: t11
Location: 77,60
Owner: Neutral
Actor16: t01
Location: 78,59
Owner: Neutral
Actor17: tc01
Location: 76,56
Owner: Neutral
Actor18: t08
Location: 66,50
Owner: Neutral
Actor19: t17
Location: 57,56
Owner: Neutral
Actor20: t01
Location: 73,67
Owner: Neutral
Actor21: tc01
Location: 54,45
Owner: Neutral
Actor22: tsla
Location: 71,60
Owner: USSR
Actor23: powr
Location: 75,64
Owner: USSR
Actor24: powr
Location: 67,57
Owner: USSR
BarrelPower: powr
Location: 61,57
Owner: USSR
Actor27: fact
Location: 69,62
Owner: USSR
Actor28: dome
Location: 67,65
Owner: USSR
Actor29: barr
Location: 61,64
Owner: USSR
Actor30: tsla
Location: 67,68
Owner: USSR
Actor31: tsla
Location: 60,67
Owner: USSR
Actor32: weap
Location: 65,62
Owner: USSR
Actor33: proc
Location: 73,58
Owner: USSR
Actor34: kenn
Location: 64,65
Owner: USSR
Actor35: powr
Location: 65,57
Owner: USSR
Actor36: powr
Location: 77,64
Owner: USSR
Actor37: powr
Location: 75,67
Owner: USSR
Actor38: silo
Location: 59,64
Owner: USSR
Actor39: powr
Location: 77,67
Owner: USSR
Actor41: brl3
Location: 60,57
Owner: USSR
Actor42: barl
Location: 60,56
Owner: USSR
Actor43: barl
Location: 61,56
Owner: USSR
Actor44: brl3
Location: 60,58
Owner: USSR
Actor45: barl
Location: 58,56
Owner: USSR
Actor46: barl
Location: 59,59
Owner: USSR
Actor47: jeep
Location: 63,50
Owner: Greece
Facing: 512
Actor49: jeep
Location: 62,50
Owner: Greece
Facing: 512
Actor50: jeep
Location: 64,50
Owner: Greece
Facing: 512
Actor55: e2
Location: 73,66
Owner: USSR
SubCell: 1
Response3: e1
Location: 62,67
Owner: USSR
SubCell: 4
Facing: 512
Response5: e1
Location: 67,67
Owner: USSR
SubCell: 3
Facing: 640
Response4: e1
Location: 65,67
Owner: USSR
SubCell: 3
Facing: 640
Response1: e1
Location: 56,60
Owner: USSR
SubCell: 1
Facing: 384
Response2: e1
Location: 58,60
Owner: USSR
SubCell: 1
Facing: 256
Actor64: e1
Location: 64,49
Owner: Greece
Facing: 512
SubCell: 1
Actor65: e1
Location: 63,49
Owner: Greece
Facing: 512
SubCell: 0
Actor66: e1
Location: 62,49
Owner: Greece
Facing: 640
SubCell: 2
Actor69: e2
Location: 62,56
Owner: USSR
Facing: 128
SubCell: 1
Actor70: e2
Location: 62,56
Owner: USSR
SubCell: 4
Actor71: e1
Location: 64,49
Owner: Greece
Facing: 512
SubCell: 2
Actor72: e1
Location: 62,49
Owner: Greece
Facing: 512
SubCell: 1
Actor48: fenc
Location: 53,60
Owner: USSR
Actor51: fenc
Location: 53,59
Owner: USSR
Actor52: fenc
Location: 54,59
Owner: USSR
Actor60: fenc
Location: 53,63
Owner: USSR
Actor61: fenc
Location: 54,63
Owner: USSR
Actor73: fenc
Location: 55,63
Owner: USSR
Actor74: fenc
Location: 55,64
Owner: USSR
Actor75: fenc
Location: 55,65
Owner: USSR
Actor76: fenc
Location: 55,66
Owner: USSR
Actor77: fenc
Location: 55,67
Owner: USSR
Actor78: fenc
Location: 56,67
Owner: USSR
Actor79: fenc
Location: 57,67
Owner: USSR
Actor80: fenc
Location: 58,67
Owner: USSR
Actor81: fenc
Location: 58,68
Owner: USSR
Actor82: fenc
Location: 73,70
Owner: USSR
Actor83: fenc
Location: 74,70
Owner: USSR
Actor84: fenc
Location: 78,70
Owner: USSR
Actor85: fenc
Location: 77,70
Owner: USSR
Actor86: fenc
Location: 76,70
Owner: USSR
Actor87: fenc
Location: 78,58
Owner: USSR
Actor99: fenc
Location: 78,59
Owner: USSR
Actor88: fenc
Location: 77,58
Owner: USSR
Actor89: fenc
Location: 78,57
Owner: USSR
Actor90: fenc
Location: 78,56
Owner: USSR
Actor91: fenc
Location: 77,56
Owner: USSR
Actor98: fenc
Location: 76,56
Owner: USSR
Actor92: fenc
Location: 75,56
Owner: USSR
Actor93: fenc
Location: 74,56
Owner: USSR
Actor94: fenc
Location: 74,55
Owner: USSR
Actor95: fenc
Location: 68,55
Owner: USSR
Actor96: fenc
Location: 69,55
Owner: USSR
Actor97: fenc
Location: 68,54
Owner: USSR
Lab: stek
Location: 61,60
Owner: USSR
OilPump: v19
Location: 59,57
Owner: USSR
LabGuard1: e1
Location: 64,61
Owner: USSR
SubCell: 4
LabGuard2: e1
Location: 63,63
Owner: USSR
Facing: 384
SubCell: 0
LabGuard3: e1
Location: 61,63
Owner: USSR
Facing: 512
SubCell: 0
Patrol1: dog
Location: 63,59
Owner: USSR
SubCell: 2
Patrol2: e1
Location: 64,58
Owner: USSR
SubCell: 3
Patrol3: e1
Location: 64,59
Owner: USSR
SubCell: 2
Patrol4: e1
Location: 62,55
Owner: USSR
SubCell: 4
Civilian1: c8
Location: 74,50
Owner: England
SubCell: 0
Civilian2: c7
Location: 76,48
Owner: England
SubCell: 3
EinsteinSpawnPoint: waypoint
Location: 62,60
Owner: Neutral
InsertionEntry: waypoint
Location: 63,45
Owner: Neutral
InsertionLZ: waypoint
Location: 63,47
Owner: Neutral
BaseCameraPoint: waypoint
Location: 64,63
Owner: Neutral
SouthReinforcementsPoint: waypoint
Location: 66,80
Owner: Neutral
ExtractionLZ: waypoint
Location: 53,49
Owner: Neutral
ExtractionFlarePoint: waypoint
Location: 54,48
Owner: Neutral
ExtractionExitPoint: waypoint
Location: 78,49
Owner: Neutral
CruiserCameraPoint: waypoint
Location: 69,67
Owner: Neutral
CruiserPoint1: waypoint
Location: 60,74
Owner: Neutral
CruiserPoint2: waypoint
Location: 64,75
Owner: Neutral
CruiserPoint4: waypoint
Location: 72,75
Owner: Neutral
CruiserPoint3: waypoint
Location: 68,76
Owner: Neutral
CivMove: waypoint
Location: 69,56
Owner: Neutral
Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml
Weapons: weapons.yaml
FluentMessages: ra|fluent/lua.ftl, ra|fluent/campaign.ftl, map.ftl

View File

@@ -0,0 +1,44 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, allies01.lua
MissionData:
Briefing: briefing
BackgroundVideo: prolog.vqa
BriefingVideo: ally1.vqa
StartVideo: landing.vqa
WinVideo: snowbomb.vqa
LossVideo: bmap.vqa
TRAN.Extraction:
Inherits: TRAN
RevealsShroud:
Range: 0c0
-RevealsShroud@GAPGEN:
RejectsOrders:
-Selectable:
Cargo:
Types: Einstein
MaxWeight: 1
RenderSprites:
Image: tran
Interactable:
TRAN.Insertion:
Inherits: TRAN.Extraction
Cargo:
MaxWeight: 0
EINSTEIN:
Passenger:
CargoType: Einstein
C8:
Inherits@2: ^ArmedCivilian
JEEP:
Cargo:
Types: Infantry, Einstein
TSLA:
Power:
Amount: -150

View File

@@ -0,0 +1,2 @@
8Inch:
Range: 25c0