Adding an extra hero

Discussion, progress updates, and downloads for the Dark Times and Rising Son mods.

Moderator: Moderators

Post Reply
User avatar
Jendo7
Sith
Sith
Posts: 1303
Joined: Wed Apr 01, 2009 6:37 pm
Location: Cambridge, England.
Contact:

Adding an extra hero

Post by Jendo7 »

I would like to add an extra hero with the other random heroes for Dark Times conquest to my map but I'm not sure where it should go in the lua. I would like to add the Tusken hero:

lead.lvl
"des_hero_tusk"

I've also added the Tusken, and Weequay units from dark.lvl as a third local side.

My lua:
Hidden/Spoiler:
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("TFURandom")
ScriptCB_DoFile("AIHeroSupport")

-- Empire Attacking (attacker is always #1)
ALL = 2
IMP = 1
-- These variables do not change
ATT = 1
DEF = 2

ReadDataFile("..\\..\\addon\\BDT\\data\\_LVL_PC\\core.lvl")

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"}
cp5 = CommandPost:New{name = "cp5"}



--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:AddCommandPost(cp5)

conquest:Start()

EnableSPHeroRules()

KillObject("fel1_bldg_destroyed_gunship3")

if not ScriptCB_InMultiplayer() then
herosupport = AIHeroSupport:New{AIATTHeroHealth = 4000, AIDEFHeroHealth = 4000, gameMode = "NonConquest",}
herosupport:SetHeroClass(ALL, herostrAll)
herosupport:SetHeroClass(IMP, herostrEmp)
herosupport:AddSpawnCP("CP1","CP1Spawn")
herosupport:AddSpawnCP("CP2","CP2Spawn")
herosupport:AddSpawnCP("CP3","CP3Spawn")
herosupport:AddSpawnCP("CP4","CP4Spawn")
herosupport:AddSpawnCP("CP5","CP5Spawn")
herosupport:Start()
else
end

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")

gcwera = math.random(1,4)

if not ScriptCB_InMultiplayer() then
bothan = "all_inf_bothan_offline"
if gcwera < 3 then
DecideUnitsANH(1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2)
allsoldier = "all_inf_soldier_anh"
allheavy = "all_inf_heavy_anh"
allmarksman = "all_inf_marksman_anh"
impsoldier = "imp_inf_soldier_anh"
impheavy = "imp_inf_heavy_anh"
impmarksman = "imp_inf_marksman_anh"
allsupport = "all_inf_honorguard"
impsupport = "imp_inf_darktrooper_p1"
elseif gcwera > 2 then
DecideUnits(2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2)
allsoldier = "all_inf_soldier"
allheavy = "all_inf_heavy"
allmarksman = "all_inf_marksman"
impsoldier = "imp_inf_soldier"
impheavy = "imp_inf_heavy"
impmarksman = "imp_inf_marksman"
allsupport = "all_inf_durosmerc"
impsupport = "imp_inf_heavymelee"
end
elseif ScriptCB_InMultiplayer() then
allsoldier = "all_inf_soldier"
allheavy = "all_inf_heavy"
allmarksman = "all_inf_marksman"
impsoldier = "imp_inf_soldier"
impheavy = "imp_inf_heavy"
impmarksman = "imp_inf_marksman"
allsupport = "all_inf_durosmerc"
impsupport = "imp_inf_heavymelee"
bothan = "all_inf_bothan"
herostrAll = "all_hero_oldben"
supportstrAll = "all_inf_clone"
herostrEmp = "imp_hero_marek"
supportstrEmp = "imp_inf_commander"
end

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("..\\..\\addon\\BDT\\data\\_LVL_PC\\ingame.lvl")
ReadDataFile("ingame.lvl")

SetMaxFlyHeight(70)
SetMaxPlayerFlyHeight (70)
SetGroundFlyerMap(1);

ReadDataFile("sound\\tat.lvl;tat2gcw")
ReadDataFile("dc:sound\\tds.lvl;tdsgcw")
ReadDataFile("..\\..\\addon\\BDT\\data\\_LVL_PC\\sound\\tes.lvl;tescw")
ReadDataFile("..\\..\\addon\\BDT\\data\\_LVL_PC\\sound\\bgl.lvl;bglgcw")
ReadDataFile("..\\..\\addon\\BDT\\data\\_LVL_PC\\SIDE\\dark.lvl",
"all_hero_bail",
allsoldier,
allheavy,
allmarksman,
"all_inf_moncaleng",
allsupport,
bothan,
impsoldier,
impmarksman,
impheavy,
"imp_inf_gunner",
impsupport,
"imp_inf_commando",
"imp_inf_jumptrooper",
"des_inf_weequay_gun",
"des_inf_weequay_melee",
"des_inf_tusk",
"des_inf_tusk_gun",
supportstrAll,
supportstrEmp)

ReadDataFile("..\\..\\addon\\BDT\\data\\_LVL_PC\\SIDE\\lead.lvl",
herostrAll,
herostrEmp)

ReadDataFile("..\\..\\addon\\BDT\\data\\_LVL_PC\\SIDE\\ift.lvl",
"imp_walk_atst")

ReadDataFile("SIDE\\imp.lvl",
"imp_fly_destroyer_dome")

ReadDataFile("dc:SIDE\\des.lvl",
"tat_walk_dewback_rider",
"tat_inf_jawa")

ReadDataFile("dc:SIDE\\TLS.lvl",
"tat_hover_landspeeder")

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

SetupTeams{
all = {
team = ALL,
units = 32,
reinforcements = 250,
soldier = { allsoldier,9, 25},
assault = { allheavy,1,4},
engineer = { "all_inf_moncaleng",1,4},
sniper = { allmarksman,1,4},
officer = { allsupport,1,4},
special = { bothan,1,4},

},
imp = {
team = IMP,
units = 32,
reinforcements = 250,
soldier = { impsoldier,9, 25},
assault = { impheavy,1,4},
engineer = { "imp_inf_gunner",1,4},
sniper = { impmarksman,1,4},
officer = { impsupport,1,4},
special = { "imp_inf_jumptrooper",1,4},
},

}

SetTeamName (3, "Savages")
AddUnitClass (3, "tat_inf_jawa", 1,4)
AddUnitClass (3, "des_inf_tusk", 1,4)
AddUnitClass (3, "des_inf_tusk_gun", 1,4)
AddUnitClass (3, "des_inf_weequay_gun", 1,4)
AddUnitClass (3, "des_inf_weequay_melee", 1,4)
SetUnitCount (3, 20)
AddAIGoal(3, "Deathmatch", 100)
SetTeamAsEnemy(ATT,3)
SetTeamAsEnemy(3,ATT)
SetTeamAsEnemy(DEF,3)
SetTeamAsEnemy(3,DEF)

AddUnitClass(IMP, supportstrEmp, 1, 4)
AddUnitClass(ALL, supportstrAll, 1, 4)

if ScriptCB_InMultiplayer() then
SetHeroClass(ALL, herostrAll)
SetHeroClass(IMP, herostrEmp)
else
end
Thanks for any help.
Last edited by Jendo7 on Sat Feb 05, 2011 2:24 pm, edited 2 times in total.
User avatar
Maveritchell
Jedi Admin
Jedi Admin
Posts: 7366
Joined: Mon Aug 21, 2006 11:03 pm

Re: Adding an extra hero

Post by Maveritchell »

Assuming you want this added as a selectable hero for either of the two playable teams, then the easiest thing to do is simply set up a condition that selects that may select that unit as a hero after the original random hero is chosen. E.g.

Code: Select all

herotusken = math.random(8)
if herotusken == 1 then
	herostrEmp = "des_hero_tusk"
end
You will also need to actually load in the hero from the lead.lvl (only mentioned since it is not done below). You may also want to consider using a Tusken unit as a support unit, although none of the DT-specific Tusken locals are set up to be as strong as a hero support should be. You could always simply make a Tusken unit and then load in Dark Times weapons on top of it, though, too.
User avatar
Jendo7
Sith
Sith
Posts: 1303
Joined: Wed Apr 01, 2009 6:37 pm
Location: Cambridge, England.
Contact:

Re: Adding an extra hero

Post by Jendo7 »

Thanks Mav, I got it working. I also added a 2 after if herotusken, as I changed the probability of certain heroes showing.

I may also take your suggestion of adding a Tusken as a support unit, as at the moment the local side I've set up are enemies to both faction's, so it doesn't make sense to have the Tusken Chieftan fighting it's own units, or I could make them friendlies towards the Empire.

I'll have to think about that one.

Thanks again :D

Revised ScriptInit section for modder's reference.
Hidden/Spoiler:
function ScriptInit()

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

gcwera = math.random(1,4)

if not ScriptCB_InMultiplayer() then
bothan = "all_inf_bothan_offline"
if gcwera < 3 then
DecideUnitsANH(1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1)
allsoldier = "all_inf_soldier_anh"
allheavy = "all_inf_heavy_anh"
allmarksman = "all_inf_marksman_anh"
impsoldier = "imp_inf_soldier_anh"
impheavy = "imp_inf_heavy_anh"
impmarksman = "imp_inf_marksman_anh"
allsupport = "all_inf_honorguard"
impsupport = "imp_inf_darktrooper_p1"
elseif gcwera > 2 then
DecideUnits(2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2)
allsoldier = "all_inf_soldier"
allheavy = "all_inf_heavy"
allmarksman = "all_inf_marksman"
impsoldier = "imp_inf_soldier"
impheavy = "imp_inf_heavy"
impmarksman = "imp_inf_marksman"
allsupport = "all_inf_durosmerc"
impsupport = "imp_inf_heavymelee"
end
elseif ScriptCB_InMultiplayer() then
allsoldier = "all_inf_soldier"
allheavy = "all_inf_heavy"
allmarksman = "all_inf_marksman"
impsoldier = "imp_inf_soldier"
impheavy = "imp_inf_heavy"
impmarksman = "imp_inf_marksman"
allsupport = "all_inf_durosmerc"
impsupport = "imp_inf_heavymelee"
bothan = "all_inf_bothan"
herostrAll = "all_hero_oldben"
supportstrAll = "all_inf_clone"
herostrEmp = "imp_hero_marek"
supportstrEmp = "imp_inf_commander"
end

herotusken = math.random(8)
if herotusken == 1 then
herostrEmp = "des_hero_tusk"
end
Last edited by Jendo7 on Wed Feb 02, 2011 2:49 pm, edited 1 time in total.
User avatar
Maveritchell
Jedi Admin
Jedi Admin
Posts: 7366
Joined: Mon Aug 21, 2006 11:03 pm

Re: Adding an extra hero

Post by Maveritchell »

Jendo7 wrote:Thanks Mav, I got it working. I also added a 2 after if herotusken, as I changed the probability of certain heroes showing.
The way that's written, it makes no difference whether the "herotusken" variable is set to trigger on 1, 2, 3, etc. As long as it's simply equal to a number and not a range, it's going to be a 1 in 8 chance of replacing the chosen random hero with the Tusken hero.
User avatar
Jendo7
Sith
Sith
Posts: 1303
Joined: Wed Apr 01, 2009 6:37 pm
Location: Cambridge, England.
Contact:

Re: Adding an extra hero

Post by Jendo7 »

Thanks for clearing that up, I changed it back to 1 :)

