...: Strona :...
News
Archiwum
Redakcja
Chat ( 0 )
Forum
Księga Gości
Imprezy
Linki
Wymiana
Radio

- Download -
Programy
Gry
Zasoby
Music
Sound
Inne

- RPG Maker -
RPGMZ
RPGMV
RPGVXAce
RPGVX
RPGXP
RPGME
SimRPG95
RPG95
WRPGE

- Projekty -
Virtua Twierdza
Pogromca II

- Krypta -
Kompendium
Scenariusze
Questy
Artykuły

...: Buttony :...
Goniec RM (Archiwum)
Dragon Ball Nao
M.U.G.E.N Samouczek
Pokemon Crystal PBF
Pillars of Eternity POLSKA - największy portal Pillars of Eternity (Project Eternity)
Kroniki Fallathanu - Prawdziwy mmoRPG w przeglądarce



Modules -  the greatest and ultimate place for every tracked-music sympathizer
Jooble.org - pomożemy ci znaleźć godną pracę (domyślne wyszukiwanie: Game Developer)


Informacje || Zgłoś nowe materiały
Krypta >> Kompendium

Tytuł:Jak stworzyć własny system menu (CMS - Custom Menu System) - część 1
Opracował: Reptile
Email: reptile@o2.pl



Przykładowe własne Menu

Wprowadzenie własnego systemu menu (CMS). Jak widać na przykładzie, jest to bardzo proste wykonanie (ale ważne, że własne!). Po naciśnięciu przycisku do wywołania menu (ESC), projekt uruchamia zdarzenia odpowiadające za własne menu. A w nim, to już sobie ustalimy pozycje, oraz opcje jakie mają zostać wyświetlone.

Tworzymy własny system menu (CMS - Custom Menu System) część 1 EFEKT KOŃCOWY Podpis: wprowadzenie własnego systemu menu. Jak widać na przykładzie, jest to bardzo proste wykonanie (ale ważne, że własne!) Po naciśnięciu przycisku do wywołania menu (ESC), projekt uruchamia zdarzenia odpowiadające za własne menu.


Wprowadzenie:
Od wielu lat w internecie można znaleźć skrót CMS, odpowiadający za Custom Menu System (czyli własny system menu). Chcesz stworzyć grę specjalną, zatem chcesz coś wyjątkowego, niepowtarzalnego, coś własnego - właśnie coś co będzie tylko w twoim projekcie i zazwyczaj większość osób wybiera by zmienić domyślny system menu (ano bo, czemu nie).

W internecie można znaleźć pełno skryptów menu, zazwyczaj skrypty typu kopiuj-wklej i gotowe. Ale powiedzmy, że te skrypty ci nie odpowiadają, chcesz je zmodyfikować, a programowanie nie jest twoim Asem. Zatem co możesz innego zrobić, jak własny menu system. Brzmi skomplikowanie? Ciężko? Nie panikuj, zaufaj im. Dasz radę zrobić własny CMS bez problemu! Nie zależnie od tego, jak bardzo zaawansowane menu chcesz stworzyć, musisz podjąć podobne, jak nie te same kroki, które właśnie tutaj zostaną opisane.


Założenie: Co chcę wykonać?
Przede wszystkim proponuję ci przygotować pewnego rodzaju szkielet pod menu, który będzie wyświetlać twoje opcje. Gdy to opanujemy, a do najtrudniejszych zadań to nie należy, to wtenczas będzie z góry. Zatem przejdźmy do wykonania.


Wykonanie:

1)Wyłączenie dostępu do podstawowego menu
Podczas gry, gdy naciśniemy ESC, uruchamia się podstawowe menu. To nam jest nie potrzebne. Musimy to zablokować. Pierwsze lepsze zdarzenie/polecenie na mapie startowej, gdzie zaraz po uruchomieniu zazwyczaj jest historyjka, jakieś napisy, dodaj kolejne polecenie blokujące menu.
    Zazwyczaj jest to polecenie Włącz/Wyłącz menu, zarządzanie menu, dostęp do menu - coś w tym rodzaju (angielskie wersje polecenia: Menu Access albo Allow/Disallow Menu).

    Uruchom polecenie, wyłącz dostęp do menu i w zasadzie gotowe! Możesz uruchomić grę testową i zobaczyć czy się udało.
Dodatkowo uruchom jakiś przełącznik dla swojego menu. Ja się posłużę tutaj PRZEŁĄCZNIKIEM 001: MENU-A (Switch 001: MENU-A). Pamiętaj: nadanie nazwy przełącznikom czy zmiennym ułatwi ci tworzenie, gdyż to podpowiada do czego daną rzecz używasz.

Jeżeli masz skomplikowane intro, nie chcesz w nim mieszać bo np. boisz się, że coś zepsujesz - OK, nie ma problemu, możesz zrobić też tak:

Na pierwszej mapie gdzie gracz ma pełną kontrolę nad postacią. Postaw nowe zdarzenie, zaznacz ustawienie AUTOSTART, a w poleceniach zdarzenia daj 3 polecenia. Wyłącz menu, Zmień przełącznik (001: MENU-A jest ON), a następnie wybierz jeszcze usuń zdarzenie (ang. Erase event).

Tym sposobem zdarzenie zostanie uruchomione, dostęp do menu wyłączone, i zdarzenie zostanie usunięte, gdyż więcej go nie potrzebujemy.


2) Uruchomienie własnego menu
Przycisk ESC jest wolny, już nie wyświetla domyślnego menu głównego, zatem możesz rozpocząć tworzenie szkieletu pod menu.

Przejdź do bazy danych, tam będzie zakładka odpowiadająca za typowe zdarzenia (ang. Common events), są to zdarzenia, które możesz uruchomić niemal zawsze i wszędzie. Musisz zrobić nowe typowe zdarzenie, ponownie wybieram numer (niech będzie 001), nadaję nazwę MENU, a następnie ustawiam rodzaj: równoległe zdarzenie (ang. Parallel Process - proces działający równoległe, we tle). Aby uruchomić typowe zdarzenie ustawione jako równoległe, potrzebujemy zaznaczyć przełącznik. Dlatego w pierwszym kroku mówiłem o uruchomieniu przełącznika, teraz jest pora, aby go użyć. Zaznacz ten przełącznik (001:MENU-A).
    Tym sposobem jak tylko zostanie uruchomiony przełącznik MENU-A, wybrane typowe zdarzenie zostanie uruchomione. Jest to swego rodzaju pętla, tutaj trzeba uważać, gdyż wprowadzając dużo poleceń do równoległych zdarzeń, może wpłynąć na płynność projektu.
W poleceniach zdarzenia musisz zrobić warunek: ESC został naciśnięty i chwilowo dla testów, niech wyskoczy wiadomość: Hej! Gratulacje, ESC naciśnięto! Czy coś w tym stylu.
    Uwaga! Upewnij się, że przejrzysz wszystkie zakładki i polecenia jakie można wykonać przy pomocy warunku, jest wielka możliwość, że polecenie przycisku jest gdzieś ukryte, na jakiejś zakładce, albo w jakiejś poniższej opcji. W przypadku RPGXP/VX/VXACE/MV/MZ, te polecenie istnieje w poleceniu warunku, tylko trzeba znaleźć.

    RPG2000/2003 jak i inne silniki mogą tego polecenia nie mieć. Głowa do góry, bez paniki. Na pewno silnik posiada jakiś odpowiednik, a o tym będzie nieco niżej.
Polecenie ustaw warunek (ang. Condition branch), w tym poleceniu musisz odnaleźć warunek odpowiadający za naciśnięcie przycisku ESC. W ramach przypomnienia, od wersji RPGXP w górę, przycisk B odpowiada za uruchomienie menu (pamiętaj: przycisk B czyli: ESC, X, Num 0 na klawiaturze numerycznej. Przycisk B tutaj oznacza przycisk joypada).

Wewnątrz warunku, umieść swoją wiadomość (Hej Gratulacje...) i można przejść do testów czy działa.


Nie potrafisz znaleźć tego warunku, używasz RPG2000/2003 albo innego programu.
Hej, to nie problem owe polecenie wykonamy nieco w inny sposób (należy nieco pokombinować). Tutaj posłużymy się opcją zmiennych.
    Co to jest Zmienna? Najprościej mówiąc, zmienna (ang. Variable) jest to funkcja, która pamięta wybraną wartość (zazwyczaj liczbę) i przeważnie każdy program taką funkcję posiada. Na temat zmiennych, jak działają, jak funkcjonują i jak stosować możesz poczytać wiele porad, poradników, kursów itp. (jak np. Tutaj, nawet są przykłady). Ale zakładam nie masz czasu, nie chce ci się, zatem na szybko: zmienna to coś, co pamięta twoją wybraną liczbę.

