14.07.2026 16:22

Moonlight Animate — tekst w grze po polsku i nie tylko

⏱️ 3 min czytania
Udostępnij:

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.

📚 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 19:16

Moonlight Animate — system dialogów w grach

Silnik gier 2D w Moonlight Animate ma teraz kompletny system dialogów: kwestie z efektem maszyny do pisania, wybory z warunkami, zmienne fabularne i g...
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 →

📧 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.