X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fmonster.c;h=1357446b1dd45abbffc46d0ee6709d2fd2c8a467;hb=584adc9c1911a6941ef07443a6fc6ff922d7c8ea;hp=5cf27f446e180fe3fe8d6b4d14e20052f830feba;hpb=f8681f31e608533705c789bb04814f633110a627;p=flatwaifu.git diff --git a/src/monster.c b/src/monster.c index 5cf27f4..1357446 100644 --- a/src/monster.c +++ b/src/monster.c @@ -21,12 +21,9 @@ */ #include "glob.h" -//#include #include #include -#include "vga.h" #include "files.h" -#include "error.h" #include "view.h" #include "bmap.h" #include "dots.h" @@ -38,31 +35,16 @@ #include "misc.h" #include "fx.h" #include "smoke.h" - -#define MANCOLOR 0xD0 +#include "my.h" #define MAX_ATM 90 -#define MN_TN (MN__LAST-MN_DEMON) - extern byte z_mon; enum{ SLEEP,GO,RUN,CLIMB,DIE,DEAD,ATTACK,SHOOT,PAIN,WAIT,REVIVE,RUNOUT }; -#pragma pack(1) -typedef struct{ - obj_t o; - byte t,d,st,ftime; - int fobj; - int s; - char *ap; - int aim,life,pain,ac,tx,ty,ammo; - short atm; -}mn_t; -#pragma pack(0) - typedef struct{ int r,h,l,mp,rv,jv,sp,minp; }mnsz_t; @@ -106,13 +88,12 @@ static char *sleepanim[MN_TN]={ }; int hit_xv,hit_yv; +mn_t mn[MAXMN]; -static void *spr[MN_TN][29*2],*fspr[8],*fsnd,*pauksnd,*trupsnd,*sgun[2]; -static char sprd[MN_TN][29*2]; +static void *fsnd,*pauksnd,*trupsnd; static void *snd[MN_TN][5],*impsitsnd[2],*impdthsnd[2],*firsnd,*slopsnd,*gsnd[4]; -static void *swgsnd,*pchsnd,*pl_spr[2],*telesnd; +static void *swgsnd,*pchsnd,*telesnd; static void *positsnd[3],*podthsnd[3]; -static mn_t mn[MAXMN]; static int mnum,gsndt; static mnsz_t mnsz[MN_TN+1]={ //rad ht life pain rv jv slop min_pn @@ -139,27 +120,82 @@ static mnsz_t mnsz[MN_TN+1]={ 8, 26, 400, 70, 8,10, 30, 50 // man }; -void MN_savegame(FILE* h) { - int n; - - for(n=MAXMN;--n;) if(mn[n].t) break; - ++n;myfwrite(&n,1,4,h); - myfwrite(mn,1,n*sizeof(mn[0]),h); - myfwrite(&mnum,1,4,h);myfwrite(&gsndt,1,4,h); +void MN_savegame (FILE *h) { + int i, n; + for (n = MAXMN - 1; n >= 0 && mn[n].t == 0; n--) { + // empty + } + n += 1; + myfwrite32(n, h); + for (i = 0; i < n; i++) { + myfwrite32(mn[i].o.x, h); + myfwrite32(mn[i].o.y, h); + myfwrite32(mn[i].o.xv, h); + myfwrite32(mn[i].o.yv, h); + myfwrite32(mn[i].o.vx, h); + myfwrite32(mn[i].o.vy, h); + myfwrite32(mn[i].o.r, h); + myfwrite32(mn[i].o.h, h); + myfwrite8(mn[i].t, h); + myfwrite8(mn[i].d, h); + myfwrite8(mn[i].st, h); + myfwrite8(mn[i].ftime, h); + myfwrite32(mn[i].fobj, h); + myfwrite32(mn[i].s, h); + myfwrite32(0, h); // mn[i].ap useless, changed after load + myfwrite32(mn[i].aim, h); + myfwrite32(mn[i].life, h); + myfwrite32(mn[i].pain, h); + myfwrite32(mn[i].ac, h); + myfwrite32(mn[i].tx, h); + myfwrite32(mn[i].ty, h); + myfwrite32(mn[i].ammo, h); + myfwrite16(mn[i].atm, h); + } + myfwrite32(mnum, h); + myfwrite32(gsndt, h); } static void setst(int,int); static int MN_hit(int n,int d,int o,int t); -void MN_loadgame(FILE* h) { - int n,c; - - myfread(&n,1,4,h); - myfread(mn,1,n*sizeof(mn[0]),h); - myfread(&mnum,1,4,h);myfread(&gsndt,1,4,h); - for(n=0;n=MN_PL_DEAD) { - Z_drawmanspr(mn[i].o.x,mn[i].o.y,pl_spr[mn[i].t-MN_PL_DEAD],0,mn[i].d); - continue; - } - if((mn[i].t!=MN_SOUL && mn[i].t!=MN_PAIN) || mn[i].st!=DEAD) { - if(mn[i].t!=MN_MAN) - Z_drawspr(mn[i].o.x,mn[i].o.y, - spr[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d], - sprd[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d]); - else{ - if(mn[i].ap[mn[i].ac]=='E' || mn[i].ap[mn[i].ac]=='F') - Z_drawspr(mn[i].o.x,mn[i].o.y,sgun[mn[i].ap[mn[i].ac]-'E'],mn[i].d); - Z_drawmanspr(mn[i].o.x,mn[i].o.y, - spr[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d], - sprd[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d],MANCOLOR); - } - } - if(mn[i].t==MN_VILE && mn[i].st==SHOOT) { - Z_drawspr(mn[i].tx,mn[i].ty,fspr[mn[i].ac/3],0); - } - } -} - int MN_hit(int n,int d,int o,int t) { int i;