Przejdź do treści
pikselarnia
Menu
zniwowo-2-plan/okladka.webp
Okładka wpisu: napis Devlog Żniwowo, Część 2 na ciemnym polu, a w rogu czerwony kombajn nocą z reflektorami oświetlającymi zboże.

Plan, zanim powstał kod

· 6 min czytania

Kiedy już wiadomo, co ma powstać, kusi, żeby budować wszystko naraz, ale przy poprzednich grach przekonałem się, że to prosta droga do gry, w której nic nie działa dobrze, a do tego trudno powiedzieć, która część psuje całość. Jeszcze zanim agent AI napisał pierwszą linijkę kodu gry, rozpisał plan Żniwowa, czyli kolejność budowania, na podstawie koncepcji.

Pięć etapów

Plan dzieli grę na pięć etapów, a każdy z nich dokłada jedną warstwę do tego, co już działa:

  1. Koszenie:jedno prostokątne pole pszenicy, większe od ekranu, kombajn, pasy na ściernisku za nim, zbiornik na ziarno i przyczepa na skraju pola, wszystko tylko w dzień.
  2. Dzień:upływ czasu od porannej mgły do nocy, reflektory, wilgotność ziarna, od której zależy cena, i ukryte kamienie, które psują maszynę.
  3. Życie pola:bociany, pogoda z prognozą i deszczem, pola o różnych kształtach, a obok pszenicy także rzepak i jęczmień.
  4. Sezon:mapa wsi, sąsiedzi, którzy zlecają skoszenie swoich pól, pieniądze, naprawy, kilka ulepszeń i dożynki na zakończenie.
  5. Premiera:nazwa i domena (wtedy jeszcze nieustalone), menu, strona gry i pierwsza publiczna wersja.

Ważniejsze od samej listy jest to, co dzieje się między etapami. Każdy kończy się próbą na telefonie, którą przeprowadzam ja, a nie bot, i następny etap zaczyna się dopiero wtedy, gdy ta próba wypadnie dobrze. Po pierwszym etapie pytanie brzmi, czy pięć minut koszenia sprawia przyjemność i czy jazda do przyczepy z pełnym zbiornikiem dodaje grze rytmu, czy raczej przeszkadza w koszeniu. Po drugim trzeba sprawdzić, czy decyzja o koszeniu po zmroku jest prawdziwym wyborem i czy po każdym najechaniu na kamień da się powiedzieć, co można było wcześniej zauważyć.

Lekcja z Zenogrodu

Ta zasada pochodzi z Zenogrodu (otwiera się w nowej karcie), mojej wcześniejszej gry o koszeniu trawnika, której plan zakładał to samo: dźwięki, efekty i ozdoby dołożone do kosiarki, która źle się prowadzi, nie poprawiają wrażeń z gry, tylko je pogarszają, a do tego zasłaniają to, co jest nie tak ze sterowaniem. W Zenogrodzie najpierw powstała więc sama kosiarka na prostokątnym trawniku, a dźwięk, ptaki i przeszkody (rabaty, krasnal i śpiący kot) doszły dopiero po tym, jak zagrałem na telefonie i uznałem, że samo koszenie jest przyjemne.

Zenogród
Zrzut ekranu z gry Zenogród: częściowo skoszony trawnik w jasne i ciemne pasy, rabaty kwiatowe, jabłoń, krasnal ogrodowy i śpiący kot, u góry napis Skoszono 62%.

Zenogród: pasy na trawniku zależą od kierunku, w którym przejechała kosiarka, a rabaty, krasnal i kot pojawiły się w grze dopiero po pierwszej próbie na telefonie.

Co skopiować, a co napisać od nowa

Druga decyzja w planie dotyczyła tego, z czego budować. Zenogród ma już koszenie, pasy zależne od kierunku jazdy, sterowanie przeciąganiem palca po ekranie, rysowanie trawnika i dźwięk, więc według planu agent ma skopiować te części kodu i dostosować je do kombajnu. Po skopiowaniu to już kod Żniwowa, który rozwija się osobno (zmiana w jednej grze nie psuje drugiej). Kopiowanie oszczędza czas i tokeny (kawałki tekstu, od których liczy się opłatę za pracę AI), bo nie trzeba pisać tego kodu od zera. Do tego jest to kod, który sprawdził się już w prawdziwej grze.

