Kurs ERM – cz I – wstęp

Zaczynamy pierwszy wpis z serii „Kurs ERM”. ERM jest bardzo fajnym językiem skryptowym, który pozwala w niezwykle dużym stopniu modyfikować mechanikę kultowej gry Heroes of Might and Magic III. Jest to rzecz, która odróżnia WoGa od swojego konkurenta – Horn of the Abyss.

ERM dosyć mocno różni się od tradycyjnych języków programowania. Wynika to z pewnością z tego, że jego obsługa była wprowadzana poprzez modyfikację kodu binarnego. Nie było to z pewnością proste zadanie. Niemniej, twórcom WoGa wyszło to znakomicie.

Ten poradnik pokazuje, jak tworzyć skrypty pod WoG 3.58F. Erą i omówieniem różnic między WoG i Erą zajmiemy się w jednej z ostatnich części.

Czego dowiesz się z tej części poradnika? Nauczysz się:

  • Z jakich narzędzi korzystać przy pisaniu skryptów ERM
  • W jaki sposób można dołączać skrypty ERM do gry w Heroes III
  • Jakie są rodzaje poleceń w ERM
  • Jak napisać „Hello World” w ERM

Przygotowanie środowiska

Proponuję, abyś zainstalował grę w innym folderze niż C:\Program Files, np.: C:\Games\WoG. Dlaczego? Jeśli nie uruchomimy ERM Scriptera czy edytora map jako administrator, mimo zapisania wyników naszych prac do folderu maps możemy ich tam nie znaleźć. Dzieje się tak, gdyż Windows „chroni” zawartość oryginalnego C:\Program Files przed modyfikacją przez zwykłego użytkownika. Te pliki są zapisywane w specjalnym katalogu, do którego ścieżka jest dosyć skomplikowana: C:\Users\[twoja nazwa]\AppData\Local\VirtualStore. My nie chcemy takiej komplikacji, dlatego najlepiej zainstaluj grę w głównym katalogu dysku (C:\Games\WoG).

Narzędzia, których będziemy używać, możesz ściągnąć stąd:

Jak dołączyć skrypt ERM?

Jest to podstawowe zagadnienie. W WoGu skrypt może być dołączony na jeden z trzech sposobów:

  • Jako plik o nazwie takiej samej jak mapa, tyle że z rozszerzeniem ERM (np.: jeśli nasza mapa nazywa się wyzwolenie.h3m to skrypt erm będzie znajdował się w pliku wyzwolenie.erm)
  • W zdarzeniu czasowym mapy
  • W folderze Data/s (tam znajdują się skrypty Woglifikacji)

ERA (następca WoGa) nie obsługuje umieszczania skryptów w pliku zewnętrznym. My się w chwili obecnej uczymy pisania skryptów pod starszego WoGa 3.58F, więc nie musimy się przejmować tym ograniczeniem.

Edytory skryptów ERM

Skrypt możesz pisać w czym tylko zechcesz. Może to być edytor map WoGa, czy nawet zwykły notatnik. Jednakże wiąże się z tym brak kolorowania składni. Przez to znalezienie ewentualnych błędów jest o wiele cięższe.

My będziemy korzystali z edytora Erm Scripter znajdującego się w pakiecie ERM Tools. Link do paczki znajduje się we wcześniejszej części wpisu. Jest to bardzo przyjemne w obsłudze środowisko, które koloruje składnię poleceń ERM. W pakiecie znajduje się także ERM Help, z którego będziemy często korzystali przy pisaniu skryptów.

Jakie są rodzaje poleceń ERM?

Jeśli kiedykolwiek programowałeś w „prawdziwych” językach programowania (takich jak C,C++,Java) to odrzuć całą tą wiedzę, jaką do tej pory przyswoiłeś! Składnia ERM nie ma nic wspólnego z tymi językami. Podejdź do tego tak, jakbyś nigdy nie programował (jeśli tak jest – masz łatwiej J).

