Editing PARAM.SFO
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
[[Category:Software]] | |||
'''SFO''' ('''S'''ystem '''F'''ile '''O'''bject) are used in folders wich content needs to be displayed in the [[XMB]]. In the same folder than the SFO are the [[Content Information Files]], and for speciall content like SaveData there is a [[PARAM.PFD]] for security reasons. | |||
The parameters SFO contains can be simplyfied as inputs and outputs of the content: | |||
* Boot modifyers (or flags) that are sent to the content when is executed to activate speciall modes (e.g. audio and video modes of a game). | |||
* Information strings needed to display the content in the [[XMB]] and his restrictions (e.g. name and version of a game). | |||
SFO's | '''SFX''' ('''S'''ystem '''F'''ile in '''X'''ML format) are used to create SFO's. Additionally SFX files are used in Blue-Ray disc games inside PS3_EXTRA folder to display content in [[XMB]]. In fact the values contained in both formats are the same and the conversion is easy from one format to the other | ||
SFO and SFX can be "chained" in a structure of subfolders with a maximun of 3 levels (SFX format is used in level3). | |||
In | Level2 SFO's can contain specific values than cant be used in Level1 (e.g. CATEGORY when used in level2 has lot of different and specific values). In the same way when ATTRIBUTE is used in level2 his valid values are completly different than when used in level1. | ||
---- | |||
==Internal Structure== | ==Internal Structure== | ||
=== | ===Header=== | ||
<pre> | |||
typdef struct Header | |||
struct | { | ||
{ | uint32_t Signature; /* Always PSF */ | ||
uint32_t | uint32_t Version; /* Usually 1.1 */ | ||
uint32_t | uint32_t Name_Table_Start; /* Start position of the Name_Table */ | ||
uint32_t | uint32_t Data_Table_Start; /* Start position of the Data_Table */ | ||
uint32_t | uint32_t Entries_Number; /* Number of entries */ | ||
uint32_t | }; | ||
}; | </pre> | ||
</ | |||
=== | ===Definition_Table=== | ||
This structure repeats one time for every '''Entries_Number''' defined in the header. All values are in Little Endian | |||
<pre> | |||
typedef struct Definition_Table | |||
{ | |||
uint16_t Name_Table_Offset; /* Offset of the Name of the entry, from start of Name_Table */ | |||
uint16_t Data_Type; /* Type of data of the entry in the Data_Table */ | |||
uint32_t Data_Size_Used; /* Used Bytes by the entry in the Data_Table */ | |||
uint32_t Data_Size_Total; /* Total bytes reserved for the entry in the Data_Table */ | |||
uint32_t Data_Table_Offset; /* Offset of the Data of the entry, from start of Data_Table */ | |||
}; | |||
</pre> | |||
The '''Data_Types''' are partially known based in some examples found in different content | |||
{| class="wikitable" | |||
{| class="wikitable" | |||
|- | |- | ||
! | ! Valid Data Types !! Description !! Notes | ||
|- | |- | ||
| 04 00 || | | 04 00 || Unknown || Used in ACCOUNT_ID, PADDING, PARAMS and PARAMS2 | ||
|- | |- | ||
| 04 02 || | | 04 02 || utf-8 || | ||
|- | |- | ||
| 04 04 | | 04 04 || integer || | ||
|- | |- | ||
|} | |} | ||
*Speculation | |||
If the "scale" used for the second byte follows the proportion of 2^X (e.g. 1, 2, 4, 8, 16, 32, etc...) then we are missing a "04 01" valid data type in the list | |||
=== | ===Name_Table=== | ||
The entries of this table (and the next table) can vary depending of the kind of content displayed in the XMB. | |||
Each entry of the table needs 1 blank byte after the name to separate them. | |||
The table has padding at the end to fit the total size in bytes to a multiply or 4, this padding is added after the last blank byte of the last entry. If the last entry (included his blank byte) matches with a multiply of 4 this padding doesn't exist. | |||
===Data_Table=== | |||
This table has no padding between entries neither at the end, '''Data_Size_Total''' and '''Data_Size_Used''' for each entry are in the '''Definition_Table''' so the space in '''Data_Table''' can be considered reserved, even when is not used or filled with zeroes. | |||
The '''Data_Size_Used''' bytes are the same than '''Data_Size_Total''' when the entry is an integer (integer entries uses all the reserved bytes) but are different when the '''Data_Type''' is utf-8 (e.g. TITLE of a game never uses all the reserved bytes), additionally utf-8 entries needs 1 blank byte after the last character of the text string, this byte can be considered part of the string to count the '''Data_Size_Total''' bytes for this entry. | |||
==Internall Structure Examples== | |||
===SFO=== | ===SFO=== | ||
This is an example of a hand made SFO structure, it contains only 1 entry (TITLE_ID), i choosed this one because his '''Data_Size_Total''' is short enought (16 bytes) to build the full structure in a minimall size, needs padding at the end of the '''Name_Table''', and the '''Data_Size_Used''' is smaller than '''Data_Size_Total''' | |||
0x0000 00 50 53 46 01 01 00 00 24 00 00 00 30 00 00 00 | .PSF....$...0... | | |||
0x0010 01 00 00 00 00 00 04 02 0A 00 00 00 0F 00 00 00 | ................ | | |||
0x0020 00 00 00 00 54 49 54 4C 45 5F 49 44 00 00 00 00 | ....TITLE_ID.... | | |||
0x0030 41 42 43 44 31 32 33 34 35 00 00 00 00 00 00 00 | ABCD12345....... | | |||
All the blocks of the file are explained in the next list, it has separated sections for header and the three tables. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Offset !! Size !! Content !! Conversion !! Value !! Notes | ||
|- | |||
! Header | |||
|- | |||
| 0x0000 || 0x04 || 00 50 53 46 || To utf-8 || PSF || Signature | |||
|- | |- | ||
| 0x0004 || 0x04 || 01 01 00 00 || Big endian, decimal || 1.1 || Version (the point is added by the system) | |||
| | |||
|- | |- | ||
| 0x04 || | | 0x0008 || 0x04 || 24 00 00 00 || Big endian || 0x0024 || Start of '''Name_Table''' | ||
|- | |- | ||
| | | 0x000C || 0x04 || 30 00 00 00 || Big endian || 0x0030 || Start of '''Data_Table''' | ||
|- | |- | ||
| | | 0x0010 || 0x04 || 01 00 00 00 || Big endian, decimal || 1 || Number of entries in the tables | ||
|- | |- | ||
! Definition_Table | |||
|- | |- | ||
| 0x0014 || 0x02 || 0000 || Big endian || 0 || (Start of '''Name''') - (Start of '''Name_Table''') = 0x0024-0x0024 = 0 | |||
| | |||
|- | |- | ||
| | | 0x0016 || 0x02 || 0402 || Unknown || || '''Data_Type''' | ||
|- | |- | ||
| | | 0x0018 || 0x04 || 0A000000 || Big endian, decimal || 10 || '''Data_Size_Used''' (ABCD12345 are 9 bytes + 1 blank = 10) | ||
|- | |- | ||
| | | 0x001C || 0x04 || 0F000000 || Big endian, decimal || 16 || '''Data_Size_Total''' (TITLE_ID Data_Size_Total is always 16 bytes) | ||
|- | |- | ||
| | | 0x0020 || 0x04 || 00000000 || Big endian || 0 || (Start of '''Data''') - (Start of '''Data_Table''') = 0x0030-0x0030 = 0 | ||
|- | |- | ||
! | ! Name_Table | ||
|- | |- | ||
| 0x0024 || 0x09 || 5449544C455F494400 || To utf-8 || TITLE_ID || '''Name''', included 1 blank byte at the end | |||
| | |- | ||
| 0x002D || 0x03 || 000000 || || || Padding (9 from the previous entry + 3 padding = 12 bytes) | |||
|- | |||
! Data_Table | |||
|- | |||
| 0x0030 || 0x0F || 41424344313233343500000000000000 || To utf-8 || ABCD12345 || '''Data'''. ('''Data_Size_Total'''=16 bytes. '''Data_Size_Used'''=10 bytes) | |||
|} | |} | ||
*When you generate a non proper file playing with the flags, you can have a nice icon of "corrupted data", but in some cases the game will still boot normally. In other cases when adding or removing parameters the file is "partially" corrupted because a "break point" in the structure and the file is "partially" loaded (the PS3 loads the values before the structure "break point" normally, but after this point the values shown as corrupted or missed) | |||
*The corrupted icon is part of the firmware, in the path... ? | |||
*When adding "non-stadard" parameters to a "standard" SFO the system (or firmware) blocks this "not-expected" parameter. The file loads normally, but the added parameter is ignored (e.g. when adding SUB_TITLE to a SFO for catergory "HG") | |||
*The minimall structure tested (and working) for a hombrew can be copied/downloaded at the bottom of the page, its not "standard" but the PS3 doesnt complains, and probably can be reduced even more | |||
===SFX=== | ===SFX=== | ||
This is a PARAM.SFX from the Blue-Ray "move demo disc", the disc contains some installable demos in format .PKG in the paths /PS3_EXTRA/D000/DATA000.PKG controlled by a /PS3_EXTRA/D000/PARAM.SFX | |||
The entries and values are self explanatory, this files can be created easily by hand | |||
<pre> | |||
<?xml version="1.0" encoding="utf-8" standalone="yes"?> | <?xml version="1.0" encoding="utf-8" standalone="yes"?> | ||
<paramsfo add_hidden="false"> | <paramsfo add_hidden="false"> | ||
<param key=" | <param key="ATTRIBUTE" fmt="int32" max_len="4">0</param> | ||
<param key="CATEGORY" fmt="utf8" max_len="4">IP</param> | |||
<param key="PARENTAL_LEVEL" fmt="int32" max_len="4">2</param> | |||
<param key="TITLE" fmt="utf8" max_len="128">Beat Sketcher™</param> | |||
<param key="TITLE_05" fmt="utf8" max_len="128">Beat Sketcher™ A mano libera</param> | |||
</paramsfo> | </paramsfo> | ||
</ | </pre> | ||
==Parameters Table== | |||
Parameters are ordered inside the SFO alphabetically (from A to Z). | |||
This table contains all the parameters known/found in standard formats. Columns of the table are named by the [[PARAM.SFO#CATEGORY|CATEGORY]] used in this format. | |||
This table contains all the parameters known/found | |||
{| class="wikitable | {| class="wikitable" | ||
|- | |- | ||
| '''HG''' = HDD Game || '''1P''' = PS1 Game || '''2P''' = PS2 Game || '''MN''' = PSP Mini Game || || '''GD''' = Game Data || '''SD''' = Save Data || '''♦''' = Trophy | |||
| | |} | ||
| | {| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable sortable" style="border:1px solid #999; border-collapse: collapse;" | ||
|- bgcolor="#cccccc" | |||
! Parameter !! Data_Type !! Data_Size_Total !! Data_Size_Used !! HG !! 1P !! 2P !! MN !! !! GD !! SD !! ♦ | |||
|- | |- | ||
| [[#ACCOUNT_ID|ACCOUNT_ID]] || | | [[PARAM.SFO#ACCOUNT_ID|ACCOUNT_ID]] || 0400 || 16 (0x10) || 16 (0x10) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[#ACCOUNTID|ACCOUNTID]] || | | [[PARAM.SFO#ACCOUNTID|ACCOUNTID]] || utf-8 || 16 (0x10) || 16 (0x10) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
|- | |- | ||
| [[#ANALOG_MODE|ANALOG_MODE]] || | | [[PARAM.SFO#ANALOG_MODE|ANALOG_MODE]] || integer || 4 (0x4) || 4 (0x4) || {{No}} || {{Yes}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
| {{No}} || {{Yes}} || | |||
|- | |- | ||
| [[#APP_VER|APP_VER]] || | | [[PARAM.SFO#APP_VER|APP_VER]] || utf-8 || 8 (0x8) || 6 (0x6) || {{Opt}} || {{No}} || ??? || {{Yes}} || || {{Opt}} || {{No}} || {{No}} | ||
| {{Opt}} || {{No}} || | |||
|- | |- | ||
| [[#ATTRIBUTE|ATTRIBUTE]] || | | [[PARAM.SFO#ATTRIBUTE|ATTRIBUTE]] || integer || 4 (0x4) || 4 (0x4) || {{Opt}} || {{Yes}} || ??? || {{Yes}} || || {{Opt}} || {{Yes}} || {{No}} | ||
| {{Opt}} || {{Yes}} || | |||
|- | |- | ||
| [[#BOOTABLE|BOOTABLE]] || | | [[PARAM.SFO#BOOTABLE|BOOTABLE]] || integer || 4 (0x4) || 4 (0x4) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{No}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[#CATEGORY|CATEGORY]] || | | [[PARAM.SFO#CATEGORY|CATEGORY]] || utf-8 || 4 (0x4) || 3 (0x3) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{Yes}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[#CONTENT_ID|CONTENT_ID]] || | | [[PARAM.SFO#CONTENT_ID|CONTENT_ID]] || utf-8 || 48 (0x30) || 37 (0x25) || {{Opt}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
| {{Opt}} || {{No}} || | |||
|- | |- | ||
| [[#DETAIL|DETAIL]] || | | [[PARAM.SFO#DETAIL|DETAIL]] || utf-8 || 1024 (0x400) || variable || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Opt}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#LANG|LANG]] || integer || 4 (0x4) || 4 (0x4) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#LICENSE|LICENSE]] || utf-8 || 512 (0x200) || variable || {{Yes}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#NP_COMMUNICATION_ID|NP_COMMUNICATION_ID]] || utf-8 || 16 (0x10) || 13 (0xD) || {{Opt}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#NPCOMMID|NPCOMMID]] || utf-8 || 16 (0x10) || 12 (0xC) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PADDING|PADDING]] || 0400 || 8 (0x8) || 0 (0x0) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PARAMS|PARAMS]] || 0400 || 1024 (0x400) || 1024 (0x400) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PARAMS2|PARAMS2]] || 0400 || 12 (0xC) || 12 (0xC) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PARENTAL_LEVEL_x|PARENTAL_LEVEL_'''x''']] || integer || 4 (0x4) || 4 (0x4) || {{Opt}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PARENTAL_LEVEL|PARENTAL_LEVEL]] || integer || 4 (0x4) || 4 (0x4) || {{Yes}} || {{No}} || ??? || {{Yes}} || || {{Yes}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PARENTALLEVEL|PARENTALLEVEL]] || integer || 4 (0x4) || 4 (0x4) || {{No}} || {{Yes}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#PS3_SYSTEM_VER|PS3_SYSTEM_VER]] || utf-8 || 8 (0x8) || 8 (0x8) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{Opt}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#REGION_DENY|REGION_DENY]] || integer || 4 (0x4) || 4 (0x4) || {{Opt}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#RESOLUTION|RESOLUTION]] || integer || 4 (0x4) || 4 (0x4) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{No}} || {{No}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#SAVEDATA_DIRECTORY|SAVEDATA_DIRECTORY]] || utf-8 || 64 (0x40) || variable || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Yes}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#SAVEDATA_LIST_PARAM|SAVEDATA_LIST_PARAM]] || utf-8 || 8 (0x8) || variable || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#SOUND_FORMAT|SOUND_FORMAT]] || integer || 4 (0x4) || 4 (0x4) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{No}} || {{No}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#SOURCE|SOURCE]] || integer || 4 (0x4) || 4 (0x4) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#SUB_TITLE|SUB_TITLE]] || utf-8 || 128 (0x80) || variable || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{Opt}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#TARGET_APP_VER|TARGET_APP_VER]] || utf-8 || 8 (0x8) || 6 (0x6) || {{No}} || {{No}} || ??? || {{No}} || || {{Opt}} || {{No}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#TITLE|TITLE]] || utf-8 || 128 (0x80) || variable || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{Yes}} || {{Yes}} || {{No}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#TITLE_ID|TITLE_ID]] || utf-8 || 16 (0x10) || 10 (0xA) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{Yes}} || {{No}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#TITLE_xx|TITLE_'''xx''']] || utf-8 || 128 (0x80) || variable || {{Opt}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{No}} | ||
| | |||
|- | |- | ||
| [[# | | [[PARAM.SFO#TITLEID0xx|TITLEID0'''xx''']] || utf-8 || 16 (0x10) || 9 (0x9) || {{No}} || {{No}} || ??? || {{No}} || || {{No}} || {{No}} || {{Yes}} | ||
|- | |- | ||
| [[# | | [[PARAM.SFO#VERSION|VERSION]] || utf-8 || 8 (0x8) || 6 (0x6) || {{Yes}} || {{Yes}} || ??? || {{Yes}} || || {{Yes}} || {{No}} || {{Yes}} | ||
|- | |- | ||
|} | |} | ||
==Parameters Descriptions== | ==Parameters Descriptions== | ||
===ACCOUNT_ID=== | ===ACCOUNT_ID=== | ||
Data_Type: ? | |||
Data_Size_Total: 16 bytes | |||
Data_Size_Used: 16 bytes | |||
Used in SFO's of type: Save Data | |||
PSN User Account | PSN User Account, verified against the info contained in [[XRegistry.sys]]. Filled with zeroes when the user has not been registered in PSN | ||
*'''Data_Type''' unknown | |||
===ACCOUNTID=== | |||
Data_Type: utf-8 | |||
Data_Size_Total: 16 bytes | |||
Data_Size_Used: 16 bytes | |||
Used in SFO's of type: Trophy | |||
Same than ACCOUNT_ID but with a '''Data_Type''' utf-8 | |||
Same | |||
===ANALOG_MODE=== | ===ANALOG_MODE=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: PS1 Game | |||
Used to enable compatibility with the analog sticks of the Dualshock Controller | |||
===APP_VER=== | ===APP_VER=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 8 bytes | |||
Data_Size_Used: 6 bytes | |||
Used in SFO's of type: HDD Game, PSP Mini Game | |||
Application version (or patch version). Not used in old games | |||
The format is '''XX.YY''' where "'''XX'''" and "'''YY'''" are numbers, and the point "'''.'''" is included in the string | |||
Usually '''01.00''' is used for a stable release version. Game patches uses bigger numbers as '''01.01''' for the first patch, '''01.02''' for the second one, etc... | |||
===ATTRIBUTE=== | |||
Game | Data_Type: uint32_t | ||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game, Save Data | |||
This parameter contains a maximun of 32 flags that can be turned on/off to activate/deactivate speciall boot modes for the content. | |||
Values are stored in "Little Indian" format, by converting them to "Big Indian" and then to binary is easyer to see in a "human readable" format how are ordered from older to newer (note that the list separates them in 4 blocks, each of this blocks are "filled" from top to bottom). The older flags are related to PSP in the first block because PSP is older than PS3. | |||
Flags can be used in groups, to remove or add a flag from the group is needed to make an addition or a substraction of the values. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Little Endian !! Big Endian !! Flags (Binary) !! Description | ||
|- | |- | ||
| | | 01 00 00 00 || 00 00 00 01 || 00000000 00000000 00000000 00000001 || PSP [[Remote_Play|Remote Play]] in MPEG4 SP/ATRAC | ||
|- | |- | ||
| | | 02 00 00 00 || 00 00 00 02 || 00000000 00000000 00000000 00000010 || PSP Export | ||
|- | |- | ||
| | | 04 00 00 00 || 00 00 00 04 || 00000000 00000000 00000000 00000100 || PSP [[Remote_Play|Remote Play]] in MPEG4 AVC/AAC | ||
|- | |- | ||
| | | 08 00 00 00 || 00 00 00 08 || 00000000 00000000 00000000 00001000 || Unknown ! | ||
|- | |- | ||
| | | 10 00 00 00 || 00 00 00 10 || 00000000 00000000 00000000 00010000 || Unknown ! | ||
|- | |- | ||
| | | 20 00 00 00 || 00 00 00 20 || 00000000 00000000 00000000 00100000 || "XMB in-game" background music | ||
|- | |- | ||
| | | 40 00 00 00 || 00 00 00 40 || 00000000 00000000 00000000 01000000 || Not used yet ? | ||
|- | |- | ||
| | | 80 00 00 00 || 00 00 00 80 || 00000000 00000000 00000000 10000000 || Not used yet ? | ||
|- | |- | ||
! !! !! !! | |||
|- | |- | ||
| | | 00 01 00 00 || 00 00 01 00 || 00000000 00000000 00000001 00000000 || Move Controller Warning Screen | ||
|- | |- | ||
| | | 00 02 00 00 || 00 00 02 00 || 00000000 00000000 00000010 00000000 || Navigation Controller Warning Screen | ||
|- | |- | ||
| | | 00 04 00 00 || 00 00 04 00 || 00000000 00000000 00000100 00000000 || Eye Cam Warning Screen | ||
|- | |- | ||
| | | 00 08 00 00 || 00 00 08 00 || 00000000 00000000 00001000 00000000 || Calibration Notification | ||
|- | |- | ||
| | | 00 10 00 00 || 00 00 10 00 || 00000000 00000000 00010000 00000000 || Stereoscopic 3D Warning Screen | ||
|- | |- | ||
| | | 00 20 00 00 || 00 00 20 00 || 00000000 00000000 00100000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 40 00 00 || 00 00 40 00 || 00000000 00000000 01000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 80 00 00 || 00 00 80 00 || 00000000 00000000 10000000 00000000 || Not used yet ? | ||
|- | |- | ||
! !! !! !! | |||
|- | |- | ||
| | | 00 00 01 00 || 00 01 00 00 || 00000000 00000001 00000000 00000000 || Unknown ! | ||
|- | |- | ||
| | | 00 00 02 00 || 00 02 00 00 || 00000000 00000010 00000000 00000000 || Installable Packages in folder PKGDIR. See: [[PARAM.SFO#CATEGORY|CATEGORY]] | ||
|- | |- | ||
| | | 00 00 04 00 || 00 04 00 00 || 00000000 00000100 00000000 00000000 || Game patch overwrite atribute (resolution, sound format, remote play) | ||
|- | |- | ||
| | | 00 00 08 00 || 00 08 00 00 || 00000000 00001000 00000000 00000000 || Enable game purchase. See: [[PARAM.SFO#CONTENT_ID|CONTENT_ID]] | ||
|- | |- | ||
| | | 00 00 10 00 || 00 10 00 00 || 00000000 00010000 00000000 00000000 || Game patch overwrite atribute (XMB in-game) | ||
|- | |- | ||
| | | 00 00 20 00 || 00 20 00 00 || 00000000 00100000 00000000 00000000 || Game patch overwrite atribute (move screen) | ||
|- | |- | ||
| | | 00 00 40 00 || 00 40 00 00 || 00000000 01000000 00000000 00000000 || Game patch overwrite atribute (3D screen) | ||
|- | |- | ||
| | | 00 00 80 00 || 00 80 00 00 || 00000000 10000000 00000000 00000000 || Move compatible / Game patch overwrite atribute (Move controller) | ||
|- | |- | ||
! !! !! !! | |||
|- | |- | ||
| | | 00 00 00 01 || 01 00 00 00 || 00000001 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 02 || 02 00 00 00 || 00000010 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 04 || 04 00 00 00 || 00000100 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 08 || 08 00 00 00 || 00001000 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 10 || 10 00 00 00 || 00010000 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 20 || 20 00 00 00 || 00100000 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 40 || 40 00 00 00 || 01000000 00000000 00000000 00000000 || Not used yet ? | ||
|- | |- | ||
| | | 00 00 00 80 || 80 00 00 00 || 10000000 00000000 00000000 00000000 || Not used yet ? | ||
|} | |||
Some examples. If you find a game with a flag in his ATTRIBUTE that is not yet in the table, please add it | |||
{| class="wikitable" | |||
|- | |- | ||
! Little Endian !! Big Endian !! Flags (Binary ) !! Game !! Flags !! Description | |||
|- | |- | ||
| | | 05 17 80 00 || 00 80 17 05 || 00000000 10000000 00010111 00000101 || killzone 3 || 7 || Move compatible + 3D screen + 3 move screens + 2 Remote Play modes | ||
|- | |- | ||
| | | 20 00 02 00 || 00 02 00 20 || 00000000 00000010 00000000 00100000 || Dead Space 2 || 2 || Installable Packages + "XMB in-game" | ||
| | |||
|} | |} | ||
*'''PSP Remote Play''' | |||
The format "MPEG4 AVC/AAC" only works when the other format "MPEG4 SP/ATRAC" is activated | |||
*'''PSP Export''' | |||
Can be activate depend to CATEGORY (HG and others?) and works only if "feel free to fill" checked by "feel free to fill" | |||
*'''XMB In-game''' | |||
Is a feature that lets you pause the game (with the PS button) and play your own music from the files stored in your HDD | |||
The formats supported are the same than the native ones, it support playlists and all the normall functions of the music player. It was introduced in firmware 2.40 | |||
*'''Move Controller warning screen''' | |||
This screen (and the other warning screens) are displayed before the game is launched, them explains the correct way to use the move controller, navigation controller, and eye cam respectively | |||
Each of this screens are displayed around 3 seconds, the game waits for them to appear so is a good idea to remove them to improve the loading time, the removing of any of the 3 screens has no effect of the controller support and the controller will work without them | |||
A example of a bad use of this screens is "3.56 FJW cfw" that patches all SFO's to activate 2 of this flags to force all his users to see 2 logos (i cant comment one of them, and the other the gargoile) causing a delay in the timing to boot a game or program >:P | |||
*'''Navigation Controller, and Eye Cam warning screens''' | |||
Only works when "Move Controller" warning screen is activated | |||
*'''Calibration Notification''' | |||
This flag makes appear a calibration screen, but only when the controller has not been calibrated previously (or when is missconfigured) | |||
*'''Stereoscopic 3D Warning Screen''' | |||
This is a warning screen similar than the ones related with move peripherals, but only appear when you are using a 3D compatible TV (is intended to give you some seconds to catch your 3D glasses) | |||
*'''Installable Packages''' | |||
In path PS3_GAME\PKGDIR\PKG** (where ** is a number from 00 to 99) | |||
This is one of the 2 ways to install packages (used in Blue-Ray discs), it can be said that the flags is "activating" the sub-folder PKGDIR, inside PKGDIR there is another SFO that can be considered an "Level2 SFO" | |||
The ATTRIBUTE of this "Level2 SFO" is always an "1" (different of the values explained in this table that are only applicables to "Level1 SFO's" | |||
*'''Enable game purchase''' | |||
Only works if the category is a DG/HD and checked by "feel free to fill". Can change somes settings as titles, parental lock level, resolutions, and others Content Informations Files (probably related to expirations and such) after you purchased the game. | |||
*'''Move compatible''' | |||
Enables support for the Move Controller (Navigation Controller and Eye Cam are activated at the same time that the Move Controller and doesn't have/need a flag) | |||
===BOOTABLE=== | |||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game | |||
If this content is bootable or not. (1 to enable, 0 to disable), useful when you are going to make a data pkg. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Little Endian !! Big Endian !! Flags (Binary) !! Description | ||
|- | |- | ||
| | | 00 00 00 00 || 00 00 00 00 || 00000000 00000000 00000000 00000000 || Not bootable | ||
|- | |- | ||
| | | 01 00 00 00 || 00 00 00 01 || 00000000 00000000 00000000 00000001 || Bootable | ||
|- | |- | ||
| | |} | ||
===CATEGORY=== | |||
Data_Type: utf-8 | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 3 bytes | |||
Used in SFO's of type: All but trophy | |||
*'''HDD Installable content''' | |||
These are the columns where you will see your content in the [[XMB]] and the CATEGORY asociated. | |||
{| class="wikitable" | |||
|- | |- | ||
! Photo !! Music !! Video !! TV Services !! Game !! Network !! Playstation Network !! Content !! Notes | |||
|- | |- | ||
| | | AP || || || || || || || || | ||
|- | |- | ||
| | | || AM || || || || || || || | ||
|- | |- | ||
| | | || || AV || || || || || || | ||
|- | |- | ||
| | | || || || AT || || || || || The column is hidden when no packages are installed | ||
|- | |- | ||
| | | || || || || HG || || || HDD Game || | ||
|- | |- | ||
| | | || || || || || CB || || || | ||
|- | |- | ||
| | | || || || || || || HM || || | ||
|- | |- | ||
| | | || || || || 1P || || || PS1 Game || | ||
|- | |- | ||
| | | || || || || 2P || || || PS2 Game ? || | ||
|- | |- | ||
| | | || || || || MN || || || PSP Mini Game || | ||
|- | |- | ||
| | | || || || || GD || || || Game Data || | ||
|- | |- | ||
| | | || || || || SD || || || Save Data || | ||
|- | |- | ||
| | | || || || || ♦ || || || Trophy || Trophies are placed in Game column, but doesn't have CATEGORY | ||
|- | |- | ||
|} | |} | ||
''' | *'''Blu-Ray discs''' | ||
These are "fake" Blu-Ray structures with the minimall parameters inside SFO's/SFX's and the needed '''HYBRID_FLAG''''s inside [[PS3_DISC.SFB]] | |||
All the files are 100% hand made from scratch and tested, reduced to the minimall needed to work with the purpose of understand the structure and to document all valid CATEGORY values | |||
'''Game discs in folder PS3_GAME''' | |||
PS3_GAME folder is mounted in '''Game''' column in the XMB | |||
This is the basic structure of a game, PARAM.SFO can contain other parameters but these are the minimall needed to be mounted | |||
0GAM00001 | |||
|--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0GAM00001) | |||
|--- PS3_GAME | |||
|--- PARAM.SFO <--- CATEGORY (DG), TITLE_ID (0GAM00001) | |||
|--- USRDIR | |||
|--- EBOOT.BIN | |||
''' | '''Movie discs in folder PS3_VPRM''' | ||
PS3_VPRM folder is mounted in '''Video''' column in the XMB | |||
This is the part of a Blue-Ray movie structure related with the PS3 system... the rest are the standard folders/files of a Blue-Ray movie and is not needed to be explained here | |||
This is a | 0MOV00001 | ||
|--- PS3_DISC.SFB <--- HYBRID_FLAG (v), TITLE_ID (blank) | |||
|--- PS3_VPRM | |||
|--- PARAM.SFO <--- CATEGORY (DM) | |||
''' | '''Game discs in folder PS3_CONTENT''' | ||
VIDEODIR folder is mounted in '''Video''' column in the XMB and listed inside subfolders using 320x176 pixels icons | |||
THEMEDIR is mounted in '''Game''' column as a secondary icon under the "main game" icon, in subfolders inside "bubbles". | |||
All icons are 320x176 pixels size, but resized when displayed to fit inside the bubbles. | |||
Note that .P3T themes doesn't need/admit an SFO/SFX, the icon contained in the theme is displayed inside the bubble and also the '''TITLE''' | |||
0CONT00001 | |||
|--- PS3_DISC.SFB <--- HYBRID_FLAG (TV), TITLE_ID (0CONT00001) | |||
|--- PS3_CONTENT | |||
|--- THEMEDIR | |||
| |--- PARAM.SFO <--- ATTRIBUTE (01000000), CATEGORY (TR), TITLE (Themes) | |||
| |--- D000 | |||
| |--- DATA001.P3T | |||
| |--- DATA002.P3T | |||
|--- VIDEODIR | |||
|--- PARAM.SFO <--- ATTRIBUTE (01000000), CATEGORY (VR), TITLE (Videos) | |||
|--- D001 | |||
| |--- PARAM.SFO <--- CATEGORY (VI), TITLE (Video 1) | |||
| |--- DATA000.MP4 | |||
|--- D002 | |||
|--- PARAM.SFO <--- CATEGORY (VI), TITLE (Video 2) | |||
|--- DATA000.MP4 | |||
'''Game discs in folder PS3_GAME/PKGDIR''' | |||
''' | This subfolder structure is dependant of the basic '''PS3_GAME''' because is activated by a flag ('''00000200''') in the [[PARAM.SFO#ATTRIBUTE|ATTRIBUTE]] of the PARAM.SFO inside PS3_GAME | ||
PKGDIR is mounted as a secondary icon under the "main game" icon, and the packages are listed in subfolders inside "bubbles". Icons are 320x176 pixels size, but resized when displayed to fit inside the bubbles | |||
0PKG00001 | |||
|--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0PKG00001) | |||
|--- PS3_GAME | |||
|--- PARAM.SFO <--- ATTRIBUTE (00000200), CATEGORY (DG) | |||
|--- PKGDIR | |||
|--- PARAM.SFO <--- ATTRIBUTE (0100000), CATEGORY (DP), TITLE (Packages) | |||
|--- PKG01 | |||
| |--- PARAM.SFO <--- CATEGORY (IP), TITLE (Package 1) | |||
| |--- INSTALL.PKG | |||
|--- PKG02 | |||
|--- PARAM.SFO <--- CATEGORY (IP), TITLE (Package 2) | |||
|--- INSTALL.PKG | |||
''' | '''Game discs in folder PS3_EXTRA''' | ||
PS3_GAME folder is mounted in '''Game''' column in the XMB | |||
Icons aspect is the same used in "PStore news" menu (big squares of 486x405 pixels) like this http://www.blogcdn.com/www.joystiq.com/media/2009/08/firmrwae300ps3.jpg | |||
0EXT00001 | |||
|--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0EXT00001) | |||
|--- PS3_GAME | |||
| |--- PARAM.SFO <--- CATEGORY (DG) | |||
|--- PS3_EXTRA | |||
|--- PARAM.SFO <--- ATTRIBUTE (0100000), CATEGORY (XR), TITLE (Extras) | |||
|--- D001 | |||
| |--- PARAM.SFX <--- CATEGORY (IP), TITLE (Package 1) | |||
| |--- DATA000.PKG | |||
|--- D002 | |||
| |--- PARAM.SFX <--- CATEGORY (IP), TITLE (Package 2) | |||
| |--- DATA000.PKG | |||
|--- D003 | |||
| |--- PARAM.SFX <--- CATEGORY (VI), TITLE (Video 1) | |||
| |--- DATA000.MP4 | |||
|--- D004 | |||
| |--- PARAM.SFX <--- CATEGORY (VI), TITLE (Video 2) | |||
| |--- DATA000.MP4 | |||
|--- D005 | |||
| |--- PARAM.SFX <--- CATEGORY (TI), TITLE (Theme 1) | |||
| |--- DATA000.P3T | |||
|--- D006 | |||
|--- PARAM.SFX <--- CATEGORY (TI), TITLE (Theme 2) | |||
|--- DATA000.P3T | |||
You can download this structures to experiment with them or to look how SFO's SFX's are built ---> [[http://www.sendspace.com/file/o95vde| Blu-Ray fake discs by sandungas]] | |||
|- | |||
''' | *'''Other CATEGORY's, unknown, unrelated, untested or not listed yet''' | ||
sub category as Game patch of HDD Game or Special Application as syteme files for HDD game X0, X4 | |||
AR - Patches | |||
===CONTENT_ID=== | ===CONTENT_ID=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 48 bytes | |||
Data_Size_Used: 37 bytes | |||
Used in SFO's of type: HDD Game | |||
ContentID for Gamepurchase. Used in games that runs in "demo mode" and can be purchased (unlocked) by pressing triangle over his icon in the XMB. | |||
Contains the name of the license .rif file in a format: XXyyyy-[[PARAM.SFO#NP_COMMUNICATION_ID|NP_COMMUNICATION_ID]]-LICENSE | |||
This games has a minimal folder structure with two PARAM.SFO like this: | This games has a minimal folder structure with two PARAM.SFO like this: | ||
NPxx12345 | NPxx12345 | ||
|--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Trial) ... & others | |--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Trial) ... & others | ||
Line 714: | Line 598: | ||
|--- C00 | |--- C00 | ||
|--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Full) ... & others | |--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Full) ... & others | ||
The only different parameter of the PARAM.SFO inside folder '''C00''' is his '''TITLE''' | |||
===DETAIL=== | ===DETAIL=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 1024 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: Save Data | |||
These are the text lines displayed under SUB_TITLE text in [[XMB]]. | |||
Used only for SaveData to store long texts from the game like the name of the level you was playing, the equipment of your character (in a RPG), or the car you was driving (in a race simulator), etc... | |||
When the text is too long to fit in the screen it scrolls vertically from bottom to top, if the '''Data_Used_Size''' is not correct this scroll doesn't flow properly. | When the text is too long to fit in the screen it scrolls vertically from bottom to top, if the '''Data_Used_Size''' is not correct this scroll doesn't flow properly. | ||
To displace texts to the next row is used the speciall byte "'''0A'''", this way it can be done a long message with lot of horizontall lines (the limit of the horizontall lines is not clear but is high, probably only limited by the ones you can fit in the 1024 bytes of his '''Data_Size_Total'''). | |||
=== | ===LANG=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: Trophy | |||
The language used in the trophy config file (TROPCONF.SFM) that stores static data with all the texts related to each trophy. | |||
Valid values are the ones used in [[Content_Information_Files#Regional_codes_in_file_names_.28languages.29|Regional codes]] | |||
===LICENSE=== | ===LICENSE=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 512 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: HDD Game | |||
License text of the content | License text of the content | ||
=== NP_COMMUNICATION_ID === | ===NP_COMMUNICATION_ID=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 16 bytes | |||
Data_Size_Used: 13 bytes | |||
Used in SFO's of type: HDD Game | |||
Name of the folder containing the trophy installer (TROPHY.TRP) | |||
The format is | The format is NPWRxxyyy_zz (e.g. NPWR00001_00) | ||
===NPCOMMID=== | |||
Data_Type: utf-8 | |||
Data_Size_Total: 16 bytes | |||
Data_Size_Used: 12 bytes | |||
Used in SFO's of type: Trophy | |||
Same than NP_COMMUNICATION_ID but with a ''' | Same than NP_COMMUNICATION_ID but with a '''Data_Size_Used''' of 12 bytes | ||
===PADDING=== | ===PADDING=== | ||
Data_Type: ? | |||
Data_Size_Total: 8 bytes | |||
Data_Size_Used: 0 bytes | |||
Used in SFO's of type: Trophy | |||
Unknown | Unknown | ||
===PARAMS=== | ===PARAMS=== | ||
Data_Type: ? | |||
Data_Size_Total: 1024 bytes | |||
Data_Size_Used: 1024 bytes | |||
Used in SFO's of type: Save Data | |||
This parameter is intented to store user (and console?) specific data. Is the only one known parameter that contains an internall structure with severall strings, his size is huge for being an integer, and his '''Data_Type''' is unknown | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Offset!! length !! Example !! Description !! Notes | |||
|- | |- | ||
| | | 0x0000 || 12 (0xC)|| 030401020300000000000000 || Unknown || | ||
|- | |- | ||
| 0x000C || 4 (0x4) || 08000000 || Unknown || | |||
| | |||
|- | |- | ||
| | | 0x0010 || 4 (0x4) || 7D000000 || Unknown || | ||
|- | |- | ||
| | | 0x0014 || 4 (0x4) || 03000000 || Unknown || | ||
|- | |- | ||
| | | 0x0018 || 4 (0x4) || 01000000 || '''userid''' || User identificator number from [[XRegistry.sys]] | ||
|- | |- | ||
| 0x001C || 16 (0x10) || FEDCBA9876543210FEDCBA9876543210 || '''psid''' || More info: [[PSID]] | |||
| | |||
|- | |- | ||
| | | 0x002C || 4 (0x4) || 01000000 || '''userid''' || User identificator number from [[XRegistry.sys]] | ||
|- | |- | ||
| | | 0x0030 || 16 (0x10) || 0123456789ABCDEF0123456789ABCDEF || '''accountid''' || PSN account identificator from [[XRegistry.sys]] | ||
|- | |- | ||
| | | 0x0040 || 960 (0x3C0) || 00000000........ || Unknown || Big chunk of zeroes, probably used or reserved for other formats | ||
|- | |- | ||
|} | |} | ||
*Notes: | *Notes: | ||
**The | ** The string used in the paramater ACCOUNT_ID is the same than '''accountid'''. When PARAMS & ACCOUNT_ID are present in the SFO the string can be found two times in the file. | ||
===PARAMS2=== | ===PARAMS2=== | ||
Data_Type: ? | |||
Data_Size_Total: 12 bytes | |||
Data_Size_Used: 12 bytes | |||
Used in SFO's of type: Save Data | |||
Unknown, usually filled with zeroes | Unknown, usually filled with zeroes | ||
=== | ===PARENTAL_LEVEL_x=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game | |||
Used to define specific restrictions to a region, where the "x" is a letter of the next list | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Parameter !! Internall code !! Region | ||
|- | |- | ||
| | | PARENTAL_LEVEL_A ||SCEA || America | ||
|- | |- | ||
| | | PARENTAL_LEVEL_C || SCH || China | ||
|- | |- | ||
| | | PARENTAL_LEVEL_E || SCEE || Europe | ||
|- | |- | ||
| | | PARENTAL_LEVEL_H || SCEH || Hong Kong | ||
|- | |- | ||
| | | PARENTAL_LEVEL_J || SCEJ || Japan | ||
|- | |- | ||
| | | PARENTAL_LEVEL_K || SCEK || Korea | ||
|- | |- | ||
| { | |} | ||
Valid values found for PARENTAL_LEVEL_x: ffffffff | |||
The valid values for PARENTAL_LEVEL_x are... ??? (added to the previous table if possible) | |||
*Based on PEGI [[http://en.wikipedia.org/wiki/Pan_European_Game_Information]] for europe ? | |||
===PARENTAL_LEVEL=== | |||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game, PSP Mini Game, Game Data, Save Data | |||
Is an scale from 1 to 11 to rate the content for the different users based in his user profile settings. | |||
The lower the level, the higher the restriction e.g. A game rated 5 requires the "unlock PIN" for a user with level 4. | |||
The most relaxed level is 11 that allows all games from 1-10 to be played, level 0 is disabled. | |||
{| class="wikitable" | |||
|- | |- | ||
! Little Endian !! Big Endian !! Decimal !! Description | |||
|- | |- | ||
| | | 00 00 00 00 || 00 00 00 00 || 0 || Disabled | ||
|- | |- | ||
| | | 01 00 00 00 || 00 00 00 01 || 1 || Higher | ||
|- | |- | ||
| | | 02 00 00 00 || 00 00 00 02 || 2 || | ||
|- | |- | ||
| | | 03 00 00 00 || 00 00 00 03 || 3 || | ||
|- | |- | ||
| | | 04 00 00 00 || 00 00 00 04 || 4 || | ||
|- | |- | ||
| 05 00 00 00 || 00 00 00 05 || 5 || | |||
|- | |- | ||
| | | 06 00 00 00 || 00 00 00 06 || 6 || | ||
|- | |- | ||
| | | 07 00 00 00 || 00 00 00 07 || 7 || | ||
|- | |- | ||
| | | 08 00 00 00 || 00 00 00 08 || 8 || | ||
|- | |- | ||
| | | 09 00 00 00 || 00 00 00 09 || 9 || | ||
|- | |- | ||
| | | 0A 00 00 00 || 00 00 00 0A || 10 || | ||
|- | |- | ||
| | | 0B 00 00 00 || 00 00 00 0B || 11 || Lower | ||
|- | |- | ||
|} | |} | ||
===PARENTALLEVEL=== | |||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: PS1 Game, Trophy | |||
Same than PARENTAL_LEVEL | Same than PARENTAL_LEVEL | ||
===PS3_SYSTEM_VER=== | ===PS3_SYSTEM_VER=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 8 bytes | |||
Data_Size_Used: 8 bytes | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game | |||
Minimum PS3 [[System_Software|System Software]] required for the content to be bootable. | Minimum PS3 [[System_Software|System Software]] required for the content to be bootable. | ||
The format is '''XX.YYYY''' where "'''XX'''" and "'''YYYY'''" are numbers, and the point "'''.'''" is included in the string | The format is '''XX.YYYY''' where "'''XX'''" and "'''YYYY'''" are numbers, and the point "'''.'''" is included in the string. | ||
===REGION_DENY=== | ===REGION_DENY=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game | |||
There are | Region restrictions for the content. | ||
There are 11 valid [[Regions]], each region has a position assigned in the binary string, this positions are marked with an "1" for a locked region, and a "0" for a unlocked region. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Little Endian !! Big Endian !! Flags (Binary) !! Unlocked Region !! Notes | ||
| | |||
|- | |||
| FD FF FF FF || FF FF FF FD || 11111111 11111111 11111111 11111101 || USA || Used in Netflix | |||
|- | |||
| FB FF FF FF || FF FF FF FB || 11111111 11111111 11111111 11111011 || Europe || | |||
|- | |||
| F7 FF FF FF || FF FF FF F7 || 11111111 11111111 11111111 11110111 || Korea || | |||
|- | |- | ||
| | | EF FF FF FF || FF FF FF EF || 11111111 11111111 11111111 11101111 || UK || | ||
|- | |- | ||
| | | DF FF FF FF || FF FF FF DF || 11111111 11111111 11111111 11011111 || Mexico || | ||
|- | |- | ||
| | | BF FF FF FF || FF FF FF BF || 11111111 11111111 11111111 10111111 || Oceania || | ||
|- | |- | ||
| | | 7F FF FF FF || FF FF FF 7F || 11111111 11111111 11111111 01111111 || Southeast Asia || | ||
|- | |- | ||
| | | FF FE FF FF || FF FF FE FF || 11111111 11111111 11111110 11111111 || Taiwan || | ||
|- | |- | ||
| | | FF FD FF FF || FF FF FD FF || 11111111 11111111 11111101 11111111 || Russia || | ||
|- | |- | ||
| | | FF FB FF FF || FF FF FB FF || 11111111 11111111 11111011 11111111 || China || | ||
|- | |- | ||
| | | FF F7 FF FF || FF FF F7 FF || 11111111 11111111 11110111 11111111 || Hong Kong || | ||
|- | |- | ||
| | |||
|- | |- | ||
| | | F6 FF FF FF || FF FF FF F6 || 11111111 11111111 11111111 11111110 || Japan || | ||
|- | |- | ||
| | | F8 FF FF FF || FF FF FF F8 || 11111111 11111111 11111111 11111000 || Japan & USA & Europe || | ||
|- | |- | ||
| | | FA FF FF FF || FF FF FF FA || 11111111 11111111 11111111 11111010 || Japan & Europe || | ||
|- | |- | ||
| | | FC FF FF FF || FF FF FF FC || 11111111 11111111 11111111 11111100 || Japan & USA || | ||
|- | |||
| FE FF FF FF || FF FF FF FE || 11111111 11111111 11111111 11110110 || Japan & Korea || | |||
|- | |||
| | |||
|- | |- | ||
| | | 01 F0 FF FF || FF FF F0 01 || 11111111 11111111 11110000 00000001 || All Regions || Found in a photo of a DEX with the the text: "1-11 all regions" | ||
|- | |- | ||
|} | |} | ||
===RESOLUTION=== | ===RESOLUTION=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game | |||
TV video modes supported by the content. | TV video modes supported by the content. | ||
When there are | When there are severall flags activated the PS3 will use the one with higher quality supported by the TV. | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Little Endian !! Big Endian !! Flags (Binary) !! Description | ||
|- | |- | ||
| | | 01 00 00 00 || 00 00 00 01 || 00000000 00000000 00000000 00000001 || 480 (4:3) | ||
|- | |- | ||
| | | 02 00 00 00 || 00 00 00 02 || 00000000 00000000 00000000 00000010 || 576 (4:3) | ||
|- | |- | ||
| | | 04 00 00 00 || 00 00 00 04 || 00000000 00000000 00000000 00000100 || 720 (16:9) | ||
|- | |- | ||
| | | 08 00 00 00 || 00 00 00 08 || 00000000 00000000 00000000 00001000 || 1080 (16:9) | ||
|- | |- | ||
| | | 10 00 00 00 || 00 00 00 10 || 00000000 00000000 00000000 00010000 || 480 (16:9) | ||
|- | |- | ||
| | | 20 00 00 00 || 00 00 00 20 || 00000000 00000000 00000000 00100000 || 576 (16:9) | ||
|- | |- | ||
| | | 40 00 00 00 || 00 00 00 40 || 00000000 00000000 00000000 01000000 || Not used yet ? | ||
|- | |- | ||
| | | 80 00 00 00 || 00 00 00 80 || 00000000 00000000 00000000 10000000 || Not used yet ? | ||
|- | |- | ||
|} | |} | ||
===SAVEDATA_DIRECTORY=== | ===SAVEDATA_DIRECTORY=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 64 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: Save Data | |||
Name of the folder where the game stores his SaveData. | |||
The size is variable, but usually begins with the TITLE_ID of the game followed by whatever characters e.g: '''ABCD12345-savedata''' | |||
===SAVEDATA_LIST_PARAM=== | ===SAVEDATA_LIST_PARAM=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 8 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: Save Data | |||
Unknown, usually filled with zeroes, but with a '''Data_Used_Size''' of 1 byte | |||
*Gran turismo 5 contains the string "GAMEDAT" | |||
===SOUND_FORMAT=== | ===SOUND_FORMAT=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game | |||
Sound modes supported by the content. | Sound modes supported by the content. | ||
When there are severall flags activated the PS3 will use the one with higher quality supported by the TV. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Little Endian !! Big Endian !! Flags (Binary) !! Description | ||
|- | |- | ||
| | | 01 00 00 00 || 00 00 00 01 || 00000000 00000000 00000000 00000001 || LPCM 2.0 | ||
|- | |- | ||
| | | 04 00 00 00 || 00 00 00 04 || 00000000 00000000 00000000 00000100 || LPCM 5.1 | ||
|- | |- | ||
| | | 10 00 00 00 || 00 00 00 10 || 00000000 00000000 00000000 00010000 || LPCM 7.1 | ||
|- | |- | ||
| | | 02 01 00 00 || 00 00 01 02 || 00000000 00000000 00000001 00000010 || Dolby Digital 5.1 ??? | ||
|- | |- | ||
| | | 02 02 00 00 || 00 00 02 02 || 00000000 00000000 00000010 00000010 || DTS Digital Surround ??? | ||
|- | |- | ||
|} | |} | ||
===SOURCE=== | ===SOURCE=== | ||
Data_Type: uint32_t | |||
Data_Size_Total: 4 bytes | |||
Data_Size_Used: 4 bytes | |||
Used in SFO's of type: Trophy | |||
Unknown, usually filled with zeroes | Unknown, usually filled with zeroes | ||
===SUB_TITLE=== | ===SUB_TITLE=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 128 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: Save Data | |||
Is the line of text displayed under TITLE text in [[XMB]], used only in SaveData to store texts from the game like your player name, your play time, or your rank in the game | |||
When the text is too long to fit in the screen it scrolls horizontally from right to left, if the '''Data_Used_Size''' is not correct this scroll doesn't flow properly. The same behaviour happens with TITLE, TITLE_xx, TITLEID0xx and TITLE_ID | When the text is too long to fit in the screen it scrolls horizontally from right to left, if the '''Data_Used_Size''' is not correct this scroll doesn't flow properly. The same behaviour happens with TITLE, TITLE_xx, TITLEID0xx and TITLE_ID | ||
=== | ===TARGET_APP_VER=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 8 bytes | |||
Data_Size_Used: 6 bytes | |||
Used in SFO's of type: Game Data | |||
Target application version (for non-cummulative patches). | |||
Severall patches with the same '''TARGET_APP_VER''' can be installed over the main game with the same '''APP_VER''', this can be used to install "themes", or "expansion packs". | |||
The format is '''XX.YY''' where "'''XX'''" and "'''YY'''" are numbers, and the point "'''.'''" is included in the string | The format is '''XX.YY''' where "'''XX'''" and "'''YY'''" are numbers, and the point "'''.'''" is included in the string. | ||
===TITLE=== | ===TITLE=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 128 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game, Game Data, Save Data | |||
Is the default "title of the game" for all languages. The text is displayed right to the ICON0.PNG in [[XMB]]. | |||
===TITLE_ID=== | ===TITLE_ID=== | ||
Data_Type: utf-8 | |||
Data_Size_Total: 16 bytes | |||
Data_Size_Used: 10 | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game, Game Data | |||
[[TITLE ID]] of the content, must be the same ID inside the Makefile | |||
Depends on fews parameters, category as DG or HG and regions or type | |||
*For discs the format is '''WXYZ12345''' where: | |||
**'''W''' is the media: '''B''' = Blu-ray '''S''' = CD/DVD | |||
**'''X''' is the license: '''C''' = Official '''L''' = Licensed | |||
**'''Y''' is the region: '''A''' = Asia '''E''' = Europe '''J''' = Japan '''U''' = USA | |||
**'''Z''' is the kind of content '''D''' = Demo '''M''' = Malayan Release '''S''' = Retail release | |||
**'''12345''' is the game ID in chronological order | |||
Hdd games or apps will start by NP | |||
Fews title_id names are reserved/restricted and don t apply to this classic way and used By Sony for certains purposes e.g: | |||
Title ID as TEST-xxxxx (x as a number) with disc version set as 00.00 | |||
Others examples: | |||
MRTC00001 STAR OCEAN THE LAST HOPE (the first internationall blu-ray release) | |||
===TITLE_xx=== | |||
Data_Type: utf-8 | |||
Data_Size_Total: 128 bytes | |||
Data_Size_Used: variable | |||
Used in SFO's of type: HDD Game | |||
Same than TITLE but for localized languages. | |||
An .SFO can contain severall TITLE_'''xx''' where '''xx''' is a number for a regional code. See: [[Content_Information_Files|Content Information Files]]. | |||
The "default" TITLE is always present when other "localized" TITLE_xx are used. | |||
===TITLEID0xx=== | |||
Data_Type: utf-8 | |||
Data_Size_Total: 16 bytes | |||
Data_Size_Used: 9 | |||
Used in SFO's of type: Trophy | |||
SFO's for trophies contains a full list of 16 TITLEID0xx parameters for all languages where "xx" is a number for a regional code. See: [[Content_Information_Files|Content Information Files]]. | |||
All them can contain data... or only the default one (00). The ones without data are marked with a ''' Data_Size_Used''' = 0 bytes | |||
The string of text contained inside default TITLEID000 is the same than TITLE_ID | |||
===VERSION=== | |||
Data_Type: utf-8 | |||
Data_Size_Total: 8 bytes | |||
Data_Size_Used: 6 bytes (or 3 bytes when used in trophy) | |||
Used in SFO's of type: HDD Game, PS1 Game, PSP Mini Game, Game Data, Trophy | |||
Disc version, or Package version. The number increases when the content is re-released or re-packaged for whatever reason | |||
The format is '''XX.YY''' where "'''XX'''" and "'''YY'''" are numbers, and the point "'''.'''" is included in the string, e.g: '''01.00''' (the format is the same than APP_VER but are not related) | |||
*When used in a SFO for a trophy it has a '''Data_Size_Used''' of 3 bytes, with the format: '''X.Y''' e.g: '''1.0''' | |||
==Tools, file examples, manuals and links== | |||
*Tools | *Tools | ||
Line 1,513: | Line 1,041: | ||
[[Dev_Tools#SFO_Reader|SFO reader]] | [[Dev_Tools#SFO_Reader|SFO reader]] | ||
*Sources | |||
*Sources | |||
http://www.ps3hax.net/showthread.php?t=28704 | http://www.ps3hax.net/showthread.php?t=28704 | ||
http://ps3dev.wikispaces.com/PARAM.SFO | http://ps3dev.wikispaces.com/PARAM.SFO | ||
==Suggestions... (this will be erased later)== | |||
Im not sure how to list "rare" parameters poor documented like HYBRID_PARAM or COMMERCE_PARAM. i can add them to the "parameters descriptions" section as unknown, but not to the "parameters table" because them will break it with lot of empty squares |