Editing Coldboot.raf

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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:
=Description=
=Description=
dev_flash\vsh\resource\'''coldboot.raf''' is the animation when PS3 boots, introduced in firmware 2.70 with [[raf.sprx]] and [[raf.qrc]] as support.
dev_flash\vsh\resource\'''coldboot.raf''' is the animation when PS3 boots, introduced in firmware 2.70 with [[raf.qrc]] as support.


[[Rich Appearance Format (RAF)]] belongs to a group of [[CXML Containers]] that uses [[Template:Zlib Header|zlib]] compression and a XML file enbedded in the container structure with the "scene" information and also works as an index to lists the contained files
[[Rich Appearance Format (RAF)]] belongs to a group of [[CXML Containers]] that uses [[Template:Zlib Header|zlib]] compression and a XML file enbedded in the container structure with the "scene" information and also works as an index to lists the contained files


Coldboot animation uses settings from the [[RCOXML Coding|RCOXML]] of [[custom render plugin]] (in RCOXML setion note the animation settings for: '''anim_coldboot''' and '''anim_coldboot2''')
Coldboot animation uses settings from the [[RCOXML Structure]] of [[custom render plugin]] (in RCOXML setion note the animation settings for: '''anim_coldboot''' and '''anim_coldboot2''')


Coldboot.raf is the same file in all firmware versions, doesnt contains sound, but is played with sound by using either '''coldboot_stereo.ac3''' (2 audio channels) or '''coldboot_multi.ac3''' (6 audio channels), this audio files has been present from firmware 1.00 but have changed (and also changed the coldboot animations settings inside the RCOXML of custom_render_plugin). See: [[Multimedia Formats and Tools]]
Coldboot.raf is the same file in all firmware versions, doesnt contains sound, but is played with sound by using the '''coldboot_multi.ac3''' and '''coldboot_multi.ac3''' audio files, this audio files has been present from firmware 1.02 but have changed (and also changed the coldboot animations settings inside the RCOXML of custom_render_plugin)


