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 =
A pitiful excuse for resistance has barricaded itself in this village.
Stalin has decided to make an example of them. Kill them all and destroy their homes. You will have Yak aircraft to use to teach these rebels a lesson.

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,664 @@
MapFormat: 12
RequiresMod: ra
Title: 01: Lesson in Blood
Author: Westwood Studios
Tileset: SNOW
MapSize: 128,128
Bounds: 32,47,32,38
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@France:
Name: France
Bot: campaign
Faction: allies
Color: 5CC1A3
Allies: Germany
Enemies: USSR
PlayerReference@Germany:
Name: Germany
Bot: campaign
NonCombatant: True
Faction: allies
Color: 505050
Allies: France
Enemies: USSR
PlayerReference@USSR:
Name: USSR
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: soviet
LockColor: True
Color: FE1100
LockSpawn: True
LockTeam: True
Enemies: France, Germany
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: allies
Actors:
Actor0: wood
Location: 44,50
Owner: France
Actor1: wood
Location: 44,51
Owner: France
Actor2: wood
Location: 44,52
Owner: France
Actor3: wood
Location: 44,53
Owner: France
Actor4: wood
Location: 45,53
Owner: France
Actor5: wood
Location: 56,65
Owner: France
Actor6: v14
Location: 54,66
Owner: Neutral
Actor7: v14
Location: 55,66
Owner: Neutral
Actor8: wood
Location: 56,66
Owner: France
Actor9: wood
Location: 53,67
Owner: France
Actor10: wood
Location: 55,67
Owner: France
Actor11: wood
Location: 56,67
Owner: France
Actor12: wood
Location: 45,69
Owner: France
Actor13: wood
Location: 46,69
Owner: France
Actor14: wood
Location: 47,69
Owner: France
Actor15: wood
Location: 45,70
Owner: France
Actor16: wood
Location: 51,70
Owner: France
Actor17: wood
Location: 53,71
Owner: France
Actor18: wood
Location: 52,72
Owner: France
Actor19: wood
Location: 53,72
Owner: France
Actor20: t16
Location: 53,52
Owner: Neutral
Actor21: tc03
Location: 60,61
Owner: Neutral
Actor22: tc01
Location: 48,47
Owner: Neutral
Actor24: t01
Location: 49,74
Owner: Neutral
Actor25: t14
Location: 60,69
Owner: Neutral
Actor26: t16
Location: 59,72
Owner: Neutral
Actor27: t14
Location: 60,72
Owner: Neutral
Actor28: t07
Location: 62,72
Owner: Neutral
Actor29: t10
Location: 54,74
Owner: Neutral
Actor30: tc02
Location: 46,49
Owner: Neutral
Actor31: t01
Location: 53,57
Owner: Neutral
Actor32: tc05
Location: 41,51
Owner: Neutral
Actor33: t06
Location: 44,53
Owner: Neutral
Actor34: t01
Location: 44,70
Owner: Neutral
Actor35: t16
Location: 52,72
Owner: Neutral
Actor36: tc02
Location: 32,51
Owner: Neutral
Actor37: tc04
Location: 32,55
Owner: Neutral
Actor38: tc05
Location: 32,60
Owner: Neutral
Actor39: tc02
Location: 42,57
Owner: Neutral
Actor40: tc02
Location: 43,68
Owner: Neutral
Actor41: tc01
Location: 42,67
Owner: Neutral
Actor42: tc04
Location: 32,72
Owner: Neutral
Actor43: tc03
Location: 51,77
Owner: Neutral
Actor44: tc01
Location: 39,72
Owner: Neutral
Actor45: t17
Location: 35,76
Owner: Neutral
Actor46: t15
Location: 59,75
Owner: Neutral
Actor47: tc03
Location: 35,65
Owner: Neutral
Actor48: t01
Location: 35,56
Owner: Neutral
Actor49: t10
Location: 47,59
Owner: Neutral
Actor50: t08
Location: 48,64
Owner: Neutral
Actor51: barl
Location: 33,54
Owner: Germany
Actor52: brl3
Location: 57,53
Owner: Germany
Actor53: v08
Location: 41,54
Owner: France
Health: 52
HayHouse: v07
Location: 54,65
Owner: France
Health: 44
Actor55: v07
Location: 38,52
Owner: France
Health: 44
Actor56: v06
Location: 46,51
Owner: France
Health: 99
Actor57: v05
Location: 36,55
Owner: France
Health: 50
Actor58: v04
Location: 35,51
Owner: France
Health: 35
Actor59: v02
Location: 36,57
Owner: France
Health: 56
Actor60: brl3
Location: 34,52
Owner: Germany
Actor61: barl
Location: 57,54
Owner: Germany
Actor62: barl
Location: 55,54
Owner: Germany
Actor63: brl3
Location: 51,72
Owner: Germany
Actor64: brl3
Location: 51,71
Owner: Germany
Actor65: brl3
Location: 47,71
Owner: Germany
BridgeBarrel: barl
Location: 46,71
Owner: Germany
Actor67: barl
Location: 47,70
Owner: Germany
Actor68: brl3
Location: 43,50
Owner: Germany
Actor69: brl3
Location: 45,52
Owner: Germany
Actor70: barl
Location: 41,51
Owner: France
Actor71: barl
Location: 50,72
Owner: Germany
Actor72: barl
Location: 42,50
Owner: Germany
Actor75: barl
Location: 56,53
Owner: Germany
Actor76: barl
Location: 58,53
Owner: Germany
Actor77: brl3
Location: 59,53
Owner: Germany
Actor78: brl3
Location: 54,53
Owner: Germany
Actor79: barl
Location: 59,56
Owner: Germany
Actor80: brl3
Location: 48,66
Owner: Germany
Actor81: barl
Location: 45,65
Owner: Germany
Actor82: barl
Location: 34,57
Owner: Germany
Actor83: brl3
Location: 35,58
Owner: Germany
Actor84: barl
Location: 46,67
Owner: Germany
Actor85: barl
Location: 48,67
Owner: Germany
Actor86: brl3
Location: 38,65
Owner: Germany
Actor87: barl
Location: 40,52
Owner: Germany
Actor88: barl
Location: 39,64
Owner: Germany
Actor89: brl3
Location: 41,53
Owner: Germany
Actor90: brl3
Location: 46,66
Owner: Germany
Actor94: barl
Location: 35,56
Owner: Germany
Actor95: brl3
Location: 38,64
Owner: Germany
Actor96: brl3
Location: 34,55
Owner: Germany
Actor97: barl
Location: 35,55
Owner: Germany
Actor98: barl
Location: 45,50
Owner: Germany
ParaHut: v04
Location: 58,54
Owner: France
Health: 41
Actor100: v02
Location: 56,54
Owner: France
Health: 71
Actor101: dome
Location: 45,79
Owner: USSR
Actor102: barl
Location: 46,61
Owner: Germany
Actor103: brl3
Location: 43,66
Owner: Germany
Actor104: barl
Location: 43,67
Owner: Germany
Actor105: brl3
Location: 59,57
Owner: Germany
Actor106: barl
Location: 57,58
Owner: Germany
Actor107: barl
Location: 58,58
Owner: Germany
Actor108: brl3
Location: 59,58
Owner: Germany
Actor109: brl3
Location: 56,58
Owner: Germany
Actor110: barl
Location: 56,59
Owner: Germany
Actor111: barl
Location: 56,60
Owner: Germany
Actor112: barl
Location: 41,68
Owner: Germany
Actor113: barl
Location: 42,67
Owner: Germany
Actor114: brl3
Location: 49,55
Owner: Germany
PillboxBarrel2: barl
Location: 48,55
Owner: Germany
Actor116: barl
Location: 47,56
Owner: Germany
PillboxBarrel1: brl3
Location: 46,56
Owner: Germany
Pillbox1: pbox
Location: 46,55
Owner: France
Pillbox2: pbox
Location: 48,54
Owner: France
Actor120: barl
Location: 34,51
Owner: Germany
Actor121: v05
Location: 48,62
Owner: France
Health: 41
Actor123: jeep
Location: 46,52
Owner: France
Health: 66
Facing: 384
Actor125: jeep
Location: 55,57
Owner: France
Facing: 640
Actor126: jeep
Location: 39,65
Owner: France
Health: 63
Facing: 256
Actor127: c9
Location: 50,64
Owner: France
Facing: 768
SubCell: 1
Actor128: c8
Location: 47,61
Owner: France
SubCell: 3
Actor129: c8
Location: 41,50
Owner: France
Facing: 896
SubCell: 3
Actor130: c6
Location: 46,61
Owner: France
Facing: 512
SubCell: 2
Actor131: c5
Location: 46,61
Owner: France
SubCell: 1
Actor132: c4
Location: 44,67
Owner: France
Facing: 384
SubCell: 1
Actor133: c2
Location: 40,54
Owner: France
Facing: 640
SubCell: 2
Actor134: c2
Location: 45,61
Owner: France
Facing: 256
SubCell: 4
Actor135: e1
Location: 54,60
Owner: France
Facing: 640
SubCell: 4
Actor136: e1
Location: 49,60
Owner: France
Facing: 512
SubCell: 2
Actor137: c5
Location: 45,51
Owner: France
Facing: 896
SubCell: 0
Actor138: e1
Location: 34,58
Owner: France
Facing: 384
SubCell: 0
Actor139: e1
Location: 53,54
Owner: France
Facing: 512
SubCell: 2
Actor140: e1
Location: 58,56
Owner: France
Facing: 512
SubCell: 1
Actor141: e1
Location: 58,52
Owner: France
Facing: 640
SubCell: 0
Actor142: e1
Location: 54,64
Owner: France
Facing: 640
SubCell: 3
Actor143: c7
Location: 56,54
Owner: France
SubCell: 3
Actor144: e1
Location: 40,51
Owner: France
Facing: 640
SubCell: 0
Actor145: e1
Location: 35,53
Owner: France
Facing: 384
SubCell: 1
Actor146: e1
Location: 35,54
Owner: France
SubCell: 4
Actor147: e1
Location: 43,64
Owner: France
Facing: 384
SubCell: 0
Actor148: e1
Location: 56,63
Owner: France
Facing: 768
SubCell: 2
Actor149: e1
Location: 40,67
Owner: France
Facing: 128
SubCell: 4
Church: v01
Location: 40,63
Owner: France
Health: 54
StartJeep: jeep
Location: 44,76
Owner: France
Health: 52
Facing: 128
LonelyGuard: e1
Location: 42,81
Owner: USSR
Health: 14
SubCell: 2
Airfield1: afld
Location: 39,77
Owner: USSR
Airfield2: afld
Location: 37,79
Owner: USSR
Airfield3: afld
Location: 35,81
Owner: USSR
Powerplant1: powr
Location: 43,82
Owner: USSR
Powerplant2: powr
Location: 45,82
Owner: USSR
ParadropEntryPoint1: waypoint
Location: 63,65
Owner: Neutral
ParadropPoint1: waypoint
Location: 47,67
Owner: Neutral
StartJeepMovePoint: waypoint
Location: 47,66
Owner: Neutral
BridgeWaypoint: waypoint
Location: 47,70
Owner: Neutral
Flare: flare
Location: 47,65
Owner: France
YakEntry: waypoint
Location: 51,84
Owner: Neutral
CivSpawn: waypoint
Location: 55,65
Owner: Neutral
Actor157: fenc
Location: 34,76
Owner: USSR
Actor158: fenc
Location: 35,76
Owner: USSR
Actor159: fenc
Location: 39,76
Owner: USSR
Actor160: fenc
Location: 40,76
Owner: USSR
Actor161: fenc
Location: 41,76
Owner: USSR
Actor162: fenc
Location: 47,76
Owner: USSR
Actor163: fenc
Location: 48,76
Owner: USSR
Actor164: fenc
Location: 49,76
Owner: USSR
Actor165: fenc
Location: 34,77
Owner: USSR
Actor166: fenc
Location: 49,77
Owner: USSR
Actor167: fenc
Location: 34,78
Owner: USSR
Actor168: fenc
Location: 49,78
Owner: USSR
Actor169: fenc
Location: 32,79
Owner: USSR
Actor170: fenc
Location: 33,79
Owner: USSR
Actor171: fenc
Location: 34,79
Owner: USSR
Actor172: fenc
Location: 49,79
Owner: USSR
Actor173: fenc
Location: 48,80
Owner: USSR
Actor174: fenc
Location: 49,80
Owner: USSR
Actor175: fenc
Location: 48,81
Owner: USSR
Actor176: fenc
Location: 48,82
Owner: USSR
Actor177: fenc
Location: 48,83
Owner: USSR
Actor178: fenc
Location: 48,84
Owner: USSR
Actor179: fenc
Location: 35,86
Owner: USSR
Actor180: fenc
Location: 36,86
Owner: USSR
Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml
FluentMessages: ra|fluent/lua.ftl, ra|fluent/campaign.ftl, map.ftl

