Spis treści
Istnieje wiele sposobów na poinformowanie gracza o tym, jaki przedmiot otrzymał właśnie od NPC-a, znalazł w skrzyni albo wydobył z martwego przeciwnika. W większość rpgmakerowych gier załatwia się to zwykłą wiadomością z komendy Show Text. Najbardziej pracowici twórcy tworzyli ogromne ilości obrazków, które następnie wyświetlali w odpowiedni sposób na ekranie. Jest to jakieś wyjście, zwłaszcza od czasu, gdy RM2k3 wprowadził spritesheety. Dzięki Maniacs Patchowi istnieje jednak o wiele prostsze, szybsze i efektywniejsze wyjście. Wykorzystamy je jako pretekst, by poznać trzy fantastyczne funkcje, które otrzymaliśmy od BingShana.
Dzięki temu poradnikowi poznasz, jak działają:
- TkoolPartialCompiler (TPC);
- zmienne tekstowe (string variable);
- obrazki tekstowe (string picture).
TkoolPartialCompiler
Jeśli poprawnie zainstalowano Maniacs Patcha, w miejscu, gdzie można wpisywać komendy po kliknięciu prawym przyciskiem myszy powinny pojawić się opcje odnoszące się do TPC. Niestety, samo TPC nie jest instalowane razem z patchem i trzeba to zrobić osobno. Procedurę instalacyjną opisał Axer w czwartej części naszego poradnika.
W duży skrócie – wchodzimy na stronę autora i wybieramy po lewej drugi link od góry. Na dole pod Patchami znajduje się sekcja TPC. Z niej wybieramy najnowszą wersję pliku nazwanego „tpc_tujakieścyferki(uploader.jp)”. Na nowej stronie klikamy w button pod sekcją MD5. Po ściągnięciu wypakowujemy plik .zip. Znajdujący się w nim plik tpc.exe kopiujemy do folderu, w którym znajduje się nasz zainstalowany Maniacs Patch. I to tyle! Teraz po kliknięciu prawym przyciskiem myszki w polu komend pojawi się nam taki wybór:
Jeśli wybierzemy Create with tpc, pokaże się nam okienko, w którym możemy wklepywać kod:
To tyle, jeśli chodzi o przygotowania. Bierzemy się za kodowanie!
Zmienne tekstowe
Maniacs Patch w pewnym momencie wprowadził znane z języków programowania zmienne tekstowe. Działają one podobnie jak tradycyjne zmienne, tylko zamiast liczb przechowują jakiś ciąg znaków. Może to być imię, cała wypowiedź albo… cyfra. Bardziej szczegółowo o zmiennych tekstowych pisze Axer w przywoływanym już poradniku.
Chcemy, by nasz skrypt był jak najbardziej zautomatyzowany. Dzięki temu przy zmianie nazw przedmiotów albo sposobu informowania o ich zdobyciu nie będziemy musieli odwalać drugi raz ogromnej pracy, co ma miejsce np. przy tworzeniu całego zbioru obrazków z przedmiotami.
Mój pomysł jest taki, by nazwa zdobywanego przez gracza przedmiotu znajdowała się właśnie w zmiennej tekstowej. Jak się bowiem okazuje, zmienne tekstowe możemy wyświetlać w wiadomości tak samo jak zmienne liczbowe! W tym drugim przypadku posługujemy się wyrażeniem „\v[numer zmiennej]”. Dla zmiennych tekstowych będzie to natomiast „\t[numer zmiennej]”.
No dobrze, ale jak umieścić jakieś dane w zmiennej tekstowej? Tutaj wracamy do TPC i zabawy w programowanie!
Użycie TPC do stworzenia zmiennej tekstowej
Jak dowiadujemy się od Axera, wpisanie jakiejś wartości do zmiennej tekstowej jest banalnie łatwe. W otwartym edytorze TPC wystarczy wpisać np. taki kod:
t[1] .asg „item”
Po kliknięciu OK w polu komend pojawi się taki zapis:
Co właściwie zrobiliśmy? Do zmiennej tekstowej o numerze 1 wpisaliśmy treść zawartą w cudzysłowie, czyli słowo „item”. Przypisaniem wartości do zmiennej zajmuje się komenda .asg, która jest skrótem od angielskiego słowa assign. Z czasem wpisywanie tego i innych wyrażeń stanie się waszym nawykiem, ale na tym etapie nie musicie zapamiętywać tej składni. Po prostu zapiszcie sobie gdzieś tę komendę.
Przypisanie do zmiennej tekstowej nazwy przedmiotu
Teraz przechodzimy już do stworzenia właściwego skryptu. W common evencie (Trigger ustawiamy na None), który nazwiemy „Item”, ponownie otwieramy TPC i wpisujemy następujący fragment:
t[1] .asg .item[1] .name
Dwa pierwsze elementy tego kodu już znasz – to wybór zmiennej tekstowej o numerze 1 oraz komenda odpowiadająca za przypisanie jej jakiejś treści. Stwierdzenie „.item[1]” oznacza, że przypisujemy do wybranej zmiennej coś związanego z przedmiotem, którego ID w bazie danych wynosi 1. A co konkretnie przypisujemy? Jego nazwę, stąd „.name”. Dzięki tej komendzie w naszej zmiennej znajdzie się nazwa przedmiotu o ID 1 – zawsze aktualna, ponieważ pobierana bezpośrednio z bazy danych.
Jeśli chcesz sprawdzić, czy ten skrypt rzeczywiście działa, dodajmy nową wiadomość o treści „\t[1]”.
Jeśli wszystko poszło dobrze, powinniśmy otrzymać taką wiadomość:
Już na tym etapie nasz skrypt jest całkiem pomocny, ponieważ zawsze pobiera aktualną nazwę przedmiotu z bazy danych. Wciąż jednak jest dla mnie za mało automatyczny. W jego obecnym kształcie musielibyśmy bowiem dla każdego przedmiotu z bazy tworzyć warunki i wklepywać osobną komendę. Jak to zmienić?
Wyjście dla ludzi niezwiązanych z programowaniem może nie być oczywiste. Nasz kod w TPC musimy zmodyfikować tak, by ID przedmiotu, do którego się odwołujemy, było przechowywane w zmiennej. W praktyce wygląda to tak:
t[1] .asg .item[v[1]] .name
Mówiąc fachowym językiem, zagnieździliśmy zmienną o numerze 1 w wyrażeniu .item, dzięki czemu cała komenda będzie przypisywała do zmiennej tekstowej nazwę tego przedmiotu, którego ID mamy akurat w zmiennej liczbowej o numerze 1.
Jeśli teraz odpalicie program, wyskoczy wam błąd z informacją o tym, że nie ma zmiennej o numerze 0. Dlatego przed naszą komendą z TPC umieśćmy standardowe Control Variables, przypisując do zmiennej o ID 1 jakiś numer, np. 5.
Gdy teraz odpalimy grę, wszystko będzie jak należy!
Dla części z was pewnie moje tłumaczenie jest zbyt łopatologiczne, ale mam nadzieję, że w ten sposób pomogłem tym osobom, które niezbyt dobrze czują się w językach programowania.
String Picture
Czyścimy nasz common event i zostawiamy w nim tylko fragment wpisany w TPC. Teraz musimy pomyśleć, jak pokazać naszą informację na ekranie. Możemy oczywiście zrobić to w zwykłej wiadomości, ale sami musicie przyznać, że nie jest to zbyt eleganckie. Dlatego wykorzystamy kolejną niesamowitą opcję od BingShana – Show String Picture! Komenda znajduje się na ostatniej, czwartej stronie komend.
Jej omawianie zacznijmy od końca, czyli od trzeciej zakładki:
Znajdują się tutaj informacje o wybranej grafice z kategorii Ѕystem (możemy wybrać dowolną wgraną grafikę, nie tylko taką, którą wykorzystujemy do wyświetlania dialogów) oraz o sposobie wyświetlania tła. Cztery opcje na dole odpowiadają za wyświetlanie ramki, marginesy, kolor czcionki i cień za literami. Póki co zostawiamy wszystkie opcje zaznaczone. Przechodzimy do środkowej zakładki.
Jak widzicie, w polu Text wpisałem kilka znaków i kliknąłem Update, byśmy mogli zobaczyć, jak wygląda na chwilę obecną String Picture. Pola Effects i Display Settings znacie już z klasycznej komendy Show Picture. W polu Font możemy wprowadzić różne opcje wyświetlania tekstu związane z czcionką – zmienić jej krój, rozmiar czy odstępy między znakami. Na tę chwilę zostawiamy wszystko tak, jak jest. Włączamy kartę numer 1.
To miejsce, gdzie spędzicie najwięcej czasu, ponieważ tutaj właśnie ustalana jest pozycja obrazka na ekranie. Praca z tą zakładką jest o tyle trudna, że (przynajmniej u mnie) podgląd nie uwzględnia modyfikacji miejsca pojawienia się obrazka.
Najpierw uzupełnijmy pole Text o komunikat, który chcemy pokazać graczowi. Zamiast nazwy przedmiotu wstawiamy wyrażenie „\t[1]”. Pole tekst uwzględnia kolorowanie czcionki znane z normalnych wiadomości, dlatego możemy dodatkowo wyróżnić komunikat jakimś kolorkiem.
Podgląd nie wyświetla nazwy przedmiotu, ponieważ obecnie w zmiennej tekstowej o numerze 1 nie ma żadnego ciągu znaków.
Po lewej możemy ustawić sobie numer obrazka (ja zostawiam go na 1). W Display Position proponuję w pierwszym menu zostawić Constant, X = 160, a Y = 120. Opcje te wskazują środek ekranu, a chcemy, by nasza wiadomość znajdowała się na samym środku. W drugim menu zostawiamy Center – ta druga lista wyrównuje pozycję naszego tekstu w zależności od tego, jak jest długi. Trudno to wytłumaczyć tak, by zabrzmiało intuicyjnie. Po prostu zróbcie teraz tak, jak mówię, a później możecie z tym poeksperymentować.
Picture Size odpowiada za wielkość okna z wiadomością. Dopóki nie opanujecie dobrze tej komendy, proponuję zostawić tu po prostu Auto. Zoom zostawiamy na 100%, a Transparency na 0. Pamiętajcie, by zaznaczyć opcję Use Transparent Color, inaczej na ekranie pojawi się przezroczysty kolor, który wskazywaliście przy imporcie pliku Ѕystem. Komenda powinna wyglądać tak:
Wywołanie skryptu
Jeśli pamiętaliście, by z powrotem ustawić Trigger w common evencie na None (w pewnym momencie na screenach był tam Autostart, by łatwiej testować naszą pracę), stwórzcie teraz zdarzenie na mapie. Może to być człowiek, skrzynia lub cokolwiek innego. Ważne, by zawierało w sobie dwie komendy – przypisanie zmiennej o numerze 1 ID przedmiotu, który chcemy dostać, oraz wywołanie naszego common eventa.
Po zagadaniu do naszej złodziejki powinniśmy otrzymać taki komunikat:
Dopieszczanie skryptu
To oczywiście nie koniec naszej pracy. Skrypt jest efektowny, ale… nie daje graczowi przedmiotu, który wyświetla się na ekranie! Możemy to załatwić jedną prostą komendą Change Items:
Dzięki takiemu rozwiązaniu wykorzystujemy ID przedmiotu, które i tak mamy już w zmiennej.
Musimy jeszcze zrobić dwie rzeczy – ruch obrazka i jego usuwanie. W tym pierwszym przypadku ograniczymy się do pojawienia się tekstu przez sekundę i odegrania dźwięku. Bardziej urozmaicony ruch można zrobić bawiąc się pozycją obrazka na ekranie.
Najpierw modyfikujemy komendę Show String Picture w ten sposób, że przezroczystość ustawiamy na 100 %, a następnie przy pomocy Move Picture zmieniamy ją na 0. Jak natomiast poradzić sobie z usunięciem obrazka? Wprowadzamy komendę Wait i zaznaczamy opcję Wait for Key Input, a na koniec usuwamy obrazek przy pomocy komendy Erase Picture.
Podsumowanie
Podsumujmy. Dzięki Maniacs Patchowi i TPC stworzyliśmy skrypt, który umożliwia tekstowe wyświetlanie informacji o zdobytych przedmiotach, przy czym przedmiotów tych może być dowolna liczba dostępna w bazie danych. Nie wykorzystaliśmy żadnych obrazków ani dodatkowych grafik, treść wiadomości można zmienić jedną komendą, a skrypt na bieżąco pobiera aktualne nazwy z bazy.
Te ogromne możliwości zostały zamknięte w 9 linijkach kodu!
Zdaję sobie sprawę, że ten poradnik jest trochę przegadany i pewne rzeczy są aż nazbyt łopatologicznie tłumaczone. Moim celem było jednak przekonanie was, że Maniacs Patch i TPC to narzędzia, z których warto korzystać. Axer i Soul dobrze opisali funkcje, które wprowadził BingShan. Zachęcam do ich twórczego wykorzystywania!
Michał „Michu” Wysocki
– Download przykładowego projektu –
A ja tam lubię jak wsio jest dokładnie wytłumaczone, nawet wtedy kiedy znam temat i nie potrzebowałbym tak dokładnego tłumaczenia. Zawsze też istnieje szansa, że nawet znając dobz re temat, nadal jest coś co wcześniej umknęło, a artykuł tłumaczący dokładnie wszystko nas o tym uświadomi. Co do samej metody, to raczej nie skorzystam (nadal czuję niechęć do najnowszych maniaców), ale tekst jak najbardziej mi się podoba, może komuś się przydać. W sumie teraz brakuje mi jednej rzeczy, ale tego na pewno bingshan nie doda, bo pewnie byłoby to trudne, albo niemożliwe – wyświetlania zmiennych tekstowych w edytorze w komentarzach, aż prosi się żeby zaraz pod ustawieniem id przedmiotu dodać komentarz z opisem jaki dokładnie przedmiot kryje się pod tym id, ale póki co trzeba by to robić ręcznie.
Przyznam, że ten artykuł w swoim prostym wyjaśnieniu instalacji TPC zachęcił mnie aż do spróbowania ponownie sił w sprawdzaniu zmiennych tekstowych. Dzięki za tutorial Michu!