Talk:PlayStation 3 Theme (P3T)

From PS3 Developer wiki
Jump to: navigation, search


Standarizing "theme format" names[edit]

The standarization of theme names used in the front page can be polemic and initially confusing, but after some brainstorming i realized we need to keep the sony standards naming and at the same time think in another way to name the different methods used with animated themes, and here is where the confussion starts because "the scene" has been using names that are limited in long term for his possible derivations e.g: "slideshow" "pro slideshow" "dynamic pro slideshow", etc... (big mention here to glowball for his experiments, cheers)

The point is if you take a "dynamic pro slideshow" as base and add to it a new 3d sphere + more semitransparent layers + etc + etc this is a "dynamic pro slideshow multilayer with a 3d object, etc..." ?... well, it sounds supercool (ironic) for a resume, but not even this long name defines how has been created, to make a list we need the "method" or "technique" used.

The big difference (that keeps the standard naming) is static doesnt use an script.js, and dynamic does... we will have problems to give a name to the "methods" but i think this way to focus is better, any idea or suggestion is welcome --Sandungas 11:01, 14 February 2013 (MSK)

Backgrounds linked to clock time[edit]

A collection of themes using the background examples explained in front page, the zip contains several example themes xml's and 24 numbered backgrounds + 2 special backgrounds with the text "win" and "failsafe" in both 4:3 and 16:9 aspect ratios for a total of 52 backgrounds, this background are intented to create special events and collisions (feel free to add more examples to the .zip, upload again, and replace the link by "testkit v2", v3, etc...)

  • Notes

To see an interesting example of how backgrounds are linked to the system clock, compile "Test 15bg to seconds.xml" theme, then install and "apply", and... press "x" button again over "apply" repeatedly as faster as possible (lol), you will see how the background numbers increases 1 by 1. Now wait 3 seconds and press "apply" again and the number in screen has increased in +3. This means every time the theme is applyed (or everytime the PS3 boots) is readed the system clock, and a background is choosen based in the seconds of the clock. This is also a way to make a theme with (semi) random backgrounds that will be selected based in the time when the PS3 was turned on.

p3t format, p3tcompiler, and p3textractor notes[edit]

p3tcompiler
  • p3t format uses several tables to store the "standard names of the files" without file extension (original names and file extensions of the files used to build the theme are lost)
  • backgrounds lost his file names,, instead of the original name of the file is used the "standard" name... either "hd" and "sd" for static themes... or "anim" for dynamic themes
  • backgrounds are stored in a table in the same order that are placed in the original "Theme Name.xml". There is no conversion to this .jpg files, the start position of static backgrounds can be found by looking for "FF D8 FF E0 00 10 4A 46 49 46 00 01 02 01 00 48 00 48 00 00" in the .p3t file in a hexeditor
  • The original name of the .xml is lost (there is no place to store it, just his tags in a table)
  • The order of items and tables in the p3t file is fixed and always the same (with a few exceptions). The compiler reorders the items to his convenience
  • Items in the p3t file that respect the original order of the xml are all contents of: <icontable>, <bgimagetable>, <pointertable> ?
  • Compiler version 2.00 with dynamic background ouput unrecognized attribut name "anim" for dynamic background and fail to make the p3t, when the 1.80 compile it.

p3textractor

  • rename problems
    • "notification" image is renamed to "src"
    • if the theme contains multiple backgrounds, extracted backgrounds are not renamed in the correct order using "hd_1", "sd_2" etc... (but are correctly ordered in the p3t)
    • png filextensions are duplicated (in the extraction process is needed to convert images to .gim then to png, the resulting files are renamed to "file.gim.png")
    • png and .gim filenames are numbered by adding a "_1" at the end, but is not needed (is only needed in the backgrounds when there are several of the same type)
    • "Theme Name.p3t.xml" instead of "Theme Name.xml"
  • xml problems
    • the order or items inside <info> and <icontable> in the extracted xml is different than the one contained in the .p3t
p3t format, standard order of tags after compilation (based in the tags stored in the xml table inside the .p3t file)
Edit-copy purple.svg.png
<infotable>
	<info>
		comment
		previewsize	<!-- added by the compiler -->
		name
		author
		url
		authoriconsize	<!-- added by the compiler -->
		authoricon
		iconsize	<!-- added by the compiler -->
		version
		mtime		<!-- added by the compiler -->
		genre
		preview
		icon
	<localizedinfo>
<icontable>
<pointertable>
<notification>
<setable>
<bgimagetable>
<font>
<color>

