Skin Format

From ASSS Wiki
Jump to: navigation, search

Below is the Continuum skin file format which is found in skin.txt of the \Continuum\skins folder.

  Title: Continuum (c) Skins Development Guide
Version: 1.2
   Date: February 11, 2002
 Author: Mr. Ekted

================================= VERSIONS ===================================

1.0 Initial implementation.

1.1 Fixed errors in documentation.

1.2 Added several new regions (prev/next profile, macros, keydefs, options, 
      advanced options, ping).
    Added 25 user-defined regions.
    Added support for animations.
    Added user-definable colors (profile text, zone text/graph, zone select).
    Changed the way zone scroll arrows work.

============================== WHAT IS A SKIN? ===============================

A skin in Continuum is a file that describes what the main startup screen looks
like and how you interact with it. It defines everything except the window
title, menu, and borders. Continuum comes with a built-in skin called 
<default>. All other skins must be placed into a subdirectory called "skins".
Continuum detects all the skin files there at startup time and puts their 
names on the menu. Selecting a skin from the menu will instantly change the
interface to the new skin.

=============================== MAKESKIN TOOL ================================

A skin file is composed of a BMP file and a TXT file, and the resulting skin
file is given the extension SKN. To make a skin file, download the utility 
"makeskin.exe" available from any of the official Continuum download sites.
Although it is a command-line tool, it is made so that you can drag-and-drop
either the BMP or the TXT file onto "makeskin.exe" in "My Computer" or 
"Explorer".

   For example, if you drop "myskin.bmp" onto "makeskin.exe", it will run, load
   "myskin.bmp" and "myskin.txt, write out "myskin.skn", and close with no 
   other interaction required. Note that if you use this technique with a long
   filename, Windows will translate the name to its alternate form, and the
   resulting SKN file will have such a name (e.g. ContinuumSkin -> CONTIN~1).
   You can simply rename the SKN file aterwards by hand.

If you want to run it manually from a command prompt, simply type:

   makeskin xyz

This will attempt to build "xyz.skn" from "xyz.bmp" and "xyz.txt". I recommend
keeping "makeskin.exe" and all your BMP and TXT files in one directory for 
convenience, and copying completed SKN files to the "skins" subdirectory for
testing.

================================ THE BMP FILE ================================

The BMP file is a standard Windows bitmap. It can be any color depth. 8-bit 
color is the smallest but the worst looking. Higher color depths make larger
files but they look better. Use your judgement.

The BMP file contains 2 types of regions: a single main region (required), and
any number of overlay regions (optional). The main region is what is displayed
as the normal background of the window with nothing selected or highlighted.
The size of this region sets the size of the interface. Overlay regions are
smaller sections of the main region with some change (highlight, animation,
blinking/moving effect, or whatever). They are drawn on top of the main region
as required or described by the skin description file (TXT - details below).

Here's an example BMP file with a main region, and a single overlay region:

   +-----------------------------------------------------++-----------+
   |                                                     ||           |
   |                                                     ||     A1    |
   |           +-----------+                             ||           |
   |           |           |                             |+-----------+
   |           |     A     |                             |
   |           |           |                             |
   |           +-----------+                             |
   |                                                     |
   |                                                     |
   |                      main                           |
   |                                                     |    unused
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   |                                                     |
   +-----------------------------------------------------+

In this picture, A indicates the location and size within the main region. A1 
is the overlay region that will be drawn on A when necessary. Note that A needs 
to define a rectangle within the main region. Since the rectangle for A by 
definition includes the width and height, A1 only needs to be defined by the
point at its upper left corner.

Within the interface, the user interacts with hot spots. These are areas of the
window that have one defined purpose, like buttons, text areas, etc. A hot spot
can have a rectangular shape (in which case it can be defined with a single
overlay region), or it may have an odd shape (in which case it can be defined 
with multiple overlay regions).

