Színtiszta előny (3. rész)
2009.05.13. 16:15
Implementáció
A cikk eredetijét Eduardo Jimenez publikálta a Pure című játékról a Gamasutra portálon
Itt volt az ideje, hogy nekirugaszkodjunk az implementációnak. Előrukkoltunk egy olyan módszerrel, ami ebben az esetben teljesen jól működött: úgy döntöttünk, hogy minden MI karakter megpróbál megcélozni egy helyet, ami a játékos előtt vagy mögött van x méterrel. Ha az elérni kívánt pont előrébb van, akkor az érték pozitív lesz, egyébként negatív.
Ezután – ahelyett, hogy a játékos helyét vettük volna figyelembe – az MI versenyzők képességeit dinamikusan hozzáigazítottuk ahhoz a helyhez, amit az MI megcélzott. (Bár az igaz, hogy ez a pozíció a játékostól függ.)
Emiatt az MI játékos képességei jobbá válhatnak miközben megpróbálja elérni a megcélzott helyett még akkor is, ha az emberi játékos előtt van. Ugyanez megtörténhet fordítva is: az MI karakter csökkenti a képességeit még akkor is, amikor a játékos mögött van.
A fenti kép megmutatja, hogyan változnak a képességek a megcélzott pont függvényében. A MI képességei a megcélzott ponttól való távolsággal arányosak. Van egy maximum távolság is (az ábrán ez 150 méter – ford. megj.: vagy inkább 170), ami felett a képességek változása már nem aránylik a távhoz.
Mivel ezt a pontot az emberi játékoshoz viszonyítjuk, ezért rájöttünk, hogy ezt tudjuk módosítani a verseny közben. Ez a koncepció lehetővé tette az MI célzottabb irányítását.
Most, hogy a pályán megcélzott pontot a játékoshoz igazítottuk, könnyedén alkothatunk ideális versenyszkripteket. Ezt a legjobban a következő példa világítja meg:
- Van három bolyunk, amikre az élboly, a középső boly és a sereghajtó boly kifejezésekkel hivatkozunk. Mindegyik bolyban 4 MI van. Ez összesen tizenkét versenyző plusz a játékos, így marad három MI versenyzőnk, akik egyik csoporthoz sem tartoznak.
- Ez utóbbi három játékos egy olyan bolyhoz lesz hozzárendelve, amit mostantól üldöző bolynak nevezünk. Ez a csoport mindig a játékos közelében próbál maradni (konkrétabban 0 méterrel előtte) és azokat a versenyzőket testesíti meg, akik a játékost követik, amikor az elhagy egy bolyt (ahogy az igazi versenyekben kialakulnak az elszakadó csoportok). Az üldöző csoport úgy van programozva, hogy az MI-k addig legyenek a játékoshoz közel, ameddig az el nem hagyja az utolsó, vezető boly távolsági küszöbét.
- A verseny elején sereghajtó boly céltávolsága a játékos pozíciója, míg a verseny végén a megcélzott távolság a játékos mögött 500 méterrel van. Ez a csoport a verseny elején még tolakodik a játékos körül, de ezután már könnyű magunk mögött hagyni őket.
- A középső boly először a játékos előtti 250 méteres távolságot célozza meg, a végén pedig a játékos mögött 250 méterre próbál helyezkedni.
- Az élboly eleinte a játékos előtt próbál 500 méterrel haladni, míg a verseny vége felé az MI-k a játékos nyakában lihegnek. Emiatt a verseny elején könnyen elszakadnak, de miután a játékos maga mögött hagyja az üldöző bolyt, már nem tűnik lehetetlennek az utolérésük.
Végül a játékos utoléri az első helyezettet, és miután az élbollyal megharcolt a győztes helyért, úgy érezheti, hogy joggal birtokolja a dobogó legfelső fokát. A küzdelem így izgalmasnak és a jutalom megérdemeltnek tűnik.
Az ábrán a verseny ideális menetét láthatjuk. A fehér pont az emberi játékost, a kék pontok a sereghajtó bolyt, a zöldek a középső bolyt, a pirosak az élbolyt, míg a narancssárgák az üldöző bolyt reprezentálják.
Ezen kívül még rengeteg egyéb algoritmus finomítja a folyamatot, de az imént felvázolt koncepció az MI rendszer alapja. Minden MI játékos erősségét külön be lehet állítani, de az aktuális értékeket a képesség korlátok is behatárolják. Ezek a beállítások csak annyira befolyásolják az MI teljesítményét, hogy a beállított pozíciót elérik vagy nem.
Fontos még megjegyezni, hogy az motor nem módosíthatja olyan mértékben az MI versenyzők képességeit, amennyire egyébként lehetőség lenne. A beállított nehézségi szint a megcélzott pozíciókat határozza meg, ahelyett hogy közvetlenül az MI teljesítményét módosítaná. Ez segít megőrizni a sportszerűség látszatát.
Tényleg azt akartuk, hogy a játékos megérdemeltnek érezze a megszerzett helyet. Ha nagyon rosszul versenyzik, akkor nem néz szembe behozhatatlan előnnyel. Ha nagyon jól versenyzik, akkor némi előny lesz a jutalma.
Egyéb mechanizmusok a „Pure”-ban
Korábban említettük, hogy bevezettünk néhány extra algoritmust:
- A verseny legelején nagyon fontos, hogy az MI megelőzze a játékost, mert így a játékos számára a többi versenyző leküzdendő akadállyá válik. Ráadásul a bolyokat nehezebb rendesen kialakítani, ha a játékos azonnal az élre kerül.
Ezért a verseny első 10-20 másodpercében az MI játékosok képességei a maximális értéken vannak, majd az ezt követő öt másodpercben fokozatosan felveszik a beállított értékeket. Ez általában segít a bolyok kialakításában. Viszont nem túl hatásos magasabb nehézségi szintnél, mert a kiszámolt képesség értékek eleve magasak. - Néhányan arról számoltak be, hogy a verseny első része egy kissé könnyű. Ez nem mindenkinél fordult elő, de sokaknak gyakrabban tűnt így. Úgy döntöttünk, hogy bevezetünk egy extra módosítót, amely nulláig csökken a verseny végéig. Például egy három körös verseny esetén az első körben az MI +0,05 képességbonuszt, a másodikban +0,025-öt kap, míg az utolsóban nincs extra bonusz.
- A szkript úgy van szervezve, hogy a játékos az első helyért küzdjön a verseny utolsó negyedében. Ez azt jelenti, hogy az utolsó negyedben a játékosnak az élboly tagjai között kéne lennie, és hogy a motornak könnyítenie kéne az első hely megszerzését.
- Még az előbbiekben felvázolt koncepcióban is előfordulhat, hogy a játékos nehezen szerzi meg az első helyet, és hogy az algoritmus nem túl „elnéző”. Ha az utolsó métereken követsz el egy hibát, akkor valószínűleg nem tudod elkerülni a következményeket. Emiatt úgy döntöttünk, hogy a verseny utolsó részén az MI alapképességeit nem turbózzuk fel.
Tulajdonképpen a verseny utolsó 20%-kában folyamatosan úgy csökkentjük a módosítókat, hogy a végén nulla legyen az értékük. Ez nehezebbé tesz az AI számára, hogy korrigáljon, így adva több lehetőséget a játékosnak. Gyakorlatilag rontják a képességeiket, ha az emberi játékost hátrébb kerül. Ez általában teret biztosít a játékosnak a legutolsó métereken arra, hogy javítson a pozícióján, és még ha hibázott is, a legvégén mégsem nagy a hátránya.
Konklúzió
A felvázolt algoritmus kiszámítható módon ad választ a „deklaratív vagy szkript-vezérelt mesterséges intelligencia” problémájára, miközben a verseny közben dinamikusan alkalmazkodik a játékos teljesítményéhez. Mindezt olyan módon, hogy nem sérül a korrektség érzése, és nem tűnik mondvacsináltnak a győzelem.
Reméljük, hogy az itt leírt rendszer – ami a Pure mögött lévő implementáció – nem nyilvánvaló és átlátszó a játékos számára és a jó versenyteljesítmény „igazi” érzését adja. Izgalmas versenyeket akartunk összehozni, amiben állandóan ott vannak a játékos körül az ellenfelek, és ahol könnyen halad előre. Azt akartuk, hogy az első helyek úgy legyenek elérhetőek, hogy meg kelljen harcolni értük, így az élmény garantált. Úgy látjuk, hogy sikerült elérnünk a célunkat.
Emellett azt gondoljuk, hogy ez a fajta algoritmus más versenyszimulátorokban is alkalmazható, és az implementáció sem túl bonyolult.
Arra is gondoltunk, hogy egyéb játéktípusokban – mint például FPS, RTS, RPG – is alkalmas lehet a módszer. Például egy FPS-ben el kell jutni egy adott stratégiai ponthoz bizonyos mennyiségű életerővel. Ha a játékos életereje magas, akkor az MI nagyobb nyomást fejt ki rá, ellenkező esetben viszont lélegzetvételnyi időhöz jutva összeszedheti magát. Ennek a folyamatnak korlátot szabhatunk azzal, hogy a rosszfiúk sosem hagyják abba a harcot, és a játékos találati pontossága sosem 100%-os, és ezeket a paramétereket a beállított nehézségi szint határozná meg.
Könnyű szinten az MI sosem harcolna nagyon durván függetlenül attól, hogy a játékosnak mennyi az életereje, és a stratégiai pontok referenciaértékei magasabbak lennének. És ennek az ellenkezője nehezebb szinten. Röviden: ez a módszer eszközöket ad, amelyek meghatározzák az MI viselkedését. Majd ezeket az eszközöket arra használja, hogy a játék előtt egy előre elképzelt forgatókönyv váljék valóra, miközben az értékek dinamikus módosításával alkalmazkodik a történtekhez.
(A köszönetnyilvánításokat nem fordítottam le, az eredeti cikkben olvashatóak)
Az eredeti cikk a következő címen olvasható: http://www.gamasutra.com/php-bin/news_index.php?story=22141
('The Pure Advantage: Advanced Racing Game AI')
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.