Maximum number of installed themes[edit]

Inside game_ext_plugin.rco/english.xml
<Text name="msg_error_install_theme_over_delete_other_theme">The maximum number of themes that can be installed has been reached.
To install this theme, you must delete an existing theme.</Text>

Preinstalled themes resources[edit]

<Mugi> the ones in the RCO's are used by the classic theme

<Mugi> the default theme uses the DDS icons from icontex.qrc

<Mugi> looks like i was wrong, the classic theme doesnt' use the icosn from the RCO either

<Mugi> maybe sony changed it since the last time i toyed with this, no clue

<Mugi> im sure it did at some point

Firmware resources overrided by themes[edit]

system_plugin.rco[edit]

<!-- This XML representation of an RCO structure was generated by Rcomage v1.1.2 -->
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
	<MainTree name="system_plugin">
		<ImageTree>
			...
			<Image name="tex_pointer_arrow" src="tex_pointer_arrow.gim" format="gim" compression="zlib" unknownByte="0" />
			<Image name="tex_pointer_finger" src="tex_pointer_finger.gim" format="gim" compression="zlib" unknownByte="0" />
			<Image name="tex_pointer_pen" src="tex_pointer_pen.gim" format="gim" compression="zlib" unknownByte="0" />
			<Image name="tex_pointer_hand" src="tex_pointer_hand.gim" format="gim" compression="zlib" unknownByte="0" />
			<Image name="tex_pointer_grab" src="tex_pointer_grab.gim" format="gim" compression="zlib" unknownByte="0" />
			<Image name="tex_pointer_click" src="tex_pointer_click.gim" format="gim" compression="zlib" unknownByte="0" />
			...
			<Image name="tex_notification" src="tex_notification.gim" format="gim" compression="zlib" unknownByte="0" />
			...
		</ImageTree>
		<SoundTree>
			<Sound name="snd_cursor" src="snd_cursor.ch*.vag" format="vag" channels="2" />				<!-- Cursor movements: left, right, up, down -->
			<Sound name="snd_decide" src="snd_decide.ch*.vag" format="vag" channels="2" />				<!-- Question -->
			<Sound name="snd_cancel" src="snd_cancel.ch*.vag" format="vag" channels="2" />				<!-- Close/exit a options menu -->
			<Sound name="snd_category_decide" src="snd_category_decide.ch*.vag" format="vag" channels="2" />		<!-- ??? (not remapeable from theme) -->
			<Sound name="snd_option" src="snd_option.ch*.vag" format="vag" channels="2" />				<!-- Open/enter a options menu -->
			<Sound name="snd_error" src="snd_error.ch*.vag" format="vag" channels="2" />					<!-- Error (not remapeable from theme) -->
			<Sound name="snd_system_ok" src="snd_system_ok.ch*.vag" format="vag" channels="2" />			<!-- Accept -->
			<Sound name="snd_system_ng" src="snd_system_ng.ch*.vag" format="vag" channels="2" />				<!-- ??? (not remapeable from theme) -->
			<Sound name="snd_trophy" src="snd_trophy.ch*.vag" format="vag" channels="1" />					<!-- Trophy unlocked (not remapeable from theme) -->
		</SoundTree>
		<TextTree>
			...
		</TextTree>
		<ObjectTree>
			...
		</ObjectTree>
		<AnimTree>
			...
		</AnimTree>
	</MainTree>
</RcoFile>

Navigation sounds[edit]

All the sounds are 2 channels stereo (except trophy sound that is 1 channel mono), every channel is a separated file with its name ending in 0 or 1... (for mono 0 is both channels... and for stereo 0 is left and 1 right ?), the complete list of files extracted raw without conversion from system_plugin.rco are:

snd_cancel.ch0.vag
snd_cancel.ch1.vag
snd_category_decide.ch0.vag
snd_category_decide.ch1.vag
snd_cursor.ch0.vag
snd_cursor.ch1.vag
snd_decide.ch0.vag
snd_decide.ch1.vag
snd_error.ch0.vag
snd_error.ch1.vag
snd_option.ch0.vag
snd_option.ch1.vag
snd_system_ng.ch0.vag
snd_system_ng.ch1.vag
snd_system_ok.ch0.vag
snd_system_ok.ch1.vag
snd_trophy.ch0.vag

Only 5 of them can be remapped from an official .p3t theme

