Maniacs Patch nie gryzie #2 – Nowe Control Variables

Hej, dawno się tutaj nie spotkaliśmy. Mam nadzieję, że jakoś się tam trzymacie na tej kwarantannie. Rave i Axer przypomnieli mi o okienku, o którym zapomniałem napisać w poprzedniej części tutoriala. Ale to nawet dobrze, bo dzięki temu mogę poświęcić na nie zdecydowanie więcej miejsca. Jest okazja, aby nauczyć się czegoś, co przyda się każdemu ambitnemu dłubaczowi w RM 2k3. Tak właśnie sądzę, więc przygotujcie wasze płaty ciemieniowe na nową porcję informacji!

Jak to włączyć??!!

Najważniejszym aspektem nowego okna, oprócz oczywistej przebudowy interfejsu, w której wszystko znajduje się na jednej karcie, jest dodanie opcji Expression. Opcja ta pozwala nam zapisać operacje matematyczne i logiczne w elegancki sposób, za jednym zamachem. Przy większych systemach w RM2k3 często spotykamy się z tym, że musimy wyklikiwać Control Variables dziesiątki razy, co męczy nasze drogocenne nadgarstki i palce. Teraz to już przeszłość. Wystarczy w edytorze, na którego wcześniej został nałożony Maniacs patch, zaznaczyć tę opcję z górnego menu:

I już! Okno Control Variables jest po tuningu!

Mięsko, czyli kotlecik drobiowy

Dwa przykłady, które widzicie mają zupełnie to samo działanie. Ustawiają zmiennej o numerze 1 wartość 2+3 czyli 5.

Okienko V[expr] oznacza, że wynik naszych obliczeń w tym polu zostanie użyty do określenia numeru zmiennej, na której chcemy operować. Obliczenia w tym polu są wykonywane wcześniej.

Jest to moim zdaniem trochę mylące, ponieważ w okienku expr możemy operować na wielu zmiennych na raz. Natomiast jeżeli zostawimy pole V[expr] puste, to musimy pamiętać, że komenda w oknie zdarzeń będzie wyglądać tak:

To też nie jest zbyt czytelne. W tym przypadku też nie ma znaczenia, co wybierzemy w Operations, czy będzie to Set, Add, Sub itd. Bo i tak operacja jest zdefiniowana niżej, a zmienna o numerze 0 nie istnieje.

W dalszej części tutoriala wszelkie operacje będę przeprowadzał tylko w polu expr. Jest to czytelniejsze, przynajmniej na potrzeby tutoriala, przy normalnej pracy możliwe, że jest zupełnie odwrotnie.

Jeszcze warto wspomnieć o takim przypadku:

Tutaj zmienna o numerze 1 zostanie ustawiona na 5, a na zmiennej o numerze 2 zostanie wykonana operacja v[2] -= v[1]. Czyli od zmiennej 2 zostanie odjęte 5 (wartość na jaką ustawiliśmy v[1]).

Wcześniej pojawił się zapis: v[1] = 2 + 3. v[] oznacza, że odwołujemy się do jakiejś zmiennej. W tym przypadku do zmiennej o numerze 1. No i ustawiamy ją na wynik działania 2 + 3, czyli 5.

Jeszcze warto wspomnieć o przycisku Test. W przypadku, jeżeli popełniliśmy jakieś błędy składniowe przy wpisywaniu wyrażenia to otrzymamy komunikat (po angielsku) o tym, co jest nie tak.

Możemy tez się odwoływać do przełączników. W tym przypadku ustawiamy przełącznik o numerze 2 na wartość True. (True to 1, a False to 0).

Istnieje też i ma się dobrze operator zasięgu, czyli dwie kropeczki. Na tym przykładzie ustawiam zmienne 1, 2 i 3 na wartość 8.

Jakby ktoś nie uwierzył, to wstawiam screen z okna debug (F9).

Tutaj przypisujemy trzy różne liczby do trzech różnych zmiennych:

Robimy to za pomocą tak zwanej „tymczasowej tablicy”, która przechowuje kilka wartości. Jest to właśnie to, co zapisaliśmy jako [2, 4, 6].

Zagadka

A teraz, Drodzy Czytelnicy, zagadka!

Jaką wartość przyjmie v[1]?

v[1] = [v[2] = 3, v[3] = 6, 3][2] + v[2] + v[3]

v[1] przyjmie wartość równą 12. Dzieje się tak, ponieważ indeksy „tymczasowej tablicy” numerowane są od 0. Pod indeksem 0 jest v[2], pod 1 v[3], a pod 2 jest liczba 3. To [2] oznacza, że z tablicy wybieramy właśnie element pod indeksem 2.

Możecie pomyśleć, no dobra, ale po co to stosować? Otóż, w Expression, możemy wpisać tylko jedno wyrażenie. Przedstawiony sposób to swojego rodzaju oszukanie tego systemu i takim sposobem od razu ustalamy wartości zmiennych v[2] = 3 i v[3] = 6 a w dodatku wykonujemy działanie i jego wynik wstawiamy do v[1] – (12).

Kolejny ficzur, który na pewno warto znać, to fakt iż możemy dowolnie zagnieżdżać w sobie v[].

Pozwala to uzyskać ten sam efekt, co użycie Variable ID. Czyli nie odwołujemy się bezpośrednio do wartości zmiennej, ale pobieramy wartość ze zmiennej o tym indeksie. Co ważne, działa to tylko w najnowszej wersji Maniacs Patcha, więc jak zpatchowaliście swoje projekty wcześniej, to możliwe, że będzie trzeba to zrobić jeszcze raz.

