Własny CMS #7 – Status

W tej lekcji stworzymy możliwość pokazania okienka Status bohatera, w którym będzie szereg interesujących cech, nie mieszczących się na podstawowym ekranie menu.

Planowanie i przygotowanie materiałów

W naszym nowym okienku chcemy mieć następujące elementy:

  1. grafika twarzy postaci;
  2. ruchomy charset;
  3. imię;
  4. Poziom, HP, MAX HP, MP i MAX MP;
  5. EXP i EXP do następnego poziomu;
  6. Punkty siły, zręczności, obrony i inteligencji;
  7. aktualny ekwipunek;
  8. krótki opis postaci.

Jeśli chodzi o grafiki twarzy, nie będzie z tym problemu, bo już znajdują się w programie. W przypadku ruchomych charsetów wykorzystamy opcję Spritesheet w komendzie Show Picture. Potrzebujemy pięciu zestawów dla każdej postaci składających się z klatek:

  1. prawa noga;
  2. stoi;
  3. lewa noga;
  4. stoi.

Każdy z plików nazywamy movecharX, gdzie X to, standardowo, numer postaci w bazie. Poniżej gotowe przykłady:

HP, MP i EXP to same cyferki, więc nie ma problemu. Zabawa zaczyna się z ekwipunkiem. Skoro chcemy, by był on wyświetlany w naszym menu, musimy stworzyć odpowiednie obrazki, które także będą bazowały na numerach ID przedmiotów z bazy danych. Proponuję stworzyć przedmioty jak na zdjęciu:

Dla uproszczenia z każdego itemu może korzystać każda postać. Poniżej rodzaje:

  • 1-3 – broń;
  • 4-6 – tarcza;
  • 7-9 – zbroja;
  • 10-12 – głowa;
  • 13-15 – akcesoria;
  • 16-19 – leczenie HP i MP;
  • 20 – leczenie padniętego bohatera;
  • 21-22 – leczenie złych statusów;
  • 23 – questowy item bez funkcji;
  • 24 – item zwiększający na stałe statystykę postaci.

Teraz nasza ulubiona część, czyli robienie screenów i wycinanie obrazków! Nazywamy je itemXX, gdzie XX to numer w bazie danych. Wielkość obrazka to 120 x 16 pikseli. Pamiętajcie, by z lewej strony był jeden piksel odstępu od napisu, a z dołu – cztery od podstawy normalnej litery. Poniżej efekt moich działań (pamiętajcie o pustym pliku item00!):

Opisu postaci jeszcze nie przygotowujemy, bo nie wiemy, ile będziemy mieć na niego miejsca.

Następna grafika to kursor zrobiony tak, jak w przypadku głównego menu, ale o rozmiarach jednego pola dla danych postaci. Zostawmy go w takiej formie jak poniższa, żeby nie szukać niepotrzebnie koordynat do prawidłowego wyświetlenia:

Na samym końcu dorabiamy napisy niezbędne do zrobienia szablonu postaci.

Projektowanie nowego okienka

W pierwszej kolejności musimy stworzyć jakieś ramy. Spróbujmy z okienkiem takiej samej wielkości, jak nasze menu wyświetlające postacie w drużynie. Po długich przymiarkach moja propozycja jest taka:

Jak widzicie, nie znalazło się w ramce miejsce na krótki opis postaci. Dlatego bez żalu powinniśmy z niego zrezygnować. To ważna zasada, która powinna przyświecać wszystkim twórcom gier – jeśli możesz z czegoś zrezygnować bez większej straty, zrób to. A już zwłaszcza nie staraj się udziwniać na siłę czegoś, co wygląda dobrze.

Koordynaty dla obrazków i nowe numery

Chcemy, by okienko ze statusem pojawiało się nad głównym menu, ale go nie zastępowało. Dlatego musimy stworzyć numerację dla dodatkowych obrazków. Proponuję następujące numery:

  • 150 – czarne tło nakładane na menu;
  • 151 – szablon okienka;
  • 152 – face;
  • 153 – charset;
  • 154 – imię;
  • 155 – stan;
  • 156-159 – HP;
  • 160-163 – MAX HP;
  • 164-166 – MP;
  • 167-169 – MAX MP;
  • 170-172 – Siła;
  • 173-175 – Obrona;
  • 176-178 – Inteligencja;
  • 179-181 – Zręczność;
  • 182-183 – Poziom;
  • 184-191 – EXP;
  • 192-196 – EXP do nast. poziomu;
  • 197-201 – Ekwipunek.

