Heat Modding Guide

Table of Contents

Introduction

Project Setup

Deleting Unneeded Assets

Troubleshooting Common Project Setup Issues

Dildo Modding

Introduction

Creating a new dildo

Penetrable Toy Modding

Character Skinning

Basic Character Skinning

Advanced Character Skinning

On Skin Swap Unity Events

Custom Scripted Objects

Heat Scripting

Getting Common Game References

Scene Modding

Scene Object

Player Spawn

Dildo Spawn and Interactables Placement

Scene Portrait

Supported Characters and Poses

Custom Poses for Modded Scenes

Packaging Custom Poses into your Exported Mod

Mod Configuration Menu

Mod List

Mod Options

Mod Logs

Character Modding

Getting Started

Preparing the FBX Model

Populating the Character Reference Container

Performing Character Setup

Re-Running Character Setup

Additional Required Setup

Character Prefab Information

The Character Base

Rig Builder

NPC Controller

NPC Audio Controller

Look Target Controller

Obi Collider Creator

Possess Character

Moistener

Eye and Head Animator

(Male or Female) Climax Controller

NPC Command Controller

Player Control Rig Switcher

Footjob Controller

Previous Mod_Char Reference Container

Mod_Base References

Control Rigs

The FBX hierarchy

Emitter Base

Milkies

Cheek Caress

Look At Volume

Other Objects

Added Components

Final Steps

Character UI Setup

Points of Interest

Modded Character Skinning Setup

Animations

Audio 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

Exporting Mods

Modder Agreement

Using the Steam Workshop Uploader

Adding the Steam Workshop Uploader to Older Projects

Mod Debug Mode

Mod Troubleshooting FAQ

Introduction

- 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:  

  • Character Skin mods are the easiest mods to make, requiring very little Unity Engine experience.  Experience with Texture painting programs like Blender and Substance Painter is very valuable here.  
  • Dildo Modding allows you to add custom dildos to the game and is also fairly basic.
  • Scene Modding allows you to import your own scenes into the game!  Simply import your 3D scene into Unity Engine, add collision, and place spawn points for toys and characters.
  • Penetrable Toy Modding is similar to Dildo Modding, but requires more advanced Unity Engine and Modeling/Rigging skills.
  • Custom Scripted Objects will put your C# coding skills to the test.  Write your own scripts to make custom modded objects or break the game as you see fit!
  • Character Modding is aimed only at experienced modders/programmers who have plenty of Unity experience and will put all of your game development skills to the test.

- 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.

Project Setup

You will need:

  1. Unzip the modding project and open the extracted folder.

  1. Open the DLL_FOLDER.  It contains several .meta files and Editor_REM.dll that we supply.

  1. Navigate to the folder where you installed Heat and open the AnthroHeat_Data/Managed folder. Copy and Paste the below .dll files into the DLL_FOLDER:
  • Auto.dll        
  • Beautify.dll                        
  • Buttplug.dll
  • Buttplug.Client.Connectors.WebsocketConnector.dll
  • CW.Common.dll
  • deniszykov.WebSocketListener.dll                                
  • Eyes.dll
  • Heat.OrificeCompute.Runtime.dll
  • HeatSDK.Core.dll
  • HeatSDK.Globals.dll
  • HeatSDK.Misc.dll
  • ModernUIPack.dll                        
  • NaughtyAttributes.Core.dll                
  • Obi.dll                                                
  • PaintIn3D.dll                                
  • patreonAPI.dll        ***Only if using .dlls from a Patreon Build***                        
  • Physics.dll                                        
  • RadialLayout.dll                        
  • RootMotion.dll                                
  • ScreenFadeVR.dll                        
  • SteamVR.dll
  • SteamVR_Actions.dll
  • Unity.Collections.dll
  • Unity.Collections.LowLevel.ILSupport.dll
  • Unity.XR.Management.dll
  • Unity.XR.OpenVR.dll
  • UnityEngine.SpatialTracking.dll
  • Valve.Newtonsoft.Json.dll

  1. Verify that each supplied .meta file has a matching .dll file.

  1. Drag and drop the DLL_FOLDER folder into the Assets folder of the project.

  1. Using Unity Hub, Open the project in Unity version 2021.3.45.f2.  
  1. Common Mistakes:
  1. DO NOT create a new project.
  2. DO NOT open the MyModdedScene.scene file.
  3. You must use the Open, or Add Project from Disk function in Unity Hub and select the outermost folder of the unzipped project.

  1. Once Unity opens you will notice a few warnings in the console, these can safely be ignored and cleared.  

Deleting Unneeded Assets

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.

  1. In Unity Engine, navigate to and expand the Assets/_YourMod folder.


  2. Delete any subfolders in the _YourMod folder that do not pertain to the type of mod you are making.
  1. For example, if you are making a Scene mod, delete the CharacterModding, CharacterSkinning, and ToyModding folders.
  2. Another Example:  If you are making a skin for Riley, delete the CharacterModding, ToyModding, SceneModding, and all subfolders of the CharacterSkinning folder except for the Riley folder and _WorkshopModels folder (since you might need those!).
  3. The ModConfigurationUI folder pertains to custom UI for your mod.  This folder may also be deleted if you do not plan to make a custom UI for your mod.
  4. Do not delete any folders or assets outside of the _YourMods folder.
  5. Your mod may contain multiple different types of mods.  However, be sure to delete example assets that aren’t being used before exporting and releasing your final mod.
  1. Your modding project is now set up and ready to use!  Please jump to the appropriate section of the modding guide for the type of mod you are making.

