Custom skincolors

Merged James Hale requested to merge Machturne/SRB2:next-lc-uint16 into next

Allows Lua and SOC to create and modify custom skincolors. I was advised by a developer to make a GitLab merge request to complement the GitHub one.


Name Type Access. Description
name string R/W The name of the skincolor. Used in the console and Player Setup menu. Names containing spaces must be put in quotes in the console.
ramp UINT8 array R/W An array of 16 palette indices, which in whole represent the skincolor's color ramp.
invcolor UINT8 R/W The opposite skincolor. Used on the Goal Sign.
invshade UINT8 R/W The shade of the opposite skincolor, from 0 to 15. Used on the Goal Sign.
chatcolor UINT16 R/W Color to use when coloring a player name in the chat. Accepts V_*MAP constants.
accessible boolean R/W Skincolor accessibility. Determines whether the color can be accessed from the Player Setup menu or from the console.

Both of these are identical to each other and functionally identical to the internal color SKINCOLOR_BLUE:

	name = "BlueClone",
	ramp = {146,147,148,149,150,151,152,153,154,155,156,157,158,159,253,254},
	invshade = 9,
	chatcolor = V_BLUEMAP,
	accessible = true

NAME = BlueClone
RAMP = 146,147,148,149,150,151,152,153,154,155,156,157,158,159,253,254

Several functions have also been added. These functions can be used to get or set the order of skincolors as displayed in the Player Setup menu.

Function Returns Description
M_MoveColorBefore(int color, int targ) nil Moves the color color before the color targ.
M_MoveColorAfter(int color, int targ) nil Moves the color color after the color targ.
M_GetColorBefore(int color) int Returns the color before the color color.
M_GetColorAfter(int color) int Returns the color after the color color.


  • Due to lump loading order being the way it is, a color must be defined in a Lua lump to be used in S_SKIN.
  • For a skin to use a custom super color ColorName in its S_SKIN, there must be exist 5 colors with names Super ColorName 1 through Super ColorName 5.
  • Colors are now UINT16 instead of UINT8.
  • The number of color freeslots is 1024.
  • The maximum length of color names (not including null terminator) is 32 compared to the previous 16. Because of this, demoversion has been incremented to 0x000d. Backwards-compatibility with demoversion 0x000c is in place.
  • MAXTRANSLATIONS has been replaced with numskincolors (#skincolors for Lua). Automatically adjusts for each new skincolor added.


Edited by James Hale

Merge request reports