File Structure for GCI File.

10/24/03

Introduction:

First off what is a GCI file? It's a file output by EMS' Gamecube USB Memory Adaptor. And is basically a GameCube save file in a format that your PC can store it. This document deals with the standard header data that with in all GCI files. Once this is understood editing of save files should be possible. This information is really only useful to programers looking to make some software to interface with GCI files. I make no guaranty that all this data is 100% correct as it is still being updated and added too. If you have any info or questions you can email me here:xavier@surugi.com

Data:

Known Data:

Data:

Game ID

Address:

0x00000

Length:

3

Type:

ASCII

Range:

Description:

This is the 3 character code that references the file to a specific game. This ID is unique to the game.


Data:

Region flag

Address:

0x00003

Length:

1

Type:

ASCII

Range:

J, E, P

Description:

This stores what region the file is from. Either Japan(J)/US(E)/Europe(P).


Data:

Company ID

Address:

0x00004

Length:

2

Type:

ASCII

Range:

Description:

This is Company ID is unique to each Gamecube publisher.

Data:

Graphics Format

Address:

0x00007

Length:

1

Type:

Binary

Range:

01,02,05,06,(FB=no graphic)

Description:

Determines the format of the graphic.
01,05 = CI8 format.
02,06 = RGB5A3 format.


Data:

File ID

Address:

0x00008

Length:

32

Type:

ASCII

Range:

Description:

This seems to be a filename associated with the file. This is never shown to the user.


Data:

Date last modified

Address:

0x00028

Length:

4

Type:

Binary

Range:

0 to 4294967295

Description:

This stores the date/time of the last save. The date is stored as seconds past "12/31/1999 11:59:59 PM". So just added the this date to the seconds stored and you'll get the actual date.


Data:

Graphic Offset

Address:

0x0002C

Length:

4

Type:

Binary

Range:

 

Description:

This is the offset of where the Banner and Icon are stored.


Data:

Number of blocked used

Address:

0x00038

Length:

2

Type:

Binary

Range:

Description:

This is how many blocks this file takes up. A block is Nintendo's word for a 8 Kbyte sector. A standard Memory Card 59 as 59 blocks available for saves.


Data:

Info Offset

Address:

0x0003C

Length:

4

Type:

Binary

Range:

Description:

This is the offset of the Game name and File info are stored


Data:

Game name

Address:

Address from Info Offset

Length:

32

Type:

ASCII

Range:

Description:

The name of the game that this file is associated with.


Data:

File info

Address:

Starts after Game name

Length:

32

Type:

ASCII

Range:

Description:

Info specific to this file.


Data:

Game Banner Graphic

Address:

Address stored in Graphic Offset

Length:

If CI8 then Graphic [3072] + Palete [512] = Total [3584]
If RGB5A3  Graphic [6144]

Type:

Binary

Range:

Description:

Banner for the game. It’s 96x32 pixels. But the actually format is dependent on the graphic type, more info on that is below. Not every save is required to have a banner, its icon will be displayed in its place.


Data:

File Icon

Address:

Length:

Type:

Binary

Range:

Description:


CI8 and RGB5A3

As far as I know these are Nintendo created formats used only by the Gamecube system.

CI8 –The data is stored in 8x4 pixel tiles. That means starting from the upper left of the image you would read 8 bytes, move one pixel down and read the next 8 for 4 lines before moving to the next tile.(see table below) The color of each tile is determined by the palette in the last 512 bytes of the graphic.

Tile 1

Tile 2

1

-

8

33

-

40

9

-

16

41

-

48

17

-

24

     

25

-

32

     

RGB5A3 – This data uses no palette and is stored in 4x4 pixel tiles. Each pixel is 2 bytes long and use the standard GC Palette Format.

GC Palette Format – Both graphic formats use this method to store RGB data. It’s stored in 2 bytes of data the format is as follows:

Red is stored from the 2nd bitto the 6th.
Green is stored from the 7th to 11th.
Blue is stored from the 12th to the 16th.
The 1st bit determines transparency.

So the following value would be white:
0x7FFF = 01111111 11111111


External Data and Links:

Timothy Wilson, whom I have been working with on this, has his excellent documentation located here: GameCube GCI & GCP Memory Card Save File Format Specifications

This gave me atleast an idea of what I needed to do with the graphics.

GCBanner.txt

GCBanner v0.3 - loser 2003

this program converts between banner files found on gamecube discs to tga files. the tga file required as input is a 24bit 96x32 pixel image. that is, 8 bits for RGB, 96 pixels wide and 32 pixels high. the same kind of tga file is output when converting from a banner file

a banner file can be found in the root directory of a gamecube disc and is called opening.bnr. there are 2 types of banner files. a version 1 banner file contains info for just 1 country (eg jap/usa release) whereas a version 2 banner file contains information for multiple countries (eg pal release with english, german, french, spanish, italian, dutch).

this tool always outputs a version 1 banner file, but can accept both version 1 and version 2 banner files as input.

loser

www.loser-console.org


This was useful but only correct for CI8 files.

http://www.geocities.com/metroidprimemap/Treatise.txt

Treatise On The Architecture Of .GCI Format Gamecube Saves

This document is written in the hopes of mapping the internal structure of gamecube save files. There is no information presently available on this subject, and I hope to find a way to extract the Logo and Icon data from these files. NOTE: All values ending with "h" are hexadecimal values.

Address-Length  -Description

----------------------------

0000h-28h  -The first several bytes seem to be some sort of unique game code.

0028h-80h  -Contains game name and last save date?

0084h-C00h -Logo GFX data. Logo is 92 by 32 pixels.

0C84h-200h -these 512 bytes are the Logo Palette.

0E84h-400h -This is where the Icon data resides. The length of this section is 400h per frame of animation. Icon is 32 by 32 pixels.

1284h-200h -Palette data for the Icon.

1484h-EoF  -Save data for the game untill the end of  the file.

A perfect example of the above structure is the Metroid Prime GCI, as it contains only one frame for it's Icon, and thus exactly matches the values given for the Icon palette and Save Data addresses. The GFX data itself seems to be stored in a standard 8bpp format, with non-standard tiles. The data is a series of 8 by 4 pixel tiles, rather than 8 by 8 tiles. You can see some examples of this at my site www.geocities.com/MetroidPrimeMap). Palette data format is still being determined.

Written By:

-Jason Haffner (JasonHaffner@Hotmail.com)

A thread on gc dev that has some good info.

http://www.gcdev.com/phpBB2/viewtopic.php?t=214