"Wie funktioniert das Room-Temperatur-Equalization-System intern?"
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.
TempDiffAdjusted logarithmisch gedämpft bei extremen Differenzen.
Bei Room-Rebuild werden equalizeCells neu gesammelt und Shuffle() aufgerufen:
equalizeCells.Shuffle() verbraucht Rand-Calls.
Wenn Rooms auf verschiedenen Clients zu unterschiedlichen Zeitpunkten rebuilt werden
→ unterschiedliche Rand-Sequenz → Desync.
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-252Langsamer Ausgleich mit Außentemperatur durch dünnes Dach.
Rate: Sehr langsam — deutlich weniger als NoRoof
Offene Zellen ohne Dach. Fast sofortiger Ausgleich mit Außentemperatur.
Rate: 14× Tür-Rate
Mountain-Roof zieht Temperatur zu 15°C. Wirkt nur als Kühlung.
Zieltemperatur: 15°C
UsesOutdoorTemperature wenn:TouchesMapEdge| Konstante | Wert | Bedeutung |
|---|---|---|
MinTemperature | -273.15°C | Absoluter Nullpunkt |
MaxTemperature | 1000°C | Temperatur-Cap |
Vent_TempEqualizeRate | 14× | Vent-Gebäude vs. Tür |
DeepUndergroundTemperature | 15°C | Mountain-Zieltemperatur |
RoomEqualizeInterval | 120 Ticks | ~2 Sekunden |
WallEqualizeFactor | 0.00017f | Pro Wand-Zelle, alle Materialien gleich |
DoorOpenTicks | 34 | Tür bleibt offen nach Durchgang |
Verse/TemperatureTuning.cs
Gebäude (Heater, Cooler, Feuer) beeinflussen Temperatur über zwei APIs:
| Methode | Zweck |
|---|---|
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
ComfortableTemperatureRange = Pawn-Stat ± 10°C Puffer.
Außerhalb davon → Hypothermia/Heatstroke Hediffs via SafeTemperatureRange.
Wenn du das Temperatur-System änderst, haben diese Systeme direkte Auswirkungen:
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.).
| Namespace | Dateien | Analysiert | Status |
|---|---|---|---|
| Verse | 1.747 | 85 | 🔄 Kern-Systeme erfasst |
| Verse.AI | ~278 | 30 | 🔄 Job/ThinkTree/Combat |
| RimWorld | 5.913 | 25 | 🔄 Needs/Apparel/Recipes |
| Rest (8 Namespaces) | ~1.260 | 0 | ⬜ Noch nicht begonnen |
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.
WallEqualizationTempChangePerInterval — die exakte Formel für Wärmefluss durch WändeTempDiffAdjusted — die Dämpfungskurve bei extremen Temperatur-DifferenzenRegenerateEqualizationData — wie die equalizeCells-Liste aufgebaut wirdBuilding_Vent.cs — wie Vents intern funktionierenBuilding_Cooler.cs — wie Cooler intern funktionieren