KyrahAbattoir / KyrahGame-public
Public repository, readme and wiki.
Page History

Character Customization

Kyrah Abattoir edited this page on 16 Feb

Clone this wiki locally


Probably First + Last, doesn't really matter for the clients as this is not shared explicitely. (so far, chat uses it and that's it)


While the full RGB range is difinitely possible, lets just say that I find that undesireable.

It will probably end up with a selection of "allowed" skintone values that are then fed into the skin shader and the face shader. At the moment I don't have any other plan when it comes to body skin customization.

Pupil color

This one is pretty easy and could be made through a simple hue shift into the skin shader.

Pupils also need to slide around when the player is looking around.

Eye shape

This can be done through a set of possible eye shape sprite sheets and their assorted mask for drawing the eyes behind it.

This is "planned" but to be fair I'd be happy if i had ONE set of functional eye shapes that I can use.

If each player has a copy of the face shader instead of instancing we can just load the relevant sprite sheet for their eye shape. 4 Frames for eye blinking seem ideal, and each eye should be driven independently if possible. This allows the eye blinking to also be used for expressing tiredness/weakness/sickness (eyes half closed) and sleeping/unconcious (eyes closed).


Eyebrows would be "nice" to have for expressions, and in second order for customization.

3 states per style would be nice: normal, angry, embarassed.


I'm not entirely sure what can be done when it comes to nose design to be honest but at least those don't need animation frames.


I'm not sure what would be needed expression wise, the "talking" animation only needs a neutral and "semi open" frame. Happy/sad/angry variants would be nice obviously.

Mouth variants could be nice but I can't think of many (beside lipstick) that aren't simply expressions.

Maybe you could choose what your "mood" is if you really want to look perpetually angry but that might be weird.


This is basiclly a separate mesh attached to the skull. "skull hair" textures would be nice but it complexify the head shader even more.


This is kind of tricky, i suppose a value from 0.0 to 1.0 that determinate how flat chested your character is (since the default body has breasts) and a tristate to determinate wether your character has a penis, a vagina, or "nothing".

A binary gender would then only be used (in the future) for the player's genome, initial stats, and determinate which facial features are available to them (so we can gender some of them a bit)

In-engine network setup

  • byte hair_style (255 is more than enough)
  • Color hair_color
  • Bool skin_gender (male/female)
  • Bool face_gender (male/female)
  • byte skintone (255 possibilities is more than enough)
  • byte eye_shape (male/female but future proof)
  • byte nose_shape (...)
  • byte mouth_shape (...)
  • byte eyebrow_shape (...)

Supposedly the following would be auto-generated client side or through other events:

  • Eye blinking/closing/state
  • Mouth animation state.
  • Pupil X/Y position.

Skin shader breakdown

This could potentially use instances...

  • 1 RGB Base body texture (per gender).
  • 1 RGB color for skintone.

Face shader breakdown

  • 1 RGB Base face texture (per gender)
  • 1 RGB color for skintone
  • 1 RGBA Pupil texture (use offset to position eyes)
  • 1 RGBA Eye shape texture sheet (use offset to switch frame)
  • 1 Greyscale Eye mask texture sheet (use offset to switch frame)
  • 1 RGBA Nose texture
  • 1 RGBA Mouth texture sheet (use offset to switch frame)
  • 1 RGBA Eyebrow texture sheet (use offset to switch frame)

Minimal textures needed to get two genders.

  • 2 Base body textures (male/female)
  • 1 Pupil texture
  • 8 eye shape frames, 4 frames per gender.
  • 8 eye shape frame masks, 4 frames per gender.
  • 2 nose textures (1 per gender)
  • 4 mouth texture frames (2 per gender assuming only talking is supported)
  • 2 eyebrow shapes (1 per gender)

Total: 27