Tolvajképző: a Thief mesterséges intelligenciája

Lopakodás mesterfokon...

A Thief: The Dark Project 1998 decemberében jelent meg a belső nézetű akciójátékok már akkor is igen zsúfolt piacán, és néhány zseniális ötletével azonnal műfajt teremtett. A fantasy környezetű játék főhőse nem valami adrenalintól duzzadó, legyőzhetetlen harcos volt, hanem egy árnyakban bujkáló tolvaj, akinek a legfőbb (sőt szinte egyetlen) fegyvere a meglepetés, az észrevétlenség. A sötétben lopakodás, az ellenséges járőrök kijátszása egészen új játékélményt, addig nem tapasztalt izgalmakat adott a játékosnak – nem csoda, hogy a kezdeményezésnek hamarosan követői is akadtak (a saját két folytatása mellett például a Metal Gear Solid vagy a Splinter Cell sorozatok).

Az újszerű játékmenet természetesen más megközelítést igényelt a mesterséges intelligencia irányából is. A Thiefben a megszokottól eltérően nem a harcon (ha odáig fajul a helyzet, a főhősnek gyakorlatilag nem marad esélye, hiszen egy-két csapástól azonnal elhullik), hanem éppen a harc elkerülésén van a hangsúly. Az AI-nak tehát itt elsősorban arra kell összpontosítania, hogy realisztikusan szimulálja az ellenfelek érzékszerveit: mikor, milyen körülmények között veszik észre a játékos karakterét, és mikor nem.

Látjuk...

A lopakodós játékok karakterei a látásukra és a hallásukra támaszkodnak. Elvileg a szaglás is könnyedén megvalósítható lenne, de ez az a terület, amelyet – még – nem lehet a játékos számára közvetíteni, ezért ezt extrém esetektől eltekintve (vadászjátékok) nem is szokták modellezni.

Mivel az egész lopakodás lényege a fény-árnyék viszonyokon alapszik (illetve a hangokon, de erről később lesz szó), a láthatóságvizsgálatot nem lehet az akciójátékokban megszokott, pofonegyszerű raycasting módszerrel letudni (összekötjük az ellenfelet és a játékost egy vonallal, és ha az nem ütközik tereptárgyba, akkor lát; ha beleütközik, a játékos takarásban van). Ehelyett minden pályára kell generálni egy úgynevezett lightmapet, ami egy szürkeárnyalatos „térkép”, és a pálya adott pontjain a statikus fényviszonyokat hivatott leképezni.

Ezt aránylag könnyű módosítani a dinamikusan változó fényforrások hatásával (hiszen csak egy adott sugarú körben kell a lightmapen a fényerővel arányosan megnövelni a szürke árnyalatát), és máris a kezünkben van az eszköz, amelyik megmondja, hogy a játékos a pálya adott pontján tartózkodva, abszolút értelemben mennyire látható. (Hogy a játék izgalmasabb legyen, a Thief készítői még azt a logikátlanságot is bevezették, hogy a kivont fegyver is növeli a láthatóságot – csak hogy a fegyver elővétele is fontos stratégiai döntés legyen a játékos számára.)


Thief: Gold – az őr még nem lát

Az AI feladata innen már egyszerű: miután az említett raycasting módszerrel kiderítette, hogy takarásban van-e a játékos, csak az ellenfél és a játékos távolságát kell összehasonlítani a játékos aktuális láthatósági értékével. Máris remekül modelleztük a „minél sötétebb helyen bujkálok, annál közelebb kell jönni, hogy észrevegyél” elvet!

Természetesen ezt lehet még finomítani, például azzal, hogy megvizsgáljuk, merrefelé néz az adott ellenfél, és minél nagyobb szöget zár be ezzel az a vonal, aminek a végén a játékos áll, annál inkább lecsökkentik az ellenfél látótávolságát – „ami előttem van, az feltűnőbb, mint amit csak a szemem sarkából látok” effekt. Esetleg extra láthatóságot adnak a mozgásban lévő karaktereknek (a mozgás sebességével arányosat), ezzel is szimulálva az emberi látás egyik jellegzetességét.

Halljuk...

A hallás (ahogy a való életben is) a játékokban is kisebb szerephez jut, mint a látás. Megvalósítani is sokkal egyszerűbb, hiszen az ember minden irányban képes hallani, míg látni, mint tudjuk, nem – adott sugarú körben vizsgálódni pedig jóval egyszerűbb, mint egy körszeletben. Még egy lényeges különbség van: az AI-nak folyton figyelnie kell a láthatóságot, újra és újra végigfuttatni az érzékelő algoritmusokat, mert sosem lehet tudni, mikor és hol bukkan fel valami gyanús elem a látótérben. A zajok ezzel szemben impulzusszerűen jelentkeznek, így meg lehet fordítani a vezérlést. Míg a látásnál azt kell kiértékelnünk, hogy gyanús-e, amit látunk, a hallásnál azt, hogy ha elhangzott egy gyanús hang, azt hallhatja-e valamelyik AI-irányította szereplő.

Az algoritmus alapjáraton roppant egyszerű: minden hangforráshoz definiálni kell egy hallhatósági távolságot, és minden szereplőnek egy hallótávolságot. A zörej elhangzásának pillanatában csak azt kell megnézni, hogy a hangforrás közelebb van-e a „hallgatózó” karakterhez, mint ennek a két távolságnak az összege (tehát az „eddig hallatszik el a hang” köre átfedésben van-e az „eddig terjed a szereplő hallása” körrel).


Thief: The Dark Project – támadás hátulról

