Skip to content

Mod #2 - No Overheat

You know how when you start a game in Oasis Springs (the desert map), your Sim is immediately dying of heatstroke? I hate that, so let’s fix it.

Somewhere in the game files is a tuning file that controls the overheating interaction, but where on earth is it? We know the popup contains the phrase “burning to death”, so let’s start there.

  1. In Sims 4 Editor, open the String Table Browser
  2. Search the phrase “burning to death”
  3. There are 3 results, but the one we are looking for starts with {0.SimFirstName} is burning to death and has the key 0x718198DE.
  4. Selecting this entry shows us any tuning files that reference this string, which in this case is action\loot_Notifications_TemperatureDeaths_Burning. Click it to open in in the tuning browser.

This tuning has a class of LootAction, which has a fairly generic description of A list of loot operations. In Sims 4, loot essentially means anything you can receive as a response to something, good or bad. Sure enough, looking at the description tree, the tuning contains only a single <List> node called loot_actions. Clicking the variant dropdown shows us this list can contains hundreds of different data types, including buffs, payments, weather, and more.

Awesome Trait

Looking back at the actual XML we see it uses the variant notification_and_dialog, references some audio, and references the string we used to get here. How boring. This is just the annoying popup and nothing more. We didn’t find what we needed. All hope is lost.

All hope is not lost. Click the Usage button at the top, which shows files that reference this file. A single result, commodity_Death_Temperature_Burning. Success.

This is perhaps the most important step of tuning modding.

First, we can see c="Commodity", so the Commodity.tdesc is loaded. It has the following description:

Represents any commodity that has a value and changes over time. This class updates lazily, which means it generally only processes change when either a new delta is added, a delta is removed, or someone tries to inspect the value of the commodity.

A little technical, but a value that changes over time seems like a good takeaway. Let’s continue exploring by clicking around the XML. The tree on the right will automatically select the corresponding root node, which in turn shows the node’s description at the bottom. Read the names of the nodes present in the file, their descriptions, and see if you can understand what is happening.

Can you understand this file without me explaining it?

  • This tuning tells the game to track a variable with a range of 0 - 100
  • It naturally wants to converge to 0
  • When the variable reaches 2, a notification will appear (the one that annoys me)
  • When it reaches a value of 100, it triggers a failure interaction of death_Overheat, which presumably kills the sim
  • It decays at a rate of 0.208
  • It has several usages, which are most likely other tuning files that cause the variable to increase, since it never appears to increase on its own

This matches what we see in game. Do something that causes the Sim to get hot, get a notification, then die. A tale as old as time.

In the future you’ll likely be able to import this file directly into a package (I’m a broken record, so many things to improve), but for now we’ll be using tdesc.lot51.cc again.

  1. In tdesc.lot51.cc, click Import EA Tuning
  2. Search commodity_Death_Temperature_Burning, select it, then click Import & Edit

Challenge #2: Can you figure out what changes to make to fix the issue?

Can you figure out what changes to make to fix the issue?

We want to make two changes.

  1. Remove the states field to prevent the annoying popup
  2. Remove the commodity_failure field to prevent dying

This should be a nice clean solution. The overheat variable is still tracked, so we’re not at risk of breaking anything that relies on it, but it no longer directly causes anything to happen. Perfect!

Download the XML and SimData, import it into a new package in S4E, and enjoy not overheating! If you have an issues, the final XML can be found below.

<?xml version="1.0" encoding="utf-8"?>
<I c="Commodity" i="statistic" m="statistics.commodity" n="commodity_Death_Temperature_Burning" s="182175">
<T n="_default_convergence_value">0</T>
<U n="arrow_data">
<T n="negative_double_arrow">-20</T>
<T n="negative_single_arrow">-1</T>
<T n="negative_triple_arrow">-30</T>
<T n="positive_double_arrow">20</T>
<T n="positive_single_arrow">1</T>
<T n="positive_triple_arrow">30</T>
</U>
<T n="auto_satisfy_curve_random_time_offset">120</T>
<T n="decay_rate">0.208</T>
<U n="initial_tuning">
<T n="_use_auto_satisfy_curve_as_initial_value">False</T>
<T n="_use_stat_value_on_init">True</T>
<T n="_value">0</T>
</U>
<T n="max_value_tuning">100</T>
<T n="maximum_auto_satisfy_time">1440</T>
<T n="min_value_tuning">0</T>
<T n="remove_on_convergence">False</T>
<T n="ui_sort_order">0</T>
<U n="ui_visible_distress_threshold">
<T n="threshold_value">0</T>
</U>
<T n="weight">1</T>
</I>