PARAM.SFO
Description
SFO (System File Object) are used in folders which content needs to be displayed in the XMB.
The basic file/folder structure of a PS3 content is composed by a SFO, the multimedia Content Information Files, and for special content like Game Saves or Trophy files there is a PARAM.PFD for security reasons, other type of content like games or apps needs an structure of subfolders with names as INSDIR, LICDIR, PKGDIR, TRPDIR, USRDIR, etc...
- The values contained in a SFO can be simplyfied as inputs/outputs for/from the content:
- Boot modifyers (most of the int32 datas) that are sent to the content when is executed to activate specific features or settings (e.g. audio and video modes of a game).
- Information texts (most of the utf8 datas) about the content and its restrictions (e.g. title and version of a game).
SFX (System File in XML format) is similar than SFO but without the data related to its structure (the SFO metadata that has no real value).
The conversion between the 2 formats is direct because the important values contained in both formats are the same (version, param_key, param_fmt, param_max_len & param_data).
SFO's and SFX's can be chained in a structure of subfolders where the "main" SFO activates a special subfolder, and the subfolder contains another SFO that activates another subfolder and so on.
These structures are limited by the system and activated by a combination of CATEGORY and special flags on ATTRIBUTE.
In Blu-Ray discs, the "main" PARAM.SFO itself is activated by another flag inside PS3_DISC.SFB.
Internal Structure
header
At offset 0x0, length 0x14 (20 bytes)
Code Sample
index_table
At offset 0x14, composed by a number of entries defined with tables_entries in the header, each entry is 0x10 length (16 bytes). Values are in Little Endian.
Every entry belongs to a key name in the key_table and defines a data area in the data_table
Code Sample
fmt | Data Type | Description | Notes | |
---|---|---|---|---|
In SFO | In SFX | |||
04 00 | No? | utf8-S | utf8 Special Mode, NOT NULL terminated | Used in SFO's generated by the system and/or linked to an user (Game Saves and Trophies). See Discussion page |
04 02 | utf8 | utf8 | utf8 character string, NULL terminated (0x00) | Can be used any character from the system fonts. The NULL byte is counted as part of the used bytes in len |
04 04 | int32 | int32 | integer 32 bits unsigned | Allways has a length of 4 bytes in len and max_len (even in the case some bytes are not used, all them are marked as used) |
key_table
Composed by a number of key entries defined with tables_entries in the header, are short utf8 strings in capitals, NULL terminated (0x00), and ordered alphabetically (from A to Z). This alphabetically order defines the order of the associated entries in the other two tables (index_table, and data_table)
The end offset of this table needs to be aligned to a multiply of 32bits (4 bytes), this is made with a padding at the end of key_table when needed (in a few SFO's the table is aligned naturally as a coincidence caused by the length of the key names used, when this happens there is no padding needed)
data_table
Composed by a number of data entries defined with tables_entries in the header, every entry in this table is defined by the associated entry in the index_table by using: fmt, len, max_len, and offset. There is no padding between entries neither at the end of this table
Some data entries can be filled with zeroes (not used, but availables for being used). This entries can be considered reserved, and are marked with a len = 0 in the associated entry in the index_table
Internal Structure Examples
Both example files (SFO & SFX) are hand made (the structure is correct but are only a minimal example). Both contains the same info but in different format: only 1 entry (TITLE_ID) and the value for this entry (BLUS12345)
- The bigger difference between SFO and SFX is SFX doesnt contains:
- SFO header
- Key and Data offsets
- Data used length
SFO
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0x00 00 50 53 46 01 01 00 00 24 00 00 00 30 00 00 00 | .PSF....$...0... | 0x10 01 00 00 00 00 00 04 02 0A 00 00 00 0F 00 00 00 | ................ | 0x20 00 00 00 00 54 49 54 4C 45 5F 49 44 00 00 00 00 | ....TITLE_ID.... | 0x30 42 4C 55 53 31 32 33 34 35 00 00 00 00 00 00 00 | BLUS12345....... |
Areas | Offset | Size | Name | Example | Notes |
---|---|---|---|---|---|
header | 0x00 | 0x04 | magic | PSF | |
0x04 | 0x04 | version | 01 01 00 00 | 1.01 | |
0x08 | 0x04 | key_table_start | 24 00 00 00 | Absolute start offset of key_table = 0x24 | |
0x0C | 0x04 | data_table_start | 30 00 00 00 | Absolute start offset of data_table = 0x30 | |
0x10 | 0x04 | tables_entries | 01 00 00 00 | Number of entries in index_table, key_table, and data_table = 1 | |
index_table | 0x14 | 0x02 | key_1_offset | 00 00 | key_1 relative offset. (Absolute start offset of key_1) - (Absolute start offset of key_table) = 0x24-0x24 = 0 |
0x16 | 0x02 | data_1_fmt | 04 02 | data_1 data type = utf8 | |
0x18 | 0x04 | data_1_len | 0A 00 00 00 | data_1 used length (BLUS12345 = 9 bytes + 1 byte NULL termination) = 10 bytes | |
0x1C | 0x04 | data_1_max_len | 0F 00 00 00 | data_1 total length. TITLE_ID is always = 16 bytes | |
0x20 | 0x04 | data_1_offset | 00 00 00 00 | data_1 relative offset. (Absolute start offset of data_1) - (Absolute start offset of data_table) = 0x30-0x30 = 0 | |
key_table | 0x24 | 0x09 | key_1 | TITLE_ID | Relative offset defined in the index_table |
0x2D | 0x03 | padding | 00 00 00 | 9 bytes used by the previous entries + 3 padding = 12 (aligned to 4 bytes) | |
data_table | 0x30 | 0x0F | data_1 | BLUS12345 | Data type, used length, total length, and relative offset defined in the index_table |
SFX
SFX Can be used as "templates" to generate SFO files
SFX Can be created using a SFO as the "source". See: SFO2SFX
Code Sample
- Notes
- The function of add_hidden="false" is unknown
SFO Requirements for HDD contents
This table contains all the parameters known/found for an overview of the requirements needed to build a specific PARAM.SFO for a specific HDD content (SFO's and SFX's used in disc media are not included here).
param | Used in SFO/SFX with CATEGORY | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bootable | Data | Save | Trophy | ||||||||||||
PS3 | PS1 | PS2 | PSP | PS3 | PS2 | PS3 | PSP | PS3 | |||||||
key | fmt | len | max_len | AP, AM, AV, BV, AT, WT, HG, CB, HM, SF | 1P | 2G | 2P | MN | PE | PP | GD | 2D | SD | MS | |
ACCOUNT_ID | utf8-S | 16 (0x010) | No | No | No | No | No | No | No | No | No | Yes | No | No | |
ACCOUNTID | utf8 | 16 (0x010) | No | No | No | No | No | No | No | No | No | No | No | Yes | |
ANALOG_MODE | int32 | 4 (0x004) | No | Yes | No | No | No | No | No | No | No | No | No | No | |
APP_VER | utf8 | 6 (0x006) | 8 (0x008) | Opt | No | No | No | Yes | Yes | No | Opt | No | No | No | No |
ATTRIBUTE | int32 | 4 (0x004) | Opt | Yes | Yes | Opt | Yes | Yes | Yes | Opt | No | Yes | No | No | |
BOOTABLE | int32 | 4 (0x004) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | |
CATEGORY | utf8 | 3 (0x003) | 4 (0x004) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
CONTENT_ID | utf8 | 37 (0x025) | 48 (0x030) | Opt | No | No | No | No | No | No | No | No | No | No | No |
DETAIL | utf8 | variable | 1024 (0x400) | No | No | No | No | No | No | No | No | No | Opt | No | No |
GAMEDATA_ID | utf8 | ? | 32 (0x020) | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
ITEM_PRIORITY | int32 | 4 (0x004) | No | No | Yes | No | No | No | No | No | No | No | No | No | |
LANG | int32 | 4 (0x004) | No | No | No | No | No | No | No | No | No | No | No | Yes | |
LICENSE | utf8 | variable | 512 (0x200) | Yes | No | Yes | No | No | No | No | No | No | No | No | No |
NP_COMMUNICATION_ID | utf8 | 13 (0x00D) | 16 (0x010) | Opt | No | No | No | No | No | No | No | No | No | No | No |
NPCOMMID | utf8 | 12 (0x00C) | 16 (0x010) | No | No | No | No | No | No | No | No | No | No | No | Yes |
PADDING | utf8-S | 0 (0x000) | 8 (0x008) | No | No | No | No | No | No | No | No | No | No | No | Yes |
PARAMS | utf8-S | 1024 (0x400) | No | No | No | No | No | No | No | No | No | Yes | No | No | |
PARAMS2 | utf8-S | 12 (0x00C) | No | No | No | No | No | No | No | No | No | Yes | No | No | |
PARENTAL_LEVEL_x | int32 | 4 (0x004) | Opt | No | No | No | No | No | No | No | No | No | No | No | |
PARENTAL_LEVEL | int32 | 4 (0x004) | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | |
PARENTALLEVEL | int32 | 4 (0x004) | No | Yes | No | No | No | No | No | No | No | No | No | Yes | |
PATCH_FILE | utf8 | ? | 32 (0x020) | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
PS3_SYSTEM_VER | utf8 | 8 (0x008) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Opt | Yes | No | No | No | |
REGION_DENY | int32 | 4 (0x004) | Opt | No | No | Opt | No | No | No | No | No | No | No | No | |
RESOLUTION | int32 | 4 (0x004) | Yes | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | |
SAVEDATA_DETAIL | utf8 | variable | 1024 (0x400) | No | No | No | No | No | No | No | No | No | No | Yes | No |
SAVEDATA_DIRECTORY | utf8 | variable | 64 (0x040) | No | No | No | No | No | No | No | No | No | Yes | Yes | No |
SAVEDATA_FILE_LIST | utf8-S | 3168 (0xC60) | No | No | No | No | No | No | No | No | No | No | Yes | No | |
SAVEDATA_LIST_PARAM | utf8 | variable | 8 (0x008) | No | No | No | No | No | No | No | No | No | Yes | No | No |
SAVEDATA_PARAMS | utf8-S | 128 (0x080) | No | No | No | No | No | No | No | No | No | No | Yes | No | |
SAVEDATA_TITLE | utf8 | variable | 128 (0x080) | No | No | No | No | No | No | No | No | No | No | Yes | No |
SOUND_FORMAT | int32 | 4 (0x004) | Yes | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | |
SOURCE | int32 | 4 (0x004) | No | No | No | No | No | No | No | No | No | No | No | Yes | |
SUB_TITLE | utf8 | variable | 128 (0x080) | No | No | No | No | No | No | No | No | No | Opt | No | No |
TARGET_APP_VER | utf8 | 6 (0x006) | 8 (0x008) | No | No | No | No | No | No | No | Opt | No | No | No | No |
TITLE | utf8 | variable | 128 (0x080) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
TITLE_ID | utf8 | 10 (0x00A) | 16 (0x010) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No |
TITLE_xx | utf8 | variable | 128 (0x080) | Opt | No | Yes | No | No | No | No | No | No | No | No | No |
TITLEID0xx | utf8 | 9 (0x009) | 16 (0x010) | No | No | No | No | No | No | No | No | No | No | No | Yes |
VERSION | utf8 | 6 (0x006) | 8 (0x008) | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes |
XMB_APPS | int32 | 4 (0x004) | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
- Trophy installers creates a PARAM.SFO without CATEGORY, for this reason in the previous table are represented with the icon . Its placement in XMB up to firmware 4.25 was in column, in firmware 4.30 was moved to column, this placement in XMB is not dependant of its CATEGORY. Trophy folders/files are created by a trophy installer (TROPHY.TRP). See: Trophy files
Parameters Descriptions
ACCOUNT_ID
PSN User Account stored as utf8-S. The string is compared with the user info in XRegistry.sys. The comparison can only return two values, right, or wrong, if the comparison returns right the SaveData is valid.
When the user/console has not been registered in PSN = 0000000000000000
When the savedata ownership has been removed (by official DEX feature "fake save data owner") = FFFFFFFFFFFFFFFF
ACCOUNTID (for trophies)
Same string than ACCOUNT_ID but stored as utf8 because the system uses it for normal functions (in this case is sent to PSN to synchronize the trophy data with your online account).
ANALOG_MODE
Hexadecimal (little endian) |
Hexadecimal (big endian) |
Decimal | Binary (flags) |
Feature (notes) |
---|---|---|---|---|
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | Analog Mode Enabled |
- Analog Mode Enabled
Enables compatibility with the analog sticks of the Dualshock Controller.
Digital is single stick mode i.e. remapping the dpad, Analog is twin stick mode or flightstick mode
- http://en.wikipedia.org/wiki/PlayStation_Controller (digital only)
- http://en.wikipedia.org/wiki/Dual_Analog_Controller (Dual analog, can be set digital with analog button)
- http://en.wikipedia.org/wiki/DualShock (Dual analog with rumble, can be set digital with analog button)
- http://en.wikipedia.org/wiki/PlayStation_Analog_Joystick (Dual analog, can be set digital with analog button)
Note: DualShock3+SixAxis are the first to remove the analog button, but can be set in digital mode by software (hence the need of this setting)
- Questions:
- It works (and can be enabled) in PS2 classics ?
- In case of working in PS2 classics... is needed ? (is posible Dualshock 2 enables it by default, so can be pointless)
- On Cobra cfw (not classic) analog mode is auto selected when a PS2 game needs the function, digital mode is grayed out and cannot be highlighted.
- Is posible to disable it ? (in PS1 classics the default mode seems to be disabled so can be pointless, but for PS2 Classic and in case of enabled by default it could be posible to disable)
APP_VER
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, e.g: 01.00 for the first stable version released.
- Cummulative Patches
Game patches uses a bigger APP_VER as 01.01 for the first patch, but keeping the same TITLE_ID from the original release.
ATTRIBUTE
Contains a maximun of 32 flags that can be turned on/off to activate/deactivate special boot modes and features of the content.
Values are stored in "Little Endian" format inside the SFO, to represent the whole tables in a "human readable" format has been needed to convert them to "Big Endian" and then to "Binary".
|
|
ATTRIBUTE flags for bootable content (1st byte) The flags stored at 1st byte seems to be related with firmware features
· PSP Remote Play v2 (firmware v1.80)
· PSVita Remote Play (firmware v4.00)
Remote play is a feature that displays the PS3 screen on a PSP or a PSVita enabling remote operations over a wireless LAN. See: Remote Play
Used in PS1 Classics, PSP Minis, and PSP Games. Allows the copy of the game to a PSP by pressing over the game icon and selecting the option [Copy] in the side menu. This export process is closelly related with how the PS3 manages the downloads and installation of content from PSN using temporal subfolders in dev_hdd0/vsh/task/. See Project Database (PDB)
Games released/compiled before firmware 2.40 doesnt uses "XMB In-Game" even when launched in higher firmwares. This flag enables "XMB In-Game" for these old games, the flag has no effect in games released after 2.40 because newer games has "XMB In-Game" enabled by default. See: XMB Modes.
Disables "XMB In-Game", the flag works in all games and doesnt causes any problem, useful to free ram and to improve the loading time of the menu. See: XMB Modes.
When enabled allows to play your own music from the files stored in your HDD by using the icon that appears in XMB column, is posible to play single songs or a playlist and then return to the game while your music is playing. See XMB In-game background music
Speculation: Not clear if the flag enables or disables voice chat, and not clear wich kind of voice chat (in the very probable case there are severals chat modes/types), supposed to be valid before Jun 2010, matching chronologigally the release of "home" (probably used in beta stages of the developing of chat functions inside "Home" enviroment to make internall tests related with voice chat). Enabling the flag manually for testing in different SFO's with different CATEGORY's didnt give any result
ATTRIBUTE flags for bootable content (2nd byte) The flags stored at 2nd byte seems to be related with warning and notification screens
· Navigation Controller Warning (firmware v3.40)
· PlayStation Eye Cam Warning (firmware v3.40)
This warning screens are composed by several animated images loaded from dev_flash/vsh/resource/game_ext_plugin.rco, are displayed before the game is launched (around 3 seconds each), are an explain of the correct way to use "move controller", "navigation controller", and "eye cam" respectively. The game waits for them to appear so removing them improves the loading time, the presence of this 3 flags/screens has no effect over move controller support.
This is a calibration screen composed by several animated images loaded from dev_flash/vsh/resource/sysconf/calibration/, appears when the controller has not been calibrated previously (or when is miss-configured).
This is a warning screen (composed and loaded from ?) similar than the ones related with move peripherals, when enabled only appears if the PS3 is connected to a "Stereoscopic 3D" compatible TV.
ATTRIBUTE flags for bootable content (3rd byte) The flags stored at 3rd byte seems to be related with game & software features
Loads a secondary SFO from path: dev_bdvd/PS3_GAME/PKGDIR/PARAM.SFO (the flag in the main SFO in path dev_bdvd/PS3_GAME/PARAM.SFO enables the secondary SFO in path dev_bdvd/PS3_GAME/PKGDIR/PARAM.SFO displayed as a bubble inside a disc ), the secondary SFO and the contents of this subfolder are mounted by XMB under the main disc icon in column. See BluRay Disc Structure
Enables the [purchase] option that appears in side menu when pressing over the icon in XMB. Is directly related with CONTENT_ID. When the content is purchased its CONTENT_ID is checked online to obtain the license. After the license is retrieved the game loads another PARAM.SFO from a subfolder with different values. E.g. main PARAM.SFO enables the purchase flag and could use the TITLE "Demo", when purchased other PARAM.SFO from a "C00" subfolder is loaded that could use the TITLE "Full".
When activated, "XMB in Game" for software is used (when quitting an app that uses this flag the message displayed in XMB In-Game changes to: "Do you want to quit the software now?"), and disables [About this Game] option that appears in side menu when pressing over the icon in XMB. This flag is used in combination with the parameter BOOTABLE = 2 to make the software boot in a special mode
Disables the [About this Game] option that appears in side menu when pressing over the icon in XMB. This flag also removes the needed of storing a LICENSE param_key in the PARAM.SFO, the consequence of removing LICENSE param_key is the size of the PARAM.SFO file is reduced drastically (LICENSE text is huge in comparison with the rest of the file... SFO's without LICENSE are much smaller). Used by games that have their own license and not the sony one (e.g: PCengine & NeoGeo)
Enables Move Controller support for the game. See Move Motion Controller
Note Move Navigation Controller is supported in all games because is a reduced version of DualShock 3 and PlayStation Eye camera is enabled automatically when needed. This ones doesn't have/needs a flagATTRIBUTE flags for bootable content (4th byte)
ATTRIBUTE flags for savedata (1st byte)
Disables the [Copy] option that appears in side menu when pressing over the gamesave icon in XMB. In other words... disables the gamesave export feature. Used only in PS3 Game Saves (CATEGORY: SD). See Game Saves.
Note in PS3 Game Saves the PARAM.SFO is always included in the list of protected files that is stored inside PARAM.PFD, so after removing the copy protection flag in the .SFO is needed to generate a valid .PFD. See PARAM.PFDATTRIBUTE flags for disc subfolders (1st byte)
Used in Discs subfolders (CATEGORY: TR, VR, DP, XR) to activate another subfolder. This secondary subfolder can contain another SFO (or a .SFX) and are loaded in cascade, all the SFO's in the subfolders structures contains an ATTRIBUTE = 1. In other words... the flag simply indicates the presence of items under this path.
ATTRIBUTE flags for patches (3rd byte)
- This list contains a short description of all the ATTRIBUTE flags known, there is no room in this page for explaining in detail all this functions but there are several links to other pages that expands the info, please help completing the identification of all flags (with short descriptions and links to other wiki pages when posible/needed), also try to not add too much speculation and in case of speculation use question marks, for an open discussion, any usefull notes or brainstorming use Discussion page.
BOOTABLE
Specifyes if the content is bootable or not, and the boot mode.
Hexadecimal | Decimal | Binary (flags) |
Feature | |
---|---|---|---|---|
little endian | big endian | |||
00 00 00 00 | 00 00 00 00 | 0 | 00000000 00000000 00000000 00000000 | Not Bootable |
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | Bootable (mode 1) |
02 00 00 00 | 00 00 00 02 | 2 | 00000000 00000000 00000000 00000010 | Bootable (mode 2) |
Not Bootable
- Looks pointless because the SFO's for contents that are not bootable simply doesnt includes the parameter BOOTABLE (like savegames or trophies where BOOTABLE doesnt exists and if you include it manually the system ignores it), but in some specific cases the PARAM.SFO contains the parameter BOOTABLE with a value of 0 (e.g: in SFO's of CATEGORY PP... for PSP transferable games, where the game is not intended to boot on PS3, is only stored temporally in PS3 ready to be transfered to a PSP)
Bootable (mode 1)
- Used in all games that "boots" on PS3 (and all apps that boots on PS3, with the exception of the ones using bootable = 2 explained below)
Bootable (mode 2)
- After 4.00 firmware XMB can identify some bootable contents as "software" by using this flag ("bootable games" and "bootable software" should be considered different based on this flag, or they boots in different modes), is used in combination with the ATTRIBUTE flag 1048576 (in decimal), this flag displays an specific message from game_ext_plugin.rco/english.xml when quitting the software <Text name="msg_need_quit_to_operate_ask">To perform this operation, you must quit [%1]. Do you want to quit the software now?</Text>, and "About this Game" is removed from the option side menu (infobar)
- Note the XMB mesages enabled with the ATTRIBUTE flag are specific for software (not for games), and the data type of BOOTABLE is int32 (flags), when looking at BOOTABLE flags in binary the flags are different (BOOTABLE flag 2 doesnt contains flag 1)
- The use of this flag is not completly known/documented, feel free to experiment and return back to edit wiki with new info
CATEGORY
The next table represents the columns where the content is placed in the XMB and the CATEGORY asociated.
FileSystem Path in device dev_hdd0/game/<TITLE_ID>/ |
XMB Icon | CATEGORY | Since | Generated by | Description and Examples | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Name | ||||||||||||||
PARAM.SFO | AP | App Photo | PlayMemories | |||||||||||
AM | App Music | Qriocity Music Unlimited | ||||||||||||
AV | App Video | Netflix, LoveFilm, Maxdome | ||||||||||||
BV | Broadcast? Video | |||||||||||||
AT | App TV | QOOK TV, Now TV, Torne (TV/Video Services Column hidden when no installed content) | ||||||||||||
WT | Web? TV | 3.70 | Animaxtv, 4oD etc...starts Web Browser from LINK.XML with corresponding online page. | |||||||||||
CB | CELL? BE? | Life with PlayStation, Folding@home | ||||||||||||
AS | App Store ? | 4.46+ ? | PlayStation Now | |||||||||||
HM | Home | PlayStation Home | ||||||||||||
--- | --- | SF | Store Frontend? | PlayStation Store | ||||||||||
HG | HDD Game | 1.00 | Combined with ATTRIBUTE generates "subcategories" e.g: and | |||||||||||
2G | PS2 Game | 1.31 | PS2 Discs installed in internal HDD, only in "backward compatible" PS3's. See: Emulation | |||||||||||
2P | PS2 PSN ? | 3.70 | "PS2 Classics". Re-edited PS2 games released as a .pkg in "PlayStation Store" | |||||||||||
1P | PS1 PSN ? | 1.70 | "PS1 Classics". Re-edited PS1 games released as a .pkg in "PlayStation Store" | |||||||||||
MN | PSP Minis | 3.15 | "PSP Minis". Format inherited from PSP | |||||||||||
PE | PSP Emulator | 3.70 | "PSP Remasters". Re-edited PSP games released as a .pkg in a "Install Disc" | |||||||||||
PP | PSP | Not bootable, but can be copyed to a PSP or PS VITA (? as option suggest it on XMB) | ||||||||||||
GD | Game Data | and | PS3 disc installs, Game updates, Game DLC, Game common user data (e.g: GT5) | |||||||||||
2D | PS2 Data | 1.31 | and | PS2 Emulator Data, DLC for PS2 Disc games (related with CATEGORY 2G). See: Emulation | ||||||||||
C00/ | PARAM.SFO | Used with CATEGORY: HG, and others ? | Demo | |||||||||||
L00/ (up to 05) | PARAM.SFO | Used with CATEGORY: HG, and others ? | Restricted content based in License Area Number | |||||||||||
USRDIR/ | EBOOT.BIN | Used with CATEGORY: All above except 2G and 2D | 1.00 | Main executable | ||||||||||
USRDIR/ | IMAGE.DAT | Used with CATEGORY: 2G and 2D | 1.31 | PS2 Virtual HDD | ||||||||||
DRMDIR/ | PKG_DIGEST.DAT | 2.80 | Installation folder security hashes | |||||||||||
HTMLDIR/ | Empty ? | Example: Torne | ||||||||||||
SHOPDIR/ | ? | Unknown, used in NPJA90001 | ||||||||||||
MANUAL/ | 001.DDS (up to 999) | 4.21 | Game/app manuals made with pictures | |||||||||||
FileSystem Path in device dev_hdd0/home/<userid>/ |
XMB Icon | CATEGORY | Since | Generated by | Description and Examples | |||||||||
Name | ||||||||||||||
savedata/ | SAVEDIR | PARAM.SFO | SD | Save Data | 1.00 | See: Game Saves - PS3 | ||||||||
PARAM.PFD | ||||||||||||||
minis_savedata/ | SAVEDIR | PARAM.SFO | MS | Memory Stick? | 3.15 | See: Game Saves - Minis | ||||||||
MS | Memory Stick? | See: Game Saves - PSP Remaster | ||||||||||||
psp2_backup/ | etc... | No | 4.00 | Transfer | PSvita contents. Not bootable, import/export to PSvita |
- Notes
- PS1 Game Saves and PS2 Game Saves are stored in a Virtual Memory Card (<Virtual MemCard>.VM1 for PS1 and <Virtual MemCard>.VM2 for PS2) without a PARAM.SFO
- PS Store icon on XMB Video and Game columns might only appear according to your settings
Template:PS3 Game Disc Structure
CONTENT_ID
Content Identificator for Gamepurchase feature. Used in games that runs in "demo mode" and can be purchased (unlocked) by pressing triangle over its icon in XMB.
The format is: XXYYYY-NP_COMMUNICATION_ID-LICENSE_ID where:
- XX is ?
- YYYY is ?
- - is a separator character (mandatory)
- NP_COMMUNICATION_ID is explained in NP_COMMUNICATION_ID
- - is a separator character (mandatory)
- LICENSE_ID is ?
This games has a minimal folder structure with two PARAM.SFO like this:
NPxx12345 |--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Trial) ... & others |--- USRDIR | |--- EBOOT.BIN |--- C00 |--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Full) ... & others
DETAIL
Text lines displayed under SUBTITLE text. 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.
The special byte "0A" displaces the text to the next line (a linefeed), this can be used to create long texts composed by several horizontall lines.
SAVEDATA_DETAIL (for minis savedata)
Used to store texts generated by the game, the format s the same than DETAIL
GAMEDATA_ID
Found in explore_plugin (checked at: /app_home/PS3_GAME/PARAM.SFO), and XMB databases (accessed as Game:Game.gameDataID)
ITEM_PRIORITY
Used to order the contents vertically in XMB columns, contents with any value of ITEM_PRIORITY are displayed at top of XMB column, and after them all the other contents without ITEM_PRIORITY
Contents with bigger values in ITEM_PRIORITY are placed at top of the list, the scale is from 0x00000000 (at bottom) up to 0xFFFFFFFF (at top)
LANG
Language used when the "trophy config file" TROPCONF.SFM was installed. Template:XMB languages
LICENSE
License text of the content, hidden by the system in actual firmwares
NP_COMMUNICATION_ID
Network Platform Communication ID. Also is the name of the folder containing the trophy installer: TROPHY.TRP
The format is 4 letters + 5 numbers with optionally a subid (usually 0) : NPWRyyyyy_zz (e.g. NPWR00001_00)
NPCOMMID (for trophies)
Same than NP_COMMUNICATION_ID but with a param_len of 12 bytes
PADDING
Unknown
PARAMS
- Intended to store:
- Counters (number of times the .SFO was updated, etc...)
- User/console ID's
- Some more unknown and reserved areas. See Discussion page
Usage | Offset | length | Example | Description | Notes |
---|---|---|---|---|---|
features | 0x00 | 1 (0x1) | 01 | Unknown | values found: always 1 |
0x01 | 1 (0x1) | 08 | PS3 SaveData features ? | Some kind of "savedata feature flags" in binary (like the type of savedata system screen, its visibility, etc...). Values found: 1,2,3,5,7,8 or "PARAMS version" with the added value from the byte before (v1.8 in this example) | |
0x02 | 1 (0x1) | 01 | Unknown | values found: 1,2 | |
0x03 | 1 (0x1) | 03 | Cummulated counter slot nº | Position of a "cummulated counter taken from another SFO when they was merged". values found: 2,3 | |
0x04 | 1 (0x1) | 03 | SFO Updates counter slot nº | Position of the "number of times the SFO was updated". Values found: 2,3 | |
0x05 | 3 (0x3) | zero filled | Reserved | Not used yet | |
counters | 0x08 | 4 (0x4) | 00000000 | Counter slot 1 ? | values found: always 0 |
0x0C | 4 (0x4) | E1010000 | Counter slot 2 | In most old games used as a SFO Updates counter In most new games used as a Cummulated counter (e.g: after completing the game a counter from the SAVE can be moved to the PROFILE) | |
0x10 | 4 (0x4) | CF130000 | Counter slot 3 | In most old games not used In most new games used as a SFO Updates counter (so the previous counter is available to store other data) | |
0x14 | 4 (0x4) | 01000000 | Counter slot 4 ? | values found: always 1 | |
ID's | 0x18 | 4 (0x4) | 01000000 | User ID | Local User identifier (same name used to store the user files in dev_hdd0/home/<User ID>) |
0x1C | 16 (0x10) | FEDCBA9876543210FEDCBA9876543210 | PSID | Local PS3 identifier, aka Open PSID, or offline PSID | |
0x2C | 4 (0x4) | 01000000 | User ID | Local User identifier (same name used to store the user files in dev_hdd0/home/<User ID>) | |
0x30 | 16 (0x10) | 0123456789ABCDEF0123456789ABCDEF | ACCOUNT_ID | Network User identifier (PSN account) | |
0x40 | 960 (0x3C0) | zero filled | Reserved | Not used yet |
- Notes:
- The SFO parameter ACCOUNT_ID is the same than the ACCOUNT_ID inside PARAMS. When the parameters PARAMS & ACCOUNT_ID are present in the SFO the string can be found twice in the file (always happens in savegames). When the user has not been registered an account in PSN its ACCOUNT_ID is filled with zeroes
- When the SFO is generated the user/console data is taken from XRegistry.sys
- The system displays the time when the savedata was updated by reading the timestamp of PARAM.SFO
- Speculation:
- In the case one of the first bytes at the begining is used to store flags (second byte mostly because is the one that changes most in the samples found) there is a limited number of firmware features related with savegames that needs to work in a different mode based on a flag (this flags should be using as settings of the gamesave), some posible features enabled/disabled by this flags could be:
- Times the savedata was exported/imported to a external device (counters)
- Trophy disabled (not posible to unlock trophies from this gamesave, because was imported from external device and/or belongs to other user/console)
- Fake savedata owner (feature available in debugs)
- load trophy data when game boots (some games displays the list of trophies inside a game screen)
- savedata system screen replaced/hidden (some games uses their own savedata screen instead of the system screens, in this case the system needs to disable the default screens or make it invisible, like in tomb raider)
- Another option is the first bytes at the begining are configuring the internal structure of the PARAMS area, by defining the counters types or his positions
- An another option is the first bytes are simply the version of the savegame (1.1, 1.2, 1.3, and so on...) this "gamesave versions" could be defining some requirements of the whole PARAM.SFO structure, or/and the security used by the related PARAM.PFD and other secured files in the gamesave
- In the case one of the first bytes at the begining is used to store flags (second byte mostly because is the one that changes most in the samples found) there is a limited number of firmware features related with savegames that needs to work in a different mode based on a flag (this flags should be using as settings of the gamesave), some posible features enabled/disabled by this flags could be:
PARAMS2
Unknown, usually filled with zeroes
PARENTAL_LEVEL
It is a scale to rate the content for the different users based in user profile settings and international rating systems as: PEGI, ESRB, CERO, etc...
The higher the level the higher the restriction e.g:
- A game rated 11 will be displayed with an "locked" icon in XMB and requires the "unlock PIN" for a user with level 1.
- A game rated 1 can be played by all levels, from 1 to 11.
- Level 0 is disabled.
Hexadecimal (little endian) |
Hexadecimal (big endian) |
Decimal | Rating |
---|---|---|---|
00 00 00 00 | 00 00 00 00 | 0 | Disabled |
01 00 00 00 | 00 00 00 01 | 1 | Lower restriction |
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 | Higher restriction |
PARENTAL_LEVEL_x (by license area)
Used to restrict the content to a specific License Area. See Regions
The "x" at the end of the name PARENTAL_LEVEL_x defines the License Area wich is one of this list.
parameter | License Area Name | License Area Number | Regions |
---|---|---|---|
PARENTAL_LEVEL_A | SCEA | 01 | US, Canada (North America), Mexico, Central America, South America |
PARENTAL_LEVEL_C | SCH | 05 | China |
PARENTAL_LEVEL_E | SCEE | 02 | Europe/Middle East/Africa, U.K./Ireland, Australia/New Zealand (Oceania), Russia, Ukraine, India, Central Asia |
PARENTAL_LEVEL_H | SCEH | 03 | Singapore/Malaysia (Southeast Asia), Taiwan, Hong Kong |
PARENTAL_LEVEL_J | SCEJ | 00 | Japan |
PARENTAL_LEVEL_K | SCEK | 04 | Korea (South Korea) |
- All this parameters are used in group, ordered alphabetically, and preceded by a "standard" PARENTAL_LEVEL with the value 00000000 (disabled)
- Valid values are the same than PARENTAL_LEVEL (an scale from 1 to 11) with the only difference that the value for disable is FFFFFFFF
---example string--- 00000000 05000000 0A000000 01000000 FFFFFFFF 06000000 0B000000 ---example explain--- PARENTAL_LEVEL = 00000000 (disabled) PARENTAL_LEVEL_A = 05000000 (level 5) PARENTAL_LEVEL_C = 0A000000 (level 10) PARENTAL_LEVEL_E = 01000000 (level 1) PARENTAL_LEVEL_H = FFFFFFFF (disabled) PARENTAL_LEVEL_J = 06000000 (level 6) PARENTAL_LEVEL_K = 0B000000 (level 11)
PARENTALLEVEL (for trophies and PS1 games)
Same than PARENTAL_LEVEL
PATCH_FILE
Found in explore_plugin (checked at: /app_home/PS3_GAME/PARAM.SFO), and XMB databases (accessed as Game:Game.patchFile)
PS3_SYSTEM_VER
Minimum PS3 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, e.g: 03.4100.
REGION_DENY
Regions restrictions for the content, added in firmware 3.30
There are 12 valid Regions, each region has a position assigned in the binary string, marked with an "1" when the region is prohibited, or a "0". when is allowed.
Hexadecimal (little endian) |
Hexadecimal (big endian) |
Binary (flags) |
Region Nº | Target Territory | Notes | |
---|---|---|---|---|---|---|
FE FF FF FF | FF FF FF FE | 11111111 11111111 11111111 11111110 | 0 | Japan | ||
FD FF FF FF | FF FF FF FD | 11111111 11111111 11111111 11111101 | 1 | US, Canada (North America) | Used in Netflix | |
FB FF FF FF | FF FF FF FB | 11111111 11111111 11111111 11111011 | 2 | Europe / Middle East / Africa | ||
F7 FF FF FF | FF FF FF F7 | 11111111 11111111 11111111 11110111 | 3 | Korea (South Korea) | ||
EF FF FF FF | FF FF FF EF | 11111111 11111111 11111111 11101111 | 4 | U.K. / Ireland | ||
DF FF FF FF | FF FF FF DF | 11111111 11111111 11111111 11011111 | 5 | Mexico, Central America, South America | ||
BF FF FF FF | FF FF FF BF | 11111111 11111111 11111111 10111111 | 6 | Australia / New Zealand (Oceania) | ||
7F FF FF FF | FF FF FF 7F | 11111111 11111111 11111111 01111111 | 7 | Singapore / Malaysia (Southeast Asia) | ||
FF FE FF FF | FF FF FE FF | 11111111 11111111 11111110 11111111 | 8 | Taiwan | ||
FF FD FF FF | FF FF FD FF | 11111111 11111111 11111101 11111111 | 9 | Russia, Ukraine, India, Central Asia | ||
FF FB FF FF | FF FF FB FF | 11111111 11111111 11111011 11111111 | 10 | China | ||
FF F7 FF FF | FF FF F7 FF | 11111111 11111111 11110111 11111111 | 11 | Hong Kong | ||
Examples | ||||||
01 F0 FF FF | FF FF F0 01 | 11111111 11111111 11110000 00000001 | From 1 to 11 | [Photo] of a PS3 DEX with Allowed Region=1-11 (region 0 not allowed) |
RESOLUTION
TV video modes supported by the content.
When there are several flags activated the PS3 will use the one with higher quality supported by the TV.
Hexadecimal (little endian) |
Hexadecimal (big endian) |
Decimal | Binary (flags) |
Feature (notes) |
---|---|---|---|---|
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | 480 (4:3) |
02 00 00 00 | 00 00 00 02 | 2 | 00000000 00000000 00000000 00000010 | 576 (4:3) |
04 00 00 00 | 00 00 00 04 | 4 | 00000000 00000000 00000000 00000100 | 720 (16:9) |
08 00 00 00 | 00 00 00 08 | 8 | 00000000 00000000 00000000 00001000 | 1080 (16:9) |
10 00 00 00 | 00 00 00 10 | 16 | 00000000 00000000 00000000 00010000 | 480 (16:9) |
20 00 00 00 | 00 00 00 20 | 32 | 00000000 00000000 00000000 00100000 | 576 (16:9) |
Examples | ||||
3F 00 00 00 | 00 00 00 3F | 63 | 00000000 00000000 00000000 00111111 | All video modes supported |
- Tests
- PS2 games remastered in PS3 format (not "ps2 classics") like "resident evil 4 HD" (CATEGORY=HG and TITLE_ID=NPEB00342) doesnt supports 1080 mode by default (or at least this one). 1080 mode in combination with SOUND_FORMAT (all SOUND_FORMAT modes enabled) the RESOLUTION flags are readed but the PS3 crashes
- Note the resolution for originall PS1 disc games can vary (See: Emulation Resolution). The RESOLUTION flags used in PARAM.SFO's of "PS1 Classics Game" from PSN seems to be specific and not fixed sizes (e.g: 01 00 00 00). This will need another table if more are found
- There are special RESOLUTION values for PS1 and PS2 Classics, and PSP Remasters ?. The resolution for original PS1 disc games can vary (See: Emulation Resolution). The RESOLUTION flags used in PARAM.SFO's of "PS1 Classics Game" from PSN seems to be specific (e.g: 01 00 00 00). This will need another table if more are found
SAVEDATA_DIRECTORY
Name of the folder where the game stores its SaveData. The format is: TITLE_IDxxxxx (9 bytes + 22 bytes max), e.g;: BLUS00001_savedata_01 where:
- TITLE_ID Identifier of the content. Explained in TITLE_ID.
- xxxxx Are texts (with variable lenght) to difference all the SaveDatas generated from the same game by the same user.
SAVEDATA_FILE_LIST
Contains a list with an space reserved for 99 entries, each entry 32 bytes long, for a total size of 3168 bytes (99 * 32 = 3168)
Entries refer to other files from the folder, example of one entry:
0x0550 53 45 43 55 52 45 2E 42 49 4E 00 00 00 72 93 A5 | SECURE.BIN...... | 0x0560 8B 8A D4 FA 8E B8 2B 3F A6 61 BC ED A6 00 00 00 | .z....+?.a...... |
53 45 43 55 52 45 2E 42 49 4E <------------------------ file name 72 93 A5 8B 8A D4 FA 8E B8 2B 3F A6 61 BC ED A6 <----- file hash ??? (changes when the file is updated)
SAVEDATA_LIST_PARAM
In most of the savegames (when the game doesnt uses it) is filled with zeroes with a param_len of 1 byte (the null termination)
This area is available for the game to store "any" data, the purposes of this data is to avoid tampering with the files generated by the game, the usage of this area is optional for the game developers and can be considered a more deep security layer under the PARAM.PFD layer
Because the data is generated and recovered by the game, its type or usage can be different for each game, the next table contains some valid examples found:
TITLE_ID | Title | SAVEDATA_LIST_PARAM | Notes | |
---|---|---|---|---|
Example | Method | |||
BCAS20108, BCES00569, BCUS98114 | Gran turismo 5 | GAMEDAT | Copypasted ? | |
BLES01739, BLJS10228, BLUS31052 | Dead Island Riptide | IIBJFMO, ALFJASP, HMDASLM, PTRONAS | Copypasted + scrambled ? | |
BLES00153, BLES00171, BLES00172, BLUS30055 | The Orange Box | 141312 | Folder Size in sectors | See the example in Discussion page |
BCES01007 | Killzone 3 | CONFIG | Copypasted ? | |
BLES00776 | Venetica | 3-47755 | ? | |
BLES00839 | Prince of Persia, forgotten sands | 1ACBKM3, 1ACBKM6 | ? | |
BLES00919 | Majin and the forsaken kindgom | LP | ? | |
BLES01060 | Crysis 2 | 0000000 | ? | |
BLES01081 | Yakuza 4 | SYSTEM, CLEAR | ? | |
BLES01306 | Tintin | LYN | ? | |
BLES01310 | Hunted: The Demon's Forge | UNKNOWN | ? | |
NPEB00347 | Dead Space Extraction | INGAME | ? |
More info: http://www.ps3hax.net/showthread.php?t=60459
SAVEDATA_PARAMS
Example
Offset | length | Example | Description | Notes |
---|---|---|---|---|
0x11B0 | 16 (0x10) | 41000000000000000000000000000000 | Unknown | allways the same value found ("A" in utf8) |
0x11C0 | 16 (0x10) | FEDCBA9876543210FEDCBA9876543210 | Unknown | changes when the savedata is updated |
0x11D0 | 16 (0x10) | 0123456789ABCDEF0123456789ABCDEF | Unknown | changes when the savedata is updated |
0x11E0 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x11F0 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x1200 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x1210 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x1220 | 16 (0x10) | ABCDEF0123456789ABCDEF0123456789 | Unknown | changes when the savedata is updated |
SOUND_FORMAT
Sound modes supported by the content.
Hexadecimal (little endian) |
Hexadecimal (big endian) |
Decimal | Binary (flags) |
Feature (notes) |
Flag Nº (flag required) |
---|---|---|---|---|---|
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | [LPCM] 2.0 | 01 |
02 00 00 00 | 00 00 00 02 | 2 | 00000000 00000000 00000000 00000010 | 02 | |
04 00 00 00 | 00 00 00 04 | 4 | 00000000 00000000 00000000 00000100 | [LPCM] 5.1 | 03 |
10 00 00 00 | 00 00 00 10 | 16 | 00000000 00000000 00000000 00010000 | [LPCM] 7.1 | 05 |
00 01 00 00 | 00 00 01 00 | 256 | 00000000 00000000 00000001 00000000 | [Dolby Digital] 5.1 | 09 (02) |
00 02 00 00 | 00 00 02 00 | 512 | 00000000 00000000 00000010 00000000 | [Digital Theater Systems (DTS)] 5.1 | 10 (02) |
Examples | |||||
15 00 00 00 | 00 00 00 15 | 21 | 00000000 00000000 00000000 00010101 | All LPCM modes | 1+3+5 |
02 01 00 00 | 00 00 01 02 | 258 | 00000000 00000000 00000001 00000010 | Only Dolby Digital 5.1 | 2+9 |
17 01 00 00 | 00 00 01 17 | 279 | 00000000 00000000 00000001 00010111 | All LPCM modes + Dolby Digital 5.1 | 1+2+3+5+9 |
02 02 00 00 | 00 00 02 02 | 514 | 00000000 00000000 00000010 00000010 | Only Digital Theater Systems (DTS) 5.1 | 2+10 |
17 03 00 00 | 00 00 03 17 | 791 | 00000000 00000000 00000011 00010111 | All sound modes | 1+2+3+5+9+10 |
- Tests
- PS2 games remastered in PS3 format (not "ps2 classics") like "resident evil 4 HD" (CATEGORY=HG and TITLE_ID=NPEB00342) only supports LPCM 2.0 by default. In the first tests was impossible to activate other sound modes (the flags are ignored). In combination with RESOLUTION (all RESOLUTION modes enabled) the SOUND_FORMAT flags are readed but the PS3 crashes
- Other SOUND_FORMAT values availables in non retail (Debug, AV/Test, etc...) consoles ?
SOURCE
Unknown, usually filled with zeroes
SUB_TITLE
The line of text displayed under TITLE text, used only in SaveData to store short texts from the game like your player name, your play time, photo used 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
SAVEDATA_TITLE (for minis savedata)
Subtitle of the Save, the format is the same than SUBTITLE
TARGET_APP_VER
Target application version for incremental patches. Patches containing TARGET_APP_VER can be installed over the game with the same APP_VER.
The format is XX.YY where "XX" and "YY" are numbers, and the point "." is included in the string, e.g: 01.00
TITLE
Default "title of the game" for all languages. The text is displayed right to the ICON0.PNG.
The special byte "0A" displaces the text to the next line (a linefeed), this can be used to create long texts composed by several horizontall lines, the maximun number of horizontal text lines allowed for the TITLE is 3 (in other words... you can use the "linefeed" byte 2 times)
TITLE_xx (for localized languages)
Same than TITLE but for localized languages.
An .SFO can contain several TITLE_xx where xx is a number for a regional code.
The "default" TITLE is always present when other "localized" TITLE_xx are used.
TITLE_ID
Identifier of the content, in the format ABCD12345. Must be the same ID inside the Makefile when compiling the .SELF, or/and when creating the .PKG (also known as Productcode)
Media (A) |
Rights (B) |
Region (C) |
Type (D) |
?? (12) |
License Number (345) |
---|---|---|---|---|---|
B=PS3 Bluray P=PS4 Bluray S=PS1, PS2, PS3 CD/DVD U=PSP UMD V=PSvita Card X=PS3 Bluray + Extras (PSvita crossbuy) |
C=Copyrighted by sony L=Licensed to sony |
A=Asia C=China E=Europe H=Hong Kong J=Japan K=Korea P=Japan (PS1/PS2) U=USA |
B=Peripheral Software C=System Firmware D=Demo M=Malayan Release S=Retail release T=(closed) Betas [Pre-Production Discs] [1] V=Multi Region PS3 CS disc X=Install disc? (Demos, Store Videos) Z=Region locked PS3 CS disc |
?? | From 001 to 999 (in chronological order) |
PE=PS1 and PS2 CS disc for Europe, Australia & Gulf area PT=PS1 and PS2 CS disc for Japan & Asia PU=PS1 and PS2 CS disc for USA & Canada |
For more detailed info see Template talk:TITLE ID for Physical Media
Network Environment (AB) |
Region (C) |
Type (D) |
?? (12) |
License Number (345) | |
---|---|---|---|---|---|
NP=Retail | A=Asia E=Europe H=Hong Kong J=Japan K=Korea U=USA I=Internal ? (Sony) X=Firmware/SDK Sample |
A=First Party PS3 (Demo/Retail) B=Licensed PS3 (Demo/Retail) C=First Party PS2 Classic (Demo/Retail) D=Licensed PS2 Classic (Demo/Retail) E=Licensed PS1 Classic (PAL) (Demo/Retail) F=First Party PS1 Classic (PAL) (Demo/Retail) G=First Party PSP (Demo/Retail) H=Licensed PSP (Demo/Retail) I=First Party PS1 Classic (NTSC) (Demo/Retail) J=Licensed PS1 Classic (NTSC) (Demo/Retail) K=First Party Game related Content L=Licensed Game related Content / Video M=Music N=Game Soundtracks O=Other P=PS3 App Q=PS3 Theme / Avatar R=PS3 Theme S=System T=? U=? V=? W=First Party PSP Remasters X=First Party PSP Minis Y=Third Party PSP Remasters Z=Third Party PSP minis |
?? | From 001 to 999 (in chronological order) |
- Other TITLE_ID's. See Discussion page
- TEST12345 (in savedata). When mounting a disc in a backup manager using the option "direct boot", the mounted disc use the TITLE_ID from backup manager (TITLE_ID from backup manager has not been unloaded properly and the disc adopts it). The savedata of this game will use TEST12345. When several different games are mounted and "direct launched", the savedata will be corrupted/invalid (because the overwriting of PARAM.SFO). TEST12345 seems to a common TITLE_ID used in all backup managers, the name probably is derived from official tools or internal firmware functions (Described as tips with ps3.gen.exe:"setting the TITLE_ID to TEST-XXXXX or disc version to "00.00" enable the program to build the disc image even when errors are found).
- TEST***** All the disc images generated for debug PS3's in the development stages of the game
TITLEID0xx (for trophies with localized languages)
SFO's for trophies contains a full list of 16 TITLEID0xx for all languages where xx is a number for a language code.
All them can contain data, or only the default TITLEID000. The ones without data are marked with a Data_Used_Size = 0 bytes
The text contained inside default TITLEID000 is the same than TITLE_ID
VERSION
param_max_len: 0x8 (8 bytes)
param_len: 0x6 (6 bytes)... or 0x3 (3 bytes) when used in trophy
Disc revision, or Package revision. The number increases when the content is re-released or re-packaged for whatever reason that doesn't affect the main executable (e.g. when a disc game reaches platinum sales, or "game of the year edition" including extra contents).
When the main executable is updated, the APP_VER increases (this can be done with patches)... but the VERSION of the patch (or the re-released disc) returns to 01.00.
Additionally this gives the possibility to release different versions of the same patch (used when the original patch contains a bug, needs to be replaced, and is not cumulative)
The format is XX.YY where "XX" and "YY" are numbers, and the point "." is included in the string, e.g: 01.00.
- When used in a SFO for a trophy it has a param_len of 3 bytes, with the format: X.Y e.g: 1.0
XMB_APPS
Found in explore_plugin (checked at: /app_home/PS3_GAME/PARAM.SFO), and XMB databases (accessed as Game:Game.xmbApps)
Hexadecimal | Decimal | Binary (flags) |
Feature (notes) | |
---|---|---|---|---|
little endian | big endian | |||
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | ? |
02 00 00 00 | 00 00 00 02 | 2 | 00000000 00000000 00000000 00000010 | ? |
04 00 00 00 | 00 00 00 04 | 4 | 00000000 00000000 00000000 00000100 | ? |
08 00 00 00 | 00 00 00 08 | 8 | 00000000 00000000 00000000 00001000 | ? |
10 00 00 00 | 00 00 00 10 | 16 | 00000000 00000000 00000000 00010000 | ? |
20 00 00 00 | 00 00 00 20 | 32 | 00000000 00000000 00000000 00100000 | ? |
40 00 00 00 | 00 00 00 40 | 64 | 00000000 00000000 00000000 01000000 | ? |
80 00 00 00 | 00 00 00 80 | 128 | 00000000 00000000 00000000 10000000 | ? |
Etc... |
Examples
Blu-Ray disc structure details
Template:PS3 Game Disc Structure
These are "fake Blu-Ray discs" with the minimal values inside SFO's/SFX's needed for the structure to work, and the needed HYBRID_FLAG's inside the main PS3_DISC.SFB. All the files are 100% hand made from scratch and tested.
Game discs in folder PS3_GAME
The basic structure of a game disc.
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 This is the part of a Blue-Ray movie structure related with the PS3 system. Described as "hybrid disc" when contains a game+movie e.g: Metal Gear Solid HD Collection (BLUS30847)
0MOV00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (v), TITLE_ID (blank) |--- AACS | |--- DUPLICATE (2.cer 2.tbl 1.lst 1.cc1 3.inf) | |--- (2.cer 2.tbl 1.lst 1.cc1 3.inf) |--- BDMV | |--- AUXDATA | | |--- sound.bdmv | |--- BACKUP | | |--- CLIPINF | | | |--- (11.clpi) | | |--- PLAYLIST | | | |--- (6.mpls) | | |--- index.bdmv | | |--- MovieObject.bdmv | |--- CLIPINF | | |--- (11.clpi) | |--- META | | |--- DL | | |--- bdmt_eng.xml | | |--- thumb_L.jpg | | |--- thumb_S.jpg | |--- PLAYLIST | | |--- (6.mpls) | |--- STREAM | | |--- (11.m2ts) | |--- index.bdmv | |--- MovieObject.bdmv |--- CERTIFICATE |--- PS3_VPRM |--- PARAM.SFO <--- CATEGORY (DM)
Game discs in folder PS3_CONTENT
Themes folder is mounted as a "secondary icon" under the "main game icon". Doesn't need/admit an SFO/SFX, the icon contained in the theme is resized and displayed inside a bubble, also the TITLE of the Theme is used for the content.
Video folder is mounted on video column. Videos can not be copied to the internal or external storage.
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
Can be considered an "expansion" of the basic blu-ray structure of a game disc, activated by the flag 00000200 in the ATTRIBUTE of the PARAM.SFO inside PS3_GAME. Packages are displayed in subfolders inside bubbles with its icons resized.
When the packages are installed, the file PARAM.SFO from PKGDIR is renamed to DISC.SFO and copyed inside the installation folder.
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_GAME/INSDIR Can be considered an expansion of the basic blu-ray game disc structure, activated by default with the "g" HYBRID_FLAG from PS3_DISC.SFB
The presence of INSDIR forces a mandatory installation (warning screen with "Yes" or "No", if selecting "No" the game doesnt boots) performed in main XMB (before starting the game). When the installation is completed the game boots
Inside game_ext_plugin.rco/english.xml <Text name="msg_game_cannot_start_wo_install_need_area_install_ask">This game cannot be started unless it is installed on the system storage. To install on the system storage you must create a game partition of %1. Do you want to start installing?</Text>
Used for "game patches" and "game expansion packs". The PARAM.SFO inside "INSDIR" contains the "APP_VER" of the bigger patch of the folder. Note that "download content" packages doesnt contains "APP_VER" so its installation doesnt updates the main game. For this reason "APP_VER" is only related with patches. Other types of PKG can be installed but the main game will reload the message above because it was expecting to have a game patch.
0INS00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0INS00001) |--- PS3_GAME |--- PARAM.SFO <--- CATEGORY (DG) |--- INSDIR |--- PARAM.SFO <--- APP_VER (01.02), CATEGORY (AR) |--- DATA000.PKG |--- DATA001.PKG
Game discs in folder PS3_EXTRA Icon sizes is the same used in "PStore news" menu ([big squares of 486x405 pixels]). see: Content Information Files
Similar as PKGDIR, the file PARAM.SFO from PKGDIR (seems typo error) is renamed to DISC.SFO.
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
dev_bdvd/PS3_GM01/ is a folder at the same level than PS3_GAME, is used for multiboot game discs (the only disc structure that supports direct multiboot). Each eboot is mounted using its own icon. This discs uses speciall LIC.DAT files, see: LIC.DAT page
The two numbers at the end of the name PS3_GM01 looks like a counter, but only PS3_GM01 is supported (other numbers are not supported... yet)
You can download this structures to experiment with them or to look how SFO's SFX's are built ---> [Blu-Ray fake discs by sandungas]
- Remove-insert again disc might be required to make structures appears.
- DISC.SFO seems to force the user to start the installed game with the original disc with this message on XMB:
"to play this game, you must insert the following disc. Insert the disc, and then start the game again. (8001003E) Install disc"
This can/should be resolved by launching BD emulator, removing the disc.sfo file, or using Lxx folders. See Discussion page
Tips & Tricks
This section is to add more extended explains about features that cant been easily clasifyed inside other sections
Replacing a PARAM.SFO manually
When replacing a PARAM.SFO manually in the internall HDD (using a file manager, FTP, etc...) the system ignores it. This happens because the system is storing a "duplicated" copy of the old one.
To be sure that the new PARAM.SFO has been loaded you can change the TITLE (Paid attention also to TITLE_xx) , this way you can see the new name displayed in XMB, is a good idea to use something that identifyes the change as "My test 01".
- The most convenient and quick way to "refresh" the XMB is as simple as booting the game one time (by pressing X button over its icon)... inside the game press "PS" button and exit with "quit"... then return to the XMB and the new PARAM.SFO has been loaded. So in resume... the XMB is refreshed when you boot it for first time so you need to boot it one time and quit to load the new PARAM.SFO.
- The other solution is by using the option "rebuild database" from the recovery menu (this re-indexes all the files in the internall HDD), is long but can fix rare problems. This can be used when the PARAM.SFO you are playing with is not BOOTABLE (you cant boot it to "refresh" the XMB)
When replacing a PARAM.SFO manually in a Game Disc (to be loaded later by a backup manager) sometimes the system ignores it. This happens because the system is storing a "duplicated" copy of the old disc structure included its PARAM.SFO (iirc). The trick to "refresh the XMB" is again by booting the game (pressing X in the main icon)... for this to work is needed to have a EBOOT.BIN in the main path inside USRDIR folder (e.g: the EBOOT.BIN from the "move demo disc" just plays a video in .MP4 and is tiny)
Creating a frankenstein PARAM.SFO
The first step is to go to the parameters table to look wich param_key's are mandatory and wich ones can be removed or zeroed (note this table has a lot of YES that probably are OPT, is just that this ones has not been verifyed or found)
- When you generate a non proper file you can have a nice icon of "corrupted data", but in some cases the game boots normally. In other cases when adding or removing param_key's the file is "partially" corrupted because there is 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 missing). Try to boot from app_home if needed.
- When adding "non-standard" param_key's to a SFO for an specific type of content (that only admits a few ones) the SFO is loaded without problems but firmware ignores them because are "not-expected" (e.g. when adding SUB_TITLE to a SFO for category "HG").
- The minimal structure tested (and working) for a homebrew can be copied/downloaded at the bottom of the page, its not "standard" but the PS3 doesn't complain, and probably can be reduced even more.
- If Error 80028F08:
can be resolved by pressing triangle one time and launch the game from start or back from the ICON.
Creating Discs
The "fake blu-ray" structures that can be downloaded from this page uses two "dirty tricks" that was usefull to identify the critic values needed to work, but can be a bit confusing to replicate them.
The first one is the removing of TITLE and TITLE_ID from most of the SFO's, this can generate a strange behaviour mostly for the primary icon. The second one is the ATTRIBUTE flag to hide the main icon. The other factor involved in this weird behaviours are the "backup managers" that are hardcoded to look for files and format in some specific structures.
When playing with this fake blu-rays use a USB pendrive (is faster to connect/disconnect to ps3/pc) with a "GAMEZ" folder in the root, and remember to "dismount" the game before disconecting the USB to avoid the XMB to go crazy, also remember the XMB sometimes keeps a backup copy of the old PARAM.SFO
For install packages (max: 100, FW min: 1.80) you can use PS3_EXTRA or PKGDIR both will work but are displayed different
For themes ( max: 200, FW min: 2.50) and videos (max: 200, FW min: 2.40) use PS3_EXTRA or PS3_CONTENT remember themes includes its own icon and title, videos are mounted in video colum when using PS3_CONTENT pretty nice for chapters of series, video manuals, etc...
(Max items & FW min are theory, not tested)
For patches use INSDIR, its installation is more automated
Creating Patches
The type of patch is defined by its APP_VER, TARGET_APP_VER, and VERSION. There is no way to update an installed content without APP_VER The standard way to install a patch is by using the same TITLE_ID of the previous release and a bigger APP_VER, when the patch is installed its PARAM.SFO replaces the old one, consequently its APP_VER increases
But there are some tricks related with this patching system that can be used to add files to the install folder without keeping this standard:
- Using a "blank" APP_VER
This is as easy as filling the value for APP_VER in the patch with zeroes, the undesired effect is the app will have no version. The benefit is this will work for installing cummulating files as "themes", "roms" etc...
- Using the same APP_VER and TARGET_APP_VER in the patch and in the app
This will replace the PARAM.SFO by other with the same values, so is similar than the previous one, but keeping its version. Additionally this assures you that the files are compatibles with this version of the app (e.g: a theme that only works with a specific version)
Tools, manuals and external links
Sorry if im missing some link, several things of this page was copy-pasted months ago by googling in random forums.
- Tools
SFO_tools_-_linux-64bit-compiles.rar (23.61 KB)
https://github.com/an0nym0u5/PSL1GHT/commit/75013299710d2bde224e2052284461a665a071bf
SFO Test(217.99KB) Deroad SFO test homebrew ( really useful for fast test, can boot under X category so it refresh the SFO and avoid stuck SFO and games, XMB in game is not "visible")
SFO Test (113.69KB) resigned for cfw 4.21 & repacked with different id (SFOT00001) for convenience (and not overwrite 3.55 version)
[PkgView] (by ifcaro): The fastest, lighter, and intuitive PKG extractor ever. Very usefull to extract individual files or to take a look inside the PKG without extracting
[2] SFO PS3 reader By Matthieu Milan
- Sources and links
http://www.ps3hax.net/showthread.php?t=28704
http://ps3dev.wikispaces.com/PARAM.SFO
https://github.com/ps3dev/PSL1GHT/blob/master/tools/ps3py/sfo.py (old way) https://github.com/an0nym0u5/PSL1GHT/tree/master/tools/make_sfo (new/better way)
http://ps3tutorials.wikispaces.com/Edit+the+sfo.xml+Tutorial
http://mc.pp.se/psp/psf.xhtml (SFO parameters used in PSP)
- Examples
A little collection of SFO's ordered by categories http://www.sendspace.com/file/oy270g
Just a collection of PARAM (.bin .pfd .sfo .tpf) files: http://www.mirrorcreator.com/files/0OAXGOHN/PARAM.rar_links
CATEGORY "2P"(PSN Converted PS2 game/saves) SFO examples http://dl.dropbox.com/u/60710927/XMBMPLUS/DEVELOPMENT_SOURCES/PS2_GAME_SFO/PS2_GAME_SFO.rar. There are three files, one SFO file taken from the PS2 Game directory and two SFO files taken from two different saves generated by that game.
|