Frostfall (3.4.11)
# Frostfall Temperature System for ESO
### Version 3.4.11 | Inspired by Frostfall (Skyrim)
*by @Kreksar5 and Claude.ai*
> Thematically inspired by *Frostfall*, the well-known Skyrim mod by
> **Chesko** name and concept used as an homage, **not a port, and not
> affiliated with or endorsed by Chesko or Frostfall’s other contributors.**
> **AI-ASSISTED ADDON.** Written with Claude.ai. Core mechanics have been
> iteratively refined and bug-fixed across many versions, but this should
> still be treated as not fully independently validated in-game until
> confirmed through extended play-testing.
—
## Credits
– **Frostfall Hypothermia Camping Survival** (the Skyrim mod) by
**Chesko**: the name and the general hypothermia/insulation concept are
used as a direct homage. This addon is an original implementation built
for ESO’s own API and mechanics no code, assets, or data from the
Skyrim mod were used or could be (different engine, different game).
– **RolePlayNeeds Tamriel Survival!** by **matheusbk2**: two implementation
details were confirmed by inspecting its actual published source (checked
directly against the official v0.7 BETA release) the `EVENT_LOOT_RECEIVED`
argument signature (position 5, not 6, is the item-type integer), and the
disease-overlay window construction pattern (`CreateTopLevelWindow` →
`SetAnchorFill()` → `SetMouseEnabled(false)` → child `CT_TEXTURE` with its
own `SetAnchorFill()`, alpha controlled on the parent window) that this
addon’s hot/cold overlays follow. No code was copied; Frostfall is an
original implementation.
**Correction:** a third item a `RPN_REAGENT_TRAITS` static item-ID
lookup table for alchemy traits was previously credited to RolePlayNeeds
here and in the v3.3.0 notes below. That table does not exist in
RolePlayNeeds’ published source; RolePlayNeeds has no reagent-trait
handling at all. This addon’s `FV.SPELL_RESIST_REAGENT_IDS` table is an
independent lookup this project built itself it was mistakenly
attributed to RolePlayNeeds (likely confused with a local, personally-
modified copy of RolePlayNeeds that was never published), and the credit
has been removed.
### Overlay art credit
The hot/cold screen-overlay images (`HOT_OVERLAY.dds`, `COLD_OVERLAY.dds`)
were generated using AI text-to-image tools (https://perchance.org/ai-text-to-image-generator) and Google’s
Gemini Image Creator and edited/converted to the game’s `.dds` format
using Paint.NET. They are not hand-drawn or sourced from ESO’s own art
assets.
—
## Overview
Frostfall adds a fully-featured ambient temperature and survival system to Elder Scrolls Online. Every zone has an estimated ambient temperature based on its lore and biome. Your armor, costume, and outfit style all contribute **insulation**. Gear sets grant insulation bonuses (or penalties). Swimming affects your effective temperature. At temperature extremes, screen overlays and emotes bring the experience to life.
**Insulation semantics:** High insulation traps body heat excellent in cold zones, but causes overheating in hot zones. Low insulation lets heat escape comfortable in heat, but leaves you exposed to cold.
—
## What’s New
### v3.4.11 documentation accuracy pass
A full review of this README against the actual current code and against
LibZoneTemp/LibArmorInsulation’s real current data (the developer supplied
the official RolePlayNeeds release for direct comparison). Found and fixed:
– **RolePlayNeeds misattribution**: a `RPN_REAGENT_TRAITS` static item-ID
lookup table was credited to RolePlayNeeds no such table exists in
RolePlayNeeds’ published source (confirmed against the official v0.7 BETA
release; RolePlayNeeds has no reagent-trait handling at all). This
addon’s own `FV.SPELL_RESIST_REAGENT_IDS` table is an independent lookup
this project built itself. The `EVENT_LOOT_RECEIVED` argument-signature
and overlay-window-anchoring credits were checked too and are genuinely
accurate kept as-is.
– **Zone Temperature Reference table was completely wrong** every one of
the 17 listed values was inaccurate, most by 3080C (e.g. Coldharbour
listed as 2C, actually -8C; The Deadlands listed as 85C, actually
54C). Rebuilt from `LibZoneTemp.lua`’s actual `ZONE_BASE_TEMPS_BY_NAME`
table. Also corrected the “80+ zones” / range claims in the Features
overview (actually 1,000+ zones and sub-zones, -16C to 55C).
– **Armor Insulation Reference table was from before the v2.6.0
staggered-tier rewrite** raw pre-snap scores that no longer correspond
to any real output of the current formula, plus four listed
styles/costumes (Voidsteel, Nightmare, Soul Shriven, Bear Raiment
Costume) that don’t exist anywhere in the current data. Rebuilt with
real entries and tiers computed through the actual current formula and
`Calc.SnapToTier()`.
– **Thermal direction was backwards for several Daedric-aligned pieces**:
Daedric, Ancient Daedric, Dremora, and Waking Flame were all described as
heat-generating with above-average insulation; the actual code has all
four with a *negative* `flavorBonus` (explicitly cold-themed flavor
text), landing them at or near the bottom of the range, not the top.
– **Removed an entirely fictional “Set Insulation Bonuses” feature** a
full section describing gear sets granting flat insulation bonuses,
“detected via LibArmorInsulation” with its own config panel. No part of
this exists in either addon: no set-detection code, no bonus data table,
no such config panel. Also removed the matching “active set bonus”
claim from the HUD Display section.
– **Corrected the claimed cultural-origin insulation ordering** (“Nord >
Orc > Breton > Imperial > Khajiit > Argonian”) the real computed order
is Nord > Breton > Khajiit/Argonian/Orc (tied) > Imperial.
### v3.4.10 settings-panel sync
– **Fixed the settings panel’s author/version fields**, which were out of
sync with the manifest and README: `author` incorrectly read “Frostfall”
(the addon’s own title) instead of the actual author, and `version` was
hardcoded to a stale `”3.4.2″` (the internal `FV.VERSION` constant was
also stale, at `”3.4.4″`). The panel now reads `author = “@Kreksar5 and
Claude.ai”` and `version = FV.VERSION`, and `FV.VERSION` itself is kept in
sync with the manifest `## Version` going forward.
### v3.4.9 overlay art credit
– **Added an “Overlay art credit” note** to the Credits section, crediting
the Perchance AI Text-to-Image Generator and Google’s Gemini Image
Creator for generating `HOT_OVERLAY.dds` and `COLD_OVERLAY.dds`, and
Paint.NET for editing/converting them to the game’s `.dds` format.
### v3.4.8 author credit
– **Standardized the author credit** to `@Kreksar5 and Claude.ai` in the
`## Author` manifest field and this README’s byline, and named Claude.ai
specifically (rather than generic “AI assistance”) in the manifest
description and the AI-assistance disclosure above, matching the crediting
convention used across this addon’s companion libraries.
### v3.4.7 non-affiliation disclaimer
– **Added an explicit “not a port, not affiliated with or endorsed by
Chesko” disclaimer** for the Skyrim mod *Frostfall*, matching the
disclaimer Realistic Needs and Diseases already carries for its own
Skyrim namesake. This addon reuses Chesko’s mod name and general concept
as a homage Chesko’s own permissions pages ask to be contacted before
the mod’s name or work is reused elsewhere, so this addon now says
plainly, in both the manifest description and this README, that it is
an independent, unaffiliated ESO implementation with no shared code or
assets (impossible between these two games’ engines regardless).
– **Expanded the Credits section** to name Chesko and the Skyrim mod
directly, rather than only crediting RolePlayNeeds for implementation
details.
### v3.4.6 ESOUI release-rules compliance pass
– **Corrected the `## Author` manifest field**, which incorrectly read
“Frostfall” (the addon’s own title) instead of the actual author.
– **Added the required `## AddOnVersion` tag** (previously missing entirely
this is the integer the ingame addon manager and Minion use to detect
updates, separate from the informational `## Version` tag). Started at 6,
comfortably above the `>=3` floor that Realistic Needs and Diseases’
`OptionalDependsOn` line already checks for.
– **Added a version floor (`>=1`) to the `LibClockTST` dependency**, which
previously had none.
– **Added the required AI-assistance disclosure** to the manifest description
and this README, per ESOUI’s addon release rules.
– **Added a Credits section** naming RolePlayNeeds (matheusbk2) for the
implementation details referenced during development.
### v3.4.5 API compliance audit
– **Full API audit against the official ESOUI API 101050 documentation.**
Every function call, method call, and constant referenced across the addon
was cross-checked against the API doc and, where the doc didn’t cover it
(manager singletons, `ZO_` helpers, third-party libraries), against the
live ESOUI source.
– **Removed the entire weather feature** (`FV:UpdateWeatherState`,
`FV:OnWeatherChanged`, the `EVENT_WEATHER_CHANGED` registration, and the
precipitation-drag term in the temperature drift calculation). Neither
`EVENT_WEATHER_CHANGED` nor any of the six `WEATHER_*` constants
(`WEATHER_RAIN`, `WEATHER_SNOW`, `WEATHER_THUNDER`, `WEATHER_ASHCLOUD`,
`WEATHER_FOG`, `WEATHER_CLOUDY`) exist anywhere in the ESO addon API ESO
does not expose live weather state to addons at all, so this feature could
never have worked. Worse, registering for a `nil` event code at load time
risked erroring out of the whole `OnPlayerActivated` init sequence,
breaking the drift-update timer and emote-loop registrations that ran
after it. Removed the now-dead `isRaining`/`isSnowing`/`isStorming`/
`isSunny`/`weatherType` state fields and updated `/ff status`, the debug
log line, and this README to match.
– Everything else checked out: `EVENT_MANAGER`, `WINDOW_MANAGER`,
`SCENE_MANAGER`, `PLAYER_EMOTE_MANAGER`, `ZO_Alert`, `ZO_PreHook`, and all
LibAddonMenu/LibSavedVars/LibZone/LibClockTST calls are legitimate and
correctly used.
### v3.4.4 dependency version correction
– **Corrected `LibAddonMenu-2.0` dependency floor**: was mistakenly bumped to
`>=45` in 3.4.3, but LibAddonMenu’s own manifest documentation shows `43`
as the latest available version, not `45`. Fixed to `>=43`. The 3.4.3 entry
below has also been corrected to reflect the right number.
– **`LibZoneTemp` dependency floor bumped** from `>=9` to `>=11`, following
LibZoneTemp’s own version corrections in the same vein.
### v3.4.3 ESOUI compliance pass
– **Fixed a manifest bug: 5 separate `## DependsOn:` lines consolidated into 1.** Per the addon manifest spec, multiple non-optional dependencies must be space-separated on a single `## DependsOn:` line; repeating the directive across several lines risks the manifest parser only honoring the last occurrence, which would have silently dropped the `LibClockTST`, `LibAddonMenu-2.0`, `LibZone`, and `LibZoneTemp` checks (leaving only `LibArmorInsulation` actually enforced).
– **Added missing version floors** (`>=`) for `LibAddonMenu-2.0` (`>=43`), `LibZoneTemp` (`>=9`), and `LibArmorInsulation` (`>=7`), matching their current `## AddOnVersion` values. `LibClockTST` still has no version floor its current `AddOnVersion` wasn’t available to check during this pass; recommend confirming and adding one.
– **`## APIVersion` updated** from the stale `101043` to `101049 101050` (current Live/PTS), and the README’s compatibility section synced to match.
– **Reviewed for global variable leaks and “what addons cannot do” compliance** none found. The reagent-consumption mechanic only *listens* for `EVENT_INVENTORY_SINGLE_SLOT_UPDATE` after the player manually eats/uses something; it never calls `UseItem` or any consume/cast/interact function itself, so it doesn’t touch the quickslot-automation restrictions.
### v3.4.2
– **Reagent consumption detection now ignores bank activity.** Withdrawing or depositing a reagent from the personal bank or guild bank fires the same `EVENT_INVENTORY_SINGLE_SLOT_UPDATE` as eating it, so the spell-resist buff trigger is now also gated off while either bank window is open (`EVENT_OPEN_BANK`/`EVENT_CLOSE_BANK`, `EVENT_OPEN_GUILD_BANK`/`EVENT_CLOSE_GUILD_BANK`), matching the existing merchant/crafting-station gating.
### v3.4.1 (bugfix)
– **Fixed: reagent consumption detection was completely broken.** `GetMedicinalUseRank()` (used to scale the spell-resist buff’s duration) called `GetCraftingSkillLineIndices()` and referenced a `SKILL_TYPE_CRAFTING` constant neither exists in the ESO UI API. The resulting Lua error aborted the whole consumption handler before it could ever apply the buff, so eating a qualifying reagent did nothing. Replaced with `GetNumSkillLines(SKILL_TYPE_TRADESKILL)` + `GetNumSkillAbilities()` + `GetSkillAbilityInfo()`, all verified directly against esoui/esoui’s `ESOUIDocumentation.txt`.
### v3.4.0
– **Spell-resist reagent buff completed** added the remaining two confirmed item IDs (Clam Gall `139020`, White Cap `30154`) to `FV.SPELL_RESIST_REAGENT_IDS`, alongside Bugloss and Mudcrab Chitin from 3.3.0. All four canonical “Increase Spell Resist” reagents (per UESP) now trigger the buff.
### v3.3.0
– **New: Spell-resist reagent temperature buff** consuming an alchemy reagent with the “Increase Spell Resist” trait (Bugloss, Clam Gall, Mudcrab Chitin, White Cap) steadies the player’s effective temperature toward neutral (22C, the midpoint of the comfortable band), capped at a 10C shift in either direction.
– Lasts 30 real-world minutes, extended by 10%/20%/30% if the player has rank 1/2/3 of the Alchemy passive **Medicinal Use**.
– Eating another qualifying reagent while the buff is active resets the timer instead of stacking.
– Fires a fade warning once per minute during the last 5 minutes of the buff.
– The steadying offset is **recalculated live** from the player’s current real temperature differential every time it’s applied it is not a fixed snapshot taken at the moment the reagent was eaten, so it keeps tracking the player’s true temperature as they move through zones/weather while the buff is up.
– Uses a static item-ID lookup table (`FV.SPELL_RESIST_REAGENT_IDS`) built
for this addon, since alchemy trait APIs only work at an open crafting
station. *(Corrected: this was previously described as following the
same pattern as RolePlayNeeds’ “`RPN_REAGENT_TRAITS`” no such table
exists in RolePlayNeeds’ published source; see the correction in
Credits above.)*
– Internally, player temperature is now split into a “true” physical value (driven by ambient/weather/swim drift, unaffected by the buff) and an effective/displayed value (`FV:GetEffectiveTemp()`) that HUD, overlay, emotes, and band alerts all read from.
### v3.2.0
– **ConfigMenu synced with Frostfall.lua thresholds** the emote and threshold descriptions in the settings panel now reflect the correct v3.1.5 values (HOT 35C/95F, HEAT_DANGER 41C/105F) instead of the old stale values (27C/80F and 38C/100F).
– **Slash command renamed: `/fv` → `/ff`** The short-form slash command is now `/ff` to avoid conflicts. `/frostfall` continues to work as before.
– **ConfigMenu panel version updated** The LAM panel version string now correctly reads `3.2.0`.
### v3.1.5 (included in this release)
– Updated all temperature thresholds to more logical/reasonable values:
– `COMFORTABLE_LO` raised from 16C → 20C (61F → 68F)
– `COMFORTABLE_HI` raised from 26C → 24C (79F → 75F) *(reordered now correctly below WARM)*
– `WARM` raised from 21C → 26C (70F → 79F)
– `HOT` raised from 27C → 35C (80F → 95F)
– `HEAT_DANGER` raised from 38C → 41C (100F → 105F)
– Fixed band-transition comparison operators (`<` → `<=`) so boundary temperatures are correctly classified.
– OverlayEffects: pre-computes both cold and hot alpha before applying either, eliminating a mutual-exclusion bug that could mask the hot overlay.
– OverlayEffects: hot overlay comments and ramp references updated to match the new HOT (35C) and HEAT_DANGER (41C) thresholds.
### v3.1.4
– Fixed water loot handler was reading the 6th `EVENT_LOOT_RECEIVED` argument instead of the correct 5th (`itemType`). Now matches RolePlayNeeds exactly.
—
## Features
### Zone Temperature System
– **1,000+ zones and sub-zones** have carefully estimated base temperatures in C
– Temperatures range from Icereach (-16C) to City of Ash II (55C) see the
corrected reference table below for a curated selection of overland zones
– Zone temperature provided by **LibZoneTemp**
### Armor & Costume Insulation
Priority order (first match wins):
1. **Costume** Crown Store cosmetics; insulation based on material and coverage
2. **Outfit Style** Outfit system style overrides; checks chest slot style
3. **Base Armor Style** Your equipped armor’s crafting style
**100+ styles** have insulation values calculated from the **style** alone (not the set name):
– Skin coverage (how much of the body is covered)
– Material (fur/hide > plate > leather > cloth > silks)
– Cultural origin climate *(corrected: previously listed as “Nord > Orc >
Breton > Imperial > Khajiit > Argonian”, but the real computed tier order
is Nord (80) > Breton (50) > Khajiit/Argonian/Orc (30, tied) > Imperial
(20) Orc and Imperial were both misplaced)*
– Magical/special thermal properties (a small number of Daedric-aligned and
undead-adjacent pieces are flavor-adjusted **colder**, not hotter see
below)
Certain unique pieces have **flavor-adjusted** insulation based on their
in-game descriptions. *(Corrected: this list previously claimed several of
these were heat-generating and gave one nonexistent-style example; the
actual code has the opposite thermal direction for the Daedric-aligned
pieces, and three of the four “very low insulation” examples don’t exist
in the current data at all.)*
– **Daedric / Ancient Daedric / Dremora / Xivkyn / Stalhrim Frostcaster**
described in-code as radiating unnatural **cold**, not heat → these land
at or near the bottom of the mundane range (tier 010), not the top
– **Waking Flame** despite the fire theming, its actual flavor bonus is a
small negative one (“carries a mild chill”) → mid-range tier (50), not
especially warm
– **Flame Atronach (costume)** living flame → clamped to the maximum
tier (90, not 95 the raw 92 score is capped by `Calc.SnapToTier`)
– **Frost Atronach (costume) / Ice Wraith (polymorph)** living
ice/frost → clamped to the minimum tier (-10), the coldest a mundane or
magical source can register
– **Apostle** despite the “regulated temperature design” flavor text,
its actual tier (30) is below the 50 midpoint, not neutral
– *(Voidsteel, Nightmare, and Soul Shriven previously listed here as
very-low-insulation examples do not exist anywhere in the current
style/costume/polymorph data. The closest real match to “Soul Shriven”
is the “Soul-Shriven” style, tier 10, no flavor bonus.)*
*(**Removed: “Set Insulation Bonuses” section.** This README previously
described a whole feature here a table of specific gear sets each giving
a flat additive insulation bonus/penalty, “detected via LibArmorInsulation”
and configurable under a “Set Insulation Bonuses” panel in `/ff config`.
No part of this exists: there’s no set-detection code (no
`GetItemLinkSetInfo`/equivalent call) and no set-bonus data table anywhere
in either this addon or LibArmorInsulation, and no such panel in
`ConfigMenu.lua`. The insulation sources that actually exist are exactly
the three listed under “Armor & Costume Insulation” above costume,
outfit style, and base armor style with no separate set-based layer on
top. If a set-bonus feature gets built for real in the future, it belongs
back here.)*
### Swimming
Swimming in open water equilibrates your body temperature toward the water temperature, partially bypassing insulation. Cold-zone water (below 15C) is especially dangerous (2.5x drag rate). Thick armor provides some resistance but far less than on land.
### Environmental Temperature Mechanics
– **Water ingredient loot** Looting an alchemy water solvent cools you by 5C (only if you are already above `COMFORTABLE_HI`).
– **Crafting station interaction** Opening a provisioning or smithing station warms you by 5C (only if below `COMFORTABLE_LO`). Rate-limited to once per minute.
### Temperature Thresholds (all in C)
| Threshold | C | F | Meaning |
|———–|—-|—-|———|
| FREEZE_DANGER | −10 | 14 | Hypothermia danger |
| VERY_COLD | 0 | 32 | Very cold shiver emote |
| COLD | 10 | 50 | Cold shiver emote |
| COMFORTABLE_LO | 20 | 68 | Lower edge of comfort zone |
| COMFORTABLE_HI | 24 | 75 | Upper edge of comfort zone |
| WARM | 26 | 79 | Warm (no effect) |
| HOT | 35 | 95 | Hot wipe-brow emote, heat overlay begins |
| HEAT_DANGER | 41 | 105 | Scorching breathless emote, full heat overlay |
### HUD Display
– Compact thermometer widget (draggable)
– Color-coded temperature bar and value
– Status label (COMFORTABLE, COLD, OVERHEATING, etc.)
– Insulation value and source displayed (e.g. `80 (armor)`) *(corrected:
previously also claimed an “active set bonus” was shown here; no such
feature exists see the note on the removed “Set Insulation Bonuses”
section above)*
### Configuration Menu
Accessible via `/ff config` or the ESO addon settings panel (LibAddonMenu-2.0):
– Enable/disable the system entirely
– Toggle HUD, overlay, emotes, and sounds
– Scale and opacity controls for the HUD
– Emote dropdowns for each temperature band, populated live from your installed emotes
—
## Installation
1. Download and extract the `Frostfall` folder
2. Place it in: `DocumentsElder Scrolls OnlineliveAddOnsFrostfall`
3. Install all required dependencies (see below) Minion handles this automatically
4. Launch ESO, enable the addon in the AddOns menu
—
## Slash Commands
| Command | Description |
|———|————-|
| `/ff` or `/frostfall` | Show help |
| `/ff status` | Print current temperature state to chat |
| `/ff config` | Open configuration menu |
| `/ff debug` | Toggle debug logging |
| `/ff toggle` | Enable/disable Frostfall |
| `/ff findEmote ` | Search for an emote by name and print its stable emoteId |
—
## Zone Temperature Reference (Selected)
*(Corrected every value in this table was previously wrong, by a wide
margin in most cases (e.g. Coldharbour listed as a mild 2C when it’s
actually -8C; The Deadlands listed as 85C when it’s actually 54C). The
table below is pulled directly from `LibZoneTemp.lua`’s current
`ZONE_BASE_TEMPS_BY_NAME` table.)*
| Zone | Temperature | Climate |
|——|————|———|
| Western Skyrim | -10C | Very cold, snowy Nordic holds |
| Bleakrock Isle | -8C | Icy island cliffs, sparse forests |
| Coldharbour | -8C | Bleak grey sky, cold and lifeless |
| Wrothgar | -8C | Orsinium highlands, bitterly cold winters |
| Eastmarch | -2C | Frozen wastes, volcanic tundra |
| Rivenspire | 4C | Bleak, windswept moors |
| The Rift | 4C | Relatively temperate, rich autumnal forests |
| Cyrodiil | 17C | Temperate central forests and plains |
| Summerset | 18C | Mild, pleasant Mediterranean climate |
| Auridon | 20C | Temperate Mediterranean gardens and architecture |
| Gold Coast | 22C | Pleasant climate, warmed by the Abecean Sea |
| Murkmire | 34C | Deep tropical marshland jungle |
| Hew’s Bane | 36C | Barren, scorching desert peninsula |
| Vvardenfell | 38C | Volcanic island, arid ash wastes |
| Northern Elsweyr | 40C | Hot Anequine savanna and Scar desert |
| Alik’r Desert | 46C | Arid Hammerfell wasteland, scorching sandstorms |
| The Deadlands | 54C | Mehrunes Dagon’s hellfire Oblivion realm |
—
## Armor Insulation Reference (Selected)
*(Corrected this table previously listed 18 entries with pre-tier-system
raw scores from before the v2.6.0 staggered-tier rewrite, four of which
Voidsteel, Nightmare, Soul Shriven, and Bear Raiment Costume don’t exist
anywhere in the current style/costume data at all. Several “flavor-adjusted”
notes also had the thermal direction backwards: Daedric, Dremora, Waking
Flame, and Ancient Daedric are all written in the code as **cold**-radiating
(negative `flavorBonus`), not heat-generating. The table below is rebuilt
from `LibArmorInsulation_StyleData.lua`’s actual current entries, with tiers
computed through the real formula and `Calc.SnapToTier()`.)*
| Style | Insulation | Notes |
|——-|———–|——-|
| Flame Atronach (costume) | 90 ★ | Body of living fire extreme warmth |
| Nord | 80 | Fur construction, capped at the mundane ceiling (raw score ~107) |
| Werewolf (polymorph) | 80 | Dense fur pelt and elevated body temperature |
| Pyre Watch | 70 | Fire-tempered treatment provides insulating char layer |
| Silver Dawn | 70 | Heavy-leather motif, no flavor bonus |
| Waking Flame | 50 | Deadlands-tinged construction carries a **mild chill** (not heat, despite the fire theming) |
| Mercenary | 50 | Practical layered construction for road travel |
| Wood Elf | 30 | Light cloth racial armor, no flavor bonus |
| Khajiit | 30 | Light hide racial armor, no flavor bonus |
| Barbaric | 20 | Thin hide motif, low coverage |
| Fang Lair | 20 | Dragon bones carry the cold of death |
| Dremora | 10 | Emanates the consuming cold of Coldharbour |
| Storm Atronach (costume) | 10 | Elemental form provides no thermal protection |
| Daedric | 0 | Radiates unnatural cold into the wearer’s bones |
| Stalhrim Frostcaster | 0 | Stalhrim plates actively radiate cold |
| Frost Atronach (costume) | -10 ★ | Body of living frost actively leeches warmth |
| Ice Wraith (polymorph) | -10 ★ | Body of living ice aggressively cold |
★ = `magical = true` clamped to the full -10..90 tier range instead of the
mundane 0..80 range reserved for ordinary materials.
—
## Dependencies
All are **required**. Minion (the standard ESO addon manager) will install them automatically.
| Library | Source | Purpose |
|———|——–|———|
| LibAddonMenu-2.0 | (https://www.esoui.com/downloads/info7-LibAddonMenu.html) | Settings panel UI |
| LibZoneTemp | ESOUI | Zone ambient temperature data |
| LibArmorInsulation | ESOUI | Armor insulation breakdown |
—
## Compatibility
– ESO API Version: 101049+
– Works with all ESO chapters and DLC
– Compatible with outfit system, costume system, and Crown Store collectibles
—
## Notes on Temperature Calculations
All zone temperatures and armor insulation values are **estimates** based on lore descriptions, visual design, cultural origin, and material analysis. Insulation is calculated from the **visual style** of the armor, not the set name. Unique pieces with flavor text describing thermal properties have been individually adjusted. Use the override system to tune anything that doesn’t feel right for your playstyle.
The temperature system is **purely cosmetic** it does not affect actual gameplay stats, damage, or character mechanics. It is an immersion and roleplay tool.

