[TUT] Pixelmovement w 2k3

Jeśli chcesz podzielić się swoimi materiałami z innymi użytkownikami forum.

Moderatorzy: GameBoy, Dragon Kamillo

Awatar użytkownika
Soul
Posty: 481
Rejestracja: 19 mar 2011, 21:24
Lokalizacja: Gorzów Wielkopolski

[TUT] Pixelmovement w 2k3

Postautor: Soul » 04 cze 2017, 19:18

Tutorial-Jak stworzyć Pixelmovement w RM 2k3?

Wstęp:
W przeciwieństwie do innych RM, w 2k3 nie możemy wgrać skryptu, który stworzy pixelmovement za nas. Stworzyłem ten toturial dla osób, które lubią pokombinować w wiekowym już 2k3 i stworzyć coś niecodziennego. Zdaje sobie z tego sprawę, że niektórzy będą narzekać na obrazek wyświetlany co 0.1 sekundy, ale w sumie i tak nie ma innego sposobu, aby to objeść, gdyż postać się animuje.
Tutorial przeznaczony raczej dla obeznanych użytkowników.
I)
Potrzebujemy grafik naszej postaci, ja do tego celu wziąłem postać z RMXP. Dzięki zastosowaniu pixelmovementu nie jesteśmy ograniczeni do 16x32.
Obrazek
II) Zaczynamy od wyświetlenia na środku ekranu obrazku naszej postaci.
Obrazek
Jako zmienną X ustawiamy pozycję startową bohatera, tak samo Y. Przełącznik został użyty po to, aby ta strona zdarzenia nie wykonywała się w nieskończoność. Następnie tworzymy drugą stronę zdarzenia ustawioną na naciśnięcie przycisku, z warunkiem startu SWITCHA 0001.

Tworzymy na mapie drugie zdarzenie.
Obrazek
W tym zdarzeniu operujemy klawiaturą. Niestety RM2k3 może odczytać jedynie jedną strzałkę na raz(chyba że najpierw wciśniemy górny, albo dolny klawisz). Ja w tym tutorialu odpuściłem sobie ruch w 8 kierunkach (stwarza to problem 2x szybszego poruszania się postaci na ukos).
->Ustalamy zmienną klawiatura na 0.
->Odczytujemy przyciski z klawiatury zmienną klawiatura.
->Jeżeli zmienna klawiatura == 2 (został wciśnięty przycisk lewo), to odejmujemy od zmiennej X 1 i ustawiamy Facing (kierunek obrotu twarzy postaci) na 4. (może być to dowolna liczba jaka wam odpowiada, ja po prostu posłużyłem się oznaczeniami klawiatury numerycznej).
Analogicznie robimy do reszty przycisków wstawiając je w ELSE HANDLER.
Na koniec poruszamy obrazek 1 poprzez zmienne X i Y. (bez opcji czekania na zakończenie).
III)
Teraz zajmiemy się animacją bohatera. Nie możemy zrobić tego klasycznie poprzez wait (zbuguje to animacje, kiedy zmienimy dynamicznie kierunek animacja może wyświetlać się przez ułamek sekundy w złą stronę). Więc stosujemy do tego to:
Obrazek
Przełącznikiem TICK zajmiemy się później. Na razie ważne, żeby tu po prostu był.
->Czekamy 0,1 sec.
->Zmieniamy zmienną DT o +1.
->Jeżeli zmienna DT==12 to ustawiamy ją na 0.
Maksymalną wartość zmiennej DT możecie ustalić na inną liczbę, u mnie po prostu animacja może być maksymalnie 12 klatkowa.
IV)
Teraz czas na wyświetlanie.
Obrazek
Ten punkt powtarzamy do każdego możliwego Facingu (2,4,6,8).
->Sprawdzamy czy Facing == 2.
->Jeżeli zmienna klawiatura jest różna od 0 to:
->Zmieniamy SWITCHA TICK na ON. (to on odpowiada za animacje).
->Jeżeli zmienna DT jest równa 3 lub mniejsza:
->Wyświetl obrazek bohatera skierowanego w dół względem zmiennych X i Y.
ELSE
->Jeżeli zmienna DT jest równa 6 lub mniejsza:
->Wyświetl obrazek nr 2 bohatera skierowanego w dół względem zmiennych X i Y.
Itd.
Pozwala nam to na utworzenia animacji chodzenia o dowolnej liczbie klatek.
Jeżeli zmienna klawiatura będzie równa 0 to zmieniamy przełącznik TICK na OFF i wyświetlamy klasyczny obrazek bohatera stojącego twarzą w dół.
V)
System kolizji. Niestety RM 2k3 nie pozwala na wczytanie wysokości i szerokości obrazka. Musimy więc obejść się bez tego. Ograniczy to nas do tego że będziemy musieli użyć standardowego systemu blokowania w tilesetach wbudowanego w RM.
Obrazek
Zmieniamy w Database terrain tilesetów, które mają blokować bohatera na 2.
Następnie wchodzimy w Common event.
Obrazek
Tutaj tworzymy zdarzenie Blokowanie triggerowane jako równoległe zdarzenie. Deklarujemy nowe zmienne: Pole X, Modulo, Pole Y, Blokowanie.
Potem robimy tak:
->Ustawiamy zmienną Pole X na wartość zmiennej X.
->Zmienną modulo ustawiamy na taką samą wartość jak zmienna Pole X.
->Ustawiamy zmienną modulo na mod 16.
->Odejmujemy od zmiennej Pole X zmienną Modulo.
->Dzielimy zmienną Polę X przez 16.
To samo robimy ze zmienną Pole Y.

