Initial commit: OpenRA game engine
Some checks failed
Continuous Integration / Linux (.NET 8.0) (push) Has been cancelled
Continuous Integration / Windows (.NET 8.0) (push) Has been cancelled

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:
let5sne.win10
2026-01-10 21:46:54 +08:00
commit 9cf6ebb986
4065 changed files with 635973 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
--[[
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.
]]
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) }
}
OrdosInfantryTypes = { "light_inf", "light_inf", "light_inf", "trooper", "trooper" }
OrdosVehicleTypes = { "raider", "raider", "quad" }
OrdosTankType = { "combat_tank_o" }
ActivateAI = function()
IdlingUnits[OrdosMain] = Utils.Concat(Reinforcements.Reinforce(OrdosMain, InitialOrdosReinforcements[1], InitialOrdosPaths[1]), Reinforcements.Reinforce(OrdosMain, InitialOrdosReinforcements[2], InitialOrdosPaths[2]))
IdlingUnits[OrdosSmall] = Reinforcements.Reinforce(OrdosSmall, InitialOrdosReinforcements[1], InitialOrdosPaths[3])
IdlingUnits[Corrino] = { CSaraukar1, CSaraukar2, CSaraukar3, CSaraukar4, CSaraukar5 }
DefendAndRepairBase(OrdosMain, OrdosMainBase, 0.75, AttackGroupSize[Difficulty])
DefendAndRepairBase(OrdosSmall, OrdosSmallBase, 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 infantryToBuild = function() return { Utils.Random(OrdosInfantryTypes) } end
local vehilcesToBuild = function() return { Utils.Random(OrdosVehicleTypes) } end
local tanksToBuild = function() return OrdosTankType end
local attackThresholdSize = AttackGroupSize[Difficulty] * 2.5
ProduceUnits(OrdosMain, OBarracks1, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(OrdosMain, OLightFactory1, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(OrdosMain, OHeavyFactory, delay, tanksToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(OrdosSmall, OBarracks3, delay, infantryToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
ProduceUnits(OrdosSmall, OLightFactory2, delay, vehilcesToBuild, AttackGroupSize[Difficulty], attackThresholdSize)
end

View File

@@ -0,0 +1,285 @@
--[[
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.
]]
OrdosMainBase = { OConYard, OOutpost, ORefinery1, ORefinery2, OHeavyFactory, OLightFactory1, OHiTechFactory, OGunt1, OGunt2, OGunt3, OGunt4, OBarracks1, OBarracks2, OPower1, OPower2, OPower3, OPower4, OPower5, OPower6, OPower7, OPower8, OPower9 }
OrdosSmallBase = { ORefinery3, OBarracks3, OLightFactory2, OGunt5, OGunt6, OPower10, OPower11, OPower12, OPower13, OSilo }
CorrinoBase = { CStarport, CPower1, CPower2 }
BaseAreaTriggers =
{
{ CPos.New(68, 70), CPos.New(69, 70), CPos.New(70, 70), CPos.New(71, 70) },
{ CPos.New(39, 78), CPos.New(39, 79), CPos.New(39, 80), CPos.New(39, 81), CPos.New(43, 68), CPos.New(44, 68), CPos.New(45, 68), CPos.New(46, 68), CPos.New(47, 68), CPos.New(48, 68), CPos.New(49, 68), CPos.New(50, 68), CPos.New(51, 68), CPos.New(52, 68), CPos.New(53, 68), CPos.New(54, 68), CPos.New(55, 68), CPos.New(56, 68), CPos.New(57, 68), CPos.New(58, 68), CPos.New(59, 68), CPos.New(60, 68) }
}
OrdosReinforcements =
{
easy =
{
{ "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper" },
{ "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_o", "quad" },
{ "combat_tank_o", "raider", "light_inf", "light_inf" },
{ "siege_tank", "combat_tank_o", "quad" }
},
normal =
{
{ "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper" },
{ "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_o", "combat_tank_o" },
{ "combat_tank_o", "raider", "raider", "light_inf" },
{ "siege_tank", "combat_tank_o", "quad", "quad" },
{ "combat_tank_o", "combat_tank_o", "combat_tank_o", "combat_tank_o" }
},
hard =
{
{ "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "trooper" },
{ "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_o", "combat_tank_o", "quad" },
{ "combat_tank_o", "raider", "raider", "raider" },
{ "siege_tank", "combat_tank_o", "combat_tank_o", "quad" },
{ "combat_tank_o", "combat_tank_o", "combat_tank_o", "combat_tank_o", "combat_tank_o" },
{ "trooper", "trooper", "trooper", "trooper", "trooper", "trooper", "quad", "quad", "raider" }
}
}
CorrinoStarportReinforcements =
{
easy = { "trooper", "trooper", "quad", "quad", "trike", "trike", "missile_tank", "missile_tank" },
normal = { "trooper", "trooper", "trooper", "quad", "quad", "trike", "trike", "missile_tank", "missile_tank" },
hard = { "trooper", "trooper", "trooper", "quad", "quad", "quad", "trike", "trike", "trike", "missile_tank", "missile_tank" }
}
OrdosAttackDelay =
{
easy = DateTime.Minutes(3),
normal = DateTime.Minutes(2) + DateTime.Seconds(20),
hard = DateTime.Minutes(1)
}
CorrinoStarportDelay =
{
easy = DateTime.Minutes(3),
normal = DateTime.Minutes(2) + DateTime.Seconds(30),
hard = DateTime.Minutes(2)
}
OrdosAttackWaves =
{
easy = 6,
normal = 7,
hard = 8
}
OrdosHunters =
{
{ "combat_tank_o", "combat_tank_o" },
{ "missile_tank" }
}
InitialOrdosReinforcements =
{
{ "trooper", "trooper", "trooper", "trooper", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf", "light_inf" },
{ "combat_tank_o", "combat_tank_o", "quad", "quad", "raider", "raider" }
}
OrdosPaths =
{
{ OrdosEntry1.Location, OrdosRally1.Location },
{ OrdosEntry2.Location, OrdosRally2.Location },
{ OrdosEntry3.Location, OrdosRally3.Location },
{ OrdosEntry4.Location, OrdosRally4.Location },
{ OrdosEntry5.Location, OrdosRally5.Location },
{ OrdosEntry6.Location, OrdosRally6.Location },
{ OrdosEntry7.Location, OrdosRally7.Location }
}
InitialOrdosPaths =
{
{ OrdosEntry8.Location, OrdosRally8.Location },
{ OrdosEntry9.Location, OrdosRally9.Location },
{ OrdosEntry10.Location, OrdosRally10.Location }
}
OrdosHunterPaths =
{
{ OrdosEntry11.Location, OrdosEntry11.Location },
{ OrdosEntry12.Location, OrdosEntry12.Location },
}
HarkonnenReinforcements =
{
{ "trooper", "trooper", "trooper", "trooper" },
{ "combat_tank_h", "combat_tank_h", "combat_tank_h", "combat_tank_h" }
}
HarkonnenPaths =
{
{ HarkonnenEntry1.Location, HarkonnenRally1.Location },
{ HarkonnenEntry2.Location, HarkonnenRally2.Location }
}
SendStarportReinforcements = function()
Trigger.AfterDelay(CorrinoStarportDelay[Difficulty], function()
if CStarport.IsDead or CStarport.Owner ~= Corrino then
return
end
local units = Reinforcements.ReinforceWithTransport(Corrino, "frigate", CorrinoStarportReinforcements[Difficulty], { CorrinoStarportEntry.Location, CStarport.Location + CVec.New(1, 1) }, { CorrinoStarportExit.Location })[2]
Utils.Do(units, function(unit)
unit.AttackMove(OrdosAttackLocation)
IdleHunt(unit)
end)
SendStarportReinforcements()
if Harkonnen.IsObjectiveFailed(GuardOutpost) then
return
end
Media.DisplayMessage(UserInterface.GetFluentMessage("imperial-ships-penetrating-defense-grid"), Mentat)
end)
end
SendHarkonnenReinforcements = function(delay, number)
Trigger.AfterDelay(delay, function()
Reinforcements.ReinforceWithTransport(Harkonnen, "carryall.reinforce", HarkonnenReinforcements[number], HarkonnenPaths[number], { HarkonnenPaths[number][1] })
Trigger.AfterDelay(DateTime.Seconds(5), function()
Media.PlaySpeechNotification(Harkonnen, "Reinforce")
end)
end)
end
OrdosReinforcementNotification = function(currentWave, totalWaves)
Trigger.AfterDelay(OrdosAttackDelay[Difficulty], function()
if Harkonnen.IsObjectiveFailed(GuardOutpost) or Harkonnen.IsObjectiveCompleted(KillOrdos) then
return
end
currentWave = currentWave + 1
if currentWave > totalWaves then
return
end
Media.DisplayMessage(UserInterface.GetFluentMessage("enemy-carryall-drop-detected"), Mentat)
OrdosReinforcementNotification(currentWave, totalWaves)
end)
end
Tick = function()
if Harkonnen.HasNoRequiredUnits() then
OrdosMain.MarkCompletedObjective(KillHarkonnen1)
OrdosSmall.MarkCompletedObjective(KillHarkonnen2)
Corrino.MarkCompletedObjective(KillHarkonnen3)
end
if OrdosMain.HasNoRequiredUnits() and OrdosSmall.HasNoRequiredUnits() and not Harkonnen.IsObjectiveCompleted(KillOrdos) then
Media.DisplayMessage(UserInterface.GetFluentMessage("ordos-annihilated"), Mentat)
Harkonnen.MarkCompletedObjective(KillOrdos)
end
if Corrino.HasNoRequiredUnits() and not Harkonnen.IsObjectiveCompleted(KillCorrino) then
Media.DisplayMessage(UserInterface.GetFluentMessage("emperor-annihilated"), Mentat)
Harkonnen.MarkCompletedObjective(KillCorrino)
end
if Harkonnen.IsObjectiveCompleted(KillOrdos) and Harkonnen.IsObjectiveCompleted(KillCorrino) and not Harkonnen.IsObjectiveCompleted(GuardOutpost) then
Harkonnen.MarkCompletedObjective(GuardOutpost)
end
if (HOutpost.IsDead or HOutpost.Owner ~= Harkonnen) and not Harkonnen.IsObjectiveFailed(GuardOutpost) then
Harkonnen.MarkFailedObjective(GuardOutpost)
end
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[OrdosMain] then
local units = OrdosMain.GetActorsByType("harvester")
if #units > 0 then
LastHarvesterEaten[OrdosMain] = false
ProtectHarvester(units[1], OrdosMain, AttackGroupSize[Difficulty])
end
end
if DateTime.GameTime % DateTime.Seconds(10) == 0 and LastHarvesterEaten[OrdosSmall] then
local units = OrdosSmall.GetActorsByType("harvester")
if #units > 0 then
LastHarvesterEaten[OrdosSmall] = false
ProtectHarvester(units[1], OrdosSmall, AttackGroupSize[Difficulty])
end
end
end
WorldLoaded = function()
OrdosMain = Player.GetPlayer("Ordos Main Base")
OrdosSmall = Player.GetPlayer("Ordos Small Base")
Corrino = Player.GetPlayer("Corrino")
Harkonnen = Player.GetPlayer("Harkonnen")
InitObjectives(Harkonnen)
KillOrdos = AddPrimaryObjective(Harkonnen, "destroy-ordos")
KillCorrino = AddPrimaryObjective(Harkonnen, "destroy-imperial-forces")
GuardOutpost = AddSecondaryObjective(Harkonnen, "keep-modified-outpost-intact")
KillHarkonnen1 = AddPrimaryObjective(OrdosMain, "")
KillHarkonnen2 = AddPrimaryObjective(OrdosSmall, "")
KillHarkonnen3 = AddPrimaryObjective(Corrino, "")
HOutpost.GrantCondition("modified")
Camera.Position = HConYard.CenterPosition
OrdosAttackLocation = HConYard.Location
Trigger.OnAllKilledOrCaptured(OrdosMainBase, function()
Utils.Do(OrdosMain.GetGroundAttackers(), IdleHunt)
end)
Trigger.OnAllKilledOrCaptured(OrdosSmallBase, function()
Utils.Do(OrdosSmall.GetGroundAttackers(), IdleHunt)
end)
Trigger.OnAllKilledOrCaptured(CorrinoBase, function()
Utils.Do(Corrino.GetGroundAttackers(), IdleHunt)
end)
Trigger.AfterDelay(DateTime.Seconds(5), function()
Media.DisplayMessage(UserInterface.GetFluentMessage("protect-outpost"), Mentat)
end)
local path = function() return Utils.Random(OrdosPaths) end
local waveCondition = function() return Harkonnen.IsObjectiveCompleted(KillOrdos) end
local huntFunction = function(unit)
unit.AttackMove(OrdosAttackLocation)
IdleHunt(unit)
end
SendCarryallReinforcements(OrdosMain, 0, OrdosAttackWaves[Difficulty], OrdosAttackDelay[Difficulty], path, OrdosReinforcements[Difficulty], waveCondition, huntFunction)
OrdosReinforcementNotification(0, OrdosAttackWaves[Difficulty])
SendStarportReinforcements()
Actor.Create("upgrade.barracks", true, { Owner = OrdosMain })
Actor.Create("upgrade.light", true, { Owner = OrdosMain })
Actor.Create("upgrade.heavy", true, { Owner = OrdosMain })
Actor.Create("upgrade.barracks", true, { Owner = OrdosSmall })
Actor.Create("upgrade.light", true, { Owner = OrdosSmall })
Trigger.AfterDelay(0, ActivateAI)
SendHarkonnenReinforcements(DateTime.Seconds(15), 1)
SendHarkonnenReinforcements(DateTime.Seconds(30), 1)
SendHarkonnenReinforcements(DateTime.Seconds(35), 2)
local ordosCondition = function() return Harkonnen.IsObjectiveCompleted(KillOrdos) end
TriggerCarryallReinforcements(Harkonnen, OrdosMain, BaseAreaTriggers[1], OrdosHunters[1], OrdosHunterPaths[2], ordosCondition)
TriggerCarryallReinforcements(Harkonnen, OrdosMain, BaseAreaTriggers[2], OrdosHunters[2], OrdosHunterPaths[1], ordosCondition)
end

Binary file not shown.

View File

@@ -0,0 +1,2 @@
## rules.yaml
briefing = Protect the Outpost at Habbanya to prevent Imperial interference. Rush ground troops through the mountain passes and secure the Outpost. Once secured, turn on the Ordos and crush them.

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

View File

@@ -0,0 +1,520 @@
MapFormat: 12
RequiresMod: d2k
Title: Harkonnen 05
Author: Westwood Studios
Tileset: ARRAKIS
MapSize: 74,84
Bounds: 2,2,70,80
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Enemies: Harkonnen, Ordos Main Base, Ordos Small Base, Corrino
PlayerReference@Harkonnen:
Name: Harkonnen
Playable: True
LockFaction: True
Faction: harkonnen
LockColor: True
Color: D64A42
Enemies: Ordos Main Base, Ordos Small Base, Corrino, Creeps
PlayerReference@Ordos Main Base:
Name: Ordos Main Base
LockFaction: True
Faction: ordos
LockColor: True
Color: 5A9473
Allies: Ordos Small Base, Corrino
Enemies: Harkonnen, Creeps
Bot: campaign
PlayerReference@Ordos Small Base:
Name: Ordos Small Base
LockFaction: True
Faction: ordos
LockColor: True
Color: 5A9473
Allies: Ordos Main Base, Corrino
Enemies: Harkonnen, Creeps
Bot: campaign
PlayerReference@Corrino:
Name: Corrino
LockFaction: True
Faction: corrino
LockColor: True
Color: 73007B
Allies: Ordos Main Base, Ordos Small Base
Enemies: Harkonnen, Creeps
Bot: campaign
Actors:
Actor0: wall
Location: 69,10
Owner: Ordos Main Base
Actor1: wall
Location: 70,10
Owner: Ordos Main Base
Actor2: wall
Location: 71,10
Owner: Ordos Main Base
Actor3: wall
Location: 64,11
Owner: Ordos Main Base
Actor4: wall
Location: 65,11
Owner: Ordos Main Base
Actor5: wall
Location: 66,11
Owner: Ordos Main Base
Actor6: wall
Location: 67,11
Owner: Ordos Main Base
Actor7: wall
Location: 68,11
Owner: Ordos Main Base
Actor8: wall
Location: 69,11
Owner: Ordos Main Base
OGunt1: medium_gun_turret
Location: 59,13
Owner: Ordos Main Base
CSardaukar1: sardaukar
Location: 69,13
Owner: Corrino
CSardaukar2: sardaukar
Location: 70,13
Owner: Corrino
Actor12: spicebloom.spawnpoint
Location: 32,14
Owner: Neutral
Actor13: wall
Location: 59,14
Owner: Ordos Main Base
CStarport: starport
Location: 67,14
Owner: Corrino
Actor15: wall
Location: 59,15
Owner: Ordos Main Base
OHeavyFactory: heavy_factory
Location: 61,15
Owner: Ordos Main Base
CSardaukar3: sardaukar
Location: 65,15
Owner: Corrino
CSardaukar4: sardaukar
Location: 71,15
Owner: Corrino
Actor19: wall
Location: 59,16
Owner: Ordos Main Base
Actor20: wall
Location: 59,17
Owner: Ordos Main Base
CSardaukar5: sardaukar
Location: 66,17
Owner: Corrino
Actor22: wall
Location: 57,18
Owner: Ordos Main Base
Actor23: wall
Location: 58,18
Owner: Ordos Main Base
Actor24: wall
Location: 59,18
Owner: Ordos Main Base
Actor25: light_inf
Location: 65,18
Owner: Ordos Main Base
CPower1: wind_trap
Location: 67,18
Owner: Corrino
CPower2: wind_trap
Location: 69,18
Owner: Corrino
Actor28: wind_trap
Location: 4,19
Owner: Harkonnen
Actor29: spicebloom.spawnpoint
Location: 47,19
Owner: Neutral
OOutpost: outpost
Location: 58,19
Owner: Ordos Main Base
OConYard: construction_yard
Location: 63,19
Owner: Ordos Main Base
Actor32: light_inf
Location: 3,20
Owner: Harkonnen
Actor33: light_inf
Location: 6,20
Owner: Harkonnen
OPower1: wind_trap
Location: 55,20
Owner: Ordos Main Base
Actor35: trooper
Location: 61,20
Owner: Ordos Main Base
Actor36: combat_tank_h
Location: 7,21
Owner: Harkonnen
ORefinery1: refinery
Location: 68,21
Owner: Ordos Main Base
HConYard: construction_yard
Location: 4,23
Owner: Harkonnen
Actor39: wind_trap
Location: 8,23
Owner: Harkonnen
OLightFactory1: light_factory
Location: 57,23
Owner: Ordos Main Base
OPower2: wind_trap
Location: 61,23
Owner: Ordos Main Base
OBarracks1: barracks
Location: 63,23
Owner: Ordos Main Base
OPower3: wind_trap
Location: 67,24
Owner: Ordos Main Base
OPower4: wind_trap
Location: 69,24
Owner: Ordos Main Base
OPower5: wind_trap
Location: 54,26
Owner: Ordos Main Base
Actor46: light_inf
Location: 8,27
Owner: Harkonnen
Actor47: spicebloom.spawnpoint
Location: 19,27
Owner: Neutral
OHiTechFactory: high_tech_factory
Location: 57,27
Owner: Ordos Main Base
Actor49: trooper
Location: 61,27
Owner: Ordos Main Base
ORefinery2: refinery
Location: 63,27
Owner: Ordos Main Base
Actor51: carryall
Location: 66,27
Owner: Ordos Main Base
Actor52: light_inf
Location: 6,28
Owner: Harkonnen
OPower6: wind_trap
Location: 67,28
Owner: Ordos Main Base
OPower7: wind_trap
Location: 69,28
Owner: Ordos Main Base
Actor55: light_inf
Location: 3,29
Owner: Harkonnen
Actor56: harvester
Location: 65,30
Owner: Ordos Main Base
OBarracks2: barracks
Location: 57,31
Owner: Ordos Main Base
Actor58: combat_tank_o
Location: 61,31
Owner: Ordos Main Base
Actor59: light_inf
Location: 63,31
Owner: Ordos Main Base
OPower8: wind_trap
Location: 67,31
Owner: Ordos Main Base
OPower9: wind_trap
Location: 69,31
Owner: Ordos Main Base
Actor62: wormspawner
Location: 48,33
Owner: Creeps
Actor63: combat_tank_o
Location: 59,33
Owner: Ordos Main Base
Actor64: combat_tank_o
Location: 66,33
Owner: Ordos Main Base
Actor65: wall
Location: 57,35
Owner: Ordos Main Base
Actor66: wall
Location: 58,35
Owner: Ordos Main Base
Actor67: wall
Location: 59,35
Owner: Ordos Main Base
Actor68: wall
Location: 60,35
Owner: Ordos Main Base
OGunt2: medium_gun_turret
Location: 61,35
Owner: Ordos Main Base
Actor70: combat_tank_o
Location: 64,35
Owner: Ordos Main Base
OGunt3: medium_gun_turret
Location: 66,35
Owner: Ordos Main Base
Actor72: wall
Location: 67,35
Owner: Ordos Main Base
Actor73: wall
Location: 68,35
Owner: Ordos Main Base
Actor74: wall
Location: 69,35
Owner: Ordos Main Base
Actor75: wall
Location: 70,35
Owner: Ordos Main Base
Actor76: wall
Location: 57,36
Owner: Ordos Main Base
Actor77: wall
Location: 70,36
Owner: Ordos Main Base
Actor78: wall
Location: 57,37
Owner: Ordos Main Base
Actor79: wall
Location: 70,37
Owner: Ordos Main Base
Actor80: wall
Location: 71,37
Owner: Ordos Main Base
Actor81: spicebloom.spawnpoint
Location: 25,38
Owner: Neutral
OGunt4: medium_gun_turret
Location: 56,38
Owner: Ordos Main Base
Actor83: wall
Location: 57,38
Owner: Ordos Main Base
Actor84: wall
Location: 10,43
Owner: Harkonnen
Actor85: wall
Location: 12,43
Owner: Harkonnen
Actor86: wall
Location: 10,44
Owner: Harkonnen
Actor87: medium_gun_turret
Location: 11,44
Owner: Harkonnen
Actor88: wall
Location: 12,44
Owner: Harkonnen
Actor89: spicebloom.spawnpoint
Location: 22,45
Owner: Neutral
Actor90: spicebloom.spawnpoint
Location: 63,45
Owner: Neutral
Actor91: wall
Location: 5,47
Owner: Harkonnen
Actor92: wall
Location: 6,47
Owner: Harkonnen
Actor93: medium_gun_turret
Location: 6,48
Owner: Harkonnen
Actor94: spicebloom.spawnpoint
Location: 27,48
Owner: Neutral
Actor95: wall
Location: 5,49
Owner: Harkonnen
Actor96: wall
Location: 6,49
Owner: Harkonnen
Actor97: spicebloom.spawnpoint
Location: 32,56
Owner: Neutral
Actor98: spicebloom.spawnpoint
Location: 66,62
Owner: Neutral
Actor99: spicebloom.spawnpoint
Location: 41,64
Owner: Neutral
Actor100: spicebloom.spawnpoint
Location: 38,66
Owner: Neutral
Actor101: spicebloom.spawnpoint
Location: 5,69
Owner: Neutral
OSilo: silo
Location: 13,72
Owner: Ordos Small Base
OPower10: wind_trap
Location: 15,72
Owner: Ordos Small Base
OLightFactory2: light_factory
Location: 11,74
Owner: Ordos Small Base
OPower11: wind_trap
Location: 15,75
Owner: Ordos Small Base
OGunt5: medium_gun_turret
Location: 9,76
Owner: Ordos Small Base
Actor107: wall
Location: 10,76
Owner: Ordos Small Base
Actor108: wall
Location: 9,77
Owner: Ordos Small Base
OBarracks3: barracks
Location: 7,78
Owner: Ordos Small Base
ORefinery3: refinery
Location: 10,78
Owner: Ordos Small Base
Actor111: carryall
Location: 13,78
Owner: Ordos Small Base
OPower12: wind_trap
Location: 14,78
Owner: Ordos Small Base
OPower13: wind_trap
Location: 16,78
Owner: Ordos Small Base
Actor114: wall
Location: 19,78
Owner: Ordos Small Base
Actor115: spicebloom.spawnpoint
Location: 32,78
Owner: Neutral
OGunt6: medium_gun_turret
Location: 19,79
Owner: Ordos Small Base
Actor117: harvester
Location: 13,80
Owner: Ordos Small Base
Actor118: wall
Location: 19,80
Owner: Ordos Small Base
OrdosRally10: waypoint
Owner: Neutral
Location: 4,78
OrdosEntry10: waypoint
Owner: Neutral
Location: 4,81
CorrinoStarportEntry: waypoint
Owner: Neutral
Location: 71,15
CorrinoStarportExit: waypoint
Owner: Neutral
Location: 2,15
OrdosRally8: waypoint
Owner: Neutral
Location: 63,36
OrdosEntry8: waypoint
Owner: Neutral
Location: 71,34
OrdosRally9: waypoint
Owner: Neutral
Location: 63,33
OrdosEntry9: waypoint
Owner: Neutral
Location: 71,30
OrdosRally11: waypoint
Owner: Neutral
Location: 69,76
OrdosEntry11: waypoint
Owner: Neutral
Location: 71,76
HOutpost: outpost
Owner: Harkonnen
Location: 6,40
OrdosRally12: waypoint
Owner: Neutral
Location: 28,80
OrdosEntry12: waypoint
Owner: Neutral
Location: 28,81
OrdosRally1: waypoint
Owner: Neutral
Location: 29,67
OrdosEntry1: waypoint
Owner: Neutral
Location: 29,81
OrdosRally2: waypoint
Owner: Neutral
Location: 7,67
OrdosEntry2: waypoint
Owner: Neutral
Location: 2,67
OrdosRally3: waypoint
Owner: Neutral
Location: 14,65
OrdosEntry3: waypoint
Owner: Neutral
Location: 2,65
OrdosRally4: waypoint
Owner: Neutral
Location: 32,58
OrdosEntry4: waypoint
Owner: Neutral
Location: 2,58
OrdosRally5: waypoint
Owner: Neutral
Location: 22,30
OrdosEntry5: waypoint
Owner: Neutral
Location: 22,2
OrdosRally6: waypoint
Owner: Neutral
Location: 30,8
OrdosEntry6: waypoint
Owner: Neutral
Location: 30,2
OrdosRally7: waypoint
Owner: Neutral
Location: 31,4
OrdosEntry7: waypoint
Owner: Neutral
Location: 31,2
HarkonnenRally1: waypoint
Owner: Neutral
Location: 11,19
HarkonnenEntry1: waypoint
Owner: Neutral
Location: 2,19
HarkonnenRally2: waypoint
Owner: Neutral
Location: 4,29
HarkonnenEntry2: waypoint
Owner: Neutral
Location: 2,29
Rules: d2k|rules/campaign-rules.yaml, d2k|rules/campaign-tooltips.yaml, d2k|rules/campaign-palettes.yaml, rules.yaml
FluentMessages: d2k|fluent/lua.ftl, d2k|fluent/campaign.ftl, map.ftl

View File

@@ -0,0 +1,82 @@
Player:
PlayerResources:
DefaultCash: 6000
World:
LuaScript:
Scripts: campaign.lua, utils.lua, harkonnen05.lua, harkonnen05-AI.lua
MissionData:
Briefing: briefing
BriefingVideo: H_BR05_E.VQA
MapOptions:
TechLevel: medium
ScriptLobbyDropdown@difficulty:
ID: difficulty
Label: dropdown-difficulty.label
Description: dropdown-difficulty.description
Values:
easy: options-difficulty.easy
normal: options-difficulty.normal
hard: options-difficulty.hard
Default: easy
^Palettes:
IndexedPlayerPalette:
PlayerIndex:
Ordos Main Base: 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160
Ordos Small Base: 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160
FixedPlayerColorShift:
BasePalette: player
PlayerIndex:
Ordos Main Base: 0.060, -0.275, 1, 0.32, 0.34
Ordos Small Base: 0.060, -0.275, 1, 0.32, 0.34
carryall.reinforce:
Cargo:
MaxWeight: 25
frigate:
Aircraft:
LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete
concreteb:
Buildable:
Prerequisites: ~disabled
large_gun_turret:
Buildable:
Prerequisites: ~disabled
research_centre:
Buildable:
Prerequisites: outpost, heavy_factory, upgrade.heavy
missile_tank:
Buildable:
Prerequisites: ~heavy.missile_tank, upgrade.heavy, research_centre
siege_tank:
Buildable:
Prerequisites: ~disabled
mpsardaukar:
Buildable:
Prerequisites: ~disabled
stealth_raider:
Buildable:
Prerequisites: ~disabled
upgrade.conyard:
Buildable:
Prerequisites: ~disabled
outpost:
ExternalCondition@lua:
Condition: modified
Tooltip:
RequiresCondition: !modified
Tooltip@Modified:
Name: actor-outpost-modified-name
RequiresCondition: modified
ShowOwnerRow: false