Understanding Herostat.engb

Started by thetommyboy2002, January 10, 2007, 06:37AM

Previous topic - Next topic
This thread is to discuss and exchange information regarding Herostat.engb.
If you don't know where it is, or how to edit it, or anything else, heres a quick guide:
Herostat.engb is found in the "data" directory. It is, it seems one of the most important files in the game, but seems quite quirky and mysterious in some ways. It can be edited with a hex editor, but you are better off decompiling it with NBA2kstuff's excellent "XMLB compiler/decompiler IDE" and then editing the resulting .xml file in a text editor.
By editing Herostat we can add characters, edit existing ones, change their names, animations, powersets, menu position, number of skins, voices and no doubt other things too.

What I am currently curious about is:
how the stats for each character break down.
So if we take a random character, say Thor:


   stats {
   ailevel = 1 ;
   autospend = bruiser_light ;
   body = 7 ;
   characteranims = 10_thor ;
   charactername = Thor ;
   level = 1 ;
   menulocation = 5 ;
   mind = 8 ;
   moveset1 = moveset_flying ;
   name = Thor ;
   playable = true ;
   powerstyle = ps_thor ;
   scriptlevel = 3 ;
   skin = 1001 ;
   skin_01_name = Ultimate ;
   skin_02 = 02 ;
   skin_02_name = Classic ;
   skin_03 = 03 ;
   skin_03_name = Beta Ray Bill ;
   skin_04 = 04 ;
   skin_04_name = Asgardian Armor ;
   sounddir = thor_m ;
   strength = 6 ;
   team = hero ;
   textureicon = 23 ;
      Race {
      name = Mutant ;
      }

      Race {
      name = XMen ;
      }

      talent {
      level = 1 ;
      name = thor_p1 ;
      }

      talent {
      build = e3 ;
      level = 1 ;
      name = thor_p2 ;
      }

      talent {
      build = e3 ;
      level = 1 ;
      name = thor_p6 ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = flight ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_segment ;
      nonmenuonly = true ;
      showskin = hammer_back_segment ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_segment ;
      nonmenuonly = true ;
      showskin = hammer_back_segment ;
      weaponevent = true ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_back_segment ;
      menuonly = true ;
      showskin = hammer_segment ;
      }

      StatEffect {
      anim = flying ;
      effect = char/thor/ability_fly ;
      fxlevel = 1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

   }






Some of it is self explanatory, but one at a time lets look at the lines .

   stats {                           -------------this is the opening of the stats for a character, hence the open bracket

   ailevel = 1 ;                     -------------ailevel always set to 1. Can it be higher? Lower?

   autospend = bruiser_light ;       -------------controls autospending as the char levels up.Types= bruiser, bruiser_light, support, support_heavy

   body = 7 ;                        -------------either 7, for bruisers(thing,thor), or 5 for support(Surfer, storm)

   characteranims = 10_thor ;        -------------picks the animation (keyframes) set used by the character. How they move, punch, fly, run etc.

   charactername = Thor ;            -------------sets the name that the character is called in-game

   level = 1 ;                       -------------sets the starting level of the character.

   menulocation = 5 ;                -------------where in the character selection menu screen the character appears. Will accept non-existant values to some extent, ie 38 in a game that has only 29 positions.

   mind = 8 ;                        -------------ranges from 4(thing,cage,colossus) through 8(spidey,elektra,deadpool) up to 12(iceman,surfer,storm).Does this set some sort of AI level? Resistance to psychic powers? Temperament?
 
   moveset1 = moveset_flying ;       ------------only present in flyers

   name = Thor ;                     ------------the name the character has "behind the scenes" ie when referenced in other files?

   playable = true ;                 ------------everyone in herostat gets "true" here, though the PSPextra characters have the line prefaced by one that reads:"   platform = psp ;"
 
   powerstyle = ps_thor ;            ------------the powerstyle used

   scriptlevel = 3 ;                 ------------always "3". Dunno what it does.

   skin = 1001 ;                     ------------the first skin/costume used

   skin_01_name = Ultimate ;         ------------how its named in the costume select menu screen

   skin_02 = 02 ;                    ------------second skin/costume

   skin_02_name = Classic ;          ------------name of second skin

   skin_03 = 03 ;
   skin_03_name = Beta Ray Bill ;
   skin_04 = 04 ;                    ------------by copying/pasting/renaming here you can add another two selectable skins to the character, as long as you edit their talents file, have the skins in actors, and packages. No passives on skin 5 or six as yet. No idea where six skin limit is set.
 
   skin_04_name = Asgardian Armor ;

   sounddir = thor_m ;              -------------the voice used

   strength = 6 ;                   -------------now this intrigues me. Thor gets a 6, but Wolverine a 10. 10= thing, ronin, wolverine, cap marvel, black panther, blade, cap america, daredevil, colossus. 6= Deadpool, Elektra, thor, ghostrider, ironman, spiderman. 4= human torch, iceman, invisiblewoman, silversurfer, storm, warbird, hawkeye, dr strange. So it seems like 10= melee scrapper/bruisers, 6 some melee,some ranged, and 4= non scrappers with good ranged powers. Clearly Thor has been Nerfed.

   team = hero ;                    ------------presumably what helps the computer controlled npc's villains, teammates etc decide who hits whom.

   textureicon = 23 ;               ------------no idea. Some characters share a number (ie 7=thing,colossus,spidey,spiderwoman, and 5=cap, doc strange, human torch, invisiblewoman, fury, cage)

      Race {
      name = Mutant ;               -------------leftover from xml2? Cause apparently everyones a mutant.
      }

      Race {
      name = XMen ;                 -------------leftover from xml2? Cause apparently everyones an xman. Except deadpool,and Moon knight who are "Brotherhood"
      }

      talent {                     --------------links to entries in talents and powersets
      level = 1 ;
      name = thor_p1 ;
      }

      talent {
      build = e3 ;
      level = 1 ;
      name = thor_p2 ;
      }

      talent {
      build = e3 ;
      level = 1 ;
      name = thor_p6 ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {                             ------------flying
      level = 1 ;
      name = flight ;
      }

      talent {                             ------------might means you can pick up bigger boxes, smash through walls
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

      Multipart {                   -------------if they have swords,guns,bows,hammers etc this is where its defined
      health = 0 ;
      hideskin = hammer_segment ;
      nonmenuonly = true ;
      showskin = hammer_back_segment ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_segment ;
      nonmenuonly = true ;
      showskin = hammer_back_segment ;
      weaponevent = true ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_back_segment ;
      menuonly = true ;
      showskin = hammer_segment ;
      }

      StatEffect {                        -------------defines fx that play on flying, like thors whirlwind etc
      anim = flying ;
      effect = char/thor/ability_fly ;
      fxlevel = 1 ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

   }                                     -------------closing bracket, end of stats

January 10, 2007, 07:00AM #1 Last Edit: January 10, 2007, 07:21AM by Noelemahc
Let me elaborate a bit.

Textureicon is another leftover from XML2, this is the icon for the portrait to be shown in its drop-down character selector menu (just came back from trying to carefully import the XML2 selection menu into MUA only to find that even after I paste the WHOLE contents of the UI folder it won't work -- clearly, something's wrong with this picture!). Found in UI/MODELS/CHARACTERS.

The Mutant/Xmen tags are indeed a leftover from XML2 where it was important for some dialogue scripts to know whether your kid is a goodie or a baddie. Makes no impact here. I wonder if the game will CTD or not if we kick those altogether.

You've also missed the platform_hidden command attached to Colossus and Moon Knight, which, naturally, is the reverse of platform -- instead of defining the ONLY platform where this section will be read, it defines the ONLY platform on which it won't work. CG and GC are interchangeable parameters for this denoting "current-gen". Obviously, NG means next-gen. The other valid keys are PSP, PS2, PC, 360 and I-forgot-what for X-Box. You can see all the variants inside of colors.xmlb.

ailevel is 2 for all the PSPers, at least for me, by the way.

characteranims defines two files, actually. XX_charname.igb, which governs the animations in the menu and the walk; and XX_charname_4_combat.igb, which governs all the battle and power animations. Should some animations be called and not be present in either of these two, it will be looked for in 00_defaultman.igb for the first one and whatever fightstyle_xxx.igb that is defined in the end. I think that creative editing can allow us to use XML2 skeletons without even having to subst the default fightstyle IGB itself, we just edit the herostat.

The names used as arguments in the multipart sections are defined in the character model and the character powerstyles (where they are set up as short subfunctions to put away and draw every one of them, as two to four commands are actually necessary to make one appear).

All the PSP chars also have the XML2 leftover portions:
Quotepower1 = power1 ;
   power2 = power2 ;
   power3 = power3 ;
   power4 = team_xtreme ;
Which are defined before the powerstyle. This is because XML2 used a different "animation names to power names" colocation principle and these had to be defined by hand. Carve open your XML2 herostat for examples.


The Effects!
How the effects work is a universal fact, not limited to the herostat alone. Example:
QuoteStatEffect {
      bolt = Bip01 Spine2 ;
      effect = char/captmarvel/special_aura ;
      }
StatEffect means it will be there regardless of what happens. bolt is the bolton point (in this case, one of the spine portions), the point to which the effect is attached. Ghost Rider's on his head, obviously, and Torch has them all over his body. effect itself defines the filename to be called, with the path beginning from the effects folder. Note the absence of extentions on all of the files. This means that file types are hardcoded, which poses a limit on how many speeeling mistakes per filename you can make.

The build command found in all the characters present in demo builds (Thor, Cap, Wolvie, Spidey) defines in which builds a particular section (mostly enabling powers before the level needed to attain them is reached) should be active. Lack of this command means active in all builds. Note that there IS a key for the "full game" build, according to richpresence.xmlb, it is normal.

The health attribute in MultiPart sections is there for bosses. Set this above zero, and the object would be damageable -- and, eventually, can be broken or ripped off. Not that I remember ANY place where this is actually used, but that's how it goes.

EDIT: Uh, just noticed. You mistake body, mind and strength for something they are not -- these are just the starting values for the attributes of chars. They're all tied in to the chosen pattern of autoleveling/autospending.

Crimson Dynamo says:
In Soviet Russia, the games mod YOU!

If anyone needs any art for icons or portraits, feel  free to ask, I'll see what I can do.

Quote from: Noelemahc on January 10, 2007, 07:00AM
The Mutant/Xmen tags are indeed a leftover from XML2 where it was important for some dialogue scripts to know whether your kid is a goodie or a baddie. Makes no impact here. I wonder if the game will CTD or not if we kick those altogether.
Actually, they also changed the outcome of certain events (there were points where you could avoid boss battles/access secret rooms if you were Brotherhood).


Also, to further clarify, the reason characters have 2 names is because they are referenced differently in files/in-game. For instance, Black Panther's in-game name is 'Black Panther', whereas his filename (the way all files reference him)is 'BlackPanther'. Some are more drastic, like 'Ms. Marvel''s filename being 'Warbird'.

Yesss. The second name's definition affects the following:
*Team-up bonuses
*Scripted talks (i.e. have that character on team, get special dialogue)
*Announcer in selection menu (can't go anywhere without'im!)
*Special item usability (obvious)
*Packages to be loaded (charname_modelcode, remember?)

Crimson Dynamo says:
In Soviet Russia, the games mod YOU!

If anyone needs any art for icons or portraits, feel  free to ask, I'll see what I can do.

NBA2kstuff's excellent "XMLB compiler/decompiler IDE

where do you get this and where do i decompose to????

sorry i'm new don't know anything about modding....

Quote from: Turbod on January 11, 2007, 03:00PM
NBA2kstuff's excellent "XMLB compiler/decompiler IDE

where do you get this and where do i decompose to????

sorry i'm new don't know anything about modding....

Where have you looked?
Just a crazy suggestion, but why not try reading the other threads in the forum for five minutes before posting your questions?
It took me 4 seconds to see the thread titled "New V1.0: XMLB GUI Compiler IDE" started by NBA2kstuff.
It's in there.

The attributes mind and strength in the herostat refer to focus and strike. That is why Wolverine has higher "strength" than Thor.

some of the probabilties, specifically the simpler
anotated with ~


}                                  ~ the end of the previous char file

   stats {                         ~ the { is pointing to another file
   ailevel = 1 ;
   autospend = bruiser_light ;     ~ when the autospend points option
                                     is enabled...
   body = 7 ;                      ~ starting "body points"
   characteranims = 10_thor ;      ~ the chars animations file, like
                                     freedom forces KF file tommy
   charactername = @DATA@THOR ;    ~ where@characters-name.
   level = 1 ;                     ~ chars starting level, i assume
                                     unlockable chars like daredevil,
                                     ect., start higher to even them
                                     out with the rest
   menulocation = 5 ;              ~ whats that word mean?
   mind = 8 ;                      ~ similar to body i think?
   moveset1 = moveset_flying ;     ~ points to an animation/reaction set
                                     likley for jumping or flying?
   name = Thor ;                   ~ his display name
   playable = true ;               ~ you can play as thor
   powerstyle = ps_thor ;          ~ his powerstyle filename
   scriptlevel = 3 ;               ~ ??? might point to specific
                                     storyline involvements, like if
                                     thor talks to Loki, Loki says...
   skin = 1001 ;                   ~ his 1st skin, in Thors case his
                                     Ulimates one
   skin_01_name = @SKINS@1001 ;    ~ directory@filename
   skin_02 = 02 ;                    "                      "
   skin_02_name = @SKINS@1002 ;
   skin_03 = 03 ;
   skin_03_name = @SKINS@1003 ;
   skin_04 = 04 ;
   skin_04_name = @SKINS@1004 ;      "                      "
   sounddir = thor_m ;             ~ voicepack filename
   strength = 6 ;                  ~ beginning strength level
   team = hero ;                   ~ ??? alliegance, why???
   textureicon = 23 ;              ~---beats me!!---
      Race {
      name = Mutant ;
      }

      Race {
      name = XMen ;
      }

      talent {                     ~ his overall begin stats?
                                     has to start at level 1 then
                                     increase, like a base value?
                                     the rest would be his starting
                                     abilities, agian base valued,
                                     ( he can fight, block, interact/build,
                                       as well as fly, and hes mighty,
     
      level = 1 ;                   
      name = thor_p1 ;
      }

      talent {
      build = e3 ;
      level = 1 ;
      name = thor_p2 ;
      }

      talent {
      build = e3 ;
      level = 1 ;
      name = thor_p6 ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = flight ;
      }

      talent {
      level = 1 ;
      name = might ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }
                                  ~ strings for separate mesh parts,
                                    in his case Mjnoir, like Nightcrawlers
                                    tail in XML2,ect.,
      Multipart {                       
      health = 0 ;
      hideskin = hammer_segment ;
      nonmenuonly = true ;
      showskin = hammer_back_segment ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_segment ;
      nonmenuonly = true ;
      showskin = hammer_back_segment ;
      weaponevent = true ;
      }

      Multipart {
      health = 0 ;
      hideskin = hammer_back_segment ;
      menuonly = true ;
      showskin = hammer_segment ;
      }

      StatEffect {                       ~ enter "State" flying and
                                           use corresponding animations and effects
      anim = flying ;
      effect = char/thor/ability_fly ;
      fxlevel = 1 ;
      }
                                         ~ the set of moves, stats, ai,
                                           ect., he begins with untill the player
                                           modifies these variables.
      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

   }                                     ~ end char line



                overall these lines seem to tell the program
                all of Thors basics. They are then changed by
                the gamer and the updated, or + variables stored
                in the save files, but it seems to appear more likley
                in the \My Documents\Activision\Marvel Ultimate Alliance\Save\settings.dat

          all only on first glance, hope it stirs some ideas.

I just can´t understand one thing. Like I want to replace one character (for example Elektra) for the Cyclops mod. So I have to go to the herostat.engb and change the stats from Elektra and put Cykes. And then what? Because I can´t make this work.

Quote from: Legend_Killer9 on March 03, 2007, 03:50PM
I just can´t understand one thing. Like I want to replace one character (for example Elektra) for the Cyclops mod. So I have to go to the herostat.engb and change the stats from Elektra and put Cykes. And then what? Because I can´t make this work.

Herostat.+Talent files.+Powerstyles.+Packages.+Mesh/skin.+Icons.+Hud_head.+Sounds.= character added/replaced.



All detailed around the forum..in various threads.
Would that it were as simple as just editing herostat...but sadly those others need setting up too.

well if you've extracted someone's pre-made character files into the proper directories and are not overwriting other characters (ie the newly installed files use a separate id number) you can use that number to place the new character into the Character Select through herostat fairly easily. overwrite the character you want to replace with the new character's herostat info, using the same menulocation as the character you just overwrote.. recompile.

Quotewhen the autospend points option is enabled...
Nope. The profile for autospending of base points on levelup (Body, Mind, Focus).
Quotechars starting level, i assumeunlockable chars like daredevil, ect., start higher to even them out with the rest
IIRC, this affects starting level, period. The unlockables are evened out by the same script that keeps the inactive characters leveling up along with your active ones.
Quotewhats that word mean?
Slot in character selection screen this character appears in.
Quotemight point to specific storyline involvements, like if thor talks to Loki, Loki says...
No, THOSE are defined in specific dialogue files. This is more likely attached to the AI behaviour type.
Quotealliegance, why???
So the IFF scripts of the NPCs would work right (i.e. villains would attack him and SHIELD agents would aid him).
Quoteenter "State" flying and use corresponding animations and effects
See above, StatEffect stands for "Static Effect", i.e. an effect that keeps showing and showing. In this case, it is attached to the Flying animation and the effect is thor/ability _fly.
Quotehe can fight, block, interact/build, as well as fly, and hes mighty,
Be honest, is English not your first language? "Build" stands for what version of the game a particular section appears in (in this case, the E3 demo build gives him some powers prematurely for obvious purposes). The valid options are E3, DEMO1, DEMO2 and NORMAL. See RICHPRESENCE.XMLB for examples.
Quoteall only on first glance, hope it stirs some ideas.
How is this better than the examples covered in the first two posts of this thread?

Crimson Dynamo says:
In Soviet Russia, the games mod YOU!

If anyone needs any art for icons or portraits, feel  free to ask, I'll see what I can do.

Well Kfcrispy I have the Cyclops mod with everything in there. The packages, huds, textures etc. Then I decompiled the herostat.engb and put Cykes in Elektras place. When I went to play the place where Elektra should be is empty but the name bar is there "Cyclops". Then I choose him and the game crashes. So what are the proper directories?

hmm this will need more info. i'll install the cyclops mod myself or at least check out the files to determine it. for now, can you past what you put into for the Cyclops herostat part?

stats {
   ailevel = 1 ;
   autospend = support ;
   body = 7 ;
   characteranims = 204_cyclops ;
   charactername = Cyclops ;
   level = 1 ;
   menulocation = XX ; <- set this as you please (I did put Elektra number 9 here)
   mind = 8 ;
   name = Cyclops ;
   playable = true ;
   powerstyle = ps_cyclops ;
   scriptlevel = 3 ;
   skin = 20401 ;
   skin_01_name = Ultimate ;
   skin_02 = 02 ;
   skin_02_name = Classic ;
   skin_03 = 03 ;
   skin_03_name = Astonishing ;
   skin_04 = 04 ;
   skin_04_name = Original ;
   skin_05 = 05 ;
   skin_05_name = Age of Apocalypse ;
   sounddir = cyclop_m ;
   strength = 6 ;
   team = hero ;
   textureicon = 5 ;
      talent {
      level = 1 ;
      name = grab ;
      }

      talent {
      level = 1 ;
      name = block ;
      }

      talent {
      level = 1 ;
      name = cyclops_beam ;
      }

      talent {
      level = 1 ;
      name = melee_moves ;
      }

      talent {
      level = 1 ;
      name = fightstyle_default ;
      }

   } (the beginning of the next caracter)

Well I put this in Elektras place, compile the herostat and then replace this one for the one the game has (with Elektra).
Thanks a lot for you time on helping me.