This tutorial will explain to you how to add native events (lips movement and sounds) to animations. To add sex events check out the Creating WickedWhims Animation XML File tutorial.
Note that archives for 7-Zip (.7z) should be unpacked using 7-Zip, otherwise, it may result in errors when using the unpacked files.
2. Edit in S4PE
To add events you need to have an animation, so check other tutorials if you have not already made one. You add events to your animations after you’re done with creating and exporting them. Open your package with animations using S4PE.
3. Open Events Grid View
Select your CLIP and click the Grid button at the bottom of the S4PE editor.
Select the ‘ClipEvents’ line from the list and click the ’…’ button on the far right. You can remove existing, added by Sims4Studio, two events from the list by using the 'Delete’ button on the bottom. Note that editing CLIP file in S4PE will edit CLHD file for you automatically, so you don’t have to worry about it.
4. Understanding Timecodes
Events require to set the Timecode they will be triggered at when the animation plays.
Every frame of your animation has a specific length. That length is set in the 'TickLength’ field of your animation and by default, it’s ’0.03333334’. This means that the 'TickLength’ value multiplied by a number of frames of your animation will result in the duration of your animation.Example: If your animation has 81 frames and you multiply it by the 'TickLength’ (81 * 0.03333334) you will get the animation duration which is '2.7’.
Example: If your animation has 81 frames and you multiply it by the 'TickLength’ (81 * 0.03333334) you will get the animation duration which is '2.7’.
To get the Timecode for a specific frame of your animation, take that frame number and multiply it by the 'TickLength’.
Example: If you want to play a sound at the 20th frame of your animation, multiply that by the 'TickLength’ (20 * 003333334 = 0.06666668). Your Timecode for the 20th frame is '0.06666668’.
5. Adding Sounds Events
To add sounds, click the 'Add’ button at the bottom and select 'ClipEventSound’. Setup the values just like in the screenshot above for the first sound. Replace the 'SoundName’ field with a name of a sound you want to play. Replace the 'Timecode’ field with the time you want to play the sound at. The 'Unknown1’ field defines the ID of your event. The first event will have the value 0x00000001. Every next event ID grows by 1 in hexadecimal format: 0x00000001 -> 0x00000002 -> 0x00000003 -> 0x00000004 -> 0x00000005 -> 0x00000006 -> 0x00000007 -> 0x00000008 -> 0x00000009 -> 0x0000000A -> 0x0000000B -> 0x0000000C -> 0x0000000D -> 0x0000000E -> 0x0000000F… List #1, List #2, List #3 of sounds that you can use. I don’t know of any way to listen to them yet. The only thing you can do is to use them and test them in-game or try to export them based on the included instance id. Once you’re done adding events, click the 'OK’ button and then 'Commit’ button. Remember to save your package!
6. Adding Lips Movement Suppression Event (unlock mouth bones)
By default, the game uses mouth bones to make Sims speak, which means that you can’t animate them. This is not true if you suppress lips. Doing that will block Sims from talking and allow you to animate mouth bones.
To add lips movement suppression, click the 'Add’ button at the bottom and select 'ClipEventCensor’. Setup the values just like in the screenshot above. Keep the 'Timecode’ as '0’ since it should start from the beginning of the animation. The 'Unknown1’ field defines the ID of your event. The first event will have the value 0x00000001. Every next event ID grows by 1 in hexadecimal format: 0x00000001 -> 0x00000002 -> 0x00000003 -> 0x00000004 -> 0x00000005 -> 0x00000006 -> 0x00000007 -> 0x00000008 -> 0x00000009 -> 0x0000000A -> 0x0000000B -> 0x0000000C -> 0x0000000D -> 0x0000000E -> 0x0000000F… Once you’re done adding events, click the 'OK’ button and then 'Commit’ button. Remember to save your package!
Use a more recent version of Sims4Studio if you have issues exporting objects.
2. Get to the objects
Open Sims4Studio, select the ‘Override’ option under 'Object’ button and click the 'Object’ button. Prepare for a potentially long loading since Sims4Studio has to load all objects from the game.
3. Pick an object
Start typing in the name of an object you’re looking for and select it from the list. Once you’re sure this is the object you want, click the 'Next’ button. When asked where to save your new package put anything you want in, it doesn’t matter when exporting objects.
4. Get to the mesh
Switch to the 'Meshes’ tab.
5. Export the mesh
Click the 'Export Mesh’ button and choose where you want to save the blend file.
6. Import the mesh to Blender
Importing the mesh to Blender is the same process as appending actors to your animations. The only difference is that you have to select objects called 's4studio_mesh_’ to add the objects.
This tutorial will explain to you basics about creating animations for The Sims 4 using Blender.
Videos may not be visible in some browsers!
This tutorial is safe for people who never used Blender. Keep in mind that this is not the most optimal way to use Blender. You should consider looking up professional tutorials to learn more.
These are heavily edited Sims rigs that support custom tongue and penis movement. You’re free to use any other The Sims 4 rigs you can find.
Downloaded files with extension ’.blend’ can now be loaded directly to Blender.
3. Open rigs in Blender
Rig files with extension ’.blend’ can be simply loaded to Blender. After you install Blender, open one of the downloaded rigs.
In this tutorial only the ‘YOURNAME_Animation_Name_male’ and 'YOURNAME_Animation_Name_female’ files will be used.
4. This is the animation timeline
You use the timeline to move the time of your animation and add keyframes. To actually interact with created keyframes you need to use the 'Dope Sheet’ which will be explained later. Below the timeline, you will find numbers labeled 'Start’ and 'End’. 'Start’ is the frame your animation starts with and it always has to be set as 0. 'End’ is the frame that your animation ends with (duration or your animation). Note that this only applies to Blender and if you add keyframes past the animation duration they will be counted by Sims4Studio when exporting.
5. This is the Dope Sheet
On the left, you can change the visible editor to 'Dope Sheet’ and switch the mode to the 'Action Editor’. Dope Sheet/Action Editor is like an advanced timeline where you can move, copy and delete existing keyframes. More on that later.
6. This is your camera
Moving camera in Blender can be really complicated and there is a lot to learn about it, but here are the basics. By holding the Middle Mouse Button you can rotate the camera around. With the Scroll Wheel, you can move forward or backward. While holding the Shift button and holding the Middle Mouse Button at the same time you can move in space. This is in no way the most optimal way of operating the camera in Blender, but it should be enough for beginners.
7. These are bones
Before animating rigs, make sure to always select one by clicking on the icon of the actor you want to modify. The screenshot above shows the 'Outliner’ which contains all the objects in your scene. Any icon with a circle on it means that it is selected as the active object you’re modifying.
All the black dots on the Sim model are called 'bones’. You can select any bone by using the Right Mouse Button, it will get highlighted when it is selected.
8. Rotating bones
For purposes of this tutorial, we will be using the Rotation Tool, but this is not the only way to rotate bones. To enable the Rotation Tool you need to click on the icon showed on the screenshot above. If you don’t see the icon pointed by the arrow, click on the icon on the left, with lines colored in red, blue and green, to make the 'Rotation Tool’ icon visible. To move bones (don’t do this) you need to use the 'Translation Tool’ which will be explained later in this tutorial.
Once you select the 'Rotation Tool’ and one of the bones, you can rotate it by dragging one of the colored lines that are displayed around the bone. Try selecting different bones and see what you can move.
9. Even more rotating bones
Some bones can be clicked multiple times to access different bones that are placed in the same spot. An example is an eye, which with every click allows you to move the upper lid, bottom lid and the eye itself. To know that you’re selecting different bones, look at the name of the selected bone that is displayed at the bottom left corner of the 3D View.
10. Import second actor (or more)
Importing actors and objects allows you to align everything properly in one animation. Note that you can’t export the animation with multiple actors, but more on that later.
To import actors or objects: 10.1. Click 'File’ -> 'Append’. 10.2. Pick blend file that contains the actor/object you want to add (for example the female rig). 10.3. Open 'Objects’ folder and select the rig and body parts (rig, head, top, bottom, feet). To select multiple things hold the Shift key and click the things from the list. 10.4. Click the 'Link/Append from Library’ button.
You can import as many actors/objects as you want to one animation.
Remember that after importing actors (Sims) and/or objects you need to switch them to the 'Pose Mode’.
11. Move actors around
To move actors you need to select the root bone. There is nothing that would indicate the right one, you have to find it yourself and remember which one is it (for reference look at the video above). Once the root bone is selected, switch to the 'Translation Tool’ and move the sim by dragging one of the colored arrows around the selected bone.
Remember to never move objects, only actors!
12. First keyframe
A keyframe is basically a frame/pose of your animation. You can understand it as a pose that your Sim is at, before moving into another pose (keyframe).
The first frame has to start from the first frame position, so make sure your timeline is set to the farthest left. In addition, the screenshot above shows your active selected frame which should be displayed as “0” (zero).
To create a keyframe you have to select all actor bones you’re creating the keyframe for. Select the rig of the actor and hover over its model with your mouse. Press the “a” key on your keyboard to select all the bones, they should light up. Then press the “i” key on your keyboard and select 'LocRot’ from the list. This saves all of the bones rotation values in a form of a keyframe.
That’s it, the first frame of your animation is done.
When you want to add more keyframes: 1. Move the active frame on the timeline few frames forward. 2. Move bones of the actor to make a new pose. 3. Select all the bones and 'LocRot’ again.
13. Delete, move and copy keyframes
To move, copy and delete keyframes you need to use the 'Dope Sheet’.
There are multiple ways you can select keyframes on the 'Dope Sheet’, but you only need one to learn the basics. To select a keyframe (whole column with all the bones), hold the Alt key and click one of the diamond shapes with the Right Mouse Button. They will light up in orange when they are selected.
While a keyframe is selected use: Key the “g” button to move selected keyframe and place it somewhere else. Hold the Shift key and press the “d" key to copy selected keyframe and place it somewhere else. Press the Delete key to delete the selected keyframe.
You can select multiple keyframes if you hold the Shift and Alt keys together and click the Right Mouse Button on keyframes.
14. Handle multiple actors
Every rig has its own timeline with keyframes which means that you can’t export one animation with multiple actors. Every actor has to have its own animation file, so once you’re done with your animation, save and close Blender.
Create a copy of your animation file per actor in your animation. For example, if you have two actors (a male and a female), create two copies. Then open each copy and remove other actors from it, leaving only one actor per animation file. Removing an actor means removing its rig from the file. The video above shows how to remove the model too, but that is not required. To select multiple things, hold the Shift key.
15. Exporting animations
Check the 'Converting Blender Animations to Clips’ tutorial on how to turn blend files into clips and clip headers to use them in the game.
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.