Page 1 of 3

The What, When, Where, and How on AI Ambushing (FAQ)

Posted: Sun Jul 16, 2006 9:46 pm
by xwingguy
The tutorial will cover on the use of the Ambush.lua script.

EDIT: 2nd scripting method has been added.

What is AI ambushing?

It's a system that allows you to spawn AIs wherever and whenever you want. It was used heavily in the campaigns.

How is the tutorial going to teach me?

Showing the process needed to create an Ambush, including 2 different ways to script it

To Begin

Make a template map with conquest and Clone Wars only. (hopefully you know that much already)

Open zeroeditor and load the the map you just created.


First thing needed for an ambush is path that the AI ambushes will spawn from.

Enter Path Editing mode and create a Path with 6 nodes (must be 6 you will see why later in tutorial) as shown in the picture below. Name this path "ambushpath" (without quotes)
Hidden/Spoiler:
Image
Second thing needed is a region that will act as a trigger to spawn the ambushers

Enter Region Editing mode and create a region and name it "ambushregion" as shown below.
Hidden/Spoiler:
Image
ALSO: It is highly recommended that you place an object in the region to mark the region in game.

Save zeroeditor and close.

Open the clone wars conquest script

Add the highlighted parts:

This calls the script used for ambushing
Hidden/Spoiler:
Image
We must create a new team for the ambushers (i'm calling it team 5. You can also create as many ambush teams as you want, the engine can handle it
Hidden/Spoiler:
Image

Set up the team here: (note: six path nodes, six units)
Hidden/Spoiler:
Image
Set up friendly and enemy stuff and ai goals. (Note I forgot something in this pic. ADD THIS TOO: SetTeamName(ATM, CIS) this keeps the names oof the individual dudes from being [NULL].
Hidden/Spoiler:
Image
Add this line to ScriptPostLoad. This is the actual code that makes it happen.
AHHH!! HOW DID I SCREW THIS UP??? IT'S SUPPOSED TO BE
SetupAmbushTrigger

Hidden/Spoiler:
Image
The generic stuff on the parameters of SetupAmbush is this:

SetupAmbushTrigger(TriggerRegion, PathName, numDudes, fromTeam)

Now munge everything. Play the map and enter the region which you should have marked earlier and BOOM you're surrounded.

THE OTHER METHOD: AMBUSH()

Alternatively, you can you use a function called Ambush(). Ambush() doesn't have a trigger region and will force the ambushers to spawn immediantly when called so it's best to link Ambush() to another event like when an object dies or a timer elapses.

The generic parameters for Ambush() as follows
Ambush(ambushpath, numDudes, fromTeam)



IMPORTANT RULES:

1) The number of ai that you spawn MUST be the same as the number of nodes you added to the path in zeroeditor.

2) The AmbushTeam cannot capture cps nor should it ever possess any cps.

RE: The What, When, Where, and How on AI Ambushing

Posted: Sun Jul 16, 2006 9:54 pm
by Teancum
Awesome. Added to the FAQ

Posted: Sun Jul 16, 2006 11:14 pm
by Bac-Talan
Awsome...
This has nice possibilities.
Like sentry forces to defend entrances...

Thanks for looking into this

<<EDIT>>:
Ok, I'm having some problems with this,
After adding this, I can't spawn, there are no CPs to select.
I'm getting this in the BF2log:
Message Severity: 3
.\Source\LuaHelper.cpp(312)
CallProc failed: (none):0: attempt to perform arithmetic on a nil value
stack traceback:
(none): in function `AddCommandPost'
(none): in function `ScriptPostLoad'
and
Message Severity: 3
.\Source\LuaHelper.cpp(312)
CallProc failed: bad argument #1 to `SetTeamName' (number expected, got nil)
stack traceback:
[C]: in function `SetTeamName'
(none): in function `ScriptInit'
my lua looks something like this:
Hidden/Spoiler:
[code]--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("ambush")

