Changing colors and tints - XCOM:EU 2012

From Nexus Mods Wiki
Jump to: navigation, search


Overview

The material in this article has been derived from the Nexus XCOM Mod Talk thread Changing Armor Tint Starter Guide. It should be considered supplemental information to that presented in the wiki article Adding and changing art assets - XCOM:EU 2012 and is linked from that article.

The Unreal Game Engine can use both LinearColor, which is a floating-point RGBA structure, and Color, which uses fixed-point 8-bit RGBA. XCOM palettes, defined in the Startup.upk file as the UnitPalettes object, use LinearColor. With that knowledge, it's possible to work out how to change the color of Armor, Skin and Hair in XCOM, for both the vanilla game and mods, within reason.

This article presents a step by step tutorial to guide you through the process, using the popular Long War mod as the subject.

Some UPKUtils/PatcherGUI mods to simplify the implementation are also presented.

Those interested in changing colors of the "User Interface" are advised to read the short thread Hexadecimal Colour Values in Command1.UPK regarding what is involved.

Programs and Tools

Two tools will be required: a file Decompressor and a hex editor. Any comparable tools will do, but the ones used in the tutorial can be obtained through the links provided here:

Additional optional tools:

Details

UnitPalettes

A quick look at Startup.upk with the DeserializeAll utility (part of the UPKUtils package) found the UnitPalettes object.

UnitPalettes object has 10 child objects of XComLinearColorPalette type:

0x00000114 (276): XComLinearColorPalette'UnitPalettes.AfricanSkin'
0x00000115 (277): XComLinearColorPalette'UnitPalettes.ArmorTint'
0x00000116 (278): XComLinearColorPalette'UnitPalettes.AsianSkin'
0x00000117 (279): XComLinearColorPalette'UnitPalettes.CaucasianSkin'
0x00000118 (280): XComLinearColorPalette'UnitPalettes.EyeColor'
0x00000119 (281): XComLinearColorPalette'UnitPalettes.FormalClothesColor'
0x0000011A (282): XComLinearColorPalette'UnitPalettes.HairColor'
0x0000011B (283): XComLinearColorPalette'UnitPalettes.HispanicSkin'
0x0000011C (284): XComLinearColorPalette'UnitPalettes.PantsColor'
0x0000011D (285): XComLinearColorPalette'UnitPalettes.ShirtColor'

All 10 objects are ArchetypeObjects, i.e. contain a list of default properties only. So, they're easily readable and editable.

For an example, see the UnitPalettes.ArmorTint object in the #Separate Content section. It has 32 elements, each of which consists of a Primary and Secondary object of LinearColor type:

struct LinearColor
{
  var() config float R, G, B, A;
  structdefaultproperties
  {
     A=1.f
  }
};

The Primary color tint is used on weapons, bigger armor parts (chest / back plate, protective pads, partly belt, partly pants), MEC suit, hats and helmets. This is major color.

The Secondary color tint is used on smaller armor parts (usually covered with bigger parts, sometimes belt, partly pants) and hat / helmet parts (hat logos). It is not used on Titan, Ghost, Archangel, PSI, Gene Mod armor and MEC suit. This is minor color.

See also the wiki article Color_Palettes_-_XCOM:EU_2012 for more details.

SPC textures

XCOM uses SPC textures for a simulation of light's reflection and for armor/weapon color tinting. There are MaterialExpressionStaticSwitchParameter "Tinted?" and "2 Color Tinted?" entries within Master_Materials / CHH_Soldiers, but I am not sure if these are needed to activate the color tint or not.

There are also MaterialExpressionVectorParameter's descriptions:

  • CMODA - Uses Alpha of SPC Map
  • CMODB - Uses Blue Channel of SPC Map when Reflection is not active

Initial observation is, that SPC texture's are setup as:

  • Red channel contains a specular map.
  • Green channel needs clarification. It may contain other special effects such as a glow.
  • Blue channel contains Color Mod B data, the secondary color tint.
  • Alpha channel contains Color Mod A data, the primary color tint.

