diff options
author | Simon Howard | 2010-02-01 19:11:06 +0000 |
---|---|---|
committer | Simon Howard | 2010-02-01 19:11:06 +0000 |
commit | de6f6af80635f0f20d7cb75722dc04b00dd2d746 (patch) | |
tree | 364dcb86f2c22411a720447bfa21c4de9191ff6f /src/strife/p_saveg.c | |
parent | 28f8d3e9b5794e188ccff1cc68c62be9001985b7 (diff) | |
download | chocolate-doom-de6f6af80635f0f20d7cb75722dc04b00dd2d746.tar.gz chocolate-doom-de6f6af80635f0f20d7cb75722dc04b00dd2d746.tar.bz2 chocolate-doom-de6f6af80635f0f20d7cb75722dc04b00dd2d746.zip |
Remove improperly-created strife directory.
Subversion-branch: /branches/strife-branch
Subversion-revision: 1839
Diffstat (limited to 'src/strife/p_saveg.c')
-rw-r--r-- | src/strife/p_saveg.c | 1880 |
1 files changed, 0 insertions, 1880 deletions
diff --git a/src/strife/p_saveg.c b/src/strife/p_saveg.c deleted file mode 100644 index e557e494..00000000 --- a/src/strife/p_saveg.c +++ /dev/null @@ -1,1880 +0,0 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// Copyright(C) 1993-1996 Id Software, Inc. -// Copyright(C) 2005 Simon Howard -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -// 02111-1307, USA. -// -// DESCRIPTION: -// Archiving: SaveGame I/O. -// -//----------------------------------------------------------------------------- - - -#include <stdio.h> -#include <stdlib.h> - -#include "dstrings.h" -#include "deh_main.h" -#include "i_system.h" -#include "z_zone.h" -#include "p_local.h" -#include "p_saveg.h" - -// State. -#include "doomstat.h" -#include "r_state.h" - -#define SAVEGAME_EOF 0x1d -#define VERSIONSIZE 16 - -FILE *save_stream; -int savegamelength; - -// Get the filename of a temporary file to write the savegame to. After -// the file has been successfully saved, it will be renamed to the -// real file. - -char *P_TempSaveGameFile(void) -{ - static char *filename = NULL; - - if (filename == NULL) - { - filename = malloc(strlen(savegamedir) + 32); - } - - sprintf(filename, "%stemp.dsg", savegamedir); - - return filename; -} - -// Get the filename of the save game file to use for the specified slot. - -char *P_SaveGameFile(int slot) -{ - static char *filename = NULL; - char basename[32]; - - if (filename == NULL) - { - filename = malloc(strlen(savegamedir) + 32); - } - - sprintf(basename, DEH_String(SAVEGAMENAME "%d.dsg"), slot); - - sprintf(filename, "%s%s", savegamedir, basename); - - return filename; -} - -// Endian-safe integer read/write functions - -static byte saveg_read8(void) -{ - byte result; - - fread(&result, 1, 1, save_stream); - - return result; -} - -static void saveg_write8(byte value) -{ - fwrite(&value, 1, 1, save_stream); -} - -static short saveg_read16(void) -{ - int result; - - result = saveg_read8(); - result |= saveg_read8() << 8; - - return result; -} - -static void saveg_write16(short value) -{ - saveg_write8(value & 0xff); - saveg_write8((value >> 8) & 0xff); -} - -static int saveg_read32(void) -{ - int result; - - result = saveg_read8(); - result |= saveg_read8() << 8; - result |= saveg_read8() << 16; - result |= saveg_read8() << 24; - - return result; -} - -static void saveg_write32(int value) -{ - saveg_write8(value & 0xff); - saveg_write8((value >> 8) & 0xff); - saveg_write8((value >> 16) & 0xff); - saveg_write8((value >> 24) & 0xff); -} - -// Pad to 4-byte boundaries - -static void saveg_read_pad(void) -{ - unsigned long pos; - int padding; - int i; - - pos = ftell(save_stream); - - padding = (4 - (pos & 3)) & 3; - - for (i=0; i<padding; ++i) - { - saveg_read8(); - } -} - -static void saveg_write_pad(void) -{ - unsigned long pos; - int padding; - int i; - - pos = ftell(save_stream); - - padding = (4 - (pos & 3)) & 3; - - for (i=0; i<padding; ++i) - { - saveg_write8(0); - } -} - - -// Pointers - -static void *saveg_readp(void) -{ - return (void *) saveg_read32(); -} - -static void saveg_writep(void *p) -{ - saveg_write32((int) p); -} - -// Enum values are 32-bit integers. - -#define saveg_read_enum saveg_read32 -#define saveg_write_enum saveg_write32 - -// -// Structure read/write functions -// - -// -// mapthing_t -// - -static void saveg_read_mapthing_t(mapthing_t *str) -{ - // short x; - str->x = saveg_read16(); - - // short y; - str->y = saveg_read16(); - - // short angle; - str->angle = saveg_read16(); - - // short type; - str->type = saveg_read16(); - - // short options; - str->options = saveg_read16(); -} - -static void saveg_write_mapthing_t(mapthing_t *str) -{ - // short x; - saveg_write16(str->x); - - // short y; - saveg_write16(str->y); - - // short angle; - saveg_write16(str->angle); - - // short type; - saveg_write16(str->type); - - // short options; - saveg_write16(str->options); -} - -// -// actionf_t -// - -static void saveg_read_actionf_t(actionf_t *str) -{ - // actionf_p1 acp1; - str->acp1 = saveg_readp(); -} - -static void saveg_write_actionf_t(actionf_t *str) -{ - // actionf_p1 acp1; - saveg_writep(str->acp1); -} - -// -// think_t -// -// This is just an actionf_t. -// - -#define saveg_read_think_t saveg_read_actionf_t -#define saveg_write_think_t saveg_write_actionf_t - -// -// thinker_t -// - -static void saveg_read_thinker_t(thinker_t *str) -{ - // struct thinker_s* prev; - str->prev = saveg_readp(); - - // struct thinker_s* next; - str->next = saveg_readp(); - - // think_t function; - saveg_read_think_t(&str->function); -} - -static void saveg_write_thinker_t(thinker_t *str) -{ - // struct thinker_s* prev; - saveg_writep(str->prev); - - // struct thinker_s* next; - saveg_writep(str->next); - - // think_t function; - saveg_write_think_t(&str->function); -} - -// -// mobj_t -// - -static void saveg_read_mobj_t(mobj_t *str) -{ - int pl; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // fixed_t x; - str->x = saveg_read32(); - - // fixed_t y; - str->y = saveg_read32(); - - // fixed_t z; - str->z = saveg_read32(); - - // struct mobj_s* snext; - str->snext = saveg_readp(); - - // struct mobj_s* sprev; - str->sprev = saveg_readp(); - - // angle_t angle; - str->angle = saveg_read32(); - - // spritenum_t sprite; - str->sprite = saveg_read_enum(); - - // int frame; - str->frame = saveg_read32(); - - // struct mobj_s* bnext; - str->bnext = saveg_readp(); - - // struct mobj_s* bprev; - str->bprev = saveg_readp(); - - // struct subsector_s* subsector; - str->subsector = saveg_readp(); - - // fixed_t floorz; - str->floorz = saveg_read32(); - - // fixed_t ceilingz; - str->ceilingz = saveg_read32(); - - // fixed_t radius; - str->radius = saveg_read32(); - - // fixed_t height; - str->height = saveg_read32(); - - // fixed_t momx; - str->momx = saveg_read32(); - - // fixed_t momy; - str->momy = saveg_read32(); - - // fixed_t momz; - str->momz = saveg_read32(); - - // int validcount; - str->validcount = saveg_read32(); - - // mobjtype_t type; - str->type = saveg_read_enum(); - - // mobjinfo_t* info; - str->info = saveg_readp(); - - // int tics; - str->tics = saveg_read32(); - - // state_t* state; - str->state = &states[saveg_read32()]; - - // int flags; - str->flags = saveg_read32(); - - // int health; - str->health = saveg_read32(); - - // int movedir; - str->movedir = saveg_read32(); - - // int movecount; - str->movecount = saveg_read32(); - - // struct mobj_s* target; - str->target = saveg_readp(); - - // int reactiontime; - str->reactiontime = saveg_read32(); - - // int threshold; - str->threshold = saveg_read32(); - - // struct player_s* player; - pl = saveg_read32(); - - if (pl > 0) - { - str->player = &players[pl - 1]; - str->player->mo = str; - } - else - { - str->player = NULL; - } - - // int lastlook; - str->lastlook = saveg_read32(); - - // mapthing_t spawnpoint; - saveg_read_mapthing_t(&str->spawnpoint); - - // struct mobj_s* tracer; - str->tracer = saveg_readp(); -} - -static void saveg_write_mobj_t(mobj_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // fixed_t x; - saveg_write32(str->x); - - // fixed_t y; - saveg_write32(str->y); - - // fixed_t z; - saveg_write32(str->z); - - // struct mobj_s* snext; - saveg_writep(str->snext); - - // struct mobj_s* sprev; - saveg_writep(str->sprev); - - // angle_t angle; - saveg_write32(str->angle); - - // spritenum_t sprite; - saveg_write_enum(str->sprite); - - // int frame; - saveg_write32(str->frame); - - // struct mobj_s* bnext; - saveg_writep(str->bnext); - - // struct mobj_s* bprev; - saveg_writep(str->bprev); - - // struct subsector_s* subsector; - saveg_writep(str->subsector); - - // fixed_t floorz; - saveg_write32(str->floorz); - - // fixed_t ceilingz; - saveg_write32(str->ceilingz); - - // fixed_t radius; - saveg_write32(str->radius); - - // fixed_t height; - saveg_write32(str->height); - - // fixed_t momx; - saveg_write32(str->momx); - - // fixed_t momy; - saveg_write32(str->momy); - - // fixed_t momz; - saveg_write32(str->momz); - - // int validcount; - saveg_write32(str->validcount); - - // mobjtype_t type; - saveg_write_enum(str->type); - - // mobjinfo_t* info; - saveg_writep(str->info); - - // int tics; - saveg_write32(str->tics); - - // state_t* state; - saveg_write32(str->state - states); - - // int flags; - saveg_write32(str->flags); - - // int health; - saveg_write32(str->health); - - // int movedir; - saveg_write32(str->movedir); - - // int movecount; - saveg_write32(str->movecount); - - // struct mobj_s* target; - saveg_writep(str->target); - - // int reactiontime; - saveg_write32(str->reactiontime); - - // int threshold; - saveg_write32(str->threshold); - - // struct player_s* player; - if (str->player) - { - saveg_write32(str->player - players + 1); - } - else - { - saveg_write32(0); - } - - // int lastlook; - saveg_write32(str->lastlook); - - // mapthing_t spawnpoint; - saveg_write_mapthing_t(&str->spawnpoint); - - // struct mobj_s* tracer; - saveg_writep(str->tracer); -} - - -// -// ticcmd_t -// - -static void saveg_read_ticcmd_t(ticcmd_t *str) -{ - - // signed char forwardmove; - str->forwardmove = saveg_read8(); - - // signed char sidemove; - str->sidemove = saveg_read8(); - - // short angleturn; - str->angleturn = saveg_read16(); - - // short consistancy; - str->consistancy = saveg_read16(); - - // byte chatchar; - str->chatchar = saveg_read8(); - - // byte buttons; - str->buttons = saveg_read8(); -} - -static void saveg_write_ticcmd_t(ticcmd_t *str) -{ - - // signed char forwardmove; - saveg_write8(str->forwardmove); - - // signed char sidemove; - saveg_write8(str->sidemove); - - // short angleturn; - saveg_write16(str->angleturn); - - // short consistancy; - saveg_write16(str->consistancy); - - // byte chatchar; - saveg_write8(str->chatchar); - - // byte buttons; - saveg_write8(str->buttons); -} - -// -// pspdef_t -// - -static void saveg_read_pspdef_t(pspdef_t *str) -{ - int state; - - // state_t* state; - state = saveg_read32(); - - if (state > 0) - { - str->state = &states[state]; - } - else - { - str->state = NULL; - } - - // int tics; - str->tics = saveg_read32(); - - // fixed_t sx; - str->sx = saveg_read32(); - - // fixed_t sy; - str->sy = saveg_read32(); -} - -static void saveg_write_pspdef_t(pspdef_t *str) -{ - // state_t* state; - if (str->state) - { - saveg_write32(str->state - states); - } - else - { - saveg_write32(0); - } - - // int tics; - saveg_write32(str->tics); - - // fixed_t sx; - saveg_write32(str->sx); - - // fixed_t sy; - saveg_write32(str->sy); -} - -// -// player_t -// - -static void saveg_read_player_t(player_t *str) -{ - int i; - - // mobj_t* mo; - str->mo = saveg_readp(); - - // playerstate_t playerstate; - str->playerstate = saveg_read_enum(); - - // ticcmd_t cmd; - saveg_read_ticcmd_t(&str->cmd); - - // fixed_t viewz; - str->viewz = saveg_read32(); - - // fixed_t viewheight; - str->viewheight = saveg_read32(); - - // fixed_t deltaviewheight; - str->deltaviewheight = saveg_read32(); - - // fixed_t bob; - str->bob = saveg_read32(); - - // int health; - str->health = saveg_read32(); - - // int armorpoints; - str->armorpoints = saveg_read32(); - - // int armortype; - str->armortype = saveg_read32(); - - // int powers[NUMPOWERS]; - for (i=0; i<NUMPOWERS; ++i) - { - str->powers[i] = saveg_read32(); - } - - // boolean cards[NUMCARDS]; - for (i=0; i<NUMCARDS; ++i) - { - str->cards[i] = saveg_read32(); - } - - // boolean backpack; - str->backpack = saveg_read32(); - - // int frags[MAXPLAYERS]; - for (i=0; i<MAXPLAYERS; ++i) - { - str->frags[i] = saveg_read32(); - } - - // weapontype_t readyweapon; - str->readyweapon = saveg_read_enum(); - - // weapontype_t pendingweapon; - str->pendingweapon = saveg_read_enum(); - - // boolean weaponowned[NUMWEAPONS]; - for (i=0; i<NUMWEAPONS; ++i) - { - str->weaponowned[i] = saveg_read32(); - } - - // int ammo[NUMAMMO]; - for (i=0; i<NUMAMMO; ++i) - { - str->ammo[i] = saveg_read32(); - } - - // int maxammo[NUMAMMO]; - for (i=0; i<NUMAMMO; ++i) - { - str->maxammo[i] = saveg_read32(); - } - - // int attackdown; - str->attackdown = saveg_read32(); - - // int usedown; - str->usedown = saveg_read32(); - - // int cheats; - str->cheats = saveg_read32(); - - // int refire; - str->refire = saveg_read32(); - - // int killcount; - str->killcount = saveg_read32(); - - // int itemcount; - str->itemcount = saveg_read32(); - - // int secretcount; - str->secretcount = saveg_read32(); - - // char* message; - str->message = saveg_readp(); - - // int damagecount; - str->damagecount = saveg_read32(); - - // int bonuscount; - str->bonuscount = saveg_read32(); - - // mobj_t* attacker; - str->attacker = saveg_readp(); - - // int extralight; - str->extralight = saveg_read32(); - - // int fixedcolormap; - str->fixedcolormap = saveg_read32(); - - // int colormap; - str->colormap = saveg_read32(); - - // pspdef_t psprites[NUMPSPRITES]; - for (i=0; i<NUMPSPRITES; ++i) - { - saveg_read_pspdef_t(&str->psprites[i]); - } - - // boolean didsecret; - str->didsecret = saveg_read32(); -} - -static void saveg_write_player_t(player_t *str) -{ - int i; - - // mobj_t* mo; - saveg_writep(str->mo); - - // playerstate_t playerstate; - saveg_write_enum(str->playerstate); - - // ticcmd_t cmd; - saveg_write_ticcmd_t(&str->cmd); - - // fixed_t viewz; - saveg_write32(str->viewz); - - // fixed_t viewheight; - saveg_write32(str->viewheight); - - // fixed_t deltaviewheight; - saveg_write32(str->deltaviewheight); - - // fixed_t bob; - saveg_write32(str->bob); - - // int health; - saveg_write32(str->health); - - // int armorpoints; - saveg_write32(str->armorpoints); - - // int armortype; - saveg_write32(str->armortype); - - // int powers[NUMPOWERS]; - for (i=0; i<NUMPOWERS; ++i) - { - saveg_write32(str->powers[i]); - } - - // boolean cards[NUMCARDS]; - for (i=0; i<NUMCARDS; ++i) - { - saveg_write32(str->cards[i]); - } - - // boolean backpack; - saveg_write32(str->backpack); - - // int frags[MAXPLAYERS]; - for (i=0; i<MAXPLAYERS; ++i) - { - saveg_write32(str->frags[i]); - } - - // weapontype_t readyweapon; - saveg_write_enum(str->readyweapon); - - // weapontype_t pendingweapon; - saveg_write_enum(str->pendingweapon); - - // boolean weaponowned[NUMWEAPONS]; - for (i=0; i<NUMWEAPONS; ++i) - { - saveg_write32(str->weaponowned[i]); - } - - // int ammo[NUMAMMO]; - for (i=0; i<NUMAMMO; ++i) - { - saveg_write32(str->ammo[i]); - } - - // int maxammo[NUMAMMO]; - for (i=0; i<NUMAMMO; ++i) - { - saveg_write32(str->maxammo[i]); - } - - // int attackdown; - saveg_write32(str->attackdown); - - // int usedown; - saveg_write32(str->usedown); - - // int cheats; - saveg_write32(str->cheats); - - // int refire; - saveg_write32(str->refire); - - // int killcount; - saveg_write32(str->killcount); - - // int itemcount; - saveg_write32(str->itemcount); - - // int secretcount; - saveg_write32(str->secretcount); - - // char* message; - saveg_writep(str->message); - - // int damagecount; - saveg_write32(str->damagecount); - - // int bonuscount; - saveg_write32(str->bonuscount); - - // mobj_t* attacker; - saveg_writep(str->attacker); - - // int extralight; - saveg_write32(str->extralight); - - // int fixedcolormap; - saveg_write32(str->fixedcolormap); - - // int colormap; - saveg_write32(str->colormap); - - // pspdef_t psprites[NUMPSPRITES]; - for (i=0; i<NUMPSPRITES; ++i) - { - saveg_write_pspdef_t(&str->psprites[i]); - } - - // boolean didsecret; - saveg_write32(str->didsecret); -} - - -// -// ceiling_t -// - -static void saveg_read_ceiling_t(ceiling_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // ceiling_e type; - str->type = saveg_read_enum(); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // fixed_t bottomheight; - str->bottomheight = saveg_read32(); - - // fixed_t topheight; - str->topheight = saveg_read32(); - - // fixed_t speed; - str->speed = saveg_read32(); - - // boolean crush; - str->crush = saveg_read32(); - - // int direction; - str->direction = saveg_read32(); - - // int tag; - str->tag = saveg_read32(); - - // int olddirection; - str->olddirection = saveg_read32(); -} - -static void saveg_write_ceiling_t(ceiling_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // ceiling_e type; - saveg_write_enum(str->type); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // fixed_t bottomheight; - saveg_write32(str->bottomheight); - - // fixed_t topheight; - saveg_write32(str->topheight); - - // fixed_t speed; - saveg_write32(str->speed); - - // boolean crush; - saveg_write32(str->crush); - - // int direction; - saveg_write32(str->direction); - - // int tag; - saveg_write32(str->tag); - - // int olddirection; - saveg_write32(str->olddirection); -} - -// -// vldoor_t -// - -static void saveg_read_vldoor_t(vldoor_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // vldoor_e type; - str->type = saveg_read_enum(); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // fixed_t topheight; - str->topheight = saveg_read32(); - - // fixed_t speed; - str->speed = saveg_read32(); - - // int direction; - str->direction = saveg_read32(); - - // int topwait; - str->topwait = saveg_read32(); - - // int topcountdown; - str->topcountdown = saveg_read32(); -} - -static void saveg_write_vldoor_t(vldoor_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // vldoor_e type; - saveg_write_enum(str->type); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // fixed_t topheight; - saveg_write32(str->topheight); - - // fixed_t speed; - saveg_write32(str->speed); - - // int direction; - saveg_write32(str->direction); - - // int topwait; - saveg_write32(str->topwait); - - // int topcountdown; - saveg_write32(str->topcountdown); -} - -// -// floormove_t -// - -static void saveg_read_floormove_t(floormove_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // floor_e type; - str->type = saveg_read_enum(); - - // boolean crush; - str->crush = saveg_read32(); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // int direction; - str->direction = saveg_read32(); - - // int newspecial; - str->newspecial = saveg_read32(); - - // short texture; - str->texture = saveg_read16(); - - // fixed_t floordestheight; - str->floordestheight = saveg_read32(); - - // fixed_t speed; - str->speed = saveg_read32(); -} - -static void saveg_write_floormove_t(floormove_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // floor_e type; - saveg_write_enum(str->type); - - // boolean crush; - saveg_write32(str->crush); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // int direction; - saveg_write32(str->direction); - - // int newspecial; - saveg_write32(str->newspecial); - - // short texture; - saveg_write16(str->texture); - - // fixed_t floordestheight; - saveg_write32(str->floordestheight); - - // fixed_t speed; - saveg_write32(str->speed); -} - -// -// plat_t -// - -static void saveg_read_plat_t(plat_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // fixed_t speed; - str->speed = saveg_read32(); - - // fixed_t low; - str->low = saveg_read32(); - - // fixed_t high; - str->high = saveg_read32(); - - // int wait; - str->wait = saveg_read32(); - - // int count; - str->count = saveg_read32(); - - // plat_e status; - str->status = saveg_read_enum(); - - // plat_e oldstatus; - str->oldstatus = saveg_read_enum(); - - // boolean crush; - str->crush = saveg_read32(); - - // int tag; - str->tag = saveg_read32(); - - // plattype_e type; - str->type = saveg_read_enum(); -} - -static void saveg_write_plat_t(plat_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // fixed_t speed; - saveg_write32(str->speed); - - // fixed_t low; - saveg_write32(str->low); - - // fixed_t high; - saveg_write32(str->high); - - // int wait; - saveg_write32(str->wait); - - // int count; - saveg_write32(str->count); - - // plat_e status; - saveg_write_enum(str->status); - - // plat_e oldstatus; - saveg_write_enum(str->oldstatus); - - // boolean crush; - saveg_write32(str->crush); - - // int tag; - saveg_write32(str->tag); - - // plattype_e type; - saveg_write_enum(str->type); -} - -// -// lightflash_t -// - -static void saveg_read_lightflash_t(lightflash_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // int count; - str->count = saveg_read32(); - - // int maxlight; - str->maxlight = saveg_read32(); - - // int minlight; - str->minlight = saveg_read32(); - - // int maxtime; - str->maxtime = saveg_read32(); - - // int mintime; - str->mintime = saveg_read32(); -} - -static void saveg_write_lightflash_t(lightflash_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // int count; - saveg_write32(str->count); - - // int maxlight; - saveg_write32(str->maxlight); - - // int minlight; - saveg_write32(str->minlight); - - // int maxtime; - saveg_write32(str->maxtime); - - // int mintime; - saveg_write32(str->mintime); -} - -// -// strobe_t -// - -static void saveg_read_strobe_t(strobe_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // int count; - str->count = saveg_read32(); - - // int minlight; - str->minlight = saveg_read32(); - - // int maxlight; - str->maxlight = saveg_read32(); - - // int darktime; - str->darktime = saveg_read32(); - - // int brighttime; - str->brighttime = saveg_read32(); -} - -static void saveg_write_strobe_t(strobe_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // int count; - saveg_write32(str->count); - - // int minlight; - saveg_write32(str->minlight); - - // int maxlight; - saveg_write32(str->maxlight); - - // int darktime; - saveg_write32(str->darktime); - - // int brighttime; - saveg_write32(str->brighttime); -} - -// -// glow_t -// - -static void saveg_read_glow_t(glow_t *str) -{ - int sector; - - // thinker_t thinker; - saveg_read_thinker_t(&str->thinker); - - // sector_t* sector; - sector = saveg_read32(); - str->sector = §ors[sector]; - - // int minlight; - str->minlight = saveg_read32(); - - // int maxlight; - str->maxlight = saveg_read32(); - - // int direction; - str->direction = saveg_read32(); -} - -static void saveg_write_glow_t(glow_t *str) -{ - // thinker_t thinker; - saveg_write_thinker_t(&str->thinker); - - // sector_t* sector; - saveg_write32(str->sector - sectors); - - // int minlight; - saveg_write32(str->minlight); - - // int maxlight; - saveg_write32(str->maxlight); - - // int direction; - saveg_write32(str->direction); -} - -// -// Write the header for a savegame -// - -void P_WriteSaveGameHeader(char *description) -{ - char name[VERSIONSIZE]; - int i; - - for (i=0; description[i] != '\0'; ++i) - saveg_write8(description[i]); - for (; i<SAVESTRINGSIZE; ++i) - saveg_write8(0); - - memset (name,0,sizeof(name)); - sprintf (name,"version %i",DOOM_VERSION); - - for (i=0; i<VERSIONSIZE; ++i) - saveg_write8(name[i]); - - saveg_write8(gameskill); - saveg_write8(gameepisode); - saveg_write8(gamemap); - - for (i=0 ; i<MAXPLAYERS ; i++) - saveg_write8(playeringame[i]); - - saveg_write8((leveltime >> 16) & 0xff); - saveg_write8((leveltime >> 8) & 0xff); - saveg_write8(leveltime & 0xff); -} - -// -// Read the header for a savegame -// - -boolean P_ReadSaveGameHeader(void) -{ - int i; - byte a, b, c; - char vcheck[VERSIONSIZE]; - char read_vcheck[VERSIONSIZE]; - - // skip the description field - - for (i=0; i<SAVESTRINGSIZE; ++i) - saveg_read8(); - - for (i=0; i<VERSIONSIZE; ++i) - read_vcheck[i] = saveg_read8(); - - memset (vcheck,0,sizeof(vcheck)); - sprintf (vcheck,"version %i",DOOM_VERSION); - if (strcmp(read_vcheck, vcheck) != 0) - return false; // bad version - - gameskill = saveg_read8(); - gameepisode = saveg_read8(); - gamemap = saveg_read8(); - - for (i=0 ; i<MAXPLAYERS ; i++) - playeringame[i] = saveg_read8(); - - // get the times - a = saveg_read8(); - b = saveg_read8(); - c = saveg_read8(); - leveltime = (a<<16) + (b<<8) + c; - - return true; -} - -// -// Read the end of file marker. Returns true if read successfully. -// - -boolean P_ReadSaveGameEOF(void) -{ - int value; - - value = saveg_read8(); - - return value == SAVEGAME_EOF; -} - -// -// Write the end of file marker -// - -void P_WriteSaveGameEOF(void) -{ - saveg_write8(SAVEGAME_EOF); -} - -// -// P_ArchivePlayers -// -void P_ArchivePlayers (void) -{ - int i; - - for (i=0 ; i<MAXPLAYERS ; i++) - { - if (!playeringame[i]) - continue; - - saveg_write_pad(); - - saveg_write_player_t(&players[i]); - } -} - - - -// -// P_UnArchivePlayers -// -void P_UnArchivePlayers (void) -{ - int i; - - for (i=0 ; i<MAXPLAYERS ; i++) - { - if (!playeringame[i]) - continue; - - saveg_read_pad(); - - saveg_read_player_t(&players[i]); - - // will be set when unarc thinker - players[i].mo = NULL; - players[i].message = NULL; - players[i].attacker = NULL; - } -} - - -// -// P_ArchiveWorld -// -void P_ArchiveWorld (void) -{ - int i; - int j; - sector_t* sec; - line_t* li; - side_t* si; - - // do sectors - for (i=0, sec = sectors ; i<numsectors ; i++,sec++) - { - saveg_write16(sec->floorheight >> FRACBITS); - saveg_write16(sec->ceilingheight >> FRACBITS); - saveg_write16(sec->floorpic); - saveg_write16(sec->ceilingpic); - saveg_write16(sec->lightlevel); - saveg_write16(sec->special); // needed? - saveg_write16(sec->tag); // needed? - } - - - // do lines - for (i=0, li = lines ; i<numlines ; i++,li++) - { - saveg_write16(li->flags); - saveg_write16(li->special); - saveg_write16(li->tag); - for (j=0 ; j<2 ; j++) - { - if (li->sidenum[j] == -1) - continue; - - si = &sides[li->sidenum[j]]; - - saveg_write16(si->textureoffset >> FRACBITS); - saveg_write16(si->rowoffset >> FRACBITS); - saveg_write16(si->toptexture); - saveg_write16(si->bottomtexture); - saveg_write16(si->midtexture); - } - } -} - - - -// -// P_UnArchiveWorld -// -void P_UnArchiveWorld (void) -{ - int i; - int j; - sector_t* sec; - line_t* li; - side_t* si; - - // do sectors - for (i=0, sec = sectors ; i<numsectors ; i++,sec++) - { - sec->floorheight = saveg_read16() << FRACBITS; - sec->ceilingheight = saveg_read16() << FRACBITS; - sec->floorpic = saveg_read16(); - sec->ceilingpic = saveg_read16(); - sec->lightlevel = saveg_read16(); - sec->special = saveg_read16(); // needed? - sec->tag = saveg_read16(); // needed? - sec->specialdata = 0; - sec->soundtarget = 0; - } - - // do lines - for (i=0, li = lines ; i<numlines ; i++,li++) - { - li->flags = saveg_read16(); - li->special = saveg_read16(); - li->tag = saveg_read16(); - for (j=0 ; j<2 ; j++) - { - if (li->sidenum[j] == -1) - continue; - si = &sides[li->sidenum[j]]; - si->textureoffset = saveg_read16() << FRACBITS; - si->rowoffset = saveg_read16() << FRACBITS; - si->toptexture = saveg_read16(); - si->bottomtexture = saveg_read16(); - si->midtexture = saveg_read16(); - } - } -} - - - - - -// -// Thinkers -// -typedef enum -{ - tc_end, - tc_mobj - -} thinkerclass_t; - - -// -// P_ArchiveThinkers -// -void P_ArchiveThinkers (void) -{ - thinker_t* th; - - // save off the current thinkers - for (th = thinkercap.next ; th != &thinkercap ; th=th->next) - { - if (th->function.acp1 == (actionf_p1)P_MobjThinker) - { - saveg_write8(tc_mobj); - saveg_write_pad(); - saveg_write_mobj_t((mobj_t *) th); - - continue; - } - - // I_Error ("P_ArchiveThinkers: Unknown thinker function"); - } - - // add a terminating marker - saveg_write8(tc_end); -} - - - -// -// P_UnArchiveThinkers -// -void P_UnArchiveThinkers (void) -{ - byte tclass; - thinker_t* currentthinker; - thinker_t* next; - mobj_t* mobj; - - // remove all the current thinkers - currentthinker = thinkercap.next; - while (currentthinker != &thinkercap) - { - next = currentthinker->next; - - if (currentthinker->function.acp1 == (actionf_p1)P_MobjThinker) - P_RemoveMobj ((mobj_t *)currentthinker); - else - Z_Free (currentthinker); - - currentthinker = next; - } - P_InitThinkers (); - - // read in saved thinkers - while (1) - { - tclass = saveg_read8(); - switch (tclass) - { - case tc_end: - return; // end of list - - case tc_mobj: - saveg_read_pad(); - mobj = Z_Malloc (sizeof(*mobj), PU_LEVEL, NULL); - saveg_read_mobj_t(mobj); - - mobj->target = NULL; - mobj->tracer = NULL; - P_SetThingPosition (mobj); - mobj->info = &mobjinfo[mobj->type]; - mobj->floorz = mobj->subsector->sector->floorheight; - mobj->ceilingz = mobj->subsector->sector->ceilingheight; - mobj->thinker.function.acp1 = (actionf_p1)P_MobjThinker; - P_AddThinker (&mobj->thinker); - break; - - default: - I_Error ("Unknown tclass %i in savegame",tclass); - } - - } - -} - - -// -// P_ArchiveSpecials -// -enum -{ - tc_ceiling, - tc_door, - tc_floor, - tc_plat, - tc_flash, - tc_strobe, - tc_glow, - tc_endspecials - -} specials_e; - - - -// -// Things to handle: -// -// T_MoveCeiling, (ceiling_t: sector_t * swizzle), - active list -// T_VerticalDoor, (vldoor_t: sector_t * swizzle), -// T_MoveFloor, (floormove_t: sector_t * swizzle), -// T_LightFlash, (lightflash_t: sector_t * swizzle), -// T_StrobeFlash, (strobe_t: sector_t *), -// T_Glow, (glow_t: sector_t *), -// T_PlatRaise, (plat_t: sector_t *), - active list -// -void P_ArchiveSpecials (void) -{ - thinker_t* th; - int i; - - // save off the current thinkers - for (th = thinkercap.next ; th != &thinkercap ; th=th->next) - { - if (th->function.acv == (actionf_v)NULL) - { - for (i = 0; i < MAXCEILINGS;i++) - if (activeceilings[i] == (ceiling_t *)th) - break; - - if (i<MAXCEILINGS) - { - saveg_write8(tc_ceiling); - saveg_write_pad(); - saveg_write_ceiling_t((ceiling_t *) th); - } - continue; - } - - if (th->function.acp1 == (actionf_p1)T_MoveCeiling) - { - saveg_write8(tc_ceiling); - saveg_write_pad(); - saveg_write_ceiling_t((ceiling_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_VerticalDoor) - { - saveg_write8(tc_door); - saveg_write_pad(); - saveg_write_vldoor_t((vldoor_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_MoveFloor) - { - saveg_write8(tc_floor); - saveg_write_pad(); - saveg_write_floormove_t((floormove_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_PlatRaise) - { - saveg_write8(tc_plat); - saveg_write_pad(); - saveg_write_plat_t((plat_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_LightFlash) - { - saveg_write8(tc_flash); - saveg_write_pad(); - saveg_write_lightflash_t((lightflash_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_StrobeFlash) - { - saveg_write8(tc_strobe); - saveg_write_pad(); - saveg_write_strobe_t((strobe_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_Glow) - { - saveg_write8(tc_glow); - saveg_write_pad(); - saveg_write_glow_t((glow_t *) th); - continue; - } - } - - // add a terminating marker - saveg_write8(tc_endspecials); - -} - - -// -// P_UnArchiveSpecials -// -void P_UnArchiveSpecials (void) -{ - byte tclass; - ceiling_t* ceiling; - vldoor_t* door; - floormove_t* floor; - plat_t* plat; - lightflash_t* flash; - strobe_t* strobe; - glow_t* glow; - - - // read in saved thinkers - while (1) - { - tclass = saveg_read8(); - - switch (tclass) - { - case tc_endspecials: - return; // end of list - - case tc_ceiling: - saveg_read_pad(); - ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVEL, NULL); - saveg_read_ceiling_t(ceiling); - ceiling->sector->specialdata = ceiling; - - if (ceiling->thinker.function.acp1) - ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling; - - P_AddThinker (&ceiling->thinker); - P_AddActiveCeiling(ceiling); - break; - - case tc_door: - saveg_read_pad(); - door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL); - saveg_read_vldoor_t(door); - door->sector->specialdata = door; - door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; - P_AddThinker (&door->thinker); - break; - - case tc_floor: - saveg_read_pad(); - floor = Z_Malloc (sizeof(*floor), PU_LEVEL, NULL); - saveg_read_floormove_t(floor); - floor->sector->specialdata = floor; - floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; - P_AddThinker (&floor->thinker); - break; - - case tc_plat: - saveg_read_pad(); - plat = Z_Malloc (sizeof(*plat), PU_LEVEL, NULL); - saveg_read_plat_t(plat); - plat->sector->specialdata = plat; - - if (plat->thinker.function.acp1) - plat->thinker.function.acp1 = (actionf_p1)T_PlatRaise; - - P_AddThinker (&plat->thinker); - P_AddActivePlat(plat); - break; - - case tc_flash: - saveg_read_pad(); - flash = Z_Malloc (sizeof(*flash), PU_LEVEL, NULL); - saveg_read_lightflash_t(flash); - flash->thinker.function.acp1 = (actionf_p1)T_LightFlash; - P_AddThinker (&flash->thinker); - break; - - case tc_strobe: - saveg_read_pad(); - strobe = Z_Malloc (sizeof(*strobe), PU_LEVEL, NULL); - saveg_read_strobe_t(strobe); - strobe->thinker.function.acp1 = (actionf_p1)T_StrobeFlash; - P_AddThinker (&strobe->thinker); - break; - - case tc_glow: - saveg_read_pad(); - glow = Z_Malloc (sizeof(*glow), PU_LEVEL, NULL); - saveg_read_glow_t(glow); - glow->thinker.function.acp1 = (actionf_p1)T_Glow; - P_AddThinker (&glow->thinker); - break; - - default: - I_Error ("P_UnarchiveSpecials:Unknown tclass %i " - "in savegame",tclass); - } - - } - -} - |