-- REP Attacking (attacker is always #1)
REP = 1;
CIS = 2;
-- These variables do not change
ATT = REP;
DEF = CIS;
AmbushTeam = 5
ATM = AmbushTeam

function ScriptPostLoad()


--This defines the CPs. These need to happen first
cp1 = CommandPost:New{name = "cp1"}
cp2 = CommandPost:New{name = "cp2"}
cp3 = CommandPost:New{name = "cp3"}
cp4 = CommandPost:New{name = "cp4"}



--This sets up the actual objective. This needs to happen after cp's are defined
conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
textATT = "game.modes.con",
textDEF = "game.modes.con2",
multiplayerRules = true}

--This adds the CPs to the objective. This needs to happen after the objective is set up
conquest:AddCommandPost(cp1)
conquest:AddCommandPost(cp2)
conquest:AddCommandPost(cp3)
conquest:AddCommandPost(cp4)

conquest:Start()

EnableSPHeroRules()
SetUpAmbush("ambushregion", "ambushpath, 6, 5")

end


---------------------------------------------------------------------------
-- FUNCTION: ScriptInit
-- PURPOSE: This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES: The name, 'ScriptInit' is a chosen convention, and each
-- mission script must contain a version of this function, as
-- it is called from C to start the mission.
---------------------------------------------------------------------------
function ScriptInit()

ReadDataFile("ingame.lvl")


SetMaxFlyHeight(30)
SetMaxPlayerFlyHeight (30)

SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",50) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",650) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",650) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",650) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",550) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",6000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",100) -- should be ~1x #combo

ReadDataFile("sound\\yav.lvl;yav1cw")
ReadDataFile("dc:SIDE\\all.lvl",
"all_inf_rifleman_urban",
"all_inf_rocketeer_urban",
"all_inf_engineer_jungle",
"all_inf_sniper_fleet",
"all_inf_rad_heavy",
"all_inf_wookiee")

ReadDataFile("dc:SIDE\\cis.lvl",
"cis_inf_rifleman",
"cis_inf_rocketeer",
"cis_inf_engineer",
"cis_inf_sniper",
"cis_inf_officer",
"cis_inf_droideka",
"cis_hero_darthmaul",
"cis_hover_aat")


ReadDataFile("SIDE\\tur.lvl",
"tur_bldg_laser",
"tur_bldg_tower")

SetupTeams{
rep = {
team = REP,
units = 20,
reinforcements = 150,
soldier = { "all_inf_rifleman_urban",9, 25},
assault = { "all_inf_rocketeer_urban",1, 4},
engineer = { "all_inf_engineer_jungle",1, 4},
sniper = { "all_inf_sniper_fleet",1, 4},
officer = {"all_inf_rad_heavy",1, 4},
special = { "all_inf_wookiee",1, 4},

},
cis = {
team = CIS,
units = 20,
reinforcements = 150,
soldier = { "cis_inf_rifleman",9, 25},
assault = { "cis_inf_rocketeer",1, 4},
engineer = { "cis_inf_engineer",1, 4},
sniper = { "cis_inf_sniper",1, 4},
officer = {"cis_inf_officer",1, 4},
special = { "cis_inf_droideka",1, 4},
},

atm = {
team = ATM,
units = 6,
reinforcements = -1,
soldier = { "cis_inf_rifleman", 6, 6},
}
}

SetTeamName(AMT, CIS)
SetTeamAsFriend(ATM, CIS)
SetTeamAsFriend(CIS, ATM)
SetTeamAsEnemy(ATM, REP)
SetTeamAsEnemy(REP, ATM)
ClearAIGoals(ATM)
AddAIGoal(ATM, "Deathmatch", 100)

SetHeroClass(CIS, "cis_hero_darthmaul")


