Spis treści
Maniacs Patch jest jedną z wielu prób rozbudowania funkcjonalności starszych wersji RPG Makera (a dokładniej RPG Makera 2003) poza ich oficjalną dystrybucją. Jego autor wykonał kawał ogromnej roboty, którą w tym artykule postaram się przybliżyć.
Wstęp
Zanim zaczniemy, bardzo ważna informacja – Maniacs Patch działa wyłącznie z oficjalną wersją RPG Makera 2003!
Czym jest Maniacs Patch? To przede wszystkim potężne narzędzie. Możliwości, jakie zapewnia, niemal równają się tymi dostarczanymi przez Ruby czy Javascript. Swoją drogą, kto wykorzystuje wszystkie możliwości tych języków? Jest parę kwestii, których Maniacs Patch, przynajmniej na razie, nie rozwiązuje. Autor próbował dodać możliwość zmiany rozdzielczości silnika gry, ale wystąpiły pewne problemy z wydajnością. Po za tym uporczywie pracował nad dodaniem nowego typu zmiennej do 2k3 – oprócz liczbowych miały powstać zmienne tekstowe. Na razie to też się nie powiodło z powodu budowy samego silnika, ale nie wiadomo co przyniesie przyszłość. Patch przede wszystkim bardzo pomoże komuś, kto chciałby stworzyć skomplikowaną mechanicznie grę z własnymi systemami walki czy menu. Natomiast w przypadku prostszych systemów na pewno zmniejszy ilość powtarzalnej roboty, którą normalnie byśmy musieli wykonać w RM.
Autorem Maniacs Patcha jest człowiek o nicku BingShan1024. Oprogramowanie dodało masę nowych funkcji do RM i jest skierowane raczej do osób, które już mają doświadczenie w RM 2k3, gdyż zastosowanie wielu z nich może nie być oczywiste.
W tym artykule poruszam kwestię instalacji oraz rzeczy, które patch modyfikuje. W kolejnym artykule omówię nowo dodane funkcje, a w jeszcze kolejnym przykładowe zastosowania mechanizmów z patcha. Zdaje sobie sprawę, że ta część nie jest za ciekawa, ale od czegoś trzeba zacząć. Jest to najżmudniejszy element pracy z dziełem BingShana, ale można potraktować go jako swego rodzaju opracowanie zasad i wstępne szkolenie. Jest to dość techniczny opis i wymaga przetrawienia tego samemu w RM. Mam nadzieję też, że po trzeciej części tutoriala więcej rzeczy będzie zrozumiałych.
Instalacja
Patch pobieramy ze strony autora.
Tutaj link bezpośredni (może zostać zdezaktualizowany).
Po wypakowaniu pliku zobaczymy taką zawartość folderu. Nie trzeba się martwić kopiowaniem plików, czy używaniem programów pośrednich, jak w przypadku innych patchy do RM. Tu wystarczy tylko uruchomić utility.exe.
Poniżej okienko pliku utility wraz z naniesionym opisem jego elementów:
Nowa funkcjonalność w starych rzeczach
Na początku chciałbym wspomnieć o jednej przydatnej rzeczy, którą patch naprawia – zagnieżdżanie pętli (jedna w drugiej). Jest to dobra alternatywa dla wszechobecnych w polskich projektach etykiet.
Control Variables
Pierwsza sprawa to zmiana okna Control Variables. Jest o wiele (WIELE) bardziej złożone niż jego podstawowa wersja. Jeżeli masz problemy ze zrozumieniem TIP, nie przejmuj się. Poruszam tą kwestię jeszcze w podsumowaniu.
Jak ktoś nie wie, na czym polegają operacje bitowe na liczbach, to odsyłam do tego artykułu.
Wybranie okienka Other ukazuje nowe opcje. Możemy na przykład pobrać datę lub czas z systemu. Data jest zapisywana w formacie RRMMDD, gdzie RR to dwie ostatnie cyfry roku. Czas jest zapisywany w postaci HHMMSS. Może się przydać, jeżeli chcemy zrobić w grze system dnia i nocy oparty na czasie rzeczywistym (albo jakiś bonusowy event halloweenowy/świąteczny).
Druga strona okienka umożliwia różne przydatne odwołania do innych elementów gry.
Trzecia strona Control Variables jest bardzo ciekawa. Pozwala wykonać operację matematyczną na dwóch zmiennych bezpośrednio (co nie było możliwe w podstawowej wersji) i wynik operacji przypisać do wybranej zmiennej (oczywiście można wynik też dodać, odjąć etc.). W sytuacji na screenie powyżej zmienną Player Coords ustawiamy na sumę zmiennych Player X i Player Y. Wspomnę jeszcze o działaniu kilku opcji:
- Pow – oblicza potęgę (Arg1^Arg2)
- Sqrt – zwraca pierwiastek liczby, funkcja jednoargumentowa (Czyli ustawiamy tylko Arg1)
- Sin – oblicza sinus(Arg1/Arg2)
- Cos – oblicza cosinus(Arg1/Arg2)
- Atan2 – zwraca kąt pomiędzy odcinkiem idącym z początku układu współrzędnych do punktu (X=Arg1,Y=Arg2) i dodatnią częścią osi X układu współrzędnych
- Min – zwraca mniejszą liczbę
- Max – zwraca większą liczbę
- Abs – wartość bezwzględna liczby, jest to funkcja jednoargumentowa. (Czyli ustawiamy tylko Arg1)
- Min– zwraca mniejszą liczbę
- Random – zwraca losową liczbę w przedziale (Arg1;Arg2)
W przypadku niektórych funkcji matematycznych dostępny jeszcze jest Multiplier – wynik działania jest po prostu mnożony przez jego wartość przed przypisaniem do zmiennej.
Wreszcie ostatnia, czwarta strona Control Variables. Zastosowanie pokazanych wyżej elementów przyspiesza proces ustawiania zmiennej w przypadku, w którym normalnie potrzebowalibyśmy użyć Conditional Branch.
Conditional Branch
Jeśli chodzi o popularne warunki (Conditional Branch), okienko zostało trochę przegrupowane. Możemy odwołać się do przełącznika lub zmiennej poprzez ID. Na drugiej stronie Conditional Branch znajduje się reszta funkcji i są dodane trzy nowe warunki do sprawdzenia:
Nowe warunki to:
- Right after load – sprawdza czy gra była właśnie wczytana. Przydatne do stworzenia np. własnego systemu zapisu
- Enable Joypad – sprawdza czy joypad (joystick?) jest dozwolony
- Window is Active – sprawdza czy okno gry jest na pierwszym planie w systemie (czy jest sfocusowane)
Pętle
Maniacs Patch przybliża pętle do tego, czym one są w „normalnych” językach programowania. Jeżeli ktoś korzysta z pętli for, while lub do-while, na pewno poczuje się jak w domu. Poniżej różne elementy okienka Loop z wyjaśnieniami.
Tak to wygląda w edytorze zdarzenia ,jakby ktoś był ciekawy ;). Oczywiście sama pętla nie wystarcza. Trzeba wrzucić coś do niej, bo inaczej jest bezużyteczna.
Show Picture
Kiedy wejdziemy w okienko Effect, ukażą się nam nowe opcje. Kto wie, dlaczego autor zdecydował się zmienić nazwę z Picture Settings na Effect, skoro i tak otwierane okienko nosi tytuł Picture Settings. Na szczęście nie ma to większego znaczenia, bo liczy się wartość dodana.
Move Picture
Move Picture ma dodatkową opcję. Możemy ustawić czas, w jakim ma się wykonać zmiana, ze zmiennej.
Erase Picture
Tak jak w przypadku innych okienek, które modyfikuje Maniacs Patch, tutaj też możemy posłużyć się zmiennymi, aby wskazać przedział indeksów obrazków, które mają zostać usunięte. Dochodzi też opcja All, co może nieco uprościć pracę w programie.
Call Event
Call Event nie służy tylko do wywoływania zdarzeń typowych. Możemy wywołać nawet określoną stronę zdarzenia na mapie. Oprócz tego dzięki patchowi możemy posłużyć się zmiennymi do wskazania typowego zdarzenia lub zdarzenia na mapie.
Key Input Processing
Wisienka na torcie, choć trochę niepotrzebna. Możemy sprawdzić, czy zostały wciśnięte przyciski myszy, lub czy gracz ruszył scrollem. Maniacs Patch dodaje też komendę zdarzenia KEY INPUT PROCESSING EX (to w następnej części), który jest bardziej rozbudowaną wersją tej powyższej. Key Input Processing jest nieco bardziej prostsze do użycia i to chyba ma przede wszystkim skłaniać użytkownika do korzystania z niej.
Podsumowanie
Jeżeli komuś udało się tutaj dobrnąć – gratuluję! Może ten artykuł przekona kogoś do przetestowania Maniacs Patcha albo zmotywuje do zrobienia projektu, którego kiedyś nie dało się ukończyć z powodów ograniczeń technicznych. Ważną rzeczą w sprawnym i efektywnym użytkowaniu Maniacs Patcha jest zrozumienie, jak działa odwoływanie się do zmiennych przez Varible ID. Zabawne, że prawie wszędzie jest to nazwane Varible ID oprócz samego okienka Control Variables, w którym ten sposób odwołania nazwany jest po prostu – Variable. Jeżeli ktoś tego nie rozumie, poniżej małe wyjaśnienie.
Załóżmy że zmienna ID zmiennej była wcześniej ustawiona na 5.
W taki sposób nie modyfikujemy zmiennej o nazwie ID zmiennej, tylko zmienną Liczba, która ma ID=5. Rysunek ilustruje przypadek, w którym do Liczby dodana jest za pomocą funkcji Random wartość 5 (tak akurat wylosowało, a co :>).
ID zmiennej to po prostu numer po lewej stronie, który widzimy w oknie zmiennych.
Dla ciekawych
https://twitter.com/BingShan1024 – twitter autora patcha, na którym chwali się tym, nad czym aktualnie pracuje. Jest często aktualizowany (niemalże codziennie). Niestety tylko po japońsku, ale tłumacz Google może pomóc.
https://bingshan1024.github.io/steam2003_maniacs – strona poświęcona patchowi, również niestety tylko po japońsku (w dodatku tłumacz średnio sobie z nią daje rade, więc trzeba ręcznie wklejać treść strony do tłumacza) . Można tu znaleźć opis wszystkich funkcji Maniacs Patcha oraz link do pobrania.
To tyle na dzisiaj, widzimy się niedługo z kolejną porcją technikaliów!
Soul
Wersja angielska: Maniacs Patch Won’t Bite You # 1 – Basic Feature Changes
Wersja francuska: Le Patch Maniacs ne mord pas ! Partie 1 : Changements de fonctions basiques
bardzo dobra rozgryzka