New Skyrim Furrifier (WIP) - BadDogSkyrim/Modding-Tools GitHub Wiki
I'm planning a new scheme for furrifying Skyrim. My idea is to follow the FO4 furrifier's method and allow any furry race to be assigned to any vanilla race, including races that aren't mine. This is a WIP--right now I'm just collecting notes on how I plan it to work.
General Scheme
-
The furrifier is an xEdit script designed to be run against your entire load order.
-
There will be one file where you can make any changes you like to the furrifier's behavior, including providing whatever information is needed to enable a new furry race.
Races
-
Any vanilla race can be assigned to any furry race. The furry race has to be in the load order. This will cost a load order slot. Tradeoffs.
-
There will be two pseudo-races: ReachmenRace and SkaalRace. They can be assigned a furry race like any other. NPCs will be assigned to them automatically.
-
The ElderRace can be assigned like any other race. Generally, elders are Nords so that's the best default.
-
Specific NPCs can be assigned specific races. Some NPCs with Imperial names are given the Nord race, so you can fix that if you want. A few Elders are not Nords, so you can change their race assignments.
-
Races are furrified by having the visual aspects of the furry race copied to the vanilla race: Head parts, tints, etc. Stats and perks are NOT changed.
-
The isBeastRace keyword is assigned to the furrified race, if defined on the furry race.
Headparts
-
Headparts define the races they are enabled for through formlists. When a race is furrified, the vanilla race is REMOVED from every headpart formlist it is on and is ADDED to any headpart formlist the furry race is on. That way a Nord's human eyes are no longer valid for Lykaios Nords, but a Lykaios's furry eyes are valid.
-
Headparts may be furrified by defining a direct equivalent: Human amber eye => Lykaios brown eye. The vanilla headpart can map to multiple furry headparts.
-
Headparts may also be furrified through label matching (this is primarily for hair). Each vanilla hair has a set of labels defining the characteristics of the hair. NPCs also get a set of labels characterizing the NPC. New furry hair can be assigned a matching set of labels. The furrifier will find the furry head part with the best match to the NPC and the NPC's current hair. Currently defined labels are listed below. Some labels are incompatible with others, e.g. you can't be MILITARY and also MESSY. One of the two will be chosen over the other, if both are defined.
NPCs
-
NPCs keep their race unless explicitly changed. Their headparts and tints are changed to those of the furry race.
-
Headparts and tints are reassigned pseudo-randomly, when there are choices. The assignment is done by hashing the editor ID and using the result as the "random" number. This way the furrifier gives the same appearance every time it's run (as long as the number of choices doesn't change). It also gives the same results when a single NPC has multiple NPC records (usually for when the NPC dies).
-
When an NPC has multiple records, there's a way to tell the furrifier. This is done for vanilla records in the furrifier, but it can be extended to NPCs from mods.
-
Tints are chosen randomly. Each tint layer defines a set of tint colors for that layer. If the first color has an alpha value of 0, that tint layer is treated as optional; otherwise it's required. The furrifier will select a color for every required layer and up to 3 optional layers. (Limited to keep NPCs from being too fancy.)
-
Most tint layers can only be defined once ("Skin Tone", "Cheek Color"). A few can have multiple definitions ("Paint", "Dirt", "". The "" layer name is used for special layers that should not be generally assigned, such as Blackblood tattoos). For these layers, chargen provides a slider to choose which one you want. When a race provides more face tint layers than Skyrim allows for, some can be added as "Dirt" layers just so the user can access them. The furrifier allows these layers to be defined as tint layers so they can be used in furrification.
-
Paint and Dirt layers will only be added if they are defined in the base NPC. There should probably be some mechanism for matching vanilla to furry, at least for paint.
Armor
Furry races do not use the "RNAM - Armor Race" mechanism. Instead they depend on the armor itself being furrified so that canines, felines, ungulates, avians, mustelids, etc an each use a different armor variant. Generally only headgear needs to be furrified but gloves may be furrified as well.
-
New AA records are defined for furry races. The Armor (ARMO) record is overridden to add any furry AA records but vanilla AA records are not removed. This means any changes to armor records made by other mods will be preserved.
-
By default, the Khajiit AA is treated as the furry variant for an armor. This is generally correct for headgear. So the furrified race is added to the Khajiit AA and removed from all the rest.
-
If a more specific AA is defined for a race, it is used. The AA is found by name, following the pattern "YA_XXX_YYY" where XXX is the name of an existing armor addon and YYY is the name or class of the furry race. XXX should be the name of an existing armor addon, using the addon with the shortest name; the furry addon will replace it everywhere. (If several addons have names of the same length, use the alphabetically first.)
-
Races can be assigned classes such as DOG, CAT, UNG (ungulate), ARG (argonian). For headgear the main difference is muzzle size and shape, so these cover the main differentiators. Classes can also be used as a substitute for the full race name, e.g. "LYK" instead of "LykaiosRace".
-
Specially-defined AA variants themselves are found in their own ESP so they can be used by any race. (Which is another slot in the load order. It would be possible to copy the entire record into the patch ESP. Is that worth it?)
(Resolved as above) Issue: To make a furry armor addon findable, it has to have a name associated with the armor. Cases to cover:
- The armor covers one bodypart and there's only one using a set of armor addons. Base case.
- Two or more armors use (some of) the same armor addons. Then when we furrify the second armor we find, we need to notice that there's already a furry variant for our target race and just add that to the second armor.
- An armor covers both head and hands and both have furry variants. Then we need to remove the vanilla race from the right armor addon and add it to the right furry armor addon. The furry armor addons need distinct names for each bodypart but still need to be findable.
OPTION: Use the name of the armor addon of the vanilla race being furrified. So ArmorBladesHelmet -> YA_BladesHelmetAA_DOG, and also -> YA_BladesHelmetOrcAA_YAHorseRace. Then the second armor using the same addons would find the furry version just by the name. One addon could be furrified in multiple ways: YA_BladesHelmetAA_DOG and YA_BladesHelmetAA_CAT both come from the same vanilla addon. But that's fine--when furrifying to a cat race, the system will find the vanilla race (HighElf) on BladesHelmetAA, look for the cat variant, and remove just the HighElf race. Only the Nord race will have been removed when it was furrified.
If the armor covers multiple bodyparts, this now isn't a problem. ArmorNightingale with NightingaleGlovesAA would furrify to YA_NightingaleGlovesAA_DOG, so there's no conflict with YA_NightingaleHoodAA_DOG.
BUT how does the modder know how to name their variants? If I have a YALionRace variant it should be called YA_BladesHelmetAA_CAT. But then what if I furrify Orcs to Lions? The Orc race is on BladesHelmetOrcAA. But if I furrify HighElves to Lions, they're on BladesHelmetAA. So I can't depend on the AA holding the vanilla race to determine the root name for the furry variant. Maybe just pick the shortest name from the addons covering the target bodypart, and the alphabetically first if there's more than one shortest.
OPTION: The name of the armor can be used. ArmorBladesHelment -> YA_ArmorBladesHelmet_DOG. But what if another armor uses the same armor addon? Then ArmorBladesHelmetBlue has to somehow map to the same YA_ArmorBladesHelmet_DOG. Could be that when we create the variant we note that BladesHelmetAA has been furrified as YA_ArmorBladesHelmet_DOG (and _CAT, etc). Then when furrifying the "Blue" variant of the armor, look at each armor addon, determine whether it is overridden with furry variants, and add all the furry variants to the armor. Downside is now the name of the furry addon reflects one armor but not the other.
Also if the armor covers head and hands (does this ever happen?) we have no way to distinguish the armor addons. We'd have to add something to the name, like YA_ArmorNightingale_Hair_DOG vs YA_ArmorNightingale_Hands_DOG. Yuck but doable.
Furry World
As in FO4, the furrified world objects are in their own ESP which has to be enabled separately.
Headpart labels
BOLD BRAIDS BUZZ DREADS ELABORATE FEATHERS FUNKY LONG MANE MATURE MESSY MILITARY MOHAWK NEAT NOBLE SHORT TIEDBACK YOUNG