ERM


A WoG nagy újítása, hogy a játék eseményeihez (belépés egy épületbe, csata, egérkattintás stb. ..) saját szkripteket lehet írni. Ezek minden alkalommal végrehajtódnak, amikor a beállított típusú esemény bekövetkezik. A wogosítási menüben kiválaszthatjuk, hogy mely szkriptek legyenek bekapcsolva. Ezt az "Eseményekhez rendelt bővítményt"-t (kb.) nevezzük angolul "Event Related Model"-nek, ERM-nek.
Az ERM szkriptnyelvben az általános célú programozási nyelveknél szokásos aritmetikai műveleteken, IF-THEN-ELSE szerkezeten, ugróutasításokon, funkcióhívásokon és FOR-NEXT/DO-LOOP ciklusokon stb. kívül rengeteg speciális utasítás is van, pl. van egy, a hősök aktuális manapontjának a lekérdezésére.
Az ERM editor és a hozzá tartozó HTML alapú, angol nyelvű súgó letölthető a Magyar Honlapról (erm_tools.wog), és kiegészítőként telepíthető fel. / Másolás a játék Update könyvtárába, és a h3wupd.exe futtatása angol területi beállítások mellett./

***

Az ERM nyelv rövid áttekintése

Azokhoz az eseményekhez lehet szkriptet írni, amelyekhez a H3WOG.EXE-ben létezik trigger. Minden szkript, valamilyen triggerrel kezdődik. Például, ha egy hős meglátogat egy manakutat (48-as típusú objektum), akkor az "!?OB48;" kezdetű szkriptek mind aktív állapotba kerülnek, és a beolvasás sorrendjében végrehajtódnak. A WoG beépített parancsértelmezője a soronkénti végrehajtást a következő trigger elérésekor befejezi, és átugrik a következő aktivált triggerre. Az utolsó aktív triggerhez tartozó kódrészlet lefutása után a végrehajtás visszakerül az alapprogramhoz (H3 SoD). A kezdő trigger utáni részben kérdezhetjük le a különböző dolgok aktuális értékeit (pl. a hős neve), és különböző parancsokat adhatunk ki. Ezeket a parancsokat egységesen receiver-nek ("fogadó") nevezzük. Az összes trigger "!?", vagy "!$" kezdetű, és az összes receiver eleje "!!".
Pl.: az !!IF:M^Helló^; sor az előbbi trigger után írva, minden manakút látogatáskor köszön a hősöknek (AI hősöknek is). Részletes súgó angol és orosz nyelven van az ERM editorhoz, ráérő fordítókat szívesen látunk.
A szkripteket az éppen szerkesztett pálya, mapeditor - térkép - opciók/timed events részébe, vagy a játék data/s könyvtárban létrehozott scriptxx.erm nevű file-okba lehet bemásolni. Az első esetben a szkript csak az aktuális pályán lesz aktív, a wogosítási beállításoktól függetlenül, a második esetben viszont minden pályán. Minden szkriptet tartalmazó timed event, vagy *.erm file tartalmaz "ZVSE" sort az első trigger előtt, ez szükséges a szkriptek lefutásához.
A szkript integrálása a wogosítási menübe két úton történhet:egy scriptxx.ers file létrehozásával, ill. a data mappában található zsetup01.txt szerkesztésével. Mindkét esetben az erm editorral tábla nézetben való újranyitás után létre kell hozni egy új sort, amiben megadjuk a szkript adatait. A szkriptet szintén módosítani kell: meg kell szakítania a futását, ha a hozzá rendelt wogosítási opció ki van kapcsolva.

***

Erős idegzetűeknek

Kicsit részletesebben a WoG technikai hátteréről:
A h3WoG.exe alapja a H3SoD exe-je (v3.2). A játék betöltésekor, a Wogosítási opciók beállításakor igazából az opció számának megfelelő 1 bites system flag-ek állítódnak 0-ra, vagy egyre. A pálya betöltésekor a WoG parancsértelemző beolvassa az összes elérhető timed event-ből és *.erm file-ból a szkripteket, sorokra bontva. A beolvasás sorrendje: timed events: a mapeditorban megadott sorrend; *.erm file-ok: script00.erm első sortól script99.erm utolsó sorig. Hibaüzenet esetén a hibakezelőt elindító sor beolvasáskor kapott sorszáma fog díszelegni az ablakban. Ha játék közben mentünk, akkor ezek a sysflagek, és az összes beolvasott szkript is bekerül a mentésbe. Éppen ezért játék közben a beállításokon már csak a mentés hexaeditorral történő szerkesztésével, vagy a játék kezdetekor már betöltött, erre szolgáló szkripttel tudunk változtatni. (az ERM debugger szkript lehetővé teszi opciók ki/be kapcsolgatását játék közben)
Ha a játék futás közben elér egy kilépési pontot, akkor a SoD-ot futtató héjprogram azonosítja a kilépési pont (trigger) típusát, és az egyező típusú trigger utasításokról listát készít. A triggerek végrehajtási sorrendje egyezik a beolvasási sorrendjükkel. Az utánuk következő kódrészeket a WoG parancsértelmezője hajtja végre. A 3.58 verziónál a hibakezelés a SoD-tól átkerült a héjprogramhoz. Maga a parancsértelmező a sorokon belül balról jobbra halad, aritmetikai műveleteknél is. /2+4*5=30, pl.:)/
A (feltételes) ugró utasítások 3.58 alatt csak kerülő úton hajthatók végre, (feltételes) funkcióhívásokkal. Az egész szerkezet, a SoD maggal, a héjjal és a szkriptekkel felfogható egy olyan bővíthető exe-ként is, amihez változó számú dll file tartozik.

Forrás: doom3d.uw.hu