Page 1 of 1

Certain stock villians crash

Posted: Mon Jun 29, 2009 2:24 pm
by RepSharpshooter
I am adding the Mos Eisly hero assault characters to one of my Battle Arena modes. Upon load, all of the heroes work, but when I select certain villians, the map crashes. Darth Maul and Count Dooku crash. When I select Grievous, he is there but has no head.

I get these errors in the bf2log:
Hidden/Spoiler:
Message Severity: 3
.\Source\DisplaySoldier.cpp(349)
DisplaySoldier 'cis_hero_grievous' failed to find animmap _sabre

Message Severity: 3
.\Source\DisplaySoldier.cpp(240)
DisplaySoldier 'cis_hero_jangofett' failed to find animmap fett_pistol
Here is the relevant part of my lua:
Hidden/Spoiler:
function ScriptInit()
StealArtistHeap(1536*1024)

ReadDataFile("dc:Load\\common.lvl")
ReadDataFile("ingame.lvl")



SetMaxFlyHeight(20)
SetMaxPlayerFlyHeight(20)
--SetMemoryPoolSize("SoldierAnimation", 8000)
SetMemoryPoolSize("FLEffectObject::OffsetMatrix", 300)
SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",30) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",500) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",500) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",500) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",400) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",4000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",88) -- should be ~1x #combo

ReadDataFile("sound\\tat.lvl;tat2gcw")
--ReadDataFile("dc:sound\\baa.lvl;baacw")




--[[
print("reading in gam side")
ReadDataFile("SIDE\\gam.lvl",
"gam_inf_gamorreanguard")

print("reading in snw side")
ReadDataFile("SIDE\\snw.lvl",
"snw_inf_wampa")

print("reading in geo side")
ReadDataFile("SIDE\\geo.lvl",
"gen_inf_geonosian",
"geo_inf_acklay")



,
"cis_inf_rifleman",
"cis_inf_droideka"
--]]

ReadDataFile("SIDE\\all.lvl",
"all_hero_luke_jedi",
"all_hero_hansolo_tat",
"all_hero_leia",
"all_hero_chewbacca")

ReadDataFile("SIDE\\imp.lvl",
"imp_hero_darthvader",
"imp_hero_emperor",
"imp_hero_bobafett")

ReadDataFile("SIDE\\rep.lvl",
"rep_hero_yoda",
"rep_hero_macewindu",
"rep_hero_anakin",
"rep_hero_aalya",
"rep_hero_kiyadimundi",
"rep_hero_obiwan")

ReadDataFile("SIDE\\cis.lvl",
"cis_hero_grievous",
"cis_hero_darthmaul",
"cis_hero_countdooku",
"cis_hero_jangofett")




SetClassProperty("geo_inf_geonosian","NoEnterVehicles","1")
SetClassProperty("cis_inf_rifleman","NoEnterVehicles","1")
SetClassProperty("gam_inf_gamorreanguard","NoEnterVehicles","1")
SetClassProperty("geo_inf_acklay","NoEnterVehicles","1")
SetClassProperty("snw_inf_wampa","NoEnterVehicles","1")


--ReadDataFile("dc:ingame.lvl")

SetupTeams{
hero = {
team = ALL,
units = 32,
reinforcements = -1,
soldier = { "all_hero_hansolo_tat",1,2},
assault = { "all_hero_chewbacca", 1,2},
engineer= { "all_hero_luke_jedi", 1,2},
sniper = { "rep_hero_obiwan", 1,2},
officer = { "rep_hero_yoda", 1,2},
special = { "rep_hero_macewindu", 1,2},
},
}

AddUnitClass(ALL,"all_hero_leia", 1,2)
AddUnitClass(ALL,"rep_hero_aalya", 1,2)
AddUnitClass(ALL,"rep_hero_kiyadimundi",1,2)

