Animation General Information - IHateMyKite/UnforgivingDevices GitHub Wiki
Made by iiw2012. Copied from https://github.com/iiw2012/UDAnimationsSE/wiki
- Animation files:
- Can be made specifically to use in UD situations (struggle or horny/orgasm animations).
- Or it could be animations from existing animation packs (eg SLAL Animation Packs). In that case they do not need to be included in the project as long as SLAL Pack is active.
- FNIS benaviour file(s), which is created from existing animation files using FNIS Tools For Modders (SE and LE versions). If animation are from SLAL pack then behavior file was already generated.
- JSON file(s) with animation definitions to use with UD.
JSON files define the conditions by which the appropriate animation
is selected for a particular situation for actors with certain
restrictions. These files must be saved in UTF-8 w/o BOM and placed in <DATA>\SKSE\Plugins\StorageUtilData\UD\Animations\
folder.
{
"conditions": { Conditions that determine whether the file should be used
"mod": "<mod name>", To check if game has loaded mod
"json": "<path to json file>" To check if game folder has specified json file. Path should be relative to "SKSE\Plugins\StorageUtilData" folder
},
"paired": { Animation type
"zad_DeviousArmCuffs" : [ Animation keyword (device keyword or any other string like "horny" to define animation)
{
"A1" : {
"anim" : "<animation event>", Animation event
"req" : 0, Required constraints for the first actor (animation shouldn't be picked if actor doesn't have all required constraints)
"opt" : 0 Optional constraints for the first actor (animation shouldn't be picked if actor has constraints not defined by this bit-mask)
},
"A2" : [ Array with variants
{
"anim" : "<animation event variant 1>", Variant for specified actor's constraints
"req" : 256, Required constraints for the second actor (animation shouldn't be picked if actor doesn't have all required constraints)
"opt" : 0 Optional constraints for the second actor (animation shouldn't be picked if actor has constraints not defined by this bit-mask)
},
{
"anim" : "<animation event variant 2>", Variant for specified actor's constraints
"req" : 512, Required constraints for the second actor (animation shouldn't be picked if actor doesn't have all required constraints)
"opt" : 0 Optional constraints for the second actor (animation shouldn't be picked if actor has constraints not defined by this bit-mask)
}
],
"lewd" : 0, Rate of lewdiness
"aggr" : 1 Rate of aggressiveness (from akHelper towards akActor). Could be negative
},
...
],
...
}
}
Object path | Type | Description |
---|---|---|
conditions | Object | Conditions that determine whether the file should be used |
conditions.mod | String | To check if game has loaded mod |
conditions.json | String | To check if game folder has specified json file. Path should be relative to SKSE\Plugins\StorageUtilData folder. For example ..\..\..\SLAnims\json\Babo Human.json |
solo | Object | Object name defines the type of the containing animations: solo or paired or something else |
solo.<zad_DD> | Object[] | Array with definitions of struggle animations for specified device. Its name should be the same as for the in-game keyword: zad_DeviousBoots, zad_DeviousArmbinder, etc. |
solo.<zad_DD>[].A1 | Object | Section with the animation for the actor. See paired.<zad_DD>[].A1[] for reference |
solo.horny | Object[] | Array with definitions of horny animations used by UD and DD in suitable situations |
solo.horny.<...> | See paired.<zad_DD> for reference. | |
solo.edged | Object[] | Array with definitions of edged animations used by UD and DD in suitable situations |
solo.edged.<...> | See paired.<zad_DD> for reference. | |
solo.orgasm | Object[] | Array with definitions of orgasm animations used by UD and DD in suitable situations |
solo.orgasm.<...> | See paired.<zad_DD> for reference. | |
solo.spectator | Object[] | Array with definitions of spectator animations used by UD for helper when there no suitable pair animation was found |
solo.spectator.<...> | See paired.<zad_DD> for reference. | |
paired | Object | Object name defines the type of the containing animations: solo or paired or something else |
paired.<zad_DD> | Object[] | Array with struggle animations for specified device. Its name should be the same as for the in-game keyword: zad_DeviousBoots, zad_DeviousArmbinder, etc. |
paired.<zad_DD>[].A1 | Object or Object[] | Section with the animation variant(s) for the first actor (the actor trying to struggle out the specified device). There can be either a single variant or an array of options that differ by actor's constraints. |
paired.<zad_DD>[].A1[].anim | String or String[] | Animation event which is registered for the actor in this slot with specified constaints. If there is an array then it is interpreted as animation sequence. Animation sequence is played almost instantly down to the last element which stays in the loop |
paired.<zad_DD>[].A1[].req | Integer | Required constraints for the actor in this slot (animation shouldn't be picked if actor doesn't have all required constraints). Constraints are encoded with a bitmask. |
paired.<zad_DD>[].A1[].opt | Integer | Optional constraints for the actor in this slot (animation shouldn't be picked if actor has constraints that is not defined by specified bitmask) |
paired.<zad_DD>[].A2 | Object or Object[] | Section with the animation variant(s) for the second actor (the actor helping the first actor to struggle the specified device). See paired.<zad_DeviousDevice>[].A1 for reference. If it is in the solo object then anything beyond A1 is ignored. |
paired.<zad_DD>[].<...> | See paired.<zad_DD>[].A1 for reference. | |
paired.<zad_DD>[].lewd | Integer | Rate of lewdiness. Currently not in use. |
paired.<zad_DD>[].aggr | Integer | Rate of aggressiveness (from the second actor towards the first). Could be negative. Currently not in use. |
Due to the cumbersome file syntax, it is difficult to format them manually. To facilitate this task, an Excel file has been created with VBA functions that export a table content to JSON (see https://github.com/iiw2012/UDAnimationsSE/blob/main/docs/UD_Anim_Custom.xls or https://github.com/IHateMyKite/UnforgivingDevices/blob/main/docs/UD%20Paired%20Struggle.xls).
Brief examples how to use it see there: https://github.com/IHateMyKite/UnforgivingDevices/wiki/Using-Excel-VBA-to-generate-animation-files
<mod>_<global_type>_<animation_type>_<animation_name>_[[V<variant_num>]_A<actor_num>[<actor_pose>]][_<actor_constraints>]
- Solo
- Pair
- Struggle
- Horny
- Orgasm
- Edge
Any string to describe/define animation
Any number
Animation with the same variant number with given name and different actor should be pairwise compatible.
Modification of the actor's pose. For example, actor could place hands on hips or chest of its partner while the whole motion are the same.
Should contain letters:
- A - Armbinder (Straitjacket)
- B - BB Yoke
- E - Elbowbinder
- F - Front Cuffs
- P - Petsuit
- T - Elbow Tie
- Y - Yoke
- H - Hobble Skirt
Since straitjackets replace arms on model it's ok to use armbinder animation variant with them.
UD_Solo_Struggle_Hobble01_AH
UD_Pair_Struggle_Armb02_V2_A1_T