{{#ev:youtube|GUb1gIKhwMU}}
<s>http://rghost.net/58821375 the coldboot.raf compiled into a theme (Apply again to get the animation again)</s><br />
File is deleted.


=Coldboot Animation (.RAF)=


dev_flash\vsh\resource\coldboot_multi.ac3    705 KB    1.02-2.80: MD5:931D05254C198ED5D202ECAE9A0BC6E2 (in dupe present with below coldboot2 audio files in 2.70-2.80, replaced for MD5:D837AA7B7AEC6C1A090CBA51CCA9434E in 3.00-3.01)
dev_flash\vsh\resource\coldboot_stereo.ac3    705 KB    1.02-2.80: MD5:5EB0E4ECE6F221ED07D3128D416ADB44 (in dupe present with below coldboot2 audio files in 2.70-2.80, replaced for MD5:83D2B05CC85F65A1392614989F71ECFA in 3.00-3.01)
dev_flash\vsh\resource\coldboot2_multi.ac3    783 KB    since 2.70: MD5:D837AA7B7AEC6C1A090CBA51CCA9434E  (only single coldboot_multi.ac3 in 3.10 and higher)
dev_flash\vsh\resource\coldboot2_stereo.ac3  783 KB    since 2.70: MD5:83D2B05CC85F65A1392614989F71ECFA  (only single coldboot_stereo.ac3 in 3.10 and higher)
dev_flash\vsh\resource\coldboot.raf            51 KB    since 2.70: MD5:FBFD819D6CD834AC2BDDA02EE3D5375F
=Versions=
{| class="wikitable" style="font-size:x-small;"
{| class="wikitable" style="font-size:x-small;"
|+coldboot.raf versions
|+Coldboot Animation related files
! rowspan="2" | File Name !! rowspan="2" | Size<BR />(bytes) !! rowspan="2" | Hash<BR />(MD5) !! colspan="4" | Firmware !! rowspan="2" | Notes
! rowspan="2" | Version<BR />(firmware) !! rowspan="2" | Size<BR />(bytes) !! rowspan="2" | Hash<BR />(MD5) !! colspan="4" | Contents !! rowspan="2" | File Name !! rowspan="2" | Notes
|-
! EDGE !! SKEL !! GTF !! JSX
|-
! [[1.02_CEX|1.02]]~[[2.80_CEX|2.80]]
| 705 KB || 931D05254C198ED5D202ECAE9A0BC6E2 || colspan="4" {{cellcolors|lightgrey}} Audio || coldboot_multi.ac3 || Hash specific file removed from the firmware after 2.80
|-
! [[1.02_CEX|1.02]]~[[2.80_CEX|2.80]]
| 705 KB || 5EB0E4ECE6F221ED07D3128D416ADB44 || colspan="4" {{cellcolors|lightgrey}} Audio || coldboot_stereo.ac3 || Hash specific file removed from the firmware after 2.80
|-
! [[2.70_CEX|2.70]]~[[4.65_CEX|4.65]]
| 51.446 || FBFD819D6CD834AC2BDDA02EE3D5375F || 1 || 1 || 6 || 1 || coldboot.raf || Not present before 2.70, same for all the other firmware versions
|-
|-
! [[1.00_CEX|1.00]]~[[2.60_CEX|2.60]] !! [[2.70_CEX|2.70]]~[[2.80_CEX|2.80]] !! [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]] !! [[3.10_CEX|3.10]]~[[4.88_CEX|4.88]]
! [[2.70_CEX|2.70]]~[[3.01_CEX|3.01]]
| rowspan="2" | 783 KB || rowspan="2" | D837AA7B7AEC6C1A090CBA51CCA9434E || rowspan="2" colspan="4" {{cellcolors|lightgrey}} Audio || coldboot2_multi.ac3 || Since [[3.10_CEX|3.10]] the file was renamed from <code>coldboot2_multi.ac3</code> (no longer present from thereafter) to <code>coldboot_multi.ac3</code>
|-
|-
! coldboot.raf
! [[3.00_CEX|3.00]]~[[4.65_CEX|4.65]]
| 51.446 || FBFD819D6CD834AC2BDDA02EE3D5375F || {{no}} || colspan="3" {{yes}} || Not present before 2.70, same for all other firmwares
| coldboot_multi.ac3 || Note there is an overlap [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]] where both coldboot2 + coldboot are same hash
|-
! [[2.70_CEX|2.70]]~[[3.01_CEX|3.01]]
| rowspan="2" | 783 KB || rowspan="2" | 83D2B05CC85F65A1392614989F71ECFA || rowspan="2" colspan="4" {{cellcolors|lightgrey}} Audio || coldboot2_stereo.ac3 || Since [[3.10_CEX|3.10]] the file was renamed from <code>coldboot2_stereo.ac3</code> (no longer present from thereafter) to <code>coldboot_stereo.ac3</code>
|-
! [[3.00_CEX|3.00]]~[[4.65_CEX|4.65]]
| coldboot_stereo.ac3 || Note there is an overlap [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]] where both <code>coldboot2_stereo.ac3</code> + <code>coldboot_stereo.ac3</code> are same hash
|-
! colspan="9" {{cellcolors|#ccccff}} Unnofficial
|-
! Rebug
| 51.867 || B69F4F4908F39CC50EE7A2F1E00C2B7B || 1 || 1 || 6 || 1 || coldboot.raf || Same for all rebug firmwares ?
|}
|}
Note:
* Between firmwares [[2.70_CEX|2.70]]~[[3.01_CEX|3.01]] there was 2 different versions of the audio files living together and identifyed by "coldboot" and "coldboot2".
** In [[2.70_CEX|2.70]]~[[2.80_CEX|2.80]], <code>coldboot2_multi.ac3</code> differs from <code>coldboot_multi.ac3</code> and <code>coldboot2_stereo.ac3</code> differs from <code>coldboot_stereo.ac3</code>
** In [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]], <code>coldboot2_multi.ac3</code> is same as <code>coldboot_multi.ac3</code> and <code>coldboot2_stereo.ac3</code> is same as <code>coldboot_stereo.ac3</code>
*Since [[3.10_CEX|3.10]] "coldboot2" are no longer present (only <code>coldboot_multi.ac3</code> and <code>coldboot_stereo.ac3</code>


The files inside coldboot.raf are not the original files used to create the .raf. All them suffered a format conversion when the .raf was created by the raf tools
==RAF contents==
To extract the files from coldboot.raf is needed to make a [[Template:Zlib Header|zlib]] decompression and then a [[CXML Containers | CXML container]] extraction. The extracted files are:


Coldboot.raf is compressed with zlib format, and it have an added header at top. To extract the files from coldboot.raf is needed to:
{| class="wikitable"
#) Remove the first 8 bytes of the header (0x5F52414600191140) in a hexeditor
#) Decompress it with a zlib tool [https://f2065.ru/en/soft/zlib_gui_en/ Zlib GUI]
#) Extract the contents with [[CXML_Containers#CXML_decompiler | CXML decompiler]]
 
The extracted files should match with the "Name" and "MD5" under the "Converted File" columns of the table below, except the coldboot.sxml because is a file created at an intermediate step of the raf tool conversion procedures and there is no way to recover it from an already compiled .raf:
 
{| class="wikitable" style="font-size:x-small;"
|+coldboot.raf contents
! rowspan=2 style="border-left:hidden; border-top:hidden; background:#fff" | !! colspan=2 | Original File !! rowspan=2 | {{arrowr}}<br>Converter !! colspan=2 | Converted File !! rowspan=2 | File Index !! rowspan=2 | Notes
|-
|-
! Name !! MD5 !! Name !! MD5
! Usage !! File Name !! Notes
|-{{cellcolors|#fcc}}
! Scene
| coldboot.xml || {{cellcolors|lightgrey|black|center}} vary with coding style, use:<br>[[Coldboot.raf#Scene | wiki sample]] || raf_compiler.exe<br>raf_compiler.inf<br><abbr title="C:\workdir&gt;raf_pack.exe coldboot.sxml">raf_pack.exe</abbr> || coldboot.sxml || {{cellcolors|lightgrey|black|center}} vary with compiler version || {{cellcolors|lightgrey}} metadata || The original scene coldboot.xml is converted to coldboot.sxml and then embedded inside [[CXML_Containers | RAF]] structure as metadata
|-
|-
! rowspan=2 | Model
| rowspan=2 | Model || plane.edge || The 3D object, composed by a simple perimetral line that will be "filled" with the textures
| rowspan="2" | plane.dae || rowspan="2" style="font-family:monospace" {{cellcolors|lightgrey|black|center}} <abbr title="cell/samples/util/theme/raf_photo/raf/plane.dae (by daigo, 2008-12-15, Maya2008, ColladaMaya v3.05B)">024198CC37C2648AF7B68C9048715C04</abbr><br>or any other MD5<br>(vary with collada settings) || <abbr title="C:\workdir&gt;raf_geom.exe plane.dae plane.edge">raf_geom.exe</abbr> || plane.edge || style="font-family:monospace" | AC3AA7B2AE225DD1C2BB207ADDD4C2CB || 0 || A polygonal 3D object composed by <abbr title="The geometry is not optimized, there are several vertexes overlapped. raf_geom.exe displays a compilation warning: Merging identical vertexes...20 (out of 56) vertexes removed">16 vertexes and 18 triangles</abbr>
|-
|-
| <abbr title="C:\workdir&gt;raf_anim.exe -skel plane.dae plane.skel">raf_anim.exe</abbr> || plane.skel || style="font-family:monospace" | 67409457645F98B0066B52317BF4CB78 || 1 || The skeleton of the 3D object, composed by a single joint point, needed by all the animations
| plane.skel || The skelleton of the 3D object, composed by a single joint point, needed by all the animations
|-
|-
! rowspan=6 | Textures
| rowspan=3 | Textures HD || new_logo.gtf || 700x350 pixels, the main logo (without the "copyright", "trademark" and "playstation3" text)
| new_logo.dds || style="font-family:monospace" | A4AF73E19F8E07542C5FA3DA39C21967 || <abbr title="C:\workdir&gt;dds2gtf.exe -o new_logo.gtf new_logo.dds">dds2gtf.exe</abbr> || new_logo.gtf || style="font-family:monospace" | 6BEEA65407EE1513F08F66E17BBADF61 || 2 || 700x350 pixels, the main logo (without the "copyright", "trademark" and "playstation3" text)
|-
|-
| new_logo_footer.dds || style="font-family:monospace" | ABFE60993D102E39926035D9DEA4CFEC || <abbr title="C:\workdir&gt;dds2gtf.exe -o new_logo_footer.gtf new_logo_footer.dds">dds2gtf.exe</abbr> || new_logo_footer.gtf || style="font-family:monospace" | 5E27DFBB474A2AB5A07A91143C8C8054 || 3 || 700x350 pixels, the "copyright", "trademark" and "playstation3" text
| new_logo_footer.gtf || 700x350 pixels, the "copyright", "trademark" and "playstation3" text
|-
|-
| new_logo_blur.dds || style="font-family:monospace" | DE871FB0A8ACBD92CEC267816C072C14 || <abbr title="C:\workdir&gt;dds2gtf.exe -o new_logo_blur.gtf new_logo_blur.dds">dds2gtf.exe</abbr> || new_logo_blur.gtf || style="font-family:monospace" | 49E30C3B46BE3B822324EB373EEF5A9C || 4 || 700x350 pixels, a blurry copy of logo+footer together
| new_logo_blur.gtf || 700x350 pixels, a blurry copy of logo+footer together
|-
|-
| new_logo_sd.dds || style="font-family:monospace" | 2B4B56CFFA2A3E3BA868DC56A7F2917C || <abbr title="C:\workdir&gt;dds2gtf.exe -o new_logo_sd.gtf new_logo_sd.dds">dds2gtf.exe</abbr> || new_logo_sd.gtf || style="font-family:monospace" | ED30E47123D3D68B846DDAC1EBDBDA65 || 5 || 240x120 pixels, the main logo (without the "copyright", "trademark" and "playstation3" text)
| rowspan=3 | Textures SD || new_logo_sd.gtf || 240x120 pixels, the main logo (without the "copyright", "trademark" and "playstation3" text)
|-
|-
| new_logo_sd_footer.dds || style="font-family:monospace" | B2718D07AB4B6714240F591D00237639 || <abbr title="C:\workdir&gt;dds2gtf.exe -o new_logo_sd_footer.gtf new_logo_sd_footer.dds">dds2gtf.exe</abbr> || new_logo_sd_footer.gtf || style="font-family:monospace" | 4037567A9F5ED59D6E96402FA2859ABC || 6 || 240x120 pixels, the "copyright", "trademark" and "playstation3" text
| new_logo_sd_footer.gtf || 240x120 pixels, the "copyright", "trademark" and "playstation3" text
|-
|-
| new_logo_sd_blur.dds || style="font-family:monospace" | FF32C90F34FB350C34F58800F69318DB || <abbr title="C:\workdir&gt;dds2gtf.exe -o new_logo_sd_blur.gtf new_logo_sd_blur.dds">dds2gtf.exe</abbr> || new_logo_sd_blur.gtf || style="font-family:monospace" | 5821260B17B0A5BDD85D0F2BEE9596D0 || 7 || 240x120 pixels, a blurry copy of logo+footer together
| new_logo_sd_blur.gtf || 240x120 pixels, a blurry copy of logo+footer together
|-
|-
! Script
| Script || coldboot.jsx || Animation script, written in [[PlayStation JavaScript]] format (and extracted as a [[VSMX]] file)
| coldboot.js || {{cellcolors|lightgrey|black|center}} vary with coding style, use:<br>[[Coldboot.raf#Script | wiki sample]] || <abbr title="C:\workdir&gt;raf_script.exe coldboot.js coldboot.jsx">raf_script.exe</abbr> || coldboot.jsx || style="font-family:monospace" | 5461466B242D81B57D872BBA95EED753 || 8 || Animation script, written in [[PlayStation JavaScript]] and converted to [[VSMX#VSMX_Decompilation_sample | VSMX]] format
|- {{cellcolors|lightgrey}}
| Scene || coldboot.xml ||
|}
|}


==Scene==
*Notes:
As explained on the [[CXML Containers]] page, RAF containers include embedded data inside their structure (like metadata, not a real file). This data is generated by the RAF compiler and works as a descriptor of the internal structure of the RAF container (this data about the RAF structure is not present in the original scene.xml), and also contains all the important info from the original scene.xml used to create the RAF
**'''coldboot.xml''' file is not a real file inside the container, all his info can be obtained from the container structure but is not considered a file
 
**Some elements of the scene like the camera or lights are defined in the XML and are not files inside the container
The XML files generated by "CXML decompiler" contain more info than the original scene.xml. This makes possible to reverse by hand the original scene.xml using a generic layout for the scene XML standards explained on the [[Rich Appearance Format (RAF)]] page
 
After the reversing this is the original scene file sony used to build coldboot.raf (could vary with coding style but the generated file after compilation is exactly like the original because the coding style is lost when compiled)
 
{{Boxcode|title=coldboot.xml|code=<syntaxhighlight lang="xml">
<?xml version='1.0' encoding="UTF-8"?>
<raf>
    <model id="plane" file="plane.dae"/>
 
    <material id="mtrl_logo" effect="sce01">
        <texture file="new_logo.dds"/>
    </material>
    <material id="mtrl_footer" effect="sce01">
        <texture file="new_logo_footer.dds"/>
    </material>
    <material id="mtrl_blur" effect="sce01">
        <texture file="new_logo_blur.dds"/>
    </material>
    <material id="mtrl_logo_sd" effect="sce01">
        <texture file="new_logo_sd.dds"/>
    </material>
    <material id="mtrl_footer_sd" effect="sce01">
        <texture file="new_logo_sd_footer.dds"/>
    </material>
    <material id="mtrl_blur_sd" effect="sce01">
        <texture file="new_logo_sd_blur.dds"/>
    </material>
 
    <actor id="logo"      model="plane" material="mtrl_logo"      position="1.85, 0, 0"      rotation="1.570796, 0, 0" scale="1.28, 0.64, 0.64" color="1, 1, 1, 1" uv_scale="1, -1" uv_offset="0, 0" anim_weight="1, 0, 0, 0" anim_speed="1, 1, 1, 1" anim_time="0, 0, 0, 0"/>
    <actor id="footer"    model="plane" material="mtrl_footer"    position="1.85, 0, 0.0001" rotation="1.570796, 0, 0" scale="1.28, 0.64, 0.64" color="1, 1, 1, 1" uv_scale="1, -1" uv_offset="0, 0" anim_weight="1, 0, 0, 0" anim_speed="1, 1, 1, 1" anim_time="0, 0, 0, 0"/>
    <actor id="blur"      model="plane" material="mtrl_blur"      position="1.85, 0, 0.001"  rotation="1.570796, 0, 0" scale="1.28, 0.64, 0.64" color="1, 1, 1, 1" uv_scale="1, -1" uv_offset="0, 0" anim_weight="1, 0, 0, 0" anim_speed="1, 1, 1, 1" anim_time="0, 0, 0, 0"/>
    <actor id="logo_sd"  model="plane" material="mtrl_logo_sd"  position="1.85, 0, 0"      rotation="1.570796, 0, 0" scale="1.28, 0.64, 0.64" color="1, 1, 1, 1" uv_scale="1, -1" uv_offset="0, 0" anim_weight="1, 0, 0, 0" anim_speed="1, 1, 1, 1" anim_time="0, 0, 0, 0"/>
    <actor id="footer_sd" model="plane" material="mtrl_footer_sd" position="1.85, 0, 0.0001" rotation="1.570796, 0, 0" scale="1.28, 0.64, 0.64" color="1, 1, 1, 1" uv_scale="1, -1" uv_offset="0, 0" anim_weight="1, 0, 0, 0" anim_speed="1, 1, 1, 1" anim_time="0, 0, 0, 0"/>
    <actor id="blur_sd"  model="plane" material="mtrl_blur_sd"  position="1.85, 0, 0.001"  rotation="1.570796, 0, 0" scale="1.28, 0.64, 0.64" color="1, 1, 1, 1" uv_scale="1, -1" uv_offset="0, 0" anim_weight="1, 0, 0, 0" anim_speed="1, 1, 1, 1" anim_time="0, 0, 0, 0"/>
 
    <camera id="camera" type="perspective" yfov="0.927292" ymag="0" znear="0.01" zfar="1000" position="0, 0, 4" direction="0, 0, -2" up="0, 1, 0"/>


    <light id="pointlight"   type="point"   color="1, 1, 1" position="0, 1, 0" attenuation="0, 1, 4"/>
{{Boxcode|content=<syntaxhighlight lang="xml">
    <light id="ambientlight" type="ambient" color="0, 0, 0"/>
<?xml version="1.0" encoding="utf-8"?>
 
<raf version="1.0">
    <script file="coldboot.js"/>
<scene camera_num="1" light_num="2" script_num="1" actor_num="6">
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_logo" uv_scale="1.0,-1.0" id="logo" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.0" model="plane" rotation="1.5708,0.0,0.0" />
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_footer" uv_scale="1.0,-1.0" id="footer" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.0001" model="plane" rotation="1.5708,0.0,0.0" />
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_blur" uv_scale="1.0,-1.0" id="blur" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.001" model="plane" rotation="1.5708,0.0,0.0" />
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_logo_sd" uv_scale="1.0,-1.0" id="logo_sd" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.0" model="plane" rotation="1.5708,0.0,0.0" />
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_footer_sd" uv_scale="1.0,-1.0" id="footer_sd" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.0001" model="plane" rotation="1.5708,0.0,0.0" />
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_blur_sd" uv_scale="1.0,-1.0" id="blur_sd" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.001" model="plane" rotation="1.5708,0.0,0.0" />
<camera direction="0.0,0.0,-2.0" yfov="0.927292" up="0.0,1.0,0.0" zfar="1000.0" znear="0.01" position="0.0,0.0,4.0" ymag="0.0" type="0" id="camera" />
<light color="1.0,1.0,1.0" position="0.0,1.0,0.0" attenuation="0.0,1.0,4.0" type="0" id="pointlight" />
<light color="0.0,0.0,0.0" type="2" id="ambientlight" />
<script fileref="coldboot.jsx" fileindex="8" />
</scene>
<model-table num="1">
<model id="plane">
<geometry fileref="plane.edge" fileindex="0" />
<skeleton fileref="plane.skel" fileindex="1" />
</model>
</model-table>
<material-table num="6">
<material id="mtrl_logo" effect="sce01">
<_texture texref="_new_logo.gtf" />
</material>
<material id="mtrl_footer" effect="sce01">
<_texture texref="_new_logo_footer.gtf" />
</material>
<material id="mtrl_blur" effect="sce01">
<_texture texref="_new_logo_blur.gtf" />
</material>
<material id="mtrl_logo_sd" effect="sce01">
<_texture texref="_new_logo_sd.gtf" />
</material>
<material id="mtrl_footer_sd" effect="sce01">
<_texture texref="_new_logo_sd_footer.gtf" />
</material>
<material id="mtrl_blur_sd" effect="sce01">
<_texture texref="_new_logo_sd_blur.gtf" />
</material>
</material-table>
<texture-table num="6">
<texture min_filter="0" mip_filter="0" fileindex="2" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="new_logo.gtf" type="0" id="_new_logo.gtf" />
<texture min_filter="0" mip_filter="0" fileindex="3" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="new_logo_footer.gtf" type="0" id="_new_logo_footer.gtf" />
<texture min_filter="0" mip_filter="0" fileindex="4" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="new_logo_blur.gtf" type="0" id="_new_logo_blur.gtf" />
<texture min_filter="0" mip_filter="0" fileindex="5" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="new_logo_sd.gtf" type="0" id="_new_logo_sd.gtf" />
<texture min_filter="0" mip_filter="0" fileindex="6" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="new_logo_sd_footer.gtf" type="0" id="_new_logo_sd_footer.gtf" />
<texture min_filter="0" mip_filter="0" fileindex="7" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="new_logo_sd_blur.gtf" type="0" id="_new_logo_sd_blur.gtf" />
</texture-table>
<file-table num="9">
<file src="c:\coldboot\plane.edge" type="0" id="plane.edge" />
<file src="c:\coldboot\plane.skel" type="2" id="plane.skel" />
<file src="c:\coldboot\new_logo.gtf" type="4" id="new_logo.gtf" />
<file src="c:\coldboot\new_logo_footer.gtf" type="4" id="new_logo_footer.gtf" />
<file src="c:\coldboot\new_logo_blur.gtf" type="4" id="new_logo_blur.gtf" />
<file src="c:\coldboot\new_logo_sd.gtf" type="4" id="new_logo_sd.gtf" />
<file src="c:\coldboot\new_logo_sd_footer.gtf" type="4" id="new_logo_sd_footer.gtf" />
<file src="c:\coldboot\new_logo_sd_blur.gtf" type="4" id="new_logo_sd_blur.gtf" />
<file src="c:\coldboot\coldboot.jsx" type="5" id="coldboot.jsx" />
</file-table>
</raf>
</raf>
</syntaxhighlight>}}
</syntaxhighlight>}}
*Note: By looking at the XML file generated by "CXML decompiler" (not the one above), the original coldboot.raf has been built using raf compiler v1.0 (version="1.0"), this specific version of the compiler doesn't sorts the actors (zsort="" is not supported or is ignored by raf compiler v1.0). See {{discussion}} page for a sample of the file extracted with "CXML decompiler"
==Model==
The model files extracted by "CXML decompiler" from coldboot.raf ('''plane.edge''' and '''plane.skel''') are the coverted files that was generated by the raf compiler from the original model '''plane.dae'''
There is no known way to rebuild the original plane.dae via the generated plane.edge and plane.skel file(s). If there is a way it is probably very complex because there is a lot of information omitted from the original .dae when processed by the raf compiler)
For coldboot.raf the plane model seems to be a rectangle that covers the entire screen. A possible way to get the original plane.dae used to create coldboot.raf is by taking a background.dae from one of the unofficial dynamic themes published... then process it with raf compiler and extract with "CXML decompiler", if the extracted files '''plane.edge''' and '''plane.skel''' from the unofficial theme and coldboot.raf match then you have found the original plane.dae used to create coldboot.raf (if found please post it here, the .dae files are xml based)
==Textures==
The GTF textures extracted by "CXML decompiler" was originally .DDS images (see: [[Multimedia Formats and Tools]] page)
The DDS original format is '''L8''' (8 bits luminance) and can be created with nvidia command line tool (nvdxt.exe) by using this command:
Individual files:
{{Keyboard|content=<syntaxhighlight lang="bash">nvdxt.exe -file input.png -L8 -output output.dds</syntaxhighlight>}}
Batch conversion:
{{Keyboard|content=<syntaxhighlight lang="bash">nvdxt.exe -file c:\textures_in_png\*.png -L8 -outdir c:\textures_out_dds</syntaxhighlight>}}


*Notes:
*Notes:
**nvidia tool allows a lot of other image formats as input (instead of .png you can use other image formats).
**This XML file can be extracted from coldboot.raf and can be used to rebuild it
**All original colboot images are composed of black/red colors only. Red colors are treated as luminance levels (works like a "light mask") and black colors are transparent.
**Inside the "file-table" the "src" for the files uses an absolute path from a device unit in the PC, but is posible to use relative paths, this paths depends of the compiler or the options used at extraction/compiling time


==Script==
==Coldboot Scene==
The extracted coldboot.jsx (from coldboot.raf) by "CXML decompiler" is the file generated by the raf compiler with the original '''coldboot.js'''
A RAF animation contains an "scene" that is viewed from a "camera", and is displayed using a timeline that is defined in the "script" file


It is now possible to manually decompile the coldboot.jsx. The process to decompile coldboot.jsx is explained at the bottom of the [[VSMX]] page.
The animation "scene" is composed by 3 "actors" (or more exactly... 2 groups of 3 actors... one group for SD TV's and other group for HD TV's)


The code below is the original coldboot.js (in [[PlayStation JavaScript]] format)... after compiling to coldboot.jsx (in [[VSMX]] format) the file should have MD5: 5461466B242D81B57D872BBA95EED753
The 3 actors are overlapped in the same position and associated with the same "model" "geometry" by using the "skeleton" joint, how and when this actors appears is defined in the "script" file


{{Boxcode|title=coldboot.js|code=<syntaxhighlight lang="javascript">
Every actor uses his specific "material" (that appears in the "material-table"), and every material uses a "texture" (that appears in the "texture-table")
var logo_hd = new Actor("logo");        // HD logo texture (initial attributes inherited from coldboot.xml:  color="1, 1, 1, 1" position="1.85, 0, 0"      scale="1.28,0.64,0.64")
var blur_hd = new Actor("blur");        // HD blur texture (initial attributes inherited from coldboot.xml:  color="1, 1, 1, 1" position="1.85, 0, 0.001"  scale="1.28,0.64,0.64")
var footer_hd = new Actor("footer");    // HD footer texture (initial attributes inherited from coldboot.xml: color="1, 1, 1, 1" position="1.85, 0, 0.0001" scale="1.28,0.64,0.64")
var logo_sd = new Actor("logo_sd");    // SD logo texture (initial attributes inherited from coldboot.xml:  color="1, 1, 1, 1" position="1.85, 0, 0"      scale="1.28,0.64,0.64")
var blur_sd = new Actor("blur_sd");    // SD blur texture (initial attributes inherited from coldboot.xml:  color="1, 1, 1, 1" position="1.85, 0, 0.001"  scale="1.28,0.64,0.64")
var footer_sd = new Actor("footer_sd"); // SD footer texture (initial attributes inherited from coldboot.xml: color="1, 1, 1, 1" position="1.85, 0, 0.0001" scale="1.28,0.64,0.64")
var camera = new Camera("camera");      // Camera
var light = new Light("pointlight");    // Light (initial attributes inherited from coldboot.xml:            color="1, 1, 1"    position="0, 1, 0"        attenuation="0, 1, 4")


var first_wait = 1.5;                                                                                              // timer[0] wait gap (used to calculate timer[0] delay)
=Modifications=
var appear_duration = 1.3;                                                                                          // timer[0] function duration
Mostly as examples
var appear_wait = -0.25;                                                                                            // timer[1] wait gap (used to calculate timer[1] delay)
var blur_duration = 0.5;                                                                                            // timer[1] function duration
var blur_wait = 0.25;                                                                                              // timer[2] wait gap (used to calculate timer[2] delay)
var whole_duration = 0.5;                                                                                          // timer[2] function duration
var whole_wait = 0.5;                                                                                              // timer[3] wait gap (used to calculate timer[3] delay)
var fade_duration = 1.2;                                                                                            // timer[3] function duration


var appear_start_time = first_wait;                                                                                // timer[0] delay = 1.5
==Original, minimal==
var blur_start_time = appear_start_time + appear_duration + appear_wait;                                            // timer[1] delay = 1.5  + 1.3 - 0.25 = 2.55
One single image displayed in the same position than the original logo, in 2 resolutions (for SD and HD TV's)
var whole_start_time = blur_start_time + blur_duration + blur_wait;                                                // timer[2] delay = 2.55 + 0.5 + 0.25 = 3.3
var fade_start_time = whole_start_time + whole_duration + whole_wait;                                              // timer[3] delay = 3.3  + 0.5 +  0.5 = 4.3


var logo = logo_hd;                                                                                                // HD logo is the default logo
The "id"s and the file names has been renamed to make them more intuitive, 4 "actors" has been removed (with his associated "materials" and "textures" for footer and blur)
var blur = blur_hd;                                                                                                // HD blur is the default blur
var footer = footer_hd;                                                                                            // HD footer is the default footer
var logo_hide = logo_sd;                                                                                            // SD logo is hidden
var blur_hide = blur_sd;                                                                                            // SD blur is hidden
var footer_hide = footer_sd;                                                                                        // SD footer is hidden


var br = 1.0;                                                                                                      // Brightness (used for textures color adjustments in r,g,b channels)
To build this .raf is needed to modify the file coldboot.jsx to unlink the removed "actors", and to remove the animations asociated with them (the transition to footer and blur)
 
{{Boxcode|content=<syntaxhighlight lang="xml">
if (System.resolution->0 == 720) // If system resolution width=720 pixels (used by 576p, 576i, 480p and 480i video modes) reduce brightness, use SD textures, hide HD textures
<?xml version="1.0" encoding="utf-8"?>
{
<raf version="1.0">
    br = 0.8;                                                                                                      // Textures brightness reduction
<scene camera_num="1" light_num="2" script_num="1" actor_num="2">
    logo = logo_sd;                                                                                                // SD logo is the current logo
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_logo_hd" uv_scale="1.0,-1.0" id="actor_logo_hd" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.0" model="plane" rotation="1.5708,0.0,0.0" />
    blur = blur_sd;                                                                                                // SD blur is the current blur
<actor anim_speed="1.0,1.0,1.0,1.0" scale="1.28,0.64,0.64" uv_offset="0.0,0.0" color="1.0,1.0,1.0,1.0" anim_weight="1.0,0.0,0.0,0.0" material="mtrl_logo_sd" uv_scale="1.0,-1.0" id="actor_logo_sd" anim_time="0.0,0.0,0.0,0.0" position="1.85,0.0,0.0" model="plane" rotation="1.5708,0.0,0.0" />
    footer = footer_sd;                                                                                            // SD footer is the current footer
<camera direction="0.0,0.0,-2.0" yfov="0.927292" up="0.0,1.0,0.0" zfar="1000.0" znear="0.01" position="0.0,0.0,4.0" ymag="0.0" type="0" id="camera" />
    logo_hide = logo_hd;                                                                                            // HD logo is hidden
<light color="1.0,1.0,1.0" position="0.0,1.0,0.0" attenuation="0.0,1.0,4.0" type="0" id="pointlight" />
    blur_hide = blur_hd;                                                                                            // HD blur is hidden
<light color="0.0,0.0,0.0" type="2" id="ambientlight" />
    footer_hide = footer_hd;                                                                                        // HD footer is hidden
<script fileref="coldboot.jsx" fileindex="4" />
    if (camera.aspect == 4.0 / 3.0) // If camera aspect ratio is 4:3 (used by 576p and 576i PAL video modes) displace and scale SD textures
</scene>
    {
<model-table num="1">
        var sd_offset_x = 1.25;                                                                                    // local variable used for texture displacements in x axis
<model id="plane">
        logo.position->0 = sd_offset_x;                                                                            // logo position x=1.25
<geometry fileref="plane.edge" fileindex="0" />
        blur.position->0 = sd_offset_x;                                                                            // blur position x=1.25
<skeleton fileref="plane.skel" fileindex="1" />
        footer.position->0 = sd_offset_x;                                                                          // footer position x=1.25
</model>
        var sd_scale = <1.0, 0.5, 0.5>;                                                                            // local variable used for textures scale in x,y,z axis
</model-table>
        logo.scale = sd_scale;                                                                                      // logo scale x=1.0 y=0.5 z=0.5
<material-table num="2">
        blur.scale = sd_scale;                                                                                      // blur scale x=1.0 y=0.5 z=0.5
<material id="mtrl_logo_hd" effect="sce01">
        footer.scale = sd_scale;                                                                                    // footer scale x=1.0 y=0.5 z=0.5
<_texture texref="tex_logo_hd.gtf" />
    } else { // Else camera aspect ratio is different than 4:3 (used by 480p and 480i NTSC video modes) displace and scale SD textures
</material>
        sd_offset_x = 2.0;                                                                                          // local variable used for texture displacements in x axis
<material id="mtrl_logo_sd" effect="sce01">
        logo.position->0 = sd_offset_x;                                                                            // logo position x=2.0
<_texture texref="tex_logo_sd.gtf" />
        blur.position->0 = sd_offset_x;                                                                            // blur position x=2.0
</material>
        footer.position->0 = sd_offset_x;                                                                          // footer position x=2.0
</material-table>
        sd_scale = <1.0, 0.5, 0.5>;                                                                                // local variable used for textures scale in x,y,z axis
<texture-table num="2">
        logo.scale = sd_scale;                                                                                      // logo scale x=1.0 y=0.5 z=0.5
<texture min_filter="0" mip_filter="0" fileindex="2" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="logo_hd.gtf" type="0" id="tex_logo_hd.gtf" />
        blur.scale = sd_scale;                                                                                      // blur scale x=1.0 y=0.5 z=0.5
<texture min_filter="0" mip_filter="0" fileindex="3" mag_filter="0" ext="1" wrap_t="1" wrap_s="1" wrap_p="1" fileref="logo_sd.gtf" type="0" id="tex_logo_sd.gtf" />
        footer.scale = sd_scale;                                                                                    // footer scale x=1.0 y=0.5 z=0.5
</texture-table>
    }
<file-table num="5">
}
<file src="c:\coldboot\original\minimal\plane.edge" type="0" id="plane.edge" />
 
<file src="c:\coldboot\original\minimal\plane.skel" type="2" id="plane.skel" />
logo_hide.color = <0, 0, 0, 0>;                                                                                    // hide unselected logo (not used anymore)
<file src="c:\coldboot\original\minimal\new_logo_hd.gtf" type="4" id="logo_hd.gtf" />
blur_hide.color = <0, 0, 0, 0>;                                                                                    // hide unselected blur (not used anymore)
<file src="c:\coldboot\original\minimal\new_logo_sd.gtf" type="4" id="logo_sd.gtf" />
footer_hide.color = <0, 0, 0, 0>;                                                                                  // hide unselected footer (not used anymore)
<file src="c:\coldboot\original\minimal\coldboot.jsx" type="5" id="coldboot.jsx" />
 
</file-table>
logo.color = <br, br, br, 0>;                                                                                      // logo color alpha=0 (transparent, initial state)
</raf>
logo.setColor(<br, br, br, 1>, appear_start_time);                                                                  // change logo color alpha=1 over 1.5 seconds (logo fade-in animation)
blur.color = <br, br, br, 0>;                                                                                      // blur color alpha=0 (transparent, initial state)
footer.color = <br, br, br, 0>;                                                                                    // footer color alpha=0 (transparent, initial state)
light.position = logo.position + <-3, 0.5, 0>;                                                                      // light position at the left-top of logo position (initial state)
light.color = <0, 0, 0>;                                                                                            // light color to black (darkness, initial state)
 
System.timer[0] = new OneShotTimer(appear_start_time, function()                                                    // delay 1.5 seconds
{
    light.setPosition(logo.position + <0.0, 0.5, 0>, appear_duration);                                              // change light position to top of logo position over 1.3 seconds
    light.setAttenuation(<0.1, 0.1, 0.1>, appear_duration);                                                        // change light attenuation to minimal over 1.3 seconds
    light.setColor(<1, 1, 1>, appear_duration);                                                                    // change light color to white over 1.3 seconds (light-in animation)
});
 
System.timer[1] = new OneShotTimer(blur_start_time, function()                                                      // delay 2.55 seconds
{
    blur.setColor(<br, br, br, 1>, blur_duration, INTERPOLATION_BEZIER, <0.1, 0.0, 0.1, 1.0>);                      // change blur color alpha=1 over 0.5 seconds (blur fade-in animation)
});
 
System.timer[2] = new OneShotTimer(whole_start_time, function()                                                    // delay 3.3 seconds
{
    blur.setColor(<br, br, br, 0>, whole_duration, INTERPOLATION_BEZIER, <0.1, 0.0, 0.1, 1.0>);                    // change blur color alpha=0 over 0.5 seconds (blur fade-out animation)
    footer.setColor(<br, br, br, 1>, whole_duration);                                                              // change footer color alpha=1 over 0.5 seconds (footer fade-in animation)
});
 
System.timer[3] = new OneShotTimer(fade_start_time, function()                                                      // delay 4.3 seconds
{
    var namelessVar = <0.8, 0.0, 0.8, 1.0>;                                                                        // local variable (used for bezier curve settings)
    footer.setColor(<br, br, br, 0>, fade_duration, INTERPOLATION_BEZIER, namelessVar);                            // change footer color alpha=0 over 1.2 seconds (footer fade-out animation)
    logo.setColor(<br, br, br, 0>, fade_duration, INTERPOLATION_BEZIER, namelessVar);                              // change logo color alpha=0 over 1.2 seconds (logo fade-out animation)
    light.setPosition(light.position + <1.5 * 1.5, 1 * 1.5, 0>, fade_duration, INTERPOLATION_BEZIER, namelessVar);  // change light position to (weird position???) over 1.2 seconds
    light.setColor(<0, 0, 0>, fade_duration, INTERPOLATION_BEZIER, namelessVar);                                    // change light color to black over 1.2 seconds (light-out animation)
    light.setAttenuation(<0, 1, 4>, fade_duration, INTERPOLATION_BEZIER, namelessVar);                              // restore light attenuation to the initial values inherited from coldboot.xml over 1.2 seconds
});
/* Decompiled by sandungas */
</syntaxhighlight>}}
</syntaxhighlight>}}
=Coldboot animation timeline=
{{PS3 Coldboot.raf animation timeline}}
=Coldboot Sounds (.AC3)=
{| class="wikitable" style="font-size:x-small;"
|+Coldboot Sounds versions
! rowspan="2" | File Name !! rowspan="2" | Size<BR />(bytes) !! rowspan="2" | Hash<BR />(MD5) !! colspan="5" | Firmware !! rowspan="2" | Notes
|-
! [[090.002_-_DECR|0.90]]~?.?? !! [[1.00_CEX|1.00]]~[[2.60_CEX|2.60]] !! [[2.70_CEX|2.70]]~[[2.80_CEX|2.80]] !! [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]] !! [[3.10_CEX|3.10]]~[[4.88_CEX|4.88]]
|-{{cellcolors|lightgrey}}
! coldboot_stereo.ac3
| 647.680 || 22AFD3B8D9C2EFD6A1B70ACBA23B14BD || {{yes}} || {{no}} || {{no}} || {{no}} || {{no}} || Pre-retail firmwares
|-{{cellcolors|lightgrey}}
! coldboot_stereo.ac3
| 721.920 || 5EB0E4ECE6F221ED07D3128D416ADB44 || rowspan="2" {{no}} || rowspan="2" colspan="2" {{yes}} || rowspan="2" colspan="2" {{no}} || rowspan="2" | Old coldboot sound files
|-{{cellcolors|lightgrey}}
! coldboot_multi.ac3
| 721.920 || 931D05254C198ED5D202ECAE9A0BC6E2
|-{{cellcolors|lightgrey}}
! coldboot2_stereo.ac3
| 801.280 || 83D2B05CC85F65A1392614989F71ECFA || rowspan="2" {{no}} || rowspan="2" {{no}} || rowspan="2" colspan="2" {{yes}} || rowspan="2" {{no}} || rowspan="2" | New coldboot2 sound files (Using new names)
|-{{cellcolors|lightgrey}}
! coldboot2_multi.ac3
| 801.280 || D837AA7B7AEC6C1A090CBA51CCA9434E
|-
! coldboot_stereo.ac3
| 801.280 || 83D2B05CC85F65A1392614989F71ECFA || rowspan="2" {{no}} || rowspan="2" colspan="2" {{no}} || rowspan="2" colspan="2" {{yes}} || rowspan="2" | New coldboot sound files (Using old names)
|-
! coldboot_multi.ac3
| 801.280 || D837AA7B7AEC6C1A090CBA51CCA9434E
|}
*'''coldboot2''' sounds overlap notes:
**In [[2.70_CEX|2.70]]~[[2.80_CEX|2.80]], <code>coldboot2_multi.ac3</code> differs from <code>coldboot_multi.ac3</code> and <code>coldboot2_stereo.ac3</code> differs from <code>coldboot_stereo.ac3</code>
**In [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]], <code>coldboot2_multi.ac3</code> is same as <code>coldboot_multi.ac3</code> and <code>coldboot2_stereo.ac3</code> is same as <code>coldboot_stereo.ac3</code>
{| class="wikitable"
|-
! Audio files !! Channels !! Mode Extension !! File Size !! Duration !! Format !! Bit Rate !! Sampling Rate !! Bit depth
|-
! old stereo
| 2 Front: L R || CM (complete main) || rowspan="2" | 721.920 bytes || rowspan="2" | 9s 24ms || rowspan="5" | AC-3 (Audio Coding 3) || rowspan="5" | 640 Kbps Constant || rowspan="5" | 48.0 KHz || rowspan="5" | 16 bits
|-
! old multi
| 6 Front: L C R, Side: L R, LFE || CM (complete main)
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
! new stereo
| 2 Front: L R || ME (music and effects) || rowspan="2" | 801.280 bytes || rowspan="2" | 10s 16ms
|-
! new multi
| 6 Front: L C R, Side: L R, LFE || CM (complete main)
|}
{| class="wikitable" style="font-size:x-small;"
|+Gameboot Sounds versions
! rowspan="2" | File Name !! rowspan="2" | Size<BR />(bytes) !! rowspan="2" | Hash<BR />(MD5) !! colspan="5" | Firmware !! rowspan="2" | Notes
|-
! [[090.002_-_DECR|0.90]]~?.?? !! [[1.00_CEX|1.00]]~[[2.60_CEX|2.60]] !! [[2.70_CEX|2.70]]~[[2.80_CEX|2.80]] !! [[3.00_CEX|3.00]]~[[3.01_CEX|3.01]] !! [[3.10_CEX|3.10]]~[[4.88_CEX|4.88]]
|-{{cellcolors|lightgrey}}
! gameboot_stereo.ac3
| 353.280 || DA2AAB16B66F9877C2BC9049CB51A811 || {{yes}} || {{no}} || {{no}} || {{no}} || {{no}} || Pre-retail firmwares
|}


{{File Formats}}<noinclude>[[Category:Main]]</noinclude>
{{File Formats}}<noinclude>[[Category:Main]]</noinclude>
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)