View File

@@ -0,0 +1,63 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, soviet01.lua
MissionData:
Briefing: briefing
BackgroundVideo: prolog.vqa
BriefingVideo: soviet1.vqa
StartVideo: flare.vqa
WinVideo: snstrafe.vqa
LossVideo: sfrozen.vqa
V01:
SpawnActorOnDeath:
Actor: healcrate
powerproxy.paratroopers:
ParatroopersPower:
DisplayBeacon: False
DropItems: E1,E1,E1,E2,E2
^CivBuilding:
MustBeDestroyed:
JEEP:
FireWarheadsOnDeath:
ProximityExternalCondition@JAMMER:
Range: 10c0
ValidRelationships: Enemy, Neutral
Condition: jammed
YAK:
Buildable:
Prerequisites: ~disabled
MIG:
Buildable:
Prerequisites: ~disabled
AFLD:
AirstrikePower@spyplane:
Prerequisites: ~disabled
ParatroopersPower@paratroopers:
Prerequisites: ~disabled
-RallyPoint:
CommandBarBlacklist:
DisableStop: true
-Sellable:
Demolishable:
-Condition:
DOME:
CaptureManager:
-BeingCapturedCondition:
-Sellable:
Demolishable:
-Condition:
POWR:
CaptureManager:
-BeingCapturedCondition:
-Sellable:
Demolishable:
-Condition:

