← Wszystkie wpisy

Pokoje w pixel art: siatki mebli, limity i punktacja

Urządzony pokój w Pokémon Emerald to szesnaście rzeczy na siatce komórek o boku 16 pikseli. Zdekompilowany kod ogranicza bazę gracza do 16 ustawionych dekoracji, a sypialnię do 12, i przechowuje w zapisie gry do 20 baz: własną i należące do innych graczy.12 Katalog liczy 120 dekoracji w ośmiu kategoriach: 35 lalek, 23 ozdoby, 18 mat, 10 plakatów, 10 poduszek, 9 biurek, 9 krzeseł i 6 roślin. 71 z nich zajmuje jedną komórkę, średnia wynosi 2,43 komórki, a 18 to powierzchnie, na których stoją te mniejsze.23 Baza ma od 44 do 81 komórek, po których można chodzić, średnio 60,2, więc limit to mniej więcej ćwierć podłogi. Ustawienie to pytanie, na które odpowiada każda zajęta komórka, i nic w funkcji ustawiania nie sprawdza, czy przetrwa jakieś przejście.24 Trzy późniejsze gry w tym artykule stosują ten model z innymi budżetami: 150 przedmiotów na pokój w Animal Crossing: New Horizons, według Nookipedii, z niedzielnym listem, który ocenia pokój; od 150 do 600 we wnętrzach w Final Fantasy XIV od łatki 7.5, zależnie od typu domu; 99 w igloo w Club Penguin, według jednego źródła fanowskiego.5678 Moja aplikacja, Kiradex, ma pokoje, które jej kuźnia grafiki urządza słownikiem 23 elementów, z których gracz nie może przesunąć żadnego. Ten artykuł mierzy kanon, formułuje reguły wraz z liczbami, przenosi je na SwiftData i SwiftUI, a kończy się briefem systemu urządzania, którego Kiradex jeszcze nie zbudował: limit 16 na piętro, reguła przejścia, której nie ma funkcja ustawiania w Emerald, cotygodniowa punktacja z rozpisanym każdym punktem i katalog odblokowywany wyłącznie grą.910

W skrócie

  • Szesnaście to budżet kompozycji, a nie limit przechowywania. Emerald ustawia 16 dekoracji w bazie i 12 w sypialni, ale ma miejsce na 150 posiadanych dekoracji w ośmiu przegródkach według kategorii, więc gracz może mieć więcej, niż się zmieści. Każda ustawiona dekoracja kosztuje dwa bajty, identyfikator i pozycję z x i y zapisanymi jako półbajty, co daje cały układ bazy w 32 bajtach.111122
  • Reguły mieszkają w podłodze. Emerald ma pięć uprawnień ustawiania (podłoga, podłoga do przechodzenia, za, ściana oraz na powierzchni). Górne komórki biurka mają zachowanie pozwalające postawić na nich małą dekorację, więc gdy biurko już stoi, można na nim postawić lalkę. 18 dekoracji utrzymuje małe rzeczy, a 14 duże. Sypialnia przyjmuje tylko lalki i poduszki.1324
  • Limity rosną razem z platformą, a jeden z nich jest też budżetem klatki. Animal Crossing pozwala na 24 przedmioty na pokój w Wild World, 64 w City Folk, 48 w New Leaf i 150 w New Horizons, według Nookipedii. Final Fantasy XIV podniósł w łatce 7.5 limity wnętrz o połowę, do wartości od 150 do 600, a informacje o łatce dodają, że powyżej 400 mebli na ekranie te na innym piętrze przestają być rysowane.57
  • Punktacja ma rozpisane źródła, stały dzień i poprzeczkę, która rośnie razem z domem. Tabela Happy Home Academy w Nookipedii daje po 1000 punktów przy 6, 10, 15 i 20 przedmiotach w pokoju, do tego premie za serię, komplet, kategorię, kolor i feng shui, i podnosi próg oceny S z 15 000 do 90 000 w miarę rozbudowy domu. Strona nie podaje źródła tych liczb dla New Horizons.6
  • Katalogi rosną przez zakupy, przez grę albo na oba sposoby. W Emerald 90 ze 120 dekoracji jest sprzedawanych za pieniądze, 24 nie są sprzedawane nigdy (nagrody, punkty bitewne i prezenty), a dwie kolejne kosztują 6000 i 8000 popiołu zbieranego krok po kroku. Stardew sprzedaje losowy dzienny asortyment; po pierwszej rozbudowie domu Robin sprzedaje też Furniture Catalogue (katalog mebli) za 200 000g, który następnie sprzedaje wymienione w nim meble za 0g w nieograniczonej ilości, choć niektóre elementy nadal pochodzą wyłącznie z Muzeum, festiwali i innych źródeł. Habbo sprzedaje meble, a część z nich jest celowo rzadka lub losowa.14151617
  • Odwiedzający patrzą i nie dotykają. Gość w Animal Crossing może korzystać z mebli w domu innego gracza, ale nie może „modify the interior in any way” (w żaden sposób zmieniać wnętrza). Goście w Habbo nie mogą upuszczać ani przesuwać mebli bez uprawnień właściciela. Club Penguin pozwala na jedno polubienie na projekt dziennie, a jego Grand Total (łączna suma) „will never decrease” (nigdy nie zmaleje), według jednej fanowskiej kopii jego stron pomocy.51819
  • Co to daje Kiradex. Brief, a nie wydana funkcja: ustawianie według komórek dla 20 z 23 elementów kuźni; reguła przejścia od drzwi do schodów, gospodarza i jednej komórki frontowej każdej grupy ekspozycyjnej, sprawdzana chodem; 16 elementów na piętro, a pokoje startowe wydane z 8; sześć tapet i sześć podłóg rysowanych przez kuźnię; niedzielny list z wydrukowanym każdym źródłem punktów (najwyżej 23 600); katalog odblokowywany grą, z poziomów i przypinek dostępnych już dziś, wyprowadzany z synchronizowanej kolekcji, ze stempli zadań, które aplikacja zapisuje na urządzeniu, oraz z trzech nowych synchronizowanych liczników kroków, odwiedzin pokoi i stopnia domu w liście; odwiedziny tylko do odczytu, gdy serwer będzie mógł przechowywać układ; model SwiftData bez ograniczenia unikalności, bo synchronizacja z CloudKit nie może go wymusić; oraz ustawianie przeciąganiem, które VoiceOver wykona bez dotyku.9202122

1. Emerald: szesnaście rzeczy na siatce, zmierzone w kodzie

Najmniejszą kompletną wersją tego gatunku jest system dekoracji w Pokémon Ruby, Sapphire i Emerald, i prawie cały składa się z danych. Odczytałem go z dekompilacji Emerald autorstwa pret, w commicie 731ad5b (z 1 października 2026), dwoma skryptami, które parsują kod i nigdy nie uruchamiają gry: jednym dla katalogu, limitów, powierzchni nośnych i rozmiarów pomieszczeń, drugim dla pochodzenia każdej dekoracji. Ich wyniki są zapisane obok nich.214 Każda liczba w tej sekcji pochodzi z tych dwóch wyników albo z pliku źródłowego wskazanego w przypisie.

Limity

Trzy stałe wyznaczają granice. DECOR_MAX_SECRET_BASE wynosi 16, DECOR_MAX_PLAYERS_HOUSE wynosi 12, a SECRET_BASES_COUNT wynosi 20, czyli tyle baz przechowuje zapis: własną i otrzymane od innych graczy.12 Limit tego, co się ustawia, jest oddzielony od limitu tego, co się posiada. Zapis przechowuje 150 posiadanych dekoracji w przegródkach według kategorii: 10 biurek, 10 krzeseł, 10 roślin, 30 ozdób, 30 mat, 10 plakatów, 40 lalek i 10 poduszek.112 Gracz może więc mieć więcej, niż pomieści pokój (nowa gra zaczyna się z pustymi przegródkami), a wybór tego, co trafi do środka, jest właśnie grą.23

Ustawiona dekoracja kosztuje dwa bajty. Baza przechowuje decorations[16], po jednym identyfikatorze, oraz decorationPositions[16], po jednym bajcie, z x w starszym półbajcie i y w młodszym, więc baza jest adresowana jako siatka najwyżej 16 na 16 komórek, a cały jej układ mieści się w 32 bajtach.1112 Odczytuję ten rozmiar jako powód, dla którego zapis może przechowywać dwadzieścia baz, własną i innych graczy.

Katalog

gDecorations[] ma 121 wpisów. Wpis 0, DECOR_NONE, to pusty slot korzystający z danych małego biurka, co zostawia 120 dekoracji o identyfikatorach od 1 do 120.32 Według kategorii to 35 lalek, 23 ozdoby, 18 mat, 10 plakatów, 10 poduszek, 9 biurek, 9 krzeseł i 6 roślin.2 Według kształtu, w komórkach, jest 71 dekoracji 1 na 1, 22 dekoracje 1 na 2, 13 dekoracji 3 na 3, 5 dekoracji 2 na 1, 4 dekoracje 2 na 2, 3 dekoracje 3 na 2 oraz po jednej 2 na 4 i 4 na 2. Nagłówek deklaruje też 3 na 1 i 1 na 3, których nie używa żadna dekoracja. Dekoracja zajmuje od 1 do 9 komórek, średnio 2,43.213 Jeśli policzyć pusty slot jako dekorację, jak robiły to moje wcześniejsze notatki do artykułu o budowlach, wychodzą 72 elementy jednokomórkowe i 19 z litej podłogi; bez niego liczby wynoszą 71 i 18.2

Poziomy skumulowany wykres słupkowy 120 dekoracji Emerald według kategorii, z każdym słupkiem podzielonym według liczby komórek 16-pikselowych, które zajmuje dekoracja: lalki 35 (25 jednokomórkowych, 10 dwukomórkowych); ozdoby 23 (9 jedno-, 9 dwukomórkowych, 1 z czterech do sześciu, 4 z ośmiu lub dziewięciu); maty 18 (11 jednokomórkowych, 7 z ośmiu lub dziewięciu); plakaty 10 (5 i 5); poduszki 10, wszystkie jednokomórkowe; biurka 9 (2 jednokomórkowe, 3 z czterech do sześciu, 4 z ośmiu lub dziewięciu); krzesła 9, wszystkie jednokomórkowe; rośliny 6 (3 dwukomórkowe, 3 z czterech do sześciu).

Większość katalogu Emerald to jedna komórka; duże elementy to biurka, maty 3 na 3 i kilka ozdób.243

Ceny w tabeli wahają się od 500 za najtańsze maty do 10 000 za najdroższe ozdoby i lalki. Trzy mają cenę 0, dwie tarcze i szklana ozdoba, i wszystkie trzy są nagrodami.23

Pięć uprawnień i powierzchnie, które są danymi

Każda dekoracja ma jedno z pięciu uprawnień. Nagłówek nazywa je „collision and placement permissions, in that order” (uprawnieniami kolizji i ustawiania, w tej kolejności).13 Według liczby:

Uprawnienie Co oznacza Dekoracje
Lita podłoga blokuje przejście, stoi na podłodze 18: wszystkie 9 biurek, 9 ozdób
Podłoga przechodnia można po niej przejść, stoi na podłodze 37: wszystkie 18 mat, wszystkie 9 krzeseł, 10 ozdób
Podłoga z tyłu blokuje, a jej górny rząd może leżeć na tylnej ścianie 10: wszystkie 6 roślin, 4 ozdoby
Ściana wisi na tylnej ścianie 10: wszystkie 10 plakatów
Sprite figura stojąca na powierzchni 45: wszystkie 35 lalek, wszystkie 10 poduszek

Liczby z measure_emerald_decor.py uruchomionego na src/data/decoration/header.h.2

Najsprytniejsze jest to, że powierzchnia jest właściwością komórki, a nie fragmentem kodu. Każda dekoracja jest rysowana z metatile’i, a każdy metatile ma bajt zachowania. Osiemnaście dekoracji ma komórki z zachowaniem MB_HOLDS_SMALL_DECORATION: 7 z 9 biurek, 3 cegły, opona i 7 mat. Czternaście ma MB_HOLDS_LARGE_DECORATION: te same 7 biurek i 7 mat.2 Lalka 1 na 2 potrzebuje pod sobą „dużej” komórki; każda inna lalka lub poduszka przyjmie komórkę „małą” albo „dużą”.4 Gdy więc biurko zostanie ustawione, podłoga zyskuje nowe komórki, które odpowiadają lalce „tak”, a obie sytuacje obsługuje ta sama funkcja ustawiania. Właśnie dlatego 16 przedmiotów sprawia, że pokój wygląda na pełny: 45 ze 120, sprite’y, stoi na 18 elementach będących powierzchniami.2

Niektóre dekoracje także działają. Osiem mat dźwiękowych wydaje dźwięk po nadepnięciu; mata do skakania, mata obrotowa i mata z brokatem robią to, co mówią ich nazwy; trzy balony i kula błota pękają; są też drzwi do rozbicia, zjeżdżalnia i ozdoba z piasku. Każda z nich to zachowanie zapisane w metatile’ach dekoracji (MB_SECRET_BASE_SOUND_MAT, _JUMP_MAT, _SPIN_MAT, _GLITTER_MAT, _BALLOON, _BREAKABLE_DOOR, MB_SLIDE_SOUTH, _SAND_ORNAMENT), odczytane z pliku atrybutów tilesetu tajnej bazy.225

Ustawienie to pytanie, na które odpowiada każda komórka

CanPlaceDecoration w src/decoration.c przechodzi po komórkach, które zajęłaby trzymana dekoracja, i każdej zadaje pytanie. Elementy podłogowe i przechodnie wymagają pod każdą komórką zwykłej podłogi (MB_NORMAL); tylko lita deska może zakryć dziurę. Na komórce nie może stać żaden obiekt. Element może zakryć komórkę, na której stał gracz, otwierając menu, tylko kafelkiem o zwykłym typie warstwy; funkcja odrzuca go tam, gdy jego własny kafelek na tej komórce ma jakikolwiek inny typ warstwy. Element podłogi z tyłu wymaga podłogi pod wszystkimi rzędami poza górnym, który może leżeć na północnej ścianie. Element ścienny wymaga, by każda komórka była północną ścianą. Sprite wymaga pod sobą komórki nośnej.4 W sypialni menu odrzuca wszystkie kategorie poza lalkami i poduszkami: DecorationItemsMenuAction_AttemptPlace pokazuje gText_CantPlaceInRoom, gdy ustawione jest isPlayerRoom.4

Nic w CanPlaceDecoration nie sprawdza, czy przetrwa przejście. Jedyną ochroną, jaką funkcja daje chodzeniu, jest ta warunkowa reguła dotycząca komórki, na której się stało. W moim odczytaniu tej funkcji gracz może odgrodzić biurkami komputer w bazie, a gra mu na to pozwoli.4 Wracam do tego w briefie, bo pokój odwiedzany przez innych potrzebuje sprawdzenia, którego ta funkcja nie wykonuje.

Pomieszczenia, względem których mierzy się limit

24 układy baz to sześć stylów w czterech rozmiarach każdy. Zmierzone razem ze ścianami na podstawie każdego map.bin mają od 7 do 17 komórek szerokości i od 7 do 17 głębokości, od 99 komórek (11 na 9) do 196 (14 na 14), a te długie i wąskie mają 7 na 16, 10 na 17 i 17 na 8.226 Komórek, po których można chodzić, odczytanych z bitów kolizji każdego układu, jest od 44 do 81, średnio 60,2.2 Limit 16 to 0,27 podłogi dostępnej do chodzenia w przeciętnej bazie.2 Sypialnia, drugie piętro obu domów gracza, ma 9 na 8 z 54 komórkami do chodzenia, a jej limit to 12.21

Sama podłoga przesadnie oddaje ciasnotę, bo wiele z tych 16 to maty, po których się chodzi, albo lalki stojące na biurkach. Limit budżetuje kompozycję, nie podłogę.

Komórka a postać

Arkusz chodu gracza ma 144 na 32 piksele, dziewięć klatek 16 na 32, więc klatka postaci ma jedną komórkę szerokości i dwie wysokości na siatce metatile’i o boku 16 pikseli. Poza dekorowania to jedna klatka 16 na 32.27 Komórka siatki to szerokość klatki, a każda dekoracja jest wymiarowana w tej jednostce.

Jak rośnie katalog

Skrypt pochodzenia przeszukał skrypty sklepów, nagród i prezentów pod kątem każdej stałej dekoracji. 90 ze 120 jest sprzedawanych za pieniądze w pięciu sklepach. Trzy wymienia się przy ladzie nagród, piętnaście za punkty bitewne, a dziesięć daje skrypt: ponownie trzy przedmioty z lady nagród, dwa namioty za ukończenie domu łamigłówek, ozdobę z górnego piętra muzeum, dwie tarcze od gospodarza obiektu bitewnego i dwie lalki od mieszkańców. Dwadzieścia cztery zdobywa się i nigdy nie sprzedaje za pieniądze.14

Dwie kolejne kupuje się chodzeniem. Warsztat szklarski wymienia krzesło za 6000, a biurko za 8000 popiołu, a popiół zbiera się po jednej jednostce na krok w trawie pokrytej popiołem, gdy gracz niesie worek, do 9999 (VAR_ASH_GATHER_COUNT).15 Odczytuję tę parę jako najczystszą w kanonie wersję odblokowywania grą: żadne pieniądze nie zmieniają właściciela, tylko kroki. Worek nie pokazuje licznika. Jego użycie w terenie to funkcja przedmiotów, których nie można użyć, a jego opis to stały tekst o zbieraniu i przechowywaniu pyłu wulkanicznego.28 Poza samym licznikiem kroków wartość odczytuje tylko skrypt warsztatu: gdy graczowi brakuje, odejmuje zebrany popiół od ceny i podaje różnicę jako liczbę kroków, które trzeba jeszcze przejść.15

Cztery dekoracje, trzy legendarne lalki i jedna inna lalka, nie występują w żadnym skrypcie sklepu, nagrody ani prezentu objętym wyszukiwaniem. Mogą trafiać do gry przez wymianę albo funkcję łącza; nie prześledziłem ich, a liczby 90 sprzedawanych i 24 wyłącznie zdobywanych opierają się na przeszukaniu skryptów sklepów, nagród i prezentów, z tymi czterema nieprześledzonymi.14

Czego uczy Emerald

System dekoracji to trzy tabele i jedna funkcja: wiersz katalogu na element (uprawnienie, kształt, kategoria, cena, metatile’e), układ, którego komórki mówią, czym są (podłoga, północna ściana, dziura), posiadany ekwipunek większy niż limit ustawień oraz sprawdzenie ustawienia, które zadaje każdej zajętej komórce jedno pytanie. Powierzchnie to komórki, które odpowiadają „tak” mniejszemu elementowi. Limit liczy ustawione elementy i nic więcej. Luką jest chodzenie: funkcja ustawiania sprawdza komórki, nigdy przejścia.

2. Animal Crossing: 150 przedmiotów i list w niedzielę

Ta sekcja opiera się na Nookipedii, wiki fanów, przeczytanej i zapisanej 5 października 2026; nie szukałem danych samego Nintendo. Tam, gdzie wiki niczego nie cytuje, mówię o tym.56

Limit i pokoje

