Skakanie

W grach zręcznościowych i (zwłaszcza) platformowych skakanie postacią to absolutna podstawa. Możliwość przeskoczenia kilku pól wprowadzana jest jednak także w grach RPG – albo podczas całego gameplay’u, albo w wyselekcjonowanych etapach. Dziś zrobimy takie właśnie podstawowe skakanie w RPG Makerze 2003.

ID Terenu

Istnieje kilka sposobów na wykonanie tego skryptu. Moja wersja bazuje na sprawdzaniu ID tile’a, na który ma wskoczyć nasza postać.

ID Terenu

W zakładce Tilesets na karcie Lower Layer można nadawać poszczególnym elementom różnego rodzaju ID. Cechy każdego ID znajdują się w zakładce Terrain, jednak dla naszego skryptu są one bez znaczenia. Kluczowe jest to, że w skrypcie postać będzie mogła wskoczyć jedynie na teren o ID 1. Cała reszta – od 2 do 10 – uniemożliwi wykonanie skoku. Dlatego pierwszą rzeczą, którą musimy zrobić, jest odpowiednie ustawienie ID w omawianej zakładce. Wskazówka – nie musicie klikać na każdy tile osobno. Przytrzymując klawisz myszki możecie jeździć po różnych elementach.

Common event

Teraz przechodzimy do zakodowania naszego skakania. Żeby uniknąć mieszania się akcji ze skokiem, dla tego ostatniego wybierzemy neutralny klawisz SHIFT.

W Common evencie ustawionym na Parallel Process wstawiamy zatem Key Input Processing, który będzie przechwytywał wciśnięcie klawisza SHIFT do zmiennej 0001:klawisze.

Cały skrypt wygląda następująco:

2 - Skrypt

Najpierw wstawiamy warunek sprawdzający, czy SHIFT w ogóle jest wciśnięty. Wszystko dalej będzie umieszczone wewnątrz tego warunku. W pierwszej kolejności przechwytujemy koordynaty bohatera X i Y do dwóch zmiennych.

Następnie umieszczamy cztery następujące po sobie warunki, każdy dla postaci bohatera patrzącej w inną stronę. Zakładam, że postać będzie skakać o dwa pola do przodu, czyli przeskakiwać nad jednym polem. Dlatego musi sprawdzić, czy miejsce oddalone o 2 pola w kierunku, w którym patrzy gracz, jest wolne. W związku z tym, jeśli postać patrzy w lewo, od zmiennej X odejmujemy 2, a jeśli patrzy w dół – do zmiennej Y dodajemy 2.

3 - get

Po wykonaniu jednego z tych czterech warunków (nigdy nie zostaną wykonane dwa jednocześnie) korzystamy z komendy Get Terrain ID i do nowej zmiennej wstawiamy X oraz Y wytypowanej kratki.

Teraz wystarczy tylko zweryfikować, czy ID terenu wynosi 1, a jeśli tak – w zależności od kierunku patrzenia bohatera, odpowiednio ruszyć postacią.

Move

Na początku musimy ustawić Through ON, żeby postać mogła przeskoczyć przez każdą terenową przeszkodę. Następnie zaczynamy skok komendą Jump, poruszamy postacią dwukrotnie w kierunku, w jakim patrzy, lądujemy przy pomocy Land i kończymy przy pomocy Through OFF. Dzięki temu po skoku postać będzie mogła się normalnie ruszać.

Michał „Michu” Wysocki

– Download przykładowego projektu –

