Creating WickedWhims Animation XML File
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’ tutorial.
1. Download a template & tools
Pick one of the templates. Commented one is recommended for beginners.
> Commented Template - Download (Open -> Right Click -> Save as…)
> Uncommented Template - Download (Open -> Right Click -> Save as…)
This application is required:
> Modding Toolbox - Download (or use Hash Generator in Sims4Studio)
These applications are optional. If you don’t own any coloring text editor, try one out:
> Sublime Text 3 - Download
> Notepad++ - Download
> XML Validation - Open
2. Create the hash values
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.
Recommended naming: “YOUR_NAME:WickedWhimsAnimations”, example: 'TURBODRIVER:WickedWhimsAnimations’.
> 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 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.
> 4.7.5. Variable 'event_target’ is the target of the event. It can be either an actor or the object used for sex.
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 an object as a target, simply put the character 'o’ into the field without any numbers.
> 4.7.6. 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.
> 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.
Last update: 15th of October 2018





