i300 Skins

Building i300 Grafitti Skins

The latest version of the i300 Grafitti Hack has a separate skins database. This was done to facilitate the creation of skins by third party developers. This is a guide to building your own custom skins database.

What you’ll need

You’ll need a few developers tools to build a skin.

  • build-prc – this tool is found in the PRC-Tools distribution. You can go set up yourself a complete gcc compiling environment, or just pull out the build-prc binary.
  • Pilrc – the resource compiler can be found at Ardiri. Go download it and get it working.
  • A text editor – notepad works fine.


  • First, make your skins. Save them as 256 color bitmaps with the Palm color palette. I found a copy of the color palette here. The image should be 160 pixels wide by 65 pixels tall.
  • Next, you need to make a resource definition file, which will read your bitmap(s) and build palm-compatible resources. First let me expalin a bit about resources as they relate to the skins…Palm resources have an ID and an index. The ID is a developer assigned number. The index is the order which they appear in the database. Each skin needs exactly two resources in your file. First, a STRING resource, with a small text description. Second, a BITMAP resource, with the actual image. The hack will pull out the resources based on their index. This means that the first string resource in the file is paired to the first bitmap. If you have an odd number of resource (one too many strings or one too many bitmaps) there will be problems. You don’t want problems.Below is an excerpt of a skin resource definition file (usually ends in the extension .rcp):
    STRING ID 1001 "Aqua by PatWoods"
    STRING ID 1002 "Emblem by TrentLott"
    STRING ID 1003 "Creamsicle by DigiBoy"
    STRING ID 1004 "MatrixCode by jwbworks"
    BITMAPCOLOR ID 2001 "aqua-patwoods.bmp"		  COMPRESS
    BITMAPCOLOR ID 2002 "usflag-trentlott.bmp"	  COMPRESS
    BITMAPCOLOR ID 2003 "creamsicle-digiboy.bmp"	  COMPRESS
    BITMAPCOLOR ID 2004 "matrix-jwbworks.bmp"	  COMPRESS
  • You’ll notice those numbers… those aren’t indexes, they’re ID’s. There not used by the hack, but they’re necessary anyway. Just make sure that two resources don’t have the same ID.
  • Once you have a .rcp file, then you need to run it through pilrc. This is pretty simple. For example, if your resource definition file is named “myskin.rcp” just type:
    pilrc myskin.rcp

    This will build a “.bin” file for each resource. So you should have two “.bin” files for each skin (one string one, and one bitmap one.

  • Now, all you need to do is build these .bin files into a .prc file to upload to your i300. This again is pretty simple. You use build-prc.
    build-prc -t i3sk myskin.prc 'i300 Skins'
  • You should be left with a myskin.prc file. Send this file to your i300 and you should be good to go. Read the notes below first:

Notes & FAQ

  • Q: Can I load more than one skins prc to my i300?
    Currently, the 1.5 series hack does not support more than one skins database. It will simply work with the first database with the i3bm creator of type i3sk.
  • Q: I’ve loaded my custom skins database but all I see is the contest skins?
    Thats not a question. But read the previous question again. Delete all skins databases execpt the one you want to use.
  • Q: Why is creator i3bm?
    The original grafitti hack prototype was the BMW M3 skin Hence “i3” for i300, and “bm” for BMW. Since I didn’t feel like registering another creator type with palm, I just kept it.
  • Q: Is there any limit to the number of skins I can put in one database?
    Theoretically, no. There is limited space on the thing, though.
  • Other Notes:
    • Don’t screw around with the database format. There must be exactly 1 string resource and 1 bitmap resource for each skin.
    • You might be able to get away with a BITMAPFAMILY object if you want to try putting different color depths in. My guess is that it will work, but then again it might crash.


For an example, download the Skin Development Kit