<theme>
<!-- Navigation sounds ------------------------------------------------------------------------------->
	<setable>
		<se id="se_cursor" 			src="se_cursor.vag"/>		<!-- Cursor movements: left, right, up, down -->
		<se id="se_optionmenu" 			src="se_optionmenu.vag"/>	<!-- Open/enter a options menu -->
		<se id="se_cancel" 			src="se_cancel.vag"/>		<!-- Close/exit a options menu -->
		<se id="se_decide" 			src="se_decide.vag"/>		<!-- Question -->
		<se id="se_system_ok" 			src="se_system_ok.vag"/>	<!-- Accept -->
	</setable>
</theme>

Mouse pointers[edit]

All them can be remapped from an official .p3t theme

<theme>
<!-- Mouse pointers ---------------------------------------------------------------------------------->
	<pointertable>
		<pointer id="pointer_arrow" 		src="pointer_arrow.png" 	base_x="20" 	base_y="5"/>	<!-- Arrow (default) -->
		<pointer id="pointer_pen" 		src="pointer_pen.png" 		base_x="5" 	base_y="40"/>	<!-- Pen (text input) -->
		<pointer id="pointer_finger" 		src="pointer_finger.png" 	base_x="15" 	base_y="10"/>	<!-- Hand Over Clickable Object -->
		<pointer id="pointer_click" 		src="pointer_click.png" 	base_x="15" 	base_y="10"/>	<!-- Hand Clicking Object -->
		<pointer id="pointer_hand" 		src="pointer_hand.png" 		base_x="25" 	base_y="20"/>	<!-- Hand Over Draggable Object -->
		<pointer id="pointer_grab" 		src="pointer_grab.png" 		base_x="25" 	base_y="20"/>	<!-- Hand Dragging Object -->
	</pointertable>
</theme>

Notification window frame[edit]

<theme>
<!-- Notification window ----------------------------------------------------------------------------->
	<notification 					src="notification.png"/>
</theme>

lines.qrc[edit]

Background[edit]

<theme>
<!-- Background -------------------------------------------------------------------------------------->
	<bgimagetable>
		<bgimage 				hd="hd_1.jpg" 			sd="sd_1.jpg"/>
	</bgimagetable>
</theme>

icons.qrc[edit]

Color[edit]

<theme>
<!-- Color ------------------------------------------------------------------------------------------->
	<color selection="10"/>				<!-- 1 to 12: color of a month, 0: changes with the month  -->
</theme>

icontex.qrc[edit]

Icons textures[edit]

