Counterstrike Soviet mission Top o' The World ported

I've just finished porting this mission. Tell me if you spot something wrong ;)

Update: Fixed a few things in the lua and rules.
This commit is contained in:
AngryBirdz
2019-02-04 17:27:29 -05:00
committed by Oliver Brakmann
parent 7695714f66
commit 19977bb7da
8 changed files with 1338 additions and 0 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,898 @@
MapFormat: 11
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: 223
Actor131: gun
Location: 40,41
Owner: Greece
Facing: 95
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: 223
Actor136: gun
Location: 40,44
Owner: Greece
Facing: 95
Actor137: gun
Location: 44,46
Owner: Greece
Facing: 223
Actor138: gun
Location: 41,47
Owner: Greece
Facing: 95
Actor139: hbox
Location: 87,47
Owner: Greece
AAGun01: agun
Location: 53,61
Owner: GoodGuy
Facing: 95
AAGun02: agun
Location: 67,62
Owner: GoodGuy
Facing: 95
Actor142: gun
Location: 73,67
Owner: GoodGuy
Facing: 95
AAGun03: agun
Location: 62,69
Owner: GoodGuy
Facing: 223
AAGun04: agun
Location: 59,73
Owner: GoodGuy
Facing: 63
Actor145: gun
Location: 94,73
Owner: GoodGuy
Facing: 127
AAGun05: agun
Location: 70,75
Owner: GoodGuy
Facing: 159
Actor147: gun
Location: 92,77
Owner: GoodGuy
Facing: 127
Actor148: gun
Location: 97,77
Owner: GoodGuy
Facing: 127
AAGun06: agun
Location: 39,78
Owner: GoodGuy
Facing: 159
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: 95
AlliedSquad05MTank01: 2tnk
Location: 57,56
Owner: GoodGuy
Facing: 31
AlliedSquad05MTank02: 2tnk
Location: 63,56
Owner: GoodGuy
Facing: 31
AlliedSquad04MGG01: mgg
Location: 34,61
Owner: Greece
Facing: 127
AlliedSquad04MTank01: 2tnk
Location: 31,63
Owner: GoodGuy
Facing: 127
AlliedSquad04Arty01: arty
Location: 33,63
Owner: Greece
Facing: 127
AlliedSquad04Arty02: arty
Location: 35,63
Owner: Greece
Facing: 127
AlliedSquad04MTank02: 2tnk
Location: 37,63
Owner: GoodGuy
Facing: 127
AlliedSquad03LTank01: 1tnk
Location: 78,63
Owner: GoodGuy
Facing: 159
AlliedSquad04MTank03: 2tnk
Location: 33,64
Owner: GoodGuy
Facing: 127
AlliedSquad04Arty03: arty
Location: 34,64
Owner: GoodGuy
Facing: 127
AlliedSquad04MTank04: 2tnk
Location: 35,64
Owner: GoodGuy
Facing: 127
AlliedSquad04MTank05: 2tnk
Location: 34,65
Owner: GoodGuy
Facing: 127
Actor168: 1tnk
Location: 66,65
Owner: GoodGuy
Facing: 127
Actor169: 2tnk
Location: 75,78
Owner: GoodGuy
Facing: 191
Actor170: 2tnk
Location: 78,82
Owner: GoodGuy
Actor171: 2tnk
Location: 55,83
Owner: GoodGuy
Facing: 95
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: 63
SubCell: 1
Actor182: e3
Location: 47,34
Owner: GoodGuy
Facing: 63
SubCell: 1
AlliedSquad03RocketInf01: e3
Location: 78,61
Owner: Greece
Facing: 127
SubCell: 1
AlliedSquad03RocketInf02: e3
Location: 84,61
Owner: Greece
Facing: 95
SubCell: 3
Actor185: e3
Location: 72,62
Owner: Greece
SubCell: 4
AlliedSquad03RocketInf03: e3
Location: 80,64
Owner: Greece
Facing: 95
SubCell: 3
Actor187: e3
Location: 72,66
Owner: Greece
Facing: 95
SubCell: 0
Actor188: e3
Location: 74,68
Owner: Greece
Facing: 95
SubCell: 2
Actor189: e3
Location: 60,69
Owner: GoodGuy
Facing: 191
SubCell: 4
Actor190: e3
Location: 60,71
Owner: GoodGuy
Facing: 191
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: 31
SubCell: 5
AlliedSquad01RocketInf02: e3
Location: 88,93
Owner: GoodGuy
Facing: 31
SubCell: 1
AlliedSquad01RocketInf03: e3
Location: 89,93
Owner: GoodGuy
Facing: 31
SubCell: 2
AlliedSquad01RocketInf04: e3
Location: 87,94
Owner: GoodGuy
Facing: 31
SubCell: 4
AlliedSquad01RocketInf05: e3
Location: 88,94
Owner: GoodGuy
Facing: 31
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