Troubleshooting Common Project Setup Issues

  • Problem:  Console errors remain after initial clearing of the console.
  • Check for missing or extra .dll files.
  • Verify .dll files came from a compatible game version.
  • Verify that the DLL_FOLDER has been moved into the Assets folder.
  • Verify you opened the project with Unity Engine 2021.3.21.f1
  • Problem:  Prefabs have missing scripts.
  • Check for missing or extra .dll files.
  • Verify .dll files came from a compatible game version.
  • Verify that the DLL_FOLDER has been moved into the Assets folder.

If you continue to have issues, feel free to contact us in the #mods-poses-discussions section of the official Heat Discord for assistance.

Dildo Modding

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.

Introduction

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.

Creating a new dildo

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:

  • Import your custom dildo FBX to the unity project. (make sure the FBX import settings are the same as the one in the example, ensure Read/Write is enabled.)
  • Remove all colliders from the dildo prefab. (remember that the tip and the lookAtTarget objects must contain colliders, refer to the introduction section to learn more about this)
  • Make sure your dildo is oriented with Z-Foward
  • Remove the existing FBX from the dildo prefab.
  • Attach your custom FBX as a child of the prefab.
  • Attach all necessary colliders to the prefab. You can also create a mesh collider to speed up the process but it isn’t necessary, basic colliders will do most of the time.
  • Set the Renderer variable in the Dildo prefab to be the FBX you just attached. If you have done everything right this should be the only broken variable in this script.
  • Update the Toy ID variable to match your brand new dildo.
  • Adjust the Tip, Root, CumEmitter, Center and Depth Limit transforms into their appropriate positions.
  • Tip is the front of the dildo.
  • Root is the base of the dildo.
  • CumEmitter is where the Toy Cum will eject from.
  • Center is the center of gravity of the dildo.
  • LookAt is where the target where the character will look at the dildo.
  • Depth Limit is the maximum depth the dildo will penetrate.
  • SDF should be placed at the same spot as the Depth Limit.
  • Auto Fit Bounds must be enabled.

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

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

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.

Basic Character Skinning

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!

Advanced Character Skinning

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.

On Skin Swap Unity Events

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:

  • Mod_InstantiateProp:  Spawns an instance of a prefab game object onto a specific body part of a character.  
  • Method: AddPropToCharacterInstance
  • Create a prefab of an object such as a collar, hair, bracelets, etc and slot it into the Prefab Object slot.  
  • Select the character it is being applied to and the appropriate body part from the choices in the Body Part drop down.
  • Alternatively, if the body part you want to parent to isn’t available on the drop down, you can type in any transform name in the character’s hierarchy.  
  • Tip:  Marina’s example modded character’s transform hierarchy uses the same naming scheme as all other characters, reference her for transform names.
  • The object will parent to the transform of the selected body part.  You will need to use trial and error to fine tune the prefab object’s position, rotation, and scale to get placement right.

  • Mod_ToggleRenderer:  Activate or Deactivate a character’s renderers.  Simply choose the Mesh ID’s from the Data dropdown of the Mod_CharacterVisuals script.  
  • Method: ToggleRenderers
  • The below example deactivates Sasha’s Braids and activates Jasper Hair.  
  • Note:  You cannot mix Mesh ID’s from other character skinning prefabs.  In this case, Sasha can only use Jasper’s hair because her prefab shares the same base model.

  •  Mod_AdjustShapeKey: Adjusts the value of a mesh’s shape keys.  
  • Method: SetShapeKey
  • Enter in a Mesh ID of the mesh with a shape key you wish to adjust.  
  • Enter in the index number of the shape key and the value you want the shape key to be set to.
  • The below example gets rid of Sasha’s Saberteeth and changes her tail from a tiger tail to a snep tail.
  • Note:  While most characters have shapekeys, very few of them are actually useful for character skins.  Here are notable exceptions to this:
  • Jasper/Sasha_Maw, Index 0:  Controls saberteeth.
  • Jasper/Sasha_Body, Index 7:  Controls lips clipping with saberteeth.
  • Jasper/Sasha_Body, Index 12: Controls tail narrowness.
  • Atlas_Body, Index 13: Atlas’ Dad-Bod
  • Garret_Body, Index 0: Mane “Puff”
  • Garret_Body, Index 1: Mane “Fluff”
  • Marina_Body_Futa, Index 4: Chubbiness
  • Marina_Body, Index 4: Chubbiness

  •  Mod_ActivateAccessories:  Activates or deactivates accessories.  
  • Method: ActivateAccessory, Slot in the Mesh ID’s you wish to activate.  Accessories not listed will be deactivated.
  • Method: ActivateAllAccessories, activates all accessories.
  • Method: DeactivateAllAccessories, deactivates all accessories.

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:

  • Your methods must pass in a CharacterBase type.  The CharacterBase is essentially the character instance being affected.  The CharacterBase type will typically be used to get the root game object of the character.  For example, CharacterBase.transform would be equivalent to the character instances’ root transform.  
  • Note:  You don’t necessarily need to use the passed in Character Base reference, it just needs to be overloaded.
  • For every action you perform On Swap To This Skin must be undone with an opposite On Swap From This Skin action.  
  • For example, if you Instantiate a prop on a character, you must also Destroy that prop when a player swaps from that skin.  Otherwise, your prop will remain after a player swaps from your skin.
  • This is done automatically in the pre-written scripts via non-persistent listeners.

