• Welcome to Freedom Reborn Archive.
 

Built-In Descriptions

Started by BentonGrey, February 13, 2007, 08:06:15 PM

Previous topic - Next topic

BentonGrey

Howdy guys, I have a bit of a mystery here.  I've been working on putting my DC characters into FF2 as built-ins, but I'm having some trouble with the descriptions.  Here's two of the entries giving me trouble, see if you can see something wrong with it that I can't.

ROBIN_01, robin
ROBIN_DESC_01, Dick Grayson, the Boy Wonder

AQUAMAN CLASSIC_01, aquaman classic
AQUAMAN CLASSIC_DESC_01, monarch of the seven seas

The names work (I think) but the descriptions don't show up in game.  The bios work just fine, so I'm not really sure what's wrong.  I'm using the same format on minions, and that's working fine as well.  These are both set as 'heroes' if that has anything to do with it.  Any help will be appreciated, thanks!

catwhowalksbyhimself

What about capitalization?

The engine sometimes sees capital and small letters are two different things--but it's inconsistent with it.  So if your character is actually robin or Robin, then it might not associate that with the label ROBIN that its looking for.

BentonGrey

I'm not entirely sure I follow, but are you saying it should look like this:

robin_01, robin
robin_desc_01, dick grayson, the boy wonder

or just that I shouldn't capitalize the things in the description?

stumpy

Actually, the language files are one area of the game where case-sensitivity isn't an issue. (Except that upper-case letters in the descriptions show up bolded in the game. For that reason you usually don't want to use things like proper name capitalization.)

The entries look fine to me. The usual culprits in this situation are 1) incorrect Primary Data Path, Input Directory, or Output Directory in FFEdit and 2) slightly different name of the character entry (e.g. he might be called aquaman_classic instead of aquaman classic).

BentonGrey

