Add Harkonnen 7

This commit is contained in:
Mustafa Alperen Seki
2017-10-16 14:33:53 +03:00
committed by reaperrr
parent 14c608786d
commit 956dbb762c
9 changed files with 1214 additions and 0 deletions

View File

@@ -133,6 +133,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dune 2000 Lua scripts", "Du
mods\d2k\maps\harkonnen-06a\harkonnen06a.lua = mods\d2k\maps\harkonnen-06a\harkonnen06a.lua
mods\d2k\maps\harkonnen-06b\harkonnen06b-AI.lua = mods\d2k\maps\harkonnen-06b\harkonnen06b-AI.lua
mods\d2k\maps\harkonnen-06b\harkonnen06b.lua = mods\d2k\maps\harkonnen-06b\harkonnen06b.lua
mods\d2k\maps\harkonnen-07\harkonnen07-AI.lua = mods\d2k\maps\harkonnen-07\harkonnen07-AI.lua
mods\d2k\maps\harkonnen-07\harkonnen07.lua = mods\d2k\maps\harkonnen-07\harkonnen07.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

View File

@@ -0,0 +1,67 @@
--[[
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) }
}
InitialProductionDelay =
{
easy = DateTime.Seconds(30),
normal = DateTime.Seconds(15),
hard = 0
}
AtreidesInfantryTypes = { "light_inf", "light_inf", "light_inf", "trooper", "trooper" }
AtreidesVehicleTypes = { "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" }
CorrinoInfantryTypes = { "light_inf", "trooper", "sardaukar" }
ActivateAI = function()
IdlingUnits[atreides_main] = Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[Difficulty][1], InitialAtreidesPaths[1]), Reinforcements.Reinforce(atreides_main, InitialAtreidesReinforcements[Difficulty][2], InitialAtreidesPaths[2])
IdlingUnits[atreides_small] = Reinforcements.Reinforce(atreides_small, InitialAtreidesReinforcements[Difficulty][1], InitialAtreidesPaths[3])
IdlingUnits[corrino] = Reinforcements.Reinforce(corrino, InitialCorrinoReinforcements, InitialCorrinoPath)
DefendAndRepairBase(atreides_main, AtreidesMainBase, 0.75, AttackGroupSize[Difficulty])
DefendAndRepairBase(atreides_small, AtreidesSmallBase, 0.75, AttackGroupSize[Difficulty])
DefendAndRepairBase(corrino, CorrinoBase, 0.75, AttackGroupSize[Difficulty])
local delay = function() return Utils.RandomInteger(AttackDelays[Difficulty][1], AttackDelays[Difficulty][2] + 1) end
local infantryToBuildAtreides = function() return { Utils.Random(AtreidesInfantryTypes) } end
local infantryToBuildCorrino = function() return { Utils.Random(CorrinoInfantryTypes) } end
local vehilcesToBuild = function() return { Utils.Random(AtreidesVehicleTypes) } end
local tanksToBuildMain = function() return { Utils.Random(AtreidesMainTankTypes) } end
local tanksToBuildSmall = function() return { Utils.Random(AtreidesSmallTankTypes) } end
local unitsToBuy = function() return { Utils.Random(AtreidesStarportTypes) } end
local attackThresholdSize = AttackGroupSize[Difficulty] * 2.5
Trigger.AfterDelay(InitialProductionDelay[Difficulty], function()
ProduceUnits(atreides_main, ALightFactory1, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(atreides_main, AHeavyFactory1, delay, tanksToBuildMain, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(atreides_main, AStarport, delay, unitsToBuy, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(atreides_small, ABarracks, delay, infantryToBuildAtreides, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(atreides_small, AHeavyFactory2, delay, tanksToBuildSmall, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(corrino, CBarracks, delay, infantryToBuildCorrino, AttackGroupSize[Difficulty], attackThresholdSize)
end)
end

View File

@@ -0,0 +1,275 @@
--[[
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, ARefinery1, ARefinery2, AHeavyFactory1, ALightFactory1, ALightFactory2, AHiTechFactory, AResearch, ARepair, AStarport, AGunt1, AGunt2, AGunt3, AGunt4, AGunt5, AGunt6, ARock1, ARock2, ARock3, ARock4, ARock5, ARock6, APower1, APower2, APower3, APower4, APower5, APower6, APower7, APower8, APower9, APower10, APower11, APower12, APower13, APower14, APower15, APower16, APower17, APower18, APower19, APower20, APower21, APower22, ASilo1, ASilo2, ASilo3 }
AtreidesSmallBase = { AOutpost2, ARefinery3, ABarracks, AHeavyFactory2, AGunt7, AGunt8, APower23, APower24, APower25, APower26, ASilo4, ASilo5, ASilo6, ASilo7 }
CorrinoBase = { CBarracks, COutpost, CPower1, CPower2, CPower3, CRock1, CRock2 }
AtreidesReinforcements =
{
easy = { "sonic_tank" },
normal = { "sonic_tank", "trooper" },
hard = { "sonic_tank", "quad" }
}
CorrinoReinforcements =
{
easy =
{
{ "sardaukar", "sardaukar", "sardaukar", "quad", "quad", "trike" },
{ "sardaukar", "sardaukar", "combat_tank_h", "trike" }
},
normal =
{
{ "sardaukar", "sardaukar", "sardaukar", "combat_tank_h", "quad", "trike" },
{ "sardaukar", "sardaukar", "combat_tank_h", "siege_tank" }
},
hard =
{
{ "sardaukar", "sardaukar", "sardaukar", "combat_tank_h", "quad", "quad", "trike" },
{ "sardaukar", "sardaukar", "sardaukar", "combat_tank_h", "siege_tank" }
}
}
EnemyAttackDelay =
{
easy = DateTime.Minutes(3) + DateTime.Seconds(30),
normal = DateTime.Minutes(2) + DateTime.Seconds(30),
hard = DateTime.Minutes(1) + DateTime.Seconds(30)
}
CorrinoInitialAttackDelay =
{
easy = DateTime.Seconds(45),
normal = DateTime.Seconds(30),
hard = DateTime.Seconds(15)
}
InitialAtreidesReinforcements =
{
easy =
{
{ "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_a", "quad", "quad", "trike", "trike" },
{ "trooper", "trooper", "quad", "quad" }
},
normal =
{
{ "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_a", "combat_tank_a", "quad", "trike", "trike" },
{ "trooper", "trooper", "trooper", "quad", "quad" }
},
hard =
{
{ "trooper", "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_a", "combat_tank_a", "quad", "quad", "trike", "trike" },
{ "trooper", "trooper", "trooper", "trooper", "quad", "quad" }
}
}
InitialCorrinoReinforcements = { "trooper", "trooper", "trooper", "trooper", "trooper" }
AtreidesPath = { AtreidesEntry1.Location, AtreidesRally1.Location }
CorrinoPaths =
{
{ CorrinoEntry1.Location, CorrinoRally1.Location },
{ CorrinoEntry1.Location, CorrinoRally2.Location }
}
InitialAtreidesPaths =
{
{ AtreidesEntry2.Location, AtreidesRally2.Location },
{ AtreidesEntry3.Location, AtreidesRally3.Location },
{ AtreidesEntry4.Location, AtreidesRally4.Location }
}
InitialCorrinoPath = { CorrinoEntry2.Location, CorrinoRally3.Location }
HarkonnenReinforcements =
{
easy =
{
{ "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "quad", "trike", "trike", "siege_tank", "combat_tank_h", "combat_tank_h" }
},
normal =
{
{ "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "quad", "trike", "siege_tank", "combat_tank_h", "combat_tank_h" }
},
hard =
{
{ "trooper", "trooper", "light_inf", "light_inf", "light_inf" },
{ "quad", "trike", "trike", "combat_tank_h", "combat_tank_h" }
},
}
HarkonnenPaths =
{
{ HarkonnenEntry1.Location, HarkonnenRally1.Location },
{ HarkonnenEntry2.Location, HarkonnenRally2.Location }
}
SendHarkonnenReinforcements = function(number)
Reinforcements.ReinforceWithTransport(player, "carryall.reinforce", HarkonnenReinforcements[Difficulty][number], HarkonnenPaths[number], { HarkonnenPaths[number][1] })
Trigger.AfterDelay(DateTime.Seconds(9), function()
Media.PlaySpeechNotification(player, "Reinforce")
end)
end
SendEnemyReinforcements = function(player, delay, path, unitTypes, customCondition, customHuntFunction)
Trigger.AfterDelay(delay, function()
if customCondition and customCondition() then
return
end
local units = Reinforcements.ReinforceWithTransport(player, "carryall.reinforce", unitTypes, path, { path[1] })[2]
if not customHuntFunction then
customHuntFunction = IdleHunt
end
Utils.Do(units, customHuntFunction)
SendEnemyReinforcements(player, delay, path, unitTypes, customCondition, customHuntFunction)
end)
end
SendAirStrike = function()
if HiTechIsDead 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
Tick = function()
if player.HasNoRequiredUnits() then
atreides_main.MarkCompletedObjective(KillHarkonnen1)
atreides_small.MarkCompletedObjective(KillHarkonnen2)
corrino.MarkCompletedObjective(KillHarkonnen3)
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.HasNoRequiredUnits() and not player.IsObjectiveCompleted(KillCorrino) then
Media.DisplayMessage("The Emperor have been annihilated!", "Mentat")
player.MarkCompletedObjective(KillCorrino)
end
if (HEngineer.IsDead or AConYard2.IsDead) and not player.IsObjectiveCompleted(CaptureAtreidesConYard) then
player.MarkFailedObjective(CaptureAtreidesConYard)
end
if (AHiTechFactory.IsDead or AHiTechFactory.Owner ~= atreides_main) and not HiTechIsDead then
Media.DisplayMessage("High Tech Factory neutralized! Atreides cut off from Imperial reinforcement!", "Mentat")
HiTechIsDead = true
end
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[ordos_main] then
local units = ordos_main.GetActorsByType("harvester")
if #units > 0 then
LastHarvesterEaten[ordos_main] = false
ProtectHarvester(units[1], ordos_main, AttackGroupSize[Difficulty])
end
end
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[ordos_small] then
local units = ordos_small.GetActorsByType("harvester")
if #units > 0 then
LastHarvesterEaten[ordos_small] = false
ProtectHarvester(units[1], ordos_small, AttackGroupSize[Difficulty])
end
end
end
WorldLoaded = function()
atreides_main = Player.GetPlayer("Atreides Main Base")
atreides_small = Player.GetPlayer("Atreides Small Base")
corrino = Player.GetPlayer("Corrino")
player = Player.GetPlayer("Harkonnen")
InitObjectives(player)
CaptureAtreidesConYard = player.AddPrimaryObjective("Capture the Atreides Construction Yard at the South.")
KillAtreides = player.AddPrimaryObjective("Destroy the Atreides.")
KillCorrino = player.AddPrimaryObjective("Destroy the Corrino.")
KillHarkonnen1 = atreides_main.AddPrimaryObjective("Kill all Harkonnen units.")
KillHarkonnen2 = atreides_small.AddPrimaryObjective("Kill all Harkonnen units.")
KillHarkonnen3 = corrino.AddPrimaryObjective("Kill all Harkonnen units.")
Media.DisplayMessage("Destroy Atreides High Tech Factory to cut off Atreides from Imperial reinforcements.", "Mentat")
Camera.Position = HEngineer.CenterPosition
AtreidesAttackLocation = AConYard2.Location
Trigger.AfterDelay(DateTime.Minutes(5), SendAirStrike)
Trigger.OnCapture(AConYard2, function()
player.MarkCompletedObjective(CaptureAtreidesConYard)
end)
Trigger.OnAllKilledOrCaptured(AtreidesMainBase, function()
Utils.Do(atreides_main.GetGroundAttackers(), IdleHunt)
end)
Trigger.OnAllKilledOrCaptured(AtreidesSmallBase, function()
Utils.Do(atreides_small.GetGroundAttackers(), IdleHunt)
end)
Trigger.OnAllKilledOrCaptured(CorrinoBase, function()
Utils.Do(corrino.GetGroundAttackers(), IdleHunt)
end)
local atreidesWaveCondition = function() return player.IsObjectiveCompleted(KillAtreides) or HiTechIsDead end
local corrinoWaveCondition = function() return player.IsObjectiveCompleted(KillCorrino) or HiTechIsDead end
local huntFunction = function(unit)
unit.AttackMove(AtreidesAttackLocation)
IdleHunt(unit)
end
SendEnemyReinforcements(atreides_main, EnemyAttackDelay[Difficulty], AtreidesPath, AtreidesReinforcements[Difficulty], atreidesWaveCondition, huntFunction)
Trigger.AfterDelay(CorrinoInitialAttackDelay[Difficulty], function()
SendEnemyReinforcements(corrino, EnemyAttackDelay[Difficulty], CorrinoPaths[1], CorrinoReinforcements[Difficulty][1], corrinoWaveCondition, huntFunction)
SendEnemyReinforcements(corrino, EnemyAttackDelay[Difficulty], CorrinoPaths[2], CorrinoReinforcements[Difficulty][2], corrinoWaveCondition, huntFunction)
end)
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.heavy", true, { Owner = atreides_small })
Actor.Create("upgrade.barracks", true, { Owner = corrino })
Trigger.AfterDelay(0, ActivateAI)
SendHarkonnenReinforcements(1)
SendHarkonnenReinforcements(2)
end

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

View File

@@ -0,0 +1,770 @@
MapFormat: 11
RequiresMod: d2k
Title: Harkonnen 07
Author: Westwood Studios
Tileset: ARRAKIS
MapSize: 104,74
Bounds: 2,2,100,70
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Enemies: Harkonnen, Atreides Main Base, Atreides Small Base, Corrino
PlayerReference@Harkonnen:
Name: Harkonnen
Playable: True
LockFaction: True
Faction: harkonnen
LockColor: True
Color: FE0000
Enemies: Atreides Main Base, Atreides Small Base, Corrino, Creeps
PlayerReference@Atreides Main Base:
Name: Atreides Main Base
LockFaction: True
Faction: atreides
LockColor: True
Color: 9191FF
Allies: Atreides Small Base, Corrino
Enemies: Harkonnen
PlayerReference@Atreides Small Base:
Name: Atreides Small Base
LockFaction: True
Faction: atreides
LockColor: True
Color: 9191FF
Allies: Atreides Main Base, Corrino
Enemies: Harkonnen
PlayerReference@Corrino:
Name: Corrino
LockFaction: True
Faction: corrino
LockColor: True
Color: 7D00FE
Allies: Atreides Main Base, Atreides Small Base
Enemies: Harkonnen
Actors:
Actor0: wormspawner
Location: 75,3
Owner: Creeps
Actor1: wormspawner
Location: 49,4
Owner: Creeps
Actor2: wormspawner
Location: 64,6
Owner: Creeps
Actor3: wormspawner
Location: 57,8
Owner: Creeps
Actor4: wall
Location: 70,9
Owner: Atreides Main Base
Actor5: wall
Location: 71,9
Owner: Atreides Main Base
Actor6: wall
Location: 70,10
Owner: Atreides Main Base
ARock1: large_gun_turret
Location: 71,10
Owner: Atreides Main Base
APower1: wind_trap
Location: 74,10
Owner: Atreides Main Base
APower2: wind_trap
Location: 76,10
Owner: Atreides Main Base
Actor10: spicebloom.spawnpoint
Location: 29,15
Owner: Neutral
Actor11: spicebloom.spawnpoint
Location: 100,16
Owner: Neutral
Actor12: wall
Location: 74,17
Owner: Atreides Main Base
Actor13: wall
Location: 75,17
Owner: Atreides Main Base
Actor14: wall
Location: 76,17
Owner: Atreides Main Base
Actor15: wall
Location: 77,17
Owner: Atreides Main Base
Actor16: wall
Location: 78,17
Owner: Atreides Main Base
Actor17: wall
Location: 79,17
Owner: Atreides Main Base
Actor18: wall
Location: 80,17
Owner: Atreides Main Base
Actor19: wall
Location: 74,18
Owner: Atreides Main Base
ASilo1: silo
Location: 75,18
Owner: Atreides Main Base
ASilo2: silo
Location: 77,18
Owner: Atreides Main Base
ASilo3: silo
Location: 79,18
Owner: Atreides Main Base
Actor23: wall
Location: 80,18
Owner: Atreides Main Base
ARefinery3: refinery
Location: 5,19
Owner: Atreides Small Base
Actor25: harvester
Location: 10,19
Owner: Atreides Small Base
HEngineer: engineer
Location: 51,19
Owner: Harkonnen
Facing: 128
Actor27: wall
Location: 74,19
Owner: Atreides Main Base
Actor28: wall
Location: 75,19
Owner: Atreides Main Base
Actor29: wall
Location: 76,19
Owner: Atreides Main Base
Actor30: wall
Location: 77,19
Owner: Atreides Main Base
Actor31: wall
Location: 78,19
Owner: Atreides Main Base
Actor32: wall
Location: 79,19
Owner: Atreides Main Base
Actor33: wall
Location: 80,19
Owner: Atreides Main Base
AHeavyFactory2: heavy_factory
Location: 9,20
Owner: Atreides Small Base
Actor35: trike
Location: 50,20
Owner: Harkonnen
Facing: 128
Actor36: quad
Location: 52,20
Owner: Harkonnen
Facing: 128
Actor37: carryall
Location: 8,21
Owner: Atreides Small Base
ASilo4: silo
Location: 4,23
Owner: Atreides Small Base
ASilo5: silo
Location: 5,23
Owner: Atreides Small Base
ASilo6: silo
Location: 6,23
Owner: Atreides Small Base
ASilo7: silo
Location: 7,23
Owner: Atreides Small Base
Actor42: wall
Location: 75,23
Owner: Atreides Main Base
Actor43: wall
Location: 76,23
Owner: Atreides Main Base
Actor44: wall
Location: 77,23
Owner: Atreides Main Base
Actor45: wall
Location: 78,23
Owner: Atreides Main Base
ARock2: large_gun_turret
Location: 79,23
Owner: Atreides Main Base
ARock3: large_gun_turret
Location: 85,23
Owner: Atreides Main Base
Actor48: wall
Location: 86,23
Owner: Atreides Main Base
Actor49: wall
Location: 87,23
Owner: Atreides Main Base
Actor50: wall
Location: 88,23
Owner: Atreides Main Base
Actor51: wall
Location: 89,23
Owner: Atreides Main Base
Actor52: wall
Location: 96,23
Owner: Corrino
Actor53: wall
Location: 97,23
Owner: Corrino
Actor54: wall
Location: 98,23
Owner: Corrino
Actor55: wall
Location: 99,23
Owner: Corrino
Actor56: wall
Location: 100,23
Owner: Corrino
Actor57: wall
Location: 101,23
Owner: Corrino
APower23: wind_trap
Location: 4,24
Owner: Atreides Small Base
ABarracks: barracks
Location: 6,24
Owner: Atreides Small Base
APower24: wind_trap
Location: 11,24
Owner: Atreides Small Base
APower25: wind_trap
Location: 13,24
Owner: Atreides Small Base
Actor62: spicebloom.spawnpoint
Location: 21,24
Owner: Neutral
Actor63: wall
Location: 75,24
Owner: Atreides Main Base
Actor64: light_inf
Location: 78,24
Owner: Atreides Main Base
Actor65: light_inf
Location: 86,24
Owner: Atreides Main Base
Actor66: wall
Location: 93,24
Owner: Corrino
Actor67: wall
Location: 94,24
Owner: Corrino
Actor68: wall
Location: 95,24
Owner: Corrino
Actor69: wall
Location: 96,24
Owner: Corrino
APower26: wind_trap
Location: 2,25
Owner: Atreides Small Base
Actor71: wall
Location: 75,25
Owner: Atreides Main Base
Actor72: wall
Location: 93,25
Owner: Corrino
COutpost: outpost
Location: 98,25
Owner: Corrino
Actor74: wall
Location: 93,26
Owner: Corrino
Actor75: wall
Location: 12,27
Owner: Atreides Small Base
AGunt1: medium_gun_turret
Location: 80,27
Owner: Atreides Main Base
Actor77: wall
Location: 81,27
Owner: Atreides Main Base
Actor78: wall
Location: 82,27
Owner: Atreides Main Base
Actor79: wall
Location: 83,27
Owner: Atreides Main Base
AGunt2: medium_gun_turret
Location: 84,27
Owner: Atreides Main Base
CRock1: large_gun_turret
Location: 93,27
Owner: Corrino
Actor82: wall
Location: 94,27
Owner: Corrino
CBarracks: barracks
Location: 96,27
Owner: Corrino
AGunt7: medium_gun_turret
Location: 12,28
Owner: Atreides Small Base
Actor85: wall
Location: 13,28
Owner: Atreides Small Base
Actor86: wall
Location: 14,28
Owner: Atreides Small Base
Actor87: wall
Location: 15,28
Owner: Atreides Small Base
ALightFactory1: light_factory
Location: 74,28
Owner: Atreides Main Base
Actor89: wall
Location: 80,28
Owner: Atreides Main Base
Actor90: wall
Location: 84,28
Owner: Atreides Main Base
Actor91: wall
Location: 6,29
Owner: Atreides Small Base
Actor92: light_inf
Location: 47,29
Owner: Atreides Small Base
Actor93: wall
Location: 2,30
Owner: Atreides Small Base
Actor94: wall
Location: 3,30
Owner: Atreides Small Base
Actor95: wall
Location: 4,30
Owner: Atreides Small Base
Actor96: wall
Location: 5,30
Owner: Atreides Small Base
AGunt8: medium_gun_turret
Location: 6,30
Owner: Atreides Small Base
Actor98: light_inf
Location: 44,30
Owner: Atreides Small Base
Actor99: light_inf
Location: 49,30
Owner: Atreides Small Base
AResearch: research_centre
Location: 78,30
Owner: Atreides Main Base
APower3: wind_trap
Location: 82,30
Owner: Atreides Main Base
APower4: wind_trap
Location: 84,30
Owner: Atreides Main Base
Actor103: quad
Location: 46,31
Owner: Atreides Small Base
APower27: wind_trap
Location: 47,31
Owner: Atreides Small Base
Actor105: light_inf
Location: 52,31
Owner: Atreides Small Base
AOutpost1: outpost
Location: 89,31
Owner: Atreides Main Base
Actor107: light_inf
Location: 49,32
Owner: Atreides Small Base
Actor108: trooper
Location: 75,32
Owner: Atreides Main Base
CRock2: large_gun_turret
Location: 93,32
Owner: Corrino
Actor110: wall
Location: 94,32
Owner: Corrino
CPower1: wind_trap
Location: 100,32
Owner: Corrino
AHeavyFactory1: heavy_factory
Location: 76,33
Owner: Atreides Main Base
APower5: wind_trap
Location: 82,33
Owner: Atreides Main Base
APower6: wind_trap
Location: 85,33
Owner: Atreides Main Base
Actor115: wall
Location: 93,33
Owner: Corrino
CPower2: wind_trap
Location: 96,33
Owner: Corrino
CPower3: wind_trap
Location: 98,33
Owner: Corrino
AConYard2: construction_yard
Location: 49,34
Owner: Atreides Small Base
Actor119: wall
Location: 93,34
Owner: Corrino
Actor120: spicebloom.spawnpoint
Location: 27,35
Owner: Neutral
Actor121: light_inf
Location: 47,35
Owner: Atreides Small Base
Actor122: wall
Location: 93,35
Owner: Corrino
APower7: wind_trap
Location: 90,36
Owner: Atreides Main Base
Actor124: wall
Location: 93,36
Owner: Corrino
AStarport: starport
Location: 83,37
Owner: Atreides Main Base
APower8: wind_trap
Location: 88,37
Owner: Atreides Main Base
Actor127: wall
Location: 93,37
Owner: Corrino
Actor128: wall
Location: 94,37
Owner: Corrino
Actor129: wall
Location: 95,37
Owner: Corrino
Actor130: wall
Location: 96,37
Owner: Corrino
Actor131: wall
Location: 97,37
Owner: Corrino
Actor132: wall
Location: 98,37
Owner: Corrino
Actor133: wall
Location: 99,37
Owner: Corrino
Actor134: wall
Location: 100,37
Owner: Corrino
Actor135: wall
Location: 101,37
Owner: Corrino
ARepair: repair_pad
Location: 78,38
Owner: Atreides Main Base
APower9: wind_trap
Location: 90,39
Owner: Atreides Main Base
APower10: wind_trap
Location: 92,39
Owner: Atreides Main Base
APower11: wind_trap
Location: 88,40
Owner: Atreides Main Base
APower12: wind_trap
Location: 98,40
Owner: Atreides Main Base
APower13: wind_trap
Location: 100,40
Owner: Atreides Main Base
Actor142: wall
Location: 81,42
Owner: Atreides Main Base
Actor143: wall
Location: 82,42
Owner: Atreides Main Base
Actor144: wall
Location: 83,42
Owner: Atreides Main Base
ALightFactory2: light_factory
Location: 90,42
Owner: Atreides Main Base
Actor146: wall
Location: 81,43
Owner: Atreides Main Base
AGunt3: medium_gun_turret
Location: 82,43
Owner: Atreides Main Base
Actor148: wall
Location: 83,43
Owner: Atreides Main Base
APower14: wind_trap
Location: 96,43
Owner: Atreides Main Base
APower15: wind_trap
Location: 100,43
Owner: Atreides Main Base
Actor151: wall
Location: 81,44
Owner: Atreides Main Base
Actor152: wall
Location: 82,44
Owner: Atreides Main Base
Actor153: wall
Location: 83,44
Owner: Atreides Main Base
APower16: wind_trap
Location: 98,44
Owner: Atreides Main Base
Actor155: spicebloom.spawnpoint
Location: 26,45
Owner: Neutral
AConYard1: construction_yard
Location: 78,45
Owner: Atreides Main Base
Actor157: wall
Location: 86,45
Owner: Atreides Main Base
Actor158: wall
Location: 87,45
Owner: Atreides Main Base
Actor159: wall
Location: 88,45
Owner: Atreides Main Base
Actor160: wall
Location: 71,46
Owner: Atreides Main Base
Actor161: wall
Location: 86,46
Owner: Atreides Main Base
AGunt4: medium_gun_turret
Location: 87,46
Owner: Atreides Main Base
Actor163: wall
Location: 88,46
Owner: Atreides Main Base
Actor164: spicebloom.spawnpoint
Location: 37,47
Owner: Neutral
Actor165: wall
Location: 71,47
Owner: Atreides Main Base
Actor166: wall
Location: 86,47
Owner: Atreides Main Base
Actor167: wall
Location: 87,47
Owner: Atreides Main Base
Actor168: wall
Location: 88,47
Owner: Atreides Main Base
ARock4: large_gun_turret
Location: 71,48
Owner: Atreides Main Base
Actor170: wall
Location: 72,48
Owner: Atreides Main Base
Actor171: wall
Location: 73,48
Owner: Atreides Main Base
Actor172: wall
Location: 74,48
Owner: Atreides Main Base
ARefinery1: refinery
Location: 85,48
Owner: Atreides Main Base
Actor174: harvester
Location: 76,49
Owner: Atreides Main Base
Actor175: harvester
Location: 84,49
Owner: Atreides Main Base
Actor176: carryall
Location: 88,49
Owner: Atreides Main Base
Actor177: spicebloom.spawnpoint
Location: 62,51
Owner: Neutral
ARefinery2: refinery
Location: 74,51
Owner: Atreides Main Base
Actor179: wall
Location: 79,51
Owner: Atreides Main Base
AGunt5: medium_gun_turret
Location: 79,52
Owner: Atreides Main Base
Actor181: light_inf
Location: 53,53
Owner: Atreides Main Base
Actor182: wall
Location: 79,53
Owner: Atreides Main Base
Actor183: light_inf
Location: 49,54
Owner: Atreides Main Base
Actor184: carryall
Location: 77,54
Owner: Atreides Main Base
Actor185: wall
Location: 79,54
Owner: Atreides Main Base
Actor186: wall
Location: 80,54
Owner: Atreides Main Base
Actor187: wall
Location: 81,54
Owner: Atreides Main Base
Actor188: wall
Location: 82,54
Owner: Atreides Main Base
Actor189: wall
Location: 83,54
Owner: Atreides Main Base
Actor190: wall
Location: 50,55
Owner: Atreides Main Base
ARock5: large_gun_turret
Location: 51,55
Owner: Atreides Main Base
Actor192: wall
Location: 52,55
Owner: Atreides Main Base
Actor193: spicebloom.spawnpoint
Location: 32,56
Owner: Neutral
Actor194: wall
Location: 69,56
Owner: Atreides Main Base
Actor195: wall
Location: 73,56
Owner: Atreides Main Base
Actor196: wall
Location: 69,57
Owner: Atreides Main Base
Actor197: wall
Location: 73,57
Owner: Atreides Main Base
Actor198: wall
Location: 67,58
Owner: Atreides Main Base
ARock6: large_gun_turret
Location: 68,58
Owner: Atreides Main Base
Actor200: wall
Location: 69,58
Owner: Atreides Main Base
AGunt6: medium_gun_turret
Location: 73,58
Owner: Atreides Main Base
Actor202: wall
Location: 74,58
Owner: Atreides Main Base
Actor203: spicebloom.spawnpoint
Location: 4,61
Owner: Neutral
Actor204: spicebloom.spawnpoint
Location: 81,61
Owner: Neutral
AHiTechFactory: high_tech_factory
Location: 69,62
Owner: Atreides Main Base
APower17: wind_trap
Location: 74,62
Owner: Atreides Main Base
APower18: wind_trap
Location: 72,63
Owner: Atreides Main Base
APower19: wind_trap
Location: 68,66
Owner: Atreides Main Base
APower20: wind_trap
Location: 72,66
Owner: Atreides Main Base
APower21: wind_trap
Location: 74,66
Owner: Atreides Main Base
APower22: wind_trap
Location: 70,67
Owner: Atreides Main Base
Actor212: spicebloom.spawnpoint
Location: 21,68
Owner: Neutral
Actor213: spicebloom.spawnpoint
Location: 42,69
Owner: Neutral
Actor214: spicebloom.spawnpoint
Location: 54,70
Owner: Neutral
Actor215: spicebloom.spawnpoint
Location: 101,70
Owner: Neutral
AOutpost2: outpost
Owner: Atreides Small Base
Location: 13,20
HarkonnenRally1: waypoint
Owner: Neutral
Location: 46,19
HarkonnenEntry1: waypoint
Owner: Neutral
Location: 46,2
HarkonnenRally2: waypoint
Owner: Neutral
Location: 49,21
HarkonnenEntry2: waypoint
Owner: Neutral
Location: 49,2
AtreidesRally1: waypoint
Owner: Neutral
Location: 7,22
AtreidesEntry1: waypoint
Owner: Neutral
Location: 2,22
CorrinoRally1: waypoint
Owner: Neutral
Location: 97,31
CorrinoEntry1: waypoint
Owner: Neutral
Location: 101,31
CorrinoRally2: waypoint
Owner: Neutral
Location: 98,31
CorrinoRally3: waypoint
Owner: Neutral
Location: 93,30
CorrinoEntry2: waypoint
Owner: Neutral
Location: 101,30
AtreidesRally4: waypoint
Owner: Neutral
Location: 72,53
AtreidesEntry4: waypoint
Owner: Neutral
Location: 68,71
AtreidesRally3: waypoint
Owner: Neutral
Location: 72,50
AtreidesEntry3: waypoint
Owner: Neutral
Location: 72,71
AtreidesRally2: waypoint
Owner: Neutral
Location: 9,27
AtreidesEntry2: waypoint
Owner: Neutral
Location: 2,27
Rules: d2k|rules/campaign-rules.yaml, d2k|rules/campaign-palettes.yaml, rules.yaml

View File

@@ -0,0 +1,78 @@
Player:
PlayerResources:
DefaultCash: 6000
World:
LuaScript:
Scripts: campaign-global.lua, harkonnen07.lua, harkonnen07-AI.lua
MissionData:
Briefing: Your target is the Atreides High Tech Factory, the weak link of the Duke's plan to combine with the Imperial Troops. Without it, the Imperial Carryalls will soon fall into disrepair and not be able to ferry further reinforcements to the battle.\n\nThe Atreides force is large and well-fortified - a frontal assault will fail. However, one Construction Yard to the West of their position is isolated and lightly defended. A small strike force has been airlifted deep into enemy territory. Capture the Construction Yard and use it against the Atreides.
BriefingVideo: H_BR07_E.VQA
MapOptions:
TechLevel: nopowers
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
carryall.reinforce:
Cargo:
MaxWeight: 10
combat_tank_a:
Buildable:
Prerequisites: ~heavy_factory, ~player.atreides
combat_tank_h:
Buildable:
Prerequisites: ~heavy_factory, ~player.harkonnen
combat_tank_a.starport:
Buildable:
Prerequisites: ~starport, ~player.atreides
combat_tank_h.starport:
Buildable:
Prerequisites: ~starport, ~player.harkonnen
sonic_tank:
Buildable:
Prerequisites: ~heavy_factory, research_centre, ~techlevel.high, ~player.atreides
devastator:
Buildable:
Prerequisites: ~heavy_factory, research_centre, ~techlevel.high, ~player.harkonnen
high_tech_factory:
AirstrikePower:
Prerequisites: upgrade.hightech
upgrade.hightech:
Buildable:
Prerequisites: ~hightech.atreides
palace:
Buildable:
Prerequisites: ~disabled
sardaukar:
Buildable:
Prerequisites: ~barracks, ~player.corrino
grenadier:
Buildable:
Prerequisites: ~disabled
thumper:
Buildable:
Prerequisites: ~disabled

View File

@@ -28,3 +28,4 @@ Harkonnen Campaign:
./mods/d2k/maps/harkonnen-05
./mods/d2k/maps/harkonnen-06a
./mods/d2k/maps/harkonnen-06b
./mods/d2k/maps/harkonnen-07

View File

@@ -71,6 +71,27 @@ Player:
HarvesterAttackNotifier:
PlayerStatistics:
PlaceBeacon:
ProvidesPrerequisite@atreides:
Prerequisite: player.atreides
Factions: atreides
ProvidesPrerequisite@harkonnen:
Prerequisite: player.harkonnen
Factions: harkonnen
ProvidesPrerequisite@ordos:
Prerequisite: player.ordos
Factions: ordos
ProvidesPrerequisite@corrino:
Prerequisite: player.corrino
Factions: corrino
ProvidesPrerequisite@fremen:
Prerequisite: player.fremen
Factions: fremen
ProvidesPrerequisite@mercenary:
Prerequisite: player.mercenary
Factions: mercenary
ProvidesPrerequisite@smuggler:
Prerequisite: player.smuggler
Factions: smuggler
ProvidesTechPrerequisite@low:
Name: Low
Prerequisites: techlevel.low