Każda gra z serii ogranicza liczbę przedmiotów w pokoju, a limit rósł. Nookipedia podaje 24 „furniture and clothing items” (mebli i ubrań) na pokój w Wild World, 64 w City Folk i 48 w New Leaf. Dla New Horizons: „A maximum of 150 items can be placed in each room of the house, including wall and ceiling-mounted furniture.” (W każdym pokoju domu można umieścić najwyżej 150 przedmiotów, wliczając meble ścienne i sufitowe).5

Pokoje w New Horizons według tabeli rozbudowy z tej samej strony: namiot ma 4 na 4; dom 6 na 6; rozbudowa głównego pokoju daje 8 na 8; pokój tylny, lewy i prawy mają po 6 na 6; piętro i piwnica po 10 na 6. „Unlike previous games, only the main room can be expanded in size, as all other rooms have a fixed size.” (Inaczej niż w poprzednich grach powiększyć można tylko główny pokój, bo wszystkie pozostałe mają stały rozmiar).5 Przy 150 przedmiotach w pokoju 6 na 6 wychodzi 4,2 przedmiotu na kafelek podłogi, co działa tylko dlatego, że ściany, sufity i blaty innych mebli przyjmują przedmioty bez zużywania podłogi (moja arytmetyka z tych dwóch liczb).529

Meble zajmują „a size in tiles that it takes up when placed, ranging from 1.0×0.5” (po ustawieniu obszar w kafelkach od 1.0×0.5) do 3 na 3, a w New Horizons „can also now be pushed in half-tile increments” (można je teraz także przesuwać o pół kafelka).29 New Horizons dzieli je na sprzęty domowe, drobiazgi stawiane na podłodze lub na powierzchni, elementy ścienne i dekoracje sufitowe, które przyszły z wersją 2.0.29 Spośród gier, których siatkę ustawiania czyta ten artykuł (komórki Emerald, kafelki Stardew i kafelki New Horizons), tylko New Horizons przesuwa meble o mniej niż cały kafelek. Nie czytałem siatki ustawiania FFXIV, a drobniejsze kroki cytowane dla Habbo to wysokości układania w stos z klienta firmy trzeciej (sekcja 3).

Katalog

Według wersji 3.0.2 Nookipedia liczy w New Horizons 2076 mebli, z czego 1074 dodano w aktualizacjach. Seria to „around 10 furniture items, as well as a matching wallpaper and flooring” (około 10 mebli plus pasująca tapeta i podłoga).29 Wiki liczy 262 tapety według wersji 1.9.0 i 215 podłóg.3031 Tapetę i podłogę zmienia się w każdym pokoju osobno, a wersja 2.0 dodała ścianę akcentową: „a second wall covering can be applied to single wall in the room” (na jedną ścianę pokoju można nałożyć drugie pokrycie).5

Happy Home Academy

Połowa związana z punktacją to część, którą pożycza Kiradex. Nookipedia: Academy „sends an evaluation by mail most Sunday mornings, which cannot be disabled” (wysyła ocenę pocztą w większość niedzielnych poranków i nie da się tego wyłączyć). Ocena to B, A lub S, a próg S rośnie z każdą rozbudową: 15 000 dla pierwszego domu, 23 000 po rozbudowie głównego pokoju, potem 35 000, 47 000, 60 000, 75 000 i 90 000 z piwnicą.6

Premie w New Horizons w ujęciu tabel wiki:

Kryterium Punkty
6, 10, 15 i 20 mebli w pokoju 1000 za każdy próg
Przedmioty szczęścia 777 za przedmiot
Meble ścienne 400 za przedmiot, najwyżej trzy
4 lub więcej przedmiotów z jednej serii 1000 za przedmiot
Kompletny zestaw mebli 800 za przedmiot
3 lub więcej przedmiotów z jednej kategorii 500 za przedmiot
70% lub więcej przedmiotów w pokoju w jednym kolorze 200 za przedmiot
90% lub więcej w jednym kolorze 600 za przedmiot
Czerwone, zielone lub żółte feng shui 500
Karaluchy minus 2500 za każdego
Przedmioty niebędące meblami na podłodze minus 1 za każdy
Śmieci na podłodze minus 500 za każdy
Przedmioty kierunkowe zwrócone do ściany minus 300 za każdy

Nookipedia, „Happy Home Academy”, tabele dla New Horizons, zapisane 5 października 2026; bez przypisów na stronie.6

Te liczby są najmniej pewne w tej sekcji. Tabele premii i potrąceń nie mają żadnego przypisu. Tabela nagród pod nimi podaje, że „Includes data sourced from the Data Spreadsheet for Animal Crossing New Horizons” (zawiera dane z arkusza danych Animal Crossing New Horizons), opracowanego przez wymienionych z nazwy współtwórców, a sekcja punktów za przedmiot dla New Horizons brzmi „This section is a stub” (ta sekcja to zalążek).6 Arytmetyka jest więc rekonstrukcją fanów. Brief na końcu pożycza jej kształt (rozpisane źródła, progi liczebności, premie za komplet i kolor, stały dzień) i żadnej z jej liczb.

Dwa wybory, jakich tu dokonano, mają znaczenie dla każdej aplikacji, która chce cotygodniowej oceny pokoju. Poprzeczka rośnie razem z domem, więc większy pokój nie oznacza łatwiejszej najwyższej oceny. A list przychodzi w stały dzień, w większość niedzielnych poranków, i gracz nie może go wyłączyć.6 Nieobecność nie jest tam darmowa: strona o domu mówi, że gracz, który zaniedba dom „for at least one week” (na co najmniej tydzień), zastaje go zarobaczonym, a powyższa tabela odbiera 2500 punktów za każdego karalucha.56 Brief zachowuje stały dzień i rezygnuje z kary.

Odwiedziny

W każdej grze z serii, według wiki, „a player may enter any other player’s house freely” (gracz może swobodnie wejść do domu każdego innego gracza). Może korzystać z mebli, ale nie może upuszczać ani podnosić przedmiotów „or modify the interior in any way” (ani w żaden sposób zmieniać wnętrza).5 Odwiedziny we śnie na innej wyspie dochodzą do tego samego celu inną drogą. Na stronie wiki o postaci prowadzącej sny sekcja o New Leaf mówi, że we śnie „any changes will not be saved and items cannot be brought back to the real world” (żadne zmiany nie zostaną zapisane, a przedmiotów nie można przenieść do prawdziwego świata), a sekcja o New Horizons mówi, że jej usługi „work the same as they do in New Leaf” (działają tak samo jak w New Leaf). Wgranie snu daje gospodarzowi bon wymienny na 5000 dzwonków (Dream Bell Exchange Ticket) i kolejny za każdą aktualizację.32 W moim odczytaniu to najbezpieczniejszy rodzaj odwiedzin w tym artykule dla aplikacji dla dzieci: gość chodzi po kopii i nie może zmienić niczego, co zostaje zachowane, a gospodarz dostaje nagrodę za dzielenie się.

3. Habbo, Stardew, Final Fantasy XIV, Club Penguin i skąd wziął się ten model

Habbo: pokój jest produktem, a produkt jest sprzedawany

Centrum pomocy Habbo wprost podaje zasady własności i odwiedzin. „You can own 200 rooms.” (Można mieć 200 pokoi).33 Podłogi i ściany po nałożeniu są trwałe: „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.” (Tapeta i podłoga są przyklejone: raz położonych nie da się podnieść, ale można położyć nowe, żeby zmienić wygląd pokoju).33 Goście nie mogą niczego dotykać: „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.” (W pokojach innych Habbo nie można upuszczać ani przestawiać mebli, chyba że jest się członkiem grupy, a właściciel tej grupy pozwolił brać udział w budowie pokoju).18

Ekonomia mebli opiera się na zakupach. „To buy furni you need credits, diamonds or duckets.” (Do kupowania mebli potrzebne są kredyty, diamenty lub duckety).18 Builders Club wypożycza meble do limitu, który rośnie o 250 za każdy miesiąc członkostwa, obejmuje zapisywanie własnych układów pokoju w edytorze rzutu i obiecuje: „Furni limits never go down.” (limity mebli nigdy nie maleją).34 Strona z definicjami mebli opisuje meble kampanijne wstrzymywane „for 4-12 months in order to leave an ample window for traders to build their businesses around them” (na 4 do 12 miesięcy, by handlarze mieli dość czasu na zbudowanie wokół nich interesów), rzadkie meble, które „will never be re-released” (nigdy nie zostaną wydane ponownie), rzadkie meble do rozbicia, kupowane, a potem otwierane „to reveal another, random rare furni” (by odsłonić inny, losowy rzadki mebel), oraz LTD, „a special type of rare, which comes in limited quantities” (szczególny rodzaj rzadkości dostępny w ograniczonej liczbie).17 Handel wymaga przepustki handlowej, a „There is no guide to what items of furni are worth” (nie ma przewodnika po wartości mebli).35 Habbo ogranicza nawet losowość w pokojach: „Placing more than three chance elements will disable all randomiser functions in the room.” (Ustawienie więcej niż trzech elementów losowych wyłącza wszystkie funkcje losujące w pokoju).36

Własne strony Habbo nie podają siatki, wysokości układania ani limitu mebli na pokój; wyszukiwanie w centrum pomocy fraz „furni”, „stack” i „floor plan” nie zwróciło żadnego artykułu, który by je podawał.37 Liczby, które się cytuje, pochodzą z Nitro, otwartoźródłowego klienta firmy trzeciej. Stałe jego edytora rzutu pozwalają na maksymalnie 64 kafelki na oś i 27-stopniowy schemat wysokości, jak cytował z tego samego pliku artykuł o budowlach z tej serii; moje wcześniejsze notatki dodają z tego klienta narzędzie wysokości stosu od 0 do 40 w krokach co 0,01, którego nie czytałem ponownie na potrzeby tego artykułu.3839 Wszystkie trzy wartości należy traktować jako dane klienta, nie Sulake.

W moim odczytaniu Habbo pokazuje, czym staje się pętla urządzania, gdy katalog jest biznesem. Jego zasadę odwiedzin warto skopiować; jego ekonomię (celowa rzadkość, losowa zawartość, wartość handlowa) należy odrzucić.

Stardew Valley: katalog kupiony raz, a potem darmowe meble

Strona Furniture w Stardew Valley Wiki, rewizja 193159, wymienia 718 wierszy przedmiotów w 26 sekcjach, 615 różnych nazw. To moje zliczenia wierszy strony; sekcja plakatów filmowych używa innego znacznikowania i została pominięta, a „różne” łączy w jeden przedmiot wymieniony w dwóch sekcjach.4016 Strona Wallpaper, rewizja 193801, pokazuje 137 tapet (123 w katalogu, 12 poza nim, 2 nieosiągalne), a strona Flooring, rewizja 190285, 97 podłóg, w obu przypadkach liczonych z ikon na stronach, a nie z plików danych gry.404142

Katalog rośnie na dwa sposoby jednocześnie. Robin i wędrowny wóz „offer a random selection of furniture each day they are open” (oferują losowy wybór mebli każdego dnia, gdy są otwarte). „After the first Farmhouse upgrade, Robin also offers the Furniture Catalogue for sale” (po pierwszej rozbudowie domu na farmie Robin sprzedaje też Furniture Catalogue), za 200 000g według tabeli katalogów na stronie, a po ustawieniu sprzedaje on wymienione w nim meble za 0g „in unlimited quantity” (w nieograniczonej ilości). 278 wierszy strony Furniture wskazuje Furniture Catalogue jako źródło.1640 Wyjątki strony pozostają wyjątkami: „Some furniture can be obtained only by donating items to the Museum” (niektóre meble można zdobyć tylko, przekazując przedmioty do Muzeum), albo na festiwalach, w kasynie i z innych źródeł.16 Kamień milowy w grze i jeden duży zakup w walucie samej gry kończą więc niedobór tego, co wymienia katalog, i tylko tego.

Informacja zwrotna przy ustawianiu działa na poziomie kafelka: „Furniture will display a green square on tiles where it can be placed. The tile will turn red if the furniture cannot be placed.” (Mebel pokazuje zielony kwadrat na kafelkach, na których można go ustawić; kafelek robi się czerwony, jeśli nie można).16 Tapeta to jeden gest dla jednej powierzchni: tapety „cover the whole room they’re placed in” (pokrywają cały pokój, w którym zostaną położone), a żeby położyć tapetę, „the character must be facing up by its wall” (postać musi stać zwrócona w górę przy jego ścianie); są „single-use and do not stack” (jednorazowe i nie łączą się w stosy).41 Dom na farmie ma przed rozbudową 10 na 7 w środku, na kafelkach 16-pikselowych, jak cytował z wiki artykuł o budowlach.39

Final Fantasy XIV: limit, który jest też budżetem klatki

Informacje o łatce 7.5 w The Lodestone od Square Enix podniosły wszystkie limity mieszkaniowe. Meble we wnętrzach wzrosły ze 100 do 150 w apartamentach i prywatnych komnatach, z 200 do 300 w chatkach, z 300 do 450 w domach i z 400 do 600 w rezydencjach; meble na zewnątrz z 20 do 40, z 30 do 60 i z 40 do 80.7 Te same informacje podają powód własnymi słowami: „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.” (Na ekranie może być wyświetlanych jednocześnie do 400 mebli; jeśli jest ich więcej, te na innym piętrze niż postać przestają być wyświetlane, a najpierw ukrywane są małe i bardziej odległe).7 Limit jest jednocześnie budżetem projektowym i budżetem renderowania.

Informacje o łatce dodają też „Furnishings from the FFXIV Furnishing Design Contest” (meble z konkursu na projekt mebli FFXIV): konkurs społeczności, którego zwycięskie projekty w tej łatce stały się meblami.7 To bezpieczny kształt konkursu: gracze tworzą, a studio ocenia i wydaje.

Rozmiarów działek w tym artykule nie ma. Przewodnik mieszkaniowy Square Enix zwrócił 5 października 2026 HTTP 404, a innej oficjalnej strony nie próbowałem, więc FFXIV wnosi limity przedmiotów z informacji w The Lodestone i nic więcej.7

Club Penguin: jedno polubienie dziennie i suma, która nigdy nie maleje

Każdy fakt o Club Penguin w tym miejscu pochodzi z jednego źródła. Zarchiwizowane wpisy oficjalnego bloga, które cytuje Club Penguin Wiki, zwróciły z Wayback Machine dwukrotnie HTTP 429 5 października 2026, więc nie mogłem ich sprawdzić.43

That Penguin Game odtwarza coś, co przedstawia jako strony pomocy gry; nie zweryfikowałem tego pochodzenia. Jego strona „Your Igloo”: „You can Like any igloo design once every day!” (każdy projekt igloo można polubić raz dziennie!). Każdy projekt „earns its own individual Likes” (zbiera własne polubienia), które sumują się w Grand Total, a „Likes are permanent, so your Grand Total Likes will never decrease, even if you delete an igloo design!” (polubienia są trwałe, więc łączna suma nigdy nie zmaleje, nawet po usunięciu projektu igloo!). Karta Popular szereguje igloo według Grand Total Likes, a igloo otwiera się dla „Everyone” (wszystkich) albo tylko dla „Friends” (znajomych).19

Club Penguin Wiki podaje, że „igloos have a limit preventing more than 99 units of furniture being placed at once” (igloo mają limit, który nie pozwala ustawić naraz więcej niż 99 mebli), że większość mebli ma limit posiadania 99 sztuk danego typu i że właściciel może urządzać własne igloo, „but not other player’s igloos” (ale nie igloo innych graczy).8 Urządzanie było przywilejem członkostwa: od 1 listopada 2005 gracze bez członkostwa mogli mieć igloo, ale nie mogli go umeblować, a od 26 lipca 2012 dostali 6 darmowych mebli: jeden przedmiot podłogowy, cztery zwykłe i jeden ścienny.438

Historia konkursów na igloo według wiki: pierwszy ogłoszono w 9. numerze gazety w grze, wydanym 15 grudnia 2005, z jednym zwycięzcą nagrodzonym 5000 monet. Kolejne konkursy ogłaszały zwycięzców i wyróżnionych od jednego do czterech tygodni po naborze, zawsze z monetami, a czasem z meblami. Od konkursu halloweenowego w 2008 roku zwycięzców wybierały postacie, a ich komentarze publikowano razem z igloo; od 2009 roku igloo zgłaszało się przyciskiem; ostatni konkurs odbył się w grudniu 2012. Przykład: Ye Olde Igloo Contest z 2008 roku wypłacił dziesięciu zwycięzcom po 25 000 monet, a dwudziestu wyróżnionym po 15 000.44

The Sims: ludzie byli tam po to, by oceniać dom

Model siatki i katalogu ma swoją historię pochodzenia, i jest to historia punktacji. Moim źródłem jest jeden wywiad: Will Wright w rozmowie z Tristanem Donovanem, opublikowany przez Game Developer 23 maja 2011. Nie znalazłem żadnego nagranego wystąpienia Wrighta z 1999 lub 2000 roku o trybie budowania.45

O inspiracji: „one of the original things that was a really inspiration for The Sims was this book, A Pattern Language, by Christopher Alexander.” (jedną z pierwotnych inspiracji dla The Sims była książka A Pattern Language Christophera Alexandra). O punktacji: „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.” (W pewnym sensie chciałem, żeby The Sims było początkowo grą architektoniczną analizującą te wzorce; ludzie w The Sims byli tam pierwotnie tylko po to, by oceniać architekturę). O nazwie: „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.” (pierwotnie nazywałem to Doll House, domek dla lalek; badania marketingowe pokazały, że nazwa nie trafiała do mężczyzn). O obiektach: „Everything we put in the world is advertising” (wszystko, co umieszczamy w świecie, jest reklamą), model, który wywodzi od feromonowych śladów z SimAnt.45

The Sims Wiki, wiki fanów i pojedyncze źródło, opisuje wydany ekran. Tryb kupowania pozwala graczom „purchase items from an object catalog and place them on the current lot” (kupować przedmioty z katalogu obiektów i ustawiać je na bieżącej parceli); The Sims i The Sims 2 sortowały ten katalog według funkcji obiektu; a kafelki obrysu trzymanego obiektu świecą na zielono tam, gdzie może stanąć, i na czerwono tam, gdzie nie może. Wiki przypisuje to zdanie o zieleni i czerwieni do The Sims 2 i The Sims 3, więc nie twierdzę tego o oryginale z 2000 roku.46 Ocena pozostała wewnątrz Simów jako potrzeba, Room w pierwszej grze i Environment w drugiej, która „analyzes the design and content of the room that the Sim is currently standing in” (analizuje wystrój i zawartość pokoju, w którym Sim właśnie stoi): małe pokoje, za mało światła oraz brudne lub zepsute rzeczy ją obniżają.47

W moim odczytaniu każda gra w tym artykule to ten sam ekran z innym budżetem: katalog, siatka wielkości ludzkiego kroku, obrys, który robi się zielony albo czerwony, i sędzia.

Limity obok siebie

Poziomy wykres słupkowy zatytułowany Placed-item limits (limity ustawionych przedmiotów), z każdym słupkiem opisanym według tego, co liczy jego limit, i pokolorowanym według źródła: limit ustawiania we wnętrzu w Final Fantasy XIV według typu domu, z informacji o łatce 7.5 w The Lodestone (rezydencja 600, wcześniej 400; dom 450, wcześniej 300; chatka 300, wcześniej 200; apartament lub prywatna komnata 150, wcześniej 100); Animal Crossing na pokój, z Nookipedii (New Horizons 150, City Folk 64, New Leaf 48, Wild World 24); Club Penguin na igloo, 99, z jednej wiki fanów; Emerald ze zdekompilowanego kodu (jedna baza 16, sypialnia 12); oraz proponowane w Kiradex 16 na piętro.

