Fablebloom: ei piilotettuja kortteja, ei kelloa, ei pakkauksia
Rauhallinen strateginen korttipeli selaimessa. Kahdeksankymmentäneljä korttia, neljä perhettä, kolme aukiota, ja säännöt jotka kieltäytyvät piilotiedosta, vuorokellosta ja satunnaisista korttipakkauksista.

Taustaa
Fablebloom on strateginen korttipeli joka pyörii selaimessa. Kaksi Keeperiä kilpailee nukkuvan puutarhan herättämisestä: asetat pieniä olentoja, Fablingeja, kolmelle aukiolle (Glade), ja se Keeper joka ensimmäisenä ennallistaa niistä kaksi päättää kauden siihen paikkaan. Kausi kestää enintään kahdeksan Moonia, eli noin kymmenen minuuttia.
Kahdeksankymmentäneljä korttia, neljä perhettä, kolme Gladea. Ilmainen pelata, kaupassa vain kosmetiikkaa, eikä aloittamiseen tarvita tiliä.
Se on Nuitsin tuote, joten se on minun alusta loppuun, eikä se ole valmis. Nimi ja kuvitus ovat väliaikaisia tavaramerkki- ja verkkotunnustarkistuksen ajan, ja lakisivut ovat rakenteellisia luonnoksia. Tämä lukee sivustolla itsellään, koska Our Promise -niminen sivu joka salaisi oman tilansa ei olisi lupaus.
Ongelma
Digitaaliset korttipelit turvautuvat kolmeen työkaluun joita paperipeli ei juuri voi käyttää, ja kaikki kolme kantavat jotain. Piilotieto tuottaa jännitettä ilmaiseksi. Vuorokello pitää ottelun liikkeessä pyytämättä kummaltakaan pelaajalta huomaavaisuutta. Satunnaiset korttipakkaukset muuttavat korttisarjan tuloriviksi jonka taulukkolaskenta osaa mallintaa.
Jokainen niistä tekee pelistä myös epämiellyttävämmän äärellä istua. Piilotieto tarkoittaa että kiinnostava päätös tehtiin sillä välin kun katsoit muualle. Kello rankaisee ajattelusta, eli juuri siitä mistä peli väittää kertovansa. Ja pakkaustalous tekee vahvimmasta pakasta ostoksen, joten tiukan ottelun voitto ei ole koskaan aivan kohteliaisuus.
Halusin lautapelin tahdin pöydällä, kahden toisistaan pitävän ihmisen pelaamana, kymmenessä minuutissa, yhdessä välilehdessä.
Oma roolini
Kaikki, yksin. Nuits ei ole koskaan palkannut ketään.
Pelisuunnittelu ja korttisarja, käyttöliittymä, frontend, julkaisu, markkinointisivusto ja sen tekstit, mukaan lukien se kappale joka myöntää nimen olevan väliaikainen.
Lähestymistapa
Kolme kieltäytymistä, kirjoitettuna sääntöihin eikä arvosivulle: ei piilotietoa jota paperipelaaja ei voisi pitää kädessään, ei kelloja sääntöjen sisällä, eikä satunnaisuutta sekoittamisen ja nostamisen yli.
Kaikki muu piti rakentaa niiden kanssa eläväksi. Ilman kelloa ottelu tarvitsee luonnollisen aikataulun, joten kausi on kahdeksan Moonia ja jokainen Moon päättyy kun molemmat Keeperit lepäävät peräkkäin. Ilman pakkaustaloutta korttisarjan on oltava äärellinen ja tunnettava, joten kortteja on kahdeksankymmentäneljä, kaikki ansaitaan pelaamalla, ja Trading Post myy kehyksiä ja lautateemoja eikä mitään mikä koskee sääntöön.
Jännite siirtyi resurssiin. Dew täyttyy käynnissä olevan Moonin numeroon eikä siirry seuraavaan, joten ensimmäinen Moon on yksi päätös ja seitsemäs on suunnitelma. Kukaan ei voi säästää itseään murskavoittoon, ja jäljessä oleva pelaaja saa suuremman budjetin juuri siinä kohdassa jossa peli on yhä voitettavissa.
Jokaisella kolmesta Gladesta on kukintakynnys ja yksi oma sääntönsä. Sunny Meadow antaa kortin sille Keeperille joka asettuu sinne ensimmäisenä. Ember Clearing väsyttää siellä seisovat yhdellä jokaisen Moonin lopussa. Firefly Hollow maksaa kortin sillä kerralla kun Fablingisi uupuu ensimmäisen kerran kunkin Moonin aikana. Kahden Gladen ennallistaminen päättää kauden, joten lauta esittää kysymyksen siitä mitkä kaksi, ei kilpajuoksua pisteistä.
Neljä perhettä erottuvat pelitavaltaan eivätkä väriltään, vaikka väri niillä on. Grove juurtuu ja kestää kiireen yli. Ember kiitää varhaiseen johtoon ja väsyttää sinut ennen kuin ehdit asettua. Pond kokoaa väsyneet, joten siihen vastaaminen kerran ei ole siihen vastaamista. Sky ajelehtii ja hätistää, ja luulet tietäväsi missä se seisoo.
Koska yksikään sääntö ei sisällä kelloa, asynkroninen pelaaminen tuli lähes ilmaiseksi. Ottelun voi pelata vuoro päivässä yksityisen linkin yli yhdelle ihmiselle, eikä mikään pelissä huomaa eroa.
Toteutus
Se alkoi Next.js:llä, julkaistuna Cloudflare Workersiin OpenNextin kautta, jotta peli ja sen edessä oleva markkinointisivusto ovat yksi koodipohja eivätkä kaksi. Se asentuu sovellukseksi jos haluat ja pysyy sivuna jos et.
Nyt se pyörii TanStack Startilla, eli Vite-käännöksellä joka annetaan Cloudflaren Vite-liitännäiselle ja josta syntyy Worker ilman väliin jäävää kerrosta. Syy siirtoon oli se, että kehys vastasi kysymykseen jota peli ei esitä. Fablebloom on selainsovellus markkinointisivuston naamiossa: lauta jossa ei ole piilotietoa on tila jonka selain pystyy pitämään kokonaan, joten ottelun alettua palvelimelta ei ole mitään odotettavaa.
Kolme oiretta, siinä järjestyksessä kuin ne alkoivat ärsyttää.
Kylmäkäynnistykset. OpenNext pakkasi itse Next.js-palvelimen Workeriin Node-yhteensopivuuskerroksen kanssa, joten tuoreen isolaatin ensimmäinen pyyntö maksoi kehyksen käynnistämisen ennen kuin siihen voitiin vastata. Lämmin vastaus lähti noin 200 millisekunnissa ja kylmä lähempänä 800:aa, ja sen maksoi se joka avasi välilehden ensimmäisenä.
Navigoinnit jotka hakivat verkosta sen minkä selain jo tiesi. Vastausotsakkeissa luki vary: rsc, next-router-state-tree, next-router-prefetch, eli App Router kertoi jokaiselle välimuistille että reitin vaihto on edestakainen matka palvelimelle. Siirtyminen sääntöjen, yhden Gladen ja korttilistan välillä maksoi yhden joka kerta, sivuilla joiden sisältö ei ollut muuttunut käännöksen jälkeen.
Painoa ennen peliä. Markkinointisivuston etusivu lähetti noin 220 kilotavua pakattua JavaScriptiä kahdessatoista palasessa ennen kuin yhtäkään korttia oli nostettu, valtaosin kehystä, ja hydratoi sitten palvelimella renderöidyn puun jonka selain otti heti omakseen.
TanStack Start on saman ajatuksen pienempi muoto. Markkinointisivut esirenderöidään, reititin ratkeaa selaimessa, ja palvelinfunktiot hoitavat ne kaksi tai kolme asiaa jotka oikeasti tarvitsevat palvelimen: ottelulinkin, tallennuksen ja pelisivun takana olevan kirjautumisen. Raja selaimen ja palvelimen välillä on piirretty sinne missä sovelluksella sellainen on, eikä sinne mihin kehys oletti sen tulevan.
Kävijätilastot kulkevat Umamin kautta, itse isännöitynä eikä analytiikkayhtiölle luovutettuna, samoin kuin jokaisessa muussakin Nuitsin tuotteessa.
Kiinnostava rajoite on ensimmäinen kieltäytyminen. Pelissä jossa ei ole piilotietoa ei ole paikkaa jonne virhe mahtuisi: molemmat pelaajat näkevät koko laudan koko ajan, joten jokainen ristiriita sääntöjen ja ruudun välillä näkyy molemmille yhtä aikaa. Se painaa säännöstön riittävän pieneksi kerrottavaksi kokonaan. Kahdeksan Moonia, yksi toiminto vuorossa, neljä korttityyppiä, kolme Gladen sääntöä, ja Dew joka nollautuu. Pelaaja joka epäilee pelin erehtyneen voi tarkistaa asian, mikä on mahdollista vain koska tarkistettavaa on vähän.
Lopputulos
Pelattava ja julkaisematon. Sivusto on pystyssä, säännöt on kirjoitettu, korttisarja on valmis, ja koko paketin päällä oleva nimi on väliaikainen. Tavaramerkin ja verkkotunnuksen tarkistus tulee ennen julkaisua eikä sen jälkeen, ja siihen asti ei ole mitään syytä esittää että etuovi olisi valmis.
Mitä tekisin toisin
Suunnittelin kahdeksankymmentäneljä korttia ja neljä perhettä ennen kuin nimi oli tarkistettu. Jos tarkistus menee huonosti, korttisuunnittelusta ei mene mitään hukkaan ja kuvituksesta kaikki, ja tämän järjestyksen olisi voinut välttää. Tylsä juridinen tarkistus maksaa vähän aikaisin ja paljon myöhään.
Valitsin myös kehyksen ennen kuin tiesin sovelluksen muodon. Next.js on hyvä vastaus sivuja koskevaan kysymykseen, ja Fablebloomista tuli lautaa koskeva kysymys. Renderöintimallin valitseminen ensin ja sen huomaaminen kuukausia myöhemmin että rakennettu asia on selainsovellus on virhe joka näkyy vain viiveenä, ja siirtymätyö oli siitä lasku.
Julkaisin myös lakisivut rakenteellisina luonnoksina, väliaikaisen tekstin kanssa. Pidän edelleen siitä että rungon julkaisee näkyvän “ei vielä sitova” -merkinnän kanssa sen sijaan että ei julkaisisi mitään, mutta se on outo asia pitää verkossa kaupan kuvaavan sivun vieressä. Rehellinen versio tuosta lauseesta on että myymälä kirjoitettiin ennen papereita.




