Soviet Soldier Volkov & Chitzkoi fully ported

Crash fixed.
This commit is contained in:
Mike
2018-08-21 00:43:56 -04:00
committed by abcdefg30
parent 8144fca5be
commit 619457828f
10 changed files with 2178 additions and 0 deletions

View File

@@ -104,6 +104,7 @@ Also thanks to:
* Michael Rätzel
* Michael Silber (frühstück)
* Michael Sztolcman (s1w_)
* Mike Gagné (AngryBirdz)
* Muh
* Mustafa Alperen Seki (MustaphaTR)
* Neil Shivkar (havok13888)

View File

@@ -96,6 +96,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Red Alert Lua scripts", "Re
mods\ra\maps\soviet-06b\soviet06b-reinforcements_teams.lua = mods\ra\maps\soviet-06b\soviet06b-reinforcements_teams.lua
mods\ra\maps\soviet-06b\soviet06b.lua = mods\ra\maps\soviet-06b\soviet06b.lua
mods\ra\maps\soviet-07\soviet07.lua = mods\ra\maps\soviet-07\soviet07.lua
mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea.lua = mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea.lua
mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea-AI.lua = mods\ra\maps\soviet-soldier-volkov-n-chitzkoi\scu35ea-AI.lua
mods\ra\maps\survival01\survival01.lua = mods\ra\maps\survival01\survival01.lua
mods\ra\maps\survival02\survival02.lua = mods\ra\maps\survival02\survival02.lua
EndProjectSection

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
Sounds:
Notifications:
rokroll: rokroll1

View File

@@ -0,0 +1,206 @@
World:
LuaScript:
Scripts: scu35ea.lua, scu35ea-AI.lua
MissionData:
Briefing: The Allies have stolen a new armor plating from us. With it, they can make structures nearly invulnerable. Their processing plant must be destroyed.\n\nFor this critical mission, we are allowing you access to Soldier Volkov. Use him and his cybernetic dog to sabotage the Allied control center, allowing our units in the southeast access to the alloy facility.\n\nThe mission is a success when Volkov destroys the control center, and our units destroy the alloy facility.\n
WinVideo: grvestne.vqa
LossVideo: sovcemet.vqa
ScriptLobbyDropdown@difficulty:
ID: difficulty
Label: Difficulty
Values:
easy: Easy
normal: Normal
hard: Hard
Default: easy
Player:
LobbyPrerequisiteCheckbox@GLOBALBOUNTY:
Enabled: False
Locked: True
MSLO:
Buildable:
Prerequisites: ~disabled
E7:
Buildable:
Prerequisites: ~disabled
Health:
HP: 25000
Armor:
Type: Heavy
2TNK:
Buildable:
Prerequisites: ~vehicles.allies, ~techlevel.medium
CA:
Buildable:
Prerequisites: ~syrd, ~techlevel.high
C2:
Inherits@2: ^ArmedCivilian
C3:
Inherits@2: ^ArmedCivilian
C4:
Inherits@2: ^ArmedCivilian
C5:
Inherits@2: ^ArmedCivilian
C6:
Inherits@2: ^ArmedCivilian
C8:
Inherits@2: ^ArmedCivilian
C9:
Inherits@2: ^ArmedCivilian
C10:
Inherits@2: ^ArmedCivilian
V01:
SpawnActorOnDeath:
Actor: healcrate
HOSP:
Tooltip:
GenericName: Hospital
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
-TooltipDescription@ally:
-TooltipDescription@other:
SpawnActorOnDeath:
Actor: healcrate
MONEYCRATE:
GiveCashCrateAction:
Amount: 2000
^Vehicle:
-Demolishable:
^Mine:
Tooltip:
ShowOwnerRow: false
AFAC:
Inherits: BIO
Buildable:
Prerequisites: ~disabled
Health:
HP: 400000
Tooltip:
Name: Alloy Facility
GenericName: Alloy Facility
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
-TooltipDescription@ally:
-TooltipDescription@other:
-ExternalCapturable:
-ExternalCapturableBar:
-EngineerRepairable:
-GpsDot:
RenderSprites:
Image: BIO
CCEN:
Inherits: ATEK
Buildable:
Prerequisites: ~disabled
Tooltip:
Name: Control Center
GenericName: Control Center
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
-ExternalCapturable:
-ExternalCapturableBar:
-EngineerRepairable:
GpsPower:
Prerequisites: ~disabled
Power:
Amount: 200
RenderSprites:
Image: ATEK
HGUN:
Inherits: GUN
Buildable:
Prerequisites: ~disabled
Valued:
Cost: 2800
Tooltip:
Name: Heavy Turret Prototype
Health:
HP: 350000
Armor:
Type: Heavy
RevealsShroud:
Range: 8c0
Armament:
Weapon: HeavyTurretGun
RenderSprites:
Image: GUN
ZKOI:
Inherits: DOG
Buildable:
Prerequisites: ~disabled
Valued:
Cost: 2000
Tooltip:
Name: Chitzkoi
GenericName: Cyborg Dog
Health:
HP: 100000
-Crushable:
RevealsShroud:
Range: 7c0
Armament:
Weapon: CydogJaw
RenderSprites:
Image: DOG
VOLK:
Inherits: GNRL
Buildable:
Prerequisites: ~disabled
Valued:
Cost: 3000
Tooltip:
Name: Volkov
Health:
HP: 250000
Armor:
Type: Heavy
-Crushable:
RevealsShroud:
Range: 10c0
Demolition:
Mobile:
Voice: Action
AttackFrontal:
Voice: Action
AttackMove:
Voice: Action
Passenger:
Voice: Action
Guard:
Voice: Action
Voiced:
VoiceSet: GenericVoice
Armament:
Weapon: VolkovWeapon
DetectCloaked:
CloakTypes: Cloak, Hijacker
RenderSprites:
Image: GNRL
powerproxy.pararifles:
Inherits: powerproxy.paratroopers
ParatroopersPower:
DropItems: E1,E1,E1,E1,E1

