diff --git a/src/monster.c b/src/monster.c
index ed7604e99f89dcc3f708f19e33675c3f3261e3f7..1357446b1dd45abbffc46d0ee6709d2fd2c8a467 100644 (file)
--- a/src/monster.c
+++ b/src/monster.c
*/
#include "glob.h"
*/
#include "glob.h"
-//#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
-#include "vga.h"
#include "files.h"
#include "files.h"
-#include "error.h"
#include "view.h"
#include "bmap.h"
#include "dots.h"
#include "view.h"
#include "bmap.h"
#include "dots.h"
#include "misc.h"
#include "fx.h"
#include "smoke.h"
#include "misc.h"
#include "fx.h"
#include "smoke.h"
-
-#define MANCOLOR 0xD0
+#include "my.h"
#define MAX_ATM 90
#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
};
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;
typedef struct{
int r,h,l,mp,rv,jv,sp,minp;
}mnsz_t;
};
int hit_xv,hit_yv;
};
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 *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 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
static int mnum,gsndt;
static mnsz_t mnsz[MN_TN+1]={
//rad ht life pain rv jv slop min_pn
8, 26, 400, 70, 8,10, 30, 50 // man
};
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 void setst(int,int);
-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<MAXMN;++n) if(mn[n].t) {
- c=mn[n].ac;setst(n,mn[n].st);mn[n].ac=c;
+static int MN_hit(int n,int d,int o,int t);
+
+void MN_loadgame (FILE *h) {
+ int i, n, c;
+ n = myfread32(h);
+ for (i = 0; i < n; i++) {
+ mn[i].o.x = myfread32(h);
+ mn[i].o.y = myfread32(h);
+ mn[i].o.xv = myfread32(h);
+ mn[i].o.yv = myfread32(h);
+ mn[i].o.vx = myfread32(h);
+ mn[i].o.vy = myfread32(h);
+ mn[i].o.r = myfread32(h);
+ mn[i].o.h = myfread32(h);
+ mn[i].t = myfread8(h);
+ mn[i].d = myfread8(h);
+ mn[i].st = myfread8(h);
+ mn[i].ftime = myfread8(h);
+ mn[i].fobj = myfread32(h);
+ mn[i].s = myfread32(h);
+ mn[i].ap = NULL; myfread32(h); // useless, changed after loading
+ mn[i].aim = myfread32(h);
+ mn[i].life = myfread32(h);
+ mn[i].pain = myfread32(h);
+ mn[i].ac = myfread32(h);
+ mn[i].tx = myfread32(h);
+ mn[i].ty = myfread32(h);
+ mn[i].ammo = myfread32(h);
+ mn[i].atm = myfread16(h);
+ }
+ mnum = myfread32(h);
+ gsndt = myfread32(h);
+ for (n = 0; n < MAXMN; ++n) {
+ if (mn[n].t) {
+ c = mn[n].ac;
+ setst(n, mn[n].st);
+ mn[n].ac = c;
+ }
}
}
}
}
{"","","","","BAREXP"},
{"BSPACT","","BSPWLK","BSPSIT","BSPDTH"},
{"HAHA1","PLPAIN","","STOP1","PDIEHI"}
{"","","","","BAREXP"},
{"BSPACT","","BSPWLK","BSPSIT","BSPDTH"},
{"HAHA1","PLPAIN","","STOP1","PDIEHI"}
- },msn[MN_TN][4]={
- "SARG","TROO","POSS","SPOS","CYBR","CPOS","BOSS","BOS2","HEAD","SKUL",
- "PAIN","SPID","BSPI","FATT","SKEL","VILE","FISH","BAR1","ROBO","PLAY"
};
static char gsn[6]="GOOD0";
};
static char gsn[6]="GOOD0";
- static int mms[MN_TN]={
- 14*2,21*2,21*2,21*2,16*2,20*2,15*2,15*2,12*2,11*2,13*2,19*2,16*2,
- 20*2,17*2,29*2,6*2,2*2,17*2,23*2
- };
-
- sgun[0]=Z_getspr("PWP4",0,1,NULL);
- sgun[1]=Z_getspr("PWP4",1,1,NULL);
for(j=0;j<MN_TN;++j) {
for(j=0;j<MN_TN;++j) {
- for(i=0;i<mms[j];++i) spr[j][i]=Z_getspr(msn[j],i/2,(i&1)+1,&sprd[j][i]);
- if(j==MN_BARREL-1)
- for(i=4;i<14;++i) spr[j][i]=Z_getspr("BEXP",i/2-2,(i&1)+1,&sprd[j][i]);
for(i=0;i<5;++i)
for(i=0;i<5;++i)
- if(sn[j][i][0]) snd[j][i]=Z_getsnd(sn[j][i]);
- else snd[j][i]=NULL;
+ if(sn[j][i][0])
+ snd[j][i]=Z_getsnd(sn[j][i]);
+ else
+ snd[j][i]=NULL;
logo_gas(j+5,GGAS_TOTAL);
}
logo_gas(j+5,GGAS_TOTAL);
}
- for(i=0;i<8;++i) fspr[i]=Z_getspr("FIRE",i,0,NULL);
- pl_spr[0]=Z_getspr("PLAY",'N'-'A',0,NULL);
- pl_spr[1]=Z_getspr("PLAY",'W'-'A',0,NULL);
impsitsnd[0]=Z_getsnd("BGSIT1");
impsitsnd[1]=Z_getsnd("BGSIT2");
impdthsnd[0]=Z_getsnd("BGDTH1");
impsitsnd[0]=Z_getsnd("BGSIT1");
impsitsnd[1]=Z_getsnd("BGSIT2");
impdthsnd[0]=Z_getsnd("BGDTH1");
for(i=0;i<MAXMN;++i) if(mn[i].t!=0) BM_mark(&mn[i].o,BM_MONSTER);
}
for(i=0;i<MAXMN;++i) if(mn[i].t!=0) BM_mark(&mn[i].o,BM_MONSTER);
}
-void MN_draw(void) {
- int i;
-
- for(i=0;i<MAXMN;++i) if(mn[i].t) {
-
- if(mn[i].t>=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;
int MN_hit(int n,int d,int o,int t) {
int i;