Custom Scripted Objects

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:

  • ActivateOnCollision:  Activate another script when this object collides or is collided with enough force.  The game object this is attached to must have a Rigidbody.  Velocity Threshold is the strength of collision required to activate the event.  Lower Velocity Threshold will activate the event more easily.  If a collision exceeds the Velocity Threshold, every function slotted into the Unity Event will be activated.  Great for use with the PlayAudio script.

  • Lock Rotation:  Prevents the object this is attached to from rotating.

  • PositionByScene:  Spawns the prefab this script is attached to at the position and rotation specified depending on what scene is loaded.  Add an element to the Position By Scene array for each scene you wish this object to spawn in.  Set the transform position and rotation for each scene.  If a player is in a scene that you do not specify a position for, this Game Object will be destroyed. (Hint:  the Transform Helper mod on the Discord can help you find transform positions in game!)  

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.

  • PlayAudio:  Plays all audio clips in the Audio Clips array when the PlayAllAudioClips() method is run.  The game object this is attached to must have an Audio Source.  Great for use with the ActivateOnCollision script.

  • ReplaceMusic:  Replaces music in a modded scene with your own playlist!  Very useful for scene modding as a custom scene uses Heat’s default Bedroom Scene music.  Populate the Your Tracks list with music files.  Track Delay is the time delay between tracks.  Play Random will randomize the tracks.

  • SliderText:  Updates a text object to show the value of a slider when changed.  Useful for UI modding when you need the player to be able to see slider values they are editing (see Mod Options below).  The game object this is attached to must have a Slider.  Slot in a reference to a TextMeshPro Text object, and set the Number Of Decimal Places the slider value should be rounded to.  Then, add the script to the slider’s OnValueChanged() event, and set it to run the ChangeSliderText() method:

  • SpawnToy (will be retired after Heat Version 0.5.3):  Spawns a toy at the transform of the game object this script is attached to.  Set Toy ID to the toy you wish to spawn.  

  • SpawnInteractable:  After Heat Version 0.5.3, Spawn Toy will be replaced with SpawnInteractable.  Spawns a toy at the transform of the game object this script is attached to.  Set Toy ID to the toy you wish to spawn. This script can be used to spawn most interactables that you see in the main game such as dildos, spank tools, markers, Vertex’s welder, and Camcorder.  

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.

  • LogSceneHierarchy: This script can be used to find the names of any game object in a scene to help modders find references to more obscure game objects they may need to find references to.  Export this script into a mod with LogRoots set to true.  Load the scene you wish to log.  Upon enabling, this mod will Debug.Log every root object in that scene.  Then, back in the modding project, input the name of the root object you’d like to explore further into Root To Log.  Re-export the mod, and load the same scene.  The script will then Debug.Log the entire Hierarchy of that root object.  The Logs will be spaced out with >’s by default.  Alternatively, Log Hierarchy As Path can be checked, which will report the hierarchy in path notation.  This is more informative but admittedly difficult to read.  

Once you find the name of the game object you wish to mod, use functions like GameObject.Find() find references to that game object.

  • SwapAllSceneShaders:  Add this script to a prefab along with a Mod_Object script and slot in a material with a shader configured.  The shader of that material will be applied to every material in the specified scene with the exception of Character materials.  This ignores transparent objects like windows and only affects materials that were originally Opaque.  If you’re re-shading multiple scenes, you will want to configure shaders specifically to each scene due to lighting differences.  

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.

Heat Scripting

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:

  • SpawnToy: Allows you to spawn one of our built-in toys (dildos as well as penetrators and spanks)
  • Usage: HeatAPI.Instance.SpawnToy(HeatAPI.ToyEntry.ToyID, Transform)
  • Usage: HeatAPI.Instance.SpawnToy(HeatAPI.ToyEntry.ToyID, Vector3 position, Quaternion rotation)
  • SceneName: Allows you to find the exact name of a specific scene.
  • Usage: HeatAPI.Instance.SceneName(HeatAPI.SceneEntry.SceneID)
  • CharacterName: Allows you to find the exact name of a specific character.
  • Usage: HeatAPI.Instance.CharacterName(HeatAPI.CharacterEntry.CharacterID)
  • FindActiveCharacterPrefab:  Returns a characters’ prefab (as a CharacterBase) by passing in a CharacterEntry.CharacterID.  Changes to a character that you want made across all character instances in a scene should be made to the characters’ prefab.
  • Usage: HeatAPI.Instance.FindActiveCharacterPrefab(HeatAPI.CharacterEntry.CharacterID)
  • Note: If you know a character’s name as a string, you may also use ActiveCharacterManager.Instance.FindCharacterPrefab.  (See Below)
  • FindActiveCharacterInstance:  Returns an active character instance (as an NPCController) by passing in a CharacterEntry.CharacterID.  Changes to a character that you want made to a single instance only should be made to a characters’ instance while they are spawned in game.
  • Usage: HeatAPI.Instance.FindActiveCharacterInstance(HeatAPI.CharacterEntry.CharacterID)
  • Note: If you know a character’s name as a string, you may also use ActiveCharacterManager.Instance.FindCharacterInScene.  (See Below)

Note: HeatAPI calls are safe to be made from any function in your custom scripts, such as Awake, Start, Update, and even Coroutines.

