Tested in Sims 4 version 1.20.60.1020 - No Expansions Required
This version fixes recent (and the ongoing) problem with social interactions when flashing sims. In addition this update introduces the ability to setup stages, but I am not releasing any supported animations or tutorial for it yet.
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.
> 2.1. Type in the name of your package and make sure it contains your name.
> 2.2. Copy the FNV 64 field without the '0x’ prefix.
> 2.4. 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’.
> 2.4. Switch the display result to 'Decimal’.
> 2.5. Copy the FNV 64 field. We will need it in the next steps. Keep the 'Modding Toolbox’ open.
3. Understanding the file structure
Keep in mind that this image is not up to date, it’s just representing the idea of the file structure.
> 3.1. 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.
> 3.2. 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.
> 3.3. 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.
> 3.4. 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.
> 3.5. 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.
4. Setup the variables
> 4.1. The image below presents variables highlighted in red, purple, light-blue and yellow that you can modify. These variables are always between “>” “<” characters.
> 4.2. 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.
> 4.3. 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.
> 4.4.1. 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.
> 4.4.2. 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.
> 4.4.3. Variable 'animation_author’ is the name of the animation creator. It’s probably your name.
> 4.4.4. 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:
NONE
FLOOR
TABLE_DINING_SHORT
TABLE_DINING_LONG (this object can have wideness of 2 or 3 spaces)
TABLE_TV_STAND
TABLE_COFFEE
TABLE_ACCENT (this object can have different heights)
TABLE_PICNIC
TABLE_OUTDOOR
TABLE_OUTDOOR_UMBRELLA
DESK
BAR (this object can have wideness of 2 or 3 spaces)
COUNTER
SOFA
LOVESEAT
BENCH_OUTDOOR (this object can have wideness of 2 or 3 spaces)
WORKOUT_MACHINE
CHAIR_LIVING
CHAIR_DINING
CHAIR_STOOL
CHAIR_DESK
TOILET
DOUBLE_BED
SINGLE_BED
OTTOMAN
HOTTUB
SHOWER_TUB
SHOWER
BATHTUB
SAUNA
YOGA_MAT
MASSAGE_TABLE
WINDOW
> 4.4.5. 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 recognise what location type an object is, enable debug functions using a command 'ww.enable_debug’ (or 'ww.enabledebug’) and click on objects to display their data. You’re looking for 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.
> 4.4.6. Variable 'object_animation_clip_name’ is the clip name of your object animation CLIP (ClipName). [OPTIONAL]
> 4.4.7. Variable 'animation_category’ is the category of your animation that it’s displayed as.
Here are all animation categories:
TEASING
HANDJOB
FOOTJOB
ORALJOB
VAGINAL
ANAL
CLIMAX
> 4.4.8. Variable 'animation_tags’ is a list of sex tags that is used to give the animation context. THIS FEATURE IS NOT YET FUNCTIONAL, PLEASE DO NOT USE THIS.
> 4.4.9. Variable 'animation_loops’ is the number of times the animation will play in a row.
> 4.4.10. Variable 'animation_stage_name’ is a unique stage name of this animation that is used to trigger this animation as the next stage. [OPTIONAL]
> 4.4.11. 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]
> 4.4.12. Variable 'animation_allowed_for_random’ is a flag which determines if this animation will be randomly picked in sex.
> 4.5.1. Variable 'animation_actors_list’ is the section where all actors of the animation are defined.
> 4.5.2 Variable 'actor_id’ is the numerical ID that represents an actor and it is used to recognised it.
It should always be 0 for the first actor.
> 4.5.3. Variable 'animation_clip_name’ is the clip name of your animation CLIP (ClipName).
> 4.5.4. Variable 'animation_type’ is the category of the interaction actor is performing.
Here are all animation categories:
TEASING
HANDJOB
FOOTJOB
ORALJOB
VAGINAL
ANAL
NONE
> 4.5.5. 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:
MALE
FEMALE
BOTH
> 4.5.6. 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:
MALE
FEMALE
> 4.5.7. Variable 'animation_naked_type’ is the type of outfit part that will be undressed when performing this animation.
Here are all naked flags types:
NONE
TOP
BOTTOM
ALL
> 4.5.8. 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].
> 4.5.9. 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].
> 4.5.10. 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.
> 4.5.11. Variable 'animation_y_offset’ is the offset of the actor position on the Y axis. [OPTIONAL]
> 4.5.12. Variable 'animation_facing_offset’ is the offset of the actor orientation (360 degrees). [OPTIONAL]
> 4.6.1. 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.
> 4.6.2. Variable 'receiving_actor_id’ is the numerical ID of the receiving actor.
> 4.6.3. Variable 'receiving_actor_category’ is the interaction category that the receiving actor is receiving.
Here are all animation categories:
TEASING
HANDJOB
FOOTJOB
ORALJOB
VAGINAL
ANAL
NONE
For example: Actor 0 is giving VAGINAL interaction to Actor 1, so Actor 1 is receiving VAGINAL interaction from Actor 0.
> 4.6.4. 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:
DISABLED
FACE
CHEST
BACK
VAGINA
BUTT
FEET
NONE
The default value is 'NONE’ which means that the type of the cum layer is defined by the receiving category.
> 4.6.5. 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 pregnancy by half. Inside will use full pregnancy chance. Variable by default is set to Inside.
> 4.7.1. Variable 'animation_events_list’ is the section where events are defined.
> 4.7.2. Variable 'event_type’ is the type of the event that will be triggered.
Here are all event types:
EFFECT
CUM
> 4.7.3. Variable 'event_start_timecode’ is the time as a decimal number at which the event will be triggered.
> 4.7.4. Variable 'event_end_timecode’ is the time as a decimal number at which the event will be stopped.
You can test events in-game by using the 'ww.play_effect <effect_name> [joint_name]’ command.
> 4.7.7. 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.
> 4.7.8. 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:
FACE
CHEST
BACK
VAGINA
BUTT
FEET
> 4.7.8. Variable 'actor_has_condom’ is used to prevent the event from running if the 'event_target’ is wearing a condom.
5. Identifying objects
> 5.1. Turn the game on and start the game.
> 5.2. Open the game console by pressing Ctrl+Shift+C.
> 5.3. Type in 'ww.enable_debug’ (or 'ww.enabledebug’) command.
> 5.4. Click on any object and use 'Debug - Get Object Data’ option.
> 5.5. 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.
This tutorial will explain to you how to create a The Sims 4 package with animations for WickedWhims. If you want to know how to create animations check the ‘Creating Basic Animations In Blender’ tutorial and 'Converting Blender Animations to Clips’.
Simply import the created XML file to your package. That’s it, your package is ready. Remember to save it. The only thing now is to put the created package into the Mods folder and test it.
If you’re using a newer version of Sims4Studio, use the recommended Blender version.
2. Import Animations
Once you’re done with your animation, you have to turn the ’.blend’ files into Clip and Clip Header files. To do that you have to use Sims4Studio, so open it. For this tutorial, we are using version 2.7.
If at any point Sims4Studio requires Blender to be installed and you’ve already installed it, set its location in ‘Settings’ menu.
> 2.1. When Sims4Studio loads, select 'Clip Pack’ option and click the 'Animation’ button.
> 2.2. Choose a place to save your package. We will be opening it later.
> 2.3. Right away switch to the 'Clips’ tab.
> 2.4. Click the 'Import’ button and select a blender file (.blend) with the animation you want to load.
> 2.5. To convert multiple animations, click the 'Add’ button, select the newly added field and import another blender file.
> 2.6. Once you’re done importing your animations, switch to the 'Warehouse’ tab.
In my example, I have two animations - one for a male and one for a female.
3. Verify and set animation duration
> 3.1. Select imported Clip on the list to see its data. Focus on FrameDuration, MaxFrameCount and Duration.
In newer versions these are called TickLength, TickCount and Duration.
In some situations, your animation might not loop seamlessly. In that case, you may want to adjust the FrameDuration and the MaxFrameDuration with the Duration value.
> 3.2. MaxFrameCount field of your Clip has to be the same amount as a number of frames in your Blender animation. If it’s not, set it as such.
The number of frames of your animation in Blender is in the value labeled as 'End’ at the bottom of the timeline.
> 3.3. FrameDuration field has to be set as '0.03333334’, which represents the duration of a single frame of your animation.
You use this value to set your animation duration by multiplying FrameDuration with MaxFrameCount.
> 3.4. Duration field is your animation duration which is based on your MaxFrameCount multiplied by FrameDuration.
For example, if your animation has 100 frames, you multiply it by 0.03333334 to get 3.333334 which would be your animation duration.
MaxFrameCount and FrameDuration variables always have to work togther to create the Duration variable.
> 3.5. Every Clip is paired with a Clip Header which has to represent the same exact information as paired with it Clip.
You can see pairs of Clip and Clip Header by the same 'Instance’ value on the list. Make sure Clip and Clip Header have the same values entered for FrameDuration, MaxFrameCount, Duration, and ClipName.
You can consider editing these values in S4PE instead which would automatically update the Clip Header file for you.
> 3.6. Once all Clips and Clip Headers are checked and ready, you can save and close Sims4Studio.
4. Extract Clip and Clip Header files
> 4.1. Open created with Sims4Studio package using S4PE. From 'File’ choose 'Open…’ and pick your package.
> 4.2. Select all the CLIP (Clip) files and CLHD (Clip Header) files and export them for later use.
Now you have exported your animation files that are ready to be used directly by the game.
5. Create WickedWhims Animations Package
For this, you have to check out the 'Creating WickedWhims Animations Package’ tutorial.