If you look closely at the text in FF6 (FF3 US), you can see they don't use a fixed-width "font" like many games do. Most letters fit in 8-pixel-wide boxes, but narrow ones like "I", "i" and lowercase "l" only take up 4 pixels, lowercase "t" takes up 6, and there are also wider characters, like "w" at 12 pixels. See the attached (cropped & magnified) image.
How did they get this effect? The text is rendered as part of BG #3, but since usually backgrounds are tiled at a minimum resolution of 8x8, I don't understand how you'd get individual characters to be only 4, 6, or 12 pixels apart.
My best guess: perhaps they generated the background tiles dynamically at runtime? For example, given the string "wi", you could make one tile that's the first 2/3 of the "w" (8 out of the 12 pixels), and then a second tile that's the rest of the "w" (4 pixels) plus the "i" (4 more pixels). Given a line of text to display, you could render tiles in RAM as you scan the string from left-to-right, and upload the resulting 8x8 tiledata.
That seems like a an awful lot of work just to render text on the screen
... but I guess it might be feasible, since you only have to compute it every time the text *changes*, which is relatively infrequent since it's an RPG.
Anyways, anyone have other ideas (or facts?) I haven't yet had time to play around with a debugger and dig deeper
I didn't check this particular game, but your description of dynamically rendered tiles is indeed how it usually works. These are called "variable width fonts", and tepples is a big fan of them, so I'm sure he'll join the discussion soon.
mcmillen wrote:
That seems like a an awful lot of work just to render text on the screen
If you write the code once, you can use it 10,000 times in your game. It's probably worth spending a little extra time on, especially if it's one of the most important tech features of your game.
rainwarrior wrote:
It's probably worth spending a little extra time on, especially if it's one of the most important tech features of your game.
Is this something that kids in the 80's and 90's would care about, though? Sometimes people here tell me that bugs like glitchy scroll splits aren't bad enough to justify the time/money necessary to fix them, but a slight aesthetic improvement is worth the time/money? Gamers hardly cared about all the engrish present in old games, I doubt they'd care about something as minor as letter spacing.
tokumaru wrote:
Is [a proportional font] something that kids in the 80's and 90's would care about, though? Sometimes people here tell me that bugs like glitchy scroll splits aren't bad enough to justify the time/money necessary to fix them, but a slight aesthetic improvement is worth the time/money?
If it lets you fit more text in the same box, it might be effort-worthy.
Proportional fonts can be more compact...
...whether or not the individual glyphs are made thinner. (Right side is from a simulated TV.)
This leaves more space for dialogue in Super NES versions of
Mario Is Missing and
Mario's Time Machine.
In this screenshot of the first volume of
Action 53 (which was
made available on cartridge), more compact text leaves room for a screenshot or other graphics. And
it looks great on a TV.
Smaller text makes interactive fiction more comfortable.
The SNES only has 32 tiles across the screen width, and once you account for the unsafe margin, that becomes 28. That heavily restricts how long your text lines can be. Using variable width can let you extend the amount of characters to something like 30-40 characters which is more manageable. This isn't an issue for most games, but for text-heavy ones like RPGs it's a big deal, especially since the original script was usually in Japanese and the English counterpart would most likely expand to take up more space.
Of course nothing beats the Phantasy Star II Text Adventures which not only does variable width fonts, it even does kerning (to the point that sometimes characters can overlap if the spacing is right). And yes I checked, it isn't something from the English fantranslation, it happens in the original Japanese text as well.
Rendering text in a proportional font involves bit shifting each line of pixels in a glyph, ORing each shifted line into a buffer, and copying the buffer to CHR RAM. My VWF engine does this at a rate of roughly one line of text per frame on the NES. It'd probably be slightly faster if ported to the Super NES, which has a faster CPU, instructions that read 16 bits at a time, and a multiplier that can be (ab)used as a shifter to move each glyph into position.
Each player's menu in
RHDE: Furniture Fight takes three frames to refresh
But even if your text engine can't render VWF, you can still make a ligature that stuffs two thin letters into one tile.
Earthbound Beginnings (the English version of
Mother, not officially released until the Wii U era) has quite a few ligatures, seen at the top of its entry in
this 8x8 font collection. My own game
Thwaite has only one ligature, but it flaunts it in words like "rebu
ilt miss
ile s
ilo", "st
ill", "T
ilda", and "M
ilo".
tokumaru wrote:
Is this something that kids in the 80's and 90's would care about, though? Sometimes people here tell me that bugs like glitchy scroll splits aren't bad enough to justify the time/money necessary to fix them, but a slight aesthetic improvement is worth the time/money? Gamers hardly cared about all the engrish present in old games, I doubt they'd care about something as minor as letter spacing.
People care whether things look a little nicer, just not to the same extent they care whether Relm's sketch ability might wreck their saved game. Things that are a subtle improvement are still appreciated, but they're subtly appreciated.
There are about 1000 subtle ways that Final Fantasy III (6) looked better then II (4). You could have cut each of them one by one with the justificiation that "nobody's going to care if you miss this one" and be back right where you started. The graphical arms race is finally dying out, I think, but in the early 90s nice screenshots were one of your primary marketing tools. I'm sure many people at Squaresoft thought this feature mattered. An RPG like this so much of the game content
is text, so why not make it look nice? In a game with only 2 cutscenes, you don't see it much, but this game has text constantly.
For the record, I did notice the variable-width text at the time, and I thought it was great, but I was also a kid trying to make my own JRPG in my basement, so text rendering was a feature I had reason to be thinking about.
The "shadowing" effect on the font, by the way, is also done with software (and done very efficiently/quickly). When working on Otogirisou I had to go digging into how they did their font compression routine and found it to be a 1bpp (1-bit-per-pixel) font, i.e. black and white only, yet the on-screen font was 2bpp (due to the shadowing and what the actual SNES mode mandated). I tend to use a combination of computer and paper/pencil when reverse-engineering something.
I was going to paste a link to Dropbox with my work, but it appears their shit is really messed up/broken right now for me in some very weird way. Edit: It seems Palemoon has
a massive problem with Dropbox and CSP, so I got it to work via the workaround posted there. Here's the link:
https://www.dropbox.com/sh/80t8zwzoxg7z ... 34BQsntcOaAll rephrased: when you have a VFW font, everything has to be done in software. You "render" your text to a piece of memory/buffer, then blit (copy) that into PPU RAM whenever you need, just like you described. Because everything is done in software, you can do things like manipulate the font or add effects or do whatever you want with it. The downside is that you have less CPU time to do other things than had you stuck with a static-width font.
VWF stuff tends to often be a real bitch to reverse-engineer, so if you're working on a romhacking project, you'll find that you're going to be spending a *lot* of time in a debugger + staring at disassembled code. Expect to spend several days (possibly a couple weeks) on this part.
The Secret of Mana VWF project is a gold standard for how much it can improve a game. With the added room in text boxes, the script was able to be expanded out with more personality and better explanations.
some screenshotsalso props to tepples for Furniture Fight.
For that matter, Phantasy Star II vs Phantasy Star IV, although honestly I think the butchering in the localization of the former had more to do with having to stick to the same ROM size since it could easily handle an arbitrary amount of lines. (the original Japanese script lacked kanji so every character was one byte, but the corresponding English text would take up twice as much, so yeah...) Phantasy Star IV works around the issue by outright compressing the text (and English should compress better than Japanese).
I wonder if changing the percussion in the localization of Phantasy Star II is also to make room in memory.
EDIT: in fact, looking at those screenshots, variable width isn't helping much there since most characters (even spaces) still seem to be 8 pixels wide. So it may be a case of running out of ROM space there as well (a fantranslation doesn't have to cope with larger ROMs being more expensive).
whicker wrote:
The Secret of Mana VWF project is a gold standard for how much it can improve a game.
Is that actually a retranslation? Or did they invent the extra dialogue themselves?
Asaki wrote:
Is that actually a retranslation? Or did they invent the extra dialogue themselves?
http://www.romhacking.net/hacks/18/http://www.romhacking.net/hacks/snes/pa ... readme.txtYou can decide for yourself...
403 Forbidden
You don't have permission to access /hacks/snes/patches/18readme.txt on this server.
VWF is fine for dialogue, but it gets to be a nightmare for 8x8 item text. There, you run into extreme issues with tile data space, the speed of rendering entire screens of information, double buffering if you don't want to cause screen flickering during refresh, etc.
It is so entirely worth the effort, but sadly nobody does it. Not even ROM hackers that are fully capable of it. The only two major examples I can think of are Der Langrisser and Bahamut Lagoon, and the latter by Dejap completely botched the implementation to the point where it's unplayably bad unless you use the "ZSNES lolwhatvblank?" patch, and even then is quite hideous with seeing garbled tiles as you scroll through lists of data.
Anyway, the one thing that stands out in my mind is that Lunar: Silver Star (the good one, not the shitty remakes) was all 8x16 fixed-width all-caps. Yeah, all-caps. And to tell you the truth, I never noticed that as being an issue until after I started ROM hacking. But today, it's a really big negative to me to play games with fixed-width fonts and heavily abbreviated item names. I guess we all get pickier with age. Exposure to so many games competing for our attention gives us the luxury of seeking out and appreciating those with extra attention to detail put into them.
> You don't have permission to access /hacks/snes/patches/18readme.txt on this server.
Come on, you of all people should know how to bypass an anti-leech script.
tepples wrote:
You don't have permission to access /hacks/snes/patches/18readme.txt on this server.
You do if you use the link in the page instead of the direct link posted here.
You can copy/paste the URL into the address bar (or do like I did and click on the address bar and hit enter when the 403 comes up). I think that's just hotlinking protection.
Then let me rephrase:
I find it not quite useful to add a link that does not work to your post. Sure, the reader can circumvent
Referer protection, but the author ought to mark each such link as one whose
Referer protection needs to be circumvented. Not getting the link right the first time causes a cached response that leads to four wastes of time:
- Click the link and get 403 Forbidden.
- Copy and paste the link and get 403 Forbidden because the original 403 Forbidden response has not expired out of the browser's cache.
- Press Ctrl+R and get 403 Forbidden because normal Ctrl+R does not bypass the browser's cache.
- Google for a while and discover that you have to press Ctrl+Shift+R to bypass the browser's cache. Then find that this doesn't work because an upstream transparent proxy has cached the 403 response, and the server isn't sending the Vary: Referer HTTP header with the response like it should.
If your doing a screen of items, can't you turn off the screen for a couple of frames to render the screen?
tepples wrote:
I find it not quite useful to add a link that does not work to your post.
Most of the time people don't know they're posting such links though, since they usually reach the URLs through the intended means. I imagine that because of this you felt the need to warn others about the link, but since your message was just a transcription of the error, it may not have been clear.
psycopathicteen wrote:
can't you turn off the screen for a couple of frames
Not if player 1 and player 2 have separate lists of items, or if there are several levels of menus and you want the player to traverse them without triggering a seizure. Then you need to update part of the screen every vblank.
I believe it was byuu that pointed out that it's entirely reasonable in some cases to prerender this sort of text and simply load it whole from ROM when needed. But it was a while back and I wasn't as well versed in classic console jargon as I am now, so maybe I'm misrepresenting what he said...?
As for me, myself, personally... I have a Super FX chip and I intend to use it.
Prerendering proportional text and storing it in the ROM works for a small number of constant strings. You see this, for example, in the credit screen of Tetris 2 and for short strings used in menus and HUDs. It doesn't work so well for A. numbers, B. user-entered names, or C. a very large number of strings, as might be found in dialogue or a help file. RHDE includes both A and C, and RPGs tend to include at least B and C even if they use a fixed 8x8 or 8x16 font for numbers.
IIRC the case being examined was an inventory list.
Whether precomposed text is practical for an inventory list depends on how many unique items there are. Something with thousands of different items, like Animal Crossing series, will have a lot harder time than something with only a dozen. This goes double if the game is multilingual, such as the PAL versions. And even with fewer items, there's still a space-time tradeoff; RHDE has fewer than 20 items but they're all rendered in real time because the game is only 32K.
> Then let me rephrase
Yes, we know. And for that matter, referer checking is stupid, anyway.
Everyone knows about it, so when people see 403, they just try the link again. All you're doing is annoying people trying to access your site.
The net result is going to be more people using things like Javascript to suppress referers.
I'm frankly surprised browsers don't already feature a privacy option to suppress cross-domain referers.
I'm also surprised we have "nofollow" but not "norefer" yet.
> Prerendering proportional text and storing it in the ROM works for a small number of constant strings
At 2bpp, it's 16 bytes per tile. Given each name is a different length, we'll average on 8 tiles per item name. So expand the game by 1MiB* and you have room for 8,192 items. Bahamut Lagoon has 128 items (so you'd need 16KiB of space for it), and I'd bet a game like FF6 probably has 256 - 512.
(* yes, expansion like this wouldn't be practical in 1996 for a commercial cart; but today that isn't a concern.)
I guess most people don't care. But I'm kind of hopeful that once we finally run out of SNES games to translate, people will start going back and redoing old fan hacks (and commercial releases) to be of much higher quality.
Thanks to everyone for all the super-detailed replies; it's been fascinating to follow along. In my real job I'm a software engineer, but have done a lot of data visualization stuff, so noone has to convince me that variable-width fonts are worthwhile (for information density *and* for looking good).
My intent here is mostly to understand how things are (& were) programmed so that I can improve my own understanding and ideas of things to try... not looking as much into translation / ROM hacking so much as learning to be an effective from-scratch homebrewer
Anyways, thanks again for all the replies, it's been really educational.
Re: sites that do dumb things with Referer: you can get around this by wrapping it Google's link redirector, like so:
https://www.google.com/url?sa=t&url=http://www.romhacking.net/hacks/snes/patches/18readme.txt(You do need the "sa=t" parameter.)
byuu wrote:
Anyway, the one thing that stands out in my mind is that Lunar: Silver Star (the good one, not the shitty remakes) was all 8x16 fixed-width all-caps. Yeah, all-caps. And to tell you the truth, I never noticed that as being an issue until after I started ROM hacking. But today, it's a really big negative to me to play games with fixed-width fonts and heavily abbreviated item names. I guess we all get pickier with age. Exposure to so many games competing for our attention gives us the luxury of seeking out and appreciating those with extra attention to detail put into them.
I think it also depends entirely on the font, some fonts are really better off being monospaced and all-caps (the latter is
especially true if the lower case characters would end up squished, I hate how many fantranslations have 7×5 lowercase characters that make them a pain to read). Also all-caps tends to make monospace more tolerable, incidentally (since there I think only the I letter becomes a big issue in terms of spacing).
Looking at Lunar's screenshots though, that font looks like it's horrible for reading in the long term (particularly the line spacing), and this is from somebody who's OK with monospaced all-caps fonts...
byuu wrote:
> You don't have permission to access /hacks/snes/patches/18readme.txt on this server.
Come on, you of all people should know how to bypass an anti-leech script.
My first thought too =P Maybe it's just a warning to others?
koitsu wrote:
Asaki wrote:
Is that actually a retranslation? Or did they invent the extra dialogue themselves?
http://www.romhacking.net/hacks/18/http://www.romhacking.net/hacks/snes/pa ... readme.txtYou can decide for yourself...
Hmm...it doesn't look like it says. "Text has been rewritten" could mean either way, really.
Asaki wrote:
Hmm...it doesn't look like it says. "Text has been rewritten" could mean either way, really.
This is why I said "you can decide for yourself".
This means it's not a retranslation. If they took the original text, re-translate it and insert it into the game, it would be a re-translation. Changing the text to "look better" is not a retranslation. At least this hack does not pretend to be one.
J2E's FF4 so called "re-translation" is an offender here, it does not re-translate the game (or, at least, only parts of it), yet they self claimed their hack was a retranslation.
The Secret of Mana VWF hack
contains references to Final Fantasy VII, so if it's supposed to be a retranslation, it's not a very faithful one.
Revenant wrote:
The Secret of Mana VWF hack
contains references to Final Fantasy VII, so if it's supposed to be a retranslation, it's not a very faithful one.
Fascinating website, never had come across it before...
and yeah a little controversy is fun now and then.
But please don't damn the whole project as "unfaithful" for making fun of Square fanbois. (or being one). As for personal opinion, I never considered it a literal translation either, just more fun and understandable to play.
Revenant wrote:
The Secret of Mana VWF hack
contains references to Final Fantasy VII, so if it's supposed to be a retranslation, it's not a very faithful one.
That's too bad. I tried replaying the game a couple years ago (hadn't played it since I was a kid), and that game could seriously use a proper re-translation. IMO, Final Fantasy Adventure had a more enjoyable localization >_<
Maybe the iPhone version was a retranslation ?
no, the iphone version uses the original text.