Street Football

Alright, so this one may feel like a joke. It’s some dumb shovelware game on the Wii, why did I even do that?

Short story is that Street Football, or Foot 2 Rue as it’s called in France is one of my favorite shows from my childhood. And I wanted to look into this game’s files to see if there was a chance to get the TV show’s original soundtrack.

Sadly enough, this game (which I had never played) has its own soundtrack (which is pretty bad). But I still tried to look into its files to see if I could find anything. The “game” basically consists of a series of cutscenes, which are played back to back with some minigames in between and some dialogues.

Most of the game’s files use Nintendo’s proprietary formats, they can be edited using Brawlcrate. The different files are copied with a _en, _fr, _it suffix depending on the language of the console. The way the dialogues and the sound effects appear on screen as you play is managed by some .csv files.

Now we’ll get to the part I actually re’d. The dialogue files.

struct is the main one, it contains information about each scene in the game, which lines are supposed to be played within them (and which character is supposed to say each line).

The way the actual text is stored however is pretty interesting. It’s contained in dic, encoded in CP1250. This file contains a list of the different words which are used in the game. That’s right, each word is stored separately.

So now, you may ask how does the game display sentences from that? The answer is the text file. This file contains a list of indices. These indices are supposed to match the words that appear in dic.

That means that in order to write a sentence, one would have to store each word separately in dic and then write each word’s index within dic into text.

I think that it’s a pretty convoluted way of storing text but hey it was fun figuring that out.

Here’s the technical part now. By the way, a lot of formats aren’t really aligned. And integers are stored in little endian.

struct header:

Offset Name DataType Notes
0x1 File length u32  
0x5 Scene count u8  
0x6 File start u32  
0xA Scenes Scene[]  

Now the structure for each scene:

Offset Name DataType Notes
0x0 Scene Name String Fixed length, 20 bytes
0x14 Line count u8  

And the structure for each line within a scene:

Offset Name DataType Notes
0x4 Line Index u16 Points to the text file
0x6 Character Name String Fixed length, 26 bytes

dic doesn’t contain a structure that’s too hard to understand, it’s just an array of 35 bytes long strings.

Same thing for text. Each line of text is 64 bytes long. They’re just u16 arrays of 32 word indices.

Overall I had fun working on that game, the formats were quite simple to understand. This is work I’ve done one random afternoon in 2021.

I made a shitpost using what I found, but I can’t seem to find it anymore sadly…