X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fview.c;h=73953d7dea30d469ec88408bf47f4cd230cc1ff1;hp=0c274fc81103c55d5cdfc8970f22a79177996156;hb=d070670f189ec66ed2ac6b45834a192c004bc92f;hpb=584adc9c1911a6941ef07443a6fc6ff922d7c8ea diff --git a/src/view.c b/src/view.c index 0c274fc..73953d7 100644 --- a/src/view.c +++ b/src/view.c @@ -40,34 +40,17 @@ #include "map.h" #include "sound.h" #include "my.h" +#include "render.h" -#define ANIT 5 - -/* -#define WD 200 -#define HT 98 - -#define MAXX (FLDW*CELW-WD/2) -#define MAXY (FLDH*CELH-HT/2) -*/ - -int WD; // -int HT; // +int WD; +int HT; extern map_block_t blk; -void V_remap_rect(int,int,int,int,byte *); - byte w_horiz=ON; -void *horiz=NULL;//static void *horiz=NULL; int w_o,w_x,w_y,sky_type=1; -void *walp[256]; dword walf[256]; -int walh[256]; byte walswp[256]; -byte walani[256]; -int anih[ANIT][5]; -byte anic[ANIT]; byte fldb[FLDH][FLDW]; byte fldf[FLDH][FLDW]; byte fld[FLDH][FLDW]; @@ -75,31 +58,12 @@ byte fld[FLDH][FLDW]; 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); - } 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); - } -} - -static short getani(char *n) { - if(strncasecmp(n,"WALL22_1",8)==0) return 1; - if(strncasecmp(n,"WALL58_1",8)==0) return 2; - if(strncasecmp(n,"W73A_1",8)==0) return 3; - if(strncasecmp(n,"RP2_1",8)==0) return 4; - return 0; -} - -void W_savegame(FILE* h) { +void W_savegame (FILE* h) { char s[8]; int i; myfwrite32(sky_type, h); for(i = 1; i < 256; ++i) { - getname(i, s); + R_get_name(i, s); myfwrite(s, 8, 1, h); } for (i = 0; i < 256; i++) { @@ -113,32 +77,20 @@ void W_savegame(FILE* h) { myfwrite(fldf, FLDW*FLDH, 1, h); } -void W_loadgame(FILE* h) { - char s[8]; +void W_loadgame (FILE* h) { int i; + char s[256][8]; sky_type = myfread32(h); + R_loadsky(sky_type); for (i = 1; i < 256; ++i) { - walani[i]=0; - myfread(s, 8, 1, h); - if (!s[0]) { - walh[i] = -1; - walp[i] = NULL; - } else { - walani[i] = getani(s); - if (strncasecmp(s, "_WATER_", 7) == 0) { - walh[i] = -2; - walp[i] = (void*)((intptr_t)s[7] - '0' + 1); - } else { - walh[i] = F_getresid(s); - walp[i] = V_getvgaimg(walh[i]); - } - } + myfread(s[i], 8, 1, h); } - for (i = 0; i < 256; i++) { + R_begin_load(); + R_load("", 0); // empty + i = myfread32(h); // ignore + for (i = 1; i < 256; i++) { walf[i] = myfread32(h); - if (i > 0 && walf[i] & 1) { - walh[i] |= 0x8000; - } + R_load(s[i], walf[i] & 1); } for (i = 0; i < 256; i++) { walswp[i] = myfread8(h); @@ -146,27 +98,10 @@ void W_loadgame(FILE* h) { myfread(fldb, FLDW*FLDH, 1, h); myfread(fld, FLDW*FLDH, 1, h); myfread(fldf, FLDW*FLDH, 1, h); - strcpy(s, "RSKY1"); - s[4] = '0' + sky_type; - M_unlock(horiz); - horiz = V_loadvgaimg(s); + R_end_load(); } void W_init(void) { - int i,j; - static char *anm[ANIT-1][5]={ - {"WALL22_1","WALL23_1","WALL23_2",NULL,NULL}, - {"WALL58_1","WALL58_2","WALL58_3",NULL,NULL}, - {"W73A_1","W73A_2",NULL,NULL,NULL}, - {"RP2_1","RP2_2","RP2_3","RP2_4",NULL} - }; - - for(i=1;i 0; ++i, blk.sz -= 9) { - myfread(w.n, 8, 1, h); - w.t = myfread8(h); - if (strncasecmp(w.n, "_WATER_", 7) == 0) { - walp[i] = (void*)((intptr_t)w.n[7] - '0' + 1); - walh[i] = -2; - } else { - walh[i] = F_getresid(w.n); - walp[i] = V_getvgaimg(walh[i]); - if (w.n[0] == 'S' && w.n[1] == 'W' && w.n[4] == '_') { - walswp[i] = 0; - } - walf[i] = w.t ? 1 : 0; - if (w.t) { - walh[i] |= 0x8000; - } - if (strncasecmp(w.n, "VTRAP01", 8) == 0) { - walf[i] |= 2; - } - walani[i] = getani(w.n); - } - } - for (j = i, i = 1; i < 256 && j < 256; ++i) { - if (walswp[i] == 0) { - F_getresname(w.n, walh[i] & 0x7FFF); - w.n[5] ^= 1; - g = F_getresid(w.n) | (walh[i] & 0x8000); - k = 1; - while (k < 256 && walh[k] != g) { - k += 1; - } - if(k >= 256) { - k = j; - j += 1; - walh[k] = g; - walp[k] = V_getvgaimg(g); - walf[k] = g & 0x8000 ? 1 : 0; - } - walswp[i] = k; - walswp[k] = i; + R_begin_load(); + R_load("", 0); // empty + for (i = 1; i < 256 && blk.sz > 0; i++, blk.sz -= 9) { + myfread(s, 8, 1, h); + t = myfread8(h); + R_load(s, t); + if (strncasecmp(s, "VTRAP01", 8) == 0) { + walf[i] |= 2; } } - return 1; - case MB_BACK: + R_end_load(); + return 1; + case MB_BACK: p = fldb; goto unp; - case MB_WTYPE: + case MB_WTYPE: p = fld; goto unp; - case MB_FRONT: + case MB_FRONT: p = fldf; unp: switch (blk.st) { - case 0: + case 0: myfread(p, FLDW * FLDH, 1, h); break; - case 1: + case 1: buf = malloc(blk.sz); - if(buf == NULL) { - ERR_fatal("Не хватает памяти"); + if (buf == NULL) { + ERR_fatal("Не хватает памяти"); } - myfread(buf, blk.sz, 1, h); - unpack(buf, blk.sz, p); + myfread(buf, blk.sz, 1, h); + unpack(buf, blk.sz, p); free(buf); break; - default: + default: return 0; - } + } return 1; - case MB_SKY: + case MB_SKY: sky_type = myfread16(h); - strcpy(w.n, "RSKY1"); - w.n[4] = '0' + sky_type; - M_unlock(horiz); - horiz = V_loadvgaimg(w.n); - return 1; + R_loadsky(sky_type); + return 1; } return 0; }