Getting Common Game References

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.

  • Player.Instance will get the currently active Player instance.
  • MainMenu.Instance will get the scene’s Main Menu instance.
  • HeatAPI.Instance contains a function for spawning toys like in the SpawnInteractable Script
  • ActiveCharacterManager.Instance contains methods for finding character instances and prefabs.
  • ActiveCharacterManager.Instance.FindCharacterPrefab(string characterName) will get the NPCController of a character prefab (aka, the character before spawning).  Useful for making modifications before a character spawns that will carry over to each consecutive character spawn.
  • ActiveCharacterManager.Instance.FindCharacterInScene(string characterName) will get the NPCController of a currently active character instance.
  • Character GameObject names are as follows (.F = Female version, .T = Trans version, .C = Canine pp, .H = Human pp):
  • Hera.F
  • Hera.T
  • Garret.C
  • Garret.H
  • Marina.F
  • Marina.T
  • Renee.F
  • Renee.T
  • Riley
  • Avery
  • Aurora
  • Emmy
  • Atlas
  • Vertex
  • Astera
  • Jasper
  • Sasha

Scene Modding

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.

Scene Object

This gameobject only contains a Mod_Scene script, which only requires a field related to the player spawn point.

Player Spawn

This gameobject requires no scripts, it is simply used to place the player at its given position in the scene.

Dildo Spawn and Interactables Placement

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.

Scene Portrait

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.

Supported Characters and Poses

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.

Custom Poses for Modded Scenes

        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:

  1. Make your scene mod up to the point where you can load into the scene and spawn character’s at one of the example POIs.
  2. Load up your scene mod and spawn the character you wish to make the pose for.
  3. Pose the character and create and save a custom pose using the games Custom Poses menu.
  4. Go back to your modding project and create a new POI game object and give it a unique name.
  5. Set Pose Type to Free and Set the Load Custom Pose bool to true as pictured below.
  6. Enter the .pose file name you just created into the Custom Pose File Name field.
  7. Open the .pose file in notepad.
  8. Edit the “POI:” field to match the Game Object name of the new POI in your scene:
  9. Export your mod and load up the game.
  10. Activating this POI will load the custom pose you just made.

Packaging Custom Poses into your Exported Mod

        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!

Mod Configuration Menu

Heat now has a mod configuration menu! In this panel you’ll be able to:

  • Select which mods to enable and disable. No longer will you need to remove mods from the Mods folder directly.
  • Modify any setting your mod may contain.
  • Activate mods with the press of a button instead of restarting the game.

Mod List

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).

Mod Options

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.

Mod Logs

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.

Character Modding

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.

Getting Started

What you need:

  • The modding project, fully set up as described in the Getting Started section at the beginning of this guide.  IMPORTANT: When making character mods, it is critical that you match the correct DLLs with the version of the modding project that you are using unless instructed to update them in the Updating Characters section of this guide!  Here is the current compatibility:
  • Modding Project V9.2:  Heat V0.6.1.2 DLLs
  • Modding Project V9.3.2 & V9.4:  Heat V0.6.5.2 DLLs
  • Modding Project V9.5:  Heat V0.7.0.2 DLLs
  • Modding Project V9.6:  Heat V0.7.5.2 DLLs
  • A fully rigged .FBX character model.  See the Populating Character References section of this guide to see all required/optional bones.  For optimal compatibility, it is recommended that your character is rigged with Auto Rig Pro.  This is not required but is recommended so that your character hierarchy matches Heat’s characters closely.
  • Animations for that character model.  See the example character’s .FBX files and animation controller in the modding project for examples of the types of animations used.  It is up to the modder to determine which of the example animations their character needs.  
  • Please note that these animations should be generic animations specific to your character model as opposed to humanoid animations using Unity Engine’s Mecanim system.  
  • IMPORTANT NOTE:  Knowledge of Unity Engine’s animation system WILL be required to properly animate your character.  I highly suggest getting familiar with Unity’s animations systems before continuing if you have no experience.  See the Animations section of this guide to get an idea of what will be required.

  • Audio clips for your character.  See the example character’s audio clips for reference.  Feel free to use the example audio clips for your character.

Preparing the FBX Model

        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.

Populating the Character Reference Container

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!

  1. If your character has multiple genitalia options, they must have a “.*” suffix at the end of their name.  This identifier must match the Character Suffix dropdown in Character Details.  See the Marina prefab for an example of this.
  2. If your character does not have multiple genitalia options, your character cannot have a “.*” suffix in their prefab name.  Additionally, Character Suffix should be set to “None”.
  3. The options in Character Suffix are defined as follows:
  1. F: Female
  2. T: Trans
  3. C: Canine
  4. H: Human
  1. The above Character Suffixes should only really be used if your character has alternate genitalia options.  If your character has other alternate versions (Example: Clothed versus unclothed versions) we will spawn these character prefabs using a different method described later in this guide.

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.

Performing Character Setup

        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.

Re-Running Character Setup

        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.

Additional Required Setup

        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!  

Character Prefab Information

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

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

-Rig Builder contains all of your character’s various control rigs. Your rig builder script should always be set up as follows:

NPC Controller

        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.

NPC Audio Controller

        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.

Look Target Controller

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.

Obi Collider Creator

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.

Possess Character

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.

Moistener

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.

Eye and Head Animator

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.

(Male or Female) Climax Controller

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.

NPC Command Controller

-This script must remain disabled for now.  It is used for command mode which is currently not supported on modded characters.

Player Control Rig Switcher

-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.

Footjob Controller

-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.

Previous Mod_Char Reference Container

-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!

Mod_Base References

-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.

Control Rigs

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:

  1. Non Player Control Rig:  Controls the character as an NPC.
  2. Player Control Rig:  Allows the player to possess/control the character.
  3. Butt-Tail Rig:  Controls orifices and tails.
  4. Penis Control Rig:  Controls a penis if your character has one.

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