Here's an example BMP file with a main region, and an odd-shaped hot spot 
defined by two overlay regions:

   +-----------------------------------------------------++-----------+
   |                                                     ||           |
   |                                                     ||     A1    |
   |           +-----------+                             ||           |
   |           |           |                             |+-----------+
   |           |     A     |                             |
   |           |           |                             |    +----+
   |           +----+------+                             |    |    |
   |           |    |                                    |    | B1 |
   |           | B  |                                    |    |    |
   |           |    |     main                           |    +----+
   |           +----+                                    |
   |                                                     |    unused
   |                                                     |
   |                                                     |+----+
   |                                                     ||    |
   |                                                     || B2 |
   |                                                     ||    |
   +-----------------------------------------------------++----+

In this picture, A and B indicate the locations and sizes within the main 
region for some hot spot. A1 is the overlay region that will be drawn on A when
necessary. B1/B2 are the overlay regions that will be drawn on B when 
necessary. Note that the positions of A1/B1/B2 do not necessarily have to be
in exactly the same relative positions as the shape of the hot spot itself. In
fact that can even overlap each other if the images share some common parts:

                  +-----------+            
                  |           |            
                  |     A1    |            
                  |           |            +-----------+ 
                  +-----------+            |           | 
                                           |     A1    | 
                  +----+                   |           ++
                  |    |            OR     +--+         |
                  | B1 |           EVEN       | B1   B2 |  
                  |    +--+                   |         |  
                  +--+    |                   +---------+  
                     | B2 |                  
                     |    |                  
                     +----+                  

Overlay regions may also share space with other overlay regions for different 
hot spots, or even the main region itself.

When assembling the final layout for all the regions within the BMP, try to
minimize the total area. This will reduce the final file size. You can place
the regions anywhere within the bitmap, but it's recommended that you put the
main region in the upper left corner, with all other regions to the right or
below the main region, or both. Also, fill all unused space with some bright
color that doesn't appear in any valid region. That way, when testing your 
skin, any bad coordinates in the TXT file will cause this color to show up on
the interface.

================================ THE TXT FILE ================================

The BMP file contains no knowledge of the locations and sizes of regions. It is
just a single large bitmap. The locations and purposes of the regions that you
have created are described in the TXT file. Before we get into its format, here
are some definitions you will need:

   HOTSPOT   - one of the following names: (main, profile, spectate, ship1, 
               ship2, ship3, ship4, ship5, ship6, ship7, ship8, zones, trace, 
               zoneup, zonedown, play, quit, proftext, profbox, shipbox, 
               infobox, zonetext, zonebox, prevprof, nextprof, macros, keydefs,
               options, advopt), the name is case-insenitive

   COLORDEF  - one of the following names: (zonecolor1, zonecolor2, zonecolor3,
               zoneselcolor1, zoneselcolor2, profilecolor1, profilecolor2, 
               profilecolor3, profilecolor4), the name is case-insenitive

   POINT     - an absolute location of a pixel within the BMP specified in 
               terms of X and Y, where 0,0 is the upper left corner, X goes 
               positive to the right and Y goes positive downwards, the format
               for a POINT is "(x,y)", there is a special case POINT "(*)" that
               is used as a place-holder

   RECTANGLE - a region of pixels within the BMP defined by 2 POINTS, the upper
               left POINT and the lower right POINT inclusive, the format for a
               RECTANGLE is "(x1,y1,x2,y2)"

   TICK      - a single update of the interface window, this is the smallest
               unit of time that the image can be modified, time between ticks
               is approximately 200ms

   NORM      - describes overlay regions that are to be drawn when a given hot
               spot is NOT selected or hightlighted, a NORMAL overlay is 
               defined by an optional count and a POINT, the count determines 
               how many ticks the overlay will be displayed, if the count is 
               not specified it defaults to 1

   ALT       - describes overlay regions that are to be drawn when a given hot
               spot IS selected or hightlighted, an ALTERNATE overlay is 
               defined by an optional count and a POINT, the count determines 
               how many ticks the overlay will be displayed, if the count is 
               not specified it defaults to 1

   COLOR     - defines the RGB (red,green,blue) values for a given color, the
               format is "(r,g,b)", each component has the range 0 to 255

