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 =
The Allies have infiltrated one of our nuclear reactors! They have tampered with the core so that a meltdown is imminent within 30 minutes. They must not succeed!
Enter the base and find any remaining technicians. Guide them to the 4 coolant stations so they can activate them, then activate the main computer. The security systems have been armed so beware.
Kill any Allies you find.

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,798 @@
MapFormat: 12
RequiresMod: ra
Title: 07: Core of the Matter
Author: Westwood Studios
Tileset: INTERIOR
MapSize: 128,128
Bounds: 40,43,70,45
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: england
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Faction: england
Enemies: Greece, USSR
PlayerReference@Greece:
Name: Greece
Faction: allies
Color: E2E6F5
Allies: Soviet
Enemies: USSR, Creeps
Bot: campaign
PlayerReference@USSR:
Name: USSR
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: soviet
LockColor: True
Color: FE1100
LockSpawn: True
LockTeam: True
Allies: Soviet
Enemies: Greece, Creeps
PlayerReference@Soviet:
Name: Soviet
Faction: soviet
Color: FE1100
Allies: USSR, Greece
Bot: campaign
PlayerReference@Spain:
Name: Spain
Faction: allies
Color: 0CBB4A
Bot: campaign
Actors:
Actor0: boxes01
Location: 49,46
Owner: Neutral
Actor1: boxes02
Location: 42,46
Owner: Neutral
Actor2: boxes03
Location: 49,48
Owner: Neutral
Actor3: boxes04
Location: 42,48
Owner: Neutral
Actor4: boxes06
Location: 48,46
Owner: Neutral
Actor5: boxes07
Location: 49,47
Owner: Neutral
Actor6: boxes01
Location: 67,74
Owner: Neutral
Actor7: boxes01
Location: 47,68
Owner: Neutral
Actor8: boxes02
Location: 42,67
Owner: Neutral
Actor9: boxes01
Location: 43,67
Owner: Neutral
Actor10: boxes01
Location: 44,67
Owner: Neutral
Actor11: boxes03
Location: 48,60
Owner: Neutral
Actor12: boxes03
Location: 44,68
Owner: Neutral
Actor13: boxes04
Location: 46,66
Owner: Neutral
Actor14: boxes04
Location: 47,69
Owner: Neutral
Actor15: boxes03
Location: 44,69
Owner: Neutral
Actor16: boxes02
Location: 44,62
Owner: Neutral
Actor17: boxes02
Location: 49,68
Owner: Neutral
Actor18: boxes01
Location: 48,66
Owner: Neutral
Actor19: boxes01
Location: 43,65
Owner: Neutral
Actor20: boxes02
Location: 46,65
Owner: Neutral
Actor21: boxes03
Location: 44,65
Owner: Neutral
Actor22: boxes01
Location: 43,62
Owner: Neutral
Actor23: boxes04
Location: 43,63
Owner: Neutral
Actor24: boxes05
Location: 43,64
Owner: Neutral
Actor25: boxes05
Location: 41,67
Owner: Neutral
Actor26: boxes05
Location: 47,66
Owner: Neutral
Actor27: boxes05
Location: 46,62
Owner: Neutral
Actor28: boxes06
Location: 48,62
Owner: Neutral
Actor29: boxes04
Location: 49,62
Owner: Neutral
Actor30: boxes03
Location: 49,63
Owner: Neutral
Actor31: boxes03
Location: 46,64
Owner: Neutral
Actor32: boxes03
Location: 48,68
Owner: Neutral
Actor33: boxes02
Location: 46,61
Owner: Neutral
Actor34: boxes01
Location: 46,60
Owner: Neutral
Actor35: boxes04
Location: 43,59
Owner: Neutral
Actor36: boxes04
Location: 43,60
Owner: Neutral
Actor37: boxes05
Location: 42,57
Owner: Neutral
Actor38: boxes06
Location: 43,58
Owner: Neutral
Actor39: boxes07
Location: 45,62
Owner: Neutral
Actor40: boxes08
Location: 45,56
Owner: Neutral
Actor41: boxes05
Location: 46,57
Owner: Neutral
Actor42: boxes03
Location: 48,57
Owner: Neutral
Actor43: boxes03
Location: 44,55
Owner: Neutral
Actor44: boxes09
Location: 46,54
Owner: Neutral
Actor45: boxes08
Location: 45,55
Owner: Neutral
Actor46: boxes07
Location: 45,54
Owner: Neutral
Actor47: boxes05
Location: 45,53
Owner: Neutral
Actor48: boxes04
Location: 47,55
Owner: Neutral
Actor49: boxes03
Location: 47,54
Owner: Neutral
Actor50: boxes03
Location: 47,60
Owner: Neutral
Actor51: boxes02
Location: 46,59
Owner: Neutral
Actor52: boxes01
Location: 49,57
Owner: Neutral
Actor53: boxes05
Location: 46,63
Owner: Neutral
Actor54: boxes01
Location: 41,57
Owner: Neutral
Actor55: boxes01
Location: 45,57
Owner: Neutral
Actor56: boxes02
Location: 45,58
Owner: Neutral
Actor57: boxes03
Location: 45,59
Owner: Neutral
Actor58: boxes01
Location: 46,56
Owner: Neutral
Actor59: boxes01
Location: 43,57
Owner: Neutral
Actor60: boxes01
Location: 46,55
Owner: Neutral
Actor61: boxes06
Location: 86,69
Owner: Neutral
Actor65: barl
Location: 98,45
Owner: Creeps
Actor66: barl
Location: 98,49
Owner: Creeps
Actor67: brl3
Location: 98,46
Owner: Creeps
Actor68: brl3
Location: 100,44
Owner: Creeps
Actor69: barl
Location: 105,48
Owner: Creeps
Actor70: barl
Location: 106,49
Owner: Creeps
Actor71: barl
Location: 105,50
Owner: Creeps
Actor72: brl3
Location: 105,51
Owner: Creeps
Actor73: barl
Location: 106,52
Owner: Creeps
Actor75: barl
Location: 105,54
Owner: Creeps
Actor76: barl
Location: 105,55
Owner: Creeps
Actor77: brl3
Location: 105,56
Owner: Creeps
Actor78: brl3
Location: 106,57
Owner: Creeps
Actor79: barl
Location: 105,58
Owner: Creeps
Actor80: barl
Location: 105,59
Owner: Creeps
Actor81: barl
Location: 106,60
Owner: Creeps
Actor82: barl
Location: 105,61
Owner: Creeps
Actor83: brl3
Location: 106,62
Owner: Creeps
Actor84: barl
Location: 104,63
Owner: Creeps
Actor86: barl
Location: 98,47
Owner: Creeps
Actor87: brl3
Location: 98,48
Owner: Creeps
Actor88: brl3
Location: 105,63
Owner: Creeps
Actor89: barl
Location: 101,44
Owner: Creeps
Actor90: brl3
Location: 69,74
Owner: Creeps
Actor93: brl3
Location: 64,73
Owner: Creeps
Actor94: barl
Location: 62,73
Owner: Creeps
Actor95: barl
Location: 65,73
Owner: Creeps
Actor97: barl
Location: 70,74
Owner: Creeps
Actor98: brl3
Location: 70,72
Owner: Creeps
Actor99: barl
Location: 69,72
Owner: Creeps
Actor100: brl3
Location: 43,46
Owner: Creeps
Actor101: barl
Location: 45,45
Owner: Creeps
Actor102: brl3
Location: 47,46
Owner: Creeps
Actor103: barl
Location: 44,45
Owner: Creeps
Actor104: brl3
Location: 46,45
Owner: Creeps
Actor105: brl3
Location: 63,73
Owner: Creeps
Actor106: brl3
Location: 49,71
Owner: Creeps
Actor107: barl
Location: 48,71
Owner: Creeps
Actor108: brl3
Location: 47,72
Owner: Creeps
Actor110: barl
Location: 45,72
Owner: Creeps
Actor111: brl3
Location: 45,71
Owner: Creeps
Actor112: brl3
Location: 44,70
Owner: Creeps
Actor113: barl
Location: 43,71
Owner: Creeps
Actor114: brl3
Location: 44,72
Owner: Creeps
Actor115: brl3
Location: 42,72
Owner: Creeps
Actor116: barl
Location: 42,70
Owner: Creeps
Actor117: brl3
Location: 43,69
Owner: Creeps
Actor118: barl
Location: 42,73
Owner: Creeps
Actor119: barl
Location: 42,74
Owner: Creeps
Actor120: barl
Location: 83,67
Owner: Creeps
Actor121: barl
Location: 83,68
Owner: Creeps
Actor122: barl
Location: 83,69
Owner: Creeps
Actor124: barl
Location: 81,79
Owner: Creeps
Actor125: barl
Location: 81,80
Owner: Creeps
Actor126: brl3
Location: 82,80
Owner: Creeps
Actor127: bio
Location: 65,46
Owner: Greece
Actor128: bio
Location: 87,46
Owner: Greece
Actor130: barl
Location: 80,79
Owner: Creeps
Actor133: barl
Location: 99,44
Owner: Creeps
Actor134: brl3
Location: 98,44
Owner: Creeps
Actor135: brl3
Location: 99,45
Owner: Creeps
Actor136: barl
Location: 102,44
Owner: Creeps
Actor138: barl
Location: 78,80
Owner: Creeps
Actor139: brl3
Location: 79,80
Owner: Creeps
Actor150: e1
Location: 84,67
Owner: Greece
Facing: 768
SubCell: 4
Actor172: e1
Location: 77,80
Owner: Greece
Facing: 896
SubCell: 2
Actor214: healcrate
Owner: Neutral
Location: 88,69
Actor227: flare
Owner: Spain
Location: 75,49
Actor226: flare
Owner: Spain
Location: 76,49
Actor228: flare
Owner: Spain
Location: 75,48
Actor229: flare
Owner: Spain
Location: 76,48
Actor223: brl3
Owner: Creeps
Location: 105,53
BarlCC: barl
Location: 83,70
Owner: Creeps
CameraCC: camera
Owner: Neutral
Location: 87,69
CameraFTurBottom: camera
Owner: Neutral
Location: 62,80
CameraFTurLeft: camera
Owner: Neutral
Location: 59,65
CameraFTurRight: camera
Owner: Neutral
Location: 93,65
CameraGoalCenter1: camera
Owner: Neutral
Location: 75,51
CameraGoalCenter2: camera
Owner: Neutral
Location: 75,55
CameraGoalCenter3: camera
Owner: Neutral
Location: 75,61
CameraGoalLeft1: camera
Owner: Neutral
Location: 68,58
CameraGoalLeft2: camera
Owner: Neutral
Location: 68,63
CameraGoalRight1: camera
Owner: Neutral
Location: 84,58
CameraGoalRight2: camera
Owner: Neutral
Location: 84,63
CameraRSoldier: camera
Owner: Neutral
Location: 62,72
CameraStart1: camera
Owner: Neutral
Location: 102,48
CameraStart2: camera
Owner: Neutral
Location: 102,54
CameraSoldierTrap2: camera
Owner: Neutral
Location: 47,71
CCGuard1: e1
Location: 87,67
Owner: Greece
Facing: 768
SubCell: 3
CCGuard2: e1
Location: 88,67
Owner: Greece
Facing: 768
SubCell: 4
CCGuard3: e1
Location: 88,68
Owner: Greece
Facing: 768
SubCell: 1
CCGuard4: e1
Location: 87,68
Owner: Greece
Facing: 768
SubCell: 3
Dog1: dog
Location: 84,84
Owner: Soviet
Facing: 896
SubCell: 1
Dog2: dog
Owner: Soviet
Location: 84,83
SubCell: 3
Facing: 368
Dog3: dog
Location: 82,83
Owner: Soviet
SubCell: 4
Dog4: dog
Location: 80,83
Owner: Soviet
Facing: 256
SubCell: 2
Dog5: dog
Location: 85,82
Owner: Soviet
Facing: 896
SubCell: 1
Dog6: dog
Location: 85,79
Owner: Soviet
Facing: 768
SubCell: 4
Dog7: dog
Location: 85,81
Owner: Soviet
Facing: 768
SubCell: 4
Dog8: dog
Location: 86,83
Owner: Soviet
Facing: 896
SubCell: 1
Dog9: dog
Location: 86,84
Owner: Soviet
SubCell: 0
Dog10: dog
Location: 86,82
Owner: Soviet
Facing: 768
SubCell: 0
Dog11: dog
Location: 82,84
Owner: Soviet
Facing: 128
SubCell: 1
Dog12: dog
Location: 83,84
Owner: Soviet
SubCell: 1
Dog13: dog
Location: 86,81
Owner: Soviet
Facing: 128
SubCell: 1
Dog14: dog
Location: 85,83
Owner: Soviet
SubCell: 3
Dog15: dog
Location: 81,83
Owner: Soviet
SubCell: 4
Dog16: dog
Location: 86,80
Owner: Soviet
SubCell: 4
Dog17: dog
Location: 85,84
Owner: Soviet
SubCell: 0
Dog18: dog
Location: 81,84
Owner: Soviet
SubCell: 1
Dog19: dog
Location: 86,79
Owner: Soviet
Facing: 896
SubCell: 0
EntranceGuard1: e1
Location: 100,57
Owner: Greece
SubCell: 1
EntranceGuard2: e1
Location: 99,55
Owner: Greece
SubCell: 1
EntranceGuard3: e1
Location: 100,56
Owner: Greece
SubCell: 2
EntranceGuard4: e1
Location: 98,56
Owner: Greece
SubCell: 2
EntranceGuard5: e1
Location: 98,57
Owner: Greece
SubCell: 1
EntranceGuard6: e1
Location: 99,56
Owner: Greece
SubCell: 2
EntranceGuard7: e1
Location: 97,56
Owner: Greece
SubCell: 2
EntranceGuard8: e1
Location: 99,56
Owner: Greece
SubCell: 3
Tanya: e7
Location: 75,54
Owner: Greece
Facing: 512
SubCell: 2
GoalGuard1: e1
Location: 74,54
Owner: Greece
Facing: 512
SubCell: 2
GoalGuard2: e1
Location: 73,54
Owner: Greece
Facing: 512
SubCell: 2
GoalGuard3: e1
Location: 76,54
Owner: Greece
Facing: 512
SubCell: 2
GoalGuard4: e1
Location: 77,54
Owner: Greece
Facing: 512
SubCell: 2
FTurBottom: ftur
Location: 62,79
Owner: Greece
FTur1Goal: waypoint
Owner: Neutral
Location: 77,53
FTur2Goal: waypoint
Owner: Neutral
Location: 74,53
FTurLeft: ftur
Location: 45,50
Owner: Greece
FTurPrisoners: ftur
Location: 59,64
Owner: Greece
FTurRight: ftur
Location: 93,64
Owner: Greece
PBox: pbox
Location: 83,81
Owner: Greece
PBoxBrl: brl3
Location: 80,80
Owner: Creeps
Prisoner1: e6
Location: 44,46
Owner: Soviet
Facing: 640
SubCell: 4
Prisoner2: e6
Location: 44,47
Owner: Soviet
Facing: 512
SubCell: 4
Prisoner3: e6
Location: 46,47
Owner: Soviet
Facing: 384
SubCell: 0
Prisoner4: e6
Location: 45,47
Owner: Soviet
Facing: 384
SubCell: 1
Prisoner5: e6
Location: 46,46
Owner: Soviet
Facing: 512
SubCell: 3
Prisoner6: e1
Location: 46,46
Owner: Soviet
Health: 51
SubCell: 4
PrisonEntranceGuard: e1
Location: 46,69
Owner: Greece
Facing: 512
SubCell: 1
PrisonerGuard1: e1
Location: 45,48
Owner: Greece
SubCell: 0
PrisonerGuard2: e1
Location: 46,49
Owner: Greece
Facing: 512
SubCell: 0
PrisonerGuard3: e1
Location: 44,49
Owner: Greece
Facing: 512
SubCell: 0
RSoldier1: e3
Owner: Greece
Location: 65,72
SubCell: 3
Facing: 368
RSoldier2: e3
Location: 65,74
Owner: Greece
Facing: 368
SubCell: 2
RSoldierTrap1: brl3
Owner: Creeps
Location: 68,72
RSoldierTrap2: barl
Owner: Creeps
Location: 68,74
StartingUnitsSpawn: waypoint
Location: 102,43
Owner: Neutral
SoldierTrap1: brl3
Owner: Creeps
Location: 98,50
SoldierTrap2: barl
Owner: Creeps
Location: 46,71
SoldierTrap1Waypoint1: waypoint
Location: 102,46
Owner: Neutral
SoldierTrap1Waypoint2: waypoint
Owner: Neutral
Location: 104,53
SoldierTrap1Waypoint3: waypoint
Owner: Neutral
Location: 93,72
SoldierTrap2Waypoint: waypoint
Owner: Neutral
Location: 45,52
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,43 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, soviet07.lua
MissionData:
Briefing: briefing
BriefingVideo: soviet7.vqa
StartVideo: countdwn.vqa
WinVideo: averted.vqa
LossVideo: nukestok.vqa
ScriptLobbyDropdown@difficulty:
ID: difficulty
Label: dropdown-difficulty.label
Description: dropdown-difficulty.description
Values:
easy: options-difficulty.easy
normal: options-difficulty.normal
hard: options-difficulty.hard
Default: normal
Player:
LobbyPrerequisiteCheckbox@GLOBALBOUNTY:
Enabled: False
Locked: True
CAMERA:
RevealsShroud:
Range: 6c0
FTUR:
Valued:
Cost: 0
Power:
Amount: 0
CaptureManager:
-BeingCapturedCondition:
-Sellable:
Demolishable:
-Condition:
PBOX:
-AutoTarget:
-AutoTargetPriority@DEFAULT:
-AutoTargetPriority@ATTACKANYTHING:

