SkinColorizer Lite adds a menu to Sauerbraten that allows you to colorize individual parts of models without needing a modified client or image editor.
- Download the skincolorizer.zip (without extracting it).
- Move it to the root folder of your Sauerbraten (either the home folder or the main installation folder).
- Find your autoexec.cfg file or create a new one (also in one of the root folders), open it in a text editor, and add the following two commands:
addzip skincolorizer.zip; exec skincolorizer.cfg
This will load the zip file and execute its configuration file (skincolorizer.cfg) whenever you start the game.
To open the menu, type /skincolorizer
or /skincolorizerlite
in the game's chat console (T key by default).
Alternatively, in step 3, you can type the command /notepad autoexec.cfg
during the game to open the built-in text editor.
Unlike previous SnoutColorizer, this version allows you to color hands, weapons, projectiles, pickups, vweps and all playermodels.
-
These sliders change the color of the selected parts. When you click on a part, the value of each slider is updated with the stored values of that part. You can reset these values to default by clicking on the square showing the current color.
-
If enabled, this checkbox displays a slider that lets you control how bright the selected part is.
-
These buttons allow you to preview each team's model and move team-related parts to the top of the list. Clicking on the playermodel icons will have the same effect.
-
The filter field is used to move parts that match the input to the top of the list.
-
If the filter is empty, the Select button will target all parts of the selected playermodel.
SkinColorizer Lite works by intercepting skin commands (iqmskin, md3skin, md5skin...) directly in the configuration files of each model. To do this, simply add the skincolorizer
command before the skin command.
In some cases, the setskincolorizerdir
command must also be added before the *dir commands (iqmdir, md3dir, md5dir...) to display texture previews correctly in the menu.
In the available skincolorizer.zip, some models already have the necessary settings, so everything should work when you open the menu. However, if you want to add new models/parts:
For example, in packages/models/ammo/rockets/md3.cfg
:
md3load "../tris.md3"
md3skin * "skin.jpg" "masks.jpg"
mdlambient 50
mdlspec 150
mdlglare 0.1 1.0
becomes:
md3load "../tris.md3"
skincolorizer md3skin * "skin.jpg" "masks.jpg"
mdlambient 50
mdlspec 150
mdlglare 0.1 1.0
This addition allows the menu to get the information it needs to handle the colorization of each part.
-
SkinColorizer Lite uses dynamic variable identifiers to store and access data for each part. These identifiers follow the format:
$_skincolorizer_path:packages/models/snoutx10k|part:Upper|
When accessed, this variable returns the value:
[[R G B] texture is_selected brightness]
Storing information directly in the identifier makes filtering and displaying the data much easier. -
To apply the colors, it uses the
<mad>
prefix, which is part of a list of texture processing commands available in vanilla Sauerbraten. -
To display the changes without having to reload the client, it uses the
clearmodel
command.Clearmodel
only works for models that are currently loaded (with the exception of mapmodels). To work around this, each part is drawn individually in the menu using theguimodelpreview
command and remains there throughout the session, though kept out of view. This allows selected but undisplayed parts to still be affected by color changes. -
Not all textures for each part are located in the same directory as the .cfg file (accessible via
$mdlname
), so it first tries to use the path defined bysetskincolorizerdir
. If no valid texture is found, it will navigate backward in the file structure from the current$mdlname
using thefindfile
command until a match is found. If none is found, the small texture thumbnail will be replaced by a white texture, and an error message will be displayed in the console. This is usually fixed by revising thesetskincolorizerdir
command. -
Text colors in Sauerbraten are usually limited to the special characters
^f1
through^f8
, but this limitation does not apply to theguitextbox
command. Its fourth argument accepts any custom color value in the format 0xRRGGBB. -
Sauerbraten has a system for determining whether variables should be kept permanently (by writing them to the config.cfg file) or discarded when the client exits. By default, variables defined within model configuration files are not persistent.
Since the registration of parts happens through theskincolorizer
command, which is executed in the context of the model loader, it would normally be impossible to maintain changes between sessions. To work around this, SkinColorizer Lite uses two variables containing the same data: (A)$_skcl_all_model_aliases_temp
and (B)$_skcl_all_model_aliases
.
Variable A exists only during the session, while B is defined in a different scope and copies the values from A whenever there is a change to the model. If A exists, B copies its value when restarting the client.