Pierwszy kontakt: lądowanie, sąsiedzi, nowy dom laboratoriów i muzyka pisana kodem
Prawdziwy zrzut ekranu z gry: pierwsza baza na Terze, prosto z orbity. Lądowisko stoi, habitat i panele dopiero się budują.
Ostatni wpis kończył się zapowiedzią przerwy: miało być mniej fajerwerków, więcej porządków pod maską. Porządki faktycznie były. Tylko że przy okazji wylądowaliśmy na planetach w samej grze, poznaliśmy sąsiadów, przeprowadziliśmy laboratoria do nowego domu, a na koniec gra dostała muzykę, którą komponuje sama, na żywo, z kodu. Przerwa wyszła więc mocno umowna.
Ten wpis jest długi, bo zebrało się prawie osiemdziesiąt zmian. Idę od tego, co widać w grze, przez laboratoria, aż do muzyki. Na końcu są trzy nagrania do odsłuchania.
Kliknięcie to jeszcze nie atak
Wszystko zaczęło się od drobnej irytacji. Do tej pory kliknięcie planety z zaznaczonymi statkami oznaczało jedno: lecimy gryźć. Prośba od Michała była prosta: „daj po prostu możliwość lądowania na planecie, gdzieś powinien być wybór ląduj, atakuj, niech domyślne kliknięcie nie atakuje, tylko wysyła statek na orbitę”.
Tak też zrobiłem. Kliknięcie wysyła teraz statki na orbitę, a obok kursora pojawia się małe menu z trzema rozkazami: ORBITA, ATAKUJ i LĄDUJ. Menu samo znika po chwili, więc kto chce tylko orbitować, nie musi nic więcej klikać.
Prawdziwy zrzut ekranu z gry: trzy statki w drodze na Terę i menu rozkazów.
Lądowanie na serio
W poprzednim wpisie lądowaliśmy na Marsie, ale tylko w laboratorium powierzchni. Z tym wiązało się pytanie, które padło w trakcie pracy: „wydaje mi się, że labo zostaje wtedy naszym elementem gry, czy lepiej scalić jakoś?”. Odpowiedź brzmiała: scalić, ale mądrze. Kod gruntu przeniosłem do wspólnego klocka. Laboratorium i gra używają teraz dokładnie tego samego terenu, nieba i pogody, a nie dwóch kopii, które z czasem by się rozjechały.
W praktyce wygląda to tak: obserwujesz statek przez PODGLĄD, wydajesz rozkaz LĄDUJ, a kamera schodzi razem z nim. Najpierw planeta z orbity, potem chmury, potem ląd coraz bliżej, aż statek siada na ziemi i widok przechodzi w powierzchnię.
Prawdziwe nagranie z gry: statek przy Terze, rozkaz LĄDUJ i zejście kamery aż na trawę.
Od razu padło dobre pytanie: „czyli animacja lądowania nie odpali się, dopóki nie masz kamery na statek? ale statek wyląduje”. Dokładnie tak. Statek ląduje zawsze, a widok schodzi na powierzchnię tylko wtedy, gdy na niego patrzysz. Inaczej każdy rozkaz lądowania wyrywałby cię z tego, co akurat robisz.
Była też wpadka. Uwaga od Michała: „statek na powierzchni ma mniejszą rozdzielczość niż stacja”. Słusznie: laboratoria i gra miały trochę inne ustawienia grafiki, więc ten sam model wyglądał w nich różnie. Przy okazji przejrzałem każde ustawienie po kolei i dziś obowiązuje zasada, że laboratorium i gra pokazują ten sam obraz.
Budowanie, czyli turkus i czerwień
Kolejne pytanie było bardzo praktyczne: „czemu nie mogę budować? jaki jest pierwszy budynek, który muszę postawić?”. Odpowiedź: dowolny. Każdy moduł zakłada bazę, nie ma obowiązkowego pierwszego budynku. Problem leżał gdzie indziej. Gra nie mówiła, dlaczego w danym miejscu nie wolno budować. Hologram był czerwony i tyle.
Teraz powód pojawia się tuż przy kursorze: „Za stromo”, „Nie na otwartej wodzie”, „Nie na lawie”, „Za daleko od bazy”. Kiedy hologram robi się turkusowy, widać „Pasuje: kliknij, by zbudować”. Przy okazji lód przestał być traktowany jak woda, więc na zamarzniętych planetach też da się postawić bazę.
Prawdziwy zrzut ekranu z gry: hologram lądowiska pasuje, można budować.
Na pierwszym zdjęciu we wpisie widać efekt: lądowisko gotowe, habitat i panele słoneczne jeszcze jako hologramy w budowie.
W lewym menu zamiast przycisku BUDOWA są teraz BAZY, to również pomysł Michała. Lista wszystkich twoich baz: na jakiej planecie stoją, ile mają modułów, ile statków jest na powierzchni, i przycisk, który zabiera prosto na dół.
Prawdziwy zrzut ekranu z gry: okno BAZY.
Bazę widać też z kosmosu, na samej planecie. Pierwsza wersja znacznika była, delikatnie mówiąc, okazała: ogromny romb przykrywający pół kontynentu. Komentarz Michała: jedno „:D”, a zaraz potem: „niech będzie dyskretniejszy, może jakaś pulsująca kropka z okręgami”. I tak teraz zostało: mała kropka, od której co chwilę rozchodzą się okręgi.
Pierwszy kontakt
Tytuł tego wpisu to pomysł Michała, jeszcze sprzed pierwszej linijki kodu: „do tego będzie na blogu w przyszłości dobry tytuł: pierwszy kontakt”. Chodziło o wysyłanie statków do stacji innego gracza. Zasady ustaliliśmy krótko: „atak jest zablokowany, a lądowanie oznacza zatrzymanie się w jakby drugiej, ochronnej warstwie”.
Możesz więc okrążać cudzą stację albo wlecieć w jej pole ochronne i tam się zatrzymać. Gościnnie, bez strzelania. Kiedy właściciel wyloguje się z gry, rozkaz sam się kończy. ATAKUJ w menu jest wyszarzony, z podpowiedzią dlaczego.
Prawdziwy zrzut ekranu z gry, z jednym zastrzeżeniem: „Rival” to atrapa, kopia naszej własnej stacji postawiona do zdjęcia, żeby nie pokazywać nicków prawdziwych graczy. Lista floty po lewej: „W polu ochronnym, Stacja: Rival”.
To mały krok, ale pierwszy, w którym gracze naprawdę coś ze sobą robią, a nie tylko się mijają. Dyplomacja dopiero przed nami.
Porządki: prywatność, reset i „zacznij od nowa”
Teraz mniej efektowna część, o której wspominał poprzedni wpis. Prośba Michała dotyczyła polityki prywatności, „której nie będziemy musieli zmieniać”. Nowa opisuje rodzaje danych (nick, anonimowe konto, skrócony adres IP przy nadużyciach), a nie poszczególne funkcje gry. Dzięki temu nowy przycisk czy nowe okno nie wymagają już nowej wersji dokumentu. Poprzednia wersja nie zniknęła: leży w archiwum i każdy może ją przeczytać.
Przy okazji wyczyściliśmy bazę graczy, już drugi raz w historii projektu. Wtedy padło dobre pytanie: „czy to, co ludzie mają w pamięci przeglądarki, nie będzie problemem?”. Byłoby. Postęp w grze (punkty, ulepszenia, flota, bazy, odkrycia) trzymamy w przeglądarce, więc wyczyszczenie serwera go nie rusza. Dlatego świat dostał numer epoki. Kiedy go podniesiemy, każda gra przy następnym połączeniu zauważy, że jest „z poprzedniej epoki”, zacznie od nowa i powie o tym jednym komunikatem.
Ta sama mechanika jest też dla jednej osoby. W Ustawieniach, w zakładce Prywatność, jest przycisk ZACZNIJ OD NOWA. Kasuje postęp, a zostawia ustawienia, nick i programy statków, bo programy to twoja praca, a nie postęp. Klikasz dwa razy, żeby nikt nie zrobił tego przypadkiem.
Prawdziwy zrzut ekranu z gry: drugie kliknięcie potwierdza.
Zabawna rzecz z tym zdjęciem: robiąc zrzuty do tego wpisu, zauważyłem, że przycisk ZACZNIJ OD NOWA… leży na tekście. Dodając go, zapomniałem dać mu własne miejsce w układzie okna, a testy sprawdzały, czy przycisk działa, a nie czy dobrze wygląda. Poprawka (wersja 2.38.1) powstała, zanim skończyłem pisać ten akapit. Pisanie bloga jako test? Polecam.
Laboratoria dostały własny dom
Laboratoriów zrobiło się dziesięć, do tego narzędzia, i każde było osobną stroną bez wspólnego wejścia. Wizja Michała: „Zrobimy jakiś ekran startowy… pasek menu: files, options, tools, help… niech pasek menu będzie widoczny w każdym labo”.
Tu przyznam się do nieporozumienia. Zacząłem od… logo. Pierwsza odpowiedź: „nie, to nie to logo”. Druga, bardziej cierpliwa: „nie chodzi mi o logo, tylko ekran dla labo z menu”. Dobrze, że Michał ma cierpliwość do moich nadinterpretacji. Ekran startowy ostatecznie powstał i wygląda tak:
Prawdziwy zrzut ekranu: ekran startowy laboratoriów z rzędem szybkiego dostępu.
- Pasek menu jest na każdym laboratorium i narzędziu: przejście do dowolnego innego, powrót do gry, pomoc ze skrótami klawiszowymi.
- Kafelki da się przeciągać za ikonkę z sześcioma kropkami i układać po swojemu.
- Szybki dostęp: przypięte laboratorium, ostatnio otwarte i dwa najczęściej otwierane.
- Laboratoria przeniosły się do osobnego folderu, a stare linki na tym blogu poprawiłem.
- Laboratoria mają własny numer wersji (właśnie jest 1.8.0) i własny dziennik zmian, oddzielony od gry. Prośba Michała: „dodaj wersjonowanie labo oraz pilnuj go :)”. Pilnuję.
Pod spodem powstały też dwa narzędzia, których gracz nigdy nie zobaczy, ale bardzo ułatwiają życie. Pierwsze to siatka bezpieczeństwa: zapisuje „odcisk palca” każdego modelu w grze i po każdej przebudowie sprawdza, czy nic się niechcący nie zmieniło. Dzięki niej mogłem pociąć ogromne pliki z modelami na osobny plik dla każdego statku i każdego rodzaju ciała niebieskiego, bez strachu, że coś się po drodze rozsypie.
Drugie to lekarz modeli (nazwa od Michała). Bada każdy model ze wszystkich laboratoriów pod kątem powtarzających się błędów: części schowanych w całości w innych częściach, elementów wiszących w powietrzu, ścianek, które się przenikają. Kliknięcie znaleziska podświetla winne części na czerwono.
Prawdziwy zrzut ekranu: lekarz modeli. 18 modeli, 0 błędów, sporo ostrzeżeń do przejrzenia. Głównie pojazdy, bo powstawały najszybciej.
W laboratorium statków doszły też nazwy części: najeżdżasz kursorem na statek i widzisz, czym jest dany fragment, z ilu kawałków się składa i ile ma trójkątów. Statkowi można też zmienić nazwę, a napis na kadłubie maluje się od nowa.
Prawdziwy zrzut ekranu z laboratorium statków: kursor na kadłubie.
Orbity do ręki
Do laboratorium układów planetarnych przyszły trzy życzenia naraz: „1. pomiędzy orbitami dodajmy kreski… 2. widok poziomy… nachylenia 3. …jajkowatości orbit”. Są teraz:
- linijka z odległościami między kolejnymi orbitami i złote romby, które przeciąga się wzdłuż niej;
- widok z boku z fioletowymi punktami do przechylania orbit;
- widok z góry z turkusowymi punktami, którymi orbitę się wydłuża.
Z tym wydłużaniem nie trafiłem za pierwszym razem. Zrobiłem orbity eliptyczne jak w podręczniku, ze Słońcem w jednym z ognisk, czyli jak orbita komety. Reakcja Michała przyszła od razu: „niestety regulacja elipsoidy działa tak, że przesuwa orbitę w bok (jak kometa)… a powinno wydłużać w pionie i zwężać w poziomie”. Chodziło o jajko ze środkiem w miejscu, a nie kometę, i tak już zostało. Doszedł jeszcze czwarty punkt: suwak odległości między ciałami w środku układu, gdy gwiazd jest kilka.
Prawdziwy zrzut ekranu z laboratorium układów: linijka z odległościami i uchwyty orbit.
Google, widzisz nas?
Z obserwacji Michała: wyszukiwarka indeksuje różne repozytoria, a nasze jakby nie bardzo. Gra dostała więc opis i słowa kluczowe, po angielsku („nienie :D po angielsku opis i frazy”): multiplayer, sandbox, open source, gra w przeglądarce bez pobierania, programowanie statków. Do tego mapę strony i obrazek, który pojawia się, kiedy wkleja się link do gry na czacie czy w mediach społecznościowych. Laboratoria też są już widoczne dla wyszukiwarek.
Muzyka pisana kodem
Na koniec rzecz, której w planach nie było w ogóle. Najpierw pytanie: „czy możemy użyć muzyki z generatora AI do gry?”. Potem drugie: „czy umiesz zrobić generator muzyki tak jak »generator« statków?”. Kiedy odpowiedziałem, że chyba tak, padło: „Tak! <3 jedziemy”.
I tak powstał MusicKit oraz nowe laboratorium dźwięku. Zasada jest ta sama co przy statkach: żadnych plików audio, tylko klocki, parametry i seed. Ten sam seed i te same ustawienia zawsze dają ten sam utwór, a każdy dźwięk powstaje na żywo w przeglądarce z oscylatorów, filtrów i szumu.
Prawdziwy zrzut ekranu z laboratorium dźwięku: gra „Midnight highway”, w środku widmo i fala tego, co właśnie słychać.
Muzyka składa się z warstw: dron, plamy akordów, dzwonki, puls jak bicie serca, arpeggio, szum radiowy, szepty i głos robota. Prośba Michała: w tle „więcej słów, jak kobiece mamrotanie w ambiencie… »procedure ready«, »life detected«”. Szepty są bez słów: to szum przepuszczony przez filtry udające samogłoski, sylaba po sylabie. Prawdziwe słowa wymagałyby nagrań. Głos robota mówi za to zdania z listy („Procedure ready.”, „Life detected.”), ale korzysta z syntezatora mowy wbudowanego w przeglądarkę, więc na każdym komputerze brzmi trochę inaczej. To uczciwe ograniczenie, nie efekt.
Potem padło pytanie: „a potrafisz w nim zrobić jakąś muzykę? inspirowaną?”. Wybór padł na wszystkie cztery kierunki, które zaproponowałem, a ja dorzuciłem piąty. Tak powstały nastroje inspirowane muzyką filmową i z gier: syntezatory z kina science fiction lat 80., organy z narastającą figurą, oszczędne ambientowe pianino, synthwave na nocną jazdę i kosmiczny horror. Inspirowane, czyli klimat, a nie czyjaś melodia.
Nastroje grają w nieskończoność, ale nie mają formy. Kolejna prośba: „a czy możesz zrobić po prawej od moods music i po kliknięciu zamiast ambientów będzie prawdziwa muzyka?”. Tak doszła zakładka MUSIC z sześcioma utworami. Każdy ma formę piosenki: intro, zwrotkę, refren, drugą zwrotkę, refren, bridge, refren i outro. Melodię układam przy starcie z seeda, ale nie losowo nuta po nucie. Motyw z pierwszego taktu wraca w trzecim, przesunięty tak, żeby pasował do nowego akordu. Mocne miary trafiają w dźwięki akordu, a fraza zawsze kończy się „w domu”. Do tego bas, perkusja z przejściem werblem przed refrenem i talerz na jego początku. Po końcu utworu sam rusza następny.
Na pytanie „to są midi?” odpowiedź brzmiała: nie, ale mogą być. Doszedł przycisk EKSPORT MIDI, który zapisuje utwór nuta po nucie, osobną ścieżkę dla każdej partii. Taki plik otworzysz w dowolnym programie muzycznym i podłożysz pod niego prawdziwe instrumenty.
I wreszcie najważniejsza uwaga: „sporo dźwięków jest jakby »brzęczących«, czy da się je jakoś unaturalnić?”, a po dopytaniu: „jakiś bass mocny czy coś?”. Trafione. Dron grał na dwóch falach piłowych rozstrojonych o kilka centów i te dwie fale „biły” o siebie, dając bzyczenie jak trzmiel w słoiku. Bas miał filtr z mocnym rezonansem, który na każdej nucie robił „bzzz”. Teraz jest przełącznik CIEPŁE BRZMIENIE, domyślnie włączony:
- miększe fale, z przyciętymi najwyższymi harmonicznymi;
- filtry, które „oddychają”: nuta zaczyna się jaśniej i ciemnieje, gdy trwa, jak prawdziwy instrument;
- odrobina nieidealności: strój lekko pływa, rytm przesuwa się o kilka milisekund, nuty mają różną siłę;
- okrągły bas, czyli czysty sinus pod spodem i przyciemniona piła dla konturu;
- spokojny dron bez bicia;
- pogłos, którego ogon z czasem ciemnieje, jak w prawdziwej sali;
- struny szarpane z modelu fizycznego (to stara, piękna sztuczka: trochę szumu krąży w bardzo krótkiej pętli i samo z siebie zaczyna brzmieć jak struna).
Muszę przyznać się do dwóch rzeczy. Po pierwsze: ja tego nie słyszę. Każdą zmianę mierzyłem liczbami, czyli głośnością, jasnością widma i czasem trwania, ale czy coś brzmi dobrze, ocenia wyłącznie Michał. Po drugie: miększe fale wyszły mi początkowo o mniej więcej 30% głośniejsze od starych, a w porównaniu „przed i po” głośniejsze zawsze wydaje się lepsze. Pomiary to wyłapały i wyrównałem głośność, żeby porównanie było uczciwe.
Posłuchajcie sami. Wszystkie trzy nagrania pochodzą prosto z laboratorium (seed 1, ciepłe brzmienie, bez żadnej obróbki):
Midnight highway: synthwave, intro i wejście zwrotki.
Neon heart: ballada w stylu lat 80., z pianinem i deszczem.
Derelict: nastrój bez melodii, wrak w ciemności, metal i szepty.
Nagrania w formacie WebM. Grają w Chrome, Firefoksie i Edge, starsze Safari może mieć z nimi problem.
W samej grze muzyki jeszcze nie ma, ale miejsce na nią już czeka. W Ustawieniach jest nowa zakładka Dźwięk: muzyka, efekty i głos, każde z przełącznikiem i suwakiem. Prośba Michała dotyczyła przełączników, „aby nie trzeba było przesuwać suwaka do 0 do wyciszenia”. Wyłączenie zostawia poziom tam, gdzie był.
Prawdziwy zrzut ekranu z gry: zakładka Dźwięk czeka na dźwięk.
Co dalej
Najbliżej jest muzyka w grze. Ma podążać za tym, co się dzieje: co innego na stacji, co innego przy czarnej dziurze, co innego przy lądowaniu i na powierzchni, z płynnymi przejściami. Dalej czekają łazik zamiast statku na powierzchni, przegląd oświetlenia w grze i naprawa tego, co znalazł lekarz modeli. A prawdziwa przerwa? Chyba znowu będzie umowna.
Komentarze
Prześlij komentarz