123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783 |
- /*!
- * \file include/TombRaider.h
- * \brief Loads maps, meshes, textures...
- *
- * \todo WARNING: No endian routines as of yet
- * \author Mongoose
- */
-
- #ifndef _TOMBRAIDER_H_
- #define _TOMBRAIDER_H_
-
- #include <cstdint>
- #include <cstdio>
-
- #include "TombRaiderData.h"
-
- /*!
- * \brief Loads maps, meshes, textures...
- */
- class TombRaider {
- public:
-
- /*!
- * \brief Constructs an object of TombRaider
- */
- TombRaider();
-
- /*!
- * \brief Deconstructs an object of TombRaider
- */
- ~TombRaider();
-
- ////////////////////////////////////////
- // Wash me -- not part of cleaned API //
- ////////////////////////////////////////
-
- int NumRooms();
-
- int NumMoveables();
-
- int NumTextures();
-
- /*!
- * \brief Get number of _special_ textures/images
- * \returns number of special textures/images
- */
- int NumSpecialTextures();
-
- int NumAnimations();
-
- unsigned int NumFrames();
-
- int NumStaticMeshes();
-
- int NumSprites();
-
- int NumSpriteSequences();
-
- int NumItems();
-
- tr2_version_type Engine();
-
- unsigned short* Frame();
-
- tr2_animation_t* Animation();
-
- tr2_item_t* Item();
-
- tr2_object_texture_t* ObjectTextures();
-
- /*!
- * \brief Get number of boxes
- * \returns number of boxes
- */
- unsigned int getNumBoxes();
-
- tr2_box_t* Box();
-
- tr2_mesh_t* Mesh();
-
- /*!
- * \brief Get number of animations for a moveable
- * \param moveable_index valid moveable id
- * \returns number of animations for specified moveable
- */
- int getNumAnimsForMoveable(int moveable_index);
-
- tr2_staticmesh_t* StaticMesh();
-
- tr2_moveable_t* Moveable();
-
- tr2_meshtree_t* MeshTree();
-
- /*!
- * \brief Get the sprites
- * \returns the sprite array
- */
- tr2_sprite_texture_t* Sprite();
-
- tr2_sprite_sequence_t* SpriteSequence();
-
- /*!
- * \brief Makes a 32bit RGBA image from a stexture/bmap
- * \param texture valid index into tex_special list
- * \returns 32bit RGBA image or NULL on error
- */
- unsigned char* SpecialTexTile(int texture);
-
- /*!
- * \brief Get copies of texture and it's bumpmap
- * \param texture valid textile index
- * \param image will be set to texture if found, or NULL
- * \param bumpmap will be set to bumpmap if found, or NULL
- */
- void Texture(int texture, unsigned char** image, unsigned char** bumpmap);
-
- unsigned int* Palette16();
-
- unsigned char* Palette8();
-
- tr2_room_t* Room();
-
- /*!
- * \brief Check if a file is a TombRaider pak
- * \param filename file to check
- * \returns 0 if it is a TombRaider pak
- */
- static int checkMime(const char* filename);
-
- /*!
- * \brief Loads TombRaider 1-5 pak into memory
- * and does some processing.
- * \param filename points to valid TombRaider pak
- * \returns 0 on success, < 0 on error
- * \sa TombRaider::loadTR5()
- */
- int Load(const char* filename);
-
- /*!
- * \brief Makes a clamped 0.0 to 1.0 texel from coord pair
- * \param texel texel value, is modified, divided by 255.0 and returned
- * \param offset if offset is negative, texel is decreased by one, else increased
- * \returns modified texel divided by 255.0
- */
- float adjustTexel(unsigned char texel, char offset);
-
- /*!
- * \brief Compute rotation angles from moveable animation data
- * \param frame moveable animation data
- * \param frame_offset moveable animation data
- * \param angle_offset moveable animation data
- * \param x will be set to computed angle
- * \param y will be set to computed angle
- * \param z will be set to computed angle
- */
- void computeRotationAngles(unsigned short** frame,
- unsigned int* frame_offset,
- unsigned int* angle_offset,
- float* x, float* y, float* z);
-
- /*!
- * \brief Returns computed UV in u and v
- * \param st object texture vert, its coordinates are added to the pixels and divided by 255.0
- * \param u will contain calculated x value
- * \param v will contain calculated y value
- */
- void computeUV(tr2_object_texture_vert_t* st, float* u, float* v);
-
- /*!
- * \brief Get number of bump maps in loaded pak
- * \returns number of bump maps
- */
- int getBumpMapCount();
-
- void getColor(int index, float color[4]);
-
- tr2_version_type getEngine();
-
- /*!
- * \brief Get the collision sphere for a mesh
- * \param meshIndex mesh index
- * \param center will be filled with center coordinates, not NULL
- * \param radius will be filled with radius, not NULL
- */
- void getMeshCollisionInfo(unsigned int meshIndex,
- float center[3], float* radius);
-
- /*!
- * \brief Get SIGNED mesh count (TR encoded < 0 errors)
- * \returns signed mesh count
- */
- int getMeshCount();
-
- /*!
- * \brief This method is made to let you fill arrays or
- * create single faces. There may be an allocatin version that
- * passes back arrays later.
- * Returns Quads/Rects as 2 triangles,
- * because returning quads would be too trivial :)
- * \param meshIndex mesh index
- * \param faceIndex face index
- * \param index allocated RGBA
- * \param color allocated RGBA
- * \fixme This method interface may change later
- */
- void getMeshColoredRectangle(unsigned int meshIndex,
- unsigned int faceIndex,
- int index[6], float color[4]);
-
- /*!
- * \brief This method is made to let you fill arrays or
- * create single faces. There may be an allocating version that
- * passes back arrays later.
- * \param meshIndex mesh index
- * \param faceIndex face index
- * \param index allocated RGBA
- * \param color allocated RGBA
- * \fixme This method interface may change later
- */
- void getMeshColoredTriangle(unsigned int meshIndex,
- unsigned int faceIndex,
- int index[3], float color[4]);
-
- /*!
- * \brief This method is made to let you fill arrays or
- * create single faces. There may be an allocatin version that
- * passes back arrays later.
- * Returns Quads/Rects as 2 triangles,
- * because returning quads would be too trivial :)
- * \param meshIndex mesh index
- * \param faceIndex face index
- * \param index allocated
- * \param st allocated
- * \param texture allocated
- * \param transparency allocated
- * \fixme This method interface may change later
- */
- void getMeshTexturedRectangle(unsigned int meshIndex,
- unsigned int faceIndex,
- int index[6], float st[12], int* texture,
- unsigned short* transparency);
-
- /*!
- * \brief This method is made to let you fill arrays or
- * create single faces. There may be an allocatin version that
- * passes back arrays later.
- * \param meshIndex mesh index
- * \param faceIndex face index
- * \param index allocated
- * \param st allocated
- * \param texture allocated
- * \param transparency allocated
- * \fixme This method interface may change later
- */
- void getMeshTexturedTriangle(unsigned int meshIndex,
- unsigned int faceIndex,
- int index[3], float st[6], int* texture,
- unsigned short* transparency);
-
- /*!
- * \brief Get face counts for a given mesh.
- *
- * \todo This method interface may change later...
- * \param meshIndex mesh index
- * \returns number of textured triangles in mesh
- */
- int getMeshTexturedTriangleCount(unsigned int meshIndex);
-
- /*!
- * \brief Get face counts for a given mesh.
- * \param meshIndex mesh index
- * \returns number of colored triangles in mesh
- */
- int getMeshColoredTriangleCount(unsigned int meshIndex);
-
- /*!
- * \brief Get face counts for a given mesh.
- * \param meshIndex mesh index
- * \returns number of textured rectangles in mesh
- */
- int getMeshTexturedRectangleCount(unsigned int meshIndex);
-
- /*!
- * \brief Get face counts for a given mesh.
- * \returns number if colored rectangles in mesh
- */
- int getMeshColoredRectangleCount(unsigned int meshIndex);
-
- /*!
- * \brief Get vertex, normal and color arrays for a mesh
- * \param meshIndex mesh index
- * \param vertexCount will be set to length of vertex array
- * \param verts will be set to allocated vertex array (XYX)
- * \param normalCount will be set to length of normal array
- * \param norms will be set to allocated normal array (IJK)
- * \param colorCount will be set to length of color array
- * \param colors will be set to allocated color array (I)
- */
- void getMeshVertexArrays(unsigned int meshIndex,
- unsigned int* vertexCount, float** verts,
- unsigned int* normalCount, float** norms,
- unsigned int* colorCount, float** colors);
-
- /*!
- * \brief Get a single collision box from room (unified)
- * \param roomIndex room index
- * \param index index of box in room
- * \param xyzA will contain first corner of box
- * \param xyzB will contain second corner of box
- * \param xyzC will contain third corner of box
- * \param xyzD will contain fourth corner of box
- * \returns 0 on success, < 0 on error
- */
- int getRoomBox(unsigned int roomIndex, unsigned int index,
- float* xyzA, float* xyzB, float* xyzC, float* xyzD);
-
- /*!
- * \brief Get number of collision boxes in room (unified)
- * \param roomIndex room index
- * \returns number of collision boxes in room
- */
- unsigned int getRoomBoxCount(unsigned int roomIndex);
-
- void getRoomInfo(unsigned int index,
- unsigned int* flags, float pos[3],
- float bboxMin[3], float bboxMax[3]);
-
- /*!
- * \brief Get a single light from a room (unified)
- * \param roomIndex valid room index
- * \param index valid light index in room
- * \param pos allocated, will contain position
- * \param color allocated, will contain color
- * \param dir allocated, will contain direction
- * \param attenuation will contain attenuation
- * \param cutoffAngle will contain cutoff angle
- * \param type will contain type
- * \param flags will contain flags
- * \returns 0 on success, < 0 on error
- */
- int getRoomLight(unsigned int roomIndex, unsigned int index,
- float pos[4], float color[4], float dir[3],
- float* attenuation, float* cutoffAngle,
- unsigned int* type, unsigned int* flags);
-
- /*!
- * \brief Get number of lights in room (unified)
- * \param roomIndex room index
- * \returns number of lights in room
- */
- unsigned int getRoomLightCount(unsigned int roomIndex);
-
- /*!
- * \brief Get a single model info from a room
- * \param roomIndex valid room index
- * \param index valid model index in room
- * \param modelIndex will contain starting mesh
- * \param pos will contain pos
- * \param yaw will contain yaw angle
- * \returns 0 on success, < 0 on error
- */
- int getRoomModel(unsigned int roomIndex, unsigned int index,
- int* modelIndex, float pos[3], float* yaw);
-
- /*!
- * \brief Get number of room models in room (unified)
- * \param roomIndex room index
- * \returns number of room models in room
- */
- unsigned int getRoomModelCount(unsigned int roomIndex);
-
- /*!
- * \brief Get a single portal from room (unified)
- * \param roomIndex valid room index
- * \param index valid portal index in room
- * \param adjoiningRoom will contain adjoining room index
- * \param normal allocated, will contain normal vector
- * \param vertices allocated, will contain vertices
- * \returns 0 on success, < 0 on error
- */
- int getRoomPortal(unsigned int roomIndex, unsigned int index,
- int* adjoiningRoom, float normal[3], float vertices[12]);
-
- /*!
- * \brief Get number of portals from room (unified)
- * \param roomIndex room index
- * \returns number of portals from room
- */
- unsigned int getRoomPortalCount(unsigned int roomIndex);
-
- /*!
- * \brief Get rectangle data with texCoords for non-matching
- * vertex/uv for each vertex in TombRaider room (unified)
- * \param roomIndex valid room index
- * \param rectangleIndex rectangle index in room
- * \param indices will contain indices
- * \param texCoords will contain texCoords
- * \param texture will contain texture
- * \param flags will contain flags
- */
- void getRoomRectangle(unsigned int roomIndex, unsigned int rectangleIndex,
- unsigned int* indices, float* texCoords, int* texture,
- unsigned int* flags);
-
- /*!
- * \brief Get number of rectangles from room (unified)
- * \param roomIndex room index
- * \returns number of rectangles from room
- */
- unsigned int getRoomRectangleCount(unsigned int roomIndex);
-
- /*!
- * \brief Get a single sector from room (unified)
- * \param roomIndex room index
- * \param index sector index
- * \param flags will contain flags
- * \param ceiling will contain ceiling
- * \param floor will contain floor
- * \param floorDataIndex will contain floor data index
- * \param boxIndex will contain boxIndex
- * \param roomBelow will contain roomBelow
- * \param roomAbove will contain roomAbove
- * \return 0 on success, < 0 on error
- */
- int getRoomSector(unsigned int roomIndex, unsigned int index,
- unsigned int* flags, float* ceiling, float* floor,
- int* floorDataIndex, int* boxIndex,
- int* roomBelow, int* roomAbove);
-
- /*!
- * \brief Get number of sectors in room (unified)
- * \param roomIndex room index
- * \param zSectorsCount will contain width of sector list
- * \param xSectorsCount will contain height of sector list
- * \returns number of sectors in room
- */
- unsigned int getRoomSectorCount(unsigned int roomIndex,
- unsigned int* zSectorsCount,
- unsigned int* xSectorsCount);
-
- void getRoomSprite(unsigned int roomIndex, unsigned int index,
- float scale, int* texture,
- float* pos, float* vertices, float* texcoords);
-
- /*!
- * \brief Get number of sprites in room (unified)
- * \param roomIndex room index
- * \returns number of sprites in room
- */
- unsigned int getRoomSpriteCount(unsigned int roomIndex);
-
- /*!
- * \brief Gets triangle data with texCoords for non-matching
- * vertex/uv for each vertex in TombRaider room (unified)
- * \param roomIndex room index
- * \param triangleIndex triangle index
- * \param indices will contain indices
- * \param texCoords will contain texCoords
- * \param texture will contain texture
- * \param flags will contain flags
- */
- void getRoomTriangle(unsigned int roomIndex, unsigned int triangleIndex,
- unsigned int* indices, float* texCoords, int* texture,
- unsigned int* flags);
-
- /*!
- * \brief Gets triangle data with texCoords for non-matching
- * vertex/uv for each vertex in TombRaider room.
- *
- * This is used with vertices, colors, etc. to do partial array
- * rendering, since the texcoords will never match vertives
- * (Tomb Raider is textile based).
- * \param index room index
- * \param textureOffset texture offset
- * \param count will contain count
- * \param indices will contain indices
- * \param texCoords will contain texCoords
- * \param textures will contain textures
- * \param flags will contain flags
- */
- void getRoomTriangles(unsigned int index, int textureOffset,
- unsigned int* count, unsigned int** indices,
- float** texCoords, int** textures,
- unsigned int** flags);
-
- /*!
- * \brief Gets triangle data with duplicated vertex/color/normal
- * data for each face vertex to match the textile based texcoords.
- *
- * This uses more memory, but lets you do direct array rendering
- * with OpenGL, D3D, etc.
- * \param roomIndex room index
- * \param textureOffset texture offset
- * \param count will contain count
- * \param indices will contain indices
- * \param vertices will contain vertices
- * \param texCoords will contain texCoords
- * \param colors will contain colors
- * \param textures will contain textures
- * \param flags will contain flags
- */
- void getRoomTriangles(unsigned int roomIndex, int textureOffset,
- unsigned int* count,
- unsigned int** indices, float** vertices,
- float** texCoords, float** colors,
- int** textures, unsigned int** flags);
-
- /*!
- * \brief Get number of triangles from room (unified)
- * \param roomIndex room index
- * \returns number of triangles from room
- */
- unsigned int getRoomTriangleCount(unsigned int roomIndex);
-
- /*!
- * \brief Gets vertex position and color
- * \param roomIndex room index
- * \param vertexIndex vertex index
- * \param xyz will contain vertex position, has to be allocated
- * \param rgba will contain vertex color, has to be allocated
- */
- void getRoomVertex(unsigned int roomIndex, unsigned int vertexIndex,
- float* xyz, float* rgba);
-
- /*!
- * \brief Get allocated vertex and color arrays and their element counts (unified)
- * \param roomIndex valid room index
- * \param vertexCount will contain vertex array length
- * \param vertices will contain vertex array
- * \param normalCount will contain normal array length
- * \param normals will contain normal array
- * \param colorCount will contain color array length
- * \param colors will contain color array
- */
- void getRoomVertexArrays(unsigned int roomIndex,
- unsigned int* vertexCount, float** vertices,
- unsigned int* normalCount, float** normals,
- unsigned int* colorCount, float** colors);
-
- /*!
- * \brief Get number of lights in room (unified)
- * \param roomIndex room index
- * \returns number of lights in room
- */
- unsigned int getRoomVertexCount(unsigned int roomIndex);
-
- /*!
- * \brief Get sky mesh ID
- * \returns moveable id of sky mesh or -1 if none
- */
- int getSkyModelId();
-
- void getSprites();
-
- /*!
- * \brief Get a copy of a sound sample and its byte size
- * \param index sound sample index
- * \param bytes will contain byte size of sound sample
- * \param data will contain sound sample
- */
- void getSoundSample(unsigned int index,
- unsigned int* bytes, unsigned char** data);
-
- /*!
- * \brief Get number of loaded sound samples
- * \returns number of sound samples loaded
- */
- unsigned int getSoundSamplesCount();
-
- /*!
- * \brief Check if a mesh is valid
- * \param index mesh index (?)
- * \returns true if mesh is valid
- */
- bool isMeshValid(int index);
-
- /*!
- * \brief Check if a room is valid (TRC support)
- * \param index room index
- * \returns true if room is valid
- */
- bool isRoomValid(int index);
-
- /*!
- * \brief Load an external sound pak for TR2 and TR3
- * \param filename pak to load
- * \returns < 0 on error
- */
- int loadSFX(const char* filename);
-
- void reset();
-
- void setDebug(bool toggle);
-
- /*!
- * \brief Sets lighting factor for each vertex color per room in TR3 paks
- * \param f new lighting factor
- */
- void setRoomVertexLightingFactor(float f);
-
- /*!
- * \brief Set scaling for sprite texel alignment, etc.
- * \param f new scaling factor
- */
- void setTexelScalingFactor(float f);
-
- private:
-
- void extractMeshes(unsigned char* mesh_data,
- unsigned int num_mesh_pointers,
- unsigned int* mesh_pointers);
-
- int Fread(void* buffer, size_t size, size_t count, FILE* f);
-
- /*!
- * \brief Get a copy of the sound samples
- * \param bytes will contain size of sound samples
- * \param data will contain sound samples themselves
- */
- void getRiffData(unsigned int* bytes, unsigned char** data);
-
- /*!
- * \brief Get a copy of a TR4 sound sample
- * \param index sound sample index
- * \param bytes will contain length of sound sample
- * \param data will contain sound sample itself
- */
- void getRiffDataTR4(unsigned int index,
- unsigned int* bytes, unsigned char** data);
-
- /*!
- * \brief Get an array of offsets for a contiguous RIFF data stream in chunks.
- *
- * Offsets will be allocated with enough space to hold expected
- * number of offsets. (Should be known number, otherwise not all RIFFs
- * will be parsed.)
- * \param riffData riff data
- * \param riffDataBytes length of riff data
- * \param offsets will contain offsets
- * \param numOffsets known number
- * \returns number of RIFFs found
- */
- int getRiffOffsets(unsigned char* riffData, unsigned int riffDataBytes,
- unsigned int** offsets, unsigned int numOffsets);
-
- /*!
- * \brief Makes a 32bit RGBA image from a textile.
- *
- * This handles all selection and conversion, including
- * alpha layering flags, now.
- * \param texture valid index into textile list
- * \returns 32bit RGBA image or NULL on error
- */
- unsigned char* getTexTile(int texture);
-
- /*!
- * \brief Loads a TR5 pak into memory.
- * \param f valid FILE
- * \returns 0 on success, < 0 on error
- */
- int loadTR5(FILE* f);
-
- static void print(const char* methodName, const char* s, ...) __attribute__((format(printf, 2, 3)));
-
- void printDebug(const char* methodName, const char* s, ...) __attribute__((format(printf, 3, 4)));
-
- bool mDebug; //!< Debug output toggle
- unsigned int mPakVersion; //!< TombRaider pak file header version
- tr2_version_type mEngineVersion; //!< TombRaider engine version
- tr2_colour_t _palette8[256]; //!< 8-bit palette
- unsigned int _palette16[256]; //!< 16-bit palette
- unsigned int _num_textiles; //!< Total number of texture tiles
- unsigned short _num_room_textures; //!< Num textures only for room use?
- unsigned short _num_misc_textures; //!< Num of textures for misc use?
- unsigned short _num_bump_map_textures; //!< Num of textures that are bump map, texture pairs
- tr2_textile8_t* _textile8; //!< 8-bit (palettised) textiles
- tr2_textile16_t* _textile16; //!< 16-bit (ARGB) textiles
- tr2_textile32_t* _textile32; //!< 32-bit (BGRA) textiles
- unsigned int _num_tex_special; //!< Special textures and bump maps count
- unsigned char* _tex_special; //!< Special textures and bump maps
- unsigned int _unknown_t; //!< 32-bit unknown (always 0 in real TR2 levels)
- unsigned short _num_rooms; //!< Number of rooms in this level
- tr2_room_t* _rooms; //!< List of rooms (TR1,TR2,TR3,TR4)
- tr5_room_t* mRoomsTR5; //!< Rooms ( TR5 / TRC ) Only
- unsigned int _num_floor_data; //!< Num of words of floor data this level
- unsigned short* _floor_data; //!< Floor data
- int mMeshCount; //!< Number of meshes this level
- tr2_mesh_t* mMeshes; //!< list of meshes
- unsigned int _num_animations; //!< number of animations this level
- tr2_animation_t* _animations; //!< list of animations
- unsigned int _num_state_changes; //!< number of structures(?) this level
- tr2_state_change_t* _state_changes; //!< list of structures
- unsigned int _num_anim_dispatches; //!< number of ranges(?) this level
- tr2_anim_dispatch_t* _anim_dispatches; //!< list of ranges
- unsigned int _num_anim_commands; //!< number of Bone1s this level
- tr2_anim_command_t* _anim_commands; //!< list of Bone1s
- unsigned int _num_mesh_trees; //!< number of Bone2s this level
- tr2_meshtree_t* _mesh_trees; //!< list of Bone2s
- unsigned int _num_frames; //!< num of words of frame data this level
- unsigned short* _frames; //!< frame data
- unsigned int _num_moveables; //!< number of moveables this level
- tr2_moveable_t* _moveables; //!< list of moveables
-
- uint32_t numMoveablesTR5;
- tr5_moveable_t* moveablesTR5;
-
- uint32_t numAnimationsTR5;
- tr5_animation_t* animationsTR5;
-
- uint32_t numObjectTexturesTR5;
- tr5_object_texture_t* objectTexturesTR5;
-
- uint32_t numCinematicFramesTR5;
- tr5_cinematic_frame_t* cinematicFramesTR5;
-
- uint32_t numFlyByCamerasTR5;
- tr5_flyby_camera_t* flyByCamerasTR5;
-
- unsigned int _num_static_meshes; //!< number of static meshes this level
- tr2_staticmesh_t* _static_meshes; //!< static meshes
- unsigned int _num_object_textures; //!< number of object textures this level
- tr2_object_texture_t* _object_textures; //!< list of object textures
-
- unsigned int _num_sprite_textures; //!< num of sprite textures this level
- tr2_sprite_texture_t* _sprite_textures; //!< list of sprite textures
- unsigned int _num_sprite_sequences; //!< num of sprite sequences this level
- tr2_sprite_sequence_t* _sprite_sequences; //!< sprite sequence data
- int _num_cameras; //!< Number of Cameras
- tr2_camera_t* _cameras; //!< cameras
- int _num_sound_sources; //!< Number of Sounds
- tr2_sound_source_t* _sound_sources; //!< sounds
- int _num_boxes; //!< Number of Boxes
- tr2_box_t* _boxes; /*!< boxes - looks like
- * struct { unsigned short value[4]; }
- * - value[0..2] might be a vector;
- * value[3] seems to be index into
- * Overlaps[] */
- int _num_overlaps; //!< Number of Overlaps
- short* _overlaps; /*!< Overlaps -
- * looks like ushort; 0x8000 is flag
- * of some sort appears to be an
- * offset into Boxes[] and/or
- * Boxes2[] */
- short* _zones; //!< Boxes2
- int _num_animated_textures; //!< Number of AnimTextures
- short* _animated_textures; //!< Animtextures
- int _num_items; //!< Number of Items
- tr2_item_t* _items; //!< Items
- unsigned char* _light_map; //!< Colour-light maps
- unsigned int _num_cinematic_frames; //!< Number of cut-scene frames
- tr2_cinematic_frame_t* _cinematic_frames; //!< Cut-scene frames
- short _num_demo_data; //!< Number of Demo Data
- unsigned char* _demo_data; //!< Demo data
- float mRoomVertexLightingFactor;
- float mTexelScale;
-
- // Sound data
- short* mSoundMap; //!< Sound map
- int mNumSoundDetails; //!< Number of SampleModifiers
- tr2_sound_details_t* mSoundDetails; //!< Sample modifiers
- int mNumSampleIndices; //!< Number of Sample Indices
- int* mSampleIndices; //!< Sample indices
- unsigned int* mSampleIndicesTR5;
- bool mRiffAlternateLoaded; //!< Is a TR2,TR3 SFX loaded?
- unsigned int* mRiffAlternateOffsets; //!< After parsing this will
- //!< hold byte offsets for TR2,TR3
- //!< RIFFs in the buffered SFX
- int mRiffDataSz; //!< Byte size of a loaded SFX
- unsigned char* mRiffData; //!< SFX RIFF data in chunks
- unsigned int mNumTR4Samples;
- unsigned char** mTR4Samples;
- unsigned int* mTR4SamplesSz;
-
- // For packed Fread emu/wrapper
- unsigned char*
- mCompressedLevelData; //!< Buffer used to emulate fread with uncompressed libz data
- unsigned int mCompressedLevelDataOffset; //!< Offset into buffer
- unsigned int mCompressedLevelSize; //!< Size of buffer
- tr_fread_mode_t mFreadMode; //!< Fread mode file|buffer
- };
-
- #endif
|