Lekcja 16 – Zmienne

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:

  1. każda gra zaczyna ze wszystkimi zmiennymi ustawionymi na 0;
  2. dopóki nie jest spełniony warunek na drugiej stronie zdarzenia Nerwus, odtwarzamy pierwszą stronę;
  3. 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.);
  4. po pięciu zagadaniach do tej postaci, zmienna osiągnie wartość 5;
  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;
  6. 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

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.