(Link to AcmlmWiki) Offline: thank ||bass
Register | Login
Views: 13,040,846
Main | Memberlist | Active users | Calendar | Chat | Online users
Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album
05-08-24 11:30 PM
0 users currently in ROM Hacking.
Acmlm's Board - I3 Archive - ROM Hacking - F-Zero Climax - Translation
  
User name:
Password:
Reply:
 
Options: - -
Quik-Attach:
Preview for more options

Max size 1.00 MB, types: png, gif, jpg, txt, zip, rar, tar, gz, 7z, ace, mp3, ogg, mid, ips, bz2, lzh, psd

UserPost
Heian-794
Posts: 127/160
Guy, three more chapters on display at MFO!

I've been using single and double quotes indiscriminately thanks to my reading material out here being roughly half British and half American, not to mention oscillating betwen placing commans and periods inside the quotes (logical) and outside (conventional).

Also, and more importantly, the story is told in the present tense, but sometimes I trnslated it in the past tense because it flowed better. It might be better to use either present or past all the way through, though. Go ahead and make any changes you like -- I don't know the official names of the planets, either.
Guy Perfect
Posts: 401/451
In the instruction manual for F-Zero games for quite some time, they've been capitalizing every letter. English manuals.

I've also edited the names of some planets, turned Ryu into Rick and did some grammatical corrections. I also replaced many of your 'single quotes' with "double quotes."
Heian-794
Posts: 125/160
Guy, Chapters 11-13 are now posted over on MFO (www.mrfxitonline.com for the unenlightened; go there!) for everyone's perusal.

F-Zero (if I may be a pedant for a moment) shouldn't be in all capitals. "Zero" is the number zero, not the initials of something, so it should be written like a regular word. In Japanese, they write using the English letters F-ZERO, but I don't think we should use all capitals.

Just curious; what else did you change?
Guy Perfect
Posts: 400/451
I'll revise your translations when you get them ready. I've had to make a few corrections, and some other little things like changing "F-Zero" to "F-ZERO"... Keep up the good work.
Heian-794
Posts: 124/160
Guy, leave the text to me! One request, though: a save file with all the text in it! I have all 51 story blocks, but I don't have all the pilot profiles on my cart, and while I'm sure I'll eventually get them all, it would be drudgery to go through that battle mode over and over now.

As for posting on MFO -- I made a new ID and have no problems loggin in... from home. But for some reason, I can't even attempt to log in from my work PC, which is where I typed out those translations during some downtime. Does the "ban" of old IDs extend to entire IP addresses or something? I can't go to any page on the MFO network without being refused with the message that I'm banned!

The upshot of that is that I'll just have to e-mail the translated chapters from my work PC to my home address and then post them from home. Chapters 11, 12, and 13 are done now.
Guy Perfect
Posts: 397/451
I haven't had a whole lot of time to hack much for the past few days, but here's the program that I put together to do the translating thus-far. See if anyone can make use of it until I can get some time to do an update.

It requires a copy of the F-Zero Climax ROM in the ROM directory. Call it "Climax.gba"

Translator Module v0.30



Old post:

I'd like to remind everyone that a variable-width or thinner font, while a nice touch, are not required for this project. If it becomes too difficult or ideas run out, it's not the end of the world. At this time, I would like to spend more time hacking the rest of the text than perfecting the font.

I got a PM from someone who registered to post a reply, but didn't want to get approval to post in the forum:

"Regarding a variable-width font in Climax, have you looked at how this problem was solved in Falcon Densetsu?
"If I recall correctly, Maximum Velocity was developed by someone different than Falcon Densetsu and Climax, but the altter two were done by the same team. It seems to me they would have similar internal structures, so looking at changes between the Japanese and English versions of the one should give you insights into how to do it for the other."

I'm fairly certain the text engine is different, but uses the same techniques. Text is loaded into a static chunk of VRAM that is updated according to the needs, blatantly writing over any previous data. I suspect that if one was to change the 16-pixel horizontal adjustment to an 8-pixel one, you could easily account for twice as many characters per-line without causing any problems.

Heian-794) All the text in the game basically sits on your shoulders. That includes pilot/machine profiles, menu text, that intro screen tutorial text, etc.
Ryusui
Posts: 58/58
I've actually halfway implemented a VWF in a GBA game.

How hard it is depends on the print routine. The game I've been working on uses two different methods of printing text: for the menus and intro, it's all printed to memory and then copied to VRAM in one big chunk. That's the part I've got done. For dialogue, it's printed to memory one character at a time and copied incrementally to VRAM. This requires some more serious hacks, especially considering how I'm having issues getting the tilemap to line up properly with the printed characters.
Heian-794
Posts: 122/160
Guy, I just created another ID, this time connected to my gmail address, and the confirmation arrived instantly!

