» Najnowsze projekty

Pimp mah Script
Redaktor: Rezydent    Dodano: 01/07/2009 - 14:22
Interpreter jest ważną częścią skryptów w RPG Makerze XP. Pozwala on na zmianę poleceń zdarzeniowych na komendy w RGSS. Ma także pewną przydatność w nauce pisania skryptów – nie wiesz, jak coś można zrobić, ale jest to wykonalne w zdarzeniach, szukasz w interpreterze. Z niego można się wiele nauczyć.
Często są tematy typu „Potrzebuję skryptu na…” i jest to skrypt na coś banalnego – lepiej zrobić to samemu, używając jedynie niewielkich umiejętności skrypterskich i swojej głowy.
Pokażę tu jak można zastosować w grze kilka ulepszeń no i dam przykłady użycia Interpretera na naszą korzyść.

Self Switches trochę inaczej…

Zajrzyjmy do Interpreter 4, w linijce 175 widzimy wyraźnie „Control Self Switch”, to jest to.
Teraz spoglądając na kod…

 
key = [$game_map.map_id, @event_id, @parameters[0]]
$game_self_switches[key] = (@parameters[1] == 0)
 


Objaśnienia: @parameters[0] to nasza zmienna, w przypadku self switchów są ich 4 – “A”, “B”, “C” i “D’. @parameters[1] oznacza wartość, jaką przymuje. Nietrudno się domyślić, że $game_map.map_id i @event_id to te dane, które są nam potrzebne do zmiany…
$game_map.map_id oznacza, że zmiana następuje na mapie na której jesteśmy.
@event_id to ID zdarzenia w którym przełącznik jest zmieniany. Ostateczna komenda może wyglądać tak:

 
$game_self_switches[[$game_map.map_id, @event_id, “A”]] = true
 


Pomyślmy dalej, @event_id możemy zastąpić czym chcemy.
 
$game_self_switches[[$game_map.map_id, 4, “A”]] = true
 


Teraz używając takiej komendy w Script, nawet gdy jest to w evencie nr 2, przełącznik A zostanie zmieniony w zdarzeniu 4. Można też wykorzystać to w warunkach. Conditional Branch, strona 4, Script – wpisujemy dla przykładu
 
$game_self_switches[[$game_map.map_id, 4, “A”]] == true
 


lub
 
$game_self_switches[[$game_map.map_id, 4, “A”]] == false
 


Jeżeli ktoś robi skomplikowany ABS, a szkoda mu jakiś przełączników, to pewnie mu się to przyda.

Mapa na panoramie

Tak dla odpoczynku coś prostszego.
Cel: Spriteset_Map, linijka 121 o 122.

 
 @panorama.ox = $game_map.display_x / 8
 @panorama.oy = $game_map.display_y / 8
 


Te liczby 8 trzeba zamienić na 4 aby panorama była przylegająca do mapy.

 
 @panorama.ox = $game_map.display_x / 4
 @panorama.oy = $game_map.display_y / 4
 


Proste? Przejdźmy dalej.


Move toward Player


Enterbrain nigdy nie pomyślał o wszystkim i zrobił większość tego co standardowe zbyt prosto… A gdybyśmy mogli przerobić istniejącą funkcję? Wielu twórców chciałoby mieć prosty system w którym jedno zdarzenie porusza się za drugim. Jak wykonać coś takiego? To nie jest takie trudne. Szukanie w Interpreterze pod „Set move route” to niestety nie to, ale prowadzi nas to do Game_Character. W Game_Character 3 są zawarte wszelkie interpretacje komend ruchu.
Od 192 linijki rozpoczyna się „Move toward Player”.
197 i 198 linijka to:

 
 sx = @x - $game_player.x
 sy = @y - $game_player.y
 


Jak widać, pobierają one współrzędne gracza. Co za ograniczone cholerstwo. Trzeba to zmienić. Zamieńmy to na:
 
 if @follow != 0
 sx = @x - $game_map.events[@follow].x
 sy = @y - $game_map.events[@follow].y
 else
 sx = @x - $game_player.x
 sy = @y - $game_player.y
 end
 