The general syntax for the TXT file has the following rules:

   The semicolon ";" is the comment character. It, and everything following it
   on a given line are ignored.

   Blank lines are ignored.

   All whitespace is ignored within a line. You may use as many or as few 
   spaces and tabs to separate items as you like.

   Lines may end with CR/LF or LF.

   All lines may be in any order. There is no predefinition required.

   Each line that contains a definition must be complete. You can't continue on 
   the next line. Lines may be up to 255 bytes long.

Each "real" line of TXT file will have the following form:

   HOTSPOT = RECTANGLE [NORM ...] [+ ALT ...]

      or

   COLORDEF = COLOR

The RECTANGLE defines the location of the HOTSPOT, and the NORM and ALT regions
define how and when to draw changes to the main region.

The only required line in the TXT file is the one defining the main region. It
may NOT have any defined overlay regions, and may only appear once:

   ;this is a comment
   main = (0,0,639,479) ; this is a comment

This line defines the main region as a 640x480 pixel image in the upper left
corner of the BMP.

   profile = (0,0,19,19) + (640,0)

This defines the "profile button". There are no NORM (normal) overlays defined, 
so when the mouse is NOT over it, it will look as it does in the main region. 
When the mouse is over it, it will be drawn using the ALT (altrnate) region.

When the list of NORM and/or ALT runs out, it is recycled. To make it alternate 
between 2 images eack TICK on mouse-over, use:

   profile = (0,0,19,19) + (640,0) (640,20)

To make the second ALT overlay stay on for 3 TICKS, use:

   profile = (0,0,19,19) + (640,0) 3(640,20)

Assume the two ALT overlays above are A and B. The drawing for this HOTSPOT 
would go: A B B B A B B B A B B B etc.

For all hotspots except main, you can define multiple regions to handle odd
shapes:

   play = (400,400,435,435) + (800,0)
   play = (400,435,420,470) + (800,35)

This creates an L-shaped HOTSPOT with 2 regions. Even though it is valid to
define multiple regions for any HOTSPOT, some of them only use the first one,
such as the text box HOTSPOTS.

To create a HOTSPOT that animates when the mouse isn't over it:

   quit = (500,500,550,520) (0,750) (0,770)

Note there's no plus "+", which would indicate the start of the ALT list of
overlays. To make the same HOTSPOT cycle thru 3 different looks about every
second:

   quit = (500,500,550,520) 5(0,750) 5(0,770) 5(0,790)

To make a HOTSPOT blink between the normal look in the main region and another
look, you can either make an overlay region which matches that section of the 
main region which wastes space, or you can use the special POINT type "(*)".
This acts like a POINT, but causes no overlay to draw. Thus:

   trace = (670,25,702,45) 2(0,750) 5(*)

The "trace button" will draw as: A A X X X A A X X X, where X is the default
look in the main region.

You can get very fancy with these, as in:

   zones = (400,0,500,30) (0,800) 2(0,805) (*) 2(0,810) + (20,800) 3(20,810)
   zones = (500,0,600,35) + 6(25,805) (0,810) (30,900)
   zones = (400,30,500,45) 3(0,810) (10,805)

This defines a very complicated HOTSPOT for the "zones button". One of the
regions has both NORM and ALT overlays, one has just ALT overlays, and one has
just NORM overlays. Note that these 3 lines to do not have to be together in 
the TXT file, but there's really no reason not to put them together. Also note 
that the RECTANGLES defined by the 3 regions do not have to form a single shape. 
You could make a definition for a button so that, when the mouse is over it, 
something else on the interface blinks, etc.

