Red Alert: Tiberium Origins MOD

Information and discussion for custom maps and mods.
Post Reply
kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Ok - I have officially put the mod into a BETA stage :D YAY!

Now I need help with some gruntwork - if anyone is available, and wats to contribute to this mod, I need to have all .SHP and .TEM files in C&C's WINTER.MIX converted from the winter.pal to Red Alert's TEMPERAT.PAL or SNOW.PAL (whichever works best)...

- either this or an ideea for a clever workaround that forces the openRA engine to render all ACTORS in RA Temperat.pal and the tileset in C&C's winter.pal...

I want to introduce this tileset into my mod - but It needs load a separate (winter.pal) palette that corrupts the unit graphics :(

- you will be mentioned in the mod's credits of course :D -

I can do it myself like I did with most other units, but I don't have the time right now, as I am busy scripting sigleplayer missions - got the first 3 nod missions down, and three more in the pipeline (want to have 15 in total for each faction)
Last edited by kaneCVR on Sun Jan 26, 2014 10:37 pm, edited 1 time in total.

User avatar
Sleipnir
Posts: 820
Joined: Wed Apr 10, 2002 11:52 pm
Contact:

Post by Sleipnir »

OpenRA already uses different palettes for terrain and actors. No workarounds are needed :)

Take a look at the RA desert tileset (which is a direct copy from C&C, like you want to do) for an example on how to set this up.

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

...that fixed the graphics corruption bug, but now I get:

Code: Select all