Limity rozciągają się w stosunku pięćdziesiąt do jednego, od sypialni w Emerald po rezydencję w FFXIV, ale nie liczą tego samego: w FFXIV to limit ustawiania we wnętrzu podawany według typu domu, w Animal Crossing na pokój, w Club Penguin na igloo, w Emerald na bazę lub sypialnię, a w Kiradex na piętro. Tylko liczby FFXIV i Emerald pochodzą z tekstu lub kodu samego wydawcy.247581

4. Rzemiosło w postaci reguł z liczbami

Oto reguły, które wspierają pomiary, każda z zakresem, na którym się opiera. Gdy liczba jest moją arytmetyką albo moim wyborem, wiersz to zaznacza. „Komórka” oznacza 16-pikselową komórkę chodu, która jest też kafelkiem Kiradex.227

Element Reguła Źródło
Limit ustawionych Ograniczać to, co pokój pokazuje, osobno dla każdego pokoju, licząc przedmioty ścienne. Emerald 16 na bazę, 12 w sypialni; New Horizons 150 na pokój „including wall and ceiling-mounted furniture” (wliczając meble ścienne i sufitowe); FFXIV od 150 do 600 we wnętrzu zależnie od wielkości domu; Club Penguin 99 (jedno źródło fanowskie)
Limit posiadanych Pozwolić graczowi posiadać więcej, niż się mieści, by ustawianie było wybieraniem. Emerald 150 posiadanych w ośmiu przegródkach wobec 16 ustawionych; Club Penguin 99 posiadanych każdego typu (źródło fanowskie)
Limit a podłoga W pokoju 2D bez warstwy ścian i sufitu pozostać poniżej jednego przedmiotu na trzy komórki podłogi (mój próg, dobrany tak, by Emerald mieścił się tuż pod nim); powierzchnie i elementy przechodnie go rozciągają. Emerald 16 wobec średnio 60,2 komórek do chodzenia, 0,27; New Horizons 150 w pokoju 6 na 6 to 4,2 na kafelek, możliwe tylko dzięki ustawianiu na ścianach, suficie i powierzchniach (moja arytmetyka)
Powierzchnie Uczynić utrzymywanie małego elementu właściwością komórki, tak by biurko dodawało podłogę dla lalki. Emerald: 18 dekoracji utrzymuje małe elementy, 14 duże, a 45 dekoracji typu sprite takiej komórki potrzebuje
Komórka siatki Dopasować siatkę do szerokości klatki lub komórki postaci; schodzić niżej tylko wtedy, gdy elementy można przesuwać drobnymi krokami, a grafika na to pozwala. Klatka gracza w Emerald, 1 na 2 komórki po 16 pikseli; Stardew kafelki 16-pikselowe; New Horizons pół kafelka
Sprawdzenie ustawienia Zadać każdej zajętej komórce jedno pytanie (podłoga, ściana, powierzchnia; wolna; nie na komórce przybycia ani gospodarza) i pokazać odpowiedź dla każdej komórki. CanPlaceDecoration w Emerald dla pytań na poziomie komórek, choć odrzuca komórkę startową gracza tylko dla kafelka o niezwykłym typie warstwy; komórki przybycia i gospodarza to reguła Kiradex (7.1); Stardew zielony lub czerwony kwadrat na kafelek; The Sims 2 i 3 zielony lub czerwony obrys (wiki fanów)
Przejście Sprawdzać, czy chodzenie przetrwa każde ustawienie (dodatek briefu). CanPlaceDecoration w Emerald nie sprawdza żadnego przejścia, a komórkę, na której stał gracz, chroni tylko przed kafelkiem o niezwykłym typie warstwy; czytane tu strony Stardew i Sims opisują informację zwrotną na poziomie kafelka i nie mówią nic o przejściach ani w jedną, ani w drugą stronę; brief dodaje chód
Tapeta i podłoga Jedna na pokój, zmieniana jednym gestem, odwracalna. Stardew pokrywa „the whole room” (cały pokój) od ściany; New Horizons dla każdego pokoju plus jedna ściana akcentowa; w Habbo trwałe, tylko do zastąpienia
Wielkość katalogu Na tyle duża, by styl był wyborem. Stardew 137 tapet i 97 podłóg (moje zliczenia ikon wiki); New Horizons 262 i 215; New Horizons 2076 mebli według wersji 3.0.2
Punktacja Rozpisać źródła, ustalić dzień, podnosić poprzeczkę wraz z domem, nigdy nie karać za nieobecność. Happy Home Academy: większość niedziel; B, A, S; S od 15 000 do 90 000; 1000 przy 6, 10, 15 i 20 przedmiotach; seria, komplet, kategoria, kolor (tabele fanów, bez przypisów); strona wiki o domu, która nie wymienia żadnej gry, mówi, że dom zaniedbany na co najmniej tydzień zapełnia się karaluchami, a tabela HHA w New Horizons odejmuje 2500 za karalucha, kary, którą ta reguła odrzuca
Wzrost katalogu W aplikacji 9+ rosnąć przez grę: zdobyta półka plus katalog otwierany po osiągnięciu kamienia milowego. Nigdy przez losową ani rzadką sprzedaż. Emerald 90 ze 120 sprzedawanych, 24 nigdy, dwie kolejne za 6000 i 8000 popiołu; Stardew losowy dzienny asortyment, a po pierwszej rozbudowie katalog za 200 000g, którego wymienione meble kosztują 0g, z wyłącznymi przedmiotami z Muzeum, festiwali i innych źródeł poza nim; rzadkie meble, meble do rozbicia i LTD z Habbo jako kontrprzykład
Odwiedziny Goście patrzą i nie dotykają; jeden znak od gościa dziennie; suma gospodarza nigdy nie maleje. Goście w Animal Crossing nie mogą „modify the interior in any way” (w żaden sposób zmieniać wnętrza); goście w Habbo nie mogą upuszczać ani przesuwać mebli bez uprawnień; Club Penguin jedno polubienie na projekt dziennie, Grand Total nigdy nie maleje (jedno źródło fanowskie)
Przechowywanie Ustawiony przedmiot to kilka bajtów: rodzaj, komórka, kierunek. Emerald: jeden bajt identyfikatora i jeden bajt pozycji, 32 bajty na bazę

Źródła: sekcje 1 do 3 i ich przypisy.256781916414033181746141511

Trzy z nich zasługują na osobne zdanie.

Limit to budżet dla oka, a czasem także dla GPU. 16 w Emerald to mniej więcej ćwierć podłogi bazy. FFXIV mówi wprost, że powyżej 400 mebli na ekranie przestaje rysować część z nich.27 W aplikacji na telefon drugi powód jest realny, ale w moim odczytaniu o liczbie decyduje pierwszy: limit to coś, co zmienia półkę w kompozycję, i to był powód wyboru szesnastu podany w artykule o świecie z 3 października.10

Reguła przejścia to dodatek briefu. CanPlaceDecoration w Emerald pilnuje najwyżej jednej komórki, tej, na której stało się, otwierając menu, i nigdy nie pyta, czy od drzwi wciąż da się dojść do komputera.4 Strony Stardew i Sims, które przeczytałem, opisują obrys kolorowany kafelek po kafelku; nie mówią, czy któraś z tych gier sprawdza też przejście, a ja nie szukałem dalej, więc ten artykuł nie twierdzi o nich niczego w żadną stronę.1646 Pokój odwiedzany przez innych potrzebuje odpowiedzi na to pytanie, bo gość, który nie może dojść do ekspozycji, nie ma na co patrzeć.

Odblokowywanie przez grę to obronny koniec pytania o katalog w aplikacji dla dzieci. To moje odczytanie, a nie porada prawna: pętla dekorowania oparta na kupowaniu, losowości lub rzadkości ściąga na siebie pytania o loot boksy i presję, których aplikacja kolekcjonerska nie potrzebuje. Zdobywana półka Emerald pokazuje pętlę pokoju, która nie potrzebuje niczego z tych rzeczy, a katalog Stardew, kupiony raz w walucie samej gry po kamieniu milowym w grze, pokazuje, jak zakończyć niedobór wszystkiego, co wymienia.141617

5. Po apple’owsku: model, który się synchronizuje, przeciąganie, które przyciąga do siatki, i siatka dostępna dla VoiceOver

Ekran urządzania w iOS potrzebuje trzech rzeczy: rekordu dla każdego ustawionego elementu, synchronizowanego przez iCloud, sposobu przeciągnięcia elementu na komórkę oraz sposobu zrobienia tego samego bez wzroku i dotyku. Wszystko poniżej pochodzi ze stron dokumentacji Apple zapisanych jako JSON 5 października 2026, z tytułami, deklaracjami, streszczeniami i platformami wyodrębnionymi skryptem.48 Nic z tego nie zostało zbudowane ani uruchomione na potrzeby tego artykułu, a żaden z poniższych kosztów nie jest zmierzony.

Rekord: SwiftData w kształcie pod CloudKit

@Model „Converts a Swift class into a stored model that’s managed by SwiftData” (przekształca klasę Swift w przechowywany model zarządzany przez SwiftData), dostępne od iOS 17.0.49 SwiftData potrafi wymusić unikalność przez #Unique, które „Specifies the key-paths that SwiftData uses to enforce the uniqueness of model instances” (określa key paths, których SwiftData używa do wymuszania unikalności instancji modelu), od iOS 18.0.50 Ustawiony element wygląda na naturalne zastosowanie: jeden element na komórkę.

Synchronizacja z CloudKit to wyklucza. Przewodnik Apple po synchronizacji SwiftData mówi, że framework „does include a small number of features that CloudKit doesn’t support natively, such as unique constraints and nonoptional relationships” (zawiera kilka funkcji, których CloudKit natywnie nie obsługuje, takich jak ograniczenia unikalności i nieopcjonalne relacje), oraz że „CloudKit requires all relationships to be optional.” (CloudKit wymaga, by wszystkie relacje były opcjonalne).22 Modele Kiradex mają już taki kształt. Komentarz CardCopy mówi „every property has a default and nothing is unique, for CloudKit” (każda właściwość ma wartość domyślną i nic nie jest unikalne, ze względu na CloudKit), a PriceHistory jest „Shaped for CloudKit like CollectionEntry: defaults everywhere, nothing unique” (ukształtowany pod CloudKit jak CollectionEntry: wszędzie wartości domyślne, nic unikalnego), ze scalaniem, które na każdym urządzeniu wybiera tego samego zwycięzcę, gdy dwa urządzenia utworzą tę samą historię.5152

Unikalność, która ma znaczenie, jeden element na komórkę, trzeba więc wymusić w kodzie: czystą funkcją uruchamianą przy każdym odczycie, która rozstrzyga elementy z dwóch urządzeń na jednej komórce na korzyść tego samego zwycięzcy wszędzie i odsyła przegranego do zasobnika. Jedna komórka nie jest jedyną rzeczą, którą dwa urządzenia mogą wspólnie zepsuć. Dwie edycje, z których każda przechodzi każdą regułę na własnym telefonie, mogą razem zawieść, więc funkcja musi odbudować pokój przez całe sprawdzenie ustawienia, a nie tylko przez test nakładania. Specyfikuje ją brief w sekcji 7.

Przeciąganie: draggable, cel upuszczenia i komórka pod palcem

draggable(_:) „Activates this view as the source of a drag and drop operation” (aktywuje ten widok jako źródło operacji przeciągnij i upuść) dla ładunku Transferable, od iOS 16.0.53 dropDestination(for:action:isTargeted:) odbiera upuszczone elementy i CGPoint, który jego strona opisuje jako „the drop location in this view’s coordinate space” (miejsce upuszczenia w przestrzeni współrzędnych tego widoku), także od iOS 16.0.54 Zamiana tego punktu na komórkę to arytmetyka: odjąć początek mapy i podzielić przez rozmiar kafelka w punktach.

Jedno odkrycie, którego nie miały moje wcześniejsze notatki. Zapisana strona dropDestination(for:action:isTargeted:) podaje iOS 27.2 jako wydanie, które oznacza je jako przestarzałe, z komunikatem „Use dropDestination(for:isEnabled:action:) with an action that takes a DropSession parameter instead.” (zamiast tego należy użyć dropDestination(for:isEnabled:action:) z action przyjmującą parametr DropSession).54 Akcja zamiennika otrzymuje DropSession, „A description of a drop that is in progress” (opis trwającego upuszczania), zamiast punktu.54 Nie zapisałem strony DropSession, więc to, czy zawiera ona położenie w przestrzeni współrzędnych widoku, pozostaje nieprzeczytane, a brief wymienia obie formy.

Do przesuwania elementu, który już stoi w pokoju, DragGesture to „A dragging motion that invokes an action as the drag-event sequence changes” (ruch przeciągania wywołujący akcję w miarę zmian sekwencji zdarzeń przeciągania) (iOS 13.0), a SpatialTapGesture to „A gesture that recognizes one or more taps and reports their location” (gest rozpoznający jedno lub więcej stuknięć i podający ich położenie) (iOS 16.0): stuknięcie zaznacza element, przeciągnięcie przesuwa go komórka po komórce.5556

Czy punkt upuszczenia przekłada się czysto na komórki kafelków pod kamerą Kiradex, nie zostało sprawdzone. Pokój jest rysowany przez RealityKit z całkowitą liczbą pikseli urządzenia na teksel, a nakładka SwiftUI, która odbiera upuszczenie, leży na nim; arytmetyka jest ta sama, którą już wykonuje dopasowanie kamery, ale nikt jeszcze niczego na nim nie upuścił.10

Siatka bez dotyku: VoiceOver

Siatka mebli słabo nadaje się do przesuwania palcem element po elemencie, więc projekt daje VoiceOver własne czasowniki:

  • accessibilityElement(children:) „Creates a new accessibility element, or modifies the AccessibilityChildBehavior of the existing accessibility element” (tworzy nowy element dostępności albo zmienia AccessibilityChildBehavior istniejącego) (iOS 13.0), więc element wielokomórkowy jest jednym elementem, a nie sześcioma.57
  • accessibilityAction(named:_:) dodaje nazwaną akcję; „Actions allow assistive technologies, such as the VoiceOver, to interact with the view by invoking the action” (akcje pozwalają technologiom wspomagającym, takim jak VoiceOver, działać na widoku przez wywołanie akcji) (iOS 16.0). Przesuń w lewo, Przesuń w prawo, Przesuń w górę, Przesuń w dół, Obróć i Odłóż to po jednej akcji.58
  • accessibilityAdjustableAction(_:) obsługuje przesunięcie w górę i w dół jako AccessibilityAdjustmentDirection (iOS 13.0), co pasuje do przełączania tapety lub podłogi.59
  • accessibilityRotor(_:entries:) tworzy „an Accessibility Rotor with the specified user-visible label” (pokrętło dostępności z podaną widoczną etykietą) (iOS 16.0), więc pokrętło „Meble” może przeskakiwać między elementami pokoju.60
  • AccessibilityNotification.Announcement to „A notification that an app posts when it needs to convey an announcement to an assistive app” (powiadomienie, które aplikacja wysyła, gdy musi przekazać komunikat aplikacji wspomagającej) (iOS 17.0): każdy odrzucony ruch jest wypowiadany wraz z powodem.61

Test UI może następnie przeprowadzić audyt ekranu przez XCUIApplication.performAccessibilityAudit(for:_:), wymienione dla iOS 17.0; zapisana strona nie ma streszczenia i podaje Xcode 16.3 dla tej ścieżki modułu.62 Audyt to wszystko, co robi. W nagłówkach XCUIAutomation instalowanych z Xcode 27.0 audyt „Runs an accessibility audit on the current view” (uruchamia audyt dostępności bieżącego widoku). Te same nagłówki dodają XCUIVoiceOverService, od iOS 27.0, które „Provides programmatic control of VoiceOver for UI testing” (zapewnia programowe sterowanie VoiceOver w testach UI): włącza i wyłącza VoiceOver, przesuwa fokus do przodu, do tyłu, do wnętrza kontenerów i z nich, oraz zwraca to, co VoiceOver mówi o elemencie z fokusem. Przeszukanie wszystkich nagłówków frameworka nie znajduje wywołania, które wykonuje nazwaną akcję własną, obraca pokrętło lub odczytuje komunikat, więc test UI nie może nacisnąć Przesuń w lewo ani Odłóż tak, jak robi to użytkownik VoiceOver.63 Brief testuje procedury obsługi tych akcji bezpośrednio, sprawdza wypowiadane etykiety usługą VoiceOver, a akcje, pokrętło i komunikaty zostawia osobie z włączonym VoiceOver.

Ile to kosztuje

Niezmierzone. Urządzony dom to najwyżej 16 małych rekordów na każdym z dwóch pięter. Jeśli ustawione elementy dołączą do jednej siatki obiektów, którą silnik już buduje dla mebli z kuźni, zmiana oznacza przebudowę tej siatki; nic z tego nie zostało sprofilowane na telefonie.39

6. Studium przypadku: wnętrza Kiradex dzisiaj

Kiradex to aplikacja do kolekcjonowania kart na iPhone’a z małym pikselowym miasteczkiem, Kiradex World, w którym każdy kolekcjoner ma dwupiętrowy dom, a miasteczko ma salę wystawową. Wszystko w tej sekcji zostało odczytane z repozytorium aplikacji 5 października 2026, bez uruchamiania i bez zmian: wnętrza sparsowano skryptem, a dokumenty i modele przeczytano jako tekst.964

Co się zmieniło od artykułu o budowlach

Artykuł o budowlach z 3 października mówił, że interiors.py rysuje pokój, piętro i salę „each 14 by 11, with a two-row wall band” (każde 14 na 11, z dwurzędowym pasem ściany).39 Tak było w chwili pisania. Tego samego dnia kompilacja 26 w TestFlight przyniosła zestaw wnętrz: „Rooms sixteen wide with a three-row wall band (cornice, face, wainscot)” (pokoje szerokie na szesnaście, z trzyrzędowym pasem ściany: gzyms, lico, boazeria), meble w 32-pikselowym rytmie, elementy przyścienne rysowane jako podłoże, a wolnostojące jako obiekty, za którymi przechodzi kolekcjoner.65 Dziś kuźnia rysuje room i room-up w rozmiarze 16 na 12 komórek, a salę 16 na 13, każde z trzyrzędowym pasem: gzyms, lico i boazeria.964 Kompilacja 26 wypada między kompilacją 23, którą opisuje artykuł o budowlach, a kompilacją 35, którą opisuje jego wieczorny dopisek, więc oba teksty mają rację co do swoich kompilacji.3965

Meble z kuźni

scripts/forge/interiors.py wymienia 23 elementy w tabeli PIECES, każdy z szerokością i wysokością w komórkach oraz flagą określającą, czy stoi wolno.9

Rodzaj Elementy i obrysy (komórki, szer. na wys.)
Przyścienne, wrysowane w podłoże (9) regał na książki 5 na 2; szafa 2 na 2; blat, zlew i kuchenka po 1 na 1; kominek 2 na 2; schody w górę i schody w dół po 2 na 3; filar 1 na 3
Wolnostojące, eksportowane jako obiekty, względem których sortowany jest kolekcjoner (14) łóżko i łóżko z różami po 2 na 3; szafka nocna 1 na 1; stół 2 na 2; krzesło w czterech kierunkach, po 1 na 1; sofa 3 na 2; ławka 2 na 1; roślina 1 na 2; kufer, skrzynka i beczka po 1 na 1

