Wyświetlanie liczby na obrazkach

RPG Maker 2k/3 umożliwia, dzięki swojej budowie, tworzenie własnych systemów walki, menu i innych elementów potrzebnych do kompletnej realizacji swojej wizji danego projektu. Większość z nich wymaga jakiegoś sposobu przekazywania graczowi konkretnych informacji – najczęściej w formie liczbowej. Może to być jego aktualne lub maksymalne HP, liczba posiadanego złota, czas potrzebny do pokonania przeszkody itp. Możliwe jest pokazanie tych informacji za pomocą eventów, ale rzadko kiedy będzie to estetyczne i efektywne. Dlatego dziś zajmiemy się pokazywaniem liczb przy pomocy obrazków.

Zasoby

Do wykonania skryptu potrzebne nam będzie dziesięć plików picture z cyframi do 0 do 9. Możecie je wybrać dowolnie, ja zazwyczaj robię screena z wiadomości w grze, gdzie wyświetlam wszystkie cyfry. Przygotowując swoje pliki pamiętajcie jednak, by wszystkie miały dokładnie te same wymiary! Nie jest to wiele dodatkowej roboty, a w sposób trudny do przecenienia ułatwi nam dalszą pracę.

Plan skryptu

Wiele podręczników programowania (a tym się tak naprawdę tutaj zajmujemy) radzi, by przed przystąpieniem do pisania kodu rozrysować sobie dokładnie to, jak ma on działać. W naszym przypadku skrypt ma dostawać wskazaną przez nas dowolną liczbę i pokazać ją przy pomocy obrazków – jedna cyfra na każdy rząd wielkości (czyli np. dla liczby 867302 wyświetlane będzie 6 oddzielnych obrazków).

Jednocześnie będziemy chcieli całość zautomatyzować i uprościć tak bardzo, by można ją było modyfikować bez wielkich ingerencji lub, co gorsza, niepotrzebnego kopiowania kodu. Dlatego musimy stworzyć 7 zmiennych, które będą odpowiadały za poszczególne parametry wyświetlanych obrazków. Przykład poniżej.

Wyświetlanie obrazka

Najnowsze wersje RPG Makera 2003 pozwalają na daleko idącą automatyzację działań związanych z obrazkami. Dlatego w naszym skrypcie wszystkie zmienne ustawimy tylko raz, a zmieniać w dalszej kolejności będziemy jedynie sam plik obrazu. Poniżej pokazano, jak należy przypisać zmienne w komendzie Show Picture.

Początek skryptu

Skrypt podzieliłem na dwa common eventy. W common evencie Wyświetlanie będzie znajdował się skrypt pokazujący liczbę, a common event Usuwanie będzie czyścił ekran z obrazków z liczbami. Oba common eventy należy ustawić w zakładce Trigger na None, ponieważ będą wykonywane tylko wtedy, gdy je do tego zmusimy.

Liczba, którą chcemy pokazać, znajdować się musi w zmiennej 0006:Liczba – omówimy ją dokładniej, gdy będziemy wywoływać skrypt. Pierwsza linijka common eventa powinna przypisywać wartość zmiennej Liczba do zmiennej 0007:Liczba kontrolna. Dzięki takiej operacji będziemy mieli na początku skryptu dwie zmienne z taką samą wartością.

Następnie zwiększamy wartość zmiennej 0001:Numer obrazka o 1. Dzięki temu nowe obrazki nie będą się nam nakładały na stare, jeśli chcemy pokazać więcej niż jedną liczbę równocześnie, a do tego usuwamy ryzyko powstania w tym miejscu jakichś bugów.

Pracujemy z założeniem, że największa liczba, jaką chcemy pokazać, to niecały milion, czyli 999999. Dlatego po zwiększeniu numeru obrazka dodajemy warunek jak na poniższym screenie. Sprawdzamy, czy nasza liczba jest większa lub równa 900000, czyli czy pierwsza cyfra z lewej to 9. Jeśli tak, wyświetlamy obrazek z cyfrą 9 wykorzystując wcześniej przygotowane Show Picture. Pamiętajcie, by zaznaczyć opcję ELSE!

 

