> For the complete documentation index, see [llms.txt](https://code-after-sex.gitbook.io/script-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-after-sex.gitbook.io/script-documentation/character-creator-and-select-and-apppearance/readme.md).

# CAS Character Creator

CAS Character Creator (cas-charcreator) is a dual-framework RedM character creator, multicharacter selector, and appearance, barber, and wardrobe stack. It auto-detects whether your server runs VORP or RSGCore at runtime and fully replaces the framework's join flow with a cinematic React (NUI) experience: character creation, identity, a live preview character selection screen, the appearance creator, the barber, and the wardrobe, while keeping every integration that other resources depend on. There is no hard framework dependency. Drop it in, point it at your server.cfg, and it adapts to the framework it finds.

> **Version** `1.0.0` | **Author** CAS | **Platform** RedM | **Frameworks** VORP, RSGCore

## Get CAS Character Creator

Buy the script and get instant escrow delivery and updates: [Purchase CAS Character Creator on CodeAfterSex](https://codeaftersex.com/script/character-creator?v=escrow).

Browse the full catalogue of premium RedM and FiveM resources at [CodeAfterSex](https://codeaftersex.com/), home to VORP and RSGCore scripts for character creation, inventory, HUD, and more.

***

## Features

* **Both-framework auto-detect.** One resource, zero hard dependency. `shared/framework.lua` probes `GetResourceState('rsg-core' / 'vorp_core')` at boot and routes all framework calls through the right bridge adapter.
* **Unlimited colorways (clothing and hair).** Every clothing item, plus hair and beard, runs through RDR2's native metaped tint engine: a palette plus three independent tint channels (Color 1, Color 2, Color 3), for an effectively unlimited, per-item, per-channel color range. The swatch palettes are tunable in `config.lua`.
* **Multi-language i18n (8 languages).** `en` (default), `es`, `de`, `fr`, `it`, `pt`, `pt-BR`, `ro`, with a themed first-run picker and per-account persistence (the choice follows the player across characters and PCs, and localizes server notifications too).
* **Character create and select.** A full identity step (name, nickname, gender, birthdate to age, whistle, biography) and a roster selection screen with a cinematic showcase scene and per-character portraits.
* **Appearance, barber, and wardrobe stack.** A data-driven creator (skin tones, heads, body, hair, beard, face features, eyes, brows, clothing, scars) plus an in-world barber and a wardrobe/outfits system, all applied by cas's own appearance engine (CCEngine).
* **Spawn handling.** cas owns the spawn: it spawns each character at its last saved position (or `CCConfig.SpawnPoints[1]` for a brand-new character), with an optional interactive map spawn picker (off by default, `CCConfig.SpawnSelector`).
* **Character portraits (optional live mugshots).** Out of the box the select screen shows a clean gendered demo portrait per character. Live mugshot capture via `screenshot-basic` is built in but ships disabled by default (`CCConfig.Mugshot.enabled = false`); enable it to render real per-character portraits into the auto-created `cas_mugshots` table.
* **Zero-SQL install.** `cas_mugshots`, `cas_player_locale`, and the `outfits` table are created automatically on first start, so there is no `.sql` file to import.

***

## Framework Compatibility

| Framework                   | Status    | Notes                                                                                                                                                                                                              |
| --------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **VORP** (`vorp_core` 3.3+) | Supported | The stock `vorp_character` is parked; the active one is a compatibility shim that proxies to cas.                                                                                                                  |
| **RSGCore** (`rsg-core`)    | Supported | Replaces `rsg-multicharacter` and `rsg-barbers`. Replace the stock `rsg-appearance` folder with the CAS `rsg-appearance` stub (it `provide`s the `rsg-wardrobe` name), and delete the stock `rsg-wardrobe` folder. |

**Also requires:** `oxmysql` (required), `ox_lib` (required on RSG, used for notifications), `screenshot-basic` (optional, only for live mugshots, which ship disabled by default; if absent, mugshots are skipped cleanly with no error), and client internet access (the UI minimap streams RDR2 map tiles).

***

## Quick Start: RedM Installation

The framework-specific load order and the exact `server.cfg` lines matter, so follow the install guide rather than guessing.

[**installation.md**](/script-documentation/character-creator-and-select-and-apppearance/installation.md)

In short:

* **VORP.** No framework-swap stop lines are needed. Load order: `vorp_core` then `cas-charcreator` then `vorp_character` (shim) then `vorp_inventory`, then `stop vorp_barbershop` (cas owns the barber).
* **RSGCore.** Use `stop rsg-multicharacter` and `stop rsg-barbers` only, then `ensure cas-charcreator`. There is no `stop rsg-appearance` line. Instead, replace the stock `rsg-appearance` resource folder with the CAS `rsg-appearance` stub shipped in this package (same resource name), so the stub holds that name and `ensure`s normally; the stub also declares `provide 'rsg-wardrobe'`, so delete the stock `rsg-wardrobe` folder (the stub supplies that name). cas owns the entire appearance and wardrobe stack: the package ships three resources, `cas-charcreator` (main), `vorp_character` (VORP-only compat shim), and `rsg-appearance` (RSG-only stub that also provides `rsg-wardrobe`).

***

## Configuration

All tunables (languages, spawn behaviour, money mapping, max character slots, shops, dev mode) live in `config.lua`.

[**configuration.md**](/script-documentation/character-creator-and-select-and-apppearance/configuration.md)

***

## Troubleshooting

Black character selection screens, spawn loops, double barber blips, age showing `0`, kick-on-delete, missing appearance: symptom, cause, and fix.

[**troubleshooting.md**](/script-documentation/character-creator-and-select-and-apppearance/troubleshooting.md)

***

## How It Works: the Framework Bridge

The resource is framework-agnostic above a thin bridge layer:

1. **Auto-detect.** `shared/framework.lua` checks which core resource is started and selects VORP or RSG mode. Nothing in `fxmanifest.lua` hard-binds a framework.
2. **Bridge adapters.** Everything framework-specific lives in `bridge/` (`bridge/cl_rsg.lua`, and so on). On VORP the bridge uses the real `vorp_core`; on RSG it synthesises a VORP-shaped core over `rsg-core`, so the upper-layer logic (creator engine, NUI, i18n, shops, wardrobe) is identical on both.
3. **VORP.** The active `vorp_character` is a compatibility shim that proxies `GetPlayerComponent`, `GetAllPlayerComponents`, `GetPlayerSkin`, and `OpenOutfitsMenu` to cas. Spawn handoff uses vorp\_core's native `vorp:initCharacter`. The principle to follow: FXServer must load exactly one resource named `vorp_character`, and that one must be the cas compatibility shim. Place the shim in your resources folder, for example `resources/[CAS]/vorp_character`. The original stock `vorp_character` must NOT be loaded by FXServer: either delete it, or keep it out of any folder the server scans or ensures. FXServer only loads resources that sit inside a \[bracketed] category folder or are explicitly ensured, so a stock copy left outside those paths is never started.
4. **RSGCore.** cas replaces `rsg-multicharacter` and `rsg-barbers` and owns the spawn (firing `RSGCore:Server/Client:OnPlayerLoaded` itself). It also owns the entire appearance and wardrobe stack: you replace the stock `rsg-appearance` resource folder with the CAS `rsg-appearance` stub shipped in this package (same resource name), parking or deleting the stock folder so only the stub holds that name. The stub `ensure`s normally because it IS the resource named `rsg-appearance`, and its manifest declares `provide 'rsg-wardrobe'`, so you also delete the stock `rsg-wardrobe` folder (no separate wardrobe stub ships; the appearance stub supplies that name). The stub keeps the `rsg-appearance` name present so `rsg-bathing`'s `dependency 'rsg-appearance'` resolves to it, and it answers the read-only exports `rsg-hud` (`IsCothingActive`) and `rsg-essentials` (`GetClothesCurrentComponentHash`, `GetBodyCurrentComponentHash`) call, returning safe values (`false` / `0`); it has no appearance logic. With the stock `rsg-wardrobe` folder deleted, the stub's `provide 'rsg-wardrobe'` satisfies `rsg-bathing`'s `dependency 'rsg-wardrobe'`; nothing calls the wardrobe exports because cas owns the wardrobe. Keep `rsg-bathing`, `rsg-hud`, and `rsg-essentials` running; they work against the stub. Appearance is stored hybrid: `playerskins.skin` in cas format, and `playerskins.clothes` in RSG hash format for interop.
5. **Why a stub, not the stock `rsg-appearance`.** Running the stock `rsg-appearance` alongside cas corrupts the player ped. In CitizenFX, `RegisterCommand` is a name-keyed multimap: it invokes every handler registered for a command name. So on every loadskin (after a bath, prison release, or radial menu) both cas's loadskin and `rsg-appearance`'s loadskin fire. `rsg-appearance` reads the cas-format `playerskins.skin` and applies it through its own rsg-creator-format loaders, producing a broken ped plus Lua nil-index error spam, and the `rsg-appearance:client:ApplyClothes` event also double-applies. You cannot make cas authoritative reliably while the stock `rsg-appearance` runs, and you cannot simply `stop` it: `rsg-bathing` declares `dependency rsg-appearance` and `dependency rsg-wardrobe`, so stopping `rsg-appearance` cascade-stops `rsg-bathing`. A `provide` from another resource does not override a real resource that is present under that name, which is why `rsg-appearance` is replaced (a real stub keeps the name) while `rsg-wardrobe` is deleted (with no real resource under that name, the stub's `provide 'rsg-wardrobe'` takes effect). Replacing the stock `rsg-appearance` folder with the same-named stub is the reliable fix: the dependency resolves to the stub, there is no second appearance system, and cas's loadskin and ApplyClothes are the sole handlers. Known cosmetic limitation: with the `rsg-appearance` stub, toggling a bandana off via `rsg-essentials` will not restore the previous neckwear or a male's beard (the stub returns `0`). Cosmetic only; no error.

> **Cascade warning:** never hot-stop `cas-charcreator` alone on a live VORP server. The `vorp_character` shim depends on it, and killing it breaks `vorp_inventory` clothing. Restart the chain in order instead.

***

## Links

* [Buy CAS Character Creator (escrow)](https://codeaftersex.com/script/character-creator?v=escrow)
* [Preview video (YouTube)](https://youtu.be/U8ZZdky3a0I)
* [Open-source companions (GitHub)](https://github.com/codeaftersex/cas-charcreator-companions)
* [Support Discord](https://discord.gg/codeaftersex)
* [All CodeAfterSex scripts](https://www.codeaftersex.com)

***

*cas-charcreator v1.0.0, by CAS.* Buy it on [CodeAfterSex](https://codeaftersex.com/script/character-creator?v=escrow), and find more RedM scripts at [codeaftersex.com](https://codeaftersex.com/).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://code-after-sex.gitbook.io/script-documentation/character-creator-and-select-and-apppearance/readme.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