Sparsowane z PIECES przez measure_kiradex_interiors.py; plik nigdy nie jest importowany ani uruchamiany.9

Element zajmuje od 1 do 10 komórek, średnio 3,04, wobec od 1 do 9 i 2,43 w Emerald.92 Odrębnych rysunków jest mniej niż nazw: cztery krzesła to jeden rysunek w czterech kierunkach, dwa łóżka to dwa warianty, dwoje schodów to dwa kierunki, a blat, zlew i kuchenka to jeden blat w trzech odmianach.9

Docstring pliku i jego tabela się nie zgadzają. Docstring ustala konwencję jako „furniture on the 16-pixel grid in a 32-pixel rhythm, every piece at least two tiles on one axis” (meble na 16-pikselowej siatce w 32-pikselowym rytmie, każdy element na co najmniej dwa kafelki w jednej osi).64 W tabeli 11 z 23 ma 1 na 1: cztery krzesła, blat, zlew, kuchenka, szafka nocna, kufer, skrzynka i beczka.9 Rytm obowiązuje duże elementy, a małych nie. To rozbieżność między komentarzem a kodem w jednym pliku, scripts/forge/interiors.py, a brief zachowuje małe elementy, bo pokój złożony wyłącznie z elementów dwukafelkowych nie miałby krzeseł.

Lico ściany ma własny słownik, w postaci liter: obraz p, zegar k, okno N, okno z zasłonami K, proporzec n, kinkiet l oraz W tam, gdzie wisi tablica ścienna. Podłogi to deski o, płytki t, marmur s i dywan r, który rysuje się jako nine-slice na podstawie sąsiadów. Są dwa style ścian, tynk z drewnianą konstrukcją w domu i ciosany kamień w sali, wybierane dla każdego wnętrza przez FACES.64

Pokoje w wersji autorskiej

Mapa Rozmiar Komórki podłogi Elementy (ruchome) Podłoga pod elementami Wolna podłoga Miejsca, które aplikacja zapełnia
room 16 na 12 125 14 (13) 25 100 półka 5 komórek, gablota 2, biurko 2; przybycie, schody, gospodarz
room-up 16 na 12 125 12 (11) 27 98 tablica ścienna 3 komórki, biurko 2; przybycie przy schodach
hall 16 na 13 144 6 (4) 8 128 po 8 postumentach 8 postumentów

Ruchome nie obejmują schodów i filarów. Z measure_kiradex_interiors.py.9

Miejsce host ma w pliku komentarz „where the owner stands when you visit” (gdzie stoi właściciel, gdy przychodzi się z wizytą).64 check() kuźni już odrzuca miejsce półki, gabloty, biurka lub postumentu na niewłaściwej literze, warp, który nie leży na drzwiach ani na schodach, komórkę przybycia, schodów lub gospodarza, po której nie można chodzić, oraz dwa wyeksportowane obiekty na jednej komórce. Jego węższe granice mają znaczenie dla briefu. Nie ma sprawdzenia liter dla miejsc tablicy ściennej, a jego pętla nakładania czyta tylko wyeksportowane obiekty, czyli elementy wolnostojące, więc element przyścienny wrysowany w podłoże nigdy do niej nie trafia. Nie sprawdza, czy od drzwi da się dojść do każdego miejsca.64

Reguła przejścia na dzisiejszych pokojach

Napisałem skrypt, który odbudowuje wyeksportowane litery tak, jak robi to export(), i chodzi w czterech kierunkach od przybycia na każdym piętrze po literach, po których w kuźni da się chodzić, otsrUD.20 W dzisiejszych układach chód dochodzi do schodów i gospodarza na dole oraz do schodów na górze. Komórki tuż przed miejscami ekspozycji to inna historia:

  • Na dole pięć komórek frontowych półki: dwie są pod beczką i skrzynką, do trzech da się dojść.
  • Do obu komórek frontowych gabloty da się dojść.
  • Dwie komórki frontowe biurka: jedna jest pod przysuniętym do niego krzesłem, do jednej da się dojść.
  • Na górze biurko wygląda tak samo, jedna z dwóch.
  • Na górze trzy komórki frontowe tablicy ściennej są pod łóżkiem i szafką nocną. Do żadnej nie da się dojść.20

Reguła, według której własna komórka frontowa każdego miejsca musi być osiągalna, nie przeszłaby więc w czterech zapełnionych grupach kuźni na obu piętrach (półka i biurko na dole, biurko i tablica ścienna na górze), łącznie siedem zablokowanych komórek frontowych, a reguła, według której każda zapełniona grupa ma mieć jedną osiągalną komórkę frontową, nie przechodzi w jednej grupie: tablicy ściennej na górze. Brief stosuje wariant grupowy i naprawia tablicę przy przestawieniu startowym.

Skrypt sprawdził też dodatkowe elementy w room. Jeden dodatkowy element wolnostojący ma 733 ustawienia spełniające reguły komórek; 44 z nich odcinają cel i każde robi to, zakrywając samą komórkę celu. Dwa dodatkowe elementy, każdy z dala od wszystkich celów i bez nakładania się, dają 229 891 par, a 713 z nich odcina cel, nie zakrywając go: na przykład łóżko na (9,3) i szafka nocna na (6,4) zamykają kieszeń przed szklaną gablotą.20 Tych 713 to właśnie to, co przepuszcza sprawdzenie na poziomie komórek, a wyłapuje chód. To także to, co mogą wspólnie zbudować dwa telefony: każdy element osobno zostawia wszystkie cele osiągalne, więc każdy przechodzi chód na własnym urządzeniu, a para zawodzi dopiero po zsynchronizowaniu obu (7.7).66 Nie prowadziłem wyszukiwania dalej niż dwa dodatkowe elementy; przy szesnastu nie zmierzono, ile układów przepuściłoby sprawdzenie na poziomie komórek, a odrzuciłby chód.

Kolekcjoner a siatka

Komórka sprite’a kolekcjonera ma 32 na 40 pikseli, z 7 pikselami nad figurą i 2 pod nią, więc figura ma około 31 pikseli wysokości, a komórka ma 2 kafelki szerokości i 2,5 wysokości, wobec klatki 1 na 2 w Emerald. WORLD.md opisuje go jako „a 30-pixel figure in a 32 × 40 cell” (30-pikselową figurę w komórce 32 × 40).2767 Szerokości samej figury nie mierzono. Odczytuję tę komórkę jako powód, dla którego kuźnia rysuje meble w 32-pikselowym rytmie na 16-pikselowej siatce: komórka kolekcjonera ma dwa kafelki szerokości.

Czego pokoje nie robią

Szczera lista z artykułu o budowlach wciąż obowiązuje dla domu: „Rooms have no wallpaper or floor choice and no placeable furniture; the house is dressed from the collection and nothing else.” (Pokoje nie mają wyboru tapety ani podłogi ani mebli do ustawiania; dom jest zapełniany kolekcją i niczym więcej).39 Aplikacja zapełnia nazwane miejsca z kolekcji (segregatory na półce, karty w gablocie, wstęgi i przypinki na tablicy, karty na postumentach w sali), a kuźnia ustawia każdy mebel.6439

Serwer nie potrafi jeszcze przechowywać pokoju. Jego moduł pokoi mówi: „Everything here is in memory; a room empties when its last collector leaves and nothing of them is kept.” (Wszystko tu jest w pamięci; pokój pustoszeje, gdy wychodzi ostatni kolekcjoner, i nic z nich nie zostaje zachowane).68 Odwiedziny w domu innego kolekcjonera to więc dziś odwiedziny na mapie, a odwiedziny tylko do odczytu w prawdziwej aranżacji kolekcjonera wymagają, by serwer przechowywał układ.

Gdzie zapisano reguły pokoju

Artykuł o świecie z 3 października opublikował reguły pokoju: „a furnishing cap of sixteen” (limit szesnastu mebli); „visits are read-only, a like is once a day, and the room’s total never decreases” (odwiedziny są tylko do odczytu, polubienie raz dziennie, a suma pokoju nigdy nie maleje); oraz „A report arrives every Sunday grading the room, with its point sources listed” (co niedzielę przychodzi raport oceniający pokój, z rozpisanymi źródłami punktów).10 Tych reguł nie ma w dokumencie projektowym aplikacji. Sekcja 4 docs/WORLD.md wymienia sklep za monety („clothes, hats, backpacks, card-display frames and emotes”, ubrania, czapki, plecaki, ramki do ekspozycji kart i emotki) oraz kosmetyki blokowane poziomem, „that cannot be bought” (których nie można kupić), i nie mówi nic o meblach, limitach, polubieniach ani o niedzielnym raporcie.67 Reguły znajdują się w notatce badawczej docs/research/pixel-art/06-collecting-and-hubs.md, w sekcji 5.3, która prosi też, by list był „a pixel object that appears on the doormat” (pikselowym obiektem pojawiającym się na wycieraczce), o „a stamp on their passport per room visited, with ranks at 30 / 100 / 500” (stempel w paszporcie za każdy odwiedzony pokój, z rangami przy 30 / 100 / 500), a w sekcji 5.7 o to, by przedmioty mecenasa były „never a bigger furnishing cap” (nigdy większym limitem mebli).69 Ten artykuł traktuje je jako przesądzone, bo opublikował je artykuł o świecie, a pierwszym punktem porządkowym briefu jest przeniesienie ich do WORLD.md. Ten sam akapit artykułu o świecie mówi też: „Patron flair stays on the name-plate and the room skin” (ozdobniki mecenasa zostają na tabliczce z imieniem i na skórce pokoju).10 Brief nie traktuje skórki pokoju jako przesądzonej: otwiera ją ponownie jako decyzję Blake’a (7.5).

Tydzień już istnieje

Cotygodniowe zadania zmieniają się według tygodnia kalendarza w Quest.current, motywem sali jest tytuł zadania tygodnia, a notatki prototypowe pytają testerów o „Weekly reset on your calendar’s week” (cotygodniowy reset według tygodnia w kalendarzu).7071 Niedzielny list nie potrzebuje nowego zegara, choć ma własny klucz, datę niedzieli, z powodu, który podaje punkt 7.4.

7. Brief: co buduje Kiradex i jakie sprawdzenia musi przejść

To brief, a nie raport z wydanej pracy: nic z poniższego jeszcze w aplikacji nie istnieje. Jest napisany jako diff względem tego, co zmierzyła sekcja 6: 23 elementy kuźni, dwa piętra domu 16 na 12 i sala 16 na 13, zapełniane miejsca, serwer, który niczego nie przechowuje, magazyn SwiftData synchronizowany przez CloudKit, zegar cotygodniowych zadań i reguły pokoju, które artykuł o świecie już opublikował.96810 Każdy element zachowuje mechanikę zmierzoną powyżej i rysuje wszystko własną kuźnią, paletą i słowami Kiradex. Żaden element nie nazywa stworzenia, miejsca z jakiejkolwiek gry ani funkcji z jakiejś marki, a nic w pokoju nie jest rzucane, łapane, przywoływane ani dosiadane, więc nic nie przypomina zastrzeżonych kroków patentów na metody gry, które opisuje artykuł o świecie; to moje odczytanie, a nie porada prawna.10 Współrzędne są współrzędnymi kuźni, x w prawo, y w dół od lewej górnej komórki. Liczby w tej sekcji (startowa ósemka, tabela punktacji, progi stopni domu, harmonogram odblokowań) to moje propozycje, a nie fakty.

7.1 Ustawianie według komórek, w słowniku samej kuźni

Tryb Urządzania w domu. Elementów do ustawiania jest 20 z 23 elementów kuźni: wszystkie poza stairs, stairs_down i pillar, które pozostają częścią układu. Cztery krzesła stają się jednym rodzajem z kierunkiem, więc 20 elementów to 17 rodzajów podłogowych. Obraz, zegar, proporzec i kinkiet z lica ściany stają się czterema przedmiotami ściennymi do ustawiania, co daje 21 rodzajów z dzisiejszej kuźni; okna i otwór schodów pozostają architekturą. Sekcja 7.5 dodaje trzy nowe elementy (stół ekspozycyjny, parawan i ścienny przedmiot z zasuszonym kwiatem), co podnosi liczbę do 24.72 Ustawiony element to (kind, x, y, facing) w jego lewej górnej komórce na literowej mapie piętra, w tym samym kształcie, którego już używa ROOM_FURNITURE.964

Reguły, komórka po komórce. Pierwsze pięć to pytanie do komórki z Emerald przeformułowane dla liter Kiradex; szósta to dodatek briefu, sprawdzenie, którego funkcja ustawiania w Emerald nie wykonuje.4

  1. Element wolnostojący wymaga, by każda zajęta komórka była podłogą (o, t, s lub r) bez innego elementu na niej.
  2. Element przyścienny (regał na książki, szafa, blat, zlew, kuchenka, kominek) wymaga, by jego górny rząd leżał na pasie ściany, tam gdzie kuźnia już je stawia: kominek na y = 1, przez lico i boazerię, a pozostałe na y = 2, na boazerii.64
  3. Przedmiot ścienny wymaga komórki lica (A) w rzędzie 1, która nie jest oknem ani otworem schodów.
  4. Żadnego elementu na komórce przybycia, dwóch komórkach drzwi (kuźnia rysuje drzwi na szerokość dwóch komórek w dolnej ścianie), komórkach schodów, po których się chodzi, ani na komórce gospodarza.
  5. Regał na książki niesie ze sobą pięć miejsc półki, bo miejsca są względne wobec elementu, więc przesunięcie półki przesuwa segregatory. Szklana gablota c i biurko d pozostają w tym briefie stałymi literami.
  6. Reguła przejścia. Po ustawieniu chód w czterech kierunkach po komórkach, po których się chodzi, od przybycia musi nadal docierać do komórki schodów, komórki gospodarza i co najmniej jednej komórki bezpośrednio przed każdą zapełnianą grupą: półką, gablotą, biurkiem, tablicą ścienną. Element, który przerywa chód, zostaje odrzucony, a odrzucenie podaje, co by odciął.

Siatka 16 na 12 parteru Kiradex w wersji, jaką kuźnia tworzy dziś, w komórkach bez grafiki: trzyrzędowy pas ściany u góry, regał na książki i szklana gablota przy nim, komórki schodów w prawym górnym rogu, drzwi na dole; podłoga osiągalna z przybycia na biało; wolnostojące elementy kuźni na szaro; przybycie, schody i gospodarz oznaczone A, S i H; komórki frontowe półki, gabloty i biurka oznaczone jako osiągnięte albo przekreślone tam, gdzie stoi na nich beczka, skrzynka lub krzesło; a narysowane na wierzchu na pomarańczowo łóżko na (9,3) i szafka nocna na (6,4), z obrysowanymi sześcioma komórkami przed gablotą, które ta para odcina.

Każdy z dwóch pomarańczowych elementów spełnia reguły komórek; razem odgradzają gablotę i wyłapuje to tylko chód z reguły 6.2420

Dlaczego wariant grupowy. W dzisiejszych układach komórka przed miejscem to często element: beczka i skrzynka pod dwiema z pięciu komórek frontowych półki, krzesło przy każdym biurku, a łóżko i szafka nocna pod wszystkimi trzema komórkami tablicy.20 Kuźnia już częściowo mówi tym językiem: check() odrzuca nakładanie się wolnostojących obiektów oraz miejsca półki, gabloty, biurka i postumentu na niewłaściwej literze.64 Gracz dostaje te reguły rozszerzone na każdy obrys, łącznie z elementami przyściennymi, i na komórki tablicy ściennej, a do tego chód.

Kryteria akceptacji. - Test jednostkowy uruchamia sześć reguł na room.json: każdy z 24 rodzajów (21 z dzisiejszej kuźni i trzy dodane w 7.5) zostaje przyjęty na jednej komórce i odrzucony na jednej komórce dla każdej reguły, która go dotyczy. - Reguła przejścia jest spełniona na obu wydanych piętrach startowych (7.2), a test utrwala, że tablica na górze ma osiągniętą komórkę frontową. - Test właściwości ustawia losowe legalne sekwencje do 16 elementów w room i room-up i po każdym kroku sprawdza, czy chód od przybycia dociera do schodów, gospodarza i komórki frontowej każdej zapełnianej grupy. - Test regresji ustawia łóżko na (9,3) i szafkę nocną na (6,4) w room i sprawdza, czy drugi element zostaje odrzucony z komunikatem wskazującym gablotę.20 - Zrzut trybu Urządzania na symulatorze iPhone 18 Pro Max pokazuje obrys trzymanego elementu zabarwiony komórka po komórce, jeden legalny i jeden nielegalny. - check() kuźni przechodzi na każdym układzie, jaki może wytworzyć aplikacja: test eksportuje ustawiony układ jako ROOM_FURNITURE i uruchamia na nim sprawdzenie kuźni, tylko do odczytu. Ponieważ to sprawdzenie czyta tylko wyeksportowane obiekty i nie ma sprawdzenia liter dla tablicy ściennej, ten sam test sprawdza także, własnym walidatorem briefu, że żadne dwa ustawione obrysy nie dzielą komórki, łącznie z elementami przyściennymi, oraz że trzy miejsca tablicy ściennej leżą na komórkach W tablicy w autorskiej mapie.64

7.2 Limit: szesnaście na piętro, pokoje startowe z ośmioma

Co. 16 ustawionych elementów na mapę piętra, room i room-up każda, łącznie z przedmiotami ściennymi, tak jak New Horizons wlicza przedmioty ścienne i sufitowe do swoich 150.5 To, czym zapełnia kolekcja (segregatory na półce, karty w gablocie, wstęgi i przypinki na tablicy), nigdy się nie liczy: limit budżetuje meble, a kolekcja jest sednem. Posiadanie nie jest nim ograniczone; kolekcjoner może mieć więcej, niż się zmieści, tak jak pozwala na to miejsce w Emerald na 150 posiadanych wobec 16 ustawionych.2

Liczby. 16 wobec 125 komórek podłogi to 0,13 na komórkę, połowa 0,27 z Emerald, co pasuje do elementów zajmujących średnio 3,04 komórki wobec 2,43 w Emerald i do kolekcjonera, którego komórka ma dwa kafelki szerokości (moja arytmetyka).9227 Startowy room z kuźni ma już 13 ruchomych elementów, a room-up 11, więc nowy kolekcjoner zaczynający od 13 z 16 miałby trzy wybory.9 Propozycja: wydać każde piętro startowe z 8 ruchomymi elementami, wybranymi w kuźni. Na dole zostaje regał na książki, bo niesie miejsca półki; na górze zostaje łóżko, a przestawienie zwalnia co najmniej jedną komórkę przed tablicą ścienną, czego dziś nie spełnia żadna. Usunięte elementy trafiają do zasobnika kolekcjonera, zamiast znikać, więc 8 miejsc na piętro należy do kolekcjonera od pierwszego dnia.20 Elementy startowe są tworzone ze stałymi identyfikatorami, tak by dwa urządzenia uruchamiane na zimno tworzyły te same rekordy, a nie dwa zestawy (7.7).

Bez względu na mecenat. Zdanie z notatki badawczej obowiązuje: przedmioty mecenasa to „never a bigger furnishing cap” (nigdy większy limit mebli).69

Kryteria akceptacji. Test jednostkowy ustawia 16 elementów i sprawdza, czy 17. zostaje odrzucony z komunikatem wskazującym limit; test, że segregatory, karty, wstęgi i przypinki w zapełnianych miejscach nie zmieniają licznika; test, że każdy poziom mecenasa widzi limit 16; test, że oba piętra startowe wczytują się z 8 ruchomymi elementami i spełniają regułę przejścia.