SetupTeams{
villain = {
team = IMP,
units = 32,
reinforcements = -1,
soldier = { "imp_hero_bobafett", 1,2},
assault = { "imp_hero_darthvader",1,2},
engineer= { "cis_hero_darthmaul", 1,2},
sniper = { "cis_hero_jangofett", 1,2},
officer = { "cis_hero_grievous", 1,2},
special = { "imp_hero_emperor", 1,2},

},
}
AddUnitClass(IMP, "rep_hero_anakin",1,2)
AddUnitClass(IMP, "cis_hero_countdooku",1,2)

SetTeamAsFriend(1,2)
SetTeamAsFriend(2,1)


--Pools of extra characters for Ambushes.
AddUnitClass(ambushTeam1, "geo_inf_geonosian",16,16)
AddUnitClass(ambushTeam1, "gam_inf_gamorreanguard",16,16)
SetUnitCount(ambushTeam1, 32)
AddAIGoal(ambushTeam1, "Deathmatch", 100)

--Pools of extra characters for Ambushes.
AddUnitClass(ambushTeam2, "cis_inf_rifleman",16,16)
AddUnitClass(ambushTeam2, "cis_inf_droideka",16,16)
SetUnitCount(ambushTeam2, 32)
AddAIGoal(ambushTeam2, "Deathmatch", 100)


--Pools of extra characters for Ambushes.
AddUnitClass(ambushTeam3, "snw_inf_wampa",16,16)
AddUnitClass(ambushTeam3, "geo_inf_acklay",16,16)
SetUnitCount(ambushTeam3, 32)
AddAIGoal(ambushTeam3, "Deathmatch", 100)

--AddUnitClass(ambushTeam33, "cis_inf_marine")
--SetUnitCount(ambushTeam33, ambushCount33)
--SetTeamAsEnemy(ambushTeam33, REP)
--AddAIGoal(ambushTeam33, "Deathmatch", 100)
--[[
AddUnitClass(ambushTeam3, "cis_inf_rifleman")
SetUnitCount(ambushTeam3, ambushCount3)
--SetTeamAsEnemy(ambushTeam33, REP)
-- AddAIGoal(ambushTeam3, "Conquest", 100)
AddAIGoal(ambushTeam3, "Deathmatch", 100)

AddUnitClass(ambushTeam4, "cis_inf_droideka")
SetUnitCount(ambushTeam4, ambushCount4)
--SetTeamAsEnemy(ambushTeam33, REP)
-- AddAIGoal(ambushTeam4, "Conquest", 100)
AddAIGoal(ambushTeam4, "Deathmatch", 100)

AddUnitClass(ambushTeam5, "snw_inf_wampa")
SetUnitCount(ambushTeam5, ambushCount5)
--SetTeamAsEnemy(ambushTeam33, REP)
-- AddAIGoal(ambushTeam5, "Conquest", 100)
AddAIGoal(ambushTeam5, "Deathmatch", 100)

AddUnitClass(ambushTeam2, "geo_inf_acklay")
SetUnitCount(ambushTeam2, ambushCount2)
--SetTeamAsEnemy(ambushTeam33, REP)
-- AddAIGoal(ambushTeam2, "Conquest", 100)
AddAIGoal(ambushTeam2, "Deathmatch", 100)
--]]
print("ambushteam1")
print(ambushTeam1)
print("ambushTeam33")
--print(ambushTeam33)

SetTeamAsEnemy(ambushTeam1, ATT)
SetTeamAsEnemy(ambushTeam1, DEF)
SetTeamAsEnemy(ATT, ambushTeam1)
SetTeamAsEnemy(DEF, ambushTeam1)

SetTeamAsEnemy(ambushTeam2, ATT)
SetTeamAsEnemy(ambushTeam2, DEF)
SetTeamAsEnemy(ATT, ambushTeam2)
SetTeamAsEnemy(DEF, ambushTeam2)



SetTeamAsEnemy(ambushTeam3, ATT)
SetTeamAsEnemy(ambushTeam3, DEF)
SetTeamAsEnemy(ATT, ambushTeam3)
SetTeamAsEnemy(DEF, ambushTeam3)