Teraz sprawdzamy koordynaty X oraz Y. Zrobiłem to za was i wynoszą one odpowiednio:

  • czarne tło nakładane na menu – X: 160, Y: 120;
  • szablon okienka – X: 160, Y: 120;
  • face – X: 90, Y: 42;
  • charset – X: 104, Y: 52;
  • imię – X: 154, Y: 26;
  • stan – X: 239, Y: 26;
  • HP – X: 159, Y: 42;
  • MAX HP – X: 190, Y: 42;
  • MP – X: 153, Y: 58;
  • MAX MP – X: 184, Y: 58;
  • Siła – X: 162, Y: 83;
  • Obrona – X: 162, Y: 99;
  • Inteligencja – X: 162, Y: 115;
  • Zręczność – X: 162, Y: 131;
  • Poziom – X: 221, Y: 83;
  • EXP – X: 250, Y: 99;
  • EXP do nast. poziomu – X: 250, Y: 131;
  • Broń – X: 193, Y: 153;
  • Tarcz – X: 193, Y: 169;
  • Ubranie – X: 193, Y: 185;
  • Głowa – X: 193, Y: 201;
  • Akcesoria – X: 193, Y: 217.

Poruszanie się pomiędzy postaciami

Zostawmy na chwilę okienko ze statusem i zastanówmy się, jak zrobić nawigację po wybraniu opcji Status. W przeciwieństwie do poprzedniej nawigacji, w tym wypadku nie wiemy, ile będzie możliwości wyboru – liczba postaci w drużynie może wahać się od 1 do 4.

Przechodzimy do common eventa 0002:Menu – Nawigacja i spoglądamy na warunek sprawdzający, czy gracz wcisnął ENTER. Mamy tam siedem opcji, z czego dwie już wypełnione. Status znajduje się na pierwszej pozycji w menu, więc będziemy działać w warunku z cyferką 1.

W pierwszej kolejności tworzymy trzy nowe zmienne (odpowiedzialne za nowy kursor) i przypisujemy im wartości – dla X Kursora 160, dla Y Kursora 120, a dla Poz Kursora 1. Wywołujemy common eventa SOUND ENTER i pokazujemy wcześniej przygotowany obrazek z wykorzystaniem tych zmiennych, jako numer wskazując 20.

Tworzymy nową zmienną POST – Party size i przypisujemy jej wielkość drużyny. To będzie nasza maksymalna pozycja w nowej nawigacji. Następnie zmieniamy nowy przełącznik 0003:MENU STATUS na ON, a przełącznik 0002 wyłączamy. Dzięki temu nawigacja głównego menu zostanie wyłączona, a zamiast niej działać będzie nowa nawigacja na postaciach w drużynie.

Teraz tworzymy nowego common eventa 0007:Menu – Status nawi z Triggerem Autorun na nowy przełącznik i, podobnie jak w zdarzeniu edytowanym przed chwilą, wstawiamy tu kontrolę klawiszy i warunki na wciśnięcie każdego z nas interesujących. W przypadku wciśnięcia ENTER tworzymy cztery warunki ze zmienną z pozycją nowego kursora. Jeśli chodzi o klawisz ESC, wystarczy odpowiednio zmodyfikować komendy z poprzedniej nawigacji. Usuwamy tylko obrazek kursora, czyli numer 20.

Teraz przechodzimy do ruchu w dół, czyli do warunku sprawdzającego, czy wciśnięto klawisz strzałki w dół (warunek z numerem 1). Nie wiemy, ile postaci jest w drużynie, dlatego wstawiamy warunek sprawdzający, czy pozycja kursora jest równa liczbie naszych postaci w drużynie z zaznaczeniem opcji ELSE. Jeśli warunek jest spełniony, ustawiamy pozycję na 1, X na 160 a Y na 120 i wywołujemy obrazek. W polu ELSE natomiast zwiększamy Y kursora o 52, a pozycję o 1 i pokazujemy obraz.

Przechodzimy do strzałki w górę. Tutaj sprawdzamy warunkiem, czy pozycja wynosi 1. Jeśli nie, w opcji ELSE odejmujemy Y kursora i zmniejszamy analogicznie pozycję o 1. Jeśli natomiast warunek jest spełniony musimy wiedzieć, gdzie przerzucić nasz kursor. Tworzymy nową zmienną i przypisujemy jej liczbę członków drużyny, a następnie odejmujemy 1. Teraz zwiększamy pozycję kursora o wartość w nowej zmiennej (jeśli mamy np. dwóch członków drużyny, to pozycja prawidłowo zmienia się na 2). Następnie naszą nową zmienną mnożymy przez 52 i dodajemy ją do zmiennej Y Kursora. Wyświetlamy obrazek i gotowe!

