Characters & assets

Presets

.ulcharacter files: appearance and stats, blended onto generated people or used as a starting point.

A preset is a .ulcharacter file describing part or all of a person: morphs, skin, hair, makeup, stats. Scripts blend presets onto generated people (Game:generatePerson(false, "athletic_F"), Actor:blendPreset("tanned")), and the character creator loads and saves them.

Presets are found anywhere in any mod (the base game keeps them in Presets/); the id is the file name without extension, optionally with its folder: age_groups/twenties.

Format

One setting per line:

textCATEGORY Parameter: weight% value
text// A fit woman in her twenties
INFO Is_Male: 100% false
STAT age: 100% 22=>29
STAT fitness: 80% 70=>95
MORPH PBMFitness: 100% 0.3=>0.6
SKIN Tan_Strength: 100% 0.4
HAIR Hairstyle: 100% aprilyshLaylaHair_80821
Category Holds
INFO First_Name, Last_Name, Is_Male, Body_Is_Male, Genital (Penis / Vagina / None), Interested_In_Men, Interested_In_Women, Interested_In_Transgender
MORPH A body or face morph by name, 0–1
SKIN Skin_Color_R/G/B/A, Eye_Color_R/G/B/A, BHairstyle (body hair), FHairstyle (facial hair), Tan_Line, Tan_Strength, Tattoo_Arm, Tattoo_Torso, Tattoo_Leg, Makeup
MAKEUP Makeup_Eyeshadow_Style, Makeup_Blush_Style, Makeup_Liner_Style, Makeup_Lipstick_Style, and their _Color_R/G/B/A
HAIR Hairstyle (a hair id), Hair_Color_R/G/B/A, Hair_Thickness
STAT Any stat
SCALE X, Y, Z: the legacy stretch of the whole person (1 = as modelled, the creator's Scale and Build); Height: the height rig (0 = as modelled, 1 = about half height, negative = taller). Both apply together
PENIS Anatomy adjustments

Lines starting with // are comments. A preset only needs the lines it cares about: blending a preset changes those parameters and leaves the rest of the person as they were.

Weights and ranges

Every line is rolled for each new person:

  • 50% John, 50% Josh: one of the options, by weight.
  • 0.2=>0.6: a value anywhere in the range.
  • 10% 0.7=>0.9, 20% 0.2=>0.3: an option by weight, then a value in its range.
  • Weights that add up to less than 100 leave the rest to chance: INFO Genital: 80% Penis sets it four times in five and leaves the person as they were otherwise.

A line with one value at 100% (what the character creator saves) always gives that value.

Morph names

MORPH lines use the Genesis 8 dial names (PBMFitness, PHMFaceRound, FBMVoluptuous…). The list the creator shows is in ul_Base/CharGen/FeatureMorphs.txt.

Presets made for the legacy game also use MakeHuman-style names (Torso_Mass-Tone_max-min). Those are translated to Genesis 8 dials through ul_Base/CharGen/MorphMap.txt, so old presets import with their shape, approximately. The original names are kept, so a re-exported preset stays readable by legacy tools.

Making presets

The easiest way is the character creator: shape someone, then save a preset. Saved presets go to Saved/CharacterPresets/; copy the ones you want to ship into your mod.

Faces

A preset in a Presets/faces/female/ or Presets/faces/male/ folder is a face: the creator shows it as a picture in the Face page's Faces grid (and not in the Load a preset list). Picking a face first clears every head the morph registry blends and every head the other faces set, then applies the file's morphs, so faces replace each other instead of stacking. Keep a face to its head: its MORPH lines, plus INFO Is_Male / INFO Body_Is_Male.

INFO Is_Male: 100% false
INFO Body_Is_Male: 100% false

// Morphs
MORPH Aine: 100% 1.000000

The tile's picture is Thumbs/<file name>.png beside it. The label is the file name without its Face_ prefix, underscores read as spaces. Render the pictures with the thumbnail mode (-CharThumbsOnly=face); existing pictures are kept unless you add -CharThumbsForce.

Using presets

Call Effect
Game:generatePerson(isMale, "p1, p2") A new person with these presets blended in order
Actor:blendPreset("p") Blend onto an existing person
.ulshop SellerPresetName The look of a shop's seller

The base folders are a good palette to combine: age_groups, phenotypes, phenotypes_daz, female, male, celebs, fantasy, situational, stats_only.