W ERM występują trzy główne rodzaje poleceń:

  • Triggery (wyzwalacze) – rozpoczynają się znakami !? lub !$. Wyzwalacze mówią o tym, kiedy dany kod ERM ma się wykonać. Wyzwalaczem może być np.: wejście do obiektu o określonych współrzędnych, aktywacja danego zdarzenia czasowego czy rozpoczęcie bitwy. Większość wyzwalaczy zaczyna się znakami !?. Oznacza to, że skrypt obsługujący ten wyzwalacz jest wykonywany tuż po zaistnieniu zdarzenia. Np.: obsługa !?LE30/40/50 zostanie wykonana tuż po wejściu bohatera na zdarzenie czasowe zlokalizowane na tych współrzędnych. Natomiast kod obsługujący !$LE/30/40/50 jest wykonywany na samym końcu (po wykonaniu !?LE30/40/50 oraz po „normalnym” zachowaniu obiektu).
  • Receivery (odbiorcy?) – rozpoczynają się znakami !!. Receivery wykonują właściwe działania na artefaktach, bohaterach, obiektach itd. Cały kod obsługi Triggerów składa się z Receiverów.
  • Receivery, uruchamiane przy starcie scenariusza – rozpoczynają się znakami !#. Tym sposobem możemy np.: nadać nazwy własnym obiektom, ustawić statystyki stworzeń czy zainicjować wstępne wartości zmiennych (zmiennym będzie poświęcony kolejny odcinek). Receivery !# są uruchamiane tylko wtedy, gdy uruchamiamy nową grę. Komendy te nie są wykonywane, kiedy wczytujemy grę z zapisu.

Napiszmy Hello World w ERM

Poznaliśmy podstawowe założenia języka ERM. Pora na praktykę.

Utwórz mapę, taką jak na screenie poniżej. (Jeśli pobrałeś paczkę z narzędziami, do której link znajduje się na początku wpisu, to znajdziesz tam plik lekcja1.h3m, zawierający tą mapę. Wtedy przekopiuj ją po prostu do katalogu z mapami WoG). .Zwróć uwage na położenie zdarzenia czasowego, które powinno znajdować się na współrzędnych 31/5/0.

We właściwościach zdarzenia czasowego usuń ptaszek przy polu: „Usuń zdarzenie po pierwszej wizycie”.

Ustaw jakiś warunek zwycięstwa. (Jest to obojętne, jaki. Nie chcemy po prostu, aby mapa zakończyła się od razu naszym zwycięstwem). Zapisz mapę pod nazwą: lekcja1.h3m.

Odczytaj współrzędne zdarzenia. Na screenie powyżej jest to: 31/5/0. Pierwsza cyfra oznacza położenie w kierunku „poziomym” (górna belka edytora). Druga cyfra natomiast: położenie w kierunku „pionowym” (lewa belka edytora). Ostatnia cyfra mówi nam o tym, czy zdarzenie znajduje się na powierzchni (0) czy w podziemiach (1).

Otwórz teraz Erm Scripter. Powinien znajdować się w folderze erm_s w katalogu, w którym znajduje się WoG. Kliknij File->New i wybierz Erm Document.

Powyżej znajduje się nasz skrypt ERM. Nie zapomnij o tym, że zawsze na początku pliku ERM powinno znajdować się słówko ZVSE. Informuje ono interpreter o tym, że następne linijki to będzie właśnie kod ERM.

W skrypcie mamy dwie linijki. Pierwsza z nich to trigger: Zdarzenie o współrzędnych 31/5/0. W obsłudze tego triggera znajduje się receiver !!IF:M. !!IF:M Wyświetla okno tekstowe, w którym znajduje się tekst wpisany pomiędzy znakami ^^. Zapisz skrypt pod nazwą lekcja1.erm. w folderze z mapami. Uruchom grę.

Jeśli po wejściu na zdarzenie czasowe o współrzędnych 31/5/0 wyskoczył ci komunikat: „Hello World” – jesteś zwycięzcą! Właśnie udało ci się napisać swój pierwszy skrypt ERM. Jeśli nie, przeanalizuj jeszcze raz zawartość tej części poradnika. Ta pierwsza część jest podstawą do tego, abyś rozumiał dalsze skrypty i rozważania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *