Editing Graphic Image Map (GIM)

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 2: Line 2:


=Description=
=Description=
'''G'''raphic '''I'''mage '''M'''ap ? ('''GIM''') is an image format that allows for lot of different settings that results in lot of different GIM files that are structurally different, strictly speaking the GIM format is always the same, but generally speaking it can be said that this different GIM files are "GIM formats", the amount of GIM formats supported by PlayStation consoles is limited though (restricted by the graphic enviroment, libraries, etc...). GIM files was found in PSP and PS3 firmwares inside [[Resource Container (RCO)]] files, [[PlayStation 3 Theme (P3T)]] files, etc... See [[GimConv]] and [[Multimedia Formats and Tools#GIM]]
'''G'''raphic '''I'''mage '''M'''ap ? ('''GIM''') is an image format, allows for tenths of different storage settings and by combining settings results in hundreds (or thousands) of different GIM files that are structurally different, to simplify concepts people is naming this different GIM files as "GIM formats" but strictly speaking the GIM format is always the same, the amount of GIM formats used in PlayStation consoles is limited though (restricted by the graphic enviroment, libraries, etc...). GIM files was found used in PSP and PS3 firmwares inside [[Resource Container (RCO)]] files, [[PlayStation 3 Theme (P3T)]] files, etc... See [[GimConv]] and [[Multimedia Formats and Tools#GIM]]


The meaning of the "GIM" acronym used in this wiki ('''G'''raphic '''I'''mage '''M'''ap) is an speculative unnofficial name based in how the data is stored in the internal GIM structure, if someone finds the official codename please report back and we will change it<!-- no luck on facebook https://www.facebook.com/hhhhhyuk? -->
The acronym of GIM used in this wiki ('''G'''raphic '''I'''mage '''M'''ap) is an speculative unnofficial name based in how the data is stored in the internal GIM structure, if someone finds the official codename somewhere please report back and we will change it <!-- no luck on facebook https://www.facebook.com/hhhhhyuk? -->


=Structure=
=Structure=
*Overview (4 unknown values left, marked in intense red)
 
*Overview
  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
   
   
  00000000  <span style="background:#000000; color:#ffffff;">2E 47 49 4D</span> <span style="background:#000000; color:#ffffff;">31 2E 30 30</span> <span style="background:#000000; color:#ffffff;">00 50 53 50</span> <span style="background:#000000; color:#ffffff;">00 00 00 00</span>  .GIM1.00.PSP....    <- GIM header
  00000000  <span style="background:#666666; color:#ffffff;">2E 47 49 4D</span> <span style="background:#666666; color:#ffffff;">31 2E 30 30</span> <span style="background:#666666; color:#ffffff;">00 50 53 50</span> <span style="background:#666666; color:#ffffff;">00 00 00 00</span>  .GIM1.00.PSP....    <- GIM header
  00000010  <span style="background:#ff8c1a; color:#ffffff;">00 02</span> <span style="background:#FF4444;">00 00</span> <span style="background:#ffcc00;">00 00 00 EC</span> <span style="background:#ffff00;">00 00 00 10</span> <span style="background:#ffffb3;">00 00 00 10</span>  .......ì........    <- Block 0x02 header (Root)
  00000010  <span style="background:#ff9933; color:#ffffff;">00 02</span> <span style="background:#FF7777;">00 00</span> <span style="background:#ffff00;">00 00 00 EC</span> <span style="background:#ffff99;">00 00 00 10</span> <span style="background:#FF7777;">00 00 00 10</span>  .......ì........    <- Block 0x02 header
  00000020  <span style="background:#ff8c1a; color:#ffffff;">00 03</span> <span style="background:#FF4444;">00 00</span> <span style="background:#ffcc00;">00 00 00 80</span> <span style="background:#ffff00;">00 00 00 10</span> <span style="background:#ffffb3;">00 00 00 10</span>  .......€........        <- Block 0x03 header (Picture)
  00000020  <span style="background:#ff9933; color:#ffffff;">00 03</span> <span style="background:#FF7777;">00 00</span> <span style="background:#ffff00;">00 00 00 80</span> <span style="background:#ffff99;">00 00 00 10</span> <span style="background:#FF7777;">00 00 00 10</span>  .......€........        <- Block 0x03 header
  00000030  <span style="background:#ff8c1a; color:#ffffff;">00 04</span> <span style="background:#FF4444;">00 00</span> <span style="background:#ffcc00;">00 00 00 70</span> <span style="background:#ffff00;">00 00 00 70</span> <span style="background:#ffffb3;">00 00 00 10</span>  .......p...p....          <- Block 0x04 header (Image)
  00000030  <span style="background:#ff9933; color:#ffffff;">00 04</span> <span style="background:#FF7777;">00 00</span> <span style="background:#ffff00;">00 00 00 70</span> <span style="background:#ffff99;">00 00 00 70</span> <span style="background:#FF7777;">00 00 00 10</span>  .......p...p....          <- Block 0x04 header
  00000040  <span style="background:#11bbee;">00 30</span> <span style="background:#FF4444;">00 00</span> <span style="background:#240B7B; color:#ffffff;">00 03</span> <span style="background:#3212A3; color:#ffffff;">00 00</span> <span style="background:#6144c7;">00 04</span> <span style="background:#6144c7;">00 02</span> <span style="background:#826ad5;">00 20</span> <span style="background:#b49aed;">00 10</span> .0........... ..              <- Block 0x04 Data
  00000040  00 30 00 00 00 03 00 00 00 04 00 02 00 20 00 10  .0........... ..              <- Block 0x04 Info
  00000050  <span style="background:#b49aed;">00 01</span> <span style="background:#FF4444;">00 02</span> <span style="background:#FF4444;">00 00 00 00</span> <span style="background:#CA2691;">00 00 00 30</span> <span style="background:#CA2691;">00 00 00 40</span> ...........0...@              <- Block 0x04 Data
  00000050  00 01 00 02 00 00 00 00 00 00 00 30 00 00 00 40  ...........0...@              <- Block 0x04 Info
  00000060  <span style="background:#CA2691;">00 00 00 60</span> <span style="background:#009933;">00 00 00 00</span> <span style="background:#33cc33; color:#ffffff;">00 01</span> <span style="background:#33cc33;">00 01</span> <span style="background:#4dff4d; color:#ffffff;">00 03</span> <span style="background:#4dff4d;">00 01</span> ...`............              <- Block 0x04 Data
  00000060  00 00 00 60 00 00 00 00 00 01 00 01 00 03 00 01  ...`............              <- Block 0x04 Info
  00000070  <span style="background:#555555; color:#ffffff;">00 00 00 40</span> <span style="background:#D3D3D3;">00 00 00 00 00 00 00 00 00 00 00 00</span>  ...@............              <- Block 0x04 Index
  00000070  00 00 00 40 <span style="background:#aaaaaa;">00 00 00 00 00 00 00 00 00 00 00 00</span>  ...@............              <- Block 0x04 Info
  00000080  <span style="background:#CA5E24;">CA 5E 11 00 CA 5E 12 00 CA 5E 13 00 CA 5E 14 00</span>  Ê^..Ê^..Ê^..Ê^..                 <- Block 0x04 Frame
  00000080  <span style="background:#CA5E24;">CA 5E 11 00 CA 5E 12 00 CA 5E 13 00 CA 5E 14 00</span>  Ê^..Ê^..Ê^..Ê^..             <- Block 0x04 Frame
  00000090  <span style="background:#CA5E24;">CA 5E 21 00 CA 5E 22 00 CA 5E 23 00 CA 5E 24 00</span>  Ê^!.Ê^".Ê^#.Ê^$.                 <- Block 0x04 Frame
  00000090  <span style="background:#CA5E24;">CA 5E 21 00 CA 5E 22 00 CA 5E 23 00 CA 5E 24 00</span>  Ê^!.Ê^".Ê^#.Ê^$.             <- Block 0x04 Frame
  000000A0  <span style="background:#ff8c1a; color:#ffffff;">00 FF</span> <span style="background:#FF4444;">00 00</span> <span style="background:#ffcc00;">00 00 00 5C</span> <span style="background:#ffff00;">00 00 00 5C</span> <span style="background:#ffffb3;">00 00 00 10</span>  .ÿ.....\...\....        <- Block 0xFF header (Fileinfo)
  000000A0  <span style="background:#ff9933; color:#ffffff;">00 FF</span> <span style="background:#FF7777;">00 00</span> <span style="background:#ffff00;">00 00 00 5C</span> <span style="background:#ffff99;">00 00 00 5C</span> <span style="background:#FF7777;">00 00 00 10</span>  .ÿ.....\...\....        <- Block 0xFF header
  000000B0  <span style="background:#ccaa88;">34 78 32 5F 43 41 35 45 78 79 5F 33 32 62 69 74</span>  4x2_CA5Exy_32bit          <- Block 0xFF Strings
  000000B0  <span style="background:#ccaa88;">34 78 32 5F 43 41 35 45 78 79 5F 33 32 62 69 74</span>  4x2_CA5Exy_32bit          <- Block 0xFF Strings
  000000C0  <span style="background:#ccaa88;">73 2E 62 6D 70 00</span> <span style="background:#ddbb99;">41 64 6D 69 6E 69 73 74 72 61</span>  s.bmp.Administra          <- Block 0xFF Strings
  000000C0  <span style="background:#ccaa88;">73 2E 62 6D 70 00</span> <span style="background:#ddbb99;">41 64 6D 69 6E 69 73 74 72 61</span>  s.bmp.Administra          <- Block 0xFF Strings
  000000D0  <span style="background:#ddbb99;">74 6F 72 00</span> <span style="background:#eeccaa;">53 75 6E 20 41 70 72 20 31 35 20 30</span>  tor.Sun Apr 15 0          <- Block 0xFF Strings
  000000D0  <span style="background:#ddbb99;">74 6F 72 00</span> <span style="background:#eeccaa;">53 75 6E 20 41 70 72 20 31 35 20 30</span>  tor.Sun Apr 15 0          <- Block 0xFF Strings
  000000E0  <span style="background:#eeccaa;">31 3A 32 35 3A 30 32 20 32 30 31 38 00</span> <span style="background:#ffddbb;">47 69 6D</span>  1:25:02 2018.Gim          <- Block 0xFF Strings
  000000E0  <span style="background:#eeccaa;">31 3A 32 35 3A 30 32 20 32 30 31 38 00</span> <span style="background:#ffddbb;">47 69 6D</span>  1:25:02 2018.Gim          <- Block 0xFF Strings
  000000F0  <span style="background:#ffddbb;">43 6F 6E 76 20 31 2E 32 30 68 00</span> <span style="background:#D3D3D3;">00</span>              Conv 1.20h..              <- Block 0xFF Strings
  000000F0  <span style="background:#ffddbb;">43 6F 6E 76 20 31 2E 32 30 68 00</span> <span style="background:#aaaaaa;">00</span>              Conv 1.20h..              <- Block 0xFF Strings
 
*Intermediate blocks are aligned to 16 bytes, last block is aligned to 4 bytes


==GIM header==
==GIM header==
Line 33: Line 36:
! Offset !! Length !! Example !! Name !! Description !! Notes
! Offset !! Length !! Example !! Name !! Description !! Notes
|-
|-
| 0x00 || 0x04 || .GIM || {{cellcolors|#000000|#ffffff}} '''signature''' || little = MIG.<br>big = .GIM || This is the first place affected by '''format_endian''' in [[GimConv]].cfg
| 0x00 || 0x04 || 2E 47 49 4D || {{cellcolors|#666666|#ffffff}} '''gim_signature''' || .GIM ||  
|-
|-
| 0x04 || 0x04 || 1.00 || {{cellcolors|#000000|#ffffff}} '''version''' || || Always 1.00 ?
| 0x04 || 0x04 || 31 2E 30 30 || {{cellcolors|#666666|#ffffff}} '''gim_version''' || 1.00 ||
|-
|-
| 0x08 || 0x04 || PSP || {{cellcolors|#000000|#ffffff}} '''format_style''' || std = nothing<br>ps3 = nothing<br>psp = PSP || Configured by '''format_style''' in [[GimConv]].cfg
| 0x08 || 0x04 || 00 50 53 50 || {{cellcolors|#666666|#ffffff}} <abbr title="this is named format_style in gimconv.exe with only 3 options available: std, psp, ps3">'''gim_style'''</abbr> || PSP ||  
|-
|-
| 0x0C || 0x04 || 00 00 00 00 || {{cellcolors|#000000|#ffffff}} ''padding/unused'' ? || Unknown || Always 0 ?
| 0x0C || 0x04 || 00 00 00 00 || {{cellcolors|#666666|#ffffff}} <abbr title="Always 0x00 ?">''gim_unk''</abbr> || Unknown ||  
|}
|}


Line 48: Line 51:
! Offset !! Length !! Example !! Name !! Description !! Notes
! Offset !! Length !! Example !! Name !! Description !! Notes
|-
|-
| 0x00 || 0x02 || 00 02 || {{cellcolors|#ff8c1a|#ffffff}} '''block_id''' || 0x02 = Root (first level)<br>0x03 = Picture (second level)<br>0x04 = Image (third level)<br>0x05 = Palette (third level)<br>0xFF = Fileinfo (second level) || Block identifyer
| 0x00 || 0x02 || 00 02 || {{cellcolors|#ff9933|#ffffff}} '''block_id''' || Block identifyer || 0x02 = Root ? (first level)<br>0x03 = Picture (second level)<br>0x04 = Image (third level)<br>0x05 = Palette (third level)<br>0xFF = Fileinfo (second level)
|-
|-
| 0x02 || 0x02 || 00 00 || {{cellcolors|#FF4444}} <abbr title="block header unknown">''block_unk''</abbr> || 0x00 = ?<br>0x10 = ? || <abbr title="Filling this area with 0xFF doesnt causes any change">Unknown</abbr>
| 0x02 || 0x02 || 00 00 || {{cellcolors|#FF7777}} <abbr title="unknown">''block_unk1''</abbr> || Unknown || 0x00 = ?<br>0x10 = ?
|-
|-
| 0x04 || 0x04 || 00 00 00 EC || {{cellcolors|#ffcc00}} '''block_size''' || Size of this block + children blocks ||  
| 0x04 || 0x04 || 00 00 01 0C || {{cellcolors|#ffff00}} '''block_size''' || Size of this block + children blocks ||  
|-
|-
| 0x08 || 0x04 || 00 00 00 10 || {{cellcolors|#ffff00}} '''block_header_next''' || Next block relative offset ||  
| 0x08 || 0x04 || 00 00 00 10 || {{cellcolors|#ffff99}} '''block_next''' || Next block relative offset ||  
|-
|-
| 0x0C || 0x04 || 00 00 00 10 || {{cellcolors|#ffffb3}} '''block_data_offset''' || Block data relative offset ||  
| 0x0C || 0x04 || 00 00 00 10 || {{cellcolors|#FF7777}} <abbr title="block_data_offset">''block_unk2''</abbr> || Block data relative offset ? ||  
|}
|}


Line 62: Line 65:


===0x02 (Root)===
===0x02 (Root)===
Is the parent of block 0x03 (Picture) and 0x0FF (Fileinfo)
Empty/unknown. Is the parent of 0x03 and 0x0FF


===0x03 (Picture)===
===0x03 (Picture)===
Is the parent of block 0x04 (Image) and block 0x05 (Palette)
Empty/unknown. Is the parent of 0x05 and 0x04 (in this order, the palette goes first)
*Experimental notes
 
**This block is repeated when using the option '''merge_mode''' = picture
This block is repeated when using the option '''merge_mode picture'''


===0x04 (Image)===
===0x04 (Image)===
The image block contains some info about the image, and the pixel color info at bottom stored as '''levels''' or '''frames'''
Some of the values on this area are the same than in the GIS file. Also are directly related with the available settings on GimConv.cfg (the configuration file of GimConv.exe)
*Experimental notes
 
**This block is repeated when using the option '''merge_mode''' = image
This block is repeated when using the option '''merge_mode image'''


  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
   
   
  00000040  <span style="background:#11bbee;">00 30</span> <span style="background:#FF4444;">00 00</span> <span style="background:#240B7B; color:#ffffff;">00 03</span> <span style="background:#3212A3; color:#ffffff;">00 00</span> <span style="background:#6144c7;">00 04</span> <span style="background:#6144c7;">00 02</span> <span style="background:#826ad5;">00 20</span> <span style="background:#b49aed;">00 10</span>  .0........... ..
  00000040  <span style="background:#FF7777;">00 30</span> <span style="background:#FF7777;">00 00</span> <span style="background:#6666ff; color:#ffffff;">00 03</span> <span style="background:#0000ff; color:#ffffff;">00 00</span> <span style="background:#aaaaff;">00 04</span> <span style="background:#aaaaff;">00 02</span> <span style="background:#bb77bb;">00 20</span> <span style="background:#ddddff;">00 10</span>  .0........... ..
  00000050  <span style="background:#b49aed;">00 01</span> <span style="background:#FF4444;">00 02</span> <span style="background:#FF4444;">00 00 00 00</span> <span style="background:#CA2691;">00 00 00 30</span> <span style="background:#CA2691;">00 00 00 40</span>  ...........0...@
  00000050  <span style="background:#ddddff;">00 01</span> 00 02 00 00 00 00 <span style="background:#77FF77;">00 00 00 30</span> <span style="background:#77FF77;">00 00 00 40</span>  ...........0...@
  00000060  <span style="background:#CA2691;">00 00 00 60</span> <span style="background:#009933;">00 00 00 00</span> <span style="background:#33cc33; color:#ffffff;">00 01</span> <span style="background:#33cc33;">00 01</span> <span style="background:#4dff4d; color:#ffffff;">00 03</span> <span style="background:#4dff4d;">00 01</span>  ...`............
  00000060  <span style="background:#77FF77;">00 00 00 60</span> 00 00 00 00 <span style="background:#FF7777;">00 01</span> <span style="background:#FF7777;">00 01</span> <span style="background:#FF7777;">00 03</span> <span style="background:#FF7777;">00 01</span> ...`............
00000070  00 00 00 40 <span style="background:#aaaaaa;">00 00 00 00 00 00 00 00 00 00 00 00</span>  ...@............


{| class="wikitable" style="font-size:small;"
{| class="wikitable" style="font-size:small;"
Line 84: Line 88:
! Offset !! Length !! Example !! Name !! Description !! Notes
! Offset !! Length !! Example !! Name !! Description !! Notes
|-
|-
| 0x00 || 0x02 || 00 30 || {{cellcolors|#11bbee}} '''block_data_lenght''' || Size of the block data|| Indicates the relative offset of the area located inmediatly after '''frame_count'''<!--modifying this value some bytes up or down "mutilates" the user_data/index areas in a GIM to GIS conversion-->
| 0x00 || 0x02 || 00 30 || {{cellcolors|#FF7777}} <abbr title="block 0x04 unknown 1">''b4_unk1''</abbr> || ? ||  
|-
|-
| 0x02 || 0x02 || 00 00 || {{cellcolors|#FF4444}} <abbr title="block 0x04 and 0x05 unknown 1">''b45_unk1''</abbr> || ? || <abbr title="Filling this area with 0xFF doesnt causes any change">Ignored ?</abbr>
| 0x02 || 0x02 || 00 00 || {{cellcolors|#FF7777}} <abbr title="block 0x04 unknown 2">''b4_unk2''</abbr> || ? ||  
|-
| colspan="6" {{cellcolors|lightgrey}}
|-
|-
| 0x04 || 0x02 || 00 03 || {{cellcolors|#240B7B|#ffffff}} '''image_format''' || {{cellcolors|lightgrey}} 0x00 = rgba5650 (16 bit no alpha)<br>0x01 = rgba5551 (16 bit sharp alpha)<br>0x02 = rgba4444 (16 bit gradient alpha)<br>0x03 = rgba8888 (32 bit gradient alpha)<br>0x04 = index4 (16 colors)<br>0x05 = index8 (256 colors)<br>0x06 = index16 (16 colors with alpha ?)<br>0x07 = index32 (256 colors with alpha ?)<br>0x08 = dxt1 (no alpha)<br>0x09 = dxt3 (sharp alpha)<br>0x0A = dxt5 (gradient alpha)<br>0x108 = dxt1ext<br>0x109 = dxt3ext<br>0x10A = dxt5ext || Configured by '''image_format''' in [[GimConv]].cfg<br>'''Format''' in the GIS
| 0x04 || 0x02 || 00 03 || {{cellcolors|#3333ff|#ffffff}} '''image_format''' || 0x00 = rgba5650<br>0x01 = rgba5551<br>0x02 = rgba4444<br>0x03 = rgba8888<br>0x04 = index4<br>0x05 = index8<br>0x06 = index16<br>0x07 = index32<br>0x08 = dxt1<br>0x09 = dxt3<br>0x0A = dxt5<br>0x108 = dxt1ext<br>0x109 = dxt3ext<br>0x10A = dxt5ext || '''image_format''' in [[GimConv]].cfg<br>'''Format''' in the GIS
|-
|-
| 0x06 || 0x02 || 00 00 || {{cellcolors|#3212A3|#ffffff}} '''pixel_order''' || {{cellcolors|lightgrey}} 0x00 = normal<br>0x01 = faster || Configured by '''pixel_order''' in [[GimConv]].cfg with values: normal (default) or faster<br>'''Order''' in the GIS with values: NORMAL or PSPIMAGE
| 0x06 || 0x02 || 00 00 || {{cellcolors|#6666ff|#ffffff}} '''pixel_order''' || 0x00 = normal<br>0x10 = faster || '''pixel_order''' in [[GimConv]].cfg with values: normal (default) or faster<br>'''Order''' in the GIS with values: NORMAL or PSPIMAGE
|-
|-
| 0x08 || 0x02 || 00 04 || {{cellcolors|#6144c7}} '''width''' || Image/palette width in pixels || Restricted by '''limit_image_width''' in [[GimConv]].cfg<br>'''Width''' in the GIS
| 0x08 || 0x02 || 00 04 || {{cellcolors|#0077b3}} '''image_width''' || Image width in pixels || '''Width''' in the GIS
|-
|-
| 0x0A || 0x02 || 00 02 || {{cellcolors|#6144c7}} '''height''' || Image/palette height in pixels || Restricted by '''limit_image_height''' in [[GimConv]].cfg<br>'''Height''' in the GIS
| 0x0A || 0x02 || 00 02 || {{cellcolors|#0077b3}} '''image_height''' || Image height in pixels || '''Height''' in the GIS
|-
|-
| 0x0C || 0x02 || 00 20 || {{cellcolors|#826ad5}} '''bpp_align''' || Image/palette <abbr title="RSX memory alignment ?. This value is used to navigate the GIM structure, doesnt represents the color depth of the image, for indexed colors is used as a counter to know how many color ID there are in the palette">alignment BPP</abbr> ||  
| 0x0C || 0x02 || 00 20 || {{cellcolors|#00aaff}} '''bpp_align''' || Bits per pixel <abbr title="this value is used tto navigate the GIM structure, doesnt represents the color depth of the image, for indexed colors is used as a counter to know how many color ID there are in the palette">alignment</abbr> ||  
|-
|-
| 0x0E || 0x02 || 00 10 || {{cellcolors|#b49aed}} '''pitch_align''' || Image/palette <abbr title="RSX memory alignment ?">alignment X</abbr> || '''PitchAlign''' in the GIS
| 0x0E || 0x02 || 00 10 || {{cellcolors|#ddddff}} '''pitch_align''' || ? || '''PitchAlign''' in the GIS
|-
|-
| 0x10 || 0x02 || 00 01 || {{cellcolors|#b49aed}} '''height_align''' || Image/palette <abbr title="RSX memory alignment ?">alignment Y</abbr> || '''HeightAlign''' in the GIS
| 0x10 || 0x02 || 00 01 || {{cellcolors|#ddddff}} '''height_align''' || ? || '''HeightAlign''' in the GIS
|-
|-
| 0x12 || 0x02 || 00 02 || {{cellcolors|#FF4444}} <abbr title="block 0x04 and 0x05 unknown 2">''b45_unk2''</abbr> || ? || <abbr title="Filling this area with 0xFF doesnt causes any change">Ignored ?</abbr>
| 0x12 || 0x02 || 00 02 || {{cellcolors|#FF7777}} <abbr title="block 0x04 unknown 3">''b4_unk3''</abbr> || ||  
|-
|-
| 0x14 || 0x04 || 00 00 00 00 || {{cellcolors|#FF4444}} <abbr title="block 0x04 and 0x05 unknown 3">''b45_unk3''</abbr> || ? || <abbr title="Filling this area with 0xFF doesnt causes any change">Ignored ?</abbr>
| 0x14 || 0x04 || 00 00 00 00 || {{cellcolors|#FF7777}} <abbr title="block 0x04 unknown 4">''b4_unk4''</abbr> || || Bitmap Prev relative offset ?
|-
|-
| 0x18 || 0x04 || 00 00 00 30 || {{cellcolors|#CA2691}} '''index_start''' || Index relative start offset ||  
| 0x18 || 0x04 || 00 00 00 30 || {{cellcolors|#cc00cc}} '''index_start''' || Index relative start offset ||  
|-
|-
| 0x1C || 0x04 || 00 00 00 40 || {{cellcolors|#CA2691}} '''pixels_start''' || First plane/level/frame relative start offset ||  
| 0x1C || 0x04 || 00 00 00 40 || {{cellcolors|#cc00cc}} '''pixels_start''' || First plane/level/frame relative start offset ||  
|-
|-
| 0x20 || 0x04 || 00 00 00 60 || {{cellcolors|#CA2691}} '''pixels_end''' || Last plane/level/frame relative end offset ||  
| 0x20 || 0x04 || 00 00 00 60 || {{cellcolors|#cc00cc}} '''pixels_end''' || Last plane/level/frame relative end offset ||  
|-
|-
| colspan="6" {{cellcolors|lightgrey}}
| colspan="6" {{cellcolors|lightgrey}}
|-
|-
| 0x24 || 0x04 || 00 00 00 00 || {{cellcolors|#009933}} '''plane_mask''' || Indicates a color (for alpha mask ?) || '''PlaneMask''' in the GIS
| 0x24 || 0x04 || 00 00 00 00 || {{cellcolors|#009933}} '''plane_mask''' || || '''PlaneMask''' in the GIS
|-
|-
| 0x28 || 0x02 || 00 01 || {{cellcolors|#33cc33|#ffffff}} '''level_type''' || {{cellcolors|lightgrey}} 0x00 = Illegal<br>0x01 = MIPMAP<br>0x02 = MIPMAP2 (used for palettes) || '''LevelType''' in the GIS
| 0x28 || 0x02 || 00 01 || {{cellcolors|#33cc33|#ffffff}} '''level_type''' || 0x01 = MIPMAP<br>0x02 = MIPMAP2 || '''LevelType''' in the GIS
|-
|-
| 0x2A || 0x02 || 00 01 || {{cellcolors|#33cc33}} '''level_count''' || Number of mipmaps || Restricted by '''limit_level_count''' in [[GimConv]].cfg (default max 8)<br>'''LevelCount''' in the GIS
| 0x2A || 0x02 || 00 01 || {{cellcolors|#33cc33}} '''level_count''' || || '''LevelCount''' in the GIS
|-
|-
| 0x2C || 0x02 || 00 03 || {{cellcolors|#4dff4d|#ffffff}} '''frame_type''' || {{cellcolors|lightgrey}} 0x00 = Illegal ?<br>0x01 = Illegal ?<br>0x02 = Illegal ?<br>0x03 = SEQUENCE || '''FrameType''' in the GIS
| 0x2C || 0x02 || 00 03 || {{cellcolors|#4dff4d|#ffffff}} '''frame_type''' ? || 0x03 = SEQUENCE ? || '''FrameType''' in the GIS ?
|-
|-
| 0x2E || 0x02 || 00 01 || {{cellcolors|#4dff4d}} '''frame_count''' || Number of frames || Restricted by '''limit_frame_count''' in [[GimConv]].cfg (default no limit)<br>'''FrameCount''' in the GIS
| 0x2E || 0x02 || 00 01 || {{cellcolors|#4dff4d}} '''frame_count''' || || '''FrameCount''' in the GIS
|-
|-
| colspan="6" {{cellcolors|lightgrey}}
| colspan="6" {{cellcolors|lightgrey}}
|-
|-
| 0x30 || <abbr title="max lenght not verifyed">''any''</abbr> || {{cellcolors|lightgrey|#000000|center}} ''N/A'' || {{cellcolors|#aa8866}} '''user_data''' || Optional User Data area || Enabled by '''update_userdata = on''' in [[GimConv]].cfg. Stores the contents of '''<filename>.dat'''
| 0x30 || ''<abbr title="max lenght not confirmed">''any''</abbr>'' || {{cellcolors|lightgrey|#000000|center}} ''N/A'' || {{cellcolors|#aa8866}} '''user_data''' || Optional User Data area || Stores the contents of '''<filename>.dat''' by using the setting '''update_userdata = on'''
|-
|-{{cellcolors|lightgrey}}
| <abbr title="block_data_leght + user_data length">''varies''</abbr> || <abbr title="0 up to 3">''varies''</abbr> || {{cellcolors|lightgrey|#000000|center}} ''N/A'' || {{cellcolors|#D3D3D3}} ''padding''  || Optional padding || To align '''user_data''' to 4 bytes
| 0x30 || ''<abbr title="0 up to 3">''varies''</abbr>'' || {{cellcolors|lightgrey|#000000|center}} ''N/A'' || {{cellcolors|#aaaaaa}} ''padding''  || Optional padding || To align '''user_data''' to 4 bytes
|}
|}


Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000070  <span style="background:#555555; color:#ffffff;">00 00 00 40</span> <span style="background:#D3D3D3;">00 00 00 00 00 00 00 00 00 00 00 00</span>  ...@............


{| class="wikitable" style="font-size:small;"
{| class="wikitable" style="font-size:small;"
Line 139: Line 142:
! Offset !! Length !! Example !! Name !! Description !! Notes
! Offset !! Length !! Example !! Name !! Description !! Notes
|-
|-
| 0x30 || 0x04 || 00 00 00 40 || {{cellcolors|#555555|#ffffff}} '''frame_n_offset''' || Where <n> is the frame number || This entry is repeated one time for every '''level_count''' or '''frame_count'''
| 0x30 || 0x04 || 00 00 00 40 || '''frame_n_offset''' || Where <n> is the frame number || This entry is repeated one time for every '''level_count''' or '''frame_count'''
|-
|-{{cellcolors|lightgrey}}
| <abbr title="block data size + userdata size + userdata padding + (index n entries * 4)">0x34</abbr> || <abbr title="0 up to 0x0C">0x0C</abbr> || <abbr title="00 00 00 00 00 00 00 00 00 00 00 00">00 00 00 ...</abbr> || {{cellcolors|#D3D3D3}} ''padding''  || Optional padding || To align the block to 16 bytes
| 0x34 || 0x0C || <abbr title="00 00 00 00 00 00 00 00 00 00 00 00">00 00 00 ...</abbr> || {{cellcolors|#aaaaaa}} ''padding''  || Optional padding || To align the block to 16 bytes
|}
|}


After this index comes the planes/levels/frames (the bytes with pixels color info), are one or several images concatenated, for experimental purposes can be added manually by using [[GimConv]].cfg setting '''merge_mode''' with values '''frame''' and '''level''', and probably '''plane''' too, see {{talk}} page
After this index comes the planes/levels/frames (the bytes with pixels color info), are one or several images concatenated when using the option '''merge_mode level''' or '''merge_mode frame'''. And probably "planes" with the option '''merge_mode = plane'''


  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  IMAGE_INDEX
IMAGE_PLANE
IMAGE_LEVEL
IMAGE_FRAME
   
   
  00000080  <span style="background:#CA5E24;">CA 5E 11 00 CA 5E 12 00 CA 5E 13 00 CA 5E 14 00</span> Ê^..Ê^..Ê^..Ê^..
  PALETTE_INDEX
  00000090  <span style="background:#CA5E24;">CA 5E 21 00 CA 5E 22 00 CA 5E 23 00 CA 5E 24 00</span>  Ê^!.Ê^".Ê^#.Ê^$.
  PALETTE_LEVEL
  PALETTE_FRAME


===0x05 (Palette)===
===0x05 (Palette)===
The palette block is used for [https://en.wikipedia.org/wiki/Indexed_color indexed color] formats (index4 index8 index16 index32), to create a GIM with a palette is needed to use as input an image that already contains a color palette (such BMP or DDS)
Only used when converting to indexed color formats (index4 index8 index16 index32), to create a GIM with a palette is needed to use as input an image that already contains a palette (so is already indexed), it seems GimConv.exe cant create the palette by itself


The concept of "palette" is a bit confusing because here is used for two different things, the block 0x05 is codenamed palette as a general concept, the file structure is the same than the block 0x04 (image), both ends with the '''user_data''' (optional), then it comes an '''index''' to indicate how many palettes there are and its offsets (usually only one palette), and then starts an area where are stored the pixel colors... this area to store pixel colors is the real palette in design slang but to avoid this name confussion we can call it the '''colormap'''
By default the palette frame (located most at bottom of the palette), is stored in rgba888 (i guess this can be changed with '''palette_format''' = default // default rgba8888 rgba4444 rgba5551 rgba5650), it has a fixed reserved size of 0x400 (to store a max of 256 colors?), and the "unused" color slots are filled with zeroes <!--and uses LevelType MIPMAP2-->


*The differences in between block 0x04 (image) and block 0x05 (palette) are minor, only differs in how are used
The palette frame (or lookup table) is stored as an image with 1 pixel height, so by default it has 256x1 pixels size (image_width = 0x100 image_height = 0x1)
**The palette (block 0x05) is located before the image (block 0x04) in the block hierarchy of the GIM structure, doesnt seems to be anything that connects them, other than the fact that "the palette goes first"
**The palette stores the "colormap", and the image stores an "indexmap" (and every index value in the image loads a color from the palette colormap)
**The palette only allows for '''palette_format''' = rgba8888 rgba4444 rgba5551 rgba5650
**The "colormap" is stored as an image of 256x1 pixels ('''image_width''' = 0x100 '''image_height''' = 0x1) and allows to store 256 colors
**The "colormap" has a reserved bytes size in the GIM file structure based on the palette format, 0x400 bytes in rgba8888, 0x200 in rgba4444, etc...), if the number of colors is smaller than 256 the "colormap" area will have some bytes filled with zeroes (not used)
**The palette is stored as '''level_type''' = MIPMAP2


===0xFF (Fileinfo)===
===0xFF (Fileinfo)===
This block only exists if the GIM is build using the setting '''update_fileinfo = on'''. Initially in old PS3 firmwares all the GIM files was made this way, eventually sony stopped using this setting and GIM files was updated/replaced by new ones without this fileinfo block. But there are many GIM files inside latest PS3 firmware that contains this fileinfo block (are GIM files made years ago and never was updated, this can be seen in the timestamps stored in them around 2005/2006)
This block only exists if the GIM was build using the option '''update_fileinfo = on'''. Initially in old PS3 firmwares all the GIM files was made using this option, eventually they stopped using this option and GIM files was updated/replaced by new ones without this area. But there are many GIM files inside latest PS3 4.82 firmware that contains this area (because was made lot of time ago and never was updated), this can be seen in the timestamps stored here, all this GIM files that was build using '''update_fileinfo = on''' was made around 2005/2006/2007


  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Line 173: Line 174:
  000000D0  <span style="background:#ddbb99;">74 6F 72 00</span> <span style="background:#eeccaa;">53 75 6E 20 41 70 72 20 31 35 20 30</span>  tor.Sun Apr 15 0
  000000D0  <span style="background:#ddbb99;">74 6F 72 00</span> <span style="background:#eeccaa;">53 75 6E 20 41 70 72 20 31 35 20 30</span>  tor.Sun Apr 15 0
  000000E0  <span style="background:#eeccaa;">31 3A 32 35 3A 30 32 20 32 30 31 38 00</span> <span style="background:#ffddbb;">47 69 6D</span>  1:25:02 2018.Gim
  000000E0  <span style="background:#eeccaa;">31 3A 32 35 3A 30 32 20 32 30 31 38 00</span> <span style="background:#ffddbb;">47 69 6D</span>  1:25:02 2018.Gim
  000000F0  <span style="background:#ffddbb;">43 6F 6E 76 20 31 2E 32 30 68 00</span> <span style="background:#D3D3D3;">00</span>              Conv 1.20h..
  000000F0  <span style="background:#ffddbb;">43 6F 6E 76 20 31 2E 32 30 68 00</span> <span style="background:#aaaaaa;">00</span>              Conv 1.20h..


{| class="wikitable" style="font-size:small;"
{| class="wikitable" style="font-size:small;"
Line 179: Line 180:
! Offset !! Length !! Example !! Name !! Description !! Notes
! Offset !! Length !! Example !! Name !! Description !! Notes
|-
|-
| 0x00 || 0x16 || 4x2_CA5Exy_32bits.bmp || {{cellcolors|#ccaa88}} '''project_name''' || Original file name and file extension || '''ProjectName''' in the GIS
| 0x00 || 0x16 || 34 78 32 5F 43 41 35 45 78 79 5F 33 32 62 69 74 73 2E 62 6D 70 00 || {{cellcolors|#ccaa88}} '''project_name''' || 4x2_CA5Exy_32bits.bmp || '''ProjectName''' in the GIS
|-
| 0x16 || 0x0E || Administrator || {{cellcolors|#ddbb99}} '''user_name''' || Microsoft windows user account || '''UserName''' in the GIS
|-
|-
| 0x24 || 0x19 || Sun Apr 15 01:25:02 2018 || {{cellcolors|#eeccaa}} '''saved_date''' || Timestamp || '''SavedDate''' in the GIS
| 0x16 || 0x0E || 41 64 6D 69 6E 69 73 74 72 61 74 6F 72 00 || {{cellcolors|#ddbb99}} '''user_name''' || Administrator || '''UserName''' in the GIS
|-
|-
| 0x3D || 0x0E || GimConv 1.20h || {{cellcolors|#ffddbb}} '''originator''' || GimConv version || '''Originator''' in the GIS
| 0x24 || 0x19 || 53 75 6E 20 41 70 72 20 31 35 20 30 31 3A 32 35 3A 30 32 20 32 30 31 38 00 || {{cellcolors|#eeccaa}} '''saved_date''' || Sun Apr 15 01:25:02 2018 || '''SavedDate''' in the GIS
|-
|-
| 0x4B || <abbr title="0 up to 3">0x01</abbr> || 00 || {{cellcolors|#D3D3D3}} ''padding'' || Optional padding || To align '''fileinfo''' block to 4 bytes
| 0x3D || 0x0E || 47 69 6D 43 6F 6E 76 20 31 2E 32 30 68 00 || {{cellcolors|#ffddbb}} '''originator''' || GimConv 1.20h || '''Originator''' in the GIS
|-{{cellcolors|lightgrey}}
| 0x4B || 0x01 || 00 || {{cellcolors|#aaaaaa}} ''padding'' ||  || Optional padding to align the block to 4 bytes
|}
|}


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)