Nope to all of the above Stumpy :(.  The others I set up at the same time are all working.  The names are the same...I just can't figure it out.

BentonGrey

Alright, some further experimentation, and this seems to only be affecting heroes.  The villains and minions seem to be displaying properly, but the heroes, prepared in the EXACT same way....inexplicably don't have a tag.  Everything else works, their bios, their powers, but just not their tags....I don't get it...

I also tried different combinations of capitalization and non-capitalization...no luck there either.  All lower, all caps, half one way half the other, nothing.

stumpy

I am assuming you alrerady tried this, but a quick check is that the Characters and Templates entry for aquaman shouldn't have spaces in it. That can cause trouble.

Meanwhile, check your email. I sent you a quick'n'dirty diagnostic tool that may help sort this. (It won't actually solve anything by itself, but it will print some info to a file we can look at.)

BentonGrey

D'oh!  Yes, it does have spaces, I'll fix that.  However, that doesn't explain Robin, Superman, and Batman.  I'll try that tool, thaks Stumpy!

:EDIT: I'm afraid I can't figure out how to use this thing you sent me Stumpy, ha, I need a bit of help...

stumpy

I'll send better instructions. Give those a shot.

BentonGrey

Haha, thanks Stumpy, that was a huge help!  Okay, here's what it printed out on Robin:

[spoiler]Report generated by C:\Documents and Settings\Owner\Desktop\langtest\langtest.exe on Wed Feb 14 15:03:09 2007

MODNAME = ffx3
CHARNAME = robin
PrimaryDataPath = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\FFX3
LangInputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang
LangOutputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English
robin does have a characters.dat entry
robin does have a objects.dat entry
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\lang\english\strings.dat> created on Wed Feb 14 01:50:01 2007
DAT name entry for robin is 'robin'
DAT desc entry for robin is 'the boy wonder'
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\lang\english\strings.txt> created on Wed Feb 14 01:48:36 2007
DAT name entry for robin is 'robin'
DAT desc entry for robin is 'the boy wonder'
character.dat entry for 'robin':
{'agility': 6, 'strength': 2, 'tier_a': ['robin boy wonder blow', 'robin circus combo', 'robin birdarang', 'robin birdarang bola', 'robin acrobatic kick'], 'VID': 'R3', 'alterEgo': '', 'AI': 'CZeroCost', 'powers': {'robin acrobatic dodge': {}, 'robin birdarang explosive': {}, 'robin birdarang bola': {}, 'robin smoke pellet': {}, 'robin circus combo': {}, 'robin birdarang': {}, 'robin acrobatic training': {}, 'robin boy wonder blow': {}, 'robin birdarang electric': {}, 'robin acrobatic kick': {}}, 'endurance': 3, 'attrib_start': 3, 'movementRadius': 1.0, 'tier_a_start': 3, 'tier_b_start': 3, 'charName': 'robin', 'tier_b': ['robin smoke pellet', 'robin birdarang electric', 'robin birdarang explosive', 'robin acrobatic training', 'robin acrobatic dodge'], 'CSBase': 'library\\cut_scenes\\Blackjack', 'camp_only': 0, 'isCustom': 0, 'speed': 4, 'energy': 3, 'characterAttributes': ['capedcrusader', 'wall climbing', 'nimble', 'danger sense']}
character.dat entry for 'robin':
{'pickupDistance': 2.4000000953674316, 'templateName': 'robin', 'material': 0.0, 'NIF': 'C:\\Program Files\\Irrational Games\\Freedom Force vs The 3rd Reich\\Custom\\Art\\library\\characters\\robin\\character.nif', 'elasticity': 0.0, 'complex': 60.0, 'mass': 75.0, 'useVoice': 1.0, 'skin': 'standard', 'class': 'GAME_OBJ_HERO'}
[/spoiler]

Here's Aquaman Classic, fixed to have no space:

[spoiler]Report generated by C:\Documents and Settings\Owner\Desktop\langtest\langtest.exe on Wed Feb 14 15:09:32 2007

MODNAME = ffx3
CHARNAME = aquaman_classic
PrimaryDataPath = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\FFX3
LangInputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang
LangOutputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English
aquaman_classic does have a characters.dat entry
aquaman_classic does have a objects.dat entry
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\lang\english\strings.dat> created on Wed Feb 14 15:07:06 2007
DAT name entry for aquaman_classic is 'aquaman classic'
DAT desc entry for aquaman_classic is 'king of the seven seas'
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\lang\english\strings.txt> created on Wed Feb 14 15:06:43 2007
DAT name entry for aquaman_classic is 'aquaman classic'
DAT desc entry for aquaman_classic is 'king of the seven seas'
character.dat entry for 'aquaman_classic':
{'agility': 4, 'strength': 5, 'tier_a': ['aqua deep sea punch', 'aqua monarch of the oceans', 'aqua telepathic attack'], 'VID': 'A3', 'alterEgo': '', 'AI': 'CZeroCost', 'powers': {'aqua atlantian physiology': {}, 'aqua monarch of the oceans': {}, 'aqua deep sea punch': {}, 'aqua telepathic attack': {}, 'aqua sonar burst': {}}, 'endurance': 5, 'attrib_start': 2, 'movementRadius': 1.0, 'tier_a_start': 2, 'tier_b_start': 3, 'charName': 'aquaman_classic', 'tier_b': ['aqua atlantian physiology', 'aqua sonar burst'], 'CSBase': 'library\\cut_scenes\\Alchemiss', 'camp_only': 0, 'isCustom': 0, 'speed': 4, 'energy': 4, 'characterAttributes': ['atlantian', 'jumper', 'hirsute', 'danger sense', 'solid skeleton']}
character.dat entry for 'aquaman_classic':
{'pickupDistance': 2.9000000953674316, 'templateName': 'aquaman_classic', 'material': 7.0, 'NIF': 'C:\\Program Files\\Irrational Games\\Freedom Force vs The 3rd Reich\\Custom\\Art\\library\\characters\\aquaman_classic\\character.NIF', 'elasticity': 0.0, 'complex': 229.0, 'mass': 120.0, 'useVoice': 1.0, 'skin': 'aquaman', 'class': 'GAME_OBJ_HERO'}
[/spoiler]

If you can make something out of all that, you sure no more than I do :cool:

stumpy

The only thing that pops out at me (except a couple typos in my code's output) is that you are having FFEdit read the text strings from C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\strings.txt, though you have entries for the characters in C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English\strings.txt. Of course, you may also have the right entries in the first location, but this is a potential source of trouble. My recommendation is usually to have the text files in the same place the DAT files end up (in the lang\english folder).

If that's not it, then I may not be much help. However, in a minute I will send you an updated version of the tester, that you can use just by double-clicking on the langtest.exe file (instead of using Run... or opening a Windows command prompt) and that fixes the little typos I left in the earlier version. Re-run using that version and re-post the results.

BentonGrey

Well, I'm not entirely sure what you mean by the first bit.  I have FFEdit set up so that the input path is the lang folder, and the output is the lang/english folder, because I thought you had to do that to generate the .dats.  I believe all of the entries are the same, however. 

:EDIT: Just checked, all the same.

Okay, here's the new one:

[spoiler]Report generated by C:\Documents and Settings\Owner\Desktop\langtest\langtest.exe on Wed Feb 14 17:59:25 2007

MODNAME = ffx3
CHARNAME = robin
PrimaryDataPath = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\FFX3
LangInputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang
LangOutputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English
robin does have a characters.dat entry
robin does have an objects.dat entry
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English\strings.dat> created on Wed Feb 14 15:07:06 2007
DAT name entry for robin is 'robin'
DAT desc entry for robin is 'the boy wonder'
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\strings.txt> created on Wed Feb 14 15:06:43 2007
TEXT name entry for robin is 'robin'
TEXT desc entry for robin is 'the boy wonder'
characters.dat entry for 'robin':
{'agility': 6, 'strength': 2, 'tier_a': ['robin boy wonder blow', 'robin circus combo', 'robin birdarang', 'robin birdarang bola', 'robin acrobatic kick'], 'VID': 'R3', 'alterEgo': '', 'AI': 'CZeroCost', 'powers': {'robin acrobatic dodge': {}, 'robin birdarang explosive': {}, 'robin birdarang bola': {}, 'robin smoke pellet': {}, 'robin circus combo': {}, 'robin birdarang': {}, 'robin acrobatic training': {}, 'robin boy wonder blow': {}, 'robin birdarang electric': {}, 'robin acrobatic kick': {}}, 'endurance': 3, 'attrib_start': 3, 'movementRadius': 1.0, 'tier_a_start': 3, 'tier_b_start': 3, 'charName': 'robin', 'tier_b': ['robin smoke pellet', 'robin birdarang electric', 'robin birdarang explosive', 'robin acrobatic training', 'robin acrobatic dodge'], 'CSBase': 'library\\cut_scenes\\Blackjack', 'camp_only': 0, 'isCustom': 0, 'speed': 4, 'energy': 3, 'characterAttributes': ['capedcrusader', 'wall climbing', 'nimble', 'danger sense']}
objects.dat entry for 'robin':
{'pickupDistance': 2.4000000953674316, 'templateName': 'robin', 'material': 0.0, 'NIF': 'C:\\Program Files\\Irrational Games\\Freedom Force vs The 3rd Reich\\Custom\\Art\\library\\characters\\robin\\character.nif', 'elasticity': 0.0, 'complex': 60.0, 'mass': 75.0, 'useVoice': 1.0, 'skin': 'standard', 'class': 'GAME_OBJ_HERO'}
[/spoiler]

Aquaman_Classic

[spoiler]Report generated by C:\Documents and Settings\Owner\Desktop\langtest\langtest.exe on Wed Feb 14 18:00:34 2007

MODNAME = ffx3
CHARNAME = aquaman_classic
PrimaryDataPath = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\FFX3
LangInputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang
LangOutputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English
aquaman_classic does have a characters.dat entry
aquaman_classic does have an objects.dat entry
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English\strings.dat> created on Wed Feb 14 15:07:06 2007
DAT name entry for aquaman_classic is 'aquaman classic'
DAT desc entry for aquaman_classic is 'king of the seven seas'
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\strings.txt> created on Wed Feb 14 15:06:43 2007
TEXT name entry for aquaman_classic is 'aquaman classic'
TEXT desc entry for aquaman_classic is 'king of the seven seas'
characters.dat entry for 'aquaman_classic':
{'agility': 4, 'strength': 5, 'tier_a': ['aqua deep sea punch', 'aqua monarch of the oceans', 'aqua telepathic attack'], 'VID': 'A3', 'alterEgo': '', 'AI': 'CZeroCost', 'powers': {'aqua atlantian physiology': {}, 'aqua monarch of the oceans': {}, 'aqua deep sea punch': {}, 'aqua telepathic attack': {}, 'aqua sonar burst': {}}, 'endurance': 5, 'attrib_start': 2, 'movementRadius': 1.0, 'tier_a_start': 2, 'tier_b_start': 3, 'charName': 'aquaman_classic', 'tier_b': ['aqua atlantian physiology', 'aqua sonar burst'], 'CSBase': 'library\\cut_scenes\\Alchemiss', 'camp_only': 0, 'isCustom': 0, 'speed': 4, 'energy': 4, 'characterAttributes': ['atlantian', 'jumper', 'hirsute', 'danger sense', 'solid skeleton']}
objects.dat entry for 'aquaman_classic':
{'pickupDistance': 2.9000000953674316, 'templateName': 'aquaman_classic', 'material': 7.0, 'NIF': 'C:\\Program Files\\Irrational Games\\Freedom Force vs The 3rd Reich\\Custom\\Art\\library\\characters\\aquaman_classic\\character.NIF', 'elasticity': 0.0, 'complex': 229.0, 'mass': 120.0, 'useVoice': 1.0, 'skin': 'aquaman', 'class': 'GAME_OBJ_HERO'}
[/spoiler]

[spoiler]Report generated by C:\Documents and Settings\Owner\Desktop\langtest\langtest.exe on Wed Feb 14 18:01:24 2007

MODNAME = ffx3
CHARNAME = superman
PrimaryDataPath = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\FFX3
LangInputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang
LangOutputDir = C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English
superman does have a characters.dat entry
superman does have an objects.dat entry
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\English\strings.dat> created on Wed Feb 14 15:07:06 2007
DAT name entry for superman is 'superman'
DAT desc entry for superman is 'the man of steel'
file <C:\Program Files\Irrational Games\Freedom Force vs The 3rd Reich\ffx3\Lang\strings.txt> created on Wed Feb 14 15:06:43 2007
TEXT name entry for superman is 'superman'
TEXT desc entry for superman is 'the man of steel'
characters.dat entry for 'superman':
{'agility': 3, 'strength': 3, 'tier_a': ['super punch'], 'VID': 'ED', 'alterEgo': '', 'AI': 'CZeroCost', 'powers': {'super punch': {}}, 'endurance': 3, 'attrib_start': 3, 'movementRadius': 1.0, 'tier_a_start': 3, 'tier_b_start': 2, 'charName': 'superman', 'tier_b': [], 'CSBase': 'library\\cut_scenes\\Eldiablo', 'camp_only': 0, 'isCustom': 0, 'speed': 3, 'energy': 4, 'characterAttributes': ['flier', 'bedevilled', 'kryptonian', 'heavy hitter']}
objects.dat entry for 'superman':
{'pickupDistance': 2.0, 'templateName': 'superman', 'material': 0.0, 'NIF': 'C:\\Program Files\\Irrational Games\\Freedom Force vs The 3rd Reich\\Custom\\Art\\library\\characters\\Superman_REN\\character.nif', 'elasticity': 0.0, 'complex': 190.0, 'mass': 90.0, 'useVoice': 1.0, 'skin': 'standard', 'class': 'GAME_OBJ_HERO'}
[/spoiler]

catwhowalksbyhimself

Actually, it usually works better if you DON'T set both the input and output paths.  By default, if only one is listed, it will us the same path for both.  I only use the output line.

Epimethee


stumpy

Thanks Épiméthée. It's a simple bit of code, but this sort of problem turns up enough that I thought a little tool to let us see how people have things configured would be a good diagnostic aid. I will send it to you.

Vis-a-vis FFEdit language paths: I agree with catwhowalksbyhimself, I have never had the process not work at all, but I end up confounding myself the least when I have the input folder blank and the output folder the same as the primary data path plus lang\english. For my own purposes, I keep the text files in the same place that the DAT files end up so that everything is in the same place and I don't accidentally change one and forget to change the other and then have to go through the five minute process of rebuilding the lang files after I realize what went wrong. It avoids confusion and it follows the example that IG uses for the main campaign. But, like I said, despite all that I don't think that is your problem here.

BentonGrey, all that I meant by the first bit is that you have a strings.txt in the lang folder and one in the lang\english folder. They don't have to be there. Technically, I think you can have it anywhere, as long as that's where you are telling FFEdit to look for it, which you are.

(Just to review and make sure I am not totally out to lunch, you are saying that when you run the FFX3 mod, you can hover the mouse over one of these characters and no description shows up in the status bar. The name shows up, but no description, like "the boy wonder". Let me know if I am off-base with that.)

In fact, it seems from the output of the little tester program, it looks like the names and descriptions for robin, aquaman_classic, and superman all made it fine into the DATs used by the FFX3 mod. That means the game should have access to them.

The only things that occur to me to check are that 1) you are actually running the FFX3 mod (e.g. check that your shortcut didn't get messed up somehow), that 2) you have restarted the game since generating the language files, or that 3) the characters you are spawning in the game don't actually have the templates we think they do.

I think 1) and 2) are low-percentage shots. Check it, but I expect you would know if that were the problem. For 3), the most likely thing would be that a custom character (a HERO file character) is being spawned instead of the built-in version. To make sure, take these built-in characters as your squad into the game (either RR or campaign mission), check the the descriptions are still missing, and then open up the console. Enter (paste in) the following line:
for h in getAllHeroes(): print '%s: %s %d (%s)' % (h,Object_GetTemplate(h),Object_GetAttr(h,'complex'),GetCharacterData(h).get('charName'))
Let us know what shows up in your script.log when you do that.