The FBX hierarchy contains your entire custom model, plus other objects we will add in order to make everything work properly.

Emitter Base

        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.

Milkies

        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.

Cheek Caress

        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.

Look At Volume

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.

  • LookAtVolume:  Contains a trigger sphere collider.  Triggers the character to look at penetrators within this volume.
  • Mouth stuff:  Contains the Mouth Orifice script which manages penetrator sucking behavior.
  • Mouth Orifice script:  Be sure to populate the Penetrator Ignore Objects list which is the list of objects that the penetrator will ignore collision with.
  • Capsule Collider:  Used by the Mouth Orifice as the path of penetration towards the mouth and it’s also used as the limiter with regards to how deep the penetrator can go
  • Mouth Colliders:  Contains 4 child objects with colliders that hold a penetrator inside the mouth.
  • All Other Objects:  Using the example Marina prefab, copy the rough placement of these game objects.

Other Objects

  • Eye Center:  Simple transform placed between your character’s eyes.
  • Hair Base & Nose Base:  Gameobject with a Kinematic Rigidbody that serves as an Configurable joint anchor for interactable hair and nose.
  • Back of Throat:  Trigger collider that triggers Atlas’s dick to be banished to the void.
  • Kiss Volume:  Trigger collider that triggers characters to begin kissing.
  • Kiss Target:  Target transform for another character to kiss.
  • Ghost Hands:  Simple hand models that appear to show the player posing points.  A dozen or so of these are attached throughout your character’s hierarchy.  
  • Palm Cast Point:  Casts particles and a ghost hand projection when the player grabs your character’s hand and moves it near another character to show them where the hand will snap to.

  • Heart:  The audio source where your character’s Heartbeat audio plays from.  Position this object near your character’s heart.
  • Dynamic Heartbeat script:  Place any audio clips for Heartbeat In and Heartbeat Out to use that audio.  If left blank, default heartbeat audio clips will be used automatically.
  • BreastMaster:  Manages some breast related behavior.  Male character’s with breasts set up should have the Male Breasts boolean set to true in the Breast Master script.
  • PartnerLeaderPosition:  Contains the LocalPartnerPosition script which holds animation curves for partners to follow when leaning in to kiss.
  • Lick Targets:  Several lick targets are parented throughout your character.  These serve as targets for other characters to lick.  The trigger for a character to begin licking is projected outward from the Z axis of this object.
  • Butt Anchors:  These are parented to your Butt Cheek Parent objects.  Adjust positioning to match Modded Marina’s positioning.
  • Butt/Vagina End: Placed at the deepest part of the orifice with Z forward in the direction of penetration.
  • Vagina Start:  Placed at the entrance of the orifice with Z forward in the direction of penetration.
  • Butt Orifice Compute Start:  Placed just outside of the orifice with Z forward in the direction of penetration.
  • Butt Orifice Compute Entrance:  Placed at the entrance of the orifice with Z forward in the direction of penetration.
  • Dick Root Forward:  Placed at the base of the penis with Z forward in the direction of penetration.
  • Plap Surface:  Placed at the base of the penis with Z forward in the direction of penetration.
  • Cumflation Collider Updater:  Manages Cumflation/Bulge functionality.  Match Marina’s positioning of transforms and colliders.

Added Components

        Several game objects in your models hierarchy will have also received some scripts.

  • Rascal Skinned Mesh Collider:  Added to your fbx’s root gameobject. Manages mesh collider generation on your model.
  • Excluded Skins:  Add any meshes here that you do not want collision generated for.
  • Excluded Bones:  Add any bones from your hierarchy here that you do not want collision generated for.
  • AccessorySwitcherSkin:  Added to game objects in your model with Skinned Mesh Renderers.  Manages alternate skins.  More information in the Modded Character Skinning Setup section of this guide.
  • ShapeKeyHolder:  May be added to game objects in your model with Skinned Mesh Renderers that have blendshapes keys you wish to have a slider for.  Example:  the ShapeKeyHolder script on Marina’s body mesh controls the ‘Chuby” blendshape at index 4 that corresponds with the Chubbiness slider in game.
  • P3DCreator:  Added to your character’s main body mesh.  Allows for markers to be used on your character.
  • GrabbableChild:  Added to dozens of game objects throughout your character.  Each GrabbableChild script links to a Grabbable script in your character’s NonPlayerControlRig and allows the player to pose your character.
  • Butt, Hair, and Breast Physics Components:  These bones will receive Rigidbodies, Configurable Joints, Grabbable scripts, and various Interaction related scripts to make these objects interactable.
  • Head Audio Components:  Your character’s head receives Audio Source and Audio Low Pass Filter components that serve as your character’s audio source.
  • Jawbone Components:  Components added to your character’s jawbone manage vore related functionality.  The trigger sphere collider may need adjusted to allow the player to transition to the Vore scene when entering the character’s mouth.
  • Interaction scripts:  You will find scripts like Rub Interaction, Lick Interaction, etc that manage animation and voice line triggers.

Final Steps

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!

Character UI Setup

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.

Points of Interest

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 Character Skinning Setup

        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:

  • Add this script to the game object with the Skinned Mesh Renderer representing your character’s body.
  • Add one Color Set to the Color Set array for each skin you have.
  • Either add a Sprite representing the skin or five Button Colors that represent the skin.
  • Optionally add an author name.

