X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fview.c;h=80e753f17b5eaf68d2bb01c95534434dbb796b0f;hp=034b0aa80a6a7bf5956d901f5c3c9e84cce4bee2;hb=efb17348438f10c929e2e9807013969f71802661;hpb=da79be9b6a4134aa9cd19e6f5909fedb20d318cb diff --git a/src/view.c b/src/view.c index 034b0aa..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" @@ -39,187 +38,16 @@ #include "misc.h" #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);return;} - if(walh[n]==-2) { - memcpy(s,"_WATER_",8);s[7]=(byte)walp[n]-1+'0'; - return; - } - 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; - myfread32(&sky_type, 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*)(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); - if (i > 0 && walf[i] & 1) { - walh[i] |= 0x8000; - } - } - for (i = 0; i < 256; i++) { - myfread8(&walswp[i], 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_adjust(void) { - int MAXX =(FLDW*CELW-WD/2);// - int MAXY =(FLDH*CELH-HT/2);// - - if(w_xMAXX) 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 (yw; - d^=1; - } while (x 0; ++i, blk.sz -= 9) { - myfread(w.n, 8, 1, h); - myfread8(&w.t, h); - if (strncasecmp(w.n, "_WATER_", 7) == 0) { - walp[i] = (void*)(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: - myfread16(&sky_type, 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); }