-- Level Stats
-- ClearWalkers()
AddWalkerType(0, 4) -- special -> droidekas
AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
local weaponCnt = 1024
SetMemoryPoolSize("Aimer", 75)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 1024)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth", 32)
SetMemoryPoolSize("EntityFlyer", 32)
SetMemoryPoolSize("EntityHover", 32)
SetMemoryPoolSize("EntityLight", 200)
SetMemoryPoolSize("EntitySoundStream", 4)
SetMemoryPoolSize("EntitySoundStatic", 32)
SetMemoryPoolSize("MountedTurret", 32)
SetMemoryPoolSize("Navigator", 128)
SetMemoryPoolSize("Obstacle", 1024)
SetMemoryPoolSize("PathNode", 1024)
SetMemoryPoolSize("SoundSpaceRegion", 64)
SetMemoryPoolSize("TreeGridStack", 1024)
SetMemoryPoolSize("UnitAgent", 128)
SetMemoryPoolSize("UnitController", 128)
SetMemoryPoolSize("Weapon", weaponCnt)

SetSpawnDelay(10.0, 0.25)
--ReadDataFile("dc:GCT\\GCT.lvl", "GCT_conquest")
ReadDataFile("dc:GCT\\GCT.lvl", "GCT_conquest")
SetDenseEnvironment("false")




-- Sound

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")

voiceSlow = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)

voiceQuick = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_quick", voiceQuick)

OpenAudioStream("sound\\global.lvl", "cw_music")
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1_emt")

