Jump to content

Translation File Information


Recommended Posts

v18 has no huge changes for .tra, but please check the file differences and bug reports for some named character typos and such that might need to be adjusted for translations in progress :)

Link to post

D:\ie_checkfiles\bg1npc-v18\bg1npc\tra\english\x#npcwait.tra (1 hits)

Line 245: @244 = ~I will fight you to mine last breath, Vremoni!~

 

.tp2

/* dialog Tutu Only */

COMPILE ~BG1NPC/Phase3/WAIT/dlg/X#NPCWAIT.D~

USING ~BG1NPC/TRA/%LANGUAGE%/X#NPCWAIT.TRA~

 

 

ok....

 

 

These have to be from something that kicked out Dynaheir and Minsc, but I find no references.

 

waaaait....

 

It looks like there was a state in one of the versions that was set to play if Dynaheir and Minsc were spirited away by either the player betraying them to Winski in the added encounter, or by the spell cast by the imp coming to completion. Since the two of them get kicked out of the party, the state was added to this component to make sure that if something went odd, starting dialog with them would shoot off on that. It looks like I must have tightened it up with a simple EXIT, as the states now read

 

EXTEND_BOTTOM _DYNAHP 5  //MINSC IN PARTY
+~!AreaCheck("FW5100")  <<big big snip of code>> !AreaCheck("FW0226")~+ @31 + STAYHERE_SAFE_DYNAH_K
+~OR(84) AreaCheck("FW5100")   <<big big snip of code>>  AreaCheck("FW0226")~+ @31 + STAYHERE_DANGER_DYNAH_K
+~Global("Drawbridge","GLOBAL",1)~ + @1 + BG_DYNAH_K
++ @2 + SC_DYNAH_K
++ @32 + NEVERLEFT_DYNAH
IF ~GlobalGT("X#DYQUImpAttack","GLOBAL",0)~ THEN EXIT
IF ~Global("X#WinskiTakeDyna","GLOBAL",1)~ THEN EXIT
END

 

Those last two lines are the escapes, which originally would have led to additional states (one for Dy, one for Minsc).

 

The draft version I have here has this code as

 

IF ~GlobalGT("X#DYQUImpAttack","GLOBAL",0)~ THEN GOTO X#NEW_ABDUCTION

IF ~Global("X#WinskiTakeDyna","GLOBAL",1)~ THEN GOTO X#NEW_ABDUCTION

 

I assume X#NEW_ABDUCTION was something along the lines of

 

IF ~~ X#NEW_ABDUCTION_DY
 SAY ~I will fight you to mine last breath, Vremoni!~
 IF ~~ THEN EXIT
END

 

I will retest this to see if the added lines are really necessary - but please translate them , anyways, as it might be that the encounter makes more sense with a final despairing howl from each of them, easy enough to add and test.

 

@244 = ~I will fight you to mine last breath, Vremoni!~ // Dynaheir, crying out against her impending capture

 

@245 = ~Butt - kicking For GOODNESS! RAAAAARGH!~ // Minsc, going into battle rage as the bad guys haul him and Dy off to be tortured.

Link to post

