<- 1  -   of 75 ->
^^
vv
List results:
Search options:
Use \ before commas in usernames
reversing fonts by reversing fonts.

(second reversing meaning reverse engineering, obviously).

yay for being able to repack GGuiSys.
What have you worked out about the font format? Always wanted to crack that one but haven't managed to work out much about it just yet.

I wanna make a mod that's gonna require a lot of custom strings, so I started toying with a STRG editor. Trying to get it to display the text in the editor with the correct formatting too. So far it displays strings correctly with the correct colors and alignment, though there's some formatting issues. I'd really love to get it to display with the game's actual fonts though.

It's not really necessary because STRG is a simple format anyway so it wouldn't really be hard to just make them manually, but I figure I can integrate it into PWE later and that could be pretty useful for some stuff.
mm, I bet I know what you have in mind for that mod. It was the first thing I thought of when I realised modding this game had suddenly become plausible.

OK, the fonts. The first thing about the fonts is that I think to be able to make changes you seem to need to alter GGuiSys.pak. There are five fonts in there in 0-00. The Metroid#.pak files all contain a font each but -- well, maybe someone knows better than I do, but they don't seem to be used. I tried deleting the .FONT in Metroid2.pak and repacking it and the game didn't seem bothered.

Because PakTool wouldn't repack GGuiSys I got distracted by independently reversing the PAK file format and writing my own unpacker/repacker, which still contains some weird bugs (I thought I had it, but I used it to repack a randomised game last night and it crashed as I tried to leave Main Plaza). Now I think about it, maybe the fonts aren't even compressed in that file so you could just hex edit them directly (I haven't checked). So I've actually not looked at the font stuff for a couple of weeks -- I'd hoped to have it 100% figured out before I dropped public documentation on it, but never mind.

Let me get this slightly better organised and I'll give you what I have.
The file comes in three parts -- header, character definitions, and then what I believe to be a kerning table. Take all this with a pinch of salt because I'm just reading it out of my source code (which again, I was going to publish, but it's not finished yet, or even necessarily correct). There are likely to be mistakes in this.

HEADER (variable length):
Code:
<"FONT":32> -- magic value
<VERSION:32> -- 2 for MP1, 4 for MP2?
<unknown1:32>
<unknown2:32>
<unknown3:32>
<unknown4:32>
<unknown5:16>
<unknown6:32>
<unknown7:32>
[FONT NAME ...] -- null-terminated ASCII string
<TEXTURE ID:32>
<unknown8:32>
<NUMBER OF CHARACTER TABLE ENTRIES:32>