SetBleedingVoiceOver(REP, REP, "rep_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(REP, CIS, "rep_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, REP, "cis_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, CIS, "cis_off_com_report_us_overwhelmed", 1)

SetOutOfBoundsVoiceOver(2, "cisleaving")
SetOutOfBoundsVoiceOver(1, "repleaving")

SetAmbientMusic(REP, 1.0, "rep_yav_amb_start", 0,1)
SetAmbientMusic(REP, 0.8, "rep_yav_amb_middle", 1,1)
SetAmbientMusic(REP, 0.2, "rep_yav_amb_end", 2,1)
SetAmbientMusic(CIS, 1.0, "cis_yav_amb_start", 0,1)
SetAmbientMusic(CIS, 0.8, "cis_yav_amb_middle", 1,1)
SetAmbientMusic(CIS, 0.2, "cis_yav_amb_end", 2,1)

SetVictoryMusic(REP, "rep_yav_amb_victory")
SetDefeatMusic (REP, "rep_yav_amb_defeat")
SetVictoryMusic(CIS, "cis_yav_amb_victory")
SetDefeatMusic (CIS, "cis_yav_amb_defeat")

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("BirdScatter", "birdsFlySeq1")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")


--OpeningSateliteShot
AddCameraShot(0.908386, -0.209095, -0.352873, -0.081226, -45.922508, -19.114113, 77.022636);

AddCameraShot(-0.481173, 0.024248, -0.875181, -0.044103, 14.767292, -30.602322, -144.506851);
AddCameraShot(0.999914, -0.012495, -0.004416, -0.000055, 1.143253, -33.602314, -76.884430);
AddCameraShot(0.839161, 0.012048, -0.543698, 0.007806, 19.152437, -49.802273, 24.337317);
AddCameraShot(0.467324, 0.006709, -0.883972, 0.012691, 11.825212, -49.802273, -7.000720);
AddCameraShot(0.861797, 0.001786, -0.507253, 0.001051, -11.986043, -59.702248, 23.263165);
AddCameraShot(0.628546, -0.042609, -0.774831, -0.052525, 20.429928, -48.302277, 9.771714);
AddCameraShot(0.765213, -0.051873, 0.640215, 0.043400, 57.692474, -48.302277, 16.540724);
AddCameraShot(0.264032, -0.015285, -0.962782, -0.055734, -16.681797, -42.902290, 129.553268);
AddCameraShot(-0.382320, 0.022132, -0.922222, -0.053386, 20.670977, -42.902290, 135.513001);
end[/code][/size]
Any help?

Posted: Mon Jul 17, 2006 12:05 am
by xwingguy
SetTeamName(AMT, CIS)
SetTeamAsFriend(ATM, CIS)

See the inconsistancy?

they should all be ATM

PS sry, that was my fault. I fixed it though.

Posted: Mon Jul 17, 2006 12:07 am
by [RDH]Zerted
There is an error in the last example picture.

SetUpAmbush("ambushregion", "ambushpath, 6, 5)
should be: SetUpAmbush("ambushregion", "ambushpath", 6, 5) or SetUpAmbush("ambushregion", ambushpath, 6, 5)

Edit, ok the image has been fixed. Bac-Talan, you also have that error.

Posted: Mon Jul 17, 2006 12:13 am
by xwingguy
SetupAmbush("ambushregion", "ambushpath", 6, 5) is the correct way.

(the 'u' is not capitalized)

Posted: Mon Jul 17, 2006 12:34 am
by Bac-Talan
SetTeamName(AMT, CIS)
SetTeamAsFriend(ATM, CIS)

See the inconsistancy?
OWW!!!
Blinding flash of the obvious...
thanks

Posted: Mon Jul 17, 2006 1:04 am
by -_-
Okay, this brings up a question of mine. Is it possible to have a timer, so for like.. 1 minute, bots just keep spawning from the path?

example: 6 bots spawn, 1 died, another would automaiticlly respawn.

Posted: Mon Jul 17, 2006 11:16 am
by Hebes24
I like this! one minute you are just walking along and then WHAM! you are surrounded!!! this could have interesting possibilities :twisted:

Posted: Mon Jul 17, 2006 11:22 am
by Xavious
nice this is awesome.

Posted: Mon Jul 17, 2006 11:25 am
by Rends
Thx,thx and thx!

Rends

Posted: Mon Jul 17, 2006 1:44 pm
by xwingguy
-_- wrote:Okay, this brings up a question of mine. Is it possible to have a timer, so for like.. 1 minute, bots just keep spawning from the path?

example: 6 bots spawn, 1 died, another would automaiticlly respawn.
I can write out the code for you (just stick it into scriptPostLoad)

Code: Select all

SetupAmbush("ambushregion","ambushpath", 6, 5)
numDudesAlive =6
OnObjectKill(
function (object, killer)
if GetObjectTeam(object) == ATM then
numDudesAlive = numDudesAlive - 1
end
end
)
RespawnCount = CreateTimer("RespawnCount")
SetTimerValue(RespawnCount, 60.0)
StartTimer(RespawnCount)
ShowTimer(RespawnCount) --Optional, just makes sure that the timer is working

OnTimerElapse(
function(timer)
if (numDudesAlive < 6) then
Ambush("ambushpath", 6-numDudesAlive, 5)
numDudesAlive = 6
end
SetTimerValue(RespawnCount, 60.0)
StartTimer(RespawnCount)
end,
RespawnCount
)

Posted: Mon Jul 17, 2006 3:05 pm
by [RDH]Zerted
It would run faster if you just use SetTimer() and StartTimer() instead of destroying and recreating the timer again.

It isn't a problem when amount of units spawning are less than the number of path nodes.

A small change in Ambush.lua would make it so the amount of path nodes doesn't matter.

Posted: Mon Jul 17, 2006 3:36 pm
by xwingguy
[RDH]Zerted wrote:It would run faster if you just use SetTimer() and StartTimer() instead of destroying and recreating the timer again.

It isn't a problem when amount of units spawning are less than the number of path nodes.

A small change in Ambush.lua would make it so the amount of path nodes doesn't matter.
ic about the timer deal but the path node thing, do you know a way to get the number of path nodes a specified path has b/c I don't want to need another parameter.

Posted: Mon Jul 17, 2006 4:23 pm
by -_-
Woot, thanks! Now to put it to the test :D

Posted: Sat Jul 22, 2006 3:49 pm
by Hebes24
I tried to do this but it did't work. my map CTD'ed at the end of loading :cry: . here is mu LUA
Hidden/Spoiler:
[code]--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("ambush")

-- REP Attacking (attacker is always #1)
REP = 1;
CIS = 2;
-- These variables do not change
ATT = REP;
DEF = CIS;
AmbushTeam = 5
ATM = AmbushTeam


function ScriptPostLoad()


--This defines the CPs. These need to happen first
cp1 = CommandPost:New{name = "cp1"}
cp2 = CommandPost:New{name = "cp2"}
cp3 = CommandPost:New{name = "cp3"}
cp4 = CommandPost:New{name = "cp4"}



--This sets up the actual objective. This needs to happen after cp's are defined
conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
textATT = "game.modes.con",
textDEF = "game.modes.con2",
multiplayerRules = true}

--This adds the CPs to the objective. This needs to happen after the objective is set up
conquest:AddCommandPost(cp1)
conquest:AddCommandPost(cp2)
conquest:AddCommandPost(cp3)
conquest:AddCommandPost(cp4)

conquest:Start()

EnableSPHeroRules()
SetupAmbush("ambushregion", "ambushpath", 6, 5)

end


---------------------------------------------------------------------------
-- FUNCTION: ScriptInit
-- PURPOSE: This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES: The name, 'ScriptInit' is a chosen convention, and each
-- mission script must contain a version of this function, as
-- it is called from C to start the mission.
---------------------------------------------------------------------------
function ScriptInit()

--tell the game to load our loading image
ReadDataFile("dc:Load\\common.lvl")

ReadDataFile("ingame.lvl")


SetMaxFlyHeight(150)
SetMaxPlayerFlyHeight (150)

SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",50) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",650) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",650) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",650) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",550) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",6000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",100) -- should be ~1x #combo