Tomorrow I'll try to get some more story translation posted on MFO. Has anyone already expressed desire to do the pilot profiles? Because I'd be happy to do those too.
Guy Perfect
Posts: 395/451
MFO is usually instantaneous to send a verification e-mail. Check your junkmail folder. If it's not in there, let me know and I'll get word to the admins for you.
Heian-794
Posts: 121/160
Skreename, if we were really willing to use kludges, we could overwrite the graphics of every single one of those kanji with variable-width text, putting two or three letters in every block, for the most important stuff, leaving the less-often-seen text in the ugly 16x16 square font.

This is kind of useless, but for everyone's edification I've translated the Japanese characters in that mystery zone. They are indeed the 'kumimoji' mentioned earlier:



(This covers the area from the last Roman numeral, X, up to the first kanji, 亜, and a bit beyond.)

Before all this Japanese stuff, you can see the ASCII half-width Roman alphabet. If you look at the number 1, it's all the way at the left edge of the tile, which would seem to imply that they were planning to implement a VWF, using only the leftmost n pixels for each character, in future foreign versions. There are all kinds of interesting characters in that area, including s-with-hacek, Icelandic eth, and French superscript 'er' and 're' (for "1st", "2nd", etc., I imagine).

One more thing to note about the font is that the characters that aren't used in the game often look rough and unrefined. Check out the circled 11, 12, 13, 14...; they look like an outline font was forced into a 16-point bitmap without any regard for elegance. I'm guessing that the producers had a stock font file and just dumped it into the game, then tweaked the characters that they were actually going to use.

