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,10 @@
## rules.yaml
actor-powerproxy-spyplane =
.airstrikepower-name = Spy Plane (Single Use)
.airstrikepower-description = Reveals an area of the map and uncovers cloaked enemy units.
## rules.yaml
briefing =
A critical cargo held in this supply truck must reach the waystation atop the mountain. The way is blocked by Allied squads, but do not let that deter you -- the cargo must reach its destination.
The onset of nightfall has brought sub-zero temperatures with it. The Allies are prepared for these conditions -- our units are not. The life expectancy of your troops in these extremes is limited. Infantry may last 12 minutes, while vehicles could last for up to 36 minutes. You have little time. Go.

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,900 @@
MapFormat: 12
RequiresMod: ra
Title: Top o' the World
Author: Westwood Studios
Tileset: SNOW
MapSize: 128,128
Bounds: 29,31,70,65
Visibility: MissionSelector
Categories: Mission
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: england
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Faction: england
Enemies: Greece, GoodGuy, USSR, BadGuy
PlayerReference@BadGuy:
Name: BadGuy
Faction: soviet
Color: FE1100
Allies: USSR
Enemies: Greece, GoodGuy, Creeps
Bot: campaign
PlayerReference@Greece:
Name: Greece
Faction: allies
Color: ABB7E4
Allies: GoodGuy
Enemies: USSR, Creeps
Bot: campaign
PlayerReference@GoodGuy:
Name: GoodGuy
Faction: allies
Color: ABB7E4
Allies: Greece
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: BadGuy
Enemies: Greece, GoodGuy, Creeps
Actors:
Actor0: brik
Location: 61,37
Owner: BadGuy
Actor1: brik
Location: 62,37
Owner: BadGuy
Actor2: brik
Location: 65,37
Owner: BadGuy
Actor3: brik
Location: 66,37
Owner: BadGuy
Actor4: brik
Location: 70,37
Owner: BadGuy
Actor5: brik
Location: 71,37
Owner: BadGuy
Actor6: brik
Location: 74,37
Owner: BadGuy
Actor7: brik
Location: 75,37
Owner: BadGuy
Actor8: brik
Location: 61,38
Owner: BadGuy
Actor9: brik
Location: 62,38
Owner: BadGuy
Actor10: brik
Location: 63,38
Owner: BadGuy
Actor11: brik
Location: 64,38
Owner: BadGuy
Actor12: brik
Location: 65,38
Owner: BadGuy
Actor13: brik
Location: 66,38
Owner: BadGuy
Actor14: brik
Location: 70,38
Owner: BadGuy
Actor15: brik
Location: 71,38
Owner: BadGuy
Actor16: brik
Location: 72,38
Owner: BadGuy
Actor17: brik
Location: 73,38
Owner: BadGuy
Actor18: brik
Location: 74,38
Owner: BadGuy
Actor19: brik
Location: 75,38
Owner: BadGuy
Actor20: sbag
Location: 73,66
Owner: GoodGuy
Actor21: sbag
Location: 74,66
Owner: GoodGuy
Actor22: sbag
Location: 74,67
Owner: GoodGuy
Actor23: sbag
Location: 93,73
Owner: GoodGuy
Actor24: sbag
Location: 95,73
Owner: GoodGuy
Actor25: sbag
Location: 91,76
Owner: GoodGuy
Actor26: sbag
Location: 92,76
Owner: GoodGuy
Actor27: sbag
Location: 97,76
Owner: GoodGuy
Actor28: sbag
Location: 98,76
Owner: GoodGuy
Actor29: sbag
Location: 91,77
Owner: GoodGuy
Actor30: sbag
Location: 98,77
Owner: GoodGuy
Actor31: sbag
Location: 76,81
Owner: GoodGuy
Actor32: sbag
Location: 77,81
Owner: GoodGuy
Actor33: sbag
Location: 80,81
Owner: GoodGuy
Actor34: sbag
Location: 75,82
Owner: GoodGuy
Actor35: sbag
Location: 76,82
Owner: GoodGuy
Actor36: sbag
Location: 80,82
Owner: GoodGuy
Actor37: sbag
Location: 75,83
Owner: GoodGuy
Actor38: sbag
Location: 80,83
Owner: GoodGuy
Actor39: sbag
Location: 79,84
Owner: GoodGuy
Actor40: sbag
Location: 80,84
Owner: GoodGuy
Actor41: sbag
Location: 90,93
Owner: GoodGuy
Actor42: sbag
Location: 90,94
Owner: GoodGuy
Actor43: sbag
Location: 87,95
Owner: GoodGuy
Actor44: sbag
Location: 88,95
Owner: GoodGuy
Actor45: sbag
Location: 89,95
Owner: GoodGuy
Actor46: sbag
Location: 90,95
Owner: GoodGuy
Actor47: tc02
Location: 34,31
Owner: Neutral
Actor48: tc01
Location: 45,31
Owner: Neutral
Actor49: tc05
Location: 86,30
Owner: Neutral
Actor50: tc03
Location: 97,31
Owner: Neutral
Actor51: tc05
Location: 55,31
Owner: Neutral
Actor52: t12
Location: 60,32
Owner: Neutral
Actor53: t17
Location: 76,32
Owner: Neutral
Actor54: tc04
Location: 29,33
Owner: Neutral
Actor55: t08
Location: 40,35
Owner: Neutral
Actor56: tc02
Location: 56,36
Owner: Neutral
Actor57: t13
Location: 76,36
Owner: Neutral
Actor58: tc01
Location: 43,37
Owner: Neutral
Actor59: t10
Location: 82,37
Owner: Neutral
Actor60: t12
Location: 83,38
Owner: Neutral
Actor61: t11
Location: 77,39
Owner: Neutral
Actor62: tc02
Location: 96,42
Owner: Neutral
Actor63: tc05
Location: 29,43
Owner: Neutral
Actor64: tc04
Location: 87,44
Owner: Neutral
Actor65: tc03
Location: 29,46
Owner: Neutral
Actor66: t14
Location: 29,50
Owner: Neutral
Actor67: tc02
Location: 38,51
Owner: Neutral
Actor68: ice02
Location: 97,52
Owner: Neutral
Actor69: t15
Location: 40,53
Owner: Neutral
Actor70: t16
Location: 30,55
Owner: Neutral
Actor71: tc04
Location: 29,56
Owner: Neutral
Actor72: tc03
Location: 29,59
Owner: Neutral
Actor73: tc05
Location: 45,59
Owner: Neutral
Actor74: ice04
Location: 96,61
Owner: Neutral
Actor75: tc04
Location: 40,60
Owner: Neutral
Actor76: tc04
Location: 66,60
Owner: Neutral
Actor77: tc02
Location: 76,61
Owner: Neutral
Actor78: t08
Location: 85,63
Owner: Neutral
Actor79: tc01
Location: 45,63
Owner: Neutral
Actor80: t17
Location: 86,66
Owner: Neutral
Actor81: tc04
Location: 55,68
Owner: Neutral
Actor82: tc01
Location: 29,71
Owner: Neutral
Actor83: tc02
Location: 60,72
Owner: Neutral
Actor84: tc03
Location: 50,73
Owner: Neutral
Actor85: t08
Location: 46,76
Owner: Neutral
Actor86: t10
Location: 42,76
Owner: Neutral
Actor87: tc02
Location: 36,77
Owner: Neutral
Actor88: t16
Location: 70,77
Owner: Neutral
Actor89: tc04
Location: 30,78
Owner: Neutral
Actor90: tc02
Location: 66,79
Owner: Neutral
Actor91: t08
Location: 69,80
Owner: Neutral
Actor92: tc05
Location: 69,78
Owner: Neutral
Actor93: t07
Location: 57,80
Owner: Neutral
Actor94: tc01
Location: 64,80
Owner: Neutral
Actor95: t08
Location: 34,82
Owner: Neutral
Actor96: tc05
Location: 54,80
Owner: Neutral
Actor97: tc04
Location: 52,81
Owner: Neutral
Actor98: t06
Location: 57,82
Owner: Neutral
Actor99: tc04
Location: 58,81
Owner: Neutral
Actor100: t08
Location: 60,83
Owner: Neutral
Actor101: t11
Location: 61,82
Owner: Neutral
Actor102: tc01
Location: 83,82
Owner: Neutral
Actor103: tc02
Location: 62,83
Owner: Neutral
Actor104: tc05
Location: 29,85
Owner: Neutral
Actor105: tc01
Location: 63,86
Owner: Neutral
Actor106: t11
Location: 29,88
Owner: Neutral
Actor107: t08
Location: 42,90
Owner: Neutral
Actor108: tc04
Location: 57,90
Owner: Neutral
Actor109: tc01
Location: 56,92
Owner: Neutral
Actor110: tc02
Location: 63,92
Owner: Neutral
Actor111: t08
Location: 71,93
Owner: Neutral
Actor112: tc05
Location: 41,93
Owner: Neutral
Actor113: tc02
Location: 49,94
Owner: Neutral
Actor114: tc05
Location: 51,93
Owner: Neutral
Actor115: tc01
Location: 55,94
Owner: Neutral
Actor116: tc04
Location: 68,93
Owner: Neutral
Actor117: tc02
Location: 70,94
Owner: Neutral
Actor118: apwr
Location: 64,32
Owner: BadGuy
Actor119: apwr
Location: 70,32
Owner: BadGuy
Actor120: apwr
Location: 61,33
Owner: BadGuy
USSRTechCenter01: stek
Location: 67,33
Owner: BadGuy
Actor122: apwr
Location: 73,33
Owner: BadGuy
Actor123: tsla
Location: 65,36
Owner: BadGuy
Actor124: tsla
Location: 71,36
Owner: BadGuy
Actor125: tsla
Location: 63,37
Owner: BadGuy
Actor126: tsla
Location: 73,37
Owner: BadGuy
BridgeBarrel01: brl3
Location: 84,38
Owner: Greece
BridgeBarrel02: barl
Location: 84,39
Owner: Greece
BridgeBarrel03: brl3
Location: 87,39
Owner: Greece
Actor130: gun
Location: 43,40
Owner: Greece
Facing: 892
Actor131: gun
Location: 40,41
Owner: Greece
Facing: 380
Actor132: gap
Location: 42,42
Owner: Greece
Actor133: apwr
Location: 90,41
Owner: Greece
Actor134: apwr
Location: 93,41
Owner: Greece
Actor135: gun
Location: 44,43
Owner: Greece
Facing: 892
Actor136: gun
Location: 40,44
Owner: Greece
Facing: 380
Actor137: gun
Location: 44,46
Owner: Greece
Facing: 892
Actor138: gun
Location: 41,47
Owner: Greece
Facing: 380
Actor139: hbox
Location: 87,47
Owner: Greece
AAGun01: agun
Location: 53,61
Owner: GoodGuy
Facing: 380
AAGun02: agun
Location: 67,62
Owner: GoodGuy
Facing: 380
Actor142: gun
Location: 73,67
Owner: GoodGuy
Facing: 380
AAGun03: agun
Location: 62,69
Owner: GoodGuy
Facing: 892
AAGun04: agun
Location: 59,73
Owner: GoodGuy
Facing: 252
Actor145: gun
Location: 94,73
Owner: GoodGuy
Facing: 508
AAGun05: agun
Location: 70,75
Owner: GoodGuy
Facing: 636
Actor147: gun
Location: 92,77
Owner: GoodGuy
Facing: 508
Actor148: gun
Location: 97,77
Owner: GoodGuy
Facing: 508
AAGun06: agun
Location: 39,78
Owner: GoodGuy
Facing: 636
Actor150: brl3
Location: 77,82
Owner: GoodGuy
Actor151: v19
Location: 76,83
Owner: GoodGuy
Actor152: barl
Location: 77,83
Owner: GoodGuy
Actor153: brl3
Location: 79,83
Owner: GoodGuy
AlliedGNRLHouse: v10
Location: 89,94
Owner: Greece
Actor155: 2tnk
Location: 94,46
Owner: Greece
Facing: 380
AlliedSquad05MTank01: 2tnk
Location: 57,56
Owner: GoodGuy
Facing: 124
AlliedSquad05MTank02: 2tnk
Location: 63,56
Owner: GoodGuy
Facing: 124
AlliedSquad04MGG01: mgg
Location: 34,61
Owner: Greece
Facing: 508
AlliedSquad04MTank01: 2tnk
Location: 31,63
Owner: GoodGuy
Facing: 508
AlliedSquad04Arty01: arty
Location: 33,63
Owner: Greece
Facing: 508
AlliedSquad04Arty02: arty
Location: 35,63
Owner: Greece
Facing: 508
AlliedSquad04MTank02: 2tnk
Location: 37,63
Owner: GoodGuy
Facing: 508
AlliedSquad03LTank01: 1tnk
Location: 78,63
Owner: GoodGuy
Facing: 636
AlliedSquad04MTank03: 2tnk
Location: 33,64
Owner: GoodGuy
Facing: 508
AlliedSquad04Arty03: arty
Location: 34,64
Owner: GoodGuy
Facing: 508
AlliedSquad04MTank04: 2tnk
Location: 35,64
Owner: GoodGuy
Facing: 508
AlliedSquad04MTank05: 2tnk
Location: 34,65
Owner: GoodGuy
Facing: 508
Actor168: 1tnk
Location: 66,65
Owner: GoodGuy
Facing: 508
Actor169: 2tnk
Location: 75,78
Owner: GoodGuy
Facing: 764
Actor170: 2tnk
Location: 78,82
Owner: GoodGuy
Actor171: 2tnk
Location: 55,83
Owner: GoodGuy
Facing: 380
USSRHTank01: 3tnk
Location: 35,87
Owner: USSR
USSRHTank02: 3tnk
Location: 37,87
Owner: USSR
USSRHTank03: 3tnk
Location: 39,87
Owner: USSR
USSRMTank01: 4tnk
Location: 35,89
Owner: USSR
USSRMTank02: 4tnk
Location: 39,89
Owner: USSR
USSRV201: v2rl
Location: 34,93
Owner: USSR
USSRV202: v2rl
Location: 37,93
Owner: USSR
USSRV203: v2rl
Location: 40,93
Owner: USSR
ObjectiveTruck01: truk
Location: 37,95
Owner: USSR
Actor181: e3
Location: 47,33
Owner: GoodGuy
Facing: 252
SubCell: 1
Actor182: e3
Location: 47,34
Owner: GoodGuy
Facing: 252
SubCell: 1
AlliedSquad03RocketInf01: e3
Location: 78,61
Owner: Greece
Facing: 508
SubCell: 1
AlliedSquad03RocketInf02: e3
Location: 84,61
Owner: Greece
Facing: 380
SubCell: 3
Actor185: e3
Location: 72,62
Owner: Greece
SubCell: 4
AlliedSquad03RocketInf03: e3
Location: 80,64
Owner: Greece
Facing: 380
SubCell: 3
Actor187: e3
Location: 72,66
Owner: Greece
Facing: 380
SubCell: 0
Actor188: e3
Location: 74,68
Owner: Greece
Facing: 380
SubCell: 2
Actor189: e3
Location: 60,69
Owner: GoodGuy
Facing: 764
SubCell: 4
Actor190: e3
Location: 60,71
Owner: GoodGuy
Facing: 764
SubCell: 0
Actor191: e3
Location: 69,78
Owner: Greece
SubCell: 4
AlliedSquad02RifleInf01: e1
Location: 88,85
Owner: Greece
SubCell: 2
AlliedSquad02RifleInf02: e1
Location: 89,85
Owner: Greece
SubCell: 2
AlliedSquad02RifleInf03: e1
Location: 89,85
Owner: Greece
SubCell: 1
AlliedSquad02RifleInf04: e1
Location: 88,86
Owner: Greece
SubCell: 2
AlliedSquad02RifleInf05: e1
Location: 89,86
Owner: Greece
SubCell: 2
AlliedSquad02RifleInf06: e1
Location: 89,86
Owner: Greece
SubCell: 1
AlliedSquad02RifleInf07: e1
Location: 88,87
Owner: Greece
SubCell: 2
AlliedSquad02RifleInf08: e1
Location: 89,87
Owner: Greece
SubCell: 2
AlliedSquad02RifleInf09: e1
Location: 89,87
Owner: Greece
SubCell: 1
USSRDog01: dog
Location: 35,91
Owner: USSR
SubCell: 1
USSRDog02: dog
Location: 35,91
Owner: USSR
SubCell: 2
USSRGrenadier01: e2
Location: 37,91
Owner: USSR
SubCell: 1
USSRGrenadier02: e2
Location: 37,91
Owner: USSR
SubCell: 4
USSRGrenadier03: e2
Location: 37,91
Owner: USSR
SubCell: 3
USSRGrenadier04: e2
Location: 37,91
Owner: USSR
SubCell: 5
USSRGrenadier05: e2
Location: 37,91
Owner: USSR
SubCell: 2
USSRDog03: dog
Location: 39,91
Owner: USSR
SubCell: 2
USSRDog04: dog
Location: 40,91
Owner: USSR
SubCell: 1
USSRFlame01: e4
Location: 35,92
Owner: USSR
SubCell: 1
USSRFlame02: e4
Location: 35,92
Owner: USSR
SubCell: 2
USSRFlame03: e4
Location: 39,92
Owner: USSR
SubCell: 2
USSRFlame04: e4
Location: 40,92
Owner: USSR
SubCell: 1
AlliedSquad01RocketInf01: e3
Location: 90,92
Owner: GoodGuy
Facing: 124
SubCell: 5
AlliedSquad01RocketInf02: e3
Location: 88,93
Owner: GoodGuy
Facing: 124
SubCell: 1
AlliedSquad01RocketInf03: e3
Location: 89,93
Owner: GoodGuy
Facing: 124
SubCell: 2
AlliedSquad01RocketInf04: e3
Location: 87,94
Owner: GoodGuy
Facing: 124
SubCell: 4
AlliedSquad01RocketInf05: e3
Location: 88,94
Owner: GoodGuy
Facing: 124
SubCell: 4
Actor219: e3
Location: 74,95
Owner: Greece
SubCell: 1
Actor220: e3
Location: 75,95
Owner: Greece
SubCell: 1
hcrate01: healcrate
Location: 72,63
Owner: Neutral
hcrate02: healcrate
Location: 78,83
Owner: Neutral
AlliedHuntingPartySpawn: waypoint
Location: 93,31
Owner: Neutral
WaystationWP02: waypoint
Location: 68,32
Owner: Neutral
WaystationWP01: waypoint
Location: 68,37
Owner: Neutral
AlliedHuntingPartyWP01: waypoint
Location: 85,38
Owner: Neutral
AlliedHuntingPartyWP06: waypoint
Location: 36,41
Owner: Neutral
AlliedHuntingPartyWP05: waypoint
Location: 49,41
Owner: Neutral
AlliedHuntingPartyWP02: waypoint
Location: 63,48
Owner: Neutral
AlliedHuntingPartyWP04: waypoint
Location: 51,50
Owner: Neutral
AlliedHuntingPartyWP07: waypoint
Location: 34,53
Owner: Neutral
AlliedHuntingPartyWP03: waypoint
Location: 61,53
Owner: Neutral
AlliedDestroyer02WP02: waypoint
Location: 90,55
Owner: Neutral
AlliedDestroyer01WP02: waypoint
Location: 88,57
Owner: Neutral
AlliedDestroyer02WP01: waypoint
Location: 94,57
Owner: Neutral
AlliedDestroyer02Spawn: waypoint
Location: 98,57
Owner: Neutral
AlliedDestroyer01WP01: waypoint
Location: 94,59
Owner: Neutral
AlliedDestroyer01Spawn: waypoint
Location: 98,59
Owner: Neutral
UnusedWaypoint: waypoint
Location: 95,62
Owner: Neutral
MapCenterPoint: waypoint
Location: 64,64
Owner: Neutral
PlayerStartLocation: waypoint
Location: 37,85
Owner: Neutral
DefaultCameraPosition: waypoint
Location: 37,91
Owner: Neutral
AlliedGNRLDestination: waypoint
Location: 87,92
Owner: Neutral
AlliedParadropLZ01: waypoint
Location: 35,93
Owner: Neutral
AlliedParadropLZ02: waypoint
Location: 39,93
Owner: Neutral
AlliedGNRLSpawn: waypoint
Location: 89,94
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,75 @@
World:
LuaScript:
Scripts: campaign.lua, utils.lua, top-o-the-world.lua
MissionData:
Briefing: briefing
WinVideo: sovtstar.vqa
LossVideo: sovbatl.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
TimeLimitManager:
SkipTimerExpiredNotification: True
^Palettes:
IndexedPlayerPalette@truk:
BaseName: truk
BasePalette: player
RemapIndex: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95
PlayerIndex:
USSR: 200, 200, 201, 202, 203, 203, 204, 205, 206, 206, 207, 221, 222, 222, 223, 223
AllowModifiers: True
MSLO:
Buildable:
Prerequisites: ~disabled
AGUN:
Power:
Amount: 125
TRUK:
-SpawnActorOnDeath:
RenderSprites:
PlayerPalette: truk
GNRL:
Armament:
Weapon: SilencedPPK
SCAMERA:
Inherits: CAMERA
RevealsShroud:
Range: 5c512
powerproxy.spyplane:
AirstrikePower:
OrderName: SovietSpyPlane
Icon: spyplane
ChargeInterval: 4500
Name: actor-powerproxy-spyplane.airstrikepower-name
Description: actor-powerproxy-spyplane.airstrikepower-description
OneShot: true
SelectTargetSpeechNotification: SelectTarget
EndChargeSpeechNotification: SpyPlaneReady
SelectTargetTextNotification: notification-select-target
EndChargeTextNotification: notification-spy-plane-ready
CameraActor: camera.spyplane
CameraRemoveDelay: 150
UnitType: u2
QuantizedFacings: 8
DisplayBeacon: true
BeaconPoster: camicon
ArrowSequence: arrow
ClockSequence: clock
CircleSequence: circles
powerproxy.parabombs:
AirstrikePower:
ChargeInterval: 4500