ReadDataFile("sound\\yav.lvl;yav1cw")
ReadDataFile("dc:SIDE\\rep.lvl",
"rep_inf_ep3_rifleman",
"rep_inf_ep3_rocketeer",
"rep_inf_ep3_sniper",
"rep_inf_ep3_pilot",
"rep_inf_ep3_marine",
"rep_inf_ep3_officer",
"rep_inf_ep3_jettrooper",
"rep_hover_fightertank",
"rep_hero_kiyadimundi",
"rep_hover_barcspeeder",
"rep_fly_anakinstarfighter_sc")

ReadDataFile("dc:SIDE\\cis.lvl",
"cis_inf_rifleman",
"cis_inf_rocketeer",
"cis_inf_sniper",
"cis_inf_pilot",
"cis_inf_marine",
"cis_inf_officer",
"cis_inf_droideka",
"cis_hero_darthmaul",
"cis_hover_aat",
"cis_fly_tridroidfighter")


ReadDataFile("SIDE\\tur.lvl",
"tur_bldg_laser",
"tur_bldg_tower")

SetupTeams{
rep = {
team = REP,
units = 20,
reinforcements = 150,
soldier = { "rep_inf_ep3_rifleman",9, 25},
assault = { "rep_inf_ep3_rocketeer",1, 4},
sniper = { "rep_inf_ep3_sniper",1, 4},
pilot = { "rep_inf_ep3_pilot",1, 4},
marine = { "rep_inf_ep3_marine",1, 4},
officer = {"rep_inf_ep3_officer",1, 4},
special = { "rep_inf_ep3_jettrooper",1, 4},

},
cis = {
team = CIS,
units = 20,
reinforcements = 150,
soldier = { "cis_inf_rifleman",9, 25},
assault = { "cis_inf_rocketeer",1, 4},
sniper = { "cis_inf_sniper",1, 4},
pilot = { "cis_inf_pilot",1, 4},
marine = { "cis_inf_marine",1, 4},
officer = {"cis_inf_officer",1, 4},
special = { "cis_inf_droideka",1, 4},
},

atm = {
team = atm,
units = 6,
reinforcements = -1,
soldier = { "cis_inf_rifleman", 6, 6},
}
}

SetTeamName(ATM, CIS)
SetTeamAsFriend(ATM, CIS)
SetTeamAsFriend(CIS, ATM)
SetTeamAsEnemy(ATM, REP)
SetTeamAsEnemy(REP, ATM)
ClearAIGoals(ATM)
AddAIGoals(ATM, "Deathmatch", 100)

