Kurs ERM – cz. II – zmienne

Czas czytania: 5 minut

Witaj. Cieszę się, że dalej jesteś zainteresowany pisaniem skryptów pod WoGa i nie przeraziła cię jego fatalna składnia J. Plan na dzisiejszy dzień jest dosyć rozbudowany, więc zarezerwuj sobie co najmniej godzinę wolnego czasu. Zrozumienie tej części poradnika jest nieodzowne, jeśli będziesz chciał stworzyć bardziej skomplikowane skrypty niż zmiana statystyk czy przyrostu chłopa.

A więc, czego się dzisiaj nauczymy?

  • Czym są zmienne, jak ich używać i do czego służą
  • Jak wyświetlać zawartość zmiennych w oknach dialogowych
  • Czym są flagi, jak ich używać i do czego służą
  • Jak wykonać jakąś rzecz „pod warunkiem”
  • Jak można łatwo śledzić zawartość zmiennych

A więc, czym są zmienne?

Czasem istnieje konieczność zapamiętania czegoś. Np.: współrzędne miejsca, w którym toczyła się ostatnia bitwa. Do tego właśnie służą zmienne. Zmienne są „komórkami” w pamięci komputera, które są zarezerwowane do przechowywania informacji. W każdej chwili możesz coś zapisać do zmiennej, lub coś z niej odczytać. Możesz dokonywać także na nich wszystkich operacji arytmetycznych (dodawanie, odejmowanie, mnożenie, dzielenie).

W tradycyjnym języku programowania możemy utworzyć praktycznie nieskończenie wielką liczbę zmiennych. Niestety, twórcy WoGa operowali na kodzie maszynowym i nie mieli zbyt wielu możliwości. Wobec tego ilość zmiennych w ERM jest ograniczona. Zajmijmy się teraz rodzajami zmiennych, których będziemy używali najczęściej:

  • v1 – v1000 – standardowe zmienne, globalne, przechowujące liczby całkowite
  • w1 – w200 – zmienne bohatera (każdy bohater posiada własne)
  • z1 – z1000 – zmienne przechowujące tekst
  • y-1 – y-100 – zmienne lokalne (tylko w wyzwalaczach)

Istnieje także zmienna specjalna c, w której przechowywany jest numer aktualnej tury.

Powyżej padły dwa pojęcia – zmienna globalna i zmienna lokalna. Co one oznaczają? Otóż, zmienna globalna jest widoczna w obrębie całego skryptu. Możemy odczytac jej wartość w dowolnym momencie. Podobnie w dowolnym momencie możemy ją nadać. Wartość zmiennej globalnej mogą modyfikować także inne skrypty działające równolegle (np.: jeśli mamy włączoną Woglifikację). Zmienna lokalna natomiast „istnieje” tylko w obrębie danego wyzwalacza. Nie możemy jej odczytać poza wyzwalaczem. Są one także bezpieczniejsze. Zawsze, kiedy tylko możemy, powinniśmy używać zmiennych lokalnych.

Istnieje oczywiście więcej typów zmiennych niż te, które zostały wypisane powyżej. Zostaną one omówione w odpowiednim czasie. Teraz nie są nam do niczego potrzebne.

Zapis, odczyt ze zmiennych

Do operacji na zmiennych wykorzystujemy receiver !!VR. Spójrz na poniższą linijkę:
!!VRv10:S20;

Przypisuje ona do zmiennej v10 liczbę 20. Jeśli chcielibyśmy teraz dodać 10 do tej zmiennej ,napiszemy:
!!VRv10:Sd10;

Literka d oznacza, że chcemy dodać wartość do aktualnej wartości zmiennej. Ten sam efekt osiągnelibyśmy, gdybyśmy napisali:

!!VRv10:Sv10+10;

Podobnie, jak wyżej, możemy wykonywać inne działania arytmetyczne:

!!VRv10:Sv10-10; odejmowanie
!!VRv10:Sv10*10; mnożenie
!!VRv10:Sv10:10; dzielenie

Co zrobić, jeśli do zmiennej v10 chcemy zapisać wynik dodawania v20 i v30? Po prostu dodajemy te dwie zmienne:
!!VRv10:Sv20+v30;

Wyświetlanie zawartości zmiennych w oknach dialogowych

W poprzedniej części napisaliśmy prosty skrypt Hello World. Jak on działał? Gdy bohater wejdzie w lokalne zdarzenie, wyświetli się komunikat „Hello World”. Do wyświetlenia tekstu użyliśmy tam receivera: !!IF z komendą M. (!!IF:M). Przypomnijmy sobie, jak wyglądała linijka wyświetlająca komunikat:

!!IF:M^Hello world^;

