#include <all312.h> #include "map.h" #include "sprite.h" V3D vtx[4]={ {0,0,0, 0, 0,0x00FF00}, {0,0,0, 64, 0,0x0000FF}, {0,0,0, 64,128,0xFF0000}, {0,0,0, 0,128,0x00FFFF} }; static V3D_f zem[4]={ { 0, 0,0, 0, 0,0}, {64, 0,0,128, 0,0}, {64,64,0,128,128,0}, { 0,64,0, 0,128,0}, }; static V3D_f strop[4]={ { 10, 10,0, 0, 0,0}, { 54, 10,0, 32, 0,0}, { 54, 54,0, 32,32,0}, { 10, 54,0, 0,32,0}, }; static V3D_f stena1[4]={ { 10, 10,128, 0, 0,0}, { 54, 10,128,32, 0,0}, { 54, 10,200,32,64,0}, { 10, 10,200, 0,64,0}, }; static V3D_f stena2[4]={ { 10, 54,128, 0, 0,0}, { 54, 54,128,32, 0,0}, { 54, 54,200,32,64,0}, { 10, 54,200, 0,64,0}, }; static V3D_f stena4[4]={ { 54, 10,128, 0, 0,0}, { 54, 54,128,32, 0,0}, { 54, 54,200,32,64,0}, { 54, 10,200, 0,64,0}, }; static V3D_f stena3[4]={ { 10, 10,128, 0, 0,0}, { 10, 54,128,32, 0,0}, { 10, 54,200,32,64,0}, { 10, 10,200, 0,64,0}, }; static char vyska[16]={64,52,45,64,61,44,46,49,57,45,65,62,56,69,44,50}; static inline void _draw_tile(BITMAP *bmp,int mx,int my,int sx,int sy,char ax,char ay) { unsigned char i,vsk; char x,y; // if((mx<0)||(mx>9)) return; if((my<0)||(my>=2000)) return; if(map[mx][my]==0) return; if(ax==0&&ay==0){ if(sx%64>32) ax--; if(sy%64>32) ay--; } x=map[mx][my]%20-10; y=(map[mx][my]>>1)%20-10; for(i=0;i<4;i++){ vsk=200; if(i<2) vsk=200-vyska[map[mx][my]>>4]; if(ax>=0) persp_project(itofix(stena3[i].x+sx-x),itofix(stena3[i].y+sy-y),itofix(vsk),&vtx[i].x,&vtx[i].y); if(ax<0) persp_project(itofix(stena4[i].x+sx-x),itofix(stena4[i].y+sy-y),itofix(vsk),&vtx[i].x,&vtx[i].y); vtx[i].u=itofix(stena3[i].u); vtx[i].v=itofix(stena3[i].v); vtx[i].c=(200-vsk)<<1; } quad3d(bmp,7,tex[(map[mx][my]%16)>>1].dat,&vtx[0],&vtx[1],&vtx[2],&vtx[3]); for(i=0;i<4;i++){ vsk=200; if(i<2) vsk=200-vyska[map[mx][my]>>4]; if(ay>=0) persp_project(itofix(stena1[i].x+sx-x),itofix(stena1[i].y+sy-y),itofix(vsk),&vtx[i].x,&vtx[i].y); if(ay<0) persp_project(itofix(stena2[i].x+sx-x),itofix(stena2[i].y+sy-y),itofix(vsk),&vtx[i].x,&vtx[i].y); vtx[i].u=itofix(stena1[i].u); vtx[i].v=itofix(stena1[i].v); vtx[i].c=(200-vsk)<<1; } quad3d(bmp,7,tex[(map[mx][my]%16)>>1].dat,&vtx[0],&vtx[1],&vtx[2],&vtx[3]); for(i=0;i<4;i++){ persp_project(itofix(strop[i].x+sx-x),itofix(strop[i].y+sy-y),itofix(200-vyska[map[mx][my]>>4]),&vtx[i].x,&vtx[i].y); vtx[i].u=itofix(strop[i].u); vtx[i].v=itofix(strop[i].v); vtx[i].c=vyska[map[mx][my]>>4]<<1; } quad3d(bmp,7,tex[map[mx][my]%2+9].dat,&vtx[0],&vtx[1],&vtx[2],&vtx[3]); } /* static inline void _draw_zem(BITMAP *bmp,int mx,int my,int sx,int sy,char ax,char ay) { char i; if((mx<0)||(mx>9)) return; if((my<0)||(my>=2000)) return; for(i=0;i<4;i++) persp_project_f(zem[i].x+sx,zem[i].y+sy,200,&vtx[i].x,&vtx[i].y); quad3d_f(bmp,3,tilegfx[tile[mx][my]].dat,&vtx[0],&vtx[1],&vtx[2],&vtx[3]); } */ unsigned char col; static inline void draw_map(BITMAP *bmp,short mx,short my,char sx,char sy) { char x,y; if(!col) col=makecol(74,74,74); clear_to_color(bmp,col); // for(x=-4;x<=4;x++) for(y=-4;y<=3;y++) // _draw_zem(bmp,mx+x,my+y,(x<<6)-sx,(y<<6)-sy,x,y); for(y=-4;y<=0;y++) for(x=-4;x<=0;x++) _draw_tile(bmp,mx+x,my+y,(x<<6)-sx,(y<<6)-sy,x,y); for(x=4;x>=0;x--) for(y=-4;y<=0;y++) _draw_tile(bmp,mx+x,my+y,(x<<6)-sx,(y<<6)-sy,x,y); for(x=-4;x<=0;x++) for(y=3;y>=0;y--) _draw_tile(bmp,mx+x,my+y,(x<<6)-sx,(y<<6)-sy,x,y); for(x=4;x>=0;x--) for(y=3;y>=0;y--) _draw_tile(bmp,mx+x,my+y,(x<<6)-sx,(y<<6)-sy,x,y); // hline(bmp,0,240,480,65535); // vline(bmp,240,0,480,65535); } //short amx=352; int amy=1996*64; void zobraz(BITMAP *bmp) { // if(x<50) amx-=15; // if(x>430) amx+=15; // if(amx<256) amx=256; // if(amx>384) amx=384; draw_map(bmp,5,amy>>6,32,amy%64); amy-=8; }