Keep in mind when it comes to genotypes you can change these in the purchase horse stable menu.
This guide is when you want to add new horses available in the stable menu.
Here are a few steps on how to add your own horse.
1) Open Config/BREEDS.lua
2) See Config.Horses_Breeds
Each Table index entry is a horse breed.
Let's review each param together:
category: Display name / category name used for this breed group (ex: "Mule").
image: Icon used in UI for this category (ex: "mule_icon"). It's taken from sire_menu/html/items
disablecategoryinmenu: If true, hides/disables this category in the menu.
breedcategory: Numeric category index ( used for sorting / grouping / internal category mapping).
To add your own breed category see (Config.HorseClassCategories)
BREED_DESCRIPTION: Text shown in UI describing the breed (supports \n line breaks).
WEATHER: Weather preference/profile for the breed ("MIXED","HOT","COLD")
STABLES_AVAILABILITY: Which stables can show this breed category.
{"ALL"} = available in every stable
{1,2,3} = restricted to stable indexes from your main stables table
Personalities: List of allowed personality presets for this breed.
Format: {"PERSONALITY_NAME", probability}
The number is used as a probability bucket. From 1-10. The closest to 10 the higher the chance it gets selected.
Each option is a specific horse variant (coat/model/price/stats/etc.) inside the breed category.
STABLES_AVAILABILITY: Same idea as top-level, but per option (lets you show certain coats only in certain stables).
MODEL: Ped model name/spawn model (ex: "a_c_horsemule_01").
LABEL: The variant name shown in the menu (ex: "Mealy Bay").
DOLLARS: Price in standard currency.
GOLD: Price in gold currency (for VORP only).
BREEDING_COLOR: Color identifier used by the breeding system (genetics/result mapping).
BREEDING_PATTERN: Pattern identifier used by the breeding system (solid/leopard/tobiano/etc.).
BREEDING_SELECT_ENABLED: If false, this horse won't be able to be used in breeding.
BREEDING_RESULT: Result key used by the breeding system to output the right variant.
CUSTOMIZABLE: If true, player can customize this horse upon purchase.
CUSTOM_ROLELOCK: If true, restrict customization based on CUSTOM_ROLES.
CUSTOM_ROLES: Roles allowed for this option in the “custom” context (ex: "trapper").
CUSTOM_PLAYERLOCK: If true, restricts access to specific players listed in CUSTOM_PLAYERS.
CUSTOM_PLAYERS: Whitelist for “custom” access.
Format: { [1] = { identifier = "...", charid = X } }
Identifier should be a string and charid an integer.
These are your appearance component sets.
EYES: Eye preset/index used for the animal.
HEAD: Head preset config array ( head variant + texture+ tints).
COAT: Coat preset config array (coat variant + texture+ tints).
EYELASHES: Eyelashes tints.
MANE: Mane style + color settings.
TAIL: Tail style + color settings.
SCALE: Overall size scaling multiplier (ex: 0.90). Scale influences speed and animations. Don't go too high, 1.1 max recommended.
FEATHERS: Feathering settings array (style + tints).
MUSTACHE: Mustache settings array (style + tint).
STATS: Stat block applied to this option (value range is 1-10)
HEALTH: Health stat level
STAMINA: Stamina stat level
COURAGE: Bravery / fear resistance
AGILITY: Handling / maneuverability
SPEED: Top speed
ACCELERATION: Acceleration rate
These are separate from the CUSTOM_* locks. They typically control whether this horse is buyable at all:
ROLELOCK: If true, restricts purchase based on Jobs.
ROLES: Jobs allowed to purchase this horse.
PLAYERLOCK: If true, restricts purchase based on PLAYERS.
PLAYERS: Whitelist for normal access (same structure as CUSTOM_PLAYERS).
DISPLAYINMENU: If false, hides this horsefrom the stable menu (can still exist as a breeding result, admin spawn, etc.).
STASHLIMIT: Max stash limit for this mount (how it’s interpreted depends on your inventory system).
STASHSLOTS: Number of stash slots available for this mount (RSG ONLY)
To add a new horse simply duplicate the last line of the options subtable and edit it to your likings.
Don't forget to increase the lua table index [18],[19] etc.
To add a breed it's the same logic, duplicate the desired category, edit and check the table indexes. Double check each format (string / integer / float etc.)