Accessory SwitcherSkin:

  • Add this script to the game object of every Skinned Mesh Renderer that your would like to be reskinnable.
  • If one Skinned Mesh Renderer has multiple materials to be swapped, add another Accessory Switcher for each.  Set Index to match the Index on the renderer’s Materials array.
  • Alternate materials for each index get placed in the Accessory Switcher’s Material Array.  Order matters.  For example, Materials for each skin should be at matching Indexes.
  • Default Skins gets set to the number of skins you have.
  • Important:  The number of materials in the Materials array must match the number of skins across all Accessory Switchers regardless of whether or not a skin swaps that Material.  Simply add the default material multiple times.
  • See Marina for examples of how this should look
  • Optional:  As of Heat V0.5.9.2, a MeshID field has been added to the Accessory Switcher script.  If another modder wishes to make skin mods for your character, they can use this MeshID instead of the game object name in their Skinning Prefab’s ID field to identify this game object as being re-skinnable.

Animations

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 Setup

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.

Updating Your Character To Newer Game Versions

        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.  

  1. Do not delete any of the following scripts:
  1. Mod_CharReferenceContainer
  2. Mod_BaseReferences nor any of the game objects referenced within this script.
  1. If there is an object here that your character does not use, do not delete it.  Disable it!
  1. Do not rename any of the game objects that we have added to your character!  Many of these objects are located by name and will be forever lost if you rename them.  Especially in the control rigs.
  2. Do not delete the following project assets:
  1. Any prefabs in Assets/_YourMod/CharacterModding/YourCharacter/Data/Prefabs
  2. Any scripts in Assets/Editor unless instructed.
  3. Any assets from the default modding project in Assets/_YourMod/CharacterModding/YourCharacter
  4. You can delete the example character assets but it is not recommended.
  1. DO NOT DELETE THEM UNTIL YOU ARE 100% CERTAIN THAT YOUR CHARACTER FUNCTIONS PROPERLY IN ALL ASPECTS.
  2. Once Marina is deleted, and you are sure your character is functioning well in game, you can use your finished character prefab in the Base Prefab field in your Mod_CharReferenceContainer script for any new builds.

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:

  1. Download and extract the latest version of the Modding Project.  You only need access to the files, no need to actually open the project.
  2. Visit the Character Modding/Getting Started section of this guide to find out which dlls you need for the version of the modding project you are setting up.
  3. Download that version of the game off of Patreon or Subscribe Star.
  4. Delete the old .dll files from your existing project.  DO NOT delete any .meta files or Editor_REM.dll
  5. Update your character modding project with the new dlls
  6. Navigate to the Assets -> Editor folder of both projects.
  7. Replace AddedObjectsEditor.cs and CharacterReferenceContainerEditor.cs in your existing project with the same scripts from the new Modding Project.
  8. Find the appropriate instructions in the sections below to continue.  Your character’s Added Objects References game object tells you which version your character is currently updated to.

Update Instructions #1: 0.5.8.2 to 0.5.9.2

        This update adds Vore related objects to your character’s jawbone and requires updates to your MasterHeadState scripts.

  1. Open your character in prefab view and navigate to the Mod_CharReferenceContainer script.  
  2. Populate the jawbone transform field.  Note: this does not need to be an actual jawbone armature bone.  It can be any transform near your character’s throat.
  3. Click the Update Character button at the bottom of the script. 
  1. [IMPORTANT NOTICE!] Changes made when running Update Character in prefab view will not save!  I’m struggling to find a solution to this in code that works.  For now, there are three workarounds:
  1. If AutoSave is on, make any manual change to your prefab. This can be literally anything even if you immediately undo it.
  2. If AutoSave is off, manually click the Save button.
  3. Run Update Character on a prefab instance in scene view, then apply the changes in the prefabs root game object manually.
            
  1. Check and resolve any errors or warnings in the Console.
  2. Navigate to the jawbone game object.
  3. Adjust the sphere collider to the back of your character’s throat.  This is the threshold where players will transition into the Vore scene.
  4. Optional:  In your character’s root game object, find the NPCAudioController.
  5. Optional:  Add your own VoreBreathingClips scriptable object to your character with custom audio clips.  Note:  Default clips will be added automatically when your mod loads in game if this is not populated.

Optional update to get rid of an annoying persistent console error:

  1. Navigate to the Master Head State script in your character’s root gameobject.  
  2. Change the length of the Serialized Bool List array from 196 to 225.
  3. Search for “Character Base” in the Assets window search bar.
  4. Open the Character Base prefab.
  5. Find the Master Head State script.  
  1. Update the Serialized Bool List from 196 to 225 here as well.

Update Instructions #2: 0.5.9.2 to 0.6.0.2

Updating the DickBulgeColliderUpdater prefab.

  1. Navigate to YourCharacter > Data > Prefabs > ContainerPrefabs.
  2. Delete the DickBulgeColliderUpdater Prefab.
  3. Drag and drop the DickBulgeColliderUpdater prefab from the new modding project into your character’s project.  You may now close the new modding project.
  4. Open the PrefabContainer prefab in YourCharacter > Data > Prefabs.
  5. In the  Inspector window, assign the new DickBulgeColliderUpdater prefab as the Dick Bulge object.
  6. Click the Update Character button at the bottom of Mod_CharReferenceContainer and MANUALLY save your prefab.
  7. Navigate to Added Object References and Select Dick Bulge Collider Updater.
  8. Using Marina as a reference, adjust the Bulge Anchor, and Bulge Effector scripts to be positioned similarly to Marina.

