Initial commit: OpenRA game engine
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:
BIN
mods/ra/maps/monster-tank-madness/map.bin
Normal file
BIN
mods/ra/maps/monster-tank-madness/map.bin
Normal file
Binary file not shown.
11
mods/ra/maps/monster-tank-madness/map.ftl
Normal file
11
mods/ra/maps/monster-tank-madness/map.ftl
Normal file
@@ -0,0 +1,11 @@
|
||||
## rules.yaml
|
||||
briefing =
|
||||
Dr. Demitri, creator of a Soviet Super Tank, wants to defect.
|
||||
|
||||
We planned to extract him while the Soviets were testing their new weapon, but something has gone wrong.
|
||||
|
||||
The Super Tanks are out of control, and Demitri is missing -- likely hiding in the village to the far south.
|
||||
|
||||
Find our outpost and start repairs on it, then find and evacuate Demitri.
|
||||
|
||||
As for the tanks, we can reprogram them. Send a spy into the Soviet radar dome in the NE, turning the tanks on their creators.
|
||||
BIN
mods/ra/maps/monster-tank-madness/map.png
Normal file
BIN
mods/ra/maps/monster-tank-madness/map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
2102
mods/ra/maps/monster-tank-madness/map.yaml
Normal file
2102
mods/ra/maps/monster-tank-madness/map.yaml
Normal file
File diff suppressed because it is too large
Load Diff
447
mods/ra/maps/monster-tank-madness/monster-tank-madness.lua
Normal file
447
mods/ra/maps/monster-tank-madness/monster-tank-madness.lua
Normal file
@@ -0,0 +1,447 @@
|
||||
--[[
|
||||
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.
|
||||
]]
|
||||
AlliedUnits =
|
||||
{
|
||||
{ delay = 0, types = { "1tnk", "1tnk", "2tnk", "2tnk" } },
|
||||
{ delay = DateTime.Seconds(3), types = { "e1", "e1", "e1", "e3", "e3" } },
|
||||
{ delay = DateTime.Seconds(7), types = { "e6", "e6", "thf" } }
|
||||
}
|
||||
ReinforceBaseUnits = { "1tnk", "1tnk", "2tnk", "arty", "arty" }
|
||||
CivilianEvacuees = { "c2", "c3", "c5", "c6", "c8" }
|
||||
USSROutpostFlameTurrets = { FlameTurret1, FlameTurret2 }
|
||||
ExplosiveBarrels = { ExplosiveBarrel1, ExplosiveBarrel2 }
|
||||
SuperTanks = { stnk1, stnk2, stnk3 }
|
||||
SuperTankMoveWaypoints = { HospitalSuperTankPoint, AlliedBaseBottomRight, DemitriTriggerAreaCenter, DemitriLZ }
|
||||
SuperTankMove = 1
|
||||
SuperTankHuntWaypoints = { SuperTankHuntWaypoint1, SuperTankHuntWaypoint2, SuperTankHuntWaypoint3, SuperTankHuntWaypoint4 }
|
||||
SuperTankHunt = 1
|
||||
SuperTankHuntCounter = 1
|
||||
ExtractionHeli = "tran"
|
||||
ExtractionWaypoint = CPos.New(DemitriLZ.Location.X, 19)
|
||||
ExtractionLZ = DemitriLZ.Location
|
||||
BeachTrigger = { CPos.New(19, 44), CPos.New(20, 44), CPos.New(21, 44), CPos.New(22, 44), CPos.New(22, 45), CPos.New(23, 45), CPos.New(22, 44), CPos.New(24, 45), CPos.New(24, 46), CPos.New(24, 47), CPos.New(25, 47), CPos.New(25, 48) }
|
||||
DemitriAreaTrigger = { CPos.New(32, 98), CPos.New(32, 99), CPos.New(33, 99), CPos.New(33, 100), CPos.New(33, 101), CPos.New(33, 102), CPos.New(32, 102), CPos.New(32, 103) }
|
||||
HospitalAreaTrigger = { CPos.New(43, 41), CPos.New(44, 41), CPos.New(45, 41), CPos.New(46, 41), CPos.New(46, 42), CPos.New(46, 43), CPos.New(46, 44), CPos.New(46, 45), CPos.New(46, 46), CPos.New(45, 46), CPos.New(44, 46), CPos.New(43, 46) }
|
||||
|
||||
EvacuateCivilians = function()
|
||||
local evacuees = Reinforcements.Reinforce(Neutral, CivilianEvacuees, { HospitalCivilianSpawnPoint.Location }, 0)
|
||||
|
||||
Trigger.OnAnyKilled(evacuees, function()
|
||||
Greece.MarkFailedObjective(RescueCivilians)
|
||||
end)
|
||||
Trigger.OnAllRemovedFromWorld(evacuees, function()
|
||||
Greece.MarkCompletedObjective(RescueCivilians)
|
||||
end)
|
||||
|
||||
Utils.Do(evacuees, function(civ)
|
||||
Trigger.OnIdle(civ, function()
|
||||
if civ.Location == AlliedBaseEntryPoint.Location then
|
||||
civ.Destroy()
|
||||
else
|
||||
civ.Move(AlliedBaseEntryPoint.Location)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
SpawnAndMoveAlliedBaseUnits = function()
|
||||
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived")
|
||||
Reinforcements.Reinforce(Greece, ReinforceBaseUnits, { AlliedBaseEntryPoint.Location, AlliedBaseMovePoint.Location }, 18)
|
||||
end
|
||||
|
||||
SetupAlliedBase = function()
|
||||
local alliedOutpost = Map.ActorsInBox(AlliedBaseTopLeft.CenterPosition, AlliedBaseBottomRight.CenterPosition,
|
||||
function(self) return self.Owner == Outpost end)
|
||||
|
||||
Media.PlaySoundNotification(Greece, "BaseSetup")
|
||||
Utils.Do(alliedOutpost, function(building)
|
||||
building.Owner = Greece
|
||||
end)
|
||||
|
||||
AlliedBaseHarv.Owner = Greece
|
||||
AlliedBaseHarv.FindResources()
|
||||
|
||||
FindDemitri = AddPrimaryObjective(Greece, "find-demitri")
|
||||
InfiltrateRadarDome = AddPrimaryObjective(Greece, "reprogram-super-tanks")
|
||||
DefendOutpost = AddSecondaryObjective(Greece, "defend-outpost")
|
||||
Greece.MarkCompletedObjective(FindOutpost)
|
||||
|
||||
-- Don't fail the Objective instantly
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function()
|
||||
|
||||
-- The actor might have been destroyed/crushed in this one second delay
|
||||
local actors = Utils.Where(alliedOutpost, function(actor) return actor.IsInWorld end)
|
||||
Trigger.OnAllRemovedFromWorld(actors, function() Greece.MarkFailedObjective(DefendOutpost) end)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), function()
|
||||
if not SuperTankDomeIsInfiltrated then
|
||||
SuperTankAttack = true
|
||||
Utils.Do(SuperTanks, function(tnk)
|
||||
if not tnk.IsDead then
|
||||
Trigger.ClearAll(tnk)
|
||||
Trigger.AfterDelay(0, function()
|
||||
Trigger.OnIdle(tnk, function()
|
||||
if SuperTankAttack then
|
||||
if tnk.Location == SuperTankMoveWaypoints[SuperTankMove].Location then
|
||||
SuperTankMove = SuperTankMove + 1
|
||||
if SuperTankMove == 5 then
|
||||
SuperTankAttack = false
|
||||
end
|
||||
else
|
||||
tnk.AttackMove(SuperTankMoveWaypoints[SuperTankMove].Location, 2)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
SendAlliedUnits = function()
|
||||
AddObjectives()
|
||||
|
||||
Camera.Position = StartEntryPoint.CenterPosition
|
||||
|
||||
Media.PlaySpeechNotification(Greece, "ReinforcementsArrived")
|
||||
Utils.Do(AlliedUnits, function(table)
|
||||
Trigger.AfterDelay(table.delay, function()
|
||||
local units = Reinforcements.Reinforce(Greece, table.types, { StartEntryPoint.Location, StartMovePoint.Location }, 18)
|
||||
|
||||
Utils.Do(units, function(unit)
|
||||
if unit.Type == "e6" then
|
||||
Engineer = unit
|
||||
Trigger.OnKilled(unit, LandingPossible)
|
||||
elseif unit.Type == "thf" then
|
||||
Trigger.OnKilled(unit, function()
|
||||
Greece.MarkFailedObjective(StealMoney)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function() InitialUnitsArrived = true end)
|
||||
end
|
||||
|
||||
LandingPossible = function()
|
||||
if not BeachReached and (USSRSpen.IsDead or Engineer.IsDead) and LstProduced < 1 then
|
||||
Greece.MarkFailedObjective(CrossRiver)
|
||||
end
|
||||
end
|
||||
|
||||
SuperTankDomeInfiltrated = function()
|
||||
SuperTankAttack = true
|
||||
Utils.Do(SuperTanks, function(tnk)
|
||||
tnk.Owner = FriendlyMadTanks
|
||||
if not tnk.IsDead then
|
||||
tnk.GrantCondition("friendly")
|
||||
Trigger.ClearAll(tnk)
|
||||
tnk.Stop()
|
||||
if tnk.Location.Y > 61 then
|
||||
SuperTankHunt = 4
|
||||
SuperTankHuntCounter = -1
|
||||
end
|
||||
Trigger.AfterDelay(0, function()
|
||||
Trigger.OnIdle(tnk, function()
|
||||
if SuperTankAttack then
|
||||
if tnk.Location == SuperTankHuntWaypoints[SuperTankHunt].Location then
|
||||
SuperTankHunt = SuperTankHunt + SuperTankHuntCounter
|
||||
if SuperTankHunt == 0 or SuperTankHunt == 5 then
|
||||
SuperTankAttack = false
|
||||
end
|
||||
else
|
||||
tnk.AttackMove(SuperTankHuntWaypoints[SuperTankHunt].Location, 2)
|
||||
end
|
||||
else
|
||||
tnk.Hunt()
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
Greece.MarkCompletedObjective(InfiltrateRadarDome)
|
||||
Trigger.AfterDelay(DateTime.Minutes(3), SuperTanksDestruction)
|
||||
Ticked = DateTime.Minutes(3)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(2), function()
|
||||
Media.PlaySpeechNotification(Greece, "ControlCenterDeactivated")
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(4), function()
|
||||
Media.DisplayMessage(UserInterface.GetFluentMessage("super-tank-self-destruct-t-minus-3"))
|
||||
Media.PlaySpeechNotification(Greece, "WarningThreeMinutesRemaining")
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
SuperTanksDestruction = function()
|
||||
local badGuys = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == BadGuy and self.HasProperty("Health") end)
|
||||
Utils.Do(badGuys, function(unit)
|
||||
unit.Kill()
|
||||
end)
|
||||
|
||||
Utils.Do(SuperTanks, function(tnk)
|
||||
if not tnk.IsDead then
|
||||
local camera = Actor.Create("camera", true, { Owner = Greece, Location = tnk.Location })
|
||||
Trigger.AfterDelay(DateTime.Seconds(3), camera.Destroy)
|
||||
|
||||
Trigger.ClearAll(tnk)
|
||||
tnk.Kill()
|
||||
end
|
||||
end)
|
||||
|
||||
Greece.MarkCompletedObjective(DefendOutpost)
|
||||
end
|
||||
|
||||
CreateDemitri = function()
|
||||
local demitri = Actor.Create("demitri", true, { Owner = Greece, Location = DemitriChurchSpawnPoint.Location })
|
||||
demitri.Move(DemitriTriggerAreaCenter.Location)
|
||||
|
||||
Media.PlaySpeechNotification(Greece, "TargetFreed")
|
||||
EvacuateDemitri = AddPrimaryObjective(Greece, "evacuate-demitri")
|
||||
Greece.MarkCompletedObjective(FindDemitri)
|
||||
|
||||
local flarepos = CPos.New(DemitriLZ.Location.X, DemitriLZ.Location.Y - 1)
|
||||
local demitriLZFlare = Actor.Create("flare", true, { Owner = Greece, Location = flarepos })
|
||||
Trigger.AfterDelay(DateTime.Seconds(3), function() Media.PlaySpeechNotification(Greece, "SignalFlareNorth") end)
|
||||
|
||||
local demitriChinook = Reinforcements.ReinforceWithTransport(Greece, ExtractionHeli, nil, { ExtractionWaypoint, ExtractionLZ })[1]
|
||||
|
||||
Trigger.OnAnyKilled({ demitri, demitriChinook }, function()
|
||||
Greece.MarkFailedObjective(EvacuateDemitri)
|
||||
end)
|
||||
|
||||
Trigger.OnRemovedFromWorld(demitriChinook, function()
|
||||
if not demitriChinook.IsDead then
|
||||
Media.PlaySpeechNotification(Greece, "TargetRescued")
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function() Greece.MarkCompletedObjective(EvacuateDemitri) end)
|
||||
Trigger.AfterDelay(DateTime.Seconds(3), SpawnAndMoveAlliedBaseUnits)
|
||||
end
|
||||
end)
|
||||
Trigger.OnRemovedFromWorld(demitri, function()
|
||||
if not demitriChinook.IsDead and demitriChinook.HasPassengers then
|
||||
demitriChinook.Move(ExtractionWaypoint + CVec.New(0, -1))
|
||||
demitriChinook.Destroy()
|
||||
demitriLZFlare.Destroy()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
Ticked = -1
|
||||
Tick = function()
|
||||
USSR.Resources = USSR.Resources - (0.01 * USSR.ResourceCapacity / 25)
|
||||
|
||||
if InitialUnitsArrived then -- don't fail the mission straight at the beginning
|
||||
if not DemitriFound or not SuperTankDomeIsInfiltrated then
|
||||
if Greece.HasNoRequiredUnits() then
|
||||
Greece.MarkFailedObjective(EliminateSuperTanks)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if Ticked > 0 then
|
||||
if (Ticked % DateTime.Seconds(1)) == 0 then
|
||||
Timer = UserInterface.GetFluentMessage("super-tank-self-destruct-in", { ["time"] = Utils.FormatTime(Ticked) })
|
||||
UserInterface.SetMissionText(Timer, TimerColor)
|
||||
end
|
||||
Ticked = Ticked - 1
|
||||
elseif Ticked == 0 then
|
||||
FinishTimer()
|
||||
Ticked = Ticked - 1
|
||||
end
|
||||
end
|
||||
|
||||
FinishTimer = function()
|
||||
for i = 0, 9, 1 do
|
||||
local c = TimerColor
|
||||
if i % 2 == 0 then
|
||||
c = HSLColor.White
|
||||
end
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText(UserInterface.GetFluentMessage("super-tanks-destroyed"), c) end)
|
||||
end
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function() UserInterface.SetMissionText("") end)
|
||||
end
|
||||
|
||||
SetupMission = function()
|
||||
TestCamera = Actor.Create("camera" ,true , { Owner = Greece, Location = ProvingGroundsCameraPoint.Location })
|
||||
Camera.Position = ProvingGroundsCameraPoint.CenterPosition
|
||||
TimerColor = Greece.Color
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(12), function()
|
||||
Media.PlaySpeechNotification(Greece, "StartGame")
|
||||
Trigger.AfterDelay(DateTime.Seconds(2), SendAlliedUnits)
|
||||
end)
|
||||
end
|
||||
|
||||
InitPlayers = function()
|
||||
Greece = Player.GetPlayer("Greece")
|
||||
Neutral = Player.GetPlayer("Neutral")
|
||||
Outpost = Player.GetPlayer("Outpost")
|
||||
BadGuy = Player.GetPlayer("BadGuy")
|
||||
USSR = Player.GetPlayer("USSR")
|
||||
Ukraine = Player.GetPlayer("Ukraine")
|
||||
Turkey = Player.GetPlayer("Turkey")
|
||||
FriendlyMadTanks = Player.GetPlayer("FriendlyMadTanks")
|
||||
|
||||
USSR.Cash = 2000
|
||||
Trigger.AfterDelay(0, function() BadGuy.Resources = BadGuy.ResourceCapacity * 0.75 end)
|
||||
end
|
||||
|
||||
AddObjectives = function()
|
||||
InitObjectives(Greece)
|
||||
|
||||
EliminateSuperTanks = AddPrimaryObjective(Greece, "eliminate-super-tanks")
|
||||
StealMoney = AddPrimaryObjective(Greece, "steal-money-outpost")
|
||||
CrossRiver = AddPrimaryObjective(Greece, "cross-river")
|
||||
FindOutpost = AddPrimaryObjective(Greece, "find-outpost-and-repair")
|
||||
RescueCivilians = AddSecondaryObjective(Greece, "evacuate-civilian-hospital")
|
||||
BadGuyObj = AddPrimaryObjective(BadGuy, "")
|
||||
USSRObj = AddPrimaryObjective(USSR, "")
|
||||
UkraineObj = AddPrimaryObjective(Ukraine, "")
|
||||
TurkeyObj = AddPrimaryObjective(Turkey, "")
|
||||
|
||||
Trigger.OnPlayerLost(Greece, function()
|
||||
USSR.MarkCompletedObjective(USSRObj)
|
||||
BadGuy.MarkCompletedObjective(BadGuyObj)
|
||||
Ukraine.MarkCompletedObjective(UkraineObj)
|
||||
Turkey.MarkCompletedObjective(TurkeyObj)
|
||||
end)
|
||||
|
||||
Trigger.OnPlayerWon(Greece, function()
|
||||
Media.DisplayMessage(UserInterface.GetFluentMessage("demitri-extracted-super-tanks-destroyed"))
|
||||
USSR.MarkFailedObjective(USSRObj)
|
||||
BadGuy.MarkFailedObjective(BadGuyObj)
|
||||
Ukraine.MarkFailedObjective(UkraineObj)
|
||||
Turkey.MarkFailedObjective(TurkeyObj)
|
||||
end)
|
||||
end
|
||||
|
||||
InitTriggers = function()
|
||||
Trigger.OnAllKilled(SuperTanks, function()
|
||||
Trigger.AfterDelay(DateTime.Seconds(3), function() Greece.MarkCompletedObjective(EliminateSuperTanks) end)
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(SuperTankDome, function()
|
||||
if not SuperTankDomeIsInfiltrated then
|
||||
Greece.MarkFailedObjective(InfiltrateRadarDome)
|
||||
end
|
||||
end)
|
||||
Trigger.OnInfiltrated(SuperTankDome, function()
|
||||
if not SuperTankDomeIsInfiltrated then
|
||||
SuperTankDomeIsInfiltrated = true
|
||||
SuperTankDomeInfiltrated()
|
||||
end
|
||||
end)
|
||||
Trigger.OnCapture(SuperTankDome, function()
|
||||
if not SuperTankDomeIsInfiltrated then
|
||||
SuperTankDomeIsInfiltrated = true
|
||||
SuperTankDomeInfiltrated()
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(UkraineBarrel, function()
|
||||
if not UkraineBuilding.IsDead then UkraineBuilding.Kill() end
|
||||
end)
|
||||
|
||||
Trigger.OnAnyKilled(USSROutpostFlameTurrets, function()
|
||||
Utils.Do(ExplosiveBarrels, function(barrel)
|
||||
if not barrel.IsDead then barrel.Kill() end
|
||||
end)
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(DemitriChurch, function()
|
||||
if not DemitriFound then
|
||||
Greece.MarkFailedObjective(FindDemitri)
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnKilled(Hospital, function()
|
||||
if not HospitalEvacuated then
|
||||
HospitalEvacuated = true
|
||||
Greece.MarkFailedObjective(RescueCivilians)
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnInfiltrated(USSROutpostSilo, function()
|
||||
MoneyStolen = true
|
||||
Greece.MarkCompletedObjective(StealMoney)
|
||||
end)
|
||||
|
||||
Trigger.OnKilledOrCaptured(USSROutpostSilo, function()
|
||||
if not MoneyStolen then
|
||||
Greece.MarkFailedObjective(StealMoney)
|
||||
end
|
||||
end)
|
||||
|
||||
BeachReached = false
|
||||
Trigger.OnEnteredFootprint(BeachTrigger, function(a, id)
|
||||
if not BeachReached and a.Owner == Greece then
|
||||
BeachReached = true
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
Greece.MarkCompletedObjective(CrossRiver)
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnPlayerDiscovered(Outpost, function(_, discoverer)
|
||||
if not OutpostReached and discoverer == Greece then
|
||||
OutpostReached = true
|
||||
SetupAlliedBase()
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnEnteredFootprint(DemitriAreaTrigger, function(a, id)
|
||||
if not DemitriFound and a.Owner == Greece then
|
||||
DemitriFound = true
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
CreateDemitri()
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.OnEnteredFootprint(HospitalAreaTrigger, function(a, id)
|
||||
if not HospitalEvacuated and a.Owner == Greece then
|
||||
HospitalEvacuated = true
|
||||
Trigger.RemoveFootprintTrigger(id)
|
||||
EvacuateCivilians()
|
||||
end
|
||||
end)
|
||||
|
||||
local tanksLeft = 0
|
||||
Trigger.OnExitedProximityTrigger(ProvingGroundsCameraPoint.CenterPosition, WDist.New(10 * 1024), function(a, id)
|
||||
if a.Type == "5tnk" then
|
||||
tanksLeft = tanksLeft + 1
|
||||
if tanksLeft == 3 then
|
||||
if TestCamera.IsInWorld then TestCamera.Destroy() end
|
||||
Trigger.RemoveProximityTrigger(id)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
LstProduced = 0
|
||||
Trigger.OnKilled(USSRSpen, LandingPossible)
|
||||
Trigger.OnSold(USSRSpen, LandingPossible)
|
||||
Trigger.OnProduction(USSRSpen, function(self, produced)
|
||||
if produced.Type == "lst" then
|
||||
LstProduced = LstProduced + 1
|
||||
Trigger.OnKilled(produced, function()
|
||||
LstProduced = LstProduced - 1
|
||||
LandingPossible()
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
InitPlayers()
|
||||
InitTriggers()
|
||||
SetupMission()
|
||||
end
|
||||
355
mods/ra/maps/monster-tank-madness/rules.yaml
Normal file
355
mods/ra/maps/monster-tank-madness/rules.yaml
Normal file
@@ -0,0 +1,355 @@
|
||||
Player:
|
||||
PlayerResources:
|
||||
DefaultCash: 0
|
||||
|
||||
World:
|
||||
LuaScript:
|
||||
Scripts: campaign.lua, utils.lua, monster-tank-madness.lua
|
||||
StartGameNotification:
|
||||
Notification:
|
||||
MissionData:
|
||||
Briefing: briefing
|
||||
WinVideo: sovbatl.vqa
|
||||
LossVideo: sovtstar.vqa
|
||||
|
||||
^Palettes:
|
||||
IndexedPlayerPalette:
|
||||
PlayerIndex:
|
||||
BadGuy: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223
|
||||
FriendlyMadTanks: 200, 200, 201, 202, 203, 203, 204, 205, 206, 206, 207, 221, 222, 222, 223, 223
|
||||
Outpost: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143
|
||||
|
||||
^Building:
|
||||
AnnounceOnSeen:
|
||||
|
||||
^ExplodingCivBuilding:
|
||||
Inherits: ^CivBuilding
|
||||
FireWarheadsOnDeath:
|
||||
Weapon: BarrelExplode
|
||||
EmptyWeapon: BarrelExplode
|
||||
|
||||
V01.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V01
|
||||
|
||||
V02.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V02
|
||||
|
||||
V03.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V03
|
||||
|
||||
V04.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V04
|
||||
|
||||
V05.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V05
|
||||
|
||||
V06.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V06
|
||||
|
||||
V07.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V07
|
||||
|
||||
V08.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V08
|
||||
|
||||
V09.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V09
|
||||
|
||||
V11.exploding:
|
||||
Inherits: ^ExplodingCivBuilding
|
||||
RenderSprites:
|
||||
Image: V11
|
||||
|
||||
V19:
|
||||
FireWarheadsOnDeath:
|
||||
Weapon: BarrelExplode
|
||||
EmptyWeapon: BarrelExplode
|
||||
|
||||
DEMITRI:
|
||||
Inherits: DELPHI
|
||||
Tooltip:
|
||||
Name: actor-demitri-name
|
||||
Passenger:
|
||||
CargoType: Demitri
|
||||
RenderSprites:
|
||||
Image: DELPHI
|
||||
Voiced:
|
||||
VoiceSet: DemitriVoice
|
||||
|
||||
TRAN:
|
||||
RevealsShroud:
|
||||
Range: 0c0
|
||||
Cargo:
|
||||
Types: Demitri
|
||||
MaxWeight: 1
|
||||
-Selectable:
|
||||
Interactable:
|
||||
|
||||
LST:
|
||||
Cargo:
|
||||
Types: Infantry, Vehicle, Demitri
|
||||
|
||||
JEEP:
|
||||
Cargo:
|
||||
Types: Infantry, Demitri
|
||||
|
||||
PBOX:
|
||||
Cargo:
|
||||
Types: Infantry, Demitri
|
||||
|
||||
5TNK:
|
||||
Inherits: ^TrackedVehicle
|
||||
Inherits@AUTOTARGET: ^AutoTargetAll
|
||||
Valued:
|
||||
Cost: 10000
|
||||
Tooltip:
|
||||
Name: actor-5tnk.name
|
||||
GenericName: actor-5tnk.generic-name
|
||||
Health:
|
||||
HP: 2000000
|
||||
Armor:
|
||||
Type: Concrete
|
||||
Mobile:
|
||||
Speed: 42
|
||||
RevealsShroud:
|
||||
Range: 6c0
|
||||
RequiresCondition: !friendly
|
||||
RevealsShroud@friendly:
|
||||
Range: 6c0
|
||||
RequiresCondition: friendly
|
||||
ValidRelationships: Ally, Enemy
|
||||
ExternalCondition@friendly:
|
||||
Condition: friendly
|
||||
Turreted:
|
||||
TurnSpeed: 4
|
||||
Armament@PRIMARY:
|
||||
Weapon: SuperTankPrimary
|
||||
LocalOffset: 900,180,340, 900,-180,340
|
||||
Recoil: 171
|
||||
RecoilRecovery: 30
|
||||
MuzzleSequence: muzzle
|
||||
Armament@SECONDARY:
|
||||
Name: secondary
|
||||
Weapon: MammothTusk
|
||||
LocalOffset: -85,384,340, -85,-384,340
|
||||
LocalYaw: -100,100
|
||||
Recoil: 43
|
||||
MuzzleSequence: muzzle
|
||||
AttackTurreted:
|
||||
WithMuzzleOverlay:
|
||||
WithSpriteTurret:
|
||||
FireWarheadsOnDeath:
|
||||
Weapon: MiniNuke
|
||||
EmptyWeapon: MiniNuke
|
||||
SpawnActorOnDeath:
|
||||
Actor: 5TNK.Husk
|
||||
ChangesHealth:
|
||||
Step: 100
|
||||
Delay: 1
|
||||
StartIfBelow: 100
|
||||
DamageCooldown: 150
|
||||
Selectable:
|
||||
Bounds: 1877, 1621, 0, -170
|
||||
RenderSprites:
|
||||
Image: 4TNK
|
||||
|
||||
5TNK.Husk:
|
||||
Inherits: ^Husk
|
||||
Tooltip:
|
||||
Name: actor-5tnk-husk-name
|
||||
ThrowsParticle@turret:
|
||||
Anim: turret
|
||||
Health:
|
||||
HP: 200000
|
||||
RenderSprites:
|
||||
Image: 4TNK
|
||||
-Capturable:
|
||||
-TransformOnCapture:
|
||||
-InfiltrateForTransform:
|
||||
|
||||
DOME.NoInfiltrate:
|
||||
Inherits: DOME
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
RenderSprites:
|
||||
Image: DOME
|
||||
-InfiltrateForExploration:
|
||||
Targetable:
|
||||
TargetTypes: GroundActor, Structure, C4, DetonateAttack, MissionObjective
|
||||
ProvidesPrerequisite:
|
||||
Prerequisite: dome
|
||||
|
||||
SPY:
|
||||
Infiltrates:
|
||||
Types: SpyInfiltrate, MissionObjective
|
||||
|
||||
BAD3TNK:
|
||||
Inherits: 3TNK
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
RenderSprites:
|
||||
Image: 3TNK
|
||||
|
||||
BADTRUK:
|
||||
Inherits: TRUK
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
RenderSprites:
|
||||
Image: TRUK
|
||||
|
||||
SS:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
AGUN:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
MSUB:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
DD:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
CA:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
PT:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
MSLO:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
SYRD:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
SPEN:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
IRON:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
PDOX:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
SAM:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
HPAD:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
AFLD:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
ATEK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
STEK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
4TNK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
FTRK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
MCV:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
MNLY:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
TTNK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
CTNK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
MGG:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
GAP:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
MRJ:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
E7:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
C1:
|
||||
-Crushable:
|
||||
|
||||
C2:
|
||||
-Crushable:
|
||||
|
||||
C5:
|
||||
-Crushable:
|
||||
|
||||
C7:
|
||||
-Crushable:
|
||||
|
||||
C8:
|
||||
-Crushable:
|
||||
|
||||
SHOK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
THF:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
STNK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
DTRK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
QTNK:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
16
mods/ra/maps/monster-tank-madness/voices.yaml
Normal file
16
mods/ra/maps/monster-tank-madness/voices.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
DemitriVoice:
|
||||
Variants:
|
||||
allies: .r01,.r03
|
||||
england: .r01,.r03
|
||||
france: .r01,.r03
|
||||
germany: .r01,.r03
|
||||
soviet: .r01,.r03
|
||||
russia: .r01,.r03
|
||||
ukraine: .r01,.r03
|
||||
Voices:
|
||||
Select: await1,ready,report1,yessir1
|
||||
Action: ackno,affirm1,noprob,overout,ritaway,roger,ugotit
|
||||
Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8
|
||||
Burned: dedman10
|
||||
Zapped: dedman6
|
||||
DisableVariants: Die, Burned, Zapped
|
||||
15
mods/ra/maps/monster-tank-madness/weapons.yaml
Normal file
15
mods/ra/maps/monster-tank-madness/weapons.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
FireballLauncher:
|
||||
Projectile:
|
||||
Blockable: false
|
||||
|
||||
TurretGun:
|
||||
Projectile:
|
||||
Blockable: false
|
||||
|
||||
SuperTankPrimary:
|
||||
Inherits: 120mm
|
||||
ReloadDelay: 70
|
||||
Report: turret1.aud
|
||||
Warhead@1Dam: SpreadDamage
|
||||
Damage: 50000
|
||||
InvalidTargets: Air, Infantry
|
||||
Reference in New Issue
Block a user