Here is an image of a lady wearing pink Kevlar armor with grey/black pants (changed by wghost's mod file) to illustrate the impact of these channels:
SPC Texture Channels
Image by Drakous79, used with permission under Creative Commons Attribution-Share Alike (CC BY-SA) license terms.

Tutorial

This is a basic guide for changing the color of Armor, Skin and Hair in XCom, using the Long War mod for EW as the case study.

(Note: This should work for vanilla XCom-EU and EW, but the "offset" starting locations for the search strings are not the same.)

Basic Armor colors

  • First step is to Decompress the startup.upk file in the XCom-Enemy-Unknown\XEW\XComGame\CookedPCConsole Folder.
    After you are all finished you don't need to recompress the file: simply replace the original startup.upk with the uncompressed file you just modded.
  • Delete the startup.upk.uncompressed_size file so the uncompressed file will get used.
  • Open it with the Hex Editor and you should see something similar to this:
    HxD Image
    Image by Dubiousintent, used with permission under Creative Commons Attribution-Share Alike (CC BY-SA) license terms.
    As long as your Bytes per row are 16, then we will be looking for row 00074B10. (This offset will be different in vanilla files.) You should see a series of numbers that go like this:

----   01 00 00 00 28 02 00 00 00 00 00 00 22 00 00 00 00 00 00 00 04 0D 00 00 00 00 00 00 20 00 00 00

  • This is the file Header that contains all of the armor codes.
    • 01 00 00 00 - Previous Object Reference
    The rest is an array Entries containing values for all 32 armor tints:
    • 28 02 00 00 00 00 00 00 - NameIdx Entries
    • 22 00 00 00 00 00 00 00 - TypeIdx ArrayProperty
    • 04 0D 00 00 - PropertySize 3332
    • 00 00 00 00 - ArrayIdx 0
    • 00 00 00 20 - NumElements 32
  • The next string looks like this:

 -----     DE 03 00 00 00 00 00 00 02 0B 00 00 00 00 00 00 10 00 00 00 00 00 00 00 40 03 00 00 00 00 00 00

  • This is the beginning of the individual armor container. Each container starts with DE 03 and will end with the closing container codes which look like this:

----  92 03 00 00 00 00 00 00

  • The closing string always starts with 92 03 and is only 8 Bytes long.
    This is a NameIdx: value of None, which closes the current entry in the Entries array.
    • 92 03 00 00 00 00 00 00 - NameIdx: None
  • In between these two strings are the armor codes of that container. The first is for the Primary color and the second is the Secondary color. Each string for the colors will be 16 Bytes. There are more numbers that sandwich these codes, mostly 0's: DON'T CHANGE THESE.
  • The container is an entry in the Entries array. For the Primary color tint it is:
    • DE 03 00 00 00 00 00 00 - NameIdx Primary
    • 02 0B 00 00 00 00 00 00 - TypeIdx StructProperty
    • 10 00 00 00 - PropertySize 16
    • 00 00 00 00 - ArrayIdx 0
    And for the Secondary color tint it is:
    • 92 04 00 00 00 00 00 00 - NameIdx Secondary (the secondary color tint)
    • 02 0B 00 00 00 00 00 00 - TypeIdx StructProperty
    • 10 00 00 00 - PropertySize 16
    • 00 00 00 00 - ArrayIdx 0
  • The string we're after will look like this:

---- 2B 22 59 3E FF 69 95 40 C1 EF B4 3E 00 00 80 41

  • (I can't use the actual first string due to the fact that they are already modded values in Long War.)
  • Each entry looks like:
    • 40 03 00 00 00 00 00 00 - InnerNameIdx LinearColor; interpreted as:
    • RR RR RR RR GG GG GG GG BB BB BB BB AA AA AA AA - 16 bytes, 4 floats - R, G, B, Alpha
  • Now, we are only interested in 6 Bytes: the THIRD and FOURTH Byte segments in each of the four groupings.
    Looking at the numbers above that would be 59 and 3E, 95 and 40, B4 and 3E.
    (I haven't seen the last four nor the first two in each segment do anything, so don't worry about them.)

This is tweaking the floating values for RGB values. And floats are written in little endian (backwards) so the last two bytes in each group of four bytes have the biggest influence.

What the Numbers DO:

  • These are the color and brightness values.
  • The Third number controls the brightness level: this is in standard hex code, so a low number such as 11 will give you a dark color and a high number like EE will make it brighter.
  • The Fourth number controls the saturation levels of the color; i.e. the intensity/shininess (dull to glossy).
    • The number values for this range from 3A (Black) to 40ish (Neon)
  • The numbers are arranged "Red", "Green", "Blue" (RGB), and "Alpha" (channel).
    So substituting these values for the bytes (separated pairs of characters) in the code string above in the positions indicated:

** ** ** 3F ** ** ** 3A ** ** ** 3A

will give you a bright red.

  • Note that going above a 3F with the fourth number, or color saturation level, you will get a Neon color and will not be able to adjust the brightness levels.

And that is that, but I did mention in the opening that you can do skin and hair too, so the next section is how to change them.

Hair and Skin colors

In the hex editor look for the following ranges to change their values.

  • For any palette other than Armor there are no Secondary codes, so these values are filled in with a bunch of cs:

cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 

This can actually make them fairly easy to spot.

(Note: 0xCCCCCCCC is a bit pattern used to initialize stack variables. It means that all the values with this pattern were never initialized by programmers and are probably never used at all.)

  • The following values are for where you will see the first DE in the color container. Simply follow the line to the beginning segment of numbers after that:
    • SKIN - RACE 1 - 00075AC0
    • SKIN - RACE 3 - 00075870
    • SKIN - RACE 4 - 00077100
    • HAIR - - - - 00076790
    • SKIN - RACE 2 - 00074870
    (The values for Race 2 have already been modded some. There have been two added, the last do NOT have the cc cc Secondary codes. In fact, they don't have ANY secondary codes, so just mod each string as it's own segment.)

Here is a screenshot I took.
Example of XCOM armor color changing results.
Image by rdngmikey, used with permission under Creative Commons Attribution-Share Alike (CC BY-SA) license terms.

Calculating any color

Here is the formula for finding any color you want.

First, see the ASCII number chart Hexadecimal table of ASCII codes in the #Separate Content section for the hex value. There is also a link to a free online service with an interactive color wheel of the "web safe" 216-Color palette there as well. Just click on a color and it will display the Hex, RGB, and CMYK codes for that color. Or, if you prefer, a chart of the HTML hex and decimal RGB color codes over the colored background is also linked.

Take the hex number, say for Goldenrod: (DAA520), and break out the RGB colors. We'll start with Red.

Red:

  • DAA520
  • DA=218

Now we are going to assign values to those used in game (3A-3F): 0=3A, 1=3B, 2=3C, 3=3D, 4=3E, 5=3F.

Now since there are 256 hex values and 6 in game values (for the fourth pair) we are going to divide 256 by 6 = 42.66.

Now we are going to divide the above value by 42.66:

218/42.5=5.1094

The first number is going to be assigned to the fourth pairing: 5=3F

The rest of the number is going into the third pair.

First we are going to multiply by 100 to get the number we want.

.1094*100=10.94

Now we are going to multiply by 2.56 (256/100)

10.94*2.56=28

We are now going to convert this into Hex:

28=1C

That is our third pair.

I'll now do the math without all of the talking for Green

Green:

  • DAA520
  • A5=165; 165/42.66=3.86779; 3=3D (fourth pair)
  • .86779*100=86.779; 86.779*2.56=222; 222=DE (third pair)

Blue:

  • DAA520
  • 20=32; 32/42.66=0.75; 0=3A (fourth pair)
  • .75*100=75; 75*2.56=192; 192=CO (third pair)

And here is Orchid without the math- DA70D6

** ** 1C 3F ** ** A0 3C ** ** 04 3F

And here what they look like.
Example of XCOM color calculation results.
Image by rdngmikey, used with permission under Creative Commons Attribution-Share Alike (CC BY-SA) license terms.

If you'll notice: the pawn on the right has a different skin color than his head. The reason is because it's one of the "EasterEgg" Hero custom characters, based on one of the creators (Ken Levine) of the game. You can't change those faces at all. The custom heads are 15, 16, 17, and 18 (15 is Sid Meier, if you've ever wondered what he looks like). These Hero's can be activated by simply entering their names as the "nickname" of any new character. See XComStrategyGame.upk article for the complete list and where they are located in the game files.

  • The correct formula for converting floating numbers to RGB is:

round(float * 255) // float to RGB
RGB / 255 // RGB to float

("//" indicates comments that are ignored) This produces the expected results, assuming "0.0" = "RGB 0" and "1.0" = "RGB 255".

If you want to use any numbers above 1.0, you don't actually have to put in the decimal. Just put in the whole number you want to use.

<%f 2> <%f 0> <%f 3> <%f 1.0>

Gives you bright, not quite neon, purple.

Apparently, LinearColor uses these floating point numbers to represent RGBA values in percentages. Values greater than 1 (100%) increase color intensity and A (alpha channel) should affect color opacity.

As for maximum possible values: 4-byte floating point numbers have a range of at least (1e-37; 1e+37) in C++. But the Unreal Engine might clamp RGBA values internally, so increasing values might stop giving effect at some point.

Alpha can be straight or premultiplied. In the case of straight alpha RGB, values are multiplied by A before composing. Premultiplied alpha already has RGB values multiplied by A (to avoid additional multiplications) and in this case A isn't actually used to compose an image.


Observation:

All the translated RGB sets are probably Lightened by a(nother!) tricky specular Layer applied to the Model-Texturing at run-time. Most of the Hues were darker than the actual pictures. So, experimented with HSL sliders and discovered that a majority of these Hues are (re-)approximated to the real thing when added between 50 to 80% Lightness (Which *IS* a darkening method, btw).

Thus the conclusion that a specular process is in use. There's also the ambient reflection that may interfere with perceived variables... but that has to do with how everyone considers a valid color within the game "spectrum" range -- so to speak.

Which proves observations with the screenshot that matches Texture "Channels" with actual rendering above.

Soooooo... as a guide -- if someone were to select a specific coloring schema for any given number of extra tints as wished for, they'd have to use some basic source palette and simply throw in various amounts of "darkened" effects (Mostly Hue & Lightness) to obtain the nearest equivalent values to calculate the necessary PatcherGUI equation (see mods below). It's still a matter of guess'timates but better than nothing!

Separate Content

Reference Tables

Deserialize UnitPalettes.ArmorTint

  • The UnitPalettes.ArmorTint object can be deserialized into:

0x00000115 (277): XComLinearColorPalette'UnitPalettes.ArmorTint'
    TypeRef: 0xFFFFFFE5 -> XComLinearColorPalette
    ParentClassRef: 0x00000000 ->
    OwnerRef: 0x000000B4 -> UnitPalettes
    NameIdx: 0x00000021 (Index) 0x00000000 (Numeric) -> ArmorTint
    ArchetypeRef: 0x00000000 ->
    ObjectFlagsH: 0x00000400
        0x00000400: ArchetypeObject
    ObjectFlagsL: 0x000F0005
        0x00000001: Transactional
        0x00000004: Public
        0x00010000: LoadForClient
        0x00020000: LoadForServer
        0x00040000: LoadForEdit
        0x00080000: Standalone
    SerialSize: 0x00000D44 (3396)
    SerialOffset: 0x00074B19
    ExportFlags: 0x00000001
        0x00000001: ForcedExport
    NetObjectCount: 0
    GUID: 00000000000000000000000000000000
    Unknown1: 0x00000000
UObject:
    PrevObjRef = 0x00000001 -> DOFAndBloomEffect_0
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x00000228 (Index) 0x00000000 (Numeric) -> Entries
    TypeIdx: 0x00000022 (Index) 0x00000000 (Numeric) -> ArrayProperty
    PropertySize: 0x00000D04
    ArrayIdx: 0x00000000
    NumElements = 0x00000020 = 32
    ArrayInnerType = None
    Entries[0]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E9CFF3B, 0x3E116348, 0x3D17AB36, 0x3F800000) = (0.306635, 0.14198, 0.0370285, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D5F9C27, 0x3D367CD1, 0x3BB4EFC1, 0x3F800000) = (0.0545923, 0.0445526, 0.00552174, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[1]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E0B5D6B, 0x3E59222B, 0x3E59222B, 0x3F800000) = (0.136099, 0.212044, 0.212044, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E3F79EA, 0x3DD43E1D, 0x3D0C34F9, 0x3F800000) = (0.186989, 0.103634, 0.0342302, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[2]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D587076, 0x3D86A9F8, 0x3C78A190, 0x3F800000) = (0.0528416, 0.0657539, 0.0151752, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3ECBA938, 0x3EC3846E, 0x3E190953, 0x3F800000) = (0.397775, 0.38187, 0.14945, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[3]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EC1E1DB, 0x3E0B5D6B, 0x3C42A9EE, 0x3F800000) = (0.378676, 0.136099, 0.0118813, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D0C34F9, 0x3D17AB36, 0x3D1D9599, 0x3F800000) = (0.0342302, 0.0370285, 0.0384727, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[4]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EEB0C85, 0x3EE54F54, 0x3EDFA5EC, 0x3F800000) = (0.45908, 0.447871, 0.436813, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3C258ED8, 0x3C2F240F, 0x3C350832, 0x3F800000) = (0.0101049, 0.0106897, 0.0110493, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[5]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E59222B, 0x3B9569FF, 0x3BB4EFC1, 0x3F800000) = (0.212044, 0.00455975, 0.00552174, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D06A8E6, 0x3D0C34F9, 0x3D1D9599, 0x3F800000) = (0.0328759, 0.0342302, 0.0384727, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[6]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EF0DD8B, 0x3EAB3E0E, 0x3D1D9599, 0x3F800000) = (0.47044, 0.334458, 0.0384727, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D013C08, 0x3CABA1B5, 0x3D1D9599, 0x3F800000) = (0.0315514, 0.0209511, 0.0384727, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[7]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D301326, 0x3E4A41BF, 0x3E849F3B, 0x3F800000) = (0.042987, 0.197516, 0.259027, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3DCA1D90, 0x3D367CD1, 0x3BD7C6A0, 0x3F800000) = (0.0986892, 0.0445526, 0.00658496, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[8]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D43B082, 0x3D4A7ABD, 0x3CD97CA0, 0x3F800000) = (0.0477758, 0.0494335, 0.0265487, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E67F27F, 0x3E5CE197, 0x3E358EF3, 0x3F800000) = (0.226511, 0.215704, 0.177303, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[9]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3C2A5B8B, 0x3C1EDD5A, 0x3C2A5B8B, 0x3F800000) = (0.0103978, 0.00969633, 0.0103978, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F5B37EC, 0x3F581052, 0x3F4F1B7D, 0x3F800000) = (0.856322, 0.843999, 0.809013, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[10]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3BC30F86, 0x3C6AB35A, 0x3CE24A3E, 0x3F800000) = (0.00595278, 0.014325, 0.0276233, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F4A8361, 0x3F515523, 0x3F60E02E, 0x3F800000) = (0.791067, 0.817705, 0.878421, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[11]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D013C08, 0x3D013C08, 0x3DF440B1, 0x3F800000) = (0.0315514, 0.0315514, 0.119264, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3CE24A3E, 0x3CCA8964, 0x3CCA8964, 0x3F800000) = (0.0276233, 0.0247237, 0.0247237, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[12]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E1DDA17, 0x3D06A8E6, 0x3E828455, 0x3F800000) = (0.154152, 0.0328759, 0.254916, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F25431C, 0x3F25431C, 0x3F25431C, 0x3F800000) = (0.645555, 0.645555, 0.645555, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[13]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F2FE140, 0x3D82B15F, 0x3E4DEC0A, 0x3F800000) = (0.687031, 0.0638149, 0.201096, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F25431C, 0x3F25431C, 0x3F25431C, 0x3F800000) = (0.645555, 0.645555, 0.645555, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[14]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3CB45499, 0x3CABA1B5, 0x3CABA1B5, 0x3F800000) = (0.022013, 0.0209511, 0.0209511, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F57E714, 0x3F0DE1D4, 0x3CBD43AB, 0x3F800000) = (0.84337, 0.554227, 0.0231036, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[15]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F57E714, 0x3F0DE1D4, 0x3CBD43AB, 0x3F800000) = (0.84337, 0.554227, 0.0231036, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3CB45499, 0x3CABA1B5, 0x3CABA1B5, 0x3F800000) = (0.022013, 0.0209511, 0.0209511, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[16]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3C6A76AB, 0x3CC66F31, 0x3D4A7ABD, 0x3F800000) = (0.0143105, 0.0242229, 0.0494335, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E9CFF3B, 0x3E93DFB0, 0x3E8B0C32, 0x3F800000) = (0.306635, 0.288816, 0.271577, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[17]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EB29E69, 0x3A82128E, 0x3B00ACA8, 0x3F800000) = (0.348865, 0.000992374, 0.00196342, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F796BBD, 0x3F4C02B9, 0x00000000, 0x3F800000) = (0.9743, 0.796917, 0, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[18]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3C5CBF86, 0x3CA32ABC, 0x3EDA1042, 0x3F800000) = (0.0134734, 0.0199178, 0.425905, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F800000, 0x3EDA1042, 0x00000000, 0x3F800000) = (1, 0.425905, 0, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[19]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3ECF1FFA, 0x3D75E3B4, 0x3D17AB36, 0x3F800000) = (0.404541, 0.0600316, 0.0370285, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3C5CBF86, 0x3E147393, 0x3DE94F61, 0x3F800000) = (0.0134734, 0.144972, 0.113921, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[20]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3BA4C3A1, 0x3CBD43AB, 0x3DFF782E, 0x3F800000) = (0.0050282, 0.0231036, 0.124741, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E96206D, 0x3D367CD1, 0x3B58722A, 0x3F800000) = (0.293216, 0.0445526, 0.0033027, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[21]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3BC5F02C, 0x3C9AEF67, 0x3C9AEF67, 0x3F800000) = (0.00604059, 0.018913, 0.018913, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3D5F9C27, 0x3C9AEF67, 0x3C42A9EE, 0x3F800000) = (0.0545923, 0.018913, 0.0118813, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[22]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EF9BC5C, 0x3EAB3E0E, 0x3DB6AB16, 0x3F800000) = (0.487765, 0.334458, 0.0891935, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3DEEBF48, 0x3DC5272C, 0x3D8ECD13, 0x3F800000) = (0.116576, 0.0962661, 0.0697271, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[23]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3DE94F61, 0x3ADD1B7C, 0x3DA8C8C7, 0x3F800000) = (0.113921, 0.00168692, 0.0824142, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E60C9C7, 0x3E8F6C76, 0x3B58722A, 0x3F800000) = (0.21952, 0.280124, 0.0033027, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[24]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F59EBA1, 0x00000000, 0x3E88E328, 0x3F800000) = (0.851252, 0, 0.267358, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x00000000, 0x3EDCD8A0, 0x3F600904, 0x3F800000) = (0, 0.43134, 0.875138, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[25]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F800000, 0x3EA66B3F, 0x00000000, 0x3F800000) = (1, 0.325037, 0, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EA4090D, 0x00000000, 0x3F800000, 0x3F800000) = (0.320382, 0, 1, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[26]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E0867D0, 0x3E0867D0, 0x00000000, 0x3F800000) = (0.133209, 0.133209, 0, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E0867D0, 0x3CED7EED, 0x00000000, 0x3F800000) = (0.133209, 0.0289912, 0, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[27]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E60C9C7, 0x3E9AB031, 0x3EA4090D, 0x3F800000) = (0.21952, 0.302125, 0.320382, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F111A71, 0x3F160253, 0x3F091FCF, 0x3F800000) = (0.56681, 0.585973, 0.535642, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[28]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3EF3CD82, 0x3ED1D4AE, 0x3E9AB031, 0x3F800000) = (0.476177, 0.409826, 0.302125, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F796BBD, 0x3F685503, 0x3F51E924, 0x3F800000) = (0.9743, 0.907547, 0.819964, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[29]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E806E22, 0x3E27916C, 0x3D8ECD13, 0x3F800000) = (0.25084, 0.163641, 0.0697271, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3F201697, 0x3EE54F54, 0x3E806E22, 0x3F800000) = (0.625345, 0.447871, 0.25084, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[30]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3DD43E1D, 0x3E789F9B, 0x3D86A9F8, 0x3F800000) = (0.103634, 0.242796, 0.0657539, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3E806E22, 0x3EDCD8A0, 0x3E555C3C, 0x3F800000) = (0.25084, 0.43134, 0.20836, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
    Entries[31]:
Unsafe guess (it's a Property List):
UDefaultPropertiesList:
UDefaultProperty:
    NameIdx: 0x000003DE (Index) 0x00000000 (Numeric) -> Primary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3CB50832, 0x3CB50832, 0x3CB50832, 0x3F800000) = (0.0220986, 0.0220986, 0.0220986, 1)
UDefaultProperty:
    NameIdx: 0x00000492 (Index) 0x00000000 (Numeric) -> Secondary
    TypeIdx: 0x00000B02 (Index) 0x00000000 (Numeric) -> StructProperty
    PropertySize: 0x00000010
    ArrayIdx: 0x00000000
    InnerNameIdx: 0x00000340 (Index) 0x00000000 (Numeric) -> LinearColor
    LinearColor (R, G, B, A) = (0x3DE24A3E, 0x3DE24A3E, 0x3DE24A3E, 0x3F800000) = (0.110493, 0.110493, 0.110493, 1)
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None
UDefaultProperty:
    NameIdx: 0x00000055 (Index) 0x00000000 (Numeric) -> BaseOptions
    TypeIdx: 0x0000030E (Index) 0x00000000 (Numeric) -> IntProperty
    PropertySize: 0x00000004
    ArrayIdx: 0x00000000
    Integer: 0x00000020 = 32
UDefaultProperty:
    NameIdx: 0x00000392 (Index) 0x00000000 (Numeric) -> None

Alternate View of Deserialize UnitPalettes.ArmorTint

A "cleaned up" version of the deserialized results is presented here:

FROM: wghost81's extract CODE
Summary...

REF; 0x00000115 (277): XComLinearColorPalette'UnitPalettes.ArmorTint' NumElements = 0x00000020 = 32
************
Entries[0]: -> Primary (R, G, B, A) = (0x3D17AB36, 0x3E116348, 0x3E9CFF3B, 0x3F800000) = (0.0370285, 0.14198, 0.306635, 1) -> Secondary (R, G, B, A) = (0x3BB4EFC1, 0x3D367CD1, 0x3D5F9C27, 0x3F800000) = (0.00552174, 0.0445526, 0.0545923, 1)
Entries[1]: -> Primary (R, G, B, A) = (0x3E59222B, 0x3E59222B, 0x3E0B5D6B, 0x3F800000) = (0.212044, 0.212044, 0.136099, 1) -> Secondary (R, G, B, A) = (0x3D0C34F9, 0x3DD43E1D, 0x3E3F79EA, 0x3F800000) = (0.0342302, 0.103634, 0.186989, 1)
Entries[2]: -> Primary (R, G, B, A) = (0x3C78A190, 0x3D86A9F8, 0x3D587076, 0x3F800000) = (0.0151752, 0.0657539, 0.0528416, 1) -> Secondary (R, G, B, A) = (0x3E190953, 0x3EC3846E, 0x3ECBA938, 0x3F800000) = (0.14945, 0.38187, 0.397775, 1)
Entries[3]: -> Primary (R, G, B, A) = (0x3C42A9EE, 0x3E0B5D6B, 0x3EC1E1DB, 0x3F800000) = (0.0118813, 0.136099, 0.378676, 1) -> Secondary (R, G, B, A) = (0x3D1D9599, 0x3D17AB36, 0x3D0C34F9, 0x3F800000) = (0.0384727, 0.0370285, 0.0342302, 1)
Entries[4]: -> Primary (R, G, B, A) = (0x3EDFA5EC, 0x3EE54F54, 0x3EEB0C85, 0x3F800000) = (0.436813, 0.447871, 0.45908, 1) -> Secondary (R, G, B, A) = (0x3C350832, 0x3C2F240F, 0x3C258ED8, 0x3F800000) = (0.0110493, 0.0106897, 0.0101049, 1)
Entries[5]: -> Primary (R, G, B, A) = (0x3BB4EFC1, 0x3B9569FF, 0x3E59222B, 0x3F800000) = (0.00552174, 0.00455975, 0.212044, 1) -> Secondary (R, G, B, A) = (0x3D1D9599, 0x3D0C34F9, 0x3D06A8E6, 0x3F800000) = (0.0384727, 0.0342302, 0.0328759, 1)
Entries[6]: -> Primary (R, G, B, A) = (0x3D1D9599, 0x3EAB3E0E, 0x3EF0DD8B, 0x3F800000) = (0.0384727, 0.334458, 0.47044, 1) -> Secondary (R, G, B, A) = (0x3D1D9599, 0x3CABA1B5, 0x3D013C08, 0x3F800000) = (0.0384727, 0.0209511, 0.0315514, 1)
Entries[7]: -> Primary (R, G, B, A) = (0x3E849F3B, 0x3E4A41BF, 0x3D301326, 0x3F800000) = (0.259027, 0.197516, 0.042987, 1) -> Secondary (R, G, B, A) = (0x3BD7C6A0, 0x3D367CD1, 0x3DCA1D90, 0x3F800000) = (0.00658496, 0.0445526, 0.0986892, 1)
Entries[8]: -> Primary (R, G, B, A) = (0x3CD97CA0, 0x3D4A7ABD, 0x3D43B082, 0x3F800000) = (0.0265487, 0.0494335, 0.0477758, 1) -> Secondary (R, G, B, A) = (0x3E358EF3, 0x3E5CE197, 0x3E67F27F, 0x3F800000) = (0.177303, 0.215704, 0.226511, 1)
Entries[9]: -> Primary (R, G, B, A) = (0x3C2A5B8B, 0x3C1EDD5A, 0x3C2A5B8B, 0x3F800000) = (0.0103978, 0.00969633, 0.0103978, 1) -> Secondary (R, G, B, A) = (0x3F4F1B7D, 0x3F581052, 0x3F5B37EC, 0x3F800000) = (0.809013, 0.843999, 0.856322, 1)
Entries[10]: -> Primary (R, G, B, A) = (0x3CE24A3E, 0x3C6AB35A, 0x3BC30F86, 0x3F800000) = (0.0276233, 0.014325, 0.00595278, 1) -> Secondary (R, G, B, A) = (0x3F60E02E, 0x3F515523, 0x3F4A8361, 0x3F800000) = (0.878421, 0.817705, 0.791067, 1)
Entries[11]: -> Primary (R, G, B, A) = (0x3DF440B1, 0x3D013C08, 0x3D013C08, 0x3F800000) = (0.119264, 0.0315514, 0.0315514, 1) -> Secondary (R, G, B, A) = (0x3CCA8964, 0x3CCA8964, 0x3CE24A3E, 0x3F800000) = (0.0247237, 0.0247237, 0.0276233, 1)
Entries[12]: -> Primary (R, G, B, A) = (0x3E828455, 0x3D06A8E6, 0x3E1DDA17, 0x3F800000) = (0.254916, 0.0328759, 0.154152, 1) -> Secondary (R, G, B, A) = (0x3F25431C, 0x3F25431C, 0x3F25431C, 0x3F800000) = (0.645555, 0.645555, 0.645555, 1)
Entries[13]: -> Primary (R, G, B, A) = (0x3E4DEC0A, 0x3D82B15F, 0x3F2FE140, 0x3F800000) = (0.201096, 0.0638149, 0.687031, 1) -> Secondary (R, G, B, A) = (0x3F25431C, 0x3F25431C, 0x3F25431C, 0x3F800000) = (0.645555, 0.645555, 0.645555, 1)
Entries[14]: -> Primary (R, G, B, A) = (0x3CABA1B5, 0x3CABA1B5, 0x3CB45499, 0x3F800000) = (0.0209511, 0.0209511, 0.022013, 1) -> Secondary (R, G, B, A) = (0x3CBD43AB, 0x3F0DE1D4, 0x3F57E714, 0x3F800000) = (0.0231036, 0.554227, 0.84337, 1)
Entries[15]: -> Primary (R, G, B, A) = (0x3CBD43AB, 0x3F0DE1D4, 0x3F57E714, 0x3F800000) = (0.0231036, 0.554227, 0.84337, 1) -> Secondary (R, G, B, A) = (0x3CABA1B5, 0x3CABA1B5, 0x3CB45499, 0x3F800000) = (0.0209511, 0.0209511, 0.022013, 1)
Entries[16]: -> Primary (R, G, B, A) = (0x3D4A7ABD, 0x3CC66F31, 0x3C6A76AB, 0x3F800000) = (0.0494335, 0.0242229, 0.0143105, 1) -> Secondary (R, G, B, A) = (0x3E8B0C32, 0x3E93DFB0, 0x3E9CFF3B, 0x3F800000) = (0.271577, 0.288816, 0.306635, 1)
Entries[17]: -> Primary (R, G, B, A) = (0x3B00ACA8, 0x3A82128E, 0x3EB29E69, 0x3F800000) = (0.00196342, 0.000992374, 0.348865, 1) -> Secondary (R, G, B, A) = (0x00000000, 0x3F4C02B9, 0x3F796BBD, 0x3F800000) = (0, 0.796917, 0.9743, 1)
Entries[18]: -> Primary (R, G, B, A) = (0x3EDA1042, 0x3CA32ABC, 0x3C5CBF86, 0x3F800000) = (0.425905, 0.0199178, 0.0134734, 1) -> Secondary (R, G, B, A) = (0x00000000, 0x3EDA1042, 0x3F800000, 0x3F800000) = (0, 0.425905, 1, 1)
Entries[19]: -> Primary (R, G, B, A) = (0x3D17AB36, 0x3D75E3B4, 0x3ECF1FFA, 0x3F800000) = (0.0370285, 0.0600316, 0.404541, 1) -> Secondary (R, G, B, A) = (0x3DE94F61, 0x3E147393, 0x3C5CBF86, 0x3F800000) = (0.113921, 0.144972, 0.0134734, 1)
Entries[20]: -> Primary (R, G, B, A) = (0x3DFF782E, 0x3CBD43AB, 0x3BA4C3A1, 0x3F800000) = (0.124741, 0.0231036, 0.0050282, 1) -> Secondary (R, G, B, A) = (0x3B58722A, 0x3D367CD1, 0x3E96206D, 0x3F800000) = (0.0033027, 0.0445526, 0.293216, 1)
Entries[21]: -> Primary (R, G, B, A) = (0x3C9AEF67, 0x3C9AEF67, 0x3BC5F02C, 0x3F800000) = (0.018913, 0.018913, 0.00604059, 1) -> Secondary (R, G, B, A) = (0x3C42A9EE, 0x3C9AEF67, 0x3D5F9C27, 0x3F800000) = (0.0118813, 0.018913, 0.0545923, 1)
Entries[22]: -> Primary (R, G, B, A) = (0x3DB6AB16, 0x3EAB3E0E, 0x3EF9BC5C, 0x3F800000) = (0.0891935, 0.334458, 0.487765, 1) -> Secondary (R, G, B, A) = (0x3D8ECD13, 0x3DC5272C, 0x3DEEBF48, 0x3F800000) = (0.0697271, 0.0962661, 0.116576, 1)
Entries[23]: -> Primary (R, G, B, A) = (0x3DA8C8C7, 0x3ADD1B7C, 0x3DE94F61, 0x3F800000) = (0.0824142, 0.00168692, 0.113921, 1) -> Secondary (R, G, B, A) = (0x3B58722A, 0x3E8F6C76, 0x3E60C9C7, 0x3F800000) = (0.0033027, 0.280124, 0.21952, 1)
Entries[24]: -> Primary (R, G, B, A) = (0x3E88E328, 0x00000000, 0x3F59EBA1, 0x3F800000) = (0.267358, 0, 0.851252, 1) -> Secondary (R, G, B, A) = (0x3F600904, 0x3EDCD8A0, 0x00000000, 0x3F800000) = (0.875138, 0.43134, 0, 1)
Entries[25]: -> Primary (R, G, B, A) = (0x00000000, 0x3EA66B3F, 0x3F800000, 0x3F800000) = (0, 0.325037, 1, 1) -> Secondary (R, G, B, A) = (0x3F800000, 0x00000000, 0x3EA4090D, 0x3F800000) = (1, 0, 0.320382, 1)
Entries[26]: -> Primary (R, G, B, A) = (0x00000000, 0x3E0867D0, 0x3E0867D0, 0x3F800000) = (0, 0.133209, 0.133209, 1) -> Secondary (R, G, B, A) = (0x00000000, 0x3CED7EED, 0x3E0867D0, 0x3F800000) = (0, 0.0289912, 0.133209, 1)
Entries[27]: -> Primary (R, G, B, A) = (0x3EA4090D, 0x3E9AB031, 0x3E60C9C7, 0x3F800000) = (0.320382, 0.302125, 0.21952, 1) -> Secondary (R, G, B, A) = (0x3F091FCF, 0x3F160253, 0x3F111A71, 0x3F800000) = (0.535642, 0.585973, 0.56681, 1)
Entries[28]: -> Primary (R, G, B, A) = (0x3E9AB031, 0x3ED1D4AE, 0x3EF3CD82, 0x3F800000) = (0.302125, 0.409826, 0.476177, 1) -> Secondary (R, G, B, A) = (0x3F51E924, 0x3F685503, 0x3F796BBD, 0x3F800000) = (0.819964, 0.907547, 0.9743, 1)
Entries[29]: -> Primary (R, G, B, A) = (0x3D8ECD13, 0x3E27916C, 0x3E806E22, 0x3F800000) = (0.0697271, 0.163641, 0.25084, 1) -> Secondary (R, G, B, A) = (0x3E806E22, 0x3EE54F54, 0x3F201697, 0x3F800000) = (0.25084, 0.447871, 0.625345, 1)
Entries[30]: -> Primary (R, G, B, A) = (0x3D86A9F8, 0x3E789F9B, 0x3DD43E1D, 0x3F800000) = (0.0657539, 0.242796, 0.103634, 1) -> Secondary (R, G, B, A) = (0x3E555C3C, 0x3EDCD8A0, 0x3E806E22, 0x3F800000) = (0.20836, 0.43134, 0.25084, 1)
Entries[31]: -> Primary (R, G, B, A) = (0x3CB50832, 0x3CB50832, 0x3CB50832, 0x3F800000) = (0.0220986, 0.0220986, 0.0220986, 1) -> Secondary (R, G, B, A) = (0x3DE24A3E, 0x3DE24A3E, 0x3DE24A3E, 0x3F800000) = (0.110493, 0.110493, 0.110493, 1)
************

Visual Reference of Armor Indexes

This "contact sheet" serves as a visual summary of the color associated with each Armor type's array index value. The UI display "spinner" adds one to this index value.
Armor Array Index Reference
Image by Zyxpsilon. Used with permission under Creative Commons Attribution-Share Alike (CC BY-SA) license terms.

See also the wiki article Initial soldier appearance for Hair/Helmet index values as well.

PatcherGUI Mods

These are some color change mods written to be implemented using the UPKUtils/PatcherGUI mod utility. Use v5.1 or later.

This collection of mods covers everything in the UnitPalettes Object file.

Note that the labels in "<angle brackets>" are NameTable references; how DefaultProperties are serialized.

  • These NameTable references are required elements.
  • The <None> reference terminates the current section.
  • The DefaultProperties format is described in the UPK_Format document, which is a part of the UPKUtils downloads.

ArmorTint colors

Here's a PatcherGUI mod file by wghost81 to change all 32 ArmorTint colors:

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.ArmorTint REL_OFFSET=32 [MODDED_CODE] // Entries[0]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.306635> <%f 0.14198> <%f 0.0370285> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0545923> <%f 0.0445526> <%f 0.00552174> <%f 1> // (R, G, B, A) <None>
// Entries[1]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.136099> <%f 0.212044> <%f 0.212044> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.186989> <%f 0.103634> <%f 0.0342302> <%f 1> // (R, G, B, A) <None>
// Entries[2]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0528416> <%f 0.0657539> <%f 0.0151752> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.397775> <%f 0.38187> <%f 0.14945> <%f 1> // (R, G, B, A) <None>
// Entries[3]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.378676> <%f 0.136099> <%f 0.0118813> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0342302> <%f 0.0370285> <%f 0.0384727> <%f 1> // (R, G, B, A) <None>
// Entries[4]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.45908> <%f 0.447871> <%f 0.436813> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0101049> <%f 0.0106897> <%f 0.0110493> <%f 1> // (R, G, B, A) <None>
// Entries[5]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.212044> <%f 0.00455975> <%f 0.00552174> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0328759> <%f 0.0342302> <%f 0.0384727> <%f 1> // (R, G, B, A) <None>
// Entries[6]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.47044> <%f 0.334458> <%f 0.0384727> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0315514> <%f 0.0209511> <%f 0.0384727> <%f 1> // (R, G, B, A) <None>
// Entries[7]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.042987> <%f 0.197516> <%f 0.259027> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0986892> <%f 0.0445526> <%f 0.00658496> <%f 1> // (R, G, B, A) <None>
// Entries[8]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0477758> <%f 0.0494335> <%f 0.0265487> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.226511> <%f 0.215704> <%f 0.177303> <%f 1> // (R, G, B, A) <None>
// Entries[9]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0103978> <%f 0.00969633> <%f 0.0103978> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.856322> <%f 0.843999> <%f 0.809013> <%f 1> // (R, G, B, A) <None>
// Entries[10]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.00595278> <%f 0.014325> <%f 0.0276233> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.791067> <%f 0.817705> <%f 0.878421> <%f 1> // (R, G, B, A) <None>
// Entries[11]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0315514> <%f 0.0315514> <%f 0.119264> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0276233> <%f 0.0247237> <%f 0.0247237> <%f 1> // (R, G, B, A) <None>
// Entries[12]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.154152> <%f 0.0328759> <%f 0.254916> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.645555> <%f 0.645555> <%f 0.645555> <%f 1> // (R, G, B, A) <None>
// Entries[13]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.687031> <%f 0.0638149> <%f 0.201096> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.645555> <%f 0.645555> <%f 0.645555> <%f 1> // (R, G, B, A) <None>
// Entries[14]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.022013> <%f 0.0209511> <%f 0.0209511> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.84337> <%f 0.554227> <%f 0.0231036> <%f 1> // (R, G, B, A) <None>
// Entries[15]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.84337> <%f 0.554227> <%f 0.0231036> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.022013> <%f 0.0209511> <%f 0.0209511> <%f 1> // (R, G, B, A) <None>
// Entries[16]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0143105> <%f 0.0242229> <%f 0.0494335> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.306635> <%f 0.288816> <%f 0.271577> <%f 1> // (R, G, B, A) <None>
// Entries[17]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.348865> <%f 0.000992374> <%f 0.00196342> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.9743> <%f 0.796917> <%f 0> <%f 1> // (R, G, B, A) <None>
// Entries[18]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0134734> <%f 0.0199178> <%f 0.425905> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1> <%f 0.425905> <%f 0> <%f 1> // (R, G, B, A) <None>
// Entries[19]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.404541> <%f 0.0600316> <%f 0.0370285> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0134734> <%f 0.144972> <%f 0.113921> <%f 1> // (R, G, B, A) <None>
// Entries[20]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0050282> <%f 0.0231036> <%f 0.124741> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.293216> <%f 0.0445526> <%f 0.0033027> <%f 1> // (R, G, B, A) <None>
// Entries[21]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.00604059> <%f 0.018913> <%f 0.018913> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0545923> <%f 0.018913> <%f 0.0118813> <%f 1> // (R, G, B, A) <None>
// Entries[22]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.487765> <%f 0.334458> <%f 0.0891935> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.116576> <%f 0.0962661> <%f 0.0697271> <%f 1> // (R, G, B, A) <None>
// Entries[23]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.113921> <%f 0.00168692> <%f 0.0824142> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.21952> <%f 0.280124> <%f 0.0033027> <%f 1> // (R, G, B, A) <None>
// Entries[24]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.851252> <%f 0> <%f 0.267358> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0> <%f 0.43134> <%f 0.875138> <%f 1> // (R, G, B, A) <None>
// Entries[25]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1> <%f 0.325037> <%f 0> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.320382> <%f 0> <%f 1> <%f 1> // (R, G, B, A) <None>
// Entries[26]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.133209> <%f 0.133209> <%f 0> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.133209> <%f 0.0289912> <%f 0> <%f 1> // (R, G, B, A) <None>
// Entries[27]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.21952> <%f 0.302125> <%f 0.320382> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.56681> <%f 0.585973> <%f 0.535642> <%f 1> // (R, G, B, A) <None>
// Entries[28]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.476177> <%f 0.409826> <%f 0.302125> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.9743> <%f 0.907547> <%f 0.819964> <%f 1> // (R, G, B, A) <None>
// Entries[29]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.25084> <%f 0.163641> <%f 0.0697271> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.625345> <%f 0.447871> <%f 0.25084> <%f 1> // (R, G, B, A) <None>
// Entries[30]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.103634> <%f 0.242796> <%f 0.0657539> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.25084> <%f 0.43134> <%f 0.20836> <%f 1> // (R, G, B, A) <None>
// Entries[31]: <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0220986> <%f 0.0220986> <%f 0.0220986> <%f 1> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.110493> <%f 0.110493> <%f 0.110493> <%f 1> // (R, G, B, A) <None>

Since I used floating-point values, the result is slightly different from vanilla code.

Change a single Armor Tint color

The following is a variant of the above "change ArmorTint colors" mod by wghost81, to alter only selected ArmorTints, by Drakous79. Instructions are in the comments at the beginning of the file.

Commentary: Try to think of -1' as the code to UI compensation.

Data in arrays start at position 0, while the UI customization spinner starts at position 1. The spinner's position 0 is ArmorTint "Standard".

0-31 ... armor tint array
1-32 ... armor tint spinner

We can say UnitPalettes.ArmorTint.Entries[ X ] = Armor Tint X+1.

Here's the m_strNoArmorTint string defined.

// XComStrategyGame.int
m_strNoArmorTint=Standard

And here is a conditional in Unreal pseudo-code to illustrate using the ArmorTint spinner's minimum of -1 to display the string.

// XComStrategyGame.upk, XGCustomizeUI.UpdateMainMenu
// If ArmorTintIndex < 0, write Standard, else compensate and write an integer.
kOption.strHelp = "" $ (((GetArmorTintIndex()) < 0) ? m_strNoArmorTint : string((GetArmorTintIndex()) + 1));

Data! Re-de-compensate!

Mod:

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.ArmorTint
// Change REL_OFFSET to: 32 + (NUMBER_OF_ENTRY_TO_CHANGE * 104) // An example: 32+(3*104)=344 so it will be REL_OFFSET=344 // Basically it is formula for finding 0xDE03000000000000 offsets (in decimal). // Remember the array starts at "Entries[0]" so use values 0-31. It is the customization screen number "- 1". // To change more than one color, just repeat with another "REL_OFFSET=x", followed by the "[MODDED_CODE]" section.
REL_OFFSET=32
[MODDED_CODE] <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.99> <%f 0.5> <%f 0.99> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.05> <%f 0.05> <%f 0.05> <%f 1.0> // (R, G, B, A) <None>

Asian skin colors

This is another variation based off of the "change ArmorTint colors" mod by wghost81 above, by rdngmikey. It has random colors simply for illustration.

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.AsianSkin REL_OFFSET=32 [MODDED_CODE] // entry #0 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.0277553> <%f 0.0528416> <%f 0.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #1 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.602044> <%f 0.902044> <%f 0.136099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #2 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.02> <%f 0.02> <%f 0.03> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #3 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1.1118813> <%f 0.136099> <%f 0.998676> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #4 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.906813> <%f 0.907871> <%f 0.90908> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>

Extreme ArmorTints Mod

This an experimental mod to see the result of adjusting Armor Tints with extreme values, by rdngmikey.

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.ArmorTint REL_OFFSET=32 [MODDED_CODE] // entry #0 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1.0> <%f 0.5> <%f 1.0> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.00> <%f 0.00> <%f 0.00> <%f 1.0> // (R, G, B, A) <None>
// entry #1 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 2.0> <%f 0.5> <%f 2.0> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.00> <%f 0.00> <%f 0.00> <%f 1.0> // (R, G, B, A) <None>
// entry #2 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 3.0> <%f 0.5> <%f 3.0> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.00> <%f 0.00> <%f 0.00> <%f 1.0> // (R, G, B, A) <None>

It turns out the game accepts decimal values above 255 and made them more "shiny".

To create a very "dull" black ... edit the hex value for "0" (i.e. 3A) to a value below zero such as hex "39". Using numbers above their normal range makes them "shiny" and below makes them "duller".

Manually hex editting "-1.0" (00 00 80 BF), and also the uninitialized all "C"s, = white color.

PantsColor

A simple mod to illustrate pants coloration, by rdngmikey. Note this follows exactly the same pattern as the above mods, but leaves out the section identifiers such as "<Primary>" and "<StructProperty>".

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.PantsColor REL_OFFSET=32 [MODDED_CODE] // entry #0 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.8977553> <%f 0.4828416> <%f 0.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #1 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.492044> <%f 0.892044> <%f 0.036099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #2 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.39> <%f 0.39> <%f 0.89> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #3 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.8918813> <%f 0.496099> <%f 0.88676> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #4 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.3813> <%f 0.87871> <%f 0.82908> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #5 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.4977553> <%f 0.8828416> <%f 0.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #6 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.492044> <%f 0.492044> <%f 0.836099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #7 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.89> <%f 0.89> <%f 0.89> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #8 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1.4918813> <%f 0.496099> <%f 0.18676> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #9 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.3813> <%f 1.37871> <%f 0.42908> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #10 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.4977553> <%f 0.4828416> <%f 1.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>

Random colors were chosen to make the changes clearly discernable.

ShirtColor

A simple mod to illustrate shirt coloration, by rdngmikey.

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.ShirtColor REL_OFFSET=32 [MODDED_CODE] // entry #0 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.8977553> <%f 0.4828416> <%f 0.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #1 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.492044> <%f 0.892044> <%f 0.036099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #2 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.39> <%f 0.39> <%f 0.89> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #3 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.8918813> <%f 0.496099> <%f 0.88676> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #4 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.3813> <%f 0.87871> <%f 0.82908> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #5 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.4977553> <%f 0.8828416> <%f 0.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #6 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.492044> <%f 0.492044> <%f 0.836099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #7 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.89> <%f 0.89> <%f 0.89> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #8 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1.4918813> <%f 0.496099> <%f 0.18676> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #9 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.3813> <%f 1.37871> <%f 0.42908> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #10 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.4977553> <%f 0.4828416> <%f 1.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #11 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.292044> <%f 0.292044> <%f 0.236099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #12 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 3.39> <%f 1.39> <%f 0.59> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #13 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.5918813> <%f 0.96099> <%f 0.8676> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #14 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.813> <%f 0.37871> <%f 1.42908> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #15 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 1.4977553> <%f 0.828416> <%f 0.903634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #16 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.92044> <%f 0.492044> <%f 0.036099> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>
// entry #17 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.39> <%f 0.9> <%f 0.29> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>

Random colors were chosen to make the changes clearly discernable.

FormalClothesColor

A simple mod to illustrate shirt coloration, by rdngmikey.

UPK_FILE=Startup.upk

OBJECT=UnitPalettes.FormalClothesColor REL_OFFSET=32 [MODDED_CODE] // entry #0 <Primary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f 0.8977553> <%f 0.4828416> <%f 0.103634> <%f 1.0> // (R, G, B, A) <Secondary> <StructProperty> <%u 0x00000010> <%u 0x00000000> <LinearColor> <%f -1.07374e+008> <%f -1.07374e+008> <%f -1.07374e+008> <%f 1.0> // (R, G, B, A) <None>

Random colors were chosen to make the changes clearly discernible.


References

Referred to by this article:



That refer to this article: