Limit przedmiotów

Podstawowe systemy RPG Makera 2000/2003 pozwalają na ich częściowe, czasami robione bardzo dookoła, modyfikacje. Jeśli nie są bardzo kosztowne (w walucie Waszego czasu i mocy obliczeniowych komputera), warto się nad nimi pochylić. Nie tylko pozwoli to urozmaicić rozgrywkę, ale także poszerzy myślenie o programie i uwrażliwi na niekonwencjonalne rozwiązywanie pojawiających się przed nami problemów. Dziś zajmiemy się stworzeniem limitu przedmiotów, które mamy w plecaku.

Zasoby

Omawiany tutaj sposób sprawdzi się w chyba każdej wersji RPG Makera. W nowszych odsłonach programu bez większych problemów ten sam efekt można osiągnąć przy pomocy odpowiednich skryptów, ale wtedy cała sprawa nie miałaby waloru edukacyjnego. Oczywiście jeśli w swojej grze zamierzacie zrobić zupełnie autorskie menu, przedstawione rozwiązania także znajdą tam zastosowanie. W tym tutorialu skupimy się na limicie różnych przedmiotów w plecaku, a nie liczbie egzemplarzy danego przedmiotu, który można wykonać modyfikując zamieszczone tutaj porady.

Szkielet naszego systemu to tak naprawdę dwie zmienne – Liczba posiadanych przedmiotów (0001) i Limit przedmiotów (0002) oraz jeden Common event. Na potrzeby poradnika stworzyłem pięć standardowych przedmiotów oraz jeden fabularny, o którym mowa dalej.

Zarys systemu

Skrypt zliczający liczbę posiadanych przez nas rodzajów przedmiotów (dla uproszczenia będę posługiwał się dalej określeniem „liczby przedmiotów”) można oczywiście za każdym razem kopiować w evencie, w którym chcemy go wykorzystać, ale jest to ogromne marnotrawstwo środków. Zdecydowanie lepiej umieścić go w Common evencie, dzięki czemu będziemy mogli go wywołać z każdego miejsca w grze. Złota zasada dobrego makerowania mówi, że jeśli jakiś kod ma być wykonywany więcej niż kilka razy, warto umieścić go właśnie w zakładce Common events.

Nasze zdarzenie nie powinno mieć Triggera, dlatego to pole zostawiamy ustawione na None (dzięki temu będzie wykonywane jedynie wtedy, gdy je wywołamy odpowiednią komendą). W pierwszej kolejności powinniśmy ustawić zmienną 0001:Liczba itemów na 0, dzięki czemu unikniemy fałszowania wyników liczenia przy kolejnych wywołaniach.

Następnie wstawiamy warunek (Conditional Branch), w którym na drugiej stronie zaznaczamy opcję Item, wybieramy pierwszy przedmiot z listy i ustawiamy go na „is in Inventory”. W środku tego warunku dodajemy do zmiennej 0001:Liczba itemów wartość 1. Dzięki temu w przypadku posiadania przez nas miecza w plecaku, zostanie on policzony jako jeden przedmiot. Dalej tworzymy analogiczne warunki dla pozostałych przedmiotów.

I to wszystko. Teraz gdy wywołamy tak przygotowany Common Event, zapisze on w zmiennej 0001 liczbę posiadanych przez nas w plecaku rzeczy.

Limit przedmiotów

Gdy wiemy już, ile gracz posiada przedmiotów, możemy zacząć zastanawiać się, jak to wykorzystać. W zmiennej 0002:Limit itemów znajdować się będzie maksymalna liczba przedmiotów, które możemy posiadać. W naszym przykładzie będą to 4 przedmioty, dlatego na taką wartość ustawiłem zmienną. Przy okazji dodałem też 3 itemy, żeby od razu znaleźć się na granicy limitu. Wszystko umieściłem w odrębnym evencie na mapce.

Limit będzie miał zastosowanie w dwóch sytuacjach. Po pierwsze, ma nie dopuścić do tego, by gracz posiadał więcej przedmiotów. Po drugie, jeśli gracz mimo wszystko będzie miał więcej przedmiotów, gra powinna zmusić go do tego, żeby się ich pozbył.

Blokujemy zdobycie przedmiotu

Załóżmy, że gracz znajduje skrzynię, w której jest jakiś przedmiot. Nasz skrypt powinien sprawdzić, czy mamy jeszcze na niego miejsce w plecaku, a jeśli tak – dać go graczowi.

Jak wspomniałem, mamy już miecz, tarczę i zbroję, dlatego w przykładowej skrzynce będziemy mogli zdobyć hełm. W evencie skrzyni pierwsze co robimy, to wywołujemy Common event z liczeniem przedmiotów. Następnie sprawdzamy, czy liczba posiadanych przez gracza przedmiotów jest mniejsza niż limit (pamiętajcie o zaznaczeniu opcji ELSE!). Jeśli tak, wręczamy mu hełm.

