00001 #ifndef _L_MAIN_H_ 00002 #define _L_MAIN_H_ 00003 00004 #include "tr_types.h" 00005 00006 typedef enum { 00007 TOMB_RAIDER_I, 00008 TOMB_RAIDER_I_DEMO, 00009 TOMB_RAIDER_UNFINISHED_BUSINESS, 00010 TOMB_RAIDER_II, 00011 TOMB_RAIDER_II_DEMO, 00012 TOMB_RAIDER_III, 00013 TOMB_RAIDER_IV, 00014 TOMB_RAIDER_IV_DEMO, 00015 TOMB_RAIDER_V 00016 } tr_version_e; 00017 00025 class TR_Level { 00026 public: 00027 tr_version_e game_version; 00028 bitu32 num_textiles; 00029 bitu32 num_room_textiles; 00030 bitu32 num_obj_textiles; 00031 bitu32 num_bump_textiles; 00032 bitu32 num_misc_textiles; 00033 std::vector < tr_textile8_t > textile8; 00034 std::vector < tr2_textile16_t > textile16; 00035 std::vector < tr4_textile32_t > textile32; 00036 bool read_32bit_textiles; 00037 std::vector < tr5_room_t > rooms; 00038 std::vector < bitu16 >floor_data; 00039 std::vector < tr4_mesh_t > meshes; 00040 std::vector < bitu32 >mesh_indices; 00041 std::vector < tr_animation_t > animations; 00042 std::vector < tr_state_change_t > state_changes; 00043 std::vector < tr_anim_dispatch_t > anim_dispatches; 00044 std::vector < tr_anim_command_t > anim_commands; 00045 std::vector < tr_meshtree_t > mesh_trees; 00046 std::vector < tr_frame_t > frames; 00047 std::vector < tr_moveable_t > moveables; 00048 std::vector < tr_staticmesh_t > static_meshes; 00049 std::vector < tr4_object_texture_t > object_textures; 00050 std::vector < tr_animated_textures_t > animated_textures; 00051 std::vector < tr_sprite_texture_t > sprite_textures; 00052 std::vector < tr_sprite_sequence_t > sprite_sequences; 00053 std::vector < tr_camera_t > cameras; 00054 std::vector < tr4_extra_camera_t > flyby_cameras; 00055 std::vector < tr_sound_source_t > sound_sources; 00056 std::vector < tr_box_t > boxes; 00057 std::vector < bitu16 >overlaps; 00058 std::vector < bit16 >zones; 00059 std::vector < tr2_item_t > items; 00060 tr_lightmap_t lightmap; 00061 tr2_palette_t palette; 00062 tr2_palette_t palette16; 00063 std::vector < tr4_ai_object_t > ai_objects; 00064 std::vector < tr_cinematic_frame_t > cinematic_frames; 00065 std::vector < bitu8 >demo_data; 00066 bit16 soundmap[450]; 00067 std::vector < tr_sound_details_t > sound_details; 00068 std::vector < bitu8 >samples; 00069 std::vector < bitu32 >sample_indices; 00070 00071 void read_level(SDL_RWops * const src, tr_version_e game_version); 00072 00078 class trxReadError { 00079 public: 00080 char *m_message; 00081 char *m_file; 00082 int m_line; 00083 char *m_rcsid; 00084 00085 trxReadError (char *const message, char *const file, int line, char *const rcsid); 00086 }; 00087 00088 protected: 00089 bit8 read_bit8(SDL_RWops * const src); 00090 bitu8 read_bitu8(SDL_RWops * const src); 00091 bit16 read_bit16(SDL_RWops * const src); 00092 bitu16 read_bitu16(SDL_RWops * const src); 00093 bit32 read_bit32(SDL_RWops * const src); 00094 bitu32 read_bitu32(SDL_RWops * const src); 00095 float read_float(SDL_RWops * const src); 00096 00097 void read_mesh_data(SDL_RWops * const src); 00098 void read_frame_moveable_data(SDL_RWops * const src); 00099 00100 void read_tr_colour(SDL_RWops * const src, tr2_colour_t & colour); 00101 void read_tr_vertex16(SDL_RWops * const src, tr5_vertex_t & vertex); 00102 void read_tr_vertex32(SDL_RWops * const src, tr5_vertex_t & vertex); 00103 void read_tr_face3(SDL_RWops * const src, tr4_face3_t & face); 00104 void read_tr_face4(SDL_RWops * const src, tr4_face4_t & face); 00105 void read_tr_textile8(SDL_RWops * const src, tr_textile8_t & textile); 00106 void read_tr_lightmap(SDL_RWops * const src, tr_lightmap_t & lightmap); 00107 void read_tr_palette(SDL_RWops * const src, tr2_palette_t & palette); 00108 void read_tr_room_sprite(SDL_RWops * const src, tr_room_sprite_t & room_sprite); 00109 void read_tr_room_portal(SDL_RWops * const src, tr_room_portal_t & portal); 00110 void read_tr_room_sector(SDL_RWops * const src, tr_room_sector_t & room_sector); 00111 void read_tr_room_light(SDL_RWops * const src, tr5_room_light_t & light); 00112 void read_tr_room_vertex(SDL_RWops * const src, tr5_room_vertex_t & room_vertex); 00113 void read_tr_room_staticmesh(SDL_RWops * const src, tr2_room_staticmesh_t & room_static_mesh); 00114 void read_tr_room(SDL_RWops * const src, tr5_room_t & room); 00115 void read_tr_object_texture_vert(SDL_RWops * const src, tr4_object_texture_vert_t & vert); 00116 void read_tr_object_texture(SDL_RWops * const src, tr4_object_texture_t & object_texture); 00117 void read_tr_sprite_texture(SDL_RWops * const src, tr_sprite_texture_t & sprite_texture); 00118 void read_tr_sprite_sequence(SDL_RWops * const src, tr_sprite_sequence_t & sprite_sequence); 00119 void read_tr_mesh(SDL_RWops * const src, tr4_mesh_t & mesh); 00120 void read_tr_animation(SDL_RWops * const src, tr_animation_t & animation); 00121 void read_tr_meshtree(SDL_RWops * const src, tr_meshtree_t & meshtree); 00122 void read_tr_frame(SDL_RWops * const src, tr_frame_t & frame, bitu32 num_rotations); 00123 void read_tr_moveable(SDL_RWops * const src, tr_moveable_t & moveable); 00124 void read_tr_item(SDL_RWops * const src, tr2_item_t & item); 00125 void read_tr_staticmesh(SDL_RWops * const src, tr_staticmesh_t & mesh); 00126 void read_tr_level(SDL_RWops * const src, bool demo_or_ub); 00127 00128 void read_tr2_colour4(SDL_RWops * const src, tr2_colour_t & colour); 00129 void read_tr2_palette16(SDL_RWops * const src, tr2_palette_t & palette16); 00130 void read_tr2_textile16(SDL_RWops * const src, tr2_textile16_t & textile); 00131 void read_tr2_room_light(SDL_RWops * const src, tr5_room_light_t & light); 00132 void read_tr2_room_vertex(SDL_RWops * const src, tr5_room_vertex_t & room_vertex); 00133 void read_tr2_room_staticmesh(SDL_RWops * const src, tr2_room_staticmesh_t & room_static_mesh); 00134 void read_tr2_room(SDL_RWops * const src, tr5_room_t & room); 00135 void read_tr2_frame(SDL_RWops * const src, tr_frame_t & frame, bitu32 num_rotations); 00136 void read_tr2_item(SDL_RWops * const src, tr2_item_t & item); 00137 void read_tr2_level(SDL_RWops * const src, bool demo); 00138 00139 void read_tr3_room_vertex(SDL_RWops * const src, tr5_room_vertex_t & room_vertex); 00140 void read_tr3_room_staticmesh(SDL_RWops * const src, tr2_room_staticmesh_t & room_static_mesh); 00141 void read_tr3_room(SDL_RWops * const src, tr5_room_t & room); 00142 void read_tr3_item(SDL_RWops * const src, tr2_item_t & item); 00143 void read_tr3_level(SDL_RWops * const src); 00144 00145 void read_tr4_vertex_float(SDL_RWops * const src, tr5_vertex_t & vertex); 00146 void read_tr4_textile32(SDL_RWops * const src, tr4_textile32_t & textile); 00147 void read_tr4_face3(SDL_RWops * const src, tr4_face3_t & meshface); 00148 void read_tr4_face4(SDL_RWops * const src, tr4_face4_t & meshface); 00149 void read_tr4_room_light(SDL_RWops * const src, tr5_room_light_t & light); 00150 void read_tr4_room(SDL_RWops * const src, tr5_room_t & room); 00151 void read_tr4_object_texture_vert(SDL_RWops * const src, tr4_object_texture_vert_t & vert); 00152 void read_tr4_object_texture(SDL_RWops * const src, tr4_object_texture_t & object_texture); 00153 void read_tr4_mesh(SDL_RWops * const src, tr4_mesh_t & mesh); 00154 void read_tr4_animation(SDL_RWops * const src, tr_animation_t & animation); 00155 void read_tr4_level(SDL_RWops * const _src); 00156 00157 void read_tr5_room_light(SDL_RWops * const src, tr5_room_light_t & light); 00158 void read_tr5_room_layer(SDL_RWops * const src, tr5_room_layer_t & layer); 00159 void read_tr5_room_vertex(SDL_RWops * const src, tr5_room_vertex_t & vert); 00160 void read_tr5_room(SDL_RWops * const orgsrc, tr5_room_t & room); 00161 void read_tr5_moveable(SDL_RWops * const src, tr_moveable_t & moveable); 00162 void read_tr5_level(SDL_RWops * const src); 00163 }; 00164 00165 #endif // _L_MAIN_H_