Ugrás a tartalomhoz

Star Wars Galactic Battlegrounds szkriptek/Az első lépések

A Wikikönyvekből, a szabad elektronikus könyvtárból.

Az első lépések

[szerkesztés]

Döntsük el, mit akarunk

[szerkesztés]

Először is jelöljünk ki egy konkrét és lehetőleg ne túl ambíciózus célt. „Létrehozom a legjobb automata játékost.” - ez szép cél, de nehéz megvalósítani. A SWGB-ban sokféle játékmód van, valószínűleg nincs olyan játékos, aki minden beálítás mellett optimálisan működik. Tapasztalatlan AI szkripter számára mindenképp érdemes kisebb feladatokkal kezdeni.

Még egy viszonylag buta AI létrehozása is több (hó)napos programozási feladat lehet. Ennek egyik oka egyébként főleg a szkriptnyelv nehézkessége, "túl durva" (már emlegetett makromenedzsment eszköz) volta, az, hogy viszonylag kevés lehetőséget ad a szkripter kezébe. Nekem személy szerint magas fokú nehézséget jelentett az is, hogy a szkripteket Notepad-es környezetben kell írni, ami miatt nincs sok lehetőség a több ezer soros szkriptek tagolására, kiemelésre, áttekinthetőbbé tételére.

A SWGB, ún. aréna-RTS műfajú játék lévén, még egy viszonylag egyszerű RTS-nek számít, s mégis: az az állapottér, a CP számára felmerülő döntések lehetőségeinek összessége, amelyben el kell igazodnia, iszonyatosan nagy. Logikai szempontból még a legegyszerűbb RTS is sokkal-sokkal bonyolultabb, mint a klasszikus stratégiai játékok, pl. a sakk vagy a go. A játékok bonyolultsága nagyon durván ugyan, de becsülhető a bd hatvánnyal, ahol b a játéktér egy lépés általi elágazásainak száma (branching), d pedig a játékmélység (hány lépést teszünk). Míg a sakk bonyolultságának - nagyon durván és valószínűleg nagyon alulról - becsült értéke 3580 ≈ 10123,5, egy átlagos go-játszmáé, mondjuk (ha csak a nagyságrendet nézzük), 200200 ≈ 10400, addig egy átlagos 25 perces online StarCraft meccsé akár (10200)36000, azaz tíz a hétmilliomodikon körül is lehet (nem hétmillió! hanem tíz a hétmilliomodikon! Egy egyes és utána hétmillió nulla!). [1]

Az AI szkriptnyelv által definiált állapottér ennél jóval kisebb, de kiinduló eszközeinek korlátozottsága ellenére(!), még mindig szinte áttekinthetetlenül nagy! Egy felhasználói AI-nak a sztenderd (beépített) AI-hoz viszonyított teljesítménye roppant mód függhet nemcsak a térképtől, a választott civilizációtól, de a nehézségi módtól is (ugyanis a sztenderd AI nem egészen ugyanazt csinálja könnyű, nehezebb és legnehezebb módban, csak sokkal jobban; hanem sok szempontból egészen mást és mást csinál). Egy nem elég óvatosan szerkesztett gungan CP, amely egy vízparti bázisról indulva lenyom mindenkit (a gunganek ugyanis jók vízben), egy víz nélküli pályán esetleg megreked a kőkorszakban.

Tehát célszerű, legalábbis eleinte, korlátozni a lehetőségeket, választani pl.:

  1. térképtípust
  2. civilizációt
  3. nehézségi fokozatot;
  4. diplomáciai konfigurációt (hány játékos lesz még a térképen, közülük hány ember, hány szövetséges, és hány ellenséges);

és erre optimalizálni a játékost. Nem kell minden fenti lehetőséget egyszerre rögzíteni, de legalább néhányat érdemes.

Érdemes továbbá készíteni egy tervet, hogy mi az, amit mindenképpen el akarunk érni a CP-vel, és mely feladatok legyenek másodlagosak. Az RTS-ek a választásról szólnak: mindent, legalábbis egyszerre, nem lehet végrehajtani. Húsz Jedi-lovagot is képezni, meg egy századnyi hipererős légi armadát, mindkettőhöz nem biztosan elegendőek az erőforrások.

