SharkPort .SPC file Structure:

Note: GameShark and SharkPort are trademarks and property of InterAct. Information in this page has no connection with and has not been authorized by InterAct.

Note: All numeric values are LONG INTEGERS (VB) or DWORDS (C++) and consume 8 bytes of file space and are in LSW(LSB,MSB), MSW(LSB,MSB) format. As an example the number 6 would be the following 8 bytes in the file: 06, 00,00,00.

I have not tested or experimented with the maximum length of the various strings. I am quite sure there is a limit imposed by SharkPort and I am positive there is a size limit imposed by the GameShark dongle & software.

The SPC file can support multiple games. If more than one game is contained within the file, each game block will contain the same structure as listed below except for the main header.

As an example:
Header
Game Block
Code Block
Hack
Code Block
Hack
Hack
Code Block
Hack
Hack
Hack
Hack
Hack
Code Block
Hack
Hack
Game Block
Code Block
Hack
Hack
Code Block
Hack
Hack
Hack
Hack
Code Block
Hack
Hack
The above example file contains 2 games. The first game has 4 codes each having a different number of hacks per code. The second game has 3 codes, again having different numbers of hacks. The sections laid out below can repeat to comprise any number of hacks, codes or games (up to 2.1 billion, the max number a DW can hold so we can, for now, consider this unlimited).

Header Section
This is always present and so far as I have seen, fixed in nature

HeaderLen dWord (Only seen 0x0e)
Header String (Only seen "SharkPortCODES")
0x00 dWord Unknown usage
0x00 dWord Unknown usage
0x00 dWord Unknown usage
GameCount dWord (0x01 for one, 0x02 for two etc..)
This represents the number of games stored within the file.
Game Section
This is repeated for each game in the file
GameNameLen dWord This is the length of the text of the game name
GameName String This is the actual title of the game
CodeCount dWord Count of codes for the game
This represents the number of codes stored for this game
Code Section
This is repeated for each code for the game
CodeTitleLen dWord Length of the code title text
CodeTitle String Text of the title for the code
 
If there is NO notes to be included then the following block is inserted
0x00 dWord End of Code Header Block
0x01 dWord End of Code Header Block
 
If there ARE notes to be included then the following block is inserted
NotesLength dWord Length of notes
NotesLength String Actual notes text
0x00 dWord End of Code Header Block
HackCount dWord This is the number of Hack codes *2. Ie if there are 2 hacks, this will be 8. There is one address block and one value block for each Hack which is why this # is the hacks *2
Hack Section
This is repeated for every hack entry for this code.
HackAdrLen dWord (0x08, this is always 8 as there are 8 hex digits to follow)
HackAdr String Always a string of 8 hex digits (making a dWord Address)
HackValLen dWord (0x08, this is always 8 as there are 8 hex digits to follow)
HackVal String Always a string of 8 hex digits (making a dWord value)

As you can see in this primitive example, the pink areas are long integers (dWords) and the blue areas represent string values. This file has one game (named "fred"), one code (named "code") and that code has a notes area (containing "notes") and has one hack conisting of the two required parts (address and value).

I have not seen any file that uses the 3 dw spots following the header text thus far. If someone else sees data here, please contact me and I will see if I can trace its use.

All information graphcis and text were created and are property of Mike Audlean and are copyright 2002.