->Ustawiamy Store Terrain ID przez zmienne Pole X i Pole Y, zapisujemy ID terrainu do zmiennej Blokowanie.
->Jeżeli zmienna Blokowanie==2 to:
->Jeżeli zmienna Facing==2 to:
->Odejmujemy od zmiennej Y 1.
->Jeżeli zmienna Blokowanie==8 to:
->Jeżeli zmienna Facing==2 to:
->Dodajemy do zmiennej Y 1.
->Jeżeli zmienna Blokowanie==4to:
->Jeżeli zmienna Facing==2 to:
->Dodajemy do zmiennej X 1.
->Jeżeli zmienna Blokowanie==6 to:
->Jeżeli zmienna Facing==2 to:
->Odejmujemy od zmiennej X 1.
W tym momencie blokowanie już działa. Ale nie stworzyliśmy jeszcze HITBOXU naszej postaci! Jak już pisałem RM nie pozwala na pobranie wysokości i szerokości obrazka, więc musimy wpisać dane ręcznie. Uznajmy że Hitbox naszej postaci będzie tworzyć jej dolna część o wielkości 24x32. Blokowanie sprawdza naszą środkową koordynatę X i Y. Więc zabieramy się za hitboxa, który będzie sprawdzać aż 4 koordynanty!
Obrazek

Skopiowałem poprzedni kod 4 razy, raz robiąc +16 do X, za drugim razem -16 do X, za trzecim -16 do X i +24 do Y, a za czwartym +16 do X i +24 do Y (zobacz w demie).
Zauważyłem w tym momencie pewną zależność, przez wielkość mojej postaci potrzebuje ona dwukartkowej przestrzeni, aby przejść w poziomie i trzykartkowej przestrzeni, aby przejść w pionie. Na szczęście dla postaci o standardowej postaci o hitboxie 16x16 takie rzeczy nie mają miejsca :P.
Przez to zdecydowałem się zmienić wszystkie wartości do X z +/-16 do +/-8. Przez to postać nie ignoruje już jednokartkowych przeszkód i wymaga jedynie dwóch kratek w poziomie aby przejść.
Mowa końcowa:
To koniec tego tutoriala. Jeśli znajdą się zainteresowani, to może zrobię następną część, w której będzie jak zrobić scrolling i inne duperele :>
Demo:
https://www.mediafire.com/?533hcll1eggo2mg
Awatar użytkownika
GameBoy

Golden Forki 2009 - Pełne Wersje (miejsce 1); Puchar Ligi Mapperów II (zwycięstwo)
Posty: 1671
Rejestracja: 11 lip 2009, 13:47
Lokalizacja: Wieluń

Re: [TUT] Pixelmovement w 2k3

Postautor: GameBoy » 04 cze 2017, 20:00

O jezu chyba nie było nigdy nic w makerze bardziej sztuką dla sztuki niż to, może poza próbami zbudowania silnika 3D na RGSS. xd
http://www.rmxp.vot.pl -> kopia RMXP

To Twój projekt, więc, do jasnej cholery, weź wreszcie za niego choć odrobinę odpowiedzialności. - Kleo =)
Ponoć w jaskiniach koło rysunków ściennych przedstawiających mamuty można było zobaczyć "scena umiera". - Noruj =)
Awatar użytkownika
Soul
Posty: 481
Rejestracja: 19 mar 2011, 21:24
Lokalizacja: Gorzów Wielkopolski

Re: [TUT] Pixelmovement w 2k3

Postautor: Soul » 04 cze 2017, 20:21