I am pretty clueless sometimes, when it comes to .lua code. :yes:

Edit: Mav, the Tusken Chief has ig-88's blaster rifle but I'm unable to select it, as there doesn't seem to be an option for it, yet the hero support unit uses it. Is there any particular key combination I need to use? Thanks!
User avatar
Maveritchell
Jedi Admin
Jedi Admin
Posts: 7366
Joined: Mon Aug 21, 2006 11:03 pm

Re: Adding an extra hero

Post by Maveritchell »

Jendo7 wrote:Edit: Mav, the Tusken Chief has ig-88's blaster rifle but I'm unable to select it, as there doesn't seem to be an option for it, yet the hero support unit uses it. Is there any particular key combination I need to use? Thanks!
That's because this unit wasn't set up to be played as by humans; the melee weapon is listed first in the .odf.

You can fix this by adding this code to your .lua, anywhere after the unit is loaded in:

Code: Select all

SetClassProperty("des_hero_tusk", "WeaponName1", "imp_weap_inf_igrifle")
SetClassProperty("des_hero_tusk", "WeaponName2", "des_weap_gaffi")
Note that this working is predicated on you also having loaded in whichever Tusken uses the gaffi stick weapon (but I assume this is loaded in anyway).
User avatar
Jendo7
Sith
Sith
Posts: 1303
Joined: Wed Apr 01, 2009 6:37 pm
Location: Cambridge, England.
Contact:

