Ugrás a tartalomhoz

Star Wars Galactic Battlegrounds szkriptek/Egyszerűbb példák

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

(egyelőre ötletszerű sorrendben)

Szerző és verzió

[szerkesztés]

A szkriptfájl elején érdemes feltüntetni a szkript szerzőjét és verzióját. A képernyőn ez semmilyen formában nem fog megjelenni. Mégis fontos lehet. Előfordulhat, mégpedig könnyen, hogy egy szkiptet módosítunk, de a tesztelés során kiderül, hogy mégsem olyan jól működik, mint az előző verzió. Az is előfordulhat, hogy a módosításunk egy bizonyos irányba elviszi az AI viselkedését, de később szeretnénk kipróbálni másféle módosításokat is. Érdemes tehát megkülönböztetni a verziókat.

A következő parancs szolgál erre:

(defrule
(true)
=>
(set-author-version "Szkriptnév Verziószám")
(set-author-name "Szerzőnév")
(disable-self)
)

Például:

(defrule
(true)
=>
(set-author-version "Testguy 1.0.")
(set-author-name "Gubbubu")
(disable-self)
)

Mivel a szerzőnév és verziószám sztring típusú adatok, a parancsértelmező számára idézőjelbe kell tenni őket, a set-author-version parancs utáni idézőjelek (mégpedig angolszász stílusú, egyforma idézőjelek) tehát ténylegesen kellenek.

Felfedezéssel kapcsolatos néhány tudnivaló

[szerkesztés]

A játék kezdetén, mielőtt még bármit is építenénk, érdemes a térkép legalább egy részét, kb. 10-20%-át felfedezni. Ha van siklómotoros felderítő egységünk, ahogyan a véletlentérképes játékok elején általában lenni szokott, akkor azzal, ha nem volt (mondjuk egy felhasználó által szerkesztett nem-random pályán vagyunk) vagy hamar elpusztult (a scout ugyanis sérülékeny), akkor munkásokkal.

Felfedezés a siklómotoros felderítőegységgel

[szerkesztés]

A véletlentérképeken szinte mindig kap minden játékos kezdetben egy siklómotoros (speederbike-os) felderítőt (az Age of Kings lovas "scout" megfelelője). Mivel mindegyik automata játékos ezen egysége lázasan száguldozik össze-vissza a pályán, felderítve a "köd" borította területeket, azt hihetné az ember, hogy a felderítő egység alapértelmezésben száguldozik leállíthatatlanul.

Ez közel sincs így: külön intézkedés nélkül a scout meg sem fog mozdulni. Mozgásra bírni nem is olyan egyszerű, mert a játék útmutatójában és a belőle készült netes források többségében még ennek az egységnek a neve sincs feltüntetve, és meglehetősen izzasztó feladat volt ennek utánajárni (Balbarian-nak a címlapon már többször emlegetett útmutatójában találtam csak meg végül). Pedig van egy beépített neve: ő a UNIT-FASTBIKE-LINE.

Mozgásra és felderítésre bírni a stratégiai számok használatával lehetséges. A titok nyitja az, hogy a kezdeti felderítők számát legalább eggyel magasabbra állítsuk, mint a civil felderítők számát. Persze ez csak a randommapekre érvényes, szcenáriókban figyelembe kell venni, hogy a kezdeti egységkonfiguráció más lehet.

Pl. állítsuk 4-re a populációnk összes felderítőinek számát (a sztenderd AI alapértelmezésben egyébként csak 1-2 felderítőt szokott kiküldeni, ide értve a civileket és a siklómotoros egységet is). Ez a (set-strategic-number sn-total-number-explorers 4). Ha ez megvan, még ugyanazon szabályon belül, állítsuk mondjuk 2-vel alacsonyabbra a civil (munkás) felderítők számát a (set-strategic-number sn-cap-civilian-explorers 2) paranccsal. Így a következő szabályt kapjuk:

(defrule
(unit-type-count UNIT-FASTBIKE-LINE == 1)
=>
(set-strategic-number sn-total-number-explorers 4)
(set-strategic-number sn-cap-civilian-explorers 2)
)

