diff --git a/src/view.c b/src/view.c
index 034b0aa80a6a7bf5956d901f5c3c9e84cce4bee2..0c274fc81103c55d5cdfc8970f22a79177996156 100644 (file)
--- a/src/view.c
+++ b/src/view.c
#include "misc.h"
#include "map.h"
#include "sound.h"
+#include "my.h"
#define ANIT 5
extern map_block_t blk;
-extern byte clrmap[256*12];
void V_remap_rect(int,int,int,int,byte *);
byte w_horiz=ON;
extern int lt_time,lt_type,lt_side,lt_ypos;
extern void *ltn[2][2];
-static void getname(int n,char *s) {
- if(walh[n]==-1) {memset(s,0,8);return;}
- if(walh[n]==-2) {
- memcpy(s,"_WATER_",8);s[7]=(byte)walp[n]-1+'0';
- return;
+static void getname (int n, char *s) {
+ if (walh[n] == -1) {
+ memset(s, 0, 8);
+ } else if (walh[n] == -2) {
+ memcpy(s, "_WATER_", 8);
+ s[7] = (char)((intptr_t)walp[n] - 1 + '0');
+ } else {
+ F_getresname(s, walh[n] & 0x7FFF);
}
- F_getresname(s,walh[n]&0x7FFF);
}
static short getani(char *n) {
void W_loadgame(FILE* h) {
char s[8];
int i;
- myfread32(&sky_type, h);
+ sky_type = myfread32(h);
for (i = 1; i < 256; ++i) {
walani[i]=0;
myfread(s, 8, 1, h);
walani[i] = getani(s);
if (strncasecmp(s, "_WATER_", 7) == 0) {
walh[i] = -2;
- walp[i] = (void*)(s[7] - '0' + 1);
+ walp[i] = (void*)((intptr_t)s[7] - '0' + 1);
} else {
walh[i] = F_getresid(s);
walp[i] = V_getvgaimg(walh[i]);
}
}
for (i = 0; i < 256; i++) {
- myfread32(&walf[i], h);
+ walf[i] = myfread32(h);
if (i > 0 && walf[i] & 1) {
walh[i] |= 0x8000;
}
}
for (i = 0; i < 256; i++) {
- myfread8(&walswp[i], h);
+ walswp[i] = myfread8(h);
}
myfread(fldb, FLDW*FLDH, 1, h);
myfread(fld, FLDW*FLDH, 1, h);
horiz = V_loadvgaimg(s);
}
-void W_adjust(void) {
- int MAXX =(FLDW*CELW-WD/2);//
- int MAXY =(FLDH*CELH-HT/2);//
-
- if(w_x<WD/2) w_x=WD/2;
- if(w_y<HT/2) w_y=HT/2;
- if(w_x>MAXX) w_x=MAXX;
- if(w_y>MAXY) w_y=MAXY;
-}
-
-void W_draw(void) {
- W_adjust();
- V_setrect(0,WD,w_o+1,HT);
- if(w_horiz) {
-
-
- //V_pic(127-(word)(w_x-WD/2)*56U/(word)(MAXX-WD/2),w_o+123-(word)(w_y-HT/2)*28U/(word)(MAXY-HT/2),horiz);
- vgaimg *img = (vgaimg*)horiz;
- int x=0;
- int d=0;
- do {
- int y=w_o;
- d &= ~2;
- do {
- V_rotspr(x,y,img,d);
- y+=img->h;
- d^=2;
- } while (y<HT+w_o);
- x+=img->w;
- d^=1;
- } while (x<WD);
-
-
-
- if(sky_type==2) if(lt_time<0) {
- if(!lt_side) V_spr(0,w_o+lt_ypos,ltn[lt_type][(lt_time<-5)?0:1]);
- else V_spr2(WD-1,w_o+lt_ypos,ltn[lt_type][(lt_time<-5)?0:1]);
- }
- }else V_clr(0,WD,w_o+1,HT,0x97);
- Z_drawfld((byte *)fldb, 1);
- DOT_draw();
- IT_draw();
- PL_draw(&pl1);
- if(_2pl) PL_draw(&pl2);
- MN_draw();
- WP_draw();
- SMK_draw();
- FX_draw();
- Z_drawfld((byte *)fldf, 0);
- if(sky_type==2)
- if(lt_time==-4 || lt_time==-2)
- V_remap_rect(0,WD,w_o+1,HT,clrmap+256*11);
-}
-
-
void W_init(void) {
int i,j;
static char *anm[ANIT-1][5]={
}
for (i = 1; i < 256 && blk.sz > 0; ++i, blk.sz -= 9) {
myfread(w.n, 8, 1, h);
- myfread8(&w.t, h);
+ w.t = myfread8(h);
if (strncasecmp(w.n, "_WATER_", 7) == 0) {
- walp[i] = (void*)(w.n[7] - '0' + 1);
+ walp[i] = (void*)((intptr_t)w.n[7] - '0' + 1);
walh[i] = -2;
} else {
walh[i] = F_getresid(w.n);
}
return 1;
case MB_SKY:
- myfread16(&sky_type, h);
+ sky_type = myfread16(h);
strcpy(w.n, "RSKY1");
w.n[4] = '0' + sky_type;
M_unlock(horiz);