Teraz kopiujemy cały warunek i umieszczamy w polu ELSE poprzedniego. Zmieniamy tylko dwie rzeczy – w samym warunku 900000 zamieniamy na 800000, a w Show Picture obrazek z dziewiątką zmieniamy na ósemkę. Jak pewnie nietrudno się domyślić, robimy to aż do 100000 i jedynki. W polu ELSE ostatniego warunku umieszczamy natomiast tylko jedną komendę – od zmiennej 0002:X obrazka odejmujemy 6. Chodzi o to, by liczba wyświetlała się nam zawsze z lewej strony od początku, niezależnie od tego, jak długa ona jest. Wartość 6 wynika natomiast z tego, że tyle wynosi szerokość plików z cyframi.

Po ostatnim warunku, zanim przejdziemy do kolejnych cyfr, należy jeszcze zwiększyć zmienną X obrazka o 6 (jeśli nie było cyfry odpowiedzialnej za setki tysięcy, ta operacja zniweluje efekt poprzedniego odejmowania, a jeśli była – wskaże miejsce kolejnej cyfry) oraz zwiększyć zmienną Numer obrazka o 1 (nie zawsze będzie to potrzebne, ale nie ma co komplikować sobie życia).

Wyświetlanie kolejnych cyfr

W porządku, mamy już wyświetlone setki tysięcy. Co jednak zrobić, by w zmiennej znalazły się dziesiątki tysięcy, czyli kolejna cyfra w liczbie? Należy użyć operacji modulus, która umożliwia uzyskanie reszty z dzielenia. Przykładowo, jeśli weźmiemy liczbę 123456 (sto dwadzieścia trzy tysiące czterysta pięćdziesiąt sześć) i zastosujemy na niej modulus 100000 (sto tysięcy), uzyskamy liczbę 23456 (dwadzieścia trzy tysiące czterysta pięćdziesiąt sześć), ponieważ tyle właśnie wyniesie reszta z dzielenia – w 123456 mieści się tylko jedno pełne 100000, reszta to, no właśnie, reszta.

Dlatego pierwszą komendą segmentu wyświetlającego dziesiątki tysięcy powinno być zastosowanie na zmiennej Liczba operacji modulus ze wskazaniem, że dzielimy przez 100000.

Następnie wstawiamy prawie ten sam kod z warunkami, co w przypadku setek tysięcy. Pamiętajcie jedynie, by w każdym z warunków usunąć jedno zero – sprawdzamy bowiem, czy liczba jest większa lub równa 90000, 80000 itd.

Jest jeszcze jedna bardzo ważna różnica. W polu ELSE ostatniego warunku (tego, który sprawdza 10000) dodajemy nowy warunek z opcją ELSE – sprawdzamy, czy zmienna 0007:Liczba kontrolna jest większa lub równa 100000 (sto tysięcy) – jeśli tak, pokazujemy zero. Jeśli nie – od X obrazka odejmujemy 6.

Ostatnia modyfikacja wynika z tego, że jeśli w środku dużej liczby występują zera (np. w liczbie 130004), modulowanie jej doprowadzi do tego, iż program będzie zachowywał się tak, jakby liczba była w rzeczywistości dużo krótsza. Z tego też powodu na samym początku common eventa przypisywaliśmy liczbie kontrolnej wartość pokazywanej przez nas liczby. W przeciwieństwie bowiem do tej ostatniej, zmienna 0007:Liczba kontrolna nie będzie w żaden sposób modyfikowania skryptem. Jeśli nie wierzycie mi na słowo, spróbujcie uruchomić skrypt bez ostatniego warunku wyświetlającego zero.

