fixed mission 2a and cleaned the code

changed according style code and added production trigger

corrected tech tree

removed comments and corrected same style issues

added gdi tech tree and changed produce to build

changed image format and replace spaces with tabs

deleted unnecessary tabs, added tooltips and corrected name

added lua file from nod 2a

changed according style code and added production trigger

deleted unnecessary tabs, added tooltips and corrected name

fixed image size

changed for loops to Utils.Do, removed facing and health from yaml,
changed movement function and corrected mission description

restored facing values unequal zero und fixed image position

Polish things a bit

Have player's units move into the map at the start

Polish some things
This commit is contained in:
Alexander Boll
2015-01-27 16:50:11 +01:00
parent 6714b498af
commit 9a09421800
6 changed files with 626 additions and 0 deletions

View File

@@ -33,6 +33,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tiberian Dawn Lua scripts",
mods\cnc\maps\gdi04c\gdi04c.lua = mods\cnc\maps\gdi04c\gdi04c.lua
mods\cnc\maps\gdi05a\gdi05a.lua = mods\cnc\maps\gdi05a\gdi05a.lua
mods\cnc\maps\nod01\nod01.lua = mods\cnc\maps\nod01\nod01.lua
mods\cnc\maps\nod02a\nod02a.lua = mods\cnc\maps\nod02a\nod02a.lua
mods\cnc\maps\nod03a\nod03a.lua = mods\cnc\maps\nod03a\nod03a.lua
mods\cnc\maps\nod03b\nod03b.lua = mods\cnc\maps\nod03b\nod03b.lua
mods\cnc\maps\shellmap\shellmap.lua = mods\cnc\maps\shellmap\shellmap.lua

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -0,0 +1,360 @@
MapFormat: 7
RequiresMod: cnc
Title: Invasion of Egypt (a)
Description: GDI has kept a stranglehold on Egypt for many years. Set up a forward attack base in your area. To do this you must select your Mobile Construction Vehicle (MCV) and right click on it. From here you can begin to build a base. This area contains plenty of Tiberium, so establishing the base should be easy.
Author: Westwood Studios
Tileset: DESERT
MapSize: 64,64
Bounds: 27,34,36,26
Visibility: MissionSelector
Type: Campaign
Videos:
Briefing: nod2.vqa
GameLost: deskill.vqa
GameWon: airstrk.vqa
GameStart: seige.vqa
Options:
Crates: False
Creeps: False
Fog: True
Shroud: True
AllyBuildRadius: False
FragileAlliances: False
StartingCash: 4000
ConfigurableStartingUnits: False
ShortGame: False
Players:
PlayerReference@GDI:
Name: GDI
Race: gdi
ColorRamp: 31,222,183
Enemies: Nod
PlayerReference@Nod:
Name: Nod
Playable: True
AllowBots: False
Required: True
LockRace: True
Race: nod
LockColor: True
ColorRamp: 3,255,127
LockSpawn: True
LockTeam: True
Enemies: GDI
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Race: gdi
Actors:
Actor0: t08
Location: 30,52
Owner: Neutral
Actor1: t18
Location: 34,52
Owner: Neutral
Actor2: t08
Location: 57,47
Owner: Neutral
Actor3: t08
Location: 38,59
Owner: Neutral
Actor4: silo
Location: 33,40
Owner: GDI
Actor9: silo
Location: 32,42
Owner: GDI
Actor10: jeep
Location: 30,46
Owner: GDI
Facing: 128
Actor11: jeep
Location: 31,35
Owner: GDI
Facing: 64
Actor17: e1
Location: 34,56
Owner: GDI
SubCell: 3
Actor18: e1
Location: 43,35
Owner: GDI
SubCell: 3
Actor19: e1
Location: 43,36
Owner: GDI
SubCell: 3
Actor31: e1
Location: 47,53
Owner: GDI
SubCell: 4
Actor32: e1
Location: 49,54
Owner: GDI
Facing: 224
SubCell: 1
Actor35: e1
Location: 34,57
Owner: GDI
Facing: 64
SubCell: 1
waypoint27: waypoint
Location: 27,51
Owner: Neutral
waypoint26: waypoint
Location: 49,35
Owner: Neutral
waypoint10: waypoint
Location: 30,44
Owner: Neutral
waypoint9: waypoint
Location: 55,40
Owner: Neutral
waypoint8: waypoint
Location: 48,41
Owner: Neutral
waypoint7: waypoint
Location: 60,58
Owner: Neutral
waypoint6: waypoint
Location: 61,47
Owner: Neutral
waypoint5: waypoint
Location: 48,55
Owner: Neutral
waypoint4: waypoint
Location: 41,51
Owner: Neutral
waypoint3: waypoint
Location: 28,36
Owner: Neutral
waypoint2: waypoint
Location: 28,51
Owner: Neutral
waypoint1: waypoint
Location: 40,43
Owner: Neutral
waypoint0: waypoint
Location: 40,35
Owner: Neutral
Refinery: proc
Location: 30,38
Owner: GDI
Barracks: pyle
Location: 34,43
Owner: GDI
Powerplant: nuke
Location: 35,40
Owner: GDI
Yard: fact
Location: 33,37
Owner: GDI
Guard1: e1
Location: 42,39
Owner: GDI
Facing: 64
SubCell: 0
Guard2: e1
Location: 38,38
Owner: GDI
Facing: 64
SubCell: 2
Guard3: e1
Location: 35,49
Owner: GDI
Facing: 96
SubCell: 0
Guard4: e1
Location: 34,48
Owner: GDI
Facing: 96
SubCell: 3
Guard5: e1
Location: 39,40
Owner: GDI
Facing: 64
SubCell: 1
Guard6: e1
Location: 40,56
Owner: GDI
Facing: 96
SubCell: 4
Guard7: e1
Location: 38,54
Owner: GDI
Facing: 32
SubCell: 3
McvEntry: waypoint
Location: 62,43
Owner: Neutral
McvRally: waypoint
Location: 57,41
Owner: Neutral
UnitsEntry: waypoint
Location: 62,38
Owner: Neutral
UnitsRally: waypoint
Location: 56,38
Owner: Neutral
Smudges:
Rules:
Player:
-ConquestVictoryConditions:
MissionObjectives:
EarlyGameOver: true
World:
-CrateSpawner:
-SpawnMPUnits:
-MPStartLocations:
ObjectivesPanel:
PanelName: MISSION_OBJECTIVES
LuaScript:
Scripts: nod02a.lua
^Vehicle:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Plane:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Ship:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Building:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Wall:
Tooltip:
ShowOwnerRow: false
^Husk:
Tooltip:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
NUK2:
Buildable:
Prerequisites: ~disabled
GUN:
Buildable:
Prerequisites: ~disabled
CYCL:
Buildable:
Prerequisites: ~disabled
FIX:
Buildable:
Prerequisites: ~disabled
HPAD:
Buildable:
Prerequisites: ~disabled
OBLI:
Buildable:
Prerequisites: ~disabled
BRIK:
Buildable:
Prerequisites: ~disabled
TMPL:
Buildable:
Prerequisites: ~disabled
FTNK:
Buildable:
Prerequisites: ~disabled
STNK:
Buildable:
Prerequisites: ~disabled
ARTY:
Buildable:
Prerequisites: ~disabled
E5:
Buildable:
Prerequisites: ~disabled
RMBO:
Buildable:
Prerequisites: ~disabled
MLRS:
Buildable:
Prerequisites: ~disabled
MCV:
Buildable:
Prerequisites: ~disabled
LST:
Buildable:
Prerequisites: ~disabled
C17:
Buildable:
Prerequisites: ~disabled
SAM:
Buildable:
Prerequisites: ~disabled
HQ:
Buildable:
Prerequisites: ~disabled
AFLD:
Buildable:
Prerequisites: ~disabled
E4:
Buildable:
Prerequisites: ~disabled
E3:
Buildable:
Prerequisites: ~disabled
E2:
Buildable:
Prerequisites: ~disabled
SBAG:
Buildable:
Prerequisites: ~disabled
GTWR:
Buildable:
Prerequisites: ~disabled
WEAP:
Buildable:
Prerequisites: ~disabled
EYE:
Buildable:
Prerequisites: ~disabled
ATWR:
Buildable:
Prerequisites: ~disabled
Sequences:
VoxelSequences:
Weapons:
Voices:
Notifications:
Translations:

