Moonlight Animate — system dialogów w grach
Silnik gier 2D wbudowany w Moonlight Animate dostał system dialogów — brakujący element gier fabularnych (RPG, visual novel). Rozmowy, wybory, zmienne fabularne działają teraz w grze od początku do końca, a wyzwolić dialog można jedną linijką skryptu.
Dialog to osobny plik
Rozmowa jest osobnym plikiem-scenariuszem (obok scen i skryptów), bo ten sam dialog bywa wywoływany z wielu miejsc. To lista węzłów: kwestia, wybór gracza, skok, ustawienie zmiennej, wywołanie skryptu, pauza. Jeden węzeł jest startowy; silnik przechodzi od węzła do węzła, pokazuje tekst, czeka na gracza i rozgałęzia się na wyborach.
Format jest na tyle prosty, że dialog można napisać ręcznie, a docelowo generować z wizualnego edytora drzew.
Belka dialogowa
Silnik rysuje domyślną belkę dialogową: panel u dołu ekranu, imię mówcy (we własnym kolorze) i tekst z efektem maszyny do pisania — znaki odsłaniają się po kolei. Pierwsze naciśnięcie klawisza (albo kliknięcie) odsłania całą kwestię naraz, drugie przechodzi dalej. Przy wyborach pojawiają się przyciski — a że mieszczą się w panelu niezależnie od ich liczby, żadna opcja nie wypada poza ekran.
Cały tekst to klucze tłumaczeń, więc dialogi działają we wszystkich językach — po polsku, w językach europejskich i w piśmie azjatyckim (chińskim, japońskim, koreańskim), które silnik obsłużył we wcześniejszych krokach.
Wybory, warunki i zmienne fabularne
Wybór może mieć warunek — opcja „Zapłać 10 złota" pojawia się tylko, gdy gracz ma tyle złota; w przeciwnym razie jest niewidoczna (a nie wyszarzona). Warunki czytają zmienne gry, a węzeł „ustaw" je zapisuje — i te zmienne wchodzą do zapisu gry, więc fabuła pamięta decyzje gracza. Wartość zmiennej można też wstawić wprost w tekst („Masz 42 złota").
Węzeł „skrypt" wywołuje funkcję gry po nazwie — więc dialog może dać przedmiot, otworzyć drzwi czy uruchomić cutscenkę. Kwestia może mieć głos (plik audio), który milknie, gdy gracz przechodzi dalej.
Wyzwalanie i odporność
Dialog uruchamia się jedną linijką skryptu (start_dialogue "intro") albo węzłem grafu logiki; po zakończeniu wysyła sygnał, na który gra może zareagować (wznowić rozgrywkę). Uszkodzony lub celowo spreparowany plik dialogu nigdy nie wywraca gry — wszystko degraduje się do bezpiecznych wartości.
Ten fragment przeszedł dokładny przegląd pod kątem błędów. Wychwycił i naprawił m.in.: brak pakowania plików dialogów do gotowej gry (bez tego cała funkcja byłaby martwa poza edytorem), niepodpięty węzeł „skrypt", zapętlenie na sześciu wyborach oraz subtelny błąd zwalniania pamięci przy zamykaniu belki. Rdzeń — czytanie pliku, maszyna stanów, warunki, interpolacja zmiennych — jest pokryty automatycznymi testami.
Co dalej
To fundament gier fabularnych. Świadomie zostawiliśmy na później portrety postaci, tryb wielu kwestii na ekranie naraz, cofanie rozmowy i nawigację wyborów klawiaturą. Ale rdzeń jest gotowy: rozmowy, wybory i pamięć fabularna, w dowolnym języku, składane w całości w Moonlight Animate.