Add gdi09ea

This commit is contained in:
unknown
2019-12-29 02:21:58 +01:00
committed by reaperrr
parent 5b59f6612f
commit 3c2e9be248
8 changed files with 1316 additions and 0 deletions

View File

@@ -0,0 +1,204 @@
--[[
Copyright 2007-2020 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.
]]
AttackPaths = { { waypoint7 }, { waypoint8 } }
NodBase = { handofnod, nodairfield, nodrefinery, NodCYard, nodpower1, nodpower2, nodpower3, nodpower4, nodpower5, gun5, gun6, gun7, gun8, nodsilo1, nodsilo2, nodsilo3, nodsilo4, nodobelisk }
PatrolProductionQueue = { }
InfantryAttackGroup = { }
InfantryGroupSize = 5
InfantryProductionCooldown = DateTime.Minutes(3)
InfantryProductionTypes = { "e1", "e1", "e1", "e3", "e3", "e4" }
HarvesterProductionType = { "harv" }
VehicleAttackGroup = { }
VehicleGroupSize = 5
VehicleProductionCooldown = DateTime.Minutes(3)
VehicleProductionTypes = { "bggy", "bggy", "bggy", "ltnk", "ltnk", "arty" }
StartingCash = 14000
BaseRefinery = { type = "proc", pos = CPos.New(12, 25) }
BaseNuke1 = { type = "nuke", pos = CPos.New(5, 24) }
BaseNuke2 = { type = "nuke", pos = CPos.New(3, 24) }
BaseNuke3 = { type = "nuke", pos = CPos.New(16, 30) }
BaseNuke4 = { type = "nuke", pos = CPos.New(14, 30) }
BaseNuke5 = { type = "nuke", pos = CPos.New(12, 30) }
InfantryProduction = { type = "hand", pos = CPos.New(15, 24) }
VehicleProduction = { type = "afld", pos = CPos.New(3, 27) }
NodGuards = { Actor168, Actor169, Actor170, Actor171, Actor172, Actor181, Actor177, Actor188, Actor189, Actor190 }
BaseBuildings = { BaseRefinery, BaseNuke1, BaseNuke2, BaseNuke3, BaseNuke4, InfantryProduction, VehicleProduction }
BuildBuilding = function(building, cyard)
local buildingCost = Actor.Cost(building.type)
if CyardIsBuilding or Nod.Cash < buildingCost then
Trigger.AfterDelay(DateTime.Seconds(10), function() BuildBuilding(building, cyard) end)
return
end
CyardIsBuilding = true
Nod.Cash = Nod.Cash - buildingCost
Trigger.AfterDelay(Actor.BuildTime(building.type), function()
CyardIsBuilding = false
if cyard.IsDead or cyard.Owner ~= Nod then
Nod.Cash = Nod.Cash + buildingCost
return
end
local actor = Actor.Create(building.type, true, { Owner = Nod, Location = building.pos })
if actor.Type == 'hand' or actor.Type == 'pyle' then
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceInfantry(actor) end)
elseif actor.Type == 'afld' or actor.Type == 'weap' then
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceVehicle(actor) end)
end
Trigger.OnKilled(actor, function()
BuildBuilding(building, cyard)
end)
RepairBuilding(Nod, actor, 0.75)
end)
end
HasHarvester = function()
local harv = Nod.GetActorsByType("harv")
return #harv > 0
end
GuardBase = function()
Utils.Do(NodBase, function(building)
Trigger.OnDamaged(building, function()
if not building.IsDead then
Utils.Do(NodGuards, function(guard)
if not guard.IsDead then
guard.Stop()
guard.Guard(building)
end
end)
end
end)
end)
end
ProduceHarvester = function(building)
if not buildingHarvester then
buildingHarvester = true
building.Build(HarvesterProductionType, function()
buildingHarvester = false
end)
end
end
ProduceInfantry = function(building)
if building.IsDead or building.Owner ~= Nod then
return
elseif not HasHarvester() then
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceInfantry(building) end)
return
end
if #PatrolProductionQueue >= 1 then
local inQueue = PatrolProductionQueue[1]
local toBuild = { inQueue.unit[1] }
local patrolPath = inQueue.waypoints
building.Build(toBuild, function(unit)
ReplenishPatrolUnit(unit[1], handofnod, patrolPath, 40)
table.remove(PatrolProductionQueue, 1)
end)
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceInfantry(building) end)
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9))
local toBuild = { Utils.Random(InfantryProductionTypes) }
local Path = Utils.Random(AttackPaths)
building.Build(toBuild, function(unit)
InfantryAttackGroup[#InfantryAttackGroup + 1] = unit[1]
if #InfantryAttackGroup >= InfantryGroupSize then
MoveAndHunt(InfantryAttackGroup, Path)
InfantryAttackGroup = { }
Trigger.AfterDelay(InfantryProductionCooldown, function() ProduceInfantry(building) end)
else
Trigger.AfterDelay(delay, function() ProduceInfantry(building) end)
end
end)
end
ProduceVehicle = function(building)
if building.IsDead or building.Owner ~= Nod then
return
elseif not HasHarvester() then
ProduceHarvester(building)
Trigger.AfterDelay(DateTime.Seconds(10), function() ProduceVehicle(building) end)
return
end
local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17))
local toBuild = { Utils.Random(VehicleProductionTypes) }
local Path = Utils.Random(AttackPaths)
building.Build(toBuild, function(unit)
VehicleAttackGroup[#VehicleAttackGroup + 1] = unit[1]
if #VehicleAttackGroup >= VehicleGroupSize then
MoveAndHunt(VehicleAttackGroup, Path)
VehicleAttackGroup = { }
Trigger.AfterDelay(VehicleProductionCooldown, function() ProduceVehicle(building) end)
else
Trigger.AfterDelay(delay, function() ProduceVehicle(building) end)
end
end)
end
StartAI = function()
RepairNamedActors(Nod, 0.75)
Nod.Cash = StartingCash
GuardBase()
end
Trigger.OnAllKilledOrCaptured(NodBase, function()
Utils.Do(Nod.GetGroundAttackers(), IdleHunt)
end)
Trigger.OnKilled(nodrefinery, function(building)
BuildBuilding(BaseRefinery, NodCYard)
end)
Trigger.OnKilled(nodpower1, function(building)
BuildBuilding(BaseNuke1, NodCYard)
end)
Trigger.OnKilled(nodpower2, function(building)
BuildBuilding(BaseNuke2, NodCYard)
end)
Trigger.OnKilled(nodpower3, function(building)
BuildBuilding(BaseNuke3, NodCYard)
end)
Trigger.OnKilled(nodpower4, function(building)
BuildBuilding(BaseNuke4, NodCYard)
end)
Trigger.OnKilled(nodpower5, function(building)
BuildBuilding(BaseNuke5, NodCYard)
end)
Trigger.OnKilled(handofnod, function(building)
BuildBuilding(InfantryProduction, NodCYard)
end)
Trigger.OnKilled(nodairfield, function(building)
BuildBuilding(VehicleProduction, NodCYard)
end)

View File

@@ -0,0 +1,170 @@
--[[
Copyright 2007-2020 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.
]]
InsertionHelicopterType = "tran.insertion"
GDIHeliReinfUnits = { "e2", "e2", "e2", "e3", "e3" }
SamSites = { sam1, sam2, sam3, sam4 }
NodBunkersNorth = { gun3, gun4 }
NodBunkersSouth = { gun1, gun2 }
BoatEscapeTrigger = { CPos.New(2,37) }
WaypointGroup1 = { waypoint1, waypoint2, waypoint8 }
WaypointGroup2 = { waypoint1, waypoint2, waypoint3, waypoint9 }
WaypointGroup3 = { waypoint1, waypoint2, waypoint3, waypoint10, waypoint11, waypoint12, waypoint6, waypoint13 }
WaypointGroup4 = { waypoint1, waypoint2, waypoint3, waypoint4 }
Patrol1Waypoints = { waypoint11.Location, waypoint10.Location }
Patrol2Waypoints = { waypoint1.Location, waypoint2.Location, waypoint3.Location, waypoint4.Location, waypoint5.Location, waypoint4.Location, waypoint3.Location, waypoint2.Location, waypoint1.Location, waypoint6.Location }
Nod1 = { units = { ['e1'] = 2, ['e3'] = 2 }, waypoints = WaypointGroup1, delay = 40 }
Nod2 = { units = { ['e3'] = 2, ['e4'] = 2 }, waypoints = WaypointGroup2, delay = 50 }
Nod3 = { units = { ['e1'] = 2, ['e3'] = 3, ['e4'] = 2 }, waypoints = WaypointGroup1, delay = 50 }
Nod4 = { units = { ['bggy'] = 2 }, waypoints = WaypointGroup2, delay = 50 }
Nod5 = { units = { ['e4'] = 2, ['ltnk'] = 1 }, waypoints = WaypointGroup1, delay = 50 }
Auto1 = { units = { ['e4'] = 2, ['arty'] = 1 }, waypoints = WaypointGroup1, delay = 50 }
Auto2 = { units = { ['e1'] = 2, ['e3'] = 2 }, waypoints = WaypointGroup2, delay = 50 }
Auto3 = { units = { ['e3'] = 2, ['e4'] = 2 }, waypoints = WaypointGroup1, delay = 50 }
Auto4 = { units = { ['e1'] = 3, ['e4'] = 1 }, waypoints = WaypointGroup1, delay = 50 }
Auto5 = { units = { ['ltnk'] = 1, ['bggy'] = 1 }, waypoints = WaypointGroup1, delay = 60 }
Auto6 = { units = { ['bggy'] = 1 }, waypoints = WaypointGroup2, delay = 50 }
Auto7 = { units = { ['ltnk'] = 1 }, waypoints = WaypointGroup2, delay = 50 }
Auto8 = { units = { ['e4'] = 2, ['bggy'] = 1 }, waypoints = WaypointGroup4, delay = 0 }
Patrols = {
grd1 = { units = { ['e3'] = 3 }, waypoints = Patrol1Waypoints, wait = 40, initialWaypointPlacement = { 1 } },
grd2 = { units = { ['e1'] = 2, ['e3'] = 2, ['e4'] = 2 }, waypoints = Patrol2Waypoints, wait = 20, initialWaypointPlacement = { 4, 10, 1 } }
}
AutoAttackWaves = { Nod1, Nod2, Nod3, Nod4, Nod5, Auto1, Auto2, Auto3, Auto4, Auto5, Auto6, Auto7, Auto8 }
StationaryGuards = { Actor174, Actor173, Actor182, Actor183, Actor184, Actor185, Actor186, Actor187 , Actor199, Actor200, Actor201, Actor202, Actor203, Actor204 }
StartStationaryGuards = function()
Utils.Do(StationaryGuards, function(unit)
if not unit.IsDead then
unit.Patrol( { unit.Location } , true, 20)
end
end)
end
SendWaves = function(counter, Waves)
if counter <= #Waves then
local team = Waves[counter]
for type, amount in pairs(team.units) do
MoveAndHunt(Utils.Take(amount, Nod.GetActorsByType(type)), team.waypoints)
end
Trigger.AfterDelay(DateTime.Seconds(team.delay), function() SendWaves(counter + 1, Waves) end)
end
end
StartPatrols = function()
for k, team in pairs(Patrols) do
local group = 1
for type, amount in pairs(team.units) do
for i = 1, amount do
Reinforcements.Reinforce(Nod, { type }, { team.waypoints[team.initialWaypointPlacement[group]] }, 0, function(unit)
ReplenishPatrolUnit(unit, handofnod, team.waypoints, team.wait)
end)
end
group = group + 1
end
end
Patrols = nil
end
ReplenishPatrolUnit = function(unit, building, waypoints, waitatwaypoint)
unit.Patrol(waypoints, true, waitatwaypoint)
Trigger.OnKilled(unit, function()
local queueUnit = { unit = { unit.Type }, atbuilding = { building }, waypoints = waypoints }
PatrolProductionQueue[#PatrolProductionQueue + 1] = queueUnit
end)
end
SendGDIReinforcements = function()
Media.PlaySpeechNotification(GDI, "Reinforce")
Reinforcements.ReinforceWithTransport(GDI, InsertionHelicopterType, GDIHeliReinfUnits, { GDIHeliEntryNorth.Location, GDIHeliLZ.Location }, { GDIHeliLZ.Location + CVec.New(20, 0) })
end
SendGDIReinforcementChinook = function()
Reinforcements.ReinforceWithTransport(GDI, 'tran', nil, { GDIHeliEntryNorth.Location, GDIHeliLZ.Location })
end
SpawnGunboat = function()
Media.PlaySpeechNotification(GDI, "Reinforce")
Actor.Create("boat", true, { Owner = GDI, Facing = 0, Location = CPos.New(62,37) })
end
WorldLoaded = function()
GDI = Player.GetPlayer("GDI")
Nod = Player.GetPlayer("Nod")
Camera.Position = DefaultCameraPosition.CenterPosition
DestroyBunkers = GDI.AddObjective("Destroy the Nod bunkers to allow Carter's\nconvoy to pass through safely.")
Trigger.OnAllKilled(NodBunkersNorth, function()
GDI.MarkCompletedObjective(DestroyBunkers)
Trigger.AfterDelay(DateTime.Seconds(1), SpawnGunboat)
end)
Trigger.OnAllKilled(NodBunkersSouth, function()
GDI.MarkCompletedObjective(DestroyBunkers)
SendGDIReinforcementChinook()
Trigger.AfterDelay(DateTime.Seconds(1), SpawnGunboat)
end)
Trigger.OnEnteredFootprint(BoatEscapeTrigger, function(a, id)
if a.Type == "boat" then
a.Destroy()
Media.DisplayMessage("Part of Carter's convoy passed through!")
Media.PlaySoundNotification(GDI, "AlertBleep")
end
end)
SecureArea = GDI.AddObjective("Destroy the Nod strike force.")
KillGDI = Nod.AddObjective("Kill all enemies!")
Trigger.AfterDelay(DateTime.Seconds(5), SendGDIReinforcements)
AirSupport = GDI.AddObjective("Destroy the SAM sites to receive air support.", "Secondary", false)
Trigger.OnAllKilled(SamSites, function()
GDI.MarkCompletedObjective(AirSupport)
Actor.Create("airstrike.proxy", true, { Owner = GDI })
end)
Actor.Create("flare", true, { Owner = GDI, Location = DefaultFlareLocation.Location })
StartStationaryGuards()
StartAI()
StartPatrols()
InitObjectives(GDI)
Trigger.AfterDelay(DateTime.Minutes(1), function() SendWaves(1, AutoAttackWaves) end)
Trigger.AfterDelay(DateTime.Minutes(3), function() ProduceInfantry(handofnod) end)
Trigger.AfterDelay(DateTime.Minutes(3), function() ProduceVehicle(nodairfield) end)
local initialArrivingUnits = { Actor175, Actor191, Actor192, Actor193, Actor194, Actor195, Actor196, Actor197, Actor198 }
Utils.Do(initialArrivingUnits, function(unit)
unit.Move(unit.Location + CVec.New(0, 1), 0)
end)
end
Tick = function()
if DateTime.GameTime > DateTime.Seconds(5) then
if GDI.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(KillGDI)
end
if Nod.HasNoRequiredUnits() then
GDI.MarkCompletedObjective(SecureArea)
end
end
end

BIN
mods/cnc/maps/gdi09/map.bin Normal file

Binary file not shown.

BIN
mods/cnc/maps/gdi09/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -0,0 +1,782 @@
MapFormat: 11
RequiresMod: cnc
Title: 09: Secure the Danube
Author: Westwood Studios
Tileset: WINTER
MapSize: 64,64
Bounds: 2,3,60,48
Visibility: MissionSelector
Categories: Campaign
LockPreview: True
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Faction: gdi
PlayerReference@Nod:
Name: Nod
Faction: nod
Color: FF1400
Allies: Nod
Enemies: GDI
Bot: campaign
PlayerReference@GDI:
Name: GDI
AllowBots: False
Playable: True
Required: True
LockFaction: True
Faction: gdi
LockColor: True
Color: F5D378
LockSpawn: True
LockTeam: True
Allies: GDI
Enemies: Nod
Actors:
Actor0: sbag
Location: 30,43
Owner: Neutral
Actor1: sbag
Location: 29,43
Owner: Neutral
Actor2: sbag
Location: 28,43
Owner: Neutral
Actor3: sbag
Location: 27,43
Owner: Neutral
Actor4: sbag
Location: 26,43
Owner: Neutral
Actor5: sbag
Location: 30,42
Owner: Neutral
Actor6: sbag
Location: 28,42
Owner: Neutral
Actor7: sbag
Location: 26,42
Owner: Neutral
Actor8: sbag
Location: 35,33
Owner: Neutral
Actor9: sbag
Location: 33,33
Owner: Neutral
Actor10: sbag
Location: 31,33
Owner: Neutral
Actor11: brik
Location: 21,33
Owner: Neutral
Actor12: brik
Location: 20,33
Owner: Neutral
Actor13: brik
Location: 19,33
Owner: Neutral
Actor14: brik
Location: 18,33
Owner: Neutral
Actor15: brik
Location: 17,33
Owner: Neutral
Actor16: brik
Location: 16,33
Owner: Neutral
Actor17: brik
Location: 15,33
Owner: Neutral
Actor18: brik
Location: 14,33
Owner: Neutral
Actor19: brik
Location: 13,33
Owner: Neutral
Actor20: brik
Location: 12,33
Owner: Neutral
Actor21: brik
Location: 11,33
Owner: Neutral
Actor22: brik
Location: 10,33
Owner: Neutral
Actor23: brik
Location: 9,33
Owner: Neutral
Actor24: brik
Location: 8,33
Owner: Neutral
Actor25: brik
Location: 7,33
Owner: Neutral
Actor26: brik
Location: 6,33
Owner: Neutral
Actor27: brik
Location: 5,33
Owner: Neutral
Actor28: brik
Location: 4,33
Owner: Neutral
Actor29: brik
Location: 3,33
Owner: Neutral
Actor30: brik
Location: 2,33
Owner: Neutral
Actor31: sbag
Location: 35,32
Owner: Neutral
Actor32: sbag
Location: 34,32
Owner: Neutral
Actor33: sbag
Location: 33,32
Owner: Neutral
Actor34: sbag
Location: 32,32
Owner: Neutral
Actor35: sbag
Location: 31,32
Owner: Neutral
Actor36: brik
Location: 21,32
Owner: Neutral
Actor37: brik
Location: 2,32
Owner: Neutral
Actor38: brik
Location: 21,31
Owner: Neutral
Actor39: brik
Location: 20,31
Owner: Neutral
Actor40: brik
Location: 2,31
Owner: Neutral
Actor41: brik
Location: 21,30
Owner: Neutral
Actor42: brik
Location: 20,30
Owner: Neutral
Actor43: brik
Location: 2,30
Owner: Neutral
Actor44: wood
Location: 31,29
Owner: Neutral
Actor45: brik
Location: 2,29
Owner: Neutral
Actor46: wood
Location: 31,28
Owner: Neutral
Actor47: brik
Location: 2,28
Owner: Neutral
Actor48: wood
Location: 42,27
Owner: Neutral
Actor49: wood
Location: 41,27
Owner: Neutral
Actor50: wood
Location: 40,27
Owner: Neutral
Actor51: wood
Location: 39,27
Owner: Neutral
Actor52: brik
Location: 2,27
Owner: Neutral
Actor53: wood
Location: 42,26
Owner: Neutral
Actor54: v16
Location: 41,26
Owner: Neutral
Actor55: v18
Location: 40,26
Owner: Neutral
Actor56: wood
Location: 39,26
Owner: Neutral
Actor57: brik
Location: 21,26
Owner: Neutral
Actor58: brik
Location: 20,26
Owner: Neutral
Actor59: brik
Location: 2,26
Owner: Neutral
Actor60: wood
Location: 42,25
Owner: Neutral
Actor61: v14
Location: 41,25
Owner: Neutral
Actor62: v15
Location: 40,25
Owner: Neutral
Actor63: wood
Location: 39,25
Owner: Neutral
Actor64: brik
Location: 21,25
Owner: Neutral
Actor65: brik
Location: 20,25
Owner: Neutral
Actor66: brik
Location: 2,25
Owner: Neutral
Actor67: wood
Location: 42,24
Owner: Neutral
Actor68: wood
Location: 39,24
Owner: Neutral
Actor69: brik
Location: 21,24
Owner: Neutral
Actor70: brik
Location: 14,24
Owner: Neutral
Actor71: brik
Location: 13,24
Owner: Neutral
Actor72: brik
Location: 8,24
Owner: Neutral
Actor73: brik
Location: 7,24
Owner: Neutral
Actor74: brik
Location: 2,24
Owner: Neutral
Actor75: brik
Location: 21,23
Owner: Neutral
Actor76: brik
Location: 20,23
Owner: Neutral
Actor77: brik
Location: 19,23
Owner: Neutral
Actor78: brik
Location: 18,23
Owner: Neutral
Actor79: brik
Location: 17,23
Owner: Neutral
Actor80: brik
Location: 16,23
Owner: Neutral
Actor81: brik
Location: 15,23
Owner: Neutral
Actor82: brik
Location: 14,23
Owner: Neutral
Actor83: brik
Location: 13,23
Owner: Neutral
Actor84: brik
Location: 8,23
Owner: Neutral
Actor85: brik
Location: 7,23
Owner: Neutral
Actor86: brik
Location: 6,23
Owner: Neutral
Actor87: brik
Location: 5,23
Owner: Neutral
Actor88: brik
Location: 4,23
Owner: Neutral
Actor89: brik
Location: 3,23
Owner: Neutral
Actor90: brik
Location: 2,23
Owner: Neutral
Actor91: t02
Location: 46,27
Owner: Neutral
Actor92: t02
Location: 14,19
Owner: Neutral
Actor93: t01
Location: 18,19
Owner: Neutral
Actor94: t14
Location: 44,27
Owner: Neutral
Actor95: tc01
Location: 43,24
Owner: Neutral
Actor96: tc02
Location: 42,27
Owner: Neutral
Actor97: tc04
Location: 45,24
Owner: Neutral
Actor98: split2
Location: 55,23
Owner: Neutral
Actor99: split2
Location: 60,28
Owner: Neutral
Actor100: tc04
Location: 34,26
Owner: Neutral
Actor101: tc02
Location: 37,25
Owner: Neutral
Actor102: t10
Location: 32,27
Owner: Neutral
Actor103: t01
Location: 34,25
Owner: Neutral
Actor104: t17
Location: 35,24
Owner: Neutral
Actor105: tc01
Location: 31,26
Owner: Neutral
Actor106: tc04
Location: 51,15
Owner: Neutral
Actor107: tc04
Location: 37,5
Owner: Neutral
Actor108: tc04
Location: 39,14
Owner: Neutral
Actor109: tc04
Location: 30,6
Owner: Neutral
Actor110: tc02
Location: 29,14
Owner: Neutral
Actor111: tc01
Location: 44,12
Owner: Neutral
Actor112: tc01
Location: 32,9
Owner: Neutral
Actor113: t03
Location: 34,17
Owner: Neutral
Actor114: t02
Location: 44,20
Owner: Neutral
Actor115: t01
Location: 42,19
Owner: Neutral
Actor116: t01
Location: 43,10
Owner: Neutral
Actor117: t01
Location: 35,15
Owner: Neutral
Actor118: t01
Location: 31,10
Owner: Neutral
Actor119: tc02
Location: 22,42
Owner: Neutral
Actor120: tc04
Location: 2,47
Owner: Neutral
Actor121: tc05
Location: 15,52
Owner: Neutral
Actor122: tc02
Location: 27,53
Owner: Neutral
Actor123: t01
Location: 30,50
Owner: Neutral
Actor124: t02
Location: 23,52
Owner: Neutral
Actor125: t03
Location: 33,45
Owner: Neutral
Actor126: tc01
Location: 22,22
Owner: Neutral
Actor127: t07
Location: 5,5
Owner: Neutral
Actor128: tc04
Location: 8,4
Owner: Neutral
Actor129: tc01
Location: 3,4
Owner: Neutral
Actor130: t07
Location: 38,23
Owner: Neutral
Actor131: t11
Location: 30,43
Owner: Neutral
Actor132: tc04
Location: 24,43
Owner: Neutral
Actor133: tc04
Location: 25,29
Owner: Neutral
Actor134: tc05
Location: 52,22
Owner: Neutral
gun1: gun
Location: 27,42
Owner: Nod
gun2: gun
Location: 29,42
Owner: Nod
gun3: gun
Location: 34,33
Owner: Nod
Facing: 159
gun4: gun
Location: 32,33
Owner: Nod
Facing: 159
Actor139: v04
Location: 45,26
Owner: Neutral
Actor140: v07
Location: 51,24
Owner: Neutral
Actor141: v06
Location: 40,24
Owner: Neutral
Actor142: v05
Location: 43,26
Owner: Neutral
Actor143: v03
Location: 35,25
Owner: Neutral
Actor144: v01
Location: 37,26
Owner: Neutral
sam1: sam
Location: 3,4
Owner: Nod
sam2: sam
Location: 19,24
Owner: Nod
sam3: sam
Location: 2,22
Owner: Nod
sam4: sam
Location: 19,32
Owner: Nod
nodpower1: nuke
Location: 5,24
Owner: Nod
nodpower2: nuke
Location: 3,24
Owner: Nod
gun5: gun
Location: 13,22
Owner: Nod
gun6: gun
Location: 8,22
Owner: Nod
NodCYard: fact
Location: 7,30
Owner: Nod
nodobelisk: obli
Location: 18,32
Owner: Nod
nodpower3: nuke
Location: 16,30
Owner: Nod
nodpower4: nuke
Location: 14,30
Owner: Nod
nodsilo1: silo
Location: 5,31
Owner: Nod
nodsilo2: silo
Location: 10,31
Owner: Nod
nodsilo3: silo
Location: 3,31
Owner: Nod
nodrefinery: proc
Location: 12,25
Owner: Nod
FreeActor: False
nodairfield: afld
Location: 3,27
Owner: Nod
handofnod: hand
Location: 15,25
Owner: Nod
nodsilo4: silo
Location: 17,24
Owner: Nod
nodpower5: nuke
Location: 12,30
Owner: Nod
gun7: gun
Location: 22,25
Owner: Nod
Facing: 191
gun8: gun
Location: 22,31
Owner: Nod
Facing: 191
Actor167: harv
Location: 20,28
Owner: Nod
Facing: 191
Actor168: ltnk
Location: 19,26
Owner: Nod
Facing: 127
Actor169: ltnk
Location: 18,26
Owner: Nod
Facing: 127
Actor170: ltnk
Location: 8,28
Owner: Nod
Facing: 127
Actor171: bggy
Location: 18,31
Owner: Nod
Actor172: bggy
Location: 19,31
Owner: Nod
Actor173: bggy
Location: 40,14
Owner: Nod
Actor174: arty
Location: 8,15
Owner: Nod
Facing: 31
Actor175: mcv
Location: 54,4
Owner: GDI
Facing: 127
Actor176: e3
Location: 19,25
Owner: Nod
SubCell: 1
Actor177: e3
Location: 17,26
Owner: Nod
SubCell: 3
Actor178: e3
Location: 8,25
Owner: Nod
SubCell: 1
Actor179: e3
Location: 10,29
Owner: Nod
SubCell: 0
Actor180: e1
Location: 5,30
Owner: Nod
SubCell: 0
Actor181: e1
Location: 8,26
Owner: Nod
SubCell: 4
Actor182: e4
Location: 7,14
Owner: Nod
Facing: 31
SubCell: 3
Actor183: e4
Location: 7,14
Owner: Nod
Facing: 31
SubCell: 2
Actor184: e4
Location: 25,6
Owner: Nod
Facing: 191
SubCell: 1
Actor185: e4
Location: 25,4
Owner: Nod
Facing: 191
SubCell: 3
Actor186: e3
Location: 33,9
Owner: Nod
SubCell: 0
Actor187: e3
Location: 31,6
Owner: Nod
SubCell: 3
Actor188: e3
Location: 17,27
Owner: Nod
SubCell: 2
Actor189: e3
Location: 17,26
Owner: Nod
SubCell: 2
Actor190: e3
Location: 17,27
Owner: Nod
SubCell: 0
Actor191: e2
Location: 53,6
Owner: GDI
Facing: 127
SubCell: 4
Actor192: e2
Location: 54,6
Owner: GDI
Facing: 127
SubCell: 3
Actor193: e2
Location: 53,7
Owner: GDI
Facing: 127
SubCell: 2
Actor194: e3
Location: 54,6
Owner: GDI
Facing: 127
SubCell: 4
Actor195: e3
Location: 55,6
Owner: GDI
Facing: 127
SubCell: 3
Actor196: e3
Location: 55,7
Owner: GDI
Facing: 127
SubCell: 1
Actor197: e3
Location: 54,7
Owner: GDI
Facing: 127
SubCell: 2
Actor198: e2
Location: 54,7
Owner: GDI
Facing: 127
SubCell: 1
Actor199: e3
Location: 25,34
Owner: Nod
Facing: 127
SubCell: 4
Actor200: e3
Location: 25,34
Owner: Nod
Facing: 127
SubCell: 3
Actor201: e3
Location: 24,34
Owner: Nod
Facing: 127
SubCell: 4
Actor202: e3
Location: 25,34
Owner: Nod
Facing: 127
SubCell: 1
Actor203: e3
Location: 24,34
Owner: Nod
Facing: 127
SubCell: 2
Actor204: e3
Location: 25,34
Owner: Nod
Facing: 127
SubCell: 2
GDIHeliEntryNorth: waypoint
Location: 57,6
Owner: Neutral
DefaultCameraPosition: waypoint
Location: 48,3
Owner: Neutral
DefaultFlareLocation: waypoint
Location: 33,31
Owner: Neutral
waypoint23: waypoint
Location: 53,37
Owner: Neutral
waypoint19: waypoint
Location: 52,42
Owner: Neutral
waypoint18: waypoint
Location: 52,19
Owner: Neutral
waypoint17: waypoint
Location: 9,30
Owner: Neutral
waypoint11: waypoint
Location: 23,24
Owner: Neutral
waypoint10: waypoint
Location: 23,32
Owner: Neutral
waypoint9: waypoint
Location: 43,5
Owner: Neutral
waypoint8: waypoint
Location: 60,18
Owner: Neutral
waypoint7: waypoint
Location: 52,6
Owner: Neutral
waypoint6: waypoint
Location: 9,16
Owner: Neutral
waypoint5: waypoint
Location: 4,10
Owner: Neutral
waypoint4: waypoint
Location: 12,5
Owner: Neutral
waypoint3: waypoint
Location: 28,5
Owner: Neutral
waypoint2: waypoint
Location: 30,20
Owner: Neutral
waypoint1: waypoint
Location: 23,28
Owner: Neutral
GDIHeliLZ: waypoint
Location: 41,44
Owner: Neutral
Rules: cnc|rules/campaign-maprules.yaml, cnc|rules/campaign-tooltips.yaml, cnc|rules/campaign-palettes.yaml, rules.yaml
Weapons: weapons.yaml

View File

@@ -0,0 +1,146 @@
World:
LuaScript:
Scripts: campaign-global.lua, gdi09.lua, gdi09-AI.lua
MusicPlaylist:
StartingMusic: march
VictoryMusic: gdi_win1
MissionData:
Briefing: Take out Nod turrets along shore so Gunboats can move in safely on the Nod base.\n\nThe Nod base must be destroyed.\n\nIf gunboats can get in, they should be able to destroy the base with no difficulty.\n\nKeep an eye out for the new weapon Nod is rumored to be working on.
BriefingVideo: gdi9.vqa
WinVideo: gunboat.vqa
LossVideo: gameover.vqa
ATWR:
Buildable:
Prerequisites: ~disabled
NUK2:
Buildable:
Prerequisites: ~disabled
HPAD:
Buildable:
Prerequisites: ~disabled
BRIK:
Buildable:
Prerequisites: ~disabled
EYE:
Buildable:
Prerequisites: ~disabled
GUN:
Buildable:
Prerequisites: ~disabled
OBLI:
Buildable:
Prerequisites: ~disabled
TMPL:
Buildable:
Prerequisites: ~disabled
HTNK:
Buildable:
Prerequisites: ~disabled
TRAN:
Buildable:
Prerequisites: ~disabled
ORCA:
Buildable:
Prerequisites: ~disabled
RMBO:
Buildable:
Prerequisites: ~disabled
MSAM:
Buildable:
Prerequisites: ~disabled
MCV:
Buildable:
Prerequisites: ~disabled
BOAT:
Buildable:
Prerequisites: ~disabled
FTNK:
Buildable:
Prerequisites: ~disabled
STNK:
Buildable:
Prerequisites: ~disabled
HELI:
Buildable:
Prerequisites: ~disabled
LTNK:
Buildable:
Prerequisites: ~afld
ARTY:
Buildable:
Prerequisites: ~afld
E4:
Buildable:
Prerequisites: barracks
E5:
Buildable:
Prerequisites: ~disabled
MLRS:
Buildable:
Prerequisites: ~disabled
SAM:
Buildable:
Prerequisites: ~disabled
^Bridge:
DamageMultiplier@INVULNERABLE:
Modifier: 0
BRIDGEHUT:
-Targetable:
TRAN.Extraction:
Inherits: TRAN
RevealsShroud:
Range: 0c0
RejectsOrders:
-Selectable:
RenderSprites:
Image: tran
Interactable:
TRAN.Insertion:
Inherits: TRAN.Extraction
Cargo:
MaxWeight: 0
HQ:
Tooltip:
-AirstrikePower:
Buildable:
Description: Provides an overview of the battlefield.\n Requires power to operate.
airstrike.proxy:
AirstrikePower:
SquadSize: 2
SquadOffset: -1536, 1024, 0
BOAT:
AutoTarget:
InitialStance: AttackAnything
RejectsOrders:
Except: Attack

View File

@@ -0,0 +1,13 @@
BoatMissile:
Warhead@Bonus: SpreadDamage
Spread: 128
Damage: 2000
Versus:
None: 50
Wood: 100
Light: 100
Heavy: 100
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
TurretGun:
ReloadDelay: 40

View File

@@ -10,6 +10,7 @@ GDI Campaign:
gdi06 gdi06
gdi07 gdi07
gdi08a gdi08a
gdi09
Nod Campaign: Nod Campaign:
nod01 nod01