CCXL Theory: Switchers
Summary
Published: September 3rd 2025 by icxrus Last documented edit: September 3rd 2025 by icxrus
This page explains how switchers work with the character creator and ArchiveXL. It is currently a work in progress.
Originally separated from CCXL: Creating a Switcher.
Wait, this is not what I want!
To create your own switcher, check CCXL: Creating a Switcher .
For existing vanilla and modded switchers, check ArchiveXL: Character Creator additions .
What are switchers?
Switchers are the switches shown in the character creator that allow us to change V's physical appearance. There are two different types of visible switcher: those that cycle through text-labeled options such as hairstyles and tattoos—and those that use icons generally depicting color options. Switchers are generally defined within separate .inkcharcustomization files for each gender.
Types of switchers
Type 1: Cyclic switchers

There are two types of cyclic switcher—one consists of a gameuiSwitcherInfo that defines index and options and two or more gameuiAppearanceInfo's that contain the corresponding option parameters (the first one usually being the off appearance):
gameuiSwitcherInfo

The other type of cyclic switcher consists of a gameuiMorphInfo with morph names as its options. The chest size switcher for Female body V is an example of this:
gameuiMorphInfo


Type 2: Icon switchers
The hair color switcher acts as a cyclic switcher but has icons instead of names:

It can be expanded to show selectable icons.

The icon switcher does not require a gameuiSwitcherInfo but consists of a single gameuiAppearanceInfo, with its options defined as definitions—appearance definitions within a .app file:


Nested switchers
A switcher can have other switchers as options. These are known as a nested switchers:

The uiSlot and uiSlots parameters are what make this possible—each switcher or option can occupy one uiSlot, and every uiSlot can have only one active option:


This means that every hairstyle has its own hair color switcher. Since each hair color switcher occupies uiSlot 'hair_color' only one hair color switcher can be active at any time.
Switcher attributes
A switcher has multiple attributes that make them behave in a certain way:
censorFlag
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Listens for active censor, like nudity
censorFlagAction
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Activate/Deactivate switchers based on censorFlag
defaultIndex
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Index of default switcherOption / morphName / appDefinition
int
editTags
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Dictates where a switcher can be used in-game
NewGame, HairDresser, Ripperdoc
enabled
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Determines whether switcher is active or inactive by default
bool
hidden
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Hides switcher in character creator
bool
index
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Determines order of switchers in Character Creator
int
link
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Allows a switcher to control the state of other switchers
string
linkController
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
The switcher will control other switchers with the same link value
bool
localizedName
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
The name, usually a translation entry, that will be shown in-game
string
name
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
The name of a switcher or appearance, referenced by switcher options
string
onDeactivateOptions
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
Activate/Deactivate other switchers/options when switcher is deactivated
options
gameuiSwitcherInfo
Creates options for the switcher, referencing names of appearance infos
string
definitions
gameuiAppearanceInfo
Appearance definition to be referenced in .app file
string
morphNames
gameuiMorphInfo
Defines the available morphtargets, match these to the values in your .morphtarget
cName
resource
gameuiAppearanceInfo
Path to .app file
path
randomizeCategory
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
The category of a switcher in the randomizer
switchVisibility
gameuiSwitcherInfo
(More info needed)
bool
uiSlot
gameuiSwitcherInfo gameuiAppearanceInfo gameuiMorphInfo
The slot which a switcher or option will occupy. Allows only one active option at a time
string
uiSlots
gameuiSwitcherInfo
The slot(s) a switcher's options will occupy
string
Groups
For most appearance additions, the following groups will suffice:
headGroups
If your switcher is in headCustomizationOptions, you'll want to use these four headGroups:
FPP
TPP
TPP_photomode
character_customization
bodyGroups
If your switcher is in bodyCustomizationOptions, you'll want to use these three bodyGroups:
FPP_Body
TPP_Body
character_creation (not to be confused with 'character_customization' in headGroups)
armGroups
If your switcher is in armsCustomizationOptions, you'll want to use these armGroups:
Female V:
holstered_default_tpp
holstered_default_fpp
holstered_strong_tpp
holstered_strong_fpp
unholstered_strong
holstered_nanowire_tpp
holstered_nanowire_fpp
unholstered_nanowire
holstered_launcher_tpp
holstered_launcher_fpp
unholstered_launcher
holstered_mantis_tpp
holstered_mantis_fpp
unholstered_mantis
nails
character_customization
Male V:
holstered_default
holstered_strong
unholstered_strong
holstered_nanowire
unholstered_nanowire
holstered_launcher
unholstered_launcher
holstered_mantis
unholstered_mantis
nails
character_customization
Each of these holstered and unholstered definitions links to a certain arm cyberware, or none, being equipped by the player. Many of these also have different positioning to each other.
Last updated