Dziś zajmiemy się chyba najważniejszym narzędziem każdego twórcy RM, który chciałby nadać swojemu projektowi nieco wyjątkowego kolorytu – zmiennymi! To, po przełącznikach, drugi element wspólny dla programów z serii RPG Maker i języków programowania. Gdy sam zaczynałem przygodę z programem (nie mając żadnej wiedzy informatycznej), bardzo trudno było mi zrozumieć, czym jest zmienna. Dziś używam jej tak instynktownie jak mrużę oczy na słońcu. Poproszę o skupienie i dokładne przeanalizowanie tej lekcji – dzięki temu poszerzycie swój warsztat na niespotykaną do tej pory skalę!
Czym są zmienne
Zmienna w RM to, w największym skrócie, liczba całkowita – dodatnia lub ujemna. Można ją potraktować jako takie pudełko, w którym znajduje się jedna z liczb z przedziału od -9999999 do 9999999. W RPG Makerze każda zmienna ma w danym momencie tylko jedną wartość, posiada także swoją nazwę oraz numer w bazie, podobnie jak przełączniki.
Tutaj musimy wytłumaczyć sobie pierwszą ważną rzecz. Na obrazku powyżej widzicie bazę zmiennych gry z ich numerami ID (czyli ich pozycjami w bazie). ID zmiennej nie powinno być mylone z jej wartością. Wartość zmiennej to liczba, która się w niej znajduje (dopóki tego nie zmienimy, wszystkie zmienne zaczynają z wartością 0). Przeanalizujmy to na przykładzie kartek papieru. W naszym projekcie z grą mamy trzy kartki papieru, na których narysowaliśmy różne liczby:
- pierwsza kartka ma narysowaną liczbę 23;
- druga kartka ma narysowaną liczbę -5;
- trzecia kartka ma narysowaną liczbę 140.
Mówiąc językiem RPG Makera, mamy zmienną o ID 0001 o wartości 23, zmienną o ID 0002 o wartości -5 oraz zmienną o ID 0003 o wartości 140. Jeśli do zmiennej 0001 dodamy zmienną 0003, otrzymamy wynik 163, a nie 4, jasne? Wszelkie operacje przeprowadzamy na wartościach poszczególnych zmiennych, a nie na ich numerach porządkowych (ID).
Operacje na zmiennych
Zmienne wykorzystuje się w prawie każdym aspekcie bardziej zaawansowanych projektów w RPG Makerze. Sam fakt, że istnieją, jeszcze nam nic nie daje. Musimy jakoś z nimi pracować. Służy do tego przede wszystkim komenda Control Variables, znajdująca się na pierwsze stronie listy komend, zaraz pod przełącznikami.
Wbrew pozorom okienko przedstawione wyżej jest całkiem proste. W pierwszym polu (Variable) ustawiamy, z którą zmienną chcemy dalej pracować:
- Single – wskazujemy konkretną zmienną ręcznie (skupcie się na tej opcji, jeśli nie rozumienie teraz pozostałych – nic nie szkodzi!);
- Batch – wskazujemy pewną grupę ID zmiennych (np. zmienne o ID od 2 do 34);
- Variable – wskazujemy zmienną, której ID znajduje się w innej zmiennej (jeśli w tym polu wskażemy zmienną 0001, której wartość to 5, program wykona działanie na zmiennej o ID 0005).
W polu Operation wskazujemy, jakie działanie chcemy wykonać na zmiennej:
- Set – przypisanie, czyli mówiąc po ludzku – ustawienie zmiennej na daną wartość;
- Add – dodawanie;
- Sub – odejmowanie;
- Mul – mnożenie;
- Div – dzielenie;
- Mod – uzyskanie reszty z dzielenia zmiennej przez liczbę ustawioną w polu Operand.
Wreszcie w polu Operand wybieramy, jaka liczba ma być przedmiotem działania na wcześniej ustawionej zmiennej:
- Constant – konkretna wpisana przez nas liczba;
- Variable – liczba znajdująca się we wskazanej zmiennej;
- Variable ID – liczba znajdująca się w zmiennej, której ID jest równe wartości wskazanej zmiennej;
- Random – losowa liczba z ustawionego przedziału;
- Item – liczba posiadanych lub wyekwipowanych przedmiotów danego rodzaju;
- Player – wartość jednej z cech wskazanego bohatera (np. poziomu doświadczenia);
- Event – położenie danego eventu na mapie i związane z tym wartości;
- Other – inne przydatne wartości takie jak ilość złota bohatera.
Podsumowując, każda operacja (działanie) na zmiennej składa się z trzech części:
Variable (zmienna, z którą chcemy coś zrobić)
+
Operation (co robimy ze zmienną)
+
Operand (liczba, o jaką zmieniamy zmienną)
Jeśli jeszcze jest to dla was zbyt pogmatwane, spokojnie. Czas na przykłady!
Wkurzony przechodzień
Na mapie tworzymy zdarzenie o nazwie Nerwus, któremu ustawiamy grafikę jakiegoś mężczyzny. W komendach wstawiamy mu prostą wiadomość w stylu „Siemaneczko Barnaba”. Na koniec eventu wstawiamy Control Variables, a w polu Variable wybieramy zmienną numer 0001 i nazywamy ją Nerwus. W polu Operation wybieramy Add, a w Operand – opcję Constant i wpisujemy liczbę 1. Dzięki temu za każdym razem, gdy zagadamy do Nerwusa, wartość zmiennej Nerwus zwiększy się o 1. Następnie tworzymy w tym evencie nową stronę, gdzie wśród Conditions wybieramy Variable 0001:Nerwus, poniżej ustawiamy Greater than or Equal to, a obok wpisujemy 5. Całość powinna wyglądać tak:
Całość, nie bójmy się tego określenia, skryptu działa następująco:
- każda gra zaczyna ze wszystkimi zmiennymi ustawionymi na 0;
- dopóki nie jest spełniony warunek na drugiej stronie zdarzenia Nerwus, odtwarzamy pierwszą stronę;
- na pierwszej stronie zdarzenia mamy wyświetlenie wiadomości oraz zwiększenie zmiennej 0001 o wartość 1 (po pierwszym zagadaniu zmienna będzie miała wartość 1, po drugim 2 itd.);
- po pięciu zagadaniach do tej postaci, zmienna osiągnie wartość 5;
- każde następnie podejście do Nerwusa będzie wywoływało drugą stronę zdarzenia, ponieważ zostanie spełniony jego warunek – zmienna 0001 będzie większa lub równa 5;
- druga strona zdarzenia także po każdym zagadaniu zwiększa zmienną 0001 o wartość 1, ale jako że nie mamy już innych stron w zdarzeniu, wciąż aktywowane będą komendy na stronie drugiej.
Studnia życzeń
No dobra, teraz stwórzmy zdarzenie z grafiką studni, która będzie dodawała bohaterowi losową liczbę pieniędzy. Jako pierwszą komendę ustawiamy Control Variables. Wybieramy zmienną 0002:Studnia, Operation ustawiamy na Set, a Operand na Random z przedziałem od 1 do 5. Następnie wybieramy znaną nam komendę Change Gold (dwie pozycje pod Change Variables), w operation wskazujemy Increase, a w Operand zaznaczamy pole Variable i wybieramy naszą zmienną numer 0002. Na koniec wyświetlamy wiadomość o treści „Znalazles w studni \V[2] Zlota!”
Jak działa nasza studnia? Najpierw losujemy liczbę od 1 do 5 i przypisujemy ją do zmiennej 0002 (dzięki komendzie Set zmienna zawsze będzie miała wartość od 1 do 5 – jeśli zostawicie dodawanie, wyniki będą się kumulować!). Następnie dodajemy graczowi tyle złota, ile wylosowała zmienna. Na koniec wyświetlamy komunikat o tym, ile złota dostał gracz. Zapis \V[2] oznacza, że w oknie wiadomości wyświetli się wartość zmiennej o numerze ID 0002.
Podwójny nerwus
Żeby usystematyzować zdobytą wiedzę, stwórzmy kolejny event o nazwie Blizniak Nerwusa. Może być taki sam, jak Nerwus, ważne jest jednak, by wykorzystać w nim inną zmienną. Dzięki temu liczba rozmów z poszczególnymi Nerwusami będzie liczona niezależnie od siebie. Strony w evencie powinny wyglądać tak:
Dzięki naszemu zabiegowi mamy w wiosce dwóch bliźniaków, których rozmowy z nami są zapisywane w zmiennych. Teraz zrobimy skrypt, który będzie nam pokazywał łączną liczbę rozmów z tymi osobami! Tworzymy nowy event i ustawiamy grafikę jakiegoś bohatera. Z Control Variables wybieramy nową zmienną i ustawiamy ją na wartość 0. Kolejną komendą do nowej zmiennej dodajemy wartość zmiennej Nerwus, a jeszcze następną – wartość zmiennej Blizniak. Następnie wyświetlamy komunikat tak, jak na załączonym screenie (wykorzystując komendę \V[numer zmiennej] w oknie wiadomości).
Działanie skryptu jest dość proste. Najpierw zmienną Suma ustawiamy na 0, a następnie dodajemy do niej liczbę rozmów z oboma bliźniakami. Możecie się zastanawiać, czemu ustawiać Sumę na 0, skoro na początku gry wszystkie zmienne i tak mają taką wartość. Taki zabieg wynika z szerszego myślenia o projektowanych skryptach. Jeśli nie ustawimy na początku zera, każda kolejna rozmowa z Lidią może powodować bugi, ponieważ liczba rozmów z bliźniakami będzie dodawana do wcześniejszych sum.
Podsumowanie
Wreszcie dobrnęliśmy do końca tej lekcji! Jeśli cokolwiek jest dla Was niezrozumiałe, spróbujcie przerobić ją jeszcze raz. Zawsze możecie także zapytać w komentarzach pod tym tekstem – w ramach moich możliwości postaram się pomóc.
Na koniec zadanie dla dociekliwych. Istnieje sposób, by skrypt na łączną liczbę rozmów w evencie z Lidią skrócić z trzech komend do dwóch. Ktoś wie, jaki?
W następnej lekcji – skrzynie i warunki!
ŚCIĄGNIJ PROJEKT Z LEKCJI
Michał „Michu” Wysocki