Ismét két őskövület (1998 és 2003), amelyek közül az első izgalmasabb ill. érdekesebb. Talán van még aki emlékezik az első névre, de amit szerintem érdemes róla tudni: technológiailag zseniális volt, de maga a játék megvalósítása borzalmas lett - kivéve a rajongóknak, akik viszont még ma is aktívak.
A játékot karszimulátornak is csúfolták hiszen a melleinken kívül csak a jobb karunk volt főhősnőnkből látható.
A mellünk szerepe az életerőnk kijelzése volt - azt egy tetovált szív jelezte. HUD nem volt - így a fegyverünk tárának állapotát pedig szóban közöltük magunkkal.
A karunk szerepe a tárgyakkal történő interakció kivitelezése volt. Az ehhez szükséges mozgást - a játékok történelmében elsők között - inverz kinematika számolta, mint ahogy a többi állat mozgását is az AI által vezérelve.
Még mielőtt a forráskódra térnénk át érdemes az alábbiakat kiemelni:
- az engine szintén az elsők között volt ami valódi fizikai engine-t használt (bár csak egyszerűsített szimulációra volt képes)
- real-time Foley generálta a hangokat (röviden: kétszer nem hallhatta az ember ugyanazt a zörgést, csattanást stb)
- nagy külső tereket tudott renderelni, aminek hatékonyságát occlusion cull-lal növelte occluderek felhasználásával
- árnyék használata - nem valódi depth shadow map csak egyszerű projektív textúra a talajon
- az engine a 3D gyorsítók hajnalának idejében készült vagyis szoftveres renderelésre volt berendezve
És amit a forráskódjából kihámoztam
- Elég sok a káromkodás és szitokszó. Legtöbbször a kommentekben, de néha a változónevek maguk is azok.
- Kb. 3 héttel a játék hivatalos kiadása előtt még volt változtatás a kódban.
- Tele van mágikus számokkal különösen az IK-val kapcsolatos kódrészekben.
- Rengeteg kikommentezett duplikált kód van benne. Olyasmi lehet ez, mint amikor az ember próbálgatja beállítani az együtthatókat és a biztonság kedvéért meghagyja amiket már megpróbált. Itt pedig rengeteg együttható volt.
- A file formátumot kezelni elég körülményes mivel aszinkron volt a file kezelés. A neve GROFF és van benne Section, SectionList, RelocationRecord, Relocation, SymbolEntry stb. Ezenkívül többféle formátuma is volt.
- Animációhoz a csontváz információ szövegesen van elhelyezve file-ban metaadatként szóval azzal nem foglalkoztam (inverse base pose mátrixról nem is mertem álmodni).
Végül oda jutottam, hogy bármennyire izgalmas is ez a téma a meshek beolvasásánál abbahagyom.
Íme a T-rex és raptorok a demóból placeholder textúrával:
Mivel mindenképp szerettem volna dinókat látni ezért egy javaslatot követve vizsgálódni kezdtem a címben említett második játék (JPOG) után. Ennek a forráskódjához nem volt szerencsém azonban a Trespasser rajongók készítettek leírást az engine által használt file formátumhoz. Így tehát magát az engine-t (és a játékot) nem ismerem, csak bizonyos file-jait.
Minden számomra szükséges információt ki tudtam nyerni a demó file-jaiból: meshek, textúrák (ezek legtöbbször DXT1 vagy RGBA5551), csontváz.
A csontváz animálását - a Trespasser által ihletve - IK-val oldattam meg.
Ám ennek a projektnek is volt egy igen izgalmas része.
Nem volt egyértelmű, hogy hol és hogy tárolja (vagy tárolja-e egyáltalán) a per-vertex csontadatokat (súlyok, indexek) a file. Ezt úgy derítettem ki, hogy a leírásban szerepelt a per-vertex adatok között két darab "unknown" 32 bites integer. Arra gondoltam, hogy megnézem ezeket mint 2x4 darab byte. Összegyűjtöttem ezeket és láttam, hogy az egyik négyes byte csoportban a számok variációja pont annyi, mint a csontok száma. Akkor nyilván ezek lesznek a csontindexek. A másik csoportban pedig súlynak kell lennie: elosztottam az ebben a csoportban szereplő értékeket 255-tel és kijött, amit vártam: egy csoporton belül ezen értékek összege mindig 1.0.
És hogy mindennek mi volt a célja az egyelőre titok :)