-- SetTeamAsEnemy(ambushTeam4, ATT)
-- SetTeamAsEnemy(ambushTeam4, DEF)
-- SetTeamAsEnemy(ATT, ambushTeam4)
-- SetTeamAsEnemy(DEF, ambushTeam4)

--[[ SetTeamAsEnemy(ambushTeam5, ATT)
SetTeamAsEnemy(ambushTeam5, DEF)
SetTeamAsEnemy(ATT, ambushTeam5)
SetTeamAsEnemy(DEF, ambushTeam5)
--]]


--[[ SetTeamAsEnemy(ambushTeam33, ATT)
SetTeamAsEnemy(ambushTeam33, DEF)
SetTeamAsEnemy(ATT, ambushTeam33)
SetTeamAsEnemy(DEF, ambushTeam33)--]]


--SetTeamAsFriend(ambushTeam1,ambushTeam33)
--SetTeamAsFriend(ambushTeam33,ambushTeam1)

SetTeamAsFriend(ambushTeam1,ambushTeam3)
SetTeamAsFriend(ambushTeam3,ambushTeam1)

-- SetTeamAsFriend(ambushTeam1,ambushTeam4)
-- SetTeamAsFriend(ambushTeam4,ambushTeam1)

-- SetTeamAsFriend(ambushTeam1,ambushTeam5)
-- SetTeamAsFriend(ambushTeam5,ambushTeam1)

SetTeamAsFriend(ambushTeam1,ambushTeam2)
SetTeamAsFriend(ambushTeam2,ambushTeam1)



-- SetTeamAsFriend(ambushTeam33,ambushTeam3)
-- SetTeamAsFriend(ambushTeam3,ambushTeam33)

-- SetTeamAsFriend(ambushTeam33,ambushTeam4)
-- SetTeamAsFriend(ambushTeam4,ambushTeam33)

-- SetTeamAsFriend(ambushTeam33,ambushTeam5)
--SetTeamAsFriend(ambushTeam5,ambushTeam33)

-- SetTeamAsFriend(ambushTeam33,ambushTeam2)
-- SetTeamAsFriend(ambushTeam2,ambushTeam33)



-- SetTeamAsFriend(ambushTeam3,ambushTeam4)
-- SetTeamAsFriend(ambushTeam4,ambushTeam3)

-- SetTeamAsFriend(ambushTeam3,ambushTeam5)
-- SetTeamAsFriend(ambushTeam5,ambushTeam3)

SetTeamAsFriend(ambushTeam3,ambushTeam2)
SetTeamAsFriend(ambushTeam2,ambushTeam3)



-- SetTeamAsFriend(ambushTeam4,ambushTeam5)
-- SetTeamAsFriend(ambushTeam5,ambushTeam4)

-- SetTeamAsFriend(ambushTeam4,ambushTeam2)
-- SetTeamAsFriend(ambushTeam2,ambushTeam4)



-- SetTeamAsFriend(ambushTeam5,ambushTeam2)
-- SetTeamAsFriend(ambushTeam2,ambushTeam5)

--SetTeamAsFriend(ATT,DEF)
--SetTeamAsFriend(DEF,ATT)