(Aside: How long does MFO take to approve memberships? I've been waiting for four days!)
Skreename
Posts: 1306/1427
This may be a very stupid idea, but it seems to me that if they're completely extraneous, you could possibly use them to put in some of the narrower letter pairs to get what vaguely resembles a less-than-16x16-font and cram more into the boxes without too much work.

Of course, there's the slight issue that it could look less professional if you did that, but... It's possible.

("T h e li m it"... Okay, it'd probably be a bad idea. But it's still out there, one way or the other.)
Guy Perfect
Posts: 394/451
With all due respect, I see no reason in doing so. There's maybe 20 ideographs total in those ranges combined, and they are not required for translating.
srothroc
Posts: 30/56
If you need/want another eye and are able to, you could try posting the unknown characters from 8600-87FF and 8840-8850.
Guy Perfect
Posts: 391/451
It occurred to me that I haven't actually posted anything about how the game's text works. Allow me to do that now. (-:

I've gone through all my notes and compiled a grand list. The other hacker at MFO, RadioShadow, has identified many of the compressed images in the ROM, and has given information about those. I'll post an update for that data when it becomes available.

For now, here's the document:

============================================================
Relevant Offsets
============================================================

042BA4 - Points to 08C59368 -> 0837CBCC (Font Images)
063608 - Menu Data Pointers
37CBCC - Font Image Data
CF7BAC - Story Titles Pointers
CF9D5C - Story Episodes Pointers
CF9E58 - Pilot Profiles Pointers
DCA820 - EoF Padding

============================================================
Menu Data Pointers
============================================================

Data Structure (8 bytes)
  Text Pointer - Unsigned Int32
  Unknown 1    - Unsigned Int32

* 6 structures, one for each selection of the Main Menu
* Unknown 1 could be the image, background, or menu code
  pointer. I haven't looked into it

============================================================
Font Image Data
============================================================

Character Structure
  2x2 Tiles
    8x8 linear bitmap chunks
    16 bits per pixel, second-to-first

* 1611 structures, one for each character in the font
* Even though the font definition itself doesn't represent
  the characters contiguously, the image data is coniguous
* Some characters appear in a different order from the
  font definition

============================================================
Story Titles Pointers
============================================================

51 Unsigned Int32's that point to the image data for each
episode of the story.

Image Structure
  4x14 tiles
    8x8 linear bitmap chunks
    16 bits per pixel, second-to-first

* Image is supposedly compressed with LZ77.
* Image is composed of seven 16-pixel-tall rows
* Rows are arranged horizontally for title image

============================================================
Story Episodes Pointers
============================================================

51 Unsigned Int32's that point to individual pointer tables
which in turn point to the text data for each individual
line of text in any given story episode description.

Diagram:
  All Episodes Pointer Table         - points to:
  Individual Episode's Pointer Table - points to:
  Episode's Individual Lines' Text

* Episode Line Pointer tables are terminated with two EOF
  lines, which are referenced by 085C42E0
* At least 6 lines must be present before EOF's become
  effective. Pad with empty lines if necessary
* Lines are normal text, terminated with 00
* All lines' text data must begin on a 4-byte boundary

============================================================
Pilot Profiles Pointers
============================================================

Data Structure (12 bytes)
  Pilot Text Pointer   - Unsigned Int32
  Machine Text Pointer - Unsigned Int32
  Unknown 1            - Unsigned Int32

* 38 structures, one for each pilot, in the order they
  appear on the Pilot Profiles menu; left-to-right,
  top-to-bottom
* Unknown 1 could be just about anything. I haven't looked
  into it
* Pilot and Machine text must begin on a 4-byte boundary

============================================================
EoF Padding
============================================================

* Unused portion of the ROM. Free game for any data
* A few chunks do have data in them, which include the
  ROM headers for GP Legend and Maximum Velocity among other
  data. The purpose of these chunks is unknown, so don't
  overwrite them
* Padding is composed entirely of FF bytes
* Actually begins at DCA818, but DCA820 is prettier

============================================================
Font Character Assignment Specification
============================================================

16-bit characters, except for control characters

00: String Terminator
0A: Newline

8060-813F: Windows Code Page 1252 (starting at Space)

Miscellaneous Symbols & Punctuation:
8140-817E, 8180-81AC, 81B8-81BF, 81C8-81CE,
81DA-81E8, 81F0-81F7, 81FC

824F-8258: Numerical Digits
8260-8279: Roman Alphabet (Uppercase)
8281-829A: Roman Alphabet (Lowercase)
829F-82F1: Hiragana
8340-8396: Katakana
839F-83B6: Greek Alphabet (Uppercase)
83BF-83D6: Greek Alphabet (Lowercase)
8440-8460: Cyrillic Alphabet (Uppercase)
8470-8491: Cyrillic Alphabet (Lowercase)
849F-84BE: Table Formatting Characters
8540-8553: Circled Numbers (1 to 20)
859F-85A8: Roman Numerals

Unknown characters requiring further analysis:
8600-87FF, 8840-8850

Kanji Character Ranges:
889F-88FC, 8940-897E, 8980-89FC, 8A40-8A7E,
8A80-8AFC, 8B40-8B7E, 8B80-8BFC, 8C40-8C7E,
8C80-8CFC, 8D40-8D7E, 8D80-8DFC, 8E40-8E7E,
8E80-8EFC, 8F40-8F7E, 8F80-8FFC, 9040-907E,
9180-91FC, 9240-927E, 9380-93FC, 9440-947E,
9580-95FC, 9640-967E, 9780-97FC, 9840-9872
Heian-794
Posts: 119/160
Guy, here's a chart of SJIS characters; it matches well with what you've posted.

http://www.rikai.com/library/kanjitables/kanji_codes.sjis.shtml

Thoe characters in the 8600s, etc., are a mystery, as SJIS doesn't have anything assigned there.

But if you look at this EUC-JP table:

http://www.rikai.com/library/kanjitables/kanji_codes.euc.shtml

...you'll find 'kumimoji' (amalgamations of multiple-kana words, such as 'milligram' and 'page', into single characters) and then some circled and parenthesized kanji for things like directions and era names, followed by more math signs such as the 'identically equal' sign and the summation sigma. Maybe the F-Zero font is SJIS but with this miscellany stuck in the empty space? Post a picture of them and I'll tell you what they are.

(This area in particular is notorious for not being compatible with different browsers and applications; I just tried to paste those two rows off the rikai.com side and got a bunch of empty squares.)

FZMV, by the way, had a bunch of characters in 16x16 squares and then compressed them to the appropriate widths when displaying the first part of the course names (Bianca City, Stark Farm, etc.) while using graphics for the second line (First Circuit, Warrior Circuit, etc.). An assembly expert might be able to find that part of the code and get it into this game.

If we could just get the 'cursor' to position itself 8 pixels to the right after drawing something, and then redesigned the font so that the entire character is in the left half of the 16x16 square, we could get decent-looking text without having to implement anything.
Guy Perfect
Posts: 384/451
The font requires 2 bytes for all characters. Using single bytes causes problems, with the exception of 0x0A for newline and 0x00 for string termination. I have tried plotting flat ASCII, to no avail. All characters are printed as full-width regardless of what the character is, and only character values in the list below do anything worth documenting.

I've looked around in the ROM, but can't locate any specification table. The font is likely to be specified programmatically, which isn't something I'd be able to find. Here are my notes on which values correspond to which characters. All characters in the font are documented, but the Unknown characters are simply ones I didn't know how to classify.

Also, Heian-794, according to your sample value for 'A', it's looking like this is indeed a variant of Shift-JIS. The game is just requiring 16-bit characters.

00: String Terminator
0A: Newline

8060-813F: Windows Code Page 1252 (starting at Space)

Miscellaneous Symbols & Punctuation:
8140-817E, 8180-81AC, 81B8-81BF, 81C8-81CE,
81DA-81E8, 81F0-81F7, 81FC

824F-8258: Numerical Digits
8260-8279: Roman Alphabet (Uppercase)
8281-829A: Roman Alphabet (Lowercase)
829F-82F1: Hiragana
8340-8396: Katakana
839F-83B6: Greek Alphabet (Uppercase)
83BF-83D6: Greek Alphabet (Lowercase)
8440-8460: Cyrillic Alphabet (Uppercase)
8470-8491: Cyrillic Alphabet (Lowercase)
849F-84BE: Table Formatting Characters
8540-8553: Circled Numbers (1 to 20)
859F-85A8: Roman Numerals

Unknown characters requiring further analysis:
8600-87FF, 8840-8850

Kanji Character Ranges:
889F-88FC, 8940-897E, 8980-89FC, 8A40-8A7E,
8A80-8AFC, 8B40-8B7E, 8B80-8BFC, 8C40-8C7E,
8C80-8CFC, 8D40-8D7E, 8D80-8DFC, 8E40-8E7E,
8E80-8EFC, 8F40-8F7E, 8F80-8FFC, 9040-907E,
9180-91FC, 9240-927E, 9380-93FC, 9440-947E,
9580-95FC, 9640-967E, 9780-97FC, 9840-9872
Gideon Zhi
Posts: 55/125
The same trick worked for me with Soul Hackers and the PSX Super Robot War games I'm working on Although I eventually want to program vwfs for them anyway, especially the SRWs, it's useful for initial testing.
Heian-794
Posts: 118/160
Guy, I suspect they've simply inserted the entire JIS character set or one of its variations. Not that they'll actually need to use Greek and Cyrillic and parenthesized European numerals and all that exotica; it's probably easier to just take a whole font from a library somewhere and stick it in.

Gideon, that trick worked for me when translating/hacking the sequel to Extra Innings. Somewhere in the game was code that did just what you suggested; character codes up to something like 7F moved the 'cursor' up 8 pixels. Guy, what codes are being used for the fonts you're using? Are the Roman letters included in the two-byte codes (fullwidth) you mention, or are they single-byte in opposition to the Japanese, etc.? For example, in Shift-JIS, a full-width A has the code 8260, which is distinct from the regular A at ASCII 41, and Japanese fonts contain both.

Shift-JIS was set up so that any byte under 7F is read as a single byte, and any byte 80 or over implies that the next byte is connected to it as part of a double-byte character. So the Japanese fonts are all around 8140-9FFF.

I'm on my Mac and can't open the ROM here or I'd look myself -- if the Roman letters you're using come after the kana and before the kanji, there's a good chance that they're 16-bit fullwidth and that there are thus 8-bit, possibly halfwidth, letters floating around somewhere.
Gideon Zhi
Posts: 54/125
Crazy thought, but have you tried overwriting the 16-bit text with 8-bit ascii? There's a decent chance that your game supports it, and will print it half-width besides. You might not have to do any funky assembly work, if you're lucky.
Guy Perfect
Posts: 383/451
There are all flavors of ideographs in the Climax font. I've seen the Roman alphabet, Greek alphabet, Cyrillic alphabet, Katakana, Hiragana, various Kanji, table formatting, mathematical symbols, the entire ANSI codepage supported by Windows, other misc. symbols, etc... There is a LOT of character IDs that can be managed.

There's no reason the Roman alphabet, digits and punctuation can't simply be changed so that they only take up 8 pixels in width, then adjust the program to advance only 8 pixels instead of 16 per-tile. That would rather nicely result in an 8×16 font without changing a whole lot. The only problem is, there's a rather large number of 0x10's in the ROM and I don't know which one is the magical one... though I do have ways of finding out without cracking into the Assembly... I'll look into that.

The text format itself is rather simple. It's uncompressed, 16-bit characters. That's not a problem, since there's more than enough padding space at the end of the ROM to insert all the desired text without running out of room. I've already programmed a utility that takes .txt files, converts the ASCII to the game's internal font specification, then patches the text to the desired places in the ROM. So far, it supports the story texts, pilot profiles and machine introductions. I know where the menu text is, but I haven't implemented it yet due to experimentation with images.
This is a long thread. Click here to view it.
Acmlm's Board - I3 Archive - ROM Hacking - F-Zero Climax - Translation


ABII

Acmlmboard 1.92.999, 9/17/2006
©2000-2006 Acmlm, Emuz, Blades, Xkeeper

Page rendered in 0.005 seconds; used 391.39 kB (max 462.82 kB)