Add Harkonnen9b
This commit is contained in:
committed by
reaperrr
parent
a80924ebb3
commit
b7830d97f2
@@ -139,6 +139,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dune 2000 Lua scripts", "Du
|
||||
mods\d2k\maps\harkonnen-09a\harkonnen09a.lua = mods\d2k\maps\harkonnen-09a\harkonnen09a.lua
|
||||
mods\d2k\maps\harkonnen-08\harkonnen08-AI.lua = mods\d2k\maps\harkonnen-08\harkonnen08-AI.lua
|
||||
mods\d2k\maps\harkonnen-08\harkonnen08.lua = mods\d2k\maps\harkonnen-08\harkonnen08.lua
|
||||
mods\d2k\maps\harkonnen-09b\harkonnen09b-AI.lua = mods\d2k\maps\harkonnen-09b\harkonnen09b-AI.lua
|
||||
mods\d2k\maps\harkonnen-09b\harkonnen09b.lua = mods\d2k\maps\harkonnen-09b\harkonnen09b.lua
|
||||
mods\d2k\maps\ordos-01a\ordos01a.lua = mods\d2k\maps\ordos-01a\ordos01a.lua
|
||||
mods\d2k\maps\ordos-01b\ordos01b.lua = mods\d2k\maps\ordos-01b\ordos01b.lua
|
||||
mods\d2k\maps\ordos-02a\ordos02a-AI.lua = mods\d2k\maps\ordos-02a\ordos02a-AI.lua
|
||||
|
||||
@@ -191,7 +191,7 @@ BuildFremen = function()
|
||||
APalace.Produce("fremen")
|
||||
APalace.Produce("fremen")
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(1), function()
|
||||
Trigger.AfterDelay(DateTime.Seconds(5), function()
|
||||
IdleFremen = Utils.Where(atreides_main.GetActorsByType('fremen'), function(actor) return actor.IsIdle end)
|
||||
|
||||
if #IdleFremen >= FremenGroupSize[Difficulty] then
|
||||
|
||||
@@ -37,21 +37,6 @@ frigate:
|
||||
LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete
|
||||
VTOL: true # The frigate would teleport to land otherwise
|
||||
|
||||
starport:
|
||||
ProvidesPrerequisite@harkonnen:
|
||||
Prerequisite: starport.harkonnen
|
||||
Factions: harkonnen, corrino
|
||||
|
||||
light_factory:
|
||||
ProvidesPrerequisite@trikes:
|
||||
Prerequisite: light.regulartrikes
|
||||
Factions: atreides, harkonnen, corrino
|
||||
|
||||
heavy_factory:
|
||||
ProvidesPrerequisite@harkonnen:
|
||||
Prerequisite: heavy.harkonnen
|
||||
Factions: harkonnen, corrino
|
||||
|
||||
palace:
|
||||
ProvidesPrerequisite@sardaukar:
|
||||
Prerequisite: palace.sardaukar
|
||||
|
||||
73
mods/d2k/maps/harkonnen-09b/harkonnen09b-AI.lua
Normal file
73
mods/d2k/maps/harkonnen-09b/harkonnen09b-AI.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
--[[
|
||||
Copyright 2007-2017 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.
|
||||
]]
|
||||
|
||||
AttackGroupSize =
|
||||
{
|
||||
easy = 6,
|
||||
normal = 8,
|
||||
hard = 10
|
||||
}
|
||||
|
||||
AttackDelays =
|
||||
{
|
||||
easy = { DateTime.Seconds(4), DateTime.Seconds(7) },
|
||||
normal = { DateTime.Seconds(2), DateTime.Seconds(5) },
|
||||
hard = { DateTime.Seconds(1), DateTime.Seconds(3) }
|
||||
}
|
||||
|
||||
EnemyInfantryTypes = { "light_inf", "light_inf", "light_inf", "trooper", "trooper" }
|
||||
EnemyVehicleTypes = { "trike", "trike", "quad" }
|
||||
|
||||
AtreidesMainTankTypes = { "combat_tank_a", "combat_tank_a", "siege_tank", "missile_tank", "sonic_tank" }
|
||||
AtreidesSmallTankTypes = { "combat_tank_a", "combat_tank_a", "siege_tank" }
|
||||
AtreidesStarportTypes = { "trike.starport", "trike.starport", "quad.starport", "combat_tank_a.starport", "combat_tank_a.starport", "siege_tank.starport", "missile_tank.starport" }
|
||||
|
||||
CorrinoMainInfantryTypes = { "light_inf", "light_inf", "trooper", "sardaukar" }
|
||||
CorrinoTankTypes = { "combat_tank_h", "combat_tank_h", "siege_tank", "missile_tank" }
|
||||
CorrinoStarportTypes = { "trike.starport", "trike.starport", "quad.starport", "combat_tank_h.starport", "combat_tank_h.starport", "siege_tank.starport", "missile_tank.starport" }
|
||||
|
||||
ActivateAI = function()
|
||||
IdlingUnits[atreides_main] = Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[1], InitialAtreidesPaths[1]), Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[2], InitialAtreidesPaths[2])
|
||||
IdlingUnits[atreides_small] = Reinforcements.Reinforce(atreides_small, InitialAtreidesReinforcements[3], InitialAtreidesPaths[3])
|
||||
IdlingUnits[corrino_main] = Reinforcements.Reinforce(corrino_main, InitialCorrinoReinforcements[1], InitialCorrinoPaths[1]), Reinforcements.Reinforce(corrino_main, InitialCorrinoReinforcements[2], InitialCorrinoPaths[2])
|
||||
IdlingUnits[corrino_small] = Reinforcements.Reinforce(corrino_main, InitialCorrinoReinforcements[3], InitialCorrinoPaths[3])
|
||||
|
||||
DefendAndRepairBase(atreides_main, AtreidesMainBase, 0.75, AttackGroupSize[Difficulty])
|
||||
DefendAndRepairBase(atreides_small, AtreidesSmallBase, 0.75, AttackGroupSize[Difficulty])
|
||||
DefendAndRepairBase(corrino_main, CorrinoMainBase, 0.75, AttackGroupSize[Difficulty])
|
||||
DefendAndRepairBase(corrino_small, CorrinoSmallBase, 0.75, AttackGroupSize[Difficulty])
|
||||
|
||||
local delay = function() return Utils.RandomInteger(AttackDelays[Difficulty][1], AttackDelays[Difficulty][2] + 1) end
|
||||
local infantryToBuild = function() return { Utils.Random(EnemyInfantryTypes) } end
|
||||
local infantryToBuildCorrinoMain = function() return { Utils.Random(CorrinoMainInfantryTypes) } end
|
||||
local vehilcesToBuild = function() return { Utils.Random(EnemyVehicleTypes) } end
|
||||
local tanksToBuildAtreidesMain = function() return { Utils.Random(AtreidesMainTankTypes) } end
|
||||
local tanksToBuildAtreidesSmall = function() return { Utils.Random(AtreidesSmallTankTypes) } end
|
||||
local tanksToBuildCorrino = function() return { Utils.Random(CorrinoTankTypes) } end
|
||||
local unitsToBuyAtreides = function() return { Utils.Random(AtreidesStarportTypes) } end
|
||||
local unitsToBuyCorrino = function() return { Utils.Random(CorrinoStarportTypes) } end
|
||||
local attackThresholdSize = AttackGroupSize[Difficulty] * 2.5
|
||||
|
||||
ProduceUnits(atreides_main, ABarracks1, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(atreides_main, ALightFactory1, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(atreides_main, AHeavyFactory1, delay, tanksToBuildAtreidesMain, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(atreides_main, AStarport1, delay, unitsToBuyAtreides, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
|
||||
ProduceUnits(atreides_small, ABarracks3, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(atreides_small, ALightFactory2, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(atreides_small, AHeavyFactory2, delay, tanksToBuildAtreidesSmall, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(atreides_small, AStarport2, delay, unitsToBuyAtreides, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
|
||||
ProduceUnits(corrino_main, CBarracks1, delay, infantryToBuildCorrinoMain, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(corrino_main, CHeavyFactory, delay, tanksToBuildCorrino, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
|
||||
ProduceUnits(corrino_small, CBarracks3, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(corrino_small, CLightFactory, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
ProduceUnits(corrino_small, CStarport, delay, unitsToBuyCorrino, AttackGroupSize[Difficulty], attackThresholdSize)
|
||||
end
|
||||
412
mods/d2k/maps/harkonnen-09b/harkonnen09b.lua
Normal file
412
mods/d2k/maps/harkonnen-09b/harkonnen09b.lua
Normal file
@@ -0,0 +1,412 @@
|
||||
--[[
|
||||
Copyright 2007-2017 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.
|
||||
]]
|
||||
|
||||
AtreidesMainBase = { AConYard1, AOutpost1, APalace, ARefinery1, ARefinery2, AHeavyFactory1, ALightFactory1, ARepair1, AStarport1, AHiTechFactory, AResearch, ARock1, ARock2, ARock3, ARock4, ARock5, ARock6, ARock7, ARock8, ARock9, ARock10, ABarracks1, ABarracks2, APower1, APower2, APower3, APower4, APower5, APower6, APower7, APower8, APower9, APower10, APower11, ASilo1, ASilo2, ASilo3 }
|
||||
AtreidesSmallBase = { AConYard2, ARefinery3, ABarracks3, AHeavyFactory2, ALightFactory2, ARepair2, AGunt1, AGunt2, ARock11, APower12, APower13, APower14, APower15, APower16, APower17, APower18, APower19, APower20 }
|
||||
CorrinoMainBase = { CConYard, COutpost, CPalace, CRefinery1, CHeavyFactory, CResearch, CGunt1, CGunt2, CGunt3, CGunt4, CGunt5, CGunt6, CRock1, CRock2, CRock3, CRock4, CBarracks1, CBarracks2, CPower1, CPower2, CPower3, CPower4, CPower5, CPower6, CPower7, CPower8 }
|
||||
CorrinoSmallBase = { CRefinery2, CLightFactory, CStarport, CGunt7, CGunt8, CBarracks3, CPower9, CPower10, CPower11, CPower12, CSilo1, CSilo2, CSilo3, CSilo4 }
|
||||
|
||||
AtreidesReinforcements =
|
||||
{
|
||||
easy =
|
||||
{
|
||||
{ "combat_tank_a", "quad", "light_inf", "light_inf" },
|
||||
{ "fremen", "trike", "combat_tank_a"},
|
||||
{ "combat_tank_a", "quad", "light_inf", "light_inf" },
|
||||
{ "trooper", "trooper", "trooper" },
|
||||
{ "light_inf", "light_inf", "sonic_tank" },
|
||||
{ "light_inf", "light_inf", "light_inf", "quad" }
|
||||
},
|
||||
|
||||
normal =
|
||||
{
|
||||
{ "combat_tank_a", "quad", "quad", "light_inf", "light_inf" },
|
||||
{ "fremen", "fremen", "trike", "combat_tank_a"},
|
||||
{ "combat_tank_a", "quad", "quad", "light_inf", "light_inf" },
|
||||
{ "trooper", "trooper", "trooper", "trooper" },
|
||||
{ "light_inf", "light_inf", "light_inf", "sonic_tank" },
|
||||
{ "light_inf", "light_inf", "light_inf", "quad", "quad" },
|
||||
{ "combat_tank_a", "combat_tank_a", "missile_tank" }
|
||||
},
|
||||
|
||||
hard =
|
||||
{
|
||||
{ "combat_tank_a", "quad", "quad", "quad", "light_inf", "light_inf" },
|
||||
{ "fremen", "fremen", "fremen", "trike", "combat_tank_a"},
|
||||
{ "combat_tank_a", "quad", "quad", "quad", "light_inf", "light_inf" },
|
||||
{ "trooper", "trooper", "trooper", "trooper", "trooper" },
|
||||
{ "light_inf", "light_inf", "light_inf", "light_inf", "sonic_tank" },
|
||||
{ "light_inf", "light_inf", "light_inf", "quad", "quad", "quad" },
|
||||
{ "combat_tank_a", "combat_tank_a", "combat_tank_a", "missile_tank" },
|
||||
{ "fremen", "fremen", "fremen", "fremen", "fremen", "fremen", "fremen", "fremen" }
|
||||
}
|
||||
}
|
||||
|
||||
CorrinoStarportReinforcements =
|
||||
{
|
||||
easy =
|
||||
{
|
||||
{ "sardaukar", "sardaukar", "sardaukar", "sardaukar", "sardaukar", "siege_tank", "siege_tank" },
|
||||
{ "trooper", "trooper", "combat_tank_h", "combat_tank_h" },
|
||||
{ "trike", "trike", "trike", "trooper", "trooper", "light_inf", "light_inf" }
|
||||
},
|
||||
|
||||
normal =
|
||||
{
|
||||
{ "sardaukar", "sardaukar", "sardaukar", "sardaukar", "sardaukar", "sardaukar", "siege_tank", "siege_tank" },
|
||||
{ "trooper", "trooper", "trooper", "combat_tank_h", "combat_tank_h" },
|
||||
{ "trike", "trike", "trike", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf" }
|
||||
},
|
||||
|
||||
hard =
|
||||
{
|
||||
{ "sardaukar", "sardaukar", "sardaukar", "sardaukar", "sardaukar", "sardaukar", "sardaukar", "siege_tank", "siege_tank" },
|
||||
{ "trooper", "trooper", "trooper", "trooper", "combat_tank_h", "combat_tank_h" },
|
||||
{ "trike", "trike", "trike", "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf" }
|
||||
}
|
||||
}
|
||||
|
||||
AtreidesAttackDelay =
|
||||
{
|
||||
easy = DateTime.Minutes(3) + DateTime.Seconds(30),
|
||||
normal = DateTime.Minutes(2) + DateTime.Seconds(30),
|
||||
hard = DateTime.Minutes(1) + DateTime.Seconds(30)
|
||||
}
|
||||
|
||||
CorrinoStarportDelay =
|
||||
{
|
||||
easy = DateTime.Minutes(10),
|
||||
normal = DateTime.Minutes(8),
|
||||
hard = DateTime.Minutes(6)
|
||||
}
|
||||
|
||||
AtreidesAttackWaves =
|
||||
{
|
||||
easy = 6,
|
||||
normal = 7,
|
||||
hard = 8
|
||||
}
|
||||
|
||||
FremenGroupSize =
|
||||
{
|
||||
easy = 2,
|
||||
normal = 4,
|
||||
hard = 6
|
||||
}
|
||||
|
||||
InitialAtreidesReinforcements =
|
||||
{
|
||||
{ "combat_tank_a", "combat_tank_a", "quad", "trike" },
|
||||
{ "trooper", "trooper", "trooper", "trooper", "trooper", "combat_tank_a" },
|
||||
{ "combat_tank_a", "combat_tank_a", "quad", "quad", "trike" }
|
||||
}
|
||||
|
||||
InitialCorrinoReinforcements =
|
||||
{
|
||||
{ "trooper", "trooper", "trooper", "trooper", "quad", "quad" },
|
||||
{ "trooper", "trooper", "trooper", "trooper", "trooper", "combat_tank_h", "combat_tank_h" },
|
||||
{ "trooper", "trooper", "trooper", "combat_tank_h", "combat_tank_h", "combat_tank_h" }
|
||||
}
|
||||
|
||||
AtreidesPaths =
|
||||
{
|
||||
{ AtreidesEntry1.Location, AtreidesRally1.Location },
|
||||
{ AtreidesEntry2.Location, AtreidesRally2.Location },
|
||||
{ AtreidesEntry3.Location, AtreidesRally3.Location },
|
||||
{ AtreidesEntry4.Location, AtreidesRally4.Location },
|
||||
{ AtreidesEntry5.Location, AtreidesRally5.Location }
|
||||
}
|
||||
|
||||
InitialAtreidesPaths =
|
||||
{
|
||||
{ AConYard1.Location, AtreidesRally6.Location },
|
||||
{ ARefinery2.Location, AtreidesRally7.Location },
|
||||
{ AtreidesEntry6.Location, AtreidesRally8.Location }
|
||||
}
|
||||
|
||||
InitialCorrinoPaths =
|
||||
{
|
||||
{ CConYard.Location, CorrinoRally1.Location },
|
||||
{ CHeavyFactory.Location, CorrinoRally2.Location },
|
||||
{ CRefinery2.Location, CorrinoRally3.Location }
|
||||
}
|
||||
|
||||
HarkonnenReinforcements = { "combat_tank_h", "combat_tank_h" }
|
||||
|
||||
HarkonnenPath = { HarkonnenEntry.Location, HarkonnenRally.Location }
|
||||
|
||||
SendStarportReinforcements = function()
|
||||
Trigger.AfterDelay(CorrinoStarportDelay[Difficulty], function()
|
||||
if CStarport.IsDead or CStarport.Owner ~= corrino_small then
|
||||
return
|
||||
end
|
||||
|
||||
reinforcements = Utils.Random(CorrinoStarportReinforcements[Difficulty])
|
||||
|
||||
local units = Reinforcements.ReinforceWithTransport(corrino_small, "frigate", reinforcements, { CorrinoStarportEntry.Location, CStarport.Location + CVec.New(1, 1) }, { CorrinoStarportExit.Location })[2]
|
||||
Utils.Do(units, function(unit)
|
||||
unit.AttackMove(AtreidesAttackLocation)
|
||||
IdleHunt(unit)
|
||||
end)
|
||||
|
||||
SendStarportReinforcements()
|
||||
end)
|
||||
end
|
||||
|
||||
SendHarkonnenReinforcements = function(delay)
|
||||
Trigger.AfterDelay(delay, function()
|
||||
Reinforcements.ReinforceWithTransport(player, "carryall.reinforce", HarkonnenReinforcements, HarkonnenPath, { HarkonnenPath[1] })
|
||||
Trigger.AfterDelay(DateTime.Seconds(5), function()
|
||||
Media.PlaySpeechNotification(player, "Reinforce")
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
SendAirStrike = function()
|
||||
if AHiTechFactory.IsDead or AHiTechFactory.Owner ~= atreides_main then
|
||||
return
|
||||
end
|
||||
|
||||
local targets = Utils.Where(player.GetActors(), function(actor)
|
||||
return
|
||||
actor.HasProperty("Sell") and
|
||||
actor.Type ~= "wall" and
|
||||
actor.Type ~= "medium_gun_turret" and
|
||||
actor.Type ~= "large_gun_turret" and
|
||||
actor.Type ~= "wind_trap"
|
||||
end)
|
||||
|
||||
if #targets > 0 then
|
||||
AHiTechFactory.SendAirstrike(Utils.Random(targets).CenterPosition, true, 0)
|
||||
end
|
||||
|
||||
Trigger.AfterDelay(DateTime.Minutes(5), SendAirStrike)
|
||||
end
|
||||
|
||||
BuildFremen = function()
|
||||
if APalace.IsDead or APalace.Owner ~= atreides_main then
|
||||
return
|
||||
end
|
||||
|
||||
APalace.Produce("fremen")
|
||||
APalace.Produce("fremen")
|
||||
|
||||
Trigger.AfterDelay(DateTime.Seconds(5), function()
|
||||
IdleFremen = Utils.Where(atreides_main.GetActorsByType('fremen'), function(actor) return actor.IsIdle end)
|
||||
|
||||
if #IdleFremen >= FremenGroupSize[Difficulty] then
|
||||
SendFremen()
|
||||
end
|
||||
end)
|
||||
|
||||
Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds (30), BuildFremen)
|
||||
end
|
||||
|
||||
SendFremen = function()
|
||||
Utils.Do(IdleFremen, function(freman)
|
||||
freman.AttackMove(AtreidesAttackLocation)
|
||||
IdleHunt(freman)
|
||||
end)
|
||||
end
|
||||
|
||||
ChangeOwner = function(old_owner, new_owner)
|
||||
local units = old_owner.GetActors()
|
||||
Utils.Do(units, function(unit)
|
||||
if not unit.IsDead then
|
||||
unit.Owner = new_owner
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
CheckSmugglerEnemies = function()
|
||||
Utils.Do(SmugglerUnits, function(unit)
|
||||
Trigger.OnDamaged(unit, function(self, attacker)
|
||||
if unit.Owner == smuggler_neutral and attacker.Owner == player then
|
||||
ChangeOwner(smuggler_neutral, smuggler_harkonnen)
|
||||
|
||||
-- Ensure that harvesters that was on a carryall switched sides.
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), function()
|
||||
ChangeOwner(smuggler_neutral, smuggler_harkonnen)
|
||||
end)
|
||||
end
|
||||
|
||||
if unit.Owner == smuggler_ai and attacker.Owner == player then
|
||||
ChangeOwner(smuggler_ai, smuggler_both)
|
||||
|
||||
-- Ensure that harvesters that was on a carryall switched sides.
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), function()
|
||||
ChangeOwner(smuggler_ai, smuggler_both)
|
||||
end)
|
||||
end
|
||||
|
||||
if unit.Owner == smuggler_neutral and (attacker.Owner == atreides_main or attacker.Owner == atreides_small or attacker.Owner == corrino_main or attacker.Owner == corrino_small) then
|
||||
ChangeOwner(smuggler_neutral, smuggler_ai)
|
||||
|
||||
-- Ensure that harvesters that was on a carryall switched sides.
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), function()
|
||||
ChangeOwner(smuggler_neutral, smuggler_ai)
|
||||
end)
|
||||
end
|
||||
|
||||
if unit.Owner == smuggler_harkonnen and (attacker.Owner == atreides_main or attacker.Owner == atreides_small or attacker.Owner == corrino_main or attacker.Owner == corrino_small) then
|
||||
ChangeOwner(smuggler_harkonnen, smuggler_both)
|
||||
|
||||
-- Ensure that harvesters that was on a carryall switched sides.
|
||||
Trigger.AfterDelay(DateTime.Seconds(15), function()
|
||||
ChangeOwner(smuggler_harkonnen, smuggler_both)
|
||||
end)
|
||||
end
|
||||
|
||||
if attacker.Owner == player and not message_check then
|
||||
|
||||
message_check = true
|
||||
Media.DisplayMessage("The Smugglers are now hostile!", "Mentat")
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
Tick = function()
|
||||
if player.HasNoRequiredUnits() then
|
||||
atreides_main.MarkCompletedObjective(KillHarkonnen1)
|
||||
atreides_small.MarkCompletedObjective(KillHarkonnen2)
|
||||
corrino_main.MarkCompletedObjective(KillHarkonnen3)
|
||||
corrino_small.MarkCompletedObjective(KillHarkonnen4)
|
||||
end
|
||||
|
||||
if atreides_main.HasNoRequiredUnits() and atreides_small.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillAtreides) then
|
||||
Media.DisplayMessage("The Atreides have been annihilated!", "Mentat")
|
||||
player.MarkCompletedObjective(KillAtreides)
|
||||
end
|
||||
|
||||
if corrino_main.HasNoRequiredUnits() and corrino_small.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillCorrino) then
|
||||
Media.DisplayMessage("The Emperor has been annihilated!", "Mentat")
|
||||
player.MarkCompletedObjective(KillCorrino)
|
||||
end
|
||||
|
||||
if smuggler_neutral.HasNoRequiredUnits() and smuggler_harkonnen.HasNoRequiredUnits() and smuggler_ai.HasNoRequiredUnits() and smuggler_both.HasNoRequiredUnits() and not SmugglersKilled then
|
||||
Media.DisplayMessage("The Smugglers have been annihilated!", "Mentat")
|
||||
SmugglersKilled = true
|
||||
end
|
||||
|
||||
local playerConYards = player.GetActorsByType("construction_yard")
|
||||
if #playerConYards > 0 and not player.IsObjectiveCompleted(DeployMCV) then
|
||||
player.MarkCompletedObjective(DeployMCV)
|
||||
end
|
||||
|
||||
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[atreides_main] then
|
||||
local units = atreides_main.GetActorsByType("harvester")
|
||||
|
||||
if #units > 0 then
|
||||
LastHarvesterEaten[atreides_main] = false
|
||||
ProtectHarvester(units[1], atreides_main, AttackGroupSize[Difficulty])
|
||||
end
|
||||
end
|
||||
|
||||
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[atreides_small] then
|
||||
local units = atreides_small.GetActorsByType("harvester")
|
||||
|
||||
if #units > 0 then
|
||||
LastHarvesterEaten[atreides_small] = false
|
||||
ProtectHarvester(units[1], atreides_small, AttackGroupSize[Difficulty])
|
||||
end
|
||||
end
|
||||
|
||||
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[corrino_main] then
|
||||
local units = corrino_main.GetActorsByType("harvester")
|
||||
|
||||
if #units > 0 then
|
||||
LastHarvesterEaten[corrino_main] = false
|
||||
ProtectHarvester(units[1], corrino_main, AttackGroupSize[Difficulty])
|
||||
end
|
||||
end
|
||||
|
||||
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[corrino_small] then
|
||||
local units = corrino_small.GetActorsByType("harvester")
|
||||
|
||||
if #units > 0 then
|
||||
LastHarvesterEaten[corrino_small] = false
|
||||
ProtectHarvester(units[1], corrino_small, AttackGroupSize[Difficulty])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
WorldLoaded = function()
|
||||
atreides_main = Player.GetPlayer("Atreides Main Base")
|
||||
atreides_small = Player.GetPlayer("Atreides Small Base")
|
||||
corrino_main = Player.GetPlayer("Corrino Main Base")
|
||||
corrino_small = Player.GetPlayer("Corrino Small Base")
|
||||
smuggler_neutral = Player.GetPlayer("Smugglers - Neutral")
|
||||
smuggler_harkonnen = Player.GetPlayer("Smugglers - Enemy to Harkonnen")
|
||||
smuggler_ai = Player.GetPlayer("Smugglers - Enemy to AI")
|
||||
smuggler_both = Player.GetPlayer("Smugglers - Enemy to Both")
|
||||
player = Player.GetPlayer("Harkonnen")
|
||||
|
||||
InitObjectives(player)
|
||||
DeployMCV = player.AddSecondaryObjective("Build an MCV and deploy it into a Construction Yard.")
|
||||
KillAtreides = player.AddPrimaryObjective("Destroy the Atreides.")
|
||||
KillCorrino = player.AddPrimaryObjective("Destroy the Imperial Forces.")
|
||||
KillHarkonnen1 = atreides_main.AddPrimaryObjective("Kill all Harkonnen units.")
|
||||
KillHarkonnen2 = atreides_small.AddPrimaryObjective("Kill all Harkonnen units.")
|
||||
KillHarkonnen3 = corrino_main.AddPrimaryObjective("Kill all Harkonnen units.")
|
||||
KillHarkonnen4 = corrino_small.AddPrimaryObjective("Kill all Harkonnen units.")
|
||||
|
||||
-- Wait for carryall drop
|
||||
Trigger.AfterDelay(DateTime.Seconds(10), function()
|
||||
SmugglerUnits = smuggler_neutral.GetActors()
|
||||
CheckSmugglerEnemies()
|
||||
end)
|
||||
|
||||
Camera.Position = HBarracks.CenterPosition
|
||||
AtreidesAttackLocation = HBarracks.Location
|
||||
|
||||
Trigger.AfterDelay(DateTime.Minutes(5), SendAirStrike)
|
||||
Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds (30), BuildFremen)
|
||||
|
||||
Trigger.OnAllKilledOrCaptured(AtreidesMainBase, function()
|
||||
Utils.Do(atreides_main.GetGroundAttackers(), IdleHunt)
|
||||
end)
|
||||
|
||||
Trigger.OnAllKilledOrCaptured(AtreidesSmallBase, function()
|
||||
Utils.Do(atreides_small.GetGroundAttackers(), IdleHunt)
|
||||
end)
|
||||
|
||||
Trigger.OnAllKilledOrCaptured(CorrinoMainBase, function()
|
||||
Utils.Do(corrino_main.GetGroundAttackers(), IdleHunt)
|
||||
end)
|
||||
|
||||
Trigger.OnAllKilledOrCaptured(CorrinoSmallBase, function()
|
||||
Utils.Do(corrino_small.GetGroundAttackers(), IdleHunt)
|
||||
end)
|
||||
|
||||
local path = function() return Utils.Random(AtreidesPaths) end
|
||||
local waveCondition = function() return player.IsObjectiveCompleted(KillAtreides) end
|
||||
local huntFunction = function(unit)
|
||||
unit.AttackMove(AtreidesAttackLocation)
|
||||
IdleHunt(unit)
|
||||
end
|
||||
SendCarryallReinforcements(atreides_main, 0, AtreidesAttackWaves[Difficulty], AtreidesAttackDelay[Difficulty], path, AtreidesReinforcements[Difficulty], waveCondition, huntFunction)
|
||||
|
||||
SendStarportReinforcements()
|
||||
|
||||
Actor.Create("upgrade.barracks", true, { Owner = atreides_main })
|
||||
Actor.Create("upgrade.light", true, { Owner = atreides_main })
|
||||
Actor.Create("upgrade.heavy", true, { Owner = atreides_main })
|
||||
Actor.Create("upgrade.hightech", true, { Owner = atreides_main })
|
||||
Actor.Create("upgrade.barracks", true, { Owner = atreides_small })
|
||||
Actor.Create("upgrade.light", true, { Owner = atreides_small })
|
||||
Actor.Create("upgrade.heavy", true, { Owner = atreides_small })
|
||||
Actor.Create("upgrade.barracks", true, { Owner = corrino_main })
|
||||
Actor.Create("upgrade.heavy", true, { Owner = corrino_main })
|
||||
Actor.Create("upgrade.barracks", true, { Owner = corrino_small })
|
||||
Actor.Create("upgrade.light", true, { Owner = corrino_small })
|
||||
Trigger.AfterDelay(0, ActivateAI)
|
||||
|
||||
SendHarkonnenReinforcements(DateTime.Minutes(2))
|
||||
end
|
||||
BIN
mods/d2k/maps/harkonnen-09b/map.bin
Normal file
BIN
mods/d2k/maps/harkonnen-09b/map.bin
Normal file
Binary file not shown.
BIN
mods/d2k/maps/harkonnen-09b/map.png
Normal file
BIN
mods/d2k/maps/harkonnen-09b/map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 298 KiB |
1010
mods/d2k/maps/harkonnen-09b/map.yaml
Normal file
1010
mods/d2k/maps/harkonnen-09b/map.yaml
Normal file
File diff suppressed because it is too large
Load Diff
58
mods/d2k/maps/harkonnen-09b/rules.yaml
Normal file
58
mods/d2k/maps/harkonnen-09b/rules.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
Player:
|
||||
PlayerResources:
|
||||
DefaultCash: 5000
|
||||
|
||||
World:
|
||||
LuaScript:
|
||||
Scripts: campaign-global.lua, harkonnen09b.lua, harkonnen09b-AI.lua
|
||||
MissionData:
|
||||
Briefing: Only the Atreides and Imperial forces now remain. The Sardaukar, still scattered from their long march from the North, cannot mass their forces to attack. Only the destruction of the Emperor's base encampment will stop the flow of Imperial forces.\n\nOnce this has been accomplished, turn on the Atreides and annihilate them. Claim Arrakis for House Harkonnen!
|
||||
BriefingVideo: H_BR09_E.VQA
|
||||
MapOptions:
|
||||
TechLevel: unrestricted
|
||||
ScriptLobbyDropdown@difficulty:
|
||||
ID: difficulty
|
||||
Label: Difficulty
|
||||
Values:
|
||||
easy: Easy
|
||||
normal: Normal
|
||||
hard: Hard
|
||||
Default: easy
|
||||
|
||||
^Palettes:
|
||||
IndexedPlayerPalette:
|
||||
PlayerIndex:
|
||||
Atreides Main Base: 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128
|
||||
Atreides Small Base: 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128
|
||||
Corrino Main Base: 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176
|
||||
Corrino Small Base: 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176
|
||||
Smugglers - Neutral: 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208
|
||||
Smugglers - Enemy to Harkonnen: 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208
|
||||
Smugglers - Enemy to AI: 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208
|
||||
Smugglers - Enemy to Both: 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208
|
||||
|
||||
carryall.reinforce:
|
||||
Cargo:
|
||||
MaxWeight: 10
|
||||
|
||||
frigate:
|
||||
Aircraft:
|
||||
LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete
|
||||
VTOL: true # The frigate would teleport to land otherwise
|
||||
|
||||
palace:
|
||||
ProvidesPrerequisite@sardaukar:
|
||||
Prerequisite: palace.sardaukar
|
||||
Factions: corrino
|
||||
|
||||
sardaukar:
|
||||
Buildable:
|
||||
Prerequisites: barracks, ~palace.sardaukar
|
||||
|
||||
grenadier:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
|
||||
thumper:
|
||||
Buildable:
|
||||
Prerequisites: ~disabled
|
||||
@@ -31,3 +31,4 @@ Harkonnen Campaign:
|
||||
./mods/d2k/maps/harkonnen-07
|
||||
./mods/d2k/maps/harkonnen-08
|
||||
./mods/d2k/maps/harkonnen-09a
|
||||
./mods/d2k/maps/harkonnen-09b
|
||||
|
||||
Reference in New Issue
Block a user