SetHeroClass(CIS, "cis_hero_darthmaul")
SetHeroClass(REP, "rep_hero_kiyadimundi")


-- Level Stats
-- ClearWalkers()
AddWalkerType(0, 4) -- special -> droidekas
AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
local weaponCnt = 1024
SetMemoryPoolSize("Aimer", 75)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 1024)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth", 32)
SetMemoryPoolSize("EntityFlyer", 32)
SetMemoryPoolSize("EntityHover", 32)
SetMemoryPoolSize("EntityLight", 200)
SetMemoryPoolSize("EntitySoundStream", 4)
SetMemoryPoolSize("EntitySoundStatic", 32)
SetMemoryPoolSize("MountedTurret", 32)
SetMemoryPoolSize("Navigator", 128)
SetMemoryPoolSize("Obstacle", 1024)
SetMemoryPoolSize("PathNode", 1024)
SetMemoryPoolSize("SoundSpaceRegion", 64)
SetMemoryPoolSize("TreeGridStack", 1024)
SetMemoryPoolSize("UnitAgent", 128)
SetMemoryPoolSize("UnitController", 128)
SetMemoryPoolSize("Weapon", weaponCnt)

SetSpawnDelay(10.0, 0.25)
--ReadDataFile("dc:TST\\TST.lvl", "TST_conquest")
ReadDataFile("dc:TST\\TST.lvl", "TST_conquest")
SetDenseEnvironment("false")




-- Sound

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")

voiceSlow = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)

voiceQuick = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_quick", voiceQuick)

OpenAudioStream("sound\\global.lvl", "cw_music")
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1_emt")