View File

@@ -0,0 +1,105 @@
--[[
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.
]]
Yaks = { "yak", "yak", "yak" }
Airfields = { Airfield1, Airfield2, Airfield3 }
InsertYaks = function()
local i = 1
Utils.Do(Yaks, function(yakType)
local start = YakEntry.CenterPosition + WVec.New(0, (i - 1) * 1536, Actor.CruiseAltitude(yakType))
local dest = StartJeep.Location + CVec.New(0, 2 * i)
local yak = Actor.Create(yakType, true, { CenterPosition = start, Owner = USSR, Facing = (Map.CenterOfCell(dest) - start).Facing })
yak.Move(dest)
yak.ReturnToBase(Airfields[i])
i = i + 1
end)
end
JeepDemolishingBridge = function()
StartJeep.Move(StartJeepMovePoint.Location)
Trigger.OnEnteredFootprint({ StartJeepMovePoint.Location }, function(actor, id)
if actor.Owner == France and not BridgeBarrel.IsDead then
Trigger.RemoveFootprintTrigger(id)
BridgeBarrel.Kill()
end
local bridge = Map.ActorsInBox(BridgeWaypoint.CenterPosition, Airfield1.CenterPosition,
function(self) return self.Type == "bridge1" end)[1]
if not bridge.IsDead then
bridge.Kill()
end
end)
end
Paratroopers = function()
Trigger.OnKilled(StartJeep, function()
Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
Paradrop.TargetParatroopers(StartJeepMovePoint.CenterPosition, Angle.East)
end)
Trigger.OnKilled(Church, function()
Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
Paradrop.TargetParatroopers(StartJeepMovePoint.CenterPosition, Angle.East)
end)
Trigger.OnKilled(ParaHut, function()
Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
Paradrop.TargetParatroopers(StartJeepMovePoint.CenterPosition, Angle.East)
end)
end
PanicAttack = function()
if not HouseDamaged then
local panicTeam = Reinforcements.Reinforce(France, { "c3", "c6", "c9" }, { CivSpawn.Location }, 0)
Utils.Do(panicTeam, function(a)
a.Move(a.Location + CVec.New(-1,-1))
a.Panic()
end)
end
HouseDamaged = true
end
WorldLoaded = function()
USSR = Player.GetPlayer("USSR")
France = Player.GetPlayer("France")
Germany = Player.GetPlayer("Germany")
InitObjectives(USSR)
VillageRaidObjective = AddPrimaryObjective(USSR, "raze-village")
Trigger.OnAllRemovedFromWorld(Airfields, function()
USSR.MarkFailedObjective(VillageRaidObjective)
end)
JeepDemolishingBridge()
Paradrop = Actor.Create("powerproxy.paratroopers", false, { Owner = USSR })
Trigger.AfterDelay(DateTime.Seconds(2), InsertYaks)
Paratroopers()
Trigger.OnDamaged(HayHouse, PanicAttack)
Trigger.OnKilled(PillboxBarrel1, function()
if not Pillbox1.IsDead then
Pillbox1.Kill()
end
end)
Trigger.OnKilled(PillboxBarrel2, function()
if not Pillbox2.IsDead then
Pillbox2.Kill()
end
end)
end
Tick = function()
if France.HasNoRequiredUnits() and Germany.HasNoRequiredUnits() then
USSR.MarkCompletedObjective(VillageRaidObjective)
end
end