stumpy

Well, I decided to open up the game for the first time in a week (yeah, I know  :oops:) and take a look at this in a RR session. It seems that built-in hero characters are being spawned from custom templates. I am not sure why that is going on, but the third thing I mentioned above is at play here. It looks like the problem we are seeing has nothing to do with language file generation, per se. It's just that the characters being spawned in the RR are not really spawned from their proper templates. I did a quick check and this doesn't seem to be the case in the campaign itself.

I don't recall this happening before. Have we made a change as to how RR spawns are done?

Epimethee

Quote from: stumpy on February 14, 2007, 06:07:41 PM
Well, I decided to open up the game for the first time in a week (yeah, I know  :oops:)
Ép. gets ready to throw the first stone, but then tries to remember when was the last time he actually launched the game to, you know, play it; Ép. puts the stone back on the ground. The ground says thanks, because it's a well behaved ground.

QuoteIt seems that built-in hero characters are being spawned from custom templates. I don't recall this happening before. Have we made a change as to how RR spawns are done?
Well, so much has been changed, this probably has been; but certainly not recently, AFAIK.

catwhowalksbyhimself

Something's tickling the back of my mind, like that should sound familiar.

Don't know why.  I read all the messages and changes, but only pay attention to the parts I both understand and care about. :P

stumpy