View File

@@ -0,0 +1,332 @@
--[[
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.
]]
--All timers have been reduced by 40% because time was flying 40% faster than reality in the original game.
--That's why instead of having an hour to complete the mission you only have 36 minutes.
--Unit Groups Setup
USSRDie01 = { USSRGrenadier01, USSRGrenadier02, USSRGrenadier03, USSRFlame01, USSRFlame03 }
USSRDie02 = { USSRGrenadier04, USSRGrenadier05, USSRFlame02, USSRFlame04 }
USSRDie03 = { USSRHTank01, USSRHTank02 }
USSRDie04 = { USSRDog01, USSRDog03 }
USSRDie05 = { USSRDog02, USSRDog04 }
USSRDie06 = { USSRV202, USSRV203 }
AlliedSquad01 = { AlliedSquad01RocketInf01, AlliedSquad01RocketInf02, AlliedSquad01RocketInf03, AlliedSquad01RocketInf04, AlliedSquad01RocketInf05 }
AlliedSquad02 = { AlliedSquad02RifleInf01, AlliedSquad02RifleInf02, AlliedSquad02RifleInf03, AlliedSquad02RifleInf04, AlliedSquad02RifleInf05, AlliedSquad02RifleInf06, AlliedSquad02RifleInf07, AlliedSquad02RifleInf08, AlliedSquad02RifleInf09 }
AlliedSquad03 = { AlliedSquad03LTank01, AlliedSquad03RocketInf01, AlliedSquad03RocketInf02, AlliedSquad03RocketInf03 }
AlliedSquad04 = { AlliedSquad04MGG01, AlliedSquad04MTank01, AlliedSquad04MTank02, AlliedSquad04MTank03, AlliedSquad04MTank04, AlliedSquad04MTank05, AlliedSquad04Arty01, AlliedSquad04Arty02, AlliedSquad04Arty03 }
AlliedTanksReinforcement = { "2tnk", "2tnk" }
if Difficulty == "easy" then
AlliedHuntingParty = { "1tnk" }
elseif Difficulty == "normal" then
AlliedHuntingParty = { "1tnk", "1tnk" }
elseif Difficulty == "hard" then
AlliedHuntingParty = { "1tnk", "1tnk", "1tnk" }
end
--Building Group Setup
AlliedAAGuns = { AAGun01, AAGun02, AAGun03, AAGun04, AAGun05, AAGun06 }
--Area Triggers Setup
WaystationTrigger = { CPos.New(61, 37), CPos.New(62, 37), CPos.New(63, 37), CPos.New(64, 37), CPos.New(65, 37), CPos.New(66, 37), CPos.New(67, 37), CPos.New(68, 37), CPos.New(69, 37), CPos.New(70, 37), CPos.New(71, 37), CPos.New(72, 37), CPos.New(73, 37), CPos.New(74, 37), CPos.New(75, 37), CPos.New(61, 38), CPos.New(62, 38), CPos.New(63, 38), CPos.New(64, 38), CPos.New(65, 38), CPos.New(66, 38), CPos.New(67, 38), CPos.New(68, 38), CPos.New(69, 38), CPos.New(70, 38), CPos.New(71, 38), CPos.New(72, 38), CPos.New(73, 38), CPos.New(74, 38), CPos.New(75, 38), CPos.New(61, 39), CPos.New(62, 39), CPos.New(63, 39), CPos.New(64, 39), CPos.New(65, 39), CPos.New(66, 39), CPos.New(67, 39), CPos.New(68, 39), CPos.New(69, 39), CPos.New(70, 39), CPos.New(71, 39), CPos.New(72, 39), CPos.New(73, 39), CPos.New(74, 39), CPos.New(75, 39) }
Inf01Trigger = { CPos.New(81, 90), CPos.New(81, 91), CPos.New(81, 92), CPos.New(81, 93), CPos.New(81, 94), CPos.New(81, 95), CPos.New(82, 90), CPos.New(82, 91), CPos.New(82, 92), CPos.New(82, 93), CPos.New(82, 94), CPos.New(82, 95) }
Inf02Trigger = { CPos.New(85, 90), CPos.New(85, 91), CPos.New(85, 92), CPos.New(85, 93), CPos.New(85, 94), CPos.New(85, 95), CPos.New(86, 90), CPos.New(86, 91), CPos.New(86, 92), CPos.New(86, 93), CPos.New(86, 94), CPos.New(86, 95) }
RevealBridgeTrigger = { CPos.New(74, 52), CPos.New(75, 52), CPos.New(76, 52), CPos.New(77, 52), CPos.New(78, 52), CPos.New(79, 52), CPos.New(80, 52), CPos.New(81, 52), CPos.New(82, 52), CPos.New(83, 52), CPos.New(84, 52), CPos.New(85, 52), CPos.New(86, 52), CPos.New(87, 52), CPos.New(88, 52), CPos.New(76, 53), CPos.New(77, 53), CPos.New(78, 53), CPos.New(79, 53), CPos.New(80, 53), CPos.New(81, 53), CPos.New(82, 53), CPos.New(83, 53), CPos.New(84, 53), CPos.New(85, 53), CPos.New(86, 53), CPos.New(87, 53) }
--Mission Variables Setup
DateTime.TimeLimit = DateTime.Minutes(36)
BridgeIsIntact = true
--Mission Functions Setup
HuntObjectiveTruck = function(a)
if a.HasProperty("Hunt") then
if a.Owner == Greece or a.Owner == GoodGuy then
Trigger.OnIdle(a, function(a)
if a.IsInWorld and not ObjectiveTruck01.IsDead then
a.AttackMove(ObjectiveTruck01.Location, 2)
elseif a.IsInWorld then
a.Hunt()
end
end)
end
end
end
HuntEnemyUnits = function(a)
if a.HasProperty("Hunt") then
Trigger.OnIdle(a, function(a)
if a.IsInWorld then
a.Hunt()
end
end)
end
end
AlliedGroundPatrols = function(a)
if a.HasProperty("Hunt") then
if a.IsInWorld then
a.Patrol({ AlliedHuntingPartyWP02.Location, AlliedHuntingPartyWP03.Location, AlliedHuntingPartyWP04.Location, AlliedHuntingPartyWP05.Location, AlliedHuntingPartyWP06.Location, AlliedHuntingPartyWP07.Location }, false, 50)
end
end
end
SpawnAlliedHuntingParty = function()
Trigger.AfterDelay(DateTime.Minutes(3), function()
if BridgeIsIntact then
local tanks = Reinforcements.Reinforce(Greece, AlliedHuntingParty, { AlliedHuntingPartySpawn.Location, AlliedHuntingPartyWP01.Location,AlliedHuntingPartyWP03.Location, AlliedHuntingPartyWP05.Location }, 0)
Utils.Do(tanks, function(units)
HuntObjectiveTruck(units)
end)
SpawnAlliedHuntingParty()
end
end)
end
WorldLoaded = function()
--Players Setup
USSR = Player.GetPlayer("USSR")
Greece = Player.GetPlayer("Greece")
GoodGuy = Player.GetPlayer("GoodGuy")
BadGuy = Player.GetPlayer("BadGuy")
Neutral = Player.GetPlayer("Neutral")
Creeps = Player.GetPlayer("Creeps")
Camera.Position = DefaultCameraPosition.CenterPosition
--Objectives Setup
InitObjectives(USSR)
BringSupplyTruck = AddPrimaryObjective(USSR, "supply-truck-waystation")
ProtectWaystation = AddPrimaryObjective(USSR, "waystation-must-not-be-destroyed")
DestroyAAGuns = AddSecondaryObjective(USSR, "destroy-aa-guns-enable-air-support")
PreventAlliedIncursions = AddSecondaryObjective(USSR, "find-destroy-bridge-stop-allied-reinforcements")
Trigger.OnKilled(USSRTechCenter01, function()
USSR.MarkFailedObjective(ProtectWaystation)
end)
Trigger.OnKilled(ObjectiveTruck01, function()
USSR.MarkFailedObjective(BringSupplyTruck)
end)
Trigger.OnEnteredFootprint(WaystationTrigger, function(unit, id)
if unit == ObjectiveTruck01 then
Trigger.RemoveFootprintTrigger(id)
USSR.MarkCompletedObjective(BringSupplyTruck)
USSR.MarkCompletedObjective(ProtectWaystation)
end
end)
Trigger.OnAllKilled(AlliedAAGuns, function()
USSR.MarkCompletedObjective(DestroyAAGuns)
Media.PlaySpeechNotification(USSR, "ObjectiveMet")
Trigger.AfterDelay(DateTime.Seconds(2), function()
Actor.Create("powerproxy.spyplane", true, { Owner = USSR })
Actor.Create("powerproxy.parabombs", true, { Owner = USSR })
Media.DisplayMessage(UserInterface.GetFluentMessage("air-support-t-minus-3"))
end)
end)
--Triggers Setup
SpawnAlliedHuntingParty()
Trigger.AfterDelay(0, function()
local playerrevealcam = Actor.Create("camera", true, { Owner = USSR, Location = PlayerStartLocation.Location })
Trigger.AfterDelay(1, function()
if playerrevealcam.IsInWorld then playerrevealcam.Destroy() end
end)
end)
Trigger.OnEnteredFootprint(Inf01Trigger, function(unit, id)
if unit.Owner == USSR then
if not AlliedGNRLHouse.IsDead then
Reinforcements.Reinforce(Greece, { "gnrl" }, { AlliedGNRLSpawn.Location, AlliedGNRLDestination.Location }, 0, function(unit)
HuntEnemyUnits(unit)
end)
end
Utils.Do(AlliedSquad01, HuntEnemyUnits)
local alliedgnrlcamera = Actor.Create("scamera", true, { Owner = USSR, Location = AlliedGNRLSpawn.Location })
Trigger.AfterDelay(DateTime.Seconds(6), function()
if alliedgnrlcamera.IsInWorld then alliedgnrlcamera.Destroy() end
end)
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.OnEnteredFootprint(Inf02Trigger, function(unit, id)
if unit.Owner == USSR then
Utils.Do(AlliedSquad02, HuntEnemyUnits)
Trigger.RemoveFootprintTrigger(id)
end
end)
Utils.Do(AlliedSquad03, function(actor)
Trigger.OnDamaged(actor, function(unit, attacker)
if attacker.Owner == USSR then
Utils.Do(AlliedSquad03, HuntEnemyUnits)
end
end)
end)
Trigger.OnEnteredFootprint(RevealBridgeTrigger, function(unit, id)
if unit.Owner == USSR then
local bridgecamera01 = Actor.Create("camera", true, { Owner = USSR, Location = AlliedHuntingPartySpawn.Location })
local bridgecamera02 = Actor.Create("camera", true, { Owner = USSR, Location = AlliedHuntingPartyWP01.Location })
Trigger.AfterDelay(DateTime.Seconds(6), function()
if bridgecamera01.IsInWorld then bridgecamera01.Destroy() end
if bridgecamera02.IsInWorld then bridgecamera02.Destroy() end
end)
if Difficulty == "normal" then
Reinforcements.Reinforce(GoodGuy, { "dd" }, { AlliedDestroyer01Spawn.Location, AlliedDestroyer01WP01.Location, AlliedDestroyer01WP02.Location }, 0, function(unit)
unit.Stance = "Defend"
end)
end
if Difficulty == "hard" then
Reinforcements.Reinforce(GoodGuy, { "dd" }, { AlliedDestroyer01Spawn.Location, AlliedDestroyer01WP01.Location, AlliedDestroyer01WP02.Location }, 0, function(unit)
unit.Stance = "Defend"
end)
Reinforcements.Reinforce(GoodGuy, { "dd" }, { AlliedDestroyer02Spawn.Location, AlliedDestroyer02WP01.Location, AlliedDestroyer02WP02.Location }, 0, function(unit)
unit.Stance = "Defend"
end)
end
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.AfterDelay(DateTime.Minutes(9), function()
local powerproxy01 = Actor.Create("powerproxy.paratroopers", true, { Owner = Greece })
local aircraft01 = powerproxy01.TargetParatroopers(AlliedParadropLZ01.CenterPosition, Angle.SouthWest)
Utils.Do(aircraft01, function(a)
Trigger.OnPassengerExited(a, function(t, p)
HuntObjectiveTruck(p)
end)
end)
local powerproxy02 = Actor.Create("powerproxy.paratroopers", true, { Owner = GoodGuy })
local aircraft02 = powerproxy02.TargetParatroopers(AlliedParadropLZ02.CenterPosition, Angle.SouthWest)
Utils.Do(aircraft02, function(a)
Trigger.OnPassengerExited(a, function(t, p)
HuntObjectiveTruck(p)
end)
end)
end)
Trigger.AfterDelay(0, function()
BridgeEnd = Map.ActorsInBox(AlliedHuntingPartySpawn.CenterPosition, AlliedHuntingPartyWP01.CenterPosition, function(self) return self.Type == "br2" end)[1]
Trigger.OnKilled(BridgeEnd, function()
BridgeIsIntact = false
if not BridgeBarrel01.IsDead then BridgeBarrel01.Kill() end
if not BridgeBarrel03.IsDead then BridgeBarrel03.Kill() end
USSR.MarkCompletedObjective(PreventAlliedIncursions)
Media.PlaySpeechNotification(USSR, "ObjectiveMet")
Trigger.AfterDelay(DateTime.Seconds(2), function()
Media.DisplayMessage(UserInterface.GetFluentMessage("allied-ground-reinforcements-stopped"))
end)
end)
end)
Trigger.OnAnyKilled({ BridgeBarrel01, BridgeBarrel03 }, function()
if not BridgeEnd.IsDead then
BridgeEnd.Kill()
end
end)
Trigger.OnAnyKilled(AlliedSquad04, function()
if BridgeIsIntact then
local tanks = Reinforcements.Reinforce(Greece, AlliedTanksReinforcement, { AlliedHuntingPartySpawn.Location, AlliedHuntingPartyWP01.Location }, 0, function(units)
AlliedGroundPatrols(units)
end)
Trigger.OnAllKilled(tanks, function()
if BridgeIsIntact then
Reinforcements.Reinforce(Greece, AlliedTanksReinforcement, { AlliedHuntingPartySpawn.Location, AlliedHuntingPartyWP01.Location }, 0, function(units)
AlliedGroundPatrols(units)
end)
end
end)
end
end)
Trigger.OnAllKilled(AlliedSquad04, function()
if BridgeIsIntact then
local tanks = Reinforcements.Reinforce(Greece, AlliedTanksReinforcement, { AlliedHuntingPartySpawn.Location, AlliedHuntingPartyWP01.Location }, 0, function(units)
AlliedGroundPatrols(units)
end)
Trigger.OnAllKilled(tanks, function()
if BridgeIsIntact then
Reinforcements.Reinforce(Greece, AlliedTanksReinforcement, { AlliedHuntingPartySpawn.Location, AlliedHuntingPartyWP01.Location }, 0, function(units)
AlliedGroundPatrols(units)
end)
end
end)
end
end)
--Units Death Setup
Trigger.AfterDelay(DateTime.Seconds(660), function()
Utils.Do(USSRDie01, function(actor)
if not actor.IsDead then actor.Kill("DefaultDeath") end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(744), function()
Utils.Do(USSRDie02, function(actor)
if not actor.IsDead then actor.Kill("DefaultDeath") end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1122), function()
if not USSRHTank03.IsDead then USSRHTank03.Kill("DefaultDeath") end
end)
Trigger.AfterDelay(DateTime.Seconds(1230), function()
Utils.Do(USSRDie03, function(actor)
if not actor.IsDead then actor.Kill("DefaultDeath") end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1338), function()
Utils.Do(USSRDie04, function(actor)
if not actor.IsDead then actor.Kill("DefaultDeath") end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1416), function()
Utils.Do(USSRDie05, function(actor)
if not actor.IsDead then actor.Kill("DefaultDeath") end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1668), function()
if not USSRV201.IsDead then USSRV201.Kill("DefaultDeath") end
end)
Trigger.AfterDelay(DateTime.Seconds(1746), function()
Utils.Do(USSRDie06, function(actor)
if not actor.IsDead then actor.Kill("DefaultDeath") end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(2034), function()
if not USSRMTank02.IsDead then USSRMTank02.Kill("DefaultDeath") end
end)
Trigger.AfterDelay(DateTime.Seconds(2142), function()
if not USSRMTank01.IsDead then USSRMTank01.Kill("DefaultDeath") end
end)
Trigger.OnTimerExpired(function()
if not ObjectiveTruck01.IsDead then
ObjectiveTruck01.Kill("DefaultDeath")
-- Set the limit to one so that the timer displays 0 and never ends
-- (which would display the game time instead of 0)
DateTime.TimeLimit = 1
end
end)
end

View File

@@ -0,0 +1,2 @@
TeslaZap:
Range: 6c0