7.3 Tapeta i podłoga

Co. Na każdą mapę piętra jeden styl ściany i jeden styl podłogi, każdy zmieniany w trybie Urządzania jednym stuknięciem, za darmo i odwracalnie: jeden gest dla jednej powierzchni ze Stardew i wybór dla każdego pokoju z New Horizons, a nie trwałość z Habbo.41533 Style nie wliczają się do 16.

Istniejący słownik. Dwa lica ścian (plaster i blocks), trzy podłogi (deski o, płytki t, marmur s) i dywan.64 Kuźnia rysuje według reguł z nazwanych ramp palety, więc styl to rysownik i rampa. Pierwszy zestaw to 2 lica po 3 rampy i 3 podłogi po 2 rampy: 6 stylów ścian i 6 stylów podłóg, każdy narysowany przez kuźnię, nic malowane ręcznie. Kolejne przychodzą przez grę (7.5).

Jak to jest wydawane. Kuźnia eksportuje każdy styl jako komórki atlasu obok własnych komórek pokoju, a aplikacja podmienia indeksy podłoża komórek ściany i komórek podłogi; dywan zachowuje swój nine-slice.

Kryteria akceptacji. Zrzut room w każdym stylu ściany i każdym stylu podłogi, łącznie 12; sprawdzenie palety, że każdy piksel każdego stylu jest indeksem palety kuźni; test, że zmiana stylu nie narusza ustawionych elementów ani zapełnianych miejsc.

7.4 Niedzielny list: cotygodniowa punktacja z wydrukowanym każdym źródłem

Co. Raz w tygodniu, przy pierwszym otwarciu w niedzielę o północy czasu lokalnego lub później, na wycieraczce pojawia się list (obiekt na komórce przybycia), który ocenia dom w jego bieżącym stanie. Jeden list na niedzielę, z kluczem w postaci daty tej niedzieli w czasie lokalnym. Kluczem nie może być tydzień tablicy zadań: Quest.current bierze z kalendarza przedział weekOfYear, który zaczyna się w dniu, w którym zaczyna się tydzień w kalendarzu, więc klucz tygodniowy i reguła niedzieli mogłyby się rozjechać.70 Opuszczony tydzień nic nie kosztuje. List drukuje każdy wiersz źródła z punktami, a potem sumę i stopień domu. Nazwa jest własna dla Kiradex, na razie notka kuratora, nigdy nazwa gry, od której pożycza rytm.

Źródła. Kształt jest kształtem Happy Home Academy w ujęciu tabel Nookipedii (progi liczebności, premia za komplet, premia za kolor); liczby są moje, a kolekcja jest w nich uwzględniona.6 Limity dotyczą mapy piętra, tak jak 16.

Źródło Punkty Limit Co pożycza
Każdy ustawiony element 100 16 elementów na piętro progi liczebności
Umeblowane piętro: 6, 10 i 16 elementów 500 za każdy 1500 na piętro 1000 przy 6, 10, 15 i 20 przedmiotach
Garnitur: 4 lub więcej elementów z jednego zestawu kuźni na jednym piętrze 200 za element 16 elementów na piętro 4 lub więcej z jednej serii
Jedna rampa: 70% elementów piętra i jego dwie powierzchnie, ściana i podłoga, w jednej rodzinie ramp 100 za każdy ustawiony element na piętrze 16 na piętro 70% w jednym kolorze
Jedna rampa przy 90% (zastępuje wiersz 70%) 300 za każdy ustawiony element na piętrze 16 na piętro 90% w jednym kolorze
Półka: wszystkie 5 miejsc na segregatory zapełnione z kolekcji 500 raz biurka z Emerald, na których stoją lalki
Gablota: każde z jej 2 miejsc mieści kartę 300 za każde 600
Tablica: każda z jej 3 komórek mieści przypinkę, stempel lub wstęgę 100 za każdą 300
Potrącenia brak reguła przejścia już odrzuca zablokowany pokój

Propozycja. Każdy wiersz da się obliczyć z lokalnego pokoju i kolekcji.

Najwyższy wynik, jaki może dać ta tabela, to 23 600, obliczony wiersz po wierszu dla obu pięter przy 16 elementach i spełnionych wszystkich premiach; wiersze garnituru i rampy zakładają zestaw i rodzinę ramp wystarczająco duże dla wszystkich szesnastu, więc to górna granica, a nie układ, który ktokolwiek narysował. Piętro startowe z 8 elementami, przed zestawami, rampami i miejscami, zdobywa 1300.21

Poziomy wykres słupkowy źródeł punktów niedzielnego listu przy ich maksimum dla obu pięter: każdy ustawiony element 3200; umeblowane piętro przy 6, 10 i 16 elementach 3000; garnitur 6400; jedna rampa przy 90% 9600; pełna półka 500; gablota 600; tablica 300; łącznie 23 600.

Na szczycie skali kompozycja (zestawy i rampy) jest warta więcej niż liczba, i właśnie po to jest limit.2421

List ocenia dom w trzech stopniach domu, a każdy próg to wynik, jaki sama tabela daje domowi wzorcowemu: 4500 dla obu pięter z 10 elementami i pełną półką; 7600 dla obu pięter z 16 elementami i pełną półką, gablotą i tablicą; oraz 14 000 dla tego domu z garniturem z 8 elementów i 70% w jednej rampie na każdym piętrze. Dom startowy, oba piętra z 8, zdobywa 2600, poniżej pierwszego stopnia.21 Te trzy liczby to moja propozycja; ostateczne ustala Blake przed wydaniem listu. W odróżnieniu od progów Academy nie rosną, bo kształt domu nigdy się nie zmienia (zob. Poza tym briefem, niżej).6 Stopień domu to nie wstęga. Wstęgi, które aplikacja już przechowuje, pochodzą od kolekcjonerów z miasteczka i są zapisywane jako plaza.ribbons; to te wstęgi pokazuje tablica (sekcja 6).73 Stopień domu jest drukowany w liście i przechowywany jako liczba (7.5), i nigdy nie trafia na tablicę.

Czego punktacja nigdy nie czyta. Poziomu mecenasa, monet, zakupów, polubień, czegokolwiek o innym graczu ani skórki pokoju mecenasa. Każdy wiersz da się obliczyć z lokalnego pokoju i kolekcji, więc kolekcjoner może zobaczyć dokładnie, dlaczego dostał to, co dostał. Jeśli skórka pokoju mecenasa zostanie wydana, rysuje się ją na zwykłym stylu ściany piętra i sama nie jest stylem ściany: piętro zachowuje ten zwykły styl do punktacji, więc wiersze rampy liczą te same elementy i powierzchnie ze skórką i bez niej (7.5).

Zmiana w kuźni. PIECES dostaje znacznik set, rysowany jako dopasowany materiał; pierwsze zestawy to istniejące elementy pogrupowane według materiału, z którego są narysowane.

Kryteria akceptacji. Czysta funkcja Score.week(room:collection:) z testem jednostkowym dla każdego wiersza: piętro z 5, 6, 10 i 16 elementami; garnitur z 3 i z 4; 69%, 70%, 89% i 90% w jednej rampie; półka z 4 i z 5 segregatorami. Test, że maksimum wynosi 23 600. Test, że trzy domy wzorcowe zdobywają 4500, 7600 i 14 000 i osiągają pierwszy, drugi i trzeci stopień domu, a dom startowy, z 2600, nie osiąga żadnego. Test, że osiągnięcie stopnia domu nie dodaje niczego do plaza.ribbons ani na tablicę. Test, że list danej niedzieli jest generowany raz (ta sama data niedzieli dwa razy daje jeden list, następna niedziela kolejny) i że kalendarz, którego tydzień zaczyna się w poniedziałek, daje te same klucze. Test, że dwa profile różniące się tylko poziomem mecenasa dostają identyczne wyniki. Zrzut UI listu na wycieraczce w niedzielę, z argumentem uruchomienia ustawiającym datę.

7.5 Odblokowywanie przez grę, nigdy przez zakup

Co. Katalog posiadany przez kolekcjonera wynika z gry. Trzy z jego sześciu wejść istnieją już dziś: poziomy i przypinki, wyprowadzane z synchronizowanej kolekcji, oraz stemple zadań, zapisywane tylko na urządzeniu. Pozostałe trzy wymagają nowych liczników, każdego nazwanego i synchronizowanego:

  • Poziomy. Krzywa z WORLD.md to level = floor(sqrt(XP / 40)) + 1.67 Jeden rodzaj lub styl na każdym poziomie od 2 do 20, potem co drugi poziom, tak jak WORLD.md już blokuje kosmetyki, „that cannot be bought” (których nie można kupić).67 Dostępne dziś, wyprowadzane z synchronizowanej kolekcji: aplikacja wylicza z niej doświadczenie i poziom, „so every device agrees without anything being stored” (więc każde urządzenie się zgadza, choć nic nie jest zapisywane).74
  • Przypinki. Każda przypinka odblokowuje jeden nazwany element: Full Set stół ekspozycyjny, Vintage zegar, Across the Sea parawan. Pierwszy i ostatni to nowe elementy kuźni.67 Dostępne dziś, wyprowadzane z synchronizowanej kolekcji tym samym wyliczeniem.74
  • Cotygodniowe zadania. Każde ukończone cotygodniowe zadanie dodaje jeden egzemplarz podstawowego elementu: krzesło, roślinę, skrzynkę.70 Zapisywane dziś, ale tylko na urządzeniu: stemple żyją w @AppStorage("quests.stamps"), czyli w UserDefaults, a nie w synchronizowanym magazynie, więc przechodzą do PlayRecord (niżej), zanim jakikolwiek element będzie od nich zależał.7375
  • Kroki. Jeden długi spacer, element kosztujący dużą liczbę kroków, tak jak szklane krzesło w Emerald kosztuje 6000 popiołu zbieranego krok po kroku. Worek w Emerald nie pokazuje licznika, a warsztat podaje brakującą ilość dopiero wtedy, gdy gracz do niego wróci; tutaj propozycją jest licznik stale widoczny na karcie elementu w zasobniku, przebyte kroki wobec potrzebnych.2815 Zasuszony kwiat z rośliny na parapecie to osobna propozycja: przedmiot ścienny, którego odblokowanie wyznacza brief z artykułu Jak oddać hołd starym grom Pokémon, niczego od nich nie pożyczając, gdzie roślina rośnie o jeden etap co 256 kroków, kwitnie przez 1024 kroki, a potem zrzuca jeden kwiat, a nie licznik z tego punktu. Nowe: aplikacja nie przechowuje dziś żadnej liczby kroków, więc wymaga to stepsWalked.73
  • Odwiedziny. Rangi paszportu przy 30, 100 i 500 odwiedzonych pokojach odblokowują po jednym stylu.69 Nowe: dziś nic nie zapisuje odwiedzin, ani na urządzeniu, ani na serwerze, więc wymaga to roomsVisited, identyfikatorów gospodarzy.7368
  • List. Za pierwszym razem, gdy kolekcjoner osiąga dany stopień domu, odblokowuje element. Nowe: stopnie domu istnieją tylko w tym briefie (7.4), więc wymaga to letterTier, najwyższego osiągniętego stopnia domu.

Diff modelu. Stemple zadań i trzy nowe liczniki żyją w jednym synchronizowanym modelu, PlayRecord, po jednym rekordzie na urządzenie, ukształtowanym jak pozostałe modele aplikacji pod CloudKit (7.7). Katalog czyta rekord każdego urządzenia: kroki są sumowane, stemple i odwiedzeni gospodarze łączeni, a wygrywa najwyższy stopień domu. Urządzenie przechowuje uid własnego rekordu pod kluczem @AppStorage, w tej samej przestrzeni nazw UserDefaults co plaza.id, identyfikator urządzenia na placu.7375 Każde urządzenie zapisuje tylko własny rekord, więc dwa urządzenia nigdy nie edytują tego samego i nie jest potrzebna żadna reguła scalania. Obowiązuje to tylko dopóty, dopóki wskaźnik zostaje na jednym urządzeniu, a kopia zapasowa przywrócona na drugim telefonie przeniosłaby wskaźnik ze sobą (moje odczytanie; żadnego przywracania nie testowano). Dlatego rekord nosi znacznik urządzenia, writer, a reguła brzmi: przywrócone urządzenie tworzy nowy rekord, gdy rekord wskazany przez jego wskaźnik zapisało inne urządzenie. Stary rekord zostaje, a katalog nadal go czyta. Jaka wartość daje znacznik, którego kopia zapasowa nie przeniesie na nowy telefon, nie zostało w tym briefie rozstrzygnięte; test utrwala regułę. Przy pierwszym uruchomieniu po zmianie urządzenie raz kopiuje swoją listę quests.stamps do swojego rekordu.

Co zostaje odrzucone. Żadnych mebli ani stylów jako zakupów w aplikacji, żadnej ceny w monetach za meble, żadnych losowych mebli jakiegokolwiek rodzaju, żadnych elementów o ograniczonej liczbie i żadnego handlu meblami: meble do rozbicia, rzadkie meble i wartości handlowe z Habbo są kontrprzykładem.1735 Moje odczytanie: aplikacja 9+, której pętla dekorowania opiera się na kupowaniu lub losowości, ściąga na siebie pytania o loot boksy i presję, których aplikacja kolekcjonerska nie potrzebuje, a odblokowywanie przez grę ich unika. Jedynym płatnym wyjątkiem, na który pozwala notatka badawcza, jest „one room skin” (jedna skórka pokoju) dla mecenasów, a artykuł o świecie ją nazwał: „Patron flair stays on the name-plate and the room skin” (ozdobniki mecenasa zostają na tabliczce z imieniem i na skórce pokoju).6910 To samo zdanie wyznacza granicę: ozdobniki mecenasa „never touches a pedestal slot or a judging bonus” (nigdy nie dotykają miejsca na postumencie ani premii w ocenie).10 Ten brief otwiera skórkę ponownie jako decyzję Blake’a, zamiast traktować ją jako przesądzoną. Jeśli ją zachowa, skórka jest nakładką wizualną, a nie stylem ściany. Piętro zachowuje zwykły styl ściany wybrany przez kolekcjonera, skórka rysuje się na nim, a punktacja czyta tylko zwykły styl, więc wiersze rampy z 7.4 liczą te same elementy i powierzchnie, przy tym samym mianowniku, ze skórką i bez niej. Usunięcie ściany z liczenia rampy nie byłoby natomiast neutralne, bo udział liczy powierzchnie tak samo jak elementy. Piętro z 16 elementami, z których 15 oraz styl podłogi są w jednej rampie, a ściana poza nią, to 16 z 18, 88,9%, na wierszu 70% za 1600 punktów, po 100 za każdy z 16 ustawionych elementów, łącznie z tym spoza rampy; po usunięciu ściany to 16 z 17, 94,1%, na wierszu 90% za 4800, po 300 za każdy z 16, czyli premia w ocenie wynosząca 3200 za płatną skórkę.76 Test poniżej wyłącza skórkę z nazwy.

Kryteria akceptacji. Test jednostkowy, że posiadany katalog jest czystą funkcją XP, przypinek, stempli zadań, przebytych kroków, odwiedzonych pokoi i stopnia domu i nie zmienia się pod wpływem niczego innego; test, że PlayRecord dwóch urządzeń dają ten sam katalog odczytywane w dowolnej kolejności (kroki zsumowane, stemple i gospodarze połączeni, najwyższy stopień domu); test, że istniejąca lista quests.stamps urządzenia zostaje skopiowana do jego rekordu raz i nigdy dwa razy; test, że urządzenie, którego wskaźnik wskazuje rekord z writer innego urządzenia, tworzy nowy rekord, zostawia stary bez zmian i nadal liczy oba; test, że żaden identyfikator produktu StoreKit ani żaden przedmiot ze sklepu za monety nie odpowiada rodzajowi mebla ani stylowi, z jednym nazwanym wyjątkiem: jeśli Blake zachowa skórkę pokoju mecenasa, jej produkt odpowiada dokładnie jednej nakładce i żadnemu stylowi ściany, a jej zastosowanie nie zmienia stylu ściany piętra branego pod uwagę w punktacji; test, że piętro zdobywa te same punkty, wiersz po wierszu, i osiąga ten sam stopień domu ze skórką i bez niej, uruchamiany na każdej granicy progu: 5, 6, 10 i 16 elementów, 69%, 70%, 89% i 90% w jednej rampie, za każdym razem ze zwykłą ścianą w rodzinie ramp i poza nią, oraz domy o jeden punkt poniżej każdego progu stopnia domu i dokładnie na nim; test migawkowy zasobnika katalogu na poziomie 1 (tylko zestaw startowy) i na poziomie 20.

7.6 Odwiedziny: tylko do odczytu, jedno polubienie dziennie, suma, która nigdy nie maleje

Co. Gość wchodzi do domu gospodarza przez jego drzwi, korzystając z warpów pokoi, które miasteczko już ma dla domów własnych kolekcjonerów,39 i widzi ustawione elementy, style i zapełnione miejsca gospodarza. Gość może chodzić i wypowiadać gotowe kwestie, ale nie może niczego przesunąć, zabrać ani dodać: zasada z Habbo i cel, do którego dochodzi sen w New Horizons, nie zachowując niczego, co zmienił gość.1832 Polubienie na drzwiach liczy się raz na gościa, na gospodarza i na lokalny dzień, a suma gospodarza nigdy nie maleje, nawet gdy przestawia meble: zasada z Club Penguin, według jej jedynego fanowskiego źródła.19 Odwiedziny dają gościowi stempel w paszporcie, który urządzenie gościa dopisuje do roomsVisited w swoim PlayRecord (7.5).69

Diff serwera. Dzisiejszy serwer niczego nie przechowuje.68 Odwiedziny wymagają dwóch małych rekordów na gracza. Pierwszy to układ domu: najwyżej 32 ustawione elementy na dwóch piętrach, każdy z rodzajem, x, y i kierunkiem, plus dwa identyfikatory stylów na piętro. Jako zwarty JSON z nazwanymi kluczami, najdłuższą proponowaną nazwą rodzaju w każdym miejscu i 16-znakowymi identyfikatorami stylów to 1974 bajty, poniżej 2 KB; jako gołe czwórki liczb byłoby to 385 (moje obliczenie; cała baza w Emerald to 32 bajty).7211 Drugi to suma polubień wraz ze zbiorem gości z danego dnia. Żaden nie przechowuje danych osobowych poza nickiem gracza. Serwer przed zapisaniem waliduje układ tymi samymi sześcioma regułami, więc zmodyfikowany klient nie może zapisać nielegalnego pokoju. Liczniki gry z 7.5 (stemple zadań, przebyte kroki, odwiedzone pokoje, stopień domu) nie są rekordami serwera: synchronizują się przez własny iCloud kolekcjonera w PlayRecord, a serwer nigdy ich nie czyta.

Kryteria akceptacji. Testy serwera: układ z nakładaniem, zablokowanym przejściem lub 17. elementem na piętrze zostaje odrzucony; wiadomość gościa o przesunięciu lub ustawieniu w pokoju gospodarza zostaje odrzucona; dwa polubienia jednego gościa w jednym dniu liczą się raz, a polubienie następnego dnia się liczy; gospodarz, który opróżni pokój, zachowuje sumę. Przejście na dwóch symulatorach: urządzenie A urządza, urządzenie B odwiedza i widzi te same elementy na tych samych komórkach, ze zrzutem z każdego.