Néhány teszt során úgy tapasztaltam, hogy ez még mindig térképfüggő eredményt ad: a scout lanyhán fog mozogni, és sokat álldogál egy helyben, néha ott is ragad. Ha valódi száguldásra akarjuk bírni, akkor a felfedezendő térképterület nagysága iránt is célszerű magas igényeket táplálni (a következő példa esetében ez 99%). Tehát:

(defrule
(unit-type-count UNIT-FASTBIKE-LINE == 1)
=>
(set-strategic-number sn-total-number-explorers 4)
(set-strategic-number sn-cap-civilian-explorers 2)
(set-strategic-number sn-percent-exploration-required 99)
)

Később, amikor az ellenséges városok és harcosok kezdenek kiépülni, célszerű az utóbbi számot kicsit visszavenni, vagy pedig nullára állítani a munkás-felfedezők számát (ez pl. az sn-cap-civilian-explorers 0-ra állításával lehetséges). Ellenkező esetben nemcsak a felderítők által végzett gyűjtögető munka eredményei fognak hiányozni, de azt is elérhetjük, hogy munkásaink egyenként megsemmisülnek az ellenséges katonák tüzében, így senki nem fog tudni dolgozni.

Az általában vett felfedezéshez készített beépített függvényekről

[szerkesztés]

Célszerű, hogy a választékot áttekintsük, kicsit külön foglalkozni a felfedezésekhez használható célértékekkel, az ide vonatkozó ún. stratégiai számokkal. Ezek a következők:

  • sn-total-number-explorers: megadja, hogy konkrétan hány darab egység végezzen felfedezést. Itt a csalódások elkerülése végett azt kell tudni, hogy a sztenderd AI ezt az értéket egy idő után (pontosabban felfedezett térképterület-mennyiséget elérve) felül szokta bírálni, ha a felfedezők zöme munkás. Így a függvény csak egy darabig működik megbízhatóan, ami mondjuk nem szokott nagy problémákat okozni.
  • sn-percent-civilian-explorers:
  • sn-minimum-civilian-explorers
  • sn-cap-civilian-explorers:
  • sn-percent-exploration-required
  • sn-number-explore-groups
  • sn-minimum-explore-group-size
  • sn-maximum-explore-group-size

Kevésbé fontosak, legalábbis a játék kezdetén:

  • sn-maximum-gaia-attack-response
  • sn-number-boat-explore-groups
  • sn-number-air-explore-groups
  • sn-minimum-boat-explore-group-size
  • sn-maximum-boat-explore-group-size
  • sn-minimum-air-explore-group-size
  • sn-maximum-air-explore-group-size
  • sn-blot-exploration-map
  • sn-initial-exploration-required
  • sn-number-enemy-objects-required

Szóba jöhet még:

  • sn-percent-enemy-sighted-response
  • sn-zero-priority-distance
  • sn-blot-size
  • sn-percentage-explore-exterminators

Az első Irányítóközpont (Command Center) felhúzása

[szerkesztés]

Egy sikeres civilizáció nélkülözhetetlen parancsnoki központ nélkül. Ez gyártja a munkásokat, és több munkás = több erőforrás, nagyobb gazdagság, ami erősebb várost és erősebb hadsereget jelent. Ha nincs Központ, akkor, néhány kivétellel, szinte minden esetben ez az első sürgősen felépítendő dolog.

A legegyszerűbb szabály erre vonatkozólag:

(defrule

(game-time >= 0)
(building-type-count BLDG-MAIN == 0)
(can-build BLDG-MAIN)

=>

(build BLDG-MAIN)
(disable-self)

)

Lefordítva: „Ha nincs parancsnoki központ, de tudsz építeni, akkor építs egyet!” (Megjegyezzük, hogy bár az irányítóközpont egy tech-level-3 épület, ezzel most nem kell törődnünk, mert egy darab központot a játék mindig, szinttől függetlenül, enged építeni, ha esetleg nincs. Még akkor is, ha volt, de megsemmisült.)

Persze a dolgok bonyolultabbak. Ha a "can-build ..." feltétel nem teljesül, a CP valamilyen oknál fogva nem tud ilyet építeni. De még akkor sem biztos, hogy célszerű azonnal lerakni a központ alapjait, ha lehetséges a megépítése. Célszerű a központot nyugalmas helyre (nincsenek ellenségek, ragadozók stb.), és egyúttal szénerőforrás közelébe építeni.