6 thoughts on “Skakanie

  1. Pamiętam, że jednym z pierwszych skryptów, którego tematyką były „skoki”, był skrypt autorstwa Mertruve (nie mylić z Ludziksem!) – redaktora naczelnego Świątyni RPG Makera. Tak się składa, że zachował się jego opis :). Pisownię pozostawiam oryginalną:
    „Witajcie w poradzie jak zrobić własne skoki, czyli po prostu jak zrobić skrypt, aby twój bohater mógł skakać. Jest to proste, więc nie powinno sprawić nikomu większych problemów. Po przeczytaniu porady proponuje zobaczyć skrypt pokazowy znajdujący się w dziale skrypty;) Najpierw tworzymy sobie jakąś mapkę:D Byle jaką no i ustawiamy bohatera, w grze pokazowej jest to miła małpka, bananożerca;) Teraz tworzymy eventa, może być w common events albo normalnie na mapie. W trzeciej zakładce dajemy (enter password) i klikamy by był to przycisk descision czyli enter, w „place password to variable” pisze skok lub coś w tym stylu. Teraz w drugiej zakładce eventa klikamy na (move event) i dajemy na object character „hero”. Teraz dajemy start jump i start slip trought, na końcu klikamy end jump. Po tym wszystkim zapisujemy wszystko no i testujemy. Brawo wykonałeś własny skrypt skoków, teraz pozostaje ci grać i cieszyć się:D.”

  2. A co z górną warstwą? Jeśli górna będzie blokować, a dolna nie (częsta sytuacja – np kamień na drodze), to postać będzie mogła wskoczyć w takie zablokowane miejsce – co prawda zawsze będzie mogła też wyskoczyć, więc gry nie zatnie – ale trochę brakło mi o tym informacji i rady, że można to rozwiązać po prostu sztuczkami w rysowaniu mapy – np pilnować by dolne tilesy miały terrain tagi nie pozwalające wskakiwać pod blokującymi górnymi. Trochę to komplikuje, ale sam osobiście nie chciałbym mieć skakania w całej grze, a w wybranych miejscach – wiec do przeżycia. Śmiesznie musi wyglądać przeskakiwanie innych postaci w miastach XD.

    Jeszcze tak się zastanawiam czy któryś maniac nie wprowadził po prostu zapisu do zmiennych stanu blokowania itp. kafli, to by uprościło też znacznie wszystko, jak ktoś wie, niech poda, bo ciekawe.

    1. PS: Choć jak teraz tak myślę, to postać może wyskakiwać z pól o innych terrain tagach w pole o tym właściwym, w takiej sytuacji jeśli wskoczy w blokujący tiles, to zatnie sobie grę.

  3. Trochę dziwny ten skrypt… po co w ogóle włączać przechodzenie przez ściany, jeśli skoki tak czy inaczej nie sprawdzają kolizji po drodze? Sprawdzane jest tylko pole końcowe, a skakać można sobie nawet jak konik szachowy jedno pole do przodu i dwa w bok… a jako że pole końcowe jest sprawdzane pod względem blokowania, to wystarczy w komendzie ruchu dać „ignoruj jeśli ruch niemożliwy” i tyle, skakanie działa bez problemów. Chyba że coś przeoczyłem…

    Jedyna sytuacja, w której bawiłbym się ze sczytywaniem ID terenu ze zmiennych, to jakbym chciał uniemożliwić skakanie przez ściany, to znaczy pole początkowe jest do chodzenia, pole docelowe dwa pola dalej też jest normalne, ale pomiędzy nimi jest ściana albo inna wysoka przeszkoda – coś, nad czym logicznie nie powinno się dać przeskoczyć, w przeciwieństwie do wody albo dziury. W takim wypadku można by chcieć sprawdzać jedno pole przed bohaterem (albo kilka pól pod rząd, w przypadku dalszego skoku) i anulować skok jeśli się nie zgadza. W tym wypadku tym bardziej używanie ID terenu było by właściwe, bo po samym blokowaniu nie dałoby się sprawdzić czy przeszkoda to ściana czy dziura.

    1. Ten skrypt, podobnie jak większość na stronie, to zaledwie zaproponowanie pewnych rozwiązań, a nie gotowe mechaniki. Opisane przez Ciebie rozwinięcie jest jak najbardziej ok.

  4. Warto jeszcze dodać jedną modyfikację: jak nie uda się skok o 2 pola, spróbować skoczyć o 1 pole, a jeśli to nie wyjdzie to skoczyć w miejscu (Jump, Move Up, Move Down, Land).

    Nic tak nie wkurza jak brak reakcji na przycisk, a dzięki temu po kliknięciu [shift] zawsze się będzie coś działo.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

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