Już wyjaśniam… @follow będzie lokalną zmienną która przechowuje ID zdarzenia za którym podąża, jeśli wynosi 0 to celem jest bohater, w innym przypadku jest to któreś z eventów.
Teraz zabezpieczmy ten system. W razie gdybyśmy nie przydzielili zmiennej @follow żaden błąd nam nie wyskoczy.
W Game_Character 1 pod linijką 31 („def initialize”) wklejmy

 
@follow = 0
 


A teraz, jak użyć tego systemu? Gdzieś w zdarzeniu lub komendzie „Set move router” które nim porusza wklejamy w komendzie Script „@follow = X”, gdzie zamiast X wpisujemy nasze ID (przykład: 0, 3, 10 itd.). Kiedy tylko na zdarzeniu zostanie użyta komenda „Move toward Player” to zobaczysz efekt ;)


Więcej klatek ruchu

To dość łatwe, pokażę jak to zrobić na przykładzie 6 klatek.
Cel pierwszy: Sprite_Character. Linijka 47.

 
 @cw = bitmap.width / 4
 


To podział charsetu według szerokości, czyli animacji ruchu. Według naszego przykładu powinno być ich 6, tak więc to zmienimy.
 
@cw = bitmap.width / 6
 


Cel drugi: Game_Character 2. Linijka 31.
 
@pattern = (@pattern + 1) % 4
 


No i znowu to niewdzięczne 4, zmieńmy je na 6.
 
@pattern = (@pattern + 1) % 6
 


No i to by było na tyle, ale niestety dla mnie to za mało i dodam coś jeszcze…
Kolejność wyświetlania klatek. Omówię to jak najszybciej jak tylko się da.
Nasz cel #2 (Game_Character 2. Linijka 31) ulegnie w tym przypadku lekkiej zmianie…
Aby zrobić jakąś pogmatwaną kolejność potrzebujemy nowej zmiennej, która przejmie nad tym kontrolę – w moim przykładzie będzie to lokalna @anim.
A więc zamiast linii 31 dajemy coś na ten wzór (przykład z mojego The Thinga):

 
@anim = @anim % 8
@anim = @anim + 1
case @anim
when 0
@pattern = 1
when 1
@pattern = 2
when 2
@pattern = 3
when 3
@pattern = 2
when 4  
@pattern = 1
when 5  
@pattern = 4
when 6
@pattern = 5
when 7
@pattern = 4
when 8
@pattern = 1
end 
 


"@anim = @anim % 8" - 8 to ilość klatek w całym cyklu.
"@pattern = 1" Pamiętajcie o tym, że liczba 1 nie oznacza w tym przypadku pierwszej klatki, lecz drugą. W takim razie tą pierwszą byłoby 0, nie dając jej w naszej animacji możemy mieć efekt charsetu z klatką postoju ;3


I w ten sposób mamy dowolną kolejność w animacji. Teraz wystarczy dodać jedną rzecz…
W Game_Character 1 pod linijką 31 („def initialize”) wklejmy “@anim = 0”.

Na koniec słów kilka:
Ludzie często potrzebują wielu prostych rzeczy (wynika to z działu pomocy xP) a w rzeczywistości wszystko jest w zasięgu naszej ręki. Jeśli wiesz gdzie szukać, częściowe zastąpienie Multiple Frames DerVVulfmana to nie problem. Do tych metod doszedłem sam, wyszukując to co potrzebne w Script Editorze i zmianianiem tego na mój zysk.


Rezydent

 

Profil



Sonda

Zjazd Twórców Gier 2010
 

Online

Mamy 6 gości oraz
0 użytkowników online.

Ostatnio na forum

Last Post 27 Lip 2010, 05:49
W: Bazgroły
Przez: GameBoy
Last Post 27 Lip 2010, 12:32
W: Pomniejszenie/powię...
Przez: sabikku
Last Post 25 Lip 2010, 11:53
W: Golodir: Księga Zmy...
Przez: Guv
Last Post 25 Lip 2010, 02:56
W: Show your scars
Przez: Miguel