A can-build feltétel nem-teljesülésének okai a következők lehetnek:

  1. Nincs munkás. Ebben az esetben nincs mit tenni, a központ soha nem fog felépülni.
  2. Nincs elég szén. (275 kell)
  3. Nincs elég ore. (100 kell)


Ha bármelyik eset is fennáll, akkor ezeket elő kell teremteni. Először is adjunk nevet ennek a helyzetnek, hogy röviden tudjunk rá hivatkozni, bevezetünk egy változót, amely az ezzel kapcsolatos különféle eseteket tartja számon:


(defconst NO 1)
(defconst YES 2)
(defconst EXPLORATION-NEEDED 3)
(defconst NORESOURCE 4)
(defconst FEW-EXPLORERS 5)
(defconst ENOUGH-EXPLORERS 6)
(defconst LOT-EXPLORERS 7)

(defconst First-CC-Needed 1) [mj 1]


Most kiértékeljük a helyzetet, használva a fent definiált konstansokat.

A1) Ha kell egy irányítóközpont (goal First-CC-Needed YES), de nincs munkás, akkor nem tehetünk sokat, feladjuk (resign). (Alternatíva, amellyel nem foglalkozunk, hogy az egységeinket és épületeinket felajánljuk néhány szimpatikus emberi vagy mesterséges játékosnak, neutrális viszonyra lépve velük. Amint lesznek lovagjaik, átkonvertálják majd őket.)

A2) Ha van munkás, még akkor is érdemes felfedezni egy kicsit, ha kevés van belőlük.

A21) Ha csak egy-két munkás van, akkor ezek persze ragadozókba ütközhetnek és elpusztulhatnak. Érdemes ilyenkor párokban felfedezni küldeni őket, mert két munkásnak van esélye egy ragadozó ellen. Persze a felfedezendő terület mennyiségét lehetőleg csökkenteni kell ilyenkor, vagyis csak addig szabad engedni őket, amíg valamilyen nagyobb szénlelőhelyet nem találnak. Figyelembe veendő az is, hogy láthatóak-e (vagy, ha csalni is szándékozunk, vannak-e) ellenséges őrtornyok vagy erődök a közelben. Ezek ugyanis nagy eséllyel azonnal kinyírják a felfedezőket. Tehát, ha ilyet látnak, érdemes felhagyni a felfedezéssel. Ha több a munkás, vagy van néhány katona, akik felfedezni küldhetőek, akkor ezekkel a veszélyekkel nem fontos annyira foglalkozni.

Ha nyersanyaghiány miatt nem tudunk építeni, és nem is nagyon van elég összegyűjthető a közelben, akkor muszáj felfedezni egy kicsit.

(defrule

(game-time >= 0)
(building-type-count BLDG-MAIN == 0)

=>

(set-goal First-CC-Needed YES)

)

(defrule

(game-time >= 0)
(building-type-count BLDG-MAIN >= 1)

=>

(set-goal First-CC-Needed NO)

)

(defrule

(goal First-CC-Needed YES)
(unit-type-count UNIT-WORKER == 0)

=>

(chat-to-all "I give up. I give up.")
(resign)

)

(defrule

(goal First-CC-Needed YES)
(unit-type-count UNIT-WORKER >=0)
(carbon-amount >= 275)
(ore-amount >= 100)
(resource-found carbon)

=>

(set carbon-drop-distance 4)
(build BLDG-MAIN)
(set-goal First-CC-Needed NO)
(disable-self)

)

Az első tanulságot is vonjuk le. Látszólag nagyon egyszerű probléma az első központ építése ("építsd meg, ha tudod"), de ha intelligensebb játékost akarunk, aki sok különféle helyzetben is megpróbál boldogulni (és a fentebbi helyzetek véletlentérképes játékokban bizony gyakran felléphetnek), akkor már ez a probléma is nagyon bonyolultnak tekinthető, nem elég hozzá csak a can-build feltétel és a build parancs. Szükséges haladottabb eszközök, az erőforrásokra és a populációra vonatkozó mérlegelés, és stratégiai mérőszámok használata.