Operator && (operator i)

Tutaj ponownie używamy tricku z „tymczasową tablicą”, aby poustawiać zmienne do przykładu. Operator && działa w taki sposób, że jeżeli wartość po lewej jest różna od 0 to wynikiem jest wartość po prawej, natomiast jeżeli wartość po lewej jest równa 0 to wynikiem jest 0. Czyli jako całość to wyrażenie zwróci 0 bo v[2] + v[2] to 0.

Operator || (operator lub)

Operator || działa inaczej. Jeżeli wartość po lewej jest różna od 0, to zwraca wartość po lewej, jeżeli wartość po lewej jest równa 0 to zwraca wartość po prawej. W tym przypadku wynikiem będzie 1.

Dodatkowe mięsko na dokładkę

Teraz już mniej logiki i działań, a więcej przydatnych funkcji:

  • – zmienia znak liczby lub odejmuje, jeżeli użyty pomiędzy dwoma liczbami/zmiennymi;
  • ! zmienia dowolną zmienną różną 0 na 0, a zmienną równą 0 zmienia na 1.Podobnie działa dla przełączników( 0 na 1, 1 na 0);
  • ~ negacja bitowa;
  • + dodawanie;
  • * mnożenie;
  • / dzielenie całkowite;
  • % reszta z dzielenia całkowitego;
  • | bitowe „lub”;
  • & bitowe „i”;
  • ^ bitowe „XOR”;
  • << bitowe przeniesienie w lewo;
  • >> bitowe przeniesienie w prawo;
  • == równe;
  • != różne;
  • < mniejsze;
  • > większe;
  • >= większe lub równe;
  • <= mniejsze lub równe.

Enemy (id, typ). Zwraca informacje o przeciwniku o danym id:

  • 00: HP;
  • 01: MP;
  • 02: Max HP;
  • 03: Max MP;
  • 04: Atak;
  • 05: Obrona;
  • 06: Magia;
  • 07: Zręczność;
  • 08: ID (z bazy danych);
  • 09: stan paska ATB.

Misc (typ):

  • 00: Pieniądze;
  • 01: Pozostały czas licznika czasu 1;
  • 02: Ilość bohaterów w drużynie;
  • 03: Ilość zapisów;
  • 04: Ilość walk;
  • 05: Ilość wygranych;
  • 06: Ilość porażek;
  • 07: Ilość ucieczek;
  • 08: MIDI czas ticku;
  • 09: Pozostały czas licznika czasu 2;
  • 10: Data;
  • 11: Czas;
  • 12: Ilość klatek, które upłynęły (łącznie);
  • 13: Wersja patcha.

Math:

  • Pow (a, b) – podnosi a do potęgi b;
  • Min (a, b) – mniejsza z dwóch liczb;
  • Max (a, b) – większa z dwóch liczb;
  • Abs (a) – wartość bezwzględna;
  • Sqrt (a, b) – pierwiastek z a pomnożony razy b;
  • Sin (a, b, c) – sinus a/b pomnożony razy c;
  • Cos (a, b, c) – cosinus a/b pomnożony razy c;
  • Atan2 (a, b, c) – atan2 a/b pomnożony raz c;
  • Clamp (a, b, c) – jeżeli a < b to ustawia a na b, jeżeli a > c to ustawia a na c;
  • Warunek? Wartość jak spełniony:wartość jak niespełniony – zwraca jedną z dwóch wartości zależnie od warunku;
  • Rnd (a, b) – zwraca losową liczbę między a i b.

Item (id, typ):

  • 00: Czy posiadany;
  • 01: Ilość.

Actor (id, typ):

  • 00: Poziom;
  • 01: Doświadczenie;
  • 02: HP;
  • 03: MP;
  • 04: Max HP;
  • 05: Max MP;
  • 06: Atak;
  • 07: Obrona;
  • 08: Magia;
  • 09: Zręczność;
  • 10: Broń ID;
  • 11: Tarcza ID;
  • 12: Hełm ID;
  • 13: Zbroja ID;
  • 14: Akcesoria ID;
  • 15: ID z bazy danych;
  • 16: poziom paska ATB.

Event (id, typ):

  • 00: ID mapy;
  • 01: X kratki;
  • 02: Y kratki;
  • 03: Orientacja;
  • 04: X ekranu;
  • 05: Y ekranu;
  • 06: ID zdarzenia.

Deserek

Tutorial został opracowany na podstawie pliku tekstowego vexpr.txt z folderu z patchem i własnych doświadczeń. W następnej części zajmiemy się czymś ciekawszym, wykorzystamy poznane do tej pory rzeczy w zbudowaniu pewnej mechaniki może np. pola widzenia wrogów. Za pomocą odpowiednich tricków jesteśmy w stanie zawrzeć wszystkie potrzebne operacje na zmiennych w jednym polu Expression. Czy jest to czytelne? No raczej nie. Natomiast dla osób, które ogarniają matematykę i logikę, na pewno to przyśpieszy pracę. Co nie oznacza, że dla zwykłych użytkowników programu jest to nieprzydatne. Czasem krótkim, jednolinijkowym wyrażeniem jesteśmy w stanie wykonać tyle obliczeń, na ile potrzebowalibyśmy normalnie użyć z 5-10 Control Variables. Uważajcie na tego konradowirusa!

Soul

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.