<theme>
<!-- Icons -------------------------------------------------------------------------------------------->
	<icontable>
		<!----------------------- horizontal row ------------------->
		<icon id="icon_user"			src="icon_user.png"/>
		<icon id="icon_setting"			src="icon_setting.png"/>
		<icon id="icon_photo"			src="icon_photo.png"/>
		<icon id="icon_music"			src="icon_music.png"/>
		<icon id="icon_video"			src="icon_video.png"/>
		<icon id="icon_game"			src="icon_game.png"/>
		<icon id="icon_network"			src="icon_network.png"/>
		<icon id="icon_friend"			src="icon_friend.png"/>
		<icon id="icon_tv"			src="icon_tv.png"/>
		<!-------------------------- user column ----------------------->
		<icon id="icon_poweroff" 		src="icon_poweroff.png"/>
		<icon id="icon_newuser" 		src="icon_newuser.png"/>
		<!---------------------- settings column --------------------->
		<icon id="icon_update"			src="icon_update.png"/>
		<icon id="icon_game_setting" 		src="icon_game_setting.png"/>
		<icon id="icon_bdvd_setting" 		src="icon_bdvd_setting.png"/>
		<icon id="icon_music_setting" 		src="icon_music_setting.png"/>
		<icon id="icon_chat_setting" 		src="icon_chat_setting.png"/>
		<icon id="icon_system_setting" 		src="icon_system_setting.png"/>
		<icon id="icon_theme_setting"		src="icon_theme_setting.png"/>
		<icon id="icon_datetime_setting" 	src="icon_datetime_setting.png"/>
		<icon id="icon_powersave_setting" 	src="icon_powersave_setting.png"/>
		<icon id="icon_accessory" 		src="icon_accessory.png"/>
		<icon id="icon_printer_setting" 	src="icon_printer_setting.png"/>
		<icon id="icon_display_setting" 	src="icon_display_setting.png"/>
		<icon id="icon_sound_setting" 		src="icon_sound_setting.png"/>
		<icon id="icon_security_setting" 	src="icon_security_setting.png"/>
		<icon id="icon_remoteplay_setting" 	src="icon_remoteplay_setting.png"/>
		<icon id="icon_network_setting"		src="icon_network_setting.png"/>
		<icon id="icon_setting_item" 		src="icon_setting_item.png"/>
		<!------------ photo/music/video columns ---------------------------->
		<icon id="icon_photo_default" 		src="icon_photo_default.png"/>
		<icon id="icon_photo_album_default" 	src="icon_photo_album_default.png"/>
		<icon id="icon_music_default" 		src="icon_music_default.png"/>
		<icon id="icon_music_album_default" 	src="icon_music_album_default.png"/>
		<icon id="icon_video_default" 		src="icon_video_default.png"/>
		<icon id="icon_video_album_default" 	src="icon_video_album_default.png"/>
		<!-------------------------- game column ----------------------->
		<icon id="icon_gamedata" 		src="icon_gamedata.png"/>
		<icon id="icon_savedata" 		src="icon_savedata.png"/>
		<icon id="icon_savedata_minis"		src="icon_savedata_minis.png"/>
		<icon id="icon_vmc" 			src="icon_vmc.png"/>
		<icon id="icon_newvmc" 			src="icon_newvmc.png"/>
		<icon id="icon_trophy" 			src="icon_trophy.png"/>
		<!----------------------- network column --------------------------->
		<icon id="icon_onlinemanual"		src="icon_onlinemanual.png"/>
		<icon id="icon_remoteplay" 		src="icon_remoteplay.png"/>
		<icon id="icon_inet_search" 		src="icon_inet_search.png"/>
		<icon id="icon_browser" 		src="icon_browser.png"/>
		<icon id="icon_download" 		src="icon_download.png"/>
		<!--------------------------- psn column ---------------------------->
		<icon id="icon_accountmanage"		src="icon_accountmanage.png"/>
		<!----------------------- friends column ------------------------>
		<icon id="icon_blocklist" 		src="icon_blocklist.png"/>
		<icon id="icon_addfriend" 		src="icon_addfriend.png"/>
		<icon id="icon_playermet" 		src="icon_playermet.png"/>
		<icon id="icon_chat" 			src="icon_chat.png"/>
		<icon id="icon_chatroom" 		src="icon_chatroom.png"/>
		<icon id="icon_chatroom_text" 		src="icon_chatroom_text.png"/>
		<icon id="icon_mbox" 			src="icon_mbox.png"/>
		<icon id="icon_mbox_received" 		src="icon_mbox_received.png"/>
		<icon id="icon_mbox_sent" 		src="icon_mbox_sent.png"/>
		<icon id="icon_mbox_create" 		src="icon_mbox_create.png"/>
		<!------------------------------ devices ----------------->
		<icon id="icon_ms" 			src="icon_ms.png"/>
		<icon id="icon_sd" 			src="icon_sd.png"/>
		<icon id="icon_cf" 			src="icon_cf.png"/>
		<icon id="icon_usb" 			src="icon_usb.png"/>
		<icon id="icon_psp" 			src="icon_psp.png"/>
		<icon id="icon_pspms" 			src="icon_pspms.png"/>
		<icon id="icon_usbcamera" 		src="icon_usbcamera.png"/>
		<icon id="icon_usbaad" 			src="icon_usbaad.png"/>
		<!------------------------- media player ---------------------->
		<icon id="icon_playing" 		src="icon_playing.png"/>
		<icon id="icon_mediaserver_search" 	src="icon_mediaserver_search.png"/>
		<icon id="icon_playlist" 		src="icon_playlist.png"/>
		<icon id="icon_playlist_add" 		src="icon_playlist_add.png"/>
		<icon id="icon_video_upload" 		src="icon_video_upload.png"/>
		<!------------------------ default icons ------------------------>
		<icon id="icon_default_h" 		src="icon_default_h.png"/>
		<icon id="icon_default_v" 		src="icon_default_v.png"/>
	</icontable>
</theme>

Fonts ?[edit]

Font[edit]

<theme>
<!-- Font -------------------------------------------------------------------------------------------->
	<font selection="1"/>				<!-- 0: original, 1: rounded, 2: pop -->
</theme>


Firmware theme settings[edit]

sysconf_plugin.rco[edit]

