X-Git-Url: http://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fswitch.c;h=275aed721c9c13437bd38955260f5c70093e3863;hp=980955dee5f54ad7ebb42b5be4c9b00f806fe2b0;hb=da79be9b6a4134aa9cd19e6f5909fedb20d318cb;hpb=e5c2eddc151a59db4e611a77901732d7c15fde90 diff --git a/src/switch.c b/src/switch.c index 980955d..275aed7 100644 --- a/src/switch.c +++ b/src/switch.c @@ -49,36 +49,69 @@ static int swsnd; int sw_secrets; -void SW_savegame(FILE* h) { - int n; - - for(n=MAXSW;--n;) if(sw[n].t) break; - ++n;myfwrite(&n,1,4,h);myfwrite(sw,1,n*sizeof(sw[0]),h); - myfwrite(&sw_secrets,1,4,h); +void SW_savegame (FILE *h) { + int i, n; + for (n = MAXSW - 1; n >= 0 && sw[n].t == 0; n--) { + // empty + } + n += 1; + myfwrite32(n, h); + for (i = 0; i < n; i++) { + myfwrite8(sw[i].x, h); + myfwrite8(sw[i].y, h); + myfwrite8(sw[i].t, h); + myfwrite8(sw[i].tm, h); + myfwrite8(sw[i].a, h); + myfwrite8(sw[i].b, h); + myfwrite8(sw[i].c, h); + myfwrite8(sw[i].d, h); + myfwrite8(sw[i].f, h); + } + myfwrite32(sw_secrets, h); } -void SW_loadgame(FILE* h) { - int n; - - myfread(&n,1,4,h);myfread(sw,1,n*sizeof(sw[0]),h); - myfread(&sw_secrets,1,4,h); +void SW_loadgame (FILE *h) { + int i, n; + myfread32(&n, h); + for (i = 0; i < n; i++) { + myfread8(&sw[i].x, h); + myfread8(&sw[i].y, h); + myfread8(&sw[i].t, h); + myfread8(&sw[i].tm, h); + myfread8(&sw[i].a, h); + myfread8(&sw[i].b, h); + myfread8(&sw[i].c, h); + myfread8(&sw[i].d, h); + myfread8(&sw[i].f, h); + } + myfread32(&sw_secrets, h); } -int SW_load(FILE* h) { +int SW_load (FILE *h) { int i; - switch(blk.t) { case MB_SWITCH2: - sw_secrets=0; - for(i=0;i0;++i,blk.sz-=sizeof(sw_t)) { - myfread(sw+i,1,sizeof(sw_t),h); - sw[i].c = short2host(sw[i].c); - sw[i].tm=0;sw[i].d=0; - sw[i].f|=0x80; - if(sw[i].t==SW_SECRET) ++sw_secrets; + sw_secrets = 0; + for (i = 0; i < MAXSW && blk.sz > 0; ++i, blk.sz -= 9) { + myfread8(&sw[i].x, h); + myfread8(&sw[i].y, h); + myfread8(&sw[i].t, h); + myfread8(&sw[i].tm, h); // unused + myfread8(&sw[i].a, h); + myfread8(&sw[i].b, h); + myfread8(&sw[i].c, h); + myfread8(&sw[i].d, h); // unused + myfread8(&sw[i].f, h); + sw[i].tm = 0; + sw[i].d = 0; + sw[i].f |= 0x80; + if (sw[i].t == SW_SECRET) { + ++sw_secrets; + } } return 1; - }return 0; + } + return 0; } void SW_alloc(void) {