RPG Maker MV dla zaawansowanych: Lekcja 2 – Komendy

Temat przerabiania komend zaczęliśmy w poprzedniej części tego kursu, więc teraz przejdziemy do nieco trudniejszych przypadków. Zrobimy dwa ćwiczenia: dodanie losowego przedmiotu i losowa zmiana wyglądu aktora. Obie rzeczy są do zrobienia używając samych komend, ale wyklikanie tego typu mechanik jest dość żmudne.

Dodanie losowego przedmiotu

W RPG Makerze przez zmienną możemy sterować liczbą dodanych/usuniętych przedmiotów, ale już samo id przedmiotu musimy sztywno określić. W tym ćwiczeniu zrobimy script calla, który dodaje losowy przedmiot z przedziału 40-69.

Robimy teraz tak, jak poprzednio, kiedy szukaliśmy kawałka kodu odpowiadającego za wybraną komendę. W Visual Studio Code wciskamy CTRL+SHIFT+F i wpisujemy nazwę komendy czyli „Change Items”.

Tutaj jest nieco dziwniej niż w poprzednich ćwiczeniach. Mamy metodę pomocniczną operateValue, która najwyraźniej na podstawie ustawionych parametrów zwraca liczbę zdobytych przedmiotów. Ale my wiemy, ile sztuk chcemy dodać, więc to nas nie interesuje. Dlatego przeklejamy tylko drugą linijkę i zmieniamy value na pożądaną wartość.

$gameParty.gainItem($dataItems[this._params[0]], 1);

Teraz musimy zastanowić się, co wstawić w miejsce pierwszego parametru. Na ten moment przekazywany jest element tablicy $dataItems, która zawiera definicje wszystkich przedmiotów (właściwie wszystko to, co się znajduje w Database -> Items). Wybierany jest przez wartość this._params[0], której nie mamy w script callach, więc tę część musimy podmienić na identyfikator przedmiotu. Żeby wygenerować losowe id użyjemy funkcji Math.randomInt i dodamy do wyniku 40.

Ważne: tablice w JS zaczynają się od 0, jednak identyfikatory w RPG Makerze zazwyczaj zaczynają się od 1 i zajmują odpowiadające im indeksy (bo w RPG Makerze nic nie jest robione konsekwetnie). Z tego powodu $dataItems[0] jest po prostu puste.

$dataItems[40 + Math.randomInt(30)]

Dla czytelności wyciągamy ten przedmiot do zmiennej.

const item = $dataItems[40 + Math.randomInt(30)];

$gameParty.gainItem(item, 1);

Do liczby 40 dodajemy losową liczbę z przedziału 0-29, na podstawie tego wybieramy przedmiot z bazy i zapisujemy go do zmiennej item. Potem wywołujemy gainItem.

W efekcie powyższy script call dodaje nam jeden przedmiot z przedziału 40-69. Pełen sukces, możemy teraz przejść do drugiego ćwiczenia.

Losowa zmiana wyglądu postaci

RPG Maker pozwala nam zmienić obrazki aktora używając komendy Change Actor Images. Niestety możemy wybrać tylko konkretne grafiki i nie mamy możliwości powiązania tego np. ze zmienną.

W plikach gry szukamy nazwy komendy czyli „Change Actor Images”. Powinniśmy mieć dwa trafienia.

Interesuje nas to pierwsze wystąpienie (drugie to kod jakiegoś preloadera).

W pierwszej linii jest pobierany aktor. Tak jak w poprzedniej lekcji, wiemy, który aktor nas interesuje, więc możemy wpisać stałą liczbową zamiast parametru.

const actor = $gameActors.actor(1);

Potem jest warunek sprawdzający, czy aktor nie jest pusty. My jesteśmy pewni, że istnieje, więc możemy ten warunek pominąć.

Następnie wywoływana jest metoda setCharacterImage. Jakie przyjmuje parametry? Z jednej strony łatwo się domyślić z interfejsu RPG Makera, ale z drugiej ten artykuł ma w nazwie „dla zaawansowanych”, więc nauczymy się, jak takie rzeczy wyszukać wykorzystując narzędzia silnika. Jeśli kogoś to przeraża to można przeskoczyć te kilka obrazków.

Włączamy grę w trybie play test, potem wciskamy F12. Powinny pojawić się narzędzia developerskie, tam wybieramy konsolę i wpisujemy $gameActors.actor(1). Zatwierdzamy enterem. Powinien nam się pokazać obiekt reprezentujący pierwszego aktora. Rozwijamy drzewko klikając na małą strzałkę obok. Szukamy interesującej nas metody.

Ale na pierwszy rzut oka nie ma tam setCharacterImage. Są tutaj jedynie atrybuty należące do tego obiektu aktorem. Metody są w prototypie, który współdzielony między wszystkimi aktorami. Dlatego przewijamy na sam dół i rozwijamy atrybut __proto__.

Lista jest ułożona alfabetycznie, więc łatwo jest znaleźć tę metodę.

Przyjmuję, że jako characterName i faceName ograniczamy się jedynie do „Actor1” (losowanie obrazka to trochę więcej zachodu). No i robimy przygodówkę, więc battlera też nie zmieniamy (jeszcze więcej zachodu). Indeks to po prostu liczba od 0 do 7 (tym razem RPG Maker nie liczy od 1). Losujemy liczbę.

const index = Math.randomInt(8);

I ustawiamy wygląd aktora.

const actor = $gameActors.actor(1);

const index = Math.randomInt(8);

actor.setCharacterImage(’Actor1′, index);

actor.setFaceImage(’Actor1′, index);

$gamePlayer.refresh();

W obu metodach jako pierwszy parametr przekazujemy nazwy plików, które mamy kolejno w katalogach img/characters i img/faces (bez rozszerzenia png). Na końcu jest też odświeżenie gracza (tak samo jak w kodzie komendy powyżej).

Ważne: Gracz to nie to samo, co aktor. Aktor to obiekt z bazy danych gry. Natomiast gracz to obiekt na mapie, który zwykle ma wygląd aktora będącego liderem drużyny.

Szatkus

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Ta strona używa Akismet do redukcji spamu. Dowiedz się, w jaki sposób przetwarzane są dane Twoich komentarzy.