X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fitems.c;h=32c4af541068073301894fc022b12ef018dcd8aa;hp=005c375a658c258e671919bac7b3c35923c113e8;hb=efb17348438f10c929e2e9807013969f71802661;hpb=da79be9b6a4134aa9cd19e6f5909fedb20d318cb diff --git a/src/items.c b/src/items.c index 005c375..32c4af5 100644 --- a/src/items.c +++ b/src/items.c @@ -31,214 +31,54 @@ #include "things.h" #include "misc.h" #include "map.h" +#include "my.h" +#include "files.h" +#include "game.h" +item_t it[MAXITEM]; -extern map_block_t blk; +static void *snd[4]; +static int tsndtm, rsndtm; -#pragma pack(1) -typedef struct{ - obj_t o; - int t; - int s; -}item_t; -#pragma pack() +int itm_rtime = 1092; -static void *snd[4],*spr[58]; -static char sprd[58]; -static int tsndtm,rsndtm; -static item_t it[MAXITEM]; - -int itm_rtime=1092; - -void IT_savegame (FILE *h) { - int i, n; - for (n = MAXITEM - 1; n >= 0 && it[n].t == 0; n--) { - // empty +void IT_alloc (void) { + int i, j, n; + static char nm[][6] = { + "ITEMUP", "WPNUP", "GETPOW", "ITMBK" + }; + for (i = 0; i < 4; ++i) { + snd[i] = Z_getsnd(nm[i]); } - 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); + for (i = 0; i < MAXITEM; ++i) { + it[i].o.r = 10; + it[i].o.h = 8; } - myfwrite32(itm_rtime, 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) { - int i,j,n; - static char nm[][6]={ - "ITEMUP","WPNUP","GETPOW","ITMBK" - },snm[][4]={ - "CLIP","SHEL","ROCK","CELL","AMMO","SBOX","BROK","CELP", - "STIM","MEDI","BPAK", - "CSAW","SHOT","SGN2","MGUN","LAUN","PLAS","BFUG" - },n4[][4]={ - "SOUL","SMRT","SMGT","SMBT" - },n3[][4]={ - "GOR1","FCAN" - }; - -// logo(" items"); - for(i=0;i<18;++i) spr[i]=Z_getspr(snm[i],0,0,sprd+i); - for(;i<20;++i) { - spr[i]=Z_getspr("ARM1",i-18,0,sprd+i); - spr[i+2]=Z_getspr("ARM2",i-18,0,sprd+i); - }i+=2; - for(;i<26;++i) spr[i]=Z_getspr("MEGA",i-22,0,sprd+i); - for(;i<30;++i) spr[i]=Z_getspr("PINV",i-26,0,sprd+i); - spr[30]=Z_getspr("AQUA",0,0,sprd+30); - spr[31]=Z_getspr("KEYR",0,0,sprd+31); - spr[32]=Z_getspr("KEYG",0,0,sprd+32); - spr[33]=Z_getspr("KEYB",0,0,sprd+33); - spr[34]=Z_getspr("SUIT",0,0,sprd+34); - for(n=35,j=0;j<4;++j) - for(i=0;i<4;++i,++n) spr[n]=Z_getspr(n4[j],i,0,sprd+n); - for(j=0;j<2;++j) - for(i=0;i<3;++i,++n) spr[n]=Z_getspr(n3[j],i,0,sprd+n); - spr[57]=Z_getspr("GUN2",0,0,sprd+57); - for(i=0;i<4;++i) snd[i]=Z_getsnd(nm[i]); - for(i=0;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; - } - } - m = i; - for (i = 0, j = -1; i < m; ++i) { - if (it[i].t == TH_PLR1) { - j = i; - it[i].t = 0; - } - } - if (!g_dm) { - if (j == -1) { - ERR_fatal("Предмет игрок_1 не найден"); - } - dm_pos[0].x = it[j].o.x; - dm_pos[0].y = it[j].o.y; - dm_pos[0].d = it[j].s & THF_DIR; - } - for (i = 0, j = -1; i < m; ++i) { - if (it[i].t == TH_PLR2) { - j = i; - it[i].t = 0; - } - } - if (!g_dm && _2pl) { - if (j == -1) { - ERR_fatal("Предмет игрок_2 не найден"); - } - dm_pos[1].x = it[j].o.x; - dm_pos[1].y = it[j].o.y; - dm_pos[1].d = it[j].s & THF_DIR; - } - 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; + for (i = 0; i < MAXITEM; ++i) { + it[i].t = I_NONE; + it[i].o.xv = 0; + it[i].o.yv = 0; + it[i].o.vx = 0; + it[i].o.vy = 0; } - return 0; + tsndtm = 0; + rsndtm = 0; } -static void takesnd(int t) { +static void takesnd (int t) { if(tsndtm) return; t&=0x7FFF; if(t<=I_CELP || (t>=I_BPACK && t<=I_BFG) || t==I_GUN2) {tsndtm=Z_sound(snd[1],128);return;} if(t==I_MEGA || t==I_INVL || t==I_SUPER) {tsndtm=Z_sound(snd[2],192);return;} - tsndtm=Z_sound(snd[0],256); + tsndtm=Z_sound(snd[0], 255); } -void IT_act(void) { +void IT_act (void) { int i,j; if(tsndtm) --tsndtm; @@ -280,37 +120,7 @@ void IT_act(void) { } } -void IT_draw(void) { - int i,s; - - for(i=0;i=0) switch(it[i].t&0x7FFF) { - case I_ARM1: - s=it[i].s/9+18;break; - case I_ARM2: - s=it[i].s/9+20;break; - case I_MEGA: - s=it[i].s/2+22;break; - case I_INVL: - s=it[i].s/2+26;break; - case I_SUPER: case I_RTORCH: case I_GTORCH: case I_BTORCH: - s=it[i].s/2+(it[i].t-I_SUPER)*4+35;break; - case I_GOR1: case I_FCAN: - s=it[i].s/2+(it[i].t-I_GOR1)*3+51;break; - case I_AQUA: s=30;break; - case I_SUIT: s=34;break; - case I_KEYR: case I_KEYG: case I_KEYB: - s=(it[i].t&0x7FFF)-I_KEYR+31;break; - case I_GUN2: s=57;break; - default: - s=(it[i].t&0x7FFF)-1; - } - if(s>=0) Z_drawspr(it[i].o.x,it[i].o.y,spr[s],sprd[s]); - } -} - -void IT_spawn(int x,int y,int t) { +void IT_spawn (int x,int y,int t) { int i; for(i=0;i