Companions

Überblick
Was das Spiel ist und wie ein Durchgang verläuft.
Du steuerst eine Gruppe von drei Gefährten (weitere anwerben, bis zu zehn, ist möglich) aus einer RTS-artigen Draufsicht: Kastenauswahl, Rechtsklick als Befehl. Es gibt keine Spielfigur — die drei sind gleichrangig. Jeder hat den vollen Satz Überlebenswerte und kann einzeln sterben; einen zu verlieren soll tragisch wirken. Der höchste Schwierigkeitsgrad ist Permadeath. Die einzigen Bedrohungen sind Natur — Nahrung, Wasser, Temperatur, Wetter, Jahreszeiten und Entfernung — dazu wehrhaftes Wild, das sich verteidigen darf. Nichts greift jemals deine Basis an.
Ein Durchgang ist ein Kreislauf aus drei Phasen
- Der manuelle Anfang — alles von Hand, keine Automatik. Einen tragfähigen Siedlungsplatz erkunden und von der Hand in den Mund leben.
- Die automatisierte Basis — Gebäude schalten Berufe frei, das Regelprogramm jedes Gefährten bestreitet den Tag, die Siedlung läuft.
- Erschöpfung → Aufbruch — das Land ist ausgezehrt, die Gruppe packt, was sie tragen kann, wandert und fängt stärker von vorn an: Fertigkeiten, Ausrüstung und Gefährten bleiben, der Ort nicht. Jedes Jahr beißt der Winter härter.
Die Karte mit 512×512 Feldern ist auf etwa 3–5 Siedlungszyklen ausgelegt — das ist die geplante Länge eines Durchgangs. Phase 1 und 2 gibt es heute; Phase 3 (ein erzwungener Aufbruch und ein Werkzeug-/Ausrüstungssystem) ist der große offene Meilenstein.
Bewegen & umsehen WASD · F · Tab
- WASD schwenkt die Kamera (freier Blick). Die Ansicht bleibt, wo du sie hinstellst — Auswählen oder Befehlen reißt die Kamera nie mit.
- F zentriert die Kamera auf die gewählte Figur und folgt ihr (eine Gruppe wird auf ihren Mittelpunkt gerahmt). Tab tut dasselbe und wechselt dabei den Gefährten.
- Rechtsklick befiehlt allen ausgewählten Figuren (siehe Befehlen); ein grüner Punkt markiert den Zielort. Rechtsklick halten steuert fortlaufend — die Auswahl folgt dem Mauszeiger, bis du loslässt.
- Dichter Wald und loser Sand bremsen das Gehen auf 80 %.
- Mausrad oder +/- zoomen; M springt auf die weiteste Stufe. Die Maus am Fensterrand scrollt die Ansicht (Geschwindigkeit/Randbreite unter Esc → Settings → Gameplay).
- Es gibt keine Minikarte und keine Übersichtskarte — du siehst die Insel nie als Ganzes. Das Land zu lesen und zu behalten gehört zum Spiel.
- Die Zeitraffer-Leiste sitzt oben rechts (Pause, 1–10×). Schalte Esc → Settings → Graphics → Show FPS ein, und die Bildrate erscheint direkt darunter — grün über 50, bernstein über 30, rot darunter. Sie aktualisiert sich viermal pro Sekunde in Echtzeit, Zeitraffer und Pause verfälschen sie also nicht.
Deine Gruppe 3 → 10 Gefährten
- Linksklick auf eine Figur wählt sie aus (grün / blau / orange; ein weißer Ring markiert sie). Genau eine ausgewählt heißt „sie ist deine“: E-Sammeln und Bauen benutzen sie, und sie läuft deine Rechtsklicks mit voller Geschwindigkeit.
- Ein Auswahlkasten greift mehrere und befiehlt ihnen gemeinsam.
- Linksklick auf leeren Boden hebt die Auswahl auf — Beobachtermodus; jeder erledigt einfach seine Arbeit.
- Das Infofeld unten links folgt der Maus: Zeige auf ein Feld für Gelände und das, was darauf steht (Baumart & Restholz, Salzgehalt des Wassers, Gebäude, Lagerbelegung, Pflanzenbestand); zeige auf eine Figur für ihre aktuelle Tätigkeit. Der Nebel gilt auch hier.
- Tab übergibt die Kontrolle an den nächsten Gefährten; 1–9, 0 wählen direkt (zweimal tippen zentriert zusätzlich die Kamera). Die Tastenplätze stehen für den ganzen Durchgang fest — die Nummer eines Toten bleibt leer.
- Gefährten lernen durch Tun. Gehen trainiert Running (Tempo), jedes Handwerk seine eigene Fertigkeit, schwere Arbeit und Bauen trainieren Strength (Tragkraft + Bautempo), und durchgestandene Kälte, Nässe und Erschöpfung härten Resilience (wird später krank). Die Veteranen eines Durchgangs sind gemacht, und sie sind das, was du in die nächste Siedlung mitnimmst.
- Fremde klopfen an. Ab und zu kommt ein Wanderer aus der Wildnis und wartet ein paar Tage an der Siedlung. Linksklick auf ihn öffnet sein Panel: Name, Körper, Grundattribute — und sonst nichts, denn ein Neuling kommt ohne Fertigkeiten an. Nimm ihn auf oder schick ihn weiter; wartest du zu lange, zieht er selbst weiter. Die Gruppe ist hart auf zehn begrenzt, und ein zusätzliches Paar Hände isst, bevor es verdient.
- Nicht jeder meint es ernst. Manche Wanderer sind falsche Gefährten: Sie arbeiten langsam, bedienen sich am Lager, und eines Nachts sind sie fort — mit allem, was sie tragen konnten. Das Panel verrät nichts davon — das Ereignisprotokoll schon, über Tage hinweg (jemand nach Einbruch der Dunkelheit am Lager; ein Arbeitstag, der zu wenig einbrachte). Aufmerksame Gefährten (Perception) nennen Namen. Verstoßen kannst du jeden, der beigetreten ist, über sein Charakterblatt (C) — und ein Irrtum kostet dich ein Paar Hände.
Befehlen — Rechtsklick RMT
Der Rechtsklick schickt jede ausgewählte Figur; was passiert, hängt davon ab, worauf du klickst. Dein Wort ist absolut — eine Figur bricht einen Befehl nie ab, nicht einmal, um sich zu retten. Sie setzt bei kritischem Zustand eine rote Warnung ab und macht weiter; brich den Befehl selbst ab, wenn sie überleben soll.
| Du klickst auf… | Sie… |
|---|---|
| Freien Boden | gehen dorthin (um tiefes Wasser, Berge und Hauswände herum) |
| Süßwasser / einen Brunnen | Ein Auswahlring: Drink (trinken, bis der Durst voll ist, dann den Wasserschlauch füllen) oder Scoop water (Schlauch füllen, dann Einheiten in die Traglast schöpfen) |
| Baum / Fels / Pflanze | ernten in die Traglast (Bäume, bis sie fallen) |
| Ein Bett (genau sein Feld) | schlafen, bis sie ausgeruht sind |
| Ein Lagerfeuer | Ein Auswahlring: Tend fire (nachlegen aus der Traglast oder dem nahen Lager — Holz oder Zweige) oder Boil water (abkochen) |
| Einen liegenden Stapel | heben ihn in die Traglast |
| Ein Lager 1 ausgewählt | gehen hin und öffnen das Transferfenster |
| Ein Lager Gruppe | schaffen ihre Traglast hin und laden sie auf die Felder ab |
| Einen anderen Gefährten 1 ausgewählt | gehen hin und öffnen den Tausch Traglast zu Traglast |
| Eine blaue Baustelle | helfen beim Bau: holen, liefern, errichten |
Umschalt+Rechtsklick reiht den Befehl als Wegpunkt an. Ein einfacher Rechtsklick ersetzt die ganze Warteschlange. Niemand kümmert sich von selbst um sich — Trinken, Essen, Wärmen und Schlafen geschehen nur auf deinen Befehl oder durch das Regelprogramm (T).
Sammeln — E halten E
Halte E neben einem Ziel; ein Ring füllt sich über die Erntezeit. Gesammeltes wandert in die Traglast dieser Figur, begrenzt durch das Gewicht (~40 kg, durch Strength mehr).
- Bäume → Holz: Jedes Waldfeld ist ein Baum; der gesamte Holzvorrat fällt an, wenn er stürzt (das Feld wird zu Gras). Schläge werden angerechnet — aufhören und später fertig machen ist erlaubt. Vier Arten, an der Färbung erkennbar: Birke (10 Holz), Kiefer (20), Fichte (25), Eiche (35).
- Fels → Stein und Fischen kosten das ~10×fache gewöhnlicher Arbeit — plane ganze Tage ein; Steinmetzhof und Fischerhütte setzen Arbeiter rund um die Uhr daran.
- Kräuter, Beeren, Wurzeln wachsen an Ort und Stelle nach (nicht im Winter). Vogelnester (nur im Frühling, nach dem Ausnehmen endgültig weg), Pilze (Sommer+Herbst, am Waldrand), Haselnüsse (ganzjährig, verderben nie, aber ein abgeernteter Strauch ist erledigt und der nächste wächst außer Sicht), Muschelbänke (Salzküste, ganzjährig, verderben schnell).
- Kostenlose Fundstücke (ein halbsekündiges Bücken, danach weg): Zweige und Laubhaufen am Waldrand, lose Steine in der Ebene.
- Wildhanf → Pflanzenfaser — wächst nur auf feuchtem Boden neben Süßwasser (Flussufer und Seeufer; nie an der Salzküste, nie im Landesinneren). Hohe, gefächerte Halme, wächst außerhalb des Winters in ~5 Tagen nach. Faser ist noch keine Schnur: Spinne sie im Crafting-Reiter zu Cordage, und aus Cordage bestehen Bogensehne und Angelschnur. Kein Hanf in Reichweite → kein Bogen und keine Angel — noch ein Grund, warum ein Siedlungsplatz gut oder schlecht ist.
- Jagen braucht einen Bogen (herstellbar, sobald eine Hunting lodge steht). Rehe und Schweine fliehen schneller, als du gehst — du schießt sie: Übernimm einen Jäger, halte H, ein schwankendes Fadenkreuz steigt auf, halte auf das laufende Tier vor und lass zum Schuss los. Ein Treffer ist Zielen, nicht Glück. Ein Schuss schreckt die Beute auf — ein sauberer erster Schuss, dann flieht sie. Die Hunter-Regel schießt genauso von allein, und ohne Wild in Sicht stellt sie sich auf den Ansitz, statt zur nächsten Regel durchzufallen: Sie geht zum nächsten bekannten Waldfeld (ersatzweise irgendwohin ins Freie — nie unter ein Dach) und wartet dort, mit der Meldung „No huntable animals in sight - waiting“. Jagen ist überwiegend Warten.
- Fischen braucht eine Angel (eine Rute plus eine Schnur aus Cordage; herstellbar, sobald eine Fisher's hut steht). Die Hütte verleiht das Fischrecht an ihrem Gewässer, die Angel ist das Gerät: keine Angel im Gepäck → der Gefährte fischt nicht, die Fisher-Regel bleibt blockiert, und die Aufgaben der Hütte bleiben für die liegen, die ausgerüstet sind. Angeln gelten pro Gefährte — drei Fischer brauchen drei Angeln.
Acht Tierarten streifen umher: Rehe und Schweine sind die Herden, von denen du lebst; Tauben und Krähen fliegen dorthin, wo du nicht folgen kannst; Biber bleiben am Süßwasser; Dachse sind langsam genug, um sie zu stellen; Wölfe und Bären weichen nicht (ein Bär ist das meiste Fleisch auf der Karte). Nichts da draußen jagt dich — noch nicht.
Am Leben bleiben
Health, Thirst, Hunger, Tiredness und Temperature (Gesundheit, Durst, Hunger, Müdigkeit, Temperatur) sinken mit der Zeit; Mood (Stimmung) ist ein zweitrangiger, nie tödlicher Wert. Jeder Gefährte ist oben links eine kompakte Zeile; die gesteuerte Figur klappt zu vollen Balken auf. Buff-/Debuff-Abzeichen neben der Karte zeigen, was auf einem Gefährten liegt — grün = Segen, rot/magenta/violett = Übel. Fällt irgendeine Gesundheit in den roten Bereich, schlägt der ganze Bildschirm Alarm (roter Rand, Herzschlag), damit kein Tod außerhalb des Bildes übersehen wird.
| Gefahr | Was sie anrichtet | Das Gegenmittel |
|---|---|---|
| Durst leer | Tötet in ~einem halben Tag (am schnellsten) | An Süßwasser/Brunnen trinken; den Wasserschlauch voll halten |
| Hunger leer | Verhungern über mehrere Tage | Aus der Traglast essen (Eat-Regel / Doppelklick im Blatt); Überschuss kochen & räuchern |
| Müdigkeit niedrig | Gehen −25 %, Arbeit −40 %; Schlafschuld zehrt bis zu 60 % schneller | Im Bett schlafen (heilt auch Gesundheit); Schlafrolle auf Wanderung |
| Temperatur | Unter 4 °C oder über 35 °C zehrt an der Gesundheit | Am Feuer/drinnen wärmen; am Wasser/Brunnen abkühlen |
| Nass (Regen/Sumpf) | Fühlt sich bis zu 30 % kälter an, −5 % Tempo, drückt die Stimmung | Trocknet am brennenden Feuer oder unter Dach am schnellsten (~4 h) |
| Fever (Fieber) | Aus Kälte, Nässe und Erschöpfung. −25 % Arbeit, zehrt unbehandelt an der Gesundheit; kann töten | Bettruhe + Kräuter aus der Traglast |
| Dysentery (Ruhr) | Aus unbehandeltem Wasser. −20 % Arbeit — und macht durstiger, die Falle, die sich selbst nährt | Bettruhe + Kräuter; danach nur noch sauberes Wasser |
| Food poisoning (Lebensmittelvergiftung) | Aus rohem oder verdorbenem Essen. −30 % Arbeit, der härteste Schlag der drei, aber schnell vorbei | Bettruhe + Kräuter; Fleisch vorher garen oder räuchern |
| Stehendes Wasser (See/Tümpel) | Jeder unbehandelte Schluck baut die Ruhr-Last auf (~12 je voller Durstleiste) | An fließendem Wasser oder am Brunnen trinken; oder es schöpfen und im Pfannenslot eines Feuers abkochen |
| Niedergeschlagen (Stimmungstief) | Verweigert das Regelprogramm UND versorgt sich nicht mehr selbst | Nur noch direkte Befehle — trocken, warm, satt und gesund pflegen |
Was dir schadet, lässt dich nicht heilen: Eine leere Durst-/Hungerleiste oder ein frierender bzw. überhitzter Körper setzt die Regeneration im Schlaf vollständig aus — der Schläfer baut Müdigkeit ab, wacht aber nicht gesünder auf. Der Winter ist die Prüfung: Höfe ruhen, Pflanzen wachsen nicht nach, keine Tiere werden geboren. Lege im Herbst Vorräte an; Nüsse, Fischerei und Muschelbänke tragen das ganze Jahr.
Bauen — Leertaste drücken Leertaste
Du beginnst mit nichts. Leertaste öffnet den Bauring (Radialmenü, 2026-07-20): ein innerer Ring aus Kategorien — Workshops, Structure, Supply, Demolish —, wobei ein Linksklick auf eine Kategorie sie im zweiten, äußeren Ring öffnet. Beim Überfahren erklärt das Infofeld unter dem Kreis den Eintrag samt Kosten je Material (grün = jetzt bezahlbar, rot = nicht). Platziere ihn, und jede ausgewählte Figur geht ihn bauen (die nächstgelegene, wenn keine ausgewählt ist). R dreht den Geisterbau vor dem Setzen.
Die Mitte geht immer einen Ring zurück und schließt das Menü auf der obersten Ebene — dasselbe, was Rechtsklick und Esc tun, damit es eine einzige Regel für den Ausgang gibt. Leertaste schließt aus jeder Tiefe. Es werden immer nur zwei Ringe gezeichnet: Eine geöffnete Kategorie ersetzt den äußeren Ring, statt einen dritten hinzuzufügen, deshalb ist Verschachtelung gratis und der Kreis wächst nie. Ausgegraute Einträge gibt es in zwei Sorten, die man nicht verwechseln darf — ein Schloss ist ein Spielerziel (die Werkstatt, die es freischaltet, steht noch nicht), eine gestrichelte Umrandung ist ein geplanter Platzhalter, den es im Spiel noch nicht gibt.
Es gibt kein fertiges Haus. Das ziehbare Fertighaus wurde dem Spieler aus der Hand genommen (2026-07-20): Jedes Haus wird jetzt aus Wänden, Türen und Böden entworfen und hat genau die Form, die du umschließt. Berufsgebäude werden weiterhin einfach gesetzt und der Hof bleibt ziehbar — eine Werkstatt ist Ausrüstung, keine Architektur; nur das Zuhause ist der Entwurf des Spielers.
| Gebäude | Was es tut | Anmerkung |
|---|---|---|
| Campfire (Lagerfeuer) | Wärme + Feuerstelle (Brennstoff / Kochen) | 9 Zweige oder 3 Holz (siehe unten); Wirkbereich 20; körperlicher Wärmeradius 3,5 |
| Well (Brunnen) | Trinken, Schläuche füllen, abkühlen | Die einzige Trinkquelle, die Arbeiter von selbst nutzen — sprudelt weiter, wenn das Wasser gefriert |
| Bed / Stone hearth (Bett / Steinherd) | Möbel | Gar nicht im Bauring — wird über das Raum-Panel gesetzt |
| Straw bed (Strohbett) | Möbel, das auch als Lager taugt | Das eine Stück in beiden Listen: im Raum-Panel und im Supply-Ring, damit es schon vor jedem Raum neben dem Lagerfeuer hingeworfen werden kann (secondary_category) |
| Wall / Door (Wand / Tür) | Umschließen einen warmen, überdachten Raum | Wände werden als gerade, verkettete Züge gezogen; die Tür ist begehbar |
| Bridge (Brücke) | Der einzige Weg über einen Fluss | Ein Deck von Ufer zu Ufer ziehen; macht Wasser begehbar |
| Wooden Floor (Holzboden) | Hebt die Stimmung im Raum | Boden, kein Möbel — Betten/Feuer stehen darauf |
| Road (Straße) | Darauf läuft man ~35 % schneller | Boden wie ein Fußboden; Stein pro Feld — der Preis, nicht das Tempo, hält die Platzwahl ehrlich |
| Stockpile zone / Storage box (Lagerzone / Kiste) | Siedlungslager (1 Sorte je Feld, 20 Einheiten) | Die Zone ist kostenlos; auf freiem Boden aufziehen |
| Water barrel (Wasserfass) | Lagert Wasser (20 Einheiten, sauber oder abgestanden) | Reserve für Winter/Dürre; DRAW + HAUL füllen es; es reicht zuerst das saubere Wasser aus |
| Smokehouse (Räucherhaus) | Macht frische Nahrung haltbar | Dient zugleich als Lager |
| Lumber camp / Fisher's hut / Mason's yard / Hunting lodge | Werkstätten | Jede schaltet ihr Handwerk für die Regeln frei (Fischen und Jagen brauchen zusätzlich Angel bzw. Bogen im Gepäck) |
| Farm (Hof) | Gemüse (der Farmer bestellt ihn) | Ruht im Winter |
| Planning table (Planungstisch) | +6 Regelblöcke; Programme kopieren; öffnet das Aufgabenbrett | — |
Zwei Preise für ein Gebäude. Ein Bauwerk darf alternative Kosten führen — beim Lagerfeuer 9 Zweige oder 3 Holz (2026-07-21). Zweige liegen überall herum, deshalb muss das erste Feuer eines Durchgangs nie auf einen gefällten Baum warten. Der Bauring zeigt beide an, jedes Material nach dem Besitz der Siedlung eingefärbt, mit einem or dazwischen; ein Grundriss legt sich auf eine Variante fest (die, die er decken kann, primär zuerst) und zeigt nur diese an. Solange noch nichts geliefert wurde, entscheidet er sich selbst neu, sodass ein Grundriss, der Holz wollte, nach Zweigen fragt, sobald Zweige in Reichweite sind; sobald das erste Material eintrifft, ist die Rechnung darin festgeschrieben. Abriss erstattet die Hälfte dessen, was wirklich bezahlt wurde — ein aus Reisig errichtetes Feuer gibt Reisig zurück.
Und zwei Brennstoffe für ein Feuer. Dieselbe Überlegung trägt über den Bau hinaus: Ein Feuer, das man aus Zweigen errichten kann, kann man auch mit ihnen füttern (2026-07-21). Ein Lagerfeuer brennt Holz oder Zweige, 3 Zweige je Scheit, der Stone hearth (Steinherd) genauso. Scheite werden immer bevorzugt, solange es welche gibt — jeder Brennstoff-Gang arbeitet die Liste der Reihe nach ab, die Gruppe greift also erst zum Reisig, wenn der Holzstapel leer ist. Alles, was ein Feuer versorgt, geht durch diese eine Liste: der Rechtsklick-Befehl, die REFUEL-Regel, eine übernommene Aufgabe, gehaltenes E am Feuer, die Welt-Hand und der FUEL-Slot des Panels (der in Scheiten zählt, aber beides annimmt).
Einen Raum möblieren — Linksklick hinein
Ein selbst entworfenes Haus ist kein Objekt, das man anklicken kann, deshalb hängt das Möbel-Panel am Raum: Linksklick auf ein beliebiges Feld eines umschlossenen Raums öffnet es, liest den Raum aus (Felder, Schutzwärme, Wohnlichkeit) und listet die Möbel auf, die hineindürfen. Wählst du ein Stück, nimmt der Geisterbau nur Felder innerhalb dieser Wände an — ansonsten ist es eine ganz gewöhnliche Baustelle: Bauleute holen das Material und errichten es. Ein weiterer Klick in denselben Raum oder Esc schließt es. Es wird zuletzt von allen Kartenklicks aufgelöst, alles mit einem eigenen Panel (ein Lager, ein Feuer, eine Baustelle) behält den Klick also.
| Stück | Kosten | Arbeit | Was es ist |
|---|---|---|---|
| Straw bed (Strohbett) | 6 Laub | keine (sofort) | Eine schlechte Nacht — und das einzige Stück, das keinen Raum braucht: Es steht auch im Supply-Ring und kann so schon am ersten Abend neben dem Lagerfeuer entstehen |
| Bed (Bett) | 6 Laub + 1 Holz | 14,4 s/Feld = 28,8 s | Das richtige: erholt schneller und heilt im Schlaf. Es liegt 1×2 — R vor dem Setzen dreht es quer |
| Stone hearth (Steinherd) | Stein + Holz, braucht einen Mason's yard | 10,8 s/Feld | Das Feuer für drinnen: Wärme wie ein Lagerfeuer, ~3× so lange Brenndauer je Scheit und größere Reichweite. Ein Herd trägt ein Haus durch eine Winternacht, und er kocht wie jedes Feuer |
Die beiden Betten unterscheidet ihre ARBEIT, nicht ihr Preis (2026-07-21): Ihr
Material ist fast identisch, also trennt sie die Arbeit. Ein Strohbett setzt
build_seconds_per_cell = 0 — sofort: total_build_seconds()
hat 0,001 als Untergrenze, deshalb vollendet es der erste Arbeitsframe eines Bauenden. Das Material
muss trotzdem zur Baustelle getragen werden; nur die Arbeit ist null. Das Bett kostet doppelt so
viel Arbeit wie früher (7,2 → 14,4 s je Feld). Der Tooltip des Eintrags nennt die Arbeit in
Spielzeit für einen Bauenden (BuildEntry.labour_line); Helfer addieren ihre Anteile und
verkürzen sie.
Ein Raum ist noch kein Zuhause. Seine Wohnlichkeit ist der Durchschnitt über seine Felder aus dem darauf verlegten Boden und den darin stehenden Möbeln, und diese Wohnlichkeit hebt die Stimmung, solange ein Gefährte drinnen ist — im Schlaf doppelt. Übermöblieren macht den Raum lediglich fertig; es ist gedeckelt und nie ein Exploit.
Automatisieren — T drücken T
Automatik wird gebaut, nicht eingeschaltet. Schreibe jedem Gefährten ein Programm — eine geordnete Liste aus Regeln der Form WHEN Bedingung(en) → DO Aktion UNTIL Abbruch. Die Reihenfolge ist die Priorität.
- WHEN — Sensoren: die Körperleisten (auch Health & Mood), Nässe, Krankheit, die Uhr, die Jahreszeit, Niederschlag, das Siedlungslager, die eigene Traglast, der Wasserschlauch, Brennstoff im Feuer, eine wartende Baustelle. Bedingungen werden mit UND verknüpft.
- DO — Aktionen: die Handwerke (fällen, fischen, ackern, brechen, jagen), trinken, essen, schlafen, wärmen/abkühlen, Feuer versorgen, bauen, die Traglast ins Lager schaffen, Gegenstände in die Traglast holen und eine Aufgabe nehmen vom Aufgabenbrett.
- UNTIL — die Verriegelung: „Holz fällen UNTIL Lager ≥ 60“ hält eine Regel über ihren Auslöser hinaus am Laufen, damit Gefährten nicht an der Schwelle hin- und herspringen.
- Nichts geschieht, worum niemand gebeten hat (11.7): Kein Gefährte trägt seine Last von allein heim. Eine volle Traglast stoppt die Arbeit, die sie weiter füllen würde (in ein volles Gepäck zu ernten zerstört die Quelle für nichts), und der Rest des Programms läuft weiter. Bring sie herein: per Rechtsklick auf ein Lager, mit einer Regel WHEN Carry full → Haul oder über das Aufgabenbrett — das Ziel einer Aufgabe steht im Siedlungslager, also ist das Abliefern ihr letzter Schritt. Jeder Transport behält eine Ration jeder Nahrungssorte und Trinkwasser zurück: Die Last geht, das Mittagessen bleibt.
- Blöcke sind budgetiert: Eine Regel kostet 1 Block, +1 je zusätzlichem WHEN, +1 für ein UNTIL; die ganze Siedlung teilt sich ein Budget (Basis 12, +6 durch einen Planning table). Regeln jenseits des Budgets laufen nicht — die oberen Regeln werden zuerst bezahlt.
Das Aufgabenbrett (braucht einen Planning table): Gebäude beobachten ihren eigenen Bedarf und schreiben Aufgaben aus — eine Fischerhütte ruft nach einem Fischer, solange das Lager unter 20 Fisch hält, ein heruntergebranntes Feuer ruft nach Brennstoff, offene Baustellen melden sich selbst. Eine einzige Regel Take a task für 1 Block greift die nächstgelegene Ausschreibung, ein neuer Gefährte ist also einfach ein weiterer Abnehmer. Handwerke werden verdient: Jede Arbeitsaktion bleibt gesperrt, bis ihre Werkstatt steht. Arbeiter suchen nur, was die Gruppe bereits entdeckt hat.
Zeit & Welt
Tag/Nacht und Jahreszeiten vergehen; Uhr, Temperatur (°C) und Wetter stehen oben in der Mitte. Die Geschwindigkeitsregler (oder -/.) schalten Pause / 1× / 2× / 5× / 10×.
Das Wetter folgt den Jahreszeiten — Sonne, Wolken, Regen, Hagel, Sommerdürre, Winterschnee. Hagel tut weh (zehrt im Freien an der Gesundheit; nur ein Dach oder das Blätterdach halten ihn ab). Regen durchnässt (nass = bis zu 30 % kälter). Nasse Kleidung trocknet am Lagerfeuer oder unter einem Dach am schnellsten (~4 Spielstunden von völlig durchnässt) — und im Freien so schnell, wie der Himmel es zulässt: ~10 h bei warmem Sonnenschein, etwa ein Drittel dieses Tempos bei bedecktem Himmel und überhaupt nicht in kalter Luft oder während Regen, Schnee oder Hagel fällt. Eine sommerliche Durchnässung trocknet sich während der Arbeit von selbst; eine winterliche wartet auf ein Feuer. Im tiefen Winter frieren Flüsse und Seen zu (Brunnen sprudeln weiter); eine Sommerdürre trocknet kleine Tümpel aus, bis der nächste Regen fällt.
Wasser hat neben dem Salzgehalt auch eine Güte. Ein Süßwasser, das nie das Meer erreicht — ein See, ein Tümpel — ist stehendes Wasser: trinkbar, und jeder Schluck baut die Ruhr-Last des Trinkenden auf — für sich genommen nichts, aber der Tümpel, zu dem du immer wieder gehst, bricht als Krankheit aus. Flüsse entwässern ins Meer und gelten auf ihrer ganzen Länge als fließend, ebenso Brunnen und heiße Quellen. Ein am See gefüllter Wasserschlauch trägt Tümpelwasser mit sich, bis er leergetrunken ist. Die Wahl zwischen einem Platz am See und einem am Fluss (oder an einem Brunnen) ist genau der Punkt.
Das Gegenmittel ist ein Feuer. Rechtsklick darauf und Boil water wählen: der Companion gießt alles Unbehandelte, das er trägt — erst die Traglast, dann seinen Wasserschlauch — in die Pfanne der Feuerstelle, wartet ab und nimmt das saubere Wasser wieder an sich (erst der Schlauch, der Rest in die Traglast). Mit leeren Händen holt derselbe Befehl schlicht ab, was schon kocht. Von Hand geht es ebenso: mit Rechtsklick auf den Werkzeugslot im Charakterblatt (C) den Schlauch in die Hand gießen und ihn auf ein Feuer setzen (der ganze Schlauch geht hinein), auf ein Fass, oder auf einen anderen Companion, um dessen Schlauch zu füllen.
Abkochen kostet Zeit, und das ist Absicht. Ein voller Wasserschlauch braucht am Lagerfeuer eine Ingame-Stunde; eine Steinfeuerstelle ist bei allem, was sie kocht, dreimal so schnell. Die Pfanne fasst 20 Einheiten und kocht unbeaufsichtigt weiter, solange das Feuer brennt — man belädt sie also und geht. Aber eine Pfanne versorgt keine ganze Gruppe mit Wasser, und während sie kocht, brät sie keinen Fisch. Abkochen ist der Notbehelf am Tümpel; die Antwort ist ein Fluss oder ein Brunnen.
Das Land selbst hat ein Klima. Der größte Teil der Insel ist gemäßigt, drei Landstriche aber nicht: Tundra (−10 °C) am hohen Nordsaum, Wüste (+8 °C) im trockenen Süden und Sumpf (durchnässt wie Regen, und kein Feuer trocknet dich, solange du darin stehst). Die Jahreszeiten drehen beide Extreme um — zu wissen, in welcher Jahreshälfte ein Landstrich überlebbar ist, ist mehr wert, als ihn zu meiden.
Oberfläche & Tasten
Das Gefährtenfenster fasst alles zusammen, was du mit einem Gefährten tust, in drei Reitern — jede Taste öffnet ihren eigenen Reiter (nochmal drücken schließt; Strg+Tab wandert durch die Reiter). Alle drei gelten dem Gefährten, den du gerade steuerst.
| Taste | Aktion | Taste | Aktion |
|---|---|---|---|
| C | Reiter Character (Werte, Fertigkeiten, Traglast) | Leertaste | Bauring (Radialmenü) |
| T | Reiter Automation (Regeln) | Tab | Nächster Gefährte (+Kamera) |
| K | Reiter Crafting (Schlafrolle, Cordage, Bogen, Angel) | 1–0 | Gefährten wählen (zweimal = Kamera) |
| E | Sammeln (halten) | H | Zielen & schießen (Bogen, halten) |
| F | Kamera auf die Auswahl zentrieren | M | Weitester Zoom |
| G | Nebel umschalten (Debug) | - / . | Spieltempo hoch / runter |
| J | Chronik (gespeicherte Historie) | F1 | Hilfe |
| F5 / F9 | Speicherplatz sichern / laden | Esc | Offenes Fenster schließen, sonst Pause/Einstellungen |
| F12 | Dev-Konsole (Debug-Builds) | Alles neu belegbar unter Esc → Settings | |
Architektur & Konventionen
Engine, Aufbau und die Grundregeln, an die sich die Codebasis hält.
- Engine: Godot 4.x, 2D-Draufsicht. Nur GDScript (kein C#).
- Sprache: alle Bezeichner, Kommentare, Node-/Szenennamen auf Englisch — kein Deutsch im Code oder im Szenenbaum.
- Benennung:
snake_casefür Variablen/Funktionen/Signale/Dateien;PascalCasefür Klassen/Nodes/Szenen;class_namefür wiederverwendbare Skripte. - Datengetrieben: Stellschrauben leben in
.tres-Resources (resources_data/) und@export-Variablen — keine magischen Zahlen. Zahlen sollen ohne Codeänderung justierbar sein. - Entkopplung: übergreifender Zustand liegt in Autoload-Singletons; Systeme reden über Signale, wo das entkoppelt.
| Pfad | Enthält |
|---|---|
| scripts/autoload/ | Singletons (Manager, Welt- & Speicherzustand) |
| scripts/player/ | Gefährten-Rig: Werte, Fertigkeiten, Controller, Jobs, Automatik |
| scripts/world/ | Weltgenerierung, Gelände/Biom/Landmarke, Renderer, Kamera, Wetter, Nebel |
| scripts/resources/ | Ressourcen-Nodes, Tiere, Erntezyklus |
| scripts/buildings/ | Buildable, Build-Controller, Baustellen, Lagerinventar |
| scripts/items/ | Item-Katalog, Item-Grafik, liegende Gegenstände |
| scripts/ui/ | HUD, Panels, Dev-Konsole, Einstellungen, Screens |
| resources_data/ | Alle .tres-Konfigurationen: Gebäude, Tiere, Ressourcen, Werte, Fertigkeiten, Palette, Theme |
| tests/ | Headless-Suite + Benches + Screenshot-Harness |
Autoload-Übersicht
Die Singletons, die jedes System erreicht. Persistente Autoloads müssen sich
in WorldGenerator._ready zurücksetzen (ein Neuladen erzeugt sie
nicht neu).
| Autoload | Besitzt | Datei |
|---|---|---|
GridManager | Zelle↔Welt-Mathematik, Belegungsgitter | autoload/grid_manager.gd |
TerrainManager | Gelände-/Biom-/Landmarken-Ebenen je Zelle, Begehbarkeit, Wasserkörper, Klima | autoload/terrain_manager.gd |
TimeManager | time_of_day, Tag, Jahreszeit; Umgebungstemperatur; Wechselsignale | autoload/time_manager.gd |
TimeWarpManager | Pause / 1–10× über Engine.time_scale | autoload/time_warp_manager.gd |
WeatherManager | Jahreszeitlich gewichtete Wetterphasen, Schneedecke | autoload/weather_manager.gd |
FogManager | Dreistufige Sichtbarkeit je Zelle | autoload/fog_manager.gd |
PartyManager | Mitglieder, Auswahl, Verkörperung | autoload/party_manager.gd |
BuildingManager | Platzierung, Baustellen, Räume, Wirkbereichs-Versorgung, Wasserkörper | autoload/building_manager.gd |
CityInventory | Aggregierende Fassade über alle Lagerfelder | autoload/city_inventory.gd |
AnimalManager | Laufende Bestandszählung, Kapazitäten | autoload/animal_manager.gd |
TaskBoard | Von Gebäuden ausgeschriebene Aufgaben (11.6) | autoload/task_board.gd |
SaveManager | Benannte Speicherplätze, Migrationsnahtstellen | autoload/save_manager.gd |
EventLog / Chronicle | Laufender Feed / gespeicherte Historie | autoload/event_log.gd, chronicle.gd |
SoundManager | Zoomabhängiger, positionsbezogener Ton, UI-Klicks | autoload/sound_manager.gd |
KeybindManager / GraphicsManager / GameState / ResourceManager / GroundItemManager | Eingabe, Grafikeinstellungen, Laufzustand, Ressourcenregister, liegende Stapel | autoload/… |
Weltgenerierung & Gelände
WorldGenerator.generate() baut die Welt.
TerrainManager.is_walkable(cell) ist DIE Begehbarkeits-Nahtstelle (Nav-Bake, Kollision,
Standfähigkeit und Räume lesen sie alle — das set_walkable_override einer Brücke
öffnet die Querung für sie alle). TerrainManager.climate_offset_at(cell) ist DIE
Klima-Nahtstelle. TerrainManager.is_drinkable_water() ist DIE Trink-Nahtstelle;
is_fresh_water() ist reiner Salzgehalt; is_still_water() ist DIE
Güte-Nahtstelle (7.5 — ein Gewässer, das kein Meer erreicht), und
IllnessController.wear_bad_water() ist die eine Stelle, an der ein unbehandelter
Schluck abgerechnet wird.Eine Zelle hat drei orthogonale Ebenen: Gelände (was sie physisch ist — world/terrain_types.gd: PLAINS/WATER/FOREST/MOUNTAIN/SAND/SHALLOW), Biom (ihr Klima — world/biome_types.gd: gemäßigt/Tundra/ Sumpf/Wüste, je als eine gewachsene Region) und Landmarke (world/landmark_types.gd: Kratersee / heiße Quellen / Steinkreis).
Wichtige Stellschrauben — scripts/world/world_generator.gd
| Gruppe | Exports (am WorldGenerator-Node in Main.tscn) |
|---|---|
| Form | world_seed, noise_frequency, island_falloff[_power], sea_level, mountain_level, forest_moisture, sand_share |
| Flüsse | river_count (2), river_max_half_width (1.7), river_meander_strength (2.2, Obergrenze ~2.4), river_meander_wavelength, river_source_flank, river_bias_* |
| Wald | wood_per_forest_cell (20), birch_/spruce_/oak_share |
| Biome | tundra_share, desert_share, swamp_share, swamp_bog_count, biome_terrain_affinity |
| Landmarken | crater_lake_count/radius, hot_springs_count/radius, standing_stones_count/radius, landmark_min_spacing |
| Startpunkt | spawn_water_min_walk/max_walk (60/90), spawn_open_land_share |
chunk_cells 64, ~0,1 s bei
512², eine Wand bäckt nur ihren Chunk neu, ~5 ms), und jede Spawn-Zahl ist eine
Dichte über TerrainManager.area_scale() (begehbares Land gegen
REFERENCE_WALKABLE_CELLS ≈203000). 512 ist eine Design-Entscheidung
(3–5 Zyklen je Durchgang), keine Performance-Frage.Rendering: world/terrain_renderer.gd (Textur je Zelle),
terrain_snow.gdshader, tree_canopies.gd (Kronen zeichnen
über Läufern auf z 4; _apply_walkers speist den Shader für Durchsicht und
Schwanken), room_floor_renderer.gd, fog_overlay.gd.
Alle Weltfarben liegen in resources_data/palette.tres über
GamePalette. Navigation: walkable_navigation_region.gd;
Kollision: terrain_collision.gd.
Ressourcen & Tiere
.tres
(resources/resource_type.gd); ein Tier ist eine .tres
(resources/animal_species.gd) — ein neues Tier braucht keinen Code-Zweig.
ResourceType.restock entscheidet, wo eine Quelle zurückkommt;
HarvestCycle.work_node ist die eine Ernte-Nahtstelle; Animal._can_enter
ist die Bewegungs-Nahtstelle (flies); ItemCatalog hält Nährwert und
Haltbarkeit je Sorte.| Belang | Datei / Konfiguration | Bemerkenswerte Felder |
|---|---|---|
| Ressourcendefinitionen | resources_data/resources/*.tres | spawn_terrain, spawn_biome, yield_item, harvest_time, work_scale (Fels/Fisch 10), restock, spawn_seasons, regrow_days, spawn_abundance |
| Spawn & Nachschub | world/resource_spawner.gd | count_per_type (120, eine Dichte), _target_count, _pick_restock_cell |
| Tierarten | resources_data/animals/*.tres | flies, flee_radius_cells (0 = flieht nie), speed_variance, carrying_capacity, initial_population, food_yield, spawn_near_fresh_water_cells |
| Tierverhalten | resources/animal.gd, world/animal_spawner.gd | Parametrisches _draw; breed_check_days (kein Registerscan je Frame); _can_enter |
| Ernte & Fällen | resources/harvest_cycle.gd | chop_tree → TerrainManager.chop_wood; HARVEST_TIME_SCALE 1.8 |
AnimalManager.count_of() ist eine laufende Zählung, deshalb ruft _spawn()
setup() vor add_child(). Und „jedes Tier steht auf begehbarem
Gelände“ ist falsch — Flieger kennen nur den Kartenrand.Gefährten
Das Gefährten-Rig ist scenes/player/Player.tscn /
class_name Player, dreimal instanziiert als Nodes Character1/2/3 (ein
Node-Name ist ein Speicherschlüssel — umbenennen über
SaveManager.RENAMED_CHARACTER_NODES). Das Verhalten verteilt sich auf kleine Controller
am Rig.
| Controller / Datei | Besitzt | Wichtige Nahtstellen / Stellschrauben |
|---|---|---|
| player/player_stats.gd (+ player_stats_config.gd) | Die sechs Werte, Verfall, sleep_debt | Signal stat_changed; Konfiguration in resources_data/stats/*.tres |
| player/vitals_controller.gd | Anwenden von Essen/Trinken, Heilungssperre | heals_at_rest(), begin_meal/drink_if_below (die EINZIGEN Einstiege in den Verbrauch) |
| player/temperature_controller.gd | Drift zur gefühlten Wärme | _target_warmth() (Klimaversatz, danach das maxf des Lagerfeuers); in_danger_band() |
| player/wetness_controller.gd / comfort_controller.gd | Nässe-Debuff, Stimmung aus Raumkomfort | _standing_in_swamp; room_quality_at |
| player/illness_controller.gd | Ausbruch/Heilung von Krankheiten | führt aus, was player/ailments.gd deklariert |
| player/ailments.gd | Was eine Krankheit IST | Ursache, Verlauf, Heilung — eine neue ist ein Eintrag |
| player/character_skills.gd (+ skill_set_config.gd) | Lernen durch Tun | practice() = XP-Eingang, multiplier() = Wirkung; resources_data/skills_config.tres |
| player/job_runner.gd | Führt Jobs/Bedürfnisse aus; das Herz der Balance | siehe unten |
| player/command_controller.gd / worker_commands.gd / worker_needs.gd | Auflösung des Rechtsklicks, Befehlsausführung, Bedürfnis-Handler | Halte-/Zieh-Schwellen; _fetch_from_stores |
| player/character_profile.gd / nordic_name_generator.gd | Identität | display_name() = die Namens-Nahtstelle; disposition (verborgen), recruited, joined_day |
| player/renegade_controller.gd | Falsche Gefährten (5.4b) | work_factor() (über die EINE Arbeits-Nahtstelle), desert_day (einmal gezogen, gespeichert), _tell() |
| world/wanderer_controller.gd | Ein Rig, das NICHT in der Gruppe ist (5.4) | seine ANWESENHEIT ist das Kennzeichen (Player.is_wanderer()); Phase, wanderer_at() |
Anwerben — scripts/world/wanderer_spawner.gd
Ein Wanderer ist ein Gefährten-Rig (Player.tscn), das
noch nicht beigetreten ist — keine zweite Art Mensch. Das ist der ganze Entwurf: Identität,
Traglast, Zeichnung und Speichereintrag sind dieselben, die jeder Gefährte ohnehin hat,
deshalb ist Anwerben PartyManager.recruit() → Umbenennen auf ein freies
Character<N> (ein Node-Name ist ein Speicherschlüssel) +
Player.join_party(). Ein Fremder ist eingefroren, solange er wartet
(Player._halt_survival), und deckt keinen Nebel auf. Das Weggehen läuft rückwärts durch
dieselbe Tür: Player.leave_party() hängt einen frischen Controller in
LEAVING an, das Rig läuft von der Karte und gibt sich selbst frei — Verstoßen und
Desertieren teilen sich diesen einen Weg.
Stellschrauben des Spawners: first_possible_day (6), min_days_between (6),
arrival_chance (0.22/Tag), linger_days (3), renegade_chance (0.3),
approach_cells (45). Immer nur ein Fremder unterwegs; einer vollen Gruppe wird niemand
geschickt. Konsole wanderer [spawn [renegade]|here|panel|recruit|send|desert].
SaveManager._collect_characters läuft den BAUM ab, keine Namensliste
— die Gruppe wächst jetzt, CHARACTER_NODES wäre also in dem Moment gelogen, in
dem jemand beitritt. Ein Restore baut Rigs, die die frische Welt nicht hat
(_rebuild_character), und gibt Player frei, die der Speicherstand nicht kennt. Der
WandererController muss angehängt werden, bevor das Rig in den Baum kommt,
sonst belegt es einen Tastenplatz, der ihm nicht zusteht.Die große Tuning-Fläche — scripts/player/job_runner.gd
Bewegung/Arbeit: move_speed, work_seconds, mine_seconds,
fish_seconds. Bedürfnisse/Schwellen: need_trigger_ratio/recover_ratio,
emergency_ratio, warm_seek_below/cool_seek_above,
despondent_below. Automatik: base_rule_slots (12),
dev_self_care (reaktiviert die schlafenden Selbstversorgungsstufen — Tests / ein
künftiger leichterer Schwierigkeitsgrad). Jagd: hunt_range_cells,
hunt_base/min/max_hit, hunt_giveup_seconds. Die Erschöpfungsstrafen liegen
in player/player.gd (fatigue_walk_penalty,
fatigue_work_penalty, mood_work_penalty).
dev_self_care. Keine Sicherheitsnetze klammheimlich
wieder einbauen.Automatik-Interna
AutomationProgram (eine
geordnete AutomationRule-Liste); AutomationInterpreter wertet es von oben
nach unten aus (die erste durchführbare ausgelöste Regel gewinnt; UNTIL verriegelt). Aktionen sind
bestehende Verhaltensweisen — Regeln wählen nur, welche läuft.| Datei | Rolle |
|---|---|
| player/automation_program.gd | Die Regelliste + Verrechnung des Blockbudgets |
| player/automation_rule.gd / automation_condition.gd | Eine WHEN→DO-UNTIL-Regel; eine Sensorbedingung |
| player/automation_interpreter.gd | Auswertung von oben nach unten, Verriegelung, Live-Diagnose (ACTIVE/blockiert/wartend) |
| ui/automation_panel.gd | Der Regeleditor (Reiter Automation) |
| autoload/task_board.gd + buildings/building_task_rule.gd | Gebäude schreiben bedarfsgetriebene Aufgaben aus; der Block „Take a task“ greift die nächstgelegene |
Arbeitsaktionen sind durch stehende Werkstätten gesperrt (Gebäude). Alte
Speicherstände überführen beim Laden einen gemalten Tagesplan in Zeitfenster-Regeln. Konsole:
rules, prog, tasks, auto.
Gebäude & Bau
Buildable-.tres
(buildings/buildable.gd) — ein neues Gebäude ist Daten, kein Code.
BuildingManager._serves ist die Wirkbereichs-Nahtstelle (jedes
find_*_near läuft hindurch). Buildable.paint (CHAIN/AREA/einzeln) steuert
die Platzierung. makes_walkable + TerrainManager.set_walkable_override
ist die Brücken-Nahtstelle. _stand_by = von welcher Zelle aus ein Gebäude benutzt
wird. Buildable.cost_alternatives + pick_cost = die Nahtstelle für
„9 Zweige oder 3 Holz“: Ein Grundriss legt sich auf EINE Variante fest, damit alles Nachgelagerte
(Lieferung, Holgang, Panel, Speicherstand) weiterhin ein schlichtes Kosten-Dictionary sieht.| Belang | Datei | Anmerkungen |
|---|---|---|
| Gebäudedefinitionen | resources_data/buildings/*.tres | cost, cost_alternatives, size, category/secondary_category, action_radius, build_seconds_per_cell, room_warmth, comfort, speed_factor, heat_output/radius, burn_seconds, yields_item, task_rules |
| Platzierung / Geisterbau / Malen | buildings/build_controller.gd | request_build_path; CHAIN-Wände, AREA-Böden; Konsole ghost |
| Platzierungsregeln, Räume, Versorgung | autoload/building_manager.gd | cell_placeable, _room_id_at (Flutfüllung ≤400 Zellen), warmth_at/sheltered_at, adjoining_water_body, Böden in _floor_cells |
| Baustellen | buildings/construction_site.gd | Holen/Liefern/Bauen; gespeichert (inkl. der festgelegten Kostenvariante); reconsider_cost wählt neu, solange nichts geliefert ist; cancel_site lässt Material fallen |
| Gebäude-Node & Panels | buildings/building_node.gd, ui/building_panel.gd, construction_site_panel.gd | stack_at = „was liegt auf dieser Zelle“ |
SaveManager._restore_rank): Ein Boden lässt sich nicht auf eine belegte Zelle legen,
ein vor seinen Dielen wiederhergestelltes Bett verliert den Boden also stillschweigend.Gegenstände, Inventar & Lager
ItemCatalog
(items/item_catalog.gd) ist die EINE Datennahtstelle für Gewicht,
Nährwert und Haltbarkeit — es gibt kein generisches „food“-Item, jede Quelle liefert ihre Sorte.
ItemGraphics.draw() ist DAS Aussehen im Inventar. Inventory rechnet in
Gewicht (capacity_kg, space_for) mit FIFO-Alterschargen.
StockpileInventory.tile_layout() = eine Sorte je Feld, 20 Einheiten;
CityInventory aggregiert.| Datei | Rolle |
|---|---|
| items/item_catalog.gd | Gewicht / Nährwert / shelf_days / rest_factor je Gegenstand |
| items/item_graphics.gd / ui/item_icon.gd | Prozedurale Item-Zeichnung (Welt + Inventar) |
| player/inventory.gd | Die Traglast: kg-Budget, take_amount/take_all_of, Alterschargen |
| buildings/stockpile_inventory.gd | Physisches Feldlager, Lagerregeln |
| items/ground_item.gd + autoload/ground_item_manager.gd | Liegende Stapel (altern, während sie liegen) |
| player/world_hand.gd + ui/character_sheet_panel.gd | EINE Hand (gehört dem Charakterblatt, Gruppe character_sheet); Auflösungsreihenfolge Baustelle>Lager>Feuerstelle>Gefährte>Boden |
| ui/transfer_panel.gd | Tauschfenster Traglast↔Lager und Traglast↔Traglast |
Zeit, Wetter & Temperatur
TimeManager verfolgt und sendet nur
(time_changed/day_changed/season_changed) — er weiß nichts
über Spielmechanik. WeatherManager.get_effective_temperature() ist die eine
Wetter-Temperatur-Nahtstelle. Die Umgebungstemperatur speist
TemperatureController._target_warmth().| Datei | Exports / Nahtstellen |
|---|---|
| autoload/time_manager.gd | day_length_seconds (18 min), days_per_season (7), start_time_of_day, *_temp je Jahreszeit, day_night_swing; get_ambient_temperature(), jump_to_day() |
| autoload/weather_manager.gd | min_/max_spell_hours, temperature_jitter, snow_accumulate_/melt_per_hour |
| world/day_night_cycle.gd | Interpolation der CanvasModulate-Tönung |
| world/weather_particles.gd / weather_hazard.gd / cloud_shadows.gd | Regen-/Schnee-/Hagelpartikel, Hagelschaden an der Gesundheit, Wolkenschatten |
Temperaturschaden: Kälte unter 4 °C / Hitze über 35 °C
(temperature_controller.gd). Taktung: der 18-Minuten-Tag und die
×1,8-Aufgabendauern; HARVEST_TIME_SCALE ist die Ernte-Nahtstelle.
UI & Panels
StatVisuals
= Glyphe+Stufe+Farbe; StatusEffects.list(character) = „was liegt gerade auf diesem
Gefährten“. Das Gefährtenfenster ist ein gerahmter
TabContainer mit drei Reitern (C/T/K) — das visible eines Reiters ist
nicht dasselbe wie ein stehendes Fenster, also is_visible_in_tree() lesen.| Datei | Rolle |
|---|---|
| ui/hud.gd | Wurzel-HUD; bindet das Gefährtenfenster beim Steuerungswechsel |
| ui/companion_window.gd + companion_header.gd | Der 3-Reiter-Rahmen; subject()/bind_character(); host_of() |
| ui/character_sheet_panel.gd / automation_panel.gd / crafting_panel.gd | Die drei Reiter (Character / Automation / Crafting) |
| ui/character_status_panel.gd / stat_bar.gd / stat_visuals.gd / status_effects.gd / stat_icon.gd | Gruppenkarten, Balken, Abzeichen |
| ui/alert_screen.gd | Herzschlag bei Todesgefahr (löst auf der Stufe EMERGENCY der Gesundheit aus; health_alert.gdshader) |
| ui/build_radial_menu.gd | Der Bauring: ein _draw, Trefferprüfung über Winkel+Radius (kein Node je Sektor); die Geometrie wird aus der Sektorzahl BERECHNET |
| ui/build_categories.gd | Der Baum als DATEN. Kategorien werden hier deklariert; Einträge werden aus dem lebenden Katalog nach Buildable.category GRUPPIERT — nie eine Liste von Ids. PLANNED = die ausgegrauten Platzhalter (seit 16.3 leer, als Mechanismus behalten). FURNITURE ist eine echte Kategorie-Id, die bewusst NICHT in CATEGORIES steht und daher keinen Sektor bekommt — das Raum-Panel fragt sie direkt ab. entries_for prüft category oder secondary_category, ein Stück in zwei Listen sagt das also selbst (das Strohbett: Möbel und Supply) |
| ui/room_panel.gd | Möbel hängen am RAUM, nicht an einem Gebäude (16.3). Bindet an eine Zelle, nie an eine Raum-Id (Ids werden bei jeder Platzierung neu erzeugt). Treibt das gewöhnliche BuildController.select_buildable(buildable, fence) an — nie eine zweite Platzierungspipeline. Konsole room panel |
| ui/building_icons.gd | BuildingIcons.draw() = die Nahtstelle für Gebäudesymbole (der Zwilling von ItemGraphics.draw); monochrom, Einheitsquadrat, eine Zeichnung je Buildable.id — unbekannte Id → stiller Ersatzfleck. Konsole icons prüft, welche Einträge ihn noch tragen |
| ui/build_icon.gd | BuildIcon = das Control, das die Nahtstelle WÄHLT: Ein Bausatz (yields_item) zeichnet sich als sein Item über ItemGraphics, alles andere als sein Gebäude. Genutzt vom gemeinsamen Eintragsbutton und vom Baustellen-Panel |
| ui/build_entry.gd | BuildEntry.cost_labels_for() / tooltip_for() speisen das Infofeld des Rings UND den Crafting-Reiter — eine Quelle dafür, was etwas kostet |
| ui/loading_screen.gd | Gepushte Phasen; alles über den RenderingServer geschaltet (force_draw()) |
| ui/event_log_panel.gd / chronicle_panel.gd / task_board_panel.gd | Feed / Historie / Aufgabenbrett |
| ui/wanderer_panel.gd | Die Anwerbe-Entscheidung (5.4): Identität + Attribute, aufnehmen / weiterschicken. Darf die verborgene disposition niemals lesen |
| ui/pause_menu.gd | Die Esc-Leiter (schließt die Gruppe ui_windows, bevor pausiert wird) |
| ui/settings_panel.gd + gameplay/graphics/audio/keybindings_settings.gd | Einstellungen; Neubelegen schreibt .cfg je Bereich |
Speichern / Laden
SaveManager._collect_state / _apply_state eintragen. Speicherstände sind
benannte Plätze auf der Platte (user://saves/<name>.save).
brutal_testing_saves ist true, solange der Prototyp getestet wird (Brutal
speichert/lädt frei) — umlegen, um die Permadeath-Säule wiederherzustellen.Node-Namen sind Speicherschlüssel (siehe Gefährten). Seit dem
Anwerben (5.4) läuft _collect_characters den Baum ab, keine feste
Namensliste, und _rebuild_character baut die Rigs, die eine frische Welt nicht hat. Die
Wiederherstellung folgt einer Rangordnung (Boden → Struktur → Einrichtung). Der
Schwierigkeitsgrad (Hard = freies Speichern/Laden, Brutal = nur Unterbrechen + Löschen des Platzes)
wird im Titelbildschirm gewählt. Konsole: saves, save, load,
delsave, difficulty.
Konsolenbefehle
F12 öffnet die Dev-Konsole (nur in Debug-Builds). Die Handler liegen in scripts/ui/dev_console.gd. Jede neue Mechanik sollte einen Konsolenbefehl mitbringen.
| Bereich | Befehle |
|---|---|
| Gefährten / Werte | select, who, stat, fill, skill, fatigue, weight, wet, sick, effects, alert, face, figures, wanderer |
| Fenster / Gegenstände | sheet, rules, crafting, transfer, hearth, hand, skin, give, drop, cook |
| Welt / Gelände | world, biome, landmark, rivers, salt, freeze, water, tree, chop, canopy, relief, navmesh, sites, room [panel], tp, reveal, fog |
| Zeit / Wetter | time, day, season, speed, weather, clouds, tint |
| Ressourcen / Tiere | res, animal, hunt, regrow, restock, spoil |
| Bau / Automatik | build, radial, ghost, cancelsite, area, pilerule, freebuild, unlockjobs, auto, prog, tasks |
| Speichern / Meta | save, load, saves, delsave, difficulty, god, chronicle, music, shot, scenario, float, version, help, clear |
Tests & Werkzeuge
| Werkzeug | Befehl | Zweck |
|---|---|---|
| Headless-Suite | godot --headless --script res://tests/run_tests.gd | Rauch- & Regressionstests |
| Screenshot-Harness | godot --path . --script res://tests/screenshot.gd -- out=… seed=… grid=… cmd="…" | Startet das echte Spiel mit Rendering, stellt den Zustand über die Konsole her und speichert ein PNG (braucht ein Display — DISPLAY=:1, nicht --headless). Die Screenshots in diesem Wiki sind damit entstanden. |
| Soak-Test | tests/soak_test.gd | Balance-Netz über N Tage Basisbetrieb (nicht Teil der Suite) |
| Benches / Sonden | tests/animal_bench.gd, grid_benchmark.gd, river_probe.gd, water_probe.gd, sim_night.gd | Gezielte Performance-/Verhaltenssonden |
Godot-Binary in dieser Umgebung: ~/Downloads/Godot_v4.7-stable_linux.x86_64. Nach dem
Hinzufügen eines class_name den Klassencache neu bauen, bevor Headless-Tests laufen.
Claude sieht den laufenden Viewport nicht — visuelle Arbeit wird über den Screenshot-Harness oder vom
Entwickler geprüft.
screenshot.gd mit derselben out=-,
seed=- und cmd=-Zeile erneut laufen lassen und das PNG zurücklegen.Versionierung
Eine Nummer, eine Quelle — und die zwei Dinge, die sie bewusst nicht ist.
Die Version des Spiels liegt an genau einer Stelle:
application/config/version in project.godot — dem eigenen Feld
der Engine, damit ein exportierter Build sie gratis im PCK mitträgt. Alles im Spiel liest sie über
GameVersion (scripts/main/game_version.gd), eine statische
Klasse wie BuildCategories: GameVersion.string() liefert
"0.2.0", GameVersion.label() liefert "v0.2.0" — die eine
Schreibweise, die jeder Bildschirm benutzt, damit keine Beschriftung das „v“ selbst tippt.
Schema: schlichtes SemVer. Solange der Prototyp bei 0.x läuft, steigt
MINOR je abgeschlossenem Funktionspaket und PATCH bei Korrekturen; 1.0.0 ist für die
Ausgabe reserviert, die den Spielbogen schließt (ROADMAP-Meilenstein 10, der Wanderzyklus). Eine
meilensteinbasierte Nummerierung wurde verworfen — Meilensteine werden außer der Reihe fertig, die
Version wäre also rückwärts gelaufen.
SaveManager.SAVE_VERSION ist das FORMAT der Speicherdatei — die einzige Zahl,
die je das Laden verweigern darf. GameVersion ist der Build, der sie
geschrieben hat, im Kopf jedes Speicherstands als game_version eingestempelt und im
Tooltip des Speicherbrowsers sichtbar. Ein Speicherstand eines älteren Builds lädt immer; der
Stempel ist Herkunft, nie eine Sperre.Wo sie auftaucht: unten rechts im Titelbildschirm, im Pausenmenü, im Kopf jedes Speicherstands, im
Konsolenbefehl version (der auch den Engine-Build und das Speicherformat ausgibt), in
der Windows-Programmdatei (gespiegelt in export_presets.cfg) und in der
Zeile oben auf dieser Seite.
Eine Ausgabe schnüren (die vollständigen Schritte stehen in
CHANGELOG.md): project.godot erhöhen, die Nummer
nach export_presets.cfg und auf diese Seite spiegeln, den
Changelog-Abschnitt schreiben, die Headless-Suite laufen lassen, committen, dann
git tag -a v<version>. Die Suite schlägt fehl, wenn die drei Kopien
auseinanderlaufen — diese Prüfung hält die Spiegel ehrlich.
Aktuell halten wichtig
Wenn sich eine spielerseitige Mechanik ändert (eine Steuerung, ein Gebäude, ein Sammelziel, eine Überlebensregel):
HelpPanel.HELP_TEXTin scripts/ui/help_panel.gd bearbeiten — die einzige Quelle der Spielerhilfe auf dem Bildschirm (ihre Navigation leitet sich aus den Abschnittsüberschriften ab, also das Kopfformat[font_size=17][color=#9ec1ff][b]…[/b]beibehalten).- Den passenden Abschnitt im Spielerhandbuch hier aktualisieren.
- Betrifft die Änderung die Codestruktur (eine neue Datei, Nahtstelle, Stellschraube oder ein Konsolenbefehl), den passenden Abschnitt der Entwicklerreferenz aktualisieren und gegebenenfalls den Screenshot neu aufnehmen.
- Jede Änderung nach wiki/index.html spiegeln, den englischen Zwilling, im selben Commit.
#anchor mitnimmt, ein Abschnitt darf also nie nur in einer der beiden existieren. Ihre
<style>- und <script>-Blöcke sind absichtlich
bytegleich: das Aussehen in einer Datei ändern und den Block in die andere kopieren —
wiki/deploy.sh vergleicht beide und warnt, wenn sie auseinanderlaufen.
Der Deploy lädt beide Dateien hoch (und der Hook feuert für jede von beiden).Die Entwicklerreferenz leitet sich aus dem Nahtstellen-Katalog im Projektgedächtnis ab (memory/MEMORY.md), wo jedes System seine eine Nahtstelle nennt — die schnellste Stelle, um nachzusehen, wo eine Mechanik tatsächlich wohnt.
Companions — Entwickler-Wiki des Prototyps. Das Spielerhandbuch spiegelt die F1-Hilfe im Spiel; die Entwicklerreferenz bildet Mechaniken auf Dateien, Nahtstellen, Stellschrauben und Konsolenbefehle ab. Screenshots erstellt mit tests/screenshot.gd (Seed 12345).