View File

@@ -0,0 +1,75 @@
World:
LuaScript:
Scripts: scu36ea.lua
MissionData:
Briefing: A critical cargo held in this supply truck must reach the waystation atop this mountain. The way is blocked by Allied squads, but do not let that deter you -- the cargo must reach its destination.\n\nIn addition, the onset of nightfall has brought sub-zero temperatures with it. The Allies are prepared for this -- our units are not. The life expectancy of your troops in these extremes is limited. Infantry may last 12 minutes, while vehicles could survive for up to 36 minutes. You have little time. Go.\n
WinVideo: sovtstar.vqa
LossVideo: sovbatl.vqa
ScriptLobbyDropdown@difficulty:
ID: difficulty
Label: Difficulty
Values:
easy: Easy
normal: Normal
hard: Hard
Default: easy
^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
HEALCRATE:
Crate:
Lifetime: 0
AGUN:
Power:
Amount: 125
TRUK:
-SpawnActorOnDeath:
RenderSprites:
PlayerPalette: truk
GNRL:
Armament:
Weapon: SilencedPPK
SCAMERA:
Inherits: CAMERA
RevealsShroud:
Range: 5c512
powerproxy.spyplane:
AlwaysVisible:
AirstrikePower:
OrderName: SovietSpyPlane
Icon: spyplane
ChargeInterval: 4500
Description: Spy Plane (Single Use)
LongDesc: Reveals an area of the map and cloaked enemy units.
OneShot: true
SelectTargetSpeechNotification: SelectTarget
EndChargeSpeechNotification: SpyPlaneReady
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,361 @@
--[[
Copyright 2007-2019 The OpenRA Developers (see AUTHORS)
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 Map.LobbyOption("difficulty") == "easy" then
AlliedHuntingParty = { "1tnk" }
elseif Map.LobbyOption("difficulty") == "normal" then
AlliedHuntingParty = { "1tnk", "1tnk" }
elseif Map.LobbyOption("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
RemainingTime = 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
player = 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
Trigger.OnObjectiveAdded(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end)
Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
BringSupplyTruck = player.AddPrimaryObjective("Bring the supply truck to the waystation.")
ProtectWaystation = player.AddPrimaryObjective("The waystation must not be destroyed.")
DestroyAAGuns = player.AddSecondaryObjective("Destroy all the AA Guns to enable air support.")
PreventAlliedIncursions = player.AddSecondaryObjective("Find and destroy the bridge the allies are using\nto bring their reinforcements in the area.")
Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "MissionAccomplished")
end)
Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "MissionFailed")
end)
Trigger.OnKilled(USSRTechCenter01, function()
player.MarkFailedObjective(ProtectWaystation)
end)
Trigger.OnKilled(ObjectiveTruck01, function()
player.MarkFailedObjective(BringSupplyTruck)
end)
Trigger.OnEnteredFootprint(WaystationTrigger, function(unit, id)
if unit == ObjectiveTruck01 then
Trigger.RemoveFootprintTrigger(id)
player.MarkCompletedObjective(BringSupplyTruck)
player.MarkCompletedObjective(ProtectWaystation)
end
end)
Trigger.OnAllKilled(AlliedAAGuns, function()
player.MarkCompletedObjective(DestroyAAGuns)
Media.PlaySpeechNotification(player, "ObjectiveMet")
Trigger.AfterDelay(DateTime.Seconds(2), function()
Actor.Create("powerproxy.spyplane", true, { Owner = player })
Actor.Create("powerproxy.parabombs", true, { Owner = player })
Media.DisplayMessage("Very good comrade general! Our air units just took off\nand should be in your area in approximately three minutes.")
end)
end)
--Triggers Setup
SpawnAlliedHuntingParty()
Trigger.AfterDelay(0, function()
local playerrevealcam = Actor.Create("camera", true, { Owner = player, 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 == player 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 = player, 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 == player then
Utils.Do(AlliedSquad02, HuntEnemyUnits)
Trigger.RemoveFootprintTrigger(id)
end
end)
Utils.Do(AlliedSquad03, function(actor)
Trigger.OnDamaged(actor, function(unit, attacker)
if attacker.Owner == player then
Utils.Do(AlliedSquad03, HuntEnemyUnits)
end
end)
end)
Trigger.OnEnteredFootprint(RevealBridgeTrigger, function(unit, id)
if unit.Owner == player then
local bridgecamera01 = Actor.Create("camera", true, { Owner = player, Location = AlliedHuntingPartySpawn.Location })
local bridgecamera02 = Actor.Create("camera", true, { Owner = player, 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 Map.LobbyOption("difficulty") == "normal" then
Reinforcements.Reinforce(goodguy, { "dd" }, { AlliedDestroyer01Spawn.Location, AlliedDestroyer01WP01.Location, AlliedDestroyer01WP02.Location }, 0, function(unit)
unit.Stance = "Defend"
end)
end
if Map.LobbyOption("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 paratroopers01 = powerproxy01.SendParatroopers(AlliedParadropLZ01.CenterPosition, false, Facing.SouthWest)
local powerproxy02 = Actor.Create("powerproxy.paratroopers", true, { Owner = goodguy })
local paratroopers02 = powerproxy02.SendParatroopers(AlliedParadropLZ02.CenterPosition, false, Facing.SouthWest)
Utils.Do(paratroopers01, HuntObjectiveTruck)
Utils.Do(paratroopers02, HuntObjectiveTruck)
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
player.MarkCompletedObjective(PreventAlliedIncursions)
Media.PlaySpeechNotification(player, "ObjectiveMet")
Trigger.AfterDelay(DateTime.Seconds(2), function()
Media.DisplayMessage("This should stop the allied forces from getting their ground based reinforcements.")
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() end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(744), function()
Utils.Do(USSRDie02, function(actor)
if not actor.IsDead then actor.Kill() end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1122), function()
if not USSRHTank03.IsDead then USSRHTank03.Kill() end
end)
Trigger.AfterDelay(DateTime.Seconds(1230), function()
Utils.Do(USSRDie03, function(actor)
if not actor.IsDead then actor.Kill() end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1338), function()
Utils.Do(USSRDie04, function(actor)
if not actor.IsDead then actor.Kill() end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1416), function()
Utils.Do(USSRDie05, function(actor)
if not actor.IsDead then actor.Kill() end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(1668), function()
if not USSRV201.IsDead then USSRV201.Kill() end
end)
Trigger.AfterDelay(DateTime.Seconds(1746), function()
Utils.Do(USSRDie06, function(actor)
if not actor.IsDead then actor.Kill() end
end)
end)
Trigger.AfterDelay(DateTime.Seconds(2034), function()
if not USSRMTank02.IsDead then USSRMTank02.Kill() end
end)
Trigger.AfterDelay(DateTime.Seconds(2142), function()
if not USSRMTank01.IsDead then USSRMTank01.Kill() end
end)
Trigger.AfterDelay(DateTime.Minutes(36), function()
if not ObjectiveTruck01.IsDead then ObjectiveTruck01.Kill() end
end)
end
Tick = function()
-- Timer Setup
if RemainingTime == DateTime.Minutes(30) then
Media.PlaySpeechNotification(player, "ThirtyMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(20) then
Media.PlaySpeechNotification(player, "TwentyMinutesRemainingg")
elseif RemainingTime == DateTime.Minutes(10) then
Media.PlaySpeechNotification(player, "TenMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(5) then
Media.PlaySpeechNotification(player, "WarningFiveMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(4) then
Media.PlaySpeechNotification(player, "WarningFourMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(3) then
Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(2) then
Media.PlaySpeechNotification(player, "WarningTwoMinutesRemaining")
elseif RemainingTime == DateTime.Minutes(1) then
Media.PlaySpeechNotification(player, "WarningOneMinuteRemaining")
end
if RemainingTime > 0 then
UserInterface.SetMissionText("Time Remaining: " .. Utils.FormatTime(RemainingTime), neutral.Color)
RemainingTime = RemainingTime - 1
elseif RemainingTime == 0 then
UserInterface.SetMissionText("")
end
end

View File

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