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

In this forum you will find and post information regarding the modding of Star Wars Battlefront 2. DO NOT POST MOD IDEAS/REQUESTS.

Moderator: Moderators

xwingguy

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

Post 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.
Last edited by xwingguy on Sun Jul 23, 2006 6:31 pm, edited 5 times in total.
User avatar
Teancum
Jedi Admin
Jedi Admin
Posts: 11080
Joined: Wed Sep 07, 2005 11:42 pm
Projects :: No Mod project currently.
Games I'm Playing :: Destiny
xbox live or psn: No gamertag set
Location: Indiana

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

Post by Teancum »

Awesome. Added to the FAQ
Bac-Talan
Captain
Captain
Posts: 487
Joined: Wed Nov 30, 2005 8:14 pm

Post 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?
xwingguy

Post 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.
Last edited by xwingguy on Mon Jul 17, 2006 12:07 am, edited 1 time in total.
User avatar
[RDH]Zerted
Gametoast Staff
Gametoast Staff
Posts: 2982
Joined: Sun Feb 26, 2006 7:36 am
Projects :: Bos Wars AI - a RTS game
Games I'm Playing :: SWBF2 and Bos Wars
xbox live or psn: No gamertag set
Location: USA
Contact:

Post 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.
Last edited by [RDH]Zerted on Mon Jul 17, 2006 12:17 am, edited 1 time in total.
xwingguy

Post by xwingguy »

SetupAmbush("ambushregion", "ambushpath", 6, 5) is the correct way.

(the 'u' is not capitalized)
Bac-Talan
Captain
Captain
Posts: 487
Joined: Wed Nov 30, 2005 8:14 pm

Post by Bac-Talan »

SetTeamName(AMT, CIS)
SetTeamAsFriend(ATM, CIS)

See the inconsistancy?
OWW!!!
Blinding flash of the obvious...
thanks
-_-
Gametoast Staff
Gametoast Staff
Posts: 2678
Joined: Sat May 07, 2005 1:22 pm

Post 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.
Hebes24
Sith Master
Sith Master
Posts: 2594
Joined: Sat Jun 03, 2006 5:15 pm
Projects :: No Mod project currently.
Games I'm Playing :: I have not listed any games yet
xbox live or psn: No gamertag set
Location: In An Epic Space Battle!
Contact:

Post by Hebes24 »

I like this! one minute you are just walking along and then WHAM! you are surrounded!!! this could have interesting possibilities :twisted:
Xavious
Sith Master
Sith Master
Posts: 2783
Joined: Mon Jun 12, 2006 3:46 pm

Post by Xavious »

nice this is awesome.
User avatar
Rends
Sith
Sith
Posts: 1278
Joined: Fri Oct 15, 2004 6:34 pm
Projects :: No Mod project currently.
Games I'm Playing :: I have not listed any games yet
xbox live or psn: No gamertag set
Location: Germany
Contact:

Post by Rends »

Thx,thx and thx!

Rends
xwingguy

Post 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
)
Last edited by xwingguy on Mon Jul 17, 2006 3:37 pm, edited 1 time in total.
User avatar
[RDH]Zerted
Gametoast Staff
Gametoast Staff
Posts: 2982
Joined: Sun Feb 26, 2006 7:36 am
Projects :: Bos Wars AI - a RTS game
Games I'm Playing :: SWBF2 and Bos Wars
xbox live or psn: No gamertag set
Location: USA
Contact:

Post 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.
xwingguy

Post 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.
-_-
Gametoast Staff
Gametoast Staff
Posts: 2678
Joined: Sat May 07, 2005 1:22 pm

Post by -_- »

Woot, thanks! Now to put it to the test :D
Hebes24
Sith Master
Sith Master
Posts: 2594
Joined: Sat Jun 03, 2006 5:15 pm
Projects :: No Mod project currently.
Games I'm Playing :: I have not listed any games yet
xbox live or psn: No gamertag set
Location: In An Epic Space Battle!
Contact:

Post 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!!
xwingguy

Post by xwingguy »

try it.
User avatar
[RDH]Zerted
Gametoast Staff
Gametoast Staff
Posts: 2982
Joined: Sun Feb 26, 2006 7:36 am
Projects :: Bos Wars AI - a RTS game
Games I'm Playing :: SWBF2 and Bos Wars
xbox live or psn: No gamertag set
Location: USA
Contact:

Post 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,
Hebes24
Sith Master
Sith Master
Posts: 2594
Joined: Sat Jun 03, 2006 5:15 pm
Projects :: No Mod project currently.
Games I'm Playing :: I have not listed any games yet
xbox live or psn: No gamertag set
Location: In An Epic Space Battle!
Contact:

Post 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?:?
xwingguy

Post 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,
Post Reply