Updating Accessory Switcher scripts.  I tried to code this update but unfortunately it will all need done manually.

  1. Open your character prefab.
  2. Go to each game object with a mesh renderer, and delete the Accessory Switcher script.
  3. Add a new component called Accessory Switcher Skin.
  4. Go to the Modded Character Skinning Setup section of this guide and set up the new Accessory Switcher scripts from scratch.

Update Instructions #3: 0.6.0.2 to 0.6.5.2

        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:

  1. Update your project’s dll’s to Heat V 0.6.5.2 if you haven’t already.
  2. Replace AddedObjectReferences Editor and CharReferenceContainerEditor.
  3. Setup a V9.3 modding project with 0.6.5.2 dlls and open the project.
  4. In modding project V9.3, open the ModCharExample.T prefab and navigate to the Master Head State script.
  5. Find the SerializedBoolList list -> Right click, Copy.
  6. In your project, open up your character prefab and navigate to the Master Head State script.
  7. Find the SerializedBoolList -> Right click, Paste.
  8. In both projects, navigate to YourCharacter/Data/HeadWeights
  9. Copy HeadWeightsLick and HeadWeightsPossession from the modding project to your project.
  10. Drag and drop these new HeadWeights into the Head Weights list in the MasterHeadState script.  You should have 9 HeadWeights total.
  11. If you have other character prefabs that are not variants of each other, repeat steps 5-10 for those prefabs as well to eliminate console errors.
  12. Navigate to YourCharacter/Data/Prefabs in both projects.
  13. Drag and drop the following prefabs from V9.3 to your project.
  1. BulgeEffector
  2. Butt_TailRig
  3. CapsuleAdjustable.fbx
  4. NonPlayerControlRig
  5. PalmCastPoint
  6. PlayerControlRig
  1. The BulgeEffector prefab will error.  Open it.
  2. The first Child of the BulgeEffector prefab will be missing.  Delete it.
  3. Replace it with the CapsuleAdjustable.fbx
  4. Scale CapsuleAdjustable game object to 0.25, 0.25, 0.25
  5. Open your character prefab.
  6. Unpack the Control rig.
  7. Add the NonPlayerControlRig, PlayerControlRig, and ButtTailRig prefabs to your character.
  8. Unpack completely these prefabs.
  9. Expand the Butt_Tail Rig.
  10. Delete the butt game object and MarinaTail game object.
  11. Drag and drop the butt and tail game objects from your old control rig to the Butt_Tail Rig
  12. Delete the old Control Rig.
  13. Navigate to Butt_Tail Rig->butt->butthole.
  14. Rename ButtholeCtrl1 to “butthole_01.l”
  15. Rename one ButtholeRayPoint(Clone) gameobject to “rayPoint_butthole_01.l”
  16. Navigate to Butt_Tail Rig ->vagina.
  17. Rename VaginaCtrl1 to “vagina_01.l”
  18. Rename VaginaRayPoint1 to “rayPoint_vagina_01.l”
  19. If your character has a Penis, navigate to the Penis Control Rig.
  20. Delete the Mod_PenisCtrlRigRefContainer script.
  21. Navigate to your  Mod_CharReferenceContainer script.
  22. In Arm References, there are new optional fields for individual finger bones.  Populate these per the tool tip if you have these bones.
  23. In the BasePrefab field, insert your character prefab.
  24. Navigate to YourCharacter->Data->JointValues in both projects.
  25. Drag and drop the missing Joint Value scriptable objects from V9.3 to your project.
  26. Add a script called Mod_BaseReferences to the Character Base (root gameobject of the prefab).
  27. Using the Marina example in V9.3, populate your Mod_BaseReferences script with references to all of the appropriate game objects in your character’s prefab.  Your character will be missing the following references, leave these blank:
  1. Left and Right Palm Cast Point objects.
  2. Either a male or female climax controller.
  3. PlayerControlRigSwitcher
  4. PlayerCharacterEmissionController
  5. Ignore “References Added On Build” Section for now.
  1. Navigate to the Character Scaler script in the Character Base.
  2. In the Physics Scale Object list, set the number of elements to 4.
  3. Click on the Added Object References game object.
  4. In the inspector, click the ellipsis in the upper right hand corner (next to the lock icon) and enter debug mode.
  5. In the Mod_AddedObjectReference script, slot in your Mod_CharReferenceContainer script and Mod_BaseReferences script.
  6. Exit debug mode.
  7. Add an empty game object to your prefab’s root gameobject.
  8. Name it “UnusedObjects”
  9. Assign this object to the Unused Objects field of Mod_BaseReferences.
  10. Exit prefab view and save changes if you have Auto Save turned off.
  11. Re-open your character prefab.  Turn Auto Save OFF.
  12. Go to Mod_CharReferenceContainer.
  13. Click Setup Character.
  14. You shouldn’t get any errors here but check for them anyway.  Ask Brio on the discord about them if you do.
  15. MANUALLY save your character in prefab view, otherwise the changes may not save.
  16. Navigate to the Character Scaler script in both projects.
  17. Some fields may be missing on your setup, match them to Marina in the V9.3 project.
  18. Navigate to the Possess Character script in the Character Base.
  19. Slot in the Player Control Rig Switcher script (also on the Character Base) into the Rig Switcher field.
  20. Navigate to the Player Control Rig Switcher script in both projects.
  21. Match the setup of this script to that in the example Marina.
  22. Navigate to the PlayerControlRig gameobjects in both projects.
  23. Match the Player Controlled Hips script of example Marina to your character.

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.

