How to translate Ultima VI into your language

While doing the translation for Ultima 6, I thought to scribble down my expieriences in order to hopefully assist other fellow fans in their translation efforts.


Last Update: 19th December 2018


First and foremost I’d like to thank SkaZZ of dementia traduxiones who has selflessly and out of sheer kindness answered all the dumb questions of a guy he didn’t even know (me) and helped me umpteen times when I was stuck again.

If you want to play Ultima 6 in or translate it into your language, first check, if a translation already exists.
I am aware of a full and working spanish translation by Dementia Traduxiones, available HERE
and an Italian translation that just started (see comment below) HERE

Well then…

If you plan to take the effort to translate Ultima VI into your own language, make sure to have everything at hand, you need to get you started.

What you will definitely need is:
– U6edit tool by Paul Gilbert
– Dedication
– U6 Items Editor by SkaZZ
– Heaps of time
– U6 Decode tool by Nodling Dragon
– Stamina
– U6 Encode Tool by Nodling Dragon and SkaZZ
– Did I mention Dedication yet?
– YY-CHR 0.99 by WaiWai (YY)

You will also need a HEX Editor. Hence, I have included an old plugin for Notepad++, my favourite text editing tool. It is said to be unstable with newer versions of Notepad++, but works fine for me (using version 6.3.3)

Feel free to grab everything you need here: on my new page sirjohn.de.

_____________________________________________


What can be translated?

almost everything, but you’ll need to be prepared for some awkward hex-editing expierience. Although most of the stuff can be decompiled, modified and re-encoded again, there is quite a bit of translation work that can only be done by HEX-editing. This includes, but is not limited to:
– Opening Sequence
– Introduction
– Character Creation at the gypsy’s
– Endgame
– System barks (You see…, You search)
– System command (Talk, Get, Cast, Attack)
– Error messages

On the bright side: everything else, including
all Books,
all conversations,
all items
CAN be translated conviniently – and this page will tell you how to do it…

_____________________________________________


Does your language require special characters, others, than these present in English?
If so, please read on. If not, you can skip this and proceed to Translating Items below.

To have all characters you need in your language, you have to alter the fontset that comes with U6.
– Start YY-CHR tool and use it to open file U6.CH in the Ultima directory
– Make sure to change the “Graphic format” in the bottom left corner to “1BPP” – the fontset you see now is unicolored dark green
– Identify some obsolete characters you can spare and change these to your languages special characters. For German Umlauts I have used characters = _ ; and + by the way

– After that, start using them by replacing the Umlauts with the special character you have replaced, e.g. type “Seid gegr+_t, Wanderer” when you want to read “Seid gegrüßt, Wanderer”

ATTENTION: Altered characters will NOT WORK in U.EXE, so please do not use them in the introduction scenes or the Gypsy setting!!

Note: you CAN do this using the U6Edit tool as well, but I would suggest using YY-CHR as it has an in-tool editor you can conviently use to modify the existing characters without the need of export, and re-importing graphics

_____________________________________________


Translating Items:

– Start by using the U6 DECODE tool to decompile the file LOOK.LZD. Let’s name this LOOK.UNC
– As soon as this is done, start up U6 item Editor, point to the copy of the U6 file “LOOK.UNC” and start editing every single string displayed.
– Click on “Modificar” to save the modified string and “Guardar” to save the modified file before exiting the programm with a click on “Salir”
– Please note that some strings need singular as well as plural forms. These are normally indicated by backslashes, e.g.
portion\s of meat
torch\es
– In rare cases, if the word stem alters for the plural form, you need to work with shashes as well, e.g.
loa/f\ves of bread (loaf or loaves of bread)
– ATTENTION: If you save (aka “guardar”) your work, choose a NEW FILENAME every time or delete your old file before saving the work again. The tool sometimes screws the saved file by appending it to the existing one instead of replacing it.
– If you have successfully translated everything, compile the LOOK.N99 File again by using the “U6 ENCODE” tool. Syntax is “u6encode LOOK.N99 LOOK.LZD.

_____________________________________________


Translating Books and Conversations