Persze ha nem akarunk csalásokat használni. Mivel a sztenderd AI is csal, ettől önmagában nem kell idegenkedni (sőt), csak ezt is el kell dönteni: mennyi a minimum, mennyi a túl sok. Sem a csalások miatt legyőzhetetlen CP, sem a többi CP csalásai miatt túl gyenge, nem szórakoztató ellenfél/szövetséges.

Ha eldöntöttük, mit akarunk, bármi is legyen az, belevághatunk az első konkrét lépésbe: létre kell hozni az üres szkriptfájlt.

Hogyan hozzuk létre az AI fájl(oka)t?

[szerkesztés]

A Genie motor, amin az Age of Empires sorozat és a SWGB is alapszik, a játékoszintű AI szkripteket egyszerű ASCII szövegfájlokban tárolja, amelyek legkönnyeben a Windowsba épített, jól ismert Notepad.exe programmal szerkeszthetőek [mj 1]. Ha AI szkriptet akarsz írni, akkor mindenekelőtt létre kell hoznod ezeket a szövegfájlokat. Ennek kézenfekvő módja a következő:

  • találj ki egy nevet az AI-dnek. Mondjuk legyen „Testguy”!
  • Navigálj a Star Wars Galactic Battlegrounds-od mappájába, ahová a program telepítve lett, és ott keresd meg és nyisd meg a \Game almappa \AI al-almappáját; tehát a ...\Star Wars Galactic Battlegrounds\Game\AI mappát;
  • kattints jobb egérgombbal üres területre a mappában, megjelenik a Windows környezeti menüje (vagy mi), az Új menüpontban válaszd ki a „szöveges dokumentum” vagy hasonló parancsot, létrejön egy szöveges dokumentum (egy .txt fájl), valószínűleg az „Új szöveges dokumentum” néven; ... egyszóval hozz létre egy új txt-fájlt.
  • Nyisd meg és mentsd el „Testguy.ai” néven. Ügyelj rá, hogy ebbe a fájlba semmit ne írj. Ez neked semmire nem lesz jó, de a programnak szüksége van rá.
  • Nyisd meg az eredeti .txt fájlt és mentsd el „Testguy.per” néven. Ebbe kell írnod majd a szkriptedet.

Ezzel megtetted az első lépéseket egy új AI létrehozása felé. Tehát két dologra figyelj: legyen az AI mappában két új fájl, egy üres .ai kiterjesztésű, és egy nem feltétlenül üres, de az .ai-val azonos nevű .per kiterjesztésű. Ha a két fájl neve nem azonos, vagy nincs .ai fájl, a szkript fordító/értelmező programja nem fogja figyelembe venni az új AI szkriptet, sőt az a szkriptek választólistájában sem jelenik majd meg.[mj 2]

Az új szkript hozzárendelése egy játékoshoz

[szerkesztés]

