O Twea(r)kingu jeszcze więcej – by FrozenShade

Pod moim postem o tweakingu różnych rzeczy pojawił się świetny komentarz FrozenShare (współtwórcy SkullStone, którego trailer ostatnio zamieściłem).
Oto ten komentarz:

Parametry broni, lokalizacja… Myślę, że będę miał tu coś ciekawego do powiedzenia. Posłużę się przykładem z mojej gry Skullstone.
Broń w grze posiada kilka parametrów: jakiś bazowy damage, rodzaj, odległość (w polach gry) na jaką poleci, gdy zostanie rzucona oraz kilka innych parametrów związanych z mechaniką. Wszystko to trzymane jest w pliku XML.
Taka broń (jak i inne przedmioty) musi też posiadać garść innych informacji, np ikonkę – jej nazwę i ścieżkę (względną do zasobów gry) można z powodzeniem trzymać we wspomnianym pliku. No a co z nazwą? Nazwa oczywiście też…. I tu pojawia się problem multilanguage – jak to trzymać?

Można każdemu tekstowi w grze nadawać jakiś identyfikator i wszystkie teksty dla danego języka trzymać w osobnych plikach. Rozwiązanie to stosuję… w prostych programach okienkowych gdzie jedynymi tekstami są komunikaty oraz napisy na przyciskach i w okienkach – bo w grach tego tekstu przeważnie jest więcej. Musimy tłumaczyć nie tylko nazwy przedmiotów ale i napisy na GUI, dialogi, jakieś hinty….

A co jeśli by potraktować tekst jako obiekt?
Wracając do wspomnianego itemka w pliku XML, zamiast pisać <name>nazwa itemka</name> można przecież napisać <name><pl>nazwa itemka</pl><en>item name</en></name> a znacznik ‘name’ potraktować jako konstruktor obiektu klasy np. MultilangString. Teraz wystarczy ‘jakoś wykombinować’ (w różnych językach robi się to inaczej) żeby obiekty tej nowej klasy mogły się dodawać do obiektów String (zwykłe łączenie tekstu) i żeby podczas tej operacji był sprawdzany aktualny język (trzymany w jakimś globalnym statiku) i mamy multilang zrobiony praktycznie bezboleśnie z poziomu kodu oraz łatwy w edycji z poziomu plików.
Teksty we wszystkich plikach (dialogi, questy, opisy przedmiotów) zawierały by odpowiednie znaczniki <pl>, <en> i ewentualnie inne, przy dodawaniu obsługi nowego języka dodajemy po prostu nowy znacznik, np <fr> oraz zawartość, edytujemy na raz tylko jeden plik. Oczywiście nowy język musimy też dodać w kodzie… no chyba, że posunęliśmy się do stworzenia pliku z listą języków, gdzie dla każdego języka mamy jego nazwę oraz… znacznik 😉

Share Button