<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x120">
	<MainTree name="sysconf_plugin">
		<ImageTree>
		...
		</ImageTree>
		<FontTree>
			...
			<FontStyle name="fontstyle_sanserif" unknownShort1="0x1" unknownShort2="0x0" unknownInt3="0x0" unknownInt4="0x41600000" />
			...
		</FontTree>
		<TextTree>
		...
		</TextTree>
		<ObjectTree>
			...
			<Page name="page_theme_config" unknownInt0="0x1110000" onInit="event:native:/OnInitMenuThemeConfig" onCancel="event:native:/OnCancelMenuThemeConfig" onContextMenu="nothing" onActivate="event:native:/OnActivateMenuThemeConfig">
				<XList name="xlist_theme_config" posX="0" posY="0" objectScale="0" redScale="1" greenScale="1" blueScale="1" alphaScale="1" width="0" height="0" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onLoad="event:native:/OnInitXmListThemeConfig" unknown17="0x0" unknown18="0x0" unknown19="0x0" unknownInt20="0x0" unknownInt21="0x0" unknown22="0x0" unknownInt23="0x0" onMove="event:native:/OnCursorMoveXmListThemeConfig" onScrollIn="event:native:/OnScrollInXmListThemeConfig" onScrollOut="nothing" onPush="event:native:/OnPushXmListThemeConfig" onContext="nothing" onCancel="event:native:/OnCancelMenuThemeConfig" unknownEvent36="nothing"></XList>
			</Page>
			<Page name="page_theme_config_theme" unknownInt0="0x1110000" onInit="nothing" onCancel="event:native:/OnCancelThemeConfig" onContextMenu="nothing" onActivate="nothing"></Page>
			<Page name="page_theme_config_color" unknownInt0="0x1110000" onInit="nothing" onCancel="event:native:/OnCancelThemeConfig" onContextMenu="nothing" onActivate="nothing"></Page>
			<Page name="page_theme_config_background" unknownInt0="0x1110000" onInit="nothing" onCancel="event:native:/OnCancelThemeConfig" onContextMenu="nothing" onActivate="nothing"></Page>
			<Page name="page_theme_config_font" unknownInt0="0x1110000" onInit="nothing" onCancel="event:native:/OnCancelThemeConfig" onContextMenu="nothing" onActivate="nothing"></Page>
			<Page name="page_theme_info" unknownInt0="0x1110000" onInit="event:native:/OnInitPageThemeInfo" onCancel="event:native:/OnCancelPageThemeInfo" onContextMenu="nothing" onActivate="event:native:/OnActivatePageThemeInfo">
				<Plane name="plane_theme_info" posX="0" posY="0" objectScale="0" redScale="1" greenScale="1" blueScale="1" alphaScale="1" width="0" height="0" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onLoad="nothing" unknown17="0x0" unknown18="0x0" unknown19="0x0" unknownInt20="0x0" unknownInt21="0x0" unknown22="0x0" image="nothing" unknownInt24="0x0">
					<Plane name="plane_preview" posX="0" posY="0" objectScale="0" redScale="1" greenScale="1" blueScale="1" alphaScale="1" width="0" height="0" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x200000" onLoad="nothing" unknown17="0x59040100" unknown18="0x5a040100" unknown19="0x100" unknownInt20="0x1045b" unknownInt21="0x1045c" unknown22="0x0" image="nothing" unknownInt24="0x0"></Plane>
					<IList name="list_theme_info" posX="0" posY="0" objectScale="0" redScale="1" greenScale="1" blueScale="1" alphaScale="1" width="0" height="0" posUnknown="0" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x110000" onLoad="event:native:/OnInitIlistThemeInfo" unknown17="0x61040100" unknown18="0x62040100" unknown19="0x100" unknownInt20="0x0" unknownInt21="0x10463" unknown22="0x0" unknown23="0x0" unknown24="0x0" unknownRef25="nothing" unknownRef27="nothing" unknownEvent29="nothing" unknownRef31="nothing" unknownRef33="nothing" unknownRef35="nothing" unknownRef37="nothing">
						<Scroll name="scroll_theme_info" posX="0" posY="0" objectScale="0" redScale="1" greenScale="1" blueScale="1" alphaScale="1" width="8" height="172" posUnknown="1" scaleWidth="1" scaleHeight="1" elementScale="1" iconOffset="0x0" onLoad="nothing" unknown17="0x0" unknown18="0x0" unknown19="0x0" unknownInt20="0x0" unknownInt21="0x0" unknown22="0x0" unknownFloat23="100" unknownFloat24="100" unknown25="0x0" unknownRef26="nothing" unknownRef28="nothing" unknownRef30="nothing" unknownRef32="nothing" unknownRef34="nothing"></Scroll>
					</IList>
				</Plane>
			</Page>
			...
		</ObjectTree>
	</MainTree>
</RcoFile>