# The Hitchhiker's Guide to PM123 skins

This document isn't meant to be a step-by-step guide to creating PM123 skins. Rather it's meant to be a throughout reference. Basically skins are constructed from a .SKN file and one of more bitmap files (.BMP, .GIF, etc) or a .PAK file (which is a bundle file that wraps the skin's bitmaps into one file).

## .SKN file structure

The .SKN file is a skin definition file. It contains the filenames of all bitmaps to be replaced, all new bitmap positions and other definitions. It's a simple text file. Lines beginning with ; or # are considered as comments.

If you want to change a bitmap, it's defined like this:

    resource,bitmap

For example, replacing the background:

    1900,mybmp/bg.bmp

If you want to change a bitmap position, it's defined like this:

    position:x,y

For example, changing volume bar's location to (10, 10):

    25:10,10

Special resources can be toggled on like this:

    resource,1

Special resources that control PM123 interface

Resource number | Resource explanation
1 | Bright 3D shade color, in format RRR/GGG/BBB.
2 | Dark 3D shade color, in format RRR/GGG/BBB.
3 | (obsolete)
4 | Color of seek slider border, in format RRR/GGG/BBB.
5 | Playlist position indicator color, in format RRR/GGG/BBB.
6 | Disable 3D-shading of the "statistics area".
7 | Disable 3D-shading of the volume bar.
8 | (obsolete)
9 | Disable 3D-shading of the player window.
10 | Disable the seek slider border.
11 | Number of the bitmap fonts.
12 | (obsolete)
13 | Measure width of the filename display in pixels.
14 | Height of the filename display (in pixels) for regular mode. Used if resource 13 is defined.
15 | Height of the filename display (in pixels) for small mode. Used if resource 13 is defined.
16 | Foreground color of the filename display, in format RRR/GGG/BBB.
20 | Width of the filename display (in characters, if resource 13 is not defined) for regular mode.
21 | Width the seek slider area in pixels.
22 | Width of the filename display (in characters, if resource 13 is not defined) for small mode.
23 | Initial font, 0 or 1.
24 | Space between the main timer digits (in pixels).
25 | Disable the separator between the main timer groups.
26 | Make volume bar horizontal.
27 | Give volume bar a handle you can grab (resource 1620).
28 | Draw bitrates with digits from resource 1830 to 1839.
29 | Draw playlist indicator with resources 1660 to 1669.
30 | The bundle file for this skin (`.PAK` file) created with PM123 Skin Utility.
31 | Foreground color of unselected text in format RRR/GGG/BBB.
32 | Background color of unselected text in format RRR/GGG/BBB.
33 | Foreground color of selected text in format RRR/GGG/BBB.
34 | Background color of selected text in format RRR/GGG/BBB.
37 | Name of the recommended font that can be used for a filename displaying instead of a skinned font.

Bitmap resources

Resource number | Resource explanation
1200 to 1209 | Digits 0-9 for the main ("big") timer.
1210 | Main timer separator '`:`'
1211 | Darkened main timer separator '`:`'
1400 to 1445 | Font 1, charset `"abcdefghijklmnopqrstuvwxyz" "-_&.0123456789 ()äö:"` ('a' is 1400, 'b' is 1401, and so on)
1601 | Stereo mode
1602 | Mono mode
1608 | No channels (unknown, no file loaded) mode
1610 | Seek slider handle
1611 | Background bitmap for small mode (if not defined, default background will be used)
1612 | Background bitmap for tiny mode (if not defined, default background will be used)
1620 | Volume slider handle bitmap (only if enabled)
1630 | Volume bar
1631 | Indicator for single file play
1632 | Indicator for playlist play
1633 | Indicator for no file loaded
1640 to 1649 | Digits 0-9 for "time left" and "playlist" left timers
1650 | Separator ('`:`') for "time left" and "playlist" left timers
1651 | Dark 0 digit for "time left" and "playlist" left timers
1652 | Darkened separator ('`:`') for "time left" and "playlist" left timers
1660 to 1669 | Digits 0-9 for playlist total/index displays. Only used if resource 29 is enabled.
1800 to 1815 | Bitmaps for bitrates 0 (no bitrate), 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 320. Not used if resource 28 is enabled.
1820 | Bright "led" bitmap (displayed when PM123 has focus)
1821 | Dark "led" bitmap (displayed when PM123 is not focused)
1830 to 1839 | Digits 0-9 for bitrates, if resource 28 is enabled.
1840 | Symbol of hundred. If this symbol is defined, bitrates more than 999 are displayed in hundreds.
1900 | The background bitmap. Resources 1611 and 1612 override this in small and tiny mode.
1901 | "Time left", dark.
1902 | "Time left", bright.
1903 | "Playlist left", dark.
1904 | "Playlist left", bright.
1906 | Slider shaft (drawn before drawing slider handle)
Only regular mode
1310, 1300 | Play button up/down
1312, 1302 | Pause button up/down
1313, 1303 | Rewind button up/down
1314, 1304 | Fast forward button up/down
1315, 1305 | Power button up/down
1316, 1306 | Previous button up/down
1317, 1307 | Next button up/down
1318, 1308 | Shuffle button up/down
1319, 1309 | Repeat button up/down
1320, 1321 | Playlist button up/down
1323, 1322 | Stop button up/down (hidden by default)
1325, 1324 | Load file button up/down (hidden by default)
1327, 1326 | Hide button up/down (hidden by default)
1329, 1328 | Equalizer button up/down (hidden by default)
Small/tiny mode
5510, 5500 | Play button up/down
5512, 5502 | Pause button up/down
5513, 5503 | Rewind button up/down
5514, 5504 | Fast forward button up/down
5515, 5505 | Power button up/down
5516, 5506 | Previous button up/down
5517, 5507 | Next button up/down
5518, 5508 | Shuffle button up/down
5519, 5509 | Repeat button up/down
5520, 5521 | Playlist button up/down
5522, 5523 | Stop button up/down (hidden by default)
5525, 5524 | Load file button up/down (hidden by default)
5527, 5526 | Hide button up/down (hidden by default)
5529, 5528 | Equalizer button up/down (hidden by default)

Resource (bitmap) position settings

Position number | Position explanation
1 | Main timer
2 | Main window size (sx, sy)
3 | Play button, regular
4 | Pause button, regular
5 | Rewind button, regular
6 | Fast forward button, regular
7 | Playlist button, regular
8 | Repeat button, regular
9 | Shuffle button, regular
10 | Previous button, regular
11 | Next button, regular
12 | Power button, regular
13 | Text display, regular
14 | Text display, small
15 | "Time left" dark
16 | "Time left" bright
17 | "Playlist left" dark
18 | "Playlist left" bright
19 | "Time left" timer
20 | "Playlist left" timer
21 | Playmode indicator (no file/single/playlist)
22 | Led bright
23 | Led dark
24 | Seek slider
25 | Volume bar
26 | No channels indicator
27 | Mono indicator
28 | Stereo indicator
29 | Bitrate indicator
30 | Main window size (sx, sy), small mode
31 | Main window size (sx, sy), tiny mode
32 | (unused)
33 | Play button, small
34 | Pause button, small
35 | Rewind button, small
36 | Fast forward button, small
37 | Playlist button, small
38 | Repeat button, small
39 | Shuffle button, small
40 | Previous button, small
41 | Next button, small
42 | Power button, small
43 to 52 | (unused)
53 | Play button, tiny
54 | Pause button, tiny
55 | Rewind button, tiny
56 | Fast forward button, tiny
57 | Playlist button, tiny
58 | Repeat button, tiny
59 | Shuffle button, tiny
60 | Previous button, tiny
61 | Next button, tiny
62 | Power button, tiny
63 | Playlist index indicator
64 | Playlist total indicator
65 | Stop button, regular (hidden by default)
66 | Load file button, regular (hidden by default)
67 | Location for the slider shaft (bitmap 1906)
68 | Stop button, small (hidden by default)
69 | Load file button, small (hidden by default)
70 | Stop button, tiny (hidden by default)
71 | Load file button, tiny (hidden by default)
73 | Hide player button, regular (hidden by default)
74 | Hide player button, small (hidden by default)
75 | Hide player button, tiny (hidden by default)
76 | Equalizer button, regular (hidden by default)
77 | Equalizer button, small (hidden by default)
78 | Equalizer button, tiny (hidden by default)