It really seems like one of these RR oddities. After all, the game passes us the list of templates, so there wouldn't be any "custom_template_#" templates if the engine didn't make them and, as far as I know, we can't prompt it to do so. So, I would think this has been there the whole time. It just seems surprising that we haven't noticed it before.

I wonder if there is something about the character or object information that tells the engine to create a custom template for it? We know that it does so for hero AI characters spawned as enemies in the RR, but I don't recall it doing so for built-ins (either heroes or villains) spawned for the squad. (And, we make some changes to those characters when spawned from the Enemies list, but I didn't think we did for the squad characters...)

Of course, I just started up what I think is the unmodified version of the game (with me, you can never tell) and saw the same thing in the RR using Alchemiss and Minute Man. So, maybe this has always been an issue...?  :huh:

Can anyone who has done a fresh install of the unmodified game recently do a quick check to see if built-in characters in the Rumble Room have their descriptions when you point the mouse over them?

BentonGrey

Wow, weird stuff....but they should have their descriptions in the campaign either way?  Well, at least that means I can stop worrying about it and get on with adding things in.  I'll keep an eye on this, 'cause I would really like to be able to see the tags in RR.

Epimethee

Am I reading correctly what the issue you mention is, Stumpy?

If yes, the answer is, no, characters in the Rumble Room never (in FF1 or FFvsTTR, FFX or not) had correct descriptions. The Rumble Room mode is a hack of multiplayer; and because of that, every character in RR is recreated as a custom character, more or less. (But then, you know that better than I.)

