(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
04-27-24 09:09 AM
0 users currently in ROM Hacking.
Acmlm's Board - I3 Archive - ROM Hacking - F-Zero Climax - Translation New poll | |
Pages: 1 2Add to favorites | Next newer thread | Next older thread
User Post
Guy Perfect









Since: 11-18-05

Last post: 6279 days
Last view: 6277 days
Posted on 10-16-06 03:32 PM Link | Quote
I just wanted to give you guys a heads-up that I'm working... well, actually on a team this time... We (the team of us, of course) are making steady progress towards translating F-Zero Climax to English. As you may know, it's the most recent F-Zero game, and it was released only in Japan. There's a LOT of text-based content in the game, so translation to English will provide a pleasant experience for the F-Zero community.

Here's just some boring progress screenshots. We've got two hackers on this one in addition to the translation and localization departments, so it won't take all that long to finish.

Vurano



 





Since: 01-06-06
From: Hoboken N.J.

Last post: 6277 days
Last view: 6277 days
Posted on 10-16-06 09:06 PM Link | Quote
This looks really sweet, I'm a big F-Zero fan.
Tanks

Spiny








Since: 06-19-06
From: Eagle Land

Last post: 6277 days
Last view: 6277 days
Posted on 10-16-06 09:49 PM Link | Quote
Thanks for the heads up Guy Perfect. Looking forward to your (the team's) work. I know it will be good.
Guy Perfect









Since: 11-18-05

Last post: 6279 days
Last view: 6277 days
Posted on 10-16-06 11:06 PM Link | Quote
Pilot profiles and machine introductions can be translated, now.

Metal Knuckles

Tendoru








Since: 12-21-05
From: New Hampshire

Last post: 6277 days
Last view: 6277 days
Posted on 10-17-06 12:10 AM Link | Quote
It could just be me, but that text in the first two screens looks awfully difficult to read against the background imagery, and if much of the text through the game is like that... I'd just suggest thickening the appearence of the font slightly.
Heian-794

Red Paratroopa


 





Since: 01-02-06

Last post: 6278 days
Last view: 6312 days
Posted on 10-17-06 11:45 AM Link | Quote
We need to turn that 16x16 font into an 8x16, or better yet, a proportional font so that we can fit more test in there. (I'd love to design that font if we don't already have one.)

BTW, the text at the bottom of the controls screenshot says "You can now use 'Long Booster'." (〜が使えるようになりました means ...has become able to be used).

I just signed up for MFO again so I'll be able to comment there with the rest of the F-Zero maniacs. This is going to be a fun project!

Just thought of something -- the chapter titles seem to be using variable-width characters. Is there a separate proportional font for that, are there instructions for condensing the characters, or is that stuff graphics and not text at all?
Guy Perfect









Since: 11-18-05

Last post: 6279 days
Last view: 6277 days
Posted on 10-17-06 12:54 PM Link | Quote
The font is built-in to the game. I haven't redone any graphics at all (that's what the other guy's playing around with). What you're looking at is a straight text hack. I'm really not sure how to condense it any, 'cause there aren't enough characters to make letters side-by-side, and the game only allows so many in-program anyway.

Anyone have any ideas that doesn't require manipulating Assembly?
Heian-794

Red Paratroopa


 





Since: 01-02-06

Last post: 6278 days
Last view: 6312 days
Posted on 10-18-06 12:40 PM Link | Quote
Guy, it's beyond my ability, but many people have managed to replace 16x16 fonts, which are ideal for Japanese but look abominable in English, with variable-width fonts or 8x16 variations, which look much better. RPG translators in particular (on TEK Hacks, I think) have done this and it really is an improvement.

One example is Secret of Mana, which loooks spiffy with the 'Chicago' font in there: http://www.romhacking.net/hacks/18/

Dragonsbrethren might be able to help out with this; he's done something similar with the GBA Final Fantasy IV. That game had a variable width font from the beginning, but he adjusted the widths to make them thinner:

http://www.romhacking.net/hacks/153/

Still waiting on acceptance from MFO; once that comes, I'll start posting more story translation!


(edited by Heian-794 on 10-18-06 11:54 AM)
Gideon Zhi

Keese








Since: 12-05-05
From: ...behind you! Boo!

Last post: 6280 days
Last view: 6277 days
Posted on 10-18-06 03:47 PM Link | Quote
I do a lot of RPG translations, and most of my stuff features font width hacks. I don't do much GBA stuff though, and I don't really know the language, I can't really help you there. But you'll find plenty of examples of width-hacked text on my site. Here're a few examples...





Each and every one of these had its font width changed in some fashion or other. In the cases of Valken (upper left) and Madou Monogatari (lower right), a 16x16 was changed to an 8x16. In the case of Front Mission: Gun Hazard (middle left) a 12x16 was changed to 8x16; for Shin Megami Tensei 2 (middle right) a large-width variable font was changed to 8x16 fixed, to fit with the font from Persona 1 and Soul Hackers. Shiren (lower left) was already variable width but the widths were altered to fit the new font, and Cyber Knight 2 (top right) had its font code completely retooled by yours truly to be variable width (whereas the original was 16x16, I think.)
Heian-794

Red Paratroopa


 





Since: 01-02-06

Last post: 6278 days
Last view: 6312 days
Posted on 10-18-06 04:26 PM Link | Quote
Gideon, you're the person I was thinking of when trying to recall those RPGs with VWFs inserted. You did a great job on those.

F-Zero Climax isn't very text-heavy and we could certainly get by with an 8x16 font if that's easier to implement. Could it be something as simple as finding the place that tells the game to move ahead 16 pixels after printing a character, and changing that number to 8?

I think we should fiddle with the shapes of the cahracters a bit too. The lowercase 'a' is a pixel too tall; we should leave a space for descenders too. I could probably whip something up that's more in tune with the font used in the driver names here:



Finished Chapter 11's translation; just waiting for Mr. Fixit to give my account the nod so I can post it!
Gideon Zhi

Keese








Since: 12-05-05
From: ...behind you! Boo!

Last post: 6280 days
Last view: 6277 days
Posted on 10-18-06 11:42 PM Link | Quote
Originally posted by Heian-794
F-Zero Climax isn't very text-heavy and we could certainly get by with an 8x16 font if that's easier to implement. Could it be something as simple as finding the place that tells the game to move ahead 16 pixels after printing a character, and changing that number to 8?


It... might be. That's the way it usually works on the PSX, anyway. I'm not too familiar with the GBA's internals, so I can't really say whether it's a tile-based system or not. If it does operate on a tile-based architecture (like the SNES), it'll be a lot more complicated than just changing a 10 to a 08.
Someguy

Tooky


 





Since: 11-17-05
From: West Virginia-USA

Last post: 6283 days
Last view: 6277 days
Posted on 10-18-06 11:55 PM Link | Quote
The GBA works alot like SNES from what I've seen, it DOES use a tile format like SNES, though wouldn't it be possible to just change a value from 2 tiles to 1, in simular vein? Though it may be a more complex text format, who knows.
Gideon Zhi

Keese








Since: 12-05-05
From: ...behind you! Boo!

Last post: 6280 days
Last view: 6277 days
Posted on 10-19-06 03:15 PM Link | Quote
It has nothing to do with text format. When you're dealing with a tiled font, you have to ensure that it only draws half the tile, its draw position is incremented by 8 bytes instead of 16, its tilemap routine tiles only one tile instead of two, and its tilemap position increment is halved as well. There's a lot that goes into an 8x16 font, but even then it's not nearly as complicated as a variable-width font.
Guy Perfect









Since: 11-18-05

Last post: 6279 days
Last view: 6277 days
Posted on 10-19-06 03:35 PM Link | Quote
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.
Gideon Zhi

Keese








Since: 12-05-05
From: ...behind you! Boo!

Last post: 6280 days
Last view: 6277 days
Posted on 10-19-06 04:05 PM Link | Quote
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.
Heian-794

Red Paratroopa


 





Since: 01-02-06

Last post: 6278 days
Last view: 6312 days
Posted on 10-19-06 04:31 PM Link | Quote
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.


(edited by Heian-794 on 10-19-06 03:36 PM)
Gideon Zhi

Keese








Since: 12-05-05
From: ...behind you! Boo!

Last post: 6280 days
Last view: 6277 days
Posted on 10-19-06 05:50 PM Link | Quote
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.
Guy Perfect









Since: 11-18-05

Last post: 6279 days
Last view: 6277 days
Posted on 10-19-06 07:52 PM Link | Quote
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
Heian-794

Red Paratroopa


 





Since: 01-02-06

Last post: 6278 days
Last view: 6312 days
Posted on 10-20-06 06:19 AM Link | Quote
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









Since: 11-18-05

Last post: 6279 days
Last view: 6277 days
Posted on 10-21-06 06:40 PM Link | Quote
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
Pages: 1 2Add to favorites | Next newer thread | Next older thread
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.024 seconds; used 463.67 kB (max 591.42 kB)