10 — Raum-Prefab-Format #11
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Teil der Map #1 · Type:
wayfinder:grilling· Blocked by: #4Wie sieht ein Raum-Prefab in TOML aus, und wie fuegt der Generator daraus eine Etage zusammen?
Volle Fragestellung (kanonisch):
.scratch/rustkeep-1.0/issues/10-raum-prefab-format.mdAufgeloest in
6442e10. Kanonische Fassung:.scratch/rustkeep-1.0/issues/10-raum-prefab-format.mdEtagenaufbau: freie Platzierung mit Korridoren
Prefabs nacheinander an zufaelliger Position, Ueberlappung (plus ein Feld Rand) verworfen. Verbunden wird Raum
imit Raumi−1in Platzierungsreihenfolge, danach ein paar Zusatzkorridore fuer Schleifen; L-Form.Die Kette statt eines Spannbaums, weil sie Erreichbarkeit strukturell garantiert: haengt jeder Raum am vorigen, ist jeder von jedem erreichbar — ohne Flutfuellung, ohne Reparaturschleife. Das beantwortet die Garantiefrage aus dem Ticketkoerper nebenbei.
Rotation und Spiegelung erlaubt (acht Varianten, Drehen eines ASCII-Blocks ist eine Transposition). Kein Opt-out-Feld: 1.0 hat kein Prefab, dessen Ausrichtung etwas bedeutet.
Ein Prefab
#Wand ·.Boden ·+Tuer ·eGegner-Platz ·lBeute-Platz ·>Treppe ·<Eingang ·nNPC-Platz.Marker stehen im Block, nicht als Koordinatenliste daneben — der Sinn von ASCII ist, dass der Modder den Raum sieht. Tueren explizit, sonst stanzt der Generator Loecher in eine von Hand gezeichnete Wand.
Kein eigener Haendler-Marker: ein Haendler ist ein NPC. Ein zweites Zeichen fuer denselben Platz waere dieselbe Vermischung, die #3 beim
ItemTypeabgeraeumt hat.Ein
esagt „hier steht ein Gegner", nicht welcher — das entscheidet die Etage, sonst waere jedes Prefab an eine Schwierigkeitsstufe gebunden. Beinist es umgekehrt: den NPC nennt das Prefab, denn ein Schmied ist auf Etage 5 derselbe wie auf Etage 1.Die Etage
Auswahl durchgehend ueber Tags, auch bei Pflichtraeumen — IDs hiessen, dass ein Mod keinen eigenen Eingangsraum beisteuern kann, ohne die Tabelle zu ueberschreiben. Pflichtraeume zuerst auf die leere Flaeche; das ist die Garantie. Optionale Raeume, die nicht mehr passen, entfallen — Normalfall, kein Fehler. Passen die Pflicht-Tags grundsaetzlich nicht in
size, ist das ein Datenfehler und beim Laden erkennbar (Warnzeile ueber #5); zur Laufzeit kein Wiederholungszaehler, kein Rueckfallpfad.core:merchantsteht unterrequired, nicht unterprefabs: #8 hat Backtracking ausgeschlossen, der Haendler muss garantiert auftauchen.Damit ist die offene Frage aus der #4-Vorgabe beantwortet: Generator-Parameter sind Daten.
[[prefabs]]und[[floors]]sind die neunte und zehnte Registry.Kampf beginnt beim Betreten eines Raums
Die Bestellung aus #15: Gegner gehoeren zum Raum, nicht zur Etage.
room_enteredin einen Raum mit lebenden Gegnern verschiebt sie nachGame.enemies; nach dem Sieg gilt der Raum als geraeumt.Der Grund ist, was dadurch nicht gebaut wird: frei umherlaufende Gegner braeuchten Pfadsuche, Sichtlinien, Verfolgung und ein Bewegungsbudget pro Zug — ein eigenes System, das niemand bestellt hat.
Floor— der Innenbau aus #8Korridore gehoeren zu keinem Raum — schlicht
Tile::Floorausserhalb allerrect. Dadurch feuertroom_enteredsauber beim Uebergang, undplayer_room: Noneist ein echter Zustand statt eines Fehlers. Gegner werden bei Kampfbeginn verschoben, nicht kopiert. Ladepruefung:layout-Zeilen muessen gleich lang sein.Siegbedingung — bisher nirgends definiert
Kein Ticket hatte je festgelegt, was beim Abstieg von der letzten Etage passiert.
Descendauf der letzten definierten Etage gewinnt den Lauf. Es gibt keine Zahl "5" im Code: die Engine sucht[[floors]]mitnumber = aktuell + 1, findet sie keine, ist Schluss. Ein Mod, der Etage 6 ergaenzt, verlaengert das Spiel ohne eine Zeile Engine-Code — dieselbe Bewegung wiecore:attackin #12.Zwei Nachtraege
room_entered { prefab_id }als zwoelftes Event. Dazu eine Beobachtung: die Liste wurde in #9 als geschlossen festgelegt, und seither hat jedes Ticket mit echten Spielsituationen eines gebraucht (#15 zwei, #11 eines). Wer #16 oder #17 bearbeitet, sollte damit rechnen.GameOver { outcome: Died | Won }statt nurGameOver.Auflagen
cleared, gefallene Gegner, genommene Beute) laesst sich nicht regenerieren und muss ohnehin mit. #10 entscheidet, ob sich der Seed dann noch lohnt.lootan der Etage verweist auf eine Tabelle, diel-Plaetze ziehen daraus.