7.7 Model i ekran w iOS 26

SwiftData. Dwa modele, ukształtowane jak pozostałe modele aplikacji pod CloudKit: wszędzie wartości domyślne, nic unikalnego i uid ustawiany na UUID w init, taki, jaki mają Profile, PriceHistory i CardCopy.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 }
}

Style ścian i podłóg żyją jako ciągi znaków w Profile, obok lookData.77 Żadnego #Unique i żadnej wymaganej relacji, bo CloudKit nie obsługuje żadnego z nich.22 Wyłączność komórek, limit i chód są wymuszane w kodzie, jedną funkcją. RoomLayout.repair(_:) uruchamia się przy każdym odczycie. Sortuje zsynchronizowane elementy piętra według uid, rosnąco, i odbudowuje piętro z jego stałej architektury (mapy liter, schodów i filarów), dodając każdy element w tej kolejności tylko wtedy, gdy pełne sprawdzenie ustawienia z 7.1 przyjmuje go wobec elementów już przyjętych: reguły komórek (więc bez nakładania), limit 16 i regułę przejścia. Element odrzucony przez sprawdzenie wraca do zasobnika. Każde urządzenie sortuje te same rekordy w ten sam sposób, więc każde odbudowuje ten sam pokój, a gdy dwa elementy kolidują, wygrywa mniejszy uid, czyli reguła, której PriceBook już używa do wyboru jednej z historii cen z dwóch urządzeń.52 Kolejność wyznacza uid, a nie czas ustawienia, bo czas pochodzi z zegara każdego telefonu. Nakładanie się nie jest jedynym konfliktem, jaki mogą stworzyć dwa telefony. Łóżko na (9,3) ustawione na jednym telefonie i szafka nocna na (6,4) na drugim przechodzą każde pełne sprawdzenie na własnym urządzeniu, a razem odcinają obie komórki przed gablotą; odbudowa zachowuje element z mniejszym uid, a drugi zwraca.2066 Ponieważ zabranie elementu nigdy nie przecina przejścia, piętro, które już jest legalne, przechodzi odbudowę bez zmian w dowolnej kolejności (moje rozumowanie; kryteria akceptacji to utrwalają). Elementy startowe z 7.2 to jedyne miejsce, w którym dwa urządzenia tworzą rekordy bez działania gracza, więc każdy dostaje stały uid według piętra i miejsca, od starter.room.1 do starter.room-up.8, zamiast losowego: dwa urządzenia uruchamiane na zimno tworzą te same szesnaście uid, a nie szesnaście par, które odbudowa rozdzieliłaby między piętro i zasobnik. Przed odbudową repair scala rekordy o tym samym uid w jeden, tak jak ModelContext.profile() już scala duplikaty profili pozostawione przez synchronizację w ten z najmniejszym uid.77 Gdy dwie kopie się różnią, bo jedno urządzenie przesunęło swój element startowy, zanim drugie po raz pierwszy się uruchomiło, scalanie zachowuje kopię, która jest poza swoją komórką startową, a spośród dwóch przesuniętych tę w mniejszym rzędzie, potem w mniejszej kolumnie (moja propozycja). Jeśli odłożenie elementu usuwa jego rekord, element startowy odłożony na jednym telefonie wraca, gdy drugi telefon uruchomi się na zimno; ten brief nie rozstrzyga tego przypadku.

Ustawianie. Tryb Urządzania nakłada zasobnik SwiftUI na RealityView pokoju. Pozycja w zasobniku jest draggable z rodzajem jako ładunkiem Transferable; widok pokoju jest celem upuszczenia.53 W iOS 26 dropDestination(for:action:isTargeted:) przekazuje akcji punkt upuszczenia we współrzędnych widoku, a punkt przekłada się na komórkę przez znaną, całopikselową skalę kamery: cell = floor((point - mapOrigin) / tileSizeInPoints).54 Ponieważ strona Apple wymienia tę formę jako przestarzałą w iOS 27.2, brief buduje też formę z DropSession i czyta położenie z sesji, jeśli je zawiera; tej strony nie przeczytano.54 Ustawiony element zaznacza się przez SpatialTapGesture i przesuwa przez DragGesture, z przyciąganiem komórka po komórce, z obrysem zabarwionym komórka po komórce, tak jak Stardew barwi swoje kafelki.565516

VoiceOver. W trybie Urządzania każdy ustawiony element to jeden element dostępności, na przykład Sofa, trzy na dwa, kolumna 9, rząd 8, z nazwanymi akcjami Przesuń w lewo, Przesuń w prawo, Przesuń w górę, Przesuń w dół, Obróć (tylko krzesła) i Odłóż.5758 Pokrętło o nazwie „Meble” wymienia elementy pokoju.60 Akcja Ustaw pozycji z zasobnika stawia element na legalnej komórce najbliższej przybyciu i ustawia na nim fokus. Style ścian i podłóg to elementy regulowane: przesunięcie w górę i w dół je przełącza.59 Każde odrzucenie jest wypowiadane jako komunikat, na przykład Nie można przesunąć: sofa odcięłaby półkę.61 Reguły z 7.1 to jedna funkcja, więc głos i dotyk nigdy nie mogą się rozjechać.

Kryteria akceptacji. Test jednostkowy, że repair rozstrzyga nakładanie się z dwóch urządzeń tak samo w dowolnej kolejności. Regresja scalania z dwóch urządzeń, uruchamiana z dwoma rekordami w obu kolejnościach wejścia: w room w wersji, jaką dziś tworzy kuźnia, urządzenie A ustawia łóżko na (9,3), a urządzenie B szafkę nocną na (6,4); każde ustawienie samo przechodzi pełne sprawdzenie; po synchronizacji obu repair zwraca ten sam pokój dla obu kolejności, zachowuje element z mniejszym uid, odkłada drugi do zasobnika z komunikatem wskazującym gablotę, a chód od przybycia nadal dociera do obu komórek przed gablotą; po zamianie obu uid zachowany zostaje drugi element.66 Test, że repair zostawia bez zmian legalne piętro z 16 elementami, przy rekordach przetasowanych w kilku kolejnościach. Test, że 17 zsynchronizowanych elementów na jednym piętrze, legalnych razem z wyjątkiem limitu, wraca jako 16, z największym uid w zasobniku. Test, że dwa urządzenia uruchamiane na zimno, z których każde tworzy elementy startowe, synchronizują się do jednego rekordu na komórkę startową, 8 na piętro, z pustym zasobnikiem, w dowolnej kolejności synchronizacji; oraz że element startowy przesunięty na jednym urządzeniu, zanim uruchomi się drugie, zostaje tam, gdzie go przesunięto. Test UI, który przeciąga pozycję z zasobnika na komórkę i znajduje na tej komórce PlacedPiece. Testy jednostkowe procedur obsługi akcji VoiceOver, wywoływanych bezpośrednio na modelu Urządzania, a nie przez VoiceOver: Ustaw stawia krzesło na legalnej komórce najbliższej przybyciu; Przesuń w lewo, Przesuń w prawo, Przesuń w górę i Przesuń w dół przesuwają je o jedną komórkę albo odmawiają z podaniem powodu; Obróć zmienia jego kierunek; Odłóż zwraca je do zasobnika; a każde odrzucenie daje tekst komunikatu, który wyśle ekran. Na symulatorze iOS 27 test UI, który włącza VoiceOver przez XCUIVoiceOverService, przenosi fokus na ustawiony element i sprawdza jego wypowiadaną etykietę, taką jak Sofa, trzy na dwa, kolumna 9, rząd 8.63 Audyt trybu Urządzania przez performAccessibilityAudit, który nie zgłasza problemów.62 Ręczne sprawdzenie na urządzeniu z włączonym VoiceOver, zapisane z datą i numerem kompilacji, ponieważ żadne wywołanie XCUIAutomation nie wykonuje akcji własnej, nie obraca pokrętła i nie odczytuje komunikatu: ustawić krzesło z zasobnika, przesunąć je w czterech kierunkach akcjami, obrócić, odłożyć, przeskakiwać między elementami pokrętłem Meble i usłyszeć komunikat przy każdym odrzuconym ruchu. Przed tym wszystkim jedna próba rozpoznawcza: upuścić ładunek na pokój w symulatorze przy rzeczywistej skali kamery i zapisać obliczoną komórkę wobec komórki pod palcem, ponieważ to przełożenie nie zostało sprawdzone.

7.8 Porządki

  • WORLD.md dostaje reguły pokoju, z liczbami z tego briefu, tak by dokument projektowy mówił to, co opublikował artykuł o świecie.6710
  • Docstring i tabela interiors.py zostają uzgodnione w jedną albo w drugą stronę: albo docstring mówi, że małe elementy są wyjątkiem, albo małe elementy zostają przerysowane na dwa kafelki. Brief je zachowuje.9

Poza tym briefem

  • Układanie w stos poza własnymi miejscami półki: żadnego elementu na stole, żadnych powierzchni w stylu lalki na biurku. Pomysł powierzchni to następny krok, gdy limit i chód zostaną sprawdzone.
  • Elementy, które działają po nadepnięciu: żadnych mat dźwiękowych, sprężyn ani zjeżdżalni.
  • Ustawianie co pół komórki. Siatka zostaje przy pełnych komórkach 16-pikselowych.
  • Urządzanie sali wystawowej. Jej postumenty pozostają przy cotygodniowej wystawie.
  • Konkurs urządzania. Cotygodniowa sala jest konkursem, ocenianym według własnych zasad.
  • Rzuty: kształt domu się nie zmienia.
  • Odwiedziny u obcych poza wspólnym placem oraz jakikolwiek ranking pokoi poza własną sumą gospodarza.

Nigdy, w urządzaniu

  1. Żadnego słownictwa z marki w żadnym z tych elementów: ani baza, ani komputer do dekorowania, ani Academy, ani mieszanie rekordów, ani nazwa żadnej dekoracji. Tylko słowa Kiradex. Gry są wymieniane w tym artykule jako fakty o wydanych dziełach, a nie jako funkcje.
  2. Żaden element nie jest rysowany na wzór dekoracji z gry: żadnych lalek ani poduszek ze stworzeniami, niczego w kształcie kuli, żadnych plakatów ze stworzeniami, żadnej maty nazwanej od ruchu. Elementy kuźni to meble domowe i takie pozostają.
  3. Żadnego stworzenia w żadnym pokoju. Rośliny są roślinami.
  4. Żadnych mebli kupowanych, losowych ani limitowanych (7.5).
  5. Nic w pokoju nie jest celowane, rzucane, łapane, przywoływane, wypuszczane do walki ani dosiadane.
  6. Żadnego kodu ani danych z dekompilacji w aplikacji ani w kuźni. Zdekompilowany kod służy do nauki i pomiarów; powyższe reguły są przeformułowane we własnych kategoriach Kiradex.

Kryteria akceptacji. Grep katalogu ciągów, nazw PIECES kuźni i tabel serwera listą słów zbudowaną ze słownictwa z marki z punktu 1, plus „decoration”, „doll”, „Happy Home” i „Academy”, nic nie zwraca.

Najważniejsze wnioski

Dla rysujących grafikę

  • Rysować meble w szerokości klatki lub komórki postaci. Klatka gracza w Emerald ma jedną 16-pikselową komórkę szerokości, a dekoracje zajmują średnio 2,43 komórki; kolekcjoner Kiradex stoi w komórce szerokiej na dwa kafelki, a elementy zajmują średnio 3,04.2729
  • Tworzyć katalog złożony głównie z małych elementów z kilkoma dużymi kotwicami: 71 ze 120 dekoracji Emerald zajmuje jedną komórkę, a biurka i maty 3 na 3 to kotwice, na których stoją te małe.224
  • Rysować tapety i podłogi z reguł i ramp, tak by styl był rysownikiem i paletą, a nie nowym obrazem: dwa lica ścian w trzech rampach i trzy podłogi w dwóch rampach dają Kiradex po sześć.64

Dla budujących silnik

  • Przechowywać ustawiony element jako rodzaj, komórkę i kierunek. Emerald przechowuje jeden w dwóch bajtach, bazę w 32.1112
  • Sprawdzać ustawienie na poziomie komórek, a potem iść. Sprawdzenie komórek w Emerald nigdy nie pyta, czy od drzwi wciąż da się gdziekolwiek dojść; na parterze Kiradex 713 z 229 891 legalnych par dodatkowych elementów odcina schody, gospodarza lub ekspozycję, nie zakrywając ich.420
  • Przy synchronizacji z CloudKit SwiftData nie może wymusić ograniczenia unikalności, więc jeden element na komórkę to czysta funkcja naprawcza, która na każdym urządzeniu wybiera tego samego zwycięzcę. Powinna odbudowywać pokój przez całe sprawdzenie ustawienia, łącznie z chodem, w stałej kolejności: dwie edycje, z których każda przechodzi na własnym telefonie, mogą razem odciąć ekspozycję.225266
  • Dać VoiceOver czasowniki, a nie siatkę do przeglądania gestami: nazwane akcje ruchu, pokrętło elementów, komunikat przy każdym odrzuceniu.586061

Dla projektujących pętlę

  • Ograniczać to, co ustawione, a nie to, co posiadane: Emerald ustawia 16 i przechowuje 150. Limit jest kompozycją.2
  • Oceniać w stały dzień z rozpisanym każdym źródłem, podnosić poprzeczkę tylko wtedy, gdy rośnie dom, i nigdy nie karać za opuszczony tydzień: strona wiki o domu, która nie wymienia żadnej gry, mówi, że dom zaniedbany na co najmniej tydzień zapełnia się karaluchami, a tabela HHA w New Horizons odejmuje 2500 za karalucha.56
  • Rozwijać katalog przez grę. Emerald nigdy nie sprzedaje za pieniądze 24 ze 120 dekoracji, a dwie kolejne sprzedaje tylko za popiół zbierany chodzeniem, Stardew po pierwszej rozbudowie sprzedaje katalog za 200 000g, który potem sprzedaje wymienione w nim meble za 0g, a rzadkie i losowe meble z Habbo są kontrprzykładem dla aplikacji dla dzieci.14151617
  • Goście patrzą, nie dotykają i zostawiają jedno polubienie dziennie na sumie, która nigdy nie maleje.51819

Często zadawane pytania

Ile przedmiotów gracz powinien móc ustawić w pokoju?

Tyle, by dało się komponować, i na tyle mało, by trzeba było wybierać. Pokémon Emerald ogranicza bazę do 16 ustawionych dekoracji, a sypialnię do 12, czyli mniej więcej ćwierć z 60,2 komórek do chodzenia w przeciętnej bazie. Animal Crossing: New Horizons pozwala na 150 na pokój, wliczając przedmioty ścienne i sufitowe, według Nookipedii, a Final Fantasy XIV od łatki 7.5 pozwala na od 150 do 600 we wnętrzu, zależnie od wielkości domu. Dla pokoju 2D bez warstwy ścian i sufitu moim progiem jest limit poniżej jednego przedmiotu na trzy komórki podłogi, a 0,27 z Emerald wypada tuż poniżej tego progu; proponowane dla Kiradex 16 to 0,13 na komórkę podłogi.2579

Jak działa system dekoracji w Pokémon Emerald?

To dane. 120 dekoracji ma każda kategorię, kształt od 1 do 9 komórek, cenę i jedno z pięciu uprawnień (lita podłoga, podłoga przechodnia, z tyłu, ściana lub sprite). CanPlaceDecoration sprawdza każdą zajętą komórkę: zwykła podłoga, brak obiektu, a na komórce, na której stał gracz, brak kafelka o niezwykłym typie warstwy; komórki ściany dla plakatów; komórka nośna dla lalek i poduszek, mała lub duża dla większości z nich i duża dla lalki 1 na 2. 18 dekoracji zapewnia małe komórki nośne: siedem biurek, trzy cegły, opona i siedem mat. Ustawione dekoracje są przechowywane jako bajt identyfikatora i bajt pozycji każda.2411

Jak Happy Home Academy ocenia pokój?

Według tabel Nookipedii, które dla New Horizons nie podają źródła: ocena pocztą w większość niedzielnych poranków, oceny B, A i S, próg S rosnący z 15 000 do 90 000 w miarę rozbudowy domu, 1000 punktów przy każdym z progów 6, 10, 15 i 20 przedmiotów w pokoju, premie za przedmiot za serie, komplety, kategorie, dominujący kolor i feng shui oraz potrącenia za karaluchy, śmieci i przedmioty zwrócone do ściany. Punkty za przedmiot są na wiki zalążkiem.6

Czy SwiftData może wymusić jeden przedmiot na komórkę siatki przy synchronizacji z CloudKit?

Nie przez #Unique. Przewodnik Apple po synchronizacji SwiftData wymienia ograniczenia unikalności wśród funkcji, „that CloudKit doesn’t support natively” (których CloudKit natywnie nie obsługuje), a CloudKit wymaga, by każda relacja była opcjonalna. Należy dać każdej właściwości wartość domyślną, nie robić niczego unikalnym i rozstrzygać elementy z dwóch urządzeń na jednej komórce czystą funkcją, która uruchamia się przy każdym odczycie i na każdym urządzeniu wybiera tego samego zwycięzcę. Ta funkcja powinna odbudowywać pokój w stałej kolejności przez pełne sprawdzenie ustawienia, a nie tylko przez test nakładania, bo dwie edycje, z których każda jest legalna, mogą razem złamać regułę.225166

Jak udostępnić siatkę mebli z przeciąganiem i upuszczaniem dla VoiceOver?

Każdy ustawiony element powinien być jednym elementem dostępności z rozmiarem i komórką w etykiecie, mieć nazwane akcje przesunięcia o jedną komórkę w każdym kierunku, obrotu i odłożenia; do tego pokrętło wymieniające elementy pokoju i komunikat przy każdym odrzuconym ruchu, wraz z powodem. Każdą z tych części obsługują accessibilityAction(named:_:), accessibilityRotor(_:entries:) i AccessibilityNotification.Announcement od Apple, a performAccessibilityAudit sprawdza ekran w teście UI. Audyt nie naciska nazwanych akcji, a w Xcode 27.0 nie robi tego żadne wywołanie XCUIAutomation, więc procedury obsługi akcji należy testować bezpośrednio, a akcje, pokrętło i komunikaty sprawdzać ręcznie z włączonym VoiceOver.5860616263

Czy gra dla dzieci powinna sprzedawać meble?

Moim zdaniem nie, w przypadku aplikacji z kategorią 9+: pętla dekorowania oparta na kupowaniu, losowości lub rzadkości ściąga na siebie pytania o loot boksy i presję, których gra nie potrzebuje. Emerald nigdy nie sprzedaje za pieniądze 24 ze 120 dekoracji (to nagrody, wymiany za punkty bitewne i prezenty), a dwie kolejne sprzedaje tylko za popiół zbierany chodzeniem, a po pierwszej rozbudowie domu Stardew sprzedaje Furniture Catalogue za 200 000g, który potem sprzedaje wymienione w nim meble za 0g, choć niektóre elementy nadal pochodzą wyłącznie z Muzeum, festiwali i innych źródeł. Oparta na zakupach ekonomia Habbo, z rzadkimi meblami i losowymi meblami do rozbicia, pokazuje drugi biegun.14151617

Dlaczego goście w tych grach mają dostęp tylko do odczytu?