Command Center: variációk

[szerkesztés]

Személyiséget definiálhatunk - akár véletlenszerűen választva, de lehet civilizációfüggő is. Például, ha megépíthető a központ, nem szükséges hozzá erőforrás-felfedezés, akkor a CP véletlenszerűen választ kétféle vagy háromféle személyiség (AVOIDANT, CAUTIOUS és BRAVE) között. Esetleg figyelembe vehetjük a filmet is: a Kereskedelmi Szövetség neimoidiánjai gyávák és spórolnak a munkarobvotokkal, nem teszik ki veszélynek őket, azaz azonnal építenek egy központot, amint tudnak - a vukik és a gunganek ugyanakkor bátrak és hajlandóak kockáztatni, a térkép nagyobb részét akarják felfedezni, mielőtt építenének, a gunganek nem állnak meg addig, ameddig vizet nem találnak (stb.).

Állatnevelde?

[szerkesztés]

A véletlentérképeken, időben és térben véletlenszerű jelleggel, leölhető háziállatok, banthák és nerfek találhatóak. Ezt a két állattípust herdeknek (= hentesáru, az angol herd szó egyébként állatcsordát jelent) fogjuk nevezni. A Genie véletlentérkép-generáló szkriptjei a játék legelején bizonyos számú (a szám is véletlen ingadozást mutat) herdet helyeznek el a térképen. A herdek maguktól - eltérően a vadállatoktól - egyáltalán nem mozognak, nem szaporodnak stb., teljesen statikus objektumok mindaddig, amíg egy tetszőleges játékos valamely egysége meg nem látja őket a látóterében, s ezáltal az adott játékos irányítása alá kerülnek. A herdeket el is lehet lopni ily módon egy olyan játékostól, aki már megtalálta őket (hasonlóan kezelendőek tehát, ahogyan az Age of Empiresben az artifactok, és általában a Genie motorra épülő játékokban a GAIA egységek egy része).

A leölt herdek nagyon gyors élelemforrást jelentenek. Egy nerf maximum 200, egy bantha maximum 500 egységnyi húst (F) szolgáltat. Három nerf vagy egyetlen bantha tehát, például, biztosíthatja a teljesen sima átmenetet az első tehnológiai szintről (tech-level-1, T1) a másodikra (T2).

A herdek azonban állatneveldékbe vagy aklokba (animal nurseries) is terelhetőek (10 herd fér el egy épületben, ami relatíve olcsó, 100 egység szénbe kerül), ahol jóval lassabban ugyan, de élelmet termelnek. Hosszú távon ez óriási előnyt jelenthet. Például fölöslegessé teheti a T3-T4 korszakokban a 10-15 élelemtermelő, farmoló munkás szükségességét, akik így fontosabb bányászati feladatokhoz rendelhetőek. 3-4 többé-kevésbé telített állatnevelde elláthatja egy civilizáció (max 200 egység) akár teljes élelemszükségletét is.

Azonban számos alprobléma merül fel.

  1. Az egyik probléma az, hogy az állatnevelde csak áramfejlesztő oszloppal ellátva működik hatékonyan. A két-három állatnevelde elhelyezkedéstől függően tehát 1-2 áramfejlesztőt igényelhet. Az összköltség tehát kb.: (2...3)×100+(1...2)×200 = 400...700 C, ami már tetemes. A véletlen térképeken maximum 500 egységnyi szénnel szokás kezdeni, ráadásul ez a mennyiség élelem-és novafeldolgozó állomásokhoz és házakhoz is kell már a legelején. A rengeteg szenet, ami az állatnevelő apparátus építéséhez kell, elő kell teremteni.
  2. A másik az, hogy a herdeket be kell gyűjteni. Ehhez felderítők szükségesek. A CP-nek valahogyan ki kellene értékelnie a térkép néhány százalékának felderítése után, hogy várhatóan mekkora a térképen a herd-népsűrűség (ez igen változó lehet még azonos típusú véletlentérképeken is). Van úgy, hogy játékosonként csak 2-6 nerf van a térképen, de az is előfordul, hogy 30-40 bantha is legelészik egy-egy irányítóközpont körüli viszonylag kis körsugárban elhelyezve. Főképp azt kell eldönteni ilyenkor, hogy érdemes-e a herdeket leölni, vagy más élelemforrásból (vadállatok, bokrok) kellene-e élelmet szerezni, továbbá meddig érdemes felderítőket kiküldeni a herdekért.
  3. A szituációt bonyolítja a következő dolog. A herdeket természetesen mindegyik játékos igyekszik begyűjteni, így általában az első 2-3 percben eltűnnek a térképről. Leölik őket, vagy beterelik az aklokba, mindkét esetben elérhetetlenné válnak. Azonban az előfordulhat, hogy egy sikeres támadás során az egyik játékos elpusztít egy ellenséges játékoshoz tartozó állatneveldét. Ilyenkor a herdek többsége felszabadul, megszerezhetővé válik. Tehát nemcsak a T1 szinten, hanem később is szükségessé válhat állatneveldék építése.

