Silnik gier: formatowany tekst — dialogi z kolorem i ruchem
Zaraz po polu tekstowym silnik gier 2D Moonlight Studio dostał drugą połowę układanki dialogowej: RichTextLabel — etykietę z formatowanym tekstem do okien dialogowych, opisów przedmiotów i napisów fabularnych.
Znaczniki wprost w treści
Formatowanie wpisuje się w tekst dialogu, bez żadnego dodatkowego API:
[color=#ffd24a]Złoto[/color]— barwi fragment (z kanałem alfa przez#RRGGBBAA; znaczniki można zagnieżdżać),[wave]woda faluje[/wave]— litery płynnie bujają się na sinusoidzie,[shake]lawa parzy![/shake]— litery drżą (strach, żar, trzęsienie ziemi),\nłamie linię, a ustawienie szerokości pola włącza automatyczne zawijanie na spacjach.
Ruch napędza czas gry — w pauzie litery zamierają, a drżenie jest w pełni deterministyczne (bez losowości), więc powtórki i nagrania wyglądają identycznie.
Maszyna do pisania jedną linijką
Klasyczny efekt dialogu, który „pisze się sam", to w naszym silniku jedna właściwość: mp.set(pole, 'visible_chars', n) pokazuje pierwsze n znaków. Skrypt zwiększa n w czasie — i gotowe, bez timerów w silniku i bez specjalnego API.
Odporność zamiast niespodzianek
Parser nie gubi treści: nieznany albo błędny znacznik rysuje się dosłownie, samotny nawias [ w tekście nie psuje późniejszych znaczników, a złośliwie spreparowane pliki scen (gigantyczne ciągi nawiasów, absurdalne rozmiary fontu) są przycinane i przetwarzane w czasie liniowym — playerowi nie drgnie klatka.
Co dalej
Pogrubienie i kursywa (wymagają wariantów fontu) oraz pełne polskie znaki w foncie przyjdą w kolejnych wersjach. Fundament dialogów — pole tekstowe plus formatowana etykieta — jest już kompletny.