Update Instructions #4: 0.6.5.2 to 0.7.0.2

        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.

  1. Update your modding project with 0.7.0.2 dlls.
  2. Update your character via the Mod_CharReferenceContainer “Update Character” button.
  3. Navigate to the PlayerControlRig/arm.l/hand.l game object and delete the missing script.
  4. Navigate to the PlayerControlRig/arm.r/hand.r game object and delete the missing script.

Update Instructions #4: 0.7.0.2 to 0.7.5.2

        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.  

  • Step Curve and Step Time With Distance animation curves have been added to the Player Controlled Hips script.  These effect stepping animations for players without trackers.
  • Several scripts have been removed from Player Control Rig game objects that are no longer needed.
  • Spine game object has been deleted from the Player Control Rig.
  • Neck references and IsLeftArm bool added to the Elbow Hint Mover scripts.
  • New hand2D prefab added to character’s right arm.  This prefab allows for 2d player body functionality when the character is possessed in 2d mode.
  • New game objects called LickPoint and LickRay has been instantiated to your characters Head reference.  This is used in the Master Head State script. Reference Marina in the latest project release to see where these should be located.
  • Add Orifice Sound Controller scripts to butthole and vagina game objects in the Butt-Tail Rig.  This allows the game to use Plap and Squish SFX from the game's resources.

  1. Update your modding project with 0.7.5.2 dlls.
  2. Download and extract the latest modding project release.
  3. Copy hand2D.prefab located at Assets/_YourMod/CharacterModding/YourCharacter/Data/Prefabs/hand2D.prefab into your character modding project.
  4. Open your character in prefab view, and navigate to the Mod_Base References script.
  5. Under “Modding Project References”, drag and drop hand2D.prefab into the “Hand 2d Prefab” field.  Do not confuse this with the Hand 2d field in the Non-FBX Objects section.
  6. Update your character via the Mod_CharReferenceContainer “Update Character” button.
  7. Delete the missing script on the root game object.
  8. Delete the missing scripts on the “butthole” and “vagina” game objects.
  9. Save your prefab.

Update Instructions #5: 0.7.5.2 to 1.0.0

        This update adds support for the new orifice system.

Before opening your project:

  1. Download and extract the latest modding project release.
  2. Download and install Unity Engine 2021.3.45.f2.
  3. Replace your dlls with either 1.0.0 (Steam/Itch.IO) or 0.8.0.3 (patreon milestone release).
  4. In the Editors folder, replace AddedObjectsEditor.cs with the same script from the latest modding project release
  5. Open your project in Unity Engine 2021.3.45.f2.
  6. Copy the following prefabs from the latest modding project into YourCharacter/Data/Prefabs.
  1. CumflationColliderUpdater
  2. FingerDisplacementSDF
  3. FingeringVolume
  4. GapeSDF
  5. PenisRigSDFs
  1. Check each prefab for missing scripts.  If scripts are missing, correct the missing scripts to be the same as the setup in the new modding project.
  2. Go to your character base and navigate to the Mod_BaseReferences script.
  3. Scroll down to the Modding Project References and populate the following fields with the dlls you just copied:
  1. Penis Rig SDF Prefab
  2. Gape SDF Prefab
  3. Finger Displacement Prefab
  4. Fingering Volume Prefab
  5. Cumflation Collider Updater Prefab
  1. Run the Update Character function on the Mod_CharReferenceContainer script.
  2. If you get an error that says “Destroying assets is not permitted to avoid data loss.” you can safely ignore it.
  3. Manually save your character prefab.
  4. Navigate to the Added Object References game object and note there are further setup instructions there to follow.  This involves adjusting the following game objects:
  1. Plap Surface.
  2. Penis SDFs.
  3. Butt End/Compute End/Compute Start.
  4. Vagina End/Vagina Start.
  5. Cumflation Collider Updater.
  6. Butt Anchors.
  7. Various SDF related objects in the Butt/Tail Rig.
  8. Revisiting Groin/Mouth Orifice scripts for new setup.

Exporting Mods

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!

Modder Agreement

 

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:

  • The user acknowledges that they have deleted ALL unused assets in the _YourMod folder from their modding project.  This is because when you export your mod, all assets are exported regardless of whether they are used or not.  This helps prevent mods from conflicting with other mods.  Reducing the amount of conflicting mods on the Discord reduces the amount of questions that need fielded by mod users to the modding community.  Please for my sake and your sake, delete all unused assets from your modding project.
  • Example: If your mod is a character skin for Riley, your need to delete the CharacterModding, Dildos, SceneModding, and ModConfigurationUI (unless a UI is being used).  Additionally, in the CharacterSkinning folder you need to delete the folders for every character other than Riley.  If the other character folders remained, your Riley character skin would overwrite skin mods for other characters to their default skins.
  • Any remaining assets must also have unique names wherever possible and within reason.  This also reduces the chances of mods conflicting with one another.  This is especially true for Scene files.
  • For example, if your scene mod is the default “MyModdedScene” and another user exports a character skin without the “MyModdedScene” scene file deleted, YOUR scene mod may load as the example modded scene instead of your scene.
  • One exception to this is scene modding POI names for non-modded characters.  These need to be identical to the examples for modded scene POIs to work.
  • Mods also must not be exported in Debug Mode.  Mods in Debug Mode cannot be disabled by the mod user by any means.  See the next section for details on Debug Mode.

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.

Using the Steam Workshop Uploader

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.

Adding the Steam Workshop Uploader to Older Projects

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.

Mod Debug Mode

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.

Mod Troubleshooting FAQ

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.