(If we do think this is important enough, an alternative is leaving the existing code and playing with the imp spell and Winski's materials, both of which basically do

 

IF
 Global("X#DImpSpell","LOCALS",12)
 TimerExpired(0)
 !Dead("Ichthraa")  // Ichthraa
THEN
 RESPONSE #100
SetGlobal("X#DImpSpell","LOCALS",12)
PlaySound("%tutu_var%EFF_P18")
SetGlobal("X#WinskiTakeDyna","GLOBAL",1)
SetGlobal("X#DynaheirRomanceInactive","GLOBAL",1)
ActionOverride("dynaheir",LeaveParty())
ActionOverride("dynaheir",ChangeAIScript("",DEFAULT))
ReallyForceSpell("dynaheir",DRYAD_TELEPORT)
ActionOverride("minsc",LeaveParty())
ActionOverride("minsc",ChangeAIScript("",DEFAULT))
ReallyForceSpell("minsc",DRYAD_TELEPORT)
ReallyForceSpell("Ichthraa",DRYAD_TELEPORT)
END

 

which could be quickly turned into a cutscene - safer that way anyways -

 

IF
 <<whatever we have to do here >>
THEN
 RESPONSE #100
SetGlobal("X#DImpSpell","LOCALS",12)
PlaySound("%tutu_var%EFF_P18")
SetGlobal("X#WinskiTakeDyna","GLOBAL",1)
SetGlobal("X#DynaheirRomanceInactive","GLOBAL",1)
ActionOverride("dynaheir",LeaveParty())
ActionOverride("minsc",LeaveParty())
DisplayStringHead("dynaheir",@244)
Wait(1)
DisplayStringHead("minsc",@245)
Wait(1)
ActionOverride("dynaheir",ChangeAIScript("",DEFAULT))
ActionOverride("minsc",ChangeAIScript("",DEFAULT))
ReallyForceSpell("dynaheir",DRYAD_TELEPORT)
ReallyForceSpell("minsc",DRYAD_TELEPORT)
ReallyForceSpell("Ichthraa",DRYAD_TELEPORT)
EndCutsceneMode()
END

)

Link to post
Question: What is the file "x#eldothn.tra" for? It is empty.

Sorry for the late answer.

The way this file name is built reminds me of a simular one for Alora, with the final n. I gather it was meant for a new dialog when the component where Eldoth is moved out of Cloackwood is installed, but that that dialog was not created or removed. However the tp2 never references this tra file for any purpose.

 

Here's some feedback regarding the French translation and a tool we used to help recovering texts taken from Baldur's Gate or to identify the duplicates between x#ict3.tra and all the x#**int.tra files.

The tool is called Translation Retriever and can be downloaded here. There is a user manual that should explain how to use it and how to analyse the outputs.

To use it, you need tra files for the games, in English and in your own language. You can find English dialog.tlk files there. To extract tra files from them, you just need WeiDU (command to run from the game directory):

weidu --tlkin dialog.tlk --ftlkin dialogF.tlk --traify-tlk --out dialog.tra