Re: Adding an extra hero (New Question 2:06 pm)

Post by Jendo7 »

Ok, thanks Mav :)

Edit: Just got that working but I've got one more question, sorry. I was just wondering if there is any way of disabling first person, due to the unit using the rebel pilot fpm. It's not a major issue as it's selectable but just on the off chance. Thanks!

That will be the last question. I promise :)
User avatar
Maveritchell
Jedi Admin
Jedi Admin
Posts: 7366
Joined: Mon Aug 21, 2006 11:03 pm

Re: Adding an extra hero (New Question 2:06 pm)

Post by Maveritchell »

Use SetClassProperty to set this property:

Code: Select all

forcemode                       = 1
User avatar
Jendo7
Sith
Sith
Posts: 1303
Joined: Wed Apr 01, 2009 6:37 pm
Location: Cambridge, England.
Contact:

Re: Adding an extra hero

Post by Jendo7 »

Thanks again. Silly me! I knew about that code in the .odf files but I didn't know it could work for .lua scripts.

I've just put in like this:
Hidden/Spoiler:
SetClassProperty("des_hero_tusk", "WeaponName1", "imp_weap_inf_igrifle", forcemode = 1)
SetClassProperty("des_hero_tusk", "WeaponName2", "des_weap_gaffi")


Hopefully that's it?. I'll just test it now.

