1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012 |
- <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <meta name="GENERATOR" content="Mozilla/4.6 [en] (Win98; I) [Netscape]">
- <title>Tomb Raider II Data Formats</title>
- </head>
- <body link="#0000FF" vlink="#800080">
-
- <center><b><i><u><font size=+3>TRosettaStone</font></u></i></b>
- <p><b>Tomb Raider II .TR2 Data File Format</b>
- <br><font size=-1>(Including Tomb Raider .PHD/.TUB and Tomb Raider III .TR2 information, where available)</font>
- <br><font size=-1>(Also includes TOMBPC.DAT script information)</font>
- <br><font size=-2>Document Version 1.00 (991108)</font>
-
- <p><i><font size=-2>The Rosetta Stone was the key that unlocked the mysteries
- of Egyptian hieroglyphics. It contains an inscription praising King Ptolemy
- V, which is repeated three times - once in hieroglyphic, once in demotic,
- and once in Greek. By translating the Greek, comparisons could be made
- with the demotic and hieroglyphic versions, providing an invaluable lexicon
- with which to translate other hieroglyphic works. The efforts that went
- into making the document you are now reading could be likened to a form
- of digital archæology, and hopefully this document will provide sufficient
- information for others to decipher and create their own "TR-hieroglyphic"
- works.</font></i></center>
-
- <p> This document contains detailed descriptions of the
- Tomb Raider II data file formats ({Level-name}.TR2 and TOMBPC.DAT). It
- is assumed that the reader has knowledge and experience programming in
- C or C++, and has at least a passing familiarity with graphics programming.
- This document is self-contained; all hyperlinks refer only to itself. All
- information in this document was derived independently, without the aid
- or assistance of anyone at Core Design or Eidos. As such, the information
- in this document may contain errors or omissions, and all structure and
- variable names were deduced from the interpretation of the data (and therefore
- could be misleading or completely wrong). All the information in this document
- was tested and is therefore plausible, but could also be a misinterpretation.
- All information herein is provided as is - you get what you pay for, and
- this one's free. This was a spare-time project that set out to document
- the Tomb Raider 2 file format; along the way, additional information about
- Tomb Raider 1 / Gold (.PHD, .TUB) and Tomb Raider 3 (.TR2) files became
- available, and that information is provided in context. Where applicable,
- Tomb Raider I, Tomb Raider Unfinished Business, and Tomb Raider Gold are
- all referred to as TR1, and if the information specific to TR1 is interspersed
- with TR2 information, the <font color="#FF0000">TR1 information is highlighted
- in RED</font>. Likewise, Tomb Raider III is referred to as TR3, and <font color="#008000">information
- specific to TR3 is highlighted in GREEN</font>. In the few places
- where there is such information, <font color="#000080">information specific
- to TR2 ONLY is highlighted in BLUE</font>. Everything else is assumed
- to pertain to TR2 only, or to all three games. [Late note: as this document
- was being prepared for release, the Tomb Raider: Last Revelation demo was
- released. .TR4 files will be hopefully be addressed in a future revision
- of this document.]
-
- <p> Because of Core/Eidos' position on Tomb Raider level
- editing tools, it is suggested that any tools that you develop be released
- in source code form, anonymously, using Usenet newsgroups. Anonymity
- can protect you from legal action, wide distribution via Usenet prevents
- Core/Eidos from attempting to recall or control the distribution of your
- software, and distributing source code both allows multi-platform development
- (e.g. let others port it to the Mac or Linux for you) and encourages others
- to write utilities, since they can learn and benefit from your source code.
- Also, Linux has taught us that 40,000 people debugging a single application
- makes for a clean final product ;-)
-
- <p>Tomb Raider, Tomb Raider Gold, Unfinished Business, Tomb Raider II,
- Tomb Raider III, Lara Croft, and all images and data within the data files
- and game engine are Copyright © Core Design and/or Eidos PLC.
- Modification and/or distribution of any part of a Tomb Raider data file
- (any version) is almost certainly a copyright violation.
-
- <p>This document was composed at a screen resolution of 1024x768, and is
- best viewed at that resolution. It contains many links, but all of
- them refer only to this document; no link from this page will take
- you to another web site, and this document can be viewed offline (not connected
- to the Internet). Use your browser's <b>BACK</b> button to return
- from a link, e.g. if you click on a structure declaration to see its definition,
- clicking <b>BACK</b> will return you to your point of origin after you've
- examined the structure definition.
-
- <p>
- <hr>
- <center>
- <p><b><u><font size=+2>Table of Contents</font></u></b></center>
-
- <p> <a href="#Fundamentals">I. The Fundamentals</a>
- <br> <a href="#Fundamentals.Overview">Overview</a>
- <br> <a href="#Fundamentals.Coordinates">Coordinates</a>
- <br> <a href="#Fundamentals_Colours">Colours</a>
- <br> <a href="#Fundamentals_Objects">Objects</a>
- <br> <a href="#Fundamentals_Animations">Animations</a>
- <br> <a href="#Fundamentals_Lighting">Lighting</a>
- <br> <a href="#Fundamentals.BasicDataStructures">Basic Data Structures</a>
- <br> <a href="#Fundamentals_Textures">Textures</a>
- <br> <a href="#Fundamentals_Sounds">Sounds</a>
- <p> <a href="#RoomGeometry">II. Room Geometry</a>
- <br> <a href="#RoomGeometry.Overview">Overview</a>
- <br> <a href="#RoomGeometry.RoomStructures">Room Structures</a>
- <p> <a href="#FloorData">III. FloorData</a>
- <p> <a href="#MeshGeometry">IV. Mesh Geometry</a>
- <p> <a href="#MeshConstructionAndAnimation">V. Mesh Construction and Animation</a>
- <p> <a href="#NonPlayerCharacterBehaviour">VI. Non-Player Character Behaviour</a>
- <p> <a href="#Sound">VII. Sound</a>
- <p> <a href="#Miscellany">VIII. Miscellany</a>
- <br> <a href="#Miscellany.Version">Version</a>
- <p> <a href="#EntireTR2level">IX. The Entire TR2 Level Format</a>
- <br> <a href="#EntireLevelFormat.TR2">Tomb Raider II</a>
- <br> <a href="#EntireLevelFormat.TR1">Tomb Raider I</a>
- <br> <a href="#EntireFileFormat.TR3">Tomb Raider III</a>
- <p> <a href="#ItemizedDifferencesBetweenTR1andTR2">Itemized Differences between TRI and TRII</a>
- <p> <a href="#ItemizedDifferencesBetweenTR2andTR3">Itemized Differences between TRII and TRIII</a>
- <p> <a href="#ItemizedDifferencesBetweenTRandDemos">Itemized Differences between "normal" TRs and Demos</a>
- <p><a href="#ScriptingWithTOMBPC.DAT">X. Scripting with TOMBPC.DAT</a>
- <p><a href="#Catalogs">Catalogues</a>
- <br> <a href="#Catalogs.TR2ItemIDs">TR2 Item IDs</a>
- <br> <a href="#Catalogs.TR1EntityStates">TR1 Entity States</a>
- <br> <a href="#Catalogs.TR2EntityStates">TR2 Entity States</a>
- <br> <a href="#Catalogs.TR1Animations">TR1 Animations</a>
- <br> <a href="#Catalogs.TR2Animations">TR2 Animations</a>
- <br> <a href="#Catalogs.TR2SoundIDs">TR2 Sound IDs</a>
- <p> <a href="#Index">Index</a>
- <p>
- <hr>
- <center>
- <p><a NAME="Fundamentals"></a><b><u><font size=+1>I. The Fundamentals</font></u></b></center>
-
- <p><a NAME="Fundamentals_Overview"></a><b>Overview:</b> Tomb Raider II
- is driven by two sets of files. The script file, TOMBPC.DAT, contains all
- the text strings describing the various elements in the game (e.g. the
- game engine knows about "Key 1"; it looks in TOMBPC.DAT to determine the
- name to be displayed in Lara's inventory, such as "Rusty Key" or "Taste
- rostige" or "Clé Rouillée"), the level and cut-scene filenames
- (e.g. WALL.TR2, CUT3.TR2), the order in which they are to be played, and
- various per-level and per-game configuration options (e.g. what weapons
- and objects Lara starts the level with, whether or not the "cheat" codes
- work, etc.). The level files, {level-name}.TR2, contain everything about
- the level, including the geographical geometry, the geometry (meshes) of
- all animate and inanimate objects in the level, all the textures and colour
- data, all animation data, index information (and, in TR1, the actual sound
- sample data) for all sounds, accessibility maps - everything necessary
- to run the game. For whatever reason, Core has included everything in one
- file instead of breaking it up into logical groupings; this means that
- every level contains all the meshes, textures, sound information, and animation
- data for Lara and all of her weapons. There are a fair number of other
- redundancies, too.
-
- <p><a NAME="Data_Types"></a> For the purposes of further discussion,
- the following are assumed:
- <br> <b>bit8</b>
- specifies an 8-bit signed integer (range -128..127)
- <br> <b>bitu8</b>
- specifies an 8-bit unsigned integer (range 0..255)
- <br> <b>bit16</b>
- specifies a 16-bit signed integer (range -32768..32767)
- <br> <b>bitu16</b>
- specifies a 16-bit unsigned integer (range 0..65535)
- <br> <b>bit32</b>
- specifies a 32-bit signed integer (range -2147483648..2147483647)
- <br> <b>bitu32</b>
- specifies a 32-bit unsigned integer (range 0..4294967295)
-
- <br> All multi-byte integers (bit{u}16, bit{u}32) are
- stored in little-endian (Intel-x86, etc.) format, with the least significant
- byte stored first and the most significant byte stored last. When using
- this data in platforms with big-endian (PowerPC, etc.) number format, be
- sure to reverse the order of bytes.
- <p>Data alignment is something one has to be careful about. When some entity
- gets an address that is a multiple of n, it is said to be n-byte aligned.
- The reason it is important here is that some systems prefer multibyte alignment
- for multibyte quantities, and compilers for such systems may pad the data
- to get the "correct" alignments, thus making the in-memory structures out
- of sync with their file counterparts. However, a compiler may be commanded
- to use a lower level of alignment, one that will not cause padding. And
- for TR's data structures, 2-byte alignment should be successful in nearly
- all cases, with exceptions noted below.
-
- <p>To set single-byte alignment in <u>Microsoft Visual C++</u>, use the following compiler directive:
- <pre>#pragma pack(push, tr2, 1)</pre>
- To return to the project's default alignment, use the following directive:
- <pre>#pragma pack(pop, tr2)</pre>
-
- <p>To achieve 2-byte alignment in <u>Metrowerks CodeWarrior</u>, widely used in
- the MacOS, use this compiler directive:
- <pre>#pragma options align=mac68k</pre>
- To return to the project's default alignment, use this directive:
- <pre>#pragma options align=reset</pre>
- Similar options exist for other compilers.
-
- <p><a NAME="Fundamentals_Coordinates"></a><b>Coordinates:</b> The world
- coordinate system is oriented with the X-Z plane horizontal and Y vertical,
- with -Y being "up" (e.g. decreasing Y values indicate increasing altitude).
- The world coordinate system is specified using bit32 values; however, the
- geography is limited to the +X/+Z quadrant for reasons that are explained
- below. Mesh coordinates are relative and are specified using <a href="#Data_Types">bit16</a>s.
- There are some additional coordinate values used, such as "the number of
- 1024-unit blocks between points A and B"; these are simply scaled
- versions of more conventional coordinates.
- <p><a NAME="Fundamentals_Colours"></a><b>Colours:</b> All colours in TR2
- are specified either explicitly (using either the <a href="#struct.tr2_colour">tr2_colour</a>
- structure, described below, or the 16-bit ARGB structure) or implicitly,
- by indexing one of the palettes. If, for some reason, 16-bit textures
- are turned off, all colours and textures use an 8-bit palette that is stored
- in the .TR2 file. This palette consists of a 256-element array of
- <a href="#struct.tr2_colour">tr2_colour</a>
- structures, each designating some colour; textures and other elements
- that need to reference a colour specify an index (0..255) into the Palette[]
- array. There is also a 16-bit palette, which is used for identifying
- colours of solid polygons. The 16-bit palette contains up to 256
- four-byte entries; the first three bytes are a <a href="#struct.tr2_colour">tr2_colour</a>,
- while the last byte is ignored (set to 0).
- <br>The 16-bit textile array, which contains <a href="#struct.tr2_textile16">tr2_textile16</a>
- structures, specifies colours using 16-bit ARGB, where the highest bit
- (0x8000) is a crude alpha channel (really just simple transparency - 0
- ::= transparent, 1 ::= opaque). The next 5 bits (0x7c00) specify
- the red channel, the next 5 bits (0x03e0) specify the green channel, and
- the last 5 bits (0x001f) specify the blue channel, each on a scale from
- 0..31.
- <p><a NAME="Fundamentals_Objects"></a><b>Objects:</b> There are two basic
- types of objects in TR2 - meshes and sprites. <b>Meshes</b> are collections
- of textured or coloured polygons that are assembled to form a three-dimensional
- object (such as a tree, a tiger, or Lara herself). The "rooms" themselves
- are also composed of meshes. Mesh objects may contain more than one mesh;
- though these meshes are moved relative to each other, each mesh is rigid.
- <b>Sprites</b>
- are two-dimensional images that are inserted into three-dimensional space,
- such as the "secret" dragons, ammunition, medi-packs, etc. There are also
- animated sprite sequences, such as the fire at the end of "The Great Wall."
- Core had presumably used this method to reduce CPU utilization on the PlayStation
- and/or the earlier PCs. Sprites become less and less abundant; TR2 has
- very few scenery sprites, and TR3's pickups are models instead of sprites.
- Objects are referenced in one of two ways - as an offset into an array
- (e.g. Moveables[i]) or using an identifying tag (ObjectID). In the latter
- case, the related array (Items[], Moveables[], etc.) is searched until
- a matching ObjectID is found.
- <p><a NAME="Fundamentals_Animations"></a><b>Animations:</b> There are three
- basic types of animations in TR2, two corresponding directly with meshes
- and sprites, and a third type, animated textures. Sprite animation (sprite
- sequences) consists simply of a series of sprites that are to be displayed
- one after another, e.g. grenade explosions. Mesh animations are much more
- complex, done by what is essentially a skeletal-modeling scheme. These
- involve some arrays (Frames[] and MeshTree[]) of offsets and rotations
- for each element of a composite mesh. Frames are then grouped into an array
- (Animations[]) that describes discrete "movements," e.g. Lara taking a
- step or a tiger striking with its paw. The animations are "sewn together"
- by a state change array and an animation dispatch array, which, together
- with state information about the character, ensure that the animation is
- fluid (e.g. if Lara is running and the player releases the RUN key, she
- will stop; depending upon which of her feet was down at the time, either
- her left or right foot will strike the floor as part of the "stop" animation.
- The correct animation (left foot stop vs. right foot stop) is selected
- using these structures and the state information). Animated textures are
- simply a list of textures that are cycled through in an endless loop; they
- are normally used as geographic elements of the levels (e.g. water surface,
- bubbling lava, Atlantean plasma walls).
- <p><a NAME="Fundamentals_Lighting"></a><b>Lighting:</b> There are two main
- types of lighting in Tomb Raider, constant and vertex. Constant lighting
- means that all parts of an object have the same illumination, while in
- vertex lighting, each polygon vertex has its own light value, and the illumination
- of the polygon interiors is interpolated from the vertex values. Furthermore,
- lighting can be either internal or external. Internal lighting is specified
- in an object's data, external lighting is calculated using the room's light
- sources (ambient light, point light sources, flares, gunshots). Light intensities
- are described with a single value in TR1 and a pair of values in TR2 and
- TR3; the paired values are almost always equal, and the pairing may reflect
- some feature that was only imperfectly implemented, such as off/on or minimum/maximum
- values. In TR1 and TR2, the light values go from 0 (maximum light) to 8192
- (minimum light), while in TR3, the light values go from 0 (minimum light)
- to 32767 (maximum light).
- <p><a NAME="Fundamentals_BasicDataStructures"></a><b>Basic Data Structures:</b>
- Much of the .TR2 file is comprised of structures based on a few fundamental
- data structures, described below.
- <ul>
- <li>
- <a NAME="struct_tr2_colour"></a><b>Colour structure</b> - this is how most
- colours are specified.</li>
- </ul>
- typedef struct { // 3 bytes
- <br>
- <a href="#Data.Types">bitu8</a> Red; // Red component (0 ::= darkest, 255 ::= brightest)
-
- <br>
- <a href="#Data.Types">bitu8</a> Green; // Green component (0 ::= darkest, 255 ::= brightest)
-
- <br>
- <a href="#Data.Types">bitu8</a> Blue; // Blue component (0 ::= darkest, 255 ::= brightest)
-
- <br> } <b>tr2_colour</b>;
- <br>(Some compilers, like CodeWarrior, will pad this structure to make 4
- bytes; one must either read and write 3 bytes explicitly, or else use a
- simple array of bytes instead of this structure.)
-
- <p> And as mentioned earlier, the 16-bit palette uses a similar structure:
-
- </p> typedef struct { // 4 bytes
- <br> <a href="#Data_Types">bitu8</a> Red;
- <br> <a href="#Data_Types">bitu8</a> Green;
- <br> <a href="#Data_Types">bitu8</a> Blue;
- <br> <a href="#Data_Types">bitu8</a> Unused;
- <br> } <b>tr2_colour4</b>;
- <ul>
- <li>
- <a NAME="struct_tr2_vertex"></a><b>Vertex structure</b> - this is how vertices
- are specified, using relative coordinates. They are generally formed
- into lists, such that other entities (such as quads or triangles) can refer
- to them by simply using their index in the list.</li>
- </ul>
- typedef
- struct { // 6 bytes
- <br>
-
- <a href="#Data.Types">bit16</a> x;
- <br>
-
- <a href="#Data.Types">bit16</a> y;
- <br>
-
- <a href="#Data.Types">bit16</a> z;
- <br>
- } <b>tr2_vertex</b>;
- <ul>
- <li>
- <a NAME="struct_tr2_face4"></a><b>Rectangular (quad) face definition</b>.
- Four vertices (the values are indices into the appropriate vertex list)
- and a texture (an index into the object-texture list) or colour (index
- into 8-bit palette or 16-bit palette). If the rectangle is a coloured
- polygon (not textured), the .Texture element contains two indices: the
- low byte (.Texture & 0xff) is an index into the 256-colour palette,
- while the high byte (.Texture >> 8) is in index into the 16-bit palette,
- when present. A textured rectangle will have its vertices mapped onto all
- 4 vertices of an object texture, in appropriate correspondence.</li>
- </ul>
-
- <dir> typedef struct {
- // 10 bytes
- <br> <a href="#Data.Types">bitu16</a>
- Vertices[4];
- <br> <a href="#Data.Types">bitu16</a>
- Texture;
- <br> } <b>tr2_face4</b>;</dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_face3"></a><b>Triangular face definition</b>. Three
- vertices (the values are indices into the appropriate vertex list) and
- a texture (an index into the object-texture list) or colour (index into
- 8-bit palette or 16-bit palette). If the triangle is a coloured polygon
- (not textured), the .Texture element contains two indices: the low byte
- (.Texture & 0xff) is an index into the 256-colour palette, while the
- high byte (.Texture >> 8) is in index into the 16-bit palette, when present.
- A textured triangle will have its vertices mapped onto the first 3 vertices
- of an object texture, in appropriate correspondence.</li>
- </ul>
- typedef
- struct { // 8 bytes
- <br>
-
- <a href="#Data.Types">bitu16</a> Vertices[3];
- <br>
-
- <a href="#Data.Types">bitu16</a> Texture;
- <br>
- } <b>tr2_face3</b>;
- <br>
- <ul>
- <li>
- <a NAME="struct_tr2_textile8"></a><b>8-bit texture tile</b> (65536 bytes).
- Each <a href="#Data.Types">bitu8</a> represents a pixel whose colour is
- in the 8-bit palette.</li>
- </ul>
- typedef
- struct { // 65536 bytes
- <br>
-
- <a href="#Data.Types">bitu8</a> Tile[256 * 256];
- <br>
- } <b>tr2_textile8</b>;
- <ul>
- <li>
- <a NAME="struct_tr2_textile16"></a><b>16-bit texture tile</b> (131072 bytes).
- Each <a href="#Data.Types">bitu16</a> represents a pixel whose colour is
- of the form ARGB, MSB-to-LSB:</li>
- </ul>
-
- 1-bit transparency (0 ::= transparent, 1 ::= opaque) (0x8000)
- <br>
- 5-bit red channel (0x7c00)
- <br>
- 5-bit green channel (0x03e0)
- <br>
- 5-bit blue channel (0x001f)
- <p> typedef
- struct { // 131072 bytes
- <br>
-
- <a href="#Data.Types">bitu16</a> Tile[256 * 256];
- <br>
- } <b>tr2_textile16</b>;
- <br>
- <p><a NAME="Fundamentals_Textures"></a><b>Textures:</b> All mesh surfaces
- are either <b>coloured</b> or <b>textured</b>. Coloured surfaces
- are "painted" with a single colour that is either specified explicitly
- or using an index into the palette. Textured surfaces map textures
- (bitmapped images) from the texture tiles (textiles) to each point on the
- mesh surface. This is done using conventional UV mapping, which is
- specified in "Object Textures" below; each object texture specifies a mapping
- from a set of vertices to locations in the textile, and these texture vertices
- are associated with position vertices specified here.
- <p><a NAME="Fundamentals_Sounds"></a>
- <p>
- <hr>
- <p><b>Sounds:</b> There are several sorts of sounds, which can be classified
- as either continuous or triggered. Continuous sounds are level-background
- sounds (such as the blowing wind in "The Great Wall") and sound sources
- (such as waterfalls; these are in SoundSources[]). Triggered sounds are
- sounds played when some event happens, such as at certain animation frames
- (footsteps and other Lara sounds), when doors open and close, and when
- weapons are fired. Sounds are stored in two places: the game-data files
- and the CD audio tracks (the latter are separate soundfiles in the MacOS
- version). The latter kind of sound is referred to straightforwardly, by
- index, while the former kind of sound is referred to using a three-layer
- indexing scheme, to provide a maximum amount of abstraction. An internal
- sound index references SoundMap[], which points to a SoundDetails[] record,
- which in turn points to a SampleIndices[] entry, which in turn points to
- a sound sample. SoundDetails[] contains such features as sound intensity,
- how many sound samples to choose from, among others. The sound samples
- themselves are in Microsoft WAVE format, and they are embedded either in
- the data files (TR1, some later TR demos) or in a separate file (MAIN.SFX)
- in TR2 and TR3.
- <br>
- <br>
- <br>
- <center>
- <p><a NAME="RoomGeometry"></a><b><u><font size=+1>II. Room Geometry</font></u></b></center>
-
- <p><a NAME="RoomGeometry_Overview"></a><b>Overview: </b>A <b>room</b> in
- TR2 is simply a rectangular three-dimensional area. A room may be "indoors"
- or "outdoors," may or may not be enclosed, may be accessible or inaccessible
- to Lara, may or may not contain doors or objects. All rooms have "portals,"
- called "doors" in some documentation, which are pathways to adjacent rooms.
- There are two kinds of portals, visibility portals and collisional portals.
- Visibility portals are for determining how much of a room (if any) is visible
- from another room, while collisional portals are for enabling an object
- to travel from one room to another. The visibility portals are most likely
- for doing "portal rendering", which is a visibility-calculation scheme
- that goes as follows: The viewpoint is a member of some room, which is
- then listed as visible from it. This room's portals are checked for visibility
- from that viewpoint, and visible portals have their opposite-side rooms
- marked as visible. These rooms are then checked for portals that are visible
- from the viewpoint through the viewpoint's room's portals, and visible
- ones have their opposite-side rooms marked as visible. This operation is
- repeated, with viewing through intermediate portals, until all visible
- portals have been found. The result is a tree of rooms, starting from the
- viewpoint's room; only those rooms and their contents need be rendered.
- It is clear that both visibility and collision calculations require that
- objects have room memberships given for them, and indeed we shall find
- that most map objects have room memberships.
- <p>Rooms may overlap; as we shall see, this is involved in how horizontal
- collisional portals are implemented. However, different rooms may overlap
- without either being directly accessible from the other; there are several
- inadvertent examples of such "5D space" in the Tomb Raider series. The
- only possibly deliberate example I know of is the flying saucer in "Area
- 51" in TR3, whose interior is bigger than its exterior.
- <p>A room can have an "alternate room" specified for it; that means that
- that room can be replaced by that alternate as the game is running. This
- trick is used to produce such tricks as empty rooms vs. rooms full of water,
- scenery rearrangements (for example, the dynamited house in "Bartoli's
- Hideout" in TR2), and so forth. An empty room is first created, and then
- a full room is created at its location from a copy of it. The empty room
- then has that full room set as its alternate, and when that room is made
- to alternate, one sees a full room rather than an empty one.
- <p>The rooms are stored sequentially in an array, and "Room Numbers" are
- simply indices into this array (e.g. "Room Number 5" is simply Rooms[5];
- the first room is Rooms[0]).
- <p>Rooms are divided into <b>Sectors</b>, which are 1024x1024 unit squares
- that form a grid on the X-Z plane. Sectors are the defining area
- for floor/ceiling height and various actions (e.g. a tiger appears and
- attacks when Lara steps on a given square); the various attributes
- of each sector are stored in the Sector Data (described in this section)
- and the <a href="#FloorData">FloorData</a>. As an aside, Sectors
- correspond to the "squares," easily visible in all of the Tomb Raider games,
- that experienced players count when gauging jumps; they also account
- for some of the game's less-appealing graphic artifacts. Careful tiling
- and texture construction can make these "squares" almost invisible.
- <p>Rooms have two kinds of surfaces, rendered and collisional, much like
- the two kinds of portals. The former are what is seen, while the latter
- control how objects interact with the world geometry. Furthermore, these
- two types are specified separately in the room data.
- <p>Rooms are defined with a complex structure, which is described below
- "inside-out," meaning that the smaller component structures are described
- first, followed by the larger structures that are built using the smaller
- structures.
- <p><a NAME="RoomGeometry_RoomStructures"></a><b>Room Structures:</b>
- <ul>
- <li>
- <a NAME="struct_tr2_room_info"></a><b>Room header.</b> X/Z indicate
- the base position of the room mesh in world coordinates (Y is always zero-relative)</li>
- </ul>
-
- <dir> typedef struct {
- // 16 bytes
- <br> <a href="#Data.Types">bit32</a>
- x;
- // X-offset of room (world coordinates)
- <br> <a href="#Data.Types">bit32</a>
- z;
- // Z-offset of room (world coordinates)
- <br> <a href="#Data.Types">bit32</a>
- yBottom; // (actually largest value,
- but indicates lowest point in room)
- <br> <a href="#Data.Types">bit32</a>
- yTop;
- // (actually smallest value, but indicates highest point in room)
- <br> } <b>tr2_room_info</b>;</dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_door"></a><b>Portal structure.</b> These
- portals, sometimes called "doors", define the view from a room into another
- room. This can be through a "real" door, a window, or even some open area
- that makes the rooms look like one big room. Note that "rooms" here are
- really just areas; they aren't necessarily enclosed. The portal structure
- below defines visibility portals, not an actual moveable door mesh, texture,
- or action (if any). And if the portal is not properly oriented, the
- camera cannot "see" through it.</li>
- </ul>
-
- <dir>
- <dir>typedef struct {
- // 32 bytes
- <br> <a href="#Data.Types">bitu16</a> AdjoiningRoom;
- // which room this portal leads to
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Normal;
- // which way the portal faces (the normal
- <br> // points <i>away</i> from the adjacent room; to be seen through, it
- must point <i>toward</i> the viewpoint).
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Vertices[4];
- // the corners of this portal (the right-hand rule applies with respect
- to the normal)
- <br> // if the right-hand-rule is not followed, the portal will
- <br> // contain visual artifacts instead of a viewport to
- <br> // AdjoiningRoom
- <br> } <b>tr2_room_portal</b>;</dir>
- </dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_sector"></a><b>Room Sector structure. All
- the geometry specified here is collisional geometry.</b> Sectors are 1024
- * 1024 (world coordinates). Floor and Ceiling are signed numbers of 256
- units of height (relative to 0), e.g. Floor 0x04 corresponds to Y = 1024
- in world coordinates. Note: this implies that, while X and Z can be quite
- large, Y is constrained to -32768..32512. Floor/Ceiling value of 0x81 is
- used to indicate impenetrable walls around the sector. Floor values are
- used by the game engine to determine what objects Lara can traverse and
- how. Relative steps of 1 (-256) can be walked up; steps of 2..7 (-512..-1792)
- can/must be jumped up; steps larger than 7 (-2048..-32768) cannot be jumped
- up (too tall). RoomAbove and RoomBelow indicate what neighboring rooms
- are in these directions; if RoomAbove is not "none", then the ceiling is
- a collisional portal to that room, while if RoomBelow is not "none", then
- the floor is a collisional portal to that room.</li>
- </ul>
-
- <dir>
- <dir>
- <br>typedef struct {
- // 8 bytes
- <br> <a href="#Data.Types">bitu16</a> FDindex;
- // Index into FloorData[]
- <br> <a href="#Data.Types">bitu16</a> BoxIndex;
- // Index into Boxes[]/Zones[] (-1 if none)
- <br> <a href="#Data.Types">bitu8</a> RoomBelow;
- // The number of the room below this one (-1 or 255 if none)
- <br> <a href="#Data.Types">bit8</a>
- Floor;
- // Absolute height of floor (multiply by 256 for world coordinates)
- <br> <a href="#Data.Types">bitu8</a> RoomAbove;
- // The number of the room above this one (-1 or 255 if none)
- <br> <a href="#Data.Types">bit8</a>
- Ceiling;
- // Absolute height of ceiling (multiply by 256 for world coordinates)
- <br> } <b>tr2_room_sector</b>;
- <p><font color="#008000">In TR3, BoxIndex is more complicated. Only bits
- 4-14 are the "real" index; bits 0-3 are most likely some kind of flag,
- such as what kind of footstep sound to make (wood, metal, snow). Furthermore,
- there is a special value of the "real" index, 2047, or 0x7ff.</font></dir>
- </dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_light"></a><b>Room Lighting structure.</b>
- X/Y/Z are in world coordinates. Intensity1/Intensity2 are almost
- always equal. This lighting only affects externally-lit objects. Tomb Raider
- 1 has only the first of the paired Intensity and Fade values.</li>
- </ul>
-
- <dir> typedef struct {
- // 24 bytes [TR1: 18 bytes]
- <br> <a href="#Data.Types">bit32</a>
- x;
- // X-position of light, in world coordinates
- <br> <a href="#Data.Types">bit32</a>
- y;
- // Y-position of light, in world coordinates
- <br> <a href="#Data.Types">bit32</a>
- z;
- // Z-position of light, in world coordinates
- <br> <a href="#Data.Types">bitu16</a>
- Intensity1; // Light intensity
- <br> <a href="#Data.Types">bitu16</a>
- Intensity2; // Almost always equal to Intensity1 [absent
- from TR1 data files]
- <br> <a href="#Data.Types">bitu32</a>
- Fade1; // Falloff value
- 1
- <br> <a href="#Data.Types">bitu32</a>
- Fade2; // Falloff value
- 2 [absent from TR1 data files]
- <br> } <b>tr2_room_light</b>;</dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_vertex"></a><b>Room Vertex structure.</b>
- This defines the vertices within a room. Room lighting is internal vertex
- lighting, except for necessarily external sources like flares; room ambient
- lights and point sources are ignored. Tomb Raider 1 has only the first
- of the two light values and lacks the rendering attributes.</li>
- </ul>
-
- <dir>
- <dir>typedef struct {
- // 12 bytes [TR1: 8 bytes]
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Vertex;
- // where this vertex lies (relative to tr2_room_info::x/z)
- <br> <a href="#Data.Types">bit16</a> Lighting1;
- <br> <a href="#Data.Types">bitu16</a> Attributes;
- // A set of flags for special rendering effects [absent from TR1 data files]
- <br> // 0x8000 something to do with water surface
- <br>
- // 0x4000 under water lighting modulation and
- <br> // movement if viewed from above water surface
- <br>
- // 0x2000 water/quicksand surface movement
- <br>
- // 0x0010 "normal"
- <br> <a href="#Data.Types">bit16</a> Lighting2;
- // Almost always equal to Lighting1 [absent from TR1 data files]
- <br> } <b>tr2_vertex_room</b>;</dir>
- </dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_sprite"></a><b>Room Sprite structure.</b> This
- indicates a point in space (Room.Vertices[room_sprite.Vertex]) and a sprite
- to display there (.Texture is an index into the sprite texture list).</li>
- </ul>
-
- <dir>
- <dir>typedef struct { //
- 4 bytes
- <br> <a href="#Data.Types">bit16</a> Vertex;
- // offset into vertex list
- <br> <a href="#Data.Types">bit16</a> Texture;
- // offset into sprite texture list
- <br> } <b>tr2_room_sprite</b>;</dir>
- </dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_data"></a><b>Room Data structure.</b> This
- is the geometry of the "room," including walls, floors, rocks, water, etc.
- It does <i><u>not</u></i> include objects that Lara can interact with (keyboxes,
- moveable blocks, moveable doors, etc.) The surfaces specified here are
- rendered surfaces. <b>NOTE</b> that this is not a "real" C/C++ structure,
- in that the arrays are sized by the NumXXX elements that precede them.</li>
- </ul>
-
- <dir>
- <dir>typedef struct {
- // (variable length)
- <br> <a href="#Data.Types">bit16</a> NumVertices;
- // number of vertices in the following list
- <br> <a href="#struct.tr2_room_vertex">tr2_vertex_room</a>
- Vertices[NumVertices]; // list of vertices (relative coordinates)
- <br> <a href="#Data.Types">bit16</a> NumRectangles;
- // number of textured rectangles
- <br> <a href="#struct.tr2_face4">tr2_face4</a> Rectangles[NumRectangles];
- // list of textured rectangles
- <br> <a href="#Data.Types">bit16</a> NumTriangles;
- // number of textured triangles
- <br> <a href="#struct.tr2_face3">tr2_face3</a> Triangles[NumTriangles];
- // list of textured triangles
- <br> <a href="#Data.Types">bit16</a> NumSprites;
- // number of sprites
- <br> <a href="#struct.tr2_room_sprite">tr2_room_sprite</a>
- Sprites[NumSprites]; // list of sprites
- <br> } <b>tr2_room_data</b>;</dir>
- </dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room_staticmesh"></a><b>Room Static Mesh structure.</b>
- Positions and IDs of static meshes (e.g. skeletons, spiderwebs, furniture,
- trees). This is comparable to the <a href="#struct_tr2_item">tr2_item</a>
- structure, except that static meshes typically have no animations and are
- confined to a single room.</li>
- </ul>
-
- <dir>
- <dir>typedef struct { // 20 bytes
- <font color="#800000">[TR1: 18 bytes]</font>
- <br> <a href="#Data.Types">bitu32</a> x;
- // absolute X position in world coordinates
- <br> <a href="#Data.Types">bitu32</a> y;
- // absolute Y position in world coordinates
- <br> <a href="#Data.Types">bitu32</a> z;
- // absolute Z position in world coordinates
- <br> <a href="#Data.Types">bitu16</a> Rotation;
- // high two bits (0xC000) indicate steps of
- <br> // 90 degrees (e.g. (Rotation >> 14) * 90)
- <br> <a href="#Data.Types">bitu16</a> Intensity1; //
- Constant lighting; -1 means use mesh lighting
- <br> <a href="#Data.Types">bitu16</a> Intensity2; //
- Like Intensity 1, and almost always the same value [absent from TR1 data
- files]
- <br> <a href="#Data.Types">bitu16</a> ObjectID;
- // which StaticMesh item to draw
- <br> } <b>tr2_room_staticmesh</b>;</dir>
- </dir>
-
- <ul>
- <li>
- <a NAME="struct_tr2_room"></a><b>Room structure.</b> Here's where
- all the room data come together. As it's stored in the file, the
- <a href="#struct.tr2_room_info">tr2_room_info</a>
- structure comes first, followed by a <a href="#Data_Types">bitu32</a> NumDataWords,
- which specifies the number of 16-bit words to follow. Those data
- words must be parsed in order to interpret and construct the variable-length
- arrays of vertices, meshes, doors, and sectors. <b>NOTE</b> that
- this is not a "real" C/C++ structure, in that the arrays are sized by the
- NumXXX elements that precede them.</li>
- </ul>
-
- <blockquote>typedef struct {
- // (variable length)
- <br> <a href="#struct.tr2_room_info">tr2_room_info</a>
- info;
- // where the room exists, in world coordinates
- <br> <a href="#Data.Types">bitu32</a> NumDataWords;
- // number of data words (bitu16s)
- <br> <a href="#Data.Types">bitu16</a> Data[NumDataWords];
- // the raw data from which the rest of
- <br> // this is derived
- <br> <a href="#struct.tr2_room_data">tr2_room_data</a>
- RoomData;
- // the room mesh
- <br> <a href="#Data.Types">bitu16</a> NumPortals;
- // number of visibility portals to other rooms
- <br> <a href="#struct.tr2_room_portal">tr2_room_portal</a>
- Portals[NumPortals]; // list of visibility portals
- <br> <a href="#Data.Types">bitu16</a> NumZsectors;
- // "width" of sector list
- <br> <a href="#Data.Types">bitu16</a> NumXsectors;
- // "height" of sector list
- <br> <a href="#struct.tr2_room_sector">tr2_room_sector</a>
- SectorList[NumXsectors * NumZsectors]; // list of sectors
- <br> // in this room
- <br> <a href="#Data.Types">bit16</a> AmbientIntensity1;
- // This and the next one only affect
- <br> // externally-lit objects
- <br> <a href="#Data.Types">bit16</a> AmbientIntensity2;
- // Almost always the same value as AmbientIntensity1 [absent from TR1 data
- files]
- <br> <a href="#Data.Types">bit16</a> LightMode;
- // (present only in TR2: 0 is normal, 1 is
- <br> // flickering(?), 2 and 3 are uncertain)
- <br> <a href="#Data.Types">bitu16</a> NumLights;
- // number of point lights in this room
- <br> <a href="#struct.tr2_room_light">tr2_room_light</a>
- Lights[NumLights]; // list of point lights
- <br> <a href="#Data.Types">bitu16</a> NumStaticMeshes;
- // number of static meshes
- <br> <a href="#struct.tr2_room_staticmesh">tr2_room_staticmesh</a>
- StaticMeshes[NumStaticMeshes]; // list of static meshes
- <br> <a href="#Data.Types">bit16</a> AlternateRoom;
- // number of the room that this room can alternate
- <br> // with (e.g. empty/filled with water is implemented as an empty room
- that alternates with a full room)
- <br> <a href="#Data.Types">bit16</a> Flags;
- // flag bits: 0x0001 - room is filled with water,
- <br> // 0x0020 - Lara's ponytail gets blown
- <br> // by the wind;
- <br> // <font color="#FF0000">TR1 has only the water flag and the extra</font>
- <br> // <font color="#FF0000">unknown flag 0x0100.</font>
- <br> // <font color="#008000">TR3 most likely has flags for "is raining",
- "is snowing", "water is cold", and "is</font>
- <br> // <font color="#008000">filled by quicksand", among others.</font>
- <br> <a href="#struct.tr2_colour">tr2_colour</a><font color="#008000">
- RoomLightColour; // Present in TR3 only; absent from TR1/TR2.</font>
- <br> } <b>tr2_room</b>;</blockquote>
-
- <hr>
- <center>
- <p><a NAME="FloorData"></a><b><u><font size=+1>III. FloorData</font></u></b></center>
-
- <p>The <b>FloorData</b> defines special sector attributes such as floor
- and ceiling slopes, collisional portals to other rooms, climbability of
- walls, and all the various types of triggering. It is referenced by the
- sectors as an array of 16-bit unsigned integers, e.g. the current sector
- is calculated as (((CurrentX - tr2_room_info.x) / 1024) * tr2_room.NumZsectors)
- + ((CurrentZ - tr2_room_info.z) / 1024), which is then used as an offset
- into tr2_room:: SectorList[]; tr2_room_sector::FDindex is an offset into
- the FloorData[] array.
- <p>The FloorData consists of opcodes and operands. Opcodes are 16
- bits, as follows:
- <br> <b>Function</b>:
- bits 0..7 (0x00FF)
- <br> <b>SubFunction</b>:
- bits 8..14 (0x7F00)
- <br> <b>EndData</b>:
- bit 15 (0x8000)
- <br>If <i>EndData</i> is set, there are no more opcodes (after the current
- one) in this section of FloorData; otherwise, the next opcode in
- FloorData should be interpreted after the current one.
- <p>Some functions reference an <b>FDlist</b>, which is a separate list
- of opcodes and operands that immediately follows the current FloorData
- opcode. FDlist opcodes and operands are different from the base FloorData
- opcodes and operands:
- <br> <b>FDfunction: </b>bits
- 10-13 (0x3C00)
- <br> <b>Operands: </b>bits
- 0-9 (0x03FF) vary, depending on FDfunction
- <br> <b>FDcontinue: </b>bit
- 15 (0x8000)
- <p>Several of the functions indicate adjustments to the sector's floor
- and ceiling heights; these are specified by adjusting the corner heights.
- The corners will be denoted as 00, 01, 10, and 11; the first is the corner's
- X coordinate and the second is the corner's Z coordinate, with both given
- as multiples of 1024.
- <p><font color="#008000">When parsing functions for TR3, use only the lower
- 5 bits to find the function value, because some of TR3's functions use
- the upper 3 bits of the lower byte as part of the operand. However, this
- will also work correctly in TR1 and TR2.</font>
- <p><b><u><font size=+1>FloorData Functions are described below.</font></u></b>
- <br> Function 0x01: <b>Portal Sector</b>
- <br> SubFunction 0x00: Room Portal:
- the next FloorData element (the operand) is the number of the room that
- this sector is a collisional portal to.
- <br> An entity that arrives in
- a sector with this function present will gets its room membership changed
- to this function's operand, without any change in position.
- <p> Function 0x02: <b>Floor Slant</b>
- <br> SubFunction 0x00: Floor
- Slant: The next FloorData element contains the slant values for the floor
- of this sector. Slant values are specified in increments of 256 units.
- The high byte (bit8) is the Z slope, while the low byte (bit8) is the X
- slope. If the X slope is greater than zero, then its value is added to
- the floor heights of corners 00 and 01. If it is less than zero, then its
- value is subtracted from the floor heights of corners 10 and 11. If the
- Z slope is greater than zero, then its value is added to the floor heights
- of corners 00 and 10. If it is less than zero, then its value is subtracted
- from the floor heights of corners 01 and 11.
- <p> Function 0x03: <b>Ceiling Slant</b>
- <br> SubFunction 0x00: Ceiling
- Slant: The next FloorData element contains the slant values for the ceiling
- of this sector. Slant values are specified in increments of 256 units.
- The high byte (bit8) is the Z slope, while the low byte (bit8) is the X
- slope. If the X slope is greater than zero, then its value is subtracted
- from the ceiling heights of corners 10 and 11. If it is less than zero,
- then its value is added to the ceiling heights of corners 00 and 01. If
- the Z slope is greater than zero, then its value is subtracted from the
- ceiling heights of corners 00 and 10. If it is less than zero, then its
- value is added to the ceiling heights of corners 01 and 11.
- <p> Function 0x04: <b>Trigger</b> items, switch cameras,
- end the level and much more.
- <br>As used below, "run FDlist(activate or deactivate)" means go through
- each element in FDlist and perform its function ("run FDlist+1" just means
- start at FDlist[1] rather than FDlist[0]). Activate/deactivate is
- only used for the activate/deactivate item function.
- <br>There are two states for each item, active/inactive (the meaning depends
- on the item, e.g. a tiger must be active to be seen, if a door is active
- it is open, if it is inactive it is closed, etc.) and on/off (keyholes
- and switches).
- <br>The <b>bitu16</b> immediately following the 0x04 FloorData opcode contains
- flags; the bits at 0x3e00 are the Activation Mask (which is XORed with
- any appropriate item flags), the bit at 0x0100 indicates "state change
- occurs only once". A good example of activation-mask use is the multiple-switch
- room of "Palace Midas" in TR1.
- <br> SubFunction 0x00: Run FDlist(activate)
- <br> SubFunction 0x01: If Lara
- is on the ground, run FDlist(activate)
- <br> SubFunction 0x02: If item
- at FDlist[0] is on, run FDlist+1(activate), else run FDlist+1(deactivate)
- <br> SubFunction 0x03: If item
- at FDlist[0] is on, run FDlist+1(activate)
- <br> SubFunction 0x04: If item
- at FDlist[0] is picked up, run FDlist+1(activate)
- <br> SubFunction 0x05: If item
- at FDlist[0] is in this sector, run FDlist+1(activate), else run FDlist+1(deactivate)
- <br> SubFunction 0x06: If Lara
- is on the ground, run FDlist(deactivate)
- <br> SubFunction 0x07: unknown
- <br> SubFunction 0x08: If Lara
- is not on the ground, run FDlist(activate)
- <br>
- (mainly used for activating collision detection with such objects as footbridges)
- <br> SubFunction 0x09: Run FDlist(deactivate)
- <p> Function 0x05: <b>Kills Lara</b>
- <br> Any SubFunction: If Lara
- is on the ground, it kills Lara with fire.
- <p> Function 0x06: <b>Climbable Walls</b>
- <br> This subfunction indicates
- climbability of walls; its value is the bitwise OR of the values associated
- with all the climbable-wall directions (0x01 ::= +Z, 0x02 ::= +X, 0x04
- ::= -Z, 0x08 ::= -X), e.g. SubFunction 0x09 indicates that the walls on
- both the +Z and -X sides of this sector are climbable.
- <p><font color="#008000"> Functions 0x07
- to 0x12: (only in TR3) These specify the floor and ceiling slopes, which
- are more complicated here, since these functions specify dividing up the
- floors and ceilings into triangles along either of the two diagonals. Also,
- one of the triangles may be a collisional portal to the room above (if
- in the ceiling) or to the room below (if in the floor). The function word
- must be parsed as follows:</font>
- <p><font color="#008000">Bit 15: Continuation bit</font>
- <br><font color="#008000">Bits 10-14: value t01</font>
- <br><font color="#008000">Bits 5-9: value t00</font>
- <br><font color="#008000">Bits 0-4 function value</font>
- <p><font color="#008000">where t00 and t01 are signed.</font>
- <p><font color="#008000">It is followed by one operand, to be parsed as
- follows:</font>
- <p><font color="#008000">Bits 12-15: value t13</font>
- <br><font color="#008000">Bits 8-11: value t12</font>
- <br><font color="#008000">Bits 4-7: value t11</font>
- <br><font color="#008000">Bits 0-3: value t10</font>
- <p><font color="#008000">where t10, t11, t12, and t13 are unsigned.</font>
- <p><font color="#008000">Here are the triangulations and vertex adjustments;
- for some of the functions, one of the triangles is a portal to another
- room:</font>
- <p><font color="#008000">Functions 0x07, 0x0b, 0x0c:</font>
- <p><font color="#008000">Triangle 1: 00-01-10 (function 0x0b: is a portal)</font>
- <br><font color="#008000">Triangle 2: 11-10-01 (function 0x0c: is a portal)</font>
- <p><font color="#008000">Overall adjustment: adj = t00 + t01 + t10 + t12</font>
- <p><font color="#008000">Add these quantities to these vertex floor heights:</font>
- <p><font color="#008000">00: (adj - t11)</font>
- <br><font color="#008000">01: (adj - t12)</font>
- <br><font color="#008000">10: (adj - t10)</font>
- <br><font color="#008000">11: (adj - t13)</font>
- <p><font color="#008000">Functions 0x08, 0x0d, 0x0e:</font>
- <p><font color="#008000">Triangle 1: 01-11-00 (function 0x0d: is a portal)</font>
- <br><font color="#008000">Triangle 2: 10-00-11 (function 0x0e: is a portal)</font>
- <p><font color="#008000">Overall adjustment: adj = t00 + t01 + t11 + t13</font>
- <p><font color="#008000">Add these quantities to these vertex floor heights:</font>
- <p><font color="#008000">00: (adj - t11)</font>
- <br><font color="#008000">01: (adj - t12)</font>
- <br><font color="#008000">10: (adj - t10)</font>
- <br><font color="#008000">11: (adj - t13)</font>
- <p><font color="#008000">Functions 0x09, 0x0f, 0x10:</font>
- <p><font color="#008000">Triangle 1: 00-10-01 (function 0x0f: is a portal)</font>
- <br><font color="#008000">Triangle 2: 11-01-10 (function 0x10: is a portal)</font>
- <p><font color="#008000">Overall adjustment: adj = t10 + t12</font>
- <p><font color="#008000">Subtract these quantities from these vertex ceiling
- heights:</font>
- <p><font color="#008000">00: (adj - t12)</font>
- <br><font color="#008000">01: (adj - t11)</font>
- <br><font color="#008000">10: (adj - t13)</font>
- <br><font color="#008000">11: (adj - t10)</font>
- <p><font color="#008000">Functions 0x0a, 0x10, 0x11:</font>
- <p><font color="#008000">Triangle 1: 01-00-11 (function 0x11: is a portal)</font>
- <br><font color="#008000">Triangle 2: 10-11-00 (function 0x12: is a portal)</font>
- <p><font color="#008000">Overall adjustment: adj = t11 + t13</font>
- <p><font color="#008000">Subtract these quantities from these vertex ceiling
- heights:</font>
- <p><font color="#008000">00: (adj - t12)</font>
- <br><font color="#008000">01: (adj - t11)</font>
- <br><font color="#008000">10: (adj - t13)</font>
- <br><font color="#008000">11: (adj - t10)</font>
- <br>
- <p><font color="#008000"> Function 0x13:
- has subfunction 0x00 and no operand. Unknown, but is possibly monkey-swingability
- of the ceiling.</font>
- <br>
- <br>
- <p><b><u><font size=+1>FloorData FDlist functions are described below:</font></u></b>
- <br> FDfunction 0x00: <b>Activate or deactivate item</b>
- <br> Operand (bits 0..9): Item
- index
- <p> FDfunction 0x01: <b>Switch to camera</b> (also uses
- the bitu16 immediately following)
- <br> Operand (bits 0..6): Index
- in Cameras[]
- <br> The bitu16 immediately following <b>specifies delay and
- repeatability for switched camera</b>
- <br> Operand (bits 0..7 (0xff)):
- Camera Delay
- <br> Number
- of seconds to wait before automatically switching back to the normal camera.
- <br>
- 0x00 never switches back to the normal camera.
- <br> Operand (bit 8 (0x100)):
- If set, only switch to camera once; otherwise, switch to
- <br>camera every time
- <p> FDfunction 0x02: <b>Underwater Current</b>
- <br> Operand (bits 0..9 (0x3ff)):
- direction and intensity of flow
- <br>
- 0, 1, 2 -Z direction
- in decreasing intensity (0 is strongest)
- <br>
- 3, 4, 5 -X direction
- in decreasing intensity
- <br>
- 6, 7, 8 +Z direction
- in decreasing intensity
- <br>
- 9, 10, 11 +X direction in decreasing intensity
- <p> FDfunction 0x03:: <b>Set AlternateRoom Variable</b>
- <br> Operand (bit 0 (0x01)):
- AlternateRoom Flag value (0/1)
- <p> FDfunction 0x04: <b>Alter Room Flags</b> this
- affects (enhances/negates) roomflags (always paired with 0x05)
- <br> Operand: not sure, range
- 0 - 5
- <p> FDfunction 0x05: <b>Alter Room Flags</b> this affects
- (enhances/negates) roomflags (always paired with 0x04)
- <br> Operand: not sure, range
- 0 - 5
- <p> FDfunction 0x06: <b>Look at Item</b> (if a camera
- change is also desired, this should come first)
- <br> Operand (bits 0..9 (0x3ff)):
- Item index
- <p> FDfunction 0x07: <b>End Level</b>
- <p> FDfunction 0x08: <b>Play CD Track</b>
- <br> Operand (bits 0..9 (0x3ff)):
- CD track ID (<font color="#FF0000">TR1: Internal Sound Index</font>)
- <p> FDfunction 0x09: <b>Assault Course Clock Control</b>
- <br> Operand (bits 0..9 (0x3ff)):
- <br> 0x1c ::= clear clock
- <br> 0x1d ::= stop clock
- <br> 0x1e ::= clock reset and displayed
- <br> This opcode is also associated with switches; other values of its operand
- appear to indicate switch sounds.
- <p> FDfunction 0x0a: <b>Play "Found Secret" Sound</b>
- <br> Operand (bits 0..9 (0x3ff)):
- Which secret (0..NumSecrets-1)
- <p> FDfunction 0x0b: <b>Unknown</b>
- <p>While FloorData index 0 means the sector does not use floordata, there
- is still a "dummy" entry for index 0. This dummy entry doesn't contain
- any useful information.
- <p>
- <hr>
- <center>
- <p><a NAME="MeshGeometry"></a><b><u><font size=+1>IV. Mesh Geometry</font></u></b></center>
-
- <p><b>Overview: </b>Nearly all of the non-geographic visual elements in
- TR2 (as well as a few parts of the landscape) are specified as <b>meshes</b>.
- A <b>mesh</b> is simply a list of vertices and how they're arranged.
- The TR2 mesh structure includes a list of vertices as relative coordinates
- (which allows meshes to easily be placed anywhere in the world geometry),
- a list of normals (to indicate which side of each face is visible), and
- lists of Rectangles and Triangles, both Textured and Coloured. The
- elements of each <a href="#struct.tr2_face4">tr2_face4</a> or <a href="#struct.tr2_face3">tr2_face3</a>
- structure (Rectangles and Triangles) contain an offset into the Vertices[]
- array for the mesh. Other arrays (Moveables[], StaticMeshes[]) do not reference
- the array Meshes[] directly, but instead reference the array MeshPointers[],
- which points to locations inside of Meshes[], inside of which the meshes
- are stored in packed fashion.
- <p><b>Meshes:</b>
- <br> The sign of the number of normals specifies
- which sort of lighting to use. If the sign is positive, then external vertex
- lighting is used, with the lighting calculated from the room's ambient
- and point-source lighting values. The latter appears to use a simple Lambert
- law for directionality: intensity is proportional to max((normal direction).(direction
- to source), 0). If the sign is negative, then internal vertex lighting
- is used, using the data included with the mesh.<a NAME="struct_tr2_mesh"></a><b>NOTE</b>
- that this is not a "real" C/C++ structure, in that the arrays are sized
- by the NumXXX elements that precede them.
- <p>typedef struct {
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Centre;
- // This is usually close to the mesh's centroid, and appears to be the
- center of a sphere used for collision testing.
- <br> <a href="#Data.Types">bit32</a> CollisionSize; //
- This appears to be the radius of that aforementioned collisional sphere.
- <br> <a href="#Data.Types">bit16</a> NumVertices; //
- number of vertices in this mesh
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Vertices[NumVertices];
- // list of vertices (relative coordinates)
- <br> <a href="#Data.Types">bit16</a> NumNormals; // If
- positive, number of normals in this mesh.
- <br> // If negative, number of vertex lighting elements (* (-1))
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Normals[NumNormals];
- // list of normals (if NumNormals is positive)
- <br> <a href="#Data.Types">bit16</a> Lights[-NumNormals];
- // list of light values (if NumNormals is negative)
- <br> <a href="#Data.Types">bit16</a> NumTexturedRectangles;
- // number of textured rectangles in this mesh
- <br> <a href="#struct.tr2_face4">tr2_face4</a> TexturedRectangles[NumTexturedRectangles];
- // list of textured rectangles
- <br> <a href="#Data.Types">bit16</a> NumTexturedTriangles;
- // number of textured triangles in this mesh
- <br> <a href="#struct.tr2_face3">tr2_face3</a> TexturedTriangles[NumTexturedTriangles];
- // list of textured triangles
- <br> <a href="#Data.Types">bit16</a> NumColouredRectangles;
- // number of coloured rectangles in this mesh
- <br> <a href="#struct.tr2_face4">tr2_face4</a> ColouredRectangles[NumColouredRectangles];
- // list of coloured rectangles
- <br> <a href="#Data.Types">bit16</a> NumColouredTriangles;
- // number of coloured triangles in this mesh
- <br> <a href="#struct.tr2_face3">tr2_face3</a> ColouredTriangles[NumColouredTriangles];
- // list of coloured triangles
- <br> } <b>tr2_mesh</b>;
- <br>
- <br>
- <p><b>Static Meshes:</b>
- <p>/*
- <br> * StaticMesh structure. This defines meshes that don't move (e.g. skeletons
- <br> * lying on the floor, spiderwebs, trees, statues, etc.)
- <br> * StaticMeshes have two bounding boxes; it is not clear why they have more than
- <br> * one. One could be the visibililty box, and one could be the collisional
- <br> * box, for instance; the former being used for visibility testing, and the
- <br> * latter for collision testing.
- <br> */
- <br><a NAME="struct_tr2_staticmesh"></a>typedef struct { // 32 bytes
- <br> <a href="#Data.Types">bitu32</a> ObjectID; // Object
- Identifier (matched in Items[])
- <br> <a href="#Data.Types">bitu16</a> Mesh; // mesh (offset
- into MeshPointers[])
- <br> <a href="#Data_Types">tr2_vertex</a> BoundingBox[2][2];
- // First index is which one; second index is opposite corners
- <br> <a href="#Data_Types">bitu16</a> Flags; // Meaning
- uncertain; it is usually 2, and is 3 for objects Lara can travel through,
- <br> // like TR2's skeletons and underwater vegetation
- <br> } <b>tr2_staticmesh</b>;
- <br>
- <br>
- <p><b>Moveables:</b>
- <p>/*
- <br> * Moveable structure. This defines a list of contiguous meshes that
- <br> * comprise one object.
- <br> * This structure also points to the hierarchy and offsets of the meshes
- <br> * (MeshTree), and also to the animations used (Animation); these will be
- <br> * described in detail below. If the Animation index is -1, that means that
- <br> * the entity's animations are all generated by the engine; an example is
- <br> * Lara's ponytail. Some movables are really stationary, such as locks and
- <br> * the sky, and some are not rendered, such as "look at me" points to aim
- <br> * the camera at.
- <br> */
- <br><a NAME="struct_tr2_moveable"></a>typedef struct { // 18 bytes
- <br> <a href="#Data.Types">bitu32</a> ObjectID; // Item
- Identifier (matched in Items[])
- <br> <a href="#Data.Types">bitu16</a> NumMeshes; // number
- of meshes in this object
- <br> <a href="#Data.Types">bitu16</a> StartingMesh; //
- stating mesh (offset into MeshPointers[])
- <br> <a href="#Data.Types">bitu32</a> MeshTree; // offset
- into MeshTree[]
- <br> <a href="#Data.Types">bitu32</a> FrameOffset; //
- byte offset into Frames[] (divide by 2 for Frames[i])
- <br> <a href="#Data.Types">bitu16</a> Animation; // offset
- into Animations[]
- <br> } <b>tr2_moveable</b>;
- <br>
- <br>
- <p><b>Items:</b> Items are instances of objects, which can be sprite sequences
- or movables. For an object to appear in a level, it must be referenced
- in the Items[] array. Multiple instances are possible (e.g. two identical
- tigers in different rooms are represented using two entries in Items[],
- one for each). The object ID is used to locate the appropriate sprite sequence
- or movable for the item.
- <p><a NAME="struct_tr2_item"></a>typedef struct {
- // 24 bytes [TR1: 22 bytes]
- <br> <a href="#Data.Types">bit16</a> ObjectID; // Object
- Identifier (matched in Moveables[], or SpriteSequences[], as appropriate)
- <br> <a href="#Data.Types">bit16</a> Room; // which room
- contains this item
- <br> <a href="#Data.Types">bit32</a> x; // item position
- in world coordinates
- <br> <a href="#Data.Types">bit32</a> y;
- <br> <a href="#Data.Types">bit32</a> z;
- <br> <a href="#Data.Types">bit16</a> Angle; // ((0xc000
- >> 14) * 90) degrees
- <br> <a href="#Data.Types">bit16</a> Intensity1; // (constant
- lighting; -1 means use mesh lighting)
- <br> <a href="#Data.Types">bit16</a> Intensity2; // Like
- Intensity1, and almost always with the same value. [absent from TR1 data
- files]
- <br> <a href="#Data.Types">bitu16</a> Flags; // 0x0100
- indicates "initially invisible", 0x3e00 is Activation Mask
- <br> // 0x3e00 indicates "open" or "activated";
- these can be XORed with
- <br> // related FloorData::FDlist fields (e.g. for switches)
- <br> } <b>tr2_item</b>;
- <p><b>Sprites:</b>
- <p>These are "billboard" objects that are always rendered perpendicular
- to the view direction. These are used for text and explosion effects and
- similar things; they are also used for some scenery objects and pickup
- items, though this use gets less as one goes from TR1 to TR3. The various
- "Sides" below are the positions of the sprite sides relative to the sprite's
- overall position, measured in TR's world-coordinate units.
- <p><a NAME="struct_tr2_sprite_texture"></a>typedef struct { // 16 bytes
- <br> <a href="#Data.Types">bitu16</a> Tile;
- <br> <a href="#Data.Types">bitu8</a> x;
- <br> <a href="#Data.Types">bitu8</a> y;
- <br> <a href="#Data.Types">bitu16</a> Width;
- // actually (Width * 256) + 255
- <br> <a href="#Data.Types">bitu16</a> Height;
- // actually (Height * 256) + 255
- <br> <a href="#Data.Types">bit16</a> LeftSide;
- <br> <a href="#Data.Types">bit16</a> TopSide;
- <br> <a href="#Data.Types">bit16</a> RightSide;
- <br> <a href="#Data.Types">bit16</a> BottomSide;
- <br> } <b>tr2_sprite_texture</b>;
- <br>
- <br>
- <p><b>Sprite Sequences:</b>
- <br>These are collections of sprites that are referred to as a group. The
- members of this group can be cycled through (animated sprites such as flames)
- or selected in other ways (text). Some sequences have only one member;
- this is done so as to access all the sprites in the same way.
- <p><a NAME="struct_tr2_sprite_sequence"></a>typedef struct { // 8 bytes
- <br> <a href="#Data.Types">bit32</a> ObjectID; // Item
- identifier (matched in Items[])
- <br> <a href="#Data.Types">bit16</a> NegativeLength;
- // negative of "how many sprites are in this sequence"
- <br> <a href="#Data.Types">bit16</a> Offset; // where
- (in sprite texture list) this sequence starts
- <br> } <b>tr2_sprite_sequence</b>;
- <p>
- <hr>
- <center>
- <p><a NAME="MeshConstructionAndAnimation"></a><b><u><font size=+1>V. Mesh
- Construction and Animation</font></u></b></center>
-
- <p><b>Overview:</b>
- <br>The animated mesh objects in the Tomb Raider series are sets of meshes
- that are moved relative to each other, as defined by Moveables[] entries.
- Each entry describes which meshes to be used (a contiguous set of them
- referred to in MeshPointers[]), what hierarchy and relative offsets they
- have (contents of MeshTree[] pointed to), and what animations are to be
- used (contents of Animations[] pointed to).
- <p>The hierarchy used is a branching one, with the meshes being at the
- nodes, and with the first mesh being the root node. The MeshTree[] values,
- called "Bone2" in some documentation, are applied to each of the child
- meshes in sequence; they are sets of four <a href="#Data.Types">bit32</a>'s, the first being a hierarchy
- operator, and the remaining three being the coordinates in the parent mesh's
- system. A hierarchy example is that for the Lara meshes:
- <pre>Hips
- Left thigh
- Left shin
- Left foot
- Right thigh
- Right shin
- Right foot
- Torso
- Left inner arm
- Left outer arm
- Left hand
- Right inner arm
- Right outer arm
- Right hand
- Head
- (Ponytail is a separate object)</pre>
- This is implemented by using a stack of meshes and "push" and "pop" operations
- in MeshTree[]. Normally, each mesh's parent is the previous mesh in series.
- But such meshes can be "remembered" by adding them to a stack of meshes
- with a "push" operation. This remembered mesh can then be used as the parent
- mesh with a "pop" operation. It is not clear what the maximum stack depth
- is; most TR mesh stacks do not extend beyond 2 or 3 meshes.
- <p>The animations for each mesh object are selected with some ingenious
- techniques. Which animations to use are not hardcoded; instead, each entity
- has some states it can be in, and these states are used to select which
- animation. For example, locks have only one state (they just sit there),
- doors have two states (open and closed), and Lara has numerous states,
- such as standing, walking, running, jumping, falling, being hurt, dying,
- etc. Each animation has a state ID, which can be used to select it; however,
- state transitions might seem to require a large number of intermediate
- states (opening, closing, starting to jump, landing, etc.). The alternative
- used in the Tomb Raider engine is for each animation to have bridge animations
- to other states' animations, which are selected using the ID of which state
- to change to. These bridge animations then lead to the animation with the
- appropriate state. Thus, a closed door will run a looped closed-door animation
- as long as its state stays "closed", but when its state becomes "open",
- it will change to an opening-door bridge animation, which will end in a
- looped open-door animation. Likewise, closing a door will make it use a
- closing-door bridge animation. Some bridge animations are chosen with a
- finer grain of selectivity, however, such as using one for left foot forward
- and one for right foot forward.
- <p>Thus, each animation references a set of StateChange structures (called
- simply a "structure" in some documentation), each one of which references
- an AnimDispatch structure (called a "range" in some documentation). Each
- StateChange structure contains a new state and which AnimDispatch structures
- to use. When an entity goes into a new state, the StateChange structures
- are scanned for that state's ID, and if one matches, then that StateChange's
- AnimDispatches are then scanned for a range of frames that contains the
- ID of the current frame. If such an AnimDispatch is found, the animation
- and the frame are changed to those listed in it.
- <p>The ultimate unit of animation is, of course, the frame, and each frame
- consists of a bounding box, the offset of the root mesh, and rotation angles
- for all the meshes with respect to their parent meshes. The root mesh is
- also rotated, but relative to the object's overall coordinates. All rotations
- are performed around the meshes' origins, and are in order Y, X, Z (yaw,
- pitch, roll). The reason for the root mesh's displacement is because entities
- traveling on solid surfaces are likely tracked by having their locations
- be at ground level, and Lara's hips, for example, are well above the ground.
- Finally, some of the angles are not specified explicitly, when they are
- not, they are zero.
- <p>Frames are referenced in two ways, either by an offset into the Frames[]
- array that contains them, or by frame index. The values of the latter appear
- to be unique to each kind of entity, but not between entities; the first
- frame for each kind is numbered 0. This is likely a convenience when constructing
- the animations, since the list of animation frames for each entity can
- be constructed separately. However, using these indices is fairly simple.
- Each Animation structure has a first-frame index; this index is subtracted
- from the index of the desired frame in order to find out its index relative
- to the animation's first frame.
- <p>There are also some special AnimCommands (called "Bone1" in some documentation)
- for doing various additional things. Some of them are for setting reference
- points; these may either be 3D ones, for example for grab locations, or
- 2D ones, for jumps from surface. Some others define actions per frame,
- like playing sounds, emitting bubbles, and so forth.
- <p>Finally, some entities appear to have very incomplete animations; their
- complete animations are "borrowed" from similar entities. One example of
- this is the various goons in TR2's Venice levels -- some of them have a
- full set of animations, while some others have only the standing animation.
- The ones with only the standing animation borrow their other animations
- from the fully-animated ones.
- <p><b>Data Structures:</b>
- <p>/*
- <br> * MeshTree structure
- <br> *
- <br> * MeshTree[] is actually groups of four bit32s. The first one is a
- <br> * "flags" word;
- <br> * bit 1 (0x0002) indicates "put the parent mesh on the mesh stack";
- <br> * bit 0 (0x0001) indicates "take the top mesh off of the mesh stack and
- use as the parent mesh"
- <br> * when set, otherwise "use the previous mesh are
- the parent mesh".
- <br> * When both are present, the bit-0 operation is always done before the
- bit-1 operation; in effect, read the stack but do not change it.
- <br> * The next three bit32s are X, Y, Z offsets of the mesh's origin from
- the parent mesh's origin.
- <br> */
- <br><a NAME="struct_tr2_meshtree"></a>typedef struct { // 4 bytes
- <br> <a href="#Data.Types">bit32</a> Coord;
- <br> } <b>tr2_meshtree</b>;
- <br>
- <p>/*
- <br> * Animation structure.
- <br> * This describes each individual animation; these may be looped by specifying
- <br> * the next animation to be itself. In TR2 and TR3, one must be careful when
- <br> * parsing frames using the FrameSize value as the size of each frame, since
- <br> * an animation's frame range may extend into the next animation's frame range,
- <br> * and that may have a different FrameSize value.
- <br> */
- <br><a NAME="struct_tr2_animation"></a>typedef struct { // 32 bytes
- <br> <a href="#Data.Types">bitu32</a> FrameOffset; //
- byte offset into Frames[] (divide by 2 for Frames[i])
- <br> <a href="#Data.Types">bitu8</a> FrameRate;
- // Engine ticks per frame
- <br> <a href="#Data.Types">bitu8</a> FrameSize; // number
- of bit16's in Frames[] used by this animation
- <br> <a href="#Data.Types">bitu16</a> StateID;
- <br> <a href="#Data.Types">bitu8</a> Unknown2[8];
- <br> <a href="#Data.Types">bitu16</a> FrameStart; //
- first frame in this animation
- <br> <a href="#Data.Types">bitu16</a> FrameEnd; // last
- frame in this animation (numframes = (End - Start) + 1)
- <br> <a href="#Data.Types">bitu16</a> NextAnimation;
- <br> <a href="#Data.Types">bitu16</a> NextFrame;
- <br> <a href="#Data.Types">bitu16</a> NumStateChanges;
- <br> <a href="#Data.Types">bitu16</a> StateChangeOffset;
- // offset into StateChanges[]
- <br> <a href="#Data.Types">bitu16</a> NumAnimCommands;
- // How many of them to use.
- <br> <a href="#Data.Types">bitu16</a> AnimCommand; //
- offset into AnimCommand[]
- <br> } <b>tr2_animation</b>;
- <p>/*
- <br> * State Change structure
- <br> * Each one contains the state to change to and which animation dispatches
- <br> * to use; there may be more than one, with each separate one covering a different
- <br> * range of frames.
- <br> */
- <br><a NAME="struct_tr2_state_change"></a>typedef struct { // 6 bytes
- <br> <a href="#Data.Types">bitu16</a> StateID;
- <br> <a href="#Data.Types">bitu16</a> NumAnimDispatches;
- // number of ranges (seems to always be 1..5)
- <br> <a href="#Data.Types">bitu16</a> AnimDispatch; //
- Offset into AnimDispatches[]
- <br> } <b>tr2_state_change</b>;
- <p>/*
- <br> * Animation Dispatch structure
- <br> * This specifies the next animation and frame to use; these are associated
- <br> * with some range of frames. This makes possible such specificity as one
- <br> * animation for left foot forward and another animation for right foot forward.
- <br> */
- <br><a NAME="struct_tr2_range"></a>typedef struct { // 8 bytes
- <br> <a href="#Data.Types">bit16</a> Low;
- // Lowest frame that uses this range
- <br> <a href="#Data.Types">bit16</a> High;
- // Highest frame (+1?) that uses this range
- <br> <a href="#Data.Types">bit16</a> NextAnimation;
- // Animation to dispatch to
- <br> <a href="#Data.Types">bit16</a> NextFrame;
- // Frame offset to dispatch to
- <br> } <b>tr2_anim_dispatch</b>;
- <p>/*
- <br> * AnimCommand structure
- <br> * These are various commands associated with each animation; they are
- <br> * called "Bone1" in some documentation. They are varying numbers of bit16's
- <br> * packed into an array; the first of each set is the opcode, which determines
- <br> * how operand bit16's follow it. Some of them refer to the whole animation
- <br> * (jump and grab points, etc.), while others of them are associated with
- <br> * specific frames (sound, bubbles, etc.).
- <br> */
- <br><a NAME="struct_tr2_anim_command"></a>typedef struct { // 2 bytes
- <br> <a href="#Data.Types">bit16</a> Value;
- <br> } <b>tr2_anim_command</b>;
- <p>Here are all the AnimCommand opcodes and their operands:
- <br>// 1: 3 operands. Position reference: (x,y,z); found in grab and block-move
- animations
- <br>// 2: 2 operands. Position reference on surface for jumping: (x,z)
- for horizontal and (y,z) for vertical surfaces(?)
- <br>// 3: No operands. Not clear; occurs in animations that are "slaved"
- to other animations, such as Lara throwing switches or moving blocks.
- <br>// 4: No operands. Not clear; occurs in some death and settling-down
- animations, but not all.
- <br>// 5: 2 operands. The first one is a frame number, and the second one
- is the ID of the sound to play at that frame (internal sound index).
- <br>In TR2 and TR3, one of the sound indices two highest bits may be set;
- when they are, their meanings are
- <p>0x4000 -- play this sound when on dry land (example: footsteps)
- <br>0x8000 -- play this sound when in water (example: running through shallow
- water)
- <p>// 6: 2 operands. The first one is a frame number, and the second one
- is some miscellaneous action.
- <br>// 0: Occurs in flipping-over animations; freeze
- camera at current position until end of animation?
- <br>// 3: Make bubble
- <br>// 12: Temporarily stop responding to controls?
- <br>// etc.
- <br>14 and 15: Some kind of camera control?
- <br>18: ?
- <br>19: ?
- <br>20: Lara changing clothes (using a different Lara model)
- <br>21: ?
- <br>22: ?
- <br>23: Hide object
- <br>24: Show object
- <br>26: Some kind of camera control?
- <br>TR3 has additional ones, such as
- <br>-32736 = 0x8000 + 32
- <br>32
- <br>16416 = 0x4000 + 32
- <br>
- <p>/*
- <br> * Frame structure.
- <br> *
- <br> * Frames indicate how composite meshes are positioned and rotated.
- They work
- <br> * in conjunction with Animations[] and MeshTree[]. A given frame has
- the following
- <br> * format:
- <br> * bit16 BB1x, BB1y, BB1z // bounding box (low)
- <br> * bit16 BB2x, BB2y, BB2z // bounding box (high)
- <br> * bit16 OffsetX, OffsetY, OffsetZ // starting offset for this moveable
- <br> * (<font color="#FF0000">TR1 ONLY: bit16 NumValues // number of angle
- sets to follow; these start with the first mesh, and meshes without angles
- get zero angles.</font>)
- <br> * (TR2/3: NumValues is implicitly NumMeshes (from moveable))
- <br> * What follows next is a list of angle sets. In TR2/3, an angle set
- can
- <br> * specify either one or three axes of rotation. If either of the high
- two
- <br> * bits (0xc000) of the first angle bitu16 are set, it's one axis: only
- one
- <br> * bitu16, low 10 bits (0x03ff), scale is 0x100 ::= 90 degrees; the
- high two
- <br> * bits are interpreted as follows: 0x4000 ::= X only, 0x8000 ::= Y
- only,
- <br> * 0xC000 ::= Z only.
- <br> * If neither of the high bits are set, it's a three-axis rotation.
- The next
- <br> * 10 bits (0x3ff0) are the X rotation, the next 10 (including the following
- <br> * bitu16) (0x000f, 0xfc00) are the Y rotation, the next 10 (0x03ff)
- are the
- <br> * Z rotation, same scale as before (0x100 ::= 90 degrees).
- <br> * Rotations are performed in Y, X, Z order.
- <br> * <font color="#FF0000">TR1 ONLY: All angle sets are two words and
- interpreted like the two-word</font>
- <br> * <font color="#FF0000">sets in TR2/3, EXCEPT that the word order is
- reversed</font>.
- <br> */
- <p>
- <hr>
- <br>
- <br>
- <br>
- <br>
- <br>
- <center>
- <p><a NAME="NonPlayerCharacterBehaviour"></a><b><u><font size=+1>VI. Non-Player
- Character Behaviour</font></u></b></center>
-
- <p><b>Overview:</b>
- <br>All the Tomb Raider game physics and entity behavior appears to be
- hardcoded, with each type ID being associated with some specific sort of
- behavior (as Lara, as a boat, as a tiger, as a door, as a boulder, as a
- lock, etc.). There is no sign of the sorts of schemes used by some other
- game engines for specifying this behavior in data files. One scheme is
- to use generic characters, generic projectiles, and so forth, and to specialize
- them by reading in appropriate records from data files. Another scheme is to use interpreted pseudocode; this
- is used by id's Quake. This hardcoding makes it difficult to port the earlier
- Tomb Raider scenarios to the engines of the later games, which could be
- desirable with their improved 3D-card and sound-card support. While textures,
- models, and animations can be ported, behavior cannot be.
- <p>However, there is a hint that TR3 may have some such information. Some
- of its characters are hostile in some levels, and not in others (the India-level
- monkeys, the Antarctica-level flamethrower wielders); there may be some
- flag in Items[] that determines whether a character is hostile or not.
- But the hostile and non-hostile versions of these characters may have separate
- type ID's.
- <p>Despite that lack, the Tomb Raider series does have navigation hints
- for the Non-Player Characters; those entities that move freely across the
- maps under the command of the game AI. One of the NPC's is the camera,
- since only Lara (and the vehicles she rides) is under the direct control
- of the player; the game AI makes the camera follow Lara. The camera uses
- the navigation hints used by the flying NPC's; these can be constructed
- so as to help the camera out of tight spots.
- <p>The navigation hints are three data structures: boxes, overlaps, and
- zones. Most sectors point to some box, the main exceptions being horizontal-portal
- sectors. Several neighbring sectors may point to the same box. A box is
- a horizontal rectangle, with corners and height specified; each box also
- has a pointer into the list of overlaps. Each segment in that list is the
- list of accessible neighboring boxes for some box; the NPC's apparently
- select from this list to decide where to go next. This selection is done
- with the help of the zones. These structures of <font color="#FF0000">6 (TR1)</font>
- or 10 (TR2, TR3)
- <a href="#Data.Types">bit16</a>'s that act as zone ID's; their overall indexing is the same as the
- boxes, meaning that each box will have an associated set of zone ID's.
- An NPC will select one of this set to use, and will prefer to go into the
- overlaps-list boxes that have the same zone value as the box it is currently
- in. For example, one can create guard paths by making chains of zone-ID-sharing
- boxes, with their overlaps pointing to the next boxes in those chains.
- <p><b>Data Structures:</b>
- <p><b>Boxes:</b>
- <p><a NAME="struct_tr2_box"></a>typedef struct { // 8 bytes [TR1: 20 bytes]
- <font color="#FF0000">In
- TR1, the first four are bit32's instead of bitu8's, and are not scaled.</font>
- <br> <a href="#Data.Types">bitu8</a> Zmin;
- // sectors (* 1024 units)
- <br> <a href="#Data.Types">bitu8</a> Zmax;
- <br> <a href="#Data.Types">bitu8</a> Xmin;
- <br> <a href="#Data.Types">bitu8</a> Xmax;
- <br> <a href="#Data.Types">bit16</a> TrueFloor; // Y
- value (no scaling)
- <br> <a href="#Data.Types">bit16</a> OverlapIndex; //
- index into Overlaps[]. The high bit is sometimes set; this
- <br> // occurs in front of swinging doors and the like.
- <br> } <b>tr2_box</b>;
- <p><b>Overlaps:</b>
- <p>This is a set of lists of neighboring boxes for each box, each member
- being a bitu16; the highest bit being set marks the end of each list. NPC's
- apparently use this list to decide where to go next.
- <p><b>Zones:</b>
- <p>This is a set of bit16's, <font color="#FF0000">6 for TR1</font> and
- 10 for TR2 and TR3. NPCs prefer to travel to a box with the same zone ID
- as the one they are currently at. Which of these zone ID's it uses depends
- on the kind of the NPC and its current state. The first half of the Zones
- structure is for the "normal" room state, and the second half is for the
- "alternate" room state. TR1, for example, has 2 sets of ground zones and
- 1 set of fly zones; its zones are
- <p>ground zone 1 (normal)
- <br>ground zone 2 (normal)
- <br>fly zone (normal)
- <br>ground zone 1 (alternate)
- <br>ground zone 2 (alternate)
- <br>fly zone (alternate)
- <p>The ground zones are for NPC's that travel on the ground, while the
- fly zones are for flying or swimming NPC's. TR2 and TR3 have similar breakdowns,
- though they have 4 ground zones.
- <br>
- <p>
- <hr>
- <center>
- <p><a NAME="Sound"></a><b><u><font size=+1>VII. Sound</font></u></b></center>
-
- <p><b>Overview:</b>
- <br>The Tomb Raider series makes abundant use of sound, which appears in
- a variety of contexts. Sounds can be either continuous or triggered. Continuous
- ones can be for the whole level or produced by some sound-source object.
- The whole-level sound is a CD-track sound, which is played continuously,
- thus the blowing-wind sounds in the underground parts of "The Great Wall".
- Sound-source objects make sound in a range around some specific point.
- Likewise, triggered ones can be triggered by a variety of events. The triggering
- can be hardcoded in the engine (gunshots, switch pulls) or by reaching
- some animation frame (footsteps, Lara's somewhat unladylike sounds). Switch
- pulls and/or door sounds may be specified with operand of FDFunction 0x09;
- operand values lower than those used for assault-course clock control may
- specify which sounds to use.
- <p>Though CD-track sounds are referred to by track index, game-data sounds
- are referred to by an internal sound index; this is translated into which
- sound sample with the help of three layers of indexing, to allow for a
- suitable degree of abstraction. Internal sound indices for various sounds
- appear to be consistent across all the level files in a game; a gunshot
- or a passport opening in one level file will have the same internal sound
- index as in all the others. The highest level of these is the SoundMap[]
- array, which translates the internal sound index into an index into SoundDetails[].
- Each SoundDetails record contains such details as the sound intensity,
- how many samples to select from, and an index into SampleIndices[]. This
- allows for selecting among multiple samples to produce variety; that index
- is the index to the SampleIndices[] value of first of these, with the rest
- of them being having the next indices in series of that array. Thus, if
- the number of samples is 4, then the TR engine looks in SampleIndices[]
- locations Index, Index+1, Index+2, and Index+3. Finally, the SampleIndices[]
- array references some arrays of sound samples. In TR1, these samples are
- embedded in the level files, and SampleIndices[] contains the displacements
- of each one in bytes from the beginning of that embedded block. In TR2
- and TR3, these samples are concatenated in the file "MAIN.SFX" with no
- additional information; SampleIndices[] contains sequence numbers (0, 1,
- 2, 3, ...) in MAIN.SFX. Finally , the samples themselves are all in Microsoft
- WAVE format.
- <p>The CD-audio tracks are stored in different fashions in the various
- versions of the TR series. <font color="#008000">In the PC version of TR3, they are all stored
- in the file CDAUDIO.WAD, which has the format (source: Sven, BachmannS@gmx.net,
- http://wotsit.org/cgi-bin/download.cgi?tr3audio): a series of header records
- with this format:
- <pre>{ // 0x108 bytes
- bit32 SampleLength; // how many bytes
- bit32 SampleOffset; // offset in file
- bit8 Name[256]; // C string; the length is a guess, because Sven's sizes are inconsistent.
- };</pre>
- followed by embedded samples in the Microsoft WAVE format.</font>
- <p>In the Macintosh versions of TR1 and TR2, the CD audio tracks are separate
- files in AIFF format, while in the Macintosh version of TR3, these tracks
- are separate files in Microsoft WAVE format. The Macintosh version of TR3
- contains an additional file, CDAudio.db, which contains the names of all
- the track files as 32-byte zero-padded C strings with no extra contents.
- <p><b>Data Structures:</b>
- <p>/*
- <br> * SoundSource structure
- <br> * This structure contains the details of continuous-sound sources. Although
- <br> * a SoundSource object has a position, it has no room membership; the sound
- <br> * seems to propagate omnidirectionally for about 10 horizontal-grid sizes
- <br> * without regard for the presence of walls.
- <br> */
- <br><a NAME="struct_tr2_sound_source"></a>typedef struct {
- <br> <a href="#Data.Types">bit32</a> x;
- // absolute X position of sound source (world coordinates)
- <br> <a href="#Data.Types">bit32</a> y;
- // absolute Y position of sound source (world coordinates)
- <br> <a href="#Data.Types">bit32</a> z;
- // absolute Z position of sound source (world coordinates)
- <br> <a href="#Data.Types">bitu16</a> SoundID; // internal
- sound index
- <br> <a href="#Data.Types">bitu16</a> Flags; // 0x40,
- 0x80, or 0xc0
- <br> } <b>tr2_sound_source</b>;
- <p>SoundMap is for mapping from internal-sound index to SoundDetails index;
- it is 370 bit16s in TR2 and TR3 and <font color="#FF0000">256 bit16s in
- TR1</font>. A value of -1 indicates "none".
- <p>/*
- <br> * Sound-sample details (SoundDetails)
- <br> */
- <br><a NAME="struct_tr2_sound_details"></a>typedef struct { // 8 bytes
- <br> <a href="#Data.Types">bit16</a> Sample; // (index
- into SampleIndices)
- <br> <a href="#Data.Types">bit16</a> Volume;
- <br> <a href="#Data.Types">bit16</a> Unknown1; // sound
- range? (distance at which this sound can be heard?)
- <br> <a href="#Data.Types">bit16</a> Unknown2; // Bits
- 8-15: priority?, Bits 2-7: number of sound
- <br> // samples in this group, Bits 0-1: channel number?
- <br> } <b>tr2_sound_details</b>;
- <p><b>SampleIndices:</b> <font color="#FF0000">In TR1, this is a list of
- indices into the embedded sound-samples object, which precedes this object
- in the level file.</font> In TR2 and TR3, this is a list of indices into
- the file "MAIN.SFX"; the indices are the index numbers of that file's embedded
- sound samples, rather than the samples' starting locations. That file itself
- is a set of concatenated soundfiles with no catalogue info present. In
- all the TR series, the sound format used is Microsoft WAVE (.wav).
- <br>
- <p>
- <hr>
- <center>
- <p><a NAME="Miscellany"></a><b><u><font size=+1>VIII. Miscellany</font></u></b></center>
- <p><b><u>These are various odds and ends that do not fit into
- the earlier categories.</u></b>
- <p><a NAME="Miscellany_Version"></a><b>Version:</b> Every level file (.PHD,
- .TUB, .TR2) begins with a <a href="#Data_Types">bitu32</a> version number.
- This seems to be used by the engine to guarantee compatibility between
- various level editor versions and the game engine version. More generally,
- it can be used to determine what sort of level is being read. Here
- are the known (observed) values for the version header:
- <p> 0x00000020
- Tomb Raider 1, Gold, Unfinished Business
- <br> 0x0000002d
- Tomb Raider 2
- <br> 0xFF080038
- Tomb Raider 3
- <br> 0xFF180038
- Tomb Raider 3
- <p><b>Palette:</b> This consists of 256 <a href="#Data_Types">tr2_colour</a>
- structs, one for each palette entry. However, the individual colour values
- range from 0 to 63; they must be multiplied by 4 to get the correct values.
- <p>This used for all 8-bit colour, such as 8-bit textures.
- <p><b>Object Textures:</b>
- <p>/*
- <br> * Object-texture vertex structure. It specifies a vertex location in
- textile coordinates.
- <br> * The Xpixel and Ypixel are the actual coordinates of the vertex's pixel.
- <br> * The Xcoordinate and Ycoordinate values depend on where the other vertices
- <br> * are in the object texture. And if the object texture is used to specify
- <br> * a triangle, then the fourth vertex's values will all be zero.
- <br> */
- <br><a NAME="struct_tr2_object_texture_vert"></a>typedef struct { // 4
- bytes
- <br> <a href="#Data.Types">bitu8</a> Xcoordinate; //
- 1 if Xpixel is the low value, 255 if Xpixel is the high value in the object
- texture
- <br> <a href="#Data.Types">bitu8</a> Xpixel;
- <br> <a href="#Data.Types">bitu8</a> Ycoordinate; //
- 1 if Ypixel is the low value, 255 if Ypixel is the high value in the object
- texture
- <br> <a href="#Data.Types">bitu8</a> Ypixel;
- <br> } <b>tr2_object_texture_vert</b>;
- <p>/*
- <br> * Object texture structure.
- <br> * These, thee contents of ObjectTextures[], are used for specifying texture
- <br> * mapping for the world geometry and for mesh objects.
- <br> */
- <br><a NAME="struct_tr2_object_texture"></a>typedef struct { // 20 bytes
- <br> <a href="#Data.Types">bitu16</a> Attribute;
- // 0 means that a texture is all-opaque, and that transparency
- <br> // information is ignored.
- <br> // 1 means that transparency information is used. In 8-bit colour,
- <br> // index 0 is the transparent colour, while in 16-bit colour, the
- <br> // top bit (0x8000) is the alpha channel (1 = opaque, 0 = transparent).
- <br> // <font color="#008000">2 (only in TR3) means that the opacity (alpha)
- is equal to the intensity;</font>
- <br> // <font color="#008000">the brighter the colour, the more opaque it
- is. The intensity is probably calculated
- <br> // as the maximum of the individual
- color values.</font>
- <br> <a href="#Data.Types">bitu16</a> Tile; // index
- into textile list
- <br> <a href="#struct.tr2_object_texture_vert">tr2_object_texture_vert</a>
- Vertices[4]; // the four corners of the texture
- <br> } <b>tr2_object_texture</b>;
- <p><b>Animated Textures:</b>
- <p><a NAME="struct_tr2_animated_texture"></a>Animated textures describe
- sets of object textures that are cycled through to produce texture animations;
- they are a set of bit16's with the following format (not a "real" C/C++
- structure):
- <p><a href="#Data_Types">bit16</a> NumAnimatedTextures
- <br>struct {
- <br> <a href="#Data_Types">bit16</a> NumTextureIDs; // Actually, this is
- the number of texture ID's - 1.
- <br> <a href="#Data_Types">bit16</a> TextureIDs[NumTextureIDs + 1]; // offsets
- into ObjectTextures[], in animation order.
- <br> } AnimatedTextures[NumAnimatedTextures];
- <p>If a texture belongs to an animated-texture group, it will automatically
- be animated by the engine. The animation framerate is most likely hardcoded.
- <br>
- <p><b>Cameras:</b>
- <br>These are positions to switch the camera to; the camera gets switched
- to one of these as specified in the floordata, which also specify what
- to look at, how long to switch, and whether to do so only once.
- <p><a NAME="struct_tr2_camera"></a>typedef struct {
- <br> <a href="#Data.Types">bit32</a> x;
- <br> <a href="#Data.Types">bit32</a> y;
- <br> <a href="#Data.Types">bit32</a> z;
- <br> <a href="#Data.Types">bit16</a> Room;
- <br> <a href="#Data.Types">bitu16</a> Unknown1; // correlates
- to Boxes[]? Zones[]?
- <br> } <b>tr2_camera</b>;
- <br>
- <br>
- <p><b>Cinematic Frames:</b>
- <br>These are camera positionings for cutscenes. All the entity animations
- are specified separately, and it is not clear where there is any syncing
- between these frames and any of the animations.
- <p><a NAME="struct_tr2_cinematic_frame"></a>typedef struct {
- <br> <a href="#Data.Types">bit16</a> rotY;
- // rotation about Y axis, +/- 32767 == +/- 180 degrees
- <br> <a href="#Data.Types">bit16</a> rotZ;
- // rotation about Z axis, +/- 32767 == +/- 180 degrees
- <br> <a href="#Data.Types">bit16</a> rotZ2; //
- seems to work a lot like rotZ; I haven't yet been able to
- <br>
- // differentiate them
- <br> <a href="#Data.Types">bit16</a> posZ;
- // camera position relative to something (target? Lara? room
- <br>
- // origin?). pos* are _not_ in world coordinates.
- <br> <a href="#Data.Types">bit16</a> posY;
- // camera position relative to something (see posZ)
- <br> <a href="#Data.Types">bit16</a> posX;
- // camera position relative to something (see posZ)
- <br> <a href="#Data.Types">bit16</a> unknown; // changing
- this can cause a runtime error
- <br> <a href="#Data.Types">bit16</a> rotX;
- // rotation about X axis, +/- 32767 == +/- 180 degrees
- <br> } <b>tr2_cinematic_frame</b>;
- <br>
- <p><b>LightMap:</b>
- <br>A 32*256 array of <a href="#Data.Types">bitu8</a>'s which is apparently for applying light to
- 8-bit colour, in some documentation called "ColourMap". The current palette
- index and lighting value are used to calcuate an index to this table, which
- is a table of palette indices.
- <p>The Tomb Raider series' software rendering, like that of most real-time-3D
- games, uses 8-bit colour for speed and low bulk; however, there is the
- serious problem of how to do lighting with 8-bit colour, because doing
- it directly is computationally expensive. The usual solution is to arrange
- the palettes' colours in ramps, which the engine then follows in the appropriate
- directions. However, the TR series' palettes generally lack such neat ramps.
- <p>But the TR series has a more general solution, one that does not require
- palettes to have colour ramps. It uses precalculated lighting tables, the
- "ColourMap" objects. These contain translations of a colour value and a
- lighting value, listed by palette index. The translation goes as follows:
- <p>n = ColourMap[256 * k + i];
- <p>where i is the original palette index, k is determined from the lighting
- value, and n is the new palette index. The lighting index k varies from
- 0 to 31, and the corresponding lighting value is, <font color="#FF0000">for TR1,
- <p>2 - k / 16</font>
- <p>and for TR2 and TR3,
- <p>2 - (k + 1) / 16
- <p>This may be associated with the curious fact of the lighting values
- in the data files increasing in the "wrong" direction in TR1 and TR2, with
- 0 being full brightness and greater values being darker.
- <br>
- <p>
- <hr>
- <center>
- <p><a NAME="EntireTR2level"></a><b><u><font size=+1>IX. The Entire TR2
- Level Format</font></u></b></center>
-
- <p><a NAME="EntireLevelFormat_TR2"></a>
- <br>What follows is the physical .TR2 file layout, byte for byte. Note
- that this is not a "real" C/C++ structure, in that some arrays are variable-length,
- with the length being defined by another element of the structure.
- <p><a href="#Data.Types">bitu32</a> Version; // version (4 bytes)
- <br><a href="#struct.tr2_colour">tr2_colour</a> Palette[256]; // 8-bit
- palette (768 bytes)
- <br><a href="#struct_tr2_colour">tr2_colour4</a> Palette16[256]; //
- (1024 bytes)
- <br><a href="#Data.Types">bitu32</a> NumTextiles; // number of texture
- tiles (4 bytes)
- <br><a href="#struct.tr2_textile8">tr2_textile8</a> Textile8[NumTextiles];
- // 8-bit (palettized) textiles (NumTextiles * 65536 bytes)
- <br><a href="#struct.tr2_textile16">tr2_textile16</a> Textile16[NumTextiles];
- // 16-bit (ARGB) textiles (NumTextiles * 131072 bytes)
- <br><a href="#Data.Types">bitu32</a> Unused; // 32-bit unused value (4
- bytes)
- <br><a href="#Data.Types">bitu16</a> NumRooms; // number of rooms (2 bytes)
- <br>struct {
- <br> <a href="#struct.tr2_room_info">tr2_room_info</a>
- RoomInfo; // room header (16 bytes)
- <br> <a href="#Data.Types">bitu32</a> NumData; // number
- of data bitu16's to follow (=RoomData) (4 bytes)
- <br> struct {
- <br> <a href="#Data.Types">bitu16</a>
- NumVertices; // number of vertices to follow (2 bytes)
- <br> <a href="#struct.tr2_room_vertex">tr2_vertex_room</a>
- Vertices[NumVertices]; // vertex list (NumVertices * 12 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumRectangles; // number of rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a>
- Rectangles[NumRectangles]; // rectangle list (NumRectangles * 10 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumTriangles; // number of triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a>
- Triangles[NumTriangles]; // triangle list (NumTriangles * 8 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumSprites; // number of sprites to follow (2 bytes)
- <br> <a href="#struct.tr2_room_sprite">tr2_room_sprite</a>
- Sprites[NumSprites]; // room sprite list (NumSprites * 4 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumDoors; // number of doors to follow (2 bytes)
- <br> <a href="#struct.tr2_room_door">tr2_room_door</a>
- Doors[NumDoors]; // door list (NumDoors * 32 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumZsector; // sector table width (2 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumXsector; // sector table height (2 bytes)
- <br> <a href="#struct.tr2_room_sector">tr2_room_sector</a>
- SectorData[NumZsector * NumXsector]; // sector table (NumZsector * NumXsector
- * 8 bytes)
- <br> <a href="#Data.Types">bit16</a>
- Intensity1;
- <br> <a href="#Data.Types">bit16</a>
- Intensity2;
- <br> <a href="#Data.Types">bit16</a>
- LightMode;
- <br> <a href="#Data.Types">bitu16</a>
- NumLights; // number of lights to follow (2 bytes)
- <br> <a href="#struct.tr2_room_light">tr2_room_light</a>
- Lights[NumLights]; // light list (NumLights * 24 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumStaticMeshes; // number of static mesh records to follow (2 bytes)
- <br> <a href="#struct.struct_tr2_room_staticmesh">tr2_room_staticmesh</a>
- StaticMeshes[NumStaticMeshes]; // static mesh data (NumStaticMeshes * 20
- bytes)
- <br> <a href="#Data.Types">bit16</a>
- AlternateRoom; // (2 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- Flags; // (2 bytes)
- <br> } RoomData;
- <br> } Rooms[NumRooms];
- <br><a href="#Data.Types">bitu32</a> NumFloorData; // number of floor data
- bitu16's to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> FloorData[NumFloorData]; // floor
- data (NumFloorData * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMeshData; // number of bitu16's
- of mesh data to follow (=Meshes[]) (4 bytes)
- <br>struct {
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Centre;
- // relative coordinates of mesh centre (6 bytes)
- <br> <a href="#Data.Types">bitu8</a> Unknown1[4]; //
- unknown (4 bytes)
- <br> <a href="#Data.Types">bit16</a> NumVertices; //
- number of vertices to follow (2 bytes)
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Vertices[NumVertices];
- // list of vertices (NumVertices * 6 bytes)
- <br> <a href="#Data.Types">bit16</a> NumNormals; // number
- of normals to follow (2 bytes)
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Normals[NumNormals];
- // list of normals (NumNormals * 6 bytes) (becomes Lights if NumNormals
- < 0; 2 bytes)
- <br> <a href="#Data.Types">bit16</a> NumTexturedRectangles;
- // number of textured rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a> TexturedRectangles[NumTexturedRectangles];
- // list of textured rectangles (NumTexturedRectangles * 10 bytes)
- <br> <a href="#Data.Types">bit16</a> NumTexturedTriangles;
- // number of textured triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a> TexturedTriangles[NumTexturedTriangles];
- // list of textured triangles (NumTexturedTriangles * 8 bytes)
- <br> <a href="#Data.Types">bit16</a> NumColouredRectangles;
- // number of coloured rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a> ColouredRectangles[NumColouredRectangles];
- // list of coloured rectangles (NumColouredRectangles * 10 bytes)
- <br> <a href="#Data.Types">bit16</a> NumColouredTriangles;
- // number of coloured triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a> ColouredTriangles[NumColouredTriangles];
- // list of coloured triangles (NumColouredTriangles * 8 bytes)
- <br> } Meshes[NumMeshPointers]; // note that NumMeshPointers
- comes <u>AFTER</u> Meshes[]
- <br><a href="#Data.Types">bitu32</a> NumMeshPointers; // number of mesh
- pointers to follow (4 bytes)
- <br><a href="#Data.Types">bitu32</a> MeshPointers[NumMeshPointers]; //
- mesh pointer list (NumMeshPointers * 4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimations; // number of animations
- to follow (4 bytes)
- <br><a href="#struct.tr2_animation">tr2_animation</a> Animations[NumAnimations];
- // animation list (NumAnimations * 32 bytes)
- <br><a href="#Data.Types">bitu32</a> NumStateChanges; // number of state
- changes to follow (4 bytes)
- <br><a href="#struct.tr2_state_change">tr2_state_change</a> StateChanges[NumStateChanges];
- // state-change list (NumStructures * 6 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimDispatches; // number of animation
- dispatches to follow (4 bytes)
- <br><a href="#struct.tr2_anim_dispatch">tr2_anim_dispatch</a> AnimDispatches[NumAnimDispatches];
- // animation-dispatch list list (NumAnimDispatches * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimCommands; // number of animation
- commands to follow (4 bytes)
- <br><a href="#struct.tr2_anim_command">tr2_anim_command</a> AnimCommands[NumAnimCommands];
- // animation-command list (NumAnimCommands * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMeshTrees; // number of MeshTrees
- to follow (4 bytes)
- <br><a href="#struct.tr2_meshtree">tr2_meshtree</a> MeshTrees[NumMeshTrees];
- // MeshTree list (NumMeshTrees * 4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumFrames; // number of words of frame
- data to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> Frames[NumFrames]; // frame data (NumFrames
- * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMoveables; // number of moveables
- to follow (4 bytes)
- <br><a href="#struct.tr2_moveable">tr2_moveable</a> Moveables[NumMoveables];
- // moveable list (NumMoveables * 18 bytes)
- <br><a href="#Data.Types">bitu32</a> NumStaticMeshes; // number of StaticMesh
- data records to follow (4 bytes)
- <br><a href="#struct_tr2_staticmesh">tr2_staticmesh</a> StaticMeshes[NumStaticMeshes];
- // StaticMesh data (NumStaticMesh * 32 bytes)
- <br><a href="#Data.Types">bitu32</a> NumObjectTextures; // number of object
- textures to follow (4 bytes)
- <br><a href="#struct.tr2_object_texture">tr2_object_texture</a> ObjectTextures[NumObjectTextures];
- // object texture list (NumObjectTextures * 20 bytes) (after AnimatedTextures
- in TR3)
- <br><a href="#Data.Types">bitu32</a> NumSpriteTextures; // number of sprite
- textures to follow (4 bytes)
- <br><a href="#struct.tr2_sprite_texture">tr2_sprite_texture</a> SpriteTextures[NumSpriteTextures];
- // sprite texture list (NumSpriteTextures * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSpriteSequences; // number of sprite
- sequences records to follow (4 bytes)
- <br><a href="#struct.tr2_sprite_sequence">tr2_sprite_sequence</a> SpriteSequences[NumSpriteSequences];
- // sprite sequence data (NumSpriteSequences * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumCameras; // number of camera data
- records to follow (4 bytes)
- <br><a href="#struct.tr2_camera">tr2_camera</a> Cameras[NumCameras]; //
- camera data (NumCameras * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSoundSources; // number of sound
- source data records to follow (4 bytes)
- <br><a href="#struct.tr2_sound_source">tr2_sound_source</a> SoundSources[NumSoundSources];
- // sound source data (NumSoundSources * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumBoxes; // number of box data records
- to follow (4 bytes)
- <br><a href="#struct.tr2_box">tr2_box</a> Boxes[NumBoxes]; // box data
- (NumBoxes * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumOverlaps; // number of overlap
- records to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> Overlaps[NumOverlaps]; // overlap
- data (NumOverlaps * 2 bytes)
- <br><a href="#Data.Types">10*bit16</a> Zones[NumBoxes]; // zone data (NumBoxes
- * 20 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimatedTextures; // number of
- animated texture records to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> AnimatedTextures[NumAnimatedTextures];
- // animated texture data (NumAnimatedTextures * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumItems; // number of items to follow
- (4 bytes)
- <br><a href="#struct.tr2_item">tr2_item</a> Items[NumItems]; // item list
- (NumItems * 24 bytes)
- <br><a href="#Data.Types">bitu8</a> LightMap[32 * 256]; // light map (8192
- bytes)
- <br><a href="#Data.Types">bitu16</a> NumCinematicFrames; // number of cinematic
- frame records to follow (2 bytes)
- <br><a href="#struct.tr2_cinematic_frame">tr2_cinematic_frame</a> CinematicFrames[NumCinematicFrames];
- // (NumCinematicFrames * 16 bytes)
- <br><a href="#Data.Types">bitu16</a> NumDemoData; // number of demo data
- records to follow (2 bytes)
- <br><a href="#Data.Types">bitu8</a> DemoData[NumDemoData]; // demo data
- (NumDemoData bytes)
- <br><a href="#Data.Types">bit16</a> SoundMap[370]; // sound map (740 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSoundDetails; // number of sound-detail
- records to follow (4 bytes)
- <br><a href="#struct.tr2_sound_details">tr2_sample_info</a> SoundDetails[NumSoundDetails];
- // sound-detail list (NumSoundDetails * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSampleIndices; // number of sample
- indices to follow (4 bytes)
- <br><a href="#Data.Types">bitu32</a> SampleIndices[NumSampleIndices]; //
- sample indices (NumSampleIndices * 4 bytes)
- <p>
- <hr>
- <center>
- <p><a NAME="EntireTR2level"></a><b><u><font size=+1>The Entire TR1 Level
- Format</font></u></b></center>
-
- <p><a NAME="EntireLevelFormat_TR2"></a>
- <br>What follows is the physical .PHD file layout, byte for byte. Note
- that this is not a "real" C/C++ structure, in that some arrays are variable-length,
- with the length being defined by another element of the structure.
- <p><a href="#Data.Types">bitu32</a> Version; // version (4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumTextiles; // number of texture
- tiles (4 bytes)
- <br><a href="#struct.tr2_textile8">tr2_textile8</a> Textile8[NumTextiles];
- // 8-bit (palettized) textiles (NumTextiles * 65536 bytes)
- <br><a href="#Data.Types">bitu32</a> Unused; // 32-bit unused value (4
- bytes)
- <br><a href="#Data.Types">bitu16</a> NumRooms; // number of rooms (2 bytes)
- <br>struct {
- <br> <a href="#struct.tr2_room_info">tr2_room_info</a>
- RoomInfo; // room header (16 bytes)
- <br> <a href="#Data.Types">bitu32</a> NumData; // number
- of data bitu16's to follow (=RoomData) (4 bytes)
- <br> struct {
- <br> <a href="#Data.Types">bitu16</a>
- NumVertices; // number of vertices to follow (2 bytes)
- <br> <a href="#struct.tr2_room_vertex">tr2_vertex_room</a>
- Vertices[NumVertices]; // vertex list (NumVertices * 8 bytes [TR1 version])
- <br> <a href="#Data.Types">bitu16</a>
- NumRectangles; // number of rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a>
- Rectangles[NumRectangles]; // rectangle list (NumRectangles * 10 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumTriangles; // number of triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a>
- Triangles[NumTriangles]; // triangle list (NumTriangles * 8 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumSprites; // number of sprites to follow (2 bytes)
- <br> <a href="#struct.tr2_room_sprite">tr2_room_sprite</a>
- Sprites[NumSprites]; // room sprite list (NumSprites * 4 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumDoors; // number of doors to follow (2 bytes)
- <br> <a href="#struct.tr2_room_door">tr2_room_door</a>
- Doors[NumDoors]; // door list (NumDoors * 32 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumZsector; // sector table width (2 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumXsector; // sector table height (2 bytes)
- <br> <a href="#struct.tr2_room_sector">tr2_room_sector</a>
- SectorData[NumZsector * NumXsector]; // sector table (NumZsector * NumXsector
- * 8 bytes)
- <br> <a href="#Data.Types">bit16</a>
- Intensity1;
- <br> <a href="#Data.Types">bitu16</a>
- NumLights; // number of lights to follow (2 bytes)
- <br> <a href="#struct.tr2_room_light">tr2_room_light</a>
- Lights[NumLights]; // light list (NumLights * 18 bytes [TR1 version])
- <br> <a href="#Data.Types">bitu16</a>
- NumStaticMeshes; // number of static mesh records to follow (2 bytes)
- <br> <a href="#struct.struct_tr2_room_staticmesh">tr2_room_staticmesh</a>
- StaticMeshes[NumStaticMeshes]; // static mesh data (NumStaticMeshes * 18
- bytes [TR1 version])
- <br> <a href="#Data.Types">bit16</a>
- AlternateRoom; // (2 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- Flags; // (2 bytes)
- <br> } RoomData;
- <br> } Rooms[NumRooms];
- <br><a href="#Data.Types">bitu32</a> NumFloorData; // number of floor data
- bitu16's to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> FloorData[NumFloorData]; // floor
- data (NumFloorData * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMeshData; // number of bitu16's
- of mesh data to follow (=Meshes[]) (4 bytes)
- <br>struct {
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Centre;
- // relative coordinates of mesh centre (6 bytes)
- <br> <a href="#Data.Types">bitu8</a> Unknown1[4]; //
- unknown (4 bytes)
- <br> <a href="#Data.Types">bit16</a> NumVertices; //
- number of vertices to follow (2 bytes)
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Vertices[NumVertices];
- // list of vertices (NumVertices * 6 bytes)
- <br> <a href="#Data.Types">bit16</a> NumNormals; // number
- of normals to follow (2 bytes)
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Normals[NumNormals];
- // list of normals (NumNormals * 6 bytes) (becomes Lights if NumNormals
- < 0; 2 bytes)
- <br> <a href="#Data.Types">bit16</a> NumTexturedRectangles;
- // number of textured rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a> TexturedRectangles[NumTexturedRectangles];
- // list of textured rectangles (NumTexturedRectangles * 10 bytes)
- <br> <a href="#Data.Types">bit16</a> NumTexturedTriangles;
- // number of textured triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a> TexturedTriangles[NumTexturedTriangles];
- // list of textured triangles (NumTexturedTriangles * 8 bytes)
- <br> <a href="#Data.Types">bit16</a> NumColouredRectangles;
- // number of coloured rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a> ColouredRectangles[NumColouredRectangles];
- // list of coloured rectangles (NumColouredRectangles * 10 bytes)
- <br> <a href="#Data.Types">bit16</a> NumColouredTriangles;
- // number of coloured triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a> ColouredTriangles[NumColouredTriangles];
- // list of coloured triangles (NumColouredTriangles * 8 bytes)
- <br> } Meshes[NumMeshPointers]; // note that NumMeshPointers
- comes <u>AFTER</u> Meshes[]
- <br><a href="#Data.Types">bitu32</a> NumMeshPointers; // number of mesh
- pointers to follow (4 bytes)
- <br><a href="#Data.Types">bitu32</a> MeshPointers[NumMeshPointers]; //
- mesh pointer list (NumMeshPointers * 4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimations; // number of animations
- to follow (4 bytes)
- <br><a href="#struct.tr2_animation">tr2_animation</a> Animations[NumAnimations];
- // animation list (NumAnimations * 32 bytes)
- <br><a href="#Data.Types">bitu32</a> NumStateChanges; // number of state
- changes to follow (4 bytes)
- <br><a href="#struct.tr2_state_change">tr2_state_change</a> StateChanges[NumStateChanges];
- // state-change list (NumStructures * 6 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimDispatches; // number of animation
- dispatches to follow (4 bytes)
- <br><a href="#struct.tr2_anim_dispatch">tr2_anim_dispatch</a> AnimDispatches[NumAnimDispatches];
- // animation-dispatch list list (NumAnimDispatches * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimCommands; // number of animation
- commands to follow (4 bytes)
- <br><a href="#struct.tr2_anim_command">tr2_anim_command</a> AnimCommands[NumAnimCommands];
- // animation-command list (NumAnimCommands * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMeshTrees; // number of MeshTrees
- to follow (4 bytes)
- <br><a href="#struct.tr2_meshtree">tr2_meshtree</a> MeshTrees[NumMeshTrees];
- // MeshTree list (NumMeshTrees * 4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumFrames; // number of words of frame
- data to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> Frames[NumFrames]; // frame data (NumFrames
- * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMoveables; // number of moveables
- to follow (4 bytes)
- <br><a href="#struct.tr2_moveable">tr2_moveable</a> Moveables[NumMoveables];
- // moveable list (NumMoveables * 18 bytes)
- <br><a href="#Data.Types">bitu32</a> NumStaticMeshes; // number of StaticMesh
- data records to follow (4 bytes)
- <br><a href="#struct_tr2_staticmesh">tr2_staticmesh</a> StaticMeshes[NumStaticMeshes];
- // StaticMesh data (NumStaticMesh * 32 bytes)
- <br><a href="#Data.Types">bitu32</a> NumObjectTextures; // number of object
- textures to follow (4 bytes) (after AnimatedTextures in TR3)
- <br><a href="#struct.tr2_object_texture">tr2_object_texture</a> ObjectTextures[NumObjectTextures];
- // object texture list (NumObjectTextures * 20 bytes) (after AnimatedTextures
- in TR3)
- <br><a href="#Data.Types">bitu32</a> NumSpriteTextures; // number of sprite
- textures to follow (4 bytes)
- <br><a href="#struct.tr2_sprite_texture">tr2_sprite_texture</a> SpriteTextures[NumSpriteTextures];
- // sprite texture list (NumSpriteTextures * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSpriteSequences; // number of sprite
- sequences records to follow (4 bytes)
- <br><a href="#struct.tr2_sprite_sequence">tr2_sprite_sequence</a> SpriteSequences[NumSpriteSequences];
- // sprite sequence data (NumSpriteSequences * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumCameras; // number of camera data
- records to follow (4 bytes)
- <br><a href="#struct.tr2_camera">tr2_camera</a> Cameras[NumCameras]; //
- camera data (NumCameras * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSoundSources; // number of sound
- source data records to follow (4 bytes)
- <br><a href="#struct.tr2_sound_source">tr2_sound_source</a> SoundSources[NumSoundSources];
- // sound source data (NumSoundSources * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumBoxes; // number of box data records
- to follow (4 bytes)
- <br><a href="#struct.tr2_box">tr2_box</a> Boxes[NumBoxes]; // box data
- (NumBoxes * 20 bytes [TR1 version])
- <br><a href="#Data.Types">bitu32</a> NumOverlaps; // number of overlap
- records to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> Overlaps[NumOverlaps]; // overlap
- data (NumOverlaps * 2 bytes)
- <br><a href="#Data.Types">6*bit16</a> Zones[NumBoxes]; // zone data (NumBoxes
- * 12 bytes [TR1 version])
- <br><a href="#Data.Types">bitu32</a> NumAnimatedTextures; // number of
- animated texture records to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> AnimatedTextures[NumAnimatedTextures];
- // animated texture data (NumAnimatedTextures * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumItems; // number of items to follow
- (4 bytes)
- <br><a href="#struct.tr2_item">tr2_item</a> Items[NumItems]; // item list
- (NumItems * 22 bytes [TR1 version])
- <br><a href="#Data.Types">bitu8</a> LightMap[32 * 256]; // light map (8192
- bytes)
- <br><a href="#struct.tr2_colour">tr2_colour</a> Palette[256]; // 8-bit
- palette (768 bytes)
- <br><a href="#Data.Types">bitu16</a> NumCinematicFrames; // number of cinematic
- frame records to follow (2 bytes)
- <br><a href="#struct.tr2_cinematic_frame">tr2_cinematic_frame</a> CinematicFrames[NumCinematicFrames];
- // (NumCinematicFrames * 16 bytes)
- <br><a href="#Data.Types">bitu16</a> NumDemoData; // number of demo data
- records to follow (2 bytes)
- <br><a href="#Data.Types">bitu8</a> DemoData[NumDemoData]; // demo data
- (NumDemoData bytes)
- <br><a href="#Data.Types">bit16</a> SoundMap[256]; // sound map (512 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSoundDetails; // number of sound-detail
- records to follow (4 bytes)
- <br><a href="#struct.tr2_sound_details">tr2_sample_info</a> SoundDetails[NumSoundDetails];
- // sound-detail list (NumSoundDetails * 8 bytes)
- <br><a href="#Data_Types">bitu32</a> NumSamples (number of bitu8's in Samples)
- <br><a href="#Data_Types">bitu8</a> Samples (array of bitu8's -- embedded
- sound samples in Microsoft WAVE format)
- <br><a href="#Data.Types">bitu32</a> NumSampleIndices; // number of sample
- indices to follow (4 bytes)
- <br><a href="#Data.Types">bitu32</a> SampleIndices[NumSampleIndices]; //
- sample indices (NumSampleIndices * 4 bytes)
- <p>
- <hr>
- <center>
- <p><a NAME="EntireTR3level"></a><b><u><font size=+1>The Entire TR3 Level
- Format</font></u></b></center>
-
- <p><a NAME="EntireLevelFormat_TR2"></a>
- <br>What follows is the physical Tomb Raider III .TR2 file layout, byte for byte. Note
- that this is not a "real" C/C++ structure, in that some arrays are variable-length,
- with the length being defined by another element of the structure.
- <p><a href="#Data.Types">bitu32</a> Version; // version (4 bytes)
- <br><a href="#struct.tr2_colour">tr2_colour</a> Palette[256]; // 8-bit
- palette (768 bytes)
- <br><a href="#struct_tr2_colour">tr2_colour4</a> Palette16[256]; //
- (1024 bytes)
- <br><a href="#Data.Types">bitu32</a> NumTextiles; // number of texture
- tiles (4 bytes)
- <br><a href="#struct.tr2_textile8">tr2_textile8</a> Textile8[NumTextiles];
- // 8-bit (palettized) textiles (NumTextiles * 65536 bytes)
- <br><a href="#struct.tr2_textile16">tr2_textile16</a> Textile16[NumTextiles];
- // 16-bit (ARGB) textiles (NumTextiles * 131072 bytes) (absent from TR1)
- <br><a href="#Data.Types">bitu32</a> Unused; // 32-bit unused value (4
- bytes)
- <br><a href="#Data.Types">bitu16</a> NumRooms; // number of rooms (2 bytes)
- <br>struct {
- <br> <a href="#struct.tr2_room_info">tr2_room_info</a>
- RoomInfo; // room header (16 bytes)
- <br> <a href="#Data.Types">bitu32</a> NumData; // number
- of data bitu16's to follow (=RoomData) (4 bytes)
- <br> struct {
- <br> <a href="#Data.Types">bitu16</a>
- NumVertices; // number of vertices to follow (2 bytes)
- <br> <a href="#struct.tr2_room_vertex">tr2_vertex_room</a>
- Vertices[NumVertices]; // vertex list (NumVertices * 12 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumRectangles; // number of rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a>
- Rectangles[NumRectangles]; // rectangle list (NumRectangles * 10 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumTriangles; // number of triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a>
- Triangles[NumTriangles]; // triangle list (NumTriangles * 8 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumSprites; // number of sprites to follow (2 bytes)
- <br> <a href="#struct.tr2_room_sprite">tr2_room_sprite</a>
- Sprites[NumSprites]; // room sprite list (NumSprites * 4 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumDoors; // number of doors to follow (2 bytes)
- <br> <a href="#struct.tr2_room_door">tr2_room_door</a>
- Doors[NumDoors]; // door list (NumDoors * 32 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumZsector; // sector table width (2 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumXsector; // sector table height (2 bytes)
- <br> <a href="#struct.tr2_room_sector">tr2_room_sector</a>
- SectorData[NumZsector * NumXsector]; // sector table (NumZsector * NumXsector
- * 8 bytes)
- <br> <a href="#Data.Types">bit16</a>
- Intensity1;
- <br> <a href="#Data.Types">bit16</a>
- Intensity2;
- <br> <a href="#Data.Types">bitu16</a>
- NumLights; // number of lights to follow (2 bytes)
- <br> <a href="#struct.tr2_room_light">tr2_room_light</a>
- Lights[NumLights]; // light list (NumLights * 24 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- NumStaticMeshes; // number of static mesh records to follow (2 bytes)
- <br> <a href="#struct.struct_tr2_room_staticmesh">tr2_room_staticmesh</a>
- StaticMeshes[NumStaticMeshes]; // static mesh data (NumStaticMeshes * 20
- bytes)
- <br> <a href="#Data.Types">bit16</a>
- AlternateRoom; // (2 bytes)
- <br> <a href="#Data.Types">bitu16</a>
- Flags; // (2 bytes)
- <br> <a href="#struct_tr2_colour">tr2_colour</a>
- RoomLightColour // 3 bytes
- <br> } RoomData;
- <br> } Rooms[NumRooms];
- <br><a href="#Data.Types">bitu32</a> NumFloorData; // number of floor data
- bitu16's to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> FloorData[NumFloorData]; // floor
- data (NumFloorData * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMeshData; // number of bitu16's
- of mesh data to follow (=Meshes[]) (4 bytes)
- <br>struct {
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Centre;
- // relative coordinates of mesh centre (6 bytes)
- <br> <a href="#Data.Types">bitu8</a> Unknown1[4]; //
- unknown (4 bytes)
- <br> <a href="#Data.Types">bit16</a> NumVertices; //
- number of vertices to follow (2 bytes)
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Vertices[NumVertices];
- // list of vertices (NumVertices * 6 bytes)
- <br> <a href="#Data.Types">bit16</a> NumNormals; // number
- of normals to follow (2 bytes)
- <br> <a href="#struct.tr2_vertex">tr2_vertex</a> Normals[NumNormals];
- // list of normals (NumNormals * 6 bytes) (becomes Lights if NumNormals
- < 0; 2 bytes)
- <br> <a href="#Data.Types">bit16</a> NumTexturedRectangles;
- // number of textured rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a> TexturedRectangles[NumTexturedRectangles];
- // list of textured rectangles (NumTexturedRectangles * 10 bytes)
- <br> <a href="#Data.Types">bit16</a> NumTexturedTriangles;
- // number of textured triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a> TexturedTriangles[NumTexturedTriangles];
- // list of textured triangles (NumTexturedTriangles * 8 bytes)
- <br> <a href="#Data.Types">bit16</a> NumColouredRectangles;
- // number of coloured rectangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face4">tr2_face4</a> ColouredRectangles[NumColouredRectangles];
- // list of coloured rectangles (NumColouredRectangles * 10 bytes)
- <br> <a href="#Data.Types">bit16</a> NumColouredTriangles;
- // number of coloured triangles to follow (2 bytes)
- <br> <a href="#struct.tr2_face3">tr2_face3</a> ColouredTriangles[NumColouredTriangles];
- // list of coloured triangles (NumColouredTriangles * 8 bytes)
- <br> } Meshes[NumMeshPointers]; // note that NumMeshPointers
- comes <u>AFTER</u> Meshes[]
- <br><a href="#Data.Types">bitu32</a> NumMeshPointers; // number of mesh
- pointers to follow (4 bytes)
- <br><a href="#Data.Types">bitu32</a> MeshPointers[NumMeshPointers]; //
- mesh pointer list (NumMeshPointers * 4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimations; // number of animations
- to follow (4 bytes)
- <br><a href="#struct.tr2_animation">tr2_animation</a> Animations[NumAnimations];
- // animation list (NumAnimations * 32 bytes)
- <br><a href="#Data.Types">bitu32</a> NumStateChanges; // number of state
- changes to follow (4 bytes)
- <br><a href="#struct.tr2_state_change">tr2_state_change</a> StateChanges[NumStateChanges];
- // state-change list (NumStructures * 6 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimDispatches; // number of animation
- dispatches to follow (4 bytes)
- <br><a href="#struct.tr2_anim_dispatch">tr2_anim_dispatch</a> AnimDispatches[NumAnimDispatches];
- // animation-dispatch list list (NumAnimDispatches * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimCommands; // number of animation
- commands to follow (4 bytes)
- <br><a href="#struct.tr2_anim_command">tr2_anim_command</a> AnimCommands[NumAnimCommands];
- // animation-command list (NumAnimCommands * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMeshTrees; // number of MeshTrees
- to follow (4 bytes)
- <br><a href="#struct.tr2_meshtree">tr2_meshtree</a> MeshTrees[NumMeshTrees];
- // MeshTree list (NumMeshTrees * 4 bytes)
- <br><a href="#Data.Types">bitu32</a> NumFrames; // number of words of frame
- data to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> Frames[NumFrames]; // frame data (NumFrames
- * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumMoveables; // number of moveables
- to follow (4 bytes)
- <br><a href="#struct.tr2_moveable">tr2_moveable</a> Moveables[NumMoveables];
- // moveable list (NumMoveables * 18 bytes)
- <br><a href="#Data.Types">bitu32</a> NumStaticMeshes; // number of StaticMesh
- data records to follow (4 bytes)
- <br><a href="#struct_tr2_staticmesh">tr2_staticmesh</a> StaticMeshes[NumStaticMeshes];
- // StaticMesh data (NumStaticMesh * 32 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSpriteTextures; // number of sprite
- textures to follow (4 bytes)
- <br><a href="#struct.tr2_sprite_texture">tr2_sprite_texture</a> SpriteTextures[NumSpriteTextures];
- // sprite texture list (NumSpriteTextures * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSpriteSequences; // number of sprite
- sequences records to follow (4 bytes)
- <br><a href="#struct.tr2_sprite_sequence">tr2_sprite_sequence</a> SpriteSequences[NumSpriteSequences];
- // sprite sequence data (NumSpriteSequences * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumCameras; // number of camera data
- records to follow (4 bytes)
- <br><a href="#struct.tr2_camera">tr2_camera</a> Cameras[NumCameras]; //
- camera data (NumCameras * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSoundSources; // number of sound
- source data records to follow (4 bytes)
- <br><a href="#struct.tr2_sound_source">tr2_sound_source</a> SoundSources[NumSoundSources];
- // sound source data (NumSoundSources * 16 bytes)
- <br><a href="#Data.Types">bitu32</a> NumBoxes; // number of box data records
- to follow (4 bytes)
- <br><a href="#struct.tr2_box">tr2_box</a> Boxes[NumBoxes]; // box data
- (NumBoxes * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumOverlaps; // number of overlap
- records to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> Overlaps[NumOverlaps]; // overlap
- data (NumOverlaps * 2 bytes)
- <br><a href="#Data.Types">10*bit16</a> Zones[NumBoxes]; // zone data (NumBoxes
- * 20 bytes)
- <br><a href="#Data.Types">bitu32</a> NumAnimatedTextures; // number of
- animated texture records to follow (4 bytes)
- <br><a href="#Data.Types">bitu16</a> AnimatedTextures[NumAnimatedTextures];
- // animated texture data (NumAnimatedTextures * 2 bytes)
- <br><a href="#Data.Types">bitu32</a> NumObjectTextures; // number of object
- textures to follow (4 bytes) (after AnimatedTextures in TR3)
- <br><a href="#struct.tr2_object_texture">tr2_object_texture</a> ObjectTextures[NumObjectTextures];
- // object texture list (NumObjectTextures * 20 bytes)
- <br><a href="#Data.Types">bitu32</a> NumItems; // number of items to follow
- (4 bytes)
- <br><a href="#struct.tr2_item">tr2_item</a> Items[NumItems]; // item list
- (NumItems * 24 bytes)
- <br><a href="#Data.Types">bitu8</a> LightMap[32 * 256]; // light map (8192
- bytes)
- <br><a href="#Data.Types">bitu16</a> NumCinematicFrames; // number of cinematic
- frame records to follow (2 bytes)
- <br><a href="#struct.tr2_cinematic_frame">tr2_cinematic_frame</a> CinematicFrames[NumCinematicFrames];
- // (NumCinematicFrames * 16 bytes)
- <br><a href="#Data.Types">bitu16</a> NumDemoData; // number of demo data
- records to follow (2 bytes)
- <br><a href="#Data.Types">bitu8</a> DemoData[NumDemoData]; // demo data
- (NumDemoData bytes)
- <br><a href="#Data.Types">bit16</a> SoundMap[370]; // sound map (740 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSoundDetails; // number of sound-detail
- records to follow (4 bytes)
- <br><a href="#struct.tr2_sound_details">tr2_sample_info</a> SoundDetails[NumSoundDetails];
- // sound-detail list (NumSoundDetails * 8 bytes)
- <br><a href="#Data.Types">bitu32</a> NumSampleIndices; // number of sample
- indices to follow (4 bytes)
- <br><a href="#Data.Types">bitu32</a> SampleIndices[NumSampleIndices]; //
- sample indices (NumSampleIndices * 4 bytes)
- <br>
- <br>
- <br>
- <center>
- <p><a NAME="ItemizedDifferencesBetweenTR1andTR2"></a><b><u><font size=+2>Itemized
- Differences between TRI and TRII</font></u></b></center>
-
- <p>TR1 has no colour table or 16-bit palette before the start of the textures;
- it also lacks 16-bit textures.
- <p>In TR1, tr2_vertex_room_struct has after its tr2_vertex struct only
- the first light intensity, and not the attributes or the second intensity.
- <p>In TR1, after SectorData, there is only the first light intensity, and
- not the second one or the lighting mode.
- <p>In TR1, tr2_room_light_struct has only one of:
- <p> bitu16 Diffuse1/2
- <p> bitu32 Unknown1/2
- <p>In TR1, tr2_room_static does not have two light intensities, but only
- one.
- <p>"Boxes" objects are rectangles whose four horizontal-coordinate values
- are bitu8's in TR2 and bit32's in TR1.
- <p>"Zones" objects have 10 bit16's in TR2, but 6 bit16's in TR1
- <p>In TR1, tr2_item_struct is like the TR2 version, but with only one light
- intensity.
- <p>The TR1 colour table has the same format as the TR2 colour table, but
- it is located between the LightMap and the cinematic frames.
- <p>SoundMap is 370 bit16's in TR2, but 256 bit16's in TR1.
- <p>Between SoundDetails and SampleIndices, TR1 has all the level's sound
- samples, in the form of embedded Microsoft WAVE files. Just before these
- samples is the total number of bytes in those sound samples, which is a
- bit32.
- <br>
- <br>
- <br>
- <center>
- <p><a NAME="ItemizedDifferencesBetweenTR2andTR3"></a><b><u><font size=+2>Itemized
- Differences between TRII and TRIII</font></u></b></center>
-
- <p>After the two room-light intensities, TR2 has a lighting-mode value,
- which TR3 lacks.
- <p>Also in tr2_room_struct, TR3 has 3 extra bytes at the end, which appears
- to be the room-light color.
- <p>Finally, in TR2, the tr2_object_texture data is before the tr2_sprite_texture
- data. In TR3, it is before the tr2_item data.
- <br>
- <br>
- <br>
- <center>
- <p><a NAME="ItemizedDifferencesBetweenTRandDemos"></a><b><u><font size=+2>Itemized
- Differences between "normal" TRs and Demos</font></u></b></center>
-
- <p>Presumably as a form of copy protection, the demo versions of some of
- the TR games use levels that are slightly different from those in the retail
- versions. However, those that have been found are all data rearrangements,
- as explained below.
- <p>The TR1 and Unfinished Business (.TUB) demos have their palettes moved
- to between the SpriteSequences and the Cameras.
- <p>The TR2 "Wall" demo, and maybe also its "Venice" demo, has its LightMap
- (8K) moved to between the SpriteSequences and the Cameras. It also has
- its SampleIndices content replaced by the soundfiles, though the associated
- number of them remains unchanged (the number of indices becomes the number
- of samples).
- <p>That demo also has its own version of TOMBPC.DAT, called DEMOPC.DAT,
- which appears to have the exact same format as TOMBPC.DAT.
- <p>No rearrangements are known for the TR3 demos.
- <p>
- <hr>
- <center>
- <p><a NAME="ScriptingWithTOMBPC_DAT"></a><b><u><font size=+1>X. Scripting
- with TOMBPC.DAT</font></u></b></center>
-
- <p><b>Overview: </b>The flow of the game, which levels come in what order,
- what item(s) Lara has at the beginning of each level, the filenames of
- the level and cut-scene files, all the visible text (e.g. "Save Game,"
- "Rusty Key," etc.), and various other options are controlled using a file
- called TOMBPC.DAT. This file is normally compiled using a utility called
- GAMEFLOW.EXE, which was (apparently) accidentally distributed by Eidos
- in the German distribution of Tomb Raider II Gold. TR2 and TR3 use this
- file, and use essentially the same format of it, but TR1 has this file's
- contents embedded in the app, which explains why there are separate TR1
- and Unfinished Business apps. What follows is a description of the contents
- of the binary TOMBPC.DAT file.
- <p><a href="#Data.Types">bitu32</a> Version;
- // seems to be 3 for TR2
- <br><a href="#Data.Types">bitu8</a> Info[256];
- // null-terminated string describing this game, copyright info, etc.
- NOT ENCRYPTED
- <br><a href="#Data.Types">bit32</a> FirstOption;
- // Level to go to when that happens (0x500 is exit-to-title) ??? when WHAT
- happens?
- <br><a href="#Data.Types">bit32</a> TitleReplace;
- // Level to go to when that happens (-1 is NONE) ??? when WHAT happens?
- <br><a href="#Data.Types">bit32</a> OnDeathDemoMode; // Level to go to
- when Lara dies during demo mode (0x500 is exit-to-title)
- <br><a href="#Data.Types">bit32</a> OnDeathInGame;
- // Level to go to when Lara dies during the game (0 is exit-to-title)
- <br><a href="#Data.Types">bit32</a> DemoTime;
- // time in game ticks (1/30th of a second?) to wait before starting a demo
- <br><a href="#Data.Types">bit32</a> OnDemoInterrupt;
- // Level to go to when demo mode is interrupted (0x500 is exit-to-title)
- <br><a href="#Data.Types">bit32</a> OnDemoEnd;
- // Level to go to when the demo ends (0x500 is exit-to-title)
- <br><a href="#Data.Types">bitu8</a> Unused1[36];
- // filler
- <br><a href="#Data.Types">bit16</a> NumLevels;
- // number of levels in the game (some level files are used more than once
- for some reason)
- <br><a href="#Data.Types">bit16</a> NumChapterScreens; // chapter screens
- (Present in TR2, first used in TR3)
- <br><a href="#Data.Types">bit16</a> NumTitles;
- // only one, TITLE.TR2
- <br><a href="#Data.Types">bit16</a> NumRPLs;
- // number of FMV cutscenes (*.RPL)
- <br><a href="#Data.Types">bit16</a> NumCutScenes;
- // number of in-game (engine-rendered) cutscenes (CUT*.TR2)
- <br><a href="#Data.Types">bit16</a> NumDemoLevels;
- // Number of demo levels
- <br><a href="#Data.Types">bit16</a> TitleSoundID;
- // ID of title soundtrack
- <br><a href="#Data.Types">bit16</a> SingleLevel;
- // If doing only a single level
- <br><a href="#Data.Types">bitu8</a> Unused2[32];
- // filler
- <br>//
- <br>// The Flags word below uses the following bit assignments:
- <br>// 0x0001: DemoVersion
- (1 ::= demo, 0 ::= normal game)
- <br>// 0x0002: Title_Disabled
- (1 ::= no title screen, 0 ::= normal title screen)
- <br>// 0x0004: CheatModeCheck_Disabled
- (1 ::= no cheat mode, 0 ::= cheat mode enabled)
- <br>// 0x0008: NoInputTimeout
- (1 ::= wait forever if no input, 0 ::= enter demo
- <br>// mode if no input timeout)
- <br>// 0x0010: LoadSave_Disabled
- (1 ::= load/save game disabled, 0 ::= load/save
- <br>// game enabled)
- <br>// 0x0020: ScreenSizing_Disabled
- (1 ::= no screen re-sizing allowed, 0 ::= screen
- <br>// re-sizing allowed)
- <br>// 0x0040: LockOutOptionRing
- (1 ::= ???, 0 ::= normal option ring)
- <br>// 0x0080: DozyCheat_Enabled
- (???)
- <br>// 0x0100: Use_Encryption
- (1 ::= XOR all StringData with XORbyte, 0 ::= leave
- <br>// StringData as-is)
- <br>// 0x0400: SelectAnyLevel
- (1 ::= allow player to select any level, 0 ::= no
- <br>// level selection)
- <br>//
- <br><a href="#Data.Types">bitu16</a> Flags;
- // Various flags (see above)
- <br><a href="#Data.Types">bitu8</a> Unused3[6];
- // filler
- <br><a href="#Data.Types">bitu8</a> XORbyte;
- // For encryption ("cipher code")
- <br><a href="#Data.Types">bitu8</a> Unused4;
- // High byte of a short?
- <br><a href="#Data.Types">bit16</a> SecretSoundID;
- // ID of "found a secret" soundtrack
- <br><a href="#Data.Types">bitu8</a> Unused5[4];
- // filler
- <br>//
- <br><a NAME="struct_Script_StringArray"></a>// The sections that follow
- contain String Arrays. These are of the following pseudo-structure:
- <br>// struct {
- <br>// bitu16 StringOffsets[NumStrings];
- // offsets (into StringData[]) of each string
- <br>// bitu16 StringDataSize;
- // number of bytes of raw string data to follow
- <br>// bitu8 StringData[StringDataSize];
- // if Flags & 0x0100, this entire array is XORed with
- <br>// // XORbyte
- <br>// } StringArray;
- <br>//
- <br>// While it is not correct C/C++, the following are specified as StringArray[NumStrings],
- <br>// where <i>NumStrings</i> indicates the number of StringOffsets in
- the structure.
- <br>//
- <br><a href="#struct.Script.StringArray">StringArray</a> LevelDisplayNames[NumLevels];
- <br><a href="#struct.Script.StringArray">StringArray</a> ChapterScreens[NumChapterScreens];
- <br><a href="#struct.Script.StringArray">StringArray</a> TitleFileNames[NumTitles];
- <br><a href="#struct.Script.StringArray">StringArray</a> RPLFileNames[NumRPLs];
- <br><a href="#struct.Script.StringArray">StringArray</a> LevelFileNames[NumLevels];
- <br><a href="#struct.Script.StringArray">StringArray</a> CutSceneFileNames[NumCutScenes];
- <br>//
- <br>// The LevelScript contains interpreted data (opcodes and operands)
- that specify
- <br>// actions to take for each level (e.g. play cut scene, take away weapons,
- etc). The
- <br>// details of this data are discussed below, after the structure descriptions.
- <br>//
- <br>struct {
- <br> <a href="#Data.Types">bitu16</a> LevelScriptOffsets[NumLevels
- + 1]; // offsets (into LevelScriptData[])
- <br>// of each level's script data
- <br> <a href="#Data.Types">bitu16</a> NumLevelScriptData;
- <br> <a href="#Data.Types">bitu8</a> LevelScriptData[NumLevelScriptData];
- <br> } LevelScript;
- <br><a href="#Data.Types">bitu16</a> DemoLevelList[NumDemoLevels];
- <br>//
- <br>// GameStrings 1 and 2 are the level-independent strings that are displayed
- when interacting
- <br>// with the game menus (e.g. "Inventory," "Load Game," "Jump" (control
- setup), "Shotgun"
- <br>// (weapon in inventory), etc.)
- <br>//
- <br><a href="#Data.Types">bit16</a> NumGameStrings1;
- <br><a href="#struct.Script.StringArray">StringArray</a> GameStrings1[NumGameStrings1];
- <br><a href="#struct.Script.StringArray">StringArray</a> GameStrings2[41];
- <br>//
- <br>// KeyStrings1..10 are the level-specific printable strings for the
- various pickups in each level,
- <br>// not including level-independent pickups (e.g. Shotgun Shells, Medi
- Packs). These pickups
- <br>// are all "active" at some point, e.g. they are used as keys or are
- prerequisites for advancing
- <br>// through the game. Examples include "Rusty Key," "Green Pass
- Card," "Circuit Breaker," "The
- <br>// Seraph," "Talion," etc. Each level of TR2 can contain up to 10 pickups.
- The following arrays
- <br>// are arranged longitudinally, meaning that each array contains all
- of the Nth-pickup strings for
- <br>// each level. For example, KeyStrings1 contains the printable
- names for the "first" pickup in
- <br>// each level, KeyStrings2 contains the names for the "second" pickup,
- etc. Note that "first"
- <br>// and "second" have nothing to do with the order these objects are
- encountered in the game;
- <br>// they are simply indices used by the game engine (Key 1, Key 2, etc.)
- <br>//
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings1[NumLevels];
- // Puzzle 1
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings2[NumLevels];
- // Puzzle 2
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings3[NumLevels];
- // Puzzle 3
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings4[NumLevels];
- // Puzzle 4
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings5[NumLevels];
- // Pickup 1
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings6[NumLevels];
- // Pickup 2
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings7[NumLevels];
- // Key 1
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings8[NumLevels];
- // Key 2
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings9[NumLevels];
- // Key 3
- <br><a href="#struct.Script.StringArray">StringArray</a> KeyStrings10[NumLevels];
- // Key 4
- <p><b>LevelScript Description</b>:
- <br>In LevelScript, Opcodes and Operands are all <a href="#Data.Types">bitu16</a>.
- Note that if a level is a demo level, its level ID will be 1024 higher
- than a "normal" level ID.
- <p>Opcodes:
- <br> 3 -- Play FMV (prerendered cutscene):
- operand is RPL ID
- <br> 4 -- Play (interactive) game level:
- operand is level's ID
- <br> 5 -- Play engine-rendered cutscene:
- operand is cutscene ID
- <br> 6 -- Do level-completion display (no
- operands)
- <br> 7 -- Play demo level: operand is level
- ID
- <br> 9 -- End of set (no operands)
- <br> 10 -- Play soundtrack: operand is soundtrack ID
- (it precedes opcodes of associated levels)
- <br> 11 -- (Lara starts out in motorboat? -- TR2, "Bartoli's
- Hideout") (no operands?)
- <br> 12 -- Chapter screen: operand is chapter ID
- <br> 14 -- Lose your weapons (no operands)
- <br> 15 -- End of game (no operands)
- <br> 16 -- Associated with cutscenes; a viewpoint control?
- (one operand?)
- <br> 17 -- (one operand?)
- <br> 18 -- Give item; operand is item type
- <br> 19 -- Item-type 12 state to start level in: operand
- is state number
- <br> 20 -- Number of secrets (overrides engine's hardcoded
- count of them?): operand is that number
- <br> 21 -- (no operands?)
- <br> 22 -- Lose your ammo and medipacks? (no operands?)
- <p>Opcode-18 stuff to give (repeat means give another):
- <p>After finding all the secrets in a level (Tomb Raider 2)
- <p> 0 Pistols
- <br> 1 Shotgun
- <br> 2 Automatic pistols
- <br> 3 Uzis
- <br> 4 Harpoon gun
- <br> 5 M-16
- <br> 6 Grenade launcher
- <br> 7 Pistol clip
- <br> 8 Shotgun-shell box
- <br> 9 Automatic-pistol clip
- <br> 10 Uzi clip
- <br> 11 Harpoon bundle
- <br> 12 M-16 clip
- <br> 13 Grenade pack
- <br> 14 Flare box
- <br> 15 Small medipack
- <br> 16 Big medipack
- <br> 17 Pickup 1
- <br> 18 Pickup 2
- <br> 19 Puzzle 1
- <br> 20 Puzzle 2
- <br> 21 Puzzle 3
- <br> 22 Puzzle 4
- <br> 23 Key 1
- <br> 24 Key 2
- <br> 25 Key 3
- <br> 26 Key 4
- <p>When a level starts (Tomb Raider 2)
- <p>1000 Pistols
- <br>1001 Shotgun
- <br>1002 Automatic pistols
- <br>1003 Uzis
- <br>1004 Harpoon gun
- <br>1005 M16
- <br>1006 Grenade launcher
- <br>1007 Pistol clip
- <br>1008 Shotgun-shell box
- <br>1009 Automatic-pistol clip
- <br>1010 Uzi clip
- <br>1011 Harpoon bundle
- <br>1012 M16 clip
- <br>1013 Grenade pack
- <br>1014 Flare box
- <br>1015 Small medipack
- <br>1016 Big medipack
- <br>1017 Pickup 1
- <br>1018 Pickup 2
- <br>1019 Puzzle 1
- <br>1020 Puzzle 2
- <br>1021 Puzzle 3
- <br>1022 Puzzle 4
- <br>1023 Key 1
- <br>1024 Key 2
- <br>1025 Key 3
- <br>1026 Key 4
- <p><u><font color="#000080">Tomb Raider 2 identifications</font>:</u>
- <p><font color="#000080">FMV IDs:</font>
- <br><font color="#000080"> 0 -- LOGO (everybody's corporate
- logos)</font>
- <br><font color="#000080"> 1 -- ANCIENT (monks vs. dragon)</font>
- <br><font color="#000080"> 2 -- MODERN (Lara drops in
- from helicopter)</font>
- <br><font color="#000080"> 3 -- LANDING (Seaplane lands
- at rig)</font>
- <br><font color="#000080"> 4 -- MS (Lara hitchhikes on
- a minisub)</font>
- <br><font color="#000080"> 5 -- CRASH (Lara goes to Tibet
- and has a rough landing there)</font>
- <br><font color="#000080"> 6 -- JEEP (Lara steals it
- and outruns Bartoli's goons)</font>
- <br><font color="#000080"> 7 -- END (Lara escaping the
- collapsing lair)</font>
- <p><font color="#000080">Cutscene IDs:</font>
- <br><font color="#000080"> 0 -- CUT1 (At the end of the
- Great Wall)</font>
- <br><font color="#000080"> 1 -- CUT2 (Lara the stowaway)</font>
- <br><font color="#000080"> 2 -- CUT3 (Bartoli vs. goon)</font>
- <br><font color="#000080"> 3 -- CUT4 (Bartoli stabs himself)</font>
- <p><font color="#000080">Soundtrack IDs:</font>
- <br><font color="#000080"> 0 -- BLANK (no sound)</font>
- <br><font color="#000080"> 3 -- CUT1 ("at the fancy
- door" soundtrack)</font>
- <br><font color="#000080"> 4 -- CUT2 ("Lara the
- stowaway" soundtrack)</font>
- <br><font color="#000080"> 5 -- CUT3 ("Bartoli
- vs. goon" soundtrack)</font>
- <br><font color="#000080"> 30 -- CUT4 ("Bartoli stabs
- himself" soundtrack)</font>
- <br><font color="#000080"> 31 -- DERELICT (eerie choppy/echo-y
- synths)</font>
- <br><font color="#000080"> 32 -- WATER (dripping/pouring
- water sounds)</font>
- <br><font color="#000080"> 33 -- WIND (Blowing wind)</font>
- <br><font color="#000080"> 34 -- HEARTBT (musical embellishment
- of one)</font>
- <br><font color="#000080"> 52 -- SHOWER (that infamous
- shower scene)</font>
- <br><font color="#000080"> 58 -- MACHINES (in the offshore
- rig)</font>
- <br><font color="#000080"> 59 -- FLOATING (wispy synths)</font>
- <p>
- <hr>
- <br>
- <center>
- <p><a NAME="Catalogs"></a><b><u><font size=+1>Catalogues</font></u></b></center>
-
- <p> It is always easier to build upon the work of others than
- to try and create everything from scratch. In order to build upon
- the works of others, however, one must know what the others' works are.
- What follows are catalogues of some of the fine work done by the Core level
- designers. These catalogues are based upon observation and subjective
- interpretation, and therefore may not be either complete or perfectly accurate.
- They do provide a good starting-point, however.
- <p>The catalogues included here are:
- <br> <a href="#Catalogs.TR2ItemIDs">TR2 Item IDs</a>
- <br> <a href="#Catalogs.TR1EntityStates">TR1 Entity States</a>
- <br> <a href="#Catalogs.TR2EntityStates">TR2 Entity States</a>
- <br> <a href="#Catalogs.TR1Animations">TR1 Animations</a>
- <br> <a href="#Catalogs.TR2Animations">TR2 Animations</a>
- <br> <a href="#Catalogs.TR2SoundIDs">TR2 Sound IDs</a>
- <br>
- <p><a NAME="Catalogs_TR2ItemIDs"></a><font color="#000080"><b><u>TR2 ItemIDs:</u></b>
- <br>* = sprite sequence; others are movable mesh
- objects
- <p> 0: Lara
- <br> 1: Lara pistol animation
- <br> 2: Lara's ponytail
- <br> 3: Lara shotgun animation
- <br> 4: Lara auto-pistol animation
- <br> 5: Lara Uzi animation
- <br> 6: Lara M16 animation
- <br> 7: Lara grenade-launcher animation
- <br> 8: Lara harpoon-gun animation
- <br> 9: Lara flare animation
- <br> 10: Lara's hips
- <br> 11: Lara's hips
- <br> 12: Lara's hips / Lara dagger animation
- <br> 13: Red snowmobile (can go fast)
- <br> 14: Boat
- <br> 15: Doberman
- <br> 16: Masked goon (white mask)
- <br> 17: Masked goon (white mask)
- <br> 18: Masked goon (black mask)
- <br> 19: Knifethrower
- <br> 20: Shotgun goon
- <br> 21: Rat
- <br> 22: Dragon
- <br> 23: Dragon (partially decomposed)
- <br> 24: Gondola (Venetian boat)
- <br> 25: Shark
- <br> 26: Yellow moray eel
- <br> 27: Black moray eel
- <br> 28: Barracuda / Whiskered fish (white, yellow)
- <br> 29: Scuba diver
- <br> 30: Gun-wielding rig worker
- <br> 31: Gun-wielding rig worker
- <br> 32: Stick-wielding goon
- <br> 33: Stick-wielding goon
- <br> 34: Flamethrower-wielding goon
- <br> 36: Spider
- <br> 37: Giant spider
- <br> 38: Crow
- <br> 39: Tiger / Snow leopard / White tiger
- <br> 40: Marco Bartoli
- <br> 41: Spear-wielding Guardian
- <br> 42: Spear-wielding Guardian statue
- <br> 43: Sword-wielding Guardian
- <br> 44: Sword-wielding Guardian statue
- <br> 45: Yeti
- <br> 46: Bird monster (guards Talion)
- <br> 47: Eagle
- <br> 48: Mercenary
- <br> 49: Mercenary (black ski mask)
- <br> 50: Mercenary (black ski mask)
- <br> 51: Black snowmobile (with guns)
- <br> 52: Mercenary snowmobile driver
- <br> 53: Monk with long stick
- <br> 54: Monk with knife-end stick
- <br> 55: Collapsible floor
- <br> 57: Loose boards (Opera House)
- <br> 58: Swinging sandbag / spiky ball
- <br> 59: Spikes / Glass shards
- <br> 60: Boulder
- <br> 61: Disk
- <br> 62: Wall-mounted disk shooter
- <br> 63: Door? (Opera House)
- <br> 64: Slamming door
- <br> 65: Elevator
- <br> 66: Minisub
- <br> 67: Movable cubical block (pushable)
- <br> 68: Movable cubical block (pushable)
- <br> 69: Movable cubical block (pushable)
- <br> 70: Movable cubical block (pushable)
- <br> 71: Big bowl (Ice Palace)
- <br> 72: Breakable window
- <br> 73: Breakable window
- <br> 76: Airplane propeller
- <br> 77: Power saw
- <br> 78: Overhead pulley hook
- <br> 79: Sandbag / Ceiling fragments
- <br> 80: Rolling spindle
- <br> 81: Wall-mounted knife blade
- <br> 82: Statue with knife blade
- <br> 83: Multiple boulders / snowballs
- <br> 84: Detachable icicles
- <br> 85: Spiky movable wall
- <br> 86: Bounce pad
- <br> 87: Wall segment with spikes
- <br> 88: Tibetan bell
- <br> 89: * Boat wake (Venice, Bartoli)
- <br> 90: * Snowmobile wake (Tibetan Foothills)
- <br> 91: Lara and a snowmobile
- <br> 92: Wheel doorknob
- <br> 93: Above-water switch
- <br> 94: Underwater propeller
- <br> 95: Air fan
- <br> 96: Swinging box / spiky ball
- <br> 97: Gun-wielding rig worker / Marco Bartoli (unused?)
- <br> 98: Goon at the fancy door holding poison bottle / Gun-wielding rig worker
- <br> 99: Lara in cutscene
- <br>100: * Frame (for indicator bars)
- <br>101: Rolling storage drums
- <br>102: Zipline handle
- <br>103: Above-water switch
- <br>104: Underwater switch (some above-water ones)
- <br>105: Underwater switch
- <br>106: Door
- <br>107: Door
- <br>108: Door
- <br>109: Door
- <br>110: Door
- <br>111: Door
- <br>112: Door
- <br>113: Door
- <br>114: Door
- <br>115: Door
- <br>116: Door ? Bridge ? (Temple of Xian)
- <br>117: Bridge (flat)
- <br>118: Bridge (slope = 1)
- <br>119: Bridge (slope = 2)
- <br>120: Passport (opening up)
- <br>121: Stopwatch
- <br>122: Lara and butler picture
- <br>123: Goon at the fancy door / Monk
- <br>124: Airplane cockpit / Marco Bartoli
- <br>125: Fancy-door goon's gunflare / Crate lid / Minisub / Bartoli follower
- <br>126: Fancy-door goon's gun / Ceiling hook
- <br>127: Fancy-door goon's gunflare / Marco Bartoli / Lara's boot (thrown) / Bartoli follower
- <br>128: Laptop computer / Fabio / Marco Bartoli / Bartoli follower
- <br>129: Crate / Bartoli follower
- <br>130: Eros the Goon
- <br>133: Passport (closed)
- <br>134: N-thingy (Playstation memory card?)
- <br>135: * Pistols
- <br>136: * Shotgun
- <br>137: * Auto pistols
- <br>138: * Uzis
- <br>139: * Harpoon gun
- <br>140: * M16
- <br>141: * Grenade launcher
- <br>143: * Shotgun shells
- <br>144: * Auto-pistol clips
- <br>145: * Uzi clips
- <br>146: * Harpoons
- <br>147: * M16 clips
- <br>148: * Grenades
- <br>149: * Small medipack
- <br>150: * Large medipack
- <br>151: * Flares
- <br>152: Flare
- <br>153: Sunglasses
- <br>154: Portable CD player
- <br>155: Direction keys
- <br>157: Pistol
- <br>158: Shotgun
- <br>159: Auto-pistol
- <br>160: Uzi
- <br>161: Harpoon gun
- <br>162: M16
- <br>163: Grenade launcher
- <br>164: Pistol ammo(?)
- <br>165: Shotgun ammo
- <br>166: Auto-pistol ammo
- <br>167: Uzi ammo
- <br>168: Harpoons
- <br>169: M16 ammo
- <br>170: Grenades
- <br>171: Small medipack
- <br>172: Large medipack
- <br>173: Flares (opening box)
- <br>174: * Puzzle 1
- <br>175: * Puzzle 2
- <br>176: * Puzzle 3 ? [unused]
- <br>177: * Puzzle 4
- <br>178: Puzzle 1
- <br>179: Puzzle 2
- <br>180: Puzzle 3 ? [unused]
- <br>181: Puzzle 4
- <br>182: Slot 1 empty
- <br>183: Slot 2 empty
- <br>184: Slot 3 empty ? [unused]
- <br>185: Slot 4 empty
- <br>186: Slot 1 full
- <br>187: Slot 2 full
- <br>188: Slot 3 full ? [unused]
- <br>189: Slot 4 full
- <br>190: * Dragon 1
- <br>191: * Dragon 2
- <br>192: * Dragon 3
- <br>193: * Key 1
- <br>194: * Key 2
- <br>195: * Key 3
- <br>196: * Key 4
- <br>197: Key 1
- <br>198: Key 2
- <br>199: Key 3
- <br>200: Key 4
- <br>201: Lock 1
- <br>202: Lock 2
- <br>203: Lock 3
- <br>204: Lock 4
- <br>205: * Pickup 1
- <br>206: * Pickup 2
- <br>207: Pickup 1
- <br>208: Pickup 2
- <br>209: Dragon explosion effect (expanding bubble)
- <br>210: Dragon explosion effect (expanding bubble)
- <br>211: Dragon explosion effect (expanding bubble)
- <br>212: Lara's hips / Alarm
- <br>213: Lara's hips
- <br>214: Tyrannosaur
- <br>215: Lara's hips
- <br>216: Lara's hips
- <br>217: Lara's hips
- <br>218: Dragon bones
- <br>219: Dragon bones
- <br>220: * Extra Fire (Ice Palace)
- <br>222: Aquatic Mine (Venice)
- <br>223: Menu background (displayed when doing 3D-hardware rendering)
- <br>224: * Gray disk
- <br>225: Gong-hammering animation
- <br>226: Gong (Ice Palace)
- <br>227: Detonator box
- <br>228: Helicopter (Diving Area)
- <br>229: * Grenade blast
- <br>230: * Splash
- <br>231: * Bubbles
- <br>233: * Blood splatter
- <br>234: * Green-white thing (Great Wall)
- <br>235: Flare burning?
- <br>236: * Flash (looks like distant light)
- <br>238: * Bullet hit
- <br>239: * Sparkles (Floating Islands, Dragon's Lair)
- <br>240: Gunflare
- <br>241: Gunflare (spiky)
- <br>243: Lara's hips
- <br>244: Lara's hips
- <br>245: Rod?
- <br>246: * Flamethrower (repeat of grenade blast)
- <br>247: Pointer?
- <br>248: Support?
- <br>249: Rod?
- <br>250: * Sprayed particles (Diving Area, Barkhang Monastery, Temple of Xian)
- <br>252: * Fire
- <br>253: Lara's hips
- <br>254: Skybox
- <br>255: * Standard symbols
- <br>256: Monk
- <br>257: Lara's hips
- <br>259: Helicopter (The Great Wall)
- <br>260: The butler
- <br>261: * Assault-course numerals and punctuation
- <br>262: Lara's hips
- <br>263: Shotgun
- <br>264: Lara's hips
- <br>289: * Cellar artifact 1 (gold mask)
- <br>290: * Cellar artifact 2 (rounded statue)
- <br>291: * Cellar artifact 3 (flattened statue)</font>
-
- <p><a NAME="Catalogs_TR1EntityStates"></a><font color="#800000"><b><u>TR1
- Entity States</u></b>
- <p> I've
- found that the two lion types are the two sexes of lions and that the crocodiles
- and giant rats have separate types for on-land ones and swimming ones.
- Also, Lara's evil-twin mutant has only the breathing animation; its mirror-image
- behaviour is almost certainly hardcoded. I wonder if there is a reference-point
- object in the center of the room that this mutant lives in; there has to
- be some such point to refer the reflection to.
- <p>This contains the states of everything but Lara.
- <p>* = sprite sequence; others are movable mesh objects
- <p> 0: Lara
- <br> 1: Lara pistol animation
- <br> 2: Lara shotgun animation
- <br> 3: Lara magnum animation
- <br> 4: Lara Uzi animation
- <br> 5: Lara / Lara's home appearance / Lara
- wounded / Lara turned to gold
- <br> 6: Lara's evil twin mutant
- <p> 7: Wolf
- <br>
- 1: Walking
- <br>
- 2: Running
- <br>
- 3: Jumping
- <br>
- 5: Stalking
- <br>
- 6: Jumping and attacking
- <br>
- 7: Attacking
- <br>
- 8: Lying down
- <br>
- 9: Getting ready to strike
- <br> 10:
- Running jump
- <br> 11:
- Dying
- <br> 12:
- Biting
- <br> 8: Bear
- <br>
- 0: Walking on all fours
- <br>
- 1: Getting back to all fours
- <br>
- 2: Walking on hind legs
- <br>
- 3: Running on all fours
- <br>
- 4: Rearing up on hind legs
- <br>
- 5: Growling?
- <br>
- 6: Running and attacking
- <br>
- 7: Standing on hind legs
- <br>
- 8: Biting
- <br>
- 9: Dying
- <br> 9: Bat
- <br>
- 1: Starting to fly
- <br>
- 2: Flying straight
- <br>
- 3: Biting
- <br>
- 4: Circling
- <br>
- 5: Dying
- <br> 10: Crocodile (on land)
- <br>
- 1: Stationary
- <br>
- 2: Walking
- <br>
- 3: Walking
- <br>
- 4: Turning
- <br>
- 5: Biting
- <br>
- 7: Dying
- <br> 11: Crocodile (in water)
- <br>
- 1: Swimming
- <br>
- 2: Biting
- <br>
- 3: Dying
- <br> 12: Lion (male)
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Leaping
- <br>
- 4: Leaping and biting
- <br>
- 5: Dying
- <br>
- 6: Biting
- <br>
- 7: Biting
- <br> 13: Lion (female)
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Leaping
- <br>
- 4: Leaping and biting
- <br>
- 5: Dying
- <br>
- 6: Biting
- <br>
- 7: Biting
- <br> 14: Panther
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Leaping
- <br>
- 4: Leaping and biting
- <br>
- 5: Dying
- <br>
- 6: Biting
- <br>
- 7: Biting
- <br> 15: Gorilla
- <br>
- 1: Standing on all fours
- <br>
- 3: Running on all fours
- <br> 4:
- Walking on legs (attacking?)
- <br>
- 5: Dying
- <br>
- 6: Thumping chest
- <br>
- 7: Waving arms
- <br>
- 8: Turning leftward?
- <br>
- 9: Turning rightward?
- <br> 10:
- Jumping up and waving arms
- <br> 11:
- Climbing
- <br> 16: Giant Rat (on land)
- <br>
- 1: Standing
- <br>
- 2: Jumping and Biting
- <br>
- 3: Running
- <br>
- 4: Biting
- <br>
- 5: Dying
- <br>
- 6: Rearing up
- <br> 17: Giant Rat (in water)
- <br>
- 1: Swimming
- <br>
- 2: Biting
- <br>
- 3: Dying
- <br> 18: Tyrannosaur
- <br> 1:
- Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 5: Dying
- <br>
- 6: Bellowing
- <br>
- 7: Biting
- <br>
- 8: Shaking Head and Spitting Out
- <br> 19: Raptor
- <br>
- 0: Dying
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Jumping and Biting?
- <br>
- 6: Bellowing
- <br>
- 7: Running and bellowing
- <br>
- 8: Biting
- <br> 20: Winged mummy (unused) / Winged mutant
- <br>
- 1: Crouching
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Biting?
- <br>
- 6: Looking
- <br>
- 7: Jumping?
- <br>
- 8: Clawing?
- <br>
- 9: Aiming right-hand gun
- <br> 10:
- Aiming and firing left-hand gun
- <br> 11:
- Firing right-hand gun
- <br> 12:
- Standing
- <br> 13:
- Flying
- <br> 21: Lara's hips
- <br> [Only
- one state]
- <br> 22: Lara's hips
- <br> [Only
- one state]
- <br> 23: Centaur mutant
- <br>
- 1: Standing
- <br>
- 2: Firing
- <br>
- 3: Galloping
- <br>
- 4: Aiming
- <br>
- 5: Dying
- <br>
- 6: Rearing up
- <br> 24: Mummy
- <br>
- 1: Standing
- <br>
- 2: Falling forward
- <br> 27: Larson
- <br>
- 0: Walking
- <br>
- 1: Standing holding gun
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Aiming gun
- <br>
- 5: Injured by gunshot / Dying
- <br>
- 6: Standing
- <br>
- 7: Firing gun
- <br> 28: Pierre
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Aiming guns
- <br>
- 5: Dying
- <br>
- 6: Putting guns away
- <br>
- 7: Firing guns
- <br> 29: Skateboard
- <br>
- 0: Being turned around
- <br>
- 1: Stationary
- <br>
- 2: Stationary
- <br>
- 3: Stationary
- <br>
- 4: Stationary
- <br> 30: Skateboard kid
- <br>
- 0: Turning and Aiming?
- <br>
- 1: Firing
- <br>
- 2: Skating
- <br>
- 3: Aiming
- <br>
- 4: Firing
- <br>
- 5: Dying
- <br> 31: Cowboy
- <br>
- 1: Aiming
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Aiming
- <br>
- 5: Dying
- <br>
- 6: Firing
- <br> 32: "Mr. T"
- <br>
- 0: Dying
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Aiming
- <br>
- 6: Firing
- <br> 33: Winged Natla (actually, Natla with
- a winged mutant)
- <br>
- 1: Standing
- <br>
- 2: Flying
- <br>
- 3: Running
- <br>
- 4: Aiming and firing
- <br>
- 5: "Dying" the first time
- <br>
- 7: Spinning around in air
- <br>
- 8: Standing
- <br>
- 9: Dying for real
- <br> 34: Giant mutant
- <br>
- 0: Dying
- <br>
- 1: Sitting on floor
- <br>
- 2: Pulling self forward
- <br>
- 4: Slapping with right hand
- <br>
- 5: Slapping with both hands
- <br>
- 6: Making big wave with right hand
- <br>
- 8: Dropping to floor after hatching
- <br>
- 9: Raising arms
- <br>
- 11: Shaking victim with right hand
- <br> 35: Collapsible floor
- <br>
- 0: Stationary
- <br>
- 1: Shaking
- <br>
- 2: Falling
- <br>
- 3: Settling down
- <br> 36: Swinging blade
- <br>
- 0: Stationary
- <br>
- 2: Swinging
- <br> 37: Spikes
- <br> [Only
- one state]
- <br> 38: Boulder
- <br>
- 0: Stationary
- <br>
- 1: Rolling
- <br> 39: Dart
- <br> [Only
- one state]
- <br> 40: Wall-mounted dartgun
- <br>
- 0: Idle?
- <br>
- 1: Firing?
- <br> 41: Door (opens upward)
- <br>
- 0: Upward
- <br>
- 1: On side
- <br> 42: Slamming doors
- <br>
- 0: Open
- <br>
- 1: Closed
- <br> 43: Sword of Damocles
- <br> [Only
- one state]
- <br> 44: Thor's hammer's handle
- <br>
- 0: Stationary in "up" position
- <br>
- 1: Moving down a little and returning
- <br>
- 2: Moving down all the way
- <br>
- 3: Stopped at "down" position
- <br> 45: Thor's hammer's block
- <br>
- 0: Stationary
- <br>
- 1: Moving down a little and returning
- <br>
- 2: Moving down all the way
- <br> 46: Hanging ball? / Some kind of box?
- <br> [Only
- one state]
- <br> 47: Metal rod? / Powered mining cart
- <br>
- 0: Stationary
- <br>
- 1: Moving
- <br> 48: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 49: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 50: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 51: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 52: Movable tall block
- <br>
- 0: Stationary
- <br>
- 1: Moving forward?
- <br>
- 2: Moving backward?
- <br> 53: Pieces of something?
- <br>
- 0: Stationary
- <br>
- 1: Falling
- <br>
- 2: Settling down
- <br> 54: Sword of Damocles
- <br> [Only
- one state]
- <br> 55: Above-water switch
- <br>
- 0: Off
- <br>
- 1: On
- <br>
- [states may be reversed]
- <br> 56: Underwater switch
- <br>
- 0: Off
- <br>
- 1: On
- <br>
- [states may be reversed]
- <br> 57: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 58: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 59: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 60: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 61: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 62: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 63: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 64: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 65: Trapdoor (opens downward)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 66: Trapdoor (opens downward)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br> 68: Bridge (flat)
- <br> [Only
- one state]
- <br> 69: Bridge (slope = 1)
- <br> [Only
- one state]
- <br> 70: Bridge (slope = 2)
- <br> [Only
- one state]
- <br> 71: Passport (opening up)
- <br> [Only
- one state]
- <br> 72: Compass
- <br> [Only
- one state]
- <br> 74: Cogs (animated)
- <br>
- 0: Stationary
- <br>
- 1: Turning
- <br> 75: Cogs (animated)
- <br>
- 0: Stationary
- <br>
- 1: Turning
- <br> 76: Cogs (animated)
- <br>
- 0: Stationary
- <br>
- 1: Turning
- <br> 77: Lara in CS / Scion holder in CS
- <br> 78: Larson in CS / Natla in CS / Scion
- holder in CS
- <br> 79: Larson's gun in CS / Scion in CS /
- Natla in CS
- <br> 80: Scion in CS
- <br> 81: Passport (closed)
- <br> [Only
- one state]
- <br> 82: N-thingy (Playstation memory card?)
- <br> [Only
- one state]
- <br> 83: Save crystal
- <br> [Only
- one state]
- <br> 84: * Pistols
- <br> 85: * Shotgun
- <br> 86: * Magnums
- <br> 87: * Uzis
- <br> 88: * Pistol ammo(?)
- <br> 89: * Shotgun ammo
- <br> 90: * Magnum ammo
- <br> 91: * Uzi ammo
- <br> 93: * Small medipack
- <br> 94: * Large medipack
- <br> 95: Sunglasses
- <br> [Only
- one state]
- <br> 96: Cassette player and headphones
- <br> [Only
- one state]
- <br> 97: Direction keys
- <br> [Only
- one state]
- <br> 99: Pistol
- <br> [Only
- one state]
- <br>100: Shotgun
- <br> [Only
- one state]
- <br>101: Magnum
- <br> [Only
- one state]
- <br>102: Uzi
- <br> [Only
- one state]
- <br>103: Pistol ammo(?)
- <br> [Only
- one state]
- <br>104: Shotgun ammo
- <br> [Only
- one state]
- <br>105: Magnum ammo
- <br> [Only
- one state]
- <br>106: Uzi ammo
- <br> [Only
- one state]
- <br>108: Small medipack
- <br> [Only
- one state]
- <br>109: Large medipack
- <br> [Only
- one state]
- <br>110: * Puzzle 1
- <br>111: * Puzzle 2
- <br>112: * Puzzle 3
- <br>113: * Puzzle 4
- <br>114: Puzzle 1
- <br> [Only
- one state]
- <br>115: Puzzle 2
- <br> [Only
- one state]
- <br>116: Puzzle 3
- <br> [Only
- one state]
- <br>117: Puzzle 4
- <br> [Only
- one state]
- <br>118: Slot 1 empty
- <br> [Only
- one state]
- <br>119: Slot 2 empty
- <br> [Only
- one state]
- <br>120: Slot 3 empty
- <br> [Only
- one state]
- <br>121: Slot 4 empty
- <br> [Only
- one state]
- <br>122: Slot 1 full
- <br> [Only
- one state]
- <br>123: Slot 2 full
- <br> [Only
- one state]
- <br>124: Slot 3 full
- <br> [Only
- one state]
- <br>125: Slot 4 full
- <br> [Only
- one state]
- <br>126: * Pickup 1
- <br>127: Pickup 1
- <br> [Only
- one state]
- <br>128: Lara's hips
- <br> [Only
- one state]
- <br>129: * Key 1
- <br>130: * Key 2
- <br>131: * Key 3
- <br>132: * Key 4
- <br>133: Key 1
- <br> [Only
- one state]
- <br>134: Key 2
- <br> [Only
- one state]
- <br>135: Key 3
- <br> [Only
- one state]
- <br>136: Key 4
- <br> [Only
- one state]
- <br>137: Lock 1
- <br> [Only
- one state]
- <br>138: Lock 2
- <br> [Only
- one state]
- <br>139: Lock 3
- <br> [Only
- one state]
- <br>140: Lock 4
- <br> [Only
- one state]
- <br>143: * Scion Piece
- <br>146: Complete Scion
- <br> [Only
- one state]
- <br>147: Scion Holder
- <br> [Only
- one state]
- <br>150: Scion Piece
- <br> [Only
- one state]
- <br>151: * Flare(?) / Explosion
- <br>153: * Splash
- <br>155: * Bubbles
- <br>156: * Bubbles
- <br>158: * Blood splatter
- <br>160: * Flying disk
- <br>161: Centaur statue
- <br> [Only
- one state]
- <br>162: Shack suspended from wire rope
- <br>
- 0: Starting position
- <br>
- 1: Dropping after first fuse
- <br>
- 2: Dropping after second fuse
- <br>
- 3: Dropping after third fuse (to ground)
- <br>
- 4: On the ground
- <br>163: Mutant egg and holder (normal size)
- <br>
- 0: Starting to hatch
- <br>
- 1: Hatching (is the fragmenting hardcoded?)
- <br>164: * Bullet hit
- <br>165: * Sparkle
- <br>166: Gunflare
- <br> [Only
- one state]
- <br>169: Lara's hips
- <br> [Only
- one state]
- <br>170: Lara's hips
- <br> [Only
- one state]
- <br>172: Mutant bullet
- <br> [Only
- one state]
- <br>173: Mutant grenade
- <br> [Only
- one state]
- <br>176: * Splatter
- <br>177: Lara's hips
- <br> [Only
- one state]
- <br>178: * Fire
- <br>179: Lara's hips
- <br> [Only
- one state]
- <br>180: Flowing Atlantean lava
- <br> [Only
- one state]
- <br>181: Mutant egg and holder (big)
- <br>
- 0: Starting to hatch
- <br>
- 1: Hatching (is the fragmenting hardcoded?)
- <br>182: Motorboat
- <br>
- 1: Stationary (initial)
- <br>
- 2: Moving
- <br>
- 3: Stationary (final)
- <br>183: Lara's hips
- <br> [Only
- one state]
- <br>189: Shrinking wedge?
- <br> [Only
- one state]
- <br>190: * Standard symbols
- <br>191: * Plant 1
- <br>192: * Plant 2
- <br>193: * Plant 3
- <br>194: * Plant 4
- <br>195: * Plant 5
- <br>200: * Bag 1
- <br>204: * Bag 2
- <br>207: Gunflare
- <br> [Only
- one state]
- <br>212: * Rock 1
- <br>213: * Rock 2
- <br>214: * Rock 3
- <br>215: * Bag 3
- <br>216: * Pottery 1
- <br>217: * Pottery 2
- <br>231: * Painted pot
- <br>233: * Inca mummy
- <br>236: * Pottery 3
- <br>237: * Pottery 4
- <br>238: * Pottery 5
- <br>239: * Pottery 6</font>
-
-
- <p><a NAME="Catalogs_TR2EntityStates"></a>
- <p><font color="#000080"><b><u>TR2 Entity States</u></b>
- <p>Comparing these to those of TR1, it seems rather difficult to map the NPC's, though
- doors and switches and stuff like that will map just fine.
- <br>
- <p>This contains the states of everything but Lara
- <p><i>Exception: Lara and the boats and snowmobiles</i>
- <p>* = sprite sequence; others are movable mesh objects
- <p> 0: Lara
- <br> 1: Lara pistol animation
- <br> 2: Lara's ponytail
- <br> 3: Lara shotgun animation
- <br> 4: Lara auto-pistol animation
- <br> 5: Lara Uzi animation
- <br> 6: Lara M16 animation
- <br> 7: Lara grenade-launcher animation
- <br> 8: Lara harpoon-gun animation
- <br> 9: Lara flare animation
- <br> 10: Lara's hips
- <br> Lara
- and the snowmobiles:
- <br>
- 0: Driving
- <br>
- 1: Climbing in from right
- <br>
- 2: Starting the engine
- <br>
- 3: Stopping the engine
- <br>
- 4: Jumping upward
- <br>
- 5: Driving
- <br>
- 6: Climbing in from left
- <br>
- 7: Climbing out to left
- <br>
- 8: Driving
- <br>
- 9: Climbing out to right
- <br> 10:
- Dying?
- <br> 11:
- Dying
- <br> 12:
- Thrown out of snowmobile and dying
- <br> 11: Lara's hips
- <br> Lara
- and the boats:
- <br>
- 0: Entering
- <br>
- 1: Driving (stationary)
- <br>
- 2: Driving (moving)
- <br>
- 3: Jumping out rightward (starboard)
- <br>
- 4: Jumping out leftward (port)
- <br>
- 6: Jumping upward
- <br>
- 8: Dying
- <p> Also
- has Lara hitting the gong with the hammer in the Ice Palace
- <p> 12: Lara's hips / Lara dagger animation
- <p> Lara
- examining Dagger of Xian pulled from Bartoli dragon's belly
- <p> 13: Red snowmobile (can go fast)
- <br> [various
- states of vibration]
- <br>
- 0:
- <br>
- 1:
- <br>
- 2:
- <br>
- 4: Going slightly upwards
- <br>
- 6:
- <br>
- 7:
- <br>
- 8:
- <br> 10:
- Going off a ledge
- <br> 11:
- <br> 14: Boat
- <br> [various
- states of rocking/pitching]
- <br>
- 0:
- <br>
- 1:
- <br>
- 2:
- <br>
- 3:
- <br> 15: Doberman
- <br>
- 1: Walking
- <br>
- 2: Running
- <br>
- 3: Standing
- <br>
- 4: Biting
- <br>
- 5: Sitting on all fours
- <br>
- 6: Standing and panting
- <br>
- 7: Biting
- <br>
- 8: Jumping and biting
- <br>
- 9: Jumping and biting
- <br> 10:
- Dying
- <br> 16: Masked goon (white mask, jacket)
- <br>
- 1: Walking
- <br>
- 2: Running
- <br>
- 3: Standing and aiming gun
- <br>
- 4: Standing and aiming gun
- <br>
- 5: Standing and shaking head
- <br>
- 6: Standing and aiming gun, bracing self
- <br>
- 7: Firing gun, bracing self
- <br>
- 9: Running while aiming gun
- <br> 10:
- Standing and aiming gun
- <br> 11:
- Firing gun
- <br> 12:
- Dying
- <br> 13:
- Dying
- <br> 17: Masked goon (white mask, vest)
- <br>
- 0: Standing (animations recycled)
- <br> 18: Masked goon (black mask)
- <br>
- 0: Standing (animations recycled)
- <br> 19: Knifethrower
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Throwing with right hand
- <br>
- 5: Throwing with left hand
- <br>
- 6: Throwing with left hand
- <br>
- 7: Throwing with right hand
- <br>
- 8: Throwing with both hands
- <br>
- 9: Throwing with both hands
- <br> 10:
- Dying
- <br> 20: Shotgun goon
- <br>
- 1: Standing, guns up
- <br>
- 2: Standing, guns holstered
- <br>
- 3: Walking, guns up
- <br>
- 4: Running
- <br>
- 5: Aiming right gun
- <br>
- 6: Aiming left gun
- <br>
- 7: Firing right gun
- <br>
- 8: Firing left gun
- <br>
- 9: Aiming both guns
- <br> 10:
- Firing both guns
- <br> 11:
- Dying
- <br> 21: Rat
- <br>
- 1: Running
- <br>
- 2: Standing on all fours
- <br>
- 3: Rearing up, biting?
- <br>
- 4: Biting
- <br>
- 5: Rearing up and biting
- <br>
- 6: Dying
- <br> 22: Dragon (front)
- <br>
- 1: Walking
- <br>
- 2: Walking, looking leftward
- <br>
- 3: Walking, looking rightward
- <br>
- 4: Rearing up
- <br>
- 5: Breathing fire in reared-up position
- <br>
- 6: Standing
- <br>
- 7: Back to forward position
- <br>
- 8: Walking
- <br>
- 9: Raising left foot
- <br> 10:
- Raising right foot
- <br> 11:
- Dying
- <br> 23: Dragon (back)
- <br> [various
- standing and walking states]
- <br>
- 1:
- <br>
- 2:
- <br>
- 3:
- <br>
- 6:
- <br>
- 7:
- <br>
- 8:
- <br>
- 9:
- <br> 10:
- <br> 11:
- Dying
- <br> 24: Gondola (Venetian boat)
- <br> [Seems
- to be static, as if animations were unused]
- <br> [Fragmentation
- probably hardcoded]
- <br>
- 1:
- <br>
- 2:
- <br>
- 3:
- <br>
- 4:
- <br> 25: Shark
- <br>
- 0: Standing still
- <br>
- 1: Swimming
- <br>
- 2: Swimming fast
- <br>
- 3: Biting
- <br>
- 4: Biting
- <br>
- 5: Dying
- <br>
- 6: Shaking victim in mouth
- <br> 26: Yellow moray eel
- <br>
- 1: Biting
- <br>
- 2: Wiggling head
- <br>
- 3: Dying
- <br> 27: Black moray eel
- <br>
- 1: Biting
- <br>
- 2: Wiggling head
- <br>
- 3: Dying
- <br> 28: Barracuda / Whiskered Fish (white,
- yellow)
- <br>
- 1: Standing still
- <br>
- 2: Swimming
- <br>
- 3: Swimming fast
- <br>
- 4: Biting
- <br>
- 5: Biting
- <br>
- 6: Dying
- <br> 29: Scuba diver
- <br>
- 1: Swimming
- <br>
- 2: Treading water
- <br>
- 3: Swimming, wielding harpoon gun
- <br>
- 4: Swimming, wielding harpoon gun
- <br>
- 6: Treading water, wielding harpoon gun
- <br>
- 7: Treading water, firing harpoon gun
- <br>
- 9: Dying
- <br> 30: Gun-wielding rig worker (khaki pants)
- <br>
- 1: Walking
- <br>
- 2: Standing
- <br>
- 3: Standing with gun upward
- <br>
- 4: Firing gun
- <br>
- 5: Running
- <br>
- 6: Grabbing gun
- <br>
- 7: Dying
- <br>
- 8: Aiming gun
- <br>
- 9: Crouching and aiming gun
- <br> 10:
- Crouching and firing gun
- <br> 31: Gun-wielding rig worker (blue jeans)
- <br>
- 1: Standing while wielding gun
- <br>
- 2: Walking 324
- <br>
- 3: Running
- <br>
- 4: Standing with gun pointed downward
- <br>
- 5: Firing gun
- <br>
- 6: Running while firing gun
- <br>
- 7: Dying
- <br>
- 8: Aiming gun
- <br>
- 9: Running and aiming gun
- <br> 10:
- Crouching and aiming gun
- <br> 11:
- Crouching and firing gun
- <br> 32: Stick-wielding goon
- <br>
- 1: Standing
- <br>
- 2: Running
- <br>
- 3: Big sideways hit
- <br>
- 4: Hitting with stick
- <br>
- 5: Standing, holding stick with both hands
- <br>
- 6: Running, ready for big hit with stick
- <br>
- 7: Standing, ready for big hit with stick
- <br>
- 8: Making big hit with stick
- <br>
- 9: Hitting with stick
- <br> 10:
- Running, holding stick with both hands
- <br> 11:
- Dying
- <br> 12:
- Stepping up
- <br> 13:
- Climbing up low ledge
- <br> 14:
- Climbing up ledge
- <br> 15:
- Jumping down from a ledge
- <br> 33: Stick-wielding goon (can't climb)
- <br>
- 1: Standing
- <br>
- 2: Running
- <br>
- 3: Big sideways hit
- <br>
- 4: Hitting with stick
- <br>
- 5: Standing, holding stick with both hands
- <br>
- 6: Running, ready for big hit with stick
- <br>
- 7: Standing, ready for big hit with stick
- <br>
- 8: Making big hit with stick
- <br>
- 9: Hitting with stick
- <br> 10:
- Running, holding stick with both hands
- <br> 11:
- Dying
- <br> 34: Flamethrower-wielding goon
- <br>
- 1: Standing
- <br>
- 2: Running
- <br>
- 3: Running, holding nozzle horizontal
- <br>
- 4: Standing, pointing nozzle downward
- <br>
- 5: Firing
- <br>
- 6: Firing while walking
- <br>
- 7: Dying
- <br>
- 8: Aiming
- <br>
- 9: Aiming while running
- <br> 36: Spider
- <br>
- 1: Standing
- <br>
- 2: Crawling
- <br>
- 3: Crawling
- <br>
- 4: Biting
- <br>
- 5: Jumping
- <br>
- 6: Jumping
- <br>
- 7: Dying
- <br> 37: Giant spider
- <br>
- 1: Standing
- <br>
- 2: Crawling
- <br>
- 3: Crawling fast
- <br>
- 4: Biting
- <br>
- 7: Dying
- <br> 38: Crow
- <br>
- 1: Flying
- <br>
- 2: Flying in place
- <br>
- 3: Flying
- <br>
- 4: Dying
- <br>
- 5: Dying
- <br>
- 6: Pecking
- <br>
- 7: Pecking
- <br>39: Tiger / Snow leopard / White tiger
- <br>
- 0: Dying
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Leaping
- <br>
- 5: Biting
- <br>
- 6: Biting
- <br>
- 7: Leaping and biting
- <br>
- 8: Leaping and biting
- <br> 40: Marco Bartoli
- <br> [Only
- one state]
- <br> 41: Spear-wielding Xian Guard
- <br>
- 1: Holding spears upward
- <br>
- 2: Holding spears horizontal forward-right
- <br>
- 3: Walking while pointing spears forward
- <br>
- 4: Running while pointing spears forward
- <br>
- 5: Picking up spears, pointing them backward
- <br>
- 6: Pointing spears forward
- <br>
- 7: Pointing spears downward and back
- <br>
- 8: Pointing spears forward
- <br>
- 9: Walking, moving right spear forward
- <br> 10:
- Thrusting left spear forward
- <br> 11:
- Walking, moving left spear forward
- <br> 12:
- Thrusting right spear forward
- <br> 13:
- Turning spears rightward
- <br> 14:
- Turning spears leftward
- <br> 15:
- Pulling up spears and pointing them back-downward
- <br> 16:
- Twirling spears over head
- <br> 18:
- Getting up from statue position
- <br> 19:
- Spearing victim and tossing forward
- <br>42: Spear-wielding Xian Guard statue
- <br> [Only
- one state]
- <br> [fragmenting
- probably hardcoded]
- <br>43: Sword-wielding Xian Guard
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Swinging sword back over head
- <br>
- 4: Swinging sword forward over head
- <br>
- 5: Swinging sword sideways to back
- <br>
- 6: Swinging sword sideways to forward
- <br>
- 7: Holding sword pointed downward
- <br>
- 8: Flying while holding sword
- <br>
- 9: Getting up from statue position
- <br> 10:
- Moving sword back while walking (swing over shoulder / pull back)
- <br> 11:
- Moving sword forward while walking (swing forward / thrust)
- <br>44: Sword-wielding Xian Guard statue
- <br> [Only
- one state]
- <br> [fragmenting
- probably hardcoded]
- <br>45: Yeti
- <br>
- 1: Running
- <br>
- 2: Standing
- <br>
- 3: Walking
- <br>
- 4: Punching
- <br>
- 5: Reaching and swiping downward
- <br>
- 6: Running and punching
- <br>
- 7: Howling
- <br>
- 8: Dying
- <br>
- 9: Thumping chest
- <br> 10:
- Stepping up
- <br> 11:
- Climbing up a short ledge
- <br> 12:
- Climbing up a ledge
- <br> 13:
- Jumping down from a ledge
- <br> 14:
- Holding victim and waving
- <br> 46: Bird monster (guards Talion)
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Looking upward
- <br>
- 4: Swiping downward
- <br>
- 5: Getting ready to punch
- <br>
- 6: Punching
- <br>
- 7: Punching
- <br>
- 8: Howling
- <br>
- 9: Dying
- <br> 10:
- Pulling arms out
- <br> 11:
- Getting hands together in front
- <br> 47: Eagle
- <br>
- 1: Flying
- <br>
- 2: Perching?
- <br>
- 3: Gliding
- <br>
- 4: Dying
- <br>
- 5: Dying
- <br>
- 6: Pecking
- <br> 48: Mercenary
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Aiming gun
- <br>
- 5: Firing gun
- <br>
- 6: Aiming gun two-handed
- <br>
- 7: Firing gun two-handed
- <br>
- 8: Firing gun in a sweep
- <br>
- 9: Firing gun in continued sweep
- <br> 10:
- Aiming gun while walking
- <br> 11:
- Aiming gun sideways
- <br> 12:
- Aiming gun while walking
- <br> 13:
- Dying
- <br> 14:
- Firing gun while walking
- <br> 49: Mercenary (black ski mask, gray jacket)
- <br>
- 1: Aiming gun while walking
- <br>
- 2: Standing
- <br>
- 3: Walking
- <br>
- 4: Running
- <br>
- 5: Aiming gun
- <br>
- 6: Aiming gun two-handed
- <br>
- 7: Firing gun
- <br>
- 8: Aiming gun two-handed
- <br>
- 9: Firing gun while walking
- <br> 10:
- Firing gun while walking
- <br> 11:
- Dying
- <br> 12:
- Squatting and aiming
- <br> 13:
- Squatting and firing
- <br> 50: Mercenary (black ski mask, brown jacket)
- <br> 0:
- Standing (animations recycled)
- <br> 51: Black snowmobile (with guns)
- <br>
- 1: Idle
- <br>
- 2: Moving
- <br>
- 3: Turning left
- <br>
- 4: Turning right
- <br>
- 5: Turning left
- <br>
- 6: Turning right
- <br> 52: Mercenary snowmobile driver
- <br>
- 1: Driving (idle)
- <br>
- 2: Driving (moving)
- <br>
- 3: Turning left
- <br>
- 4: Turning right
- <br>
- 5: Turning left
- <br>
- 6: Turning right
- <br>
- 7: Dying
- <br> 53: Monk with long stick
- <br>
- 1: Standing and wielding stick
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Slicing with stick
- <br>
- 5: Twirling stick and holding out hand
- <br>
- 6: Stabbing forward with stick
- <br>
- 7: Spearing with stick
- <br>
- 8: Twirling stick overhead
- <br>
- 9: Dying
- <br> 10:
- Holding stick out and running
- <br> 11:
- Holding stick and putting out hand
- <br> 54: Monk with knife-end stick
- <br>
- 1: Standing and wielding stick
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 4: Slicing with stick
- <br>
- 5: Twirling stick and holding out hand
- <br>
- 6: Stabbing forward with stick
- <br>
- 7: Spearing with stick
- <br>
- 8: Twirling stick to side and overhead
- <br>
- 9: Dying
- <br> 10:
- Holding stick out and running
- <br> 11:
- Holding stick and putting out hand
- <br> 55: Collapsible floor
- <br>
- 0: Stationary
- <br>
- 1: Shaking
- <br>
- 2: Falling
- <br>
- 3: Settling down
- <br> 57: Loose boards
- <br>
- 0: Stationary
- <br>
- 1: Shaking
- <br>
- 2: Falling
- <br>
- 3: Settling down
- <br> 58: Swinging sandbag / spiky ball
- <br> [Only
- one state]
- <br> 59: Spikes / Glass shards
- <br> [Only
- one state]
- <br> 60: Boulder
- <br>
- 0: Stationary
- <br>
- 1: Rolling
- <br> 61: Disk (like dart)
- <br> [Only
- one state]
- <br> 62: Wall-mounted disk shooter (like dartgun)
- <br>
- 0: Idle?
- <br>
- 1: Firing?
- <br> 63: Drawbridge
- <br>
- 0: Upward
- <br>
- 1: On side
- <br> 64: Slamming door
- <br>
- 0: Open
- <br>
- 1: Closed
- <br> 65: Elevator
- <br>
- 0: Doors closed
- <br>
- 1: Doors open
- <br> 66: Minisub
- <br> [Only
- one state]
- <br> 67: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 68: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 69: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 70: Movable cubical block (pushable)
- <br>
- 0: Stationary
- <br>
- 1: Being pulled?
- <br>
- 2: Being pushed?
- <br> 71: Big bowl (Ice Palace)
- <br>
- 0: Horizontal
- <br>
- 1: Tipped
- <br> 72: Breakable window (can shoot out)
- <br> [Only
- one state]
- <br> [fragmenting
- probably hardcoded]
- <br> 73: Breakable window (must jump through)
- <br> [Only
- one state]
- <br> [fragmenting
- probably hardcoded]
- <br> 76: Airplane propeller
- <br>
- 0: Spinning
- <br>
- 1: Stopped
- <br> 77: Power saw
- <br>
- 0: Spinning
- <br>
- 1: Stopped
- <br> 78: Overhead pulley hook
- <br> [Only
- one state]
- <br> 79: Sandbag / Ceiling fragments
- <br>
- 0: Stationary
- <br>
- 1: Falling
- <br>
- 2: Settling down
- <br> 80: Rolling spindle
- <br>
- 1: Stationary
- <br>
- 2: Rolling
- <br> 81: Wall-mounted knife blade
- <br>
- 1: Extended
- <br>
- 2: Pulled back
- <br> 82: Statue with knife blade
- <br>
- 1: Pulled back
- <br>
- 2: Extended
- <br> 83: Multiple boulders / snowballs
- <br>
- 1: Rolling
- <br>
- 2: Stopped
- <br> 84: Detachable icicles
- <br>
- 1: Attached to ceiling
- <br>
- 2: Falling
- <br>
- 3: On ground
- <br> 85: Spiky movable wall
- <br> [Only
- one state]
- <br> 86: Bounce pad
- <br>
- 0: Idle
- <br>
- 1: Kicking upwards
- <br> 87: Spiky ceiling segment
- <br> [Only
- one state]
- <br> 88: Tibetan bell
- <br>
- 0: Stationary
- <br>
- 1: Swinging
- <br> 89: * Boat wake (Venice, Bartoli)
- <br> 90: * Snowmobile wake (Tibetan Foothills)
- <br> 91: Lara and a snowmobile
- <br> [Only
- one state]
- <br> 92: Wheel knob
- <br>
- 0: Parent door closed
- <br>
- 1: Parent door open
- <br> 93: Above-water switch
- <br>
- 0: Off
- <br>
- 1: On
- <br>
- [states may be reversed]
- <br> 94: Underwater propeller
- <br>
- 0: Spinning
- <br>
- 1: Stopped
- <br> 95: Air fan
- <br>
- 0: Spinning
- <br>
- 1: Stopped
- <br> 96: Swinging box / spiky ball
- <br> [Only
- one state]
- <br> 97: Gun-wielding rig worker / Marco Bartoli
- (unused?)
- <br> 98: Goon at the fancy door holding poison
- bottle / Gun-wielding rig worker
- <br> 99: Lara in cutscene
- <br>100: * Frame (for indicator bars)
- <br>101: Rolling storage drums
- <br>
- 1: Rolling
- <br>
- 2: Stopped
- <br>102: Zipline handle
- <br>
- 1: Moving
- <br>
- 2: Settling down
- <br>103: Above-water switch
- <br>
- 0: Off
- <br>
- 1: On
- <br>
- [states may be reversed]
- <br>104: Above-water/underwater switch
- <br>
- 0: Off
- <br>
- 1: On
- <br>
- [states may be reversed]
- <br>105: Underwater switch
- <br>
- 0: Off
- <br>
- 1: On
- <br>
- [states may be reversed]
- <br>106: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>107: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>108: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>109: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>110: Door
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>111: Door (pulled upward in Temple of Xian)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>112: Door (pulled upward in Temple of Xian)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>113: Door (pulled upward)
- <br> 0:
- Closed
- <br>
- 1: Open
- <br>114: Trapdoor (opens downward)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>115: Trapdoor (opens downward)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>116: Trapdoor (opens downward)
- <br>
- 0: Closed
- <br>
- 1: Open
- <br>117: Bridge (flat)
- <br> [Only
- one state]
- <br>118: Bridge (slope = 1)
- <br> [Only
- one state]
- <br>119: Bridge (slope = 2)
- <br> [Only
- one state]
- <br>120: Passport (opening up)
- <br> [Only
- one state]
- <br>121: Stopwatch
- <br> [Only
- one state]
- <br>122: Lara and butler picture
- <br> [Only
- one state]
- <br>123: Goon at the fancy door / Monk
- <br>124: Airplane cockpit / Marco Bartoli
- <br>125: Fancy-door goon's gunflare / Crate lid /
- Minisub / Bartoli follower
- <br>126: Fancy-door goon's gun / Ceiling hook
- <br>127: Fancy-door goon's gunflare / Marco Bartoli
- / Lara's boot (thrown) / Bartoli follower
- <br>128: Laptop computer / Fabio / Marco Bartoli
- / Bartoli follower
- <br>129: Crate / Bartoli follower
- <br>130: Eros the Goon
- <br>133: Passport (closed)
- <br> [Only
- one state]
- <br>134: N-thingy (Playstation memory card?)
- <br> [Only
- one state]
- <br>135: * Pistols
- <br>136: * Shotgun
- <br>137: * Auto pistols
- <br>138: * Uzis
- <br>139: * Harpoon gun
- <br>140: * M16
- <br>141: * Grenade launcher
- <br>143: * Shotgun shells
- <br>144: * Auto-pistol clips
- <br>145: * Uzi clips
- <br>146: * Harpoons
- <br>147: * M16 clips
- <br>148: * Grenades
- <br>149: * Small medipack
- <br>150: * Large medipack
- <br>151: * Flares
- <br>152: Flare
- <br> [Only
- one state]
- <br>153: Sunglasses
- <br> [Only
- one state]
- <br>154: Portable CD player
- <br> [Only
- one state]
- <br>155: Direction keys
- <br> [Only
- one state]
- <br>157: Pistol
- <br> [Only
- one state]
- <br>158: Shotgun
- <br> [Only
- one state]
- <br>159: Auto-pistol
- <br> [Only
- one state]
- <br>160: Uzi
- <br> [Only
- one state]
- <br>161: Harpoon gun
- <br> [Only
- one state]
- <br>162: M16
- <br> [Only
- one state]
- <br>163: Grenade launcher
- <br> [Only
- one state]
- <br>164: Pistol ammo(?)
- <br> [Only
- one state]
- <br>165: Shotgun ammo
- <br> [Only
- one state]
- <br>166: Auto-pistol ammo
- <br> [Only
- one state]
- <br>167: Uzi ammo
- <br> [Only
- one state]
- <br>168: Harpoons
- <br> [Only
- one state]
- <br>169: M16 ammo
- <br> [Only
- one state]
- <br>170: Grenades
- <br> [Only
- one state]
- <br>171: Small medipack
- <br> [Only
- one state]
- <br>172: Large medipack
- <br> [Only
- one state]
- <br>173: Flares (opening box)
- <br> [Only
- one state]
- <br>174: * Puzzle 1
- <br>175: * Puzzle 2
- <br>176: * Puzzle 3 ? [unused]
- <br>177: * Puzzle 4
- <br>178: Puzzle 1
- <br> [Only
- one state]
- <br>179: Puzzle 2
- <br> [Only
- one state]
- <br>180: Puzzle 3 ? [unused]
- <br> [Only
- one state]
- <br>181: Puzzle 4
- <br> [Only
- one state]
- <br>182: Slot 1 empty
- <br> [Only
- one state]
- <br>183: Slot 2 empty
- <br> [Only
- one state]
- <br>184: Slot 3 empty ? [unused]
- <br> [Only
- one state]
- <br>185: Slot 4 empty
- <br> [Only
- one state]
- <br>186: Slot 1 full
- <br> [Only
- one state]
- <br>187: Slot 2 full
- <br> [Only
- one state]
- <br>188: Slot 3 full ? [unused]
- <br> [Only
- one state]
- <br>189: Slot 4 full
- <br> [Only
- one state]
- <br>190: * Dragon 1
- <br>191: * Dragon 2
- <br>192: * Dragon 3
- <br>193: * Key 1
- <br>194: * Key 2
- <br>195: * Key 3
- <br>196: * Key 4
- <br>197: Key 1
- <br> [Only
- one state]
- <br>198: Key 2
- <br> [Only
- one state]
- <br>199: Key 3
- <br> [Only
- one state]
- <br>200: Key 4
- <br> [Only
- one state]
- <br>201: Lock 1
- <br> [Only
- one state]
- <br>202: Lock 2
- <br> [Only
- one state]
- <br>203: Lock 3
- <br> [Only
- one state]
- <br>204: Lock 4
- <br> [Only
- one state]
- <br>205: * Pickup 1
- <br>206: * Pickup 2
- <br>207: Pickup 1
- <br> [Only
- one state]
- <br>208: Pickup 2
- <br> [Only
- one state]
- <br>209: Dragon explosion effect (expanding netted
- bubble)
- <br> [Only
- one state]
- <br>210: Dragon explosion effect (expanding netted
- bubble)
- <br> [Only
- one state]
- <br>211: Dragon explosion effect (expanding solid
- bubble)
- <br> [Only
- one state]
- <br>212: Lara's hips / Alarm
- <br> [Only
- one state]
- <br>213: Lara's hips
- <br> [Only
- one state]
- <br>214: Tyrannosaur
- <br>
- 1: Standing
- <br>
- 2: Walking
- <br>
- 3: Running
- <br>
- 5: Dying
- <br>
- 6: Bellowing
- <br>
- 7: Biting
- <br>
- 8: Shaking Head and Spitting Out
- <br>215: Lara's hips
- <br> [Only
- one state]
- <br>216: Lara's hips
- <br> [Only
- one state]
- <br>217: Lara's hips
- <br> [Only
- one state]
- <br>218: Dragon bones (front)
- <br> [Only
- one state]
- <br>219: Dragon bones (back)
- <br> [Only
- one state]
- <br>220: * Extra Fire (Ice Palace)
- <br>222: Aquatic Mine (Venice)
- <br> [Only
- one state]
- <br>223: Menu background (displayed when doing 3D-hardware
- rendering)
- <br> [Only
- one state]
- <br>224: * Gray disk
- <br>225: Gong-hammering animation
- <br> [Only
- one state]
- <br>226: Gong (Ice Palace)
- <br> [Only
- one state]
- <br>227: Detonator box
- <br> [Only
- one state]
- <br>228: Helicopter (Diving Area)
- <br> [Only
- one state]
- <br>229: * Grenade blast
- <br>230: * Splash
- <br>231: * Bubbles
- <br>233: * Blood splatter
- <br>234: * Green-white thing (Great Wall)
- <br>235: Flare burning?
- <br> [Only
- one state]
- <br>236: * Flash (looks like distant light)
- <br>238: * Bullet hit
- <br>239: * Sparkles (Floating Islands, Dragon's Lair)
- <br>240: Gunflare
- <br> [Only
- one state]
- <br>241: Gunflare (spiky)
- <br> [Only
- one state]
- <br>243: Lara's hips
- <br> [Only
- one state]
- <br>244: Lara's hips
- <br> [Only
- one state]
- <br>245: Rod?
- <br> [Only
- one state]
- <br>246: * Flamethrower (repeat of grenade blast)
- <br>247: Pointer?
- <br> [Only
- one state]
- <br>248: Support?
- <br> [Only
- one state]
- <br>249: Rod?
- <br> [Only
- one state]
- <br>250: * Sprayed particles (Diving Area, Barkhang
- Monastery, Temple of Xian)
- <br>252: * Fire
- <br>253: Lara's hips
- <br> [Only
- one state]
- <br>254: Skybox
- <br> [Only
- one state]
- <br>255: * Standard symbols
- <br>256: Monk
- <br> [Only
- one state]
- <br>257: Lara's hips
- <br> [Only
- one state]
- <br>259: Helicopter (The Great Wall)
- <br> [Only
- one state]
- <br>260: The butler
- <br>
- 1: Walking
- <br>
- 2: Standing
- <br>261: * Assault-course numerals and punctuation
- <br>262: Lara's hips
- <br> [Only
- one state]
- <br>263: Shotgun
- <br> [Only
- one state]
- <br>264: Lara's hips
- <br> [Only
- one state]
- <br>289: * Cellar artifact 1 (gold mask)
- <br>290: * Cellar artifact 2 (rounded statue)
- <br>291: * Cellar artifact 3 (flattened statue)</font>
- <br>
-
-
-
-
- <p><b>These are animation identifications for TR1 and TR2</b>
- <p><b>The format of each one is:</b>
- <p><b>Number#: Identification</b>
- <br><b> Next Animation Number</b>
- <br><b> Bones1[] Opcode Identification</b>
- <br><b> Sounds</b>
-
-
- <p><a NAME="Catalogs_TR1Animations"></a><font color="#800000"><b><u>TR1 Animations:</u></b>
- <p><b>Movable 0: Basic Lara</b>
- <p><b>0: Running</b>
- <br><b> 0</b>
- <br><b> Footstep</b>
- <br><b>1: Walking carefully</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>2: Sidestep?</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>3: Sidestep?</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>4: Run a bit</b>
- <br><b> 0</b>
- <br><b>5: Run a bit</b>
- <br><b> 0</b>
- <br><b>6: Start running</b>
- <br><b> 0</b>
- <br><b> Footstep</b>
- <br><b>7: Run to walk?</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>8: Stop running</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>9: Run half a cycle?</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>10: Stop running? End a jump?</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>11: Stationary</b>
- <br><b> 103</b>
- <br><b>12: Sidestep left</b>
- <br><b> 12</b>
- <br><b> Footstep</b>
- <br><b>13: Sidestep right</b>
- <br><b> 13</b>
- <br><b> Footstep</b>
- <br><b>14: Landing on feet?</b>
- <br><b> 15</b>
- <br><b> Landing on feet</b>
- <br><b>15: Getting up on feet</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>16: Jump</b>
- <br><b> 17</b>
- <br><b> [Opcode 2]</b>
- <br><b> Jump</b>
- <br><b>17: Into the air</b>
- <br><b> 77</b>
- <br><b>18: Jump</b>
- <br><b> 19</b>
- <br><b> [Opcode 2]</b>
- <br><b> Jump</b>
- <br><b>19: Into the air</b>
- <br><b> 77</b>
- <br><b>20: Moving slightly leftward</b>
- <br><b> 21</b>
- <br><b>21: Leftward to forward?</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>22: Landing</b>
- <br><b> 23</b>
- <br><b>23: Landing</b>
- <br><b> 23</b>
- <br><b>24: Landing, then getting up</b>
- <br><b> 11</b>
- <br><b> Landing on feet, then
- htting wall</b>
- <br><b>25: Dying</b>
- <br><b> 25</b>
- <br><b> Dying with broken bones</b>
- <br><b>26: Jump upwards</b>
- <br><b> [Opcode 2]</b>
- <br><b> 27</b>
- <br><b>27: Jump upwards</b>
- <br><b> 28</b>
- <br><b> Jump</b>
- <br><b>28: Jumping upwards</b>
- <br><b> 28</b>
- <br><b>29: Grabbing?</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> 96</b>
- <br><b>30: Landing</b>
- <br><b> 23</b>
- <br><b>31: Landing</b>
- <br><b> 11</b>
- <br><b> Landing on feet</b>
- <br><b>32: Pulling herself up?</b>
- <br><b> 33</b>
- <br><b>33: Landing</b>
- <br><b> 23</b>
- <br><b> Landing on feet, then
- htting wall</b>
- <br><b>34: In the air?</b>
- <br><b> 35</b>
- <br><b>35: In the air?</b>
- <br><b> 35</b>
- <br><b>36: Jumping up?</b>
- <br><b> 23</b>
- <br><b>37: Jumping up?</b>
- <br><b> 23</b>
- <br><b>38: Getting to standstill</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>39: Getting to standstill</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>40: Walking backward</b>
- <br><b> 40</b>
- <br><b> Footstep</b>
- <br><b>41: Starting to walk backward</b>
- <br><b> 40</b>
- <br><b>42: Pulling herself up a ledge</b>
- <br><b> 11</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> Pulling herself up</b>
- <br><b>43: Starting to run</b>
- <br><b> 6</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> [Opcode 3]</b>
- <br><b>44: Sidestepping rightward</b>
- <br><b> 44</b>
- <br><b> Footstep</b>
- <br><b>45: Falling</b>
- <br><b> 23</b>
- <br><b>46: Falling</b>
- <br><b> 0</b>
- <br><b>47: Flipover?</b>
- <br><b> 48</b>
- <br><b>48: Flip-to-standing?</b>
- <br><b> 11</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b> Footstep</b>
- <br><b>49: Falling</b>
- <br><b> 23</b>
- <br><b>50: Stepping up</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> 51</b>
- <br><b> Stepping up?</b>
- <br><b>51: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>52: Starting to run</b>
- <br><b> 6</b>
- <br><b>53: Hitting wall</b>
- <br><b> 11</b>
- <br><b> Hitting wall</b>
- <br><b>54: Hitting wall</b>
- <br><b> 11</b>
- <br><b> Hitting wall</b>
- <br><b>55: Stepping up</b>
- <br><b> 0</b>
- <br><b> Footstep</b>
- <br><b>56: Stepping up</b>
- <br><b> 0</b>
- <br><b> Footstep</b>
- <br><b>57: Stepping up</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>58: Stepping down</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>59: Stepping down</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>60: Stepping down</b>
- <br><b> 1</b>
- <br><b> Footstep</b>
- <br><b>61: Stepping down backward</b>
- <br><b> 40</b>
- <br><b> Footstep</b>
- <br><b>62: Stepping down backward</b>
- <br><b> 40</b>
- <br><b> Footstep</b>
- <br><b>63: Pulling lever</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pulling metal lever</b>
- <br><b>64: Pushing lever back</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Metal-lever reset (pushing
- it back)</b>
- <br><b>65: Sidestep right</b>
- <br><b> 65</b>
- <br><b> Footstep</b>
- <br><b>66: To standing position</b>
- <br><b> 11</b>
- <br><b>67: Sidestep left</b>
- <br><b> 67</b>
- <br><b>68: To standing position</b>
- <br><b> 11</b>
- <br><b>69: Sidestep right</b>
- <br><b> 69</b>
- <br><b>70: Sliding</b>
- <br><b> 70</b>
- <br><b> Sliding</b>
- <br><b>71: Recovering from slide?</b>
- <br><b> 72</b>
- <br><b> Footstep</b>
- <br><b>72: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>73: Starting a standing jump</b>
- <br><b> 91</b>
- <br><b> Stepping up?</b>
- <br><b>74: Jump?</b>
- <br><b> [Opcode 2]</b>
- <br><b> 75</b>
- <br><b>75: Backflip</b>
- <br><b> 75</b>
- <br><b>76: Jump</b>
- <br><b> [Opcode 2]</b>
- <br><b> 77</b>
- <br><b>77: Landing</b>
- <br><b> 77</b>
- <br><b>78: Jump Left</b>
- <br><b> [Opcode 2]</b>
- <br><b> 79</b>
- <br><b>79: Leftward Roll</b>
- <br><b> 79</b>
- <br><b>80: Jump Right</b>
- <br><b> [Opcode 2]</b>
- <br><b> 81</b>
- <br><b>81: Rightward Roll</b>
- <br><b> 81</b>
- <br><b>82: Landing on Feet after a Fall</b>
- <br><b> 11</b>
- <br><b> Landing on feet</b>
- <br><b>83: Falling?</b>
- <br><b> 23</b>
- <br><b>84: Falling?</b>
- <br><b> 23</b>
- <br><b>85: Falling?</b>
- <br><b> 23</b>
- <br><b>86: Swimming</b>
- <br><b> [Opcode 6: 3, 3]</b>
- <br><b> 86</b>
- <br><b> Swimming</b>
- <br><b>87: Swimming stationary</b>
- <br><b> 87</b>
- <br><b>88: Pushing something?</b>
- <br><b> 89</b>
- <br><b>89: Jump backwards</b>
- <br><b> 90</b>
- <br><b> Footstep</b>
- <br><b>90: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>91: Jumping upwards</b>
- <br><b> [Opcode 2]</b>
- <br><b> 28</b>
- <br><b>92: Running</b>
- <br><b> 0</b>
- <br><b> Footstep</b>
- <br><b>93: Fall</b>
- <br><b> 93</b>
- <br><b>94: Jump with getting ready to grab</b>
- <br><b> 95</b>
- <br><b>95: Jump with being ready to grab</b>
- <br><b> 95</b>
- <br><b>96: Grabbing a ledge</b>
- <br><b> 96</b>
- <br><b> Ledge grabbing?</b>
- <br><b>97: Pulling herself up</b>
- <br><b> 102</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> Pulling up</b>
- <br><b>98: Falling?</b>
- <br><b> 23</b>
- <br><b>99: Landing?</b>
- <br><b> 82</b>
- <br><b> Landing on feet</b>
- <br><b>100: Jump with being ready to grab</b>
- <br><b> 95</b>
- <br><b>101: Jump with being ready to grab</b>
- <br><b> 95</b>
- <br><b>102: Stationary</b>
- <br><b> 11</b>
- <br><b>103: Stationary and breathing</b>
- <br><b> 103</b>
- <br><b>104: Starting to slide while looking rightward</b>
- <br><b> 105</b>
- <br><b> Landing on feet</b>
- <br><b>105: Sliding while looking rightward</b>
- <br><b> 105</b>
- <br><b> Sliding</b>
- <br><b>106: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>107: Swimming</b>
- <br><b> 108</b>
- <br><b>108: Swimming</b>
- <br><b> 108</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b>109: Swimming</b>
- <br><b> 86</b>
- <br><b> Swimming</b>
- <br><b>110: Treading water</b>
- <br><b> 110</b>
- <br><b>111: Pulling herself out of the water</b>
- <br><b> 11</b>
- <br><b> [Opcode 6: 12]</b>
- <br><b> Surfacing</b>
- <br><b>112: Diving</b>
- <br><b> 86</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b> Into water</b>
- <br><b>113: Reverse direction underwater</b>
- <br><b> 86</b>
- <br><b> Swim and gurgle</b>
- <br><b>114: Surfacing</b>
- <br><b> 110</b>
- <br><b> Catching breath and a
- splash</b>
- <br><b>115: Starting to swim</b>
- <br><b> 86</b>
- <br><b> Gurgle</b>
- <br><b>116: Treading water</b>
- <br><b> 116</b>
- <br><b> Treading water</b>
- <br><b>117: Treading water</b>
- <br><b> 110</b>
- <br><b>118: Treading water</b>
- <br><b> 116</b>
- <br><b>119: Dive</b>
- <br><b> 86</b>
- <br><b> [Opcode 6: 3]</b>
- <br><b> Swimming</b>
- <br><b>120: Ready to push/pull block</b>
- <br><b> 120</b>
- <br><b>121: To standing position from push/pull</b>
- <br><b> 11</b>
- <br><b>122: Pulling block</b>
- <br><b> 11</b>
- <br><b> [Opcode 1: Final-position
- offset]</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pulling block</b>
- <br><b>123: Pushing block</b>
- <br><b> 11</b>
- <br><b> [Opcode 1: Final-position
- offset]</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pushing block</b>
- <br><b>124: Dying underwater</b>
- <br><b> 124</b>
- <br><b> [Opcode 6: 3, 3, 3, 3]</b>
- <br><b>125: Getting hurt</b>
- <br><b> 125</b>
- <br><b> Getting hurt</b>
- <br><b>126: Getting hurt</b>
- <br><b> 126</b>
- <br><b> Getting hurt</b>
- <br><b>126: Getting hurt</b>
- <br><b> 127</b>
- <br><b> Getting hurt</b>
- <br><b>128: Getting hurt</b>
- <br><b> 0</b>
- <br><b> Getting hurt</b>
- <br><b>129: Underwater lever pull</b>
- <br><b> 108</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b> Underwater lever pull</b>
- <br><b>130: Picking up underwater</b>
- <br><b> 108</b>
- <br><b> [Opcode 6: 3, 3]</b>
- <br><b>131: Pulling out and using key</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Inserting key/card</b>
- <br><b>132: Dying underwater</b>
- <br><b> 132</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b>133: Dying</b>
- <br><b> 133</b>
- <br><b> Killed by flames/lava</b>
- <br><b>134: Inserting something</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Inserting chip</b>
- <br><b>135: Picking something up</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b>136: Leftward on grabbed ledge</b>
- <br><b> 136</b>
- <br><b> Something clicking</b>
- <br><b>137: Rightward on grabbed ledge</b>
- <br><b> 137</b>
- <br><b> Something clicking</b>
- <br><b>138: Dying</b>
- <br><b> 138</b>
- <br><b> Dying</b>
- <br><b>139: Dying</b>
- <br><b> 139</b>
- <br><b> Getting hurt</b>
- <br><b>140: Starting to tread water</b>
- <br><b> 141</b>
- <br><b>141: Treading water backward</b>
- <br><b> 141</b>
- <br><b> Treading water</b>
- <br><b>142: Treading water</b>
- <br><b> 110</b>
- <br><b>143: Treading water leftward</b>
- <br><b> 143</b>
- <br><b> Treading water</b>
- <br><b>144: Treading water rightward</b>
- <br><b> 144</b>
- <br><b> Treading water</b>
- <br><b>145: Dying</b>
- <br><b> 145</b>
- <br><b> Dying and hitting ground</b>
- <br><b>146: Starting roll</b>
- <br><b> 147</b>
- <br><b>147: Finishing roll</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b> 148</b>
- <br><b>148: Standing up after roll</b>
- <br><b> 11</b>
- <br><b> Roll over</b>
- <br><b>149: Dying</b>
- <br><b> 149</b>
- <br><b> Killed by spikes</b>
- <br><b>150: Ledge grab</b>
- <br><b> 96</b>
- <br><b> Ledge grab?</b>
- <br><b>151: Roll over</b>
- <br><b> 11</b>
- <br><b> Roll over</b>
- <br><b>152: Swimming</b>
- <br><b> 87</b>
- <br><b> Into water</b>
- <br><b>153: Dive</b>
- <br><b> 153</b>
- <br><b>154: Swimming</b>
- <br><b> 87</b>
- <br><b> Into water</b>
- <br><b>155: Dying</b>
- <br><b> 155</b>
- <br><b> Dying with broken bones</b>
- <br><b>156: Starting dive</b>
- <br><b> 158</b>
- <br><b>157: Starting dive</b>
- <br><b> 158</b>
- <br><b>158: Swan dive</b>
- <br><b> 158</b>
- <br><b>159: Handstand pull-up</b>
- <br><b> 102</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> Pulling up?</b>
- <p><b>Movable 1: Pistol Animations</b>
- <p><b>160: Aim pistols</b>
- <br><b> 160</b>
- <br><b>161: Holster pistols</b>
- <br><b> 160</b>
- <br><b>162: Pull out pistols</b>
- <br><b> 160</b>
- <br><b>163: Aim pistols</b>
- <br><b> 163</b>
- <p><b>Movable 2: Shotgun Animations</b>
- <p><b>164: Aim shotgun</b>
- <br><b> 164</b>
- <br><b>165: Put shotgun back, grab shotgun</b>
- <br><b> 165</b>
- <br><b>166: Put shotgun back, grab shotgun</b>
- <br><b> 164</b>
- <br><b>167: Put shotgun to hips</b>
- <br><b> 164</b>
- <br><b>168: Wield shotgun</b>
- <br><b> 164</b>
- <p><b>Movable 3: AutoPistol Animations</b>
- <p><b>169: Aim autopistols</b>
- <br><b> 169</b>
- <p><b>Movable 4: Uzi Animations</b>
- <p><b>170: Aim Uzis [has angry head]</b>
- <br><b> 170</b></font>
-
-
- <p><a NAME="Catalogs_TR2Animations"></a><font color="#000080"><b><u>TR2 Animations:</u></b>
- <p><b>Movable 0: Basic Lara</b>
- <p><b>0: Running</b>
- <br><b> 0</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>1: Walking carefully</b>
- <br><b> 1</b>
- <br><b> {footstep / treading
- water}</b>
- <br><b>2: Sidestep?</b>
- <br><b> 11</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>3: Sidestep?</b>
- <br><b> 11</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>4: Run a bit</b>
- <br><b> 0</b>
- <br><b>5: Run a bit</b>
- <br><b> 0</b>
- <br><b>6: Start running</b>
- <br><b> 0</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>7: Run to walk?</b>
- <br><b> 1</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>8: Stop running</b>
- <br><b> 11</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>9: Run half a cycle?</b>
- <br><b> 1</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>10: Stop running? End a jump?</b>
- <br><b> 11</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>11: Stationary</b>
- <br><b> 103</b>
- <br><b>12: Sidestep left</b>
- <br><b> 12</b>
- <br><b> {footstep / treading
- water}</b>
- <br><b>13: Sidestep right</b>
- <br><b> 13</b>
- <br><b> {footstep / treading
- water}</b>
- <br><b>14: Landing on feet?</b>
- <br><b> 15</b>
- <br><b> {landing on feet / into
- water}</b>
- <br><b>15: Getting up on feet</b>
- <br><b> 11</b>
- <br><b> {Footstep / {}}</b>
- <br><b>16: Jump</b>
- <br><b> 17</b>
- <br><b> [Opcode 2]</b>
- <br><b> Jump {footstep / walk
- in shallow water}</b>
- <br><b>17: Into the air</b>
- <br><b> 77</b>
- <br><b>18: Jump</b>
- <br><b> 19</b>
- <br><b> [Opcode 2]</b>
- <br><b> Jump {footstep / walk
- in shallow water}</b>
- <br><b>19: Into the air</b>
- <br><b> 77</b>
- <br><b>20: Moving slightly leftward</b>
- <br><b> 21</b>
- <br><b>21: Leftward to forward?</b>
- <br><b> 1</b>
- <br><b> {footstep / treading
- water}</b>
- <br><b>22: Landing</b>
- <br><b> 23</b>
- <br><b>23: Landing</b>
- <br><b> 23</b>
- <br><b>24: Landing, then getting up</b>
- <br><b> 11</b>
- <br><b> {hitting wall, falling
- / walk in water, into water}</b>
- <br><b>25: Dying</b>
- <br><b> 25</b>
- <br><b> {dying with broken bones
- / into water}</b>
- <br><b>26: Jump upwards</b>
- <br><b> 27</b>
- <br><b> [Opcode 2]</b>
- <br><b> {{} / walk in shallow
- water}</b>
- <br><b>27: Jump upwards</b>
- <br><b> 28</b>
- <br><b> Jump</b>
- <br><b>28: Jumping upwards</b>
- <br><b> 28</b>
- <br><b>29: Grabbing?</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> 96</b>
- <br><b>30: Landing</b>
- <br><b> 23</b>
- <br><b>31: Landing</b>
- <br><b> 11</b>
- <br><b> {landing on feet / walk
- in shallow water}</b>
- <br><b>32: Pulling herself up?</b>
- <br><b> 33</b>
- <br><b>33: Landing</b>
- <br><b> 23</b>
- <br><b> Landing on feet, hitting
- wall</b>
- <br><b>34: In the air?</b>
- <br><b> 35</b>
- <br><b>35: In the air?</b>
- <br><b> 35</b>
- <br><b>36: Jumping up?</b>
- <br><b> 23</b>
- <br><b>37: Jumping up?</b>
- <br><b> 23</b>
- <br><b>38: Getting to standstill</b>
- <br><b> 11</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>39: Getting to standstill</b>
- <br><b> 11</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>40: Walking backward</b>
- <br><b> 40</b>
- <br><b> {footstep / treading
- water}</b>
- <br><b>41: Starting to walk backward</b>
- <br><b> 40</b>
- <br><b>42: Pulling herself up a ledge</b>
- <br><b> 11</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> Pulling up {{} / surfacing}</b>
- <br><b>43: Starting to run</b>
- <br><b> 6</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> [Opcode 3]</b>
- <br><b>44: Sidestepping rightward</b>
- <br><b> 44</b>
- <br><b> {footstep / trading water}</b>
- <br><b>45: Falling</b>
- <br><b> 23</b>
- <br><b>46: Falling</b>
- <br><b> 0</b>
- <br><b>47: Flipover?</b>
- <br><b> 48</b>
- <br><b> {} / Into water</b>
- <br><b>48: Flip-to-standing?</b>
- <br><b> 11</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b> {footstep / walk in shallow
- water}</b>
- <br><b>49: Falling</b>
- <br><b> 23</b>
- <br><b>50: Stepping up</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> 51</b>
- <br><b> Pulling up {{} / wade
- in shallow water}</b>
- <br><b>51: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>52: Starting to run</b>
- <br><b> 6</b>
- <br><b>53: Hitting wall</b>
- <br><b> 11</b>
- <br><b> Hitting wall</b>
- <br><b>54: Hitting wall</b>
- <br><b> 11</b>
- <br><b> Hitting wall</b>
- <br><b>55: Stepping up</b>
- <br><b> 0</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>56: Stepping up</b>
- <br><b> 0</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>57: Stepping up</b>
- <br><b> 1</b>
- <br><b> Footstep {{} / treading
- water}</b>
- <br><b>58: Stepping down</b>
- <br><b> 1</b>
- <br><b> Footstep {{} / treading
- water}</b>
- <br><b>59: Stepping down</b>
- <br><b> 1</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>60: Stepping down</b>
- <br><b> 1</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>61: Stepping down backward</b>
- <br><b> 40</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>62: Stepping down backward</b>
- <br><b> 40</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>63: Pulling lever</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pulling metal lever {{}
- / treading water}</b>
- <br><b>64: Pushing lever back</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Metal-lever reset (pushing
- it back) {{} / treading water}</b>
- <br><b>65: Sidestep left</b>
- <br><b> 65</b>
- <br><b> Footstep {{} / treading
- water}</b>
- <br><b>66: To standing position</b>
- <br><b> 11</b>
- <br><b>67: Sidestep right</b>
- <br><b> 67</b>
- <br><b> Footstep {{} / treading
- water}</b>
- <br><b>68: To standing position</b>
- <br><b> 11</b>
- <br><b>69: Step forward</b>
- <br><b> 69</b>
- <br><b> Footstep {{} / treading
- water}</b>
- <br><b>70: Sliding</b>
- <br><b> 70</b>
- <br><b> Sliding</b>
- <br><b>71: Recovering from slide?</b>
- <br><b> 72</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>72: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep</b>
- <br><b>73: Starting a standing jump</b>
- <br><b> 91</b>
- <br><b> Jump {{} / treading water}</b>
- <br><b>74: Jump?</b>
- <br><b> [Opcode 2]</b>
- <br><b> {{} / surfacing}</b>
- <br><b>75: Backflip</b>
- <br><b> 75</b>
- <br><b>76: Jump</b>
- <br><b> [Opcode 2]</b>
- <br><b> {{} / surfacing}</b>
- <br><b>77: Landing</b>
- <br><b> 77</b>
- <br><b>78: Jump Left</b>
- <br><b> [Opcode 2]</b>
- <br><b> 79</b>
- <br><b> {{} / surfacing}</b>
- <br><b>79: Leftward Roll</b>
- <br><b> 79</b>
- <br><b>80: Jump Right</b>
- <br><b> [Opcode 2]</b>
- <br><b> 81</b>
- <br><b> {{} / surfacing}</b>
- <br><b>81: Rightward Roll</b>
- <br><b> 81</b>
- <br><b>82: Landing on Feet after a Fall</b>
- <br><b> 11</b>
- <br><b> Landing on feet {{} /
- walk shallow, into water}</b>
- <br><b>83: Falling?</b>
- <br><b> 23</b>
- <br><b>84: Falling?</b>
- <br><b> 23</b>
- <br><b>85: Falling?</b>
- <br><b> 23</b>
- <br><b>86: Swimming</b>
- <br><b> [Opcode 6: 3, 3]</b>
- <br><b> Swimming</b>
- <br><b>87: Swimming stationary</b>
- <br><b> 87</b>
- <br><b>88: Pushing something?</b>
- <br><b> 89</b>
- <br><b>89: Jump backwards</b>
- <br><b> 90</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>90: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep {{} / treading
- water}</b>
- <br><b>91: Jumping upwards</b>
- <br><b> [Opcode 2]</b>
- <br><b> 28</b>
- <br><b> {{} / surfacing}</b>
- <br><b>92: Running</b>
- <br><b> 0</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>93: Fall</b>
- <br><b> 93</b>
- <br><b>94: Jump with getting ready to grab</b>
- <br><b> 95</b>
- <br><b>95: Jump with being ready to grab</b>
- <br><b> 95</b>
- <br><b>96: Grabbing a ledge</b>
- <br><b> 96</b>
- <br><b> Ledge grab, pull up</b>
- <br><b>97: Pulling herself up</b>
- <br><b> 102</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> Pulling up</b>
- <br><b>98: Falling?</b>
- <br><b> 23</b>
- <br><b>99: Landing?</b>
- <br><b> 82</b>
- <br><b> Landing on feet</b>
- <br><b>100: Jump with being ready to grab</b>
- <br><b> 95</b>
- <br><b>101: Jump with being ready to grab</b>
- <br><b> 95</b>
- <br><b>102: Stationary</b>
- <br><b> 11</b>
- <br><b>103: Stationary and breathing</b>
- <br><b> 103</b>
- <br><b>104: Starting to slide while looking rightward</b>
- <br><b> 105</b>
- <br><b> Landing on feet</b>
- <br><b>105: Sliding while looking rightward</b>
- <br><b> 105</b>
- <br><b> Sliding</b>
- <br><b>106: To standing position</b>
- <br><b> 11</b>
- <br><b> Footstep {{} / walk in
- shallow water}</b>
- <br><b>107: Swimming</b>
- <br><b> 108</b>
- <br><b>108: Swimming</b>
- <br><b> 108</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b>109: Swimming</b>
- <br><b> 86</b>
- <br><b> Swimming</b>
- <br><b>110: Treading water</b>
- <br><b> 110</b>
- <br><b>111: Pulling herself out of the water</b>
- <br><b> 11</b>
- <br><b> [Opcode 6: 12]</b>
- <br><b> Surfacing</b>
- <br><b>112: Diving</b>
- <br><b> 86</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b> Into water</b>
- <br><b>113: Reverse direction underwater</b>
- <br><b> 86</b>
- <br><b> Swimming, gurgle</b>
- <br><b>114: Surfacing</b>
- <br><b> 110</b>
- <br><b> Catching breath, surfacing</b>
- <br><b>115: Starting to swim</b>
- <br><b> 86</b>
- <br><b> Gurgle</b>
- <br><b>116: Treading water</b>
- <br><b> 116</b>
- <br><b> Treading water</b>
- <br><b>117: Treading water</b>
- <br><b> 110</b>
- <br><b>118: Treading water</b>
- <br><b> 116</b>
- <br><b>119: Dive</b>
- <br><b> 86</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b> Swimming</b>
- <br><b>120: Ready to push/pull block</b>
- <br><b> 120</b>
- <br><b>121: To standing position from push/pull</b>
- <br><b> 11</b>
- <br><b>122: Pulling block</b>
- <br><b> 11</b>
- <br><b> [Opcode 1: Final-position
- offset]</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pulling block</b>
- <br><b>123: Pushing block</b>
- <br><b> 11</b>
- <br><b> [Opcode 1: Final-position
- offset]</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pushing block</b>
- <br><b>124: Dying underwater</b>
- <br><b> 124</b>
- <br><b> [Opcode 6: 3, 3, 3, 3]</b>
- <br><b>125: Getting hurt</b>
- <br><b> 125</b>
- <br><b> Getting hurt</b>
- <br><b>126: Getting hurt</b>
- <br><b> 126</b>
- <br><b> Getting hurt</b>
- <br><b>126: Getting hurt</b>
- <br><b> 127</b>
- <br><b> Getting hurt</b>
- <br><b>128: Getting hurt</b>
- <br><b> 0</b>
- <br><b> Getting hurt</b>
- <br><b>129: Underwater lever pull</b>
- <br><b> 108</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b> Underwater lever pull,
- then swimming</b>
- <br><b>130: Picking up underwater</b>
- <br><b> 108</b>
- <br><b> [Opcode 6: 3, 3]</b>
- <br><b>131: Pulling out and using key</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Inserting key/card {{}
- / treading water}</b>
- <br><b>132: Dying underwater</b>
- <br><b> 132</b>
- <br><b> [Opcode 6: 3, 3, 3]</b>
- <br><b>133: Dying</b>
- <br><b> 133</b>
- <br><b> Killed by flames/lava
- {{} / into water}</b>
- <br><b>134: Inserting something</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Inserting chip</b>
- <br><b>135: Picking something up</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Picked up something</b>
- <br><b>136: Leftward on grabbed ledge</b>
- <br><b> 136</b>
- <br><b> Something clicking</b>
- <br><b>137: Rightward on grabbed ledge</b>
- <br><b> 137</b>
- <br><b> Something clicking</b>
- <br><b>138: Dying</b>
- <br><b> 138</b>
- <br><b> Dying {{} / into water}</b>
- <br><b>139: Dying</b>
- <br><b> 139</b>
- <br><b> Getting hurt, hitting
- wall {{} / into water}</b>
- <br><b>140: Starting to tread water</b>
- <br><b> 141</b>
- <br><b>141: Treading water backward</b>
- <br><b> 141</b>
- <br><b> Treading water</b>
- <br><b>142: Treading water</b>
- <br><b> 110</b>
- <br><b>143: Treading water leftward</b>
- <br><b> 143</b>
- <br><b> Treading water</b>
- <br><b>144: Treading water rightward</b>
- <br><b> 144</b>
- <br><b> Treading water</b>
- <br><b>145: Dying</b>
- <br><b> 145</b>
- <br><b>145: Dying, hitting ground {{} / into water}</b>
- <br><b>146: Starting roll</b>
- <br><b> 147</b>
- <br><b>147: Finishing roll</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b> {roll over / into water}</b>
- <br><b>148: Standing up after roll</b>
- <br><b> 11</b>
- <br><b>149: Dying</b>
- <br><b> 149</b>
- <br><b> Killed by spikes</b>
- <br><b>150: Ledge grab</b>
- <br><b> 96</b>
- <br><b> Ledge grab</b>
- <br><b>151: Roll over</b>
- <br><b> 11</b>
- <br><b> Hit the ground and roll
- {{} / into water}</b>
- <br><b>152: Swimming</b>
- <br><b> 87</b>
- <br><b> Into water</b>
- <br><b>153: Dive</b>
- <br><b> 153</b>
- <br><b>154: Swimming</b>
- <br><b> 87</b>
- <br><b> Into water</b>
- <br><b>155: Dying</b>
- <br><b> 155</b>
- <br><b> Dying with broken bones
- {{} / into water}</b>
- <br><b>156: Starting dive</b>
- <br><b> 158</b>
- <br><b>157: Starting dive</b>
- <br><b> 158</b>
- <br><b>158: Swan dive</b>
- <br><b> 158</b>
- <br><b>159: Handstand pull-up</b>
- <br><b> 102</b>
- <br><b> [Opcode 1: Step point]</b>
- <br><b> Pulling up [attachment
- point]</b>
- <br><b>160: Starting to climb upward</b>
- <br><b> 164</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Pulling up, clicks, {{}
- / wade in shallow water}</b>
- <br><b>161: Climbing upward</b>
- <br><b> 161</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Pulling up? {{} / clicks}</b>
- <br><b>162: Stop climbing upward</b>
- <br><b> 164</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>163: Stop climbing upward</b>
- <br><b> 164</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>164: Hold on while climbing</b>
- <br><b> 164</b>
- <br><b>165: Starting to climb upward</b>
- <br><b> 161</b>
- <br><b> Click</b>
- <br><b>166: Stop climbing downward</b>
- <br><b> 164</b>
- <br><b> Click</b>
- <br><b>167: Stop climbing downward</b>
- <br><b> 164</b>
- <br><b> Click</b>
- <br><b>168: Climb downward</b>
- <br><b> 168</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>169: Climb downward</b>
- <br><b> 168</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>170: Climb rightward</b>
- <br><b> 170</b>
- <br><b> Click</b>
- <br><b>171: Climb leftward</b>
- <br><b> 171</b>
- <br><b> Click</b>
- <br><b>172: Hanging on to ledge</b>
- <br><b> 173</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b>173: Climbing up while holding ledge</b>
- <br><b> 164</b>
- <br><b>174: Climbing onto ledge</b>
- <br><b> 102</b>
- <br><b> [Opcode 1:]</b>
- <br><b> Pulling up [attachment
- point, opcode 3]</b>
- <br><b>175: To standing position</b>
- <br><b> 11</b>
- <br><b>176: Wading</b>
- <br><b> 177</b>
- <br><b>177: Wading</b>
- <br><b> 177</b>
- <br><b> Wade in shallow water</b>
- <br><b>178: Wading</b>
- <br><b> 177</b>
- <br><b> Into water</b>
- <br><b>179: Starting to wade</b>
- <br><b> 177</b>
- <br><b>180: Starting to run?</b>
- <br><b> 0</b>
- <br><b>181: Starting to run?</b>
- <br><b> 0</b>
- <br><b>182: Starting to jump backwards from grab</b>
- <br><b> 183</b>
- <br><b> [Opcode 2]</b>
- <br><b>183: Jumping backwards</b>
- <br><b> 75</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b>184: To standing position</b>
- <br><b> 11</b>
- <br><b>185: To standing position</b>
- <br><b> 11</b>
- <br><b>186:</b>
- <br><b> 177</b>
- <br><b>187: Climb upward and stop</b>
- <br><b> 96</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>188: Climb downward and stop</b>
- <br><b> 96</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>189: Throwing flare?</b>
- <br><b> 189</b>
- <br><b>190: Running uphill</b>
- <br><b> 177</b>
- <br><b> Into water</b>
- <br><b>191: Pulling upward</b>
- <br><b> 11</b>
- <br><b> [Opcode 3]</b>
- <br><b> Into water</b>
- <br><b>192: Getting onto terra firma</b>
- <br><b> 11</b>
- <br><b> Into water</b>
- <br><b>193: Getting onto terra firma</b>
- <br><b> 11</b>
- <br><b> Into water</b>
- <br><b>194: Climb down and grab</b>
- <br><b> 96</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Click</b>
- <br><b>195: Pressing two buttons?</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Lever pull</b>
- <br><b>196: Pressing two buttons?</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Lever pull</b>
- <br><b>197: Pressing button</b>
- <br><b> 11</b>
- <br><b> [Opcode 3: attached to
- other]</b>
- <br><b> Pressing button</b>
- <br><b>198: Swimming</b>
- <br><b> 108</b>
- <br><b>199: Swimming</b>
- <br><b> 108</b>
- <br><b>200: Swimming</b>
- <br><b> 108</b>
- <br><b>201: Climb right and drop</b>
- <br><b> 96</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b>202: Climb left and drop</b>
- <br><b> 96</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b>203: Swimming flipover?</b>
- <br><b> 205</b>
- <br><b> Swimming</b>
- <br><b>204: Pick up a flare?</b>
- <br><b> 11</b>
- <br><b>205: Swimming?</b>
- <br><b> 108</b>
- <br><b>206: Grabbing a flare while swimming?</b>
- <br><b> 108</b>
- <br><b>207: Half-flipover</b>
- <br><b> 209</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b>208: Flipover to dive</b>
- <br><b> 153</b>
- <br><b>209: Flipover?</b>
- <br><b> 75</b>
- <br><b>210: Flipover</b>
- <br><b> 211</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b>211: Landing after flip</b>
- <br><b> 75</b>
- <br><b>212: Flipover</b>
- <br><b> 213</b>
- <br><b> [Opcode 6: 0]</b>
- <br><b>213: Landing after flip</b>
- <br><b> 77</b>
- <br><b>214: Kicking</b>
- <br><b> 11</b>
- <br><b>215: Grabbing zipline handle</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> Zipline handle grab</b>
- <br><b>216: Holding onto zipline?</b>
- <br><b> 216</b>
- <br><b>217: Releasing zipline handle?</b>
- <br><b> [Opcode 1: Grab point]</b>
- <br><b> [Opcode 3]</b>
- <br><b> 77</b>
- <p><b>Movable 1: Pistol Animations</b>
- <p><b>218: Aim pistols</b>
- <br><b> 218</b>
- <br><b>219: Holster pistols</b>
- <br><b> 218</b>
- <br><b>220: Pull out pistols</b>
- <br><b> 218</b>
- <br><b>221: Aim pistols</b>
- <br><b> 221</b>
- <p><b>Movable 2: Ponytail</b>
- <p><b>[All animations hardcoded as game physics]</b>
- <p><b>Movable 3: Shotgun Animations</b>
- <p><b>222: Aim shotgun</b>
- <br><b> 224</b>
- <br><b>223: Put shotgun back, grab shotgun</b>
- <br><b> 222</b>
- <br><b> Holstering guns</b>
- <br><b>224: Put shotgun back, grab shotgun</b>
- <br><b> 224</b>
- <br><b> Firing shotgun, then
- cocking it</b>
- <br><b>225: Put shotgun to hips</b>
- <br><b> 225</b>
- <br><b> [Opcode 4]</b>
- <br><b> Holstering guns</b>
- <br><b>226: Wield shotgun</b>
- <br><b> 222</b>
- <p><b>Movable 4: AutoPistol Animations</b>
- <p><b>227: Aim autopistols</b>
- <br><b> 227</b>
- <p><b>Movable 5: Uzi Animations</b>
- <p><b>228: Aim Uzis [has angry head]</b>
- <br><b> 228</b>
- <p><b>Movable 6: M16 Animations</b>
- <p><b>229: M16 on back, aiming another M16</b>
- <br><b> 231</b>
- <br><b>230: Put M16 back, grab M16</b>
- <br><b> 229</b>
- <br><b> Holstering guns</b>
- <br><b>231: Fire M16</b>
- <br><b> 231</b>
- <br><b>232: Put M16 back, grab M16</b>
- <br><b> 232</b>
- <br><b> [Opcode 4]</b>
- <br><b> Holstering guns</b>
- <br><b>233: Turn M16 away</b>
- <br><b> 229</b>
- <br><b>234: Aim M16</b>
- <br><b> 236</b>
- <br><b>235: Turn M16 away</b>
- <br><b> 234</b>
- <br><b>236: Aim and fire M16</b>
- <br><b> 236</b>
- <p><b>Movable 7: Grenade-launcher animations</b>
- <p><b>237: Put grenade launcher away, aim GL</b>
- <br><b> 238</b>
- <br><b> Holstering guns</b>
- <br><b>238: Aim grenade launcher</b>
- <br><b> 240</b>
- <br><b>239: Get grenade for launcher</b>
- <br><b> 240</b>
- <br><b> Grenade settling, entering</b>
- <br><b>240: Fire grenade launcher</b>
- <br><b> 239</b>
- <br><b> Grenade-launcher firing</b>
- <br><b>241: Turning grenade launcher away</b>
- <br><b> 238</b>
- <br><b>242: Put grenade launcher away, then wield it</b>
- <br><b> 242</b>
- <br><b> [Opcode 4]</b>
- <br><b> Holstering guns</b>
- <p><b>Movable 8: Harpoon-gun animations</b>
- <p><b>243: Harpoon gun on back; aiming another HG</b>
- <br><b> 245</b>
- <br><b>244: Put harpoon gun back, grab HG</b>
- <br><b> 243</b>
- <br><b> Holstering guns</b>
- <br><b>245: Fire harpoon gun</b>
- <br><b> 245</b>
- <br><b> Harpoon ricochet</b>
- <br><b>246: Put harpoon gun back; grab HG</b>
- <br><b> 243</b>
- <br><b> [Opcode 4]</b>
- <br><b> Holstering guns</b>
- <br><b>247: Turn harpoon gun away</b>
- <br><b> 243</b>
- <br><b>248: Reload harpoon gun</b>
- <br><b> 243</b>
- <br><b> {harpoon reload / underwater
- harpoon reload}</b>
- <br><b>249: Pointing harpoon gun forward</b>
- <br><b> 251</b>
- <br><b>250: Turning harpoon gun away from forward</b>
- <br><b> 249</b>
- <br><b>251: Fire harpoon gun</b>
- <br><b> 251</b>
- <br><b> Fire harpoon</b>
- <br><b>252: Put harpoon gun back; grab HG</b>
- <br><b> 252</b>
- <br><b> [Opcode 4]</b>
- <br><b>253: Put harpoon gun back; grab HG</b>
- <br><b> 253</b>
- <br><b> [Opcode 4]</b>
- <p><b>Movable 9: Flare animations</b>
- <p><b>254: Holding flare</b>
- <br><b> 254</b>
- <br><b>255: Pulling flare out?</b>
- <br><b> 255</b>
- <br><b>256: Pulling flare out?</b>
- <br><b> 257</b>
- <br><b>257: Lighting flare?</b>
- <br><b> 254</b>
- <br><b>258: Lighting flare?</b>
- <br><b> 254</b>
- <p><b>Movable 10:</b>
- <p><b>259: Standing</b>
- <br><b> 259</b>
- <br><b>260: Being tossed about (Lara getting killed by tyrannosaur?)</b>
- <br><b> 260</b></font>
-
-
- <p><p>
- <p><a NAME="Catalogs_TR2SoundIDs"></a><font color="#000080"><b><u>TR2 Sound
- IDs</u></b>
- <p><b>The first number is the sound's index in "SoundMap"; TR2 appears
- to be completely consistent here.</b>
- <p><b>The second number is the sound's index in the file MAIN.SFX</b>
- <p><b>A short description follows, and if the sound is a member of a set,
- then a "--" and then how many are in that set. Thus, Lara's footsteps are
- a set of 4 sounds.</b>
- <br>
- <p>0000 -- 0000 -- Footstep -- 4
- <br>0001 -- 0004 -- Lara grunt
- <br>0002 -- 0005 -- Lara "no"
- <br>0003 -- 0006 -- Lara sliding
- <br>0004 -- 0007 -- Lara landing on feet
- <br>0005 -- 0008 -- Lara grunt (pulling up)
- <br>0006 -- 0009 -- Lara unholstering pistols/magnums/UZIs
- <br>0007 -- 0010 -- Lara holstering pistols/magnums/UZIs
- <br>0008 -- 0011 -- Lara firing pistols
- <br>0009 -- 0012 -- Lara cocking shotgun/pistol
- <br>0010 -- 0013 -- Bullet ricochet -- 2
- <br>0011 -- 0015 -- Lara lighting flare
- <br>0012 -- 0016 -- Flare burning
- <br>0013 -- ----
- <br>0014 -- ----
- <br>0015 -- 0017 -- Harpoon ricochet
- <br>0016 -- 0018 -- Harpoon reload
- <br>0017 -- 0019 -- Walk in shallow water -- 4
- <br>0018 -- 0023 -- Wade in shallow water -- 2
- <br>0019 -- ----
- <br>0020 -- 0025 -- Lara treading water
- <br>0021 -- 0026 -- Lara firing magnums
- <br>0022 -- 0027 -- Harpoon reload (underwater?)
- <br>0023 -- 0028 -- Fire harpoon (underwater)
- <br>0024 -- 0029 -- Massive crash
- <br>0025 -- 0030 -- Lara pressing button
- <br>0026 -- 0031 -- Lara moan (pulling up)
- <br>0027 -- 0032 -- Lara grunt (hitting wall) -- 2
- <br>0028 -- 0034 -- Click (?) -- 2
- <br>0029 -- 0036 -- Lara grunt (jumping)
- <br>0030 -- 0037 -- Lara scream (falling)
- <br>0031 -- 0038 -- Lara getting hurt -- 2
- <br>0032 -- 0040 -- Lara roll
- <br>0033 -- 0041 -- Splash (Lara into water)
- <br>0034 -- 0042 -- Splash (Lara surfacing)
- <br>0035 -- 0043 -- Switch (Lara underwater)
- <br>0036 -- 0044 -- Lara catching breath
- <br>0037 -- 0045 -- Underwater gurgle
- <br>0038 -- 0046 -- Lara pulling metal lever
- <br>0039 -- 0047 -- Lara inserting key/card
- <br>0040 -- 0048 -- Lara inserting chip/pryr-whl/scroll/gem/etc.
- <br>0041 -- 0049 -- Lara dying 1
- <br>0042 -- 0050 -- Lara dying 2
- <br>0043 -- 0051 -- Lara firing Uzis
- <br>0044 -- 0052 -- Gunshot echo?
- <br>0045 -- 0053 -- Lara firing shotgun
- <br>0046 -- 0054 -- Lara grunt (starting to push block)
- <br>0047 -- 0055 -- Lara grunt (pushing block) -- 3
- <br>0048 -- 0058 -- Click (?)
- <br>0049 -- 0059 -- Something hitting Lara?
- <br>0050 -- 0060 -- Bullet hitting Lara?
- <br>0051 -- 0061 -- Lara "heh!" (pulling up?)
- <br>0052 -- 0062 -- Lara treading water
- <br>0053 -- 0063 -- Lara's bones breaking (dying)
- <br>0054 -- 0064 -- Ledge grab by Lara?
- <br>0055 -- 0065 -- Lara "oomph!" (hitting wall after grabbing ledge)
- <br>0056 -- 0066 -- Footstep/ledge shimmy by Lara?
- <br>0057 -- 0067 -- Metal-lever reset
- <br>0058 -- 0068 -- Glass breaking
- <br>0059 -- 0069 -- Waterfall and gurgle
- <br>0060 -- 0060 -- Underwater ambience
- <br>0061 -- 0071 -- Underwater level pull
- <br>0062 -- 0072 -- Lara "aha!" (picked up something)
- <br>0063 -- 0073 -- Block sliding
- <br>0064 -- 0074 -- Door opening
- <br>0065 -- 0075 -- Something swinging
- <br>0066 -- 0076 -- Brittle ground
- <br>0067 -- 0077 -- Brittle ground breaking away/falling
- <br>0068 -- 0078 -- Brittle ground hitting solid ground
- <br>0069 -- 0079 -- Enemy footstep -- 3
- <br>0070 -- 0082 -- Enemy grunt (climbing up something)
- <br>0071 -- 0083 -- Enemy hitting Lara 1
- <br>0072 -- 0084 -- Enemy hitting Lara 2
- <br>0073 -- 0085 -- Enemy groan (dying)
- <br>0074 -- 0086 -- Enemy growl
- <br>0075 -- 0087 -- Enemy grunt (climbing up something?)
- <br>0076 -- 0088 -- Enemy grunt (climbing up something?)
- <br>0077 -- 0089 -- ?
- <br>0078 -- 0090 -- Lara firing M-16
- <br>0079 -- 0091 -- Waterfall
- <br>0080 -- 0092 -- Sword statue (drop)
- <br>0081 -- 0093 -- Sword statue (lift)
- <br>0082 -- 0094 -- Metal gate open
- <br>0083 -- 0095 -- Metal gate close
- <br>0084 -- 0096 -- Pop?
- <br>0085 -- 0097 -- Enemy body hitting ground (dying) -- 3
- <br>0086 -- 0100 -- Dog bark 1
- <br>0087 -- 0101 -- Footstep? -- 3
- <br>0088 -- 0104 -- Dog bark 2
- <br>0089 -- 0105 -- Dog yelp (dying) -- 3
- <br>0090 -- 0108 -- Dog pant
- <br>0091 -- 0109 -- Footstep? -- 3
- <br>0092 -- 0112 -- Leopard growl 1
- <br>0093 -- 0113 -- Leopard snarl
- <br>0094 -- 0114 -- Leopard growl 2
- <br>0095 -- 0115 -- Leopard growl-twitch (dying)
- <br>0096 -- 0116 -- Leopard growl 3
- <br>0097 -- 0117 -- Rat squeak -- 2
- <br>0098 -- 0119 -- Rat squeal (dying)
- <br>0099 -- 0120 -- Tiger growl 1
- <br>0100 -- 0121 -- Tiger growl 2
- <br>0101 -- 0122 -- Tiger growl 3
- <br>0102 -- 0123 -- Tiger dying
- <br>0103 -- 0124 -- Tiger growl 4
- <br>0104 -- 0125 -- Echo?
- <br>0105 -- 0126 -- Explosion -- 2
- <br>0106 -- 0128 -- Growl?
- <br>0107 -- 0129 -- Footstep?
- <br>0108 -- 0130 -- Menu-option movement
- <br>0109 -- 0131 -- Menu option: Lara's home
- <br>0110 -- ----
- <br>0111 -- 0132 -- Menu/menu-option popup
- <br>0112 -- 0133 -- Menu-option escape
- <br>0113 -- 0134 -- Menu-option select?
- <br>0114 -- 0135 -- Menu-option select
- <br>0115 -- 0136 -- Menu game-page turn
- <br>0116 -- 0137 -- Lara sigh ("The-e-ere!") from recharge
- <br>0117 -- 0138 -- Enemy footstep (clicking) -- 4
- <br>0118 -- 0142 -- Enemy firing gun with silencer -- 2
- <br>0119 -- 0144 -- Enemy "ah!" (dying)
- <br>0120 -- 0145 -- Enemy "oo!" (dying)
- <br>0121 -- 0146 -- Enemy punch?
- <br>0122 -- 0147 -- Spider moving
- <br>0123 -- 0148 -- Grenade launcher load (grenade entering)
- <br>0124 -- 0149 -- Grenade launcher load (grenade settling)
- <br>0125 -- 0150 -- Fire grenade launcher
- <br>0126 -- 0151 -- Spider biting Lara?
- <br>0127 -- 0152 -- Spiked metal door slide
- <br>0128 -- 0153 -- Spiked metal door close
- <br>0129 -- 0154 -- Eagle squawk
- <br>0130 -- 0155 -- Eagle-wing flap
- <br>0131 -- 0156 -- Eagle dying squawk
- <br>0132 -- 0157 -- Crow "grok!"
- <br>0133 -- 0158 -- Crow-wing flap
- <br>0134 -- 0159 -- Crow "grak!"
- <br>0135 -- 0160 -- Crunch?
- <br>0136 -- 0161 -- Enemy gun cock?
- <br>0137 -- 0162 -- Enemy gunshot?
- <br>0138 -- 0163 -- ?
- <br>0139 -- 0164 -- ?
- <br>0140 -- 0165 -- Heavy breathing (?)
- <br>0141 -- 0166 -- Enemy chuckling (after killing Lara)
- <br>0142 -- 0167 -- Monk "poy-yaw!"
- <br>0143 -- 0168 -- Monk "awu!" (dying?)
- <br>0144 -- ----
- <br>0145 -- 0169 -- Lara "oi-ah!" (killed by spikes)
- <br>0146 -- 0170 -- Lara groan (killed by flames/lava)
- <br>0147 -- 0171 -- Boulder(s)/oildrum(s)/snowballs/etc. rolling
- <br>0148 -- 0172 -- Sandbag snapping
- <br>0149 -- 0173 -- Sandbag/? hitting ground
- <br>0150 -- 0174 -- Burning
- <br>0151 -- ----
- <br>0152 -- 0175 -- Snowmobile start
- <br>0153 -- 0176 -- Snowmobile idle
- <br>0154 -- 0177 -- Snowmobile accelerate
- <br>0155 -- 0178 -- Snowmobile (high engine RPM)
- <br>0156 -- 0179 -- Snowmobile shut off
- <br>0157 -- 0180 -- Enemy gunshot
- <br>0158 -- 0181 -- Enemy groan (dying)
- <br>0159 -- 0182 -- Enemy heavy breathing
- <br>0160 -- 0183 -- Click?
- <br>0161 -- 0184 -- Floor trapdoor open
- <br>0162 -- 0185 -- Floor trapdoor close
- <br>0163 -- 0186 -- Yeti growl -- 2
- <br>0164 -- 0188 -- Yeti chest beat
- <br>0165 -- 0189 -- Yeti ?
- <br>0166 -- 0190 -- Yeti grunt and chest beat
- <br>0167 -- 0191 -- Yeti scream
- <br>0168 -- 0192 -- Yeti scream (dying)
- <br>0169 -- 0193 -- Yeti growl 1
- <br>0170 -- 0194 -- Yeti growl 2
- <br>0171 -- 0195 -- Yeti grunt
- <br>0172 -- 0196 -- Yeti growl 3
- <br>0173 -- 0197 -- Yeti footstep -- 2
- <br>0174 -- 0199 -- Enemy heavy breathing
- <br>0175 -- 0200 -- Enemy flamethrower flame
- <br>0176 -- 0201 -- Enemy flamethrower reset?
- <br>0177 -- 0202 -- Enemy flamethrower cycle?
- <br>0178 -- 0203 -- Enemy groan (dying?)
- <br>0179 -- 0204 -- Enemy flamethrower pack echo (dying)
- <br>0180 -- 0205 -- Enemy belt(?) jingle
- <br>0181 -- 0206 -- Wrench "ching" (enemy)
- <br>0182 -- 0207 -- Footstep?
- <br>0183 -- 0208 -- Footstep/Lara hit?
- <br>0184 -- 0209 -- Enemy cocking shotgun
- <br>0185 -- ----
- <br>0186 -- 0210 -- Underwater?
- <br>0187 -- ----
- <br>0188 -- 0211 -- Scuba-diver airflow
- <br>0189 -- ----
- <br>0190 -- 0212 -- Pulley crane-block movement
- <br>0191 -- 0213 -- Curtain open/close
- <br>0192 -- 0214 -- enemy grunt (scuba; dying?)
- <br>0193 -- 0215 -- Underwater?
- <br>0194 -- 0216 -- Boat start
- <br>0195 -- 0217 -- Boat idle
- <br>0196 -- 0218 -- Boat accelerate
- <br>0197 -- 0219 -- Boat (high engine RPM)
- <br>0198 -- 0220 -- Boat shut off
- <br>0199 -- 0221 -- Boat (engine hit)
- <br>0200 -- 0222 -- Boat (body hit)
- <br>0201 -- 0223 -- Clatter 1
- <br>0202 -- 0224 -- Clatter 2
- <br>0203 -- 0225 -- Clatter 3
- <br>0204 -- 0226 -- Door slide
- <br>0205 -- 0227 -- Lara flesh wound -- 2
- <br>0206 -- 0229 -- saw (high RPM)
- <br>0207 -- 0230 -- saw switched off
- <br>0208 -- 0231 -- Bell chime
- <br>0209 -- 0232 -- ? creaking/hitting something
- <br>0210 -- 0233 -- ? swinging
- <br>0211 -- 0234 -- ? breaking?
- <br>0212 -- 0235 -- Pulley movement
- <br>0213 -- 0236 -- Airplane engine idle
- <br>0214 -- ----
- <br>0215 -- 0237 -- Underwater fan
- <br>0216 -- ----
- <br>0217 -- 0238 -- Vent fan
- <br>0218 -- 0239 -- Rope swing
- <br>0219 -- 0240 -- Jump pad 1
- <br>0220 -- 0241 -- Jump pad 2
- <br>0221 -- 0242 -- Something breaking?
- <br>0222 -- 0243 -- ball/rock/snowballs/etc rolling
- <br>0223 -- 0244 -- ball/rock/snowballs/etc settling
- <br>0224 -- 0245 -- ?
- <br>0225 -- 0246 -- Crash?
- <br>0226 -- 0247 -- Crash?
- <br>0227 -- 0248 -- Something rolling
- <br>0228 -- 0249 -- Something hitting wall/settling
- <br>0229 -- 0250 -- Blade slice-hit
- <br>0230 -- 0251 -- Blade "ching"
- <br>0231 -- 0252 -- Rolling spike-wheel
- <br>0232 -- 0253 -- Kill of something?
- <br>0233 -- 0254 -- blade cutting into Lara?
- <br>0234 -- 0255 -- Rotating-handle loosen
- <br>0235 -- 0256 -- Rotating-handle turn
- <br>0236 -- 0257 -- Rotating-handle door-latch open
- <br>0237 -- 0258 -- Rotating-handle door creak and latch
- <br>0238 -- 0259 -- Monk? footstep -- 4
- <br>0239 -- 0263 -- Monk sword swing (single)
- <br>0240 -- 0264 -- Monk sword swing (multi)
- <br>0241 -- 0265 -- Monk shout 1 -- 3
- <br>0242 -- 0268 -- Monk shout 2 -- 3
- <br>0243 -- 0271 -- Monk dying? -- 3
- <br>0244 -- 0274 -- Monk hurt? -- 3
- <br>0245 -- 0277 -- Crunch? -- 2
- <br>0246 -- 0279 -- Enemy, "haye"
- <br>0247 -- 0280 -- Splash (surfacing)
- <br>0248 -- 0281 -- Waterfall
- <br>0249 -- 0282 -- Footstep in snow -- 3
- <br>0250 -- 0285 -- Gunshot?
- <br>0251 -- 0286 -- Enemy gunshot
- <br>0252 -- 0287 -- Enemy "ahaga-hoog-uh!" (dying)
- <br>0253 -- 0288 -- Enemy grunt (dying?)
- <br>0254 -- 0289 -- Shooting-circle blade
- <br>0255 -- 0290 -- Footstep? -- 4
- <br>0256 -- 0294 -- Monk "oye!"
- <br>0257 -- 0295 -- Monk "aweh!"
- <br>0258 -- 0296 -- Shooting circle blade hit
- <br>0259 -- 0297 -- Warrior footstep
- <br>0260 -- 0298 -- Monk blade swing? -- 3
- <br>0261 -- 0301 -- Monk? blade swing
- <br>0262 -- 0302 -- Warrior growl -- 2
- <br>0263 -- 0304 -- Knifethrower hiccup
- <br>0264 -- 0305 -- Warrior burp, "wuuhh!"? -- 3
- <br>0265 -- 0308 -- Warrior growl-burp?
- <br>0266 -- ----
- <br>0267 -- 0309 -- Warrior awaken
- <br>0268 -- 0310 -- Warrior growl-burp?
- <br>0269 -- 0311 -- Lever pull
- <br>0270 -- ----
- <br>0271 -- ----
- <br>0272 -- ----
- <br>0273 -- ----
- <br>0274 -- ----
- <br>0275 -- ----
- <br>0276 -- ----
- <br>0277 -- ----
- <br>0278 -- 0312 -- Chain pulley
- <br>0279 -- 0313 -- Lara zipline handle grab
- <br>0280 -- 0314 -- Lara zipline slide
- <br>0281 -- 0315 -- Lara zipline handle hit
- <br>0282 -- 0316 -- Body slump?
- <br>0283 -- 0317 -- ? body crunch
- <br>0284 -- 0318 -- ?
- <br>0285 -- 0319 -- Crunch?
- <br>0286 -- 0320 -- Sliding door open
- <br>0287 -- 0321 -- Sliding door open
- <br>0288 -- 0322 -- Water something
- <br>0289 -- 0323 -- ?
- <br>0290 -- 0324 -- ?
- <br>0291 -- 0325 -- Talion guardian scream
- <br>0292 -- 0326 -- ? gasp, growl -- 3
- <br>0293 -- 0329 -- Talion guardian hoarse breathing
- <br>0294 -- 0330 -- Talion guardian footstep
- <br>0295 -- 0331 -- Talion guardian scream (dying)
- <br>0296 -- 0332 -- Large spider
- <br>0297 -- 0333 -- Helicopter
- <br>0298 -- 0334 -- Dragon footstep
- <br>0299 -- 0335 -- Dragon growl 1
- <br>0300 -- 0336 -- Dragon growl 2
- <br>0301 -- 0337 -- Dragon body fall
- <br>0302 -- 0338 -- Dragon dying breath
- <br>0303 -- 0339 -- Dragon growl 3
- <br>0304 -- 0340 -- Dragon grunt
- <br>0305 -- 0341 -- Dragon fire-breathing
- <br>0306 -- 0342 -- Dragon leg lift
- <br>0307 -- 0343 -- Dragon leg hit
- <br>0308 -- 0344 -- Warrior blade swing -- 2
- <br>0309 -- 0346 -- Warrior blade swing (fast)
- <br>0310 -- ----
- <br>0311 -- 0347 -- Warrior breath?
- <br>0312 -- 0348 -- Warrior hover
- <br>0313 -- 0349 -- Warrior landing
- <br>0314 -- 0350 -- Warrior? blade hit
- <br>0315 -- 0351 -- Warrior? blade slice -- 2
- <br>0316 -- 0353 -- Birds chirping -- 2
- <br>0317 -- 0355 -- ? crunch
- <br>0318 -- 0356 -- ? crunch -- 3
- <br>0319 -- 0359 -- Door creak and close
- <br>0320 -- 0360 -- ? breaking
- <br>0321 -- 0361 -- Large spider snarl
- <br>0322 -- 0362 -- Large spider footstep -- 4
- <br>0323 -- 0366 -- Large spider snarl (dying)
- <br>0324 -- 0367 -- Dragon growl
- <br>0325 -- 0368 -- Dragon/T-Rex footstep
- <br>0326 -- 0369 -- Dragon/T-Rex growl 1
- <br>0327 -- 0370 -- Dragon/T-Rex growl 2
- <br>0328 -- ----
- <br>0329 -- 0371 -- Water drip -- 3
- <br>0330 -- 0374 -- Stage-backdrop move
- <br>0331 -- 0375 -- Stone door slide
- <br>0332 -- 0376 -- Platform alarm (Star-Trek-like)
- <br>0333 -- 0377 -- Lara's grandfather clock tick
- <br>0334 -- 0378 -- Lara's house front door chime
- <br>0335 -- 0379 -- Lara's house alarm
- <br>0336 -- 0380 -- ? Boat racing
- <br>0337 -- 0381 -- ? Water
- <br>0338 -- 0382 -- ?
- <br>0339 -- 0383 -- ?
- <br>0340 -- 0384 -- ?
- <br>0341 -- 0385 -- ?
- <br>0342 -- 0386 -- ?
- <br>0343 -- 0387 -- hit?
- <br>0344 -- 0388 -- Butler sounds 1 -- 5
- <br>0345 -- 0393 -- Butler sounds 2 -- 4
- <br>0346 -- 0397 -- Butler sounds 3 -- 2
- <br>0347 -- 0399 -- Butler cup clatter -- 2
- <br>0348 -- 0401 -- Brittle ground breaking
- <br>0349 -- 0402 -- Spider explode (dying)/Lara bullet hit?
- <br>0350 -- 0403 -- Shark bite
- <br>0351 -- 0404 -- Lava
- <br>0352 -- 0405 -- Loud hit?
- <br>0353 -- 0406 -- Unwelcome guests at Lara's home
- <br>0354 -- 0407 -- Zipper?
- </font>
- </body>
- </html>
|