Spis treści
Przeglądając zarchiwizowaną wersję strony RM Tutorials trafiłem na tekst dotyczący licznika pokonanych przeciwników. Najpierw trochę mnie to zdziwiło, ponieważ byłem przekonany, że taka opcja jest dostępna standardowo w RM. Sprawdziłem i okazało się, że nie. RPG Maker 2003 umożliwia zliczenie odbytych walk, a Maniacs Patch – dodatkowo walk wygranych i przegranych. Nie ma jednak (a przynajmniej ja jej nie znam) komendy na podsumowanie ilu przeciwników pokonaliśmy.
Opcja bez Maniacs Patcha
Najpierw sposób prostszy, niewymagający Maniacs Patcha. Żeby zliczyć przeciwników pokonanych w standardowym systemie walki wystarczy przed jej rozpoczęciem w zakładce Troops (Warunek – Turn No. ustawiamy na 0) zwiększyć zmienną odpowiedzialną za liczenie przeciwników o liczbę tych przeciwników. Oznacza to, że w każdej grupie potworów musimy ustawić taką komendę. Wygląda to tak:
Z takim skryptem jest jednak pewien problem. Nie uwzględnia on sytuacji, w których potwór lub drużyna uciekli z walki. Do tego będziemy potrzebowali już Maniacs Patcha.
Przygotowania
Do naszego skryptu będziemy potrzebowali 15 zmiennych.
Są to:
- Monster Count – przechowuje liczbę pokonanych potworów w całej grze;
- Monster Party – przechowuje wartość zmiennej Monsters number w globalnym zdarzeniu, gdzie będziemy tworzyli nasz skrypt, odpowiada także za liczbę pętli;
- Monster HP – będziemy używać tej zmiennej do przechowywania aktualnej liczby HP sprawdzanego potwora;
- Monsters number – ta zmienna przechowuje liczbę przeciwników w danej grupie potworów;
- Num Switch – tutaj przechowujemy numer pierwszej zmiennej z tablicy zawierającej informacje o tym, czy dany potwór był już przez nas policzony do globalnej puli pokonanych przeciwników;
- Num Show – w tej zmiennej umieszczamy wartość zmiennej wskazanej przez Num Switch (korzystamy w tym zakresie ze wskaźników);
- Num Mon – zmienna służąca nam do liczenia przeciwników w grupie potworów;
- MON 1 – MON 8 – zmienne służące do zaznaczania, że dany przeciwnik został już pokonany i policzony.
W ramach przygotowań musimy jeszcze zrobić dwie rzeczy. W każdej grupie potworów, która ma być liczona, na początku walki musimy ustawić zmienną Monsters number na dokładną liczbę potworów. Jeśli ustawimy ją zbyt niską, część nie zostanie policzona, a jeśli zbyt wysoką – wystąpi błąd uniemożliwiający grę:
Druga rzecz to stworzenie Common eventa ustawionego na Parallel Process, który będzie zerował tablicę zmiennych MON 1 – MON 8. Z uwagi na to, że działa on na Parallel Process, nie będzie aktywny podczas potyczki w standardowym systemie walki.
Teraz możemy przejść do dania głównego.
Tworzymy licznik
Do tworzenia licznika musimy korzystać z Maniacs Patcha, ponieważ wprowadza on genialną opcję, której nie ma podstawowa wersja RPG Makera 2003 – możliwość tworzenia globalnych zdarzeń działających na zasadzie Parallel Process, ale w trakcie walki. To dzięki tej opcji zyskaliśmy niesamowite możliwości ingerowania w wygląd i działanie walki. Cały skrypt na licznik wygląda w następujący sposób:
Drugi Common event ustawiamy na Parallel (Battle), dzięki czemu będzie działał jako równoległe zdarzenie wyłącznie w walce. W pierwszej kolejności do zmiennej Monster Party przypisujemy wartość zmiennej Monsters number, którą ustawiamy w każdej grupie potworów. Nie jest to rzecz niezbędna, ale to dobra praktyka, ponieważ nigdy nie wiemy, czy podczas rozbudowy skryptu nie będziemy potrzebowali manipulować tą wartością. Następnie wartość zmiennej Num Switch ustawiamy na 11 (to numer pierwszej zmiennej z tablicy MON 1 – MON 8), a zmiennej NUM Mon na 0 (potwory w walce liczymy od 0, a nie 1), ponieważ będzie ona wskazywała pierwszego potwora z grupy.
Następnie ustawiamy pętlę, która będzie wykonywana tyle razy, ile potworów znajduje się w grupie (to kluczowy element, by gra się nie wykrzaczyła):
W pętli w pierwszej kolejności ustawiamy zmienną NUM Show na wartość zmiennej wskazywanej przez NUM Switch. Czemu to robimy? Ponieważ ustawiając warunek nie możemy użyć wskaźnika do ustalenia numeru przełącznika, działa to tylko w przypadku zmiennych (przynajmniej na mojej, dość archaicznej wersji Maniacs Patcha). Następnie wstawiamy warunek, w którym sprawdzamy, czy zmienna NUM Show jest równa 0, co oznacza, że aktualnie sprawdzany potwór nie został jeszcze wliczony do puli pokonanych wrogów. W przypadku pierwszego okrążenia pętli oznacza to, że wartość zmiennej MON 1 znajdującej się pod numerem 11 jest równa 0.
Wewnątrz tego warunku wstawiamy kolejną komendę, dość nieoczywistą. Do zmiennej Monster HP musimy przypisać wartość HP aktualnie wskazanego wroga (numer wroga wskazuje zmienna nr 7 – Num Mon). Jeśli odpalimy komendę Control Variables w Common Eventach bazy danych, nie będziemy mieli takiej opcji do wyboru, a w zakładce Troops nie będziemy mogli użyć wskaźnika. Najlepiej w takim razie skorzystać z TPC i wpisać następujący kod:
Powyższe moglibyśmy załatwić ośmioma warunkami przekopiowanymi z zakładki Troops, ale tak jest zdecydowanie prościej i szybciej.
Kolejna komenda to następny warunek, w którym sprawdzamy, czy zmienna Monster HP jest równa 0. Jeśli tak, oznacza to, że potwór został pokonany. Wewnątrz nowego warunku zwiększamy zatem globalny licznik pokonanych potworów o 1, a także przy pomocy wskaźnika ustawiamy odpowiednią zmienną z tablicy MON 1 – MON 8 na 1, dzięki czemu przy kolejnym odpaleniu pętli (która na Parallelu działa cały czas) nie będziemy zwiększać licznika o potwora, którego już raz policzyliśmy.
Dwie ostatnie komendy wstawiamy po zakończeniu obu warunków. Najpierw zwiększamy zmienną NUM Switch o 1 (czyli zmieniamy numer zmiennej odpowiadającej za sprawdzanie, czy dany potwór w tej walce został już policzony), a następnie o 1 zwiększamy NUM Mon (zmieniając w ten sposób numer potwora, którego HP będziemy sprawdzać).
Podsumowując, skrypt działa w następujący sposób:
- ustalamy, ile potworów znajduje się w danej grupie;
- ustawiamy zmienne wskazujące pierwszego potwora w grupie oraz pierwszą zmienną w tabeli;
- odpalamy pętle tyle razy, ile potworów jest w grupie
- wewnątrz pętli sprawdzamy, czy potwór wskazany w tabeli był już liczony;
- jeśli nie był liczony, sprawdzamy jego HP;
- jeśli jego HP wynosi 0, zwiększamy licznik zabitych potworów o 1 i zmieniamy jego zmienną w tabeli na 1;
- zwiększamy zmienne odpowiadające za kolejnego potwora przed kolejnym okrążeniem pętli.
Podsumowanie
Skrypt w mojej ocenie można podrasować i wymyślić jakiś sposób, by nie trzeba było ręcznie wskazywać liczby potworów w drużynie. Dodatkowo jeśli będziemy korzystali z umiejętności typu summon lub zwiększali liczbę przeciwników w trakcie walki, konieczne będzie dostosowanie skryptu do tych okoliczności. Na swoim obecnym poziomie zaprezentowane rozwiązanie powinno jednak w zupełności wystarczać.
Skrypt opiera się luźno na pomyśle Thejackyl.
Michał „Michu” Wysocki