@GameBoy
1)Ile w 2k/2k3 powstało statycznych ABSów?
2)Nie mówię, że trzeba w ten sposób tworzyć całą grę (w końcu to było by to dość duże wyzwanie), ale ten system można użyć chociażby jako szkielet do wielu minigier zawartych w samej grze.

Gdzie tu jest sztuka dla sztuki?
Awatar użytkownika
Jazzwhisky
Posty: 4132
Rejestracja: 13 kwie 2006, 21:45
Kontakt:

Re: [TUT] Pixelmovement w 2k3

Postautor: Jazzwhisky » 04 cze 2017, 20:25

@GameBoy - nie no, aż tak daleko bym nie szedł, np. niemiecka Castlevania w RM2k3 była po prostu grywalna (!!!), to nie jest aż tak strasznie przekombinowane (jakie rzeczy ja widziałem...), a takie teksty na pewno pobudzają niektórych do działania.

Odpaliłem demo, no ładnie działa, jest potencjał do rozbudowy, chociaż pewnie przydałaby się płynniejsza animacja, na Oazie chyba kiedyś ktoś wrzucał coś podobnego, przy okazji dodając sprajtom więcej klatek.
Nasz discordowy czat, 24h/d - https://discord.gg/4GG85kr
Awatar użytkownika
GameBoy

Golden Forki 2009 - Pełne Wersje (miejsce 1); Puchar Ligi Mapperów II (zwycięstwo)
Posty: 1671
Rejestracja: 11 lip 2009, 13:47
Lokalizacja: Wieluń

Re: [TUT] Pixelmovement w 2k3

Postautor: GameBoy » 04 cze 2017, 20:53

Po prostu dla mnie to jest coś co łatwiej i lepiej osiągnąć w nowszych makerach, więc robienie tego pixelmovementu w 2k3 to jest rzecz dla największych zapaleńców tej wersji RM. =)
http://www.rmxp.vot.pl -> kopia RMXP

To Twój projekt, więc, do jasnej cholery, weź wreszcie za niego choć odrobinę odpowiedzialności. - Kleo =)
Ponoć w jaskiniach koło rysunków ściennych przedstawiających mamuty można było zobaczyć "scena umiera". - Noruj =)
Awatar użytkownika
Dragon Kamillo

Golden Forki 2016 - Pełne Wersje (miejsce 3); Golden Forki 2013 - Zapowiedzi (zwycięstwo); Liga Mapperów Sezon IV (miejsce 2)
Posty: 1798
Rejestracja: 18 paź 2009, 21:23
Lokalizacja: Poznań/Granowiec

Re: [TUT] Pixelmovement w 2k3

Postautor: Dragon Kamillo » 04 cze 2017, 21:56

Pikselmovement jest w demie metropolis, czyli takiej minigrze udającej zeldę dodanej chyba do tłumaczenia RM2k value od RPG hacker: https://www.youtube.com/watch?v=yJTUo5xXvTc

Jest też skrypt na to na twierdzy...

Ogólnie w RM2k3 największym problemem przy tego typu skryptach jest obsługa przesuwania ekranu, które nadal zostaje o 16 pikseli, myślałem nad tym przy robieniu mojego skryptu na platformówkę czy nie da się jakoś obliczać czasu ile trwa przesunięcie jednego piksela przy różnych prędkościach, co pozwalało by na dopasowanie pikselmovementa do przesuwania ekranu o całe kratki, ale stwierdziłem że to i tak byłoby niepewne i powodowało błędy więc wolałem zrobić przesuwanie o cały ekran przy krawędzi.

Nie przeczytałem jeszcze całego poradnika, ale powiem po przeczytaniu początku że nie trzeba wczytywać co chwila obrazku, wystarczy wyświetlić je raz na początku a potem zmieniać klatki animacji poprzez zmienianie natychmiastowe przeźroczystości obrazków poleceniem ruszaj obrazek... Przynajmniej ja tak planowałem zrobić w moim skrypcie platformówki.

A co do sztuki dla sztuki, to co powiecie o skrypcie na raycasting który pisałem rok temu i który miałem już w sumie w części napisany w RM2k3 na picture - ta działało to płynnie i było 3D XD.Kiedyś to skończę i opublikuje.

Edit: ściągnąłem demko: dwa błędy, gdy klikamy przyciski strzałek bez ich ciągłego przytrzymywania postać się nie animuje. I drugi - są problemy z blokowaniem elementów 1 kratkowych - miałem to samo przy wyższej postaci w platformówce - rozwiązałem to sprawdzając jeszcze wartość pomiędzy jak miałem kwadracik wyskości 32 pikseli to sprawdzałem górny róg i dolny + jeszcze jeden punkt dokładnie na środku.

Wróć do „Zasoby - Baza”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości