X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fplayer.c;h=762049316c31de67fdbb5432de03d3d4a13547e7;hb=1907773f7b61fb7e58c585a183180b44d213a286;hp=fd1080a4a49a52e34b738f06af873b8ded08d86e;hpb=82abbc606cc5e3d9c26e2ab6d36e093ed86ae1bf;p=flatwaifu.git diff --git a/src/player.c b/src/player.c index fd1080a..7620493 100644 --- a/src/player.c +++ b/src/player.c @@ -35,6 +35,7 @@ #include "switch.h" #include "player.h" #include "misc.h" +#include "my.h" extern int hit_xv,hit_yv; @@ -76,16 +77,112 @@ struct { } _keys; #pragma pack() -void PL_savegame(FILE* h) { - myfwrite(&pl1,1,sizeof(pl1)-sizeof(_keys),h);//myfwrite(&pl1,1,sizeof(pl1),h); - if(_2pl) myfwrite(&pl2,1,sizeof(pl2)-sizeof(_keys),h);//myfwrite(&pl2,1,sizeof(pl2),h); - myfwrite(&PL_JUMP,1,4,h);myfwrite(&PL_RUN,1,4,h);myfwrite(&p_immortal,1,1,h); +void PL_save_player (player_t *p, FILE *h) { + myfwrite32(p->o.x, h); + myfwrite32(p->o.y, h); + myfwrite32(p->o.xv, h); + myfwrite32(p->o.yv, h); + myfwrite32(p->o.vx, h); + myfwrite32(p->o.vy, h); + myfwrite32(p->o.r, h); + myfwrite32(p->o.h, h); + myfwrite32(p->looky, h); + myfwrite32(p->st, h); + myfwrite32(p->s, h); + myfwrite32(p->life, h); + myfwrite32(p->armor, h); + myfwrite32(p->hit, h); + myfwrite32(p->hito, h); + myfwrite32(p->pain, h); + myfwrite32(p->air, h); + myfwrite32(p->invl, h); + myfwrite32(p->suit, h); + myfwrite8(p->d, h); + myfwrite32(p->frag, h); + myfwrite32(p->ammo, h); + myfwrite32(p->shel, h); + myfwrite32(p->rock, h); + myfwrite32(p->cell, h); + myfwrite32(p->fuel, h); + myfwrite32(p->kills, h); + myfwrite32(p->secrets, h); + myfwrite8(p->fire, h); + myfwrite8(p->cwpn, h); + myfwrite8(p->csnd, h); + myfwrite8(p->amul, h); + myfwrite16(p->wpns, h); + myfwrite8(p->wpn, h); + myfwrite8(p->f, h); + myfwrite8(p->drawst, h); + myfwrite8(p->color, h); + myfwrite32(p->id, h); + myfwrite8(p->keys, h); + myfwrite8(p->lives, h); + // k* not saved } -void PL_loadgame(FILE* h) { - myfread(&pl1,1,sizeof(pl1)-sizeof(_keys),h);//myfread(&pl1,1,sizeof(pl1),h); - if(_2pl) myfread(&pl2,1,sizeof(pl2)-sizeof(_keys),h);//myfread(&pl2,1,sizeof(pl2),h); - myfread(&PL_JUMP,1,4,h);myfread(&PL_RUN,1,4,h);myfread(&p_immortal,1,1,h); +void PL_savegame (FILE *h) { + PL_save_player(&pl1, h); + if (_2pl) { + PL_save_player(&pl2, h); + } + myfwrite32(PL_JUMP, h); + myfwrite32(PL_RUN, h); + myfwrite8(p_immortal, h); +} + +void PL_load_player (player_t *p, FILE *h) { + p->o.x = myfread32(h); + p->o.y = myfread32(h); + p->o.xv = myfread32(h); + p->o.yv = myfread32(h); + p->o.vx = myfread32(h); + p->o.vy = myfread32(h); + p->o.r = myfread32(h); + p->o.h = myfread32(h); + p->looky = myfread32(h); + p->st = myfread32(h); + p->s = myfread32(h); + p->life = myfread32(h); + p->armor = myfread32(h); + p->hit = myfread32(h); + p->hito = myfread32(h); + p->pain = myfread32(h); + p->air = myfread32(h); + p->invl = myfread32(h); + p->suit = myfread32(h); + p->d = myfread8(h); + p->frag = myfread32(h); + p->ammo = myfread32(h); + p->shel = myfread32(h); + p->rock = myfread32(h); + p->cell = myfread32(h); + p->fuel = myfread32(h); + p->kills = myfread32(h); + p->secrets = myfread32(h); + p->fire = myfread8(h); + p->cwpn = myfread8(h); + p->csnd = myfread8(h); + p->amul = myfread8(h); + p->wpns = myfread16(h); + p->wpn = myfread8(h); + p->f = myfread8(h); + p->drawst = myfread8(h); + p->color = myfread8(h); + p->id = myfread32(h); + p->keys = myfread8(h); + p->lives = myfread8(h); + // k* not saved +} + +void PL_loadgame (FILE *h) { + PL_load_player(&pl1, h); + if (_2pl) { + PL_load_player(&pl2, h); + } + PL_JUMP = myfread32(h); + PL_RUN = myfread32(h); + p_immortal = myfread8(h); } static int nonz(int a) {return (a)?a:1;}