W opcji ELSE musimy wstawić warunek sprawdzający, czy gracz posiada w plecaku hełm. Jeśli gracz będzie bowiem miał 4 przedmioty, a jednym z nich będzie właśnie hełm, skrypt nie da mu drugiego – program nie rozróżnia, jakie itemy konkretnie posiadamy. Przy spełnieniu warunku, gra powinna obdarować kolejnym hełmem. Także tutaj pamiętajcie o zaznaczeniu opcji ELSE, w której umieścimy informację o przekroczeniu limitu przedmiotów.

Cały skrypt działa więc w taki sposób, że najpierw sprawdza liczbę przedmiotów w plecaku, a jeśli jest mniejsza niż limit – dodaje do niego kolejny item. Jeśli gracz osiągnął limit, ale posiada już egzemplarz danego przedmiotu, gra wręcza mu kolejny. Gdy jednak żaden z powyższych warunków nie jest spełniony, skrypt odmówi obdarowania nas hełmem. By przetestować naszą konstrukcję, w przykładowym projekcie umieściłem dwie skrzynie z hełmem i pasem. Możecie wybrać je w dowolnej kolejności i zweryfikować, czy nasze rozwiązanie jest słuszne.

Co, gdy gracz zdobył nadmiarowy przedmiot?

Może się okazać, że mimo naszych wysiłków gracz w jakiś sposób zdobędzie przedmiot powyżej limitu. Stanie się tak wtedy, gdy zapomnicie sprawdzić liczby itemów w plecaku albo gdy korzystacie ze standardowego menu walki i przewidujecie możliwość dropu z potworków albo zakupu przedmiotów w sklepie. W takiej sytuacji konieczne jest stworzenie mechanizmu, który będzie zmuszał gracza do pozbycia się dodatkowego ciężaru.

Podstawowe menu w RM2k/2k3 nie umożliwia wyrzucania przedmiotów z poziomu zakładki plecak. O ile jeszcze medykamenty można czasami zużyć, a uzbrojenie założyć, musimy przygotować się na sytuację, gdy nie będzie to możliwe. Według mnie najlepszym rozwiązaniem tego problemu jest zmuszenie gracza do sprzedaży przedmiotów.

By to zrobić będziemy potrzebowali nowego Common eventa, którego Trigger należy ustawić na Parallel Process (żeby cały czas działał w tle). Następnie wywołujemy Common event sprawdzanie itemów i weryfikujemy, czy zmienna Liczba itemów jest większa od zmiennej Limit itemów. Jeśli tak, wywołujemy sklep. Dopóki gracz nie pozbędzie się nadmiaru, sklep będzie uniemożliwiał mu dalszą grę. Typ sklepu należy ustawić na Sell Only.

Zgodnie z inną złotą zasadą makerowania, w tle powinny działać tylko te skrypty, które są niezbędne w danym momencie (utrudnia to doprowadzenie do lagowania gry). Dlatego, jeśli chcecie być purystami programistycznymi (a chcecie), Trigger sklepu należy zmienić na None i wywoływać go tylko wtedy, gdy liczba itemów przekroczy wyznaczony limit. Warunek sprawdzający tę okoliczność należałoby umieszczać z przyzwyczajenia zawsze wtedy, gdy istnieje możliwość zdobycia przedmiotów przez gracza.

Przedmioty questowe

Analizując treść naszego skryptu nietrudno dojść do wniosku, że może on być bardzo kłopotliwy, gdy w grze wystąpi jakiś istotny fabularnie przedmiot. Jeśli osiągniemy limit przedmiotów, a spotkany przypadkiem w lesie następca tronu koniecznie będzie chciał nam wręczyć list do swojego ojca, gra może się zwyczajnie posypać. Bez sensu jest w każdej tego typu sytuacji wstawianie warunków sprawdzających przedmioty (trzecia złota zasada makerowania brzmi – upraszać wszystko, co tylko możliwe), a zmuszanie gracza do pozbycia się starannie wyselekcjonowanych skarbów może zostać uznane za niesprawiedliwe.

Dlatego warto wprowadzić kategorię fabularnych przedmiotów, które nie będą liczone do ogólnego limitu w plecaku. Należałoby je jakoś oznaczyć (w przykładzie jest to znacznik [Q] przed nazwą) i, co najważniejsze, pominąć je w Common evencie zliczającym przedmioty omówionym na samym początku. Dzięki temu będą przez nasz skrypt traktowane tak, jakby ich de facto nie było.

Podsumowanie

Ten prosty w swojej budowie skrypt daje spore możliwości fabularne i mechaniczne. Limit przedmiotów może oznaczać to, że po jego przekroczeniu postać będzie chodziła wolniej, wejście do matematycznej świątyni będzie otwarte tylko dla graczy, którzy mają w plecaku liczbę przedmiotów podzielną przez 3, a heros, który witając się z królem nie będzie miał żadnego przedmiotu, może otrzymać dodatkowe pieniądze. Warto pokombinować, zwłaszcza że zmiana limitu to jedna operacja na zmiennej!

Michał „Michu” Wysocki

– Download przykładowego projektu –

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.