X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fview.c;h=80e753f17b5eaf68d2bb01c95534434dbb796b0f;hp=b6b52c88df9a29f0ab3f1d47b00d5b8b58fca44c;hb=efb17348438f10c929e2e9807013969f71802661;hpb=1907773f7b61fb7e58c585a183180b44d213a286 diff --git a/src/view.c b/src/view.c index b6b52c8..80e753f 100644 --- a/src/view.c +++ b/src/view.c @@ -23,7 +23,6 @@ #include "glob.h" #include #include -#include "vga.h" #include "memory.h" #include "files.h" #include "error.h" @@ -40,134 +39,15 @@ #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; // - -extern map_block_t blk; - -extern byte clrmap[256*12]; -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]; +int sky_type=1; 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]; -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) { - char s[8]; - int i; - myfwrite32(sky_type, h); - for(i = 1; i < 256; ++i) { - getname(i, s); - myfwrite(s, 8, 1, h); - } - for (i = 0; i < 256; i++) { - myfwrite32(walf[i], h); - } - for (i = 0; i < 256; i++) { - myfwrite8(walswp[i], h); - } - myfwrite(fldb, FLDW*FLDH, 1, h); - myfwrite(fld, FLDW*FLDH, 1, h); - myfwrite(fldf, FLDW*FLDH, 1, h); -} - -void W_loadgame(FILE* h) { - char s[8]; - int i; - sky_type = myfread32(h); - 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]); - } - } - } - for (i = 0; i < 256; i++) { - walf[i] = myfread32(h); - if (i > 0 && walf[i] & 1) { - walh[i] |= 0x8000; - } - } - for (i = 0; i < 256; i++) { - walswp[i] = myfread8(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); -} - -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; - } - } - return 1; - case MB_BACK: - p = fldb; - goto unp; - case MB_WTYPE: - p = fld; - goto unp; - case MB_FRONT: - p = fldf; - unp: - switch (blk.st) { - case 0: - myfread(p, FLDW * FLDH, 1, h); - break; - case 1: - buf = malloc(blk.sz); - if(buf == NULL) { - ERR_fatal("Не хватает памяти"); - } - myfread(buf, blk.sz, 1, h); - unpack(buf, blk.sz, p); - free(buf); - break; - default: - return 0; - } - return 1; - 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; - } - return 0; + R_loadsky(1); }