W moim odczytaniu dlatego, że pokój jest wyrazem gospodarza. Goście w Animal Crossing nie mogą „modify the interior in any way” (w żaden sposób zmieniać wnętrza), goście w Habbo nie mogą upuszczać ani przesuwać mebli bez uprawnień właściciela, a właściciele w Club Penguin mogą urządzać własne igloo, „but not other player’s igloos” (ale nie igloo innych graczy). W zamian goście dostają znak, który się liczy: w Club Penguin jedno polubienie na projekt dziennie, dodawane do Grand Total, który nigdy nie maleje.518819

Powiązane na tej stronie: Budowle w pixel art: domy, sale i wnętrza na iPhonie zbudował wnętrza, które urządza ten brief, a jego sekcja o wnętrzach opisuje pokoje 14 na 11, które zastąpiła kompilacja 26; Światy w pixel art na iPhonie to miejsce, gdzie po raz pierwszy opublikowano limit szesnastu, odwiedziny tylko do odczytu, codzienne polubienie i niedzielny raport; Ludzie w pixel art: postacie i kreator na iPhonie omawia kolekcjonera, którego szerokość wyznacza rytm mebli; Układ miasteczek w pixel art: od Pallet do Pelican Town, zmierzony mierzy miasteczko, w którym stoją domy; Ruch w pixel art: chód, kamera i drzwi na iPhonie omawia chód i drzwi, którymi wchodzi gość; a Trasy w pixel art: połączenia map i dzielnice na iPhonie omawia tereny poza miasteczkiem.

