14.07.2026 19:16

Moonlight Animate — system dialogów w grach

⏱️ 3 min read
Share:

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.

📚 Related posts

23.07.2026 19:40

Moonlight Animate: zapis, który mówi, i eksport, który pokazuje

Ctrl+S wreszcie zapisuje po cichu, każdy zapis potwierdza nazwę i wagę pliku, a nowy dialog „Eksportuj jako” pokazuje zakodowany wynik i dokładny rozm...
Continue reading →
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...
Continue reading →
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...
Continue reading →

📧 Stay up to date!

Join the waitlist to get notified about new Dev Blog posts and Moonlight platform launch.