14.07.2026 19:16

Moonlight Animate — system dialogów w grach

⏱️ 3 min czytania
Udostępnij:

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.

📚 Powiązane posty

14.07.2026 22:19

Silnik gier: od szablonu do grywalnej gry RPG top-down

Startowy szablon silnika gier to teraz kompletny, grywalny wycinek gry RPG top-down: chodzenie po siatce, rozmowy z postaciami, przeciwnik goniący gdy...
Czytaj dalej →
14.07.2026 18:40

Moonlight Animate: ruchoma panorama dźwięku także w wyeksportowanym wideo

Dźwięk przejeżdżający z lewego do prawego głośnika brzmiał dobrze w podglądzie, ale eksport przez serwer zamrażał go w miejscu. Ostatnia luka parytetu...
Czytaj dalej →
14.07.2026 18:07

Moonlight Animate: zapisz fragment animacji jako gotowy element i użyj go wszędzie

Zbudowałeś fajną animowaną scenkę? Zapisz ją jako element — gotowy klocek, który wciągniesz do dowolnego innego projektu jednym przeciągnięciem. Progr...
Czytaj dalej →

📧 Bądź na bieżąco!

Zapisz się na listę oczekujących, aby otrzymywać powiadomienia o nowych postach na Dev Blog oraz informacje o starcie platformy Moonlight.