Źródła


  1. pret, pokeemerald/include/constants/global.h (SECRET_BASES_COUNT 20, DECOR_MAX_SECRET_BASE 16, DECOR_MAX_PLAYERS_HOUSE 12), commit 731ad5b (1 października 2026), odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/include/constants/global.h. ↩↩↩↩↩

  2. Pomiar autora, 5 października 2026: measure_emerald_decor.py w folderze dowodów autora do tego artykułu, wynik zapisany jako measure_emerald_decor.out, uruchomiony na płytkim klonie pokeemerald od pret w commicie 731ad5b. Odczytuje limity z include/constants/global.h; 120 dekoracji (bez DECOR_NONE) z kategorią, kształtem, uprawnieniem i ceną z src/data/decoration/header.h; tablice ekwipunku według kategorii z include/global.h; bajt zachowania każdego metatile’a dekoracji z data/tilesets/secondary/secret_base/metatile_attributes.bin; oraz każdy z 24 układów baz i sypialnię z data/layouts/layouts.json i jego map.bin, licząc komórki do chodzenia z bitów kolizji. Komórki na dekorację z nazw kształtów; limit wobec średniej liczby komórek do chodzenia 16 / 60,2 = 0,27. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. pret, pokeemerald/src/data/decoration/header.h (gDecorations[]: nazwa, uprawnienie, kształt, kategoria, cena i kafelki każdej dekoracji; wpis 0 DECOR_NONE), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/src/data/decoration/header.h. ↩↩↩↩

  4. pret, pokeemerald/src/decoration.c (CanPlaceDecoration, DecorationItemsMenuAction_AttemptPlace, isPlayerRoom, gText_CantPlaceInRoom; sprawdzenia komórek nośnych dla dekoracji typu sprite), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/src/decoration.c. W przypadku sprite’ów dekoracja 1 na 2 wymaga MetatileBehavior_HoldsLargeDecoration, a każda inna przyjmuje małą lub dużą komórkę nośną; IsntInitialPosition odrzuca komórkę startową gracza tylko wtedy, gdy kafelek dekoracji na niej ma typ warstwy inny niż METATILE_LAYER_TYPE_NORMAL. To, że nic w funkcji nie sprawdza przejścia, jest odczytaniem autora. ↩↩↩↩↩↩↩↩↩↩

  5. Nookipedia, „Player house” (limity na pokój: 24 w Wild World, 64 w City Folk, 48 w New Leaf, 150 w New Horizons „including wall and ceiling-mounted furniture”; tabela rozbudowy New Horizons z rozmiarami pokoi; „only the main room can be expanded in size”; ściana akcentowa od 2.0; goście nie mogą „modify the interior in any way”; gracz, który zaniedba dom „for at least one week”, zastaje go zarobaczonym), pobrane i zapisane 5 października 2026 jako nook-player-house.html i .txt w folderze dowodów do pokoi, https://nookipedia.com/wiki/Player_house. 4,2 przedmiotu na kafelek to arytmetyka autora (150 / 36). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  6. Nookipedia, „Happy Home Academy” (niedzielna ocena; oceny B, A i S dla każdej rozbudowy; premie i potrącenia punktowe w New Horizons; „This section is a stub” dla punktów za przedmiot w New Horizons; adnotacja tabeli nagród „Includes data sourced from the Data Spreadsheet for Animal Crossing New Horizons”), pobrane i zapisane 5 października 2026 jako nook-hha.html i .txt, https://nookipedia.com/wiki/Happy_Home_Academy. Tabele premii i potrąceń nie mają na stronie przypisów. ↩↩↩↩↩↩↩↩↩↩↩↩↩

  7. Square Enix, The Lodestone, informacje o łatce 7.5 do Final Fantasy XIV (zaktualizowane 13 maja 2026; limity mebli wewnątrz i na zewnątrz przed zmianą i po niej w sekcji Housing; uwaga o wyświetlaniu 400 mebli; „Furnishings from the FFXIV Furnishing Design Contest have been added”), pobrane i zapisane 5 października 2026 jako ffxiv-patch-7-5.html i .txt, https://eu.finalfantasyxiv.com/lodestone/topics/detail/9beb8a7b5c46944cd80ed92b2b8e972395fbea80/. Przewodnik po mieszkaniach, https://na.finalfantasyxiv.com/lodestone/playguide/contentsguide/housing/, tego samego dnia zwrócił HTTP 404; rozmiary działek nie mają w tym artykule źródła. ↩↩↩↩↩↩↩↩↩↩

  8. Club Penguin Wiki (Fandom), „Furniture” (limit posiadania 99 sztuk dla większości mebli; „igloos have a limit preventing more than 99 units of furniture being placed at once”; właściciele urządzają własne igloo „but not other player’s igloos”; sześć darmowych przedmiotów dla graczy bez członkostwa od 26 lipca 2012), odczytane przez API MediaWiki tej wiki i zapisane 5 października 2026 jako cp-fandom-furniture.html i .txt, https://clubpenguin.fandom.com/wiki/Furniture. Jedno źródło. ↩↩↩↩↩↩

  9. Pomiar autora, 5 października 2026: measure_kiradex_interiors.py w folderze dowodów do pokoi, wynik measure_kiradex_interiors.out, który parsuje scripts/forge/interiors.py z repozytorium Kiradex modułem ast Pythona (plik nigdy nie jest importowany ani uruchamiany): 23 wpisy PIECES z szerokością, wysokością i flagą wolnostojącego; mapy liter ROOM, ROOM_UP i HALL z listami mebli i miejscami; komórki podłogi liczone jako litery o t s r; ruchome elementy z wyłączeniem stairs, stairs_down i pillar. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  10. Blake Crosley, „Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew”, blakecrosley.com, 3 października 2026 (reguły pokoju: „a furnishing cap of sixteen”, odwiedziny tylko do odczytu, polubienie raz dziennie, suma, która nigdy nie maleje, niedzielny raport „with its point sources listed”; w tym samym akapicie „Patron flair stays on the name-plate and the room skin”; patenty wymienione w pozwie dotyczącym Palworld; dopasowanie kamery w pikselach urządzenia na teksel), https://blakecrosley.com/blog/pixel-art-world-on-iphone. ↩↩↩↩↩↩↩↩↩↩

  11. pret, pokeemerald/include/global.h (u8 decorations[DECOR_MAX_SECRET_BASE] i u8 decorationPositions[DECOR_MAX_SECRET_BASE] w rekordzie tajnej bazy; tablice ekwipunku dekoracji według kategorii w zapisie), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/include/global.h. ↩↩↩↩↩↩↩

  12. pret, pokeemerald/src/secret_base.c (pozycje dekoracji odczytywane z x w starszym półbajcie i y w młodszym), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/src/secret_base.c. ↩↩↩

  13. pret, pokeemerald/include/decoration.h (enum DecorationPermission z komentarzem „The nomenclature here describes collision and placement permissions, in that order.”; enum DecorationShape, z DECORSHAPE_3x1 i DECORSHAPE_1x3 oznaczonymi jako nieużywane), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/include/decoration.h. ↩↩↩

  14. Pomiar autora, 5 października 2026: measure_emerald_sources.py w folderze dowodów do pokoi, wynik measure_emerald_sources.out, który przeszukuje pokeemerald 731ad5b pod kątem każdej stałej DECOR_ na listach pokemartdecoration w data/maps/*/scripts.inc, w skrypcie kącika nagród, w tabeli wymian obiektu bitewnego w src/data/battle_frontier/battle_frontier_exchange_corner.h oraz w pierwszym argumencie givedecoration i adddecoration w dowolnym miejscu pod data/: 90 sprzedawanych za pieniądze w pięciu sklepach, 3 z lady nagród, 15 za punkty bitewne, 10 dawanych przez skrypt, 24 nigdy niesprzedawane za pieniądze, 6 w żadnym z tych miejsc. Dwie z tych sześciu to para z warsztatu szklarskiego (przypis 15); pozostałych czterech, trzech legendarnych lalek i jednej innej lalki, nie prześledzono. ↩↩↩↩↩↩↩↩

  15. pret, pokeemerald/data/maps/Route113_GlassWorkshop/scripts.inc (PRETTY_CHAIR_PRICE, 6000, PRETTY_DESK_PRICE, 8000, płacone z VAR_ASH_GATHER_COUNT; Route113_GlassWorkshop_EventScript_NotEnoughAsh i _NotEnoughAshForItem odejmują licznik od ceny i pokazują różnicę jako kroki, które trzeba jeszcze przejść; przeszukanie src, data i include znajduje VAR_ASH_GATHER_COUNT użyte tylko tam i w field_tasks.c, poza jego definicją) oraz pokeemerald/src/field_tasks.c (jedna jednostka popiołu na krok w trawie z popiołem, gdy niesie się worek, do 9999), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/data/maps/Route113_GlassWorkshop/scripts.inc i https://github.com/pret/pokeemerald/blob/master/src/field_tasks.c. ↩↩↩↩↩↩↩

  16. Stardew Valley Wiki, „Furniture”, rewizja 193159 (Robin i wędrowny wóz „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”; wiersz Furniture Catalogue w tabeli katalogów, sprzedawanego w warsztacie stolarskim (Carpenter’s Shop) za 200 000g; „Some furniture can be obtained only by donating items to the Museum”, festiwale, kasyno i inne źródła; zielone i czerwone kwadraty ustawiania), pobrane i zapisane 5 października 2026 jako sdv-furniture.html i .txt, https://stardewvalleywiki.com/Furniture. ↩↩↩↩↩↩↩↩↩↩↩

  17. Sulake, Habbo Help Center, „Furni Definitions” (meble kampanijne wstrzymywane „4-12 months” dla handlarzy, rzadkie meble, które „will never be re-released”, rzadkie meble do rozbicia, LTD „in limited quantities”), treść artykułu zapisana 5 października 2026 w habbo-articles.txt w folderze dowodów do pokoi, https://help.habbo.com/hc/en-us/articles/360011621699-Furni-Definitions. ↩↩↩↩↩↩↩

  18. Sulake, Habbo Help Center, „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”), treść artykułu zapisana 5 października 2026 w habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/360011512940-What-is-Furni. ↩↩↩↩↩↩↩

  19. That Penguin Game, „Your Igloo” (reprodukcja stron pomocy Club Penguin; jej pochodzenia nie zweryfikowano: „You can Like any igloo design once every day!”; polubienia indywidualne i Grand Total Likes; „Likes are permanent, so your Grand Total Likes will never decrease, even if you delete an igloo design!”; ustawienia Everyone i Friends), pobrane i zapisane 5 października 2026 jako tpg-your-igloo.html i .txt, https://thatpenguingame.com/club-penguin-help/game-help/your-igloo/. Jedno źródło. ↩↩↩↩↩↩

  20. Pomiar autora, 5 października 2026: measure_path_rule.py, przechowywany obok szkicu artykułu, wynik measure_path_rule.out i path_rule.json. Parsuje scripts/forge/interiors.py z repozytorium Kiradex przez ast, odbudowuje wyeksportowane litery tak, jak robi to export(), chodzi w czterech kierunkach od przybycia na każdym piętrze po otsrUD (zbiorze liter do chodzenia z check() kuźni) i raportuje schody, gospodarza oraz komórkę frontową każdego zapełnianego miejsca (pierwszą komórkę prosto na południe za półką i pasem ściany). Następnie próbuje w room każdego ustawienia jednego dodatkowego elementu wolnostojącego (10 rysunków: krzesła raz, łóżka raz) na wolnej podłodze z dala od komórek przybycia, schodów i gospodarza (733 ustawienia; 44 odcinają cel, wszystkie przez jego zakrycie) oraz każdej nienakładającej się pary dodatkowych elementów z dala od wszystkich celów (689 pojedynczych ustawień, 229 891 par; 713 odcina cel). ↩↩↩↩↩↩↩↩↩↩

  21. Obliczenie autora, 5 października 2026: score_max.py w figures/ folderu szkicu, wynik score_max.out i score_max.json: tabela punktacji z briefu zsumowana dla dwóch pięter z 16 elementami, każdy wiersz na swoim limicie (3200 + 3000 + 6400 + 9600 + 500 + 600 + 300 = 23 600), oraz jedno piętro z 8 elementami bez wierszy zestawu, rampy i miejsc (800 + 500 = 1300). Ten sam skrypt ocenia własnymi wierszami tabeli trzy domy wzorcowe, które wyznaczają proponowane progi stopni domu: oba piętra z 10 elementami i pełną półką, 4500; oba piętra z 16 elementami i pełną półką, gablotą i tablicą, 7600; ten dom z garniturem z 8 elementów i 70% w jednej rampie na każdym piętrze, 14 000; oraz dom startowy, oba piętra z 8, 2600. ↩↩↩↩

  22. 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”), JSON dokumentacji zapisany 5 października 2026 jako apple-swiftdata-cloudkit-sync.html i .txt, https://developer.apple.com/documentation/swiftdata/syncing-model-data-across-a-persons-devices. ↩↩↩↩↩↩

  23. pret, pokeemerald/src/new_game.c (NewGameInitData wywołuje ClearDecorationInventories()) i pokeemerald/src/decoration_inventory.c (ClearDecorationInventory ustawia każdy slot każdej kategorii na DECOR_NONE), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/src/new_game.c. ↩

  24. Wykresy autora, 5 października 2026: make_figures.py w figures/ folderu szkicu, który czyta src/data/decoration/header.h z pokeemerald 731ad5b, limity w postaci cytowanej w przypisach 1, 5, 8 i 7, path_rule.json i score_max.json, sprawdza każdą sumę z powyższymi pomiarami i zapisuje emerald-decor-sizes.svg, caps.svg, room-path-rule.svg i score-sources.svg. Klasy obrysów (1 komórka, 2 komórki, od 4 do 6, 8 lub 9) grupują kształty według liczby zajmowanych komórek. Paleta sprawdzona walidatorem dataviz; bez grafiki z gier. ↩↩↩↩↩

  25. pret, pokeemerald/include/constants/metatile_behaviors.h (zachowania MB_SECRET_BASE_*, MB_SLIDE_SOUTH, MB_HOLDS_SMALL_DECORATION, MB_HOLDS_LARGE_DECORATION), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/include/constants/metatile_behaviors.h. ↩

  26. pret, pokeemerald/data/layouts/layouts.json (24 układy LAYOUT_SECRET_BASE_* i drugie piętra obu domów gracza, z szerokościami i wysokościami) oraz map.bin każdego układu, commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/data/layouts/layouts.json. Zakresy szerokości, wysokości i powierzchni to dane autora z wyniku pomiaru. ↩

  27. Pomiar autora, 5 października 2026: measure_character_cell.py w folderze dowodów do pokoi, wynik measure_character_cell.out, odczytujący nagłówki PNG graphics/object_events/pics/people/brendan/walking.png (144 na 32) i decorating.png (16 na 32) z pokeemerald oraz komórkę (32 na 40), figureTop (7) i underFeet (2) w Kiradex/Resources/World/characters.json z repozytorium Kiradex. Skrypt mierzy komórkę i wysokość figury (31 pikseli), a nie szerokość narysowanej figury. ↩↩↩↩↩

  28. pret, pokeemerald/src/data/items.h (ITEM_SOOT_SACK, .fieldUseFunc = ItemUseOutOfBattle_CannotUse) i pokeemerald/src/data/text/item_descriptions.h (sSootSackDesc, stały trzywierszowy opis), commit 731ad5b, odczyt 5 października 2026, https://github.com/pret/pokeemerald/blob/master/src/data/items.h. ↩↩

  29. Nookipedia, „Furniture” (rozmiary „ranging from 1.0×0.5” do 3 na 3; przesuwanie o pół kafelka; typy mebli w New Horizons i dekoracje sufitowe od 2.0; 2076 mebli według wersji 3.0.2, 1074 dodane w aktualizacjach; seria jako „around 10 furniture items, as well as a matching wallpaper and flooring”), pobrane i zapisane 5 października 2026 jako nook-furniture.html i .txt, https://nookipedia.com/wiki/Furniture. ↩↩↩↩

  30. Nookipedia, „Wallpaper” (262 tapety w New Horizons według wersji 1.9.0), pobrane i zapisane 5 października 2026 jako nook-wallpaper.html i .txt, https://nookipedia.com/wiki/Wallpaper. ↩

  31. Nookipedia, „Flooring” (215 w New Horizons), pobrane i zapisane 5 października 2026 jako nook-flooring.html i .txt, https://nookipedia.com/wiki/Flooring. ↩

  32. Nookipedia, „Luna” (sekcja New Leaf: „any changes will not be saved and items cannot be brought back to the real world”; sekcja New Horizons: jej usługi „work the same as they do in New Leaf” oraz bon wymienny na 5000 dzwonków (Dream Bell Exchange Ticket) za każde wgranie), pobrane i zapisane 5 października 2026 jako nook-luna.html i .txt, https://nookipedia.com/wiki/Luna. ↩↩

  33. Sulake, Habbo Help Center, „Rooms” („You can own 200 rooms.”; „Wallpaper and flooring are stuck down”), pobrane i zapisane 5 października 2026 jako habbo-rooms.html i .txt, https://help.habbo.com/hc/en-us/articles/360011512640-Rooms. ↩↩↩↩

  34. Sulake, Habbo Help Center, „What is Builders Club?” (limit mebli „increased by 250” za każdy miesiąc członkostwa; zapisywanie własnych układów pokoju w edytorze rzutu) oraz „What can I buy in Habbo?” („Furni limits never go down.”), treści artykułów zapisane 5 października 2026 w habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/360011621659-What-is-Builders-Club i https://help.habbo.com/hc/en-us/articles/360011620599-What-can-I-buy-in-Habbo. ↩

  35. Sulake, Habbo Help Center, „Player to player trading in Habbo” (wymagana przepustka handlowa; „There is no guide to what items of furni are worth”), treść artykułu zapisana 5 października 2026 w habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/4408726781842-Player-to-player-trading-in-Habbo. ↩↩

  36. Sulake, Habbo Help Center, „Guidelines on user created games in Habbo” („Placing more than three chance elements will disable all randomiser functions in the room.”), treść artykułu zapisana 5 października 2026 w habbo-articles.txt, https://help.habbo.com/hc/en-us/articles/360011513060-Guidelines-on-user-created-games-in-Habbo. ↩

  37. Sulake, API wyszukiwania Habbo Help Center, zestawy wyników dla „furni”, „stack” i „floor plan”, zapisane 5 października 2026 jako habbo-search-furni, habbo-search-stack i habbo-search-floorplan (.html i .txt) w folderze dowodów do pokoi; żaden nie podaje rozmiaru siatki, wysokości układania ani limitu mebli na pokój. ↩

  38. billsonnn, nitro-react/src/components/floorplan-editor/common/Constants.ts (MAX_NUM_TILE_PER_AXIS = 64, HEIGHT_SCHEME = 'x0123456789abcdefghijklmnopq', 27 stopni wysokości po pustym x), otwartoźródłowy klient Habbo firmy trzeciej, w postaci cytowanej w artykule o budowlach 3 października 2026, https://github.com/billsonnn/nitro-react/blob/main/src/components/floorplan-editor/common/Constants.ts. Zakres narzędzia wysokości stosu (od 0 do 40 w krokach co 0,01) pochodzi z moich wcześniejszych notatek, odczytany z tego samego klienta i nieodczytany ponownie 5 października 2026. ↩

  39. Blake Crosley, „Pixel-Art Structures: Houses, Halls and Interiors on iPhone”, blakecrosley.com, 3 października 2026 (wnętrza „each 14 by 11, with a two-row wall band”; kompilacje 22, 23 i, w wieczornym dopisku, 35; „Rooms have no wallpaper or floor choice and no placeable furniture; the house is dressed from the collection and nothing else”; warpy room:npc-…; siatka obiektów; dom na farmie w Stardew, „10×7” w środku, przypis 54; stałe Nitro, przypis 62), https://blakecrosley.com/blog/pixel-art-structures-on-iphone. ↩↩↩↩↩↩↩↩

  40. Pomiar autora, 5 października 2026: measure_sdv_catalogue.py w folderze dowodów do pokoi, wynik measure_sdv_catalogue.out: wiersze mebli liczone w każdej sekcji według linku z nazwą w każdym wierszu na zapisanej stronie Furniture (rew. 193159), z pominięciem sekcji plakatów filmowych, której wiersze używają innego znacznikowania, oraz sekcji References, History i Exploits; tapety i podłogi liczone jako odrębne ikony na zapisanych stronach Wallpaper (rew. 193801) i Flooring (rew. 190285); wiersze ze źródłem Furniture Catalogue liczone według jego linku. Zliczenia wierszy i ikon wiki, a nie plików danych gry. ↩↩↩↩

  41. Stardew Valley Wiki, „Wallpaper”, rewizja 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”), pobrane i zapisane 5 października 2026 jako sdv-wallpaper.html i .txt, https://stardewvalleywiki.com/Wallpaper. ↩↩↩↩

  42. Stardew Valley Wiki, „Flooring”, rewizja 190285, pobrane i zapisane 5 października 2026 jako sdv-flooring.html i .txt, https://stardewvalleywiki.com/Flooring. ↩

  43. Club Penguin Wiki (Fandom), „Igloo” (historia: 1 listopada 2005, igloo dla graczy bez członkostwa, którzy „were unable to decorate them with furniture”; 26 lipca 2012, nowe igloo i „a set of six items available without membership”), odczytane przez API MediaWiki i zapisane 5 października 2026 jako cp-fandom-igloo.html i .txt, https://clubpenguin.fandom.com/wiki/Igloo. Zarchiwizowane wpisy oficjalnego bloga, które cytuje, zwróciły z Wayback Machine dwukrotnie HTTP 429 5 października 2026. Jedno źródło. ↩↩

  44. Club Penguin Wiki (Fandom), „Igloo Contests” (pierwszy konkurs w 9. numerze, 15 grudnia 2005, jeden zwycięzca z 5000 monet; zwycięzcy „After one to four weeks”; postacie jako jurorzy od konkursu halloweenowego w 2008; przycisk zgłoszenia od 2009; ostatni konkurs w grudniu 2012; dziesięciu zwycięzców po 25 000 monet i dwudziestu wyróżnionych po 15 000 w Ye Olde Igloo Contest z 2008), odczytane przez API MediaWiki i zapisane 5 października 2026 jako cp-fandom-contests.html i .txt, https://clubpenguin.fandom.com/wiki/Igloo_Contests. Jedno źródło. ↩

  45. Tristan Donovan, „The Replay Interviews: Will Wright”, Game Developer, 23 maja 2011, pobrane i zapisane 5 października 2026 jako gd-replay-wright.html i .txt, https://www.gamedeveloper.com/business/the-replay-interviews-will-wright. Nie znaleziono żadnego nagranego wystąpienia Wrighta z 1999 lub 2000 roku o trybie budowania. ↩↩

  46. The Sims Wiki (Fandom), „Buy mode” („purchase items from an object catalog and place them on the current lot”; sortowanie według funkcji w The Sims i The Sims 2; zdanie o zielonym i czerwonym obrysie, przypisane na stronie do The Sims 2 i The Sims 3), odczytane przez API MediaWiki i zapisane 5 października 2026 jako sims-fandom-buymode.html i .txt, https://sims.fandom.com/wiki/Buy_mode. Jedno źródło. ↩↩↩

  47. The Sims Wiki (Fandom), „Environment” (potrzeba Room i Environment, która „analyzes the design and content of the room that the Sim is currently standing in”), odczytane przez API MediaWiki i zapisane 5 października 2026 jako sims-fandom-environment.html i .txt, https://sims.fandom.com/wiki/Environment. Jedno źródło. ↩

  48. Ekstrakcja autora, 5 października 2026: measure_apple_docs.py w folderze dowodów do pokoi, wynik measure_apple_docs.out: tytuł, deklaracja, streszczenie i platformy z każdej zapisanej strony JSON dokumentacji Apple. Pola przestarzałości cytowane dla dropDestination(for:action:isTargeted:) odczytano z tego samego zapisanego JSON. ↩

  49. Apple Developer Documentation, Model() (makro SwiftData; „Converts a Swift class into a stored model that’s managed by SwiftData”; iOS 17.0), JSON zapisany 5 października 2026 jako apple-swiftdata-model.html i .txt, https://developer.apple.com/documentation/swiftdata/model(). ↩

  50. Apple Developer Documentation, Unique(_:) (makro SwiftData; „Specifies the key-paths that SwiftData uses to enforce the uniqueness of model instances”; iOS 18.0), JSON zapisany 5 października 2026 jako apple-swiftdata-unique.html i .txt, https://developer.apple.com/documentation/swiftdata/unique(_:). ↩

  51. Repozytorium Kiradex, Kiradex/Models/CardCopy.swift (komentarz dokumentacyjny: „every property has a default and nothing is unique, for CloudKit”), odczyt 5 października 2026. ↩↩↩

  52. Repozytorium Kiradex, Kiradex/Models/PriceHistory.swift (komentarz dokumentacyjny: „Shaped for CloudKit like CollectionEntry: defaults everywhere, nothing unique”; PriceBook scala historie z dwóch urządzeń „into the one with the smallest uid”), odczyt 5 października 2026. ↩↩↩↩

  53. Apple Developer Documentation, draggable(_:) (SwiftUI; „Activates this view as the source of a drag and drop operation”; ładunek Transferable; iOS 16.0), JSON zapisany 5 października 2026 jako apple-swiftui-draggable.html i .txt, https://developer.apple.com/documentation/swiftui/view/draggable(_:). ↩↩

  54. Apple Developer Documentation, dropDestination(for:action:isTargeted:) (SwiftUI; akcja typu ([T], CGPoint) -> Bool, której drugi parametr to „the drop location in this view’s coordinate space”; iOS 16.0; wpis platform dla iOS podaje deprecatedAt 27.2 z komunikatem „Use dropDestination(for:isEnabled:action:) with an action that takes a DropSession parameter instead.”; odwołanie do DropSession, „A description of a drop that is in progress”), JSON zapisany 5 października 2026 jako apple-swiftui-dropdestination.html i .txt, https://developer.apple.com/documentation/swiftui/view/dropdestination(for:action:istargeted:). ↩↩↩↩↩

  55. Apple Developer Documentation, DragGesture (SwiftUI; „A dragging motion that invokes an action as the drag-event sequence changes”; iOS 13.0), JSON zapisany 5 października 2026 jako apple-swiftui-draggesture.html i .txt, https://developer.apple.com/documentation/swiftui/draggesture. ↩↩

  56. Apple Developer Documentation, SpatialTapGesture (SwiftUI; „A gesture that recognizes one or more taps and reports their location”; iOS 16.0), JSON zapisany 5 października 2026 jako apple-swiftui-spatialtap.html i .txt, https://developer.apple.com/documentation/swiftui/spatialtapgesture. ↩↩

  57. Apple Developer Documentation, accessibilityElement(children:) (SwiftUI; iOS 13.0), JSON zapisany 5 października 2026 jako apple-swiftui-accessibilityelement.html i .txt, https://developer.apple.com/documentation/swiftui/view/accessibilityelement(children:). ↩↩

  58. 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 zapisany 5 października 2026 jako apple-swiftui-accessibilityaction-named.html i .txt, https://developer.apple.com/documentation/swiftui/view/accessibilityaction(named:_:). ↩↩↩↩

  59. Apple Developer Documentation, accessibilityAdjustableAction(_:) (SwiftUI; procedura obsługi przyjmująca AccessibilityAdjustmentDirection; iOS 13.0), JSON zapisany 5 października 2026 jako apple-swiftui-adjustable.html i .txt, https://developer.apple.com/documentation/swiftui/view/accessibilityadjustableaction(_:). ↩↩

  60. Apple Developer Documentation, accessibilityRotor(_:entries:) (SwiftUI; „Create an Accessibility Rotor with the specified user-visible label”; iOS 16.0), JSON zapisany 5 października 2026 jako apple-swiftui-accessibilityrotor.html i .txt, https://developer.apple.com/documentation/swiftui/view/accessibilityrotor(_:entries:). ↩↩↩↩

  61. 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 zapisany 5 października 2026 jako apple-swiftui-accessibilitynotification.html i .txt, https://developer.apple.com/documentation/accessibility/accessibilitynotification/announcement. ↩↩↩↩

  62. Apple Developer Documentation, performAccessibilityAudit(for:_:) (XCUIAutomation, XCUIApplication; iOS 17.0; JSON podaje Xcode 16.3 i nie ma streszczenia), JSON zapisany 5 października 2026 jako apple-xctest-accessibilityaudit.html i .txt, https://developer.apple.com/documentation/xcuiautomation/xcuiapplication/performaccessibilityaudit(for:_:). ↩↩↩

  63. Apple, nagłówki frameworka XCUIAutomation w Xcode 27.0 (build 27A266a), platforma iPhone Simulator, odczyt 5 października 2026: XCUIApplication.h (performAccessibilityAuditWithAuditTypes:issueHandler:error:, „Runs an accessibility audit on the current view”); XCUIVoiceOverService.h („Provides programmatic control of VoiceOver for UI testing”; włączanie, wyłączanie, ruch do przodu, do tyłu, do wnętrza i na zewnątrz oraz bieżąca wypowiedź; iOS 27.0); XCUIDevice.h (właściwość voiceOverService, iOS 27.0). Przeszukanie wszystkich nagłówków frameworka pod kątem akcji własnych, pokręteł i komunikatów niczego nie znalazło. ↩↩↩

  64. Repozytorium Kiradex, scripts/forge/interiors.py (docstring modułu, łącznie z „every piece at least two tiles on one axis”; mapy liter ROOM, ROOM_UP i HALL, listy mebli, miejsca i warpy; komentarz host „where the owner stands when you visit”; PIECES, FACES, EXPORT_LETTERS, export() i check(), którego sprawdzenia miejsc obejmują przybycie, schody, gospodarza, półkę, gablotę, biurko i postumenty, ale nie tablicę ścienną, a którego pętla nakładania czyta data["objects"], wyeksportowane elementy wolnostojące), odczyt 5 października 2026, nigdy nie uruchomiony. ↩↩↩↩↩↩↩↩↩↩↩↩↩

  65. Repozytorium Kiradex, docs/TestFlight.md, punkt 46 („Build 26: the interior kit. Rooms sixteen wide with a three-row wall band (cornice, face, wainscot)”), odczyt 5 października 2026. Kompilacja nie ma w pliku daty; wypada między kompilacją 23 a 35, które artykuł o budowlach datuje obie na 3 października 2026. ↩↩

  66. Obliczenie autora, 5 października 2026: merge_regression.py w figures/ folderu szkicu, wynik merge_regression.out. W room w wersji, jaką tworzy kuźnia (13 ruchomych elementów, odczytanych z path_rule.json i z scripts/forge/interiors.py repozytorium Kiradex przez ast), samo łóżko na (9,3) i sama szafka nocna na (6,4) przechodzą każde reguły komórek, limit i chód; razem odcinają (7,3) i (8,3), dwie komórki przed gablotą. Naprawa, która sortuje oba elementy według uid i dodaje każdy przez pełne sprawdzenie, zachowuje mniejszy uid i zwraca drugi, z tym samym wynikiem dla obu kolejności wejścia i obu przypisań uid. To, że każda z 713 odcinających par jest legalna element po elemencie, wynika z measure_path_rule.out: żadne pojedyncze ustawienie z dala od celów żadnego z nich nie odcina. ↩↩↩↩↩

  67. Repozytorium Kiradex, docs/WORLD.md (sekcja 4: sklep za monety z „clothes, hats, backpacks, card-display frames and emotes”, level = floor(sqrt(XP / 40)) + 1, kosmetyki blokowane poziomem „that cannot be bought”, przypinki, w tym Full Set, Vintage i Across the Sea; kolekcjoner jako „a 30-pixel figure in a 32 × 40 cell”), odczyt 5 października 2026; przeszukane pod kątem sixteen, cap, decoration, furnishing, Sunday, once a day i read-only, z których żadne nie podaje reguły pokoju. ↩↩↩↩↩↩

  68. Repozytorium Kiradex, server/app/rooms.py (docstring modułu: „Everything here is in memory; a room empties when its last collector leaves and nothing of them is kept.”), odczyt 5 października 2026. ↩↩↩↩

  69. Repozytorium Kiradex, docs/research/pixel-art/06-collecting-and-hubs.md, sekcja 5.3 („Rooms: a budget, a Sunday letter, and a like that never goes down”: limit 16, niedzielny list jako „a pixel object that appears on the doormat”, odwiedziny tylko do odczytu, polubienie raz na gościa dziennie, „a stamp on their passport per room visited, with ranks at 30 / 100 / 500”) oraz sekcja 5.7 (przedmioty mecenasa obejmują „one room skin” i są „never a bigger furnishing cap”), odczyt 5 października 2026. ↩↩↩↩↩

  70. Repozytorium Kiradex, Kiradex/World/Quests.swift (Quest.current(on:calendar:), z kluczem w przedziale weekOfYear kalendarza, który zaczyna się w pierwszym dniu tygodnia tego kalendarza) i Kiradex/World/HallView.swift (komentarz „The week’s theme is the week’s quest” i motyw odczytywany jako tytuł cotygodniowego zadania), odczyt 5 października 2026. ↩↩↩

  71. Repozytorium Kiradex, docs/PROTOTYPES.md (pytanie do testerów prototypu cotygodniowych zadań: „Weekly reset on your calendar’s week: say if it feels wrong.”), odczyt 5 października 2026. ↩

  72. Obliczenie autora, 5 października 2026: layout_size.py w figures/ folderu szkicu, wynik layout_size.out: liczba rodzajów, 21 z dzisiejszej kuźni (17 rodzajów podłogowych i 4 przedmioty ścienne) i 3 nowe w sekcji 7.5, łącznie 24; zapisany układ domu (dwa piętra, po 16 elementów z rodzajem, x, y i kierunkiem, dwa identyfikatory stylów na piętro) jako zwarty JSON z nazwanymi kluczami, z każdym rodzajem ustawionym na najdłuższą proponowaną nazwę (pressed_flower, 14 znaków) i każdym identyfikatorem stylu na 16 znaków, 1974 bajty; to samo z każdym rodzajem dopełnionym do 16 znaków, 2038 bajtów; gołe czwórki liczb całkowitych dla 32 elementów, 385 bajtów. ↩↩

  73. Repozytorium Kiradex, Kiradex/World/PlazaStage.swift (@AppStorage("plaza.id"), „Who this device is to the plaza”; @AppStorage("quests.stamps"), stemple zadań jako lista rozdzielana przecinkami, czytana także przez QuestBoardView i MeView; @AppStorage("plaza.ribbons"), „Ribbons from the town’s collectors”), odczyt 5 października 2026; przeszukanie kodu Swift aplikacji pod kątem przechowywanej liczby kroków lub zapisu odwiedzonych pokoi niczego nie znalazło, podobnie jak przeszukanie aplikacji i serwera pod kątem krokomierza, typu liczby kroków lub paszportu (jedyne steps to ścieżki chodu w TileMap.swift i PlazaRig.swift). ↩↩↩↩↩

  74. Repozytorium Kiradex, Kiradex/Models/Progression.swift (komentarz dokumentacyjny do Progression: doświadczenie, poziom i przypinki są „worked out from the collection as it is, so every device agrees without anything being stored”), odczyt 5 października 2026. ↩↩

  75. Apple Developer Documentation, AppStorage (SwiftUI; „A property wrapper type that reflects a value from UserDefaults”; iOS 14.0), JSON zapisany 5 października 2026 jako apple-swiftui-appstorage.html i .txt, https://developer.apple.com/documentation/swiftui/appstorage. ↩↩

  76. Obliczenie autora, 5 października 2026: skin_denominator.py w figures/ folderu szkicu, wynik skin_denominator.out, na podstawie wierszy rampy z briefu: jedno piętro z 16 elementami, z których 15 oraz styl podłogi są w jednej rodzinie ramp, a ściana poza nią, to 16 z 18 (88,9%), 1600 punktów na wierszu 70%; po usunięciu ściany z udziału to 16 z 17 (94,1%), 4800 punktów na wierszu 90%, o 3200 więcej. ↩

  77. Repozytorium Kiradex, Kiradex/Models/Profile.swift (var lookData: Data = Data() w synchronizowanym profilu; var uid: String = "", ustawiane na UUID().uuidString w init(handle:), tak jak PriceHistory i CardCopy także mają uid; ModelContext.profile(), wiersze 224 do 237, pobiera profile posortowane według uid, zachowuje pierwszy i usuwa resztę, a komentarz nazywa to scalaniem do najmniejszego uid), odczyt 5 października 2026. ↩↩↩

Powiązane artykuły

Pixel-Art Structures: Houses, Halls and Interiors on iPhone

How Pokémon, the SNES RPGs and Stardew build houses, interiors and floors, measured from source, and how Kiradex's town …

80 min czytania

Pixel-Art Routes: Map Connections and Districts on iPhone

How Pokémon, Stardew and Animal Crossing build the land between towns, measured from source: routes, seams, gates, map s…

110 min czytania

Przygotowanie aplikacji na iPhone Duo: przykład krok po kroku

Jak przygotować i wysłać aplikację na iPhone Duo: znacznik SDK, który włącza nowy układ, prawdziwa aplikacja w każdej po…

47 min czytania