És ez még közel sem a játék által felhozható problémák teljes összképe. Bizonyos térképbeállításokban (nomad játékmód) pl. a játékosoknak városközpontja sincs, azt is fel kell építeni. Ez nélkülözhetetlen a munkásgyártáshoz. Mivel ez is szenet igényel, felmerül a kérdés ilyenkor, hogy emellett képes-e a CP még állatneveldék építésére is szenet fordítani. Ha nem, akkor meg kell ezt tiltani, ugyanis ha az állatnevelde a városközpont rovására épül fel, az teljesen elronthatja a CP helyzetét, túlzott késésbe kényszerítve a többiekhez képest. De ezzel nem foglalkozunk. Először is, az „egyszerűség” kedvéért, feltételezzük, hogy a CP már rendelkezik irányítóközponttal.

Minimális akolszabályok

[szerkesztés]

Akol bármi áron

[szerkesztés]

A legegyszerűbb elképzelhető szabályok egyike, hogy a játék kezdetén, ha van már városközpont, akkor - akárki akármi mást is mond - egyszerűen építünk egy állatneveldét, mégpedig amint csak lehet, mondjuk az első hatvan másodpercben, továbbá az összes létező herdet, ami belefér, azt igyekszünk belegyömöszölni, amihez használható az sn-percent-animal-garrison stratégiai szám.

; Akolépítési szabály, egy primitív változat, v.0.
(defrule
(building-type-count BLDG-MAIN >= 1)
(game-time <= 60)
(can-build BLDG-DROPANIM)
=>
(build BLDG-DROPANIM)
(set-strategic-number sn-percent-animal-garrison 100)
(disable-self)
)

Túl szűkre, kb. egy percnél rövidebbre nem érdemes az építés idejét szabni (a pontos idő meghatározása további sorozatos tesztelést igényelne). Az AI ugyanis néha totojázik egy kicsit, mielőtt bármibe is belekezdene. Tehát, ha úgy gondolja, hogy pár másodpercig felderít a munkásokkal (van ilyen), fennáll a veszélye, hogy elmúlik a megadott tíz-húsz másodperc, ha csak ennyit szánnánk az építésre; és ekkor az állatnevelde talán sosem épül fel. Arra viszont tapasztalataim szerint nem kell külön figyelni, hogy építőmunkásokat rendeljünk a feladathoz. Az egységszintű AI ezt általában automatikusan megteszi, és kirendel egy vagy két munkást, amint megkapja a szkriptből az építési parancsot.

Ez a szabály kétféle értelemben is minimális. Először is, eléggé minimalizálva van a parancs végrehajtásának előfeltétel-rendszere (vagyis minimalizálva van az alternatívák keresése, kiértékelése). Másrészt pusztán 1 állatneveldét építünk, nem többet.

A továbbfejlesztés két irányba is lehetséges, sőt ildomos. Numero 1.: érdemes körültekintőbben feltételekhez - például, a szükségletekhez - igazítani az épület építésének idejét. Numero 2.: érdemes szabályozni az épület példányszámát.

Herdhez kötött akolépítési szkriptek

[szerkesztés]