This is the most straightforward of all works: simply open U6edit tool, point it to your Ultima directory and start editing. The files you modify for conversations are “CONVERSE.A” and “CONVERSE.B”, for books it is “BOOKS.DAT”

_____________________________________________


Hex-Editing Binaries

Now, here is the awkward part of the work. You need to modify three files: GAME.EXE, U.COM, and END.EXE
The problem with Hex-Editing is, that you in most cases have to stick with the space and number of characters of the original file.
Work with greatest caution, if you add only one byte to the original file, the whole thing is screwed up.
In the tools I have enclosed a HEXEDIT plugin for Notepad++, my favourite Editor. It is said to be unstable with newer version of Notepad++ and will be automatically disabled when you update Notepad, but for me it works smoothly. You can, of course, use any other HEX-Editor of your choice as well…

General Rules of Thumb:
– Pay attention especially to Periods (“.”): in HEX these can be “00”, “0a” and “2e”. It is of utmost importance not to confuse wither of the three.
“0a” triggers an in-game line break
“2e” is the regular period sign
“00” is for purely internal use

– NEVER move, add or delete characters with HEXcode “00”

One more useful tip for the commands you can trigger with the icons in the bottom bar, though…
In GAME.EXE you will find the Commands what to do at approx. address #0002dc00 – #0002dc30, reading “Attack Cast Talk Look Get Drop Move Use Rest Save”. While you can still not extend the total number of characters here, you CAN vary the amount of characters of each command, given, you do not exceed their TOTAL number.
Whatsmore: as the exception to the “don’t move ’00’ HEX chars” rule above, here you CAN move these as well.
The HEX code you look for is:
41 74 74 61 63 6b 00 43 61 73 74 00 54 61 6c 6b 00 4c 6f 6f 6b 00 47 65 74 00 44 72 6f 70 00 4d 6f 76 65 00 55 73 65 00 52 65 73 74 00 53 61 76 65
A..t..t..a..c..k…..C..a..s..t…..T..a..l..k…..etc

This is possible, because SkaZZ found the OFFSETS for these strings: they are right above the commands at ~ 0002dbd0, starting with an UMLAUT-U and ending just before a capital “C” The offset line reads:
dc 03 e3 03 e8 03 ed 03 f2 03 f6 03 fb 03 00 04 04 04 09 04 43

This is how it works:
The first offset “DC 03” indicates the position of the first “00” between “Attack” and Cast”. So for each character you move Cast you need to increase or decrease “DC” by one (in HEX). Increasing by two would result in “DE 03” – decreasing by one would read “DB 03” – the second part of all Offsets (03’s and 04’s never change)

Example:
Let’s change the original command line given above into German:

German: 4b 3b 6d 70 66 00 5a 61 75 62 65 72 00 52 65 64 65 00 ...
German: K..;..m..p..f.....Z..a..u..b..e..r.....R..e..d..e........
English A..t..t..a..c..k.....C..a..s..t.....T..a..l..k.....L..o..
English 41 74 74 61 63 6b 00 43 61 73 74 00 54 61 6c 6b 00 4c 6f

You can easily see, how the “00”s are shifted back and forth. Accordingly you have to alter the Offset line.
– “K;mpf” is one char shorter than “Attack” so “dc 03” is modified to “dd 03”
– “Zauber” ends one char later than “Cast” so “e3 03” needs to go down to “e2 03”
– and so on. Here is both lines in comparision. Go figure 😀

English dc 03 e3 03 e8 03 ed 03 f2 03 f6 03 fb 03 00 04 04 04 09 04 43
German: dd 03 e2 03 e9 03 ee 03 f3 03 f7 03 fb 03 01 04 06 04 11 04 43

…to be continued as work progresses

One thought on “How to translate Ultima VI into your language

  1. Gabriele

    I love Ultima VI, it was my first RPG and I would translate in Italian language.

    I’m very happy to see you had the same idea.

    Can I ask you a favor?

    How did you solve the trouble of offsets in the file *. Exe? How did you find the offsets in the file and modify them?

    I’m not a programmer but I would realize a good job for the fans of this great game.

    Thanks a lot and congratulations for your excellent work!

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *