Heat Modding Guide
Table of Contents
Troubleshooting Common Project Setup Issues
Getting Common Game References
Dildo Spawn and Interactables Placement
Supported Characters and Poses
Custom Poses for Modded Scenes
Packaging Custom Poses into your Exported Mod
Populating the Character Reference Container
(Male or Female) Climax Controller
Previous Mod_Char Reference Container
Modded Character Skinning Setup
Updating Your Character To Newer Game Versions
Update Instructions #1: 0.5.8.2 to 0.5.9.2
Update Instructions #2: 0.5.9.2 to 0.6.0.2
Update Instructions #3: 0.6.0.2 to 0.6.5.2
Update Instructions #4: 0.6.5.2 to 0.7.0.2
Update Instructions #4: 0.7.0.2 to 0.7.5.2
Update Instructions #5: 0.7.5.2 to 1.0.0
Using the Steam Workshop Uploader
Adding the Steam Workshop Uploader to Older Projects
- Welcome to the Heat Modding Guide! This document will help guide you through the modding process so that you can start making awesome mods quickly.
- Modding in Heat requires a certain amount of knowledge depending on what type of mod you are making:
- Please note that this guide will not teach Unity Engine basics. If you have little Unity Engine experience, it is up to you to find resources to learn. This document will only cover concepts pertaining to Heat modding.
You will need:
When exporting a mod, the mod exporter compiles all assets contained in the project, including example mod assets. Before continuing, it is best practice to take a moment to delete assets that you will not require. This step must be done prior to releasing a mod for other users to prevent your mod from conflicting with other mods. This section can safely be skipped for now if you are not sure what type of mod you will be making, but be sure to revisit later.
If you continue to have issues, feel free to contact us in the #mods-poses-discussions section of the official Heat Discord for assistance.
The project comes with an example Dildo for you to peruse and learn from when it comes to modding dildos in Heat. They are very straightforward and should give you no problems getting started right away.
The directory contains a mesh folder, which contains the FBX model of the dildo, a textures folder which is used by the FBX model’s material object, as well as a Data folder which contains general joint values which are used by the dildo’s prefab.
The most important script in the prefab is the Dildo script and below we’ll explain what the variables do.
Tip: This object is used to calculate the length of the dildo starting from the tip towards its root. It should be placed near the end of the dildo. This object must contain a collider, depending on the dildo sometimes it will not make sense for the tip to have a collider (for example, an easter egg), in this case, just set the collider to be very small, but never remove the collider outright.
Root: This object is used to calculate the length of the dildo starting from the tip towards its root. It should be placed near the base of the dildo.
Depth Limit: This object determines how deep the dildo can go and will be placed near the Root.
Type Of Toy: This must be set to Modded_Toy.
DisplayName: This string will be used by the UI system to identify this particular dildo. It will be shown in-game exactly as it is written. Make sure the ID of your dildo is unique, because if there are duplicates from other mods issues will arise.
Scale graph: Dictates how to scale the dildo based on the user settings in the options menu. A graph starting at 0.85 and ending at 1.05 is very standard and it is the default settings of this example dildo. Note: Scale support for modded dildos is no longer present due to UI updates. This will be corrected at a later date.
Look Target: This is the gameobject a character will look towards whenever the dildo comes within viewing distance of the character. It should be placed around the middle of the dildo, if it’s placed too close to the tip then issues may occur during BJ animation playback. The Look Target object must also contain a trigger collider spanning roughly from the root all the way to the tip of the dildo.
The object set to this variable must also contain the LookAtTarget script. For dildos, the variables in this script must be set to ‘Is permanent’ to true, and the Style to penetrator. The permanent variable is used to determine if the character should look at this object for the entire duration it is in view (as opposed to when the character looks at an object for a few seconds while it is idle).
CumEmitter: The object set to this variable must be placed where the cum should eject from this dildo. Generally at the very tip of the dildo.
Renderer: This variable expects a mesh renderer, which should be set to the FBX model used by your dildo.
Joint Value variables: These scriptable objects govern how the dildo will behave when it is hovering in the air if the user settings demand it, as well as how the dildo will behave during the autothrust logic. You are free to modify these values but you will need a deep understanding on how joints work in Unity.
The climax related variables govern how the dildo will behave during climaxing. They control how much vertical force to use during spurts, the speed range at which cum should shoot (taken randomly), how long the spurt should last, as well as the speed curve which further modifies the cum velocity based on time.
You are more than welcome to play around with these values to perfectly match the look of your dildo! These default values are great for small/medium dildos whereas bigger ones may need these values calibrated.
Now that we are more familiar with the Dildo script, let’s take a look at the Dildo prefab itself!
As you can see, the children of the prefab are properly named so that you know what each one represents.
Whenever you are ready to create a brand new dildo, it is recommended to start with this prefab as the base (or make a copy of it so you don’t destroy the original) because the tags and layers of the prefab are already properly set, all you have left to do is the following:
That’s it! At this point you should be ready to verify and export this mod. Read the Exporting Mods section to learn more about this.
Penetrable toy modding is similar to Dildo modding but with more steps. An example penetrable toy mod is present in _YourMod > ToyModding > Penetrable Toys. You will notice that the example penetrable toy model has dozens of bones present to handle deformation. It is recommended that your toy have at least 4 lines of bones going down the length of the toy. More bones will equate to more realistic deformation but also more set up work.
Once you make a penetrable toy model in your favorite modeling program, find the Penetrable Toy - Vagina Prefab. It would be wise to duplicate this prefab to use as an example of what your toy should look like. Open your prefab, and delete the existing VaginaPenetrable .fbx model and replace it with your own.
Next, In the Penetrable Toy script, change the Id variable to something unique. This is the name that will appear in the penetrable toy section of the radial menu. Also, if another penetrable toy shares this Id, your toy may not work properly.
Adjust the Front Orifice and Back Orifice transforms to the front and back orifice of your toy respectively. Note that the position of the Orifice game object itself must be placed near the orifice, not just the capsule collider:
Image Credit: Sidekick
Next, there are two places that you must assign the Mesh Renderer of your toy in the root of the prefab:
Next, turn your attention to the dozens of colliders located in each group of the hierarchy. Your model needs one collider for each bone in your model in these groups. Feel free to delete unneeded colliders from the example. For ease of penetration, your front two sets of colliders should be capsule colliders. Any colliders after that may be box colliders.
In each collider’s game object, find the Capsule Cast Slider script and assign the respective bone that collider is to control to the Constrained Bone transform variable.
Each collider’s game object must also be located at the same transform position as the bone in your model. If your penetrable toy expands or collapses severely after penetration, then this step was not done correctly.
Adjust the colliders radially around the toy so that there is a sufficient gap for the penetrator to insert into while being as close to the orifice as possible:
Image Credit: Sidekick
Go back to the root game object, and in the Grabbable script, add any colliders you’d like to be ignored while the player holds the toy in the Held Ignore Colliders array. The example penetrable ignores the first two rows of colliders.
Adjust the Orifice and Orifice End game object transforms to be located at the front and back of the penetrable respectively. In the Volume Orifice script attached to the Orifice game object, populate the Body Renderer field with your fbx’s Mesh Renderer. Adjust the values in this script as needed to make penetration look as intended.
Finally, proceed to the Exporting Mods section of this guide and export your mod. Test the mod for functionality and go back and adjust colliders as needed until the deformation looks as you intend.
Character skinning is split into two types. Basic character skinning which swaps only textures, and Advanced character skinning which swaps out the entire material. Basic character skinning is intended for users who do not have much knowledge about materials and shaders. While the advanced version allows for further customization of the character skin.
Under the folder ‘CharacterSkinning’ you will find all you need in order to get started with changing a character’s skin. The script Mod_CharacterVisuals handles all the work so all you really need to do is modify any material you want.
Head over to the Materials folder inside the Atlas directory, and you’ll see a list of all materials used by Atlas. These are the materials you will slot your textures into. Any texture slots that are left blank will get automatically populated in game by the character’s default texture.
In the _WorkshopModels folder, you will find workshop models for each character. These are low poly versions of the game models that can be used to paint textures using software like Blender or Substance painter. After you are finished working on your texture, simply import them into Unity and set them to the appropriate material map (Albedo, Metallic, etc) and you will be ready to export and enjoy the mod!
If you care to learn more about how this works and see more customization options, let's learn about Character Skin prefabs.
As an example, let’s look at the Atlas folder, inside you’ll find the ‘Character Skin - Atlas’ prefab. The Character Skin prefabs contain a script called Mod_Character Visuals that contain the data required to reskin a character.
As you can see, the script contains a variable specifying the name of the character you wish to skin, as well as a list of objects representing the ID as well as the material to set. For instance, the ‘Atlas_Body’ of Atlas has the Atlas.Body material.
Starting with Heat version 0.5.8.2, you can optionally specify an Author name and a Skin Sprite to be added to your character skin’s UI button.
Note: You are even able to skin modded characters! If the mod author releases the name (ID) of the character, as well as the name of each body type, then you can simply create a brand new Character Skin prefab, set the names appropriately and off you go!
The only character that slightly varies from the rest is Emmy, this is because he uses a custom shader when it comes to rendering his dick.
If you click on his dick material, you’ll see that it has a custom shader, containing two sets of albedo/metallic and normal textures. Feel free to try using only one to see how it behaves in-game and why you do in fact need two.
You’ll also notice that the dick material seems to render as black in the editor (even if you put your own textures in said material) This occurs because this custom shader has only variables and no custom logic, this shell of a shader gets swapped out for the real one once the mod is loaded in, so don’t worry if it looks black in your editor, because it should look fine in-game.
On the Mod_CharacterVisuals Script, you will also notice a boolean (coding for “check box”) called Disable Color Change. This boolean only applies to Vertex character skins. If checked, this will disallow players from changing Vertex’s shell color with the color sliders in game. If you want players to still be able to change Vertex’s shell color, leave this box unticked.
Once completed, head to the Exporting Mods section of the modding guide to export your mod!
Note: Before we begin, it is important to note that this reskinning method has some known limitations. Characters skinned in this way will only be able to be colored by the markers in game if the shaders used share the same naming texture property naming scheme as Unity’s Standard shader. Similarly, Vertex skins made by advanced skinning will only be capable of having his shell color changed by the sliders in game if the above is true.
Inside of each characters’ skinning folder, you will see a folder called Data. This folder contains scriptable objects with additional options. Each material in a characters’ Materials folder will have a corresponding scriptable in the Data folder.
You may customize the materials in the Materials folder as you see fit. All settings including shaders and shader settings will apply in the finished mod as the entire material will be swapped.
Once you’ve customized your material, go to the corresponding scriptable object in the Data folder. In the inspector window, check the box next to Swap Full Material. This tells the game that we are performing a full material swap instead of a Basic Character Skin as described above.
Additionally, there are options to use the game's existing albedo textures, normal maps, detail masks, and metallic maps. To use an existing texture file, check the appropriate box and the texture will be applied to your material at runtime. For example, if you are reskinning and reshading Marina but want to use their original normal map, check Use Original Normal Map.
However, if you are changing the characters’ shader, you need to type in the property name of the shader that the texture will be applied to. For example, Unity’s standard shader’s Albedo Texture has a property name of _MainTex while your shader’s Albedo Texture may be called Albedo1. If your shader does not have a property called _MainTex, this would cause an error and the texture would not be applied.
Note: The default shader property names are for Unity’s Standard Shader. No need to change these values unless you are changing the material’s shader.
To find the correct property name for your shader, go to the root CharacterSkinning folder. In the CharacterSkinning folder, there is a prefab called GetShaderIDs. Drag and drop the GetShaderIDs prefab into your currently active Unity scene. Click on the GetShaderIDs game object you just created. In the inspector you will see a script with a slot for a material. Drag and drop a material with your shader into this script and press the play button above the scene view. Go to the console and here you will see that unity has output a list of all shader properties that are either textures or colors.
Simply type the appropriate property name that you would like the game’s texture to be applied to and you are done! No need to edit anything in the Character Visuals prefabs unless you are reskinning a modded character and need some custom setup. If that is the case, a similar setup as explained in the Basic Character Skinning Setup is required. Be sure to delete the character skinning folders for any characters that you are not reskinning and proceed to the Exporting Mods section of this guide.
Starting with Heat V.6.1.2, two Unity Events have been added to the character skinning prefabs. On Swap To This Skin, and On Swap From This Skin. These Unity Events allow you to execute code when a player swaps to your character skin or swaps from your character skin to a different skin.
Pre-written scripts compatible with this system are available for the more common On Skin Swap use cases and more may be available in the future:
Once you’ve set up your scripts, set up the On Swap To This Skin unity event, slotting in the scripts and selecting the appropriate Method to run. With the scripts detailed above, there is no need to set up On Swap From This Skin events to undo your changes to a character. These are set up for you in code at run time.
You may also choose to write your own On Skin Swap scripts. If so, please abide by the following rules:
To add a custom scripted object to heat simply create a prefab, and add the Mod_Object script to it. This prefab will spawn into the game at the prefab’s transform location. Any scripts attached to the prefab or its children will run at scene start when the exported mod is enabled.
The modding project also comes with several helper scripts that can perform useful functions on custom scripted objects. These can be found in the UsefulScripts folder. Add one of these scripts to a custom scripted object or scene object in a custom scene and configure:
If you would like to spawn an object in a modded scene, simply set Scene ID to Modded_Scene and type in the name of the Modded Scene.
Note: This script has been moved to game side DLLs. Find this script via Add Component in a GameObject’s Inspector window.
Important Note: For modding purposes, the SpawnInteractable script works identically to SpawnToy. This script will be included in the DLLs from Version 0.5.3 and higher. You will not find it in the Useful Scripts folder. Add it to a game object via Add Component => SpawnInteractable.
Once you find the name of the game object you wish to mod, use functions like GameObject.Find() find references to that game object.
Similarly to shader swapping in the Advanced Character Skinning section above, you will need to find the names of your shaders properties using the GetShaderIDs prefab and type in the property names to allocate existing game textures to their appropriate texture slots.
Making direct calls to Heat will be done through a script named HeatAPI.cs. In there you will find some of the most common or useful functionality that you may want as a modder. As of June 1st, 2023, its functionality will be very limited, however, as time goes on, more and more functions will be implemented.
Note: If you’d like to see certain functionally through this API please let us know in our Discord, if it seems useful to not only you but the rest of the community then we will implement it!
HeatAPI offers the following functions:
Note: HeatAPI calls are safe to be made from any function in your custom scripts, such as Awake, Start, Update, and even Coroutines.
This section details how to get references to commonly needed game objects/instances/prefabs such as the Player, Character Prefabs, Character Instances via more direct means than using the HeatAPI.
Heat supports the loading of your very own scenes created in the Unity editor. Scene modding is actually quite simple and only requires a few extra steps from you.
In a nutshell, your scene must contain 3 game objects which we will discuss below, and you must fill out a script relating to some information of your scene. We will also go over how to dictate which built-in character can and can’t spawn in your scene, as well as in which poses.
This gameobject only contains a Mod_Scene script, which only requires a field related to the player spawn point.
This gameobject requires no scripts, it is simply used to place the player at its given position in the scene.
This gameobject requires the ModdedDildoSpawnPoint script, it contains no field, and like the player spawn, is only used to take its position and spawn things there.
For non-modded toys and interactables, you can spawn them by using the SpawnInteractable prefab. Place the prefab in your scene and select which interactable object to spawn from the drop down. The toy will spawn at the position and rotation of the game object the SpawnInteractable script is attached to.
You can use the Spawn Interactable prefab/script to spawn any interactables, Dildos, Spank Tools, Markers, Welder or Camcorder.
Once that is finished, you can then begin working on your scene as normal, there are no limitations to what kind of objects, models, textures, etc you can use. You can even download fully fleshed out scenes from third party assets and mod them into heat. Just remember that if you go crazy with the size and details in the scene then performance may suffer.
Finally, please note that Heat’s fluid system requires an Obi Collider Creator script in your scene for fluids to properly collide with objects. It is recommended to have all of the game objects with colliders in your scene share a common parent game object with an Obi Collider Creator script attached. The script will do the rest of the work to set up fluid collision properly in your scene.
You are also free to attach custom scripts to any object in your scene and it will work in Heat as well.
The Scene portrait is a script containing information that will be displayed in the game whenever the user is in the Locations menu. The modding project contains a ScenePortrait prefab in the SceneModding folder.
Note: An instance of the ScenePortrait prefab does not need to exist in your scene as a game object. The game pulls the information it needs to set up your scene from the prefab itself.
The Portrait Label refers to the text that will be displayed below the portrait sprite in the locations menu.
The Scene To Load refers to the scene that will be loaded when the GO button is pressed. It must be identical to the name of the scene object in your project.
The Border Color and Portrait Sprite should be self-explanatory.
Lastly, the Scene Description should be a brief description of your scene. It is shown in the same spot as the rest of the built-in scenes.
Once you’re here, you should now have a working scene with all the necessary objects to function properly and a working UI portrait so that Heat can display your scene in the list of locations.
There is only one final step and that is deciding what characters and what poses your scene will support.
In the PointsOfInterest folder, you’ll see a prefab called ‘ExamplePOIs’. This prefab may be placed in your scene and contains spawn points (AKA Points of Interest) for each character/animation combination in the game.
Simply drag and drop the ExamplePOIs prefab into your scene, and expand the list of POIs. Position these POIs around your scene as needed. Starting in V9.5 of the modding project, if you have gizmos turned on (Circled below), you will see a stick figure representation of where exactly the character will spawn.
Note: The character selection menu in game will display all built-in characters, so it’s recommended your scenes support at least one POI for each built-in character.
Note: Make sure all POI game objects have unique names! Otherwise, you will create errors in game.
Note: Modded Character POIs for modded scenes must be placed by the modder who created the character mod. Instructions for setting up a modded characters POIs are in the Character Modding section of this guide.
Note: On the official discord, there is a mod called “POI Helper”. This mod is extremely useful for achieving more precise POI placement than you can get using the stick figure representation. In short, the mod allows you to manually place the character in game and Debug.Log a transform position where that POI needs to be placed to reproduce the placement.
Once you are done, head to the Exporting Mods section of this guide to export your scene mod.
Starting with Heat V0.7.5.2, POIs can now be used to load custom .pose files made with the games existing Custom Poses system. Previously, using only the example POI poses was limiting because Heat’s built in poses and animations were created to match a specific scene’s environment. You can use this system to make custom poses catered to your own scene’s environment. Here’s how it works:
In order for custom poses to work in your mod, players will require the .pose files you created. Your .pose files can be simply packaged into the folder of your exported mod prior to distribution so that players don’t need to manually distribute the pose files themselves.
Before zipping and distributing your mod to players, simply copy and paste your Poses folder containing all of your custom poses into the mod’s folder. When the game starts, the mod’s Poses folder will be combined with the player's main Poses folder (assuming the files do not already exist).
Important Note: The .pose files must be split up into subdirectories by character just like the main Poses folder!
Heat now has a mod configuration menu! In this panel you’ll be able to:
The Mod List contains a list of all the mods that are residing in the Mods folder. You’ll see the name of each mod as well as the mod’s version.
Note: When you first place a mod in the Mods folder, the mod will be disabled by default, meaning you’ll need to find the mod on the list and enable it.
Once you find the mod you’d like to enable, simply click on the switch to turn it on, and vice versa to disable it. You should then click on the ‘Reload Mods’ button in order to activate any enabled mods. The Reload Mods button will simply restart the scene you are currently in and any enabled mods will be activated (loaded into the game).
Your mod may have settings that you’d like your users to modify, the mod options panel will display a UI panel created by you which allows the user to modify your mod in whatever way you deem proper.
As an example, the modding package comes with a prefab for this panel, found in the ModConfig folder.
The prefab already comes in the appropriate dimensions, it is up to you to place any UI of your choosing inside the prefab, such as text objects or buttons. Currently, you’ll only be able to place Unity-built UI elements, not UI elements based in the style of Heat. This may change in the future but for now this should take care of all your needs.
Note: Mod options serialization is currently not implemented. Your users will need to input the options every time the mod is loaded. This functionality may come in the future, you’re also welcome to create your own serialization solution, but for now there isn’t one.
The Mod Logs will display any Debug.Log, Debug.Warning, and Debug.Error call that you call from within your scripts. Some (but not all) heat calls will also appear on this list. This log most likely will not be used very heavily by players, it’s mainly for you to help you during development of your mod. It would be wise to make heavy usage of debug calls in particular points in your code to make sure things are working as intended.
You’re still encouraged to use the log file that the game creates since it will pick up crashes or calls that the mod logs may not be able to pick up.
Heat has supported character creation for quite a while now but very few people have successfully tackled the challenge. Therefore, starting with Modding Project V9, several helper scripts have been added to the modding project to partially automate the character creation process. These scripts will task modders to supply all references required to build a character. Then, the scripts will populate your character with required game objects and components while filling in any references needed to make the character function.
Please note that even if you use this process to build a character, your character will still require much troubleshooting to function. Heat characters are complex and require an extraordinary amount of testing, troubleshooting, and game development know-how to make them functional. These automation scripts exist to make the character creation process more palatable and to give modders a solid starting point to work with. As always, please ask for help on the official Discord and we will be happy to help make your mod functional.
What you need:
First, import all of your character’s assets into the modding project. If you only have the .FBX model for now, that is not a problem for now, but you will need animations and audio for the finished product.
Select your FBX file and configure your character’s Import Settings in the inspector. Enable Read/Write in the Model settings and Animation Type in the Rig settings should be set to Generic.
Next, place your character model in an empty scene. In the root gameobject of your character, add a Mod_Char Reference Container script.
See below for all of the required and optional bones your character’s armature must have. Yes, it is A LOT to fill in, but trust me, it is infinitely easier than the old manual building process that was monotonous and prone to mistakes.
First, fill in the Character Name text field. This is not the name that will show in game but will be the name of this character’s prefab. There are some rules to the prefab names that affect how the game handles your character!
Next, Set your character’s Genitalia in the dropdown. Note: the Everything option is currently not supported. This will be added in a future update for characters with multiple Genitalia.
Note: The Points Of Interest field can be ignored for initial character setup. POIs can be set up later.
Finally, populate as many of the below character references as possible, referencing the Marina example if needed. It is recommended to try rotating each of these bones as you populate them to make sure they actually control the corresponding body part.
Note that each bone is filed under either >Required< or >Optional<. If a required bone is missing, the character building process will be halted and error. If you hover your mouse over each field, you will see a tooltip explaining in more detail what should go in that spot.
In the Meshes and Collision section of the script, the Apply Bulge Shader, Body Material Index, and Bulge Influencer Mask fields can be ignored for now. More on this section is detailed later in the Dick Bulge Collider Updater section of the guide.
Note: These tooltips are critical to read for some references, especially references in arrays! If you are not sure how something should be set up, reference the Marina example prefabs!
Please Note: The final field on the list is the Base Prefab. This field must be populated with the ModCharExample.T prefab located at: Assets/_YourMod/CharacterModding/ExampleCharacter/MarinaPrefabs/ModCharExample.T.prefab
Drag and drop this prefab into the Mod_CharReferenceContainer. Otherwise, you will get an error halting the character building process if it is not populated.
Now that you have populated your references, it is time to let the scripts do their job. First, select the root game object of your character in the scene view. Rename this game object to “Your-Character’s-Name-Here Base”.
Drag and drop this game object into the CharacterModding/YourCharacter/CharacterPrefabs folder to make it a prefab. When Unity asks you if your prefab should be an Original Prefab or a Prefab Variant it is absolutely CRITICAL that you select PREFAB VARIANT! The reason being that if you select Original Prefab, this sever’s the prefabs link to your FBX file making it impossible to update later without having to remake the entire character!
This prefab serves to save the progress you made populating the above character references in the event that you need to start over in the future.
Next, go back to the Mod_Char Reference Container script, and click the Set Up Character button at the very bottom of the script. A message will appear below the Set Up Character button telling you whether or not the process succeeded. Regardless of whether or not the process succeeds, it is important that you check the console for errors! If you have any errors, it is important that you correct them and redo character setup from your Base character prefab.
After a successful setup, you will notice that your character will have a new root game object. This is your Character Base. Select this object and drag and drop it into the Character Prefabs folder. Double click the prefab you just made to enter Prefab View. You will also notice that this new prefab will also now have tons of new game objects and scripts added to it.
Important Note: The remainder of work on this character should be performed in Prefab view, not scene view! Changes made to your character in scene view will not apply to your character prefab unless you manually do so!
VERY IMPORTANT NOTE: It is critical that you do not change the names of, or delete, any of the game objects that have been added to your character prefab! This can easily cause issues later on when updating your character.
Previously, changes made to the Mod_CharReferenceContainer script or fbx model would require the modder to redo all setup from scratch. This has changed in Modding Project V9.3.
After successfully running character setup for the first time, you may at any time re-run setup again in prefab view to correct for any changes you may have made to the Mod_CharReferenceContainer script or FBX model.
For example, if you swapped out your .fbx file with a new version that added or edited bones, you may enter your character’s prefab view, assign new or change references in your character’s Mod_Char_Reference_Container script and click the Update Character button to reassign the changed references accordingly.
Furthermore, you may customize which character setup processes get either skipped or redone. For example, with none of the above tick boxes checked, the only setup that will be done is reassigning any previous references that have been altered since the last setup. If you wish to redo Penis Rig setup, you would check the Redo Penis Rig Setup boolean to reset the Penis Rig to default.
Another example; say you previously did not have the optional Butt Cheek bone references. You can now add Butt Cheek bones to your fbx model, swap out the fbx file, assign the missing references, check “Redo Butt Setup” and click Update Character to perform Butt Setup without significantly undoing any previous work you may have performed.
With your character in prefab view, you will notice a child game object to your Character Base called Added Object References. This game object has a script attached to it called Mod_Added Object References. This script contains buttons that will select each corresponding game object in your character’s hierarchy and give you a list of tasks that need to be performed. These are tasks that I could not accurately perform in script given that it varies by character. Click each button and perform the tasks as described. As always, please compare your character’s set up with the example Marina setup if you are not sure if you did it correctly!
Some of these setup items are not discussed in this guide as they are simple tweaks of positions and colliders. For convenience, I’ve added tick boxes next to the button that can be used to hide instructions as you complete them.
The final item on the list is the Character Base. It is recommended to do Character Base setup last because it is related to Animations, Audio, and POI setup. These three things alone can take dozens hours of work to get right. Details on this setup can be found in the NPC Audio Controller, Eye and Head Animator and Final Steps sections of this guide.
You will also find a disabled game object parented to your character called “Unused Objects”. Even though the objects parented to “Unused Objects” are not being used, please do not delete this game object. You or the Character Builder scripts may need some of these objects later on.
The Character Prefab Anatomy, Control Rigs, and FBX Hierarchy sections of the guide can now safely be skipped and is present for troubleshooting purposes. These sections of the guide go into detail on all of the work we just automated above and will prove valuable when trying to get your character to work properly.
At this point, you may now skip over to the Final Steps section of this guide for more details on Animations, Audio, POI setup, UI setup and Exporting your character!
This section details the specifics of the scripts and game objects that were added to your character during automated setup. It is recommended to read through this section as there may be some need to know information here to get your character working properly.
The Character Base refers to the root gameObject of the character. This root gameobject contains a lot of very important scripts that manage quite a lot of behaviors. Some of the scripts or fields in said scripts will not be covered, as their usefulness to you as a modder will be limited, but we’ll touch upon the most important ones.
-Rig Builder contains all of your character’s various control rigs. Your rig builder script should always be set up as follows:
Most of this script is set up for you during the automated setup process. It manages a lot of basic character functionality. The most important part of this script for you to set up is the Scene POI Data. More on this in the Points of Interest section of this guide.
-Base Character: For modded characters, this should always be “Other”
-Character Name: The name that the game uses to manage your character. As discussed previously, this is not the name used in your character’s UI and may contain a suffix to identify the character type.
-Genitals: Self explanatory enum, just remember to set it to the correct value depending on your character’s sex.
-Scene POI Data: This list accepts a scriptable object called Scene POI Data. You will see more information later in this guide in Points of Interest. Each Scene POI Data scriptable object is a list of all of the Points of Interest at which a character can spawn in a given scene.
-Layers: These need to match the appropriate layer names in your animation controller. It’s recommended to leave these as the default and use the same layer names as Marina’s animation controller uses.
- Other Character Look Targets: Transforms in your character’s fbx hierarchy that other characters will glance at from time to time.
This script controls the characters audio. The most important part of this script is the clips section where you will populate with clip scriptable objects as described in the Audio section of this guide.
Points Of Interest: A list of Transforms in the scene that the character may choose to look at, for example, the TV, a lamp, dildos, etc. Some default Points of Interest get added at run time in each scene by default.
The rest of the variables (such as Look At Player Ratio) can be modified slightly to change the personality of the character as you wish. This script also contains several events, remember you are free to create your own scripts which subscribe to these events.
This script is in charge of adding obiColliders to all gameobjects in the character which contain at least one regular collider. An ObiCollider collides with liquids, whereas regular colliders do not. This script contains an exclude list, which means that any object added to this list will not be given an obiCollider.
This can be useful for objects such as penises, because liquids will spawn very close to it, potentially overlapping with obicolliders which means that when liquids spawn behavior can be very erratic. By adding for example a penis gameobject to this exclude list, you guarantee that the liquid will come out from it without any collision issues.
It is up to you to decide which object(s) to add to this exclusion list.
Possession occurs when you take the point of view of a character while it performs acts with a secondary character. This script deals with enabling/disabling gameobjects which might obstruct the camera’s view while taking a character’s point of view.
-Toggled Scripts: All scripts on this list will be disabled when possession occurs, and re-enabled once possession is finished.
-Toggled Objects: All objects on this list will be disabled (hidden) when possession occurs, and re-enabled once possession if finished. Gameobjects on this list are often hair related, such as ponytails, bangs, etc.
- Set a reference to the Hide Bone, in our example a reference to the neck of the character is set. This means that the neck will be scaled down enough to not be seen, alongside all of its children.
As the name suggests the Moistener script handles making the character seem wet. You may need to tweak the Max variable to control how wet your character appears.
This script handles all eyes as well as some neck behavior, and must be given the proper transforms to reference.
- Your script will look like the script on the right in the picture above. First, give it all the necessary references, such as the head transform, neck, eyes, eyelids, etc.
- After all the references are given, you'll see that it needs to know the rotation values of the eyes and eyelids in 4 different states (eyes open looking straight, etc)
-If your model already comes with the eyes forward and eyelids open, then you just need to click on the save button for the 'eyes open, looking straight' label, if not, select your eyes gameobjects, rotate them such that they are facing forward.
-Next, you'll see the 'Eyes closed, looking straight' label, here you need to select the gameobjects of both upper eyelids (by clicking on the Select Upper eyelids button) and rotate them such that both eyes will be close, after they are close, click on the Save Button for that label, then do the same logic for the remaining options, until you have 4 in total. After that there should be no errors or warnings on this script.
This script handles climax and some squirt functionality.
- The 'Emitter Parent' variable expects a transform positioned where you want the squirts to spawn from during climax. The references to these emitter objects will be assigned for you but you will need to position them accordingly to get emissions where you want them to be.
-These scripts contain several other values that you can tweak to get fluids to emit how you want them to in terms of speed, duration, etc. Feel free to tweak these values as much as you like.
-This script must remain disabled for now. It is used for command mode which is currently not supported on modded characters.
-This script has a few values that must be assigned as described in the Added Objects References game object. Assign your characters left and right shoulder bones to the Left Rig Shoulder and Right Rig Shoulder fields. Assign your character’s hip bone to the Root X field. Assign your character’s body mesh renderer to the Body Renderer field.
-This script controls footjobs. If your character has footjob animations, you may tweak values on this script to get them working properly. I haven’t messed with this script at all myself so it is uncharted territory tbh.
-You will find a secondary Mod_Char Reference Container script attached to the character base. This script will show up as blank for you. This script is here for character updating purposes and SHOULD NOT BE DELETED!
-This script contains references to several of the objects that have been added to your character during automated setup. It is critical that these references stay populated for character updating purposes. Ideally, you shouldn’t have to touch this script ever.
Your character will have four control rigs total. These control rigs contain a standardized hierarchy that we use for all characters. Therefore, altering the naming of game objects in the control rigs can cause errors when updating your character in future updates. The four control rigs are as follows:
After character setup, all script references in each control rig should be automatically assigned. However, components such as Transforms, Colliders, Configurable Joints, and Rigidbodies are only set up approximately to what they should be to function properly. The best advice I can give you is to rely heavily on the example Marina prefab as a guide to get your character’s rigs functioning properly.
Please note, as of modding project release 1.0.0 and the Steam/Itch.IO releases, several new game objects have been added to the butthole and vagina orifice rigs in the Butt_Tail Rig. These are the GapeSDF, FingerDisplacementSDF and FingeringVolume objects. These will also need positioning and collider adjustments to match Marina.
If you need help troubleshooting, or need more specific information on what specific game objects or scripts in these rigs do, feel free to ask in the “mods-poses-discussion” channel of the discord and we will try to answer your questions as best as possible.
The FBX hierarchy contains your entire custom model, plus other objects we will add in order to make everything work properly.
The Emitter Base is parented to the tip of your character’s penis. If your character does not have a penis, this will be parented to the Unused Objects gameobject. The Transform component of the EmitterBase game object is the position where your character’s cum will emit from in the forward Z direction.
There are two Milkies game objects, one attached to each nipple bone. These should be placed roughly at your character’s nipples with the Z direction pointing forward. These control breast related functionality, and also contain Lick Targets that determine where other characters will lick your character’s nipples.
You will also note that your character’s breast/nipple bone got renamed with an added “ - detached”. This is important for code related reasons at runtime. Do not change the naming of these objects.
Each cheek bone will receive a Cheek Caress gameobject. These manage character interactions when a player reaches for a character’s cheek. You will need to adjust the object’s capsule collider and positioning to properly trigger these interactions.
The LookAtVolume prefab contains a lot of objects related to vision as well as BJ behavior. For instance, the gameobject ‘Mouth Stuff’ contains the script called ‘Mouth Orifice’, as the name implies it handles certain BJ behavior such as what kind of objects it can work with by way of the ‘Valid Tags’ field, etc.
Several game objects in your models hierarchy will have also received some scripts.
Once the Character Base, the Config Rig, and the FBX Hierarchy are finished, what is left to do? Well, first you need to give your character a better name than just Base.
- Select your character prefab and rename the root gameobject to your character’s name. Then make sure to add a ‘.F’ affix to the end of it, for example, if the character’s name is Fred, then set the prefab’s name to be Fred.F. Note: This was done for you if you built your character with the Automated Character Creation!
- Next, in the NPC Controller script, change the Character Name field to be exactly the same as the name of the prefab, for example Fred.F. The name of the root gameobject and the character name field must be equal. Note: This was done for you if you built your character with the Automated Character Creation!
Once that is done, the UI folder (CharacterModding/ExampleCharacter/UI) contains a ModChar-Portrait prefab, this prefab is used by game’s UI system to determine things such as what portrait sprite to use for your character, the border color of your character, as well as what character to load.
- Create a copy of this prefab and change the fields to match your character’s style. Also make sure that the Character to Load field is exactly the same as your character’s name. If you’re using a Suffixed character with multiple genitalia options, the Character To Load field can be ignored.
-The UI folder also contains a Prefab called ModChar-Screen. This prefab is used to set up a biography, spawning of characters with multiple Sex’s, and blendshape setup. It also allows the setup of a blendshape if your character has one. In the case of Marina, it controls her chubbiness.
-Create a copy of this prefab, and assign it to the Character Screen field of your Character Portrait prefab.
-If your character has multiple genitalia options, match the Sex Selector Option settings used for Marina. Each option must have its own character prefab. The Character Prefab Name field must match the name of your prefab exactly.
-If your character has a blendshape option, set up the Blend Shape Options settings similarly to Marina. The Blend Shape Name field is the name that will appear in the character’s UI in game. As always, The Character Prefab Name must match the name of your prefab exactly.
-Next, for each prefab, type in the game object name of each of your character’s Skinned Mesh Renderers that have Shape Keys that you’d like to change in game.
Note: Your character doesn’t have to have multiple sex options for blendshape setup to be possible. You may set up as many prefabs here as needed. Similarly, your character can have any number of Mesh Renderer Names.
-For each Skinned Mesh Renderer you’ve added in Blend Shape Options, add a Shape Key Holder script to its game object. Change the Blend Shape Idx to be the integer of the shape key that should be changed by the slider in game.
Note: The list of blend shapes can be found in the Skinned Mesh Renderer’s BlendShapes dropdown. Keep in mind that the integer of the first shape key is 0.
-Finally, if your character is using Blendshapes, each of your POI’s (detailed in the next section!) must have the Use Blend Shapes tick box checked.
Whenever you select a character in the menu and see a list of possible poses that the character can do, have you ever wondered how those work? Of course you have! Those are called Points of Interest (POIs from now on).
They identify everything about a particular pose that a character can do, everything from its position in the scene, what animation the character is supposed to run, whether or not it's a free-form pose (the one that allows you to move the character anywhere on the scene) and everything else.
There are several things you'll need to know about them:
-The name of the Game Object that the POI script is attached to. The name of the game object itself must be completely unique for your modded character. This is critical for proper functionality of the POI.
-The Character Name; this needs to match the prefab name of the character being spawned.
-Note: If your character has multiple genitalia options, the character name should be your character name minus the Suffix! For example, Marina’s POIs would read just Marina, not Marina.T or Marina.F. This is because those prefabs share the same POIs!
-The Base Animation Name governs what animation the character will perform.
-The Active Tail Segments field determines the upper limit of how many tail segments are meant to be non-kinematic.
-The Pose type field indicates what type of pose is being performed. The options are fairly self explanatory, but note that your character will only be possessable in Free pose mode.
-The Transform component of the POI will determine where in the scene this POI is meant to take place. Use the POI Helper mod in #Mod Releases in the official Discord to help you accurately locate the Transforms of your POIs.
-If your character has Blend Shapes set up, check Use Blend Shape.
-Locate the example modded character’s POIs in the project Assets at CharacterModding => POIs. Here, you will see several folders containing POIs for the example modded character for each scene in the game including the example modded scene. Use these POIs as a guide when making your own!
-In the POIs folder, you will also find scriptable objects that contain the example modded characters POI data. Spawn a Scene POI Data scriptable object for your modded character by right clicking in any Project folder => Create => Modding = > Scene POI Data. These Scene POI Data objects will tell the game which POIs to use on a per scene basis.
-Fill out the Scene POI Data scriptable object as above. Select the Scene that these POIs will apply to from the Scene List drop down. Slot in each POI you created for your modded character for that scene.
-If your POIs are made for a modded scene, Select Modded_Scene from the drop down, and then type in the name of the modded scene in Modded Scene Name.
Note: If you know the scene name of a modded scene created by another modder, you can add your character to their scene this way!
Note: You do not have to make a Scene POI Data for every scene! If you don’t include POIs for a specific scene, your character will simply not appear on the Character menu if a player is in a scene that does not have POI Data.
-Finally, go back to your modded characters prefab, and slot in each Scene POI Data you configured into the Scene POI Data list, located in the NPC Controller script of the character base.
-Kind of confusing perhaps, but necessary to keep POIs separated by scene. As always, feel free to ask questions in #Mod-Poses-Discussions section of the Discord.
Modded characters can have alternate skins too! Not only can modders make traditional character skins for your modded character (provided you release your modded character’s model, prefab name, and Mesh ID names) but, you can also set up default skins for your character.
Simply add a SkinButtonPreSetColors script to your character’s main body mesh, and an AccessorySwitcherSkin script to every skinned mesh renderer game object that you would like to be skinnable.
If you’ve performed Automated Character Creation, these scripts will be added for you. However, they need to be set up manually. Even if your character does not have alternate skins, these should still be set up as below with only 1 default skin versus the 2 skin example on Marina. This is to eliminate errors.
Skin Button Pre Set Colors:
Accessory SwitcherSkin:
The example character comes with its own animations and layers, if you import your own FBX in, you will not have any of these layers or parameters set up. It is up to you to do this and you can certainly look at how these layers work in the example character.
-It is mandatory you use the same animation parameter names for your custom character since these names are hardcoded. Use Marina’s animation controller as a reference for Layer Setup.
-We will not provide any tips when it comes to how to create animations, as mentioned in the beginning of the guide. Animations are easily the most time consuming part of modded character setup and require a lot of Unity Engine know-how that is way outside of the scope of this guide.
-It may be possible to make a duplicate of Marina’s animation controller and edit it to your needs. If you choose to do this, I recommend dumbing the controller down as much as possible, deleting any unneeded blend trees like Duo’s or trees for POI’s you aren’t using. Then, swap out animations or use an animation override controller.
-You will also be required to mask your animations properly. Some masks being applied to the animations themselves, and some being applied in the animation controller itself. Again, compare to Marina as needed.
Audio clips in Heat are bundled into various scriptable objects. Navigate to the NPC Audio Controller section of your character base to see what groups of clips can be added.
-Feel free to use any of the audio clip bundles included in the example. Alternatively, to create your own, by right clicking in an assets folder -> Create -> Custom -> Choose the applicable clip scriptable object.
-Audio clips must be fired via event triggers in your animations. See the below Breathing example:
-In this example, the trigger for a breathing clip audio to play is “OnBreathExhale”. View Marina’s animations to figure out which Function names are required for each animation.
-The exception to this is for any animation specific to that character. For example, in the Moan Clips scriptable object, the name of the trigger is in the scriptable object itself and must reflect in the animation:
Note: Using multiple audio clips adds variety to your character. Each time a clip is fired, a random audio clip is chosen from the list of clips for that trigger.
Once you manage to build a functional character, you will likely want to update the character at some point to be compatible with newer game versions.
My goal is to make updating your character a mostly automated process. That being said, to make updating your character a mostly automated process, there are several rules you must follow to prevent errors when our scripts attempt to update your character.
Any immediate subfolder of Assets/_YourMod/ that is unrelated to modded characters can be safely deleted.
Firstly, when updating an existing character mod to a new version of the game, it is NEVER recommended to attempt to migrate your existing project to a newer version of the modding project. Long story short, this will completely break your character. Don’t do it. Here is what you need to do to update your character to the latest version of the game:
This update adds Vore related objects to your character’s jawbone and requires updates to your MasterHeadState scripts.
Optional update to get rid of an annoying persistent console error:
Updating the DickBulgeColliderUpdater prefab.
Updating Accessory Switcher scripts. I tried to code this update but unfortunately it will all need done manually.
There was an absolutely massive amount of changes made to character’s between V0.6.0.2 and 0.6.5.2. This is the reason why the V9.3 modding project took so long for me to release.
Unfortunately, updating characters from V0.6.0.2 to 0.6.5.2 will require much manual work and may be prone to unforeseen issues. Several improvements have been made to handle how characters will be updated going forward, so hopefully this will be the last painful update.
Here is the process:
At this point, your character should be ready for testing in V0.6.5.2. However, it is recommended that you go through all of the items on the Added Object References game object and verify that each is complete just to be safe. If you have control rig related issues, it is recommended that you go through the new control rigs one game object at a time and compare them to example Marina in the V9.3 project.
If I’ve overlooked or missed something, please feel free to let me know and I will update these instructions.
This update mostly includes several minor under the hood changes that should not need your attention. Several new parameters have been added to the PlayerControlledHips script located on the PlayerControlRig game object. Any new parameters that were added have been set to the values Marina uses and may need adjusted. A CharacterOrificeAligner script has been added to the character base which has also been set to default Marina values. This script manages Topping/Bottoming interactions.
This update includes changes to the Player Control Rig hierarchy to handle the 2D player body, as well as some changes to how audio works.
This update adds support for the new orifice system.
Before opening your project:
Once you’re finished creating your mod, click on the Tools->ModTool->Export Mod button and the mod exporter window will show up.
Here you'll be able to modify your mod's metadata. It is important to note that your mod must set the following variables:
- Platforms = Windows
- Content = Everything
- Log Level = Info
- Output Directory = The directory where you installed Heat should have a Mods folder, set this to that Mods folder.
Note: Make sure to remove any unused files in your mod. For example, if you’re not modifying character skins, delete the character skins folder, if you’re not making dildos, delete the dildos folder, and if you’re only modifying one character skin, delete all the other character folders. This will prevent conflicts with other mods as well as making your mod smaller.
Due to repeated failures by modders to abide by the above note, in an upcoming Modding Project release, modders must respond to a “Modder Agreement” before exporting their mod! See the Modder Agreement section for instructions!
Once you click on the Export Mod button, then it will convert your code and assets (such as prefabs, materials, models, etc) into an asset bundle which the game will load at start up. Once you see the folder of your mod on the game's Mods folder, then you're set to run the game and see your mod in action!
Modders must comply with a Modder Agreement before releasing their mods to the public. If you do not follow these instructions, YOUR MOD WILL NOT EXPORT!
In the ModderAgreement folder of the Modding Project, there is a prefab called Modder Agreement. Click on this prefab and look at the Modder Agreement script in the Inspector. READ THE AGREEMENT!
By ticking the box next to “I Understand” the modder acknowledges that they understand the agreement as written in the modding project and as explained in more detail below:
There will be a zero tolerance policy for mods found on the Discord violating the above terms. Your mod will immediately be deleted if found to be violating the above rules to limit the number of broken mods being downloaded by mod users. The Modder will then be notified via DM that their mod has been removed.
Modding Projects V1.0.1 and above will have native support for uploading mods to the Steam Workshop. To add Steam Workshop Upload support to older versions of the modding project, skip to the next section before continuing.
First, your mod must be exported, tested, and ready to upload to Steam. To upload mods to the Steam Workshop, navigate to the Workshop Uploader tab.
Important Note: If you have added Workshop Uploader support to an older version of the modding project, you must export a new copy of the mod AFTER having added the Workshop Uploader to make it compatible with Steam Workshop. You cannot upload a mod to Steam that was exported from a modding project that does not have Workshop Uploader support!
First, Click the Workshop Subscriber Agreement button. This will open up a browser where you need to log into your Steam account and agree to the Subscriber Agreement.
Next, enter the file path to your Mod’s root folder into the Mod Folder field. Excluding quotation marks.
Important Note: The Mod Folder path must lead to the mod’s root folder and not a zipped file containing the mod!
Similarly, if you’d like to upload an image with your mod, add a path to the Preview Image field to a 512 x 512 .png image file.
In the Tags section, select the applicable Tags to be applied to your mod.
Finally, click the Upload to Workshop button to upload your mod to the Steam Workshop! Your mod should appear in Your Workshop Items on your Steam account.
Note: The default Visibility setting for new workshop uploads is set to Hidden. Set Visibility to public to allow others to see and use your mod.
Modding projects released prior to Project version 1.0.1 require support for the Steam Workshop Uploader to be added manually. To do this, download SteamWorkshopUploader.rar.
Extract the zipped file and Import SteamWorkshopSupport.unitypackage into your modding project by dragging and dropping the package into your Assets folder or going to Assets -> Import new asset. Click Import.
Next, steam_appid.txt must be inserted into the root folder (the folder that contains the Assets folder) of your modding project. This step is critical as it allows Steam to upload the mod to the correct game. If this file is not present, Steam will upload your mod to a different game.
Finally, go to Tools -> Workshop Uploader to add the Workshop Uploader window to your modding project.
Important Note: Before uploading your mod, you must export a new copy of the mod AFTER having added the Workshop Uploader to make it compatible with Steam Workshop.
After Heat 0.5.4.0, mods will be able to be exported in Mod Debug Mode. By default, mods will be exported in the disabled state, meaning that you must go into the Mod Configuration menu in game to enable the mod. This can be incredibly annoying and time consuming if you are doing extensive testing on your mod.
As a work around to this, if you include “.Debug” in the Mod Name of your mod (See below for an example). After doing this, the mod will be automatically enabled as soon as you start the game, by default. However, it is important to note that your mod will be enabled even if you disable the mod in the mod configuration menu.
Note: IT IS ABSOLUTELY CRITICAL THAT YOU DO NOT RELEASE A MOD WITH “.Debug” IN THE MOD NAME! Any mods found released on the Official Discord in Debug Mode will be removed without question.
How do I tell if my mod has no errors?
The best way to tell if everything is running OK is to view the log created by the game, it can be found in the directory as seen in the image below (C:\Users\YOU\AppData\LocalLow\Heat\Heat). Run the game with no mods first, so you can see what a normal log looks like, save it as a backup if you want by renaming it, and then run your mod and see what problems occur. It is best practice to test your mod by itself with no other mods installed.
You can also view logs in game in the Mod Logs menu. However, the Mod Logs menu will not show all errors, especially in the event of a game crash. It is best to use the player.log to troubleshoot your mod.
I’m getting an error and cannot figure out what the problem is with the limited information in the Player.log. How can I figure out what the problem is?
Frankly put, there can be issues that you as the modder will not be able to diagnose with Player.logs alone. Especially when it comes to character modding. Try your best to debug these issues with the Player.log, but if you hit a road block, DM Brio on Discord a copy of your Player.log and your exported mod. I have more tools at my disposal that modders do not that may make troubleshooting your specific issue a trivial matter.
I’ve exported my mod but it won’t load in game even though it’s enabled. Why?
Please read the Modder Agreement section of this guide.
I keep getting these errors while trying to export my mod.
These errors are benign, it happens when you forget to unpack a prefab after attaching it to your character hierarchy. They can be annoying to look at but won’t introduce any issues during gameplay or during exporting.