-- Level Stats
-- ClearWalkers()
AddWalkerType(0, 64) -- 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 = 256
SetMemoryPoolSize("Aimer", 1)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 320)
SetMemoryPoolSize("ConnectivityGraphFollower", 23)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth",41)
SetMemoryPoolSize("EntityDefenseGridTurret", 0)
SetMemoryPoolSize("EntityDroid", 40)
SetMemoryPoolSize("EntityFlyer", 5) -- to account for 5 chewbaccas
SetMemoryPoolSize("EntityLight", 80, 80) -- stupid trickery to actually set lights to 80
SetMemoryPoolSize("EntityPortableTurret", 0) -- nobody has autoturrets AFAIK - MZ
SetMemoryPoolSize("EntitySoundStream", 2)
SetMemoryPoolSize("EntitySoundStatic", 45)
SetMemoryPoolSize("FLEffectObject::OffsetMatrix", 120)
SetMemoryPoolSize("MountedTurret", 0)
SetMemoryPoolSize("Navigator", 23)
SetMemoryPoolSize("Obstacle", 667)
SetMemoryPoolSize("Ordnance", 800) -- not much ordnance going on in the level
SetMemoryPoolSize("ParticleEmitter", 512)
SetMemoryPoolSize("ParticleEmitterInfoData", 512)
SetMemoryPoolSize("PathFollower", 23)
SetMemoryPoolSize("PathNode", 128)
SetMemoryPoolSize("ShieldEffect", 0)
SetMemoryPoolSize("TentacleSimulator", 24)
SetMemoryPoolSize("TreeGridStack", 290)
SetMemoryPoolSize("UnitAgent", 23)
SetMemoryPoolSize("UnitController", 23)
SetMemoryPoolSize("Weapon", weaponCnt)

SetSpawnDelay(10.0, 0.25)
--ReadDataFile("dc:BAA\\BAA.lvl", "BAA_conquest")
ReadDataFile("dc:BAA\\BAA.lvl", "BAA_WAVE")
SetDenseEnvironment("false")
I can't find anything in the world wrong with the lua, I've copied it line by line from tat2g_eli yet it still crashes on maul and dooku, and grievous has no head. I've tried commenting a few things out, but with no effect.

Re: Certain stock villians crash

Posted: Mon Jun 29, 2009 2:28 pm
by Maveritchell
So when you say "I copied it line-by-line" you are of course omitting the fact that you're also loading in a number of other units that have melee animationbanks and combos. :wink:

Re: Certain stock villians crash

Posted: Mon Jun 29, 2009 2:35 pm
by RepSharpshooter
But I commented those out :(

I even just now commented out all the local teams, same problem.

EDIT: maybe it's a munging issue

EDIT2: It was, for some reason it stopped copying over the munged files. Good to know I'm not insane. But if so, I'll still have this memory problem when I add the local sides back in.

Re: Certain stock villians crash

Posted: Mon Jun 29, 2009 2:45 pm
by Maveritchell
What you have is an animation error, so something that's "too much" is getting loaded in somewhere. I'd back up parts of your script and just edit in blocks straight from tat2g_eli - like replacing the whole ScriptInit (with of course keeping your .wld loaded). It looks like you're fine, so unless I'm missing something obvious your best course of action is just to replace until it works and then work backwards.

Re: Certain stock villians crash

Posted: Mon Jun 29, 2009 3:13 pm
by RepSharpshooter
Message Severity: 3
.\Source\SoldierAnimatorClass.cpp(1412)
Out of space for soldier animation banks (max 18)
:| Well I suppose I have to cut some of the units out.

Re: Certain stock villians crash

Posted: Mon Jun 29, 2009 3:16 pm
by MandeRek
I still dont get.. What is -out of animationbanks-? Does it mean to much custom anims are loaded, with the max of 18, and you probably have 3 per unit? Does this mean we can use 20 Jedi with one animbank and we're save?

Re: Certain stock villians crash

Posted: Mon Jun 29, 2009 5:09 pm
by Maveritchell
RepSharpshooter wrote:
Message Severity: 3
.\Source\SoldierAnimatorClass.cpp(1412)
Out of space for soldier animation banks (max 18)
:| Well I suppose I have to cut some of the units out.
Which was what I tried to mention earlier - stock hero assault is a good representation of the upper limit of what you can add in animationwise.
MandeRek wrote:I still dont get.. What is -out of animationbanks-? Does it mean to much custom anims are loaded, with the max of 18, and you probably have 3 per unit? Does this mean we can use 20 Jedi with one animbank and we're save?
You can have a combo memory error or an animationbank error. If you have too many different animation "states" loaded (this is what complicated melee animationbanks will have), the game will hit a limit and you'll get a combo error. The error above is a "banks" error, and it just means that too many different animationbanks are loaded. The stock hero assault adds 17 (each hero has a custom animationbank except for Luke).