Posted April 21, 2020 by TURBODRIVER
This tutorial will explain to you how to setup the WickedWhims Animations XML Tuning file.
If you want to know how to create animations check the ‘ Creating Basic Animations In Blender’ tutorial and ' Converting Blender Animations to Clips’.
If you want to know how to create packages with animations, check the 'Creating WickedWhims Animations Package [3]’ tutorial.
Once you're done configuring your XML file, consider validating it:
To setup everything, we need a plain package name, a hexadecimal hash of that name and a decimal hash of that name. To get three of these values we will be using the 'Modding Toolbox’, so open it. Optionally you can use the Sims4Studio Hash Generator.
Type in the name of your package and make sure it contains your name.
Recommended naming: “YOUR_NAME:WickedWhimsAnimations”, example: 'TURBODRIVER:WickedWhimsAnimations’.
Copy the FNV 64 field without the '0x’ prefix.
Replace the '0000000000000000’ at the end of the XML Template file name with copied FNV 64 value.
The XML file should be originally named 'S4_7DF2169C_00000000_0000000000000000.xml’.
Switch the display result to 'Decimal’.
Copy the FNV 64 field. We will need it in the next steps. Keep the 'Modding Toolbox’ open.
Keep in mind that this image is not always fully up to date, it’s just representing the idea of the file structure.
Focus on the red outline presented on the image, this is the file header. It contains the file name and numerical ID that is required for it to work.
Focus on the purple outline presented on the image, this is all of the data of a single animation. It contains all information about the animation, actors, actor interactions, and events.
As every entry in a list, an animation is contained between the <T></T> tags.
If you want to add another animation to the file, select the whole purple section and copy it underneath the existing one.
Focus on the light-blue outlines presented on the image, these are actors. They contain all information about the actors and actor interactions in the animation.
Actors are inside the “animation_actors_list” field which represents a list. Every entry in a list is contained between the <T></T> tags.
If you want to add/remove actors in the animation (for solo, threesome, foursome or more) just copy/remove the whole light-blue section.
When you’re adding more actors make sure to give them unique 'actor_id’ highlighted with light-blue. The first actor should always start with ID “0” (zero) and continue by increments of one.
Focus on the yellow outlines presented on the image, these are actor interactions. They contain all information about the actors that are receiving an interaction from the actor in the light-blue section.
When an actor in the light-blue section is doing an interaction, that actor can interact with other actors in that interaction. The type of interaction the actor has with other actors is set in that yellow section. If you want to add more receiving actors just copy this section underneath it and set the 'receiving_actor_id’ that corresponds to the actor 'actor_id’ that should be receiving set interaction.
On the image, inside the light-blue actor with ID 0, yellow section refers to an actor with ID 1. That actor with ID 1 is receiving a VAGINAL sex category interaction from the actor with ID 0.
Focus on the dark-blue outline presented on the image, these are props. They contain all information about prop objects that can be used during the animation.
Remove this section if you’re not using props or your animation will not load!
Props are regular in-game objects that are automatically spawned at the beginning of an animation. They are identified using the Object Definition Key Instance variable (decimal number) or via the DEF variable in-game when using Display Object Information.
Props are inside the “animation_props_list” field which represents a list. Every entry in a list is contained between the <T></T> tags.
If you want to add/remove props in the animation (for more props, max 10) just copy/remove the whole dark-blue section.
Focus on the green outlines presented on the image, these are events. They contain all information about special events that can occur during the animation.
Events are inside the “animation_events_list” field which represents a list. Every entry in a list is contained between the <T></T> tags.
If you want to add/remove events in the animation (for more effects or dynamic cum layers) just copy/remove the whole green section.
The image below presents variables highlighted in red, purple, light-blue and yellow that you can modify. These variables are always between “>” “<” characters.
The first variable we will be changing is the ’ s’ at line 2 in the file, highlighted in red. The template has it as '12345’. You have to change it to copied in step 2.5 FNV 64 decimal hash.
Second variable we’re changing is the ’ n’ at the line 2 in the file, highlighted in red. The template has it as 'YourName:YourPackageName’. You have to change it to unique name you’ve typed into the Modding Toolbox.
After this point you can close the Modding Toolbox.
Variable ' animation_display_name’ is the hexadecimal hash id from an STBL file that represents the name of your animation.
This method is not used anymore so delete the whole line if you don’t know how to use it.
Variable ' animation_raw_display_name’ is a raw text that represents the name of your animation. You should be using either ' animation_display_name’ or this variable to name your animation.
Variable ' animation_author’ is the name of the animation creator. It’s probably your name.
Variable ' animation_locations’ is a list of location categories that animation can be used at. Location names are separated by commas.
Here are all available animation locations:
Variable ' animation_custom_locations’ is a list of specific objects WWIDs that animation can be used at. Location WWIDs are separated by commas. [OPTIONAL]
To recognize what location type an object is, in-game hold the 'Shift' key on your keyboard and click on any object. Then click 'Wicked' and 'Object Information'. You’re looking for the WWID value.
Any object in the game can be used but if that object gets modified in the future it is very possible you will have to update its WWID.
Variable ' animation_location_constraints' is a list of location constraints that the location is required to fit into for the animation to be available. It's recommended to not use this variable unless strictly necessary. [OPTIONAL]
Here are all available animation location constraints:
Variable ' object_animation_clip_name’ is the clip name of your object animation CLIP (ClipName). [OPTIONAL]
❗ Important, this is the most common mistake new animators make. The "ClipName" variable is on the CLIP resource itself. Select the Clip resource in either Sims4Studio or S4PE and read the "ClipName" variable.
Variable ' object_geometry_state’ is the geometry state name of the used object. [OPTIONAL]
Variable ' object_material_state’ is the material state name of the used object. [OPTIONAL]
Variable ' animation_category’ is the category of your animation that it’s displayed as.
Here are all animation categories:
Variable ' animation_tags’ is a list of sex tags that are used to give the animation context and functions. [OPTIONAL]
Here are all tags:
Orientation
Actions / Poses
Style
Objects / Items
Theme
Other
Functional
Variable ' animation_loops’ is the number of times the animation will play in a row.
Variable ' animation_negative_duration_offset’ is the amount of time that is subtracted from the animation duration. This is only available when the 'animation_loops’ variable is set to 1.
Animations that are not intended to loop can use this to prevent the animation from looping for a split second (caused by desync) before the sex interaction progresses to the next animation.
For example, a transition animation is meant to play for 5 seconds and then switch to the next animation. By adding an extra empty 1 second to the end of the animation clip and then subtracting it with this variable, allows the game to switch the animation a second early, preventing the animation from starting over (looping).
A 5 second animation + 1 second of empty padding is an animation that plays for 6 seconds, but that 1 second subtracted using the 'negative_duration_offset’ prevents it from playing longer than 5 seconds and subsequently prevents it from starting over (looping).
Variable ' animation_stage_name’ is a unique stage name of this animation that is used to trigger this animation as the next stage. [OPTIONAL]
Variable ' animation_next_stages’ is a list of stage names that are used as the next animation to play after this one ends. Stage names are separated by commas. [OPTIONAL]
Variable ' animation_allowed_for_random’ is a flag which determines if this animation will be randomly picked in sex.
Variable ' animation_actors_list’ is the section where all actors of the animation are defined.
❗ Important, when adding actors make sure to begin with MALE actors animation_genders first, then FEMALE, and then BOTH. This will assure consistency and proper functionality of native game functions like animations IK.
Variable ' actor_id’ is the numerical ID that represents an actor and it is used to recognize it.
It should always be 0 for the first actor.
Variable ' animation_clip_name’ is the clip name of your animation CLIP (ClipName).
❗ Important, this is the most common mistake new animators make. The "ClipName" variable is on the CLIP resource itself. Select the Clip resource in either Sims4Studio or S4PE and read the "ClipName" variable.
Variable ' animation_type’ is the category of the interaction actor is performing.
Here are all animation categories:
Variable ' animation_genders’ is the gender type that this actor represents.
When using the “BOTH” type make sure to define the 'animation_pref_gender’ variable as well.
Here are all gender types:
Variable ' animation_pref_gender’ is the gender type that this actor would preference if 'animation_genders’ is set to BOTH. [OPTIONAL]
Here are all gender preference types:
Variable 'animation_has_animated_vagina' is a flag that determines if the actor will use the body bottom model with animated vagina bones or without animated vagina bones (0=Non-Animated, 1=Animated) [By default set to 0].
Due to animated vagina using the testicle bones, usage of the animated vagina model for roles that can be occupied by a male can cause graphical issues if the testicles are animated for the male role. If this actor role can be occupied by a male, set this variable to '0'. If this actor role can only be occupied by a female, set this variable to '1'.
Variable 'animation_has_invisible_teeth' is a flag that determines if the actor will normally display their teeth model or when enabled hide them for improved visuals when using their mouth (0=Visible, 1=Invisible) [By default set to 0].
Variable ' animation_outfit_category’ is the outfit category this actor will change into when the sex interaction starts. [OPTIONAL]
The intended use of this function is to adjust Sims outfit to the context of the sex location. For example, if the context of the sex location is a beach towel, change actors outfit into SWIMWEAR before undressing.
Here are all outfit categories:
Variable ' animation_naked_type’ is the type of outfit part that will be undressed when performing this animation.
Here are all naked flags types:
Variable ' animation_force_nude_hands’ is a flag which determines if gloves are forced to be undressed when performing this animation (0=Ignore, 1=Force) [Recommended for handjob animations].
Variable ' animation_force_nude_feet’ is a flag which determines if shoes are forced to be undressed when performing this animation (0=Ignore, 1=Force) [Recommended for footjob animations].
Variable ' animation_allow_strapon’ is a flag which determines if the actor will use a strapon even if the position is not designed for males (0=Disallow, 1=Allow).
If 'animation_genders’ is set for males while this position is used with a female, strapon will be applied no matter what.
Variable ' animation_x_offset’ is the offset of the actor position on the X axis. [OPTIONAL]
Variable ' animation_y_offset’ is the offset of the actor position on the Y axis. [OPTIONAL]
Variable ' animation_z_offset’ is the offset of the actor position on the Z axis. [OPTIONAL]
Variable ' animation_angle_offset’ is the offset of the actor orientation (360 degrees). [OPTIONAL]
Variable ' animation_actor_tags’ is a list of actor tags that are used to give the animation context and functions. [OPTIONAL]
Here are all actor tags:
Variable ' actor_interactions’ is the section where receiving actors are defined.
It’s important to determine interactions between actors in the animation. Things like cum or pregnancy depend on it.
Variable ' receiving_actor_id’ is the numerical ID of the receiving actor.
Variable ' receiving_actor_category’ is the interaction category that the receiving actor is receiving.
Here are all animation categories:
For example: Actor 0 is giving VAGINAL interaction to Actor 1, so Actor 1 is receiving VAGINAL interaction from Actor 0.
Variable ' receiving_actor_cum_layers’ is a list of cum types that will be applied on the receiving actor if this would be the last played animation. Cum layer types are separated by commas.
Here are all cum layer types:
The default value is 'NONE’ which means that the type of the cum layer is defined by the receiving category.
Variable ' receiving_actor_cum_inside’ is a flag which determines if the receiving actor should receive cum inside or outside (0=Outside, 1=Inside).
Outside will lower the chance of impregnation for climax animations. Variable by default is set to Inside.
Variable ' animation_props_list’ is the section where props are defined.
Remove this section if you’re not using props or your animation will not load!
Variable ' prop_id’ is the numerical ID that represents a prop and it is used to recognize it.
Variable ' prop_type’ is the type of the prop used in the animation.
Here are all prop types:
Variable ' prop_guids’ is a list of specific objects DEFs that will be used as a prop. If more than one DEF is provided, a random one will be chosen for the animation. Object DEFs are separated by commas.
To recognize what is the DEF of an object, in-game hold the 'Shift' key on your keyboard and click on any object. Then click 'Wicked' and 'Object Information'. You’re looking for the DEF value.
Variable ' prop_animation_clip_name’ is the clip name of your prop animation CLIP (ClipName).
Variable ' prop_geometry_state’ is the geometry state name of the used prop. [OPTIONAL]
Variable ' prop_material_state’ is the material state name of the used prop. [OPTIONAL]
Variable ' prop_scale’ is the scale/size of the prop object. [By default 1.0]. [OPTIONAL]
Variable ' prop_x_offset’ is the offset of the prop position on the X axis. [OPTIONAL]
Variable ' prop_y_offset’ is the offset of the prop position on the Y axis. [OPTIONAL]
Variable ' prop_z_offset’ is the offset of the prop position on the Z axis. [OPTIONAL]
Variable ' animation_events_list’ is the section where events are defined.
Variable ' event_type’ is the type of the event that will be triggered.
Here are all event types:
Variable ' event_start_timecode’ is the time as a decimal number at which the event will be triggered.
Variable ' event_end_timecode’ is the time as a decimal number at which the event will be stopped.
You can learn more about understanding timecodes in the ' Adding Native Events to Animations' tutorial.
If the event is not intended to ever end, set the 'event_end_timecode’ as some high number like 999.
Variable ' event_target’ is the target of the event. It can be either an actor, prop or the object used for sex. A letter symbolizing the target is used along with the number identifier assigned to the actor/prop:
To use an actor as a target, take its 'actor_id’ and put an 'a’ in front of it forming an ID like 'a0’, 'a1’, 'a2’ etc.
To use a prop as a target, take its 'prop_id’ and put a 'p’ in front of it forming an ID like 'p0’, 'p1’, 'p2’ etc.
To use an object as a target, simply put the character 'o’ into the field without any numbers.
Variable ' effect_name’ is the name of the effect used for an EFFECT event. You can find the list of all effects here.
You can test events in-game by using the 'ww.play_effect <effect_name> [joint_name]’ command.
Variable ' effect_joint_name’ is the bone joint name from the actor or object rig. You can find them at the bottom-left corner of Blender 3D View when selecting rig bones.
Variable ' cum_layer_type’ is the cum type that will be applied on the 'event_target’ at the set 'event_start_timecode’ timecode.
Here are all cum layer types:
Variable ' cum_layer_level’ is number of times the 'cum_layer_type' is applied on the 'event_target’.
Variable ' naked_type’ is the type of outfit part that will be undressed from the 'event_target'.
Here are all naked flags types:
Variable ' geometry_state’ is the name of the geometry state that will be set on the 'event_target’.
Variable ' material_state’ is the name of the material state that will be set on the 'event_target’.
Variable ' actor_has_condom’ is used to prevent the event from running if the 'event_target’ is wearing a condom.
Variable ' actor_is_gender’ is used to prevent the event from running if the 'event_target’ has a gender from this list.
Turn the game on and start the game.
Open the game console by pressing Ctrl+Shift+C.
Type in 'testingcheats on’ command.
Hold the 'Shift' key on your keyboard and click on any object. Then click 'Wicked' and 'Object Information'.
Displayed notification contains WWID (numerical value) that you put in as the custom location.
In addition, the notification contains info about the object category that you might want to use instead.
Last update: February 25th, 2025