Hi. I'm new here.
I've been doing some CVR palette manipulation experiments that I would like to share. I know there is a
tool by Ford Prefect that allows some model "repainting". However, I would like to describe another way to perform palette transformations.
Summary: Caviar supports an 8-bit "Index Color" palette and a 15-bit "High Color" palette. If a high color palette is not present, it can be estimated from the index color palette. If the high-color palette is present, it is used. Different approaches are possible to derive a high-color palette. That's what i have been trying...
However, let's start with a quick review...
Index Color TableThe "index color" palette supports up to 256 colors and is stored as an array of
256x3 uint8 values. This is the table called "Physical Palette" in
PlotinusRedux's CVR Specification and is located at the PALETTE_DATA chunk. Looks like only 236 colors are used in the game.
Here is a plot of the "index color" palette, extracted from AX.CVR (Note: Only 236 valid colors are shown. Also note: color does not change in the vertical axis):

And here is the model rendition using this color mode:
High Color TableThe "high color" palette supports up to 6144 colors and is stored as an array of 24x256 uint16 values. This is the table called "ShadeArray" in PlotinusRedux's CVR Specification and is located at the MATERIAL chunk. Looks like only 24x236 colors are used in the game.
Note: It looks like the MATERIAL chunk description in PlotinusRedux's CVR Specification needs to be corrected.
offset=0000: uint16 Number of valid colors in the color index palette
offset=0002: uint16 Unknown
offset=0004: uint16 High color palette, array[24][256] of 16 bit R5G5B5 color values
Here is the high color palette extracted from AX.CVR:

And here is the model rendition using this color mode:
High Color Table generated from the Index Color TableThe High Color Table (Material table) is not mandatory. If the chunk is not present in the file, a High Color Table is generated from the Index Color Table. There is an easy way to study these "generated" high color tables: just remove the MATERIAL chunk using a hex-editor and update the sizes in the FILE_CONTAINER and PALETTE_CONTAINER chunks. I did it on AX.CVR and attached the files: AX_ORIGINAL.CVR and AX_REMOVE.CVR.
Here is the model rendition using the "generated" high color table on the AX_REMOVE.CVR. It looks kinda blueish:

I tried to reproduce this "high color from index color" generation, and the first thing I tried was the process described
here for the shades generation and the process described
here in order to repack the colors. I got this new palette:

When we look at the model rendition, we found it is not "blueish" as the one generated by the Caviar Player, and the colors are closer to "index color" palette, but the model is way too dark:

I attached the file as AX_RECOLOR.CVR.
Finally, I reverse engineered this "high color from index color" generation, and found it uses the last row of the "Shade" array from the PALETTE_DATA chunk. Please note: This "Shade" array (from the PALETTE_DATA) is not the same "ShadeArray"from the MATERIAL chunk that we mentioned before.
This agrees with how PlotinusRedux describes the 24 shades as "light levels". Here is how the generated palette looks like:

I reimplemented the process and created another model with a recreated palette that emulates the one generated on-the-fly (attached as AX_REPLACE.CVR).
Since we can use different rows of the "Shade" array, and different "fractions" for the shading process described
here it is really easy to generate a set of new high color palettes using scripting.
Here is just an example of further manipulation using an inverted palette (I attached the file AX_PINK.CVR):

That's all for now.