Savage Empire SNES – Approaching the Urali – the translation tools are now open source

The tools are now open source, you can find them here, they contain an automation of all the findings so far, taking mostly Vehek’s and DDS input along with a lot of experimentation and fiddling.

Unlike most SNES RPGs (?), dialog in the game is a bit complex because the options the player can choose depends on things he has done in the game or things he has already talked about with someone. This is all represented with a set of flags. I have been trying to complete the list as well as adding comments to the disassembled code in order to have a complete understanding of all of the conversations’ flow.

There seems to be a total of 36 “dialogs” into the game (either that or there’s a different set of rules for other dialogs).

  • Dialogs 11 and 35 seems to have a lot of blank space in the end
  • Dialogs 20, 23, 27 and 36 generate errors when loading the dialog options
  • Dialogs 22, 23, 24, 25 and 26 seems to be loading dialog options from other place since I’m unable to read them

These dialogs have been analyzed for flags completely:

  • 15, Inara Chief of the Pindiro
  • 16, Inatnya from the Kurak
  • 21, Mosagan from the Yolaru

Topics

  • Still not sure if the text extraction is 100% accurate; specially on the final lines on each conversation things starts going a bit crazy. Can only confirm this by inspecting the dialogs inside the ROM. DDS already pointed out a possible inaccuracy, I may have to check if our assumptions about the ShiftJIS encoding and the charset loading are correct all the times.
  • Need to find an way to hack the ROM to test the dialogs quickly, somehow pointing Intanya to any dialog I need.
  • Still not sure about the termination sequence I’m using for each dialog;  basically I’m assuming a 0xB8 (LOAD_DIALOG_OPTIONS) means the current dialog has ended and the next one has begun. The thing is not all dialogs ends the same but that might be ok.
  • Gotta solve the issue of dialog options loading for dialogs 20+

There’s still a long way ahead, but at least we are doing some progress 🙂

T-Rex Island – Great advancement on the script extractor

DDS continued working on hacking the ROM conversation code as well as figuring out its structure, he’s been able to modify the dialog options, yay!

Dialog options hacked
Dialog options hacked

He’s posted his advancements as an IPS file at http://www.mediafire.com/download/88s2nb22oav033z/ultima.zip; it should be of interest only for dev, as only a tiny fraction of content is translated.

However, with a new batch of info from him and after a lot of further ROM digging, I made further advancement on the script extractor (ROM disassembler?) we get closer and closer!

The google translate integration I added has been very helpful to figure out how everything fits together… here’s the current dump from dialog 16

-- DIALOG 16
-- CHARSET ����はいえ熱夢アイエラフキンジミーディスナウトヨルリテム名前仕事治す部族さようならおかり、バタ。ニャの魔法がにオド谷言葉を話力与た長間冒れてだもっくこやろる決し手放で弟子ち大き傷負倒発見へ連来ばわ中と呼んまず彼探出帰酋本当感謝ぞ村戦士総娘東あそ者耳入ほ仲精霊不思議居場所知教遠住石都西クカ恐ぬ道沿行け通じ南隠里約束誰突止め助ロ会聞チョコパ捧げ物強授ポ私目戻自分生ッ祈師つ今使必要ぐ我!ズ苦痛取除…機嫌丈夫ど友み報告加護
160D02:   IF 0226 JUMP 160D0B
160D07:   XJUMP 1590B1
160D0B:   LOAD_DIALOG_OPTIONS 02BC(熱 - Heat) 02BD(夢 - Dream) 02BE(アイエラ - Aiera) 02BF(ラフキン - Lufkin) 02C0(ジミー - Jimmy) 02C1(ディスキキ - Disukiki) 02C2(ナウアトラ - Nauatora) 02C3(ヨラルー - Yoraru) 
160D1E:   LOAD_MORE_DIALOG_OPTIONS 02C5(トーテム - Totem) 82C6(名前 - given names) 82C7(仕事 - Work) 02C8(治す - Cure) 82C9(部族 - Tribe) 
160D2B:   IF_FLAG ALREADY_TALKED_WITH_INTANYA DO: 
160D2E:   JUMP96 160D4D
160D31:   SETBIT AD 
160D34:   PRINT おかえり、アバタール。
-- ENGRISH: Welcome back, Avatar.
160D4A:   JUMP8C 160E2F
160D4D:   PRINT インターニャの魔法が、お前にイーオドンの谷の言葉を話す力を与えた。
-- ENGRISH: Magic of the inter-Nha is, given the power to speak the word of you to Iodon of the valley.
160D8F:   LINE_BREAK
160D90:   LINE_BREAK
160D91:   PRINT アバタールよ。お前は長い間、熱に冒されていたのだ。だが、もう、すっかりよくなった。
-- ENGRISH: Avatar. You are he a long time, it had been affected by the heat. But, the other, I became completely well.
160DE3:   LINE_BREAK
160DE4:   PRINT お前に、このトーテムをやろう。この谷にいる間は、決して手放すでない。
-- ENGRISH: To you, to try to do this totem. While in the valley, and are not let go any way.
160E28:   SET ALREADY_TALKED_WITH_INTANYA
160E2B:   SET_DIALOG_OPTIONS SHOW 10 (名前 - given names) SHOW 1 (熱 - Heat) 
160E2F:   WAIT_FOR_INPUT
160E30:   IF_SELECTED_DIALOG_NOT (熱 - Heat)  DO: 
160E33:   JUMP96 160EF0
160E36:   SET_DIALOG_OPTIONS HIDE 1 (熱 - Heat) SHOW 2 (夢 - Dream) 
160E3A:   PRINT インターニャの弟子たちが、大きな傷を負って倒れているお前を発見して、ここへ連れて来た。
-- ENGRISH: Disciples of the inter-Nha is, to discover you have fallen owed a large scratch, was brought here.
160E90:   LINE_BREAK
160E91:   PRINT インターニャ、お前の傷を治した。だが、しばらくは熱に冒されて、うわ言を言っていた。夢の話だ。
-- ENGRISH: Inter Nha, it cures you of scratches. But it had been a while been affected by the heat, saying delirium. It is a dream of the story.
160EED:   JUMP8C WAIT_FOR_INPUT
160EF0:   IF_SELECTED_DIALOG_NOT (夢 - Dream)  DO: 
160EF3:   JUMP96 160F59
160EF6:   SET_DIALOG_OPTIONS HIDE 2 (夢 - Dream) SHOW 3 (アイエラ - Aiera) SHOW 4 (ラフキン - Lufkin) SHOW 5 (ジミー - Jimmy) 
160EFC:   PRINT お前は夢の中で、アイエラとラフキンとジミーの名を呼んでいた。まずは、彼らを探し出すことだ。
-- ENGRISH: You are in a dream, was calling Aiera and Lufkin and Jimmy's name. First of all, you can find them.
160F56:   JUMP8C WAIT_FOR_INPUT
160F59:   IF_SELECTED_DIALOG_NOT (アイエラ - Aiera)  DO: 
160F5C:   JUMP96 16102E
160F5F:   SET_DIALOG_OPTIONS HIDE 3 (アイエラ - Aiera) 
160F62:   IF BITS SET 87 DO: 
160F65:   JUMP96 160FBB
160F68:   PRINT お前がアイエラを連れて帰ってくれたことを、酋長は本当によろこんで感謝していたぞ。
-- ENGRISH: that you has me back brought Aiera, chief was grateful Do really pleased.
160FB8:   JUMP8C 16102B
160FBB:   PRINT この村の戦士たちが、総出でアイエラを探している。アイエラは酋長の娘なのだ。
-- ENGRISH: Warriors of this village, looking for a Aiera in full force. Aiera's the daughter of the chief.
161005:   LINE_BREAK
161006:   PRINT アイエラをさらったのはウラリ族だ。
-- ENGRISH: It was kidnapped Aiera It 's Urari group.
161028:   SET_DIALOG_OPTIONS SHOW 9 (トーテム - Totem) 
16102B:   JUMP8C WAIT_FOR_INPUT
16102E:   IF_SELECTED_DIALOG_NOT (ラフキン - Lufkin)  DO: 
161031:   JUMP96 1610DC
161034:   SET_DIALOG_OPTIONS HIDE 4 (ラフキン - Lufkin) SHOW 8 (ヨラルー - Yoraru) 
161038:   PRINT この村の東にある、ヨラルー族の村に、そのような名前の者がいると、インターニャの耳に入っている。
-- ENGRISH: To the east of this village, in the village of Yoraru group, and there are such name who, I have entered into the ears of the inter-Nha.
161096:   LINE_BREAK
161097:   PRINT ラフキン、ほかの仲間を探すのに、とても力になると、精霊たちは言う。
-- ENGRISH: Lufkin, and to look for the other fellow, and so become a force, spirits say.
1610D9:   JUMP8C WAIT_FOR_INPUT
1610DC:   IF_SELECTED_DIALOG_NOT (ジミー - Jimmy)  DO: 
1610DF:   JUMP96 161144
1610E2:   SET_DIALOG_OPTIONS HIDE 5 (ジミー - Jimmy) 
1610E5:   PRINT インターニャ、不思議な夢を見た。夢は、ラフキンが、ジミーの居場所を知っていると教えてくれた。
-- ENGRISH: I saw Inter Nha, a strange dream. Dream, Lufkin has taught me to know the whereabouts of Jimmy.
161141:   JUMP8C WAIT_FOR_INPUT
161144:   IF_SELECTED_DIALOG_NOT (ディスキキ - Disukiki)  DO: 
161147:   JUMP96 161186
16114A:   SET_DIALOG_OPTIONS HIDE 6 (ディスキキ - Disukiki) 
16114D:   PRINT とても遠くに住んでいる部族だ。石の都ナウアトラの西だ。
-- ENGRISH: It is a tribe who live in very far away. It is west of the stone city Nauatora.
161183:   JUMP8C WAIT_FOR_INPUT
161186:   IF_SELECTED_DIALOG_NOT (ナウアトラ - Nauatora)  DO: 
161189:   JUMP96 1611FD
16118C:   SET_DIALOG_OPTIONS HIDE 7 (ナウアトラ - Nauatora) SHOW 6 (ディスキキ - Disukiki) 
161190:   PRINT ナウアトラ族は、彼らの石の都を、ティクティカトルと呼んでいる。
-- ENGRISH: Nauatora family, is the capital of their stone, is called Thich Thi Quatre.
1611CE:   LINE_BREAK
1611CF:   LINE_BREAK
1611D0:   PRINT ナウアトラの西には、ディスキキの村がある。
-- ENGRISH: To the west of Nauatora, there is a village of Disukiki.
1611FA:   JUMP8C WAIT_FOR_INPUT
1611FD:   IF_SELECTED_DIALOG_NOT (ヨラルー - Yoraru)  DO: 
161200:   JUMP96 16127A
161203:   SET_DIALOG_OPTIONS HIDE 8 (ヨラルー - Yoraru) SHOW 7 (ナウアトラ - Nauatora) 
161207:   PRINT 恐れを知らぬ戦士の部族だ。この村から道に沿って東へ行け。
-- ENGRISH: It is a warrior tribe that fearless. And go to the east from the village along the road.
16123F:   LINE_BREAK
161240:   LINE_BREAK
161241:   PRINT 道はヨラルーの村に通じている。その南が、ナウアトラだ。
-- ENGRISH: Road leads to the village of Yoraru. The south, but Nauatora.
161277:   JUMP8C WAIT_FOR_INPUT
16127A:   IF_SELECTED_DIALOG_NOT (ウラリ - Urari)  DO: 
16127D:   JUMP96 16135E
161280:   SET_DIALOG_OPTIONS HIDE 9 (トーテム - Totem) 
161283:   PRINT ウラリ族は隠れ里に住んでいる。精霊たちも、その場所を教えてはくれない。
-- ENGRISH: Urari family lives in Kakurezato. Spirits also, do not you tell me the location.
1612C9:   LINE_BREAK
1612CA:   PRINT だが、精霊は約束してくれた。ぐかがかならず、ウラリの村を我き!ズ、アイエラを苦け出すとな。
-- ENGRISH: But, Spirit was promised. Ingredients or not always, we-out of the village of Urari! Figure, Issuing only click the Aiera.
161324:   LINE_BREAK
161325:   PRINT アイエラを苦けたければ酋長のア痛痛ンに取って話を除け。
-- ENGRISH: If longer Nigake the Aiera and except for the story to take to the A pain pain down chief.
16135B:   JUMP8C WAIT_FOR_INPUT
16135E:   IF_SELECTED_DIALOG_NOT (トーテム - Totem)  DO: 
161361:   JUMP96 161427
161364:   SET_DIALOG_OPTIONS HIDE 10 (名前 - given names) 
161367:   PRINT このトーテムに…機嫌ラトルか丈インドを夫ど友にすると、み力な魔法の力をお前に報けてくれる。
-- ENGRISH: If you are etc. husband ... mood Rattle or length India in this totem friend, can you Hoke the power of attractive magic to you.
1613C1:   LINE_BREAK
1613C2:   PRINT ヨ告を夫ど友にすると、お前を加の護の前に?してくれる。
-- ENGRISH: When Yo told the husband etc. friend, can you in front of Mamoru of pressure to you.
1613F8:   LINE_BREAK
1613F9:   LINE_BREAK
1613FA:   PRINT このほかのトーテムは、??の力で探すのだ。
-- ENGRISH: This addition to the totem, it looks at the power of.
161424:   JUMP8C WAIT_FOR_INPUT
161427:   IF_SELECTED_DIALOG_NOT (名前 - given names)  DO: 
16142A:   JUMP96 161467
16142D:   SET_DIALOG_OPTIONS HIDE 11 (仕事 - Work) 
161430:   PRINT ?まれたときから、ずっとインターニャと呼ばれている。
-- ENGRISH: From the time Mareta, it has been much called inter Nha.
161464:   JUMP8C WAIT_FOR_INPUT
161467:   IF_SELECTED_DIALOG_NOT (仕事 - Work)  DO: 
16146A:   JUMP96 1614D5
16146D:   SET_DIALOG_OPTIONS HIDE 12 (治す - Cure) 
161470:   PRINT クーラ?ク族の?とう?をしている。精霊の言葉を除き、傷?いた者や、熱に冒された者を治す。
-- ENGRISH: We have a party of family Kuraku. Except for the words of the spirit, to heal wounds have a person or a person who is affected by heat.
1614C8:   IF BITS SET AD DO: 
1614CB:   JUMP96 1614D2
1614CE:   SET_DIALOG_OPTIONS SHOW 13 (部族 - Tribe) SHOW 1 (熱 - Heat) 
1614D2:   JUMP8C WAIT_FOR_INPUT
1614D5:   IF_SELECTED_DIALOG_NOT (治す - Cure)  DO: 
1614D8:   JUMP96 16163A
1614DB:   SET_DIALOG_OPTIONS HIDE 13 (部族 - Tribe) 
1614DE:   *AE*
1614DF:   *24*
1614E0:   *1D*
1614E1:   *1D*
1614E2:   *25*
1614E3:   *1D*
1614E4:   JUMP96 1615A2
1614E7:   PRINT 加には、なんでも治す、大きな力がある。さいわい、?のお前には、その力を?う??がない。
-- ENGRISH: In addition, the cure anything, there is a large force. Fortunately, you in the, and there is no cormorant its power.
16153D:   LINE_BREAK
16153E:   PRINT もし、インターニャの苦けがいるときは、お前にやったトーテムを?い、す?に帰ってくるのだ。
-- ENGRISH: If, when there are only bitter inter Nha, the stomach totem've done to you, you come back to the nest.
161596:   IF BITS SET AD DO: 
161599:   JUMP96 16159F
16159C:   SET_DIALOG_OPTIONS SHOW 10 (名前 - given names) 
16159F:   JUMP8C 161637
1615A2:   *A2*
1615A3:   *1D*
1615A4:   *1D*
1615A5:   *25*
1615A6:   *1D*
1615A7:   PRINT 精霊よ、?に力を与えたまえ?
-- ENGRISH: The Pearl River giving spirit by the force to
1615C3:   LINE_BREAK
1615C4:   LINE_BREAK
1615C5:   LINE_BREAK
1615C6:   PRINT クク?の精霊よ、これなるアバタールの??を?り?き、その傷をいやしたまえ??
-- ENGRISH: I spirit of Kuku, this becomes the Avatar of Riki, before you have healed the wound
161612:   LINE_BREAK
161613:   PRINT 精霊の??はよかった。もう大??だ。
-- ENGRISH: Spirit's was good. It is already large.
161637:   JUMP8C WAIT_FOR_INPUT
16163A:   IF_SELECTED_DIALOG_NOT (部族 - Tribe)  DO: 
16163D:   JUMP96 1616F7
161640:   SET_DIALOG_OPTIONS HIDE 14 (熱 - Heat) 
161643:   PRINT インターニャは、?の部族にも?だちがいる。?んな、インターニャにいろいろ??してくれる。
-- ENGRISH: Inter Nha is, there are Modachi to tribes. Do such, I me lot to Inter Nha.
16169B:   LINE_BREAK
16169C:   PRINT ここはクーラ?ク族の村だ。酋長はア痛痛ン。まだ取ってないなら、あいさ??らいしておけよ。
-- ENGRISH: Here is the village of Kuraku group. Chief nitrous pain pain down. If you have not taken yet, and Oke was Aisarai.
1616F4:   JUMP8C WAIT_FOR_INPUT
1616F7:   IF_SELECTED_DIALOG_NOT (さようなら - goodbye)  DO: 
1616FA:   JUMP96 161729
1616FD:   PRINT 精霊の??を?っているぞ、アバータール。
-- ENGRISH: Gonna have Tsu that the spirits, Abataru.
161725:   SETBIT AD 
161728:   (BLANK)   

Notes:

  • 1614DE: Seems to be code for “Cure wounds”
  • DDS pointed an issue with the charset being offset from a given character thus generating garbled japanese for the latter part of the dialog. Still looking for that issue.

What’s next?

  • Making sure charsets are correct (this involves checking the conversations in the game and double checking with the translator)
  • Going thru all the dialogs and figuring out the values for the flags that control the conversation’s flow.
  • Finding blocks of special code (for example the one used for Healing the player on Intanya’s conversation)
  • Determine any changes required on the ROM structure to add larger chunks of texts, optimize unneeded space (like the charsets maybe, and all the kanji graphics 🙂
  • Start thinking on the “reassembler”/script injector, the tool to inject the english texts into the ROM 😐
  • Planning for other parts pending translation:
    • History so far
    • Inventory
    • Main Menu
    • Other?

Crystal Caves – Progress on the Script Extractor

A cool guy called DDS has sent some info and prompted me to work back on the project, it seems he’s gone so far as to hack the game to use single sprites as letters instead of 4 sprites kanji, which is something extremely important for the translation.

Intanya speaks english
Intanya speaks english

I have updated the Script extractor based on DDS’s findings:

  • Marking back newlines, which I had removed
  • Subroutines
    • 0x8C (jump to)
    • 0xC0 (set flag)
    • 0x88 ~ 0xDO, unidentified
  • Grouping subroutines calls in groups of three bytes

Still figuring out the usage of 00 as a dialog termination sequence. Some times it’s there, some times it’s not. There are also some stranded bytes, probably some subroutines use a single byte or 3 bytes (?)

Also, the byte sequence after the charset is probably data instead of code, may be the dialog options are there (?)

I’m also integrating with Google Translate API to provide a rough translation, mainly to detect the point where the first dialog ends and nonsense starts.

Here’s the output so far:

<dialog id = '16'>
<charset> ����はいえ熱夢アイエラフキンジミーディスナウトヨルリテム名前仕事治す部族さようならおかり、バタ。ニャの魔法がにオド谷言葉を話力与た長間冒れてだもっくこやろる決し手放で弟子ち大き傷負倒発見へ連来ばわ中と呼んまず彼探出帰酋本当感謝ぞ村戦士総娘東あそ者耳入ほ仲精霊不思議居場所知教遠住石都西クカ恐ぬ道沿行け通じ南隠里約束誰突止め助ロ会聞チョコパ捧げ物強授ポ私目戻自分生ッ祈師つ今使必要ぐ我!ズ苦痛取除…機嫌丈夫ど友み報告加護</charset>
<94 '0226'>0B <8D 'B18D'><90 'B8AB'><BC 'BD02'>02 <BE 'BF02'>02 <flag 'C102'/>02 <C2 'C302'>02 <C4 'B942'><C5 'C602'>82 <C7 'C882'>02 <C9 'CA82'><C2 'A9C4'>10 <96 '8D4D'><9A '00AD'>
<text>おかえり、アバタール。<jumpTo '8E2F'/>インターニャの魔法が、お前にイーオドンの谷の言葉を話す力を与えた。<br/><br/>アバタールよ。お前は長い間、熱に冒されていたのだ。だが、もう、すっかりよくなった。<br/>お前に、このトーテムをやろう。この谷にいる間は、決して手放すでない。<flag '10A9'/></text>
<engrish>Welcome back, Avatar. Magic of the inter-Nha is, given the power to speak the word of you to Iodon of the valley. Avatar. You are he a long time, it had been affected by the heat. But, the other, I became completely well. To you, to try to do this totem. While in the valley, and are not let go any way.</engrish>
<BE '818A'>00 <C9 'BCB6'>82 <96 '8EF0'><BE '8201'>00 
<text>インターニャの弟子たちが、大きな傷を負って倒れているお前を発見して、ここへ連れて来た。<br/>インターニャ、お前の傷を治した。だが、しばらくは熱に冒されて、うわ言を言っていた。夢の話だ。<jumpTo '8E2F'/></text>
<engrish>Disciples of the inter-Nha is, to discover you have fallen owed a large scratch, was brought here. Inter Nha, it cures you of scratches. But it had been a while been affected by the heat, saying delirium. It is a dream of the story.</engrish>
<B6 '82BD'><96 '8F59'><BE '8302'>84 85 00 
<text>お前は夢の中で、アイエラとラフキンとジミーの名を呼んでいた。まずは、彼らを探し出すことだ。<jumpTo '8E2F'/></text>
<engrish>You are in a dream, was calling Aiera and Lufkin and Jimmy's name. First of all, you can find them.</engrish>
<B6 '82BE'><96 '902E'><BE '0003'><9B '0087'><96 '8FBB'>
<text>お前がアイエラを連れて帰ってくれたことを、酋長は本当によろこんで感謝していたぞ。<jumpTo '902B'/>この村の戦士たちが、総出でアイエラを探している。アイエラは酋長の娘なのだ。<br/>アイエラをさらったのはウラリ族だ。</text>
<engrish>that you has me back brought Aiera, chief was grateful Do really pleased. Warriors of this village, looking for a Aiera in full force. Aiera's the daughter of the chief. It was kidnapped Aiera It 's Urari group.</engrish>
<BE '0089'><jumpTo '8E2F'/><B6 '82BF'><96 '90DC'><BE '8804'>00 
<text>この村の東にある、ヨラルー族の村に、そのような名前の者がいると、インターニャの耳に入っている。<br/>ラフキン、ほかの仲間を探すのに、とても力になると、精霊たちは言う。<jumpTo '8E2F'/></text>
<engrish>To the east of this village, in the village of Yoraru group, and there are such name who, I have entered into the ears of the inter-Nha. Lufkin, and to look for the other fellow, and so become a force, spirits say.</engrish>
<B6 '82C0'><96 '9144'><BE '0005'>
<text>インターニャ、不思議な夢を見た。夢は、ラフキンが、ジミーの居場所を知っていると教えてくれた。<jumpTo '8E2F'/></text>
<engrish>I saw Inter Nha, a strange dream. Dream, Lufkin has taught me to know the whereabouts of Jimmy.</engrish>
<B6 '82C1'><96 '9186'><BE '0006'>
<text>とても遠くに住んでいる部族だ。石の都ナウアトラの西だ。<jumpTo '8E2F'/></text>
<engrish>It is a tribe who live in very far away. It is west of the stone city Nauatora.</engrish>
<B6 '82C2'><96 '91FD'><BE '8607'>00 
<text>ナウアトラ族は、彼らの石の都を、ティクティカトルと呼んでいる。<br/><br/>ナウアトラの西には、ディスキキの村がある。<jumpTo '8E2F'/></text>
<engrish>Nauatora family, is the capital of their stone, is called Thich Thi Quatre. To the west of Nauatora, there is a village of Disukiki.</engrish>
<B6 '82C3'><96 '927A'><BE '8708'>00 
<text>恐れを知らぬ戦士の部族だ。この村から道に沿って東へ行け。<br/><br/>道はヨラルーの村に通じている。その南が、ナウアトラだ。<jumpTo '8E2F'/></text>
<engrish>It is a warrior tribe that fearless. And go to the east from the village along the road. Road leads to the village of Yoraru. The south, but Nauatora.</engrish>
<B6 '82C4'><96 '935E'><BE '0009'>
<text>ウラリ族は隠れ里に住んでいる。精霊たちも、その場所を教えてはくれない。<br/>だが、精霊は約束してくれた。ぐかがかならず、ウラリの村を我き!ズ、アイエラを苦け出すとな。<br/>アイエラを苦けたければ酋長のア痛痛ンに取って話を除け。<jumpTo '8E2F'/></text>
<engrish>Urari family lives in Kakurezato. Spirits also, do not you tell me the location. But, Spirit was promised. Ingredients or not always, we-out of the village of Urari! Figure, Issuing only click the Aiera. If longer Nigake the Aiera and except for the story to take to the A pain pain down chief.</engrish>
<B6 '82C5'><96 '9427'><BE '000A'>
<text>このトーテムに…機嫌ラトルか丈インドを夫ど友にすると、み力な魔法の力をお前に報けてくれる。<br/>ヨ告を夫ど友にすると、お前を加の護の前に?してくれる。<br/><br/>このほかのトーテムは、??の力で探すのだ。<jumpTo '8E2F'/></text>
<engrish>If you are etc. husband ... mood Rattle or length India in this totem friend, can you Hoke the power of attractive magic to you. When Yo told the husband etc. friend, can you in front of Mamoru of pressure to you. This addition to the totem, it looks at the power of.</engrish>
<B6 '82C6'><96 '9467'><BE '000B'>
<text>?まれたときから、ずっとインターニャと呼ばれている。<jumpTo '8E2F'/></text>
<engrish>From the time Mareta, it has been much called inter Nha.</engrish>
<B6 '82C7'><96 '94D5'><BE '000C'>
<text>クーラ?ク族の?とう?をしている。精霊の言葉を除き、傷?いた者や、熱に冒された者を治す。</text>
<engrish>We have a party of family Kuraku. Except for the words of the spirit, to heal wounds have a person or a person who is affected by heat.</engrish>
<9B '00AD'><96 '94D2'><BE '818D'>00 <jumpTo '8E2F'/><B6 '82C8'><96 '963A'><BE '000D'><AE '1D24'>1D 25 1D <96 '95A2'>
<text>加には、なんでも治す、大きな力がある。さいわい、?のお前には、その力を?う??がない。<br/>もし、インターニャの苦けがいるときは、お前にやったトーテムを?い、す?に帰ってくるのだ。</text>
<engrish>In addition, the cure anything, there is a large force. Fortunately, you in the, and there is no cormorant its power. If, when there are only bitter inter Nha, the stomach totem've done to you, you come back to the nest.</engrish>
<9B '00AD'><96 '959F'><BE '008A'><jumpTo '9637'/><A2 '1D1D'>25 1D 
<text>精霊よ、?に力を与えたまえ?<br/><br/><br/>クク?の精霊よ、これなるアバタールの??を?り?き、その傷をいやしたまえ??<br/>精霊の??はよかった。もう大??だ。<jumpTo '8E2F'/></text>
<engrish>Spirit by, in due spirits before Kuku gave a force, which made the Avatar of the Riki, was good for spirits before you have healed the wound. It is already large.</engrish>
<B6 '82C9'><96 '96F7'><BE '000E'>
<text>インターニャは、?の部族にも?だちがいる。?んな、インターニャにいろいろ??してくれる。<br/>ここはクーラ?ク族の村だ。酋長はア痛痛ン。まだ取ってないなら、あいさ??らいしておけよ。<jumpTo '8E2F'/></text>
<engrish>Inter Nha is, there are Modachi to tribes. Do such, I me lot to Inter Nha. Here is the village of Kuraku group. Chief nitrous pain pain down. If you have not taken yet, and Oke was Aisarai.</engrish>
<B6 '82CA'><96 '9729'>
<text>精霊の??を?っているぞ、アバータール。</text>
<engrish>Gonna have Tsu that the spirits, Abataru.</engrish>
<9A '00AD'><88 'CBB8'>82 <CC 'CD82'><C2 'CEB9'>02 <CF 'D002'>02 D1 02 D2 02 D3 <C2 '819B'>00 <96 '9746'><BE '0088'><9B '00B5'><96 '98C9'><9B '00B6'><9B '00B7'><AB '9600'><97 '0597'>20 
<text>仕事治す部族さ<br/>ィようナなはらいおいおかり、ムバタウ。ームニ<jumpTo '98C6'/></text>
<engrish>Tribe of ~I so na as to pay nephew borrow cure work, Mubatau. Muni</engrish>
<C2 '10B0'><96 '981F'>
<text>ャの魔法よがムにィなオド谷ムさ<br/>テウ言葉をキ話タウ。ーさ<br/><br/>ャの魔法ラはら前仕事治す部族、力与ムたバ長らな与間。ーな谷ーいニ</text>
<engrish>· The story tau magic excess of catcher is the ~I of Odo Tanimu of Tae Woo words to nothing. Magic La La before work cure tribe of over of catcher, force Azukamu was bus length from a Azukama. Over a Taniini</engrish>
<9A '00B7'><9A '00B6'><jumpTo '98C6'/><9B '00B6'><96 '98A8'>
<text>がムにィよフキン冒いキれてら間だもンミ名話族ナっいくこバ間谷ニ<br/><br/>ううはやナンら前仕事治す部族、ろる葉をタ名ド族ナら決バ間谷ーいニ<jumpTo '98C6'/>う話はう話はら前仕事治す部族さ<jumpTo '990D'/>部よエラよしナタ手ウテウ、放もでミいー。間谷弟らテキ放いなム谷葉ーニ</text>
<engrish>There tribe to cure ~I by butterbur adventure breath Re Nmi name talk group also a between the temple became Ikukoba ticks two uhh Hayate Nan et al before work to nothing, others Rolle leaves name de group Nara Kebba ticks over initiative Cormorants story is cormorants story original before work cure tribe of part I gills good thou hand Uteu, also in Mii release. Ticks Mutani leaf over two such not release his brother from enemy</engrish>
<C9 'CBB6'>82 <96 '9943'><BE '0001'>
<text>子話ち名大よャのき治さ傷負よャのき治倒</text>
<engrish>Child talk Chi name sized by catcher eaves cured and yellow scratch negative by catcher Chi倒</engrish>
<9A '00B5'><jumpTo '990D'/><B6 '82CC'><96 '9AE7'><BE '0002'>
<text>ャの魔法ラよ発見なオド谷ニタウへ話う話連来ばわ部ら発見て言葉ナバ間谷ニ<br/></text>
<engrish>Catcher magic La'll discover that Odo valley Nitau words Nava Te limbus et al discovered if come cormorant talk communication talk to tick two</engrish>
<9B '00B6'><9B '00B7'><AB '9600'>39 <9A '3405'>
<text>のき治よ発見ナ。をよ中とよ力アイはら呼力ムにんら前仕事治す部族よ放へまならずイ、谷彼タウ。ーニャの魔法よがムにィらャの魔法よ探出よ帰、放酋バム谷葉ーニ<jumpTo '9AE4'/>本弟当て感与ら放い部族よ謝ぞて村彼戦族だなオド谷ニ<br/><br/>放い部族よ謝ぞはらャの魔法よ発見て言葉ナバ間。ーニ<br/><br/>士よ総ナらジミーデ弟がムにフキン間なよれてら娘リいな。間い。ーニ</text>
<engrish>Eaves Osamu discovered Na. It forces love and in good to the Manara Zu Lee to release good tribe cure et al call force Muninra before work, the valley he tau. Nya magic excess is ~I-ra~ya magic good probe leaving attributed to nothing, Ho酋 Bam TaniYo over double this brother against feeling Azuka-ra Hoi tribe by Xie each to the village Odo Tanini Na's his battle group Hoi tribe between I words Nava Xie each Te discovered by magic of Hara~ya. Over two-mechanic Yeah Nara Jimide butterbur between a According to Li et al daughter whether his brother to nothing. Between physicians. Over two</engrish>
<BE '0084'><jumpTo '990D'/><B6 '82CE'><96 '9CAB'><BE '8704'>00 
<text>ャの魔法よ東よ大葉ナあ、らがムにフキン弟総バ間谷ニ<br/><br/>ジミーデ弟れて娘リそ夢へ名ら士う冒は見い見い者な総バタウ。ーニ<br/><br/>スナウトは士うなら耳入よりてっいータ族な谷ニ長葉を族らスナウトタらほ族な。間いタウ。ーニ<br/></text>
<engrish>Catcher of magic by east by macrophyll Naa, and near the brother total server ticks Nijimide brother is in name from mechanic cormorant adventure will not look not look a person such total Batau to Musumeriso dream to Ragamu. Nisunauto to wow Te~tsuita group of Tanini length leaves family from Sunautota et al ho group I the from the ear input. Between I have tau. Over two</engrish>
<9B '00B7'><96 '9BC7'><jumpTo '990D'/>
<text>士う、はらャの魔法ラよ仲精弟総バ間谷ニ士話はがムにィ、ら霊与戦間話を放によな谷ニ<br/>長葉を族らンいうよ夢ようナな谷ニ本弟ジミーデて感与不。をらフキン間なよれて娘リいな。間い間。ーニタウらだ話タがムにィてもにうナ弟な与間思族ニ</text>
<engrish>Judges cormorants, Naka by magic La Hara~ya Seiototo total server ticks two mechanic story is-free in ~I, dream so na'll say family from down the Na Tanini length leaf by the release of the story between et spirits given against valley not given a sense of Te double this brother Jimide. La butterbur between a According to daughter re not. Between I have between. ~I Even Niu Na brother to Nitau et al.'s Hanashitagamu a Azukama 思族 two</engrish>
<BE '8685'>00 <jumpTo '990D'/><B6 '82D1'><96 '9D15'><BE '0007'>
<text>議はらスナウトは放バ間。居族ニ本よ耳入弟場バム
---

Sakkhra Caves

Further work on the script extractor, thanks again to Vehek for his tips to transform font table indexes into ShiftJIS characters.

Tasks now:

  • Find out the routine termination sequence for the dialog codes
  • Extract dialog options from the dialog code, and find out how they are mapped to each conversation

This is the output for dialog 16, somewhere within the hex there should be a meaningful termination sequence

Dialog 16

Charset:  ????はいえ熱夢アイエラフキンジミーディスナウトヨルリテム名前仕事治す部族さようならおかり、バタ。ニャの魔法がにオド谷言葉を話力与た長間冒れてだもっくこやろる決し手放で弟子ち大き傷負倒発見へ連来ばわ中と呼んまず彼探出帰酋本当感謝ぞ村戦士総娘東あそ者耳入ほ仲精霊不思議居場所知教遠住石都西クカ恐ぬ道沿行け通じ南隠里約束誰突止め助ロ会聞チョコパ捧げ物強授ポ私目戻自分生ッ祈師つ今使必要ぐ我!ズ苦痛取除…機嫌丈夫ど友み報告加護

94 26 02 0B 8D 8D B1 90 AB B8 BC 02 BD 02 BE 02 BF 02 C0 02 C1 02 C2 02 C3 02 C4 42 B9 C5 02 C6 82 C7 82 C8 02 C9 82 CA C2 C4 A9 10 96 4D 8D 9A AD 00

おかえり、アバタール。

8C 2F 8E

インターニャの魔法が、お前にイーオドンの谷の言葉を話す力を与えた。

01 01

アバタールよ。お前は長い間、熱に冒されていたのだ。だが、もう、すっかりよくなった。

01

お前に、このトーテムをやろう。この谷にいる間は、決して手放すでない。

C0 A9 10 BE 8A 81 00 C9 B6 BC 82 96 F0 8E BE 01 82 00

インターニャの弟子たちが、大きな傷を負って倒れているお前を発見して、ここへ連れて来た。

01

インターニャ、お前の傷を治した。だが、しばらくは熱に冒されて、うわ言を言っていた。夢の話だ。

8C 2F 8E B6 BD 82 96 59 8F BE 02 83 84 85 00

お前は夢の中で、アイエラとラフキンとジミーの名を呼んでいた。まずは、彼らを探し出すことだ。

8C 2F 8E B6 BE 82 96 2E 90 BE 03 00 9B 87 00 96 BB 8F

お前がアイエラを連れて帰ってくれたことを、酋長は本当によろこんで感謝していたぞ。

8C 2B 90

この村の戦士たちが、総出でアイエラを探している。アイエラは酋長の娘なのだ。

01

アイエラをさらったのはウラリ族だ。

BE 89 00 8C 2F 8E B6 BF 82 96 DC 90 BE 04 88 00

この村の東にある、ヨラルー族の村に、そのような名前の者がいると、インターニャの耳に入っている。

01

ラフキン、ほかの仲間を探すのに、とても力になると、精霊たちは言う。

8C 2F 8E B6 C0 82 96 44 91 BE

?インターニャ、不思議な夢を見た。夢は、ラフキンが、ジミーの居場所を知っていると教えてくれた。

8C 2F 8E B6 C1 82 96 86 91 BE 06 00

とても遠くに住んでいる部族だ。石の都ナウアトラの西だ。

8C 2F 8E B6 C2 82 96 FD 91 BE 07 86 00

ナウアトラ族は、彼らの石の都を、ティクティカトルと呼んでいる。

01 01

ナウアトラの西には、ディスキキの村がある。

8C 2F 8E B6 C3 82 96 7A 92 BE 08 87 00

恐れを知らぬ戦士の部族だ。この村から道に沿って東へ行け。

01 01

道はヨラルーの村に通じている。その南が、ナウアトラだ。

8C 2F 8E B6 C4 82 96 5E 93 BE 09 00

ウラリ族は隠れ里に住んでいる。精霊たちも、その場所を教えてはくれない。

01

だが、精霊は約束してくれた。ぐかがかならず、ウラリの村を我き!ズ、アイエラを苦け出すとな。

01

アイエラを苦けたければ酋長のア痛痛ンに取って話を除け。

8C 2F 8E B6 C5 82 96 27 94 BE 0A 00

このトーテムに…機嫌ラトルか丈インドを夫ど友にすると、み力な魔法の力をお前に報けてくれる。

01

ヨ告を夫ど友にすると、お前を加の護の前に?してくれる。

01 01

このほかのトーテムは、??の力で探すのだ。

8C 2F 8E B6 C6 82 96 67 94 BE 0B 00

?まれたときから、ずっとインターニャと呼ばれている。

8C 2F 8E B6 C7 82 96 D5 94 BE 0C 00

クーラ?ク族の?とう?をしている。精霊の言葉を除き、傷?いた者や、熱に冒された者を治す。

9B AD 00 96 D2 94 BE 8D 81 00 8C 2F 8E B6 C8 82 96 3A 96 BE 0D 00 AE 24 1D 1D 25 1D 96 A2 95

加には、なんでも治す、大きな力がある。さいわい、?のお前には、その力を?う??がない。

01

もし、インターニャの苦けがいるときは、お前にやったトーテムを?い、す?に帰ってくるのだ。

9B AD 00 96 9F 95 BE 8A 00 8C 37 96 A2 1D 1D 25 1D

精霊よ、?に力を与えたまえ?

01 01 01

クク?の精霊よ、これなるアバタールの??を?り?き、その傷をいやしたまえ??

01

精霊の??はよかった。もう大??だ。

8C 2F 8E B6 C9 82 96 F7 96 BE 0E 00

インターニャは、?の部族にも?だちがいる。?んな、インターニャにいろいろ??してくれる。

01

ここはクーラ?ク族の村だ。酋長はア痛痛ン。まだ取ってないなら、あいさ??らいしておけよ。

8C 2F 8E B6 CA 82 96 29 97

精霊の??を?っているぞ、アバータール。

9A AD 00 88 B8 CB 82 CC 82 CD C2 B9 CE 02 CF 02 D0 02 D1 02 D2 02 D3 C2 9B 81 00 96 46 97 BE 88 00 9B B5 00 96 C9 98 9B B6 00 9B B7 00 AB 00 96 97 97

前仕事治す部族さ

01

ィようナなはらいおいおかり、ムバタウ。ームニ

8C C6 98 C2 B0 10 96 1F 98

ャの魔法よがムにィなオド谷ムさ

01

テウ言葉をキ話タウ。ーさ

01 01

ャの魔法ラはら前仕事治す部族、力与ムたバ長らな与間。ーな谷ーいニ

9A B7 00 9A B6 00 8C C6 98 9B B6 00 96 A8 98

がムにィよフキン冒いキれてら間だもンミ名話族ナっいくこバ間谷ニ

01 01

ううはやナンら前仕事治す部族、ろる葉をタ名ド族ナら決バ間谷ーいニ

8C C6 98

う話はう話はら前仕事治す部族さ

8C 0D 99

部よエラよしナタ手ウテウ、放もでミいー。間谷弟らテキ放いなム谷葉ーニ

C9 B6 CB 82 96 43 99 BE 01 00

子話ち名大よャのき治さ傷負よャのき治倒

9A B5 00 8C 0D 99 B6 CC 82 96 E7 9A BE 02 00

ャの魔法ラよ発見なオド谷ニタウへ話う話連来ばわ部ら発見て言葉ナバ間谷ニ

01 9B B6 00 9B B7 00 AB 00 96 39 9A

ャのき治よ発見ナ。をよ中とよ力アイはら呼力ムにんら前仕事治す部族よ放へまならずイ、谷彼タウ。ーニャの魔法よがムにィらャの魔法よ探出よ帰、放酋バム谷葉ーニ

8C E4 9A

本弟当て感与ら放い部族よ謝ぞて村彼戦族だなオド谷ニ

01 01

放い部族よ謝ぞはらャの魔法よ発見て言葉ナバ間。ーニ

01 01

士よ総ナらジミーデ弟がムにフキン間なよれてら娘リいな。間い。ーニ

BE 84 00 8C 0D

Barrab

I started working on the Script Extractor with the knowledge we have so far…

Screen Shot 2013-08-03 at 10.18.52 AM

Found out the conversation options are inside the same piece of code that the dialog text, which is nice.

Must find out the correct termination sequence for each dialog (I guess it will be some sort of return command) and also the commands which structure the dialog options

Font table

This one is a bit tedious but has to be done, gotta map the font table…

File Offset File Offset Pointer Glyphs
0x11051d 1115421 $A4:B440 Hiragana
0x110700 1115904 $A4:C900 Katakana
0x11171d 1120029 $A5:8300 Kanji, Part 1, 93 kanji (?)
0x111834 1120308 $A5:9A40
0x111900 1120512 $A5:9A80 Kanji, Part 2, 188 kanji
0x111b34 1121076 $A5:C940
0x111c00 1121280 $A5:C980 Kanji, Part 3, 188 kanji
0x111e34 1121844 $A5:F840

As noted already, japanese character are in Shift-JIS order in their respective groups in the tileset. HOWEVER, this is not completely true in the font table, specially for kanji which seems to be grouped on groups of 93 or 188 kanji.

Another issue to make a Shift-JIS mapping apart from the gaps, is the fact that the mapping seems to have two blank spaces between kanji “groups” (http://www.rikai.com/library/kanjitables/kanji_codes.sjis.shtml ).

Tichticatl

Looking for pointer tables:

* Pointer table for mini character sets: 0x118000, 3 byte pointers (4 bytes? but the last one is always 00) to:

0x108000

0x1081be

0x108306

[…]

0x1095fe <—- Charset for Intanya’s dialog

This table goes all the way to 0x11808c for individual charsets, then it seems to begin using shared charsets (0x10ce6a, 0x10cfce for instance). It ends at 0x1181f0 (125 entries)

Screen Shot 2013-08-02 at 6.42.32 PM

We may end up replacing pointers on all entries for an unified roman charset, or otherwise hacking the place where this is used in order to reference the charset directly instead of using the table (?).

So, this gives us an indication there *might* be 125 dialogs in total, probably.

* “Pointers” to the actual dialogs

Now I’m not entirely sure we’ll find pointers, since the dialogs seem to be code instead of raw data… however there should be some sort of jumptable somewhere

Not a mockup

Screen Shot 2013-08-01 at 8.56.30 PM

So, the general plan is

  • Get to know the structure of the ROM and document it
  • Build a script extractor
  • Translate to English
  • Build a script injector
  • Perform necessary hacks
  • Playtest

We are still at step one, and the following questions are still up:

  • Where does the game store the list of conversations and their corresponding character sets
  • Where are the dialog options. and do they use the same schema as the dialog text
  • Where is the intro and title screen text
  • User interface and in-game messages

To recap everything so far:

  • 0x013ea0 – English text for the intro, encoded in ASCII
  • 0x01457d – English text for the End Credits, encoded in ASCII
  • 0x1095fe – Characters to be loaded for the First Intanya Dialog, represented as (little endian) offsets from 0x110100 (the font table)
    • A value of 0360 here points to address 0x110460 (Uppercase A)
  • 0x110100 – Font table. 24 bits pointer table, pointing to sprites over 0x120000
    • 0x110424 – Numbers
    • 0x110460 – Uppercase
    • 0x1104c3 – Lowercase
  • 0x120000 – Font Sprites in 2bpp mode, roman, hiragana, katakana and kanji, with symbols mixed in-between.
  • 0x160d4d – First Intanya dialog code, sequence of character loading commands (05) followed with an offset of the tile in VRAM. (01) displays a clear line