/* * reads n polymodel structs from a PHYSFS_file */ extern int polymodel_read_n(polymodel *pm, int n, PHYSFS_file *fp) { int i, j; for (i = 0; i < n; i++) { pm[i].n_models = PHYSFSX_readInt(fp); pm[i].model_data_size = PHYSFSX_readInt(fp); pm[i].model_data = (ubyte *) (size_t)PHYSFSX_readInt(fp); for (j = 0; j < MAX_SUBMODELS; j++) pm[i].submodel_ptrs[j] = PHYSFSX_readInt(fp); for (j = 0; j < MAX_SUBMODELS; j++) PHYSFSX_readVector(&(pm[i].submodel_offsets[j]), fp); for (j = 0; j < MAX_SUBMODELS; j++) PHYSFSX_readVector(&(pm[i].submodel_norms[j]), fp); for (j = 0; j < MAX_SUBMODELS; j++) PHYSFSX_readVector(&(pm[i].submodel_pnts[j]), fp); for (j = 0; j < MAX_SUBMODELS; j++) pm[i].submodel_rads[j] = PHYSFSX_readFix(fp); PHYSFS_read(fp, pm[i].submodel_parents, MAX_SUBMODELS, 1); for (j = 0; j < MAX_SUBMODELS; j++) PHYSFSX_readVector(&(pm[i].submodel_mins[j]), fp); for (j = 0; j < MAX_SUBMODELS; j++) PHYSFSX_readVector(&(pm[i].submodel_maxs[j]), fp); PHYSFSX_readVector(&(pm[i].mins), fp); PHYSFSX_readVector(&(pm[i].maxs), fp); pm[i].rad = PHYSFSX_readFix(fp); pm[i].n_textures = PHYSFSX_readByte(fp); pm[i].first_texture = PHYSFSX_readShort(fp); pm[i].simpler_model = PHYSFSX_readByte(fp); } return i; }
/* * reads a polymodel structure from a PHYSFS_file */ extern void polymodel_read(polymodel *pm, PHYSFS_file *fp) { int i; pm->n_models = PHYSFSX_readInt(fp); pm->model_data_size = PHYSFSX_readInt(fp); pm->model_data = (ubyte *)(size_t)PHYSFSX_readInt(fp); // garbage, read it anyway just for consistency for (i = 0; i < MAX_SUBMODELS; i++) pm->submodel_ptrs[i] = PHYSFSX_readInt(fp); for (i = 0; i < MAX_SUBMODELS; i++) PHYSFSX_readVector(&(pm->submodel_offsets[i]), fp); for (i = 0; i < MAX_SUBMODELS; i++) PHYSFSX_readVector(&(pm->submodel_norms[i]), fp); for (i = 0; i < MAX_SUBMODELS; i++) PHYSFSX_readVector(&(pm->submodel_pnts[i]), fp); for (i = 0; i < MAX_SUBMODELS; i++) pm->submodel_rads[i] = PHYSFSX_readFix(fp); PHYSFS_read(fp, pm->submodel_parents, MAX_SUBMODELS, 1); for (i = 0; i < MAX_SUBMODELS; i++) PHYSFSX_readVector(&(pm->submodel_mins[i]), fp); for (i = 0; i < MAX_SUBMODELS; i++) PHYSFSX_readVector(&(pm->submodel_maxs[i]), fp); PHYSFSX_readVector(&(pm->mins), fp); PHYSFSX_readVector(&(pm->maxs), fp); pm->rad = PHYSFSX_readFix(fp); pm->n_textures = PHYSFSX_readByte(fp); pm->first_texture = PHYSFSX_readShort(fp); pm->simpler_model = PHYSFSX_readByte(fp); }
/* * reads n eclip structs from a PHYSFS_file */ int eclip_read_n(eclip *ec, int n, PHYSFS_file *fp) { int i, j; for (i = 0; i < n; i++) { ec[i].vc.play_time = PHYSFSX_readFix(fp); ec[i].vc.num_frames = PHYSFSX_readInt(fp); ec[i].vc.frame_time = PHYSFSX_readFix(fp); ec[i].vc.flags = PHYSFSX_readInt(fp); ec[i].vc.sound_num = PHYSFSX_readShort(fp); for (j = 0; j < VCLIP_MAX_FRAMES; j++) ec[i].vc.frames[j].index = PHYSFSX_readShort(fp); ec[i].vc.light_value = PHYSFSX_readFix(fp); ec[i].time_left = PHYSFSX_readFix(fp); ec[i].frame_count = PHYSFSX_readInt(fp); ec[i].changing_wall_texture = PHYSFSX_readShort(fp); ec[i].changing_object_texture = PHYSFSX_readShort(fp); ec[i].flags = PHYSFSX_readInt(fp); ec[i].crit_clip = PHYSFSX_readInt(fp); ec[i].dest_bm_num = PHYSFSX_readInt(fp); ec[i].dest_vclip = PHYSFSX_readInt(fp); ec[i].dest_eclip = PHYSFSX_readInt(fp); ec[i].dest_size = PHYSFSX_readFix(fp); ec[i].sound_num = PHYSFSX_readInt(fp); ec[i].segnum = PHYSFSX_readInt(fp); ec[i].sidenum = PHYSFSX_readInt(fp); } return i; }
static void tmap_info_read(tmap_info &ti, PHYSFS_File *fp) { PHYSFS_read(fp, ti.filename, 13, 1); ti.flags = PHYSFSX_readByte(fp); ti.lighting = PHYSFSX_readFix(fp); ti.damage = PHYSFSX_readFix(fp); ti.eclip_num = PHYSFSX_readInt(fp); }
/* * reads n powerup_type_info structs from a PHYSFS_file */ int powerup_type_info_read_n(powerup_type_info *pti, int n, PHYSFS_file *fp) { int i; for (i = 0; i < n; i++) { pti[i].vclip_num = PHYSFSX_readInt(fp); pti[i].hit_sound = PHYSFSX_readInt(fp); pti[i].size = PHYSFSX_readFix(fp); pti[i].light = PHYSFSX_readFix(fp); } return i; }
static void tmap_info_read(tmap_info &ti, PHYSFS_File *fp) { ti.flags = PHYSFSX_readByte(fp); PHYSFSX_readByte(fp); PHYSFSX_readByte(fp); PHYSFSX_readByte(fp); ti.lighting = PHYSFSX_readFix(fp); ti.damage = PHYSFSX_readFix(fp); ti.eclip_num = PHYSFSX_readShort(fp); ti.destroyed = PHYSFSX_readShort(fp); ti.slide_u = PHYSFSX_readShort(fp); ti.slide_v = PHYSFSX_readShort(fp); }
/* * reads a v16_wall structure from a PHYSFS_file */ extern void v16_wall_read(v16_wall *w, PHYSFS_file *fp) { w->type = PHYSFSX_readByte(fp); w->flags = PHYSFSX_readByte(fp); w->hps = PHYSFSX_readFix(fp); w->trigger = PHYSFSX_readByte(fp); w->clip_num = PHYSFSX_readByte(fp); w->keys = PHYSFSX_readByte(fp); }
/* * reads an active_door structure from a PHYSFS_file */ extern void active_door_read(active_door *ad, PHYSFS_file *fp) { ad->n_parts = PHYSFSX_readInt(fp); ad->front_wallnum[0] = PHYSFSX_readShort(fp); ad->front_wallnum[1] = PHYSFSX_readShort(fp); ad->back_wallnum[0] = PHYSFSX_readShort(fp); ad->back_wallnum[1] = PHYSFSX_readShort(fp); ad->time = PHYSFSX_readFix(fp); }
/* * reads n tmap_info structs from a PHYSFS_file */ static int tmap_info_read_n(tmap_info *ti, int n, PHYSFS_file *fp) { int i; for (i = 0; i < n; i++) { ti[i].flags = PHYSFSX_readByte(fp); ti[i].pad[0] = PHYSFSX_readByte(fp); ti[i].pad[1] = PHYSFSX_readByte(fp); ti[i].pad[2] = PHYSFSX_readByte(fp); ti[i].lighting = PHYSFSX_readFix(fp); ti[i].damage = PHYSFSX_readFix(fp); ti[i].eclip_num = PHYSFSX_readShort(fp); ti[i].destroyed = PHYSFSX_readShort(fp); ti[i].slide_u = PHYSFSX_readShort(fp); ti[i].slide_v = PHYSFSX_readShort(fp); } return i; }
/* * reads a segment2 structure from a PHYSFS_file */ void segment2_read(segment *s2, PHYSFS_file *fp) { s2->special = PHYSFSX_readByte(fp); if (s2->special >= MAX_CENTER_TYPES) s2->special = SEGMENT_IS_NOTHING; // remove goals etc. s2->matcen_num = PHYSFSX_readByte(fp); s2->value = PHYSFSX_readByte(fp); /*s2->s2_flags =*/ PHYSFSX_readByte(fp); // descent 2 ambient sound handling s2->static_light = PHYSFSX_readFix(fp); }
/* * reads a v19_door structure from a PHYSFS_file */ extern void v19_door_read(v19_door *d, PHYSFS_file *fp) { d->n_parts = PHYSFSX_readInt(fp); d->seg[0] = PHYSFSX_readShort(fp); d->seg[1] = PHYSFSX_readShort(fp); d->side[0] = PHYSFSX_readShort(fp); d->side[1] = PHYSFSX_readShort(fp); d->type[0] = PHYSFSX_readShort(fp); d->type[1] = PHYSFSX_readShort(fp); d->open = PHYSFSX_readFix(fp); }
/* * reads a v19_wall structure from a PHYSFS_file */ extern void v19_wall_read(v19_wall *w, PHYSFS_file *fp) { w->segnum = PHYSFSX_readInt(fp); w->sidenum = PHYSFSX_readInt(fp); w->type = PHYSFSX_readByte(fp); w->flags = PHYSFSX_readByte(fp); w->hps = PHYSFSX_readFix(fp); w->trigger = PHYSFSX_readByte(fp); w->clip_num = PHYSFSX_readByte(fp); w->keys = PHYSFSX_readByte(fp); w->linked_wall = PHYSFSX_readInt(fp); }
/* * reads n eclip structs from a PHYSFS_file */ int eclip_read_n(eclip *ec, int n, PHYSFS_file *fp) { int i; for (i = 0; i < n; i++) { vclip_read_n(&ec[i].vc, 1, fp); ec[i].time_left = PHYSFSX_readFix(fp); ec[i].frame_count = PHYSFSX_readInt(fp); ec[i].changing_wall_texture = PHYSFSX_readShort(fp); ec[i].changing_object_texture = PHYSFSX_readShort(fp); ec[i].flags = PHYSFSX_readInt(fp); ec[i].crit_clip = PHYSFSX_readInt(fp); ec[i].dest_bm_num = PHYSFSX_readInt(fp); ec[i].dest_vclip = PHYSFSX_readInt(fp); ec[i].dest_eclip = PHYSFSX_readInt(fp); ec[i].dest_size = PHYSFSX_readFix(fp); ec[i].sound_num = PHYSFSX_readInt(fp); ec[i].segnum = (segnum_t)PHYSFSX_readInt(fp); ec[i].sidenum = PHYSFSX_readInt(fp); } return i; }
/* * reads a wall structure from a PHYSFS_file */ extern void wall_read(wall *w, PHYSFS_file *fp) { w->segnum = PHYSFSX_readInt(fp); w->sidenum = PHYSFSX_readInt(fp); w->hps = PHYSFSX_readFix(fp); w->linked_wall = PHYSFSX_readInt(fp); w->type = PHYSFSX_readByte(fp); w->flags = PHYSFSX_readByte(fp); w->state = PHYSFSX_readByte(fp); w->trigger = PHYSFSX_readByte(fp); w->clip_num = PHYSFSX_readByte(fp); w->keys = PHYSFSX_readByte(fp); w->controlling_trigger = PHYSFSX_readByte(fp); w->cloak_value = PHYSFSX_readByte(fp); }
/* * reads a segment2 structure from a PHYSFS_File */ static void segment2_read(shared_segment &s2, unique_segment &u2, PHYSFS_File *fp) { s2.special = PHYSFSX_readByte(fp); s2.matcen_num = PHYSFSX_readByte(fp); /* station_idx overwritten by caller */ PHYSFSX_readByte(fp); const auto s2_flags = PHYSFSX_readByte(fp); #if defined(DXX_BUILD_DESCENT_I) (void)s2_flags; // descent 2 ambient sound handling if (s2.special >= MAX_CENTER_TYPES) s2.special = SEGMENT_IS_NOTHING; // remove goals etc. #elif defined(DXX_BUILD_DESCENT_II) s2.s2_flags = s2_flags; #endif u2.static_light = PHYSFSX_readFix(fp); }
void player_ship_read(player_ship *ps, PHYSFS_file *fp) { int i; ps->model_num = PHYSFSX_readInt(fp); ps->expl_vclip_num = PHYSFSX_readInt(fp); ps->mass = PHYSFSX_readFix(fp); ps->drag = PHYSFSX_readFix(fp); ps->max_thrust = PHYSFSX_readFix(fp); ps->reverse_thrust = PHYSFSX_readFix(fp); ps->brakes = PHYSFSX_readFix(fp); ps->wiggle = PHYSFSX_readFix(fp); ps->max_rotthrust = PHYSFSX_readFix(fp); for (i = 0; i < N_PLAYER_GUNS; i++) PHYSFSX_readVector(&ps->gun_points[i], fp); }
/* * reads a wclip structure from a PHYSFS_file */ int wclip_read_n(wclip *wc, int n, PHYSFS_file *fp) { int i, j; for (i = 0; i < n; i++) { wc[i].play_time = PHYSFSX_readFix(fp); wc[i].num_frames = PHYSFSX_readShort(fp); for (j = 0; j < MAX_CLIP_FRAMES; j++) wc[i].frames[j] = PHYSFSX_readShort(fp); wc[i].open_sound = PHYSFSX_readShort(fp); wc[i].close_sound = PHYSFSX_readShort(fp); wc[i].flags = PHYSFSX_readShort(fp); PHYSFS_read(fp, wc[i].filename, 13, 1); wc[i].pad = PHYSFSX_readByte(fp); } return i; }
// Read compiled properties data from descent.pig void properties_read_cmp(PHYSFS_File * fp) { // bitmap_index is a short NumTextures = PHYSFSX_readInt(fp); bitmap_index_read_n(fp, Textures); range_for (tmap_info &ti, TmapInfo) tmap_info_read(ti, fp); PHYSFS_read(fp, Sounds, sizeof(Sounds[0]), Sounds.size()); PHYSFS_read(fp, AltSounds, sizeof(AltSounds[0]), AltSounds.size()); Num_vclips = PHYSFSX_readInt(fp); range_for (vclip &vc, Vclip) vclip_read(fp, vc); Num_effects = PHYSFSX_readInt(fp); range_for (eclip &ec, Effects) eclip_read(fp, ec); Num_wall_anims = PHYSFSX_readInt(fp); range_for (auto &w, WallAnims) wclip_read(fp, w); N_robot_types = PHYSFSX_readInt(fp); range_for (auto &r, Robot_info) robot_info_read(fp, r); N_robot_joints = PHYSFSX_readInt(fp); range_for (auto &r, Robot_joints) jointpos_read(fp, r); N_weapon_types = PHYSFSX_readInt(fp); weapon_info_read_n(Weapon_info, MAX_WEAPON_TYPES, fp, 0); N_powerup_types = PHYSFSX_readInt(fp); range_for (auto &p, Powerup_info) powerup_type_info_read(fp, p); N_polygon_models = PHYSFSX_readInt(fp); { const auto &&r = partial_range(Polygon_models, N_polygon_models); range_for (auto &p, r) polymodel_read(&p, fp); range_for (auto &p, r) polygon_model_data_read(&p, fp); } bitmap_index_read_n(fp, partial_range(Gauges, MAX_GAUGE_BMS)); range_for (auto &i, Dying_modelnums) i = PHYSFSX_readInt(fp); range_for (auto &i, Dead_modelnums) i = PHYSFSX_readInt(fp); bitmap_index_read_n(fp, ObjBitmaps); range_for (auto &i, ObjBitmapPtrs) i = PHYSFSX_readShort(fp); player_ship_read(&only_player_ship, fp); Num_cockpits = PHYSFSX_readInt(fp); bitmap_index_read_n(fp, cockpit_bitmap); PHYSFS_read(fp, Sounds, sizeof(Sounds[0]), Sounds.size()); PHYSFS_read(fp, AltSounds, sizeof(AltSounds[0]), AltSounds.size()); Num_total_object_types = PHYSFSX_readInt(fp); PHYSFS_read( fp, ObjType, sizeof(ubyte), MAX_OBJTYPE ); PHYSFS_read( fp, ObjId, sizeof(ubyte), MAX_OBJTYPE ); range_for (auto &i, ObjStrength) i = PHYSFSX_readFix(fp); First_multi_bitmap_num = PHYSFSX_readInt(fp); Reactors[0].n_guns = PHYSFSX_readInt(fp); range_for (auto &i, Reactors[0].gun_points) PHYSFSX_readVector(fp, i); range_for (auto &i, Reactors[0].gun_dirs) PHYSFSX_readVector(fp, i); exit_modelnum = PHYSFSX_readInt(fp); destroyed_exit_modelnum = PHYSFSX_readInt(fp); #if DXX_USE_EDITOR //Build tmaplist auto &&effect_range = partial_const_range(Effects, Num_effects); Num_tmaps = TextureEffects + std::count_if(effect_range.begin(), effect_range.end(), [](const eclip &e) { return e.changing_wall_texture >= 0; }); #endif }
/* * reads n weapon_info structs from a PHYSFS_file */ int weapon_info_read_n(weapon_info *wi, int n, PHYSFS_file *fp, int file_version) { int i, j; for (i = 0; i < n; i++) { wi[i].render_type = PHYSFSX_readByte(fp); wi[i].persistent = PHYSFSX_readByte(fp); wi[i].model_num = PHYSFSX_readShort(fp); wi[i].model_num_inner = PHYSFSX_readShort(fp); wi[i].flash_vclip = PHYSFSX_readByte(fp); wi[i].robot_hit_vclip = PHYSFSX_readByte(fp); wi[i].flash_sound = PHYSFSX_readShort(fp); wi[i].wall_hit_vclip = PHYSFSX_readByte(fp); wi[i].fire_count = PHYSFSX_readByte(fp); wi[i].robot_hit_sound = PHYSFSX_readShort(fp); wi[i].ammo_usage = PHYSFSX_readByte(fp); wi[i].weapon_vclip = PHYSFSX_readByte(fp); wi[i].wall_hit_sound = PHYSFSX_readShort(fp); wi[i].destroyable = PHYSFSX_readByte(fp); wi[i].matter = PHYSFSX_readByte(fp); wi[i].bounce = PHYSFSX_readByte(fp); wi[i].homing_flag = PHYSFSX_readByte(fp); wi[i].speedvar = PHYSFSX_readByte(fp); wi[i].flags = PHYSFSX_readByte(fp); wi[i].flash = PHYSFSX_readByte(fp); wi[i].afterburner_size = PHYSFSX_readByte(fp); if (file_version >= 3) wi[i].children = PHYSFSX_readByte(fp); else /* Set the type of children correctly when using old * datafiles. In earlier descent versions this was simply * hard-coded in create_smart_children(). */ switch (i) { case SMART_ID: wi[i].children = PLAYER_SMART_HOMING_ID; break; case SUPERPROX_ID: wi[i].children = SMART_MINE_HOMING_ID; break; #if 0 /* not present in shareware */ case ROBOT_SUPERPROX_ID: wi[i].children = ROBOT_SMART_MINE_HOMING_ID; break; case EARTHSHAKER_ID: wi[i].children = EARTHSHAKER_MEGA_ID; break; #endif default: wi[i].children = -1; break; } wi[i].energy_usage = PHYSFSX_readFix(fp); wi[i].fire_wait = PHYSFSX_readFix(fp); if (file_version >= 3) wi[i].multi_damage_scale = PHYSFSX_readFix(fp); else /* FIXME: hack this to set the real values */ wi[i].multi_damage_scale = F1_0; bitmap_index_read(&wi[i].bitmap, fp); wi[i].blob_size = PHYSFSX_readFix(fp); wi[i].flash_size = PHYSFSX_readFix(fp); wi[i].impact_size = PHYSFSX_readFix(fp); for (j = 0; j < NDL; j++) wi[i].strength[j] = PHYSFSX_readFix(fp); for (j = 0; j < NDL; j++) wi[i].speed[j] = PHYSFSX_readFix(fp); wi[i].mass = PHYSFSX_readFix(fp); wi[i].drag = PHYSFSX_readFix(fp); wi[i].thrust = PHYSFSX_readFix(fp); wi[i].po_len_to_width_ratio = PHYSFSX_readFix(fp); wi[i].light = PHYSFSX_readFix(fp); wi[i].lifetime = PHYSFSX_readFix(fp); wi[i].damage_radius = PHYSFSX_readFix(fp); bitmap_index_read(&wi[i].picture, fp); if (file_version >= 3) bitmap_index_read(&wi[i].hires_picture, fp); else wi[i].hires_picture.index = wi[i].picture.index; } return i; }
//reads one object of the given version from the given file void read_object(object *obj,PHYSFS_file *f,int version) { obj->type = PHYSFSX_readByte(f); obj->id = PHYSFSX_readByte(f); if (obj->type == OBJ_ROBOT && obj->id > 23) { obj->id = obj->id % 24; } obj->control_type = PHYSFSX_readByte(f); obj->movement_type = PHYSFSX_readByte(f); obj->render_type = PHYSFSX_readByte(f); obj->flags = PHYSFSX_readByte(f); obj->segnum = PHYSFSX_readShort(f); obj->attached_obj = -1; PHYSFSX_readVector(&obj->pos,f); PHYSFSX_readMatrix(&obj->orient,f); obj->size = PHYSFSX_readFix(f); obj->shields = PHYSFSX_readFix(f); PHYSFSX_readVector(&obj->last_pos,f); obj->contains_type = PHYSFSX_readByte(f); obj->contains_id = PHYSFSX_readByte(f); obj->contains_count = PHYSFSX_readByte(f); switch (obj->movement_type) { case MT_PHYSICS: PHYSFSX_readVector(&obj->mtype.phys_info.velocity,f); PHYSFSX_readVector(&obj->mtype.phys_info.thrust,f); obj->mtype.phys_info.mass = PHYSFSX_readFix(f); obj->mtype.phys_info.drag = PHYSFSX_readFix(f); obj->mtype.phys_info.brakes = PHYSFSX_readFix(f); PHYSFSX_readVector(&obj->mtype.phys_info.rotvel,f); PHYSFSX_readVector(&obj->mtype.phys_info.rotthrust,f); obj->mtype.phys_info.turnroll = PHYSFSX_readFixAng(f); obj->mtype.phys_info.flags = PHYSFSX_readShort(f); break; case MT_SPINNING: PHYSFSX_readVector(&obj->mtype.spin_rate,f); break; case MT_NONE: break; default: Int3(); } switch (obj->control_type) { case CT_AI: { int i; obj->ctype.ai_info.behavior = PHYSFSX_readByte(f); for (i=0;i<MAX_AI_FLAGS;i++) obj->ctype.ai_info.flags[i] = PHYSFSX_readByte(f); obj->ctype.ai_info.hide_segment = PHYSFSX_readShort(f); obj->ctype.ai_info.hide_index = PHYSFSX_readShort(f); obj->ctype.ai_info.path_length = PHYSFSX_readShort(f); obj->ctype.ai_info.cur_path_index = PHYSFSX_readShort(f); if (version <= 25) { obj->ctype.ai_info.follow_path_start_seg = PHYSFSX_readShort(f); obj->ctype.ai_info.follow_path_end_seg = PHYSFSX_readShort(f); } break; } case CT_EXPLOSION: obj->ctype.expl_info.spawn_time = PHYSFSX_readFix(f); obj->ctype.expl_info.delete_time = PHYSFSX_readFix(f); obj->ctype.expl_info.delete_objnum = PHYSFSX_readShort(f); obj->ctype.expl_info.next_attach = obj->ctype.expl_info.prev_attach = obj->ctype.expl_info.attach_parent = -1; break; case CT_WEAPON: //do I really need to read these? Are they even saved to disk? obj->ctype.laser_info.parent_type = PHYSFSX_readShort(f); obj->ctype.laser_info.parent_num = PHYSFSX_readShort(f); obj->ctype.laser_info.parent_signature = PHYSFSX_readInt(f); break; case CT_LIGHT: obj->ctype.light_info.intensity = PHYSFSX_readFix(f); break; case CT_POWERUP: if (version >= 25) obj->ctype.powerup_info.count = PHYSFSX_readInt(f); else obj->ctype.powerup_info.count = 1; if (obj->id == POW_VULCAN_WEAPON) obj->ctype.powerup_info.count = VULCAN_WEAPON_AMMO_AMOUNT; break; case CT_NONE: case CT_FLYING: case CT_DEBRIS: break; case CT_SLEW: //the player is generally saved as slew break; case CT_CNTRLCEN: break; case CT_MORPH: case CT_FLYTHROUGH: case CT_REPAIRCEN: default: Int3(); } switch (obj->render_type) { case RT_NONE: break; case RT_MORPH: case RT_POLYOBJ: { int i,tmo; obj->rtype.pobj_info.model_num = convert_polymod(PHYSFSX_readInt(f)); for (i=0;i<MAX_SUBMODELS;i++) PHYSFSX_readAngleVec(&obj->rtype.pobj_info.anim_angles[i],f); obj->rtype.pobj_info.subobj_flags = PHYSFSX_readInt(f); tmo = PHYSFSX_readInt(f); #ifndef EDITOR obj->rtype.pobj_info.tmap_override = convert_tmap(tmo); #else if (tmo==-1) obj->rtype.pobj_info.tmap_override = -1; else { int xlated_tmo = tmap_xlate_table[tmo]; if (xlated_tmo < 0) { Int3(); xlated_tmo = 0; } obj->rtype.pobj_info.tmap_override = xlated_tmo; } #endif obj->rtype.pobj_info.alt_textures = 0; break; } case RT_WEAPON_VCLIP: case RT_HOSTAGE: case RT_POWERUP: case RT_FIREBALL: obj->rtype.vclip_info.vclip_num = convert_vclip(PHYSFSX_readInt(f)); obj->rtype.vclip_info.frametime = PHYSFSX_readFix(f); obj->rtype.vclip_info.framenum = PHYSFSX_readByte(f); break; case RT_LASER: break; default: Int3(); } }