SetBleedingVoiceOver(REP, REP, "rep_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(REP, CIS, "rep_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, REP, "cis_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, CIS, "cis_off_com_report_us_overwhelmed", 1)

SetOutOfBoundsVoiceOver(2, "cisleaving")
SetOutOfBoundsVoiceOver(1, "repleaving")

SetAmbientMusic(REP, 1.0, "rep_yav_amb_start", 0,1)
SetAmbientMusic(REP, 0.8, "rep_yav_amb_middle", 1,1)
SetAmbientMusic(REP, 0.2, "rep_yav_amb_end", 2,1)
SetAmbientMusic(CIS, 1.0, "cis_yav_amb_start", 0,1)
SetAmbientMusic(CIS, 0.8, "cis_yav_amb_middle", 1,1)
SetAmbientMusic(CIS, 0.2, "cis_yav_amb_end", 2,1)

SetVictoryMusic(REP, "rep_yav_amb_victory")
SetDefeatMusic (REP, "rep_yav_amb_defeat")
SetVictoryMusic(CIS, "cis_yav_amb_victory")
SetDefeatMusic (CIS, "cis_yav_amb_defeat")

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("BirdScatter", "birdsFlySeq1")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")


--OpeningSateliteShot
AddCameraShot(0.908386, -0.209095, -0.352873, -0.081226, -45.922508, -19.114113, 77.022636);

AddCameraShot(-0.481173, 0.024248, -0.875181, -0.044103, 14.767292, -30.602322, -144.506851);
AddCameraShot(0.999914, -0.012495, -0.004416, -0.000055, 1.143253, -33.602314, -76.884430);
AddCameraShot(0.839161, 0.012048, -0.543698, 0.007806, 19.152437, -49.802273, 24.337317);
AddCameraShot(0.467324, 0.006709, -0.883972, 0.012691, 11.825212, -49.802273, -7.000720);
AddCameraShot(0.861797, 0.001786, -0.507253, 0.001051, -11.986043, -59.702248, 23.263165);
AddCameraShot(0.628546, -0.042609, -0.774831, -0.052525, 20.429928, -48.302277, 9.771714);
AddCameraShot(0.765213, -0.051873, 0.640215, 0.043400, 57.692474, -48.302277, 16.540724);
AddCameraShot(0.264032, -0.015285, -0.962782, -0.055734, -16.681797, -42.902290, 129.553268);
AddCameraShot(-0.382320, 0.022132, -0.922222, -0.053386, 20.670977, -42.902290, 135.513001);
end[/code][/size]
Sorry for the bump. Hope you can help!

Edit: I think this might be the problem:
BFront2.log wrote:Message Severity: 3
.\Source\LuaHelper.cpp(312)
CallProc failed: bad argument #1 to `SetTeamName' (number expected, got nil)
stack traceback:
[C]: in function `SetTeamName'
(none): in function `SetupTeams'
(none): in function `ScriptInit'
This is the only Severity 3 in the log.

Does this meanm that instead of SetTeamName(ATM, CIS) it needs to be SetTeamName(5, 2)? Can someone help me!!

Posted: Sat Jul 22, 2006 6:28 pm
by xwingguy
try it.

Posted: Sat Jul 22, 2006 6:50 pm
by [RDH]Zerted
Yes and no. Checkout this segment:
marine = { "cis_inf_marine",1, 4},
officer = {"cis_inf_officer",1, 4},
special = { "cis_inf_droideka",1, 4},
},

atm = {
team = atm,
units = 6,
reinforcements = -1,
soldier = { "cis_inf_rifleman", 6, 6},
}
}

SetTeamName(ATM, CIS)
SetTeamAsFriend(ATM, CIS)
Your SetTeamName(ATM, CIS) is correct, but there is no team ATM. There is a team atm. However, atm is not defined anywhere so its value is nil. The error you are getting is from setup_teams.lua. It is trying to set a team name to nil, which isn't allowed.

To fix it, change team = atm, to team = ATM,

Posted: Sun Jul 23, 2006 10:31 am
by Hebes24
I fixed that, but it is still crashing. again there was only one sverity 3 message. here it is:
BFront2.log wrote:Message Severity: 3
.\Source\LuaHelper.cpp(312)
CallProc failed: bad argument #2 to `SetReinforcementCount' (number expected, got nil)
stack traceback:
[C]: in function `SetReinforcementCount'
(none): in function `SetupTeams'
(none): in function `ScriptInit'
I don't get it. here is the Setupteams part of the LUA:
c_con.lua wrote:atm = {
team = ATM,
units = 6,
reinfocements = -1,
soldier = { "cis_inf_rifleman", 6, 6},
}
this is exactly how you told me to set it up. and I looked at other examples of modes that had infinite reinfocements (like CTF) and it was done the exact same way. What's wrong?:?

Edit: wait, reinfocements?? it should be reinforcements. that might be the problem.

Edit2: OK the map no longer crashes, but the ambush does not work!!
I found this severity 3
bfront2.log wrote:Message Severity: 3
.\Source\LuaHelper.cpp(312)
CallProc failed: (none):0: attempt to call global `SetupAmbush' (a nil value)
stack traceback:
(none): in function `ScriptPostLoad'
and these severity 2's
bfront2.log wrote:Message Severity: 2
.\Source\Team.cpp(884)
Missing a localized team name for this level, level.TST.local

Message Severity: 2
.\Source\Team.cpp(884)
Missing a localized team name for this level, level.TST.local

Message Severity: 2
.\Source\Team.cpp(884)
Missing a localized team name for this level, level.TST.local

Message Severity: 2
.\Source\Team.cpp(884)
Missing a localized team name for this level, level.TST.local

Message Severity: 2
.\Source\Team.cpp(884)
Missing a localized team name for this level, level.TST.local

Message Severity: 2
.\Source\Team.cpp(884)
Missing a localized team name for this level, level.TST.local

Message Severity: 2
.\Source\Team.cpp(439)
level.TST.locals not localized
do the 2's have anything to do with this? what does the 3 mean?:?

Posted: Sun Jul 23, 2006 11:32 am
by xwingguy
ScriptCB_DoFile("ambush")

That's wrong, it should be:

ScriptCB_DoFile("Ambush")



This is also wrong:

reinfocements = -1,

it should be

reinforcements = -1,