Exception of type `System.InvalidOperationException`: Unit `overlay` does not have a sequence `build-valid-winter`
when I try to place a building... :(

I could not find a reference to any unit named "overlay" in any .yaml file....

User avatar
Sleipnir
Posts: 820
Joined: Wed Apr 10, 2002 11:52 pm
Contact:

Post by Sleipnir »

Take a look near the bottom of sequences/misc.yaml. You'll probably want to duplicate the -temperat definitions.

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Yuuuuuup - that did it. Thanks again!

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Now I seem to be having an issue with the walls... all wall types get corrupted on the WINTER tileset...

How can I fix this? If I remove Palette: terrain from Defaults.yaml, I get corruption on the DESERT and TEMPERAT tilesets....

Can I use Palette: player for all walls?

Also, been getting this random crash recently;

Code: Select all

Red Alert: Tiberian Origins Mod at Version Beta 0.1
Operating System: Windows (Microsoft Windows NT 6.1.7600.0)
Runtime Version: .NET CLR 2.0.50727.4984
Exception of type `System.NullReferenceException`: Object reference not set to an instance of an object.
   at OpenRA.Effects.DelayedAction.<Tick>m__17F&#40;World w&#41;
   at OpenRA.World.Tick&#40;&#41;
   at OpenRA.Game.TickInner&#40;OrderManager orderManager&#41;
   at OpenRA.Game.Tick&#40;OrderManager orderManager&#41;
   at OpenRA.Game.Run&#40;&#41;
   at OpenRA.Program.Run&#40;String&#91;&#93; args&#41;
   at OpenRA.Program.Main&#40;String&#91;&#93; args&#41;

Matt
Posts: 1039
Joined: Tue May 01, 2012 12:21 pm
Location: Germany

Post by Matt »

Have a look at https://github.com/OpenRA/OpenRA/blob/b ... esert.yaml where I have both Palette vs. PlayerPalette defined to solve the problem that TD walls/terrain and RA player actors have incompatible color ranges.

User avatar
Sleipnir
Posts: 820
Joined: Wed Apr 10, 2002 11:52 pm
Contact:

Post by Sleipnir »

DelayedAction is used in a few places, and unfortunately that exception doesn't tell us which one. Would you be able to narrow that crash down to one of the following cases?
  • Use C4 on an actor.
  • Demolish or repair bridges.
  • Kill a building with the DeadBuildingState trait.
  • Fire a weapon with a warhead that defines a delay.
  • Construct a building that grants new construction options.
  • Use a lua script that calls RunAfterDelay.
  • Launch a GPS satellite.

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Sleipnir wrote: DelayedAction is used in a few places, and unfortunately that exception doesn't tell us which one. Would you be able to narrow that crash down to one of the following cases?
  • Use C4 on an actor.
  • Demolish or repair bridges.
  • Kill a building with the DeadBuildingState trait.
  • Fire a weapon with a warhead that defines a delay.
  • Construct a building that grants new construction options.
  • Use a lua script that calls RunAfterDelay.
  • Launch a GPS satellite.
I'm pretty sure it's - Use a lua script that calls RunAfterDelay. Here is my mission code:

Code: Select all

-- Setup reinforcement wave unit tipes --

FirstAttackWave = &#123; "2tnk", "2tnk", "1tnk", "1tnk", "arty", "jeep", "jeep" &#125;
SecondThirdAttackWave = &#123; "2tnk", "2tnk", "2tnk", "arty", "arty", "1tnk", "1tnk" &#125;
FourthFifthAttackWave = &#123; "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "arty", "arty" &#125;

MissionAccomplished = function&#40;&#41;
	Mission.MissionOver&#40;&#123; player &#125;, nil, false&#41;
	--Media.PlayMovieFullscreen&#40;"snowbomb.vqa"&#41;
end

MissionFailed = function&#40;&#41;
	Mission.MissionOver&#40;nil, &#123; player &#125;, false&#41;
	--Media.PlayMovieFullscreen&#40;"bmap.vqa"&#41;
end

-- Configuring attack wave functions

SendFirstAttackWave = function&#40;&#41;
        for FirstAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;FirstAttackWave&#91;FirstAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendSecondAttackWave = function&#40;&#41;
        for SecondAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;SecondThirdAttackWave&#91;SecondAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendThirdAttackWave = function&#40;&#41;
        for ThirdAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;SecondThirdAttackWave&#91;ThirdAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendFourthAttackWave = function&#40;&#41;
        for FourthAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;FourthFifthAttackWave&#91;FourthAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendFiftAttackWave = function&#40;&#41;
        for FifthAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;FourthFifthAttackWave&#91;FifthAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

-- Creates a patrol function with two waypoints and one unit.

LoopPatrol = function&#40;actor, waypoints&#41; 
   Utils.Do&#40;waypoints, function&#40;waypoint&#41; 
      Actor.AttackMove&#40;actor, waypoint.Location&#41; 
   end&#41; 
   Actor.CallFunc&#40;actor, function&#40;&#41; LoopPatrol&#40;actor, waypoints&#41; end&#41; 
end

tick = 0 -- Used for Briefing display code.

WorldLoaded = function&#40;&#41; -- used to call previously created functions
	player = OpenRA.GetPlayer&#40;"Nod"&#41;
	enemy = OpenRA.GetPlayer&#40;"Allies"&#41;
	LoopPatrol&#40;PatrolN1, &#123; PatrolN1A, PatrolN1B &#125;&#41;
	LoopPatrol&#40;PatrolN2, &#123; PatrolN1B, PatrolN1A &#125;&#41;
	LoopPatrol&#40;PatrolL1, &#123; PatrolL1B, PatrolL1A &#125;&#41;
	LoopPatrol&#40;PatrolN5, &#123; PatrolN2B, PatrolN2A &#125;&#41;
	LoopPatrol&#40;PatrolN4, &#123; PatrolN2B, PatrolN2A &#125;&#41;
	LoopPatrol&#40;PatrolN3, &#123; PatrolN2A, PatrolN2B &#125;&#41;
	LoopPatrol&#40;PatrolL2, &#123; PatrolL2B, PatrolL2A &#125;&#41;
	LoopPatrol&#40;PatrolL4, &#123; PatrolL2B, PatrolL2A &#125;&#41;
	LoopPatrol&#40;PatrolL3, &#123; PatrolL2A, PatrolL2B &#125;&#41;
	LoopPatrol&#40;PatrolL5, &#123; PatrolL2A, PatrolL2B &#125;&#41;
	LoopPatrol&#40;PatrolL6, &#123; PatrolL3A, PatrolL3B &#125;&#41;
	LoopPatrol&#40;Truck1, &#123; TibRouteA, TibRouteB &#125;&#41;
	LoopPatrol&#40;Truck2, &#123; TibRouteA, TibRouteB &#125;&#41;
	OpenRA.RunAfterDelay&#40;25 * 240, SendFirstAttackWave&#41; 
    OpenRA.RunAfterDelay&#40;25 * 480, SendSecondAttackWave&#41;
    OpenRA.RunAfterDelay&#40;25 * 600, SendThirdAttackWave&#41;
    OpenRA.RunAfterDelay&#40;25 * 780, SendFourthAttackWave&#41;
    OpenRA.RunAfterDelay&#40;25 * 820, SendFifthAttackWave&#41;
	print&#40;" Briefing&#58; The Tiber River Meteor sample you acquired contains an element foreign to our solar system. Our scientists speculate that has multiple uses - a power source, a perfect semiconductor, it can reinforce alloys... "&#41;
	print&#40;" Capture the Allied base near your LZ then secure the meteor crash site for the Brotherhood and push the allies out of the region. "&#41;
end

-- Briefing and win/lose check Code

Tick = function&#40;&#41;
        if Mission.RequiredUnitsAreDestroyed&#40;player&#41; then
                MissionFailed&#40;&#41;
        end
		tick = tick + 1
    if tick % 3000 == 0 then
	print&#40;" Secure the meteor crash site. Eliminate all Allied units and structures. "&#41;
    	end
end

User avatar
Sleipnir
Posts: 820
Joined: Wed Apr 10, 2002 11:52 pm
Contact:

Post by Sleipnir »

You have a typo in your script: "SendFiftAttackWave". I have filed #4512 about having OpenRA catch this error in the future.

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Cmd. Matt wrote: Have a look at https://github.com/OpenRA/OpenRA/blob/b ... esert.yaml where I have both Palette vs. PlayerPalette defined to solve the problem that TD walls/terrain and RA player actors have incompatible color ranges.
That's what I did, but the walls still use Winter.pal. Here is part of my winter.yaml file:

Code: Select all

General&#58;
	Name&#58; Winter
	Id&#58; WINTER
	Extensions&#58; .win, .shp, .tem
	Palette&#58; winter.pal
	PlayerPalette&#58; temperat.pal
	WaterPaletteRotationBase&#58; 32
	EditorTemplateOrder&#58; Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge
Maybe if I use Palette: PlayerPalette for ~Walls in the Defaults.yaml file?
Sleipnir wrote: You have a typo in your script: "SendFiftAttackWave". I have filed #4512 about having OpenRA catch this error in the future.
Thanks man, I missed that typo :z Will give it another test run...

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Ok - found something new - this is either a bug, or my coding SUCKS... It looks to me as if the game engine does not recognize naval units...

When I try to call for naval reinforcements, the game crashes with the following error:

Code: Select all

Red Alert&#58; Tiberian Origins Mod at Version Beta 0.1
Operating System&#58; Windows &#40;Microsoft Windows NT 6.1.7600.0&#41;
Runtime Version&#58; .NET CLR 2.0.50727.4984
Exception of type `NLua.Exceptions.LuaScriptException`&#58; &#91;string "mission.lua"&#93;&#58;83&#58; No actor name specified
   at NLua.Lua.ThrowExceptionFromError&#40;Int32 oldTop&#41;
   at NLua.Lua.CallFunction&#40;Object function, Object&#91;&#93; args, Type&#91;&#93; returnTypes&#41;
   at NLua.LuaFunction.Call&#40;Object&#91;&#93; args, Type&#91;&#93; returnTypes&#41;
   at NLua.Method.LuaDelegate.CallFunction&#40;Object&#91;&#93; args, Object&#91;&#93; inArgs, Int32&#91;&#93; outArgs&#41;
   at LuaGeneratedClass1.CallFunction&#40;&#41;
   at OpenRA.Effects.DelayedAction.<Tick>m__17F&#40;World w&#41;
   at OpenRA.World.Tick&#40;&#41;
   at OpenRA.Game.TickInner&#40;OrderManager orderManager&#41;
   at OpenRA.Game.Tick&#40;OrderManager orderManager&#41;
   at OpenRA.Game.Run&#40;&#41;
   at OpenRA.Program.Run&#40;String&#91;&#93; args&#41;
   at OpenRA.Program.Main&#40;String&#91;&#93; args&#41;
Here is my mission.lua file - maybe I misspelled something again...

Code: Select all

-- Setup reinforcement wave unit tipes --

FirstAttackWave = &#123; "2tnk", "2tnk", "1tnk", "1tnk", "arty", "jeep", "jeep" &#125;
SecondThirdAttackWave = &#123; "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "arty", "arty" &#125;
FourthFifthAttackWave = &#123; "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "arty", "arty" &#125;
SixthAttackWave = &#123; "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "mlrs", "mlrs" &#125;
SeventhAttackWave = &#123; "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "mlrs", "mlrs", "mlrs" &#125;
EigthAttackWave = &#123; "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "mlrs", "mlrs", "mlrs" &#125;
FirstNavalAttackWave = &#123; "pt", "pt", "dd", "dd" &#125;
SecondNavalAttackWave = &#123; "pt", "pt", "dd", "ca" &#125;
ThirdNavalAttackWave = &#123; "pt", "dd", "dd", "ca" &#125;

MissionAccomplished = function&#40;&#41;
	Mission.MissionOver&#40;&#123; player &#125;, nil, false&#41;
	--Media.PlayMovieFullscreen&#40;"snowbomb.vqa"&#41;
end

MissionFailed = function&#40;&#41;
	Mission.MissionOver&#40;nil, &#123; player &#125;, false&#41;
	--Media.PlayMovieFullscreen&#40;"bmap.vqa"&#41;
end

-- Configuring attack wave functions

SendFirstAttackWave = function&#40;&#41;
        for FirstAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;FirstAttackWave&#91;FirstAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendSecondAttackWave = function&#40;&#41;
        for SecondAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;SecondThirdAttackWave&#91;SecondAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendThirdAttackWave = function&#40;&#41;
        for ThirdAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;SecondThirdAttackWave&#91;ThirdAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendFourthAttackWave = function&#40;&#41;
        for FourthAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;FourthFifthAttackWave&#91;FourthAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendFifthAttackWave = function&#40;&#41;
        for FifthAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;FourthFifthAttackWave&#91;FifthAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendSixthAttackWave = function&#40;&#41;
        for SixthAttackWaveCount = 1, 7 do
                local waveunit = Actor.Create&#40;SixthAttackWave&#91;SixthAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendSeventhAttackWave = function&#40;&#41;
        for SeventhAttackWaveCount = 1, 9 do
                local waveunit = Actor.Create&#40;SeventhAttackWave&#91;SeventhAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendEigthAttackWave = function&#40;&#41;
        for EigthAttackWaveCount = 1, 9 do
                local waveunit = Actor.Create&#40;EigthAttackWave&#91;EigthAttackWaveCount&#93;, &#123; Owner = enemy, Location = LandSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerBase.Location&#41;
        end
end

SendFirstNavalAttackWave = function&#40;&#41;
        for FirstNavalAttackWaveCount = 1, 4 do
                local waveunit = Actor.Create&#40;FirstNavalAttackWave&#91;FirstNavalAttackWave&#93;, &#123; Owner = enemy, Location = NavalSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerShore.Location&#41;
        end
end

SendSecondNavalAttackWave = function&#40;&#41;
        for SecondNavalAttackWaveCount = 1, 4 do
                local waveunit = Actor.Create&#40;SecondNavalAttackWave&#91;SecondNavalAttackWave&#93;, &#123; Owner = enemy, Location = NavalSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerShore.Location&#41;
        end
end

SendThirdNavalAttackWave = function&#40;&#41;
        for ThirdNavalAttackWaveCount = 1, 4 do
                local waveunit = Actor.Create&#40;ThirdNavalAttackWave&#91;ThirdNavalAttackWave&#93;, &#123; Owner = enemy, Location = NavalSpawn.Location &#125;&#41;
                Actor.AttackMove&#40;waveunit, PlayerShore.Location&#41;
        end
end

-- Creates a patrol function with two waypoints and one unit.

LoopPatrol = function&#40;actor, waypoints&#41; 
   Utils.Do&#40;waypoints, function&#40;waypoint&#41; 
      Actor.AttackMove&#40;actor, waypoint.Location&#41; 
   end&#41; 
   Actor.CallFunc&#40;actor, function&#40;&#41; LoopPatrol&#40;actor, waypoints&#41; end&#41; 
end

tick = 0 -- Used for Briefing display code.

WorldLoaded = function&#40;&#41; -- used to call previously created functions
	player = OpenRA.GetPlayer&#40;"Nod"&#41;
	enemy = OpenRA.GetPlayer&#40;"Allies"&#41;
	LoopPatrol&#40;PatrolN1, &#123; PatrolN1A, PatrolN1B &#125;&#41;
	LoopPatrol&#40;PatrolN2, &#123; PatrolN1B, PatrolN1A &#125;&#41;
	LoopPatrol&#40;PatrolL1, &#123; PatrolL1B, PatrolL1A &#125;&#41;
	LoopPatrol&#40;PatrolN5, &#123; PatrolN2B, PatrolN2A &#125;&#41;
	LoopPatrol&#40;PatrolN4, &#123; PatrolN2B, PatrolN2A &#125;&#41;
	LoopPatrol&#40;PatrolN3, &#123; PatrolN2A, PatrolN2B &#125;&#41;
	LoopPatrol&#40;PatrolL2, &#123; PatrolL2B, PatrolL2A &#125;&#41;
	LoopPatrol&#40;PatrolL4, &#123; PatrolL2B, PatrolL2A &#125;&#41;
	LoopPatrol&#40;PatrolL3, &#123; PatrolL2A, PatrolL2B &#125;&#41;
	LoopPatrol&#40;PatrolL5, &#123; PatrolL2A, PatrolL2B &#125;&#41;
	LoopPatrol&#40;PatrolL6, &#123; PatrolL3A, PatrolL3B &#125;&#41;
	LoopPatrol&#40;Truck1, &#123; TibRouteA, TibRouteB &#125;&#41;
	LoopPatrol&#40;Truck2, &#123; TibRouteA, TibRouteB &#125;&#41;
	OpenRA.RunAfterDelay&#40;25 * 240, SendFirstAttackWave&#41;
	OpenRA.RunAfterDelay&#40;25 * 5, SendFirstNavalAttackWave&#41; --360	
    OpenRA.RunAfterDelay&#40;25 * 480, SendSecondAttackWave&#41;
    OpenRA.RunAfterDelay&#40;25 * 600, SendThirdAttackWave&#41;
	OpenRA.RunAfterDelay&#40;25 * 660, SendSecondNavalAttackWave&#41;
    OpenRA.RunAfterDelay&#40;25 * 780, SendFourthAttackWave&#41;
    OpenRA.RunAfterDelay&#40;25 * 840, SendFifthAttackWave&#41;
	OpenRA.RunAfterDelay&#40;25 * 960, SendSixthAttackWave&#41;
	OpenRA.RunAfterDelay&#40;25 * 1080, SendSeventhAttackWave&#41;
	OpenRA.RunAfterDelay&#40;25 * 1200, SendEigthAttackWave&#41;
	OpenRA.RunAfterDelay&#40;25 * 1320, SendThirdNavalAttackWave&#41;
	print&#40;" Briefing&#58; The Tiber river meteor sample you acquired contains an element foreign to our solar system. Our scientists speculate that has multiple uses - a power source, a perfect semiconductor, it can reinforce alloys... "&#41;
	print&#40;" Capture the Allied base near your LZ then secure the meteor crash site for the Brotherhood and push the allies out of the region. "&#41;
end

-- Briefing and win/lose check Code

Tick = function&#40;&#41;
        if Mission.RequiredUnitsAreDestroyed&#40;player&#41; then
                MissionFailed&#40;&#41;
        end
		tick = tick + 1
    if tick % 3000 == 0 then
	print&#40;" Secure the meteor crash site. Eliminate all Allied units and structures. "&#41;
    	end
end

Scott_NZ
Posts: 94
Joined: Thu Sep 13, 2012 9:09 am

Post by Scott_NZ »

Line 83, as noted by the error message:

Code: Select all

local waveunit = Actor.Create&#40;FirstNavalAttackWave&#91;FirstNavalAttackWave&#93;, &#123; Owner = enemy, Location = NavalSpawn.Location &#125;&#41;
FirstNavalAttackWave[FirstNavalAttackWave] doesn't make any sense, and is consistent with the error message because it will evaluate to nil.

kaneCVR
Posts: 93
Joined: Tue Dec 10, 2013 9:20 pm

Post by kaneCVR »

Yeah, it's supposed to be "FirstNavaAttackWave[FirstNavalAttackWaveCount]"

User avatar
Sleipnir
Posts: 820
Joined: Wed Apr 10, 2002 11:52 pm
Contact:

Post by Sleipnir »

You should consider writing a function that you pass your array of actors and waypoints to. This would remove most of your duplication, and the copy-paste errors that came with that. The function would look similar to LoopPatrol.

Post Reply