Pixel-Art-Räume: Möbelraster, Obergrenzen und Wertung
Ein eingerichteter Raum in Pokémon Smaragd-Edition besteht aus sechzehn Dingen auf einem Raster aus 16 Pixel großen Zellen. Der dekompilierte Quellcode begrenzt die Basis einer Spielfigur auf 16 platzierte Dekorationen und das Schlafzimmer auf 12 und hält bis zu 20 Basen im Spielstand, die eigene und die anderer Spieler.12 Der Katalog umfasst 120 Dekorationen in acht Kategorien: 35 Puppen, 23 Ornamente, 18 Matten, 10 Poster, 10 Kissen, 9 Tische, 9 Stühle und 6 Pflanzen. 71 davon belegen eine einzige Zelle, der Mittelwert liegt bei 2,43 Zellen, und 18 sind Oberflächen, auf denen die kleinen stehen können.23 Eine Basis misst 44 bis 81 begehbare Zellen, im Schnitt 60,2, die Obergrenze entspricht also etwa einem Viertel der Bodenfläche. Ob etwas platziert werden darf, beantwortet jede belegte Zelle für sich, und nichts in der Platzierungsfunktion prüft, ob ein Weg erhalten bleibt.24 Jedes spätere Spiel in diesem Beitrag fährt dieses Modell mit einem anderen Budget: 150 Gegenstände pro Raum in Animal Crossing: New Horizons, laut Nookipedia, mit einem Sonntagsbrief, der den Raum bewertet; 150 bis 600 im Innenbereich in Final Fantasy XIV seit Patch 7.5, je nach Wohnungstyp; 99 in einem Club-Penguin-Iglu, laut einer einzigen Fanquelle.5678 Meine App Kiradex hat Räume, die ihre Grafikschmiede aus einem Vokabular von 23 Möbelstücken einrichtet, von denen die Spielerin oder der Spieler kein einziges verschieben kann. Dieser Beitrag vermisst den Kanon, formuliert die Regeln mit ihren Zahlen, überträgt sie auf SwiftData und SwiftUI und endet mit dem Briefing für ein Einrichtungssystem, das Kiradex noch nicht gebaut hat: eine Obergrenze von 16 pro Etage, eine Wegregel, die der Platzierungsfunktion von Smaragd fehlt, eine wöchentliche Wertung, deren jeder Punkt aufgeführt wird, und ein Katalog, der sich nur durch Spielen freischaltet.910
Kurzfassung
- Sechzehn ist ein Kompositionsbudget, keine Speichergrenze. Smaragd platziert 16 Dekorationen in einer Basis und 12 im Schlafzimmer, bietet aber Platz für 150 besessene Dekorationen in acht Fächern nach Kategorie, sodass man mehr besitzen kann, als hineinpasst. Jede platzierte Dekoration kostet zwei Bytes, eine ID und eine Position mit x und y als Nibbles, womit das gesamte Layout einer Basis in 32 Bytes passt.111122
- Die Regeln stecken im Boden. Smaragd kennt fünf Platzierungsberechtigungen (Boden, begehbarer Boden, dahinter, Wand und auf einer Oberfläche). Die oberen Zellen eines Tisches tragen ein Verhalten, das eine kleine Dekoration darauf stehen lässt; sobald ein Tisch steht, kann also eine Puppe darauf. 18 Dekorationen tragen kleine Dinge, 14 große. Das Schlafzimmer nimmt nur Puppen und Kissen an.1324
- Obergrenzen steigen mit der Plattform, und eine davon ist zugleich ein Frame-Budget. Animal Crossing erlaubt laut Nookipedia 24 Gegenstände pro Raum in Wild World, 64 in City Folk, 48 in New Leaf und 150 in New Horizons. Final Fantasy XIV hob die Grenzen für den Innenbereich in Patch 7.5 um die Hälfte an, auf 150 bis 600, und die Patchnotes fügen hinzu, dass ab 400 Einrichtungsgegenständen auf dem Bildschirm diejenigen auf einer anderen Etage nicht mehr gezeichnet werden.57
- Eine Wertung hat aufgeführte Quellen, einen festen Tag und eine Messlatte, die mit dem Haus steigt. Laut Nookipedias Tabelle zur Wohnbewertungsakademie (Happy Home Academy) gibt es je 1.000 Punkte bei 6, 10, 15 und 20 Gegenständen in einem Raum, dazu Boni für Serie, Set, Kategorie, Farbe und Feng-Shui, und die Schwelle für den Rang S steigt mit dem Haus von 15.000 auf 90.000. Die Seite nennt für diese New-Horizons-Zahlen keine Quelle.6
- Kataloge wachsen durch Kauf, durch Spielen oder durch beides. In Smaragd werden 90 von 120 Dekorationen für Geld verkauft, 24 nie (Preise, Kampfpunkte und Geschenke), und zwei weitere kosten 6.000 und 8.000 Asche, die Schritt für Schritt gesammelt wird. Stardew verkauft ein zufälliges Tagessortiment; nach dem ersten Hausausbau verkauft Robin außerdem den Möbelkatalog (Furniture Catalogue) für 200.000g, der danach die in ihm gelisteten Möbel für 0g in unbegrenzter Menge verkauft, während manche Stücke weiterhin nur aus dem Museum, von Festen und aus anderen Quellen kommen. Habbo verkauft Möbel, und manche davon sind absichtlich knapp oder zufällig.14151617
- Besucher schauen und fassen nichts an. In Animal Crossing können Besucher die Möbel im Haus einer anderen Person benutzen, aber nicht „modify the interior in any way“ (die Einrichtung in irgendeiner Weise verändern). In Habbo können Besucher ohne die Rechte der Besitzerin oder des Besitzers keine Möbel abstellen oder verschieben. Club Penguin erlaubt ein Like pro Design und Tag, und seine Gesamtsumme (Grand Total) „will never decrease“ (sinkt nie), laut einer Fankopie seiner Hilfeseiten.51819
- Was das Kiradex gibt. Ein Briefing, keine ausgelieferte Funktion: Platzierung nach Zellen für 20 der 23 Stücke der Schmiede; eine Wegregel von der Tür zur Treppe, zum Gastgeberplatz und zu je einer vorderen Zelle jeder Ausstellungsgruppe, geprüft durch einen Lauf; 16 Stücke pro Etage, wobei die Starträume mit 8 ausgeliefert werden; sechs Tapeten und sechs Böden, gezeichnet von der Schmiede; ein Sonntagsbrief, auf dem jede Punktequelle steht (höchstens 23.600); ein Katalog, der sich durch Spielen freischaltet, aus den heute verfügbaren Leveln und Pins, abgeleitet aus der synchronisierten Sammlung, den Quest-Stempeln, die die App auf dem Gerät speichert, und drei neuen synchronisierten Zählern für Schritte, Raumbesuche und die Hausstufe des Briefs; Besuche nur zum Ansehen, sobald der Server ein Layout speichern kann; ein SwiftData-Modell ohne Eindeutigkeitsbedingung, weil die CloudKit-Synchronisierung keine durchsetzen kann; und eine Platzierung per Ziehen, die VoiceOver auch ohne Berührung ausführen kann.9202122
1. Smaragd: sechzehn Dinge auf einem Raster, gemessen am Quellcode
Die kleinste vollständige Ausprägung dieses Genres ist das Dekorationssystem von Pokémon Rubin-, Saphir- und Smaragd-Edition, und fast alles daran sind Daten. Ich habe es aus der Smaragd-Dekompilierung von pret bei Commit 731ad5b gelesen (eingecheckt am 1. Oktober 2026), mit zwei Skripten, die den Quellcode parsen und das Spiel nie ausführen: eines für den Katalog, die Obergrenzen, die tragenden Oberflächen und die Raumgrößen, eines für die Herkunft jeder Dekoration. Ihre Ausgaben liegen neben ihnen.214 Jede Zahl in diesem Abschnitt stammt aus diesen beiden Ausgaben oder aus der Quelldatei, die eine Fußnote nennt.
Die Obergrenzen
Drei Konstanten setzen die Grenzen. DECOR_MAX_SECRET_BASE ist 16, DECOR_MAX_PLAYERS_HOUSE ist 12 und SECRET_BASES_COUNT ist 20, die Zahl der Basen, die der Spielstand hält: die eigene und die von anderen Spielern empfangenen.12 Die Grenze für das Platzierte ist von der Grenze für den Besitz getrennt. Der Spielstand hält 150 besessene Dekorationen in Fächern nach Kategorie: 10 Tische, 10 Stühle, 10 Pflanzen, 30 Ornamente, 30 Matten, 10 Poster, 40 Puppen und 10 Kissen.112 Man kann also mehr besitzen, als ein Raum fasst (ein neues Spiel beginnt mit leeren Fächern), und die Auswahl dessen, was hineinkommt, ist das eigentliche Spiel.23
Eine platzierte Dekoration kostet zwei Bytes. Eine Basis speichert decorations[16], je eine ID, und decorationPositions[16], je ein Byte, mit x im oberen und y im unteren Nibble; eine Basis wird also als Raster von höchstens 16 mal 16 Zellen adressiert, und das gesamte Layout einer Basis passt in 32 Bytes.1112 Ich lese diese Größe als den Grund, warum der Spielstand zwanzig Basen halten kann, die eigene und die anderer Spieler.
Der Katalog
gDecorations[] hat 121 Einträge. Eintrag 0, DECOR_NONE, ist ein leerer Platz, der die Daten des kleinen Tisches wiederverwendet; es bleiben also 120 Dekorationen mit den IDs 1 bis 120.32 Nach Kategorie sind es 35 Puppen, 23 Ornamente, 18 Matten, 10 Poster, 10 Kissen, 9 Tische, 9 Stühle und 6 Pflanzen.2 Nach Form, in Zellen, sind es 71 mit 1 mal 1, 22 mit 1 mal 2, 13 mit 3 mal 3, 5 mit 2 mal 1, 4 mit 2 mal 2, 3 mit 3 mal 2 und je eine mit 2 mal 4 und 4 mal 2. Der Header deklariert außerdem 3 mal 1 und 1 mal 3, die keine Dekoration verwendet. Eine Dekoration belegt 1 bis 9 Zellen, im Schnitt 2,43.213 Zählt man den leeren Platz als Dekoration mit, wie es meine früheren Notizen für den Beitrag über Bauten taten, ergeben sich 72 Einzelzellen-Stücke und 19 mit festem Boden; ohne ihn sind es 71 und 18.2
Der größte Teil des Katalogs von Smaragd ist eine Zelle groß; die großen Stücke sind Tische, die 3-mal-3-Matten und einige Ornamente.243
Die Preise in der Tabelle reichen von 500 für die günstigsten Matten bis 10.000 für die teuersten Ornamente und Puppen. Drei haben den Preis 0, zwei Schilde und ein Glasornament, und alle drei sind Preise.23
Fünf Berechtigungen und Oberflächen, die Daten sind
Jede Dekoration trägt eine von fünf Berechtigungen. Der Header nennt sie „collision and placement permissions, in that order“ (Kollisions- und Platzierungsberechtigungen, in dieser Reihenfolge).13 Nach Anzahl:
| Berechtigung | Bedeutung | Dekorationen |
|---|---|---|
| Fester Boden | blockiert den Weg, steht auf dem Boden | 18: alle 9 Tische, 9 Ornamente |
| Begehbarer Boden | wird überlaufen, steht auf dem Boden | 37: alle 18 Matten, alle 9 Stühle, 10 Ornamente |
| Boden dahinter | blockiert, und die oberste Reihe darf an der Rückwand sitzen | 10: alle 6 Pflanzen, 4 Ornamente |
| Wand | hängt an der Rückwand | 10: alle 10 Poster |
| Sprite | eine Figur, die auf einer Oberfläche steht | 45: alle 35 Puppen, alle 10 Kissen |
Zählungen von measure_emerald_decor.py auf src/data/decoration/header.h.2
Der klügste Teil: Eine Oberfläche ist eine Eigenschaft einer Zelle, nicht ein Stück Code. Jede Dekoration wird aus Metatiles gezeichnet, und jedes Metatile trägt ein Verhaltensbyte. Achtzehn Dekorationen haben Zellen mit dem Verhalten MB_HOLDS_SMALL_DECORATION: 7 der 9 Tische, 3 Ziegel, ein Reifen und 7 Matten. Vierzehn haben MB_HOLDS_LARGE_DECORATION: dieselben 7 Tische und 7 Matten.2 Eine Puppe mit 1 mal 2 braucht darunter eine „große“ Zelle; jede andere Puppe und jedes Kissen nimmt eine „kleine“ oder eine „große“.4 Sobald ein Tisch platziert ist, hat der Boden also neue Zellen, die für eine Puppe „ja“ antworten, und dieselbe Platzierungsfunktion behandelt beides. So wirkt ein Raum mit 16 Gegenständen voll: 45 der 120, die Sprites, stehen auf 18 Oberflächenstücken.2
Manche Dekorationen tun auch etwas. Acht Notenmatten spielen einen Ton, wenn man darauf tritt; eine Sprungmatte, eine Drehmatte und eine Glitzermatte tun, was ihr Name sagt; drei Ballons und ein Schlammball platzen; dazu kommen eine zerbrechliche Tür, eine Rutsche und ein Sandornament. Jedes davon ist ein Verhalten auf den Metatiles der Dekoration (MB_SECRET_BASE_SOUND_MAT, _JUMP_MAT, _SPIN_MAT, _GLITTER_MAT, _BALLOON, _BREAKABLE_DOOR, MB_SLIDE_SOUTH, _SAND_ORNAMENT), gelesen aus der Attributdatei des Tilesets der Geheimbasis.225
Platzierung ist eine Frage, die jede Zelle beantwortet
CanPlaceDecoration in src/decoration.c geht die Zellen durch, die die gehaltene Dekoration belegen würde, und stellt jeder eine Frage. Stücke für Boden und begehbaren Boden brauchen unter jeder Zelle einfachen Boden (MB_NORMAL); nur das feste Brett darf ein Loch abdecken. Auf der Zelle darf kein Objekt stehen. Die Zelle, auf der die Spielfigur beim Öffnen des Menüs stand, darf das Stück nur mit einem Tile vom normalen Ebenentyp belegen; hat sein eigenes Tile auf dieser Zelle einen anderen Ebenentyp, lehnt die Funktion es dort ab. Ein Stück für den Boden dahinter braucht Boden unter allem außer seiner obersten Reihe, die an der Nordwand sitzen darf. Ein Wandstück braucht in jeder Zelle Nordwand. Ein Sprite braucht darunter eine tragende Zelle.4 Im Schlafzimmer lehnt das Menü jede Kategorie außer Puppen und Kissen ab: DecorationItemsMenuAction_AttemptPlace zeigt gText_CantPlaceInRoom, wenn isPlayerRoom gesetzt ist.4
Nichts in CanPlaceDecoration prüft, ob ein Weg erhalten bleibt. Der einzige Schutz, den die Funktion dem Laufweg bietet, ist jene Bedingung für die Zelle, auf der man stand. Nach meiner Lesart dieser Funktion kann man den Computer der Basis mit Tischen zustellen, und das Spiel lässt es zu.4 Ich komme im Briefing darauf zurück, denn ein Raum, den andere besuchen, braucht genau die Prüfung, die diese Funktion nicht vornimmt.
Die Räume, an denen die Obergrenze gemessen wird
Die 24 Basislayouts sind sechs Stile in je vier Größen. Mit Wänden aus jeder map.bin gemessen, sind sie 7 bis 17 Zellen breit und 7 bis 17 Zellen tief, von 99 Zellen (11 mal 9) bis 196 (14 mal 14), mit den langen schmalen Varianten bei 7 mal 16, 10 mal 17 und 17 mal 8.226 Die begehbaren Zellen, aus den Kollisionsbits jedes Layouts gelesen, reichen von 44 bis 81, im Schnitt 60,2.2 Die Obergrenze von 16 entspricht 0,27 der begehbaren Fläche einer durchschnittlichen Basis.2 Das Schlafzimmer, das Obergeschoss beider Spielerhäuser, misst 9 mal 8 mit 54 begehbaren Zellen, und seine Obergrenze ist 12.21
Die Bodenfläche allein überschätzt das Gedränge, denn viele der 16 sind Matten, über die man läuft, oder Puppen auf Tischen. Die Obergrenze budgetiert die Komposition, nicht den Boden.
Die Zelle im Verhältnis zur Figur
Das Laufsheet der Spielfigur misst 144 mal 32 Pixel, neun Frames zu 16 mal 32, der Frame der Figur ist auf dem 16-Pixel-Metatile-Raster also eine Zelle breit und zwei Zellen hoch. Die Pose beim Dekorieren ist ein einzelner Frame von 16 mal 32.27 Die Rasterzelle ist die Breite des Frames, und jede Dekoration ist in dieser Einheit bemessen.
Wie der Katalog wächst
Das Herkunftsskript durchsuchte die Laden-, Preis- und Geschenkskripte nach jeder Dekorationskonstante. 90 der 120 werden in fünf Läden für Geld verkauft. Drei sind Tauschware am Preisschalter, fünfzehn werden gegen Kampfpunkte getauscht, und zehn werden per Skript verschenkt: wieder die drei Gegenstände vom Preisschalter, zwei Zelte für das Lösen eines Rätselhauses, ein Ornament aus dem Obergeschoss eines Museums, zwei Schilde vom Gastgeber der Kampfanlage und zwei Puppen von Bewohnern. Vierundzwanzig werden verdient und nie für Geld verkauft.14
Zwei weitere kauft man mit Laufen. Eine Glasbläserei tauscht einen Stuhl gegen 6.000 und einen Tisch gegen 8.000 Asche, und Asche wird mit einer Einheit pro Schritt durch aschebedecktes Gras gesammelt, solange die Spielfigur den Beutel trägt, bis zu 9.999 (VAR_ASH_GATHER_COUNT).15 Ich lese dieses Paar als die reinste Form des Freischaltens durch Spielen im Kanon: Kein Geld wechselt den Besitzer, nur Schritte. Der Beutel zeigt keine Zahl an. Seine Feldverwendung ist die Funktion für Gegenstände, die sich nicht benutzen lassen, und seine Beschreibung ist fester Text über das Sammeln und Aufbewahren von Vulkanasche.28 Außer dem Schrittzähler selbst liest nur das Skript der Glasbläserei die Zahl: Reicht sie nicht, zieht es die gesammelte Asche vom Preis ab und nennt die Differenz als Zahl der Schritte, die noch zu gehen sind.15
Vier Dekorationen, drei legendäre Puppen und eine weitere Puppe, werden von keinem Laden-, Preis- oder Geschenkskript im Suchbereich referenziert. Sie kommen möglicherweise über Tausch oder eine Verbindungsfunktion; ich habe sie nicht verfolgt, und die Zahlen 90 verkauft und 24 nur verdient stützen sich auf eine Skriptsuche in Laden-, Preis- und Geschenkskripten, bei der diese vier unverfolgt blieben.14
Was Smaragd lehrt
Ein Dekorationssystem besteht aus drei Tabellen und einer Funktion: einer Katalogzeile pro Stück (Berechtigung, Form, Kategorie, Preis, Metatiles), einem Layout, dessen Zellen sagen, was sie sind (Boden, Nordwand, Loch), einem Besitzinventar, das größer ist als die Platzierungsgrenze, und einer Platzierungsprüfung, die jeder belegten Zelle eine Frage stellt. Oberflächen sind Zellen, die einem kleineren Stück „ja“ antworten. Die Obergrenze zählt platzierte Stücke und sonst nichts. Die Lücke ist der Laufweg: Die Platzierungsfunktion prüft Zellen, nie Wege.
2. Animal Crossing: 150 Gegenstände und ein Brief am Sonntag
Dieser Abschnitt stützt sich auf Nookipedia, ein Fan-Wiki, gelesen und gespeichert am 5. Oktober 2026; nach Nintendos eigenen Zahlen habe ich nicht gesucht. Wo das Wiki nichts belegt, sage ich es.56
Die Obergrenze und die Räume
Jedes Spiel der Reihe begrenzt die Gegenstände in einem Raum, und die Grenze ist gewachsen. Nookipedia nennt 24 „furniture and clothing items“ (Möbel- und Kleidungsstücke) pro Raum in Wild World, 64 in City Folk und 48 in New Leaf. Für New Horizons: „A maximum of 150 items can be placed in each room of the house, including wall and ceiling-mounted furniture.“ (In jedem Raum des Hauses können höchstens 150 Gegenstände platziert werden, Wand- und Deckenmöbel eingeschlossen.)5
Die Räume in New Horizons laut der Ausbautabelle derselben Seite: Das Zelt misst 4 mal 4; das Haus 6 mal 6; der Ausbau des Hauptraums macht daraus 8 mal 8; der hintere, der linke und der rechte Raum messen je 6 mal 6; Obergeschoss und Keller 10 mal 6. „Unlike previous games, only the main room can be expanded in size, as all other rooms have a fixed size.“ (Anders als in früheren Spielen lässt sich nur der Hauptraum vergrößern, alle anderen Räume haben eine feste Größe.)5 150 Gegenstände in einem Raum von 6 mal 6 sind 4,2 Gegenstände pro Bodentile, was nur funktioniert, weil Wände, Decken und die Oberseiten anderer Möbel Gegenstände aufnehmen, ohne Boden zu verbrauchen (meine Rechnung aus den beiden Zahlen).529
Möbel haben „a size in tiles that it takes up when placed, ranging from 1.0×0.5“ (eine Größe in Tiles, die sie platziert einnehmen, ab 1.0×0.5) bis 3 mal 3, und in New Horizons können sie „can also now be pushed in half-tile increments“ (jetzt auch in halben Tile-Schritten verschoben werden).29 New Horizons ordnet sie in Wohnmöbel, Verschiedenes für Boden oder Oberflächen, Wandstücke und Deckendekor, das mit Version 2.0 kam.29 Von den Spielen, deren Platzierungsraster dieser Beitrag liest (die Zellen von Smaragd, die Tiles von Stardew und die von New Horizons), verschiebt nur New Horizons Möbel um weniger als ein ganzes Tile. Das Platzierungsraster von FFXIV habe ich nicht gelesen, und die feineren Schritte, die für Habbo zitiert werden, sind Stapelhöhen aus einem Drittanbieter-Client (Abschnitt 3).
Der Katalog
Stand Version 3.0.2 zählt Nookipedia in New Horizons 2.076 Möbelstücke, 1.074 davon per Update hinzugekommen. Eine Serie umfasst „around 10 furniture items, as well as a matching wallpaper and flooring“ (etwa 10 Möbelstücke sowie eine passende Tapete und einen passenden Boden).29 Das Wiki zählt 262 Tapeten Stand Version 1.9.0 und 215 Bodenbeläge.3031 Tapete und Boden wechseln pro Raum, und Version 2.0 brachte eine Akzentwand: „a second wall covering can be applied to single wall in the room“ (auf eine einzelne Wand des Raums lässt sich eine zweite Wandverkleidung aufbringen).5
Die Wohnbewertungsakademie
Die Wertungshälfte ist der Teil, den Kiradex übernimmt. Nookipedia: Die Akademie „sends an evaluation by mail most Sunday mornings, which cannot be disabled“ (schickt an den meisten Sonntagmorgen eine Bewertung per Post, die sich nicht abschalten lässt). Der Rang ist B, A oder S, und die Schwelle für S steigt mit jedem Ausbau: 15.000 für das erste Haus, 23.000 nach dem Ausbau des Hauptraums, dann 35.000, 47.000, 60.000, 75.000 und 90.000 mit dem Keller.6
Die Boni in New Horizons, wie das Wiki sie tabelliert:
| Kriterium | Punkte |
|---|---|
| 6, 10, 15 und 20 Möbelstücke in einem Raum | 1.000 je Schwelle |
| Glücksgegenstände | 777 pro Stück |
| Wandmöbel | 400 pro Stück, höchstens drei |
| 4 oder mehr Stücke einer Serie | 1.000 pro Stück |
| Ein vollständiges Möbelset | 800 pro Stück |
| 3 oder mehr Stücke einer Kategorie | 500 pro Stück |
| 70 % oder mehr der Gegenstände eines Raums in einer Farbe | 200 pro Stück |
| 90 % oder mehr in einer Farbe | 600 pro Stück |
| Rotes, grünes oder gelbes Feng-Shui | 500 |
| Kakerlaken | minus 2.500 pro Stück |
| Nicht-Möbel auf dem Boden | minus 1 pro Stück |
| Müll auf dem Boden | minus 500 pro Stück |
| Gerichtete Gegenstände, die zur Wand zeigen | minus 300 pro Stück |
Nookipedia, „Happy Home Academy“, die New-Horizons-Tabellen, gespeichert am 5. Oktober 2026; auf der Seite ohne Beleg.6
Diese Zahlen sind die unsichersten in diesem Abschnitt. Die Bonus- und Abzugstabellen tragen keinen Beleg. Die Belohnungstabelle darunter sagt, sie „Includes data sourced from the Data Spreadsheet for Animal Crossing New Horizons“ (enthält Daten aus der Datentabelle für Animal Crossing New Horizons), zusammengestellt von namentlich genannten Mitwirkenden, und der Abschnitt zu den Punkten pro Gegenstand in New Horizons lautet „This section is a stub“ (dieser Abschnitt ist unvollständig).6 Die Arithmetik ist also eine Fanrekonstruktion. Das Briefing am Ende übernimmt ihre Form (aufgeführte Quellen, Mengenschwellen, Set- und Farbboni, ein fester Tag) und keine ihrer Zahlen.
Zwei Entscheidungen darin zählen für jede App, die eine wöchentliche Raumwertung will. Die Messlatte steigt mit dem Haus, ein größerer Raum macht den höchsten Rang also nicht leichter. Und der Brief kommt an einem festen Tag, an den meisten Sonntagmorgen, und lässt sich nicht abschalten.6 Abwesenheit ist dort nicht kostenlos: Die Hausseite sagt, wer sein Haus „for at least one week“ (mindestens eine Woche lang) vernachlässigt, findet es von Kakerlaken befallen, und die Tabelle oben zieht pro Stück 2.500 Punkte ab.56 Das Briefing behält den festen Tag und streicht die Strafe.
Besuche
In jedem Spiel der Reihe gilt laut Wiki: „a player may enter any other player’s house freely“ (man darf das Haus jeder anderen Person frei betreten). Man darf die Möbel benutzen, aber keine Gegenstände ablegen oder aufheben „or modify the interior in any way“ (oder die Einrichtung in irgendeiner Weise verändern).5 Ein Traumbesuch auf einer anderen Insel erreicht dasselbe Ziel auf anderem Weg. Auf der Wiki-Seite der Figur, die die Träume betreut, sagt der Abschnitt zu New Leaf, dass im Traum „any changes will not be saved and items cannot be brought back to the real world“ (keine Änderungen gespeichert werden und Gegenstände nicht in die reale Welt mitgenommen werden können), und der Abschnitt zu New Horizons sagt, ihre Dienste „work the same as they do in New Leaf“ (funktionieren genauso wie in New Leaf). Das Hochladen eines Traums bringt der Gastgeberin oder dem Gastgeber ein Traum-Sternis-Ticket (Dream Bell Exchange Ticket) im Wert von 5.000 Sternis ein, und ein weiteres für jede Aktualisierung.32 Nach meiner Lesart ist das die sicherste Art von Besuch in diesem Beitrag für eine Kinder-App: Der Besuch läuft durch eine Kopie und kann nichts verändern, was erhalten bleibt, und wer teilt, wird dafür belohnt.
3. Habbo, Stardew, Final Fantasy XIV, Club Penguin und woher das Modell kam
Habbo: Der Raum ist das Produkt, und das Produkt wird verkauft
Habbos eigenes Hilfecenter nennt die Regeln für Besitz und Besuch ohne Umschweife. „You can own 200 rooms.“ (Sie können 200 Räume besitzen.)33 Böden und Wände sind dauerhaft, sobald sie angebracht sind: „Wallpaper and flooring are stuck down - so once you put them down, they can’t be picked back up. You can put new wallpaper or floor down if you wish to change the look of your room.“ (Tapete und Boden sind festgeklebt; einmal verlegt, lassen sie sich nicht wieder aufnehmen. Wer das Aussehen des Raums ändern will, kann neue Tapete oder neuen Boden verlegen.)33 Besucher dürfen nichts anfassen: „You can’t drop or manipulate furni in other Habbo’s rooms unless you’re a member of a group, and the owner of that group has enabled you to participate in the building of that room.“ (In den Räumen anderer Habbos können Sie keine Möbel abstellen oder verändern, es sei denn, Sie sind Mitglied einer Gruppe, deren Besitzer Ihnen die Mitarbeit am Bau dieses Raums erlaubt hat.)18
Die Möbelwirtschaft ist kaufgetrieben. „To buy furni you need credits, diamonds or duckets.“ (Zum Kauf von Möbeln brauchen Sie Credits, Diamanten oder Duckets.)18 Der Builders Club verleiht Möbel bis zu einer Grenze, die mit jedem Mitgliedsmonat um 250 steigt, schließt das Speichern eigener Raumlayouts im Grundriss-Editor ein und verspricht: „Furni limits never go down.“ (Möbelgrenzen sinken nie.)34 Die Seite mit den Möbeldefinitionen beschreibt Kampagnenmöbel, die „for 4-12 months in order to leave an ample window for traders to build their businesses around them“ (4 bis 12 Monate lang zurückgehalten werden, damit Händler genug Zeit haben, ihr Geschäft darauf aufzubauen), Raritäten, die „will never be re-released“ (nie wieder erscheinen), knackbare Raritäten, die man kauft und dann knackt, „to reveal another, random rare furni“ (um ein anderes, zufälliges seltenes Möbel freizulegen), und LTDs, „a special type of rare, which comes in limited quantities“ (eine besondere Art von Rarität in begrenzter Stückzahl).17 Handel erfordert einen Handelspass, und „There is no guide to what items of furni are worth“ (es gibt keinen Leitfaden dazu, was Möbel wert sind).35 Habbo begrenzt sogar den Zufall in Räumen: „Placing more than three chance elements will disable all randomiser functions in the room.“ (Wer mehr als drei Zufallselemente platziert, deaktiviert alle Zufallsfunktionen im Raum.)36
Habbos eigene Seiten nennen weder das Raster noch die Stapelhöhen noch eine Möbelgrenze pro Raum; die Suche im Hilfecenter nach „furni“, „stack“ und „floor plan“ lieferte keinen Artikel, der das tut.37 Die Zahlen, die kursieren, stammen aus Nitro, einem quelloffenen Drittanbieter-Client. Dessen Konstanten für den Grundriss-Editor erlauben bis zu 64 Tiles pro Achse und ein Höhenschema mit 27 Stufen, wie es der Beitrag über Bauten in dieser Reihe aus derselben Datei zitiert hat; meine früheren Notizen ergänzen aus diesem Client ein Werkzeug für die Stapelhöhe von 0 bis 40 in Schritten von 0,01, das ich für diesen Beitrag nicht erneut gelesen habe.3839 Alle drei sind als Zahlen des Clients zu behandeln, nicht als die von Sulake.
Nach meiner Lesart zeigt Habbo, was aus der Einrichtungsschleife wird, wenn der Katalog das Geschäft ist. Seine Besuchsregel ist die, die man übernehmen sollte; seine Wirtschaft (absichtliche Knappheit, zufällige Inhalte, Handelswert) die, die man ablehnen sollte.
Stardew Valley: ein Katalog, einmal gekauft, danach kostenlose Möbel
Die Seite „Furniture“ des Stardew Valley Wiki, Revision 193159, listet 718 Gegenstandszeilen in 26 Abschnitten, 615 verschiedene Namen. Das sind meine Zählungen der Zeilen auf der Seite; der Abschnitt Movie Posters verwendet anderes Markup und wurde übersprungen, und „verschieden“ fasst einen Gegenstand, der in zwei Abschnitten steht, zu einem zusammen.4016 Die Seite „Wallpaper“, Revision 193801, zeigt 137 Tapeten (123 im Katalog, 12 außerhalb, 2 nicht erhältlich), und die Seite „Flooring“, Revision 190285, 97 Bodenbeläge, beide anhand der Symbole auf den Seiten gezählt, nicht anhand der Datendateien des Spiels.404142
Der Katalog wächst auf zwei Wegen zugleich. Robin und der fahrende Händlerwagen „offer a random selection of furniture each day they are open“ (bieten an jedem Öffnungstag eine zufällige Auswahl an Möbeln an). „After the first Farmhouse upgrade, Robin also offers the Furniture Catalogue for sale“ (Nach dem ersten Ausbau des Farmhauses bietet Robin auch den Möbelkatalog zum Kauf an), laut der Katalogtabelle der Seite für 200.000g, und einmal aufgestellt verkauft er die in ihm gelisteten Möbel für 0g „in unlimited quantity“ (in unbegrenzter Menge). 278 Zeilen der Möbelseite nennen den Möbelkatalog als Quelle.1640 Die Ausnahmen der Seite bleiben Ausnahmen: „Some furniture can be obtained only by donating items to the Museum“ (Manche Möbel erhält man nur durch Spenden an das Museum), oder auf Festen, im Casino und aus anderen Quellen.16 Ein Meilenstein im Spiel und ein großer Kauf in der Spielwährung beenden also die Knappheit für das, was der Katalog listet, und nur dafür.
Die Rückmeldung bei der Platzierung erfolgt pro Tile: „Furniture will display a green square on tiles where it can be placed. The tile will turn red if the furniture cannot be placed.“ (Möbel zeigen auf Tiles, auf denen sie platziert werden können, ein grünes Quadrat; kann das Möbel nicht platziert werden, wird das Tile rot.)16 Eine Tapete ist eine Geste für eine Fläche: Tapeten „cover the whole room they’re placed in“ (bedecken den ganzen Raum, in dem sie angebracht werden), und um eine anzubringen, „the character must be facing up by its wall“ (muss die Figur an der Wand nach oben blicken); sie sind „single-use and do not stack“ (Einwegartikel und nicht stapelbar).41 Das Farmhaus misst innen vor dem Ausbau 10 mal 7, auf Tiles von 16 Pixeln, wie der Beitrag über Bauten aus dem Wiki zitiert hat.39
Final Fantasy XIV: eine Obergrenze, die zugleich ein Frame-Budget ist
Die Patchnotes von Square Enix im Lodestone für Patch 7.5 hoben jede Wohngrenze an. Einrichtungsgegenstände im Innenbereich stiegen von 100 auf 150 für Apartments und private Kammern, von 200 auf 300 für Hütten, von 300 auf 450 für Häuser und von 400 auf 600 für Villen; im Außenbereich von 20 auf 40, von 30 auf 60 und von 40 auf 80.7 Dieselben Notes nennen den Grund in eigenen Worten: „Please note that up to 400 furnishings can be displayed on-screen at once. If more than 400 furnishings are on-screen simultaneously, those on a different floor to your character will stop being displayed, with small, more distant furnishings being hidden first.“ (Bitte beachten Sie, dass höchstens 400 Einrichtungsgegenstände gleichzeitig angezeigt werden können. Sind mehr als 400 gleichzeitig auf dem Bildschirm, werden diejenigen auf einer anderen Etage als der Ihrer Figur nicht mehr angezeigt, wobei kleine, weiter entfernte zuerst ausgeblendet werden.)7 Eine Obergrenze ist zugleich ein Gestaltungsbudget und ein Renderbudget.
Die Notes ergänzen außerdem „Furnishings from the FFXIV Furnishing Design Contest“ (Einrichtungsgegenstände aus dem FFXIV-Einrichtungs-Designwettbewerb): ein Community-Wettbewerb, dessen Gewinnerentwürfe in diesem Patch zu Möbeln wurden.7 Das ist die sichere Form eines Wettbewerbs: Spieler gestalten, das Studio bewertet und liefert aus.
Grundstücksgrößen stehen nicht in diesem Beitrag. Der Wohnleitfaden von Square Enix lieferte am 5. Oktober 2026 HTTP 404, und ich habe keine andere offizielle Seite versucht; FFXIV steuert also Gegenstandsgrenzen aus den Lodestone-Notes bei und sonst nichts.7
Club Penguin: ein Like pro Tag und eine Summe, die nie sinkt
Jede Club-Penguin-Angabe hier beruht auf einer einzigen Quelle. Die archivierten offiziellen Blogbeiträge, die das Club Penguin Wiki zitiert, lieferten am 5. Oktober 2026 zweimal HTTP 429 von der Wayback Machine, ich konnte sie also nicht prüfen.43
That Penguin Game gibt wieder, was es als die Hilfeseiten des Spiels ausweist; diese Herkunft habe ich nicht geprüft. Seine Seite „Your Igloo“: „You can Like any igloo design once every day!“ (Sie können jedes Iglu-Design einmal am Tag liken!) Jedes Design „earns its own individual Likes“ (sammelt seine eigenen Likes), die sich zur Gesamtsumme (Grand Total) addieren, und „Likes are permanent, so your Grand Total Likes will never decrease, even if you delete an igloo design!“ (Likes sind dauerhaft, Ihre Gesamtsumme sinkt also nie, selbst wenn Sie ein Iglu-Design löschen!) Der Reiter „Popular“ sortiert Iglus nach der Gesamtsumme der Likes, und ein Iglu öffnet sich für „Everyone“ (alle) oder nur für „Friends“ (Freunde).19
Das Club Penguin Wiki sagt, dass „igloos have a limit preventing more than 99 units of furniture being placed at once“ (Iglus eine Grenze haben, die verhindert, dass mehr als 99 Möbelstücke gleichzeitig platziert werden), dass die meisten Möbel eine Besitzgrenze von 99 pro Typ haben und dass man das eigene Iglu einrichten kann, „but not other player’s igloos“ (aber nicht die Iglus anderer).8 Einrichten war ein Mitgliedervorteil: Ab dem 1. November 2005 konnten Spieler ohne Mitgliedschaft Iglus haben, aber nicht einrichten, und ab dem 26. Juli 2012 erhielten sie 6 kostenlose Möbelstücke, ein Bodenstück, vier normale Stücke und ein Wandstück.438
Die Geschichte der Iglu-Wettbewerbe laut Wiki: Der erste wurde in Ausgabe 9 der spielinternen Zeitung angekündigt, erschienen am 15. Dezember 2005, mit einem Gewinner, der 5.000 Münzen erhielt. Spätere Wettbewerbe gaben ihre Gewinner und Zweitplatzierten ein bis vier Wochen nach dem Aufruf bekannt, immer mit Münzen und manchmal mit Möbeln. Ab dem Halloween-Wettbewerb 2008 kürten Spielfiguren die Gewinner, und ihre Kommentare erschienen mit den Iglus; ab 2009 reichte ein Knopf am Iglu den Beitrag ein; der letzte Wettbewerb lief im Dezember 2012. Ein Beispiel: Der Ye Olde Igloo Contest von 2008 zahlte zehn Gewinnern je 25.000 Münzen und zwanzig Zweitplatzierten je 15.000.44
Die Sims: Die Menschen waren da, um das Haus zu bewerten
Das Modell aus Raster und Katalog hat eine Entstehungsgeschichte, und es ist eine Geschichte über Wertung. Meine Quelle dafür ist ein einziges Interview: Will Wright im Gespräch mit Tristan Donovan, veröffentlicht von Game Developer am 23. Mai 2011. Einen aufgezeichneten Vortrag von Wright aus den Jahren 1999 oder 2000 über den Baumodus habe ich nicht gefunden.45
Zur Inspiration: „one of the original things that was a really inspiration for The Sims was this book, A Pattern Language, by Christopher Alexander.“ (Eine der ursprünglichen echten Inspirationen für The Sims war dieses Buch, A Pattern Language von Christopher Alexander.) Zur Wertung: „In some sense I wanted The Sims originally to be an architecture game where it was analyzing these patterns. So the people in The Sims originally were just there to score the architecture.“ (In gewissem Sinn wollte ich The Sims ursprünglich als Architekturspiel, das diese Muster analysiert. Die Menschen in The Sims waren ursprünglich nur dazu da, die Architektur zu bewerten.) Zum Namen: „my original name for it was Doll House. We did some test marketing and found out that the name didn’t go very well with males.“ (Mein ursprünglicher Name dafür war Doll House. Wir haben Markttests gemacht und festgestellt, dass der Name bei Männern nicht gut ankam.) Zu Objekten: „Everything we put in the world is advertising“ (Alles, was wir in die Welt setzen, ist Werbung), ein Modell, das er auf die Pheromonspuren von SimAnt zurückführt.45
Das Sims Wiki, ein Fan-Wiki und eine einzige Quelle, beschreibt den ausgelieferten Bildschirm. Im Kaufmodus können Spieler „purchase items from an object catalog and place them on the current lot“ (Gegenstände aus einem Objektkatalog kaufen und auf dem aktuellen Grundstück platzieren); The Sims und The Sims 2 sortierten diesen Katalog nach Objektfunktion; und die Grundfläche des gehaltenen Objekts zeigt grün, wo es hin darf, und rot, wo nicht. Das Wiki ordnet diesen Satz über Grün und Rot The Sims 2 und The Sims 3 zu, ich beanspruche ihn also nicht für das Original von 2000.46 Die Wertung blieb als Bedürfnis in den Sims erhalten, Raum im ersten Spiel und Umgebung im zweiten, das „analyzes the design and content of the room that the Sim is currently standing in“ (Gestaltung und Inhalt des Raums analysiert, in dem der Sim gerade steht): Kleine Räume, zu wenig Licht und schmutzige oder kaputte Dinge senken es.47
Nach meiner Lesart ist jedes Spiel in diesem Beitrag dieser eine Bildschirm mit einem anderen Budget: ein Katalog, ein Raster in der Größe eines menschlichen Schritts, eine Grundfläche, die grün oder rot wird, und eine Jury.
Die Obergrenzen im Vergleich
Die Grenzen spannen fünfzig zu eins, vom Schlafzimmer in Smaragd bis zu einer FFXIV-Villa, aber sie zählen nicht dasselbe: Die von FFXIV ist eine Platzierungsgrenze für den Innenbereich, aufgeführt pro Wohnungstyp, die von Animal Crossing gilt pro Raum, die von Club Penguin pro Iglu, die von Smaragd pro Basis oder Schlafzimmer und die von Kiradex pro Etage. Nur die Zahlen von FFXIV und Smaragd stammen aus Text oder Code des Herausgebers selbst.247581
4. Das Handwerk als Regeln mit Zahlen
Das sind die Regeln, die die Messungen stützen, jede mit der Spanne, auf der sie beruht. Wo eine Zahl meine Rechnung oder meine Wahl ist, sagt die Zeile das. „Zelle“ meint die 16 Pixel große Laufzelle, die zugleich das Tile von Kiradex ist.227
| Element | Regel | Quelle |
|---|---|---|
| Platzierungsgrenze | Begrenzen, was ein Raum zeigt, pro Raum, Wandgegenstände mitgezählt. | Smaragd 16 pro Basis, 12 im Schlafzimmer; New Horizons 150 pro Raum „including wall and ceiling-mounted furniture“ (Wand- und Deckenmöbel eingeschlossen); FFXIV 150 bis 600 im Innenbereich je nach Wohnungsgröße; Club Penguin 99 (eine einzige Fanquelle) |
| Besitzgrenze | Mehr besitzen lassen, als hineinpasst, damit Platzieren Auswählen ist. | Smaragd 150 im Besitz in acht Fächern gegenüber 16 platzierten; Club Penguin 99 pro Typ im Besitz (Fanquelle) |
| Grenze im Verhältnis zum Boden | In einem 2D-Raum ohne Wand- oder Deckenebene unter einem Gegenstand pro drei Bodenzellen bleiben (meine Schwelle, so gewählt, dass Smaragd knapp darunter liegt); Oberflächen und begehbare Stücke dehnen sie. | Smaragd 16 gegenüber durchschnittlich 60,2 begehbaren Zellen, 0,27; New Horizons 150 in einem Raum von 6 mal 6 sind 4,2 pro Tile, nur möglich mit Platzierung an Wand, Decke und auf Oberflächen (meine Rechnung) |
| Oberflächen | Das Tragen eines kleinen Stücks zur Eigenschaft einer Zelle machen, damit ein Tisch Boden für eine Puppe schafft. | Smaragd: 18 Dekorationen tragen kleine Stücke, 14 große, und 45 Sprite-Dekorationen brauchen eine davon |
| Rasterzelle | Das Raster an der Frame- oder Zellbreite der Figur ausrichten; feiner nur, wenn Stücke verschoben werden können und die Grafik es zulässt. | Spielerframe in Smaragd 1 mal 2 Zellen zu 16 Pixeln; Stardew Tiles zu 16 Pixeln; New Horizons halbe Tiles |
| Platzierungsprüfung | Jeder belegten Zelle eine Frage stellen (Boden, Wand, Oberfläche; leer; nicht auf der Ankunfts- oder Gastgeberzelle) und die Antwort pro Zelle anzeigen. | CanPlaceDecoration in Smaragd für die Fragen pro Zelle, wobei es die Startzelle der Spielfigur nur für ein Tile mit einem nicht normalen Ebenentyp ablehnt; Ankunfts- und Gastgeberzelle sind die Regel von Kiradex (7.1); Stardew grünes oder rotes Quadrat pro Tile; The Sims 2 und 3 grüne oder rote Grundfläche (Fan-Wiki) |
| Weg | Prüfen, dass ein Laufweg jede Platzierung übersteht (die Ergänzung des Briefings). | CanPlaceDecoration in Smaragd prüft keinen Weg und hält die Zelle, auf der die Spielfigur stand, nur von einem Tile mit nicht normalem Ebenentyp frei; die hier gelesenen Seiten zu Stardew und den Sims beschreiben Rückmeldung pro Tile und sagen über Wege weder das eine noch das andere; das Briefing ergänzt den Lauf |
| Tapete und Boden | Je einer pro Raum, mit einer Geste gewechselt, umkehrbar. | Stardew bedeckt von der Wand aus „the whole room“ (den ganzen Raum); New Horizons pro Raum plus eine Akzentwand; die von Habbo sind dauerhaft, nur ersetzbar |
| Kataloggröße | Groß genug, dass ein Stil eine Wahl ist. | Stardew 137 Tapeten und 97 Bodenbeläge (meine Zählungen der Wiki-Symbole); New Horizons 262 und 215; New Horizons 2.076 Möbel Stand 3.0.2 |
| Wertung | Quellen aufführen, den Tag festlegen, die Messlatte mit dem Haus heben, Abwesenheit nie bestrafen. | Wohnbewertungsakademie: an den meisten Sonntagen; B, A, S; S von 15.000 bis 90.000; 1.000 bei 6, 10, 15 und 20 Gegenständen; Serie, Set, Kategorie, Farbe (Fantabellen, ohne Beleg); die Hausseite des Wikis, die kein Spiel nennt, sagt, ein mindestens eine Woche vernachlässigtes Haus füllt sich mit Kakerlaken, und die HHA-Tabelle von New Horizons zieht 2.500 pro Kakerlake ab, eine Strafe, die diese Regel ablehnt |
| Katalogwachstum | Für eine App ab 9 durch Spielen wachsen: ein verdientes Regal plus ein Katalog, der sich bei einem Meilenstein öffnet. Nie durch zufälligen oder knappen Verkauf. | Smaragd 90 von 120 verkauft, 24 nie verkauft, zwei weitere für 6.000 und 8.000 Asche; Stardew zufälliges Tagessortiment, nach dem ersten Ausbau dann ein Katalog für 200.000g, dessen gelistete Möbel 0g kosten, mit Exklusivstücken aus Museum, Festen und anderen Quellen außerhalb davon; Habbos Raritäten, knackbare Möbel und LTDs als Gegenbeispiel |
| Besuche | Besucher schauen und fassen nichts an; ein Zeichen pro Besucher und Tag; die Summe des Gastgebers sinkt nie. | Besucher in Animal Crossing können nicht „modify the interior in any way“ (die Einrichtung in irgendeiner Weise verändern); Besucher in Habbo können ohne Rechte keine Möbel abstellen oder verschieben; Club Penguin ein Like pro Design und Tag, Gesamtsumme sinkt nie (eine einzige Fanquelle) |
| Speicherung | Ein platzierter Gegenstand sind ein paar Bytes: Art, Zelle, Ausrichtung. | Smaragd: ein ID-Byte und ein Positionsbyte, 32 Bytes pro Basis |
Quellen: Abschnitte 1 bis 3 und ihre Fußnoten.256781916414033181746141511
Drei davon verdienen je einen Satz.
Die Obergrenze ist ein Budget für das Auge und manchmal für die GPU. Die 16 von Smaragd sind etwa ein Viertel der Bodenfläche einer Basis. FFXIV sagt ausdrücklich, dass es ab 400 Einrichtungsgegenständen auf dem Bildschirm einige davon nicht mehr zeichnet.27 Für eine Smartphone-App ist der zweite Grund real, aber nach meiner Lesart entscheidet der erste über die Zahl: Eine Obergrenze ist das, was ein Regal in eine Komposition verwandelt, und genau das war der Grund, den der Weltenbeitrag vom 3. Oktober für die Wahl von sechzehn nannte.10
Die Wegregel ist die Ergänzung des Briefings. CanPlaceDecoration in Smaragd schützt höchstens eine Zelle, die, auf der man beim Öffnen des Menüs stand, und fragt nie, ob die Tür den Computer noch erreicht.4 Die Seiten zu Stardew und den Sims, die ich gelesen habe, beschreiben eine pro Tile eingefärbte Grundfläche; sie sagen nicht, ob eines der Spiele zusätzlich einen Weg prüft, und ich habe nicht weiter gesucht, dieser Beitrag behauptet über sie also weder das eine noch das andere.1646 Ein Raum, den andere besuchen, braucht eine Antwort auf diese Frage, denn wer die Ausstellung nicht erreicht, hat nichts zu sehen.
Freischalten durch Spielen ist für eine Kinder-App das vertretbare Ende der Katalogfrage. Das ist meine Lesart, keine Rechtsberatung: Eine Dekorationsschleife, die gekauft, zufällig oder knapp ist, handelt sich Lootbox- und Druckfragen ein, die eine Sammel-App nicht braucht. Das verdiente Regal von Smaragd zeigt eine Raumschleife, die nichts davon braucht, und der Katalog von Stardew, nach einem Meilenstein im Spiel einmal in der Spielwährung gekauft, zeigt, wie man die Knappheit für alles beendet, was er listet.141617
5. Der Apple-Weg: ein Modell, das synchronisiert, ein Ziehen, das einrastet, ein Raster, das VoiceOver bedienen kann
Ein Einrichtungsbildschirm unter iOS braucht drei Dinge: einen Datensatz für jedes platzierte Stück, der über iCloud synchronisiert, eine Möglichkeit, ein Stück auf eine Zelle zu ziehen, und eine Möglichkeit, dasselbe ohne Sehen oder Berühren zu tun. Alles Folgende stammt aus Apples Dokumentationsseiten, am 5. Oktober 2026 als JSON gespeichert, mit Titeln, Deklarationen, Kurzbeschreibungen und Plattformen, die ein Skript extrahiert hat.48 Für diesen Beitrag wurde nichts davon gebaut oder ausgeführt, und keine der unten genannten Kosten ist gemessen.
Der Datensatz: SwiftData, für CloudKit geformt
@Model „Converts a Swift class into a stored model that’s managed by SwiftData“ (wandelt eine Swift-Klasse in ein gespeichertes Modell um, das SwiftData verwaltet), verfügbar ab iOS 17.0.49 SwiftData kann mit #Unique Eindeutigkeit erzwingen, das „Specifies the key-paths that SwiftData uses to enforce the uniqueness of model instances“ (die Key-Paths angibt, mit denen SwiftData die Eindeutigkeit von Modellinstanzen erzwingt), ab iOS 18.0.50 Ein platziertes Stück wirkt wie ein naheliegender Anwendungsfall: ein Stück pro Zelle.
Die CloudKit-Synchronisierung schließt das aus. Apples Leitfaden zum Synchronisieren von SwiftData sagt, das Framework „does include a small number of features that CloudKit doesn’t support natively, such as unique constraints and nonoptional relationships“ (enthält einige wenige Funktionen, die CloudKit nicht nativ unterstützt, etwa Eindeutigkeitsbedingungen und nicht optionale Beziehungen), und dass „CloudKit requires all relationships to be optional.“ (CloudKit verlangt, dass alle Beziehungen optional sind.)22 Die Modelle von Kiradex sind bereits so geformt. Der Kommentar von CardCopy sagt „every property has a default and nothing is unique, for CloudKit“ (jede Eigenschaft hat einen Standardwert und nichts ist eindeutig, für CloudKit), und PriceHistory ist „Shaped for CloudKit like CollectionEntry: defaults everywhere, nothing unique“ (wie CollectionEntry für CloudKit geformt: überall Standardwerte, nichts eindeutig), mit einer Zusammenführung, die auf jedem Gerät denselben Gewinner wählt, wenn zwei Geräte dieselbe Historie anlegen.5152
Die Eindeutigkeit, auf die es ankommt, ein Stück pro Zelle, muss also im Code durchgesetzt werden: eine reine Funktion, die bei jedem Lesen läuft, die Stücke zweier Geräte auf einer Zelle überall zum selben Gewinner auflöst und den Verlierer in die Ablage zurücklegt. Eine Zelle ist nicht das Einzige, was zwei Geräte gemeinsam kaputt machen können. Zwei Änderungen, die jede auf ihrem eigenen Telefon alle Regeln bestehen, können zusammen scheitern; die Funktion muss den Raum daher durch die vollständige Platzierungsprüfung neu aufbauen, nicht nur durch den Überlappungstest. Das Briefing in Abschnitt 7 legt sie fest.
Das Ziehen: draggable, ein Ablageziel und die Zelle unter dem Finger
draggable(_:) „Activates this view as the source of a drag and drop operation“ (aktiviert diese View als Quelle eines Drag-and-Drop-Vorgangs) für eine Transferable-Nutzlast, ab iOS 16.0.53 dropDestination(for:action:isTargeted:) empfängt die abgelegten Elemente und einen CGPoint, den seine Seite als „the drop location in this view’s coordinate space“ (die Ablageposition im Koordinatenraum dieser View) beschreibt, ebenfalls ab iOS 16.0.54 Diesen Punkt einer Zelle zuzuordnen, ist Arithmetik: den Ursprung der Karte abziehen und durch die Tile-Größe in Punkten teilen.
Ein Befund, den meine früheren Notizen nicht hatten. Die gespeicherte Seite zu dropDestination(for:action:isTargeted:) nennt iOS 27.2 als die Version, die es als veraltet markiert, mit der Meldung „Use dropDestination(for:isEnabled:action:) with an action that takes a DropSession parameter instead.“ (Verwenden Sie stattdessen die Variante mit einer action, die einen DropSession-Parameter erhält.)54 Die action der Ersatzvariante erhält statt eines Punkts eine DropSession, „A description of a drop that is in progress“ (eine Beschreibung eines laufenden Ablegevorgangs).54 Die Seite zu DropSession habe ich nicht gespeichert; ob sie eine Position im Koordinatenraum der View mitführt, ist also ungelesen, und das Briefing nennt beide Formen.
Um ein Stück zu bewegen, das schon im Raum steht, ist DragGesture „A dragging motion that invokes an action as the drag-event sequence changes“ (eine Ziehbewegung, die eine Aktion auslöst, während sich die Folge der Zieh-Ereignisse ändert, iOS 13.0), und SpatialTapGesture ist „A gesture that recognizes one or more taps and reports their location“ (eine Geste, die ein oder mehrere Tippen erkennt und ihre Position meldet, iOS 16.0): tippen, um ein Stück auszuwählen, ziehen, um es Zelle für Zelle zu bewegen.5556
Ob sich der Ablagepunkt unter der Kamera von Kiradex sauber auf Tile-Zellen abbilden lässt, ist ungetestet. Der Raum wird von RealityKit mit einer ganzen Zahl von Gerätepixeln pro Texel gezeichnet, und das SwiftUI-Overlay, das das Ablegen empfängt, liegt darüber; die Arithmetik ist dieselbe, die die Einpassung der Kamera bereits leistet, aber bisher hat niemand etwas darauf abgelegt.10
Das Raster ohne Berührung: VoiceOver
Ein Möbelraster eignet sich schlecht dafür, Element für Element durchzuwischen, also gibt das Design VoiceOver eigene Verben:
accessibilityElement(children:)„Creates a new accessibility element, or modifies theAccessibilityChildBehaviorof the existing accessibility element“ (erstellt ein neues Bedienungshilfen-Element oder ändert das Kindverhalten des bestehenden, iOS 13.0), sodass ein Stück über mehrere Zellen ein Element ist, nicht sechs.57accessibilityAction(named:_:)fügt eine benannte Aktion hinzu; „Actions allow assistive technologies, such as the VoiceOver, to interact with the view by invoking the action“ (Aktionen erlauben assistiven Technologien wie VoiceOver, durch Auslösen der Aktion mit der View zu interagieren, iOS 16.0). Nach links, Nach rechts, Nach oben, Nach unten, Drehen und Wegräumen sind je eine Aktion.58accessibilityAdjustableAction(_:)behandelt Wischen nach oben und unten alsAccessibilityAdjustmentDirection(iOS 13.0), passend zum Durchschalten einer Tapete oder eines Bodens.59accessibilityRotor(_:entries:)erstellt „an Accessibility Rotor with the specified user-visible label“ (einen Rotor mit der angegebenen sichtbaren Beschriftung, iOS 16.0), sodass ein Rotor „Möbel“ zwischen den Stücken des Raums springen kann.60AccessibilityNotification.Announcementist „A notification that an app posts when it needs to convey an announcement to an assistive app“ (eine Mitteilung, die eine App sendet, wenn sie einer assistiven App eine Ansage übermitteln muss, iOS 17.0): Jede abgelehnte Bewegung wird mit ihrem Grund vorgelesen.61
Ein UI-Test kann den Bildschirm dann mit XCUIApplication.performAccessibilityAudit(for:_:) prüfen, gelistet für iOS 17.0; die gespeicherte Seite hat keine Kurzbeschreibung und nennt Xcode 16.3 für diesen Modulpfad.62 Mehr als ein Audit leistet es nicht. In den XCUIAutomation-Headern, die mit Xcode 27.0 installiert werden, heißt es über das Audit: „Runs an accessibility audit on the current view“ (führt eine Bedienungshilfen-Prüfung der aktuellen View durch). Dieselben Header ergänzen XCUIVoiceOverService, ab iOS 27.0, das „Provides programmatic control of VoiceOver for UI testing“ (programmatische Steuerung von VoiceOver für UI-Tests bietet): Es schaltet VoiceOver ein und aus, bewegt den Fokus vorwärts, rückwärts, in Container hinein und aus ihnen heraus und liefert, was VoiceOver für das fokussierte Element spricht. Eine Suche in jedem Header des Frameworks findet keinen Aufruf, der eine benannte eigene Aktion ausführt, einen Rotor dreht oder eine Ansage liest; ein UI-Test kann also nicht Nach links oder Wegräumen drücken, wie es jemand mit VoiceOver tut.63 Das Briefing testet die Handler dieser Aktionen direkt, prüft die gesprochenen Beschriftungen mit dem VoiceOver-Dienst und überlässt die Aktionen, den Rotor und die Ansagen einem Menschen mit eingeschaltetem VoiceOver.
Was es kostet
Ungemessen. Ein eingerichtetes Haus besteht aus höchstens 16 kleinen Datensätzen auf jeder der zwei Etagen. Wenn platzierte Stücke in das eine Objekt-Mesh eingehen, das die Engine bereits für die Möbel der Schmiede baut, bedeutet eine Änderung, dieses Mesh neu aufzubauen; nichts davon wurde auf einem Telefon profiliert.39
6. Die Fallstudie: die Innenräume von Kiradex heute
Kiradex ist eine Kartensammel-App für das iPhone mit einer kleinen Pixelstadt, Kiradex World, in der jeder Sammler ein Haus mit zwei Etagen hat und die Stadt eine Ausstellungshalle. Alles in diesem Abschnitt wurde am 5. Oktober 2026 aus dem Repository der App gelesen, nie ausgeführt oder geändert: Die Innenräume wurden mit einem Skript geparst, Dokumente und Modelle als Text gelesen.964
Was sich seit dem Beitrag über Bauten geändert hat
Der Beitrag über Bauten vom 3. Oktober sagte, dass interiors.py den Raum, die Etage darüber und die Halle zeichnet, „each 14 by 11, with a two-row wall band“ (je 14 mal 11, mit einem zweireihigen Wandband).39 Als er geschrieben wurde, stimmte das. Am selben Tag brachte TestFlight-Build 26 das Interieur-Kit: „Rooms sixteen wide with a three-row wall band (cornice, face, wainscot)“ (Räume sechzehn breit mit einem dreireihigen Wandband: Gesims, Wandfläche, Täfelung), Möbel in einem 32-Pixel-Rhythmus, wandständige Stücke als Boden gezeichnet und frei stehende als Objekte, hinter die der Sammler treten kann.65 Heute zeichnet die Schmiede room und room-up mit 16 mal 12 Zellen und die Halle mit 16 mal 13, jeweils mit einem dreireihigen Band: Gesims, Wandfläche und Täfelung.964 Build 26 liegt zwischen dem Build 23, den der Beitrag über Bauten beschreibt, und dem Build 35, den sein abendlicher Nachtrag beschreibt; beide Texte stimmen also für ihren jeweiligen Build.3965
Die Möbel der Schmiede
scripts/forge/interiors.py nennt in seiner Tabelle PIECES 23 Stücke, jedes mit Breite und Höhe in Zellen und einem Flag, ob es frei steht.9
| Art | Stücke und Grundflächen (Zellen, B mal H) |
|---|---|
| Wandständig, in den Boden gezeichnet (9) | Bücherregal 5 mal 2; Kleiderschrank 2 mal 2; Theke, Spüle und Herd je 1 mal 1; Kamin 2 mal 2; Treppe und Treppe abwärts je 2 mal 3; Säule 1 mal 3 |
| Frei stehend, als Objekte exportiert, gegen die der Sammler sortiert wird (14) | Bett und Rosenbett je 2 mal 3; Nachttisch 1 mal 1; Tisch 2 mal 2; Stuhl in vier Ausrichtungen, je 1 mal 1; Sofa 3 mal 2; Bank 2 mal 1; Pflanze 1 mal 2; Truhe, Kiste und Fass je 1 mal 1 |
Aus PIECES geparst von measure_kiradex_interiors.py; die Datei wird nie importiert oder ausgeführt.9
Ein Stück belegt 1 bis 10 Zellen, im Schnitt 3,04, gegenüber 1 bis 9 und 2,43 bei Smaragd.92 Es gibt weniger verschiedene Zeichnungen als Namen: Die vier Stühle sind eine Zeichnung in vier Ausrichtungen, die zwei Betten zwei Varianten, die zwei Treppen zwei Richtungen, und Theke, Spüle und Herd sind eine Theke in drei Ausführungen.9
Docstring und Tabelle der Datei widersprechen sich. Der Docstring legt als Konvention fest: „furniture on the 16-pixel grid in a 32-pixel rhythm, every piece at least two tiles on one axis“ (Möbel auf dem 16-Pixel-Raster in einem 32-Pixel-Rhythmus, jedes Stück auf mindestens einer Achse zwei Tiles groß).64 In der Tabelle sind 11 der 23 genau 1 mal 1: die vier Stühle, die Theke, die Spüle, der Herd, der Nachttisch, die Truhe, die Kiste und das Fass.9 Der Rhythmus gilt für die großen Stücke, nicht für die kleinen. Das ist ein Unterschied zwischen einem Kommentar und dem Code in einer einzigen Datei, scripts/forge/interiors.py, und das Briefing behält die kleinen Stücke, denn ein Raum nur aus Zwei-Tile-Stücken hätte keine Stühle.
Die Wandfläche hat ein eigenes Vokabular aus Buchstaben: ein Bild p, eine Uhr k, ein Fenster N, ein Fenster mit Vorhang K, ein Banner n, eine Wandleuchte l und W, wo die Wandtafel hängt. Böden sind Dielen o, Fliesen t, Marmor s und ein Teppich r, der sich als Neun-Teile-Raster aus seinen Nachbarn zeichnet. Es gibt zwei Wandstile, Putz und Fachwerk im Haus und behauenen Stein in der Halle, pro Innenraum über FACES gewählt.64
Die Räume, wie sie angelegt sind
| Karte | Größe | Bodenzellen | Stücke (beweglich) | Boden unter Stücken | Freier Boden | Plätze, die die App bestückt |
|---|---|---|---|---|---|---|
room |
16 mal 12 | 125 | 14 (13) | 25 | 100 | Regal 5 Zellen, Vitrine 2, Schreibtisch 2; Ankunft, Treppe, Gastgeber |
room-up |
16 mal 12 | 125 | 12 (11) | 27 | 98 | Wandtafel 3 Zellen, Schreibtisch 2; Ankunft an der Treppe |
hall |
16 mal 13 | 144 | 6 (4) | 8 | 128 nach 8 Podesten | 8 Podeste |
Beweglich schließt die Treppen und die Säulen aus. Aus measure_kiradex_interiors.py.9
Der Platz host ist in der Datei kommentiert als „where the owner stands when you visit“ (wo der Besitzer steht, wenn Sie zu Besuch kommen).64 Das check() der Schmiede lehnt bereits ab: einen Regal-, Vitrinen-, Schreibtisch- oder Podestplatz auf dem falschen Buchstaben, einen Warp, der nicht auf einer Tür oder Treppe liegt, eine Ankunfts-, Treppen- oder Gastgeberzelle, die nicht begehbar ist, und zwei exportierte Objekte auf einer Zelle. Seine engeren Grenzen sind für das Briefing wichtig. Es hat keine Buchstabenprüfung für die Plätze der Wandtafel, und seine Überlappungsschleife liest nur die exportierten Objekte, also die frei stehenden Stücke; ein wandständiges Stück, das in den Boden gezeichnet ist, kommt darin also nie vor. Es prüft nicht, ob die Tür jeden Platz erreicht.64
Die Wegregel, auf die heutigen Räume angewandt
Ich habe ein Skript geschrieben, das die exportierten Buchstaben so wiederherstellt wie export() und von der Ankunft jeder Etage in vier Richtungen über die begehbaren Buchstaben der Schmiede läuft, otsrUD.20 Auf den heutigen Layouts erreicht der Lauf unten die Treppe und den Gastgeber und oben die Treppe. Mit den Zellen direkt vor den Ausstellungsplätzen sieht es anders aus:
- Unten die fünf vorderen Zellen des Regals: zwei liegen unter dem Fass und der Kiste, drei werden erreicht.
- Die beiden vorderen Zellen der Vitrine werden beide erreicht.
- Die beiden vorderen Zellen des Schreibtischs: eine liegt unter dem herangezogenen Stuhl, eine wird erreicht.
- Oben ist es beim Schreibtisch genauso, eine von zwei.
- Oben liegen die drei vorderen Zellen der Wandtafel unter dem Bett und dem Nachttisch. Keine wird erreicht.20
Eine Regel, nach der die eigene vordere Zelle jedes Platzes erreichbar sein muss, würde also vier der bestückten Gruppen der Schmiede auf beiden Etagen durchfallen lassen (Regal und Schreibtisch unten, Schreibtisch und Wandtafel oben), insgesamt sieben blockierte vordere Zellen, und eine Regel, nach der jede bestückte Gruppe eine erreichbare vordere Zelle haben muss, lässt eine Gruppe durchfallen: die Wandtafel oben. Das Briefing verwendet die Gruppenform und behebt die Tafel in der Neuanordnung der Starträume.
Das Skript probierte auch zusätzliche Stücke in room aus. Ein zusätzliches frei stehendes Stück hat 733 Platzierungen, die die Zellregeln bestehen; 44 davon schneiden ein Ziel ab, und jede davon tut es, indem sie die Zielzelle selbst belegt. Zwei zusätzliche Stücke, jedes frei von allen Zielen und ohne Überlappung, ergeben 229.891 Paare, und 713 davon schneiden ein Ziel ab, ohne es zu belegen: Ein Bett bei (9,3) und ein Nachttisch bei (6,4) etwa schließen die Nische vor der Glasvitrine.20 Diese 713 sind das, was eine Prüfung pro Zelle übersieht und ein Lauf erkennt. Sie sind auch das, was zwei Telefone gemeinsam bauen können: Jedes Stück allein lässt jedes Ziel erreichbar, besteht also auf seinem eigenen Gerät den Lauf, und das Paar scheitert erst, wenn beide synchronisiert sind (7.7).66 Über zwei zusätzliche Stücke hinaus habe ich die Suche nicht laufen lassen; wie viele Layouts eine Prüfung pro Zelle bei sechzehn durchlassen und ein Lauf ablehnen würde, ist ungemessen.
Der Sammler im Verhältnis zum Raster
Die Sprite-Zelle des Sammlers misst 32 mal 40 Pixel mit 7 Pixeln über der Figur und 2 darunter, die Figur ist also etwa 31 Pixel groß, und die Zelle ist 2 Tiles breit und 2,5 hoch, gegenüber dem Frame von 1 mal 2 in Smaragd. WORLD.md beschreibt sie als „a 30-pixel figure in a 32 × 40 cell“ (eine 30 Pixel große Figur in einer Zelle von 32 × 40).2767 Die Breite der Figur selbst wurde nicht gemessen. Ich lese die Zelle als den Grund, warum die Schmiede ihre Möbel in einem 32-Pixel-Rhythmus auf einem 16-Pixel-Raster zeichnet: Die Zelle des Sammlers ist zwei Tiles breit.
Was die Räume nicht können
Die ehrliche Liste des Beitrags über Bauten gilt für das Haus weiterhin: „Rooms have no wallpaper or floor choice and no placeable furniture; the house is dressed from the collection and nothing else.“ (Räume bieten keine Wahl bei Tapete oder Boden und keine platzierbaren Möbel; das Haus wird aus der Sammlung bestückt und aus nichts sonst.)39 Die App bestückt die benannten Plätze aus der Sammlung (Ordner im Regal, Karten in der Vitrine, Schleifen und Pins an der Tafel, Karten auf den Podesten der Halle), und die Schmiede platziert jedes Möbelstück.6439
Der Server kann noch keinen Raum halten. Sein Raummodul sagt: „Everything here is in memory; a room empties when its last collector leaves and nothing of them is kept.“ (Alles hier liegt im Arbeitsspeicher; ein Raum leert sich, wenn sein letzter Sammler geht, und von ihnen wird nichts behalten.)68 Ein Besuch im Haus eines anderen Sammlers ist heute also der Besuch einer Karte, und Besuche, die die echte Einrichtung eines Sammlers nur zeigen, brauchen einen Server, der ein Layout speichert.
Wo die Raumregeln stehen
Der Weltenbeitrag vom 3. Oktober veröffentlichte die Raumregeln: „a furnishing cap of sixteen“ (eine Einrichtungsgrenze von sechzehn); „visits are read-only, a like is once a day, and the room’s total never decreases“ (Besuche sind nur zum Ansehen, ein Like gibt es einmal am Tag, und die Summe des Raums sinkt nie); und „A report arrives every Sunday grading the room, with its point sources listed“ (Jeden Sonntag kommt ein Bericht, der den Raum bewertet und seine Punktequellen aufführt).10 Diese Regeln stehen nicht im Designdokument der App. docs/WORLD.md Abschnitt 4 nennt den Münzladen („clothes, hats, backpacks, card-display frames and emotes“, Kleidung, Hüte, Rucksäcke, Kartenrahmen und Emotes) und an Level gebundene Kosmetik, „that cannot be bought“ (die man nicht kaufen kann), und sagt nichts über Möbel, Obergrenzen, Likes oder einen Sonntagsbericht.67 Die Regeln stehen in der Recherchenotiz docs/research/pixel-art/06-collecting-and-hubs.md, Abschnitt 5.3, die außerdem verlangt, dass der Brief „a pixel object that appears on the doormat“ (ein Pixelobjekt, das auf der Fußmatte erscheint) ist, dass es „a stamp on their passport per room visited, with ranks at 30 / 100 / 500“ (einen Stempel im Pass pro besuchtem Raum, mit Rängen bei 30 / 100 / 500) gibt, und in Abschnitt 5.7, dass Gönner-Gegenstände „never a bigger furnishing cap“ (nie eine größere Einrichtungsgrenze) sind.69 Dieser Beitrag behandelt sie als entschieden, weil der Weltenbeitrag sie veröffentlicht hat, und der erste Punkt der Aufräumarbeiten im Briefing ist, sie in WORLD.md zu übernehmen. Derselbe Absatz des Weltenbeitrags sagt außerdem „Patron flair stays on the name-plate and the room skin“ (Gönner-Schmuck bleibt auf dem Namensschild und dem Raum-Skin).10 Das Briefing behandelt den Raum-Skin nicht als entschieden: Es öffnet ihn wieder als Blakes Entscheidung (7.5).
Die Woche gibt es schon
Wöchentliche Quests wechseln in Quest.current mit der Kalenderwoche, das Thema der Halle ist der Titel der Wochenquest, und die Prototypnotizen fragen Testende nach einem „Weekly reset on your calendar’s week“ (wöchentlichen Zurücksetzen nach der Woche Ihres Kalenders).7071 Ein Sonntagsbrief braucht keine neue Uhr, nimmt aber einen eigenen Schlüssel, das Datum des Sonntags, aus einem Grund, den 7.4 nennt.
7. Das Briefing: was Kiradex baut und welche Prüfungen es bestehen muss
Dies ist ein Briefing, kein Bericht über ausgelieferte Arbeit: Nichts hiervon existiert bisher in der App. Es ist als Differenz zu dem geschrieben, was Abschnitt 6 gemessen hat: die 23 Stücke der Schmiede, zwei Hausetagen von 16 mal 12 und eine Halle von 16 mal 13, die bestückten Plätze, ein Server, der nichts behält, ein über CloudKit synchronisierter SwiftData-Speicher, die Uhr der Wochenquests und die Raumregeln, die der Weltenbeitrag bereits veröffentlicht hat.96810 Jedes Element übernimmt eine oben gemessene Mechanik und zeichnet alles in der eigenen Schmiede, Palette und Sprache von Kiradex. Kein Element nennt ein Wesen, einen Ort aus einem Spiel oder eine Funktion eines Franchise, und nichts in einem Raum wird geworfen, gefangen, beschworen oder geritten; nichts ähnelt also den beanspruchten Schritten der Spielmethoden-Patente, die der Weltenbeitrag beschreibt; das ist meine Lesart, keine Rechtsberatung.10 Koordinaten sind die der Schmiede, x nach rechts und y nach unten ab der Zelle oben links. Die Zahlen in diesem Abschnitt (die acht Startstücke, die Wertungstabelle, die Schwellen der Hausstufen, der Freischaltplan) sind meine Vorschläge, keine Fakten.
7.1 Platzierung nach Zellen, im eigenen Vokabular der Schmiede
Ein Einrichtungsmodus im Haus. Platzierbar sind 20 der 23 Stücke der Schmiede: alle außer stairs, stairs_down und pillar, die Teil des Layouts bleiben. Die vier Stühle werden zu einer Art mit Ausrichtung, die 20 Stücke sind also 17 Bodenarten. Bild, Uhr, Banner und Wandleuchte der Wandfläche werden zu vier platzierbaren Wandgegenständen, was aus der heutigen Schmiede 21 Arten ergibt; Fenster und die Treppenöffnung bleiben Architektur. Abschnitt 7.5 fügt drei neue Stücke hinzu (einen Ausstellungstisch, einen Paravent und einen Wandgegenstand mit gepresster Blume), womit die Zahl auf 24 steigt.72 Ein platziertes Stück ist (kind, x, y, facing) an seiner oberen linken Zelle auf der Buchstabenkarte der Etage, dieselbe Form, die ROOM_FURNITURE bereits verwendet.964
Die Regeln, Zelle für Zelle. Die ersten fünf sind die Fragen pro Zelle von Smaragd, in die Buchstaben von Kiradex übertragen; die sechste ist die Ergänzung des Briefings, eine Prüfung, die die Platzierungsfunktion von Smaragd nicht vornimmt.4
- Ein frei stehendes Stück braucht unter jeder belegten Zelle Boden (
o,t,soderr), auf dem kein anderes Stück steht. - Ein wandständiges Stück (Bücherregal, Kleiderschrank, Theke, Spüle, Herd, Kamin) braucht seine oberste Reihe auf dem Wandband, wo die Schmiede sie bereits hinstellt: den Kamin bei y = 1, über Wandfläche und Täfelung, den Rest bei y = 2, auf der Täfelung.64
- Ein Wandgegenstand braucht eine Wandflächenzelle (
A) in Reihe 1, die weder Fenster noch Treppenöffnung ist. - Kein Stück auf der Ankunftszelle, den zwei Türzellen (die Schmiede zeichnet die Tür zwei Zellen breit in die untere Wand), den begehbaren Zellen der Treppe oder der Gastgeberzelle.
- Das Bücherregal nimmt seine fünf Regalplätze mit, da die Plätze relativ zum Stück liegen; wer das Regal verschiebt, verschiebt also die Ordner. Die Glasvitrine
cund der Schreibtischdbleiben in diesem Briefing feste Buchstaben. - Die Wegregel. Nach der Platzierung muss ein Lauf in vier Richtungen über begehbare Zellen von der Ankunft aus weiterhin die Treppenzelle, die Gastgeberzelle und mindestens eine Zelle direkt vor jeder bestückten Gruppe erreichen: Regal, Vitrine, Schreibtisch, Wandtafel. Ein Stück, das den Lauf unterbricht, wird abgelehnt, und die Ablehnung nennt, was es abschneiden würde.
Jedes der beiden orangefarbenen Stücke besteht die Zellregeln; zusammen riegeln sie die Vitrine ab, und nur der Lauf in Regel 6 erkennt es.2420
Warum die Gruppenform. Auf den heutigen Layouts ist die Zelle vor einem Platz oft ein Stück: Fass und Kiste unter zwei der fünf vorderen Zellen des Regals, ein Stuhl an jedem Schreibtisch, und Bett und Nachttisch unter allen drei Zellen der Tafel.20 Die Schmiede spricht diese Sprache schon teilweise: check() lehnt Überlappungen zwischen frei stehenden Objekten sowie Regal-, Vitrinen-, Schreibtisch- und Podestplätze auf dem falschen Buchstaben ab.64 Die Spielerin oder der Spieler bekommt diese Regeln auf jede Grundfläche ausgeweitet, wandständige Stücke eingeschlossen, und auf die Zellen der Wandtafel, dazu den Lauf.
Abnahme.
- Ein Unit-Test wendet die sechs Regeln auf room.json an: Jede der 24 Arten (die 21 aus der heutigen Schmiede und die drei, die 7.5 hinzufügt) wird an einer Zelle angenommen und für jede auf sie anwendbare Regel an einer Zelle abgelehnt.
- Die Wegregel besteht auf beiden ausgelieferten Startetagen (7.2), und ein Test legt fest, dass die Tafel oben eine erreichte vordere Zelle hat.
- Ein Property-Test platziert in room und room-up zufällige zulässige Folgen von bis zu 16 Stücken und prüft nach jedem Schritt, dass der Lauf von der Ankunft die Treppe, den Gastgeber und eine vordere Zelle jeder bestückten Gruppe erreicht.
- Ein Regressionstest platziert das Bett bei (9,3) und den Nachttisch bei (6,4) in room und prüft, dass das zweite Stück mit einer Meldung abgelehnt wird, die die Vitrine nennt.20
- Eine Aufnahme des Einrichtungsmodus im Simulator des iPhone 18 Pro Max zeigt die Grundfläche eines gehaltenen Stücks pro Zelle eingefärbt, eine zulässig und eine unzulässig.
- Das check() der Schmiede besteht auf jedem Layout, das die App erzeugen kann: Der Test exportiert das platzierte Layout als ROOM_FURNITURE und lässt die Prüfung der Schmiede schreibgeschützt darüber laufen. Weil diese Prüfung nur exportierte Objekte liest und keine Buchstabenprüfung für die Wandtafel hat, prüft derselbe Test mit dem eigenen Validator des Briefings außerdem, dass keine zwei platzierten Grundflächen eine Zelle teilen, wandständige Stücke eingeschlossen, und dass die drei Plätze der Wandtafel auf den W-Zellen der Tafel in der angelegten Karte liegen.64
7.2 Die Obergrenze: sechzehn pro Etage, Starträume mit acht
Was. 16 platzierte Stücke pro Etagenkarte, room und room-up jeweils, Wandgegenstände eingeschlossen, so wie New Horizons Wand- und Deckengegenstände in seine 150 einrechnet.5 Was die Sammlung bestückt (Ordner im Regal, Karten in der Vitrine, Schleifen und Pins an der Tafel), zählt nie: Die Obergrenze budgetiert Möbel, und die Sammlung ist der eigentliche Zweck. Besitz wird dadurch nicht begrenzt; ein Sammler kann mehr besitzen, als hineinpasst, so wie Smaragd 150 im Besitz gegenüber 16 platzierten zulässt.2
Die Zahlen. 16 gegenüber 125 Bodenzellen sind 0,13 pro Zelle, die Hälfte der 0,27 von Smaragd, was zu Stücken passt, die im Schnitt 3,04 Zellen belegen statt 2,43 wie bei Smaragd, und zu einem Sammler, dessen Zelle zwei Tiles breit ist (meine Rechnung).9227 Der Start-room der Schmiede enthält bereits 13 bewegliche Stücke und room-up 11; ein neuer Sammler käme also bei 13 von 16 an und hätte nur noch drei Entscheidungen übrig.9 Der Vorschlag: jede Startetage mit 8 beweglichen Stücken ausliefern, in der Schmiede ausgewählt. Unten bleibt das Bücherregal, da es die Regalplätze trägt; oben bleibt ein Bett, und die Neuanordnung macht mindestens eine Zelle vor der Wandtafel frei, wo heute keine frei ist. Die entfernten Stücke wandern in die Ablage des Sammlers, statt zu verschwinden, sodass 8 Plätze pro Etage vom ersten Tag an dem Sammler gehören.20 Die Startstücke werden mit festen IDs angelegt, damit zwei Geräte beim Kaltstart dieselben Datensätze anlegen und nicht zwei Sätze (7.7).
Blind für Gönner. Die Zeile der Recherchenotiz gilt: Gönner-Gegenstände sind „never a bigger furnishing cap“ (nie eine größere Einrichtungsgrenze).69
Abnahme. Ein Unit-Test platziert 16 Stücke und prüft, dass das 17. mit einer Meldung abgelehnt wird, die die Obergrenze nennt; ein Test, dass Ordner, Karten, Schleifen und Pins auf bestückten Plätzen die Zählung nicht verändern; ein Test, dass jede Gönnerstufe eine Obergrenze von 16 sieht; ein Test, dass beide Startetagen mit 8 beweglichen Stücken laden und die Wegregel bestehen.
7.3 Tapete und Boden
Was. Pro Etagenkarte ein Wandstil und ein Bodenstil, jeder im Einrichtungsmodus mit einem Tippen gewechselt, kostenlos und umkehrbar: Stardews eine Geste für eine Fläche und die Wahl pro Raum aus New Horizons, nicht Habbos Endgültigkeit.41533 Stile zählen nicht zu den 16.
Das vorhandene Vokabular. Zwei Wandflächen (plaster und blocks), drei Böden (Dielen o, Fliesen t, Marmor s) und der Teppich.64 Die Schmiede zeichnet nach Regeln aus benannten Paletten-Rampen, ein Stil ist also ein Zeichner und eine Rampe. Der erste Satz sind die 2 Wandflächen in je 3 Rampen und die 3 Böden in je 2 Rampen: 6 Wandstile und 6 Bodenstile, jeder von der Schmiede gezeichnet, keiner von Hand gemalt. Weitere kommen durch Spielen (7.5).
Wie es ausgeliefert wird. Die Schmiede exportiert jeden Stil als Atlaszellen neben denen des Raums, und die App tauscht die Bodenindizes der Wand- und Bodenzellen aus; der Teppich behält sein Neun-Teile-Raster.
Abnahme. Eine Aufnahme von room in jedem Wandstil und jedem Bodenstil, 12 insgesamt; eine Palettenprüfung, dass jedes Pixel jedes Stils ein Palettenindex der Schmiede ist; ein Test, dass ein Stilwechsel die platzierten Stücke und die bestückten Plätze unberührt lässt.
7.4 Der Sonntagsbrief: eine Wochenwertung, auf der jede Quelle steht
Was. Einmal pro Woche, beim ersten Öffnen am oder nach Sonntag um Mitternacht Ortszeit, erscheint ein Brief auf der Fußmatte (ein Objekt auf der Ankunftszelle), der das Haus so bewertet, wie es gerade ist. Ein Brief pro Sonntag, mit dem Datum dieses Sonntags in Ortszeit als Schlüssel. Die Woche des Questbretts taugt nicht als Schlüssel: Quest.current nimmt das weekOfYear-Intervall des Kalenders, das an dem Tag beginnt, an dem die Woche des Kalenders beginnt, sodass ein Wochenschlüssel und die Sonntagsregel auseinanderlaufen könnten.70 Eine verpasste Woche kostet nichts. Der Brief druckt jede Quellenzeile mit ihren Punkten, dann die Summe und die Hausstufe. Der Name ist Kiradex’ eigener, vorerst die Notiz der Kuratorin, nie der Name des Spiels, dessen Rhythmus er übernimmt.
Quellen. Die Form ist die der Wohnbewertungsakademie, wie Nookipedia sie tabelliert (Mengenschwellen, ein Set-Bonus, ein Farbbonus); die Zahlen sind meine, und die Sammlung zählt mit.6 Obergrenzen gelten pro Etagenkarte, wie die 16.
| Quelle | Punkte | Obergrenze | Was sie übernimmt |
|---|---|---|---|
| Jedes platzierte Stück | 100 | 16 Stücke pro Etage | die Mengenschwellen |
| Eine eingerichtete Etage: 6, 10 und 16 Stücke | 500 je Schwelle | 1.500 pro Etage | 1.000 bei 6, 10, 15 und 20 Gegenständen |
| Ein Ensemble: 4 oder mehr Stücke eines Schmiede-Sets auf einer Etage | 200 pro Stück | 16 Stücke pro Etage | 4 oder mehr aus einer Serie |
| Eine Rampe: 70 % der Stücke der Etage und ihrer beiden Flächen, Wand und Boden, in einer Rampenfamilie | 100 pro platziertem Stück auf der Etage | 16 pro Etage | 70 % in einer Farbe |
| Eine Rampe bei 90 % (ersetzt die 70-%-Zeile) | 300 pro platziertem Stück auf der Etage | 16 pro Etage | 90 % in einer Farbe |
| Das Regal: alle 5 Ordnerplätze aus der Sammlung gefüllt | 500 | einmal | die Tische in Smaragd, die Puppen tragen |
| Die Vitrine: jeder ihrer 2 Plätze hält eine Karte | 300 je Platz | 600 | |
| Die Tafel: jede ihrer 3 Zellen hält einen Pin, Stempel oder eine Schleife | 100 je Zelle | 300 | |
| Abzüge | keine | die Wegregel lehnt einen blockierten Raum bereits ab |
Vorschlag. Jede Zeile lässt sich aus dem lokalen Raum und der Sammlung berechnen.
Die höchste Wertung, die diese Tabelle vergeben kann, ist 23.600, Zeile für Zeile für beide Etagen mit 16 Stücken und jedem erfüllten Bonus berechnet; die Zeilen für Ensemble und Rampe setzen ein Set und eine Rampenfamilie voraus, die groß genug für alle sechzehn sind, es ist also eine Obergrenze, kein Layout, das jemand gezeichnet hat. Eine Startetage mit 8 Stücken, vor Sets, Rampen oder Plätzen, erzielt 1.300.21
Oben auf der Skala ist Komposition (Sets und Rampen) mehr wert als Menge, und genau darum geht es bei einer Obergrenze.2421
Der Brief bewertet das Haus in drei Hausstufen, und jede Schwelle ist die Wertung, die die Tabelle selbst einem Referenzhaus gibt: 4.500 für beide Etagen mit 10 Stücken und vollem Regal; 7.600 für beide Etagen mit 16 Stücken und vollem Regal, voller Vitrine und voller Tafel; und 14.000 für dieses Haus mit einem Ensemble von 8 und 70 % einer Rampe auf jeder Etage. Ein Starthaus, beide Etagen mit 8, erzielt 2.600, unter der ersten Stufe.21 Die drei Zahlen sind mein Vorschlag; Blake legt die endgültigen fest, bevor der Brief ausgeliefert wird. Anders als die der Akademie steigen sie nicht, weil sich die Form des Hauses nie ändert (siehe „Nicht in diesem Briefing“ unten).6 Eine Hausstufe ist keine Schleife. Die Schleifen, die die App bereits hält, stammen von den Sammlern der Stadt und werden als plaza.ribbons gespeichert; das sind die Schleifen, die die Tafel zeigt (Abschnitt 6).73 Die Hausstufe steht auf dem Brief und wird als Zahl gespeichert (7.5), und sie kommt nie an die Tafel.
Was die Wertung nie liest. Gönnerstufe, Münzen, Käufe, Likes, irgendetwas über andere Spieler oder einen Gönner-Raum-Skin. Jede Zeile lässt sich aus dem lokalen Raum und der Sammlung berechnen, sodass ein Sammler genau sehen kann, warum er bekommen hat, was er bekommen hat. Falls der Gönner-Raum-Skin ausgeliefert wird, wird er über den gewöhnlichen Wandstil der Etage gezeichnet und ist selbst kein Wandstil: Die Etage behält diesen gewöhnlichen Stil für die Wertung, die Rampenzeilen zählen also mit und ohne Skin dieselben Stücke und Flächen (7.5).
Änderung an der Schmiede. PIECES erhält ein Tag set, gezeichnet als passendes Material; die ersten Sets sind die vorhandenen Stücke, gruppiert nach dem Material, in dem sie gezeichnet sind.
Abnahme. Eine reine Funktion Score.week(room:collection:) mit einem Unit-Test für jede Zeile: eine Etage mit 5, 6, 10 und 16 Stücken; ein Ensemble von 3 und von 4; 69 %, 70 %, 89 % und 90 % in einer Rampe; ein Regal mit 4 und mit 5 Ordnern. Ein Test, dass das Maximum 23.600 ist. Ein Test, dass die drei Referenzhäuser 4.500, 7.600 und 14.000 erzielen und die erste, zweite und dritte Hausstufe erreichen und dass das Starthaus mit 2.600 keine erreicht. Ein Test, dass das Erreichen einer Hausstufe weder plaza.ribbons noch der Tafel etwas hinzufügt. Ein Test, dass der Brief eines Sonntags einmal erzeugt wird (dasselbe Sonntagsdatum zweimal ergibt einen Brief, der nächste Sonntag einen weiteren) und dass ein Kalender, dessen Woche am Montag beginnt, dieselben Schlüssel erzeugt. Ein Test, dass zwei Profile, die sich nur in der Gönnerstufe unterscheiden, identische Wertungen erhalten. Eine UI-Aufnahme des Briefs auf der Fußmatte an einem Sonntag, mit einem Startargument, das das Datum setzt.
7.5 Freischalten durch Spielen, nie durch Kauf
Was. Der Katalog, den ein Sammler besitzt, wird aus dem Spielen abgeleitet. Drei seiner sechs Eingaben gibt es heute: Level und Pins, abgeleitet aus der synchronisierten Sammlung, und Quest-Stempel, nur auf dem Gerät gespeichert. Die anderen drei brauchen neue Zähler, jeder benannt und synchronisiert:
- Level. Die Kurve in WORLD.md ist
level = floor(sqrt(XP / 40)) + 1.67 Eine Art oder ein Stil auf jedem Level von 2 bis 20, danach auf jedem zweiten Level, so wie WORLD.md Kosmetik, „that cannot be bought“ (die man nicht kaufen kann), bereits an Level bindet.67 Heute verfügbar, abgeleitet aus der synchronisierten Sammlung: Die App berechnet Erfahrung und Level daraus, „so every device agrees without anything being stored“ (sodass jedes Gerät zum selben Ergebnis kommt, ohne dass etwas gespeichert wird).74 - Pins. Jeder Pin schaltet ein benanntes Stück frei: Full Set einen Ausstellungstisch, Vintage eine Uhr, Across the Sea einen Paravent. Das erste und das letzte sind neue Stücke der Schmiede.67 Heute verfügbar, aus der synchronisierten Sammlung mit derselben Berechnung abgeleitet.74
- Wochenquests. Jede abgeschlossene Wochenquest fügt ein Exemplar eines Grundstücks hinzu: einen Stuhl, eine Pflanze, eine Kiste.70 Heute erfasst, aber nur auf dem Gerät: Die Stempel liegen in
@AppStorage("quests.stamps"), also in UserDefaults, nicht im synchronisierten Speicher; sie wandern deshalb inPlayRecord(unten), bevor irgendein Stück von ihnen abhängt.7375 - Schritte. Ein langer Spaziergang, ein Stück, das eine hohe Schrittzahl kostet, so wie der Glasstuhl in Smaragd 6.000 Asche kostet, die Schritt für Schritt gesammelt wird. Der Beutel in Smaragd zeigt keine Zahl, und die Glasbläserei nennt den Fehlbetrag erst, wenn man zu ihr zurückkommt; der Vorschlag hier ist ein Zähler, der auf der Ablagekarte des Stücks sichtbar bleibt, gegangene Schritte gegenüber benötigten.2815 Eine gepresste Blume von der Pflanze auf der Fensterbank ist ein eigener Vorschlag, ein Wandgegenstand, dessen Freischaltung das Briefing des Hommage-Beitrags festlegt: Die Pflanze wächst alle 256 Schritte um eine Stufe, steht 1.024 Schritte lang in Blüte und wirft dann eine Blume ab, nicht über den Zähler dieses Punkts. Neu: Die App führt heute keine Schrittzahl, das braucht also
stepsWalked.73 - Besuche. Die Passränge bei 30, 100 und 500 besuchten Räumen schalten je einen Stil frei.69 Neu: Heute erfasst nichts einen Besuch, weder auf dem Gerät noch auf dem Server, das braucht also
roomsVisited, die IDs der Gastgeber.7368 - Der Brief. Wenn ein Sammler eine Hausstufe zum ersten Mal erreicht, schaltet das ein Stück frei. Neu: Die Hausstufen gibt es nur in diesem Briefing (7.4), das braucht also
letterTier, die höchste erreichte Hausstufe.
Modelldifferenz. Die Quest-Stempel und die drei neuen Zähler leben in einem synchronisierten Modell, PlayRecord, ein Datensatz pro Gerät, für CloudKit geformt wie die anderen Modelle der App (7.7). Der Katalog liest den Datensatz jedes Geräts: Schritte werden addiert, Stempel und besuchte Gastgeber vereinigt, und die höchste Hausstufe gewinnt. Das Gerät hält die uid seines eigenen Datensatzes unter einem @AppStorage-Schlüssel, im selben UserDefaults-Namensraum wie plaza.id, die ID des Geräts auf der Plaza.7375 Jedes Gerät schreibt nur seinen eigenen Datensatz, zwei Geräte bearbeiten also nie denselben, und es braucht keine Zusammenführungsregel. Das gilt nur, solange der Zeiger auf einem Gerät bleibt, und ein auf einem zweiten Telefon wiederhergestelltes Backup würde den Zeiger mitbringen (meine Lesart; eine Wiederherstellung wurde nicht getestet). Der Datensatz trägt daher eine Gerätemarke, writer, und die Regel lautet: Ein wiederhergestelltes Gerät legt einen neuen Datensatz an, wenn der Datensatz seines Zeigers von einem anderen Gerät geschrieben wurde. Der alte Datensatz bleibt, und der Katalog liest ihn weiterhin. Welcher Wert eine Marke ergibt, die ein Backup nicht auf ein neues Telefon mitnimmt, legt dieses Briefing nicht fest; der Test hält die Regel fest. Beim ersten Start nach der Änderung kopiert das Gerät seine quests.stamps-Liste einmal in seinen Datensatz.
Was abgelehnt wird. Keine Möbel und kein Stil als In-App-Kauf, kein Münzpreis für Möbel, keine zufälligen Möbel jeglicher Art, keine Stücke in begrenzter Stückzahl und kein Möbelhandel: Habbos knackbare Möbel, Raritäten und Handelswerte sind das Gegenbeispiel.1735 Meine Lesart: Eine App ab 9, deren Dekorationsschleife gekauft oder zufällig ist, handelt sich Lootbox- und Druckfragen ein, die die Sammel-App nicht braucht, und Freischalten durch Spielen vermeidet sie. Die einzige bezahlte Ausnahme, die die Recherchenotiz zulässt, ist „one room skin“ (ein Raum-Skin) für Gönner, und der Weltenbeitrag hat ihn genannt: „Patron flair stays on the name-plate and the room skin“ (Gönner-Schmuck bleibt auf dem Namensschild und dem Raum-Skin).6910 Derselbe Satz setzt die Grenze: Gönner-Schmuck „never touches a pedestal slot or a judging bonus“ (berührt nie einen Podestplatz oder einen Bewertungsbonus).10 Dieses Briefing öffnet den Skin wieder als Blakes Entscheidung, statt ihn als erledigt zu behandeln. Behält er ihn, ist der Skin eine visuelle Überlagerung, kein Wandstil. Die Etage behält den gewöhnlichen Wandstil, den der Sammler gewählt hat, der Skin wird darüber gezeichnet, und die Wertung liest nur den gewöhnlichen Stil, sodass die Rampenzeilen aus 7.4 mit und ohne Skin dieselben Stücke und Flächen gegen denselben Nenner zählen. Stattdessen die Wand aus der Rampenzählung zu nehmen, wäre nicht neutral, weil der Anteil Flächen ebenso zählt wie Stücke. Eine Etage mit 16 Stücken, von denen 15 und der Bodenstil in einer Rampe liegen und die Wand außerhalb, ergibt 16 von 18, 88,9 %, auf der 70-%-Zeile für 1.600 Punkte, 100 für jedes der 16 platzierten Stücke, das abweichende eingeschlossen; nimmt man die Wand heraus, sind es 16 von 17, 94,1 %, auf der 90-%-Zeile für 4.800, 300 für jedes der 16, ein Bewertungsbonus von 3.200 für den bezahlten Skin.76 Der Test unten nimmt den Skin namentlich aus.
Abnahme. Ein Unit-Test, dass der besessene Katalog eine reine Funktion von XP, Pins, Quest-Stempeln, gegangenen Schritten, besuchten Räumen und der Hausstufe ist und sich mit nichts anderem ändert; ein Test, dass die PlayRecords zweier Geräte in beiden Lesereihenfolgen denselben Katalog ergeben (Schritte addiert, Stempel und Gastgeber vereinigt, die höchste Hausstufe); ein Test, dass die vorhandene quests.stamps-Liste eines Geräts einmal und nie zweimal in seinen Datensatz kopiert wird; ein Test, dass ein Gerät, dessen Zeiger auf einen Datensatz mit dem writer eines anderen Geräts zeigt, einen neuen Datensatz anlegt, den alten unverändert lässt und weiterhin beide zählt; ein Test, dass keine StoreKit-Produktkennung und kein Artikel des Münzladens einer Möbelart oder einem Stil zugeordnet ist, mit einer benannten Ausnahme: Behält Blake den Gönner-Raum-Skin, ist sein Produkt genau einer Überlagerung und keinem Wandstil zugeordnet, und seine Anwendung lässt den für die Wertung maßgeblichen Wandstil der Etage unverändert; ein Test, dass eine Etage mit und ohne Skin Zeile für Zeile gleich bewertet wird und dieselbe Hausstufe erreicht, durchgeführt an jeder Schwellengrenze: 5, 6, 10 und 16 Stücke, 69 %, 70 %, 89 % und 90 % in einer Rampe, jeweils mit der gewöhnlichen Wand innerhalb und außerhalb der Rampenfamilie, und Häuser einen Punkt unter und genau auf jeder Hausstufenschwelle; ein Snapshot-Test der Katalogablage auf Level 1 (nur das Startset) und auf Level 20.
7.6 Besuche: nur zum Ansehen, ein Like pro Tag, eine Summe, die nie sinkt
Was. Ein Besucher betritt das Haus eines Gastgebers durch dessen Tür, über die Raum-Warps, die die Stadt bereits für die Häuser ihrer eigenen Sammler hat,39 und sieht die platzierten Stücke, Stile und bestückten Plätze des Gastgebers. Der Besucher kann gehen und vorgegebene Sätze sagen, aber nichts verschieben, mitnehmen oder hinzufügen: Habbos Regel, und das Ziel, das der Traum in New Horizons erreicht, indem er nichts behält, was ein Besucher ändert.1832 Ein Like an der Tür zählt einmal pro Besucher, Gastgeber und lokalem Tag, und die Summe des Gastgebers sinkt nie, auch nicht beim Umräumen: die Regel von Club Penguin, aus ihrer einzigen Fanquelle.19 Ein Besuch bringt dem Besucher einen Passstempel ein, den sein Gerät in seinem PlayRecord zu roomsVisited hinzufügt (7.5).69
Serverdifferenz. Der heutige Server behält nichts.68 Besuche brauchen zwei kleine Datensätze pro Spieler. Der erste ist das Hauslayout: höchstens 32 platzierte Stücke auf zwei Etagen, jedes mit Art, x, y und Ausrichtung, dazu zwei Stil-IDs pro Etage. Als kompaktes JSON mit benannten Schlüsseln, mit dem längsten vorgeschlagenen Artnamen in jedem Feld und Stil-IDs aus 16 Zeichen, sind das 1.974 Bytes, unter 2 KB; als nackte Zahlenquadrupel wären es 385 (meine Berechnung; die gesamte Basis in Smaragd sind 32 Bytes).7211 Der zweite ist eine Like-Summe mit der Menge der Besucher des Tages. Keiner von beiden enthält personenbezogene Daten über den Spielernamen hinaus. Der Server prüft ein Layout vor dem Speichern mit denselben sechs Regeln, ein manipulierter Client kann also keinen unzulässigen Raum speichern. Die Spielzähler aus 7.5 (Quest-Stempel, gegangene Schritte, besuchte Räume, die Hausstufe) sind keine Serverdatensätze: Sie synchronisieren über die eigene iCloud des Sammlers in PlayRecord, und der Server liest sie nie.
Abnahme. Servertests: Ein Layout mit einer Überlappung, einem blockierten Weg oder einem 17. Stück auf einer Etage wird abgelehnt; eine Verschiebe- oder Platziernachricht eines Besuchers im Raum eines Gastgebers wird abgelehnt; zwei Likes eines Besuchers am selben Tag zählen einmal, und ein Like am nächsten Tag zählt; ein Gastgeber, der den Raum leert, behält die Summe. Ein Durchgang mit zwei Simulatoren: Gerät A richtet ein, Gerät B besucht und sieht dieselben Stücke auf denselben Zellen, mit einer Aufnahme von jedem.
7.7 Das Modell und der Bildschirm unter iOS 26
SwiftData. Zwei Modelle, für CloudKit geformt wie die anderen der App: überall Standardwerte, nichts eindeutig und eine uid, die in init auf eine UUID gesetzt wird, so wie Profile, PriceHistory und CardCopy je eine tragen.51775222
@Model final class PlacedPiece {
var uid: String = "" // set once, at creation; orders the repair
var roomMap: String = "room" // "room" or "room-up"
var kind: String = "" // a forge PIECES name
var x: Int = 0
var y: Int = 0
var facing: String = "down"
init() { uid = UUID().uuidString }
}
@Model final class PlayRecord { // one per device (7.5)
var uid: String = "" // the device's pointer to it is an @AppStorage key
var writer: String = "" // device marker: the one device that writes it
var questStamps: [String] = [] // moved from @AppStorage("quests.stamps")
var stepsWalked: Int = 0
var roomsVisited: [String] = [] // hosts' ids
var letterTier: Int = 0 // highest house tier reached, 0 to 3
init() { uid = UUID().uuidString }
}
Wand- und Bodenstile liegen als Strings auf Profile, neben lookData.77 Kein #Unique und keine erforderliche Beziehung, weil CloudKit beides nicht unterstützt.22 Zellexklusivität, Obergrenze und Lauf werden im Code durchgesetzt, von einer einzigen Funktion. RoomLayout.repair(_:) läuft bei jedem Lesen. Sie sortiert die synchronisierten Stücke einer Etage aufsteigend nach uid und baut die Etage aus ihrer festen Architektur neu auf (Buchstabenkarte, Treppen und Säulen), wobei sie jedes Stück in dieser Reihenfolge nur hinzufügt, wenn die vollständige Platzierungsprüfung aus 7.1 es gegenüber den bereits angenommenen Stücken annimmt: die Zellregeln (also keine Überlappung), die Obergrenze von 16 und die Wegregel. Ein Stück, das die Prüfung ablehnt, geht zurück in die Ablage. Jedes Gerät sortiert dieselben Datensätze auf dieselbe Weise, jedes Gerät baut also denselben Raum, und wo zwei Stücke kollidieren, gewinnt die kleinere uid, die Regel, mit der PriceBook bereits eine von zwei Preishistorien zweier Geräte auswählt.52 Die Reihenfolge richtet sich nach uid, nicht nach einem Platzierungszeitpunkt, weil eine Zeit von der eigenen Uhr jedes Telefons stammt. Überlappung ist nicht der einzige Konflikt, den zwei Telefone erzeugen können. Ein Bett bei (9,3), auf einem Telefon platziert, und ein Nachttisch bei (6,4) auf einem anderen bestehen auf ihrem eigenen Gerät jeweils die vollständige Prüfung, und zusammen schneiden sie beide Zellen vor der Vitrine ab; der Neuaufbau behält das Stück mit der kleineren uid und gibt das andere zurück.2066 Da das Entfernen eines Stücks nie einen Weg abschneidet, besteht eine bereits zulässige Etage den Neuaufbau in jeder Reihenfolge unverändert (meine Überlegung; die Abnahmetests halten es fest). Die Startstücke aus 7.2 sind die einzige Stelle, an der zwei Geräte Datensätze anlegen, ohne dass ein Spieler handelt; jedes erhält daher eine feste uid aus seiner Etage und seinem Platz, starter.room.1 bis starter.room-up.8, statt einer zufälligen: Zwei Geräte, die kalt starten, legen dieselben sechzehn uids an, nicht sechzehn Paare, die der Neuaufbau zwischen Boden und Ablage aufteilen würde. Vor dem Neuaufbau fasst repair Datensätze mit derselben uid zu einem zusammen, so wie ModelContext.profile() die doppelten Profile, die die Synchronisierung hinterlässt, bereits zu dem mit der kleinsten uid zusammenführt.77 Wo zwei Kopien voneinander abweichen, weil ein Gerät sein Startstück verschoben hat, bevor das andere zum ersten Mal startete, behält die Zusammenführung die Kopie, die nicht mehr auf ihrer Startzelle steht, und von zwei verschobenen Kopien die mit der kleineren Reihe, dann Spalte (mein Vorschlag). Löscht das Wegräumen eines Stücks dessen Datensatz, kommt ein auf einem Telefon weggeräumtes Startstück zurück, wenn ein zweites Telefon kalt startet; diesen Fall regelt das Briefing nicht.
Platzierung. Der Einrichtungsmodus legt eine SwiftUI-Ablage über die RealityView des Raums. Ein Ablageelement ist draggable mit seiner Art als Transferable-Nutzlast; die Raum-View ist ein Ablageziel.53 Unter iOS 26 übergibt dropDestination(for:action:isTargeted:) der Aktion den Ablagepunkt in den Koordinaten der View, und der Punkt wird über den bekannten Ganzpixel-Maßstab der Kamera einer Zelle zugeordnet: cell = floor((point - mapOrigin) / tileSizeInPoints).54 Weil Apples Seite diese Form in iOS 27.2 als veraltet führt, baut das Briefing auch die DropSession-Form und liest die Position aus der Session, falls sie eine mitführt; diese Seite wurde nicht gelesen.54 Ein platziertes Stück wird mit SpatialTapGesture ausgewählt und mit DragGesture bewegt, rastet Zelle für Zelle ein, und seine Grundfläche wird pro Zelle eingefärbt, so wie Stardew seine Tiles einfärbt.565516
VoiceOver. Im Einrichtungsmodus ist jedes platzierte Stück ein Bedienungshilfen-Element, zum Beispiel Sofa, drei mal zwei, Spalte 9, Reihe 8, mit den benannten Aktionen Nach links, Nach rechts, Nach oben, Nach unten, Drehen (nur Stühle) und Wegräumen.5758 Ein Rotor namens „Möbel“ listet die Stücke des Raums.60 Die Aktion Platzieren eines Ablageelements setzt das Stück auf die zulässige Zelle, die der Ankunft am nächsten liegt, und fokussiert es. Wand- und Bodenstile sind anpassbare Elemente: nach oben und unten wischen zum Durchschalten.59 Jede Ablehnung wird als Ansage gesprochen, zum Beispiel Verschieben nicht möglich: Das Sofa würde das Regal abschneiden.61 Die Regeln aus 7.1 sind eine einzige Funktion, Stimme und Berührung können also nie voneinander abweichen.
Abnahme. Ein Unit-Test, dass repair eine Überlappung zweier Geräte in beiden Reihenfolgen gleich auflöst. Die Merge-Regression mit zwei Geräten, mit beiden Datensätzen in beiden Eingabereihenfolgen: Auf room, wie die Schmiede es heute anlegt, platziert Gerät A ein Bett bei (9,3) und Gerät B einen Nachttisch bei (6,4); jede Platzierung besteht allein die vollständige Prüfung; nachdem beide synchronisiert sind, liefert repair für beide Reihenfolgen denselben Raum, behält das Stück mit der kleineren uid, legt das andere mit einer Meldung, die die Vitrine nennt, in die Ablage, und der Lauf von der Ankunft erreicht weiterhin beide Zellen vor der Vitrine; mit vertauschten uids wird das andere Stück behalten.66 Ein Test, dass repair eine zulässige Etage mit 16 Stücken unverändert lässt, wenn ihre Datensätze in mehrere Reihenfolgen gemischt werden. Ein Test, dass 17 synchronisierte Stücke auf einer Etage, die bis auf die Obergrenze zusammen zulässig sind, als 16 zurückkommen, mit der größten uid in der Ablage. Ein Test, dass zwei kalt startende Geräte, die jeweils die Startstücke anlegen, in jeder Synchronisierungsreihenfolge zu einem Datensatz pro Startzelle synchronisieren, 8 pro Etage, mit nichts in der Ablage; und dass ein Startstück, das auf einem Gerät verschoben wurde, bevor das andere startet, dort bleibt, wohin es verschoben wurde. Ein UI-Test, der ein Ablageelement auf eine Zelle zieht und auf dieser Zelle ein PlacedPiece findet. Unit-Tests der VoiceOver-Aktionshandler, direkt auf dem Einrichtungsmodell aufgerufen, nicht über VoiceOver: Platzieren setzt einen Stuhl auf die zulässige Zelle, die der Ankunft am nächsten liegt; Nach links, Nach rechts, Nach oben und Nach unten bewegen ihn je eine Zelle oder lehnen mit einem Grund ab; Drehen schaltet seine Ausrichtung weiter; Wegräumen legt ihn in die Ablage zurück; und jede Ablehnung erzeugt den Ansagetext, den der Bildschirm senden wird. In einem Simulator mit iOS 27 ein UI-Test, der VoiceOver über XCUIVoiceOverService einschaltet, den Fokus auf ein platziertes Stück bewegt und seine gesprochene Beschriftung prüft, etwa Sofa, drei mal zwei, Spalte 9, Reihe 8.63 Ein Audit des Einrichtungsmodus mit performAccessibilityAudit, das keine Probleme meldet.62 Eine manuelle Prüfung auf einem Gerät mit eingeschaltetem VoiceOver, mit Datum und Build festgehalten, weil kein XCUIAutomation-Aufruf eine eigene Aktion ausführt, einen Rotor dreht oder eine Ansage liest: einen Stuhl aus der Ablage platzieren, ihn mit den Aktionen in vier Richtungen bewegen, drehen, wegräumen, mit dem Rotor „Möbel“ zwischen den Stücken springen und jede abgelehnte Bewegung angesagt hören. Vor alldem ein Spike: im Simulator unter dem echten Maßstab der Kamera eine Nutzlast auf den Raum ablegen und die berechnete Zelle gegen die Zelle unter dem Finger protokollieren, weil diese Zuordnung ungetestet ist.
7.8 Aufräumarbeiten
- WORLD.md erhält die Raumregeln mit den Zahlen dieses Briefings, damit das Designdokument sagt, was der Weltenbeitrag veröffentlicht hat.6710
- Docstring und Tabelle von
interiors.pywerden auf die eine oder andere Weise in Einklang gebracht: Entweder sagt der Docstring, dass die kleinen Stücke die Ausnahme sind, oder die kleinen Stücke werden mit zwei Tiles neu gezeichnet. Das Briefing behält sie.9
Nicht in diesem Briefing
- Stapeln über die eigenen Plätze des Regals hinaus: kein Stück auf einem Tisch, keine Puppe-auf-Tisch-Oberflächen. Die Idee der Oberfläche ist der nächste Schritt, sobald Obergrenze und Lauf sich bewährt haben.
- Stücke, die beim Betreten etwas tun: keine Klangmatten, keine Federn, keine Rutschen.
- Platzierung in halben Zellen. Das Raster bleibt bei ganzen Zellen von 16 Pixeln.
- Die Einrichtung der Ausstellungshalle. Ihre Podeste bleiben der wöchentlichen Ausstellung vorbehalten.
- Ein Einrichtungswettbewerb. Die wöchentliche Halle ist der Wettbewerb, bewertet nach ihren eigenen Regeln.
- Grundrisse: Die Form des Hauses ändert sich nicht.
- Besuche bei Fremden außerhalb einer gemeinsamen Plaza und jede Rangliste von Räumen über die eigene Summe des Gastgebers hinaus.
Niemals, beim Einrichten
- Kein Franchise-Vokabular für irgendetwas davon: nicht die Basis, nicht der Dekorationscomputer, nicht die Akademie, nicht das Datenmischen und kein Name einer Dekoration. Nur die eigenen Wörter von Kiradex. Die Spiele werden in diesem Beitrag als Tatsachen über veröffentlichte Werke genannt, nicht als Funktionen.
- Kein Stück, das einer Dekoration aus einem Spiel nachempfunden ist: keine Wesen-Puppen oder -Kissen, nichts Ballförmiges, keine Poster von Wesen, keine Matte, die nach einer Attacke benannt ist. Die Stücke der Schmiede sind Haushaltsmöbel und bleiben es.
- Kein Wesen in irgendeinem Raum. Pflanzen sind Pflanzen.
- Keine gekauften, zufälligen oder limitierten Möbel (7.5).
- Nichts in einem Raum wird gezielt, geworfen, gefangen, beschworen, zum Kampf freigelassen oder geritten.
- Kein Code und keine Daten aus den Dekompilierungen in der App oder der Schmiede. Der dekompilierte Quellcode dient dem Studium und der Messung; die obigen Regeln sind in den eigenen Begriffen von Kiradex neu formuliert.
Abnahme. Ein grep über den String-Katalog, die PIECES-Namen der Schmiede und die Tabellen des Servers nach einer Wortliste aus dem Franchise-Vokabular in Punkt 1, dazu „decoration“, „doll“, „Happy Home“ und „Academy“, liefert nichts.
Wichtigste Erkenntnisse
Wenn Sie die Grafik zeichnen
- Zeichnen Sie Möbel in der Frame- oder Zellbreite der Figur. Der Spielerframe in Smaragd ist eine 16-Pixel-Zelle breit, und seine Dekorationen belegen im Schnitt 2,43 Zellen; der Sammler von Kiradex steht in einer Zelle von zwei Tiles Breite, und seine Stücke belegen im Schnitt 3,04.2729
- Legen Sie einen Katalog aus überwiegend kleinen Stücken mit wenigen großen Ankern an: 71 der 120 Dekorationen in Smaragd belegen eine Zelle, und seine Tische und 3-mal-3-Matten sind die Anker, auf denen die kleinen stehen.224
- Zeichnen Sie Tapeten und Böden aus Regeln und Rampen, damit ein Stil ein Zeichner und eine Palette ist, kein neues Gemälde: zwei Wandflächen in drei Rampen und drei Böden in zwei Rampen ergeben für Kiradex je sechs.64
Wenn Sie die Engine bauen
- Speichern Sie ein platziertes Stück als Art, Zelle und Ausrichtung. Smaragd speichert eines in zwei Bytes, eine Basis in 32.1112
- Prüfen Sie die Platzierung pro Zelle, dann laufen Sie den Weg ab. Die Prüfung pro Zelle in Smaragd fragt nie, ob die Tür noch irgendetwas erreicht; im Erdgeschoss von Kiradex schneiden 713 von 229.891 zulässigen Paaren zusätzlicher Stücke die Treppe, den Gastgeber oder eine Ausstellung ab, ohne sie zu belegen.420
- Mit CloudKit-Synchronisierung kann SwiftData keine Eindeutigkeitsbedingung erzwingen; ein Stück pro Zelle ist also eine reine Reparaturfunktion, die auf jedem Gerät denselben Gewinner wählt. Lassen Sie sie den Raum in fester Reihenfolge durch die vollständige Platzierungsprüfung neu aufbauen, Lauf eingeschlossen: Zwei Änderungen, die jede auf ihrem eigenen Telefon bestehen, können zusammen eine Ausstellung abschneiden.225266
- Geben Sie VoiceOver Verben statt eines Rasters zum Durchwischen: benannte Bewegungsaktionen, einen Rotor der Stücke, eine Ansage für jede Ablehnung.586061
Wenn Sie den Spielablauf gestalten
- Begrenzen Sie, was platziert wird, nicht, was besessen wird: Smaragd platziert 16 und speichert 150. Die Obergrenze ist die Komposition.2
- Werten Sie an einem festen Tag mit jeder aufgeführten Quelle, heben Sie die Messlatte nur, wenn das Haus wächst, und bestrafen Sie nie eine verpasste Woche: Die Hausseite des Wikis, die kein Spiel nennt, sagt, ein mindestens eine Woche vernachlässigtes Haus füllt sich mit Kakerlaken, und die HHA-Tabelle von New Horizons zieht pro Kakerlake 2.500 ab.56
- Lassen Sie den Katalog durch Spielen wachsen. Smaragd verkauft 24 seiner 120 Dekorationen nie für Geld und zwei weitere nur gegen Asche, die beim Laufen gesammelt wird; Stardew verkauft nach dem ersten Ausbau einen Katalog für 200.000g, der dann die in ihm gelisteten Möbel für 0g verkauft; und Habbos knappe und zufällige Möbel sind das Gegenbeispiel für eine Kinder-App.14151617
- Besucher schauen, fassen nichts an und hinterlassen ein Like pro Tag auf einer Summe, die nie sinkt.51819
Häufige Fragen
Wie viele Gegenstände sollte man in einem Raum platzieren können?
Genug, um zu komponieren, wenig genug, um auszuwählen. Pokémon Smaragd-Edition begrenzt eine Basis auf 16 platzierte Dekorationen und das Schlafzimmer auf 12, etwa ein Viertel der 60,2 begehbaren Zellen einer durchschnittlichen Basis. Animal Crossing: New Horizons erlaubt laut Nookipedia 150 pro Raum, Wand- und Deckengegenstände mitgezählt, und Final Fantasy XIV erlaubt seit Patch 7.5 im Innenbereich 150 bis 600 je nach Wohnungsgröße. Für einen 2D-Raum ohne Wand- oder Deckenebene ist meine Schwelle eine Obergrenze unter einem Gegenstand pro drei Bodenzellen, unter der Smaragd mit 0,27 knapp bleibt; die von Kiradex vorgeschlagenen 16 sind 0,13 pro Bodenzelle.2579
Wie funktioniert das Dekorationssystem von Pokémon Smaragd?
Es besteht aus Daten. 120 Dekorationen tragen je eine Kategorie, eine Form von 1 bis 9 Zellen, einen Preis und eine von fünf Berechtigungen (fester Boden, begehbarer Boden, dahinter, Wand oder Sprite). CanPlaceDecoration prüft jede belegte Zelle: einfacher Boden, kein Objekt und auf der Zelle, auf der die Spielfigur stand, kein Tile mit nicht normalem Ebenentyp; Wandzellen für Poster; eine tragende Zelle für Puppen und Kissen, für die meisten klein oder groß und für eine Puppe mit 1 mal 2 groß. 18 Dekorationen bieten kleine tragende Zellen: sieben Tische, drei Ziegel, ein Reifen und sieben Matten. Platzierte Dekorationen werden als je eine ID und ein Positionsbyte gespeichert.2411
Wie bewertet die Wohnbewertungsakademie einen Raum?
Nach Nookipedias Tabellen, die für New Horizons keine Quelle nennen: eine Bewertung per Post an den meisten Sonntagmorgen, die Ränge B, A und S, eine Schwelle für S, die mit dem Haus von 15.000 auf 90.000 steigt, 1.000 Punkte bei jeweils 6, 10, 15 und 20 Gegenständen in einem Raum, Boni pro Gegenstand für Serien, Sets, Kategorien, eine dominante Farbe und Feng-Shui sowie Abzüge für Kakerlaken, Müll und Gegenstände, die zur Wand zeigen. Die Punkte pro Gegenstand sind im Wiki ein unvollständiger Abschnitt.6
Kann SwiftData mit CloudKit-Synchronisierung einen Gegenstand pro Rasterzelle erzwingen?
Nicht mit #Unique. Apples Leitfaden zum Synchronisieren von SwiftData führt Eindeutigkeitsbedingungen unter den Funktionen auf, „that CloudKit doesn’t support natively“ (die CloudKit nicht nativ unterstützt), und CloudKit verlangt, dass jede Beziehung optional ist. Geben Sie jeder Eigenschaft einen Standardwert, halten Sie nichts eindeutig, und lösen Sie die Stücke zweier Geräte auf einer Zelle in einer reinen Funktion auf, die bei jedem Lesen läuft und auf jedem Gerät denselben Gewinner wählt. Lassen Sie diese Funktion den Raum in fester Reihenfolge durch die vollständige Platzierungsprüfung neu aufbauen, nicht nur durch den Überlappungstest, denn zwei Änderungen, die jede für sich zulässig sind, können zusammen eine Regel verletzen.225166
Wie macht man ein Möbelraster mit Drag and Drop für VoiceOver zugänglich?
Machen Sie jedes platzierte Stück zu einem Bedienungshilfen-Element mit Größe und Zelle in der Beschriftung, geben Sie ihm benannte Aktionen, um es eine Zelle in jede Richtung zu bewegen, zu drehen und wegzuräumen, fügen Sie einen Rotor hinzu, der die Stücke des Raums auflistet, und sagen Sie jede abgelehnte Bewegung mit ihrem Grund an. Apples accessibilityAction(named:_:), accessibilityRotor(_:entries:) und AccessibilityNotification.Announcement decken jeden Teil ab, und performAccessibilityAudit prüft den Bildschirm in einem UI-Test. Das Audit drückt die benannten Aktionen nicht, und in Xcode 27.0 tut das auch kein XCUIAutomation-Aufruf; testen Sie also die Aktionshandler direkt und prüfen Sie Aktionen, Rotor und Ansagen von Hand mit eingeschaltetem VoiceOver.5860616263
Sollte ein Kinderspiel Möbel verkaufen?
Meine Lesart ist nein, für eine App mit Altersfreigabe ab 9: Eine Dekorationsschleife, die gekauft, zufällig oder knapp ist, handelt sich Lootbox- und Druckfragen ein, die das Spiel nicht braucht. Smaragd verkauft 24 seiner 120 Dekorationen nie für Geld (es sind Preise, Tauschware für Kampfpunkte und Geschenke) und zwei weitere nur gegen Asche, die beim Laufen gesammelt wird; und nach dem ersten Hausausbau verkauft Stardew einen Möbelkatalog für 200.000g, der dann die in ihm gelisteten Möbel für 0g verkauft, wobei manche Stücke weiterhin nur aus dem Museum, von Festen und aus anderen Quellen kommen. Habbos kaufgetriebene Wirtschaft mit Raritäten und zufälligen knackbaren Möbeln zeigt das andere Ende.14151617
Warum haben Besucher in diesen Spielen nur Lesezugriff?
Nach meiner Lesart, weil der Raum der Ausdruck des Gastgebers ist. Besucher in Animal Crossing können nicht „modify the interior in any way“ (die Einrichtung in irgendeiner Weise verändern), Besucher in Habbo können ohne die Rechte des Besitzers keine Möbel abstellen oder verschieben, und in Club Penguin können Besitzer ihr eigenes Iglu einrichten, „but not other player’s igloos“ (aber nicht die Iglus anderer). Was Besucher stattdessen bekommen, ist ein Zeichen, das zählt: das eine Like pro Design und Tag von Club Penguin, auf einer Gesamtsumme, die nie sinkt.518819
Verwandt auf dieser Website: Pixel-Art-Bauten: Häuser, Hallen und Innenräume auf dem iPhone hat die Innenräume gebaut, die dieses Briefing einrichtet, und sein Abschnitt über Innenräume beschreibt die Räume von 14 mal 11, die Build 26 ersetzt hat; Pixel-Art-Welten auf dem iPhone ist der Ort, an dem die Obergrenze von sechzehn, die Besuche nur zum Ansehen, das tägliche Like und der Sonntagsbericht zuerst veröffentlicht wurden; Pixel-Art-Menschen: Figuren und ein Editor auf dem iPhone behandelt den Sammler, dessen Breite den Rhythmus der Möbel bestimmt; Pixel-Art-Stadtlayout: von Alabastia bis Pelican Town, vermessen vermisst die Stadt, in der die Häuser stehen; Pixel-Art in Bewegung: Laufen, Kamera und Türen auf dem iPhone behandelt das Laufen und die Türen, durch die ein Besucher hereinkommt; und Pixel-Art-Routen: Kartenverbindungen und Bezirke auf dem iPhone behandelt das Land jenseits der Stadt.
Quellen
-
pret,
pokeemerald/include/constants/global.h(SECRET_BASES_COUNT 20,DECOR_MAX_SECRET_BASE 16,DECOR_MAX_PLAYERS_HOUSE 12), Commit731ad5b(1. Oktober 2026), gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/include/constants/global.h. ↩↩↩↩↩ -
Messung des Autors, 5. Oktober 2026:
measure_emerald_decor.pyim Belegordner des Autors für diesen Beitrag, Ausgabe gespeichert alsmeasure_emerald_decor.out, ausgeführt auf einem flachen Klon vonpokeemerald(pret) bei Commit731ad5b. Es liest die Obergrenzen ausinclude/constants/global.h; die 120 Dekorationen (ohneDECOR_NONE) mit Kategorie, Form, Berechtigung und Preis aussrc/data/decoration/header.h; die Inventar-Arrays pro Kategorie ausinclude/global.h; das Verhaltensbyte jedes Dekorations-Metatiles ausdata/tilesets/secondary/secret_base/metatile_attributes.bin; und jedes der 24 Basislayouts sowie das Schlafzimmer ausdata/layouts/layouts.jsonund der zugehörigenmap.bin, wobei begehbare Zellen aus den Kollisionsbits gezählt werden. Zellen pro Dekoration aus den Formnamen; Obergrenze geteilt durch durchschnittliche begehbare Zellen 16 / 60,2 = 0,27. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
pret,
pokeemerald/src/data/decoration/header.h(gDecorations[]: Name, Berechtigung, Form, Kategorie, Preis und Tiles pro Dekoration; Eintrag 0DECOR_NONE), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/src/data/decoration/header.h. ↩↩↩↩ -
pret,
pokeemerald/src/decoration.c(CanPlaceDecoration,DecorationItemsMenuAction_AttemptPlace,isPlayerRoom,gText_CantPlaceInRoom; die Prüfungen der tragenden Zellen für Sprite-Dekorationen), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/src/decoration.c. Im Sprite-Fall braucht eine Dekoration mit 1 mal 2MetatileBehavior_HoldsLargeDecoration, jede andere nimmt eine kleine oder große tragende Zelle;IsntInitialPositionlehnt die Startzelle der Spielfigur nur ab, wenn das Tile der Dekoration dort einen anderen Ebenentyp alsMETATILE_LAYER_TYPE_NORMALhat. Dass nichts in der Funktion einen Weg prüft, ist die Lesart des Autors. ↩↩↩↩↩↩↩↩↩↩ -
Nookipedia, „Player house“ (Obergrenzen pro Raum: 24 in Wild World, 64 in City Folk, 48 in New Leaf, 150 in New Horizons „including wall and ceiling-mounted furniture“; die Ausbautabelle von New Horizons mit Raumgrößen; „only the main room can be expanded in size“; die Akzentwand ab 2.0; Besucher dürfen nicht „modify the interior in any way“; wer sein Haus „for at least one week“ vernachlässigt, findet es von Kakerlaken befallen), abgerufen und gespeichert am 5. Oktober 2026 als
nook-player-house.htmlund.txtim Belegordner zu den Räumen, https://nookipedia.com/wiki/Player_house. Die 4,2 Gegenstände pro Tile sind die Rechnung des Autors (150 / 36). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Nookipedia, „Happy Home Academy“ (die Sonntagsbewertung; die Ränge B, A und S pro Ausbau; die Punkteboni und Abzüge in New Horizons; „This section is a stub“ für die Punkte pro Gegenstand in New Horizons; der Hinweis der Belohnungstabelle „Includes data sourced from the Data Spreadsheet for Animal Crossing New Horizons“), abgerufen und gespeichert am 5. Oktober 2026 als
nook-hha.htmlund.txt, https://nookipedia.com/wiki/Happy_Home_Academy. Die Bonus- und Abzugstabellen tragen auf der Seite keinen Beleg. ↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Square Enix, The Lodestone, Patchnotes zu Final Fantasy XIV Patch 7.5 (aktualisiert am 13. Mai 2026; die Grenzen für Einrichtungsgegenstände innen und außen vorher und nachher im Abschnitt Wohnen; der Hinweis zur Anzeige von 400 Einrichtungsgegenständen; „Furnishings from the FFXIV Furnishing Design Contest have been added“), abgerufen und gespeichert am 5. Oktober 2026 als
ffxiv-patch-7-5.htmlund.txt, https://eu.finalfantasyxiv.com/lodestone/topics/detail/9beb8a7b5c46944cd80ed92b2b8e972395fbea80/. Der Spielleitfaden zum Wohnen, https://na.finalfantasyxiv.com/lodestone/playguide/contentsguide/housing/, lieferte am selben Tag HTTP 404; Grundstücksgrößen sind in diesem Beitrag nicht belegt. ↩↩↩↩↩↩↩↩↩↩ -
Club Penguin Wiki (Fandom), „Furniture“ (die Besitzgrenze von 99 für die meisten Möbel; „igloos have a limit preventing more than 99 units of furniture being placed at once“; Besitzer richten ihr eigenes Iglu ein, „but not other player’s igloos“; die sechs kostenlosen Gegenstände für Nichtmitglieder vom 26. Juli 2012), gelesen über die MediaWiki-API des Wikis und gespeichert am 5. Oktober 2026 als
cp-fandom-furniture.htmlund.txt, https://clubpenguin.fandom.com/wiki/Furniture. Einzige Quelle. ↩↩↩↩↩↩ -
Messung des Autors, 5. Oktober 2026:
measure_kiradex_interiors.pyim Belegordner zu den Räumen, Ausgabemeasure_kiradex_interiors.out, dasscripts/forge/interiors.pyaus dem Kiradex-Repository mit Pythonsastparst (die Datei wird nie importiert oder ausgeführt): die 23 Einträge vonPIECESmit Breite, Höhe und Flag für frei stehend; die BuchstabenkartenROOM,ROOM_UPundHALLmit ihren Möbellisten und Plätzen; Bodenzellen gezählt als die Buchstabeno t s r; bewegliche Stücke ohnestairs,stairs_downundpillar. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Blake Crosley, „Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew“, blakecrosley.com, 3. Oktober 2026 (die Raumregeln: „a furnishing cap of sixteen“, Besuche nur zum Ansehen, ein Like einmal am Tag, eine Summe, die nie sinkt, ein Sonntagsbericht „with its point sources listed“; im selben Absatz „Patron flair stays on the name-plate and the room skin“; die in der Palworld-Klage genannten Patente; die Einpassung der Kamera mit Gerätepixeln pro Texel), https://blakecrosley.com/blog/pixel-art-world-on-iphone. ↩↩↩↩↩↩↩↩↩↩
-
pret,
pokeemerald/include/global.h(u8 decorations[DECOR_MAX_SECRET_BASE]undu8 decorationPositions[DECOR_MAX_SECRET_BASE]im Datensatz der Geheimbasis; die Inventar-Arrays für Dekorationen pro Kategorie im Spielstand), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/include/global.h. ↩↩↩↩↩↩↩ -
pret,
pokeemerald/src/secret_base.c(Dekorationspositionen gelesen mit x im oberen und y im unteren Nibble), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/src/secret_base.c. ↩↩↩ -
pret,
pokeemerald/include/decoration.h(enum DecorationPermissionmit dem Kommentar „The nomenclature here describes collision and placement permissions, in that order.“;enum DecorationShape, mitDECORSHAPE_3x1undDECORSHAPE_1x3als unbenutzt markiert), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/include/decoration.h. ↩↩↩ -
Messung des Autors, 5. Oktober 2026:
measure_emerald_sources.pyim Belegordner zu den Räumen, Ausgabemeasure_emerald_sources.out, das pokeemerald731ad5bnach jederDECOR_-Konstante durchsucht, in denpokemartdecoration-Listen vondata/maps/*/scripts.inc, im Skript der Preisecke, in der Tauschtabelle der Kampfanlage insrc/data/battle_frontier/battle_frontier_exchange_corner.hund im ersten Argument vongivedecorationundadddecorationirgendwo unterdata/: 90 in fünf Läden für Geld verkauft, 3 am Preisschalter, 15 gegen Kampfpunkte, 10 per Skript verschenkt, 24 nie für Geld verkauft, 6 in keiner dieser Quellen. Zwei der sechs sind das Paar der Glasbläserei (Anmerkung 15); die anderen vier, drei legendäre Puppen und eine weitere Puppe, wurden nicht verfolgt. ↩↩↩↩↩↩↩↩ -
pret,
pokeemerald/data/maps/Route113_GlassWorkshop/scripts.inc(PRETTY_CHAIR_PRICE, 6000,PRETTY_DESK_PRICE, 8000, bezahlt ausVAR_ASH_GATHER_COUNT;Route113_GlassWorkshop_EventScript_NotEnoughAshund_NotEnoughAshForItemziehen die Zahl vom Preis ab und zeigen die Differenz als noch zu gehende Schritte; eine Suche insrc,dataundincludefindetVAR_ASH_GATHER_COUNTaußer in seiner Definition nur dort und infield_tasks.c) undpokeemerald/src/field_tasks.c(eine Asche pro Schritt durch Aschegras, solange der Beutel getragen wird, bis 9999), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/data/maps/Route113_GlassWorkshop/scripts.inc und https://github.com/pret/pokeemerald/blob/master/src/field_tasks.c. ↩↩↩↩↩↩↩ -
Stardew Valley Wiki, „Furniture“, Revision 193159 (Robin und der fahrende Händlerwagen „offer a random selection of furniture each day they are open“; „After the first Farmhouse upgrade, Robin also offers the Furniture Catalogue for sale“; 0g „in unlimited quantity“; die Zeile der Katalogtabelle für den Möbelkatalog, verkauft in der Zimmerei (Carpenter’s Shop) für 200.000g; „Some furniture can be obtained only by donating items to the Museum“, Feste, das Casino und andere Quellen; die grünen und roten Platzierungsquadrate), abgerufen und gespeichert am 5. Oktober 2026 als
sdv-furniture.htmlund.txt, https://stardewvalleywiki.com/Furniture. ↩↩↩↩↩↩↩↩↩↩↩ -
Sulake, Habbo-Hilfecenter, „Furni Definitions“ (Kampagnenmöbel, „4-12 months“ für Händler zurückgehalten, Raritäten, die „will never be re-released“, knackbare seltene Möbel, LTDs „in limited quantities“), Artikeltext gespeichert am 5. Oktober 2026 in
habbo-articles.txtim Belegordner zu den Räumen, https://help.habbo.com/hc/en-us/articles/360011621699-Furni-Definitions. ↩↩↩↩↩↩↩ -
Sulake, Habbo-Hilfecenter, „What is Furni?“ („To buy furni you need credits, diamonds or duckets“; „You can’t drop or manipulate furni in other Habbo’s rooms unless you’re a member of a group“), Artikeltext gespeichert am 5. Oktober 2026 in
habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/360011512940-What-is-Furni. ↩↩↩↩↩↩↩ -
That Penguin Game, „Your Igloo“ (eine Wiedergabe der Hilfeseiten von Club Penguin; ihre Herkunft wurde nicht geprüft: „You can Like any igloo design once every day!“; einzelne Likes und Gesamtsumme; „Likes are permanent, so your Grand Total Likes will never decrease, even if you delete an igloo design!“; die Einstellungen Everyone und Friends), abgerufen und gespeichert am 5. Oktober 2026 als
tpg-your-igloo.htmlund.txt, https://thatpenguingame.com/club-penguin-help/game-help/your-igloo/. Einzige Quelle. ↩↩↩↩↩↩ -
Messung des Autors, 5. Oktober 2026:
measure_path_rule.py, neben dem Entwurf des Beitrags abgelegt, Ausgabemeasure_path_rule.outundpath_rule.json. Es parstscripts/forge/interiors.pyaus dem Kiradex-Repository mitast, stellt die exportierten Buchstaben wieexport()wieder her, läuft von der Ankunft jeder Etage in vier Richtungen überotsrUD(die begehbare Menge voncheck()der Schmiede) und meldet Treppe, Gastgeber und die vordere Zelle jedes bestückten Platzes (die erste Zelle direkt südlich hinter Regal und Wandband). Danach probiert es inroomjede Platzierung eines zusätzlichen frei stehenden Stücks (10 Zeichnungen: Stühle einmal, Betten einmal) auf freiem Boden abseits der Ankunfts-, Treppen- und Gastgeberzellen (733 Platzierungen; 44 schneiden ein Ziel ab, alle durch Belegen) und jedes nicht überlappende Paar zusätzlicher Stücke abseits aller Ziele (689 Einzelplatzierungen, 229.891 Paare; 713 schneiden ein Ziel ab). ↩↩↩↩↩↩↩↩↩↩ -
Berechnung des Autors, 5. Oktober 2026:
score_max.pyim Ordnerfigures/des Entwurfs, Ausgabescore_max.outundscore_max.json: die Wertungstabelle des Briefings, summiert für zwei Etagen mit 16 Stücken, jede Zeile an ihrer Obergrenze (3.200 + 3.000 + 6.400 + 9.600 + 500 + 600 + 300 = 23.600), und eine Etage mit 8 Stücken ohne Set-, Rampen- oder Platzzeilen (800 + 500 = 1.300). Dasselbe Skript bewertet die drei Referenzhäuser, die die vorgeschlagenen Schwellen der Hausstufen setzen, mit den eigenen Zeilen der Tabelle: beide Etagen mit 10 Stücken und vollem Regal, 4.500; beide Etagen mit 16 Stücken und vollem Regal, voller Vitrine und voller Tafel, 7.600; dieses Haus plus ein Ensemble von 8 und 70 % einer Rampe auf jeder Etage, 14.000; und das Starthaus, beide Etagen mit 8, 2.600. ↩↩↩↩ -
Apple Developer Documentation, „Syncing model data across a person’s devices“ (SwiftData; „does include a small number of features that CloudKit doesn’t support natively, such as unique constraints and nonoptional relationships“; „CloudKit requires all relationships to be optional“), Dokumentations-JSON gespeichert am 5. Oktober 2026 als
apple-swiftdata-cloudkit-sync.htmlund.txt, https://developer.apple.com/documentation/swiftdata/syncing-model-data-across-a-persons-devices. ↩↩↩↩↩↩ -
pret,
pokeemerald/src/new_game.c(NewGameInitDataruftClearDecorationInventories()auf) undpokeemerald/src/decoration_inventory.c(ClearDecorationInventorysetzt jeden Platz jeder Kategorie aufDECOR_NONE), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/src/new_game.c. ↩ -
Abbildungen des Autors, 5. Oktober 2026:
make_figures.pyim Ordnerfigures/des Entwurfs, dassrc/data/decoration/header.haus pokeemerald731ad5b, die in den Anmerkungen 1, 5, 8 und 7 zitierten Obergrenzen,path_rule.jsonundscore_max.jsonliest, jede Summe gegen die obigen Messungen prüft undemerald-decor-sizes.svg,caps.svg,room-path-rule.svgundscore-sources.svgschreibt. Die Grundflächenklassen (1 Zelle, 2 Zellen, 4 bis 6, 8 oder 9) gruppieren die Formen nach belegten Zellen. Palette mit dem Dataviz-Validator geprüft; keine Spielgrafik. ↩↩↩↩↩ -
pret,
pokeemerald/include/constants/metatile_behaviors.h(die VerhaltenMB_SECRET_BASE_*,MB_SLIDE_SOUTH,MB_HOLDS_SMALL_DECORATION,MB_HOLDS_LARGE_DECORATION), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/include/constants/metatile_behaviors.h. ↩ -
pret,
pokeemerald/data/layouts/layouts.json(die 24 LayoutsLAYOUT_SECRET_BASE_*und die Obergeschosse der beiden Spielerhäuser, mit Breiten und Höhen) und diemap.binjedes Layouts, Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/data/layouts/layouts.json. Spannen für Breite, Höhe und Fläche stammen vom Autor aus der Ausgabe der Messung. ↩ -
Messung des Autors, 5. Oktober 2026:
measure_character_cell.pyim Belegordner zu den Räumen, Ausgabemeasure_character_cell.out, das die PNG-Header vongraphics/object_events/pics/people/brendan/walking.png(144 mal 32) unddecorating.png(16 mal 32) aus pokeemerald liest sowie die Zelle (32 mal 40),figureTop(7) undunderFeet(2) inKiradex/Resources/World/characters.jsonaus dem Kiradex-Repository. Das Skript misst die Zelle und die Höhe der Figur (31 Pixel), nicht die Breite der gezeichneten Figur. ↩↩↩↩↩ -
pret,
pokeemerald/src/data/items.h(ITEM_SOOT_SACK,.fieldUseFunc = ItemUseOutOfBattle_CannotUse) undpokeemerald/src/data/text/item_descriptions.h(sSootSackDesc, eine feste dreizeilige Beschreibung), Commit731ad5b, gelesen am 5. Oktober 2026, https://github.com/pret/pokeemerald/blob/master/src/data/items.h. ↩↩ -
Nookipedia, „Furniture“ (Größen „ranging from 1.0×0.5“ bis 3 mal 3; Verschieben in halben Tiles; die Möbeltypen von New Horizons und Deckendekor ab 2.0; 2.076 Möbelstücke Stand 3.0.2, 1.074 per Update hinzugekommen; eine Serie aus „around 10 furniture items, as well as a matching wallpaper and flooring“), abgerufen und gespeichert am 5. Oktober 2026 als
nook-furniture.htmlund.txt, https://nookipedia.com/wiki/Furniture. ↩↩↩↩ -
Nookipedia, „Wallpaper“ (262 Tapeten in New Horizons Stand Version 1.9.0), abgerufen und gespeichert am 5. Oktober 2026 als
nook-wallpaper.htmlund.txt, https://nookipedia.com/wiki/Wallpaper. ↩ -
Nookipedia, „Flooring“ (215 in New Horizons), abgerufen und gespeichert am 5. Oktober 2026 als
nook-flooring.htmlund.txt, https://nookipedia.com/wiki/Flooring. ↩ -
Nookipedia, „Luna“ (der Abschnitt zu New Leaf: „any changes will not be saved and items cannot be brought back to the real world“; der Abschnitt zu New Horizons: ihre Dienste „work the same as they do in New Leaf“, und ein Dream Bell Exchange Ticket im Wert von 5.000 Sternis für jeden Upload), abgerufen und gespeichert am 5. Oktober 2026 als
nook-luna.htmlund.txt, https://nookipedia.com/wiki/Luna. ↩↩ -
Sulake, Habbo-Hilfecenter, „Rooms“ („You can own 200 rooms.“; „Wallpaper and flooring are stuck down“), abgerufen und gespeichert am 5. Oktober 2026 als
habbo-rooms.htmlund.txt, https://help.habbo.com/hc/en-us/articles/360011512640-Rooms. ↩↩↩↩ -
Sulake, Habbo-Hilfecenter, „What is Builders Club?“ (die Möbelgrenze „increased by 250“ pro Mitgliedsmonat; Speichern eigener Raumlayouts im Grundriss-Editor) und „What can I buy in Habbo?“ („Furni limits never go down.“), Artikeltexte gespeichert am 5. Oktober 2026 in
habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/360011621659-What-is-Builders-Club und https://help.habbo.com/hc/en-us/articles/360011620599-What-can-I-buy-in-Habbo. ↩ -
Sulake, Habbo-Hilfecenter, „Player to player trading in Habbo“ (ein Handelspass ist erforderlich; „There is no guide to what items of furni are worth“), Artikeltext gespeichert am 5. Oktober 2026 in
habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/4408726781842-Player-to-player-trading-in-Habbo. ↩↩ -
Sulake, Habbo-Hilfecenter, „Guidelines on user created games in Habbo“ („Placing more than three chance elements will disable all randomiser functions in the room.“), Artikeltext gespeichert am 5. Oktober 2026 in
habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/360011513060-Guidelines-on-user-created-games-in-Habbo. ↩ -
Sulake, Such-API des Habbo-Hilfecenters, Ergebnismengen für „furni“, „stack“ und „floor plan“, gespeichert am 5. Oktober 2026 als
habbo-search-furni,habbo-search-stackundhabbo-search-floorplan(.htmlund.txt) im Belegordner zu den Räumen; keines nennt eine Rastergröße, eine Stapelhöhe oder eine Möbelgrenze pro Raum. ↩ -
billsonnn,
nitro-react/src/components/floorplan-editor/common/Constants.ts(MAX_NUM_TILE_PER_AXIS = 64,HEIGHT_SCHEME = 'x0123456789abcdefghijklmnopq', 27 Höhenstufen nach dem leerenx), ein quelloffener Habbo-Client eines Drittanbieters, wie im Beitrag über Bauten am 3. Oktober 2026 zitiert, https://github.com/billsonnn/nitro-react/blob/main/src/components/floorplan-editor/common/Constants.ts. Die Spanne des Werkzeugs für die Stapelhöhe (0 bis 40 in Schritten von 0,01) stammt aus meinen früheren Notizen, aus demselben Client gelesen und am 5. Oktober 2026 nicht erneut gelesen. ↩ -
Blake Crosley, „Pixel-Art Structures: Houses, Halls and Interiors on iPhone“, blakecrosley.com, 3. Oktober 2026 (die Innenräume „each 14 by 11, with a two-row wall band“; Builds 22, 23 und, im abendlichen Nachtrag, 35; „Rooms have no wallpaper or floor choice and no placeable furniture; the house is dressed from the collection and nothing else“; die Warps
room:npc-…; das Objekt-Mesh; Stardews Farmhaus innen „10×7“, Anmerkung 54; die Nitro-Konstanten, Anmerkung 62), https://blakecrosley.com/blog/pixel-art-structures-on-iphone. ↩↩↩↩↩↩↩↩ -
Messung des Autors, 5. Oktober 2026:
measure_sdv_catalogue.pyim Belegordner zu den Räumen, Ausgabemeasure_sdv_catalogue.out: Möbelzeilen pro Abschnitt gezählt anhand des Namenslinks jeder Zeile auf der gespeicherten Seite „Furniture“ (Rev. 193159), unter Auslassung des Abschnitts Movie Posters, dessen Zeilen anderes Markup verwenden, sowie der Abschnitte References, History und Exploits; Tapeten und Bodenbeläge gezählt als verschiedene Symbole auf den gespeicherten Seiten „Wallpaper“ (Rev. 193801) und „Flooring“ (Rev. 190285); Zeilen mit dem Möbelkatalog als Quelle anhand seines Links gezählt. Zählungen von Wiki-Zeilen und -Symbolen, nicht der Datendateien des Spiels. ↩↩↩↩ -
Stardew Valley Wiki, „Wallpaper“, Revision 193801 („Wallpapers are single-use and do not stack. They cover the whole room they’re placed in“; „the character must be facing up by its wall“), abgerufen und gespeichert am 5. Oktober 2026 als
sdv-wallpaper.htmlund.txt, https://stardewvalleywiki.com/Wallpaper. ↩↩↩↩ -
Stardew Valley Wiki, „Flooring“, Revision 190285, abgerufen und gespeichert am 5. Oktober 2026 als
sdv-flooring.htmlund.txt, https://stardewvalleywiki.com/Flooring. ↩ -
Club Penguin Wiki (Fandom), „Igloo“ (die Geschichte: am 1. November 2005 Iglus für Spieler ohne Mitgliedschaft, die „were unable to decorate them with furniture“; am 26. Juli 2012 das neue Iglu-Erlebnis und „a set of six items available without membership“), gelesen über die MediaWiki-API und gespeichert am 5. Oktober 2026 als
cp-fandom-igloo.htmlund.txt, https://clubpenguin.fandom.com/wiki/Igloo. Die archivierten offiziellen Blogbeiträge, die es zitiert, lieferten am 5. Oktober 2026 zweimal HTTP 429 von der Wayback Machine. Einzige Quelle. ↩↩ -
Club Penguin Wiki (Fandom), „Igloo Contests“ (der erste Wettbewerb in Ausgabe 9, 15. Dezember 2005, ein Gewinner mit 5.000 Münzen; Gewinner „After one to four weeks“; Spielfiguren als Jury ab dem Halloween-Wettbewerb 2008; der Einreichknopf ab 2009; der letzte Wettbewerb im Dezember 2012; beim Ye Olde Igloo Contest 2008 zehn Gewinner mit je 25.000 Münzen und zwanzig Zweitplatzierte mit je 15.000), gelesen über die MediaWiki-API und gespeichert am 5. Oktober 2026 als
cp-fandom-contests.htmlund.txt, https://clubpenguin.fandom.com/wiki/Igloo_Contests. Einzige Quelle. ↩ -
Tristan Donovan, „The Replay Interviews: Will Wright“, Game Developer, 23. Mai 2011, abgerufen und gespeichert am 5. Oktober 2026 als
gd-replay-wright.htmlund.txt, https://www.gamedeveloper.com/business/the-replay-interviews-will-wright. Ein aufgezeichneter Vortrag von Wright aus den Jahren 1999 oder 2000 über den Baumodus wurde nicht gefunden. ↩↩ -
The Sims Wiki (Fandom), „Buy mode“ („purchase items from an object catalog and place them on the current lot“; die Sortierung nach Funktion in The Sims und The Sims 2; der Satz über die grüne und rote Grundfläche, auf der Seite The Sims 2 und The Sims 3 zugeordnet), gelesen über die MediaWiki-API und gespeichert am 5. Oktober 2026 als
sims-fandom-buymode.htmlund.txt, https://sims.fandom.com/wiki/Buy_mode. Einzige Quelle. ↩↩↩ -
The Sims Wiki (Fandom), „Environment“ (das Bedürfnis Raum und Umgebung, das „analyzes the design and content of the room that the Sim is currently standing in“), gelesen über die MediaWiki-API und gespeichert am 5. Oktober 2026 als
sims-fandom-environment.htmlund.txt, https://sims.fandom.com/wiki/Environment. Einzige Quelle. ↩ -
Extraktion des Autors, 5. Oktober 2026:
measure_apple_docs.pyim Belegordner zu den Räumen, Ausgabemeasure_apple_docs.out: Titel, Deklaration, Kurzbeschreibung und Plattformen aus jeder gespeicherten JSON-Seite der Apple-Dokumentation. Die fürdropDestination(for:action:isTargeted:)zitierten Veraltungsfelder wurden aus demselben gespeicherten JSON gelesen. ↩ -
Apple Developer Documentation,
Model()(SwiftData-Makro; „Converts a Swift class into a stored model that’s managed by SwiftData“; iOS 17.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftdata-model.htmlund.txt, https://developer.apple.com/documentation/swiftdata/model(). ↩ -
Apple Developer Documentation,
Unique(_:)(SwiftData-Makro; „Specifies the key-paths that SwiftData uses to enforce the uniqueness of model instances“; iOS 18.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftdata-unique.htmlund.txt, https://developer.apple.com/documentation/swiftdata/unique(_:). ↩ -
Kiradex-Repository,
Kiradex/Models/CardCopy.swift(Doc-Kommentar: „every property has a default and nothing is unique, for CloudKit“), gelesen am 5. Oktober 2026. ↩↩↩ -
Kiradex-Repository,
Kiradex/Models/PriceHistory.swift(Doc-Kommentar: „Shaped for CloudKit likeCollectionEntry: defaults everywhere, nothing unique“;PriceBookführt die Historien zweier Geräte „into the one with the smallestuid“ zusammen), gelesen am 5. Oktober 2026. ↩↩↩↩ -
Apple Developer Documentation,
draggable(_:)(SwiftUI; „Activates this view as the source of a drag and drop operation“; eineTransferable-Nutzlast; iOS 16.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-draggable.htmlund.txt, https://developer.apple.com/documentation/swiftui/view/draggable(_:). ↩↩ -
Apple Developer Documentation,
dropDestination(for:action:isTargeted:)(SwiftUI; eine Aktion vom Typ([T], CGPoint) -> Bool, der zweite Parameter „the drop location in this view’s coordinate space“; iOS 16.0; der Plattformeintrag für iOS nenntdeprecatedAt27.2 mit der Meldung „UsedropDestination(for:isEnabled:action:)with anactionthat takes aDropSessionparameter instead.“; der Verweis aufDropSession, „A description of a drop that is in progress“), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-dropdestination.htmlund.txt, https://developer.apple.com/documentation/swiftui/view/dropdestination(for:action:istargeted:). ↩↩↩↩↩ -
Apple Developer Documentation,
DragGesture(SwiftUI; „A dragging motion that invokes an action as the drag-event sequence changes“; iOS 13.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-draggesture.htmlund.txt, https://developer.apple.com/documentation/swiftui/draggesture. ↩↩ -
Apple Developer Documentation,
SpatialTapGesture(SwiftUI; „A gesture that recognizes one or more taps and reports their location“; iOS 16.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-spatialtap.htmlund.txt, https://developer.apple.com/documentation/swiftui/spatialtapgesture. ↩↩ -
Apple Developer Documentation,
accessibilityElement(children:)(SwiftUI; iOS 13.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-accessibilityelement.htmlund.txt, https://developer.apple.com/documentation/swiftui/view/accessibilityelement(children:). ↩↩ -
Apple Developer Documentation,
accessibilityAction(named:_:)(SwiftUI; „Actions allow assistive technologies, such as the VoiceOver, to interact with the view by invoking the action“; iOS 16.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-accessibilityaction-named.htmlund.txt, https://developer.apple.com/documentation/swiftui/view/accessibilityaction(named:_:). ↩↩↩↩ -
Apple Developer Documentation,
accessibilityAdjustableAction(_:)(SwiftUI; ein Handler, der eineAccessibilityAdjustmentDirectionerhält; iOS 13.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-adjustable.htmlund.txt, https://developer.apple.com/documentation/swiftui/view/accessibilityadjustableaction(_:). ↩↩ -
Apple Developer Documentation,
accessibilityRotor(_:entries:)(SwiftUI; „Create an Accessibility Rotor with the specified user-visible label“; iOS 16.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-accessibilityrotor.htmlund.txt, https://developer.apple.com/documentation/swiftui/view/accessibilityrotor(_:entries:). ↩↩↩↩ -
Apple Developer Documentation,
AccessibilityNotification.Announcement(Accessibility; „A notification that an app posts when it needs to convey an announcement to an assistive app“; iOS 17.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-accessibilitynotification.htmlund.txt, https://developer.apple.com/documentation/accessibility/accessibilitynotification/announcement. ↩↩↩↩ -
Apple Developer Documentation,
performAccessibilityAudit(for:_:)(XCUIAutomation,XCUIApplication; iOS 17.0; das JSON nennt Xcode 16.3 und hat keine Kurzbeschreibung), JSON gespeichert am 5. Oktober 2026 alsapple-xctest-accessibilityaudit.htmlund.txt, https://developer.apple.com/documentation/xcuiautomation/xcuiapplication/performaccessibilityaudit(for:_:). ↩↩↩ -
Apple, Header des Frameworks XCUIAutomation in Xcode 27.0 (Build 27A266a), Plattform iPhone Simulator, gelesen am 5. Oktober 2026:
XCUIApplication.h(performAccessibilityAuditWithAuditTypes:issueHandler:error:, „Runs an accessibility audit on the current view“);XCUIVoiceOverService.h(„Provides programmatic control of VoiceOver for UI testing“; einschalten, ausschalten, vorwärts, rückwärts, hinein und heraus bewegen, und die aktuelle Sprachausgabe; iOS 27.0);XCUIDevice.h(die EigenschaftvoiceOverService, iOS 27.0). Eine Suche in jedem Header des Frameworks nach eigenen Aktionen, Rotoren und Ansagen fand nichts. ↩↩↩ -
Kiradex-Repository,
scripts/forge/interiors.py(der Modul-Docstring, einschließlich „every piece at least two tiles on one axis“; die BuchstabenkartenROOM,ROOM_UPundHALL, Möbellisten, Plätze und Warps; der Kommentar zuhost„where the owner stands when you visit“;PIECES,FACES,EXPORT_LETTERS,export()undcheck(), dessen Platzprüfungen die Ankunfts-, Treppen-, Gastgeber-, Regal-, Vitrinen-, Schreibtisch- und Podestplätze abdecken, nicht aber die Wandtafel, und dessen Überlappungsschleifedata["objects"]liest, die exportierten frei stehenden Stücke), gelesen am 5. Oktober 2026, nie ausgeführt. ↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Kiradex-Repository,
docs/TestFlight.md, Punkt 46 („Build 26: the interior kit. Rooms sixteen wide with a three-row wall band (cornice, face, wainscot)“), gelesen am 5. Oktober 2026. Der Build ist in der Datei nicht datiert; er liegt zwischen Build 23 und Build 35, die der Beitrag über Bauten beide auf den 3. Oktober 2026 datiert. ↩↩ -
Berechnung des Autors, 5. Oktober 2026:
merge_regression.pyim Ordnerfigures/des Entwurfs, Ausgabemerge_regression.out. Aufroom, wie die Schmiede es anlegt (13 bewegliche Stücke, gelesen auspath_rule.jsonund mitastausscripts/forge/interiors.pyim Kiradex-Repository), bestehen ein Bett bei (9,3) allein und ein Nachttisch bei (6,4) allein jeweils die Zellregeln, die Obergrenze und den Lauf; zusammen schneiden sie (7,3) und (8,3) ab, die beiden Zellen vor der Vitrine. Eine Reparatur, die beide nachuidsortiert und jedes durch die vollständige Prüfung hinzufügt, behält die kleinereuidund gibt das andere zurück, mit demselben Ergebnis für beide Eingabereihenfolgen und für beideuid-Zuweisungen. Dass jedes der 713 abschneidenden Paare Stück für Stück zulässig ist, folgt ausmeasure_path_rule.out: Keine einzelne Platzierung abseits der Ziele schneidet eines ab. ↩↩↩↩↩ -
Kiradex-Repository,
docs/WORLD.md(Abschnitt 4: die „clothes, hats, backpacks, card-display frames and emotes“ des Münzladens,level = floor(sqrt(XP / 40)) + 1, an Level gebundene Kosmetik, „that cannot be bought“, die Pins einschließlich Full Set, Vintage und Across the Sea; der Sammler als „a 30-pixel figure in a 32 × 40 cell“), gelesen am 5. Oktober 2026; durchsucht nach sixteen, cap, decoration, furnishing, Sunday, once a day und read-only, von denen keines eine Raumregel nennt. ↩↩↩↩↩↩ -
Kiradex-Repository,
server/app/rooms.py(Modul-Docstring: „Everything here is in memory; a room empties when its last collector leaves and nothing of them is kept.“), gelesen am 5. Oktober 2026. ↩↩↩↩ -
Kiradex-Repository,
docs/research/pixel-art/06-collecting-and-hubs.md, Abschnitt 5.3 („Rooms: a budget, a Sunday letter, and a like that never goes down“: die Obergrenze von 16, der Sonntagsbrief als „a pixel object that appears on the doormat“, Besuche nur zum Ansehen, ein Like einmal pro Besucher und Tag, „a stamp on their passport per room visited, with ranks at 30 / 100 / 500“) und Abschnitt 5.7 (Gönner-Gegenstände umfassen „one room skin“ und sind „never a bigger furnishing cap“), gelesen am 5. Oktober 2026. ↩↩↩↩↩ -
Kiradex-Repository,
Kiradex/World/Quests.swift(Quest.current(on:calendar:), mit demweekOfYear-Intervall des Kalenders als Schlüssel, das am ersten Wochentag des Kalenders beginnt) undKiradex/World/HallView.swift(der Kommentar „The week’s theme is the week’s quest“ und das Thema, gelesen als Titel der Wochenquest), gelesen am 5. Oktober 2026. ↩↩↩ -
Kiradex-Repository,
docs/PROTOTYPES.md(die Frage des Wochenquest-Prototyps an Testende „Weekly reset on your calendar’s week: say if it feels wrong.“), gelesen am 5. Oktober 2026. ↩ -
Berechnung des Autors, 5. Oktober 2026:
layout_size.pyim Ordnerfigures/des Entwurfs, Ausgabelayout_size.out: die Zahl der Arten, 21 aus der heutigen Schmiede (17 Bodenarten und 4 Wandgegenstände) und 3 neue in Abschnitt 7.5, 24 insgesamt; das gespeicherte Hauslayout (zwei Etagen, je 16 Stücke mit Art, x, y und Ausrichtung, zwei Stil-IDs pro Etage) als kompaktes JSON mit benannten Schlüsseln, jede Art auf den längsten vorgeschlagenen Namen gesetzt (pressed_flower, 14 Zeichen) und jede Stil-ID auf 16 Zeichen, 1.974 Bytes; dasselbe mit jeder Art auf 16 Zeichen aufgefüllt, 2.038 Bytes; nackte Ganzzahl-Quadrupel für 32 Stücke, 385 Bytes. ↩↩ -
Kiradex-Repository,
Kiradex/World/PlazaStage.swift(@AppStorage("plaza.id"), „Who this device is to the plaza“;@AppStorage("quests.stamps"), die Quest-Stempel als kommagetrennte Liste, auch vonQuestBoardViewundMeViewgelesen;@AppStorage("plaza.ribbons"), „Ribbons from the town’s collectors“), gelesen am 5. Oktober 2026; eine Suche in den Swift-Quellen der App nach einer gespeicherten Schrittzahl oder einem Verzeichnis besuchter Räume fand nichts, ebenso eine Suche in App und Server nach einem Schrittzähler, einem Schrittzahl-Typ oder einem Pass (die einzigenstepssind Laufwege inTileMap.swiftundPlazaRig.swift). ↩↩↩↩↩ -
Kiradex-Repository,
Kiradex/Models/Progression.swift(der Doc-Kommentar zuProgression: Erfahrung, Level und Pins werden „worked out from the collection as it is, so every device agrees without anything being stored“), gelesen am 5. Oktober 2026. ↩↩ -
Apple Developer Documentation,
AppStorage(SwiftUI; „A property wrapper type that reflects a value from UserDefaults“; iOS 14.0), JSON gespeichert am 5. Oktober 2026 alsapple-swiftui-appstorage.htmlund.txt, https://developer.apple.com/documentation/swiftui/appstorage. ↩↩ -
Berechnung des Autors, 5. Oktober 2026:
skin_denominator.pyim Ordnerfigures/des Entwurfs, Ausgabeskin_denominator.out, aus den Rampenzeilen des Briefings: eine Etage mit 16 Stücken, von denen 15 und der Bodenstil in einer Rampenfamilie liegen und die Wand außerhalb, ergibt 16 von 18 (88,9 %), 1.600 Punkte auf der 70-%-Zeile; mit der Wand aus dem Anteil herausgenommen sind es 16 von 17 (94,1 %), 4.800 Punkte auf der 90-%-Zeile, 3.200 mehr. ↩ -
Kiradex-Repository,
Kiradex/Models/Profile.swift(var lookData: Data = Data()auf dem synchronisierten Profil;var uid: String = "", ininit(handle:)aufUUID().uuidStringgesetzt, wie auchPriceHistoryundCardCopyeineuidtragen;ModelContext.profile(), Zeilen 224 bis 237, holt die Profile nachuidsortiert, behält das erste und löscht den Rest, und der Kommentar nennt das eine Zusammenführung zur kleinsten uid), gelesen am 5. Oktober 2026. ↩↩↩