Nie wszystko da się jednak przenieść, bo kombajn jest dużo szerszy i cięższy od kosiarki, a do tego skręca tylnymi kołami, tak jak prawdziwe kombajny. W zakręcie jego tył wychodzi więc na zewnątrz, a zawracanie na końcu pola wymaga uwagi (według koncepcji to w dużej mierze od tego jednego szczegółu zależy charakter tej maszyny). Z tego powodu jazdę kombajnem trzeba napisać od nowa, choć punktem wyjścia jest to, co już działa w Zenogrodzie.

Druga różnica jest mniej widoczna, ale na telefonie liczy się bardziej: w Zenogrodzie cały trawnik mieści się na ekranie, a w Żniwowie pole jest większe od ekranu, więc obraz musi płynnie przesuwać się za kombajnem (mała mapa pokazuje przy tym, ile zostało do skoszenia). Plan zakłada, że obraz pola będzie podzielony na kawałki, a gra w każdej klatce odświeży tylko te widoczne, które się zmieniły (rysowanie całego pola od nowa mogłoby być dla telefonu za wolne). Czy to wystarczy, trzeba według planu zmierzyć na telefonie już w pierwszym etapie.

Ryzyka, zanim powstanie kod

W planie agent wymienił też sześć ryzyk i przy każdym zapisał, jak je sprawdzić, w miarę możliwości zanim powstanie kod, który potem trzeba by wyrzucić:

  • Niesprawiedliwa noc:jeśli ciemność i ukryte kamienie będą wydawać się niesprawiedliwe, wyjdzie to w próbie po drugim etapie, w której po każdym najechaniu na kamień pada pytanie, czy dało się go zobaczyć (do tego obowiązuje zasada, że kamień nigdy nie leży w ciemności bez żadnego ostrzeżenia).
  • Symulator rolnika:żeby gra nie rozrosła się w symulator gospodarstwa, obowiązuje zasada jednej maszyny i jednego zadania, a wszystko, co nie dotyczy jazdy kombajnem albo decyzji, kiedy nim jechać, trafia na listę „może kiedyś”.
  • Kursy z pełnym zbiornikiem:czy jeżdżenie do przyczepy nie rozbija rytmu koszenia, pokaże próba po pierwszym etapie (jeśli rozbija, można zmienić wielkość zbiornika i odległość do przyczepy).
  • Nieczytelne zboże:czy zboże i ściernisko nie zlewają się w pikselach, wyjdzie na rysunkach pola skoszonego do połowy (w południe, o zmierzchu i w nocy), które trzeba obejrzeć na telefonie, zanim prace nad grą pójdą dalej.
  • Bocian niepodobny do bociana:zanim bociany trafią do gry, powstanie rysunek ptaka na ściernisku, idącego i zrywającego się do lotu, żeby sprawdzić, czy da się go poznać.
  • Za wolny telefon:duże, przesuwane pole od początku będzie rysowane w kawałkach, a do tego gra przejdzie długi test w przeglądarce na komputerze z procesorem spowolnionym czterokrotnie, tak jak przy Zenogrodzie.
plan.html

Risks

RiskHow it is checked
Darkness and hidden stones feel unfairThe M1 gate asks for every stone hit: could you have seen it? Rule: a stone is never both unlit and unwarned. If players blame the game, show more before adding more
It grows into a farming simulatorThe one machine, one job pillar: anything that is not driving the combine or deciding when to drive it goes on Later, maybe
The tank rhythm interrupts the cuttingThe M0 gate; the knobs are the tank size and how far the trailer is
The crop and the stubble do not read at pixel scale, by day or at nightStills of a half-cut field at noon, dusk and night with the lights, on a phone, before the sim goes further
Storks do not read as storks at sprite sizeA still of a stork in stubble, walking and taking off, before M2 (Bocian's open risk too)
A large scrolling field is slow on a phoneThe chunked texture from M0, and a soak like Zenogród's under a 4x CPU throttle
Tabela ryzyk z pierwszej wersji planu, po angielsku, jak cała dokumentacja projektu: przy każdym ryzyku sposób, w jaki zostanie sprawdzone.

Trzy z tych sześciu ryzyk dotyczą tego, co widać na ekranie: jeśli na telefonie nie da się dostrzec kamienia w zbożu, gra robi się niesprawiedliwa, a bocian, którego trudno poznać, raczej nikogo nie ucieszy. Dwa z nich, czyli zboże i bocian, według planu da się sprawdzić na samych rysunkach, zanim prace pójdą dalej, a poprawka rysunku kosztuje dużo mniej niż przebudowa gry.

DevlogSeria: Żniwowo

  1. Część 1Od pomysłu do koncepcji
  2. Część 2Plan, zanim powstał kodCzytasz teraz
  3. Część 3Pierwsze rysunki
  4. Część 4Kolejny wpis już wkrótce