Email or username:

Password:

Forgot your password?
Top-level
Foone🏳️‍⚧️

I just named some variables in this function as "head_gender" and "generic_head".
oh my. what's this game rated again? at least it's not named "getHead", though I'm sure this "mersenne_twister" maneuver is banned in at least 12 states.

78 comments
Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

the game canonically considers tuxedoes to be "dresses".
and all AI characters start female.

FEMINISM WIN?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

found a bug. WFCommon::setAllSeenTutorial is supposed to go through all players and set that they have seen the tutorial, like the title explains. It iterates through all three players but only sets player 1, three times

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

hankaku/zenkaku keys support?
IN WHEEL OF FORTUNE?

what

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I'm gonna assume this is just leftovers from the general game engine. this version doesn't even support keyboards.

(well, the engine does. the game itself just does nothing with the keyboard events)

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I'm gonna have to try injecting katakana into a puzzle solution.
just to see if it works

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

BOOOO nope.

although I could have guessed that. I know what font it uses for the puzzles, and while it has a lot of characters you wouldn't expect, it doesn't include katakana.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

UGH I gotta write a program to parse the font files

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

fools will spend hours writing a program to parse font descriptions rather than manually transcribe the following PNG

(it's me. I'm fools)

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

it has been zero days since I have broken the emulator I'm using to reverse engineer a game

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

oh no, it's not broken, it's just CASE SENSITIVE REGISTERS.
bah.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

ugh. they're doing something "clever" here and I don't like it.

I can parse the usual bundle (mostly) fine, but the SharedAssets one has perfectly formed indexes that point to wildly wrong offsets

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

like it'll be "this file is 5 megabytes and located at 24mb into the file" and the file is 34 kilobytes

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

the file is 1.2mb uncompressed and 5.3mb compressed.

the fuck?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I think they're doing something weird where SOMETIMES those fields mean completely different things, based on flags.
flags I don't at all understand yet

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

the compressed size is ALMOST the size of the "ROM" (the .DOL file), and their engine does support loading resources out of "ROMs", but the offset is still out in 1.2 gigabyte land, on a console with 80mb of ram

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

fun fact: the engine calls it a "ROM", although from what I can tell, this engine has never run on any console with ROMs

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

(do not @ me about the fact there were technically PC ROMs, I know and I made some of them)

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

why did these punks hardcode a font ID.
you build this incredibly complex system for decoding resource names from your damn trie nonsenses, and then you just go stuff font_id=0xf4da54fa in your code?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

WHERE ARE YOU GETTING ALL THESE FONTS, GAME? I've got a breakpoint on the font loading code and it keeps getting called on fonts I don't see getting loaded!

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

oh right it /might/ generate one at runtime

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I'm gonna have to figure out how to dump these fonts out of RAM.

in an emulator with no scripting support.

ugh

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

what if I just extended the "conditions" function to add a new datatype, which is HUGE HEX STRINGS that get dumped to the log?

Delightfully devilish, Foone!

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I'm now sorting fonts by how big they are, since I can see their load sizes and compare them against the files on the disk.

A full boot of this game loads FIVE fonts. I know the IDs of three, and the names of TWO

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I found another by dumping all resources that were 2,528 bytes long and then hex editing them to see if they're a font

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

buh
one of them IS a font
but it's not the font I was looking for
it's a different font that JUST SO HAPPENS to be the same size.

suspicious

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

okay so I figured out when and where that one is loaded
but still not where the other file of the same size is loaded, or what it is.

so I miscounted. 6 fonts. I have names for three, IDs for 5, and source files for 4.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I could get the final source file if I could parse the Weird Bundle, and I could get the filenames if I could parse the filename trie.

ANYWAY I think I have what I need for my current hax

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

this font file ALMOST makes sense. Like I'll look at 19 out of 20 characters and they'll match perfectly and then one will just be completely wrong.
Why does it think the number 4 is in the middle? it's not, it's on the top!

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

well I manually extracted the hidden font, good ol' GENERICFONT.FDX.PRD.

NOPE! it's similarly aligned, so it's not the right one either. the fuck?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

okay after matching all the dumped textures with the fonts by process of elimination, this is the font I want:

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

that symbol in the top left, which appears to render as "ss", is §.

what the fuck are they doing, exactly?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

there is a SLIGHT chance that it's actually ß and they invented a new encoding that's a hybrid of utf-8 and MacRoman.

But I really, really hope not

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

why is this function being called with this->__vt set to 5?

I'M PRETTY SURE YOUR OBJECT'S VTABLE IS NOT AT ADDRESS 5, GAME

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

especially considering that this is PowerPC and it'd presumably generate an unaligned address fault, and OH YET THE WII HAS NO MEMORY MAPPED AT 0

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I have now learned about RGB5A3, and I hate it.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

So it's a 16-bit RGBA color format. You might say "I can do basic math, and 5+5+5+3 isn't 16", but guess what: it's weirder and worse than you imagine!

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

it's two formats combined into one.
It's either RGB555 (no alpha) or RGB444A3. And the top bit is a marker to tell you which one that pixel is using.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

hate hate hate hate hate this is the worst hate

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

well I tried to decode one these images and I got this.
not terribly helpful. I think some of the pixels may be in a weird order?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

I think that's supposed to look like this, just guessing from the dumped textures.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

oh yeah it's a blocked format, because Nintendo hates the idea of storing pixels in an order that makes sense

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

this is a 32bit console doing 3D rendering!
why not encode all the textures in 4x4 blocks like it's still 1983?

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

okay I can decode it now. I basically just took my existing parsing code and made it pretend every texture was 4x4, then ran it (width+3)//4*(height+3)//4 times for the whole image, compositing all the subimages together.

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

ugh. I'm like 99% sure the game's texture format doesn't store the size.
that's included in the metadata! in the ROM or in the archive! Great! I hate it!

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

ah-ha. look at this. both res_ids are identical, but one is only 16 bytes, uncompressed. This is a res_id for a texture.

text editor screenshot:

chunk_offset 21918772
BFLAGS 20
decompressed_size 16
CFLAGS 64
compressed_size 16
res_id 1616696397

chunk_offset 21918788
BFLAGS 20
decompressed_size 2784
CFLAGS 36
compressed_size 1710
res_id 1616696397
Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

and 16 bytes is exactly the same size as the WiiTextureHeader structure used by the engine!

Foone🏳️‍⚧️ replied to Foone🏳️‍⚧️

so they have two copies of the resource in the file, but one of them has different FLAGS, which presumably indicates "hey this is the metadata", which has stuff like the texture format and image size. both of them.
it's 32x32 and 32x32. I don't know why there are two.

Go Up