Gratuluję, najtrudniejsza część za nami, teraz już tylko musimy wykorzystać wiedzę z poprzedniej lekcji i stworzyć jakiś zmyślny system wyświetlania statystyk.

Naprawiamy błąd z przypisaniem wartości

Na tym etapie pojawił się pewien problem, który co prawda nie wywołuje póki co poważnych błędów, ale zacznie. Tak się często zdarza podczas tworzenia zaawansowanych systemów, to nic złego. W common evencie 0004 (gdzie przypisujemy wartości zmiennych do czterech tablic), na samym początku powinniśmy tablice z tych zmiennych wyzerować. Dzięki temu, gdy jakaś postać z drużyny odejdzie, jej dane nie będą zalegać w tablicy.

Przypisujemy do jednej tablicy

Żeby móc wyświetlić status danej postaci musimy zaktualizować wartości jej cech i pobrać dane dotyczące ekwipunku. Nie możemy bazować na wartościach, jakie mamy w tablicach czterech postaci, ponieważ tamto było sprawdzane przy wywołaniu menu. Może się natomiast okazać w przyszłości, że poruszając się po menu cechy te zmieniliśmy (np. skorzystaliśmy z leczącego przedmiotu). Dlatego tworzymy serię nowych zmiennych:

W common evencie z nawigacją Statusu przechodzimy do wciśnięcia ENTER i w każdej z czterech opcji wstawiamy komendę przypisującą do zmiennej Stat – Postac wartość zmiennej BOH – Numer odpowiednią dla danego miejsca w menu. Następnie, ponownie w każdym z warunków, wywołujemy nowy common event: Menu – Stat Przyp., który nie będzie miał Triggera. W nim wstawiamy tyle warunków, ile mamy możliwych postaci w drużynie sprawdzając, czy zmienna Stat – Postac odpowiada im numerem.

W każdym z tych warunków przypisujemy do tablicy z nowymi zmiennymi wartości odpowiadające poszczególnym postaciom podobnie, jak robiliśmy to w przypadku wywoływania głównego menu. Gdy dojdziemy do EXP-a potrzebnego do wbicia nowego poziomu, zmiennej EXP – LV Postaci przypisujemy LV aktualnej postaci, analogicznie robimy z EXP-em, wywołujemy common event 0011 (przygotowany na bazie tego poradnika), a na koniec wartość zmiennej EXP – Pozostalo EXP przypisujemy do zmiennej Stat – Pozostale EXP. Na koniec także do zmiennych, analogicznie jak wcześniej, przypisujemy ID poszczególnych elementów ekwipunku. Następnie całość powtarzamy dla każdej z postaci.

Wyświetlanie statusu

Czemu bawiliśmy się z nowymi zmiennymi i przypisywaniem? Ponieważ teraz wystarczy, że wstawimy komendy z wyświetlaniem tylko dla nowych zmiennych – nie musimy tego robić dla każdej z postaci z osobna.

Znacie już wszystkie koordynaty i numery obrazków, więc sprawa powinna być dosyć prosta. Pamiętajcie, by zrobić to w nowym common evencie. Jeśli tego jeszcze nie zrobiliście, wyczyśćcie przykładowe okienko ze statusem i zaimportujcie je jako szablon do programu.

Teraz wracamy do common eventa z nawigacją statusu. Przechodzimy do miejsca, gdzie wywoływaliśmy przypisywanie liczb i zaraz pod spodem wywołujemy nowy event z pokazywaniem obrazków. W dalszej kolejności po czterech warunkach, ale jeszcze wewnątrz warunku sprawdzającego ENTER wybieramy komendę Wait i wciskamy Wiat for Key Input, poniżej wywołujemy SOUND ESC, a na koniec usuwamy obrazki z przedziału 150-201 (to po to tak skrupulatnie je liczymy). Dzięki temu po wywołaniu statusu usuniemy okienko dowolnym przyciskiem.

Całość powinna prezentować się w taki sposób po odpaleniu naszego menu:

W następnej lekcji – przeprawa przez przedmioty w plecaku!

ŚCIĄGNIJ PROJEKT Z LEKCJI

Michał „Michu” Wysocki

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.