View File

@@ -0,0 +1,321 @@
--[[
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.
]]
if Difficulty == "easy" then
RemainingTime = DateTime.Minutes(7)
elseif Difficulty == "normal" then
RemainingTime = DateTime.Minutes(6)
elseif Difficulty == "hard" then
RemainingTime = DateTime.Minutes(5)
end
Dogs = { Dog1, Dog2, Dog3, Dog4, Dog5, Dog6, Dog7, Dog8, Dog9, Dog10, Dog11, Dog12, Dog13, Dog14, Dog15, Dog16, Dog17, Dog18, Dog19 }
Engineers = { Prisoner1, Prisoner2, Prisoner3, Prisoner4, Prisoner5 }
PrisonerGuards = { PrisonerGuard1, PrisonerGuard2, PrisonerGuard3 }
EntranceGuards = { EntranceGuard1, EntranceGuard2, EntranceGuard3, EntranceGuard4, EntranceGuard5, EntranceGuard6, EntranceGuard7, EntranceGuard8 }
GoalGuards = { GoalGuard1, GoalGuard2, GoalGuard3, GoalGuard4 }
CCGuards = { CCGuard1, CCGuard2, CCGuard3, CCGuard4 }
StartingUnitsReinforcements = { "e1", "e1", "e1", "e1" }
CameraCCTrigger = { CPos.New(83, 71), CPos.New(84,71) }
CameraGoalCenterTrigger = { CPos.New(74, 66), CPos.New(75, 66), CPos.New(76, 66), CPos.New(77, 66) }
CameraGoalLeftTrigger = { CPos.New(62, 59), CPos.New(62, 60), CPos.New(62, 62), CPos.New(62, 63) }
CameraGoalRightTrigger = { CPos.New(90, 59), CPos.New(90, 60), CPos.New(90, 62), CPos.New(90, 63) }
ControlCenterTrigger = { CPos.New(87, 67), CPos.New(88, 67) }
ControlCenterEngineerTrigger = { CPos.New(87, 67), CPos.New(88, 67) }
FTurBottomTrigger = { CPos.New(67, 82), CPos.New(67, 83) }
FTurLeftTrigger = { CPos.New(57, 70), CPos.New(58, 70), CPos.New(59, 70), CPos.New(60, 70) }
FTurRightTrigger = { CPos.New(97, 68), CPos.New(97, 69), CPos.New(97, 70) }
GoalCenterTrigger = { CPos.New(73, 52), CPos.New(74, 52), CPos.New(75, 52), CPos.New(76, 52), CPos.New(77, 52), CPos.New(78, 52) }
GoalLeft1Trigger = { CPos.New(65, 58), CPos.New(66, 58), CPos.New(67, 58), CPos.New(65, 59), CPos.New(66, 59), CPos.New(67, 59) }
GoalLeft2Trigger = { CPos.New(65, 64), CPos.New(66, 64), CPos.New(67, 64), CPos.New(65, 65), CPos.New(66, 65), CPos.New(67, 65) }
GoalRight1Trigger = { CPos.New(86, 57), CPos.New(87, 57), CPos.New(88, 57), CPos.New(86, 58), CPos.New(87, 58), CPos.New(88, 58) }
GoalRight2Trigger = { CPos.New(86, 64), CPos.New(87, 64), CPos.New(88, 64), CPos.New(86, 65), CPos.New(87, 65), CPos.New(88, 65) }
RSoldierTrapTrigger = { CPos.New(72, 72), CPos.New(72,73), CPos.New(72,74) }
SoldierTrap2Trigger = { CPos.New(51, 73), CPos.New(51, 74) }
Trigger.OnEnteredFootprint(CameraCCTrigger, function(a, id)
if not CameraCCTriggered and a.Owner == USSR then
CameraCCTriggered = true
Actor.Create("camera", true, { Owner = USSR, Location = CameraCC.Location })
end
end)
Trigger.OnEnteredFootprint(CameraGoalCenterTrigger, function(a, id)
if not CameraGoalCenterTriggered and a.Owner == USSR then
CameraGoalCenterTriggered = true
if not ControlCenterEngineerTriggered then
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalCenter1.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalCenter2.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalCenter3.Location })
end
end
end)
Trigger.OnEnteredFootprint(CameraGoalLeftTrigger, function(a, id)
if not CameraGoalLeftTriggered and a.Owner == USSR then
CameraGoalLeftTriggered = true
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalLeft1.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalLeft2.Location })
end
end)
Trigger.OnEnteredFootprint(CameraGoalRightTrigger, function(a, id)
if not CameraGoalRightTriggered and a.Owner == USSR then
CameraGoalRightTriggered = true
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalRight1.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalRight2.Location })
end
end)
Trigger.OnEnteredFootprint(ControlCenterTrigger, function(a, id)
if not ControlCenterTriggered and a.Owner == USSR and a.Type == "e1" then
ControlCenterTriggered = true
FTurPrisoners.Kill()
FTurLeft.Kill()
FTurRight.Kill()
FTurBottom.Kill()
USSR.MarkCompletedObjective(SovietObjective1)
end
end)
Trigger.OnEnteredFootprint(ControlCenterEngineerTrigger, function(a, id)
if not ControlCenterEngineerTriggered and a.Owner == USSR and a.Type == "e6" then
ControlCenterEngineerTriggered = true
local fturA = Actor.Create("ftur", true, { Owner = USSR, Location = FTur1Goal.Location})
local fturB = Actor.Create("ftur", true, { Owner = USSR, Location = FTur2Goal.Location})
Camera.Position = CameraGoalCenter1.CenterPosition
if not CameraGoalRightTriggered then
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalCenter1.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalCenter2.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraGoalCenter3.Location })
end
Utils.Do(GoalGuards, function(actor)
if not actor.IsDead then
actor.AttackMove(FTur1Goal.Location)
end
end)
if not Tanya.IsDead then
Tanya.Demolish(fturA)
Tanya.Demolish(fturB)
end
USSR.MarkCompletedObjective(SovietObjective4)
end
end)
Trigger.OnEnteredFootprint(FTurBottomTrigger, function(a, id)
if not FTurBottomTriggered and a.Owner == USSR then
FTurBottomTriggered = true
if not RSoldierTrapTriggered then
Actor.Create("camera", true, { Owner = USSR, Location = CameraRSoldier.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraFTurBottom.Location })
end
end
end)
Trigger.OnEnteredFootprint(FTurLeftTrigger, function(a, id)
if not FTurLeftTriggered and a.Owner == USSR then
FTurLeftTriggered = true
Actor.Create("camera", true, { Owner = USSR, Location = CameraFTurLeft.Location })
end
end)
Trigger.OnEnteredFootprint(FTurRightTrigger, function(a, id)
if not FTurRightTriggered and a.Owner == USSR then
FTurRightTriggered = true
Actor.Create("camera", true, { Owner = USSR, Location = CameraFTurRight.Location })
end
end)
Trigger.OnEnteredFootprint(GoalCenterTrigger, function(a, id)
if not GoalCenterTriggered and a.Owner == USSR and a.Type == "e6" then
GoalCenterTriggered = true
USSR.MarkCompletedObjective(SovietObjective5)
end
end)
Trigger.OnEnteredFootprint(GoalLeft1Trigger, function(a, id)
if not GoalLeft1Triggered and a.Owner == USSR and a.Type == "e6" then
GoalLeft1Triggered = true
Media.PlaySpeechNotification(USSR, "ControlCenterDeactivated")
end
end)
Trigger.OnEnteredFootprint(GoalLeft2Trigger, function(a, id)
if not GoalLeft2Triggered and a.Owner == USSR and a.Type == "e6" then
GoalLeft2Triggered = true
Media.PlaySpeechNotification(USSR, "ControlCenterDeactivated")
end
end)
Trigger.OnEnteredFootprint(GoalRight1Trigger, function(a, id)
if not GoalRight1Triggered and a.Owner == USSR and a.Type == "e6" then
GoalRight1Triggered = true
Media.PlaySpeechNotification(USSR, "ControlCenterDeactivated")
end
end)
Trigger.OnEnteredFootprint(GoalRight2Trigger, function(a, id)
if not GoalRight2Triggered and a.Owner == USSR and a.Type == "e6" then
GoalRight2Triggered = true
Media.PlaySpeechNotification(USSR, "ControlCenterDeactivated")
end
end)
Trigger.OnEnteredFootprint(RSoldierTrapTrigger, function(a, id)
if not RSoldierTrapTriggered and a.Owner == USSR then
RSoldierTrapTriggered = true
if not FTurBottomTriggered then
Actor.Create("camera", true, { Owner = USSR, Location = CameraRSoldier.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraFTurBottom.Location })
end
if not RSoldier1.IsDead and not RSoldierTrap1.IsDead then
RSoldier1.Attack(RSoldierTrap1)
end
if not RSoldier2.IsDead and not RSoldierTrap2.IsDead then
RSoldier2.Attack(RSoldierTrap2)
end
end
end)
Trigger.OnEnteredFootprint(SoldierTrap2Trigger, function(a, id)
if not SoldierTrap2Triggered and a.Owner == USSR then
SoldierTrap2Triggered = true
Actor.Create("camera", true, { Owner = USSR, Location = CameraSoldierTrap2.Location })
if not SoldierTrap2.IsDead then
PrisonEntranceGuard.Attack(SoldierTrap2)
end
PrisonEntranceGuard.Move(SoldierTrap2Waypoint.Location)
end
end)
Trigger.OnAllKilled(Engineers, function()
Greece.MarkCompletedObjective(AlliedObjective)
end)
Trigger.OnAllKilled(PrisonerGuards, function()
Utils.Do(Engineers, function(actor)
actor.Owner = USSR
end)
Prisoner6.Owner = USSR
USSR.MarkCompletedObjective(SovietObjective2)
end)
Trigger.OnKilled(BarlCC, function()
if not CameraCCTriggered then
Actor.Create("camera", true, { Owner = USSR, Location = CameraCC.Location })
CameraCCTriggered = true
end
Utils.Do(CCGuards, function(actor)
if not actor.IsDead then
actor.Hunt()
end
end)
end)
Trigger.OnKilled(PBoxBrl, function()
PBox.Kill()
Utils.Do(Dogs, function(actor)
actor.Owner = USSR
end)
USSR.MarkCompletedObjective(SovietObjective6)
end)
Trigger.OnKilled(PrisonEntranceGuard, function()
if ControlCenterTriggered then
Utils.Do(PrisonerGuards, function(actor)
if not actor.IsDead then
actor.Hunt()
end
end)
end
end)
IntroSequence = function()
StartingUnits = Reinforcements.Reinforce(USSR, StartingUnitsReinforcements, { StartingUnitsSpawn.Location, SoldierTrap1Waypoint1.Location }, 0)
Trigger.AfterDelay(DateTime.Seconds(3), function()
Utils.Do(EntranceGuards, function(actor)
if not SoldierTrap1.IsDead then
actor.Attack(SoldierTrap1)
end
actor.AttackMove(SoldierTrap1Waypoint1.Location)
actor.AttackMove(SoldierTrap1Waypoint2.Location)
actor.AttackMove(SoldierTrap1Waypoint3.Location)
end)
Media.PlaySpeechNotification(USSR, "TimerStarted")
TimerStarted = true
end)
-- Trigger a game over if the player lost all human units before the security system has been deactivated
Trigger.OnAllKilled(StartingUnits, function()
if not ControlCenterTriggered then
Greece.MarkCompletedObjective(AlliedObjective)
end
end)
end
WorldLoaded = function()
USSR = Player.GetPlayer("USSR")
Greece = Player.GetPlayer("Greece")
Camera.Position = SoldierTrap1Waypoint1.CenterPosition
Actor.Create("camera", true, { Owner = USSR, Location = CameraStart1.Location })
Actor.Create("camera", true, { Owner = USSR, Location = CameraStart2.Location })
IntroSequence()
InitObjectives(USSR)
AlliedObjective = AddPrimaryObjective(Greece, "")
SovietObjective1 = AddPrimaryObjective(USSR, "deactivate-security-system")
SovietObjective2 = AddPrimaryObjective(USSR, "rescue-engineers")
SovietObjective3 = AddPrimaryObjective(USSR, "engineers-coolant-station")
SovietObjective4 = AddPrimaryObjective(USSR, "engineer-reprogram-security")
SovietObjective5 = AddPrimaryObjective(USSR, "engineer-reactor-core")
SovietObjective6 = AddSecondaryObjective(USSR, "free-dogs")
end
Tick = function()
if USSR.HasNoRequiredUnits() and TimerStarted then
Greece.MarkCompletedObjective(AlliedObjective)
end
if RemainingTime == DateTime.Minutes(5) and Difficulty ~= "hard" then
Media.PlaySpeechNotification(USSR, "WarningFiveMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(4) then
Media.PlaySpeechNotification(USSR, "WarningFourMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(3) then
Media.PlaySpeechNotification(USSR, "WarningThreeMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(2) then
Media.PlaySpeechNotification(USSR, "WarningTwoMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(1) then
Media.PlaySpeechNotification(USSR, "WarningOneMinuteRemaining")
end
if GoalLeft1Triggered and GoalLeft2Triggered and GoalRight1Triggered and GoalRight2Triggered then
USSR.MarkCompletedObjective(SovietObjective3)
end
if RemainingTime > 0 and TimerStarted then
if (RemainingTime % DateTime.Seconds(1)) == 0 then
Timer = UserInterface.GetFluentMessage("time-until-meltdown", { ["time"] = Utils.FormatTime(RemainingTime) })
UserInterface.SetMissionText(Timer, USSR.Color)
end
RemainingTime = RemainingTime - 1
elseif RemainingTime == 0 then
UserInterface.SetMissionText("")
Greece.MarkCompletedObjective(AlliedObjective)
end
end

View File

@@ -0,0 +1,5 @@
M1Carbine:
Range: 3c0
FireballLauncher:
Range: 3c128