Jump to content

Does anyone know how VASCO's player names work?


Recommended Posts

I'm looking into an issue for the Starfield Community Patch. 

VASCO will say the player's name if it's on his list of known names only in the English version. 

Does anyone know how this works? Is it some kind of engine magic? 

What I'm trying to find is the dialogue forms for VASCO saying things like "Captain <Player Name>" so I can see if they have some weird conditions on them which are failing in the non-English copies of the game. 

Link to comment
Share on other sites

I already told you on Discord that these lines don't exist in the ESM. I think a script or engine directly takes one of the game settings with "sDefaultPlayerAddress" in them and then combines the "Captain" in it with player name. It's just a guess though.

Link to comment
Share on other sites

On 1/17/2024 at 1:21 PM, SKK50 said:

Similar to Codsworth in Fallout 4, its an engine level function 

Some pointers here, elaborate via @fireundubh on discord.

Thanks, although that doesn't help beyond knowing which names are available. I assume it's not in the plugins but something in the EXE itself. 

Link to comment
Share on other sites

  • 2 months later...
On 4/4/2024 at 12:57 AM, RaidersClamoring said:

I'm tempted to chop up VASCOs voice files so that more names can be added, or attempted.

I just took a look at the EXE.. it seems like the game performs a strcmp check for sLanguage:General and the getter function only proceeds to find the player address (which is mandatory) if the interface language index (appear to be enumerated, 19 in total) is english (some kind of boolean check for "is localized" it seems). The function references ..\Starfield\Data\Misc\PA.dat (I guess "player address".dat). This is where the list of the supported player names are. About the .dat: human readable file, names are in alphabetical order, in 3 columns either for the three valid player address titles: Male, Female, Unspecified or for the different accents Vasco can spell, I'm not sure.. It's packed in Starfield - Misc.ba2. Supposedly, if you add new names to this file, you can expand the list if Vasco has a matching .wem voice file.

(Notes: this is just a theory based a quick reverse engineering, I haven't tried to hack the game code to work with other languages or edited the .dat file to verify it).

Edited by LarannKiar
Link to comment
Share on other sites

On 4/7/2024 at 3:23 PM, LarannKiar said:

I just took a look at the EXE.. it seems like the game performs a strcmp check for sLanguage:General and the getter function only proceeds to find the player address (which is mandatory) if the interface language index (appear to be enumerated, 19 in total) is english (some kind of boolean check for "is localized" it seems). The function references ..\Starfield\Data\Misc\PA.dat (I guess "player address".dat). This is where the list of the supported player names are. About the .dat: human readable file, names are in alphabetical order, in 3 columns either for the three valid player address titles: Male, Female, Unspecified or for the different accents Vasco can spell, I'm not sure.. It's packed in Starfield - Misc.ba2. Supposedly, if you add new names to this file, you can expand the list if Vasco has a matching .wem voice file.

(Notes: this is just a theory based a quick reverse engineering, I haven't tried to hack the game code to work with other languages or edited the .dat file to verify it).

That's some nice scouting! Sounds like a loose files replacement could be possible? That might be the one file where it isn't possible though. I'll try. Do the wem files have unique numbers across the board? (Never mind: the address audio files have plain text names).

 

Link to comment
Share on other sites

All right, I got back to Starfield and finished decoding the name functions..

12 hours ago, RaidersClamoring said:

That's some nice scouting! Sounds like a loose files replacement could be possible? That might be the one file where it isn't possible though. I'll try. Do the wem files have unique numbers across the board? (Never mind: the address audio files have plain text names).

 

Yes. I added "Brittany    Brittany    Brittany" to "pa.dat" at line 125, right between the lines "Brigner    Brigner    Brigner" and "Brock    Brock    Brock". (Brittany isn't in the vanilla name list).

Then I extracted the Vasco's vanilla voice file "howard.wem" from "Starfield - Voices02.ba2". Renamed it to "brittany.wem". Full file path: ..\Starfield\Data\sound\voice\starfield.esm\robotmodelavasco\brittany.wem

Vasco could address a player named Brittany. (Of course, "Captain Howard" was recorded in the file but after enabling subtitles "Captain. Brittany" could be read so extending the name list by editing "pa.dat" is possible).

 

I made a simple SFSE plugin that patches the vanilla code for other languages. It works like this:

  - get the interface language: read it from its INI setting sLanguage:General

  - get the index of this language by calling the native function BGS made

  - locate the player address getter function then patch that portion of its code that short-circuits it if the interface language is not English

      - "patch that portion of its code": use the actual language index defined in sLanguage:General instead of the hardcoded value of English (index = 1) so that function always proceeds to get the player's name

Limitations:

   - the plugin patches the code only once, right after game data is loaded into the memory; if one changes the language ingame, the code will compare it to the old value so it won't work

       - this issue is only theoretical because changing the interface language for example with [SetINI "sLanguage:General fr] is technically allowed but it won't do anything: interface language cannot be changed ingame; sLanguage:General must be set before the game is opened

Notes:

  - the plugin is address independent (I kept the plugin environment for earlier EXE versions, the affected functions haven't been changed and I don't think BGS would change it anytime soon)

  - I tested the plugin with French and German languages, not all..

  - I may upload it later though I'm not sure many would be interested

Update: released the plugin, "Native Player Name Support for Vasco in Localized Game Versions".

Edited by LarannKiar
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...