For the color definitions, do this:

   zoneselcolor1 = (255,0,255)  ; makes zone selection bar bright purple

A final note on spacing within lines. The following lines are all identical:

   profile=(0,0,20,20)(800,0)(810,0)+(900,0)2(910,0)

   profile = (0,0,20,20) (800,0) (810,0) + (900,0) 2(910,0)

   profile = ( 0 , 0 , 20 , 20 )( 800 , 0 )( 810 , 0 )+( 900 , 0 ) 2( 910 , 0 )

   profile        =(0,0,     20,20)(800    ,0)(810,0)+(    900,0)2     (910,0)

============================== HOTSPOT DETAILS ===============================

Now for the details on each of the hotspots, what they are, how they are used,
and any size requirements. Note that there are many more possibilities not yet
included. As needs and requests come, I will expand this list. The names are
listed here in CAPS so they stand out. HOTSPOT names are case-insensitive.

MAIN     This is the only required HOTSPOT in a skin. There can be only one of
         them, and they can have no NORM or ALT overlays. This defines the size
         of the interface using this skin, and is the default image. A skin
         with only a main region is a valid skin all by itself, but would not
         display any useful interaction information. This area should be at 
         least 500 pixels wide, so as not to wrap the menu bar. Also, note that
         it should fit on the display, and that a few people use 800x600 screen
         resolution. As a comparison, the original SS "main region" was 560x380
         pixels.

PROFBOX  This is the area that contains all profile related information
         (profile text, profile button). It is used to display profile help 
         text in the INFOBOX, and to allow the mouse wheel to select 
         previous/next profiles.

SHIPBOX  This is the area that contains all ship related information (ship
         selection buttons). It is used to display ship help text in the 
         INFOBOX, and to allow the mouse wheel to select previous/next ships.

INFOBOX  This is the area where the help text is displayed based on which 
         HOTSPOT the mouse is over. If included in the skin, it should be large
         enough to fit about 120 8x12 characters wrapped into as many lines as 
         necessary.

ZONEBOX  This is the area that contains all zone related information (zones
         button, maybe trace button, zone list headers, zone text, and scroll
         buttons). It is used to display zone help text in the INFOBOX, and to 
         allow the mouse wheel to scroll the zone list up/down.

PROFTEXT This is the area where the 4 lines of profile text are drawn (profile
         name, player name, macro set name, and keydef name). As of now, these
         text lines are stacked vertically with a pitch of 16 pixels. The 
         maximum text length is 23 characters, so the minimum size is 184x64.
         You should put appropriate labels in the skin image itself. I may
         break this HOTSPOT into 4 separate ones for each item so you can lay 
         them out horzontally, or even exclude one or more of them.

ZONETEXT This is the area where the the zone list, pings, and player counts are
         displayed. These text lines are stacked vertically with a pitch of 14 
         pixels. A single line consists of a 3-digit ping time (or graph), a 
         space, as many charcaters as will fit in of the zone name, another
         space, and a 3-digit player count. Each character is 8x12, so if your
         ZONETEXT region is 160x140, you could fit 10 lines, and each line 
         could have 20 characters, 8 of which are non-zone name characters,
         leaving 16 for the zone name. You should put appropriate labels in the 
         skin image itself for the columns of data.

PROFILE  This defines the button that invokes the profile dialog.

PREVPROF This defines the button that selects the previous profile. The NORM
         overlay is drawn if a previous profile exists. The ALT overlay is 
         drawn if the mouse is over the region AND a previous profile exists.

NEXTPROF This defines the button that selects the next profile. The NORM
         overlay is drawn if a next profile exists. The ALT overlay is drawn 
         if the mouse is over the region AND a next profile exists.

MACROS   This defines the button that invokes the macros dialog.

KEYDEFS  This defines the button that invokes the keydefs dialog.

