Temperatur Anfrage #001 2026-03-19 Namespace: Verse

Room-Temperatur-Equalization-System

"Wie funktioniert das Room-Temperatur-Equalization-System intern?"

Antwort-Konfidenz:
75% — Architektur komplett, Formeln teilweise

Überblick

Alle 120 Ticks (~2 Sekunden Spielzeit) berechnet Verse/MapTemperature.cs die Temperatur für jeden Room auf der Map. Die eigentliche Berechnung delegiert an Verse/RoomTempTracker.cs, der pro Room 4 Equalization-Quellen addiert.

Kern-Prinzip
Temperatur fließt immer von warm nach kalt. Die Rate hängt von der Quelle ab (Wand, Dach, offen) und wird durch TempDiffAdjusted logarithmisch gedämpft bei extremen Differenzen.

Ablauf pro Tick

MapTemperatureTick() foreach Room RoomTempTracker.EqualizeTemperature() 4 Quellen addieren Room.Temperature +=

Bei Room-Rebuild werden equalizeCells neu gesammelt und Shuffle() aufgerufen:

MP-Kritisch
equalizeCells.Shuffle() verbraucht Rand-Calls. Wenn Rooms auf verschiedenen Clients zu unterschiedlichen Zeitpunkten rebuilt werden → unterschiedliche Rand-Sequenz → Desync.

Verse/RoomTempTracker.cs:174

Die 4 Equalization-Quellen

1. Wall Equalization Konstante

Wärme fließt durch Wände zu Nachbar-Rooms. Pro Wand-Zelle mit Nachbar-Room.

Rate: 0.00017f pro Wand-Zelle pro Intervall

Achtung: Für ALLE Wand-Materialien identisch — Holz isoliert wie Granit!

Verse/RoomTempTracker.cs:215-252

2. Thin Roof Equalization

Langsamer Ausgleich mit Außentemperatur durch dünnes Dach.

Rate: Sehr langsam — deutlich weniger als NoRoof

3. No Roof / Open 14× Tür

Offene Zellen ohne Dach. Fast sofortiger Ausgleich mit Außentemperatur.

Rate: 14× Tür-Rate

4. Deep Underground

Mountain-Roof zieht Temperatur zu 15°C. Wirkt nur als Kühlung.

Zieltemperatur: 15°C

Outdoor-Schwelle

Binäre Schwelle
Ein Room gilt als UsesOutdoorTemperature wenn:
≥25% der Zellen kein Dach haben, ODER
• Room TouchesMapEdge

24% offen = Indoor mit Equalization. 25% = komplett Outdoor-Temperatur. Kein Übergang.

Wichtige Konstanten

KonstanteWertBedeutung
MinTemperature-273.15°CAbsoluter Nullpunkt
MaxTemperature1000°CTemperatur-Cap
Vent_TempEqualizeRate14×Vent-Gebäude vs. Tür
DeepUndergroundTemperature15°CMountain-Zieltemperatur
RoomEqualizeInterval120 Ticks~2 Sekunden
WallEqualizeFactor0.00017fPro Wand-Zelle, alle Materialien gleich
DoorOpenTicks34Tür bleibt offen nach Durchgang

Verse/TemperatureTuning.cs

PushHeat & ControlTemp

Gebäude (Heater, Cooler, Feuer) beeinflussen Temperatur über zwei APIs:

MethodeZweck
GenTemperature.PushHeat(cell, map, energy) Fügt Wärmeenergie zu einem Room hinzu (Feuer, Explosionen)
GenTemperature.ControlTemperatureInRoom(cell, targetTemp, energyLimit) Heater/Cooler steuern auf Zieltemperatur

Verse/GenTemperature.cs

Modding-Hinweis
ComfortableTemperatureRange = Pawn-Stat ± 10°C Puffer. Außerhalb davon → Hypothermia/Heatstroke Hediffs via SafeTemperatureRange.

Beeinflusst auch

Wenn du das Temperatur-System änderst, haben diese Systeme direkte Auswirkungen:

Health & Damage — Hediffs durch Temperatur Temperatur außerhalb SafeRange → Hypothermia / Heatstroke Hediffs automatisch
→ Mehr dazu
Region-System — Gefahren-Erkennung Region.DangerFor(Pawn) prüft Raumtemperatur — Pawns meiden gefährliche Räume
→ Mehr dazu
Pawn — Komfort-Temperatur ComfortableTemperatureRange (Stat + Apparel ± 10°C) bestimmt ob der Pawn leidet
→ Mehr dazu
Game-Loop — Tick-Reihenfolge MapTemperatureTick läuft im DoSingleTick-Pfad alle 120 Ticks — Position in der Loop ist fest
→ Mehr dazu
Thing-Spawning — Room-Rebuild Wenn ein Gebäude gespawnt/despawnt wird, triggert das einen Room-Rebuild → neue equalizeCells
→ Mehr dazu
RNG / Rand — MP-Kritisch equalizeCells.Shuffle() verbraucht Rand bei jedem Room-Rebuild — Desync-Risiko
→ Mehr dazu

Wissensstand dieser Antwort

1.54%
142 von ~9.200 Dateien analysiert
Wächst mit jeder Analyse-Session

RimWorld hat ~9.200 C#-Dateien. Dieses Wissenssystem analysiert sie Stück für Stück durch Lesen des decompilierten Quellcodes. Bisher wurden die Kern-Architekturen erfasst — die Systeme die alles zusammenhalten (Tick-Loop, Thing-Hierarchie, Job-System, Pathfinding, Health, etc.).

NamespaceDateienAnalysiertStatus
Verse1.74785🔄 Kern-Systeme erfasst
Verse.AI~27830🔄 Job/ThinkTree/Combat
RimWorld5.91325🔄 Needs/Apparel/Recipes
Rest (8 Namespaces)~1.2600⬜ Noch nicht begonnen

Was in dieser Antwort noch fehlt

Diese Dateien wurden noch nicht gelesen

Die folgenden Code-Stellen gehören zum Temperatur-System, sind aber noch nicht im Wissenssystem erfasst. Die Antwort oben basiert auf dem was bereits analysiert wurde — sie ist korrekt aber nicht vollständig.