Jeśli chcemy wyświetlić zawartość jakiejś zmiennej, musimy użyć znaku procenta % i napisać symbol zmiennej z dużej litery (np.: %V10). Spróbujmy.Użyj mapy z poprzedniego przykładu. Naszym celem będzie przypisanie zmiennej V10 wartości 100 przy uruchomieniu gry. Po każdym wejściu na pole ze zdarzeniem będziemy odejmowali 5 od wartości zmiennej. Aktualną wartość zmiennej będziemy wyświetlali.

Jeśli twój skrypt działa, tak jak na screenach powyżej, możesz sobie pogratulować. Właśnie zrobiłeś kolejny krok na drodze do stania się prawdziwym znawcą ERM.

Flagi – co to za tajemniczy twór?

W swoim zachowaniu flagi są nieco podobne do zmiennych. Też przechowują wartość. Jednakże w przeciwieństwie do zmiennych, flagi znają tylko dwie liczby, 1 i 0. Wydaje się więc, że ich wykorzystanie może być bardzo ograniczone. Po co nam coś, co może przechowywać tylko jedną z dwóch wartości? Otóż, flagi pozwalają nam na dwie rzeczy:

  • konstrukcję zaawansowanych warunków (co to jest, dowiesz się w następnym rozdziale)
  • Sprawdzenie stanu obiektu

Ciekawe zastosowanie ma flaga 1000. Odczytując jej wartość, możemy dowiedzieć się, czy aktualnym graczem jest komputer czy człowiek. Jakie to ma zastosowanie? Możemy np.: pominąć wyświetlanie okien dialogowych w wypadku, gdy skrypt wywoła gracz komputerowy. Dzięki temu możemy też graczowi komputerowemu dać jakąś premię, co by nie było za łatwo.

Aby przypisać wartość fladze, używamy receivera IF z komendą V.

!!IF:Vx/y;

x – numer flagi

y – wartość (0 lub 1)

Wartość flagi wyświetlamy podobnie jak wartość zmiennej. Po znaku % używamy Fx, gdzie x to numer flagi.

Warunki

Często jest tak, że jakąś możemy wykonać tylko wtedy, gdy zaistnieją odpowiednie okoliczności. Na przykład możesz coś kupić w sklepie, ale tylko wtedy, gdy masz odpowiednią ilość gotówki przy sobie. Podobne efekty możemy osiągnąć w ERM. Załóżmy, że naszym celem będzie danie 5000 punktów doświadczenia co dziesiątemu bohaterowi aktywującemu zdarzenie.

Aby sprawić, by dana komenda była wykonywana tylko wtedy, gdy dana zmienna będzie miała określoną wartość, tuż po receiverze dajemy znak &, następnie nazwę zmiennej i warunek. Np.:

!!IF&v10<10:M^Ta wiadomość zostanie wyświetlona tylko wtedy, gdy zmienna v10 jest mniejsza od 10^;

W naszym przykładzie użyjemy zmiennej lokalnej y1, do przechowywania liczby odwiedzin.

Co się dzieje w tym skrypcie? (numeracja linijek w opisie będzie taka jak w programie)

W szóstej linijce przypisujemy zmiennej y1 wartośc 1, kiedy zmienna ta ma wartość 0. Musimy tak zrobić, gdyż domyślnie wszystkie zmienne lokalne mają wartość zmienną. Bez tej linijki nasze wizyty byłyby numerowane od zera, a nie od jedynki.

Siódma i ósma linijka to wyświetlenie odpowiedniego komunikatu w zależności od liczby wizyt.

Dziewiąta linijka przyznaje 5000 pkt doświadczenia bohaterowi, jeśli jest to piąta wizyta.

Dziesiąta i jedenasta linijka zarządzają wartością zmiennej y1. Jeśli zmienna y1 jest większa lub równa 5, to przypisujemy jej wartość 1 (linijka 10). Jeśli wartość y1 jest mniejsza od 5, to zwiększamy jej wartość o 1 (linijka 11).

 ERM Vars Memory Editor

ERM Vars Memory Editor jest bardzo fajnym programem, który pozwala podejrzeć zawartość zmiennych w Wog. ERM Vars Memory Editor obsługuje zarówno starszego WoGa 3.58f jak i Erę. Gdy wybierzemy wersję swojej gry, musimy trochę poczekać, aż program znajdzie naszą grę.

Zadanie domowe

Spróbuj napisać skrypt, który:

  • Przy pierwszym odwiedzeniu zdarzenia czasowego daje bohaterowi 100 pkt doświadczenia
  • Przy każdym następnym odwiedzeniu zdarzenia czasowego daje n razy więcej punktów doświadczenia (gdzie n to liczba dotychczasowych odwiedzeń).
Opublikowany w WoG

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.