The important thing here is the texture ID (the .FONT itself doesn't contain any graphics), which obviously points to a .TXTR. I don't currently know what all those unknown fields do, they mostly contain smallish positive values. They may be some sort of default character dimensions or something, but that's a total guess.

After the header there is a repeating record, with one instance of the record for each character contained in the font. As you will have seen from the STRG format, these games use standard UTF-16 for character encoding. The record format features an interesting difference between Prime 1 and Prime 2, wherein some of the fields were downgraded from 32-bit values to 8-bit values, presumably to save RAM. There are a couple of new fields in the record for Prime 2, also.

The interesting fields are the texture coordinate fields and the dimension fields. The texture coordinate fields somehow define a rectangle into the texture that was specified in the header, where the font graphics are actually stored. I don't know anything about the textures yet so I don't know the relationship between these numbers and how exactly they offset into the texture file. I've listed these fields as 32-bit quantities but they may in fact each be a pair of 16-bit quantities instead, I'm not sure. They all seem to have 3 in the top nybble (so 0x3nnnnnnn). In prime 1, all or nearly all of them have 0 in the bottom four nybbles (so 0x3nnn0000), but this is not true of prime 2, which puts all sorts of values in the low 16 bits. I have a note here that the range is 0x3b000000 -> 0x3f7f0000 for one of the prime 1 fonts. You can try altering these values, though. Swapping the coordinates for left and right will flip the character horizontally (this is the effect I showed in the picture I posted). You can change them to other values and you will see bits of graphics from other characters seeping into the edges of the modified character. I have a suspicion they may be some kind of fixed-point decimal values rather than integers. If you've played with the textures already you might know better exactly how these values work.

Note that changing the texture rectangle does not actually change the raster size of the character. The rectangle in the texture is automatically scaled to the character dimensions, which (I think) are specified in the dimension fields.

CHARACTER TABLE, ONE RECORD (46 bytes (mp1) / 27 bytes (mp2), repeating)
Code:
<CHARCODE:16> -- UTF-16 character representation ('A', 'B' etc). The last record will have NULL here.
<TEXTURE COORDINATE LEFT:32>   | Defines a rectangle into the texture specified in the header.
<TEXTURE COORDINATE TOP:32>    | See notes.
<TEXTURE COORDINATE RIGHT:32>  | 
<TEXTURE COORDINATE BOTTOM:32> |
(for prime 1 only -- 7 x 32-bit fields. character dimensions?) {
  <unknown A:32> | I haven't tried modifying these yet, but they are probably things like
  <unknown B:32> | the size of the character's clipping rectangle and how wide the
  <unknown C:32> | character is in pixels (so how far the "print head" should advance when the
  <unknown D:32> | character is plotted, in both X and Y directions).
  <unknown E:32> |
  <unknown F:32> |
  <KERNING TABLE INDEX:32> -- index into the kerning table at the bottom of the file.
                              for many characters this seems to be one beyond the end of the
                              kerning table, which presumably means there is no kerning
                              adjustment for this character.
}
(or for prime 2 only -- 9 x 8-bit fields. character dimensions?) {
  <unknown X: 8> -- not present in prime 1
  <unknown A: 8>
  <unknown B: 8>
  <unknown C: 8>
  <unknown D: 8>
  <unknown E: 8>
  <unknown F: 8>
  <unknown Y: 8> -- not present in prime 1
  <KERNING TABLE INDEX:8>
}


Kerning is a way of making adjustments to the inter-character spacing for particular cases where one specific character is followed by another specific character.

KERNING ADJUSTMENT TABLE, HEADER (4 bytes)
Code:
<NUMBER OF RECORDS IN KERNING TABLE:32> -- just the number of records in the kerning table that follows


KERNING ADJUSTMENT TABLE, ONE RECORD (8 bytes, repeats)
Code:
<CHARCODE:16> -- UTF-16 character representation of first character ('A', 'B' etc)
<CHARCODE:16> -- UTF-16 character representation of following character
<KERNING ADJUST:32> -- *signed* 32-bit value which defines how much the X-spacing should be adjusted
                       for this combination of characters. it may be positive (e.g. 0x00000002) or
                       negative (e.g. 0xfffffffe).
Edit history:
Aruki: 2014-07-11 09:58:14 am
Awesome. I'm gonna have to take a look at this later.

I'm gonna need to start saving the filenames to be able to repack GGuiSys I think, it seems the dol actually uses those names to identify certain files. Kind of a shame because I was hoping to come up with a way to optimally repack everything without needing a list file, but I'm not sure how now.

For the record, there aren't any unused files in any of the paks. :P I'm fairly certain they repacked these by parsing the MLVL and MREAs, and including all files referenced by those files (as well as those files, and those files, and etc). That's why there's some "unused" stuff on the disc like the green Phazon Suit and the Ripper; nothing is set to use those assets, but they are referenced by files that are used in-game, so they got included in the pak. In the case of those font files, they're used by world teleporters. They seem to have copies in GGuiSys.pak though, so it's possible the game looks in there for the fonts and they just got included in the paks because the automated system saw that they were used by the world teleporters.

I wish I could show the STRG editor, it's starting to look pretty nice. Fixed most of the formatting issues and it resaves mostly correctly now. I just moved and just got my computer down to my new place, but I don't have Internet yet, so I'm having to use my phone for everything. Typing long posts like this on a phone is not fun.
I've just remembered that actually the texture coordinate fields in prime 1 often have 0x8000 in the lower 16 bits rather than 0x0000 as I asserted above. My best guess right now is that this is a sub-pixel adjustment value. 0x8000 may mean "half a pixel". I don't know.

I saw those names in the DOL. well, you could append the object names to the filenames. like A1B2C3D4_object_name_goes_here.TXTR, which is actually what my unpacker/repacker does by default (there's an option to turn this off for use with the randomiser). but that was intended just to be an aid to hacking, so you can see what the files are if they have a name -- my packer does use a list file just because I thought it gave me the best chance of having everything work in an environment without any debugging facilities.

it's interesting how some of the IDs are the same between prime 1 and 2, like one of the fonts, despite the fact that the font format is different between the games. it suggests strongly to me that retro have some global database which contains every asset that anyone has ever made there, regardless of which game the asset belongs to.
Edit history:
Aruki: 2014-07-11 11:10:06 am
Yeah, I'm guessing they have something like that, and their packing tool likely pulls files out of that database. Would perfectly explain the unused stuff.

The main reason my repacker doesn't extract the filenames is because it's a bit more useful for modding to just have the ID, since almost everything uses the ID to identify the file; easier for me to identify the correct files if I don't have to worry about the names. :P Something like what you suggested to include both of them would probably work and wouldn't be that much harder I guess. I think my preferred solution would be to dump the filename table out to the txt file. Could probably use a separate txt file for it if I end up getting to the point that I don't need the file list to repack optimally anymore.
Like I accidentally posted in the randomiser thread, (with no absurd amount of effort) can we make a mod where enemies don't drop health, save stations don't refill your health, and getting energy tanks only fills up 100 health?
Yes, not sure, and yes.

Is anyone interested in the string editor? If anyone had a use for it I might release it soon when I can since it's coming along pretty well. Otherwise I might just wait and integrate it into PWE.
What exactly does it do? I've been 'sorta but not really' paying attention to this thread but I'd prolly play around with it if you uploaded... up to you. Can always wait :)
It's just a viewer/editor for lines of text, basically. So if you want to edit the logbook entries or make custom HUD memos (like me) or just read scan data or whatever straight out of the game files, it'll let you do that.
Edit history:
Aruki: 2014-07-14 10:35:02 pm
Finally got all set up, so here's what my STRG editor looks like, in case anyone's curious. The UI is kinda rough, I'd wanna make it look a bit nicer before releasing it.




It makes it pretty easy to make custom strings.



One slightly interesting thing: The STRG for the inventory screen has 100 different strings in it. Most of them are just little bits of text used for the various buttons on the UI. String #45, though, reads "Phazon Combo"... right after the strings for the beam combos that are actually in the game. Can't really imagine how a beam combo for the Phazon Beam would work unless the concept behind the Phazon Beam was originally very different.
my umbrella goes directly to Bankai
hmm the Hyper Beam from mp3 might have been a concept around since mp1's dev days and it probably had a beam combo planned as well.

in some interviews, i recall the devs saying they used ideas they planned but couldn't implement in mp1 in the sequels. SA was the most popular one since they wanted it for mp1 but it wasn't until mp2 that it was realized. they probably wanted the Phazon Beam to be a regular weapon and not just used in the final boss battle.
So I looked into those font dimension fields a bit more.

Code:
  <unknown A:32> -- glyph left padding
  <unknown B:32> -- distance to advance print head before printing next character? usually equals width (field D)
  <unknown C:32> -- glyph extra right padding?
  <unknown D:32> -- width  | (texture region is scaled to fit
  <unknown E:32> -- height |  this box)
  <unknown F:32> -- glyph baseline offset? raising this value moves the glyph up.
                    often same value as height (E)?
Edit history:
Aruki: 2014-07-16 06:59:21 pm
Aruki: 2014-07-16 06:55:41 pm
I was just looking at that format as well actually. I'm not sure if you've already realized, but the texture coordinate values are floats; they range between 0.0 and 1.0.

If it helps here's a quick dump of the data in b7bbd0b4.FONT

Quote:
Deface18B
4344027b.TXTR
96 characters

Character: 
L: 0.349609 | T: 0.667969 | R: 0.357422 | B: 0.683594
0 / 1 / 7 / 1 / 1 / 0

Character: !
L: 0.681641 | T: 0.574219 | R: 0.701172 | B: 0.714844
1 / 4 / 1 / 4 / 17 / 17

Character: "
L: 0.853516 | T: 0.597656 | R: 0.900391 | B: 0.636719
0 / 10 / 1 / 11 / 4 / 17

Character: #
L: 0.298828 | T: 0.175781 | R: 0.365234 | B: 0.292969
1 / 15 / 1 / 16 / 14 / 16

Character: $
L: 0.353516 | T: 0.464844 | R: 0.396484 | B: 0.589844
1 / 10 / 2 / 10 / 15 / 15

Character: %
L: 0.708984 | T: 0.300781 | R: 0.763672 | B: 0.433594
0 / 13 / 0 / 13 / 16 / 16

Character: &
L: 0.400391 | T: 0.464844 | R: 0.443359 | B: 0.589844
1 / 10 / 2 / 10 / 15 / 15

Character: '
L: 0.138672 | T: 0.667969 | R: 0.162109 | B: 0.707031
0 / 5 / 1 / 5 / 4 / 17

Character: (
L: 0.0800781 | T: 0.574219 | R: 0.111328 | B: 0.730469
1 / 7 / 1 / 7 / 19 / 17

Character: )
L: 0.0449219 | T: 0.574219 | R: 0.0761719 | B: 0.730469
1 / 7 / 1 / 7 / 19 / 17

Character: *
L: 0.814453 | T: 0.582031 | R: 0.849609 | B: 0.644531
1 / 8 / 1 / 8 / 7 / 17

Character: +
L: 0.490234 | T: 0.574219 | R: 0.533203 | B: 0.652344
1 / 10 / 1 / 10 / 9 / 12

Character: ,
L: 0.00195313 | T: 0.613281 | R: 0.0292969 | B: 0.675781
1 / 6 / 0 / 6 / 7 / 4

Character: -
L: 0.388672 | T: 0.652344 | R: 0.435547 | B: 0.683594
1 / 10 / 1 / 11 / 3 / 9

Character: .
L: 0.490234 | T: 0.660156 | R: 0.517578 | B: 0.699219
1 / 6 / 0 / 6 / 4 / 4

Character: /
L: 0.935547 | T: 0.425781 | R: 0.986328 | B: 0.558594
1 / 12 / 0 / 12 / 16 / 16

Character: 0
L: 0.123047 | T: 0.183594 | R: 0.177734 | B: 0.324219
1 / 13 / 1 / 13 / 17 / 17

Character: 1
L: 0.880859 | T: 0.449219 | R: 0.923828 | B: 0.589844
1 / 10 / 0 / 10 / 17 / 17

Character: 2
L: 0.181641 | T: 0.292969 | R: 0.236328 | B: 0.433594
1 / 13 / 1 / 13 / 17 / 17

Character: 3
L: 0.240234 | T: 0.292969 | R: 0.294922 | B: 0.433594
1 / 13 / 1 / 13 / 17 / 17

Character: 4
L: 0.0605469 | T: 0.300781 | R: 0.115234 | B: 0.441406
1 / 13 / 1 / 13 / 17 / 17

Character: 5
L: 0.298828 | T: 0.300781 | R: 0.353516 | B: 0.441406
1 / 13 / 1 / 13 / 17 / 17

Character: 6
L: 0.00195313 | T: 0.316406 | R: 0.0566406 | B: 0.457031
1 / 13 / 1 / 13 / 17 / 17

Character: 7
L: 0.357422 | T: 0.316406 | R: 0.412109 | B: 0.457031
1 / 13 / 1 / 13 / 17 / 17

Character: 8
L: 0.416016 | T: 0.316406 | R: 0.470703 | B: 0.457031
1 / 13 / 1 / 13 / 17 / 17

Character: 9
L: 0.119141 | T: 0.332031 | R: 0.173828 | B: 0.472656
1 / 13 / 1 / 13 / 17 / 17

Character: :
L: 0.115234 | T: 0.613281 | R: 0.134766 | B: 0.699219
1 / 4 / 2 / 4 / 10 / 14

Character: ;
L: 0.322266 | T: 0.582031 | R: 0.345703 | B: 0.691406
1 / 5 / 1 / 5 / 13 / 14

Character: <
L: 0.447266 | T: 0.574219 | R: 0.486328 | B: 0.667969
1 / 8 / 1 / 9 / 11 / 14

Character: =
L: 0.349609 | T: 0.597656 | R: 0.384766 | B: 0.660156
1 / 8 / 1 / 8 / 7 / 12

Character: >
L: 0.537109 | T: 0.574219 | R: 0.572266 | B: 0.667969
1 / 8 / 1 / 8 / 11 / 14

Character: ?
L: 0.826172 | T: 0.300781 | R: 0.876953 | B: 0.441406
1 / 12 / 0 / 12 / 17 / 17

Character: @
L: 0.119141 | T: 0.480469 | R: 0.162109 | B: 0.605469
1 / 10 / 2 / 10 / 15 / 15

Character: A
L: 0.462891 | T: 0.00390625 | R: 0.517578 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: B
L: 0.521484 | T: 0.00390625 | R: 0.576172 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: C
L: 0.580078 | T: 0.00390625 | R: 0.634766 | B: 0.144531
1 / 12 / 1 / 13 / 17 / 17

Character: D
L: 0.638672 | T: 0.00390625 | R: 0.693359 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: E
L: 0.697266 | T: 0.00390625 | R: 0.751953 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: F
L: 0.755859 | T: 0.00390625 | R: 0.810547 | B: 0.144531
1 / 12 / 1 / 13 / 17 / 17

Character: G
L: 0.814453 | T: 0.00390625 | R: 0.869141 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: H
L: 0.873047 | T: 0.00390625 | R: 0.927734 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: I
L: 0.603516 | T: 0.574219 | R: 0.626953 | B: 0.714844
1 / 5 / 1 / 5 / 17 / 17

Character: J
L: 0.931641 | T: 0.00390625 | R: 0.986328 | B: 0.144531
1 / 13 / 1 / 13 / 17 / 17

Character: K
L: 0.466797 | T: 0.152344 | R: 0.521484 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: L
L: 0.880859 | T: 0.300781 | R: 0.931641 | B: 0.441406
1 / 12 / 0 / 12 / 17 / 17

Character: M
L: 0.00195313 | T: 0.00390625 | R: 0.0878906 | B: 0.144531
1 / 21 / 2 / 21 / 17 / 17

Character: N
L: 0.525391 | T: 0.152344 | R: 0.580078 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: O
L: 0.583984 | T: 0.152344 | R: 0.638672 | B: 0.292969
1 / 13 / 0 / 13 / 17 / 17

Character: P
L: 0.642578 | T: 0.152344 | R: 0.697266 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: Q
L: 0.345703 | T: 0.00390625 | R: 0.400391 | B: 0.167969
1 / 13 / 1 / 13 / 20 / 17

Character: R
L: 0.701172 | T: 0.152344 | R: 0.755859 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: S
L: 0.759766 | T: 0.152344 | R: 0.814453 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: T
L: 0.0605469 | T: 0.152344 | R: 0.119141 | B: 0.292969
0 / 14 / 1 / 14 / 17 / 17

Character: U
L: 0.818359 | T: 0.152344 | R: 0.873047 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: V
L: 0.876953 | T: 0.152344 | R: 0.931641 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: W
L: 0.0917969 | T: 0.00390625 | R: 0.177734 | B: 0.144531
1 / 21 / 2 / 21 / 17 / 17

Character: X
L: 0.935547 | T: 0.152344 | R: 0.990234 | B: 0.292969
1 / 13 / 1 / 13 / 17 / 17

Character: Y
L: 0.474609 | T: 0.300781 | R: 0.529297 | B: 0.441406
1 / 13 / 1 / 13 / 17 / 17

Character: Z
L: 0.404297 | T: 0.167969 | R: 0.462891 | B: 0.308594
1 / 13 / 1 / 14 / 17 / 17

Character: [
L: 0.291016 | T: 0.574219 | R: 0.318359 | B: 0.738281
1 / 6 / 1 / 6 / 20 / 17

Character: \
L: 0.826172 | T: 0.449219 | R: 0.876953 | B: 0.574219
1 / 11 / 1 / 12 / 15 / 16

Character: ]
L: 0.259766 | T: 0.574219 | R: 0.287109 | B: 0.738281
1 / 6 / 1 / 6 / 20 / 17

Character: ^
L: 0.388672 | T: 0.597656 | R: 0.427734 | B: 0.644531
1 / 7 / 0 / 9 / 5 / 17

Character: _
L: 0.853516 | T: 0.644531 | R: 0.908203 | B: 0.675781
1 / 13 / 1 / 13 / 3 / 3

Character: `
L: 0.814453 | T: 0.652344 | R: 0.841797 | B: 0.691406
1 / 4 / 1 / 6 / 4 / 17

Character: a
L: 0.177734 | T: 0.441406 | R: 0.232422 | B: 0.558594
0 / 13 / 1 / 13 / 14 / 14

Character: b
L: 0.533203 | T: 0.300781 | R: 0.587891 | B: 0.441406
1 / 13 / 1 / 13 / 17 / 17

Character: c
L: 0.236328 | T: 0.441406 | R: 0.291016 | B: 0.558594
1 / 13 / 1 / 13 / 14 / 14

Character: d
L: 0.591797 | T: 0.300781 | R: 0.646484 | B: 0.441406
1 / 13 / 1 / 13 / 17 / 17

Character: e
L: 0.708984 | T: 0.441406 | R: 0.763672 | B: 0.558594
1 / 13 / 1 / 13 / 14 / 14

Character: f
L: 0.927734 | T: 0.566406 | R: 0.962891 | B: 0.707031
1 / 8 / 1 / 8 / 17 / 17

Character: g
L: 0.404297 | T: 0.00390625 | R: 0.458984 | B: 0.160156
1 / 13 / 1 / 13 / 19 / 14

Character: h
L: 0.650391 | T: 0.300781 | R: 0.705078 | B: 0.441406
1 / 13 / 0 / 13 / 17 / 17

Character: i
L: 0.654297 | T: 0.574219 | R: 0.677734 | B: 0.691406
0 / 5 / 1 / 5 / 14 / 14

Character: j
L: 0.966797 | T: 0.566406 | R: 0.998047 | B: 0.722656
1 / 7 / 0 / 7 / 19 / 14

Character: k
L: 0.767578 | T: 0.300781 | R: 0.822266 | B: 0.433594
1 / 13 / 1 / 13 / 16 / 16

Character: l
L: 0.576172 | T: 0.574219 | R: 0.599609 | B: 0.714844
1 / 5 / 1 / 5 / 17 / 17

Character: m
L: 0.181641 | T: 0.00390625 | R: 0.259766 | B: 0.121094
1 / 19 / 1 / 19 / 14 / 14

Character: n
L: 0.767578 | T: 0.441406 | R: 0.822266 | B: 0.558594
1 / 13 / 0 / 13 / 14 / 14

Character: o
L: 0.0605469 | T: 0.449219 | R: 0.115234 | B: 0.566406
1 / 13 / 1 / 13 / 14 / 14

Character: p
L: 0.181641 | T: 0.128906 | R: 0.236328 | B: 0.285156
1 / 13 / 1 / 13 / 19 / 14

Character: q
L: 0.240234 | T: 0.128906 | R: 0.294922 | B: 0.285156
1 / 13 / 1 / 13 / 19 / 14

Character: r
L: 0.294922 | T: 0.449219 | R: 0.349609 | B: 0.566406
1 / 13 / 0 / 13 / 14 / 14

Character: s
L: 0.474609 | T: 0.449219 | R: 0.529297 | B: 0.566406
1 / 13 / 0 / 13 / 14 / 14

Character: t
L: 0.00195313 | T: 0.464844 | R: 0.0410156 | B: 0.605469
1 / 8 / 1 / 9 / 17 / 17

Character: u
L: 0.533203 | T: 0.449219 | R: 0.587891 | B: 0.566406
1 / 13 / 1 / 13 / 14 / 14

Character: v
L: 0.591797 | T: 0.449219 | R: 0.646484 | B: 0.566406
1 / 13 / 1 / 13 / 14 / 14

Character: w
L: 0.263672 | T: 0.00390625 | R: 0.341797 | B: 0.121094
1 / 19 / 1 / 19 / 14 / 14

Character: x
L: 0.650391 | T: 0.449219 | R: 0.705078 | B: 0.566406
1 / 13 / 1 / 13 / 14 / 14

Character: y
L: 0.00195313 | T: 0.152344 | R: 0.0566406 | B: 0.308594
1 / 13 / 1 / 13 / 19 / 14

Character: z
L: 0.935547 | T: 0.300781 | R: 0.994141 | B: 0.417969
1 / 13 / 1 / 14 / 14 / 14

Character: {
L: 0.166016 | T: 0.566406 | R: 0.208984 | B: 0.691406
1 / 10 / 2 / 10 / 15 / 15

Character: |
L: 0.630859 | T: 0.574219 | R: 0.650391 | B: 0.738281
1 / 4 / 0 / 4 / 20 / 17

Character: }
L: 0.212891 | T: 0.566406 | R: 0.255859 | B: 0.691406
1 / 10 / 2 / 10 / 15 / 15

Character: ~
L: 0.708984 | T: 0.566406 | R: 0.751953 | B: 0.691406
1 / 10 / 2 / 10 / 15 / 15

Character: ®
L: 0.755859 | T: 0.566406 | R: 0.810547 | B: 0.660156
1 / 13 / 1 / 13 / 11 / 17

Minimum: 0.00195313 / Maximum: 0.998047

Kerning Table size: 178

Kerning Table
10 - 0
14 - -2
15 - 0
16 - 0
17 - -2
19 - 0
AD - -1
Al - 0
Be - -1
CE - -1
DD - -1
De - 0
EA - 0
ET - 0
EX - 1
Ge - 0
Ic - 0
MM - -1
MU - 0
Ma - 0
Mc - -1
Me - -1
Mi - -1
NE - -1
NO - 1
OD - -1
OJ - -1
PE - -1
Ph - -1
RD - -1
RE - -1
RI - 1
RO - 1
Re - -1
SE - -1
ST - -1
Sc - -1
Se - -1
St - 0
TA - -1
TE - -1
TR - -1
TS - 0
TU - 0
TY - 0
Ta - -1
Te - -1
To - -1
UD - -1
UI - 0
UL - 0
We - -1
XE - -1
Ya - 0
ac - -1
ad - -1
ag - -1
as - 0
at - -1
aw - -1
az - -1
bd - 0
be - -1
bj - -2
bo - -1
cB - 0
cC - 0
ce - 0
ch - 0
cl - 1
co - 0
cq - -1
cr - 0
ct - 0
cu - 0
cy - 0
di - 1
dl - 0
dn - 0
ds - 0
dy - 0
ee - 0
ej - -1
el - 0
em - 0
en - -1
et - 0
ey - 0
ez - -1
fa - -1
fe - -1
ff - -1
fi - 0
gh - 1
gi - 0
gl - 0
gn - 0
go - 0
gu - 0
gy - 0
ha - 0
he - -1
hi - 0
ht - -1
ic - -1
id - 0
ie - -1
if - 0
ig - 0
iz - -1
je - 0
ke - -1
la - 0
ld - -1
le - -1
lf - 0
li - 0
lt - -1
lw - 0
ma - -1
me - -1
mp - -1
na - 0
nc - -1
nd - -1
ne - -1
nf - 0
ng - -1
ni - 0
nj - -1
nt - -1
nz - 0
oa - 0
oc - -1
od - -1
oe - -1
of - -1
og - -1
oi - 0
oj - -2
ol - -1
os - 0
ot - -1
ow - -1
oz - -1
pa - 0
pe - -1
pt - -1
qu - 0
ra - -1
rc - -1
re - 0
ri - 0
rs - 0
sc - -1
se - -1
ss - -1
st - -1
sw - -1
ta - 0
tc - -1
te - -1
uc - -1
ud - -1
ue - -1
ug - -1
ul - -1
us - -1
ut - 0
va - -1
ve - -1
vi - 0
wa - 0
wh - 0
wi - 0
yc - -1
ye - -1
ze - 0


This is the texture used by that font, as dumped by mtexdump:

suspected they might be decimal values of some kind. oddly I don't think I've ever had to deal with debugging floating points in memory before so I didn't recognise the format.
ah, nice texture dump. I didn't get much further than just gawking at the file in a hex editor.
I think that may be everything that's needed for doing custom fonts then
If you wanna test one out, lemme know if you need a texture converted. I don't have support for that compression format yet (which is why I used mtexdump) but I can definitely get it working if needed.
Edit history:
Aruki: 2014-07-18 03:35:52 am
Here's a neat little highlight from the STRG files in Metroid Prime 2: inventory descriptions for the Dark, Light, and Annihilator Bombs! All three in Metroid1.pak. [edit: apparently old, according to Miles, but still cool so whatever]

ce14d6c5.STRG

Quote:
The Dark Bomb combines the power of the Dark Beam with that of the Power Bomb.

When in Morph Ball mode, press to select the Dark Beam, then press to drop a Dark Bomb.

Samus's Notes:
Dark Bombs release a field of dark matter tendrils when they detonate. These tendrils can entangle and hinder enemies.

Dark Bombs are not effective against Denzium.


2571e5ba.STRG

Quote:
The Light Bomb combines the power of the Light Beam with that of the Power Bomb.

When in Morph Ball mode, press to select the Light Beam, then press to drop a Light Bomb.

Samus's Notes:
Light Bombs do not detonate on release. They explode when an enemy enters their detection radius, or when another Light Bomb goes off.

Light Bomb explosions are white-hot, and can set enemies on fire.

The brilliance of Light Bomb explosions can blind and stun dark creatures.

The Light Bomb is not effective against Denzium.


14d50089.STRG

Quote:
The Annihilator Bomb is a potent explosive, combining the Power Bomb with the energies of the Light and Dark Beams.

When in Morph Ball mode, press to select the Annihilator Beam, then press to drop an Annihilator Bomb.

Samus's Notes:
When an Annihilator Bomb detonates, it emits a cloud of Light and Dark energy particles. These deadly particles will seek all enemies within a radius.

The Annihilator Bomb is not effective against Denzium.
is there any other coding for them within the game, or have you not checked?
Not that I know of.
guess the idea was scraped early on then. or they just removed the code.
paraxade have you ever encountered a "pictures of Samus sometimes appear instead of the correct textures" phenomenon playing under dolphin?