Igen ám, csakhogy ez a módszer feltételezi, hogy a hangok és zörejek egymás mellett mind tisztán hallhatók, azaz nem nyomják el egymást adott esetben – ez ugye nem túl életszerű. Valahogy szimulálni kell azt is, hogy például egy hangosan zakatoló gép zúgása „elrejtse” a közelében lévő halkabb zörejeket. Ehhez csupán azt kell kiszámítani, hogy a karaktert az adott pillanatban érő hanghatások közül melyik a legerősebb. Ez egyszerűen megállapítható: minden hang annyira erős, amennyire távol vagyunk attól a határtól, ahol még éppen hallható (vagyis ha egy százméteres körben hallható zaj forrásától 40 méterre állunk, ott 60-as erősségű a hang, az epicentrumban száz, 99 méterre a központtól egyes). Persze ezt is van még hová cifrázni: sokat lendít a valósághűségen, ha például kijelentjük, hogy egy hang csak akkor nyom el egy másikat, ha legalább másfélszeres az ereje az adott pontban (egyébként mindkettőt hallhatónak tekintjük), és így tovább.

...és ha észrevettek

Riadó!

Ha az észrevétel megtörtént, jön a következő fázis: mit tegyen az egyszeri ellenfél (azonfelül, hogy odarohan a játékoshoz és megpróbálja felszeletelni)? Először is riadót kell fújnia. A riadókészültség több szintre lehet osztva, különböző mértékben növelheti az ellenfelek látó- és hallótávolságát, meghatározott karakterek pedig oda is mehetnek a riadót fújó figurához segíteni – a mai lopakodós játékok gyakorlatilag abban fejlődnek, hogy melyik tud finomabban és életszerűbben kidolgozott riadókészültségi rendszert felmutatni. Ettől a pillanattól az AI-nak már nem kell különösebben izzadnia – pontosabban fogalmazva nem kell másként viselkednie, mint egy átlagos akciójáték-AI-nak: tűz, ahogy a csövön kifér!

Bonyololultabb az eset, amikor nem a játékost látja/hallja meg az ellenfél, hanem valami gyanús nyomot, ami a játékos tevékenységére utal: egy kinyitott ajtót, aminek zárva kellene lennie, egy eloltott fáklyát, aminek égnie kellene, esetleg egy hullát... Ez azért gond, mert ilyenkor az ellenfél csak azt tudja, hogy baj van, de azt nem, hogy mit kellene tennie, hol kellene keresnie a probléma forrását, azaz a játékost.

Itt ismét csak két eset lehetséges: vagy valami statikus, előre meghatározható helyen található „gyanús nyomot” leltünk (betört ablak, feltört zár stb.), vagy valami olyasmit, ami bárhol felbukkanhat a pályán (vérfolt, golyógyomok stb.). Az első esetre fel lehet készülni, az ellenfelek scriptjében pontosan meg lehet adni akár minden tereptárgyra, hogy azoknak milyen „gyanús” állapotaik lehetnek, és azokra pontosan hogyan reagáljon egy karakter: miként változtassa meg a járőrözés útvonalát, milyen szintű riadót fújjon és így tovább. (Például egy ajtónál gyanús állapot, ha nyitva látja az őr, ilyenkor a scriptje úgy változik meg, hogy bemegy az ajtón, adott útvonalon végignézi a szobákat újabb gyanús nyomok után, majd ha nem talált semmit, bezárja az ajtót, és esetleg hív egy addig passzív őrt, hogy az onnantól az ajtó előtt posztoljon. Ha emberünk időközben újabb gyanús elemeket lát, újabb script lép életbe.


Splinter Cell – modern követő

Érdekes kérdés még, hogy mit tegyen az ellenfél, ha észrevette a játékost, de annak sikerült elbújni vagy elmenekülni előle. A játszhatóság megőrzése miatt a programozók ilyekor kicsit „butítanak” az ellenfeleken, akik bizonyos idő letelte után „elfelejtik”, hogy valaha látták a játékost, és visszatérnek a nekik megszabott tevékenységhez. Ugyanígy a riadónak is fokozatosan egyre alacsonyabb szintre kell kapcsolnia, majd teljesen megszűnnie, ha a fejlesztő nem akarja arra kényszeríteni a játékost, hogy egyetlen rossz mozdulat után rögtön a „load game” gomb felé kelljen nyúlnia.

Kémek és tolvajok

A lopakodós játékok ma (legfőképpen a tavaly megjelent Thief: Deadly Shadows és Metal Gear Solid: Snake Eater, valamint az alig pár hónapos Splinter Cell: Chaos Theory jóvoltából) újabb reneszánszukat élik. Az egyre kifinomultabb mesterséges intelligenciák a mai napig a cikkben vázolt alapelvek mentén működnek, de a játékfejlesztők újabb és újabb ínyencségeket vetnek be az izgalmak és a valósághűség fokozása miatt.

Az ilyen stílusú játékokban ma már találkozhatunk álcaruhákkal, egymással rádión kommunikáló ellenfelekkel, elektronikus és számítógépes érzékelőrendszerekkel, amelyeket ki kell játszanunk és/vagy meghackelnünk – sőt a tavaly megjelent zseniális Pandora Tomorrow a többszemélyes játékot is képes volt (igencsak izgalmas és élvezetes formában) megoldani a lopakodós játékok műfajában! A lopakodás és az azt kiszolgáló AI rutinok pedig olyan jól vizsgáztak, hogy ma már szinte minden, magára valamit is adó akciójátékban fel-felbukkannak erre koncentráló pályarészletek, küldetések, játékelemek.

Hanula Zsolt

Azóta történt

  • Én, a robot

    Chatbotok és társalkodó mesterséges intelligenciák.

Előzmények

Hirdetés