Crane Towerin idea oli yksinkertainen: nosturi pudottaa elementtejä, pelaaja rakentaa talon, ja lopuksi maanjäristys testaa, kestääkö rakennus. Pelin piti palkita huolellista rakentamista. Ensimmäisissä testeissä kävi kuitenkin päinvastoin.

Ongelma: täydellinenkin talo sortui

Käytämme pelissä avoimen lähdekoodin Matter.js-fysiikkamoottoria. Kun pinosimme elementtejä täsmälleen päällekkäin, korkea torni alkoi ennen pitkää hiljalleen ”valua” ja kaatui — ilman maanjäristystä. Fysiikkamoottorit ratkaisevat kappaleiden kosketukset pienissä aika-askeleissa ja iteratiivisesti, ja pienet laskentavirheet kasautuvat. Korkeassa pinossa ne riittävät kaatamaan koko rakennuksen.

Pelaajan näkökulmasta tämä oli epäreilua: huolellinen rakentaminen ei auttanut, ja maanjäristyksen tulos tuntui sattumalta.

Mittaamalla, ei arvaamalla

Rakensimme pelin fysiikasta erillisen simulaation, joka rakentaa satoja taloja eri tarkkuudella ja ajaa niille maanjäristyksen. Näin pystyimme vertailemaan asetuksia numeroilla eikä tuntumalla. Kokeilimme ratkaisijan iteraatioiden lisäämistä, kitkaa, kappaleiden ”nukahtamista” ja muita säätöjä. Mikään niistä ei yksin korjannut ongelmaa.

Ratkaisu: elementti kiinnittyy

Lopullinen ratkaisu on klassisista tornipeleistä tuttu: kun elementti laskeutuu ja pysähtyy, se kiinnittyy paikalleen. Rakennusvaiheessa torni ei siis kaadu itsestään. Vasta kun maanjäristys alkaa, kaikki elementit palaavat fysiikan armoille — ja silloin vino rakentaminen paljastuu.

Lisäksi jaoimme jokaisen fysiikka-askeleen kolmeen pienempään osaan. Lyhyempi aika-askel tekee pinosta paljon vakaamman, eikä täydellisesti rakennettu talo enää sorru ilman syytä.

Maanjäristyksen säätäminen

Maanjäristys ei liikuta maata, vaan jokaiseen elementtiin vaikuttaa vuorotteleva voima — fysiikan kielellä hitausvoima maan koordinaatistossa. Sen voimakkuus ja taajuus säädettiin simulaatioiden avulla niin, että tulos riippuu rakentamisen laadusta. Simulaatioissamme huolellisesti rakennetusta talosta pysyi pystyssä keskimäärin noin 97 %, kohtuullisesti rakennetusta noin 85 % ja vinosta noin 65 %.

Mitä opimme

  • Reiluus on suunnittelua. Pelaajan pitää tuntea, että tulos riippuu hänestä.
  • Mittaa ennen kuin säädät. Simulaatio löysi ongelman ja oikeat arvot nopeammin kuin satunnainen pelaaminen.
  • Lainaa hyviä ratkaisuja. Tornipelien kiinnittyvä palikka on olemassa syystä.

Sama periaate pätee kaikkiin peleihimme: testaamme ne niin, ettei pelaajan tarvitse löytää virheitä meidän puolestamme.