View File

@@ -0,0 +1,112 @@
--[[
Copyright 2007-2018 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.
]]
AlliedInfantryTypes = { "e1", "e3" }
if Map.LobbyOption("difficulty") == "easy" then
AlliedArmorTypes = { "1tnk", "1tnk" }
else
AlliedArmorTypes = { "1tnk", "2tnk" }
end
if Map.LobbyOption("difficulty") == "hard" then
AlliedNavyGuard = { "ca", "ca" }
else
AlliedNavyGuard = { "ca" }
end
ArmorAttackNumbers =
{
easy = 2,
normal = 5,
hard = 8
}
ArmorAttackDelays =
{
easy = DateTime.Seconds(45),
normal = DateTime.Seconds(30),
hard = DateTime.Seconds(10)
}
AlliedWarFactRally = { waypoint2, waypoint9, waypoint10, waypoint11 }
InfAttack = { }
ArmorAttack = { }
SendAttackToBase = function(units)
Utils.Do(units, function(unit)
if not unit.IsDead and unit.HasProperty("Hunt") then
unit.AttackMove(waypoint77.Location, 2)
Trigger.OnIdle(unit, unit.Hunt)
end
end)
end
UnitsJustHunt = function(units)
Utils.Do(units, function(unit)
if not unit.IsDead and unit.HasProperty("Hunt") then
Trigger.OnIdle(unit, unit.Hunt)
end
end)
end
ProduceInfantry = function()
if AlliedBarracks01.IsDead then
return
elseif (OreRefinery01.IsDead and OreRefinery02.IsDead or GreeceHarvestersAreDead) and greece.Resources <= 299 then
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(1), DateTime.Seconds(2))
local toBuild = { Utils.Random(AlliedInfantryTypes) }
greece.Build(toBuild, function(unit)
InfAttack[#InfAttack + 1] = unit[1]
if #InfAttack >= 5 then
UnitsJustHunt(InfAttack)
InfAttack = { }
Trigger.AfterDelay(DateTime.Seconds(1), ProduceInfantry)
else
Trigger.AfterDelay(delay, ProduceInfantry)
end
end)
end
ProduceArmor = function()
if AlliedWarFact01.IsDead and AlliedWarFact02.IsDead then
return
elseif (OreRefinery01.IsDead and OreRefinery02.IsDead or GreeceHarvestersAreDead) and greece.Resources <= 699 then
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(7), DateTime.Seconds(10))
local toBuild = { Utils.Random(AlliedArmorTypes) }
local Rally = Utils.Random(AlliedWarFactRally)
Utils.Do(AlliedWarFact, function(fact) fact.RallyPoint = Rally.Location end)
greece.Build(toBuild, function(unit)
ArmorAttack[#ArmorAttack + 1] = unit[1]
if #ArmorAttack >= ArmorAttackNumbers[Map.LobbyOption("difficulty")] then
SendAttackToBase(ArmorAttack)
ArmorAttack = { }
Trigger.AfterDelay(ArmorAttackDelays[Map.LobbyOption("difficulty")], ProduceArmor)
else
Trigger.AfterDelay(delay, ProduceArmor)
end
end)
end
ProduceNavyGuard = function()
if NavalYard01.IsDead then
return
elseif (OreRefinery01.IsDead and OreRefinery02.IsDead or GreeceHarvestersAreDead) and greece.Resources <= 2399 then
return
end
NavalYard01.RallyPoint = waypoint26.Location
greece.Build(AlliedNavyGuard, function(nvgrd)
Utils.Do(nvgrd, function(unit)
Trigger.OnKilled(unit, ProduceNavyGuard)
end)
end)
end

View File

@@ -0,0 +1,376 @@
--[[
Copyright 2007-2018 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.
]]
-- Unit Groups Setup
SuperTeam = { "zkoi", "volk" }
PlayerTankDivision = { PlyrHvyTnk01, PlyrHvyTnk02, PlyrHvyTnk03, PlyrHvyTnk04, PlyrHvyTnk05, PlyrMthTnk01, PlyrMthTnk02, PlyrV2RL01, PlyrV2RL02, PlyrV2RL03, PlyrV2RL04 }
InitialHuntTeam = { InitialHuntUnit01, InitialHuntUnit02, InitialHuntUnit03, InitialHuntUnit04, InitialHuntUnit05, InitialHuntUnit06, InitialHuntUnit07, InitialHuntUnit08, InitialHuntUnit09 }
BarrelsShooter = { InitialRifleman01, InitialRifleman02 }
TownPeoples = { TownDude01, TownDude02, TownDude03, TownDude04, TownMedic01, TownMedic02, TownMedic03 }
CivTeam01 = { "c1", "c3", "c4" }
CivTeam02 = { "c4", "c5", "c6" }
InfGuardSquad01 = { InfGuardSquad01Unit01, InfGuardSquad01Unit02, InfGuardSquad01Unit03, InfGuardSquad01Unit04, InfGuardSquad01Unit05, MediumTankGuard01 }
InfGuardSquad02 = { InfGuardSquad02Unit01, InfGuardSquad02Unit02, InfGuardSquad02Unit03, RangerGuard02 }
InfGuardSquad03 = { InfGuardSquad03Unit01, InfGuardSquad03Unit02, InfGuardSquad03Unit03, InfGuardSquad03Unit04, InfGuardSquad03Unit05, RangerGuard04 }
TanyaSquad = { TanyaSquadUnit01, TanyaSquadUnit02, TanyaSquadUnit03, TanyaSquadUnit04, TanyaSquadUnit05, TanyaSquadUnit06, TanyaSquadTanya }
-- Building Group Setup
AlliedOreRef = { OreRefinery01, OreRefinery02 }
AlliedWarFact = { AlliedWarFact01, AlliedWarFact02 }
HeavyTurrets = { HTurret01, HTurret02, HTurret03 }
-- Area Triggers Setup
SuperTeamLandCell = { CPos.New(21, 82), CPos.New(20, 81), CPos.New(21, 81), CPos.New(22, 81), CPos.New(20, 82), CPos.New(22, 82), CPos.New(21, 83), CPos.New(20, 83), CPos.New(22, 83) }
CivTeam01Trigger = { CPos.New(21, 58), CPos.New(21, 59), CPos.New(21, 60), CPos.New(22, 60), CPos.New(23, 60), CPos.New(22, 61), CPos.New(23, 61), CPos.New(24, 60), CPos.New(25, 60), CPos.New(24, 59), CPos.New(24, 58), CPos.New(23, 58), CPos.New(22, 58) }
CivTeam02Trigger = { CPos.New(33, 62), CPos.New(33, 63), CPos.New(32, 62), CPos.New(32, 63), CPos.New(31, 62), CPos.New(31, 63), CPos.New(31, 61), CPos.New(31, 60), CPos.New(30, 62), CPos.New(30, 61), CPos.New(30, 60), CPos.New(32, 60), CPos.New(33, 60) }
MineSoldierTrigger = { CPos.New(32, 58), CPos.New(32, 59), CPos.New(33, 58), CPos.New(33, 59), CPos.New(31, 59), CPos.New(30, 59), CPos.New(29, 59), CPos.New(29, 58), CPos.New(28, 59), CPos.New(27, 59), CPos.New(26, 59), CPos.New(25, 59), CPos.New(27, 58), CPos.New(26, 58), CPos.New(25, 58), CPos.New(24, 58), CPos.New(23, 58), CPos.New(26, 57), CPos.New(24, 57), CPos.New(24, 56), CPos.New(24, 55), CPos.New(24, 54), CPos.New(23, 57), CPos.New(23, 56), CPos.New(23, 55), CPos.New(23, 54), CPos.New(22, 57) }
MineRevealTrigger = { CPos.New(30, 46), CPos.New(31, 46), CPos.New(32, 46), CPos.New(33, 46), CPos.New(34, 46), CPos.New(35, 46), CPos.New(36, 46), CPos.New(37, 46) }
ParaTrigger = { CPos.New(18, 34), CPos.New(19, 34), CPos.New(20, 34), CPos.New(21, 34), CPos.New(22, 34), CPos.New(23, 34), CPos.New(24, 34), CPos.New(25, 34), CPos.New(18, 35), CPos.New(19, 35), CPos.New(20, 35), CPos.New(21, 35), CPos.New(22, 35), CPos.New(23, 35), CPos.New(24, 35), CPos.New(25, 35) }
TanyaTrigger = { CPos.New(59, 43), CPos.New(60, 43), CPos.New(61, 43), CPos.New(62, 43), CPos.New(63, 43), CPos.New(64, 43), CPos.New(65, 43), CPos.New(66, 43), CPos.New(67, 43), CPos.New(68, 43), CPos.New(69, 43), CPos.New(59, 44), CPos.New(60, 44), CPos.New(61, 44), CPos.New(62, 44), CPos.New(63, 44), CPos.New(64, 44), CPos.New(65, 44), CPos.New(66, 44), CPos.New(67, 44), CPos.New(68, 44), CPos.New(69, 44) }
-- Mission Variables Setup
GreeceHarvestersAreDead = false
AlloyFacilityDestroyed = false
WorldLoaded = function()
--Players Setup
player = Player.GetPlayer("USSR")
greece = Player.GetPlayer("Greece")
goodguy = Player.GetPlayer("GoodGuy")
spain = Player.GetPlayer("Spain")
france = Player.GetPlayer("France")
greece.Cash = 20000
Camera.Position = DefaultCameraPosition.CenterPosition
--AI Production Setup
ProduceArmor()
if Map.LobbyOption("difficulty") == "easy" then
Trigger.AfterDelay(DateTime.Minutes(10), ProduceNavyGuard)
elseif Map.LobbyOption("difficulty") == "normal" then
Trigger.AfterDelay(DateTime.Minutes(5), ProduceNavyGuard)
elseif Map.LobbyOption("difficulty") == "hard" then
ProduceNavyGuard()
end
--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)
DestroyControlCenter = player.AddPrimaryObjective("Destroy the Control Center.")
KeepTanksAlive = player.AddPrimaryObjective("Your tank division must not be destroyed before\n the alloy facility is dealt with.")
KeepVolkovAlive = player.AddPrimaryObjective("Keep Volkov Alive.")
KeepChitzkoiAlive = player.AddSecondaryObjective("Keep Chitzkoi Alive.")
Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "MissionAccomplished")
end)
Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "MissionFailed")
end)
Trigger.OnKilled(ControlCenter, function()
Utils.Do(HeavyTurrets, function(struc)
if not struc.IsDead then struc.Kill() end
end)
player.MarkCompletedObjective(DestroyControlCenter)
DestroyAlloyFacility = player.AddPrimaryObjective("Destroy the Alloy Facility.")
Media.PlaySpeechNotification(player, "FirstObjectiveMet")
Media.DisplayMessage("Excellent! The heavy turret control center is destroyed\n and now we can deal with the alloy facility.")
end)
Trigger.OnKilled(AlloyFacility, function()
if not player.IsObjectiveCompleted(DestroyControlCenter) then --Prevent a crash if the player somehow manage to cheese the mission and destroy
player.MarkCompletedObjective(DestroyControlCenter) --the Alloy Facility without destroying the Control Center.
DestroyAlloyFacility = player.AddPrimaryObjective("Destroy the Alloy Facility.")
end
Trigger.AfterDelay(DateTime.Seconds(2), function()
player.MarkCompletedObjective(DestroyAlloyFacility)
player.MarkCompletedObjective(KeepTanksAlive)
player.MarkCompletedObjective(KeepVolkovAlive)
player.MarkCompletedObjective(KeepChitzkoiAlive)
end)
AlloyFacilityDestroyed = true
Media.PlaySpeechNotification(player, "SecondObjectiveMet")
end)
Trigger.OnAllKilled(PlayerTankDivision, function()
if not AlloyFacilityDestroyed then player.MarkFailedObjective(KeepTanksAlive) end
end)
Trigger.AfterDelay(0, function()
local AlliedBaseCamera = Actor.Create("camera", true, { Owner = player, Location = waypoint12.Location })
local SuperTeamCamera = Actor.Create("camera", true, { Owner = player, Location = DefaultCameraPosition.Location })
Trigger.AfterDelay(1, function()
if AlliedBaseCamera.IsInWorld then AlliedBaseCamera.Destroy() end
end)
Trigger.AfterDelay(DateTime.Seconds(20), function()
if SuperTeamCamera.IsInWorld then SuperTeamCamera.Destroy() end
end)
end)
--Super Team Setup
Trigger.AfterDelay(DateTime.Seconds(2), function()
local spawn = superteamspawn.CenterPosition + WVec.New(0, 0, Actor.CruiseAltitude("badr"))
local transport = Actor.Create("badr", true, { CenterPosition = spawn, Owner = player, Facing = (superteamdrop.CenterPosition - spawn).Facing, Health = 3 })
Utils.Do(SuperTeam, function(type)
local a = Actor.Create(type, false, { Owner = player })
transport.LoadPassenger(a)
if a.Type == "volk" then
VolkovIsDead(a)
end
if a.Type == "zkoi" then
ChitzkoiIsDead(a)
end
end)
Media.PlaySpeechNotification(player, "ReinforcementsArrived")
transport.Paradrop(CPos.New(21, 82))
end)
Trigger.OnEnteredFootprint(SuperTeamLandCell, function(unit, id)
if unit.Owner == player then
Trigger.RemoveFootprintTrigger(id)
Trigger.AfterDelay(DateTime.Seconds(2), function()
if not BarrelsShooter[1].IsDead then
BarrelsShooter[1].Attack(Barrel, true, true)
elseif not BarrelsShooter[2].IsDead then
BarrelsShooter[2].Attack(Barrel, true, true)
end
Utils.Do(InitialHuntTeam, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
end)
end
end)
--Guards Squads Setup -- I used proximity triggers to make them hunt you down in order to mimic their behavior from the original mission
Trigger.OnEnteredProximityTrigger(RangerGuard01.CenterPosition, WDist.New(70 * 70), function(unit, id)
if not RangerGuard01.IsDead and unit.Owner == player then
Trigger.OnIdle(RangerGuard01, RangerGuard01.Hunt)
Trigger.RemoveProximityTrigger(id)
end
end)
Trigger.OnEnteredProximityTrigger(waypoint7.CenterPosition, WDist.FromCells(6), function(unit, id)
if unit.Owner == player then
Utils.Do(InfGuardSquad01, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
Trigger.RemoveProximityTrigger(id)
end
end)
Trigger.OnEnteredProximityTrigger(InfGuardSquad02Unit01.CenterPosition, WDist.FromCells(6), function(unit, id)
if unit.Owner == player and (unit.Type == "volk" or unit.Type == "zkoi") then
Utils.Do(InfGuardSquad02, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
Trigger.RemoveProximityTrigger(id)
end
end)
Trigger.OnEnteredProximityTrigger(InfGuardSquad03Unit05.CenterPosition, WDist.FromCells(8), function(unit, id)
if unit.Owner == player then
local HospitalCamera = Actor.Create("camera", true, { Owner = player, Location = waypoint13.Location })
Utils.Do(InfGuardSquad03, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
if not SupplyTruck01.IsDead then
SupplyTruck01.Move(waypoint14.Location)
Trigger.AfterDelay(DateTime.Seconds(8), function()
if not SupplyTruck01.IsDead then
SupplyTruck01.Move(waypoint15.Location)
end
end)
end
Trigger.AfterDelay(DateTime.Seconds(15), function()
if HospitalCamera.IsInWorld then HospitalCamera.Destroy() end
end)
Trigger.RemoveProximityTrigger(id)
end
end)
Trigger.OnEnteredProximityTrigger(LightTankGuard02.CenterPosition, WDist.FromCells(8), function(unit, id)
if not LightTankGuard02.IsDead and unit.Owner == player and (unit.Type == "volk" or unit.Type == "zkoi") then
Trigger.OnIdle(LightTankGuard02, LightTankGuard02.Hunt)
Trigger.RemoveProximityTrigger(id)
end
end)
--Tanya Squad Setup
Trigger.OnEnteredFootprint(TanyaTrigger, function(unit, id)
if unit.Owner == player then
if not TanyaSquadTanya.IsDead then
local TanyaSquadCamera = Actor.Create("camera", true, { Owner = player, Location = waypoint85.Location })
Media.PlaySoundNotification(player, "rokroll")
Utils.Do(TanyaSquad, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
Trigger.OnKilled(TanyaSquadTanya, function()
if TanyaSquadCamera.IsInWorld then
TanyaSquadCamera.Destroy()
end
end)
end
Trigger.RemoveFootprintTrigger(id)
end
end)
--Town Setup
Utils.Do(TownPeoples, function(actor)
Trigger.OnDamaged(actor, function()
if not TownMedic01.IsDead then
TownMedic01.Patrol({ waypoint5.Location, waypoint6.Location, waypoint7.Location }, true, 0)
end
if not TownMedic02.IsDead then
TownMedic02.Patrol({ waypoint8.Location, waypoint7.Location, waypoint5.Location, waypoint6.Location }, true, 0)
end
end)
end)
Trigger.OnEnteredFootprint(CivTeam01Trigger, function(unit, id)
if unit.Owner == player then
if not TownHouse03.IsDead then
local civ01 = Reinforcements.Reinforce(spain, CivTeam01, { civteam01spawn.Location }, 0)
Utils.Do(civ01, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
end
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.OnEnteredFootprint(CivTeam02Trigger, function(unit, id)
if unit.Owner == player then
if not TownHouse04.IsDead then
local civ02 = Reinforcements.Reinforce(spain, CivTeam02, { civteam02spawn.Location }, 0)
Utils.Do(civ02, function(actor)
if not actor.IsDead then
Trigger.OnIdle(actor, actor.Hunt)
end
end)
end
Trigger.RemoveFootprintTrigger(id)
end
end)
--Minefield Setup
Trigger.OnEnteredFootprint(MineSoldierTrigger, function(unit, id)
if unit.Owner == player then
local MineSoldierCamera1 = Actor.Create("camera", true, { Owner = player, Location = waypoint96.Location })
Trigger.AfterDelay(DateTime.Seconds(10), function()
if MineSoldierCamera1.IsInWorld then MineSoldierCamera1.Destroy() end
end)
if not MineSoldier01.IsDead then
MineSoldier01.Patrol({ waypoint91.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0)
end
if not MineSoldier02.IsDead then
MineSoldier02.Patrol({ waypoint92.Location, waypoint91.Location, waypoint76.Location, waypoint93.Location }, false, 0)
end
if not MineSoldier03.IsDead then
MineSoldier03.Patrol({ waypoint91.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0)
end
if not MineSoldier04.IsDead then
MineSoldier04.Patrol({ waypoint92.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0)
end
if not MineSoldier05.IsDead then
MineSoldier05.Patrol({ waypoint90.Location, waypoint91.Location, waypoint95.Location, waypoint76.Location, waypoint93.Location }, false, 0)
end
if not MineSoldier06.IsDead then
MineSoldier06.Patrol({ waypoint92.Location, waypoint91.Location, waypoint93.Location }, false, 0)
end
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.OnEnteredFootprint(MineRevealTrigger, function(unit, id)
if unit.Owner == goodguy then
local MineSoldierCamera2 = Actor.Create("camera", true, { Owner = player, Location = waypoint76.Location })
Trigger.AfterDelay(DateTime.Seconds(12), function()
if MineSoldierCamera2.IsInWorld then MineSoldierCamera2.Destroy() end
end)
Trigger.RemoveFootprintTrigger(id)
end
end)
--Paradrop Rifle Team Setup
Trigger.OnEnteredFootprint(ParaTrigger, function(unit, id)
if unit.Owner == player then
local powerproxy = Actor.Create("powerproxy.pararifles", true, { Owner = greece })
local paratroopers = powerproxy.SendParatroopers(waypoint89.CenterPosition, false, Facing.South)
local prtcamera = Actor.Create("camera", true, { Owner = player, Location = waypoint89.Location })
Trigger.AfterDelay(DateTime.Seconds(10), function()
if prtcamera.IsInWorld then prtcamera.Destroy() end
end)
Utils.Do(paratroopers, function(unit)
if not unit.IsDead then
Trigger.OnIdle(unit, function(unit)
if unit.IsInWorld then
unit.Hunt()
end
end)
end
end)
if Map.LobbyOption("difficulty") == "hard" and not RiflemanGuard01.IsDead then
Trigger.ClearAll(RiflemanGuard01)
ProduceInfantry() --Greece will start infantry production right away if the difficulty is set to hard
end
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.OnKilled(RiflemanGuard01, function()
ProduceInfantry() --Greece will start infantry production once this unit is dead just like in the original mission
end)
Trigger.AfterDelay(DateTime.Seconds(1), function()
local GreeceHarvesters = greece.GetActorsByType("harv")
Trigger.OnAllKilled(GreeceHarvesters, function()
GreeceHarvestersAreDead = true
end)
end)
end
VolkovIsDead = function(a)
Trigger.OnKilled(a, function()
player.MarkFailedObjective(KeepVolkovAlive)
end)
end
ChitzkoiIsDead = function(a)
Trigger.OnKilled(a, function()
player.MarkFailedObjective(KeepChitzkoiAlive)
Media.DisplayMessage("We can rebuild Chitzkoi. We have the technology.")
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(player, "ObjectiveNotMet")
end)
end)
end

View File

@@ -0,0 +1,36 @@
HeavyTurretGun:
Inherits: TurretGun
Range: 10c0
CydogJaw:
Inherits: DogJaw
Range: 5c512
VolkovWeapon:
Inherits: SilencedPPK
ReloadDelay: 25
Range: 6c0
-ValidTargets:
InvalidTargets: Air, Bridge, Structure
Warhead@1Dam: SpreadDamage
Spread: 256
Versus:
None: 90
Wood: 75
Light: 60
Heavy: 25
Concrete: 50
-ValidTargets:
DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath
Warhead@2Smu: LeaveSmudge
SmudgeType: Crater
InvalidTargets: Vehicle, Structure, Wall, Husk, Trees
Warhead@3Eff: CreateEffect
Explosions: artillery_explosion
ImpactSounds: kaboom25.aud
ValidTargets: Ground, Ship, Trees
Warhead@4EffWater: CreateEffect
Explosions: small_splash
ImpactSounds: splash9.aud
ValidTargets: Water, Underwater
InvalidTargets: Ship, Structure, Bridge