catwhowalksbyhimself

Hmm. . . while that makes sense for FF1, since that feature was added later, they should have done something about that in FFvTTR.

stumpy

Quote from: Epimethee on February 14, 2007, 09:04:14 PMAm I reading correctly what the issue you mention is, Stumpy?

If yes, the answer is, no, characters in the Rumble Room never (in FF1 or FFvsTTR, FFX or not) had correct descriptions. The Rumble Room mode is a hack of multiplayer; and because of that, every character in RR is recreated as a custom character, more or less. (But then, you know that better than I.)

It may well be that there never were proper descriptions in the RR, even for built-in squad heroes. For some reason (and maybe it's justs impending senility), I thought for sure my built-in Superboy had the right descriptions in the original Freedom Force Danger Room ("alien youth with titanic powers" :)).

But, the engine is selective about when it creates a 'custom_template_#' template for a character. Obviously, it must do so for heroes spawned as enemies in the RR so that the game's AI can know what team they are on. But, I didn't think there was any reason to do that for hero AIs spawned for the squad. Meanwhile, the engine definitely does not create a 'custom_template_#' template for all RR characters. E.g., if we spawn a character with a villain/minion AI as an enemy in the RR, he usually gets his real template.

Anyway, whatever is going on here, I suspect that changing it would involve destroying and then re-spawning the characters from their real templates (which wouldn't be that hard, since we know the template via GetCharacterData(char)['charName']). I just didn't recall things working this way before.

quiet

The only thing I have noticed is it seems very random if you get the descriptions or not.  It seems that whoever is an adversary seems to have their descriptions more consistantly, the heroes, I don't recall ever seeing them for the RR.  my $.02.

Epimethee

Quiet, I suppose it's because villains are often spawned by the skirmish mission code, depending on the skirmish mode; those should have their normal descriptions.