Moonlight Animate — tekst w grze po polsku i nie tylko
Do tej pory tekst wyświetlany w grze zbudowanej w silniku 2D Moonlight Animate — napisy, HUD, etykiety przycisków — rozumiał tylko podstawowy alfabet angielski. Polskie „ą, ś, ż", europejskie akcenty, typograficzne cudzysłowy „ " czy myślniki – — wychodziły jako pytajniki. Ten etap to naprawia: tekst w grze mówi teraz po polsku i w innych językach.
Skąd brały się pytajniki
Silnik trzymał gotowy zestaw obrazków liter — ale tylko dla znaków angielskich (95 znaków). Każdy bajt spoza tego zestawu zamieniał się na „?". Do tego tekst był liczony bajtami, a nie znakami — a polskie „ą" to w kodowaniu UTF-8 dwa bajty. Efekt: nie dało się napisać ani jednego zdania po polsku tak, by wyglądało poprawnie.
Co się zmieniło
Dekoder tekstu. Silnik dostał własny, jeden wspólny mechanizm zamiany bajtów na znaki (codepointy Unicode). Jest odporny na uszkodzone i celowo złośliwe dane — dowolny nieprawidłowy ciąg zamienia się na znak zastępczy „�" i nigdy nie wywraca gry ani nie czyta pamięci poza buforem. To ważne, bo pliki gry mogą pochodzić z zewnątrz.
Poszerzony zestaw liter. Z 95 znaków angielskich urósł do 343 glifów: pełny polski alfabet (ąćęłńóśźż), akcenty używane w językach europejskich, rumuńskie ș/ț oraz typografia — prawdziwe cudzysłowy „ ", półpauzy i pauzy – —, wielokropek …. Pisząc dialog nie musisz już podmieniać ich na proste zamienniki.
Tekst liczony znakami. Etykiety, przyciski, pole tekstowe, dialogi z formatowaniem i kontenery układu mierzą teraz tekst po znakach, nie po bajtach — więc ramki i zawijanie wierszy dopasowują się poprawnie do polskich napisów.
Formatowanie działa dalej. Znaczniki dialogów — kolor, efekt fali, drżenie tekstu — pozostają w prostym zapisie, a ich treść jest już w pełni wielojęzyczna. Możesz napisać kolorową, „falującą" kwestię po polsku.
Bezpieczeństwo i solidność
Ten fragment przeszedł ostry przegląd pod kątem błędów. Wychwycił i naprawił m.in.: przywrócenie sprawdzania pliku czcionki, zanim silnik go użyje (uszkodzona czcionka z paczki gry nie może już wyprowadzić silnika w pole), bezpieczne budowanie zestawu liter po jednym zakresie (eliminacja rzadkiego błędu przy czcionkach z brakami), oraz uodpornienie parsera formatowania na złośliwie spreparowany tekst. Nowe znaki objęte są zestawem testów granicznych, które pilnują poprawności dekodera.
Co dalej
To fundament, nie koniec. Kolejny krok to pismo azjatyckie (chińskie, japońskie, koreańskie) i emoji — wymaga zestawu liter budowanego „na żądanie", bo takich znaków są dziesiątki tysięcy. Na razie znak spoza obsługiwanego zakresu pokazuje się jako „?". A docelowo cała ta praca prowadzi do jednego: systemu dialogów — rozmów, kwestii i wyborów w grach fabularnych składanych w całości w Moonlight Animate.