Analogicznie należy wprowadzić kod dla tysięcy, setek, dziesiątek i jedności, zabierając w komendach poszczególne zera. Na samym końcu, przy jednościach, nie będzie już potrzebny warunek z liczbą kontrolną – w ostatnim polu ELSE wystarczy po prostu pokazać 0.

Usuwanie obrazków

W trakcie gry może pojawić się konieczność usunięcia z ekranu wcześniej wyświetlonych obrazków. Można to osiągnąć na dwa sposoby – albo faktycznie je usuwając, albo ustawiając ich przezroczystość na 100%. Nie polecam jednak tego ostatniego – naszym głównym założeniem powinna być czystość kodu i niewykorzystywanie mocy obliczeniowych komputera wtedy, gdy jest to zbędne.

Dla ułatwienia sprawy proponuję zrobić odrębny common event, po wywołaniu którego usuwane będą obrazki. W moim przykładzie usuwamy wszystkie, ale może się przecież zdarzyć, że będziecie chcieli pozbyć się tylko części. Można to wykonać na kilka sposobów, np. wstawiając w common evencie warunki, po spełnieniu których usuwane będą tylko obrazki o określonych liczbach.

Wywołanie skryptu

Spróbujmy teraz wywołać skrypt na podanym przykładzie w evencie na mapie.

Spotkany NPC najpierw informuje nas, co robi, a następnie losuje jakąś liczbę z przedziału od 1 do 1000 i tyle dodaje nam złota. Dalej ustawiamy parametry wyświetlania naszych obrazków (zmienne, które tworzyliśmy wcześniej) – numer obrazka, poziome (X) i pionowe (Y) położenie obrazka, jego przezroczystość i powiększenie (100 oznacza normalny rozmiar).

Następnie, i to jest kluczowe dla całej sprawy, przypisujemy do zmiennej Liczba wartość, którą chcemy pokazać. W naszym przykładzie są to pieniądze, możemy więc skorzystać z gotowej komendy z Control variables. Na koniec wywołujemy common event Wyświetlanie.

Jeśli wszystko poszło dobrze, u góry z prawej strony powinna wyświetlić się nam liczba. Usuwaniem obrazków może zająć się drugi NPC zgodnie z komendami podanymi niżej. Rozmowa z nim usunie wszystkie elementy wyświetlonej liczby.

Więcej niż jedna liczba

Pójdźmy dalej i sprawmy, że na ekranie pojawią się dodatkowe liczby zupełnie od siebie niezależne. W zaprezentowanym przykładzie NPC będzie wyświetlał HP i MP gracza w lewy górnym rogu. Jak widzicie, ustawiłem numer pierwszego obrazka na 10 (liczba złota nigdy nie będzie większa niż 6 cyfr, więc obrazki nie będą się nakładać – można dzięki temu wywoływać liczby niezależnie od siebie), zmniejszyłem także wartość X (by liczba znalazła się po lewej stronie). Na koniec przypisałem zmiennej 0006 wartość mojego HP – i gotowe!

Wywołanie skryptu nie wymagało żadnych wielkich modyfikacji. Analogicznie należy wywołać liczbę MP postaci (zmianie uległa wartość Y, żeby to zrobić pod spodem).

Co do zasady, nie trzeba za każdym razem ustalać wartości dla zmiennych odpowiadających za rozmiar czy przezroczystość, ale jest to pożądana praktyka. W bardzo rozbudowanych skryptach może się okazać, że wartość z jednego miejsca przez nieuwagę ląduje w innym i powstaje bug. Dlatego ustalanie tych wartości za każdym razem na nowo ogranicza możliwość powstania błędów.

Twórcze rozwinięcie

Skrypt można rozwijać na masę różnych sposobów. Ja w przykładowym projekcie umieściłem księdza, który nie tylko dodaje nam losową ilość złota oraz wyświetla jego ogólną liczbę u góry ekranu, ale także przez sekundę pokazuje nam aktualną darowiznę nad bohaterem. Zachęcam do własnych eksperymentów!

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.