Dłuższe Wiadomości
- czyli wyświetlanie tekstu na całym ekranie -
Jest to sposób na wyświetlenie wiadomości tak by tekst obejmował cały ekran. Może się to np przydać
do zrobienia różnych notatek, książek itp w świecie gry - gdzie zamiast robić każdą na osobnym obrazku, można po
prostu dać tekst z RMa i pusty obrazek z kartką jako tło.
A więc po kolei.
Jak wiadomo okno w edytorze gdzie wklepujemy tekst daje nam tylko 4 linijki, i nie można tego za bardzo legalnie zmienić,
więc musimy zadziałać inaczej. Użyjemy do tego celu okna z przewijanych wiadomości, które jest bardzo duże i tam
na pewno spokojnie nasz tekst zmieścimy.
No to wchodzimy do ruby do klasy game_interpreter i zjeżdżamy do linijki 333 "def command_105" -
to jest właśnie fragment odpowiedzialny za to co się dzieje gdy dajemy komende długiego tekstu.
Moglibyśmy to zastąpić po prostu tym co się dzieje gdy dajemy wiadomość, ale wtedy stracimy przewijany tekst, zrobimy
więc myk z przełącznikiem. Po prostu damy jeden przełącznik, jak będzie ON to tekst będzie na całym ekranie, jak OFF
to przewijany.
A więc mamy tam coś takiego:
No i to zamieniamy na:
A teraz wyjaśnienie co to w ogóle robi i jak działa.
Pierwsze sprawdzamy czy przełącznik (tutaj 1, ale zamieniając 1 na inną liczbę możecie to zmienić) jest ON.
Jeśli jest OFF to po prostu wykonuje się kod pod ELSE, czyli to co oryginalnie było pod def_command.
Jeśli jest ON to wykonuje się kod który jest kopią tego co jest pod def_command 101 - od wiadomości, ale jest on lekko
zmieniony. Wywalone są linijki odpowiedzialne za ustawianie mordy przy wiadomości - nie są one nam tu potrzebne, a ich
ustawianie byłoby kłopotliwe, bo w edytorze mamy dostęp do tych ustawień tylko przy zwykłych wiadomościach (co tak
swoją drogą jest według mnie badziewnym rozwiązaniem, o wiele lepiej było w RM2k3). Potem mamy ustawienia co do tła,
gdzie znowu w edytorze jest to na sztywno przypisane wiadomości. Tutaj zrobimy sobie myk żeby ustawienia co do prędkości przewijanego tekstu były odpowiedzialne za tło naszej wiadomości.
Jako, że nie można ustawić szybkości 0 to po prostu od naszej wartości szybkości odejmniemy sobie 1. I teraz w zależności jak ustawimy prędkość takie będzie tło:
1 - tło z windowskina
2 - tło to takie czarne półprzeźroczyste
3 lub więcej - brak tła (tu se można podłożyć obrazek)
Dalej mamy pozycję okna - tu na sztywno wpisujemy 0 (czyli góra ekranu).
I to tutaj w sumie tyle, dalej mamy po prostu skąd program ma brać tekst samej wiadomości, tu mamy 405, w zwykłej wiadomości
było 401 i tyle z różnic.
I teraz jakbyście odpalili grę i wklepali długą wiadomość to program nadalby ją wyswietlił w 4 linijkach i pociąłby ją na
kilka okienek, a nie o taki efekt nam chodziło - no więc trzeba jeszcze się pobawić i pozmieniać co nie co w klasie
window_message.
Pierwsze w linijce 30 należy zmienić "fitting_height(visible_line_number)" na "Graphics.height" - czyli wysokość okienka
z 4 linijek tekstu na całe okno gry. Należy tu zauważyć że wysokość okna gry nie jest ustawiona na sztywno więc spokojnie
wszystko się fajnie ułoży i przy dupnej rozdziałce ACE i przy jedynej porządnej 640x480.
Ale jak widać to nam zmieniło wielkość okienek wszystkich, a nie o to nam zupełnie chodziło, no więc trzeba jeszcze
zjechać do linijki 199 "def update_placement" gdzie mamy:
I to zmienić na:
I teraz po kolei. Kod ten odpowiada za pozycje naszego okna. W ACE skrypty są tak napisane że nic nie jest na sztywno,
czyli pozycja naszego okna zależy od rozdziałki gry i od wielkości samego okna. A my tą wielkość zmieniliśmy - i wsio
byłoby ok, gdyby ACE miał okna wyboru, wpisywania zmiennej itp normalnie jak w starszych makerach. Ale nie oczywiście muszą
być one wydupcone i jakoś dziwnie wyświetlane - no nie ważne, może komuś ten efekt się podoba... No dobra, tylko że
zmieniając wielkość naszego okienka wydupcyliśmy te podookienka gdzieś w kosmos no i tu trzeba je ogarnąć, dlatego zmiana:
"(Graphics.height - height)" na "(Graphics.height - fitting_height(visible_line_number))" - po prostu u domyślnie wysokość
okna jest tą 4 linijkową, więc można równie dobrze odjąć samą wysokość okna. My zmieniamy by odejmowano dokładniej tą
4 linijkową co daje nam zawsze ten sam wynik niezależnie od tego jaka na prawdę jest wysokość okna.
I na końcu tam dodajemy sprawdzanie przełącznika i tu już na stałe w zależności od tego czy zmienna jest OFF czy ON
wyświetalamy duże albo małe okno. Pewnie to jest jakiś syf kod i powinien być lepiej ułożony, ale działa to po co grzebać XD.
Też należy zwrócić uwagę żeby przełącznik był OFF podczas wyświetlania zwykłych wiadomości - no bo jak będzie ON, to
wyświetlą się na dużym oknie, a tego nie chcemy.
No i to w sumie tyle - teraz przełączając przełącznik na ON i pisząc tekst w przewijanych możemy wyswietlić statyczny tekst
na całym ekranie. Skróty wiadomościowe itp - wsio powinno działać.
Oczywiście można pobrać demo i w sumie jak macie nowe projekty to nawet na leniwca podmienić całe klasy game_interpreter i
window_message.
Tyle, jest to moje pierwsze kombinowanie w skryptach ACE więc możliwe, że coś sknociłem, jak tak to dajcie znać.
Autor: Dragon Kamillo
Pobierz:
Gra demonstracyjna: RPGVXAce-Dłuższe Wiadomości
Tekst: Dragon Kamillo
Email: k.maciejewski@poczta.onet.pl