void dl_index_write(dl_index *di, PHYSFS_file *fp) { PHYSFS_writeSLE16(fp, di->segnum); PHYSFSX_writeU8(fp, di->sidenum); PHYSFSX_writeU8(fp, di->count); PHYSFS_writeSLE16(fp, di->index); }
void segment2_write(segment2 *s2, PHYSFS_file *fp) { PHYSFSX_writeU8(fp, s2->special); PHYSFSX_writeU8(fp, s2->matcen_num); PHYSFSX_writeU8(fp, s2->value); PHYSFSX_writeU8(fp, s2->s2_flags); PHYSFSX_writeFix(fp, s2->static_light); }
static void write_special(const vcsegptr_t seg, ubyte bit_mask, PHYSFS_File *SaveFile) { if (bit_mask & (1 << MAX_SIDES_PER_SEGMENT)) { PHYSFSX_writeU8(SaveFile, seg->special); PHYSFSX_writeU8(SaveFile, seg->matcen_num); PHYSFS_writeSLE16(SaveFile, seg->value); } }
void wall_write(wall *w, short version, PHYSFS_file *fp) { if (version >= 17) { PHYSFS_writeSLE32(fp, w->segnum); PHYSFS_writeSLE32(fp, w->sidenum); } if (version >= 20) { PHYSFSX_writeFix(fp, w->hps); PHYSFS_writeSLE32(fp, w->linked_wall); } PHYSFSX_writeU8(fp, w->type); PHYSFSX_writeU8(fp, w->flags); if (version < 20) PHYSFSX_writeFix(fp, w->hps); else PHYSFSX_writeU8(fp, w->state); PHYSFSX_writeU8(fp, w->trigger); PHYSFSX_writeU8(fp, w->clip_num); PHYSFSX_writeU8(fp, w->keys); if (version >= 20) { PHYSFSX_writeU8(fp, w->controlling_trigger); PHYSFSX_writeU8(fp, w->cloak_value); } else if (version >= 17) PHYSFS_writeSLE32(fp, w->linked_wall); }
//writes out an uncompressed RGB .tga file //if we got really spiffy, we could optionally link in libpng or something, and use that. void write_bmp(char *savename,int w,int h,unsigned char *buf){ PHYSFS_file *f; f = PHYSFSX_openWriteBuffered(savename); if (f) { GLubyte targaMagic[12] = { 0, //no identification field 0,//no colormap 2,//RGB image (well, BGR, actually) 0, 0, 0, 0, 0, 0, 0, 0, 0 };//no colormap or image origin stuff. GLubyte blah; int r; GLubyte *s; int x,y; //write .TGA header. PHYSFS_write(f, targaMagic, sizeof(targaMagic), 1); PHYSFS_writeSLE16(f, w); PHYSFS_writeSLE16(f, h); PHYSFSX_writeU8(f, 24); // 24 bpp PHYSFSX_writeU8(f, 0); // no attribute bits, origin is lowerleft, no interleave s=buf; for (y=0;y<h;y++){//TGAs use BGR ordering of data. for (x=0;x<w;x++){ blah=s[0]; s[0]=s[2]; s[2]=blah; s+=3; } } x=0;y=w*h*3; while (y > 0) { r = (int)PHYSFS_write(f, buf + x, 1, y); if (r<=0){ mprintf((0,"screenshot error, couldn't write to %s (err %i)\n",savename,errno)); break; } x+=r;y-=r; } PHYSFS_close(f); }else{ mprintf((0,"screenshot error, couldn't open %s (err %i)\n",savename,errno)); } }
void delta_light_write(delta_light *dl, PHYSFS_file *fp) { PHYSFS_writeSLE16(fp, dl->segnum); PHYSFSX_writeU8(fp, dl->sidenum); PHYSFSX_writeU8(fp, dl->dummy); PHYSFSX_writeU8(fp, dl->vert_light[0]); PHYSFSX_writeU8(fp, dl->vert_light[1]); PHYSFSX_writeU8(fp, dl->vert_light[2]); PHYSFSX_writeU8(fp, dl->vert_light[3]); }
//writes one object to the given file void write_object(object *obj, PHYSFS_file *f) { PHYSFSX_writeU8(f, obj->type); PHYSFSX_writeU8(f, obj->id); PHYSFSX_writeU8(f, obj->control_type); PHYSFSX_writeU8(f, obj->movement_type); PHYSFSX_writeU8(f, obj->render_type); PHYSFSX_writeU8(f, obj->flags); PHYSFS_writeSLE16(f, obj->segnum); PHYSFSX_writeVector(f, &obj->pos); PHYSFSX_writeMatrix(f, &obj->orient); PHYSFSX_writeFix(f, obj->size); PHYSFSX_writeFix(f, obj->shields); PHYSFSX_writeVector(f, &obj->last_pos); PHYSFSX_writeU8(f, obj->contains_type); PHYSFSX_writeU8(f, obj->contains_id); PHYSFSX_writeU8(f, obj->contains_count); switch (obj->movement_type) { case MT_PHYSICS: PHYSFSX_writeVector(f, &obj->mtype.phys_info.velocity); PHYSFSX_writeVector(f, &obj->mtype.phys_info.thrust); PHYSFSX_writeFix(f, obj->mtype.phys_info.mass); PHYSFSX_writeFix(f, obj->mtype.phys_info.drag); PHYSFSX_writeFix(f, obj->mtype.phys_info.brakes); PHYSFSX_writeVector(f, &obj->mtype.phys_info.rotvel); PHYSFSX_writeVector(f, &obj->mtype.phys_info.rotthrust); PHYSFSX_writeFixAng(f, obj->mtype.phys_info.turnroll); PHYSFS_writeSLE16(f, obj->mtype.phys_info.flags); break; case MT_SPINNING: PHYSFSX_writeVector(f, &obj->mtype.spin_rate); break; case MT_NONE: break; default: Int3(); } switch (obj->control_type) { case CT_AI: { int i; PHYSFSX_writeU8(f, obj->ctype.ai_info.behavior); for (i = 0; i < MAX_AI_FLAGS; i++) PHYSFSX_writeU8(f, obj->ctype.ai_info.flags[i]); PHYSFS_writeSLE16(f, obj->ctype.ai_info.hide_segment); PHYSFS_writeSLE16(f, obj->ctype.ai_info.hide_index); PHYSFS_writeSLE16(f, obj->ctype.ai_info.path_length); PHYSFS_writeSLE16(f, obj->ctype.ai_info.cur_path_index); PHYSFS_writeSLE16(f, obj->ctype.ai_info.follow_path_start_seg); PHYSFS_writeSLE16(f, obj->ctype.ai_info.follow_path_end_seg); break; } case CT_EXPLOSION: PHYSFSX_writeFix(f, obj->ctype.expl_info.spawn_time); PHYSFSX_writeFix(f, obj->ctype.expl_info.delete_time); PHYSFS_writeSLE16(f, obj->ctype.expl_info.delete_objnum); break; case CT_WEAPON: //do I really need to write these objects? PHYSFS_writeSLE16(f, obj->ctype.laser_info.parent_type); PHYSFS_writeSLE16(f, obj->ctype.laser_info.parent_num); PHYSFS_writeSLE32(f, obj->ctype.laser_info.parent_signature); break; case CT_LIGHT: PHYSFSX_writeFix(f, obj->ctype.light_info.intensity); break; case CT_POWERUP: PHYSFS_writeSLE32(f, obj->ctype.powerup_info.count); 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; //control center object. case CT_MORPH: case CT_REPAIRCEN: case CT_FLYTHROUGH: default: Int3(); } switch (obj->render_type) { case RT_NONE: break; case RT_MORPH: case RT_POLYOBJ: { int i; PHYSFS_writeSLE32(f, obj->rtype.pobj_info.model_num); for (i = 0; i < MAX_SUBMODELS; i++) PHYSFSX_writeAngleVec(f, &obj->rtype.pobj_info.anim_angles[i]); PHYSFS_writeSLE32(f, obj->rtype.pobj_info.subobj_flags); PHYSFS_writeSLE32(f, obj->rtype.pobj_info.tmap_override); break; } case RT_WEAPON_VCLIP: case RT_HOSTAGE: case RT_POWERUP: case RT_FIREBALL: PHYSFS_writeSLE32(f, obj->rtype.vclip_info.vclip_num); PHYSFSX_writeFix(f, obj->rtype.vclip_info.frametime); PHYSFSX_writeU8(f, obj->rtype.vclip_info.framenum); break; case RT_LASER: break; default: Int3(); } }