/// \brief reads the 256 colour palette values. void TR_Level::read_tr_palette(SDL_RWops * const src, tr2_palette_t & palette) { for (int i = 0; i < 256; i++) read_tr_colour(src, palette.colour[i]); }
void TR_Level::read_tr3_room(SDL_RWops * const src, tr5_room_t & room) { bitu32 num_data_words; bitu32 i; int pos; // read and change coordinate system room.offset.x = (float)read_bit32(src); room.offset.y = 0; room.offset.z = (float)-read_bit32(src); room.y_bottom = (float)-read_bit32(src); room.y_top = (float)-read_bit32(src); num_data_words = read_bitu32(src); pos = SDL_RWseek(src, 0, SEEK_CUR); room.num_layers = 0; room.num_vertices = read_bitu16(src); room.vertices.resize(room.num_vertices); for (i = 0; i < room.num_vertices; i++) read_tr3_room_vertex(src, room.vertices[i]); room.num_rectangles = read_bitu16(src); room.rectangles.resize(room.num_rectangles); for (i = 0; i < room.num_rectangles; i++) read_tr_face4(src, room.rectangles[i]); room.num_triangles = read_bitu16(src); room.triangles.resize(room.num_triangles); for (i = 0; i < room.num_triangles; i++) read_tr_face3(src, room.triangles[i]); room.num_sprites = read_bitu16(src); room.sprites.resize(room.num_sprites); for (i = 0; i < room.num_sprites; i++) read_tr_room_sprite(src, room.sprites[i]); // set to the right position in case that there is some unused data SDL_RWseek(src, pos + (num_data_words * 2), SEEK_SET); room.num_portals = read_bitu16(src); room.portals.resize(room.num_portals); for (i = 0; i < room.num_portals; i++) read_tr_room_portal(src, room.portals[i]); room.num_zsectors = read_bitu16(src); room.num_xsectors = read_bitu16(src); room.sector_list.resize(room.num_zsectors * room.num_xsectors); for (i = 0; i < (bitu32)(room.num_zsectors * room.num_xsectors); i++) read_tr_room_sector(src, room.sector_list[i]); room.intensity1 = read_bit16(src); room.intensity2 = read_bit16(src); // only in TR2 room.light_mode = 0; room.num_lights = read_bitu16(src); room.lights.resize(room.num_lights); for (i = 0; i < room.num_lights; i++) read_tr2_room_light(src, room.lights[i]); room.num_static_meshes = read_bitu16(src); room.static_meshes.resize(room.num_static_meshes); for (i = 0; i < room.num_static_meshes; i++) read_tr3_room_staticmesh(src, room.static_meshes[i]); room.alternate_room = read_bit16(src); room.flags = read_bitu16(src); // only in TR3-TR4 read_tr_colour(src, room.fog_colour); room.light_colour.r = room.intensity1 / 32767.0f; room.light_colour.g = room.intensity1 / 32767.0f; room.light_colour.b = room.intensity1 / 32767.0f; room.light_colour.a = 1.0f; }