ROM Hack Need Help: Chrono Trigger Translation

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
Really nice job with that font editor. However, I think the text program is broken or something. All I get is a small file with only a couple strings.

Anyway, is it supposed to dump only strings for a language or it dumps everything in the same file? Because I'm not sure you really need all the languages for every file.
 

HoRRoR_X

Member
Newcomer
Joined
Mar 1, 2009
Messages
6
Trophies
0
Age
33
Website
consolgames.ru
XP
67
Country
Serbia, Republic of
Crosser said:
However, I think the text program is broken or something. All I get is a small file with only a couple strings.
Show them please.
I wrote tools based on the American version of the game. Here, two options: either to other structures of text files or need to create new encoding tables. Give me text files and the font, I see them.

QUOTE(Crosser @ Mar 2 2009, 10:20 PM) Anyway, is it supposed to dump only strings for a language or it dumps everything in the same file? Because I'm not sure you really need all the languages for every file.
Program dump only the first language. I can do to dump specified.

P.S. Sorry for my English.
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
HoRRoR_X said:
Give me text files and the font, I see them.I've used it on the files it's supposed to work with, with the tables you provided. American version here, nothing less, nothing more.

QUOTEProgram dump only the first language.
From what I could see, it dumped English. English is really the second language, while the first is Japanese (or it's supposed to be), and the fourth is French. Third is always dummied out. I guess it was meant to be some other language like German, but they didn't really include it and left empty strings instead.
 

HoRRoR_X

Member
Newcomer
Joined
Mar 1, 2009
Messages
6
Trophies
0
Age
33
Website
consolgames.ru
XP
67
Country
Serbia, Republic of
To prevent the text extracted completely, big.tbl need to replace "02!=" to "02!=" ( I re-wrote the code and forgot to change the table under it).

The new version of the program. If the last parameter to specify the language ID, it will extract it.
 

HoRRoR_X

Member
Newcomer
Joined
Mar 1, 2009
Messages
6
Trophies
0
Age
33
Website
consolgames.ru
XP
67
Country
Serbia, Republic of
QUOTE said:
To prevent the text extracted completely, big.tbl need to replace "02!=" to "02!=" ( I re-wrote the code and forgot to change the table under it).
Oops, I mean "02=\ 0" to "02=".
(The forum does not allow to write '\' and '0' together)
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
Fixing that entry in the table I get this error instead:
Code:
***WARNING: TGameText.LoadTable: Invalid table line: //.normal
***WARNING: TGameText.LoadTable: Invalid table line: //C696C69711={/PAUSE}\n--\n

battle.msg
Exception EAccessViolation in module ct.exe at 0001D1FF.
Access violation at address 0041D1FF in module 'ct.exe'. Read of address 00898000.

Anyway, let's forget for the moment about dumping/insertion and let's focus on something that has been bothering me for quite a long time: variable names. I'm not talking about expanding them up to 7 letters to make "Silbird" fit (the original name for Epoch/Ibis), but about the other issue with Chrono's "nick" and Marl's princess names. For the first one, the Japanese version takes the first two kana of his name, so ??? becomes ??, which would roughly correspond to "Chro". As for Marl's name, it takes the first 3 kana and adds the "dia" suffix, so you get ???+??? (Mar+dia).
Now for Chrono's name, using the default name and applying the Japanese rule we'd have "Ch", which looks just plain wrong. How would you do to reproduce the original effect, then? Adapt the Japanese code to be more "Occidental", which means that instead of the first 2 character you copy 4 to have "Chro" and reproduce the effect, or would you apply some other weird mechanism of transformation on the string? Take into account that this name is not used as a nick, even tho it's usually referred as such. It's just Eira's way to call Chrono, and it's also used once by Marl to indicate a pause in the speech (I believe it's when the royal guards take him away to the prisons). Think of it as "Chro... Chrono!".
As for Marl, her case is a little different, more or less. Her princess name is actually supposed to be "Mardia" in latin characters, to reflect some kind of joke with the word Gardia (please, let us forget of the wrong transliteration "Guardia", because even the French team got it correct), or maybe it's some way to put it as royal name; no clue here. I've seen the French version using a static version of this, but they "expanded" it to the whole name string, so she's called "Marledia" by her father and the whole castle. No idea how the hell anybody can pronounce the word "Marledia", considering the 'e' is completely mute, not to mention that her name is supposed to have no vowels at the end of it according to the official names. Speaking of static crap, the American version just goes for Nadia, which is the biggest problem I'm having with this, since it completely removes the joke with variable names. To make it brief, would you go for Mar+dia and just have the first 3 characters of her name? Any other suggestions?
 

HoRRoR_X

Member
Newcomer
Joined
Mar 1, 2009
Messages
6
Trophies
0
Age
33
Website
consolgames.ru
XP
67
Country
Serbia, Republic of
:wtf: I will run without error... Extracted English text.

QUOTE said:
Oops, I mean "02=\ 0" to "02=".
Again wrong
frown.gif
"02!=\ 0" to "02!="... ('!' means that the stop data)

Translated into Russian, we have decided to ban the names input (that is, the game was only the original names, translated by us, the player could not use their), because in Russian different names in different cases are written in different ways (names characters occupy 2 bytes, but you can use single encoding, and even hold long names).
In your case I can try to add 2-3 characters, changing arm9 code. The basic code is packed, but the decompressor/compressor I already wrote.
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
To answer again to nIxx, I've got a formula to calculate the encoding for all symbols:
Code:
if(val>=0x80)
{
ÂÂÂÂdest[pos++]=((val&~0xF)>>6)+0xC0;
ÂÂÂÂdest[pos++]=(val&0x3F)|0x80;
}
// regular symbol
else
ÂÂÂÂdest[pos++]=(BYTE)val;
This way you don't need those stupid tables to try and guess how all symbols and tags have to be encoded. Just build an array with all the characters and let it search through that, then convert the index found with that piece of code and you have the actual binary. Example:
Code:
TCHAR table_ds[]=
{
ÂÂÂÂ_T("e ¶atorsniuldh.m")
ÂÂÂÂ_T("c¶pgvfy:bé'!,w-S")
ÂÂÂÂ_T("k?qCIMTAPLDzOBGR")
ÂÂÂÂ_T("FNjHEVWx?0JèàY¶1")
ÂÂÂÂ_T("ê2UKQ3)(/4â569Éô")
ÂÂÂÂ_T("Z87?ç+–î?\"_Xù??Â")
ÂÂÂÂ_T("%œ?û«»*°ÀÇ??²ï&?")
ÂÂÂÂ_T("¶=×ÊÔ¶¶Œ?›¶?íP§§")
ÂÂÂÂ_T("¶úVM¶#÷‹öLHN?¶¶³")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")ÂÂÂÂ
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("????????????????")ÂÂÂÂ
ÂÂÂÂ_T("?????×??????????")
ÂÂÂÂ_T("????????????????")
ÂÂÂÂ_T("´¡¿ÁÄÈËÌÍÎÏÑÒÓÖÙ")
ÂÂÂÂ_T("ÚÛÜßáäëìñòóü¶¶­®")
ÂÂÂÂ_T("™©$;@[\\]^`{|}~")
};

static int GetSymbol(TCHAR unicode)
{
ÂÂÂÂfor(int i=0; table_ds[i]!=0; i++) if(unicode==table_ds[i]) return i;
ÂÂÂÂreturn GetSymbol(_T('?'));
}

HoRRoR_X said:
:wtf: I will run without error... Extracted English text.Interesting format, but it's kinda hard to follow without some kind of editor to separate all the strings.

QUOTEIn your case I can try to add 2-3 characters, changing arm9 code.
Why would I need to add more characters? The question was entirely different. It was about Chrono's and Marl's name post-processing. Expansion is barely a problem.
 

nIxx

Well-Known Member
OP
Member
Joined
Sep 30, 2007
Messages
1,544
Trophies
0
Location
Germany
Website
Visit site
XP
337
Country
Gambia, The
@HoRRoR_X: Thank you espacially for the font editor
wink.gif


@Crosser: Nice thank you very much for this
wink.gif


PS: A beginner question
wink.gif

Is it very difficult to find such a decoding formula ?
I´ve never done something with decoding before
biggrin.gif
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
nIxx said:
PS: A beginner question
wink.gif

Is it very difficult to find such a decoding formula ?
Not if you can rely on this:
CODEROM:0203D858ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ LDRBÂÂÂÂR4, [R4,#1]ÂÂÂÂ; c2=data[i++]
ROM:0203D85CÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ MOVÂÂÂÂ R5, R2,LSL#27ÂÂ; c1
 

Whivel

Member
Newcomer
Joined
Apr 9, 2009
Messages
14
Trophies
1
XP
63
Country
Italy
i'm analyzing the structure of chrono trigger rom and i found the pointer used by game to find the msg file in the cartridge (or rom).
we can change it and insert in empty space a bigger msg file.
this information is useful to make a tool to translating chrono trigger.
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
And what's the point of that...? Just rebuild the whole rom entirely or partially. Also, you can just dummy out the other languages, if you really don't want to regenerate a thing in the file structure.
 

Whivel

Member
Newcomer
Joined
Apr 9, 2009
Messages
14
Trophies
1
XP
63
Country
Italy
SCVgeo said:
Mentz said:
I'm analysing the file structure...

4 byte: zero filled
4 byte: ascii "text"
4 byte: ???
4 byte: file length or end dialog
4:byte: end table pointer or start dialogs

someone knows how is used the "???" part ?
Maybe it's important on repointing the whole msg file...
The ??? part points to another text. Just try changing it to 0000 then 0100 for the tutorial, etc and you'll see.

Also this affects the lower screen.

So:

4 byte: Zero Filled
4 byte: TEXT
4 byte: text entry that bottom screen starts with
4 byte: File length
Then:
4 byte: Offset to delimiter of first entry
4 byte: Offset to beginning of text for first entry (the text entry ends when the delimiter is arrived at)
4 byte: Offset to delimiter of second entry
4 byte: Offset to beginning of text for second entry (the text entry ends when the delimiter is arrived at)
4 byte: Offset to delimiter of third entry
4 byte: Offset to beginning of text for third entry (the text entry ends when the delimiter is arrived at)
....

1 byte: Delimiter for first text entry
Variable bytes: First text entry
....

the ??? seem to be the bytes length from "File Length" to end of offset.
so

0000 TEXT ABCD EEEE
OFFSET
TEXT_ENTRY

ABCD is length from end of ABCD to end of OFFSET (B
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
It's something totally different. The first u16 value of that is the counter of strings for each text entry, or to make it easier to understand, it's the total of languages for the file. The u16 value right after it seems to be unused in game, like the depth index used in the font files.
 

Whivel

Member
Newcomer
Joined
Apr 9, 2009
Messages
14
Trophies
1
XP
63
Country
Italy
if it is as you said, "4 byte: Offset to delimiter of first entry" is wrong.
Is it an offset to another language entry instead, and it is an empty entry.

however i tried to take it as i said and it is valid for ALL msg file.
 

Crosser

Active Member
Newcomer
Joined
Mar 1, 2009
Messages
26
Trophies
0
Age
37
Location
Italy
Website
gemini.aerdan.org
XP
111
Country
Italy
Whivel said:
if it is as you said, "4 byte: Offset to delimiter of first entry" is wrong.
This is what I said:
CODEtypedef struct TOSE_TEXT
{
ÂÂÂÂu32 magic[2];
ÂÂÂÂu16 entries;
ÂÂÂÂu16 unknown;ÂÂÂÂ// unused
ÂÂÂÂu32 filesize;
} TOSE_TEXT;
What is called here the "Offset to delimiter of first entry" is nothing but a mere part of the pointer table to the strings, not a piece of the header structure.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • SylverReZ @ SylverReZ:
    @Maximumbeans, I'm doing alright, thanks.
    +1
  • Maximumbeans @ Maximumbeans:
    That must be rough. Productive I'm sure but hard to balance with daily life
    +1
  • SylverReZ @ SylverReZ:
    @Maximumbeans, Indeed. I've been working on getting this Infecutus chip to work on my PS2. But after soldering, I realised that a plastic piece was missing from the power ribbon cable to the power and eject buttons.
  • SylverReZ @ SylverReZ:
    Now I could go with soldering the contacts from the cable to the connector on the mobo, but doesn't sound like a good permanent solution.
  • Maximumbeans @ Maximumbeans:
    Man, that's beyond my brain :rofl: I'm no good with hardware for now. I'd like to get into hardmods in future though
  • SylverReZ @ SylverReZ:
    @Maximumbeans, Maybe start practice soldering. Get a cheap-ass soldering iron and follow some good YouTube tutorials.
    +1
  • SylverReZ @ SylverReZ:
    Least my experience has gotten better than over a decade ago. My iron would constantly bump into components and break them.
  • Maximumbeans @ Maximumbeans:
    Sounds good. I actually did soldering but like 16 years ago for school so uuuuh probably rusty haha
  • SylverReZ @ SylverReZ:
    @Maximumbeans, Same here. I did soldering at school from a teacher who I honestly liked since he had plenty of good electronics experience.
    +1
  • Maximumbeans @ Maximumbeans:
    I wish I could play chess well
    +1
  • Maximumbeans @ Maximumbeans:
    Useless but a true art
    +1
  • SylverReZ @ SylverReZ:
    @Maximumbeans, I had a friend who had a glass chess set for their birthday.
  • SylverReZ @ SylverReZ:
    It was like all clear and fancy. Tbf I'm not too experienced with chess, but would like to learn someday.
  • Maximumbeans @ Maximumbeans:
    That sounds really cool
  • Maximumbeans @ Maximumbeans:
    I know the basics but no strategy at all :rofl:
    +1
  • Veho @ Veho:
    Watch chess streamers on Twitch and you'll pick up a thing or two.
    +1
  • Veho @ Veho:
    Not to mention there's an infinite number of chess games for every possible platform.
    +1
  • DinohScene @ DinohScene:
    just play it, get beaten a few times and start dominating
    +1
  • K3Nv2 @ K3Nv2:
    Nude chess is best
    +1
  • DinohScene @ DinohScene:
    strip checkers > nude chess
    +1
  • K3Nv2 @ K3Nv2:
    Nude checkers get jumped
    +1
  • SylverReZ @ SylverReZ:
    @Veho, I guess you'd pick up something while watching tub streams.
  • SylverReZ @ SylverReZ:
    @K3Nv2, Dick fights. :tpi:
  • Veho @ Veho:
    Turkish olive oil wrestling.
    +1
    Veho @ Veho: Turkish olive oil wrestling. +1