I've still got a lot to learn about .lua. scripting as you can see.

Edit: Yep, that didn't work. I got this error message:
Hidden/Spoiler:
C:\BF2_ModTools\data_TJW\_BUILD\..\..\ToolsFL\Bin\luac.exe: ..\..\common\scripts\TJW\TJW1_eli.lua:76: `)' expected near `='
ERROR[scriptmunge scripts\TJW\TJW1_eli.lua]:Could not read input file.ERROR[scriptmunge scripts\TJW\TJW1_eli.lua]:Could not read input file. [continuing]
2 Errors 0 Warnings

ERROR[levelpack mission\TJW1_eli.req]:Expecting bracket, but none was found.
File : munged\pc\tjw1_eli.script.req(1)...

ucft <--
ERROR[levelpack mission\TJW1_eli.req]:Expecting bracket, but none was found.
File : munged\pc\tjw1_eli.script.req(1)...

ucft <--

2 Errors 0 Warnings
User avatar
Maveritchell
Jedi Admin
Jedi Admin
Posts: 7366
Joined: Mon Aug 21, 2006 11:03 pm

Re: Adding an extra hero

Post by Maveritchell »

Code: Select all

SetClassProperty("des_hero_tusk", "ForceMode", 1)
User avatar
Jendo7
Sith
Sith
Posts: 1303
Joined: Wed Apr 01, 2009 6:37 pm
Location: Cambridge, England.
Contact:

Re: Adding an extra hero

Post by Jendo7 »

Thank you Mav, much appreciated :D
lpriefer01
Recruit Womprat Killer
Posts: 6
Joined: Tue Mar 21, 2017 11:20 am
Projects :: No Mod project currently.
Games I'm Playing :: battlefront 2
xbox live or psn: No gamertag set

Re: Adding an extra hero

Post by lpriefer01 »

if and when i do add new heroes kyle katarn (mercenary) would be instead of vace thermil but how would i add another unit with another hero like dantooine rebel with x2 from bf3/elite squadron
Post Reply