SPECTATE This defines the "button" that selects spectator mode. Do not put an
         actual spectate image into the skin for this region. It is drawn 
         using an internal image. The first rectangle specified for this region
         defines the location where the image will be drawn. Any subsequent
         rectangles define the extra pieces of the shape of the region. This is
         also true of all SHIPx regions.

SHIP1    This defines the "button" that selects ship 1. Do not put actual ship
         images into the skin for the ship selections. They are drawn 
         automatically based on what ship set is being used. This applies to 
         all other ship buttons also.

SHIP2    This defines the "button" that selects ship 2.

SHIP3    This defines the "button" that selects ship 3.

SHIP4    This defines the "button" that selects ship 4.

SHIP5    This defines the "button" that selects ship 5.

SHIP6    This defines the "button" that selects ship 6.

SHIP7    This defines the "button" that selects ship 7.

SHIP8    This defines the "button" that selects ship 8.

ZONES    This defines the button that invokes the download zones dialog.

TRACE    This defines the button that invokes the zone trace dialog.

ZONEUP   This defines the "button" that scrolls the zone list up. The NORM
         overlay is drawn if the zone list can be scrolled up. The ALT overlay 
         is drawn if the mouse is over the region AND a the zone list can be
         scrolled up. (For backward compatibility, if there is no NORM overlay
         defined, the ALT overlay is drawn if the zone list can be scrolled 
         up, so it doesn't change when moused over.)

ZONEDOWN This defines the "button" that scrolls the zone list down. The NORM
         overlay is drawn if the zone list can be scrolled down. The ALT 
         overlay is drawn if the mouse is over the region AND a the zone list 
         can be scrolled down. (For backward compatibility, if there is no NORM
         overlay defined, the ALT overlay is drawn if the zone list can be 
         scrolled down, so it doesn't change when moused over.)

PING     This defines the button that toggles ping number and graph. It is
         typically the ping heading for the zone list.

OPTIONS  This defines the button that invokes the options dialog.

ADVOPT   This defines the button that invokes the advanced options dialog.

PLAY     This defines the button that plays the game.

QUIT     This defines the button that quits the game.

=================================== COLORS ===================================

If any of the following color definitions are omitted from the skin definition,
the default color is used.

ZONECOLOR1    Color for text and ping graph bars of zones with low ping.

ZONECOLOR2    Color for text and ping graph bars of zones with medium ping.

ZONECOLOR3    Color for text and ping graph bars of zones with high ping.

ZONESELCOLOR1 Color of the current zone selection bar.

ZONESELCOLOR2 Color of the current zone selection bar outline. Make this the
              same as ZONESELCOLOR1 to make the selection bar a single color.

PROFILECOLOR1 Color for the profile name text.

PROFILECOLOR2 Color for the player name text.

PROFILECOLOR3 Color for the macro definition name text.

PROFILECOLOR4 Color for the key definition name text.

==================================== TIPS ====================================

TIP #1: Start your first skin with just a main region. Make sure it works in 
Continuum by itself. You won't be able to see any of the info since no other 
HOTSPOTS are defined, but at least you can see if the SKN file is working and 
that the size is correct.

TIP #2: Add entries to the TXT file a few at a time and test to see how it 
looks and how things fit and line up. The BMP file can be as complex as you
like, but if you find that you drew seomthing the wrong size you will have to 
go back to your image editor and redraw things, which may invalidate many 
sections of the TXT file.

TIP #3: If you are using an image editor that supports layers, keep EVERYTHING
in a separate layer. This will save you a lot of hassle later if you need to 
make major edits.

TIP #4: If you define non-rectangular regions (circles or rounded shapes), you
should be able to create a HOTSPOT that reasonably matches the shape with only
a few regions. So don't be afraid to use whatever shape looks best.

==================================== FAQ =====================================

Feel free to post comments and questions to the "Development Board" link at 
"http://www.subspacehq.com/".

================================ END OF FILE =================================