X-Git-Url: http://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fitems.c;h=005c375a658c258e671919bac7b3c35923c113e8;hp=126fd5ce4e24e5f80fbc1e39895917cb3dc8fb75;hb=da79be9b6a4134aa9cd19e6f5909fedb20d318cb;hpb=e5c2eddc151a59db4e611a77901732d7c15fde90 diff --git a/src/items.c b/src/items.c index 126fd5c..005c375 100644 --- a/src/items.c +++ b/src/items.c @@ -49,21 +49,44 @@ static item_t it[MAXITEM]; int itm_rtime=1092; -void IT_savegame(FILE* h) { - int n; - - for(n=MAXITEM;--n;) if(it[n].t) break; - ++n;myfwrite(&n,1,4,h); - myfwrite(it,1,n*sizeof(it[0]),h); - myfwrite(&itm_rtime,1,4,h); +void IT_savegame (FILE *h) { + int i, n; + for (n = MAXITEM - 1; n >= 0 && it[n].t == 0; n--) { + // empty + } + n += 1; + myfwrite32(n, h); + for (i = 0; i < n; i++) { + myfwrite32(it[i].o.x, h); + myfwrite32(it[i].o.y, h); + myfwrite32(it[i].o.xv, h); + myfwrite32(it[i].o.yv, h); + myfwrite32(it[i].o.vx, h); + myfwrite32(it[i].o.vy, h); + myfwrite32(it[i].o.r, h); + myfwrite32(it[i].o.h, h); + myfwrite32(it[i].t, h); + myfwrite32(it[i].s, h); + } + myfwrite32(itm_rtime, h); } -void IT_loadgame(FILE* h) { - int n; - - myfread(&n,1,4,h); - myfread(it,1,n*sizeof(it[0]),h); - myfread(&itm_rtime,1,4,h); +void IT_loadgame (FILE *h) { + int i, n; + myfread32(&n, h); + for (i = 0; i < n; i++) { + myfread32(&it[i].o.x, h); + myfread32(&it[i].o.y, h); + myfread32(&it[i].o.xv, h); + myfread32(&it[i].o.yv, h); + myfread32(&it[i].o.vx, h); + myfread32(&it[i].o.vy, h); + myfread32(&it[i].o.r, h); + myfread32(&it[i].o.h, h); + myfread32(&it[i].t, h); + myfread32(&it[i].s, h); + } + myfread32(&itm_rtime, h); } void IT_alloc(void) { @@ -112,56 +135,97 @@ void IT_init(void) { tsndtm=rsndtm=0; } -int IT_load(FILE* h) { - int m,i,j; +int IT_load (FILE *h) { + int m, i, j; old_thing_t t; - - switch(blk.t) { + switch (blk.t) { case MB_THING: - for(i=0;blk.sz>0;++i,blk.sz-=8) { - myfread(&t,1,sizeof(t),h); - t.x = short2host(t.x); - t.y = short2host(t.y); - t.t = short2host(t.t); - t.f = short2host(t.f); - it[i].o.x=t.x;it[i].o.y=t.y; - it[i].t=t.t;it[i].s=t.f; - if(!it[i].t) break; - if((it[i].s&THF_DM) && !g_dm) it[i].t=0; - }m=i; - for(i=0,j=-1;i 0; ++i, blk.sz -= 8) { + myfread16(&t.x, h); + myfread16(&t.y, h); + myfread16(&t.t, h); + myfread16(&t.f, h); + it[i].o.x = t.x; + it[i].o.y = t.y; + it[i].t = t.t; + it[i].s = t.f; + if (it[i].t && (it[i].s & THF_DM) && !g_dm) { + it[i].t=0; + } } - for(i=0,j=-1;i=TH_CLIP && it[i].t=I_KEYR && it[i].t<=I_KEYB) it[i].t|=0x8000; - }else if(it[i].t>=TH_DEMON) { - MN_spawn(it[i].o.x,it[i].o.y,it[i].s&THF_DIR,it[i].t-TH_DEMON+MN_DEMON); - it[i].t=0; - } + for (i = 0, j = 0; i < m; ++i) { + if (it[i].t == TH_DMSTART) { + if (g_dm) { + dm_pos[j].x = it[i].o.x; + dm_pos[j].y = it[i].o.y; + dm_pos[j].d = it[i].s & THF_DIR; + } + it[i].t = 0; + ++j; + } + } + if (g_dm && j < 2) { + ERR_fatal("Меньше 2-ух точек DM"); + } + if (g_dm) { + dm_pnum = j; + dm_pl1p = myrand(dm_pnum); + do { + dm_pl2p = myrand(dm_pnum); + } while (dm_pl2p == dm_pl1p); + } else { + dm_pl1p = 0; + dm_pl2p = 1; + dm_pnum = 2; + } + PL_spawn(&pl1, dm_pos[dm_pl1p].x, dm_pos[dm_pl1p].y, dm_pos[dm_pl1p].d); + if (_2pl) { + PL_spawn(&pl2, dm_pos[dm_pl2p].x, dm_pos[dm_pl2p].y, dm_pos[dm_pl2p].d); + } + for (i = 0; i < m; ++i) { + if (it[i].t >= TH_CLIP && it[i].t < TH_DEMON) { + it[i].s = 0; + it[i].t = it[i].t - TH_CLIP + I_CLIP; + if (it[i].t >= I_KEYR && it[i].t <= I_KEYB) { + it[i].t |= 0x8000; + } + } else if (it[i].t >= TH_DEMON) { + MN_spawn(it[i].o.x, it[i].o.y, it[i].s & THF_DIR, it[i].t - TH_DEMON + MN_DEMON); + it[i].t = 0; + } + } return 1; - }return 0; + } + return 0; } static void takesnd(int t) {