SeanPesce / DXMD-Translations

Language translation framework for Deus Ex: Mankind Divided and Deus Ex: Breach
GNU General Public License v2.0
3 stars 1 forks source link

Is there a function to restore the subtitles of conversations between passers-by? #9

Open garfildxm opened 5 months ago

garfildxm commented 5 months ago

Could you please tell me about the language translation patch you released about DXMD? Does it restore the function of no subtitles for passerby dialogue in the game?

KillerBeer01 commented 5 months ago

Not sure if Sean will be able to answer you any soon, providing a first-hand response, but I'm more than convinced that it does not and won't be ever able to. It is a matter of voice lines not being properly mapped to texts in game data files, and fixing those is not something that can be done simply by applying a .dll to the engine.

SeanPesce commented 5 months ago

As @KillerBeer01 correctly explained, this project only modifies existing subtitles. While your request is theoretically possible through a Herculean effort (as is nearly everything given enough time), I have no plans to implement it because the game does not (to my knowledge) ship with any mechanism to map the relevant data.

KillerBeer01 commented 5 months ago

Technically speaking, I have been mapping subtitles to their voice lines as part of my efforts of improving the quality of the translation, and that included none-displayable text lines too, where possible (it can be seen as audio tags in the modded .json file), but I highly doubt that this mapping can be used by the engine without editing original data files to impose the missing mapping on them... at least, I'm have a strong impression that the game treats voice related data entries as primary information, and text ones as secondary, not the other way around, and I don't think that the .dll ever has (or that it even may possibly have) hooks of the necessary kind.

SeanPesce commented 5 months ago

Interesting, can you elaborate on this mapping you've been working on? Is a mapping between files/IDs in the game archives, or more of a manual mapping? (Keep in mind that I haven't looked at the game files much in the last few years so I don't really remember the different internal file formats)

I don't think that the .dll ever has (or that it even may possibly have) hooks of the necessary kind.

Yeah it definitely doesn't have hooks for this stuff at the moment, but it would almost certainly be possible to hook some function that plays NPC dialog and inject an extra call to some other function that displays relevant subtitles. It'd take a lot more reverse-engineering of the game engine (and maybe the file formats), but with code injection via DLL technically "anything" is possible given enough time and effort.

KillerBeer01 commented 5 months ago

To tell the truth, I also haven't looked at those files for a couple of years, and all I have right now is a big chunk of terrible uncommented spaghetti Java code, reflecting even more terrible spaghettiness of game data formats themselves, with tons of quirks and exceptions. From what I can remember off the top of my head, after parsing all pc_textlist type resources, I'd start a second pass to search for [assembly:/sound/localization/...pc_wavebank] resources whose referenced resource lists would contain references for both pc_fsb (actual audio) and pc_wavebankfx type resources, and the latter would have references to text lines' id's as well, which I'd log and then import the resulted mapping into the strings.json... of course, there were lots of pcwavebankfx's that would have nulls instead text line id's, and those gaps I would have to fill manually, by matching unmapped texts with unmapped sounds in the strings.json files' custom editor, which I had to enhance with additional functions specifically for that purpose. So yes, it was a very manual process that I wouldn't wish on anyone, and that got completed only by sheer stubbornness and inability to overcome the sunk cost fallacy. (^^)'