...: Strona :...
(
0 )
- Download -
- RPG Maker -
- Projekty -
- Krypta -
...: Buttony :...
|
Czas i Pory dnia
Paczka zawiera gry demo do trzech wersji: (WRPGE/VXAce/2k3)
Early access nowego materiału na Twierdzę, łapcie! Zdarzeniówka Czas i pory dnia, do pustego od pół roku chyba działu
Kompendium "Zdarzeniologia".
Słowo wstępne od autora:
Podczas poprawiania jednego tekstu Jarga o porach dnia rzuciło mi się w oczy, jak ten system średnio działa.
Postanowiłem więc stworzyć swój własny, lepiej działający i nieco bardziej rozwięty.
Zdarzeniówka ta pozwala ta sprawdzenie godziny, a także na ustawienie pór dnia wraz z odpowiednimi efektami graficznymi.
~almostnoruby
Czas płynie nieubłaganie. Ledwo, co człowiek odpali coś ciekawego w telewizji albo zasiedzi się na
Twitterze i już z życia potrafią upłynąć dziesiątki minut. W przeciwieństwie, w RPG Makerze czas... stoi.
Domyślnie, w grze jest cały czas południe. Dzisiaj spróbuję pokazać, jak to zmienić.
A komu to potrzebne?
Oprócz nieco większego dynamizmu świata, można ustawić, żeby np. z niektórymi postaciami dało się spotkać tylko w nocy,
sklepy były otwarte tylko w dzień (albo w określonych godzinach), a zastosowań pewnie znajdzie się dużo więcej.
Uwaga!
Wolf RPG Editor nie ma przełączników. W kontekście WRPGE za przełączniki będą uważane dowolne zmienne,
które w skrypcie będą przyjmować tylko wartości 1 (ON) i 0 (OFF). W programach z serii RPG Maker nie powinno być z tym problemu.
Część 1: Te łatwiejsze rzeczy
Tik-tak, tik-tak...
Pierwsze, co trzeba zrobić, to zarezerować dwie zmienne (przez zarezerować mam na myśli nadać im nazwy). W tym tutku to będą: [0001: Godziny] oraz [0002: Minuty]. Potem, trzeba utworzyć nowe typowe zdarzenie (fajnie by było je jakoś fajnie nazwać, np. "System czasu"), które to będzie wywoływane za każdym razem, gdy minie minuta w grze. Do faktu wywoływania wrócę za chwilę.
Pierwsze, co trzeba zrobić, to dodać jedną minutę.
Jak zapewne wiesz, godzina ma 60 minut (od 0 do 59), więc i tutaj musi posiadać ona takie same ograniczenia.
Łatwo można sprawdzić, czy [0002: Minuty] nie ma zamiaru przekroczyć tych 59. Jeżeli będzie chciał,
licznik minut zostanie wyzerowany i zostanie dodana jedna godzina. Taki warunek powinien wyglądać mniej-więcej tak:
Ale chwila! Godzin nie może być więcej, niż 24, prawda? Prawda. Więc do środka tego warunku trzeba dodać jeszcze jeden warunek,
odpowiadający za sprawdzenie, czy [0001: Godziny] nie przekroczyły wartości 24. Wtedy wystarczy tylko wyzerować zmienną [0001: Godziny].
Koniec końców, ten warunek w całości powinien wyglądać tak:
Ustalanie pory dnia
- Noc: 21:00-6:00
- Poranek: 6:00-7:00
- Dzień: 7:00-20:00
- Wieczór: 20:00-21:00
Następnie, potrzeba zarezerować przełączniki, które będą ustawione na ON, kiedy będzie trwała odpowiednia pora dnia.
U mnie to są: [0006: Noc], [0007: Poranek], [0008: Dzień] i [0009: Wieczór]. Pierwsze co trzeba zrobić,
to nadać wszystkim przełącznikom pozycję OFF (żeby potem nie wyszło, że jednocześnie trwają dwie pory dnia na raz).
Jeżeli są one obok siebie (wartościami ID), można użyć komendy Control Switches
(Ustaw przełączniki) z opcją Batch (w kolejności, jedna po drugim):
Następnie trzeba utworzyć warunek sprawdzający, która aktualnie trwa godzina.
Musi on mieć zaznaczoną opcję Set handling when conditions do not apply (Obsłuż wyjątek, gdy dany warunek nie będzie się zgadzał;
wstaw programistyczne "else"), gdyż warunki będą wywoływane lawinowo. W skrócie, zamiast schematu działania:
- Warunek 1: Godzina jest między 0 a 6
- Warunek 2: Godzina jest równa 6
- Warunek 3: Godzina jest miedzy 7 a 20
Warunki będą działać na takiej zasadzie:
Oprócz tego, że ułatwi to pisanie skryptu (nie można w RPG Makerze sprawdzić jednym warunkiem, czy zmienna ma wartość pomiędzy dwoma innymi,
trzeba po prostu zagnieździć 2 warunki), to jeszcze nieco przyspieszy działanie kodu (drobnym kosztem czytelności).
Tak więc, trzeba utworzyć pierwszy warunek:
Potem go skopiować i wkleić w przestrzeń pomiędzy Else a End Branch, po czym zmienić na następne w kolejności wartości godzin.
W tutejszym przypadku to będzie:
...
Tą operację trzeba powtórzyć do momentu, w którym skończą się wszystkie pory dnia.
Teraz chwila -- co, jeżeli chcesz ustawić, żeby jakaś pora kończyła się nie o równej godzinie,
tylko na przykład 20 po? W takim wypadku, trzeba po Conditional Branch: ... (nie po Else!),
ustawić drugi warunek, sprawdzający minuty. Na chwilę załóżmy, że noc się kończy o 5:30. Wtedy trzeba by było zrobić warunki:
- Przed piątą, który zawsze zwraca noc. Jest on tworzony na tej samej zasadzie, co te wyżej;
- Gdy trwa godzina piąta, wtedy trzeba sprawdzić minuty i według nich zadecydować, czy jest noc, czy dzień/poranek/inna pora dnia;
- No i późniejsze warunki.
Skrypt dla takiego założenia wyglądałby tak:
[WERSJA 2k3]
Przykładowy przedmiot: zegarek
Aby sprawdzić, czy wszystko zostało napisane bez błędów, zostanie utworzony niewielki przedmiot: zegarek.
Będzie on wyświetlał godzinę... i to w zasadzie tyle. Pierwsze co, to trzeba dodać nowy przedmiot, nadać mu jakąś ikonkę,
opis, whatever. Potem, trzeba zarezerować typowe zdarzenie o jakiejś przyjaznej nazwie, np. "Zegarek".
Następnie trzeba połączyć przedmiot z typ typowym zdarzeniem - jest to poza zakresem tego materiału,
gdyż dodawanie go się różni z programu na program.
RPG Maker 2k/3 nie posiada wprost możliwości przypisania typowego zdarzenia do przedmiotu.
Natomiast przedmiot może mieć ustawiony typ Switch (Przełącznik). Jak wskazuje nazwa, pozwala
on stworzyć przedmiot, który będzie ustawiał wybrany przełącznik ON/OFF i wyrzucał potem na mapę.
Można ustawić typowe zdarzenie, które się uruchomi, gdy ten przełącznik będzie włączony
(Trigger: Parallel Process, Condition Switch: wybrany przełącznik), a pod koniec działania go wyłącza.
Taki przedmiot jest zaimplementowany w demie zdarzeniówki dla RPG2003.
To typowe zdarzenie będzie miało tylko jeden warunek: sprawdzający, czy liczba minut jest większa, czy mniejsza od 10.
Jest to potrzebne, żeby wiadomość nie wyrzuciła brzydkiego wyniku, np. godziny 7:5 zamiast
lepiej wyglądającego 7:05, albo 14:045 zamiast 14:45. W zależności od tego, zostanie wyświetlona wiadomość z dodatkowym zerem bądź bez niego.
...
Kompletny, działający przykład można znaleźć w przykładowym projekcie (download na samym dole).
Przykładowe zdarzenia sprawdzające porę dnia
To jest dość łatwe zadanie. Trzeba sprawdzić, czy pora dnia się dobrze włącza. Do tego wystarczy postawić cztery testowe zdarzenia.
Każde z nich będzie miało ustawione w zakładce Conditions (Warunki) przełącznik odpowiedzialny za daną porę dnia.
Dla ułatwienia roboty można też kazać im coś powiedzieć, np. "Jest ".
Nakręcanie zegara
No dobrze, zegar jest zbudowany, tylko jest pewien problem... trzeba go ruszyć. Do tego będzie potrzebne kolejne
typowe zdarzenie (czemu nie można bez kombinowania umieścić tego w jednym, napisałem w trzeciej części artykułu),
służące do ruszania zegara w grze po odpowiedniej ilości czasu. Zadanie do wykonania jest banalnie proste;
trzeba w zdarzeniu poczekać x czasu (wybraną przez ciebie ilość, ja wybrałem, że minie 1 sekunda = 60 klatek),
po czym wywołać typowe zdarzenie "System czasu" (bo tak je nazwaliśmy wcześniej). Ważne jest,
żeby ustawić Trigger (wyzwalacz) na Parallel Process (proces równoległy), i odpalający go przełącznik.
U mnie to jest [0001: Odpal [Czas i pory dnia]]. Dla pewności zostawiam:
Teraz, na mapie, na której zaczyna bohater, wystarczy dodać zdarzenie, które się odpala w autostarcie (zakładka trigger, przypominam),
w którym po prostu się przełączy przełącznik i wywali zdarzenie. Można też ustalić godzinę, o której chce się, żeby zegar zaczął
tykać i przedmiot Zegarek.
Do tego chyba zdarzeń nie trzeba. Nie zapomnij tylko o prawidłowym ustawieniu przełączników, hehe.
Jak udało ci się dotrzeć do tego momentu tutka, możesz już sprawdzić godzinę i porę dnia
(żeby się tym pobawić, polecam takie fajne menu pod F9 podczas gry testowej).
Część 2: Wstrzymać słońce, ruszyć ziemię
... w sumie, to słońca nie trzeba wstrzymywać bo w tym RM-owym światku ono i tak stoi...
W tej części będzie o zmianie barw ekranu w zgodzie z porą dnia, a także o specjalnym traktowaniu budynków
(i innych przestrzeni zamkniętych, takich jak lochy). Dlaczego specjalnym? W wielu przypadkach,
oświetlenie zgodnie z tym na zewnątrz niekoniecznie pasuje to do gry. Po prostu w jaskini musi być ciemno a nie ma wschodzić słońce,
that kind of thing. Tak więc, pod wszystkimi poprzednimi bajerami, trzeba dodać warunek, dla dopiero co zaklepanego przełącznika od obsługi tego,
czy automatyczna zmiana kolorów na mapie ma być, czy nie: ja nazwałem ją [0002: Zmiana kolorów]. Do tego,
polecam już zarezerować kolejny przełącznik na trzymanie poprzedniej wartości tego pierwszego (
u mnie: [0003: Stara zmiana kolorów]). Potrzebny będzie on do sprawdzania, kiedy nastąpiło przejście z pomieszczenia na zewnątrz i vice versa.
Jak to jest już zrobione, trzeba rozpatrzeć trzy ewentualności (posortowane są one według długości):
- Gdy bohater wszedł z zewnątrz do wewnątrz,
- Gdy bohater wyszedł z zewnątrz do wewnątrz,
- Gdy bohater jest cały czas na zewnątrz, a w międzyczasie się zmienia pora dnia.
Pierwsze co, to trzeba przygotować dwa główne warunki, w których będą zagnieżdżone te wypunktowane wyżej.
Przypadek pierwszy: do środka
Przypadek zachodzący, gdy wyłączy się zmianę kolorów ([0002: Zmiana kolorów] będzie ustawione na OFF).
Dlatego jest on w sekcji Else pierwszego warunku. Najpierw, trzeba by było sprawdzić, czy bohater nie przyszedł
dopiero co z zewnątrz ([0003: Stara zmiana kolorów] jest ON). Jeżeli tak, to trzeba by było przywrócić kolorystykę pomieszczenia
(później ofc można ustawić własną, np. do ciemnej jaskini albo piwnicy) na "normalną". Poza tym warunkiem trzeba też ustawić
[0003: Stara zmiana kolorów] na OFF, żeby ten pierwszy proces się nie powtarzał. Wstawienie tego polecenia w warunku będzie skutkować lagiem.
Skrypt:
Przypadek drugi: ze środka na zewnątrz
Tutaj dla ułatwienia można korzystać z przełączników ustawionych wcześniej. W związku z tym, że już wiadomym jest,
że bohater właśnie co wyszedł na zewnątrz, to:
- Trzeba ustawić "Starą zmianę kolorów" na ON,
- Błyskawicznie zmienić kolor ekranu na ten, który powinien być w otoczeniu.
No dobra, ale możesz zapytać, jakie kolory najlepiej będą pasować do danych pór dnia. RPG Maker VXAce w górę ma
wbudowane presety na dzień, noc, wschód słońca itd., ale inne programy nie mają, więc służę ściągawką:
Jak to już mamy za sobą, to pora zacząć tworzyć lawinowe warunki ze zmianami koloru ekranu! Oczywiście,
nie zapominając o zmianie [0003: Stara zmiana kolorów] na ON. Zgodnie z kolejnością od północy, dobrze by było rozpocząć od nocy:
Po czym należy skopiować cały warunek do Else, zmienić w nim przełącznik na kolejny i tak dalej... .
Przypadek trzeci: cały czas na zewnątrz, ale się zmieniła pora dnia
Jeżeli oba przełączniki ustawione są na ON, to oznacza, że hiroł biega cały czas po dworze. Wtedy, w dokładnym co do minuty momencie,
kolory na mapie powinny się powoli zmienić. A jakże by inaczej, za pomocą lawinowych, zagnieżdżonych warunków!
Schemat działania wygląda mniej więcej tak: jeżeli jest godzina x, sprawdź minuty i wtedy zdecyduj, c
zy zrobić powolne przejście, jak nie, sprawdź, czy jest godzina y, jeżeli jest, sprawdź co do minuty itd...
Na zdarzenia to się przełoży tak:
Zwróć uwagę na liczbę klatek. Tak, to są całę 4 sekundy, chociaż, dla lepszego efektu, można by było dać jeszcze więcej.
Implementacja w świecie
Teraz rzecz o ile prosta, o tyle monotonna. Mianowicie, trzeba teraz dodać do wszystkich teleportów z zamkniętej przetrzeni na zewnątrz i
vice-versa dodać odpowiednie komendy. No i uruchomić grę wraz z efektem bez żadnego tajemniczego migotania, żeby biedny gracz nie myślał,
że coś się popsuło. Na początek - drzwi wejściowe. Dodaj je albo ręcznie, albo jak masz tego nowszego makera to za pomocą typowych zdarzeń.
Przed poleceniem Tranfer
Player
(teleportuj gracza) należy ukryć ekran (żeby wyeliminować nagłą zmianę kolorów bez przejścia, tzw. pop-in),
zmienić przełącznik odpowiadający za zmianę kolorów na OFF, a po teleporcie pokazać ekran, żeby gracz nie został z czarną pustką.
Do tego celu się przydadzą polecenia Hide/Fadeout Screen (ukryj ekran) oraz Show/Fadein Screen (pokaż ekran):
[WERSJA WOLF]
Uwaga! WRPGE nie ma łatwego mechanizmu na ukrycie ekranu (fadeout/fadein odbywają się za pomocą tego samego polecenia co zmiana barw ekranu,
co ofc wszystko psuje). W projekcie demo jest pokazane, jak zrobić przejście za pomocą wbudowanych funkcji (bez dodatkowych plików graficznych).
Wychodzenie działa na podobnej zasadzie, tylko trzeba zaraz przed Fadein Screen wywołać typowe zdarzenie Czas i pory dnia
(i, naturalnie, przełącznik [0002: Zmiana kolorów] musi być ustawiony na ON).
Kolejną rzeczą, która pozwoli wyeliminować pop-in i jednocześnie pozwoli wszystko ładnie skonfigurować,
jest mapa startowa. W dużym skrócie jest to mapa która jest cała czarna i na której jest ustawiony start drużyny -
bez widocznej żadnej grafiki postaci. Jest kilka sposobów, by osiągnąć taki efekt:
- Można rozpocząć grę bez nikogo w drużynie, a potem dodać bohaterów do drużyny z pomocą Change Party Members (zmień skład drużyny),
- Można ustawić grafikę lidera jako żadną, a potem ją przestawić komendą Change Actor Graphic (zmień grafikę bohatera),
- W RPGVXAce i nowszych jest opcja rozpoczęcia z przezroczystą drużyną w zakładce System. Potem przestawa się to opcją Change Transparency (zmień przezroczystość),
- W WRPGE/RPG2003 z wyłączonym ekranem tytułowym możesz to dodać gdzień w zdarzeniu/ach od ekranu tytułowego.
Nieważne, jak dojdzie się do końcowego efektu, trzeba w tym zdarzeniu ustawić wszystkie niezbędne przełączniki i czas,
oraz wezwać zdarzenie Czas i pory dnia, żeby ustawiło przełączniki od pory dnia. Wygląda to tak (Fadeout/Fadein dla świętego spokoju):
I to w zasadzie tyle. Mam nadzieję, że zdarzeniówka się spodobała, zrozumieliście co ja napisałem przez to morze liter oraz
że użyjecie go w swoim projekcie. W przykładowych projektach, oprócz rzeczy omówionych w tym tutku, można znaleźć zegar
(do ustawiania godziny) oraz łóżko (jako prosty przykład pomijania czasu w grze).
Autor: almostnoruby
email: almostnoruby@live.com
Pobierz:
Czas i pory dnia (WOLF/XP/2k3)
|
|