or (if your language doesn't have dialogF.tlk

weidu --tlkin dialog.tlk --traify-tlk --out dialog.tra

 

Comments written by the tool can also be found in the French tra files. Files that are benefited the most from the texts retrieved from the original games (mainly BG, but also a bit from BG II) are:

  • bg1npc_tmp.tra: character names, soundset for non joignable NPCs (many from BG II, as well), items
  • x#ajpcfl_tmp.tra: Ajantis soundset and biography ("your voice is strange" stuff, within player initiated dialogs)
  • x#pcinit_tmp.tra: all NPCs soundset and biography ("your voice is strange" stuff, within player initiated dialogs)

It's better to run Translation Retriever for these files, since it will replace the texts to translate with the translated ones, in case of perfect match between the mod text and the original game text. There are slightly more than 1000 texts that can be retrieved (almost 40 per NPC soundset + a few more), and that count doesn't include a few 100s for the soundset of non playable characters.

 

There are other files of interest, regarding the texts moved out of x#**int.tra and x#totsc.tra files into x#ict3.tra file.

In x#**int.tra files, you'll find comments like this:

// BG1 NPC : texte identique dans le fichier x#ict3.tra au numéro 242, probablement inutile de traduire ici !
@3 = ~Souviens-Toi bien de <CHARNAME>, maire. Je pressens que Tu entendras encore parler de ses exploits dans le futur.~

The comment means:

// BG1 NPC : identical text in file x#ict3.tra at line @242, probably no need to translate here!

This comment highlights where it is likely that the text is not used anymore in x#**int.d, since there is an identical text in x#ict3.tra.

This kind of comment was generated with a old special build of Translation Retriever, hence the text in French and the explicit reference to BG1 NPC, compared to the version you can download.

Translation Retreiver didn't know whether the x#**int.d file indeed had code commented for that text, though. Neither did it know if the text was indeed used in the same context (same character) in x#ict3.d! We (humans) checked the context when building the x#ict3.tra file, though.

 

When we built the x#ict3.tra file, first from the various x#**ict3.tra files (plus dealing with other unmatched texts), we also added (by hand) similar comments in x#ict3.tra:

// BG1 NPC : texte identique dans le fichier x#dyint.tra au numéro 3
@242  = ~Souviens-Toi bien de <CHARNAME>, maire. Je pressens que Tu entendras encore parler de ses exploits dans le futur.~

which means

// BG1 NPC : identical text in file x#dyint.tra at line @3

In the end, this gives the two way match between x#ict3.tra and x#**int.tra. There 837 texts matched this way in x#ict3.tra.

 

In case of unmatched comments, trust the one in x#ict3.tra. Comments in x#**int.tra files were generated automatically while those in x#ict3.tra were writtent and checked by humans. ;)

 

I believe these comments may help other translation teams, once you know what the comment means.

 

The french tra files are also often full of comments regarding the context of the talks and the organisation of the team work, unfortunately in French. This was helpful to proofread but it makes them a bit messy for anyone who doesn't read French, I'm afraid.

 

Feel free to ask for clarification. The x#ict3.tra file is now associated to the word "nightmare" among us because of all the discussions on how to deal with it and of the time it took to build and check it, so I may suffer from an inability to talk about it clearly. ;)

Link to post

I think in x#ict3.tra, these two lines:

 

@554 = ~Good.~
@555 = ~Now, to business.~

Need to be combined to one:

 

@554 = ~Good. Now, to business.~
/* @555 */

Reason is that it's the way it was in Alora's original interjection and @555 is not used in x#ict3.d.

EDIT: I corrected it in the tras of all languages and will make pull request.

Edited by jastey
Link to post

In x#ict3.d, there was a mixup of Ajantis' interjections: His reaction to Eldoth joining was mixed with his reaction to Dynaheir being attacked. Thus, this (which is @37):

 

 

@660 = ~By Helm! <CHARNAME>, can you not see that this is a fight of good against evil? I am not at your side in this! My honor tells me to defend this woman!~

needs to be changed into the line @22 from x#ajint.tra:

 

@660 = ~<CHARNAME>, I hope you don't seriously consider carrying out this false plan?~

I've done this locally for all language versions, this will be in my next pull request.

Edited by jastey
Link to post

In x#ict3.d, a passback line for Garrick was missing here (line already existed in the tra). I added the bold lines and will include it in the next pull request:

 

/* individual passbacks supplied */
I_C_T3 ~%tutu_var%MELICA~ 2 X#MELICA2
== ~%GARRICK_JOINED%~ IF ~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~ THEN @769
== ~%tutu_var%MELICA~ IF ~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~ THEN @770
== ~%GARRICK_JOINED%~ IF ~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~ THEN @771
== ~%tutu_var%MELICA~ IF ~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~ THEN @772
== ~%GARRICK_JOINED%~ IF ~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~ THEN @773
== ~%tutu_var%MELICA~ IF ~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~ THEN @776
== ~%EDWIN_JOINED%~ IF ~InParty("edwin") InMyArea("edwin") !StateCheck("edwin",CD_STATE_NOTVALID)~ THEN @774
== ~%tutu_var%MELICA~ IF ~InParty("edwin") InMyArea("edwin") !StateCheck("edwin",CD_STATE_NOTVALID)~ THEN @775
END

Link to post

To all language teams: in x#ajantis.tra, line 18

 

@18 = ~One day, drow, unless you change your evil ways, Torm's justice will be brought to you on the edge of a sword.~

 

needs to be changed to

 

@18 = ~One day, drow, unless you change your evil ways, Helm's justice will be brought to you on the edge of a sword.~

 

(I won't do this myself as it's not as easy as swapping a whole line but theres grammar involved! :) )

Edited by jastey
Link to post
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...