void draw_window() { _ksys_window_redraw(1); _ksys_draw_window(0, 0, ScreenX, ScreenY, 0, 0, 0, 0, 0); _ksys_window_redraw(2); } void DrawLine(int x0, int y0, int x1, int y1, int color) { int Temp = 0; int x=0; int y=0; //cases when line is out of screen if (y0 < 0 && y1 < 0) return; if (y0 >Height - 1 && y1>Height - 1) return; if (x0 < 0 && x1 < 0) return; if (x0>Width - 1 && x1>Width - 1) return; if ((x1 - x0) == 0) { if (y1 == min(y0, y1)) { Temp = y1; y1 = y0; y0 = Temp; } //correcting borders if (y0 < 0) y0 = 0; if (y1>Height - 1) y1 = Height - 1; for (y = y0; y <= y1; y++) { BufferDraw[x0][y] = color; if (x0+1<=Width-1) BufferDraw[x0+1][y] = color; } } else if ((y1 - y0) == 0) { if (x1 == min(x0, x1)) { Temp = x1; x1 = x0; x0 = Temp; } if (x0 < 0) x0 = 0; if (x1>Width - 1) x1 = Width - 1; for (x = x0; x < x1; x++) { BufferDraw[x][y0] = color; if (y0+1<=Height-1) BufferDraw[x][y0+1] = color; } } else { int PartX=0; int PartY=0; int LeftX=min(x0,x1); if (LeftX<0) LeftX=0; if (LeftX>Width-1) LeftX=Width-1; int RightX=max(x0,x1); if (RightX<0) RightX=0; if (RightX>Width-1) RightX=Width-1; int LeftY=min(y0,y1); if (LeftY<0) LeftY=0; if (LeftY>Height-1) LeftY=Height-1; int RightY=max(y0,y1); if (RightY<0) RightY=0; if (RightY>Height-1) RightY=Height-1; if (RightX-LeftX>=RightY-LeftY) { for (x=LeftX; x<=RightX; x++) { y=(y1-y0)*(x-x0)/(x1-x0)+y0; if (y<0) continue; BufferDraw[x][y]=color; if (y+1<=Height-1) BufferDraw[x][y+1]=color; } } else { for (y=LeftY; y<=RightY; y++) { x=(x1-x0)*(y-y0)/(y1-y0)+x0; if (x<0) continue; BufferDraw[x][y]=color; if (x+1<=Width-1) BufferDraw[x+1][y]=color; } } } } void DrawText(int x, int y, char Text[] , int color) { int i=0; for (i=0; Text[i]!='\0'; i++) { int j=0; unsigned char isMatch=0; for (j=0; Alphabet[j]!='\0'; j++) { if (Text[i]==Alphabet[j]) { isMatch=1; break; } } if (isMatch==0) { x+=17; continue; } int bitLen=15; int bitX=0; int bitY=0; for (bitX=0; bitX=0 && x+bitX<=(Width-1) && y+bitY>=0 && y+bitY<=(Height-1)) BufferDraw[x+bitX][y+bitY]=color; } } } x+=bitLen+2; } } void DrawPit (int x, int y, int color) { DrawLine (0+x,43+y,15+x,10+y,color); DrawLine (15+x,10+y,30+x,43+y,color); DrawLine (0+x,43+y,30+x,43+y,color); } void DrawBlock (int x, int y, int color) { DrawLine (0+x,0+y,40+x,0+y,color); DrawLine (40+x,0+y,40+x,40+y,color); DrawLine (40+x,40+y,0+x,40+y,color); DrawLine (0+x,40+y,0+x,0+y,color); } void DrawHero (int x, int y, int Verts, int InitAngle, int color) { int R=25; int PointX1=x+FloatToInt(R*sin(InitAngle)); int PointY1=y-FloatToInt(R*cos(InitAngle)); int PointX2=0; int PointY2=0; int i=0; for (i=0; i