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

SkullStone trailer

Oto trailer gry zaprzyjaźnionego studia. Lajki i komentarze mile widziane, pozwoli im to dotrzeć ze swoją grą do większej ilości graczy.

Share Button

Tewa(r)king

Dobrą praktyką jest określenie zmiennych, które będziesz modyfikować jako designer do modyfikowania właściwości różnych elementów gry.

Powiedzmy, że posiadasz kilka broni w grze, które musisz zbalansować. Hardcodowanie wszystkiego jest złym pomysłem. W momencie projektowania mechaniki broni, postaraj się określić parametry, które będziesz chciał zmieniać. Niech to będzie szybkostrzelność, celność, odrzut itd… Niech kod odnosi się do pliku tekstowego, xmla, tabelek, które będzie Ci łatwo edytować.

Podobnie sprawa ma się z lokalizacjami językowymi. Nie umieszczaj w kosie gry tekstu, a jedynie odwołania do plików lokalizacyjnych, aby móc łatwo tworzyć dodatkowe wersje gry. Trzeba jedynie pamiętać o tym planując UI, gdyż może okazać się, że to, co w jednym języku zajmuje 10 znaków w innym może zajmować 30.

Share Button