Pickysaurus Posted January 16 Share Posted January 16 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 More sharing options...
bartek3456 Posted January 16 Share Posted January 16 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 More sharing options...
Pickysaurus Posted January 16 Author Share Posted January 16 Possible fix: https://www.nexusmods.com/starfield/mods/1766 Link to comment Share on other sites More sharing options...
bartek3456 Posted January 16 Share Posted January 16 2 hours ago, Pickysaurus said: Possible fix: https://www.nexusmods.com/starfield/mods/1766 Correction: workaround Link to comment Share on other sites More sharing options...
SKKmods Posted January 17 Share Posted January 17 Similar to Codsworth in Fallout 4, its an engine level function Some pointers here, elaborate via @fireundubh on discord. Link to comment Share on other sites More sharing options...
Pickysaurus Posted January 22 Author Share Posted January 22 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 More sharing options...
RaidersClamoring Posted April 4 Share Posted April 4 I'm tempted to chop up VASCOs voice files so that more names can be added, or attempted. Link to comment Share on other sites More sharing options...
LarannKiar Posted April 7 Share Posted April 7 (edited) 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 April 7 by LarannKiar Link to comment Share on other sites More sharing options...
RaidersClamoring Posted April 11 Share Posted April 11 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 More sharing options...
LarannKiar Posted April 11 Share Posted April 11 (edited) 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 April 11 by LarannKiar Link to comment Share on other sites More sharing options...
Recommended Posts