View File

@@ -0,0 +1,264 @@
NodUnits = { "bggy", "e1", "e1", "e1", "e1", "e1", "bggy", "e1", "e1", "e1", "bggy" }
NodBaseBuildings = { "hand", "fact", "nuke" }
DfndActorTriggerActivator = { Refinery, Barracks, Powerplant, Yard }
Atk3ActorTriggerActivator = { Guard1, Guard2, Guard3, Guard4, Guard5, Guard6, Guard7 }
Atk1CellTriggerActivator = { CPos.New(45,37), CPos.New(44,37), CPos.New(45,36), CPos.New(44,36), CPos.New(45,35), CPos.New(44,35), CPos.New(45,34), CPos.New(44,34) }
Atk4CellTriggerActivator = { CPos.New(50,47), CPos.New(49,47), CPos.New(48,47), CPos.New(47,47), CPos.New(46,47), CPos.New(45,47), CPos.New(44,47), CPos.New(43,47), CPos.New(42,47), CPos.New(41,47), CPos.New(40,47), CPos.New(39,47), CPos.New(38,47), CPos.New(37,47), CPos.New(50,46), CPos.New(49,46), CPos.New(48,46), CPos.New(47,46), CPos.New(46,46), CPos.New(45,46), CPos.New(44,46), CPos.New(43,46), CPos.New(42,46), CPos.New(41,46), CPos.New(40,46), CPos.New(39,46), CPos.New(38,46) }
Atk2TriggerFunctionTime = DateTime.Seconds(40)
Atk5TriggerFunctionTime = DateTime.Minutes(1) + DateTime.Seconds(15)
Atk6TriggerFunctionTime = DateTime.Minutes(1) + DateTime.Seconds(20)
Atk7TriggerFunctionTime = DateTime.Seconds(50)
Pat1TriggerFunctionTime = DateTime.Seconds(30)
Atk1Waypoints = { waypoint2, waypoint4, waypoint5, waypoint6 }
Atk2Waypoints = { waypoint2, waypoint5, waypoint7, waypoint6 }
Atk3Waypoints = { waypoint2, waypoint4, waypoint5, waypoint9 }
Atk4Waypoints = { waypoint0, waypoint8, waypoint9 }
Pat1Waypoints = { waypoint0, waypoint1, waypoint2, waypoint3 }
UnitToRebuild = 'e1'
GDIStartUnits = 0
getActors = function(owner, units)
local maxUnits = 0
local actors = { }
for type, count in pairs(units) do
local globalActors = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(actor)
return actor.Owner == owner and actor.Type == type and not actor.IsDead
end)
if #globalActors < count then
maxUnits = #globalActors
else
maxUnits = count
end
for i = 1, maxUnits, 1 do
actors[#actors + 1] = globalActors[i]
end
end
return actors
end
InsertNodUnits = function()
Reinforcements.Reinforce(Nod, NodUnits, { UnitsEntry.Location, UnitsRally.Location }, 15)
Reinforcements.Reinforce(Nod, { "mcv" }, { McvEntry.Location, McvRally.Location })
end
OnAnyDamaged = function(actors, func)
Utils.Do(actors, function(actor)
Trigger.OnDamaged(actor, func)
end)
end
CheckForBase = function(player, buildings)
local checked = { }
local baseBuildings = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(actor)
if actor.Owner ~= Nod or Utils.Any(checked, function(bldng) return bldng.Type == actor.Type end) then
return false
end
local found = false
for i = 1, #buildings, 1 do
if actor.Type == buildings[i] then
found = true
checked[#checked + 1] = actor
end
end
return found
end)
return #baseBuildings >= 3
end
DfndTriggerFunction = function()
local list = GDI.GetGroundAttackers()
Utils.Do(list, function(unit)
unit.Hunt()
end)
end
Atk2TriggerFunction = function()
local MyActors = getActors(GDI, { ['e1'] = 3 })
Utils.Do(MyActors, function(actor)
Atk2Movement(actor)
end)
end
Atk3TriggerFunction = function()
if not Atk3TriggerSwitch then
Atk3TriggerSwitch = true
MyActors = getActors(GDI, { ['e1'] = 4 })
Utils.Do(MyActors, function(actor)
Atk3Movement(actor)
end)
end
end
Atk5TriggerFunction = function()
local MyActors = getActors(GDI, { ['e1'] = 3 })
Utils.Do(MyActors, function(actor)
Atk2Movement(actor)
end)
end
Atk6TriggerFunction = function()
local MyActors = getActors(GDI, { ['e1'] = 4 })
Utils.Do(MyActors, function(actor)
Atk3Movement(actor)
end)
end
Atk7TriggerFunction = function()
local MyActors = getActors(GDI, { ['e1'] = 3 })
Utils.Do(MyActors, function(actor)
Atk4Movement(actor)
end)
end
Pat1TriggerFunction = function()
local MyActors = getActors(GDI, { ['e1'] = 3 })
Utils.Do(MyActors, function(actor)
Pat1Movement(actor)
end)
end
Atk1Movement = function(unit)
Utils.Do(Atk1Waypoints, function(waypoint)
unit.AttackMove(waypoint.Location)
end)
end
Atk2Movement = function(unit)
Utils.Do(Atk2Waypoints, function(waypoint)
unit.AttackMove(waypoint.Location)
end)
end
Atk3Movement = function(unit)
Utils.Do(Atk3Waypoints, function(waypoint)
unit.AttackMove(waypoint.Location)
end)
end
Atk4Movement = function(unit)
Utils.Do(Atk4Waypoints, function(waypoint)
unit.AttackMove(waypoint.Location)
end)
end
Pat1Movement = function(unit)
Utils.Do(Pat1Waypoints, function(waypoint)
unit.Move(waypoint.Location)
end)
end
WorldLoaded = function()
GDI = Player.GetPlayer("GDI")
Nod = Player.GetPlayer("Nod")
Trigger.OnObjectiveAdded(Nod, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end)
Trigger.OnObjectiveCompleted(Nod, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(Nod, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Trigger.OnPlayerWon(Nod, function()
Media.PlaySpeechNotification(Nod, "Win")
end)
Trigger.OnPlayerLost(Nod, function()
Media.PlaySpeechNotification(Nod, "Lose")
end)
NodObjective1 = Nod.AddPrimaryObjective("Build a base")
NodObjective2 = Nod.AddPrimaryObjective("Destroy the GDI base")
GDIObjective = GDI.AddPrimaryObjective("Kill all enemies!")
OnAnyDamaged(Atk3ActorTriggerActivator, Atk3TriggerFunction)
Trigger.OnAllRemovedFromWorld(DfndActorTriggerActivator, DfndTriggerFunction)
Trigger.AfterDelay(Atk2TriggerFunctionTime, Atk2TriggerFunction)
Trigger.AfterDelay(Atk5TriggerFunctionTime, Atk5TriggerFunction)
Trigger.AfterDelay(Atk6TriggerFunctionTime, Atk6TriggerFunction)
Trigger.AfterDelay(Atk7TriggerFunctionTime, Atk7TriggerFunction)
Trigger.AfterDelay(Pat1TriggerFunctionTime, Pat1TriggerFunction)
Trigger.OnEnteredFootprint(Atk1CellTriggerActivator, function(a, id)
if a.Owner == Nod then
MyActors = getActors(GDI, { ['e1'] = 5 })
Utils.Do(MyActors, function(actor)
Atk1Movement(actor)
end)
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.OnEnteredFootprint(Atk4CellTriggerActivator, function(a, id)
if a.Owner == Nod then
MyActors = getActors(GDI, { ['e1'] = 3 } )
Utils.Do(MyActors, function(actor)
Atk2Movement(actor)
end)
Trigger.RemoveFootprintTrigger(id)
end
end)
Trigger.AfterDelay(0, getStartUnits)
InsertNodUnits()
end
Tick = function()
if GDI.HasNoRequiredUnits() then
Nod.MarkCompletedObjective(NodObjective2)
end
if Nod.HasNoRequiredUnits() then
if DateTime.GameTime > 2 then
GDI.MarkCompletedObjective(GDIObjective)
end
end
if DateTime.GameTime % DateTime.Seconds(1) == 0 and not Nod.IsObjectiveCompleted(NodObjective1) and CheckForBase(Nod, NodBaseBuildings) then
Nod.MarkCompletedObjective(NodObjective1)
end
if DateTime.GameTime % DateTime.Seconds(3) == 0 and Barracks.IsInWorld then
checkProduction(GDI)
end
end
checkProduction = function(player)
local Units = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(actor)
return actor.Owner == player and actor.Type == UnitToRebuild
end)
if #Units < GDIStartUnits then
local unitsToProduce = GDIStartUnits - #Units
if Barracks.IsInWorld and unitsToProduce > 0 then
local UnitsType = { }
for i = 1, unitsToProduce, 1 do
UnitsType[i] = UnitToRebuild
end
Barracks.Build(UnitsType)
end
end
end
getStartUnits = function()
local Units = Map.ActorsInBox(Map.TopLeft, Map.BottomRight, function(actor)
return actor.Owner == GDI
end)
Utils.Do(Units, function(unit)
if unit.Type == UnitToRebuild then
GDIStartUnits = GDIStartUnits + 1
end
end)
end

View File

@@ -9,5 +9,6 @@ GDI Campaign:
Nod Campaign:
./mods/cnc/maps/nod01
./mods/cnc/maps/nod02a
./mods/cnc/maps/nod03a
./mods/cnc/maps/nod03b