Rugalmasabb (bár még mindig elég merev) szabályt kapunk akkor, ha csak akkor kezdünk rögtön akolépítésbe, ha láttunk néhány herdet (mondjuk, kettőt) az első hatvan másodpercben. Ahol egy herd van, ott több is lehet. Érdemes tehát erőt fordítani egy kis felderítésre. Ha nincs herd, akkor az akolépítést akár a T2-T3 korszakokra is halaszthatjuk.

A herdek jelenlétének kiértékeléséhez használhatjuk azok numerikus azonosítóit (833, 594) vagy az ANIMAL-NERF és ANIMAL-BANTHA szövegkonstansokat.


; Akolépítési szabálysor, herdhez kötött változat v1.1.
(defrule
(building-type-count BLDG-MAIN >= 1)
(game-time <= 60)
(or (unit-type-count 833 >= 2) (unit-type-count 594 >= 5) )
(can-build BLDG-DROPANIM)
()
=>
(build BLDG-DROPANIM)
(set-strategic-number sn-percent-animal-garrison 100)
(disable-self)
)
(defrule
(building-type-count BLDG-MAIN >= 1)
(game-time <= 60)
(not (or (unit-type-count 833 >= 2) (unit-type-count 594 >= 5) ) )
=>
(set-strategic-number sn-percent-animal-garrison 0)
(disable-self)
)

Legalább két szabály kell (ha nem használunk goal-okat, azaz helyzetkiértékelő változókat). Az első megmondja, mi van akkor, ha találtunk annyi herdet, amennyi miatt érdemes aklot építeni. A második megmondja, hogy ha nem találtunk annyit, akkor öljük le a herdeket. Ha a herdek nem karámozódnak be, ezt az egységszintű AI - sajnos - automatikusan igyekszik megtenni. Azonban az is igaz, hogy - ha esetleg van már egy másik akol, amit a szkript valamely másik szabályrendszere alapján építettünk, vagy a térképpel együtt kaptunk készen (ami bizonyos küldetésekben szintén előfordulhat), akkor abba a herdek automatikusan igyekeznek beszállásolni magukat, hacsak az sn-percent-animal-garrison stratégiai szám beállításával másképp nem rendelkezünk.

Ezzel a szabálysorral van egy súlyos probléma. Ha letudjuk vele az akolépítést, de a térképen nem volt herd (pontosabban, ha az első hatvan másodpercben egyet sem találtunk), akkor nem fogunk egy aklot sem építeni, és így pl. lovasságot sem tudunk képezni, ami később fontos lehet. Figyelnünk kell rá, hogy a szkriptben további szabályokkal rendelkezzünk arról, mi van, ha később mégis kell egy állatnevelde, de a fenti szabály szerint az nem épült meg.

Van egy másik probléma is. Mivel az AI pár herdet minden lokális beállítástól függetlenül, megpróbál leölni, ezért amíg kész nincs az épület, érdemes a munkásoknak mindenféle élelemtermelő tevékenységet szigorúan megtiltani, pl. kollektíve nova- és szénbányászatra, vagy építésre rendelni őket. Erről egy harmadik szabályban érdemes rendelkezni, de hogy hogyan, az a további körülményektől függ, egyelőre nem foglalkozunk vele.

Tech-1

[szerkesztés]
  1. A sztenderd könnyű t-1 ökonómia megközelítése (túlhaladása)
    1. Munkamegosztás (könnyű t-1)
    2. Építkezés
    3. Katonaság, felfedezés ismét
  2. A sztenderd közepes t-1 ökonómia kihívása
    1. Munkamegosztás
    2. Építkezés
    3. Katonaság, felfedezés ismét
  3. Átlépés a t-2-be.

Tech-2

[szerkesztés]
  1. Az első űrkikötő a Kereskedelmi Szövetségbe tartozó CP-nek
  2. Holokrongyűjtés(ről)
  3. A t-2 hadsereg könnyű és középnehéz módban
  4. Mama, építsek falat?

Extrák

[szerkesztés]
  1. Kereskedés kiszállt játékosokkal (?).
  2. Fecsegés arról, amit látott.

Jegyzetek

[szerkesztés]
  1. Ügyeljünk rá, hogy ne adjunk 1st-CC-... típusú konstansneveket, hisz, amint mondtuk, ezek nem kezdődhetnek számmal.