Nyisd meg a SWGB-ot, kattints a „standard game” menüpontra, a megjelenő képernyőn a nagyméretű „Other players” felirat alatt egy csomó „Computer” feliratot látsz, előttük egy-egy kattintható nyilacskával. Rákattintva valamelyik játékos alatt erre a nyilacskára, meg kell jelennie az ai szkriptek listájának. Ha jól csináltad az eddigieket, a listában ott van a „Testguy” nevű szkript is. Rá kell kattintani. Indulhat a játék! Persze előbb meg kell írni magát a szkriptet is ;(.

Mindez persze a véletlen-térkép játékokra vonatkozik. Küldetésekben (scenarios) szereplő játékosokhoz a szintén a játék főmenüjéből elérhető küldetésszerkesztőben (scenario editor) lehet felhasználói AI személyiségfájlt rendelni, az editor „Players / Personality” feliratú legördülő listájából választva.

Érdekesség, hogy a „saját” játékosodhoz, a számodra fenntartott játékoshoz (player 1) is hozzárendelhetsz szkriptet. Ilyenkor hátradőlhetsz, és nézheted, ahogy a CP helyetted dolgozik, ugyanakkor, ha egy adott aktor épp nem elfoglalt (pl. egy barakk nem gyárt éppen harcost), akkor te is beleavatkozhatsz a játékba, gyűjthetsz-gyárthatsz-építhetsz, és közben nyugodt lélekkel kimehetsz a konyhába egy kávét is főzni. Ez a "félautomata" üzemmód kényelmes az AI szkriptek tesztelésére.

Szintaktikus tesztelés

[szerkesztés]

Sok hiányossága mellett a Genie szkriptrendszer tartalmaz egy nagyon fontos, hatékony elemet: egy játékban felhasznált mindegyik AI szkripten a játék elején végigfut a szkriptértelmező alprogram beépített hibakeresője. Amennyiben szintaktikai hiba van a szkriptben (kifelejtett zárójel, vagy más, a nyelv szabályainak nem megfelelő rész), a hibakereső a játék elején hibaüzenetet ad, sőt - ha a hiba a fájl szövegében van, és nem más természetű, pl. hogy fizikailag sérült a fájl - a hibás sor sorszámát is megjelöli. Az értelmező alprogram a hibaüzenetben a hiba természetéről is megpróbál felvilágosítást adni, általában használható tanácsokat adva: pl. „ismeretlen parancs”, „ez a húsz soros szabály már túl hosszú”, stb.

Ha a hiba ellenére is tovább futtatjuk a játékot (erre lehetőség van), akkor a CP szkriptünk helyett egy nagyon alapvető játékot fog vinni (gyűjtögetni fog, de nem építkezik és nem fejleszti magát), az biztos, hogy teljesen figyelmen kívül hagyja a hibás szkriptet.

Ha nincs hiba, akkor beindul a dolog, és az értelmező az elejétől a végéig futkároz a szkriptfájlon (egy másodperc alatt valószínűleg akár többször is [mj 3]), és ha olyan parancsot talál, amelynek feltételei teljesülnek, akkor azt végrehajtja. Elvben.

Hibaüzenetek

[szerkesztés]

A SWGB súgója tájékoztatást nyújt a hibaüzenetekről is. Ezek:

  • ERR2xxx Szintaktikai hibák (a parancsok szabálytalan megformázása)
  • ERR3xxx Preprocesszor hibák (a szkriptfordító/értelmező alprogram nem képes lefordítani valamit, pl. túl sok load-if van egymásba ágyazva, vagy nincs end-if a load-if után)
  • ERR5xxx Fájlhibák A szkriptfájl sérült, vagy nem elfogadott formátumú
  • ERR6xxx Memóriakezelési hibák: Túl sok chatüzenet miatt betelhet a sztringtábla.
  • ERR8xxx Egyéb hibák (üres szkriptfájl)
  • ERR9xxx Ismeretlen hibák

Részletesebben:

  1. ERR2kX:
    1. „ERR2001: Missing opening parenthesis.” - Hiányzó nyitó zárójel.
    2. „ERR2002: Missing keyword.” - Hiányzó kulcsszó(?).
    3. „ERR2003: Invalid keyword.” - Érvénytelen kulcsszó(?).
    4. „ERR2004: Missing identifier.” - Hiányzó azonosító - valamelyik parancs valamely paraméterének/argumentumának, kitöltendő helyének, nem adtunk meg értéket. Pl. (load 10 ...)-ből hiányzik a ... helyén a fájlnév.
    5. „ERR2005: Invalid identifier.” -Érvénytelen azonosító - valamely paramétert pl. arab betűkkel adtunk meg a WordPadben, nem biztos, hogy elfogadja.
    6. „ERR2006: Missing file name.” - Hiányzik egy fájlnév.
    7. „ERR2007: Missing left-hand side (LHS) of the rule.” - Nem adtunk meg feltételeket egy szabálynak. Mindig kellenek feltételek, még akkor is, ha azt akarjuk, mindig hajtsa végre a parancsot. Ilyen esetben a defrule parancs fejrészébe a (true) feltételt kell írni.
    8. „ERR2008: Missing arrow.” - Kifelejtettük a defrule parancsból a => nyilacskát.
    9. „ERR2009: Missing right-hand side (RHS) of the rule.” - Nem adtunk meg következményeket/akciókat egy defrule parancsnak. Mindig kellenek akciók, még ha azt is akarjuk, hogy ne csináljon semmit egy szabály, ilyen esetben a defrule lábrészébe a (do-nothing) akciót kell írni.
    10. „ERR2010: Missing closing quote.” - Nem zártunk be egy idézőjelet.
    11. „ERR2011: Missing closing parenthesis.” - Hiányzik egy csukó zárókel.
    12. „ERR2012: Constant already defined.” - Kétszer definiáltunk egy konstants, ld. defconst.
    13. „ERR2013: Unexpected end-of-file.” -
  2. ERR3kX:
    1. „ERR3001: Invalid preprocessor directive.” - Érvénytelen preprocesszor parancs. A megadott parancs nem #load-if-defined, #load-if-not-defined, #else, vagy #end-if.
    2. „ERR3002: Missing preprocessor symbol.” - Valószínűleg akkor lép fel, ha hiányzik a # (?).
    3. „ERR3003: Preprocessor nesting too deep.” 50-nél több feltételes végrehajtás van egymásba ágyazva.
    4. „ERR3004: Unexpected #else.” - Kihagytunk vagy véletlenül töröltünk valahol egy #load-if- parancsot.
    5. „ERR3005: Unexpected #end-if.” - Ismét csak arról van szó, hogy kihagytunk vagy véletlenül töröltünk valahol egy #load-if- parancsot.
    6. „ERR3006: Missing #end-if.” - Ezúttal az #end-if parancs maradt le, túl sok a #load-if.
  3. ERR5kX:
    1. „ERR5001: File open failed.” - A fájlt nem sikerült megnyitni.
    2. „ERR5002: File read failed.” - A fájlt nem sikerült végigolvasni.
  4. ERR6kX:
    1. „ERR6001: List full.” - ?
    2. „ERR6002: Rule too long.” - valamelyik szabály túl hosszú. Egy szabály maximum 24 „elemet” tartalmazhat, a részleteket lásd a defrule parancsnál.
    3. „ERR6003: String table full.” - A sztringtábla betelt (ezt általában a túl sok chat parancs végrehajtása okozza.)
  5. ERR8kX:
    1. „ERR8001: No rules.” - Nincsenek szabályok. - Egy thai-box akciófilmben látványos, de egy automata szkriptértelmező program számára katasztrófa.
  6. ERR9kX:
    1. „ERR9000: Undocumented error.” - Dokumentálatlan hiba.
    2. „ERR9001: Unexpected error.” - Váratlan hiba (? ezek szerint vannak elvárt hibák is ?).

Apró tippek hibakereséshez

[szerkesztés]

1. Tapasztalataim szerint érdemes kb. száz soronként elhelyezni egy sorszám-számláló kommentet ("Ez itt a százegyedik sor"), ez nagyon megkönnyíti a hibakeresést.

2. Figyeljünk arra, hogy a relációs jeleknél szóközt kell hagyni a jel és a számértékek között. Pl. a (building-type-count BLDG-MAIN >=1) parancsra „Error in Line ... : unknown identifier >=1” hibaüzenetet ad a hibakereső alrendszer; a parancs helyesen (building-type-count BLDG-MAIN   >=   1)

3. A parancsokban sokszor kell sokszorosan zárójelezett kifejezéseket használni. Ha gondolatban a nyitó zárójeleket +1, a csukó zárójeleket -1 értékkel látjuk el, és összeadjuk a kifejezés így módon kiértékelt számát, nullát kell kapnunk. Ez hasznos annak ellenőrzéséhez, hogy rendben vannak-e a zárójeleink. Például adott a következő kifejezés:

(or (not (resource-found CARBON) ) (not (can-build BLDG-DROPCARBON) )

kiolvasható a következőképp is a fent leírt eljárás szerint:

EGY or KETTŐ not HÁROM resource-found CARBON KETTŐ EGY KETTŐ not HÁROM can-build BLDG-DROPCARBON KETTŐ EGY;

s mivel nem értünk el a nullát, egy csukó zárójel a kifejezés végéről hiányzik! Kellemes számolgatást-mondókázást!

Kis kitérő elmélkedés

[szerkesztés]

Szemantikus indeterminizmus, avagy a lázadó automata esete

[szerkesztés]

Említettük, hogy ha az értelmező alprogram nem talál hibát a szkriptben, akkor elkezdi végrehajtani a parancsokat - elvben. Hát igen. Aki ismeri kicsit a Genie játékait, az tudhatja: az AI szkriptelés - meglepő módon - nem egzakt tudomány. Vegyük a következő nagyon egyszerű példát: az AI szkript a következő szabályt tartalmazza:

(defrule
(and (game-time >= 0) (game-time <= 10) )
(can-build BLDG-POWERCORE)
=>
(chat-to-all "Hurrá, tudok egy áramfejlesztőt építeni!")
(build BLDG-POWERCORE)
)

Emberi nyelvre fordítva: „a játék első tíz másodpercében rögvest ellenőrizd, hogy megvan-e a 200 szened ahhoz, hogy egy áramfejlesztőt építs. Ha megvan - azaz teljesül az építéshez minden formális feltétel - akkor írd ki minden játékos képernyőjére, hogy hurrá, te aztán tényleg tudsz áramfejlesztőt építeni! De ne csak hencegj ezzel, hanem építsd is meg gyorsan azt a fejlesztőt!”

Ehhez képest a CP mit fog csinálni? Talál tíz banthát, az összeset gyorsan leöli - ez kb. húsz másodperc, Közben megjelenik a képernyőn egy felirat: „Testguy: Hurrá, tudok egy áramfejlesztőt építeni!” Eltelik a huszadik másodperc is, és a munkások még mindig csak össze-vissza mászkálnak. Végül hol a harmincadik, hol az ötvenedik másodperc környékén, az egyik munkás nagy nehezen kijelöli az áramfejlesztő oszlop helyét, és elkezdi építeni. A tíz másodperc már rég lejárt.

De könnyen lehet olyan szituációt is teremteni, amelyben, bár a szabály szintaktikailag kifogástalan, a kért épület nemhogy késve, de sosem készül el. Pl.:

(defrule
(and (game-time >= 0) (game-time <= 10) )
(can-build BLDG-POWERCORE)
=>
(set-strategic-number sn-maximum-town-size 2)
(chat-to-all "Hurrá, tudok egy áramfejlesztőt építeni!")
(build BLDG-POWERCORE)
)

Itt az újonnan beiktatott sor, „set-strategic-number sn-maximum-town-size 2” azt jelenti, „építsd meg az épületet 2 mezőnyi távolságra a városodtól!” [mj 4]. Ez azonban nem megy: a CP nem szereti a túl szűkre szabott építkezést, így a maximum-town-size változónak legalább 3-nak kell lennie, hogy a parancsot figyelembe vegye. A szabály szintaktikailag kifogástalan, a benne foglalt tevékenység minden formális feltétele teljesül, a parancsot a CP mégsem hajtja végre! A dolog pikantériája az, hogy bár a chat parancs végrehajtása világosan jelzi, hogy az áramfejlesztő építése igenis lehetséges (a chat parancsot sokszor használjuk ehhez hasonló tesztelésre: teljesülnek-e valójában a formális feltételek), az épület megépülni mégsem épül. Tehát: elvileg építhetünk ugyan egy áramfejlesztőt, és elvileg megszabhatjuk a CP-nek, hogy a városközponthoz milyen közel tegye ezt, az erre vonatkozó parancs szintaktikailag tökéletesen megvalósítható - azonban az automatikus AI a mikromanagement szintjén mégis felülbírálhat bennünket, és megtagadhatja az engedelmességet.

Az ilyesféle első kudarcok ne szegjék kedvünket: amikor az AI szkript rendben végrehajtódik, az az öröm bőven kárpótol a kudarcokért. Tudatunkban kell azonban tartanunk,

  1. hogy a formális feltételek mellett (nyersanyagok léte és az előfeltételességi fa megfelelő helyén tartózkodás) mellett „informális”, az értelmező program által értelmezni nem tudott feltételek is vannak, ilyen pl., hogy van-e elég hely egy épületnek egy városban, vagy hogy az ellenség nem irtotta-e ki valamennyi munkásunkat. Utóbbi esetben pl. értelemszerűen hiába adunk - akár helyesen megformázott - parancsot bármiféle építésre, nincs, aki vagy ami végrehajtsa. Egy automata nem figyelhet mindenre, és még az olyan látszólag egyszerű szituációk is, mint egy RTS állapottere, iszonyatosan bonyolultak a programtervezők számára.
  2. hogy a lokális fájlok (pl. egy felhasználói ai szkript) mellett globális fájlok (gamedata.drs) is megszabják a CP viselkedését, időnként felülírva a lokális parancsokat. [mj 5]
  3. És ezeken kívül még számtalan ürügy létezik, amire hivatkozva egy CP megtagadhat egy parancsot, vagy amikor azt hisszük, hogy az A parancsot adtuk ki, közben pedig egy ehhez kísértetiesen hasonló szintaktikájú, de teljesen mást okozó B parancsot írtunk a szkriptbe.

Jótanácsok

[szerkesztés]

Az haszontalan(?) biztonsági mentésekrűl

[szerkesztés]

Előfordulhat tervezés közben, hogy belegabalyodunk valamibe, vagy véletlenül törlünk valamit (pl. kopott már egy kicsit az egerünk, és kijelöli azt is, amit nem kellene). Mindig, de legalábbis amíg nincs elég tapasztalatunk a tervezésben, tartsunk meg két-három biztonsági mentést a régebbi szkriptváltozatból. Ez nemcsak akkor tehet jó szolgálatot, ha elrontunk valamit, de ennek okára nem jövünk rá; hanem pl. akkor is, ha eszünkbe jut, hogy a tervezési folyamat E fázisánál ugyan úgy léptünk tovább, hogy a legek legrémévé tettük a CP-t (a legrémesebb, legrettenetesebben pusztító légierővel, ami csak elképzelhető), de mi lenne, ha ... ha mondjuk építene közben pár hajót is? Vagy, ha a légierő helyett építene inkább hajókat? Lehetséges, hogy könnyebb úgy visszalépni az E verzióhoz, ha fájlként megvan az eredeti formája.

Pöpec/tré AI-t írtam, ezért/mégis tudatni akarom a világgal!

[szerkesztés]

Neked találták ki a Star Wars Galactic Battlegrounds Heaven c. oldalt. Regisztráció esetén feltölthetsz térképeket, modokat, AI-kat stb. De letöltőoldalként sem utolsó! Jó szórakozást hozzá!

Megjegyzés: ha feltöltesz egy fájlt, légy türelmes. Az oldal karbantartói ellenőrizni és tesztelni is fogják. Ez akár hónapokig is eltarthat, de előbb-utóbb megjelenik az oldalon.

További kérdéseim vannak az AI szkriptelésről!

[szerkesztés]

A Battlegrounds Heaven oldalnak van egy külön fórumrészlege az AI szkriptelésről (Scenario Design részleg), érdemes végigböngészni. Sőt, mivel az Age of Kings és a Battlegrounds szkriptnyelvének felépítése nagyon-nagyon sok egyezést mutat (gyakorlatilag csak a parancselemek neve tér el), érdemes az Age of Kings Heaven oldalt is végigböngészni (ez valójában sokkal gazdagabb és informatívabb, számos hasznossá tehető letölthető segédprogrammal), ha valakinek akár AI szkriptelés, akár küldetésírás, térképszerkesztés, modding stb. témakörökben kérdései vannak. Végül pedig létezik egy nagyon hasznos fórum, amit a Genie szkriptnyelv legelkötelezettebb felhasználói tartanak fennt, ide be kell jelentkezni az olvasáshoz is (ami negyed órát sem vesz igénybe jó esetben): http://forums.aiscripters.com/index.php.

Hivatkozások

[szerkesztés]

Megjegyzések

[szerkesztés]
  1. Egyes fórumokban és útmutatókban állítólag panaszkodtak páran, hogy a Worddel és Wordpaddel írt szkriptek futtatása nem mindig akadálymentes, így a notepad.exe használatát javaslom.
  2. Hogy miért kell a programnak egy totálisan üres .ai fájl, arra nézvést csak tippelni tudok: az Age of Empires I.-ben ugyanis a játékosszintű AI két modulra tagozódott. Lehetett a játékosnak egy olyan .ai fájlja, amely az építendő aktorok listáját tartalmazta, és semmi mást. Lehetett másrészt egy olyan, .per kiterjesztésű fájlt is készíteni, amiben nem az aktorépítést, hanem az egyéb tevékenységeket szabályozták. A .per itt a „personality” (személyiség) rövidítése volt, és olyan dolgokat szabályzott, mint pl. hogy a munkások hány százaléka legyen farmer, és mennyi vágjon fát.
    Az Age of Empires II:, alias Age of Kings aztán ezt a két dolgot szerencsére összevonta és ki is bővítette, sokkal rugalmasabbá, testreszabhatóbbá (és bizonyos értelemben, nehezebbé is) téve a szkriptelést. Márpedig a SWGB, legalábbis ami az AI szkripteket illeti, egyértelműen az Age of Kings átültetése volt Star Wars környezetbe. A már többször említett Gamedata.drs fájlban pl. kikommentezett részek találhatóak, amelyek a „hun civilizáció”, meg a „maya civilizáció” viselkedésére vonatkoznak ...
  3. A végrehajtási gyorsaság a hibakeresés gyorsaságából extrapolálható: a hibakereső egy másodperc tört része alatt megtalál egy szintaktikai hibát a kétezredik sorban, feltételezhető, hogy az értelmezés is hasonlóan gyors.
  4. Sajnos nem tudom, a mező (tile) mint alapegység, mekkora. Ha sejtésem nem csal, akkor egy mező a legkisebb alapterületű épület, az áramfejlesztő alapterületével egyenlő. Egy ház kétszer két mező nagyságú, egy központ háromszor hármas. Így aztán - hangsúlyozom: ha ez tényleg igaz - nem meglepő, hogy a parancs nem hajtódik végre, hiszen így az áramfejlesztőt rá kellene építeni a központ alapterületére, ami lehetetlen. Persze vitatkozni lehet, hogy itt most szintaktikailag értelmes-e akkor a parancs, szerintem igen, hiszen nincs hibaüzenet, legfeljebb is csak szemantikusan hibás.
    Azonban van egy bökkenő: a tesztek során, amikor az sn-maximum-town-size a már elfogadottnak bizonyuló 3 értékre volt véve, nos, az áramfejlesztő felépült ugyan, de egyáltalán nem 3, hanem legalább tíz „mezőnyi” távolságra a központtól. Tehát a „mező” vagy nagyobb, mint a fent leírt fogalom, független az épületek alapterületétől; és akkor érvényben marad mindaz, amit mondtam; nem hibás a parancs és mégsem hajtódik végre; vagy pedig, ha mégiscsak ilyen kicsi egy mező, akkor szemantikusan hibás ugyan a parancs, mégis végrehajtódik (?!), csakhogy nem a megfelelő módon. Valami sehogyan sem stimmel, akármelyik eset is igaz.
  5. Egy tipikus példa automata-lázadásra a herdek leölése. A CP-k imádják leölni a herdeket, ha a szkriptelő mégoly nehezen teljesíthető feltételekkel is nehezíti meg pl. a banthagyilkosságokat, ez sokszor mégis bekövetkezik; azt, hogy legalább egy-két bantát le ne öljön a CP, annak ellenére is gyakorlatilag lehetetlen megakadályozni, hogy a szkriptnyelvben erre megvan az elvi lehetőség, megvannak a megfelelő parancsok. Ezeket a parancsokat a CP azonban legtöbbször egyszerűen nem hajtja végre.

Források

[szerkesztés]
  1. Onta, S.; Synnaeve, G.; Uriarte, A.; Richoux, F.; Churchill, D.; Preuss, M.: A Survey of Real-Time Strategy Game AI Research and Competition in StarCraft (Felmérés a valós idejű stratégiai Játékok körében folyó AI-kutatásról és -versenyről a StarCraft kapcsán), 3. old.; Pdf formátum.