diff --git a/src/weapons.c b/src/weapons.c
index b778a0ec96c484a448264ae979454c9a9e0b70a7..34b5ed4a1a7f25f49bc3e8467c0a62b8d03c2fcd 100644 (file)
--- a/src/weapons.c
+++ b/src/weapons.c
#include "smoke.h"
#include "weapons.h"
#include "misc.h"
+#include "my.h"
extern int hit_xv,hit_yv;
enum{NONE=0,ROCKET,PLASMA,APLASMA,BALL1,BALL2,BALL7,BFGBALL,BFGHIT,
MANF,REVF,FIRE};
-#pragma pack(1)
-typedef struct{
- obj_t o;
- byte t,s;
- int own;
- short target;
-}weapon_t;
-#pragma pack()
+weapon_t wp[MAXWPN];
-static void *snd[14],*spr[49*2];
-static char sprd[49*2];
-static weapon_t wp[MAXWPN];
+static void *snd[14];
static void throw(int,int,int,int,int,int,int,int);
-void WP_savegame(FILE* h) {
- int n;
-
- for(n=MAXWPN;--n;) if(wp[n].t) break;
- ++n;myfwrite(&n,1,4,h);myfwrite(wp,1,n*sizeof(wp[0]),h);
+void WP_savegame (FILE *h) {
+ int i, n;
+ for (n = MAXWPN - 1; n >= 0 && wp[n].t == 0; n--) {
+ // empty
+ }
+ n += 1;
+ myfwrite32(n, h);
+ for (i = 0; i < n; i++) {
+ myfwrite32(wp[i].o.x, h);
+ myfwrite32(wp[i].o.y, h);
+ myfwrite32(wp[i].o.xv, h);
+ myfwrite32(wp[i].o.yv, h);
+ myfwrite32(wp[i].o.vx, h);
+ myfwrite32(wp[i].o.vy, h);
+ myfwrite32(wp[i].o.r, h);
+ myfwrite32(wp[i].o.h, h);
+ myfwrite8(wp[i].t, h);
+ myfwrite8(wp[i].s, h);
+ myfwrite32(wp[i].own, h);
+ myfwrite16(wp[i].target, h);
+ }
}
-void WP_loadgame(FILE* h) {
- int n;
-
- myfread(&n,1,4,h);myfread(wp,1,n*sizeof(wp[0]),h);
+void WP_loadgame (FILE *h) {
+ int i, n;
+ n = myfread32(h);
+ for (i = 0; i < n; i++) {
+ wp[i].o.x = myfread32(h);
+ wp[i].o.y = myfread32(h);
+ wp[i].o.xv = myfread32(h);
+ wp[i].o.yv = myfread32(h);
+ wp[i].o.vx = myfread32(h);
+ wp[i].o.vy = myfread32(h);
+ wp[i].o.r = myfread32(h);
+ wp[i].o.h = myfread32(h);
+ wp[i].t = myfread8(h);
+ wp[i].s = myfread8(h);
+ wp[i].own = myfread32(h);
+ wp[i].target = myfread16(h);
+ }
}
void WP_alloc(void) {
"SPARK1",
"SPARK2"
};
-
- for(i=0;i<4;++i) {
- spr[i*2]=Z_getspr("MISL",i,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("MISL",i,2,sprd+i*2+1);
- }
- for(;i<6;++i) {
- spr[i*2]=Z_getspr("PLSS",i-4,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("PLSS",i-4,2,sprd+i*2+1);
- }
- for(;i<11;++i) {
- spr[i*2]=Z_getspr("PLSE",i-6,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("PLSE",i-6,2,sprd+i*2+1);
- }
- for(;i<13;++i) {
- spr[i*2]=Z_getspr("APLS",i-11,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("APLS",i-11,2,sprd+i*2+1);
- }
- for(;i<18;++i) {
- spr[i*2]=Z_getspr("APBX",i-13,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("APBX",i-13,2,sprd+i*2+1);
- }
- for(;i<20;++i) {
- spr[i*2]=Z_getspr("BFS1",i-18,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("BFS1",i-18,2,sprd+i*2+1);
- }
- for(;i<26;++i) {
- spr[i*2]=Z_getspr("BFE1",i-20,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("BFE1",i-20,2,sprd+i*2+1);
- }
- for(;i<30;++i) {
- spr[i*2]=Z_getspr("BFE2",i-26,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("BFE2",i-26,2,sprd+i*2+1);
- }
- for(;i<32;++i) {
- spr[i*2]=Z_getspr("MISL",i-30+4,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("MISL",i-30+4,2,sprd+i*2+1);
- }
- for(;i<37;++i) {
- spr[i*2]=Z_getspr("BAL1",i-32,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("BAL1",i-32,2,sprd+i*2+1);
- }
- for(;i<42;++i) {
- spr[i*2]=Z_getspr("BAL7",i-37,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("BAL7",i-37,2,sprd+i*2+1);
- }
- for(;i<47;++i) {
- spr[i*2]=Z_getspr("BAL2",i-42,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("BAL2",i-42,2,sprd+i*2+1);
- }
- for(;i<49;++i) {
- spr[i*2]=Z_getspr("MANF",i-47,1,sprd+i*2);
- spr[i*2+1]=Z_getspr("MANF",i-47,2,sprd+i*2+1);
- }
for(i=0;i<14;++i) snd[i]=Z_getsnd(nm[i]);
}
}
}
-void WP_draw(void) {
- int i,s,d,x,y;
-
- for(i=0;i<MAXWPN;++i) {
- s=-1;d=0;
- switch(wp[i].t) {
- case NONE: default: break;
- case REVF:
- case ROCKET:
- if((d=wp[i].s)<2) {
- d=(wp[i].o.xv>0)?1:0;
- x=abs(wp[i].o.xv);y=wp[i].o.yv;s=0;
- if(y<0) {if(-y>=x) s=30;}
- else if(y>0) if(y>=x/2) s=31;
- }else {s=(d-2)/2+1;d=0;}
- break;
- case MANF:
- if((s=wp[i].s)>=2) {s/=2;break;}
- case PLASMA:
- case APLASMA:
- case BALL1:
- case BALL7:
- case BALL2:
- if((s=wp[i].s)>=2) s=s/2+1;
- switch(wp[i].t) {
- case PLASMA: s+=4;break;
- case APLASMA: s+=11;break;
- case BALL1: s+=32;break;
- case BALL2: s+=42;break;
- case BALL7: s+=37;d=(wp[i].o.xv>=0)?1:0;break;
- case MANF: s+=47;d=(wp[i].o.xv>=0)?1:0;break;
- }break;
- case BFGBALL:
- if((s=wp[i].s)>=2) s=s/2+1;
- s+=18;break;
- case BFGHIT:
- s=wp[i].s/2+26;break;
- }
- if(s>=0) Z_drawspr(wp[i].o.x,wp[i].o.y,spr[s*2+d],sprd[s*2+d]);
- }
-}
-
void WP_gun(int x,int y,int xd,int yd,int o,int v) {
register dword d,m;
int sx,sy,lx,ly;