Being able to replace the resources of Messenger is not enough to make a complete skinning system. You have to know what to replace exactly and the effects it will have on other windows of the program. Remember that a single image can be used in many places so you can't arbitrarily change one picture for one window without considering the global impact of the modification.
For that reason, Messenger Plus! offers a special feature integrated in Messenger called the Resource Extractor. As its name implies, this feature extracts all the resources from your version of Messenger, however, it does not stop there. The resources are also categorized, decrypted, analyzed and reformatted to be more understandable. All of this is done automatically and the whole process takes about a minute to complete.
The Resource Extractor can be found in the Preferences panel of Messenger Plus! (Customize!\Skins section). By default, all the resources will be extracted in a new directory in your documents, named with the version string of your Messenger. The only option not enabled by default concerns Messenger Plus!'s own resources. Leave this option unchecked until you read the Skinning Messenger Plus! Itself (keep that one for a later date). Also, note that if a hard-patch skin (a skin not made for Messenger Plus!) is installed on your Messenger, its resources will be extracted the same way but some of the more advanced analyses may not be achieved properly.
Once the resources are extracted, the log file of the operation called Extraction Log is automatically opened. You can quickly verify if everything went well by checking the last line of the log. This file sums-up some primary information regarding the extraction: version of Messenger Plus!, version and language of Messenger, number of resources extracted grouped by categories, result of each consolidation operation along with the name of the associated window if available, and finally, the number of pictures that were cross-referenced to generate the Picture Map file.
Directories and sub-directories are created for clarity reasons. Overall, you'll find four different kinds of files in these directories:
Raw resources. These are the resources as extracted from Messenger, untouched by Messenger Plus! (with the exception of decrypted resources, see below). Raw resources can be found in the Graphics and Windows directories and are generally named using this convention: file_type_id.ext. So for example, a bitmap with id 11103 extracted from Messenger's executable file will be named msgexe_bitmap_11103.bmp and a window's style sheet with id 920 extracted from Messenger's resources DLL will be named msgres_4005_920.txt or msgres_style_920.txt (style sheet's resource type were 4005 in previous versions of Messenger but you don't have to care about that).
One thing that discouraged many skinners in the recent releases of Messenger is the use of a proprietary RLE encryption system for pictures. Fortunately, Messenger Plus! deals with this and can successfully decrypt most of the encrypted files. In most cases, Messenger accepts both encrypted and un-encrypted picture files in its windows which means that you don't need to worry about the need to re-encrypt your pictures when replacing encrypted content. Most of the pictures decrypted by Messenger Plus! are not named in a particular way so you won't even know if the file was previously encrypted or not. Here are the known limitations of the current decryption system:
If you're among the more experienced skinners (or are working toward this goal), the consolidated windows files are exactly what you'll need to study to create skins that are truly different from the original Messenger layout. This subject is discussed in details in the Windows Definitions and Styles section. Here, you'll find a list of what exactly Messenger Plus! does to the files to make them more understandable. In the Consolidated Windows directory, you'll find a sub-directory for each window. If the name of the window is available in the style file, it is added to the name of the directory. For each window, a modified version of the definition file and the style sheet file is copied along with the associated pictures.
Changes made to Definition Files
Tabulation. All the lines in the definition files are tabulated based on their child level. This helps get a better understanding of the various groups of elements specified in each file.
The rest of the file is analyzed for various purposes (like the Picture Map file) but is not touched. Although skinners can add actual data into this file, Messenger concentrates most of its data into the associated style file of each window.
In Messenger 2009, Definition Files are also parsed like Style Files to detect resource references.
Changes made to Style Files
Tabulation. The lines of the style sheet files are also tabulated, using a much simpler pattern. One level of tabulation is added for all the lines included between brackets. This helps identify the styles more quickly.
Strings and Integers. References to the string tables (using rcstr and rcint) are replaced with the associated data. If a string includes escape codes or double quotes, it is included in commentaries only.
accdefaction:rcstr(20068) ® accdefaction:"Press"
fontsize:rcint(20074)pt ® fontsize:10pt
Rectangles. Many coordinates are de-referenced in style files (using rcrect). Messenger Plus! creates the appropriate readable code for each of them. Coordinates in the generated rect code are in this order: left, top, right, bottom.
padding:rcrect(20189) ® padding:rect(0,1,0,1)
Colors. Messenger uses many different kinds of internal methods to reference color (using rcclr and rcbkg). Messenger Plus! decrypts all of them and replaces the color with the appropriate RGB code when possible. The alpha channel is also specified when used by a color. Remember that some colors are variations of the user's chosen color (blue by default) and thus, cannot be expressed in RGB code. In that case, a comment is added to show the intensity of the colorized color.
bordercolor:rcclr(46604) ® bordercolor:rgb(152,151,139)
background:rcbkd(1458) ® background:argb(128,255,255,255) foreground:rcclr(20090) ® foreground:rcclr(20090) /* Colorized. I=128 */
Pictures. Images are referenced in many places (using rcimg and rcbkd). The problem with image tags is that they can also refer to something else than a picture, like colors (as seen above) or predefined Messenger brushes. Messenger Plus! does its best to detect which is which and adds a comment (text between /* */) when appropriate.
background:rcbkd(706) ® background:rcbkd(20203) /* not a picture */
And much more... everything is done to simplify the reading of the file as much as possible.
Note that because Messenger uses ANSI encoding for its style and definition files, string replacements applied in Messenger versions using extended character sets (such as Japanese) will produce files that are not readable by Messenger (the files will possibly be accepted on some systems and not others). In that case, Messenger won't be able to read the modified files if specified in a skin, the strings will need to be kept separated from those files.
Except for some minor limitations (like explained above), it is interesting to note that the consolidated versions of definition and style files are created to stay compatible with Messenger. This means that if needed, you can do your changes in the consolidated version of the file and use it in your skin without any problem. That being said, it is recommended to use this practice for testing purposes only, especially for style sheet files. Public versions of your skin should use the original raw version of the files with the appropriate modifications included into them. This ensures that compatibility with localized versions of Messenger (as well as with future updates) is kept at its maximum.
Although this section of the documentation may seem quite technical, you'll quickly get used to it while working on your skins. Don't give it too much thoughts in the beginning and just use this page as a reference when needed. All you need to remember is that you can count on Messenger Plus! to extract the resources of Messenger and present them to you in the best possible way. The main reason you'll generally want to look at the extracted files is to get the id of a resource you want to modify, whether it's a string, a picture, a window definition or anything else belonging to Messenger.
With that in mind, you're now ready to create your very first skin!