Każdy przycisk na klawiaturze posiada swoją wartość (liczbę). Dlatego musisz wymusić program, aby ten sprawdził: jaki przycisk został naciśnięty, a następnie przy pomocy warunku niech się uruchomi menu. Teraz w zależności od programu jakiego używasz, musisz się rozejrzeć czy owe opcje występują by brnąć dalej.


  • Wykonanie przy pomocy RPG2000/2003
    RPG2000 i 2003 posiadają specjalną funkcję, która nazywa się obsługa klawiatury (ang. Key Input Processing). Tutaj wystarczy wybrać zmienną (np. 002:klawiatura), oraz zaznaczyć jakie przyciski mogą być naciśnięte. Pamiętaj, że chcesz tylko i wyłącznie przycisk ESC, jak zobaczysz, to znajdziesz opcję Anuluj (6). Oznacza to tyle, że jeżeli przycisk ESC (X czy Num0) zostanie naciśnięty, to wybrana zmienna 002:Klawiatura będzie miała wartość 6.

    Następnym poleceniem będzie warunek sprawdzający jaki przycisk został naciśnięty. Czyli daj polecenie ustaw warunek, ustaw zmienna 002:klawiatura jest równa 6 Tym sposobem masz polecenie, które sprawdza jaki przycisk na klawiaturze został wciśnięty. Wewnątrz tego warunku ustaw sobie wiadomość: Hej, naciśnięto ESC; Po tej wiadomości ważne jest aby dodać jeszcze polecenie Zmień zmienną 002 klawiatura jest równa 0. Tym sposobem raz naciśniesz przycisk, uruchomi wiadomość i zniknie, czyli będzie działać tak jak powinno. Bez tego będzie niepotrzebna pętla.

    OK, możesz zapisać i sprawdzić czy to tak działa.


  • Wykonanie przy pomocy innych programów
    W przypadku innych programów, obsługa klawiatury może być niedostępna, a być może po prostu schowana. Tutaj warto rzucić okiem na polecenie zmień zmienną (ang. Change variable) i w opcjach zmiennej poszukać czy posiada możliwość pobrania wartości z klawiatury. Jeżeli jest, to fajnie, to przypisujemy wartość klawiatury -przycisk Anuluj- do zmiennej np 002:klawiatura;

    A następnie polecenie ustaw warunek, zmienna 002:klawiatura jest równa wartość klawisza.
      Skąd mam wiedzieć jaka jest wartość klawisza? Zazwyczaj klawisze posiadają w nawiasach swoje wartości, np. Góra (8), Dół (2). Jeżeli nie ma takiej informacji przy poleceniu to szukaj w dokumentacji/pliku pomocy.
    W środku warunku, wprowadź polecenie: Hej naciśnięto klawiszy.
    Zapisz i sprawdź czy działa.


    3) Wyświetlenie własnego menu
    Skoro domyślne menu zostało dezaktywowane, a klawisz ESC wyświetla naszą wiadomość, to już praktycznie mamy wszystko z góry i można przejść do tworzenia własnego systemu menu.

    Zazwyczaj w polskich grach zręcznościowych/platformowych/przygodowych tworzonych w RPG Makerze możesz zauważyć menu wyboru typu:
    - Zapisz grę
    - Wyjdź


    Może czasami owe menu jest bardziej rozbudowane i wygląda następująco:
    - Menu główne (domyślne menu)
    - Jakieś moje menu#1 (np. Alchemia)
    - Jakieś moje menu#2 (np. Zmiana drużyny)


    Za pewne pomysłów masz sporo. Jako, że jest to pierwsza część porady, nie chcę wprowadzać za bardzo zaawansowanych rzeczy - więc skupię się na bardzo prostym menu. Jak tutaj już jesteś w stanie brnąć dalej w bardziej rozwinięte systemu - to dobrze dla ciebie! Ci natomiast co nie mają jeszcze pojęcia co i jak, przejdźmy dalej do naszego menu.


    Zrobimy takie przykładowe menu:
    - Menu główne
    - Rozmowa
    - Dziennik zadań



    Do roboty,
    Przejdźmy do tej przykładowej wiadomość: Hej naciśnięto przycisk! Tego nie potrzebujemy (to było tylko dla testów), usuwamy polecenie wiadomości i w to miejsce dajemy nowe polecenie Pokaż wybór (ang. Show Choices). Tutaj w zależności od naszego programu, dostępnych opcji i pomysłów, wpisujemy co ma zostać wyświetlone w menu. Powyższe przykładowe menu, ma mieć tylko 3 opcje. Zatem podajemy:
    Opcja 1: Menu główne
    Opcja 2: Rozmowa
    Opcja 3: Dziennik zadań


    Gdy naciśniemy Anuluj wybierz opcję 4, którą pozostawimy pustą. Tym sposobem, jak naciśnięty zostanie ESC, to pokaże się menu. Jak naciśniemy ESC ponownie, to menu zostanie zamknięte (ekstra, przecież o to chodzi!).


    OK. Zwróć uwagę, że przy poleceniach powstały wcięte.
    Gdy opcja 1: menu główne
    Gdy opcja 2 [...]
    Gdy opcja 3 [...]
      Jak to działa? Gdy gracz wybierze jakąś opcję, program w tę przegródkę wskoczy i uruchomi to co się dzieje pod wybraną akcją.
    Gdy opcja 1: Menu główne
    Proste, tutaj chcemy wyświetlić nasze domyślne menu, które zostało wyłączone. Wystarczy, że uruchomimy polecenie wywołaj menu (ang. Open Menu Screen). Gotowe! Pierwsza opcja już za nami!


    Gdy opcja 2: Rozmowa
    Może na tym poziomie, nie komplikujmy sprawy, i opcja rozmowy to będą bohatera przemyślenia, albo rady dla gracza. W pierwszej kolejności przejdź do typowych zdarzeń, wybierz nowe puste typowe zdarzenie (np. 003 - nazwij rozmowa) i w sumie nic więcej nie musisz tam zmieniać. W poleceniach tego zdarzenia wprowadź wiadomości np.
    - Czy wiesz że...

    Tutaj wprowadź zmień zmienną (wybierz nową zmienną np. 003 - rozmowa) Ustaw jako losową liczbę, między [X] a [Y] (dla przykładu ja wprowadzę tylko 3 wiadomości, dlatego ustawiam losową liczbę między 0 a 2 )

    Teraz ustaw warunek zmienna 003 rozmowa jest równa 0
    W tym warunku wprowadź wiadomość np.: Dobrze jest mieć zapas miksturek pod ręką, aby można było się podleczyć.

    Poniżej tego całego warunku, tworzymy KOLEJNY warunek,
    Ustaw warunek zmienna 003 rozmowa jest równa 1
    A w nim wiadomość: Ponoć każde miasto ma inne bronie, warto jest się zaopatrzyć.

    Czujesz o co chodzi? Jak zgadujesz pod tym warunkiem tworzysz kolejny warunek zmienna 003 rozmowa jest równa 2. I w tym kolejna wiadomość: Warto jest mieć sojuszników w drużynie, aby walki były łatwiejsze.


    OK. Teraz wracamy do naszego menu, gdzie były te opcje wyboru. Odnajdujemy opcję 2: Rozmowa, i pod tą opcją daj Wywołaj typowe zdarzenie (ang. Call event/Call common event), wybierz te zdarzenie 003 Rozmowa co przed chwilką zostało ukończone. Hej, masz gotową drugą opcję menu!


    Gdy opcja 3: Dziennik zadań
    Ostatnią rzeczą jaką dam do swojego menu, jest dziennik zadań. W zasadzie to może być dziennik questów, może być bestiariusz, co tam odpowiada. Ja swój dziennik wykonam na zasadzie pamiętnika, który będzie się aktualizował wraz z fabułą.
      Dla przykładu, ja zrobię tylko 5 wpisów (pamiętaj że zaczynasz od wpisu 0):
      0 - Biografia bohatera (a czemu by nie)
      1 - Wróżka w lesie powiedziała mi, że w zamku jest księżniczka
      2 - Zamek zamknięty, szukam klucza
      3 - Klucz znaleziony! Co mnie czeka w zamku?
      4 - Jakiś grzyb mi powiedział, że księżniczka jest w innym zamku.

      Niech to będzie taki o właśnie prosty projekcik.
    Podobnie jak opcja rozmowy, tak i tutaj, też należy wykonać typowe zdarzenie (po to one są!). Przejdź do typowych zdarzeń, wybierz nowe puste typowe zdarzenie, najlepiej kolejne puste, 004 nazwij Pamiętnik (albo dziennik zadań) i nic więcej nie musisz tutaj ustawiać.

    W poleceniach tego zdarzenia rozpocznijmy od wiadomości typu: - Dziennik zadań -
    Wybierz wpis do wyświetlenia

    Jako następne polecenie zastosuj wstaw numer (ang. Input number). Pamiętaj, w moim przykładzie robię tylko 5 wpisów, dlatego jako cyfrę wpisuję 1.
      Ilość cyfr decyduje ile wpisów będzie w twoim pamiętniku, jeżeli podasz 1, to pamiętnik będzie miał wpisy z zakresu 0-9, jak podasz 2, no to pamiętnik będzie miał 0-99, proste. Zazwyczaj podane liczby należy zapisać do jakiejś zmiennej, wybierz kolejną zmienną (niech będzie tutaj dla przykładu 005, nazwij Pamiętnik).
    Teraz zaczyna się zabawa z warunkami, zmiennymi oraz przełącznikami!
    W pierwszej kolejności zrób wpis 0, czyli
    Ustaw warunek, zmienna 004 Pamiętnik jest równa 0.
    Wewnątrz warunku ustaw wiadomość opisującą bohatera np. Dolorian, młodzieniec nie chce zostać czarodziejem, dlatego postanawia wyruszyć w niesamowitą przygodę aby... się doskonalić.

    No i OK, pierwszy wpis (0) wykonany! Pod tym warunkiem tworzymy kolejny warunek zmienna 004 pamiętnik jest równa 1.

    Wewnątrz tego warunku tworzymy KOLEJNY warunek - przełącznik [wybierz] wróżka jest ON oraz zaznacz opcję INNE ZDARZENIE jak warunek się nie spełni. Teraz wewnątrz tego warunku możesz dodać kolejny wpis typu:

    - Wpis#1-
    Spotkałem wróżkę w lesie. Ta mi powiedziała, że w zamku czeka na mnie księżniczka i muszę ją uratować.

    Dla opcji inne zdarzenie (gdy warunek jest nie spełniony), wpisz wiadomość:

    - Wpis#1-
    Zablokowane / Brak wpisu / Puste

    OK, wpis (1) mamy wykonany!

      Po co? Dlaczego masz wykonać 2 warunki w 1?
      Proste, już tłumaczę. Dziennik jest dostępny od samego początku. Gracz uruchamia dziennik i sobie czyta wpisy (posiada wybór 0-9). Trochę głupio by było, aby na samym już początku gry, dziennik był już zapełniony i dostępny dla gracza, prawda?

      Na tym przykładzie (wpisu 1) omówię to,
      Gracz rozpoczyna grę, uruchamia menu, wchodzi do dziennika wybiera wpis 1 i czyta wiadomość, że spotkał wróżkę i ta mu powiedziała [...] - ale zaraz, przecież w grze, gracz jeszcze nigdzie się nie ruszył, prawda? Tutaj właśnie przychodzi z pomocą przełącznik, który zostanie uruchomiony jak porozmawiamy z wróżką.

      Rozmawiamy z wróżką na mapie, przełącznik ON i wpis staje się dostępny!
    Przejdźmy do kolejnego wpisu, czyli praktycznie robisz kopiuj wklej tego powyższego, patrz uważnie:

    Ustaw warunek zmienna 004 pamiętnik jest równa 2 (czyli kolejny wpis) Wewnątrz kolejny warunek, przełącznik [jakiś przełącznik] jest ON + inne zdarzenie jeżeli warunek się nie spełni.

    Wewnątrz tego warunku wiadomość:
    - Wpis 2
    - Udało mi się znaleźć zamek, ale nie wiem jak wejść do środka. Chyba muszę znaleźć jakiś klucz, gdy pukanie nic nie daje.

    W miejscu gdzie jest Inne zdarzenie/Gdy warunek się nie spełni (ang. Else), ponownie wiadomość:
    - Wpis#2-
    Zablokowane / Brak wpisu / Puste

    Wpis (2) gotowy!

    No, a jak zrobić wpis kolejny? Proszę bardzo, w programie to będzie wyglądać mniej więcej tak:


    Ustaw warunek zmienna 004 jest równa 3
    Ustaw warunek przełącznik KLUCZ jest ON (+ inne zdarzenie jak się nie spełni)
    Wiadomość: -Wpis 3- Udało mi się znaleźć klucz, teraz mogę uratować księżniczkę!
    :: Inne zdarzenie
    Wiadomość - Wpis#3-
    Zablokowane / Brak wpisu / Puste
    : Koniec
    :Koniec



    Oczywiście owy efekt możesz też wykonać nieco innym sposobem! Popatrz na wpis 4.

    Ustaw warunek zmienna 004 jest równa 4
    Ustaw warunek przełącznik GRZYB jest ON (Uwaga! Tutaj nie zaznaczam innego zdarzenia, gdy warunek się nie spełni!)
    Wiadomość: -Wpis 4- Oszukano mnie! Jakiś grzyb mi powiedział że księżniczka jest w innym zamku!
    : Koniec
    Ustaw warunek GRZYB jest OFF
    Wiadomość: - Wpis#4-
    Zablokowane / Brak wpisu / Puste
    : Koniec

    :Koniec


    Widzisz różnicę?
    W pierwszych wpisach zostały ustawione warunki z dodatkową akcją: co się stanie, jeżeli ten warunek jest nie spełniony. Czyli:

    Ustaw warunek Przełącznik [wybrany] jest ON
    ::
    : Gdy warunek się nie spełni
    ::
    :Koniec


    To jest to samo co

    Ustaw warunek Przełącznik [wybrany] jest ON
    ::
    :Koniec
    Ustaw warunek Przełącznik [Wybrany] jest OFF
    ::
    : Koniec


    To jest moja notatka dla ciebie, to jest to samo, ale w programie zdarzyło mi się nie raz, że ta opcja -Inne zdarzenie, gdy warunek się nie spełni- jakoś nie do końca funkcjonowała, dlatego pamiętaj, zachowaj to gdzieś z tyłu swojej pamięci, jakby ta opcja nie działała, spróbuj wykonać swój warunek tym sposobem.


    Szczerze powiedziawszy, właśnie udało ci się ukończyć twoje pierwsze własne menu do gry. Dobra robota! Oczywiście jest to wersja prymitywna menu, rozmowy jak i dziennik można tak udoskonalić by to wyglądało i fajnie i funkcjonowało sprawnie.

    Tylko dla szybkiego przykładu, dziennik zadań.
    Między wiadomościami wystarczy wrzucić obrazek z jakąś graficzką, czy to własny rysowany art, czy zrzut z mapki - już to będzie wyglądać inaczej!

    Weźmy za przykład opcję rozmowy między bohaterami: Tutaj podałem że mogą to być podpowiedzi, ale co stoi na przeszkodzie by połączyć to z dziennikiem i za każdym razem jak gracz brnie do przodu, bohaterowie rozmawiają całkowicie o czym innym. Cała komplikacja polega na wprowadzonych zmiennych i warunków. Można wprowadzić wiele dialogów, wiele ciekawostek, wiele różnorodności i to będzie taki mały bajer - ale pamiętaj, że to też kosztuje nieco twojego czasu i planowania. Działaj tak by się nie poplątać w tym.



    Zakończenie
    Tekst napisałem pod kątem tworzenia własnego systemu menu, niezależnie od silnika i wersji programu jakiego się używa, gdyż w zasadzie są to te same kroki, te same polecenia, jak nie podobne. Niektóre programu nie posiadają pewnych opcji i wykonanie własnego menu, może sprawić drobne kłopoty.

    Poniżej zostaną wprowadzone odnośniki do gier demo, jak i konkretnego opisu krok po kroku, jak wykonać własny system menu w danej wersji programu.
    * gry demo i porady już wkrótce.