rm plugins that we won't use
[pcsx_rearmed.git] / plugins / peopsxgl / soft.c
diff --git a/plugins/peopsxgl/soft.c b/plugins/peopsxgl/soft.c
deleted file mode 100644 (file)
index bae5170..0000000
+++ /dev/null
@@ -1,8385 +0,0 @@
-/***************************************************************************\r
-                          soft.c  -  description\r
-                             -------------------\r
-    begin                : Sun Oct 28 2001\r
-    copyright            : (C) 2001 by Pete Bernert\r
-    web                  : www.pbernert.com   \r
- ***************************************************************************/\r
-\r
-/***************************************************************************\r
- *                                                                         *\r
- *   This program is free software; you can redistribute it and/or modify  *\r
- *   it under the terms of the GNU General Public License as published by  *\r
- *   the Free Software Foundation; either version 2 of the License, or     *\r
- *   (at your option) any later version. See also the license.txt file for *\r
- *   additional informations.                                              *\r
- *                                                                         *\r
- ***************************************************************************/\r
-\r
-#include "stdafx.h"\r
-\r
-#define _IN_SOFT\r
-\r
-#include "externals.h"\r
-#include "soft.h"\r
-\r
-int iDither = 0;\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
-// "NO EDGE BUFFER" POLY VERSION... FUNCS BASED ON FATMAP.TXT FROM MRI / Doomsday\r
-////////////////////////////////////////////////////////////////////////////////////\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
-// defines\r
-////////////////////////////////////////////////////////////////////////////////////\r
-\r
-// switches for painting textured quads as 2 triangles (small glitches, but better shading!)\r
-// can be toggled by game fix 0x200 in version 1.17 anyway, so let the defines enabled!\r
-\r
-#define POLYQUAD3                 \r
-#define POLYQUAD3GT                 \r
-\r
-// fast solid loops... a bit more additional code, of course\r
-\r
-#define FASTSOLID\r
-\r
-// psx blending mode 3 with 25% incoming color (instead 50% without the define)\r
-\r
-#define HALFBRIGHTMODE3\r
-\r
-// color decode defines\r
-\r
-#define XCOL1(x)     (x & 0x1f)\r
-#define XCOL2(x)     (x & 0x3e0)\r
-#define XCOL3(x)     (x & 0x7c00)\r
-\r
-#define XCOL1D(x)     (x & 0x1f)\r
-#define XCOL2D(x)     ((x>>5) & 0x1f)\r
-#define XCOL3D(x)     ((x>>10) & 0x1f)\r
-\r
-#define X32TCOL1(x)  ((x & 0x001f001f)<<7)\r
-#define X32TCOL2(x)  ((x & 0x03e003e0)<<2)\r
-#define X32TCOL3(x)  ((x & 0x7c007c00)>>3)\r
-\r
-#define X32COL1(x)   (x & 0x001f001f)\r
-#define X32COL2(x)   ((x>>5) & 0x001f001f)\r
-#define X32COL3(x)   ((x>>10) & 0x001f001f)\r
-\r
-#define X32ACOL1(x)  (x & 0x001e001e)\r
-#define X32ACOL2(x)  ((x>>5) & 0x001e001e)\r
-#define X32ACOL3(x)  ((x>>10) & 0x001e001e)\r
-\r
-#define X32BCOL1(x)  (x & 0x001c001c)\r
-#define X32BCOL2(x)  ((x>>5) & 0x001c001c)\r
-#define X32BCOL3(x)  ((x>>10) & 0x001c001c)\r
-\r
-#define X32PSXCOL(r,g,b) ((g<<10)|(b<<5)|r)\r
-\r
-#define XPSXCOL(r,g,b) ((g&0x7c00)|(b&0x3e0)|(r&0x1f))\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
-// soft globals\r
-////////////////////////////////////////////////////////////////////////////////////\r
-\r
-short g_m1 = 255, g_m2 = 255, g_m3 = 255;\r
-short DrawSemiTrans = FALSE;\r
-short Ymin;\r
-short Ymax;\r
-\r
-short          ly0, lx0, ly1, lx1, ly2, lx2, ly3, lx3;   // global psx vertex coords\r
-int            GlobalTextAddrX, GlobalTextAddrY, GlobalTextTP;\r
-int            GlobalTextREST, GlobalTextABR, GlobalTextPAGE;\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLYGON OFFSET FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void offsetPSXLine(void)\r
-{\r
- short x0,x1,y0,y1,dx,dy;float px,py;\r
-\r
- x0 = lx0+1+PSXDisplay.DrawOffset.x;\r
- x1 = lx1+1+PSXDisplay.DrawOffset.x;\r
- y0 = ly0+1+PSXDisplay.DrawOffset.y;\r
- y1 = ly1+1+PSXDisplay.DrawOffset.y;\r
-\r
- dx=x1-x0;\r
- dy=y1-y0;\r
-\r
- // tricky line width without sqrt\r
-\r
- if(dx>=0)\r
-  {\r
-   if(dy>=0)\r
-    {\r
-     px=0.5f;\r
-          if(dx>dy) py=-0.5f;\r
-     else if(dx<dy) py= 0.5f;\r
-     else           py= 0.0f;\r
-    }\r
-   else\r
-    {\r
-     py=-0.5f;\r
-     dy=-dy;\r
-          if(dx>dy) px= 0.5f;\r
-     else if(dx<dy) px=-0.5f;\r
-     else           px= 0.0f;\r
-    }\r
-  }\r
- else\r
-  {\r
-   if(dy>=0)\r
-    {\r
-     py=0.5f;\r
-     dx=-dx;\r
-          if(dx>dy) px=-0.5f;\r
-     else if(dx<dy) px= 0.5f;\r
-     else           px= 0.0f;\r
-    }\r
-   else\r
-    {\r
-     px=-0.5f;\r
-          if(dx>dy) py=-0.5f;\r
-     else if(dx<dy) py= 0.5f;\r
-     else           py= 0.0f;\r
-    }\r
-  } \r
\r
- lx0=(short)((float)x0-px);\r
- lx3=(short)((float)x0+py);\r
\r
- ly0=(short)((float)y0-py);\r
- ly3=(short)((float)y0-px);\r
\r
- lx1=(short)((float)x1-py);\r
- lx2=(short)((float)x1+px);\r
\r
- ly1=(short)((float)y1+px);\r
- ly2=(short)((float)y1+py);\r
-}\r
-\r
-void offsetPSX2(void)\r
-{\r
- lx0 += PSXDisplay.DrawOffset.x;\r
- ly0 += PSXDisplay.DrawOffset.y;\r
- lx1 += PSXDisplay.DrawOffset.x;\r
- ly1 += PSXDisplay.DrawOffset.y;\r
-}\r
-\r
-void offsetPSX3(void)\r
-{\r
- lx0 += PSXDisplay.DrawOffset.x;\r
- ly0 += PSXDisplay.DrawOffset.y;\r
- lx1 += PSXDisplay.DrawOffset.x;\r
- ly1 += PSXDisplay.DrawOffset.y;\r
- lx2 += PSXDisplay.DrawOffset.x;\r
- ly2 += PSXDisplay.DrawOffset.y;\r
-}\r
-\r
-void offsetPSX4(void)\r
-{\r
- lx0 += PSXDisplay.DrawOffset.x;\r
- ly0 += PSXDisplay.DrawOffset.y;\r
- lx1 += PSXDisplay.DrawOffset.x;\r
- ly1 += PSXDisplay.DrawOffset.y;\r
- lx2 += PSXDisplay.DrawOffset.x;\r
- ly2 += PSXDisplay.DrawOffset.y;\r
- lx3 += PSXDisplay.DrawOffset.x;\r
- ly3 += PSXDisplay.DrawOffset.y;\r
-}\r
-\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-// PER PIXEL FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-\r
-\r
-unsigned char dithertable[16] =\r
-{\r
-    7, 0, 6, 1,\r
-    2, 5, 3, 4,\r
-    1, 6, 0, 7,\r
-    4, 3, 5, 2\r
-};\r
-\r
-void Dither16(unsigned short *pdest, uint32_t r, uint32_t g, uint32_t b, unsigned short sM)\r
-{\r
- unsigned char coeff;\r
- unsigned char rlow, glow, blow;\r
- int x, y;\r
-                 \r
- x = pdest - psxVuw;\r
- y = x >> 10;\r
- x -= (y << 10);\r
-\r
- coeff = dithertable[(y&3)*4+(x&3)];\r
-\r
- rlow = r&7; glow = g&7; blow = b&7;\r
-\r
- r>>=3; g>>=3; b>>=3;\r
-\r
- if ((r < 0x1F) && rlow > coeff) r++;\r
- if ((g < 0x1F) && glow > coeff) g++;\r
- if ((b < 0x1F) && blow > coeff) b++;\r
-\r
- *pdest=((unsigned short)b<<10) |\r
-        ((unsigned short)g<<5) |\r
-        (unsigned short)r | sM;\r
-}\r
-\r
-/////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetShadeTransCol_Dither(unsigned short *pdest, int m1, int m2, int m3)\r
-{\r
- int r,g,b;\r
-\r
- if (bCheckMask && *pdest & 0x8000) return;\r
-\r
- if (DrawSemiTrans)\r
-  {\r
-   r=((XCOL1D(*pdest))<<3);\r
-   b=((XCOL2D(*pdest))<<3);\r
-   g=((XCOL3D(*pdest))<<3);\r
-\r
-   if(GlobalTextABR==0)\r
-    {\r
-     r=(r>>1)+(m1>>1);\r
-     b=(b>>1)+(m2>>1);\r
-     g=(g>>1)+(m3>>1);\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r+=m1;\r
-     b+=m2;\r
-     g+=m3;\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     r-=m1;\r
-     b-=m2;\r
-     g-=m3;\r
-     if(r&0x80000000) r=0;\r
-     if(b&0x80000000) b=0;\r
-     if(g&0x80000000) g=0;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r+=(m1>>2);\r
-     b+=(m2>>2);\r
-     g+=(m3>>2);\r
-#else\r
-     r+=(m1>>1);\r
-     b+=(m2>>1);\r
-     g+=(m3>>1);\r
-#endif\r
-    }\r
-  }\r
- else \r
-  {\r
-   r=m1;\r
-   b=m2;\r
-   g=m3;\r
-  }\r
-\r
- if(r&0x7FFFFF00) r=0xff;\r
- if(b&0x7FFFFF00) b=0xff;\r
- if(g&0x7FFFFF00) g=0xff;\r
-\r
- Dither16(pdest,r,b,g,sSetMask);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetShadeTransCol(unsigned short * pdest,unsigned short color)\r
-{\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- if(DrawSemiTrans)\r
-  {\r
-   int r,g,b;\r
\r
-   if(GlobalTextABR==0)\r
-    {\r
-     *pdest=((((*pdest)&0x7bde)>>1)+(((color)&0x7bde)>>1))|sSetMask;//0x8000;\r
-     return;\r
-/*\r
-     r=(XCOL1(*pdest)>>1)+((XCOL1(color))>>1);\r
-     b=(XCOL2(*pdest)>>1)+((XCOL2(color))>>1);\r
-     g=(XCOL3(*pdest)>>1)+((XCOL3(color))>>1);\r
-*/\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(XCOL1(*pdest))+((XCOL1(color)));\r
-     b=(XCOL2(*pdest))+((XCOL2(color)));\r
-     g=(XCOL3(*pdest))+((XCOL3(color)));\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     r=(XCOL1(*pdest))-((XCOL1(color)));\r
-     b=(XCOL2(*pdest))-((XCOL2(color)));\r
-     g=(XCOL3(*pdest))-((XCOL3(color)));\r
-     if(r&0x80000000) r=0;\r
-     if(b&0x80000000) b=0;\r
-     if(g&0x80000000) g=0;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(XCOL1(*pdest))+((XCOL1(color))>>2);\r
-     b=(XCOL2(*pdest))+((XCOL2(color))>>2);\r
-     g=(XCOL3(*pdest))+((XCOL3(color))>>2);\r
-#else\r
-     r=(XCOL1(*pdest))+((XCOL1(color))>>1);\r
-     b=(XCOL2(*pdest))+((XCOL2(color))>>1);\r
-     g=(XCOL3(*pdest))+((XCOL3(color))>>1);\r
-#endif\r
-    }\r
-\r
-   if(r&0x7FFFFFE0) r=0x1f;\r
-   if(b&0x7FFFFC00) b=0x3e0;\r
-   if(g&0x7FFF8000) g=0x7c00;\r
-\r
-   *pdest=(XPSXCOL(r,g,b))|sSetMask;//0x8000;\r
-  }\r
- else *pdest=color|sSetMask;\r
-}  \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetShadeTransCol32(uint32_t *pdest, uint32_t color)\r
-{\r
- if (DrawSemiTrans)\r
-  {\r
-   int r,g,b;\r
-\r
-   if(GlobalTextABR==0)\r
-    {\r
-     if(!bCheckMask)\r
-      {\r
-       *pdest=((((*pdest)&0x7bde7bde)>>1)+(((color)&0x7bde7bde)>>1))|lSetMask;//0x80008000;\r
-       return;\r
-      }\r
-     r=(X32ACOL1(*pdest)>>1)+((X32ACOL1(color))>>1);\r
-     b=(X32ACOL2(*pdest)>>1)+((X32ACOL2(color))>>1);\r
-     g=(X32ACOL3(*pdest)>>1)+((X32ACOL3(color))>>1);\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(X32COL1(*pdest))+((X32COL1(color)));\r
-     b=(X32COL2(*pdest))+((X32COL2(color)));\r
-     g=(X32COL3(*pdest))+((X32COL3(color)));\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     int sr,sb,sg,src,sbc,sgc,c;\r
-     src=XCOL1(color);sbc=XCOL2(color);sgc=XCOL3(color);\r
-     c=(*pdest)>>16;\r
-     sr=(XCOL1(c))-src;   if(sr&0x8000) sr=0;\r
-     sb=(XCOL2(c))-sbc;  if(sb&0x8000) sb=0;\r
-     sg=(XCOL3(c))-sgc; if(sg&0x8000) sg=0;\r
-     r=((int)sr)<<16;b=((int)sb)<<11;g=((int)sg)<<6;\r
-     c=LOWORD(*pdest);\r
-     sr=(XCOL1(c))-src;   if(sr&0x8000) sr=0;\r
-     sb=(XCOL2(c))-sbc;  if(sb&0x8000) sb=0;\r
-     sg=(XCOL3(c))-sgc; if(sg&0x8000) sg=0;\r
-     r|=sr;b|=sb>>5;g|=sg>>10;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(X32COL1(*pdest))+((X32BCOL1(color))>>2);\r
-     b=(X32COL2(*pdest))+((X32BCOL2(color))>>2);\r
-     g=(X32COL3(*pdest))+((X32BCOL3(color))>>2);\r
-#else\r
-     r=(X32COL1(*pdest))+((X32ACOL1(color))>>1);\r
-     b=(X32COL2(*pdest))+((X32ACOL2(color))>>1);\r
-     g=(X32COL3(*pdest))+((X32ACOL3(color))>>1);\r
-#endif\r
-    }\r
-\r
-   if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
-   if(r&0x7FE0)     r=0x1f    |(r&0xFFFF0000);\r
-   if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
-   if(b&0x7FE0)     b=0x1f    |(b&0xFFFF0000);\r
-   if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
-   if(g&0x7FE0)     g=0x1f    |(g&0xFFFF0000);\r
-\r
-   if(bCheckMask) \r
-    {\r
-     uint32_t ma=*pdest;\r
-     *pdest=(X32PSXCOL(r,g,b))|lSetMask;//0x80008000;\r
-     if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
-     if(ma&0x00008000) *pdest=(ma&0xFFFF)    |(*pdest&0xFFFF0000);\r
-     return;\r
-    }\r
-   *pdest=(X32PSXCOL(r,g,b))|lSetMask;//0x80008000;\r
-  }\r
- else\r
-  {\r
-   if(bCheckMask) \r
-    {\r
-     uint32_t ma=*pdest;\r
-     *pdest=color|lSetMask;//0x80008000;\r
-     if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
-     if(ma&0x00008000) *pdest=(ma&0xFFFF)    |(*pdest&0xFFFF0000);\r
-     return;\r
-    }\r
-\r
-   *pdest=color|lSetMask;//0x80008000;\r
-  }\r
-}  \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG(unsigned short * pdest,unsigned short color)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
-\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
-  {\r
-   if(GlobalTextABR==0)\r
-    {\r
-     unsigned short d;\r
-     d     =((*pdest)&0x7bde)>>1;\r
-     color =((color) &0x7bde)>>1;\r
-     r=(XCOL1(d))+((((XCOL1(color)))* g_m1)>>7);\r
-     b=(XCOL2(d))+((((XCOL2(color)))* g_m2)>>7);\r
-     g=(XCOL3(d))+((((XCOL3(color)))* g_m3)>>7);\r
-\r
-/*\r
-     r=(XCOL1(*pdest)>>1)+((((XCOL1(color))>>1)* g_m1)>>7);\r
-     b=(XCOL2(*pdest)>>1)+((((XCOL2(color))>>1)* g_m2)>>7);\r
-     g=(XCOL3(*pdest)>>1)+((((XCOL3(color))>>1)* g_m3)>>7);\r
-*/\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(XCOL1(*pdest))+((((XCOL1(color)))* g_m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color)))* g_m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color)))* g_m3)>>7);\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     r=(XCOL1(*pdest))-((((XCOL1(color)))* g_m1)>>7);\r
-     b=(XCOL2(*pdest))-((((XCOL2(color)))* g_m2)>>7);\r
-     g=(XCOL3(*pdest))-((((XCOL3(color)))* g_m3)>>7);\r
-     if(r&0x80000000) r=0;\r
-     if(b&0x80000000) b=0;\r
-     if(g&0x80000000) g=0;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(XCOL1(*pdest))+((((XCOL1(color))>>2)* g_m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color))>>2)* g_m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color))>>2)* g_m3)>>7);\r
-#else\r
-     r=(XCOL1(*pdest))+((((XCOL1(color))>>1)* g_m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color))>>1)* g_m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color))>>1)* g_m3)>>7);\r
-#endif\r
-    }\r
-  }\r
- else \r
-  {\r
-   r=((XCOL1(color))* g_m1)>>7;\r
-   b=((XCOL2(color))* g_m2)>>7;\r
-   g=((XCOL3(color))* g_m3)>>7;\r
-  }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG_S(unsigned short * pdest,unsigned short color)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- r=((XCOL1(color))* g_m1)>>7;\r
- b=((XCOL2(color))* g_m2)>>7;\r
- g=((XCOL3(color))* g_m3)>>7;\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG_SPR(unsigned short * pdest,unsigned short color)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
-\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
-  {\r
-   if(GlobalTextABR==0)\r
-    {\r
-     unsigned short d;\r
-     d     =((*pdest)&0x7bde)>>1;\r
-     color =((color) &0x7bde)>>1;\r
-     r=(XCOL1(d))+((((XCOL1(color)))* g_m1)>>7);\r
-     b=(XCOL2(d))+((((XCOL2(color)))* g_m2)>>7);\r
-     g=(XCOL3(d))+((((XCOL3(color)))* g_m3)>>7);\r
-\r
-/*\r
-     r=(XCOL1(*pdest)>>1)+((((XCOL1(color))>>1)* g_m1)>>7);\r
-     b=(XCOL2(*pdest)>>1)+((((XCOL2(color))>>1)* g_m2)>>7);\r
-     g=(XCOL3(*pdest)>>1)+((((XCOL3(color))>>1)* g_m3)>>7);\r
-*/\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(XCOL1(*pdest))+((((XCOL1(color)))* g_m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color)))* g_m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color)))* g_m3)>>7);\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     r=(XCOL1(*pdest))-((((XCOL1(color)))* g_m1)>>7);\r
-     b=(XCOL2(*pdest))-((((XCOL2(color)))* g_m2)>>7);\r
-     g=(XCOL3(*pdest))-((((XCOL3(color)))* g_m3)>>7);\r
-     if(r&0x80000000) r=0;\r
-     if(b&0x80000000) b=0;\r
-     if(g&0x80000000) g=0;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(XCOL1(*pdest))+((((XCOL1(color))>>2)* g_m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color))>>2)* g_m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color))>>2)* g_m3)>>7);\r
-#else\r
-     r=(XCOL1(*pdest))+((((XCOL1(color))>>1)* g_m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color))>>1)* g_m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color))>>1)* g_m3)>>7);\r
-#endif\r
-    }\r
-  }\r
- else \r
-  {\r
-   r=((XCOL1(color))* g_m1)>>7;\r
-   b=((XCOL2(color))* g_m2)>>7;\r
-   g=((XCOL3(color))* g_m3)>>7;\r
-  }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG32(uint32_t *pdest, uint32_t color)\r
-{\r
- int r,g,b,l;\r
-\r
- if(color==0) return;\r
-\r
- l=lSetMask|(color&0x80008000);\r
-\r
- if(DrawSemiTrans && (color&0x80008000))\r
-  {\r
-   if(GlobalTextABR==0)\r
-    {                 \r
-     r=((((X32TCOL1(*pdest))+((X32COL1(color)) * g_m1))&0xFF00FF00)>>8);\r
-     b=((((X32TCOL2(*pdest))+((X32COL2(color)) * g_m2))&0xFF00FF00)>>8);\r
-     g=((((X32TCOL3(*pdest))+((X32COL3(color)) * g_m3))&0xFF00FF00)>>8);\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(X32COL1(*pdest))+(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
-     b=(X32COL2(*pdest))+(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
-     g=(X32COL3(*pdest))+(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     int t;\r
-     r=(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
-     t=(*pdest&0x001f0000)-(r&0x003f0000); if(t&0x80000000) t=0;\r
-     r=(*pdest&0x0000001f)-(r&0x0000003f); if(r&0x80000000) r=0;\r
-     r|=t;\r
-\r
-     b=(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
-     t=((*pdest>>5)&0x001f0000)-(b&0x003f0000); if(t&0x80000000) t=0;\r
-     b=((*pdest>>5)&0x0000001f)-(b&0x0000003f); if(b&0x80000000) b=0;\r
-     b|=t;\r
-\r
-     g=(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
-     t=((*pdest>>10)&0x001f0000)-(g&0x003f0000); if(t&0x80000000) t=0;\r
-     g=((*pdest>>10)&0x0000001f)-(g&0x0000003f); if(g&0x80000000) g=0;\r
-     g|=t;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(X32COL1(*pdest))+(((((X32BCOL1(color))>>2)* g_m1)&0xFF80FF80)>>7);\r
-     b=(X32COL2(*pdest))+(((((X32BCOL2(color))>>2)* g_m2)&0xFF80FF80)>>7);\r
-     g=(X32COL3(*pdest))+(((((X32BCOL3(color))>>2)* g_m3)&0xFF80FF80)>>7);\r
-#else\r
-     r=(X32COL1(*pdest))+(((((X32ACOL1(color))>>1)* g_m1)&0xFF80FF80)>>7);\r
-     b=(X32COL2(*pdest))+(((((X32ACOL2(color))>>1)* g_m2)&0xFF80FF80)>>7);\r
-     g=(X32COL3(*pdest))+(((((X32ACOL3(color))>>1)* g_m3)&0xFF80FF80)>>7);\r
-#endif\r
-    }\r
-\r
-   if(!(color&0x8000))\r
-    {\r
-     r=(r&0xffff0000)|((((X32COL1(color))* g_m1)&0x0000FF80)>>7);\r
-     b=(b&0xffff0000)|((((X32COL2(color))* g_m2)&0x0000FF80)>>7);\r
-     g=(g&0xffff0000)|((((X32COL3(color))* g_m3)&0x0000FF80)>>7);\r
-    }\r
-   if(!(color&0x80000000))\r
-    {\r
-     r=(r&0xffff)|((((X32COL1(color))* g_m1)&0xFF800000)>>7);\r
-     b=(b&0xffff)|((((X32COL2(color))* g_m2)&0xFF800000)>>7);\r
-     g=(g&0xffff)|((((X32COL3(color))* g_m3)&0xFF800000)>>7);\r
-    }\r
-\r
-  }\r
- else \r
-  {\r
-   r=(((X32COL1(color))* g_m1)&0xFF80FF80)>>7;\r
-   b=(((X32COL2(color))* g_m2)&0xFF80FF80)>>7;\r
-   g=(((X32COL3(color))* g_m3)&0xFF80FF80)>>7;\r
-  }\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0)     r=0x1f    |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0)     b=0x1f    |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0)     g=0x1f    |(g&0xFFFF0000);\r
-         \r
- if(bCheckMask) \r
-  {\r
-   uint32_t ma=*pdest;\r
-\r
-   *pdest=(X32PSXCOL(r,g,b))|l;\r
-   \r
-   if((color&0xffff)==0    ) *pdest=(ma&0xffff)|(*pdest&0xffff0000);\r
-   if((color&0xffff0000)==0) *pdest=(ma&0xffff0000)|(*pdest&0xffff);\r
-   if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
-   if(ma&0x00008000) *pdest=(ma&0xFFFF)    |(*pdest&0xFFFF0000);\r
-\r
-   return;                            \r
-  }\r
- if((color&0xffff)==0    ) {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|l)&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|l)&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG32_S(uint32_t *pdest, uint32_t color)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
-\r
- r=(((X32COL1(color))* g_m1)&0xFF80FF80)>>7;\r
- b=(((X32COL2(color))* g_m2)&0xFF80FF80)>>7;\r
- g=(((X32COL3(color))* g_m3)&0xFF80FF80)>>7;\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0)     r=0x1f    |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0)     b=0x1f    |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0)     g=0x1f    |(g&0xFFFF0000);\r
-         \r
- if((color&0xffff)==0)     {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG32_SPR(uint32_t *pdest, uint32_t color)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
-\r
- if(DrawSemiTrans && (color&0x80008000))\r
-  {\r
-   if(GlobalTextABR==0)\r
-    {                 \r
-     r=((((X32TCOL1(*pdest))+((X32COL1(color)) * g_m1))&0xFF00FF00)>>8);\r
-     b=((((X32TCOL2(*pdest))+((X32COL2(color)) * g_m2))&0xFF00FF00)>>8);\r
-     g=((((X32TCOL3(*pdest))+((X32COL3(color)) * g_m3))&0xFF00FF00)>>8);\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(X32COL1(*pdest))+(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
-     b=(X32COL2(*pdest))+(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
-     g=(X32COL3(*pdest))+(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     int t;\r
-     r=(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
-     t=(*pdest&0x001f0000)-(r&0x003f0000); if(t&0x80000000) t=0;\r
-     r=(*pdest&0x0000001f)-(r&0x0000003f); if(r&0x80000000) r=0;\r
-     r|=t;\r
-\r
-     b=(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
-     t=((*pdest>>5)&0x001f0000)-(b&0x003f0000); if(t&0x80000000) t=0;\r
-     b=((*pdest>>5)&0x0000001f)-(b&0x0000003f); if(b&0x80000000) b=0;\r
-     b|=t;\r
-\r
-     g=(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
-     t=((*pdest>>10)&0x001f0000)-(g&0x003f0000); if(t&0x80000000) t=0;\r
-     g=((*pdest>>10)&0x0000001f)-(g&0x0000003f); if(g&0x80000000) g=0;\r
-     g|=t;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(X32COL1(*pdest))+(((((X32BCOL1(color))>>2)* g_m1)&0xFF80FF80)>>7);\r
-     b=(X32COL2(*pdest))+(((((X32BCOL2(color))>>2)* g_m2)&0xFF80FF80)>>7);\r
-     g=(X32COL3(*pdest))+(((((X32BCOL3(color))>>2)* g_m3)&0xFF80FF80)>>7);\r
-#else\r
-     r=(X32COL1(*pdest))+(((((X32ACOL1(color))>>1)* g_m1)&0xFF80FF80)>>7);\r
-     b=(X32COL2(*pdest))+(((((X32ACOL2(color))>>1)* g_m2)&0xFF80FF80)>>7);\r
-     g=(X32COL3(*pdest))+(((((X32ACOL3(color))>>1)* g_m3)&0xFF80FF80)>>7);\r
-#endif\r
-    }\r
-\r
-   if(!(color&0x8000))\r
-    {\r
-     r=(r&0xffff0000)|((((X32COL1(color))* g_m1)&0x0000FF80)>>7);\r
-     b=(b&0xffff0000)|((((X32COL2(color))* g_m2)&0x0000FF80)>>7);\r
-     g=(g&0xffff0000)|((((X32COL3(color))* g_m3)&0x0000FF80)>>7);\r
-    }\r
-   if(!(color&0x80000000))\r
-    {\r
-     r=(r&0xffff)|((((X32COL1(color))* g_m1)&0xFF800000)>>7);\r
-     b=(b&0xffff)|((((X32COL2(color))* g_m2)&0xFF800000)>>7);\r
-     g=(g&0xffff)|((((X32COL3(color))* g_m3)&0xFF800000)>>7);\r
-    }\r
-\r
-  }\r
- else \r
-  {\r
-   r=(((X32COL1(color))* g_m1)&0xFF80FF80)>>7;\r
-   b=(((X32COL2(color))* g_m2)&0xFF80FF80)>>7;\r
-   g=(((X32COL3(color))* g_m3)&0xFF80FF80)>>7;\r
-  }\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0)     r=0x1f    |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0)     b=0x1f    |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0)     g=0x1f    |(g&0xFFFF0000);\r
-         \r
- if(bCheckMask) \r
-  {\r
-   uint32_t ma=*pdest;\r
-\r
-   *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-   \r
-   if((color&0xffff)==0    ) *pdest=(ma&0xffff)|(*pdest&0xffff0000);\r
-   if((color&0xffff0000)==0) *pdest=(ma&0xffff0000)|(*pdest&0xffff);\r
-   if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
-   if(ma&0x00008000) *pdest=(ma&0xFFFF)    |(*pdest&0xFFFF0000);\r
-\r
-   return;                            \r
-  }\r
- if((color&0xffff)==0    ) {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX_Dither(unsigned short * pdest, unsigned short color, int m1, int m2, int m3)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- m1=(((XCOL1D(color)))*m1)>>4;\r
- m2=(((XCOL2D(color)))*m2)>>4;\r
- m3=(((XCOL3D(color)))*m3)>>4;\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
-  {\r
-   r=((XCOL1D(*pdest))<<3);\r
-   b=((XCOL2D(*pdest))<<3);\r
-   g=((XCOL3D(*pdest))<<3);\r
-\r
-   if(GlobalTextABR==0)\r
-    {\r
-     r=(r>>1)+(m1>>1);\r
-     b=(b>>1)+(m2>>1);\r
-     g=(g>>1)+(m3>>1);\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r+=m1;\r
-     b+=m2;\r
-     g+=m3;\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     r-=m1;\r
-     b-=m2;\r
-     g-=m3;\r
-     if(r&0x80000000) r=0;\r
-     if(b&0x80000000) b=0;\r
-     if(g&0x80000000) g=0;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r+=(m1>>2);\r
-     b+=(m2>>2);\r
-     g+=(m3>>2);\r
-#else\r
-     r+=(m1>>1);\r
-     b+=(m2>>1);\r
-     g+=(m3>>1);\r
-#endif\r
-    }\r
-  }\r
- else \r
-  {\r
-   r=m1;\r
-   b=m2;\r
-   g=m3;\r
-  }\r
-\r
- if(r&0x7FFFFF00) r=0xff;\r
- if(b&0x7FFFFF00) b=0xff;\r
- if(g&0x7FFFFF00) g=0xff;\r
-\r
- Dither16(pdest,r,b,g,sSetMask|(color&0x8000));\r
-\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX(unsigned short * pdest,unsigned short color,short m1,short m2,short m3)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
-  {\r
-   if(GlobalTextABR==0)\r
-    {\r
-     unsigned short d;\r
-     d     =((*pdest)&0x7bde)>>1;\r
-     color =((color) &0x7bde)>>1;\r
-     r=(XCOL1(d))+((((XCOL1(color)))* m1)>>7);\r
-     b=(XCOL2(d))+((((XCOL2(color)))* m2)>>7);\r
-     g=(XCOL3(d))+((((XCOL3(color)))* m3)>>7);\r
-/*\r
-     r=(XCOL1(*pdest)>>1)+((((XCOL1(color))>>1)* m1)>>7);\r
-     b=(XCOL2(*pdest)>>1)+((((XCOL2(color))>>1)* m2)>>7);\r
-     g=(XCOL3(*pdest)>>1)+((((XCOL3(color))>>1)* m3)>>7);\r
-*/\r
-    }\r
-   else\r
-   if(GlobalTextABR==1)\r
-    {\r
-     r=(XCOL1(*pdest))+((((XCOL1(color)))* m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color)))* m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color)))* m3)>>7);\r
-    }\r
-   else\r
-   if(GlobalTextABR==2)\r
-    {\r
-     r=(XCOL1(*pdest))-((((XCOL1(color)))* m1)>>7);\r
-     b=(XCOL2(*pdest))-((((XCOL2(color)))* m2)>>7);\r
-     g=(XCOL3(*pdest))-((((XCOL3(color)))* m3)>>7);\r
-     if(r&0x80000000) r=0;\r
-     if(b&0x80000000) b=0;\r
-     if(g&0x80000000) g=0;\r
-    }\r
-   else\r
-    {\r
-#ifdef HALFBRIGHTMODE3\r
-     r=(XCOL1(*pdest))+((((XCOL1(color))>>2)* m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color))>>2)* m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color))>>2)* m3)>>7);\r
-#else\r
-     r=(XCOL1(*pdest))+((((XCOL1(color))>>1)* m1)>>7);\r
-     b=(XCOL2(*pdest))+((((XCOL2(color))>>1)* m2)>>7);\r
-     g=(XCOL3(*pdest))+((((XCOL3(color))>>1)* m3)>>7);\r
-#endif\r
-    }\r
-  }\r
- else \r
-  {\r
-   r=((XCOL1(color))* m1)>>7;\r
-   b=((XCOL2(color))* m2)>>7;\r
-   g=((XCOL3(color))* m3)>>7;\r
-  }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX_S(unsigned short * pdest,unsigned short color,short m1,short m2,short m3)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
\r
- r=((XCOL1(color))* m1)>>7;\r
- b=((XCOL2(color))* m2)>>7;\r
- g=((XCOL3(color))* m3)>>7;\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|sSetMask|(color&0x8000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX32_S(uint32_t *pdest, uint32_t color, short m1, short m2, short m3)\r
-{\r
- int r,g,b;\r
\r
- if(color==0) return;\r
-\r
- r=(((X32COL1(color))* m1)&0xFF80FF80)>>7;\r
- b=(((X32COL2(color))* m2)&0xFF80FF80)>>7;\r
- g=(((X32COL3(color))* m3)&0xFF80FF80)>>7;\r
-                \r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0)     r=0x1f    |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0)     b=0x1f    |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0)     g=0x1f    |(g&0xFFFF0000);\r
-\r
- if((color&0xffff)==0)     {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// FILL FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void FillSoftwareAreaTrans(short x0,short y0,short x1, // FILL AREA TRANS\r
-                      short y1,unsigned short col)\r
-{\r
- short j,i,dx,dy;\r
-\r
- if(y0>y1) return;\r
- if(x0>x1) return;\r
-\r
- if(x1<drawX) return;\r
- if(y1<drawY) return;\r
- if(x0>drawW) return;\r
- if(y0>drawH) return;\r
-\r
- x1=min(x1,drawW+1);\r
- y1=min(y1,drawH+1);\r
- x0=max(x0,drawX);\r
- y0=max(y0,drawY);\r
-    \r
- if(y0>=iGPUHeight)   return;\r
- if(x0>1023)          return;\r
-\r
- if(y1>iGPUHeight) y1=iGPUHeight;\r
- if(x1>1024)       x1=1024;\r
-\r
- dx=x1-x0;dy=y1-y0;\r
-\r
- if(dx==1 && dy==1 && x0==1020 && y0==511)             // special fix for pinball game... emu protection???\r
-  {\r
-/*\r
-m->v 1020 511 1 1\r
-writedatamem 0x00000000 1\r
-tile1 newcol 7fff (orgcol 0xffffff), oldvram 0\r
-v->m 1020 511 1 1\r
-readdatamem 0x00007fff 1\r
-m->v 1020 511 1 1\r
-writedatamem 0x00000000 1\r
-tile1 newcol 8000 (orgcol 0xffffff), oldvram 0\r
-v->m 1020 511 1 1\r
-readdatamem 0x00008000 1\r
-*/\r
-\r
-   static int iCheat=0;\r
-   col+=iCheat;\r
-   if(iCheat==1) iCheat=0; else iCheat=1;\r
-  }\r
-\r
- if(dx&1)                                              // slow fill\r
-  {\r
-   unsigned short *DSTPtr;\r
-   unsigned short LineOffset;\r
-   DSTPtr = psxVuw + (1024*y0) + x0;\r
-   LineOffset = 1024 - dx;\r
-   for(i=0;i<dy;i++)\r
-    {\r
-     for(j=0;j<dx;j++)\r
-      GetShadeTransCol(DSTPtr++,col);\r
-     DSTPtr += LineOffset;\r
-    } \r
-  }\r
- else                                                  // fast fill\r
-  {\r
-   uint32_t *DSTPtr;\r
-   unsigned short LineOffset;\r
-   uint32_t lcol=lSetMask|(((uint32_t)(col))<<16)|col;\r
-   dx>>=1;\r
-   DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);\r
-   LineOffset = 512 - dx;\r
-\r
-   if(!bCheckMask && !DrawSemiTrans)\r
-    {\r
-     for(i=0;i<dy;i++)\r
-      {\r
-       for(j=0;j<dx;j++) *DSTPtr++=lcol;\r
-       DSTPtr += LineOffset;\r
-      }\r
-    }\r
-   else\r
-    {\r
-     for(i=0;i<dy;i++)\r
-      {\r
-       for(j=0;j<dx;j++) \r
-        GetShadeTransCol32(DSTPtr++,lcol);\r
-       DSTPtr += LineOffset;\r
-      } \r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void FillSoftwareArea(short x0,short y0,short x1,      // FILL AREA (BLK FILL)\r
-                      short y1,unsigned short col)     // no draw area check here!\r
-{\r
- short j,i,dx,dy;\r
-\r
- if(y0>y1) return;\r
- if(x0>x1) return;\r
-    \r
- if(y0>=iGPUHeight)   return;\r
- if(x0>1023)          return;\r
-\r
- if(y1>iGPUHeight) y1=iGPUHeight;\r
- if(x1>1024)       x1=1024;\r
-\r
- dx=x1-x0;dy=y1-y0;\r
- if(dx&1)\r
-  {\r
-   unsigned short *DSTPtr;\r
-   unsigned short LineOffset;\r
-\r
-   DSTPtr = psxVuw + (1024*y0) + x0;\r
-   LineOffset = 1024 - dx;\r
-\r
-   for(i=0;i<dy;i++)\r
-    {\r
-     for(j=0;j<dx;j++) *DSTPtr++=col;\r
-     DSTPtr += LineOffset;\r
-    } \r
-  }\r
- else\r
-  {\r
-   uint32_t *DSTPtr;\r
-   unsigned short LineOffset;\r
-   uint32_t lcol=(((int)col)<<16)|col;\r
-   dx>>=1;\r
-   DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);\r
-   LineOffset = 512 - dx;\r
-\r
-   for(i=0;i<dy;i++)\r
-    {\r
-     for(j=0;j<dx;j++) *DSTPtr++=lcol;\r
-     DSTPtr += LineOffset;\r
-    } \r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// EDGE INTERPOLATION\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-typedef struct SOFTVTAG\r
-{\r
- int x,y;   \r
- int u,v;\r
- int R,G,B;\r
-} soft_vertex;\r
-\r
-static soft_vertex vtx[4];\r
-static soft_vertex * left_array[4], * right_array[4];\r
-static int left_section, right_section;\r
-static int left_section_height, right_section_height;\r
-static int left_x, delta_left_x, right_x, delta_right_x;\r
-static int left_u, delta_left_u, left_v, delta_left_v;\r
-static int right_u, delta_right_u, right_v, delta_right_v;\r
-static int left_R, delta_left_R, right_R, delta_right_R;\r
-static int left_G, delta_left_G, right_G, delta_right_G;\r
-static int left_B, delta_left_B, right_B, delta_right_B;\r
-\r
-__inline int shl10idiv(int x, int y)\r
-{\r
- long long int bi=x;\r
- bi<<=10;\r
- return bi/y;\r
-}\r
-\r
-__inline int RightSection_F(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_F(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
-\r
- left_section_height = height;\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_F(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section <= 0) {return TRUE;}\r
-   if(LeftSection_F()  <= 0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section<=0) {return TRUE;}\r
-   if(RightSection_F() <=0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_F(short x1, short y1, short x2, short y2, short x3, short y3)\r
-{\r
- soft_vertex * v1, * v2, * v3;\r
- int height,longest;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
- longest = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
-  {\r
-   right_array[0] = v3;\r
-   right_array[1] = v2;\r
-   right_array[2] = v1;\r
-   right_section  = 2;\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v1;\r
-   left_section   = 1;\r
-\r
-   if(LeftSection_F() <= 0) return FALSE;\r
-   if(RightSection_F() <= 0)\r
-    {\r
-     right_section--;\r
-     if(RightSection_F() <= 0) return FALSE;\r
-    }\r
-  }\r
- else\r
-  {\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v2;\r
-   left_array[2]  = v1;\r
-   left_section   = 2;\r
-   right_array[0] = v3;\r
-   right_array[1] = v1;\r
-   right_section  = 1;\r
-\r
-   if(RightSection_F() <= 0) return FALSE;\r
-   if(LeftSection_F() <= 0)\r
-    {    \r
-     left_section--;\r
-     if(LeftSection_F() <= 0) return FALSE;\r
-    }\r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_G(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_G(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
-\r
- delta_left_R = ((v2->R - v1->R)) / height;\r
- left_R = v1->R;\r
- delta_left_G = ((v2->G - v1->G)) / height;\r
- left_G = v1->G;\r
- delta_left_B = ((v2->B - v1->B)) / height;\r
- left_B = v1->B;\r
-\r
- left_section_height = height;\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_G(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section <= 0) {return TRUE;}\r
-   if(LeftSection_G()  <= 0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-   left_R += delta_left_R;\r
-   left_G += delta_left_G;\r
-   left_B += delta_left_B;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section<=0) {return TRUE;}\r
-   if(RightSection_G() <=0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_G(short x1,short y1,short x2,short y2,short x3,short y3, int rgb1, int rgb2, int rgb3){\r
- soft_vertex *v1, *v2, *v3;\r
- int height, longest, temp;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v1->R=(rgb1) & 0x00ff0000;\r
- v1->G=(rgb1<<8) & 0x00ff0000;\r
- v1->B=(rgb1<<16) & 0x00ff0000;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->R=(rgb2) & 0x00ff0000;\r
- v2->G=(rgb2<<8) & 0x00ff0000;\r
- v2->B=(rgb2<<16) & 0x00ff0000;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->R=(rgb3) & 0x00ff0000;\r
- v3->G=(rgb3<<8) & 0x00ff0000;\r
- v3->B=(rgb3<<16) & 0x00ff0000;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
- temp=(((v2->y - v1->y) << 16) / height);\r
- longest = temp * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
-  {\r
-   right_array[0] = v3;\r
-   right_array[1] = v2;\r
-   right_array[2] = v1;\r
-   right_section  = 2;\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v1;\r
-   left_section   = 1;\r
-\r
-   if(LeftSection_G() <= 0) return FALSE;\r
-   if(RightSection_G() <= 0)\r
-    {\r
-     right_section--;\r
-     if(RightSection_G() <= 0) return FALSE;\r
-    }\r
-   if(longest > -0x1000) longest = -0x1000;     \r
-  }\r
- else\r
-  {\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v2;\r
-   left_array[2]  = v1;\r
-   left_section   = 2;\r
-   right_array[0] = v3;\r
-   right_array[1] = v1;\r
-   right_section  = 1;\r
-\r
-   if(RightSection_G() <= 0) return FALSE;\r
-   if(LeftSection_G() <= 0)\r
-    {    \r
-     left_section--;\r
-     if(LeftSection_G() <= 0) return FALSE;\r
-    }\r
-   if(longest < 0x1000) longest = 0x1000;     \r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);    \r
-\r
- delta_right_R=shl10idiv(temp*((v3->R - v1->R)>>10)+((v1->R - v2->R)<<6),longest);\r
- delta_right_G=shl10idiv(temp*((v3->G - v1->G)>>10)+((v1->G - v2->G)<<6),longest);\r
- delta_right_B=shl10idiv(temp*((v3->B - v1->B)>>10)+((v1->B - v2->B)<<6),longest);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_FT(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_FT(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
\r
- delta_left_u = ((v2->u - v1->u)) / height;\r
- left_u = v1->u;\r
- delta_left_v = ((v2->v - v1->v)) / height;\r
- left_v = v1->v;\r
-\r
- left_section_height = height;\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_FT(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section <= 0) {return TRUE;}\r
-   if(LeftSection_FT()  <= 0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-   left_u += delta_left_u;\r
-   left_v += delta_left_v;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section<=0) {return TRUE;}\r
-   if(RightSection_FT() <=0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_FT(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3)\r
-{\r
- soft_vertex * v1, * v2, * v3;\r
- int height,longest,temp;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
-\r
- temp=(((v2->y - v1->y) << 16) / height);\r
- longest = temp * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
-  {\r
-   right_array[0] = v3;\r
-   right_array[1] = v2;\r
-   right_array[2] = v1;\r
-   right_section  = 2;\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v1;\r
-   left_section   = 1;\r
-\r
-   if(LeftSection_FT() <= 0) return FALSE;\r
-   if(RightSection_FT() <= 0)\r
-    {\r
-     right_section--;\r
-     if(RightSection_FT() <= 0) return FALSE;\r
-    }\r
-   if(longest > -0x1000) longest = -0x1000;     \r
-  }\r
- else\r
-  {\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v2;\r
-   left_array[2]  = v1;\r
-   left_section   = 2;\r
-   right_array[0] = v3;\r
-   right_array[1] = v1;\r
-   right_section  = 1;\r
-\r
-   if(RightSection_FT() <= 0) return FALSE;\r
-   if(LeftSection_FT() <= 0)\r
-    {    \r
-     left_section--;                \r
-     if(LeftSection_FT() <= 0) return FALSE;\r
-    }\r
-   if(longest < 0x1000) longest = 0x1000;     \r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);\r
-\r
- delta_right_u=shl10idiv(temp*((v3->u - v1->u)>>10)+((v1->u - v2->u)<<6),longest);\r
- delta_right_v=shl10idiv(temp*((v3->v - v1->v)>>10)+((v1->v - v2->v)<<6),longest);\r
-\r
-/*\r
-Mmm... adjust neg tex deltas... will sometimes cause slight\r
-texture distortions \r
-\r
- longest>>=16;\r
- if(longest)\r
-  {\r
-   if(longest<0) longest=-longest;\r
-   if(delta_right_u<0)\r
-    delta_right_u-=delta_right_u/longest;\r
-   if(delta_right_v<0)\r
-    delta_right_v-=delta_right_v/longest;\r
-  }\r
-*/\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_GT(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_GT(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
-\r
- delta_left_u = ((v2->u - v1->u)) / height;\r
- left_u = v1->u;\r
- delta_left_v = ((v2->v - v1->v)) / height;\r
- left_v = v1->v;\r
-\r
- delta_left_R = ((v2->R - v1->R)) / height;\r
- left_R = v1->R;\r
- delta_left_G = ((v2->G - v1->G)) / height;\r
- left_G = v1->G;\r
- delta_left_B = ((v2->B - v1->B)) / height;\r
- left_B = v1->B;\r
-\r
- left_section_height = height;\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_GT(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section <= 0) {return TRUE;}\r
-   if(LeftSection_GT()  <= 0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-   left_u += delta_left_u;\r
-   left_v += delta_left_v;\r
-   left_R += delta_left_R;\r
-   left_G += delta_left_G;\r
-   left_B += delta_left_B;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section<=0) {return TRUE;}\r
-   if(RightSection_GT() <=0) {return TRUE;}\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_GT(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, int rgb1, int rgb2, int rgb3)\r
-{\r
- soft_vertex * v1, * v2, * v3;\r
- int height,longest,temp;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
- v1->R=(rgb1) & 0x00ff0000;\r
- v1->G=(rgb1<<8) & 0x00ff0000;\r
- v1->B=(rgb1<<16) & 0x00ff0000;\r
-\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- v2->R=(rgb2) & 0x00ff0000;\r
- v2->G=(rgb2<<8) & 0x00ff0000;\r
- v2->B=(rgb2<<16) & 0x00ff0000;\r
-             \r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
- v3->R=(rgb3) & 0x00ff0000;\r
- v3->G=(rgb3<<8) & 0x00ff0000;\r
- v3->B=(rgb3<<16) & 0x00ff0000;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
-\r
- temp=(((v2->y - v1->y) << 16) / height);\r
- longest = temp * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
-  {\r
-   right_array[0] = v3;\r
-   right_array[1] = v2;\r
-   right_array[2] = v1;\r
-   right_section  = 2;\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v1;\r
-   left_section   = 1;\r
-\r
-   if(LeftSection_GT() <= 0) return FALSE;\r
-   if(RightSection_GT() <= 0)\r
-    {\r
-     right_section--;\r
-     if(RightSection_GT() <= 0) return FALSE;\r
-    }\r
-\r
-   if(longest > -0x1000) longest = -0x1000;     \r
-  }\r
- else\r
-  {\r
-   left_array[0]  = v3;\r
-   left_array[1]  = v2;\r
-   left_array[2]  = v1;\r
-   left_section   = 2;\r
-   right_array[0] = v3;\r
-   right_array[1] = v1;\r
-   right_section  = 1;\r
-\r
-   if(RightSection_GT() <= 0) return FALSE;\r
-   if(LeftSection_GT() <= 0)\r
-    {    \r
-     left_section--;\r
-     if(LeftSection_GT() <= 0) return FALSE;\r
-    }\r
-   if(longest < 0x1000) longest = 0x1000;     \r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);\r
-\r
- delta_right_R=shl10idiv(temp*((v3->R - v1->R)>>10)+((v1->R - v2->R)<<6),longest);\r
- delta_right_G=shl10idiv(temp*((v3->G - v1->G)>>10)+((v1->G - v2->G)<<6),longest);\r
- delta_right_B=shl10idiv(temp*((v3->B - v1->B)>>10)+((v1->B - v2->B)<<6),longest);\r
-\r
- delta_right_u=shl10idiv(temp*((v3->u - v1->u)>>10)+((v1->u - v2->u)<<6),longest);\r
- delta_right_v=shl10idiv(temp*((v3->v - v1->v)>>10)+((v1->v - v2->v)<<6),longest);\r
-\r
-\r
-/*\r
-Mmm... adjust neg tex deltas... will sometimes cause slight\r
-texture distortions \r
- longest>>=16;\r
- if(longest)\r
-  {\r
-   if(longest<0) longest=-longest;\r
-   if(delta_right_u<0)\r
-    delta_right_u-=delta_right_u/longest;\r
-   if(delta_right_v<0)\r
-    delta_right_v-=delta_right_v/longest;\r
-  }\r
-*/\r
-\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_F4(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- right_section_height = height;\r
- right_x = v1->x;\r
- if(height == 0) \r
-  {\r
-   return 0;\r
-  }\r
- delta_right_x = (v2->x - v1->x) / height;\r
-\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_F4(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- left_section_height = height;\r
- left_x = v1->x;\r
- if(height == 0) \r
-  {\r
-   return 0;\r
-  }\r
- delta_left_x = (v2->x - v1->x) / height;\r
-\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_F4(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section > 0) \r
-    while(LeftSection_F4()<=0) \r
-     {\r
-      if(--left_section  <= 0) break;\r
-     }\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section > 0) \r
-    while(RightSection_F4()<=0) \r
-     {\r
-      if(--right_section<=0) break;\r
-     }\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_F4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4)\r
-{\r
- soft_vertex * v1, * v2, * v3, * v4;\r
- int height,width,longest1,longest2;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v4 = vtx+3; v4->x=x4<<16;v4->y=y4;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v1->y > v4->y) { soft_vertex * v = v1; v1 = v4; v4 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
- if(v2->y > v4->y) { soft_vertex * v = v2; v2 = v4; v4 = v; }\r
- if(v3->y > v4->y) { soft_vertex * v = v3; v3 = v4; v4 = v; }\r
-\r
- height = v4->y - v1->y; if(height == 0) height =1;\r
- width  = (v4->x - v1->x)>>16;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * width + (v1->x - v2->x);\r
- longest2 = (((v3->y - v1->y) << 16) / height) * width + (v1->x - v3->x);\r
-\r
- if(longest1 < 0)                                      // 2 is right\r
-  {\r
-   if(longest2 < 0)                                    // 3 is right\r
-    {\r
-     left_array[0]  = v4;\r
-     left_array[1]  = v1;\r
-     left_section   = 1;\r
-\r
-     height = v3->y - v1->y; if(height == 0) height=1;\r
-     longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-     if(longest1 >= 0)\r
-      {\r
-       right_array[0] = v4;                     //  1\r
-       right_array[1] = v3;                     //     3\r
-       right_array[2] = v1;                     //  4\r
-       right_section  = 2;    \r
-      }\r
-     else\r
-      {\r
-       height = v4->y - v2->y; if(height == 0) height=1;\r
-       longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
-       if(longest1 >= 0)\r
-        {\r
-         right_array[0] = v4;                    //  1\r
-         right_array[1] = v2;                    //     2\r
-         right_array[2] = v1;                    //  4\r
-         right_section  = 2;    \r
-        }\r
-       else\r
-        {\r
-         right_array[0] = v4;                    //  1\r
-         right_array[1] = v3;                    //     2\r
-         right_array[2] = v2;                    //     3\r
-         right_array[3] = v1;                    //  4\r
-         right_section  = 3;    \r
-        }\r
-      }\r
-    }\r
-   else                                            \r
-    {\r
-     left_array[0]  = v4;\r
-     left_array[1]  = v3;                         //    1\r
-     left_array[2]  = v1;                         //      2\r
-     left_section   = 2;                          //  3\r
-     right_array[0] = v4;                         //    4\r
-     right_array[1] = v2;\r
-     right_array[2] = v1;\r
-     right_section  = 2;\r
-    }\r
-  }\r
- else\r
-  {\r
-   if(longest2 < 0)             \r
-    {\r
-     left_array[0]  = v4;                          //    1\r
-     left_array[1]  = v2;                          //  2\r
-     left_array[2]  = v1;                          //      3\r
-     left_section   = 2;                           //    4\r
-     right_array[0] = v4;\r
-     right_array[1] = v3;\r
-     right_array[2] = v1;\r
-     right_section  = 2;\r
-    }\r
-   else                         \r
-    {\r
-     right_array[0] = v4;\r
-     right_array[1] = v1;\r
-     right_section  = 1;\r
-\r
-     height = v3->y - v1->y; if(height == 0) height=1;\r
-     longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-     if(longest1<0)\r
-      {\r
-       left_array[0]  = v4;                        //    1\r
-       left_array[1]  = v3;                        //  3\r
-       left_array[2]  = v1;                        //    4\r
-       left_section   = 2;    \r
-      }\r
-     else\r
-      {\r
-       height = v4->y - v2->y; if(height == 0) height=1;\r
-       longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
-       if(longest1<0)\r
-        {\r
-         left_array[0]  = v4;                      //    1\r
-         left_array[1]  = v2;                      //  2\r
-         left_array[2]  = v1;                      //    4\r
-         left_section   = 2;    \r
-        }\r
-       else\r
-        {\r
-         left_array[0]  = v4;                      //    1\r
-         left_array[1]  = v3;                      //  2\r
-         left_array[2]  = v2;                      //  3\r
-         left_array[3]  = v1;                      //     4\r
-         left_section   = 3;    \r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
- while(LeftSection_F4()<=0) \r
-  {\r
-   if(--left_section  <= 0) break;\r
-  }\r
-\r
- while(RightSection_F4()<=0) \r
-  {\r
-   if(--right_section <= 0) break;\r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v4->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_FT4(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- right_section_height = height;\r
- right_x = v1->x;\r
- right_u = v1->u;\r
- right_v = v1->v;\r
- if(height == 0) \r
-  {\r
-   return 0;\r
-  }\r
- delta_right_x = (v2->x - v1->x) / height;\r
- delta_right_u = (v2->u - v1->u) / height;\r
- delta_right_v = (v2->v - v1->v) / height;\r
-\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_FT4(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- left_section_height = height;\r
- left_x = v1->x;\r
- left_u = v1->u;\r
- left_v = v1->v;\r
- if(height == 0) \r
-  {\r
-   return 0;\r
-  }\r
- delta_left_x = (v2->x - v1->x) / height;\r
- delta_left_u = (v2->u - v1->u) / height;\r
- delta_left_v = (v2->v - v1->v) / height;\r
-\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_FT4(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section > 0) \r
-    while(LeftSection_FT4()<=0) \r
-     {\r
-      if(--left_section  <= 0) break;\r
-     }\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-   left_u += delta_left_u;\r
-   left_v += delta_left_v;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section > 0) \r
-    while(RightSection_FT4()<=0) \r
-     {\r
-      if(--right_section<=0) break;\r
-     }\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-   right_u += delta_right_u;\r
-   right_v += delta_right_v;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_FT4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- soft_vertex * v1, * v2, * v3, * v4;\r
- int height,width,longest1,longest2;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
-\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
-             \r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
-\r
- v4 = vtx+3; v4->x=x4<<16;v4->y=y4;\r
- v4->u=tx4<<16;v4->v=ty4<<16;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v1->y > v4->y) { soft_vertex * v = v1; v1 = v4; v4 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
- if(v2->y > v4->y) { soft_vertex * v = v2; v2 = v4; v4 = v; }\r
- if(v3->y > v4->y) { soft_vertex * v = v3; v3 = v4; v4 = v; }\r
-\r
- height = v4->y - v1->y; if(height == 0) height =1;\r
- width  = (v4->x - v1->x)>>16;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * width + (v1->x - v2->x);\r
- longest2 = (((v3->y - v1->y) << 16) / height) * width + (v1->x - v3->x);\r
-\r
- if(longest1 < 0)                                      // 2 is right\r
-  {\r
-   if(longest2 < 0)                                    // 3 is right\r
-    {\r
-     left_array[0]  = v4;\r
-     left_array[1]  = v1;\r
-     left_section   = 1;\r
-\r
-     height = v3->y - v1->y; if(height == 0) height=1;\r
-     longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-     if(longest1 >= 0)\r
-      {\r
-       right_array[0] = v4;                     //  1\r
-       right_array[1] = v3;                     //     3\r
-       right_array[2] = v1;                     //  4\r
-       right_section  = 2;    \r
-      }\r
-     else\r
-      {\r
-       height = v4->y - v2->y; if(height == 0) height=1;\r
-       longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
-       if(longest1 >= 0)\r
-        {\r
-         right_array[0] = v4;                    //  1\r
-         right_array[1] = v2;                    //     2\r
-         right_array[2] = v1;                    //  4\r
-         right_section  = 2;    \r
-        }\r
-       else\r
-        {\r
-         right_array[0] = v4;                    //  1\r
-         right_array[1] = v3;                    //     2\r
-         right_array[2] = v2;                    //     3\r
-         right_array[3] = v1;                    //  4\r
-         right_section  = 3;    \r
-        }\r
-      }\r
-    }\r
-   else                                            \r
-    {\r
-     left_array[0]  = v4;\r
-     left_array[1]  = v3;                         //    1\r
-     left_array[2]  = v1;                         //      2\r
-     left_section   = 2;                          //  3\r
-     right_array[0] = v4;                         //    4\r
-     right_array[1] = v2;\r
-     right_array[2] = v1;\r
-     right_section  = 2;\r
-    }\r
-  }\r
- else\r
-  {\r
-   if(longest2 < 0)             \r
-    {\r
-     left_array[0]  = v4;                          //    1\r
-     left_array[1]  = v2;                          //  2\r
-     left_array[2]  = v1;                          //      3\r
-     left_section   = 2;                           //    4\r
-     right_array[0] = v4;\r
-     right_array[1] = v3;\r
-     right_array[2] = v1;\r
-     right_section  = 2;\r
-    }\r
-   else                         \r
-    {\r
-     right_array[0] = v4;\r
-     right_array[1] = v1;\r
-     right_section  = 1;\r
-\r
-     height = v3->y - v1->y; if(height == 0) height=1;\r
-     longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-     if(longest1<0)\r
-      {\r
-       left_array[0]  = v4;                        //    1\r
-       left_array[1]  = v3;                        //  3\r
-       left_array[2]  = v1;                        //    4\r
-       left_section   = 2;    \r
-      }\r
-     else\r
-      {\r
-       height = v4->y - v2->y; if(height == 0) height=1;\r
-       longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
-       if(longest1<0)\r
-        {\r
-         left_array[0]  = v4;                      //    1\r
-         left_array[1]  = v2;                      //  2\r
-         left_array[2]  = v1;                      //    4\r
-         left_section   = 2;    \r
-        }\r
-       else\r
-        {\r
-         left_array[0]  = v4;                      //    1\r
-         left_array[1]  = v3;                      //  2\r
-         left_array[2]  = v2;                      //  3\r
-         left_array[3]  = v1;                      //     4\r
-         left_section   = 3;    \r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
- while(LeftSection_FT4()<=0) \r
-  {\r
-   if(--left_section  <= 0) break;\r
-  }\r
-\r
- while(RightSection_FT4()<=0) \r
-  {\r
-   if(--right_section <= 0) break;\r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v4->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_GT4(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- right_section_height = height;\r
- right_x = v1->x;\r
- right_u = v1->u;\r
- right_v = v1->v;\r
- right_R = v1->R;\r
- right_G = v1->G;\r
- right_B = v1->B;\r
-\r
- if(height == 0) \r
-  {\r
-   return 0;\r
-  }\r
- delta_right_x = (v2->x - v1->x) / height;\r
- delta_right_u = (v2->u - v1->u) / height;\r
- delta_right_v = (v2->v - v1->v) / height;\r
- delta_right_R = (v2->R - v1->R) / height;\r
- delta_right_G = (v2->G - v1->G) / height;\r
- delta_right_B = (v2->B - v1->B) / height;\r
-\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_GT4(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- left_section_height = height;\r
- left_x = v1->x;\r
- left_u = v1->u;\r
- left_v = v1->v;\r
- left_R = v1->R;\r
- left_G = v1->G;\r
- left_B = v1->B;\r
-\r
- if(height == 0) \r
-  {\r
-   return 0;\r
-  }\r
- delta_left_x = (v2->x - v1->x) / height;\r
- delta_left_u = (v2->u - v1->u) / height;\r
- delta_left_v = (v2->v - v1->v) / height;\r
- delta_left_R = (v2->R - v1->R) / height;\r
- delta_left_G = (v2->G - v1->G) / height;\r
- delta_left_B = (v2->B - v1->B) / height;\r
-\r
- return height;  \r
-}\r
-\r
-__inline BOOL NextRow_GT4(void)\r
-{\r
- if(--left_section_height<=0) \r
-  {\r
-   if(--left_section > 0) \r
-    while(LeftSection_GT4()<=0) \r
-     {\r
-      if(--left_section  <= 0) break;\r
-     }\r
-  }\r
- else\r
-  {\r
-   left_x += delta_left_x;\r
-   left_u += delta_left_u;\r
-   left_v += delta_left_v;\r
-   left_R += delta_left_R;\r
-   left_G += delta_left_G;\r
-   left_B += delta_left_B;\r
-  }\r
-\r
- if(--right_section_height<=0) \r
-  {\r
-   if(--right_section > 0) \r
-    while(RightSection_GT4()<=0) \r
-     {\r
-      if(--right_section<=0) break;\r
-     }\r
-  }\r
- else\r
-  {\r
-   right_x += delta_right_x;\r
-   right_u += delta_right_u;\r
-   right_v += delta_right_v;\r
-   right_R += delta_right_R;\r
-   right_G += delta_right_G;\r
-   right_B += delta_right_B;\r
-  }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_GT4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int rgb1, int rgb2, int rgb3, int rgb4)\r
-{\r
- soft_vertex * v1, * v2, * v3, * v4;\r
- int height,width,longest1,longest2;\r
-\r
- v1 = vtx;   v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
- v1->R=(rgb1) & 0x00ff0000;\r
- v1->G=(rgb1<<8) & 0x00ff0000;\r
- v1->B=(rgb1<<16) & 0x00ff0000;\r
-\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- v2->R=(rgb2) & 0x00ff0000;\r
- v2->G=(rgb2<<8) & 0x00ff0000;\r
- v2->B=(rgb2<<16) & 0x00ff0000;\r
-             \r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
- v3->R=(rgb3) & 0x00ff0000;\r
- v3->G=(rgb3<<8) & 0x00ff0000;\r
- v3->B=(rgb3<<16) & 0x00ff0000;\r
-\r
- v4 = vtx+3; v4->x=x4<<16;v4->y=y4;\r
- v4->u=tx4<<16;v4->v=ty4<<16;\r
- v4->R=(rgb4) & 0x00ff0000;\r
- v4->G=(rgb4<<8) & 0x00ff0000;\r
- v4->B=(rgb4<<16) & 0x00ff0000;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v1->y > v4->y) { soft_vertex * v = v1; v1 = v4; v4 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
- if(v2->y > v4->y) { soft_vertex * v = v2; v2 = v4; v4 = v; }\r
- if(v3->y > v4->y) { soft_vertex * v = v3; v3 = v4; v4 = v; }\r
-\r
- height = v4->y - v1->y; if(height == 0) height =1;\r
- width  = (v4->x - v1->x)>>16;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * width + (v1->x - v2->x);\r
- longest2 = (((v3->y - v1->y) << 16) / height) * width + (v1->x - v3->x);\r
-\r
- if(longest1 < 0)                                      // 2 is right\r
-  {\r
-   if(longest2 < 0)                                    // 3 is right\r
-    {\r
-     left_array[0]  = v4;\r
-     left_array[1]  = v1;\r
-     left_section   = 1;\r
-\r
-     height = v3->y - v1->y; if(height == 0) height=1;\r
-     longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-     if(longest1 >= 0)\r
-      {\r
-       right_array[0] = v4;                     //  1\r
-       right_array[1] = v3;                     //     3\r
-       right_array[2] = v1;                     //  4\r
-       right_section  = 2;    \r
-      }\r
-     else\r
-      {\r
-       height = v4->y - v2->y; if(height == 0) height=1;\r
-       longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
-       if(longest1 >= 0)\r
-        {\r
-         right_array[0] = v4;                    //  1\r
-         right_array[1] = v2;                    //     2\r
-         right_array[2] = v1;                    //  4\r
-         right_section  = 2;    \r
-        }\r
-       else\r
-        {\r
-         right_array[0] = v4;                    //  1\r
-         right_array[1] = v3;                    //     2\r
-         right_array[2] = v2;                    //     3\r
-         right_array[3] = v1;                    //  4\r
-         right_section  = 3;    \r
-        }\r
-      }\r
-    }\r
-   else                                            \r
-    {\r
-     left_array[0]  = v4;\r
-     left_array[1]  = v3;                         //    1\r
-     left_array[2]  = v1;                         //      2\r
-     left_section   = 2;                          //  3\r
-     right_array[0] = v4;                         //    4\r
-     right_array[1] = v2;\r
-     right_array[2] = v1;\r
-     right_section  = 2;\r
-    }\r
-  }\r
- else\r
-  {\r
-   if(longest2 < 0)             \r
-    {\r
-     left_array[0]  = v4;                          //    1\r
-     left_array[1]  = v2;                          //  2\r
-     left_array[2]  = v1;                          //      3\r
-     left_section   = 2;                           //    4\r
-     right_array[0] = v4;\r
-     right_array[1] = v3;\r
-     right_array[2] = v1;\r
-     right_section  = 2;\r
-    }\r
-   else                         \r
-    {\r
-     right_array[0] = v4;\r
-     right_array[1] = v1;\r
-     right_section  = 1;\r
-\r
-     height = v3->y - v1->y; if(height == 0) height=1;\r
-     longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-     if(longest1<0)\r
-      {\r
-       left_array[0]  = v4;                        //    1\r
-       left_array[1]  = v3;                        //  3\r
-       left_array[2]  = v1;                        //    4\r
-       left_section   = 2;    \r
-      }\r
-     else\r
-      {\r
-       height = v4->y - v2->y; if(height == 0) height=1;\r
-       longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
-       if(longest1<0)\r
-        {\r
-         left_array[0]  = v4;                      //    1\r
-         left_array[1]  = v2;                      //  2\r
-         left_array[2]  = v1;                      //    4\r
-         left_section   = 2;    \r
-        }\r
-       else\r
-        {\r
-         left_array[0]  = v4;                      //    1\r
-         left_array[1]  = v3;                      //  2\r
-         left_array[2]  = v2;                      //  3\r
-         left_array[3]  = v1;                      //     4\r
-         left_section   = 3;    \r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
- while(LeftSection_GT4()<=0) \r
-  {\r
-   if(--left_section  <= 0) break;\r
-  }\r
-\r
- while(RightSection_GT4()<=0) \r
-  {\r
-   if(--right_section <= 0) break;\r
-  }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v4->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 FLAT SHADED\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void drawPoly3Fi(short x1, short y1, short x2, short y2, short x3, short y3, int rgb)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- unsigned short color;\r
- uint32_t lcolor;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_F(x1,y1,x2,y2,x3,y3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- color = ((rgb & 0x00f80000)>>9) | ((rgb & 0x0000f800)>>6) | ((rgb & 0x000000f8)>>3);\r
- lcolor=lSetMask|(((uint32_t)(color))<<16)|color;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_F()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   color |=sSetMask;\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;\r
-     xmax=(right_x >> 16)-1; if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2) \r
-      {\r
-       *((uint32_t *)&psxVuw[(i<<10)+j])=lcolor;\r
-      }\r
-     if(j==xmax) psxVuw[(i<<10)+j]=color;\r
-\r
-     if(NextRow_F()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;\r
-   xmax=(right_x >> 16)-1; if(drawW<xmax) xmax=drawW;\r
-\r
-   for(j=xmin;j<xmax;j+=2) \r
-    {\r
-     GetShadeTransCol32((uint32_t *)&psxVuw[(i<<10)+j], lcolor);\r
-    }\r
-   if(j == xmax)\r
-    GetShadeTransCol(&psxVuw[(i << 10) + j],color);\r
-\r
-   if(NextRow_F()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3F(int rgb)\r
-{\r
- drawPoly3Fi(lx0,ly0,lx1,ly1,lx2,ly2,rgb);\r
-}\r
-\r
-#ifdef POLYQUAD3FS\r
-\r
-void drawPoly4F_TRI(int rgb)\r
-{\r
- drawPoly3Fi(lx1,ly1,lx3,ly3,lx2,ly2,rgb);\r
- drawPoly3Fi(lx0,ly0,lx1,ly1,lx2,ly2,rgb);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4F(int rgb)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- unsigned short color;unsigned int lcolor;\r
\r
- if(lx0>drawW && lx1>drawW && lx2>drawW && lx3>drawW) return;\r
- if(ly0>drawH && ly1>drawH && ly2>drawH && ly3>drawH) return;\r
- if(lx0<drawX && lx1<drawX && lx2<drawX && lx3<drawX) return;\r
- if(ly0<drawY && ly1<drawY && ly2<drawY && ly3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_F4(lx0,ly0,lx1,ly1,lx2,ly2,lx3,ly3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_F4()) return;\r
-\r
- color = ((rgb & 0x00f80000)>>9) | ((rgb & 0x0000f800)>>6) | ((rgb & 0x000000f8)>>3);\r
- lcolor= lSetMask|(((uint32_t)(color))<<16)|color;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   color |=sSetMask;\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=left_x >> 16;      if(drawX>xmin) xmin=drawX;\r
-     xmax=(right_x >> 16)-1; if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2) \r
-      {\r
-       *((uint32_t *)&psxVuw[(i<<10)+j])=lcolor;\r
-      }\r
-     if(j==xmax) psxVuw[(i<<10)+j]=color;\r
-\r
-     if(NextRow_F4()) return;\r
-    }\r
-   return;\r
-  }                                                        \r
-\r
-#endif\r
-\r
- for (i = ymin; i <= ymax; i++)\r
-  {\r
-   xmin = left_x >> 16;      if(drawX > xmin) xmin = drawX;\r
-   xmax = (right_x >> 16) - 1; if(drawW < xmax) xmax = drawW;\r
-\r
-   for(j = xmin; j < xmax; j += 2) \r
-    {\r
-     GetShadeTransCol32((uint32_t *)&psxVuw[(i<<10) + j],lcolor);\r
-    }\r
-   if(j == xmax) GetShadeTransCol(&psxVuw[(i<<10) + j],color);\r
-\r
-   if(NextRow_F4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 F-SHADED TEX PAL 4\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx4(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,XAdjust;\r
- int clutP;\r
- short tC1,tC2;\r
\r
- if (x1 > drawW && x2 > drawW && x3 > drawW) return;\r
- if (y1 > drawH && y2 > drawH && y3 > drawH) return;\r
- if (x1 < drawX && x2 < drawX && x3 < drawX) return;\r
- if (y1 < drawY && y2 < drawY && y3 < drawY) return;\r
- if (drawY >= drawH) return;\r
- if (drawX >= drawW) return; \r
-\r
- if (!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax = Ymax;\r
-\r
- for (ymin = Ymin; ymin < drawY; ymin++)\r
-  if (NextRow_FT()) return;\r
-\r
- clutP = (clY << 10) + clX;\r
-\r
- YAdjust = ((GlobalTextAddrY) << 11) + (GlobalTextAddrX << 1);\r
-\r
- difX = delta_right_u; difX2 = difX << 1;\r
- difY = delta_right_v; difY2 = difY << 1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16);\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                    (XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-             psxVuw[clutP+tC1]|\r
-             ((int)psxVuw[clutP+tC2])<<16);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
-                      (XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16);\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       XAdjust=((posX+difX)>>16);\r
-       tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                    (XAdjust>>1)];\r
-       tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-           psxVuw[clutP+tC1]|\r
-           ((int)psxVuw[clutP+tC2])<<16);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16);\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
-                    (XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx4_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,XAdjust;\r
- int clutP;\r
- short tC1,tC2;\r
\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1;\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16);\r
-\r
-         TXV=posY>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         XAdjust=((posX+difX)>>16);\r
-\r
-         TXV=(posY+difY)>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-             psxVuw[clutP+tC1]|\r
-             ((int)psxVuw[clutP+tC2])<<16);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-\r
-         TXV=posY>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16);\r
-\r
-       TXV=posY>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       XAdjust=((posX+difX)>>16);\r
-\r
-       TXV=(posY+difY)>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-           psxVuw[clutP+tC1]|\r
-           ((int)psxVuw[clutP+tC2])<<16);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16);\r
-\r
-       TXV=posY>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,XAdjust;\r
- int clutP;\r
- short tC1,tC2;\r
\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);//-1; //!!!!!!!!!!!!!!!!\r
-     if(xmax>xmin) xmax--;\r
-\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i << 10) + j],\r
-             psxVuw[clutP+tC1]|\r
-             ((int)psxVuw[clutP+tC2])<<16);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-       tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-           psxVuw[clutP+tC1]|\r
-           ((int)psxVuw[clutP+tC2])<<16);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef POLYQUAD3\r
-\r
-void drawPoly4TEx4_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- drawPoly3TEx4(x2,y2,x3,y3,x4,y4,\r
-               tx2,ty2,tx3,ty3,tx4,ty4,\r
-               clX,clY);\r
- drawPoly3TEx4(x1,y1,x2,y2,x4,y4,\r
-               tx1,ty1,tx2,ty2,tx4,ty4,\r
-               clX,clY);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4TEx4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16);\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                       (XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
-                      (XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16);\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       XAdjust=((posX+difX)>>16);\r
-       tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                     (XAdjust>>1)];\r
-       tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16);\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
-                    (XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx4_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<10)+GlobalTextAddrX;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16);\r
-\r
-         TXV=posY>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         XAdjust=((posX+difX)>>16);\r
-\r
-         TXV=(posY+difY)>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         TXV=posY>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16);\r
-\r
-       TXV=posY>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       XAdjust=((posX+difX)>>16);\r
-\r
-       TXV=(posY+difY)>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16);\r
-       TXV=posY>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-       tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx4_TW_S(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-       tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-       GetTextureTransColG32_SPR((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       GetTextureTransColG_SPR(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3 F-SHADED TEX PAL 8\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx8(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                      ((posX+difX)>>16)];\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-             psxVuw[clutP+tC1]|\r
-             ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-       tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                    ((posX+difX)>>16)];\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-           psxVuw[clutP+tC1]|\r
-           ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-\r
-     if(j==xmax)\r
-      {\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx8_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV,TXU;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         TXU=posX>>16;\r
-         TXV=posY>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         TXU=(posX+difX)>>16;\r
-         TXV=(posY+difY)>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-             psxVuw[clutP+tC1]|\r
-             ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-\r
-       if(j==xmax)\r
-        {\r
-         TXU=posX>>16;\r
-         TXV=posY>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       TXU=posX>>16;\r
-       TXV=posY>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-       TXU=(posX+difX)>>16;\r
-       TXV=(posY+difY)>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-       tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-           psxVuw[clutP+tC1]|\r
-           ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-\r
-     if(j==xmax)\r
-      {\r
-       TXU=posX>>16;\r
-       TXV=posY>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);//-1; //!!!!!!!!!!!!!!!!\r
-     if(xmax>xmin) xmax--;\r
-\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-             psxVuw[clutP+tC1]|\r
-             ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-           psxVuw[clutP+tC1]|\r
-           ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-\r
-     if(j==xmax)\r
-      {\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef POLYQUAD3\r
-\r
-void drawPoly4TEx8_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- drawPoly3TEx8(x2,y2,x3,y3,x4,y4,\r
-               tx2,ty2,tx3,ty3,tx4,ty4,\r
-               clX,clY);\r
-\r
- drawPoly3TEx8(x1,y1,x2,y2,x4,y4,\r
-               tx1,ty1,tx2,ty2,tx4,ty4,\r
-               clX,clY);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4TEx8(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                     ((posX+difX)>>16)];\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-       tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                     ((posX+difX)>>16)];\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx8_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV,TXU;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         TXU=posX>>16;\r
-         TXV=posY>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         TXU=(posX+difX)>>16;\r
-         TXV=(posY+difY)>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         TXU=posX>>16;\r
-         TXV=posY>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       TXU=posX>>16;\r
-       TXV=posY>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-       TXU=(posX+difX)>>16;\r
-       TXV=(posY+difY)>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-       \r
-       tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       TXU=posX>>16;\r
-       TXV=posY>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i, j, xmin, xmax, ymin, ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX, posY, YAdjust, clutP;\r
- short tC1, tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX += difX2;\r
-         posY += difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                     YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx8_TW_S(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16);\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-        }\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                     YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-       GetTextureTransColG32_SPR((uint32_t *)&psxVuw[(i<<10)+j],\r
-            psxVuw[clutP+tC1]|\r
-            ((int)psxVuw[clutP+tC2])<<16);\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      {\r
-       tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       GetTextureTransColG_SPR(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
-      }\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3 F-SHADED TEX 15 BIT\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TD(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-                     \r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
-              psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
-             psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
-            psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],\r
-           psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-                     \r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT()) return;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-              (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-              psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                     (((posX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-         GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
-             psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                    ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-      }\r
-     if(NextRow_FT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-            (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-            psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                   (((posX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-       GetTextureTransColG(&psxVuw[(i<<10)+j],\r
-           psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                  ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-    }\r
-   if(NextRow_FT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef POLYQUAD3\r
-\r
-void drawPoly4TD_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- drawPoly3TD(x2,y2,x3,y3,x4,y4,\r
-            tx2,ty2,tx3,ty3,tx4,ty4);\r
- drawPoly3TD(x1,y1,x2,y2,x4,y4,\r
-            tx1,ty1,tx2,ty2,tx4,ty4);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4TD(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
-              psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
-           psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
-            psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      GetTextureTransColG(&psxVuw[(i<<10)+j],\r
-         psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                             (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-              psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY)<<10)+TWin.Position.y0+\r
-                     ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
-           psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                  ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
-            (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                           (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-            psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                   ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      GetTextureTransColG(&psxVuw[(i<<10)+j],\r
-         psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TD_TW_S(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX, posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_FT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                             (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-              psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY)<<10)+TWin.Position.y0+\r
-                     ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-        }\r
-       if(j==xmax)\r
-        GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
-           psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                  ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-      }\r
-     if(NextRow_FT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<xmax;j+=2)\r
-      {\r
-       GetTextureTransColG32_SPR((uint32_t *)&psxVuw[(i<<10)+j],\r
-            (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                           (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-            psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                   ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
-       posX+=difX2;\r
-       posY+=difY2;\r
-      }\r
-     if(j==xmax)\r
-      GetTextureTransColG_SPR(&psxVuw[(i<<10)+j],\r
-         psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-    }\r
-   if(NextRow_FT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 G-SHADED\r
-////////////////////////////////////////////////////////////////////////\r
\r
-__inline void drawPoly3Gi(short x1,short y1,short x2,short y2,short x3,short y3, int rgb1, int rgb2, int rgb3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_G(x1,y1,x2,y2,x3,y3,rgb1,rgb2,rgb3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_G()) return;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && iDither!=2)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1;if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2) \r
-        {\r
-         *((uint32_t *)&psxVuw[(i<<10)+j])=\r
-            ((((cR1+difR) <<7)&0x7c000000)|(((cG1+difG) << 2)&0x03e00000)|(((cB1+difB)>>3)&0x001f0000)|\r
-             (((cR1) >> 9)&0x7c00)|(((cG1) >> 14)&0x03e0)|(((cB1) >> 19)&0x001f))|lSetMask;\r
-   \r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        psxVuw[(i<<10)+j]=(((cR1 >> 9)&0x7c00)|((cG1 >> 14)&0x03e0)|((cB1 >> 19)&0x001f))|sSetMask;\r
-      }\r
-     if(NextRow_G()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- if(iDither==2)\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1;if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++) \r
-      {\r
-       GetShadeTransCol_Dither(&psxVuw[(i<<10)+j],(cB1>>16),(cG1>>16),(cR1>>16));\r
-\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_G()) return;\r
-  }\r
- else\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1;if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++) \r
-      {\r
-       GetShadeTransCol(&psxVuw[(i<<10)+j],((cR1 >> 9)&0x7c00)|((cG1 >> 14)&0x03e0)|((cB1 >> 19)&0x001f));\r
-\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_G()) return;\r
-  }\r
-\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3G(int rgb1, int rgb2, int rgb3)\r
-{\r
- drawPoly3Gi(lx0,ly0,lx1,ly1,lx2,ly2,rgb1,rgb2,rgb3);\r
-}\r
-\r
-// draw two g-shaded tris for right psx shading emulation\r
-\r
-void drawPoly4G(int rgb1, int rgb2, int rgb3, int rgb4)\r
-{\r
- drawPoly3Gi(lx1,ly1,lx3,ly3,lx2,ly2,\r
-             rgb2,rgb4,rgb3);\r
- drawPoly3Gi(lx0,ly0,lx1,ly1,lx2,ly2,\r
-             rgb1,rgb2,rgb3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 G-SHADED TEX PAL4\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx4(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY,int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=((left_x) >> 16);\r
-     xmax=((right_x) >> 16)-1; //!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2) \r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16);\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                      (XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-               psxVuw[clutP+tC1]|\r
-               ((int)psxVuw[clutP+tC2])<<16,\r
-               (cB1>>16)|((cB1+difB)&0xff0000),\r
-               (cG1>>16)|((cG1+difG)&0xff0000),\r
-               (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-              psxVuw[clutP+tC1],\r
-              (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++) \r
-      {\r
-       XAdjust=(posX>>16);\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx4_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY,int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=((left_x) >> 16);\r
-     xmax=((right_x) >> 16)-1; //!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2) \r
-        {\r
-         XAdjust=(posX>>16);\r
-\r
-         TXV=posY>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         XAdjust=((posX+difX)>>16);\r
-\r
-         TXV=(posY+difY)>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-               psxVuw[clutP+tC1]|\r
-               ((int)psxVuw[clutP+tC2])<<16,\r
-               (cB1>>16)|((cB1+difB)&0xff0000),\r
-               (cG1>>16)|((cG1+difG)&0xff0000),\r
-               (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-\r
-         TXV=posY>>16;\r
-         n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-         n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-              psxVuw[clutP+tC1],\r
-              (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++) \r
-      {\r
-       XAdjust=(posX>>16);\r
-\r
-       TXV=posY>>16;\r
-       n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
-       n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i, j, xmin, xmax, ymin, ymax;\r
- int cR1, cG1, cB1;\r
- int difR, difB, difG, difR2, difB2, difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX, posY, YAdjust, clutP, XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=((left_x) >> 16);\r
-     xmax=((right_x) >> 16)-1; //!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2) \r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16,\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16)%TWin.Position.x1;\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                       YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-             psxVuw[clutP+tC1],\r
-             (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++) \r
-      {\r
-       XAdjust=(posX>>16)%TWin.Position.x1;\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+(XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// note: the psx is doing g-shaded quads as two g-shaded tris,\r
-// like the following func... sadly texturing is not 100%\r
-// correct that way, so small texture distortions can \r
-// happen... \r
-\r
-void drawPoly4TGEx4_TRI_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                    short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                    short clX, short clY,\r
-                    int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx4_IL(x2,y2,x3,y3,x4,y4,\r
-                   tx2,ty2,tx3,ty3,tx4,ty4,\r
-                   clX,clY,\r
-                   col2,col4,col3);\r
- drawPoly3TGEx4_IL(x1,y1,x2,y2,x4,y4,\r
-                   tx1,ty1,tx2,ty2,tx4,ty4,\r
-                   clX,clY,\r
-                   col1,col2,col3);\r
-}\r
-\r
-#ifdef POLYQUAD3GT\r
-\r
-void drawPoly4TGEx4_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                    short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                    short clX, short clY,\r
-                    int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx4(x2,y2,x3,y3,x4,y4,\r
-                tx2,ty2,tx3,ty3,tx4,ty4,\r
-                clX,clY,\r
-                col2,col4,col3);\r
- drawPoly3TGEx4(x1,y1,x2,y2,x4,y4,\r
-                tx1,ty1,tx2,ty2,tx4,ty4,\r
-                clX,clY,\r
-                col1,col2,col3);\r
-}\r
-\r
-#endif\r
-               \r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGEx4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                    short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                    short clX, short clY,\r
-                    int col1, int col2, int col4, int col3)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4,col1,col2,col3,col4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-       difR=(right_R-cR1)/num;\r
-       difG=(right_G-cG1)/num;\r
-       difB=(right_B-cB1)/num;\r
-       difR2=difR<<1;\r
-       difG2=difG<<1;\r
-       difB2=difB<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-         XAdjust=((posX+difX)>>16);\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                       (XAdjust>>1)];\r
-         tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16,\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         XAdjust=(posX>>16);\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
-                      (XAdjust>>1)];\r
-         tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-             psxVuw[clutP+tC1],\r
-             (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-     difR=(right_R-cR1)/num;\r
-     difG=(right_G-cG1)/num;\r
-     difB=(right_B-cB1)/num;\r
-     difR2=difR<<1;\r
-     difG2=difG<<1;\r
-     difB2=difB<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       XAdjust=(posX>>16);\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
-                    (XAdjust>>1)];\r
-       tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-           psxVuw[clutP+tC1],\r
-           (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-           psxVuw[clutP+tC1],\r
-           (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                    short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                    short clX, short clY,\r
-                    int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx4_TW(x2,y2,x3,y3,x4,y4,\r
-                   tx2,ty2,tx3,ty3,tx4,ty4,\r
-                   clX,clY,\r
-                   col2,col4,col3);\r
-\r
- drawPoly3TGEx4_TW(x1,y1,x2,y2,x4,y4,\r
-                   tx1,ty1,tx2,ty2,tx4,ty4,\r
-                   clX,clY,\r
-                   col1,col2,col3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 G-SHADED TEX PAL8\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx8(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; // !!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+((posX>>16))];\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                      (((posX+difX)>>16))];\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16,\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+((posX>>16))];\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-              psxVuw[clutP+tC1],\r
-              (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+((posX>>16))];\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx8_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV,TXU;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; // !!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         TXU=posX>>16;\r
-         TXV=posY>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         TXU=(posX+difX)>>16;\r
-         TXV=(posY+difY)>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16,\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         TXU=posX>>16;\r
-         TXV=posY>>16;\r
-         n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-         n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-         tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-              psxVuw[clutP+tC1],\r
-              (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       TXU=posX>>16;\r
-       TXV=posY>>16;\r
-       n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
-       n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
-       tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; // !!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
-                      \r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16,\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                      YAdjust+((posX>>16)%TWin.Position.x1)];\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-              psxVuw[clutP+tC1],\r
-              (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
-                    YAdjust+((posX>>16)%TWin.Position.x1)];\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-            psxVuw[clutP+tC1],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// note: two g-shaded tris: small texture distortions can happen\r
-\r
-void drawPoly4TGEx8_TRI_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                           short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                           short clX, short clY,\r
-                           int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx8_IL(x2,y2,x3,y3,x4,y4,\r
-                   tx2,ty2,tx3,ty3,tx4,ty4,\r
-                   clX,clY,\r
-                   col2,col4,col3);\r
- drawPoly3TGEx8_IL(x1,y1,x2,y2,x4,y4,\r
-                   tx1,ty1,tx2,ty2,tx4,ty4,\r
-                   clX,clY,\r
-                   col1,col2,col3);\r
-}\r
-\r
-#ifdef POLYQUAD3GT\r
-                      \r
-void drawPoly4TGEx8_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                   short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                   short clX, short clY,\r
-                   int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx8(x2,y2,x3,y3,x4,y4,\r
-                tx2,ty2,tx3,ty3,tx4,ty4,\r
-                clX,clY,\r
-                col2,col4,col3);\r
- drawPoly3TGEx8(x1,y1,x2,y2,x4,y4,\r
-                tx1,ty1,tx2,ty2,tx4,ty4,\r
-                clX,clY,\r
-                col1,col2,col3);\r
-}\r
-\r
-#endif\r
-\r
-void drawPoly4TGEx8(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                   short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                   short clX, short clY,\r
-                   int col1, int col2, int col4, int col3)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4,col1,col2,col3,col4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16);\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-\r
-       num=(xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-       difR=(right_R-cR1)/num;\r
-       difG=(right_G-cG1)/num;\r
-       difB=(right_B-cB1)/num;\r
-       difR2=difR<<1;\r
-       difG2=difG<<1;\r
-       difB2=difB<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-         tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
-                     ((posX+difX)>>16)];\r
-\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              psxVuw[clutP+tC1]|\r
-              ((int)psxVuw[clutP+tC2])<<16,\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        {\r
-         tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-         GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
-             psxVuw[clutP+tC1],\r
-             (cB1>>16),(cG1>>16),(cR1>>16));\r
-        }\r
-      }\r
-     if(NextRow_GT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-     difR=(right_R-cR1)/num;\r
-     difG=(right_G-cG1)/num;\r
-     difB=(right_B-cB1)/num;\r
-     difR2=difR<<1;\r
-     difG2=difG<<1;\r
-     difB2=difB<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
-           psxVuw[clutP+tC1],\r
-           (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
-           psxVuw[clutP+tC1],\r
-           (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
-                   short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
-                   short clX, short clY,\r
-                   int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx8_TW(x2,y2,x3,y3,x4,y4,\r
-                tx2,ty2,tx3,ty3,tx4,ty4,\r
-                clX,clY,\r
-                col2,col4,col3);\r
- drawPoly3TGEx8_TW(x1,y1,x2,y2,x4,y4,\r
-                tx1,ty1,tx2,ty2,tx4,ty4,\r
-                clX,clY,\r
-                col1,col2,col3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3 G-SHADED TEX 15 BIT\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGD(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {       \r
-   for (i=ymin;i<=ymax;i++)\r
-    {\r
-     xmin=(left_x >> 16);\r
-     xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
-              psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX],\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        GetTextureTransColGX_S(&psxVuw[(i<<10)+j],\r
-            psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j],\r
-          psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
-          (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
-          psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
-          (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if (x1>drawW && x2>drawW && x3>drawW) return;\r
- if (y1>drawH && y2>drawH && y3>drawH) return;\r
- if (x1<drawX && x2<drawX && x3<drawX) return;\r
- if (y1<drawY && y2<drawY && y3<drawY) return;\r
- if (drawY >= drawH) return;\r
- if (drawX >= drawW) return; \r
-\r
- if (!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax = Ymax;\r
-\r
- for(ymin = Ymin; ymin < drawY; ymin++)\r
-  if(NextRow_GT()) return;\r
-\r
- difR = delta_right_R;\r
- difG = delta_right_G;\r
- difB = delta_right_B;\r
- difR2 = difR<<1;\r
- difG2 = difG<<1;\r
- difB2 = difB<<1;\r
- difX = delta_right_u; difX2 = difX<<1;\r
- difY = delta_right_v; difY2 = difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if (!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {       \r
-   for (i = ymin; i <= ymax; i++)\r
-    {\r
-     xmin = (left_x >> 16);\r
-     xmax = (right_x >> 16) - 1; //!!!!!!!!!!!!!!!!!!!!\r
-     if(drawW<xmax) xmax=drawW;\r
-\r
-     if(xmax>=xmin)\r
-      {\r
-       posX=left_u;\r
-       posY=left_v;\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                             (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
-              psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                     (((posX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        GetTextureTransColGX_S(&psxVuw[(i<<10)+j],\r
-            psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                   ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-      }\r
-     if(NextRow_GT()) \r
-      {\r
-       return;\r
-      }\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
-   if(drawW<xmax) xmax=drawW;\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       if(iDither)\r
-        GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j],\r
-          psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                 ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
-          (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
-          psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
-                 ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
-          (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT()) \r
-    {\r
-     return;\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// note: two g-shaded tris: small texture distortions can happen\r
-\r
-#ifdef POLYQUAD3GT\r
-\r
-void drawPoly4TGD_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGD(x2,y2,x3,y3,x4,y4,\r
-              tx2,ty2,tx3,ty3,tx4,ty4,\r
-              col2,col4,col3);\r
- drawPoly3TGD(x1,y1,x2,y2,x4,y4,\r
-              tx1,ty1,tx2,ty2,tx4,ty4,\r
-              col1,col2,col3);\r
-}\r
-\r
-#endif\r
-\r
-void drawPoly4TGD(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int col1, int col2, int col4, int col3)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4,col1,col2,col3,col4)) return;\r
-\r
- ymax = Ymax;\r
-\r
- for (ymin = Ymin; ymin < drawY; ymin++)\r
-  if (NextRow_GT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
-  {\r
-   for (i = ymin; i <= ymax; i++)\r
-    {\r
-     xmin = (left_x >> 16);\r
-     xmax = (right_x >> 16);\r
-\r
-     if(xmax >= xmin)\r
-      {\r
-       posX = left_u;\r
-       posY = left_v;\r
-\r
-       num = (xmax-xmin);\r
-       if(num==0) num=1;\r
-       difX=(right_u-posX)/num;\r
-       difY=(right_v-posY)/num;\r
-       difX2=difX<<1;\r
-       difY2=difY<<1;\r
-\r
-       cR1=left_R;\r
-       cG1=left_G;\r
-       cB1=left_B;\r
-       difR=(right_R-cR1)/num;\r
-       difG=(right_G-cG1)/num;\r
-       difB=(right_B-cB1)/num;\r
-       difR2=difR<<1;\r
-       difG2=difG<<1;\r
-       difB2=difB<<1;\r
-\r
-       if(xmin<drawX)\r
-        {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-       xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-       for(j=xmin;j<xmax;j+=2)\r
-        {\r
-         GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
-              (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
-              psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX],\r
-              (cB1>>16)|((cB1+difB)&0xff0000),\r
-              (cG1>>16)|((cG1+difG)&0xff0000),\r
-              (cR1>>16)|((cR1+difR)&0xff0000));\r
-         posX+=difX2;\r
-         posY+=difY2;\r
-         cR1+=difR2;\r
-         cG1+=difG2;\r
-         cB1+=difB2;\r
-        }\r
-       if(j==xmax)\r
-        GetTextureTransColGX_S(&psxVuw[(i<<10)+j],\r
-            psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
-            (cB1>>16),(cG1>>16),(cR1>>16));\r
-      }\r
-     if(NextRow_GT4()) return;\r
-    }\r
-   return;\r
-  }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
-  {\r
-   xmin=(left_x >> 16);\r
-   xmax=(right_x >> 16);\r
-\r
-   if(xmax>=xmin)\r
-    {\r
-     posX=left_u;\r
-     posY=left_v;\r
-\r
-     num=(xmax-xmin);\r
-     if(num==0) num=1;\r
-     difX=(right_u-posX)/num;\r
-     difY=(right_v-posY)/num;\r
-     difX2=difX<<1;\r
-     difY2=difY<<1;\r
-\r
-     cR1=left_R;\r
-     cG1=left_G;\r
-     cB1=left_B;\r
-     difR=(right_R-cR1)/num;\r
-     difG=(right_G-cG1)/num;\r
-     difB=(right_B-cB1)/num;\r
-     difR2=difR<<1;\r
-     difG2=difG<<1;\r
-     difB2=difB<<1;\r
-\r
-     if(xmin<drawX)\r
-      {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-     xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
-     for(j=xmin;j<=xmax;j++)\r
-      {\r
-       if(iDither)\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
-          psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
-          (cB1>>16),(cG1>>16),(cR1>>16));\r
-       else\r
-        GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
-          psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
-          (cB1>>16),(cG1>>16),(cR1>>16));\r
-       posX+=difX;\r
-       posY+=difY;\r
-       cR1+=difR;\r
-       cG1+=difG;\r
-       cB1+=difB;\r
-      }\r
-    }\r
-   if(NextRow_GT4()) return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGD_TW(x2,y2,x3,y3,x4,y4,\r
-              tx2,ty2,tx3,ty3,tx4,ty4,\r
-              col2,col4,col3);\r
- drawPoly3TGD_TW(x1,y1,x2,y2,x4,y4,\r
-              tx1,ty1,tx2,ty2,tx4,ty4,\r
-              col1,col2,col3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-/*\r
-// no real rect test, but it does its job the way I need it\r
-__inline BOOL IsNoRect(void)\r
-{\r
- if(lx0==lx1 && lx2==lx3) return FALSE;\r
- if(lx0==lx2 && lx1==lx3) return FALSE;\r
- if(lx0==lx3 && lx1==lx2) return FALSE;\r
- return TRUE;                      \r
-}\r
-*/\r
-\r
-// real rect test\r
-__inline BOOL IsNoRect(void)\r
-{\r
- //if(!(dwActFixes&0x200)) return FALSE;\r
-\r
- if(ly0==ly1)\r
-  {\r
-   if(lx1==lx3 && ly3==ly2 && lx2==lx0) return FALSE;\r
-   if(lx1==lx2 && ly2==ly3 && lx3==lx0) return FALSE;\r
-   return TRUE;\r
-  }\r
\r
- if(ly0==ly2)\r
-  {\r
-   if(lx2==lx3 && ly3==ly1 && lx1==lx0) return FALSE;\r
-   if(lx2==lx1 && ly1==ly3 && lx3==lx0) return FALSE;\r
-   return TRUE;\r
-  }\r
\r
- if(ly0==ly3)\r
-  {\r
-   if(lx3==lx2 && ly2==ly1 && lx1==lx0) return FALSE;\r
-   if(lx3==lx1 && ly1==ly2 && lx2==lx0) return FALSE;\r
-   return TRUE;\r
-  }\r
- return TRUE;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3FT(unsigned char *baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
-  {\r
-   if(GlobalTextTP==0)\r
-    drawPoly3TEx4_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-   else\r
-    drawPoly3TEx8_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-   return;\r
-  }\r
-\r
- if(!bUsingTWin)// && !(dwActFixes&0x100))\r
-  {\r
-   switch(GlobalTextTP)   // depending on texture mode\r
-    {\r
-     case 0:\r
-      drawPoly3TEx4(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                    (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
-                    ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-      return;\r
-     case 1:\r
-      drawPoly3TEx8(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                    (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
-                    ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-      return;\r
-     case 2:\r
-      drawPoly3TD(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
-      return;\r
-    }\r
-   return;\r
-  }\r
-\r
- switch(GlobalTextTP)   // depending on texture mode\r
-  {\r
-   case 0:\r
-    drawPoly3TEx4_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-    return;\r
-   case 1:\r
-    drawPoly3TEx8_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-    return;\r
-   case 2:\r
-    drawPoly3TD_TW(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
-    return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4FT(unsigned char *baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
-  {\r
-   if(GlobalTextTP==0)\r
-    drawPoly4TEx4_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-   else\r
-    drawPoly4TEx8_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                  (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-   return;\r
-  }\r
-\r
- if(!bUsingTWin)\r
-  {\r
-#ifdef POLYQUAD3GT\r
-   if(IsNoRect())\r
-    {\r
-     switch (GlobalTextTP)\r
-      {\r
-       case 0:\r
-        drawPoly4TEx4_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-        return;\r
-       case 1:\r
-        drawPoly4TEx8_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-        return;\r
-       case 2:\r
-        drawPoly4TD_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
-        return;\r
-      }\r
-     return;\r
-    }\r
-#endif\r
-          \r
-   switch (GlobalTextTP)\r
-    {\r
-     case 0: // grandia investigations needed\r
-      drawPoly4TEx4(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                    (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-      return;\r
-     case 1:\r
-      drawPoly4TEx8(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                  (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-      return;\r
-     case 2:\r
-      drawPoly4TD(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
-      return;\r
-    }\r
-   return;\r
-  }\r
-\r
- switch (GlobalTextTP)\r
-  {\r
-   case 0:\r
-    drawPoly4TEx4_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-    return;\r
-   case 1:\r
-    drawPoly4TEx8_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-    return;\r
-   case 2:\r
-    drawPoly4TD_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
-    return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3GT(unsigned char * baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
-  {\r
-   if(GlobalTextTP==0)\r
-    drawPoly3TGEx4_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
-                      ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6]);\r
-   else\r
-    drawPoly3TGEx8_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
-                      ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6]);\r
-   return;\r
-  }\r
-\r
- if(!bUsingTWin)\r
-  {\r
-   switch (GlobalTextTP)\r
-    {\r
-     case 0:\r
-      drawPoly3TGEx4(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
-                     gpuData[0],gpuData[3],gpuData[6]);\r
-      return;\r
-     case 1:\r
-      drawPoly3TGEx8(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                     (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
-                     gpuData[0],gpuData[3],gpuData[6]);\r
-      return;\r
-     case 2:\r
-      drawPoly3TGD(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6]);\r
-      return;\r
-    }\r
-   return;\r
-  }\r
-\r
- switch(GlobalTextTP)\r
-  {\r
-   case 0:\r
-    drawPoly3TGEx4_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
-                      ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6]);\r
-    return;\r
-   case 1:\r
-    drawPoly3TGEx8_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
-                      ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6]);\r
-    return;\r
-   case 2:\r
-    drawPoly3TGD_TW(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6]);\r
-    return;\r
-  }\r
-}              \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4GT(unsigned char *baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
-  {\r
-   if(GlobalTextTP==0)\r
-    drawPoly4TGEx4_TRI_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                          (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                          ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                          gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-   else\r
-    drawPoly4TGEx8_TRI_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                          (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                          ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                          gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-   return;\r
-  }\r
-\r
- if(!bUsingTWin)\r
-  {\r
-#ifdef POLYQUAD3GT\r
-   if(IsNoRect())\r
-    {\r
-     switch (GlobalTextTP)\r
-      {\r
-       case 0:\r
-        drawPoly4TGEx4_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                      ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                       gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-\r
-        return;\r
-       case 1:\r
-        drawPoly4TGEx8_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                      ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-        return;\r
-       case 2:\r
-        drawPoly4TGD_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff),((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-        return;\r
-      }\r
-     return;\r
-    }\r
-#endif\r
-\r
-   switch (GlobalTextTP)\r
-    {\r
-     case 0:\r
-      drawPoly4TGEx4(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                    (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                    ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                     gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-\r
-      return;\r
-     case 1:\r
-      drawPoly4TGEx8(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                    (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                    ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                    gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-      return;\r
-     case 2:\r
-      drawPoly4TGD(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff),((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-      return;\r
-    }\r
-   return;\r
-  }\r
-             \r
- switch (GlobalTextTP)\r
-  {\r
-   case 0:\r
-    drawPoly4TGEx4_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                      ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-    return;\r
-   case 1:\r
-    drawPoly4TGEx8_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
-                      (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
-                      ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
-                      gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-    return;\r
-   case 2:\r
-    drawPoly4TGD_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff),((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-    return;\r
-  }\r
-}\r
-                \r
-////////////////////////////////////////////////////////////////////////\r
-// SPRITE FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSpriteTWin(unsigned char * baseAddr, int w, int h)\r
-{ \r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
- short sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3;\r
- short tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3;\r
-\r
- sx0=lx0;\r
- sy0=ly0;\r
-\r
- sx0=sx3=sx0+PSXDisplay.DrawOffset.x;\r
- sx1=sx2=sx0+w;\r
- sy0=sy1=sy0+PSXDisplay.DrawOffset.y;\r
- sy2=sy3=sy0+h;\r
\r
- tx0=tx3=gpuData[2]&0xff;\r
- tx1=tx2=tx0+w;\r
- ty0=ty1=(gpuData[2]>>8)&0xff;\r
- ty2=ty3=ty0+h;\r
-\r
- switch (GlobalTextTP)\r
-  {\r
-   case 0:\r
-    drawPoly4TEx4_TW_S(sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3,\r
-                     tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3, \r
-                     ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-    return;\r
-   case 1:\r
-    drawPoly4TEx8_TW_S(sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3,\r
-                       tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3, \r
-                       ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
-    return;\r
-   case 2:\r
-    drawPoly4TD_TW_S(sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3,\r
-                     tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3);\r
-    return;\r
-  }\r
-}                                                   \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSpriteMirror(unsigned char * baseAddr, int w, int h)\r
-{\r
- int sprtY,sprtX,sprtW,sprtH,lXDir,lYDir;\r
- int clutY0,clutX0,clutP,textX0,textY0,sprtYa,sprCY,sprCX,sprA;\r
- short tC;\r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
- sprtY = ly0;\r
- sprtX = lx0;\r
- sprtH = h;\r
- sprtW = w;\r
- clutY0 = (gpuData[2]>>22) & iGPUHeightMask;\r
- clutX0 = (gpuData[2]>>12) & 0x3f0;\r
- clutP  = (clutY0<<11) + (clutX0<<1);\r
- textY0 = ((gpuData[2]>>8) & 0x000000ff) + GlobalTextAddrY;\r
- textX0 = (gpuData[2] & 0x000000ff);\r
-\r
- sprtX+=PSXDisplay.DrawOffset.x;\r
- sprtY+=PSXDisplay.DrawOffset.y;\r
-\r
-// while (sprtX>1023)             sprtX-=1024;\r
-// while (sprtY>MAXYLINESMIN1)    sprtY-=MAXYLINES;\r
-\r
- if(sprtX>drawW)\r
-  {\r
-//   if((sprtX+sprtW)>1023) sprtX-=1024;\r
-//   else return;\r
-   return;\r
-  }\r
-\r
- if(sprtY>drawH)\r
-  {\r
-//   if ((sprtY+sprtH)>MAXYLINESMIN1) sprtY-=MAXYLINES;\r
-//   else return;\r
-   return;\r
-  }\r
-\r
- if(sprtY<drawY)\r
-  {\r
-   if((sprtY+sprtH)<drawY) return;\r
-   sprtH-=(drawY-sprtY);\r
-   textY0+=(drawY-sprtY);\r
-   sprtY=drawY;\r
-  }\r
-\r
- if(sprtX<drawX)\r
-  {\r
-   if((sprtX+sprtW)<drawX) return;\r
-   sprtW-=(drawX-sprtX);\r
-   textX0+=(drawX-sprtX);\r
-   sprtX=drawX;\r
-  }\r
-\r
- if((sprtY+sprtH)>drawH) sprtH=drawH-sprtY+1;\r
- if((sprtX+sprtW)>drawW) sprtW=drawW-sprtX+1;\r
-\r
- if(usMirror&0x1000) lXDir=-1; else lXDir=1;\r
- if(usMirror&0x2000) lYDir=-1; else lYDir=1;\r
-\r
- switch (GlobalTextTP)\r
-  {\r
-   case 0: // texture is 4-bit\r
-  \r
-    sprtW=sprtW/2;\r
-    textX0=(GlobalTextAddrX<<1)+(textX0>>1);\r
-    sprtYa=(sprtY<<10);\r
-    clutP=(clutY0<<10)+clutX0;\r
-    for (sprCY=0;sprCY<sprtH;sprCY++)\r
-     for (sprCX=0;sprCX<sprtW;sprCX++)\r
-      {\r
-       tC= psxVub[((textY0+(sprCY*lYDir))<<11) + textX0 +(sprCX*lXDir)];\r
-       sprA=sprtYa+(sprCY<<10)+sprtX + (sprCX<<1);\r
-       GetTextureTransColG_SPR(&psxVuw[sprA],psxVuw[clutP+((tC>>4)&0xf)]);\r
-       GetTextureTransColG_SPR(&psxVuw[sprA+1],psxVuw[clutP+(tC&0xf)]);\r
-      }\r
-    return;\r
-\r
-   case 1: \r
-\r
-    clutP>>=1;\r
-    for(sprCY=0;sprCY<sprtH;sprCY++)\r
-     for(sprCX=0;sprCX<sprtW;sprCX++)\r
-      { \r
-       tC = psxVub[((textY0+(sprCY*lYDir))<<11)+(GlobalTextAddrX<<1) + textX0 + (sprCX*lXDir)] & 0xff;\r
-       GetTextureTransColG_SPR(&psxVuw[((sprtY+sprCY)<<10)+sprtX + sprCX],psxVuw[clutP+tC]);\r
-      }\r
-     return;\r
-\r
-\r
-   case 2:\r
-\r
-    for (sprCY=0;sprCY<sprtH;sprCY++)\r
-     for (sprCX=0;sprCX<sprtW;sprCX++)\r
-      { \r
-       GetTextureTransColG_SPR(&psxVuw[((sprtY+sprCY)<<10)+sprtX+sprCX],\r
-           psxVuw[((textY0+(sprCY*lYDir))<<10)+GlobalTextAddrX + textX0 +(sprCX*lXDir)]);\r
-      }\r
-     return;\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSprite_IL(unsigned char * baseAddr,short w,short h,int tx,int ty)\r
-{\r
- int sprtY,sprtX,sprtW,sprtH,tdx,tdy;\r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
-\r
- sprtY = ly0;\r
- sprtX = lx0;\r
- sprtH = h;\r
- sprtW = w;\r
-\r
- sprtX+=PSXDisplay.DrawOffset.x;\r
- sprtY+=PSXDisplay.DrawOffset.y;\r
-\r
- if(sprtX>drawW) return;\r
- if(sprtY>drawH) return;\r
-\r
- tdx=tx+sprtW;\r
- tdy=ty+sprtH;\r
-\r
- sprtW+=sprtX;\r
- sprtH+=sprtY;\r
-\r
- // Pete is too lazy to make a faster version ;)\r
-\r
- if(GlobalTextTP==0)\r
-  drawPoly4TEx4_IL(sprtX,sprtY,sprtX,sprtH,sprtW,sprtH,sprtW,sprtY,\r
-                   tx,ty,      tx,tdy,     tdx,tdy,    tdx,ty,     \r
-                   (gpuData[2]>>12) & 0x3f0, ((gpuData[2]>>22) & iGPUHeightMask));\r
-\r
-\r
- else\r
-  drawPoly4TEx8_IL(sprtX,sprtY,sprtX,sprtH,sprtW,sprtH,sprtW,sprtY,\r
-                   tx,ty,      tx,tdy,     tdx,tdy,    tdx,ty,     \r
-                   (gpuData[2]>>12) & 0x3f0, ((gpuData[2]>>22) & iGPUHeightMask));\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSprite(unsigned char *baseAddr, short w, short h, int tx, int ty)\r
-{\r
- int sprtY, sprtX, sprtW, sprtH;\r
- int clutY0, clutX0, clutP, textX0, textY0, sprtYa, sprCY, sprCX, sprA;\r
- short tC, tC2;\r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
- unsigned char *pV;\r
- BOOL bWT,bWS;\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
-  {DrawSoftwareSprite_IL(baseAddr,w,h,tx,ty);return;}\r
-\r
- sprtY = ly0;\r
- sprtX = lx0;\r
- sprtH = h;\r
- sprtW = w;\r
- clutY0 = (gpuData[2]>>22) & iGPUHeightMask;\r
- clutX0 = (gpuData[2]>>12) & 0x3f0;\r
-\r
- clutP  = (clutY0<<11) + (clutX0<<1);\r
-\r
- textY0 =ty+ GlobalTextAddrY;\r
- textX0 =tx;\r
-\r
- sprtX+=PSXDisplay.DrawOffset.x;\r
- sprtY+=PSXDisplay.DrawOffset.y;\r
-\r
- //while (sprtX>1023)             sprtX-=1024;\r
- //while (sprtY>MAXYLINESMIN1)    sprtY-=MAXYLINES;\r
-\r
- if(sprtX>drawW)\r
-  {\r
-//   if((sprtX+sprtW)>1023) sprtX-=1024;\r
-//   else return;\r
-   return;\r
-  }\r
-\r
- if(sprtY>drawH)\r
-  {\r
-//   if ((sprtY+sprtH)>MAXYLINESMIN1) sprtY-=MAXYLINES;\r
-//   else return;\r
-   return;\r
-  }\r
-\r
- if(sprtY<drawY)\r
-  {\r
-   if((sprtY+sprtH)<drawY) return;\r
-   sprtH-=(drawY-sprtY);\r
-   textY0+=(drawY-sprtY);\r
-   sprtY=drawY;\r
-  }\r
-\r
- if(sprtX<drawX)\r
-  {\r
-   if((sprtX+sprtW)<drawX) return;\r
-\r
-   sprtW-=(drawX-sprtX);\r
-   textX0+=(drawX-sprtX);\r
-   sprtX=drawX;\r
-  }\r
-\r
- if((sprtY+sprtH)>drawH) sprtH=drawH-sprtY+1;\r
- if((sprtX+sprtW)>drawW) sprtW=drawW-sprtX+1;\r
-\r
-\r
- bWT=FALSE;\r
- bWS=FALSE;\r
-\r
- switch (GlobalTextTP)\r
-  {\r
-   case 0:\r
-\r
-    if(textX0&1) {bWS=TRUE;sprtW--;}\r
-    if(sprtW&1)  bWT=TRUE;\r
-    \r
-    sprtW=sprtW>>1;\r
-    textX0=(GlobalTextAddrX<<1)+(textX0>>1)+(textY0<<11);\r
-    sprtYa=(sprtY<<10)+sprtX;\r
-    clutP=(clutY0<<10)+clutX0;\r
-\r
-#ifdef FASTSOLID\r
\r
-    if(!bCheckMask && !DrawSemiTrans)\r
-     {\r
-      for (sprCY=0;sprCY<sprtH;sprCY++)\r
-       {\r
-        sprA=sprtYa+(sprCY<<10);\r
-        pV=&psxVub[(sprCY<<11)+textX0];\r
-\r
-        if(bWS)\r
-         {\r
-          tC=*pV++;\r
-          GetTextureTransColG_S(&psxVuw[sprA++],psxVuw[clutP+((tC>>4)&0xf)]);\r
-         }\r
-\r
-        for (sprCX=0;sprCX<sprtW;sprCX++,sprA+=2)\r
-         { \r
-          tC=*pV++;\r
-\r
-          GetTextureTransColG32_S((uint32_t *)&psxVuw[sprA],\r
-              (((int)psxVuw[clutP+((tC>>4)&0xf)])<<16)|\r
-              psxVuw[clutP+(tC&0x0f)]);\r
-         }\r
-\r
-        if(bWT)\r
-         {\r
-          tC=*pV;\r
-          GetTextureTransColG_S(&psxVuw[sprA],psxVuw[clutP+(tC&0x0f)]);\r
-         }\r
-       }\r
-      return;\r
-     }\r
-\r
-#endif\r
-\r
-    for (sprCY=0;sprCY<sprtH;sprCY++)\r
-     {\r
-      sprA=sprtYa+(sprCY<<10);\r
-      pV=&psxVub[(sprCY<<11)+textX0];\r
-\r
-      if(bWS)\r
-       {\r
-        tC=*pV++;\r
-        GetTextureTransColG_SPR(&psxVuw[sprA++],psxVuw[clutP+((tC>>4)&0xf)]);\r
-       }\r
-\r
-      for (sprCX=0;sprCX<sprtW;sprCX++,sprA+=2)\r
-       { \r
-        tC=*pV++;\r
-\r
-        GetTextureTransColG32_SPR((uint32_t *)&psxVuw[sprA],\r
-            (((int)psxVuw[clutP+((tC>>4)&0xf)])<<16)|\r
-            psxVuw[clutP+(tC&0x0f)]);\r
-       }\r
-\r
-      if(bWT)\r
-       {\r
-        tC=*pV;\r
-        GetTextureTransColG_SPR(&psxVuw[sprA],psxVuw[clutP+(tC&0x0f)]);\r
-       }\r
-     }\r
-    return;\r
-\r
-   case 1:\r
-    clutP>>=1;sprtW--;\r
-    textX0+=(GlobalTextAddrX<<1) + (textY0<<11);\r
-\r
-#ifdef FASTSOLID\r
-\r
-    if(!bCheckMask && !DrawSemiTrans)\r
-     {\r
-      for(sprCY=0;sprCY<sprtH;sprCY++)\r
-       {\r
-        sprA=((sprtY+sprCY)<<10)+sprtX;\r
-        pV=&psxVub[(sprCY<<11)+textX0];\r
-        for(sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
-         { \r
-          tC = *pV++;tC2 = *pV++;\r
-          GetTextureTransColG32_S((uint32_t *)&psxVuw[sprA],\r
-              (((int)psxVuw[clutP+tC2])<<16)|\r
-              psxVuw[clutP+tC]);\r
-         }\r
-        if(sprCX==sprtW)\r
-         GetTextureTransColG_S(&psxVuw[sprA],psxVuw[clutP+(*pV)]);\r
-       }\r
-      return;\r
-     }\r
-\r
-#endif\r
-\r
-    for(sprCY=0;sprCY<sprtH;sprCY++)\r
-     {\r
-      sprA=((sprtY+sprCY)<<10)+sprtX;\r
-      pV=&psxVub[(sprCY<<11)+textX0];\r
-      for(sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
-       { \r
-        tC = *pV++;tC2 = *pV++;\r
-        GetTextureTransColG32_SPR((uint32_t *)&psxVuw[sprA],\r
-            (((int)psxVuw[clutP+tC2])<<16)|\r
-            psxVuw[clutP+tC]);\r
-       }\r
-      if(sprCX==sprtW)\r
-       GetTextureTransColG_SPR(&psxVuw[sprA],psxVuw[clutP+(*pV)]);\r
-     }\r
-    return;\r
-\r
-   case 2:\r
-\r
-    textX0+=(GlobalTextAddrX) + (textY0<<10);\r
-    sprtW--;\r
-\r
-#ifdef FASTSOLID\r
-\r
-    if(!bCheckMask && !DrawSemiTrans)\r
-     {\r
-      for (sprCY=0;sprCY<sprtH;sprCY++)\r
-       {\r
-        sprA=((sprtY+sprCY)<<10)+sprtX;\r
-\r
-        for (sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
-         { \r
-          GetTextureTransColG32_S((uint32_t *)&psxVuw[sprA],\r
-              (((int)psxVuw[(sprCY<<10) + textX0 + sprCX +1])<<16)|\r
-              psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
-         }\r
-        if(sprCX==sprtW)\r
-         GetTextureTransColG_S(&psxVuw[sprA],\r
-              psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
-\r
-       }\r
-      return;\r
-     }\r
-\r
-#endif\r
-\r
-    for (sprCY=0;sprCY<sprtH;sprCY++)\r
-     {\r
-      sprA=((sprtY+sprCY)<<10)+sprtX;\r
-\r
-      for (sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
-       { \r
-        GetTextureTransColG32_SPR((uint32_t *)&psxVuw[sprA],\r
-            (((int)psxVuw[(sprCY<<10) + textX0 + sprCX +1])<<16)|\r
-            psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
-       }\r
-      if(sprCX==sprtW)\r
-       GetTextureTransColG_SPR(&psxVuw[sprA],\r
-            psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
-\r
-     }\r
-    return;\r
-   }                \r
-}\r
\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-// LINE FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_SE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
-    int dx, dy, incrE, incrSE, d;\r
-               uint32_t r0, g0, b0, r1, g1, b1;\r
-               int dr, dg, db;\r
-\r
-               r0 = (rgb0 & 0x00ff0000);\r
-               g0 = (rgb0 & 0x0000ff00) << 8;\r
-               b0 = (rgb0 & 0x000000ff) << 16;\r
-               r1 = (rgb1 & 0x00ff0000);\r
-               g1 = (rgb1 & 0x0000ff00) << 8;\r
-               b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
-    dx = x1 - x0;\r
-    dy = y1 - y0;\r
-\r
-               if (dx > 0)\r
-               {\r
-                       dr = ((int)r1 - (int)r0) / dx;\r
-                       dg = ((int)g1 - (int)g0) / dx;\r
-                       db = ((int)b1 - (int)b0) / dx;\r
-               }\r
-               else\r
-               {\r
-                       dr = ((int)r1 - (int)r0);\r
-                       dg = ((int)g1 - (int)g0);\r
-                       db = ((int)b1 - (int)b0);\r
-               }\r
-\r
-    d = 2*dy - dx;              /* Initial value of d */\r
-    incrE = 2*dy;               /* incr. used for move to E */\r
-    incrSE = 2*(dy - dx);       /* incr. used for move to SE */\r
-\r
-               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    while(x0 < x1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrE;              /* Choose E */\r
-        }\r
-        else\r
-        {\r
-            d = d + incrSE;             /* Choose SE */\r
-            y0++;\r
-        }\r
-        x0++;\r
-\r
-                               r0+=dr;\r
-                               g0+=dg;\r
-                               b0+=db;\r
-\r
-                               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_S_SE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
-    int dx, dy, incrS, incrSE, d;\r
-               uint32_t r0, g0, b0, r1, g1, b1;\r
-               int dr, dg, db;\r
-\r
-               r0 = (rgb0 & 0x00ff0000);\r
-               g0 = (rgb0 & 0x0000ff00) << 8;\r
-               b0 = (rgb0 & 0x000000ff) << 16;\r
-               r1 = (rgb1 & 0x00ff0000);\r
-               g1 = (rgb1 & 0x0000ff00) << 8;\r
-               b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
-    dx = x1 - x0;\r
-    dy = y1 - y0;\r
-\r
-               if (dy > 0)\r
-               {\r
-                       dr = ((int)r1 - (int)r0) / dy;\r
-                       dg = ((int)g1 - (int)g0) / dy;\r
-                       db = ((int)b1 - (int)b0) / dy;\r
-               }\r
-               else\r
-               {\r
-                       dr = ((int)r1 - (int)r0);\r
-                       dg = ((int)g1 - (int)g0);\r
-                       db = ((int)b1 - (int)b0);\r
-               }\r
-\r
-    d = 2*dx - dy;              /* Initial value of d */\r
-    incrS = 2*dx;               /* incr. used for move to S */\r
-    incrSE = 2*(dx - dy);       /* incr. used for move to SE */\r
-\r
-               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    while(y0 < y1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrS;              /* Choose S */\r
-        }\r
-        else\r
-        {\r
-            d = d + incrSE;             /* Choose SE */\r
-            x0++;\r
-        }\r
-        y0++;\r
-\r
-                               r0+=dr;\r
-                               g0+=dg;\r
-                               b0+=db;\r
-\r
-                               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_N_NE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
-    int dx, dy, incrN, incrNE, d;\r
-               uint32_t r0, g0, b0, r1, g1, b1;\r
-               int dr, dg, db;\r
-\r
-               r0 = (rgb0 & 0x00ff0000);\r
-               g0 = (rgb0 & 0x0000ff00) << 8;\r
-               b0 = (rgb0 & 0x000000ff) << 16;\r
-               r1 = (rgb1 & 0x00ff0000);\r
-               g1 = (rgb1 & 0x0000ff00) << 8;\r
-               b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
-    dx = x1 - x0;\r
-    dy = -(y1 - y0);\r
-\r
-               if (dy > 0)\r
-               {\r
-                       dr = ((uint32_t)r1 - (uint32_t)r0) / dy;\r
-                       dg = ((uint32_t)g1 - (uint32_t)g0) / dy;\r
-                       db = ((uint32_t)b1 - (uint32_t)b0) / dy;\r
-               }\r
-               else\r
-               {\r
-                       dr = ((uint32_t)r1 - (uint32_t)r0);\r
-                       dg = ((uint32_t)g1 - (uint32_t)g0);\r
-                       db = ((uint32_t)b1 - (uint32_t)b0);\r
-               }\r
-\r
-    d = 2*dx - dy;              /* Initial value of d */\r
-    incrN = 2*dx;               /* incr. used for move to N */\r
-    incrNE = 2*(dx - dy);       /* incr. used for move to NE */\r
-\r
-               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    while(y0 > y1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrN;              /* Choose N */\r
-        }\r
-        else\r
-        {\r
-            d = d + incrNE;             /* Choose NE */\r
-            x0++;\r
-        }\r
-        y0--;\r
-\r
-                               r0+=dr;\r
-                               g0+=dg;\r
-                               b0+=db;\r
-\r
-                               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_NE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
-    int dx, dy, incrE, incrNE, d;\r
-               uint32_t r0, g0, b0, r1, g1, b1;\r
-               int dr, dg, db;\r
-\r
-               r0 = (rgb0 & 0x00ff0000);\r
-               g0 = (rgb0 & 0x0000ff00) << 8;\r
-               b0 = (rgb0 & 0x000000ff) << 16;\r
-               r1 = (rgb1 & 0x00ff0000);\r
-               g1 = (rgb1 & 0x0000ff00) << 8;\r
-               b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
-    dx = x1 - x0;\r
-    dy = -(y1 - y0);\r
-\r
-               if (dx > 0)\r
-               {\r
-                       dr = ((int)r1 - (int)r0) / dx;\r
-                       dg = ((int)g1 - (int)g0) / dx;\r
-                       db = ((int)b1 - (int)b0) / dx;\r
-               }\r
-               else\r
-               {\r
-                       dr = ((int)r1 - (int)r0);\r
-                       dg = ((int)g1 - (int)g0);\r
-                       db = ((int)b1 - (int)b0);\r
-               }\r
-\r
-    d = 2*dy - dx;              /* Initial value of d */\r
-    incrE = 2*dy;               /* incr. used for move to E */\r
-    incrNE = 2*(dy - dx);       /* incr. used for move to NE */\r
-\r
-               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    while(x0 < x1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrE;              /* Choose E */\r
-        }\r
-        else\r
-        {\r
-            d = d + incrNE;             /* Choose NE */\r
-            y0--;\r
-        }\r
-        x0++;\r
-\r
-                               r0+=dr;\r
-                               g0+=dg;\r
-                               b0+=db;\r
-\r
-                               if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void VertLineShade(int x, int y0, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
-  int y, dy;\r
-       uint32_t r0, g0, b0, r1, g1, b1;\r
-       int dr, dg, db;\r
-\r
-       r0 = (rgb0 & 0x00ff0000);\r
-       g0 = (rgb0 & 0x0000ff00) << 8;\r
-       b0 = (rgb0 & 0x000000ff) << 16;\r
-       r1 = (rgb1 & 0x00ff0000);\r
-       g1 = (rgb1 & 0x0000ff00) << 8;\r
-       b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
-       dy = (y1 - y0);\r
-\r
-       if (dy > 0)\r
-       {\r
-               dr = ((int)r1 - (int)r0) / dy;\r
-               dg = ((int)g1 - (int)g0) / dy;\r
-               db = ((int)b1 - (int)b0) / dy;\r
-       }\r
-       else\r
-       {\r
-               dr = ((int)r1 - (int)r0);\r
-               dg = ((int)g1 - (int)g0);\r
-               db = ((int)b1 - (int)b0);\r
-       }\r
-\r
-       if (y0 < drawY)\r
-       {\r
-               r0+=dr*(drawY - y0);\r
-               g0+=dg*(drawY - y0);\r
-               b0+=db*(drawY - y0);\r
-               y0 = drawY;\r
-       }\r
-\r
-       if (y1 > drawH)\r
-               y1 = drawH;\r
-\r
-  for (y = y0; y <= y1; y++)\r
-       {\r
-               GetShadeTransCol(&psxVuw[(y<<10)+x],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-               r0+=dr;\r
-               g0+=dg;\r
-               b0+=db;\r
-       }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void HorzLineShade(int y, int x0, int x1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
-  int x, dx;\r
-       uint32_t r0, g0, b0, r1, g1, b1;\r
-       int dr, dg, db;\r
-\r
-       r0 = (rgb0 & 0x00ff0000);\r
-       g0 = (rgb0 & 0x0000ff00) << 8;\r
-       b0 = (rgb0 & 0x000000ff) << 16;\r
-       r1 = (rgb1 & 0x00ff0000);\r
-       g1 = (rgb1 & 0x0000ff00) << 8;\r
-       b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
-       dx = (x1 - x0);\r
-\r
-       if (dx > 0)\r
-       {\r
-               dr = ((int)r1 - (int)r0) / dx;\r
-               dg = ((int)g1 - (int)g0) / dx;\r
-               db = ((int)b1 - (int)b0) / dx;\r
-       }\r
-       else\r
-       {\r
-               dr = ((int)r1 - (int)r0);\r
-               dg = ((int)g1 - (int)g0);\r
-               db = ((int)b1 - (int)b0);\r
-       }\r
-\r
-       if (x0 < drawX)\r
-       {\r
-               r0+=dr*(drawX - x0);\r
-               g0+=dg*(drawX - x0);\r
-               b0+=db*(drawX - x0);\r
-               x0 = drawX;\r
-       }\r
-\r
-       if (x1 > drawW)\r
-               x1 = drawW;\r
-\r
-  for (x = x0; x <= x1; x++)\r
-       {\r
-               GetShadeTransCol(&psxVuw[(y<<10)+x],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
-               r0+=dr;\r
-               g0+=dg;\r
-               b0+=db;\r
-       }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_SE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
-    int dx, dy, incrE, incrSE, d, x, y;\r
-\r
-    dx = x1 - x0;\r
-    dy = y1 - y0;\r
-    d = 2*dy - dx;              /* Initial value of d */\r
-    incrE = 2*dy;               /* incr. used for move to E */\r
-    incrSE = 2*(dy - dx);       /* incr. used for move to SE */\r
-    x = x0;\r
-    y = y0;\r
-               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    while(x < x1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrE;              /* Choose E */\r
-            x++;\r
-        }\r
-        else\r
-        {\r
-            d = d + incrSE;             /* Choose SE */\r
-            x++;\r
-            y++;\r
-        }\r
-                               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_S_SE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
-    int dx, dy, incrS, incrSE, d, x, y;\r
-\r
-    dx = x1 - x0;\r
-    dy = y1 - y0;\r
-    d = 2*dx - dy;              /* Initial value of d */\r
-    incrS = 2*dx;               /* incr. used for move to S */\r
-    incrSE = 2*(dx - dy);       /* incr. used for move to SE */\r
-    x = x0;\r
-    y = y0;\r
-               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    while(y < y1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrS;              /* Choose S */\r
-            y++;\r
-        }\r
-        else\r
-        {\r
-            d = d + incrSE;             /* Choose SE */\r
-            x++;\r
-            y++;\r
-        }\r
-                               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_N_NE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
-    int dx, dy, incrN, incrNE, d, x, y;\r
-\r
-    dx = x1 - x0;\r
-    dy = -(y1 - y0);\r
-    d = 2*dx - dy;              /* Initial value of d */\r
-    incrN = 2*dx;               /* incr. used for move to N */\r
-    incrNE = 2*(dx - dy);       /* incr. used for move to NE */\r
-    x = x0;\r
-    y = y0;\r
-               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    while(y > y1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrN;              /* Choose N */\r
-            y--;\r
-        }\r
-        else\r
-        {\r
-            d = d + incrNE;             /* Choose NE */\r
-            x++;\r
-            y--;\r
-        }\r
-                               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_NE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
-    int dx, dy, incrE, incrNE, d, x, y;\r
-\r
-    dx = x1 - x0;\r
-    dy = -(y1 - y0);\r
-    d = 2*dy - dx;              /* Initial value of d */\r
-    incrE = 2*dy;               /* incr. used for move to E */\r
-    incrNE = 2*(dy - dx);       /* incr. used for move to NE */\r
-    x = x0;\r
-    y = y0;\r
-               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    while(x < x1)\r
-    {\r
-        if (d <= 0)\r
-        {\r
-            d = d + incrE;              /* Choose E */\r
-            x++;\r
-        }\r
-        else\r
-        {\r
-            d = d + incrNE;             /* Choose NE */\r
-            x++;\r
-            y--;\r
-        }\r
-                               if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
-                                       GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-    }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void VertLineFlat(int x, int y0, int y1, unsigned short colour)\r
-{\r
-       int y;\r
-\r
-       if (y0 < drawY)\r
-               y0 = drawY;\r
-\r
-       if (y1 > drawH)\r
-               y1 = drawH;\r
-\r
-  for (y = y0; y <= y1; y++)\r
-               GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void HorzLineFlat(int y, int x0, int x1, unsigned short colour)\r
-{\r
-       int x;\r
-\r
-       if (x0 < drawX)\r
-               x0 = drawX;\r
-\r
-       if (x1 > drawW)\r
-               x1 = drawW;\r
-\r
-       for (x = x0; x <= x1; x++)\r
-               GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-/* Bresenham Line drawing function */\r
-void DrawSoftwareLineShade(int rgb0, int rgb1)\r
-{\r
-       short x0, y0, x1, y1, xt, yt;\r
-       int rgbt;\r
-       double m, dy, dx;\r
-\r
-       if(lx0>drawW && lx1>drawW) return;\r
-       if(ly0>drawH && ly1>drawH) return;\r
-       if(lx0<drawX && lx1<drawX) return;\r
-       if(ly0<drawY && ly1<drawY) return;\r
-       if(drawY>=drawH) return;\r
-       if(drawX>=drawW) return; \r
-\r
-       x0 = lx0;\r
-       y0 = ly0;\r
-       x1 = lx1;\r
-       y1 = ly1;\r
-\r
-       dx = x1 - x0;\r
-       dy = y1 - y0;\r
-\r
-       if (dx == 0)\r
-       {\r
-               if (dy > 0)\r
-                       VertLineShade(x0, y0, y1, rgb0, rgb1);\r
-               else\r
-                       VertLineShade(x0, y1, y0, rgb1, rgb0);\r
-       }\r
-       else\r
-               if (dy == 0)\r
-               {\r
-                       if (dx > 0)\r
-                               HorzLineShade(y0, x0, x1, rgb0, rgb1);\r
-                       else\r
-                               HorzLineShade(y0, x1, x0, rgb1, rgb0);\r
-               }\r
-               else\r
-               {\r
-                       if (dx < 0)\r
-                       {\r
-                               xt = x0;\r
-                               yt = y0;\r
-                               rgbt = rgb0;\r
-                               x0 = x1;\r
-                               y0 = y1;\r
-                               rgb0 = rgb1;\r
-                               x1 = xt;\r
-                               y1 = yt;\r
-                               rgb1 = rgbt;\r
-\r
-                               dx = x1 - x0;\r
-                               dy = y1 - y0;\r
-                       }\r
-\r
-                       m = dy/dx;\r
-\r
-                       if (m >= 0)\r
-                       {\r
-                               if (m > 1)\r
-                                       Line_S_SE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
-                               else\r
-                                       Line_E_SE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
-                       }\r
-                       else\r
-                               if (m < -1)\r
-                                       Line_N_NE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
-                               else\r
-                                       Line_E_NE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
-               }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareLineFlat(int rgb)\r
-{\r
-       short x0, y0, x1, y1, xt, yt;\r
-       double m, dy, dx;\r
-       unsigned short colour = 0;\r
\r
-       if(lx0>drawW && lx1>drawW) return;\r
-       if(ly0>drawH && ly1>drawH) return;\r
-       if(lx0<drawX && lx1<drawX) return;\r
-       if(ly0<drawY && ly1<drawY) return;\r
-       if(drawY>=drawH) return;\r
-       if(drawX>=drawW) return; \r
-\r
-       colour = ((rgb & 0x00f80000)>>9) | ((rgb & 0x0000f800)>>6) | ((rgb & 0x000000f8)>>3);\r
-\r
-       x0 = lx0;\r
-       y0 = ly0;\r
-       x1 = lx1;\r
-       y1 = ly1;\r
-\r
-       dx = x1 - x0;\r
-       dy = y1 - y0;\r
-\r
-       if (dx == 0)\r
-       {\r
-               if (dy == 0)\r
-                       return; // Nothing to draw\r
-               else if (dy > 0)\r
-                       VertLineFlat(x0, y0, y1, colour);\r
-               else\r
-                       VertLineFlat(x0, y1, y0, colour);\r
-       }\r
-       else\r
-               if (dy == 0)\r
-               {\r
-                       if (dx > 0)\r
-                               HorzLineFlat(y0, x0, x1, colour);\r
-                       else\r
-                               HorzLineFlat(y0, x1, x0, colour);\r
-               }\r
-               else\r
-               {\r
-                       if (dx < 0)\r
-                       {\r
-                               xt = x0;\r
-                               yt = y0;\r
-                               x0 = x1;\r
-                               y0 = y1;\r
-                               x1 = xt;\r
-                               y1 = yt;\r
-\r
-                               dx = x1 - x0;\r
-                               dy = y1 - y0;\r
-                       }\r
-\r
-                       m = dy/dx;\r
-\r
-                       if (m >= 0)\r
-                       {\r
-                               if (m > 1)\r
-                                       Line_S_SE_Flat(x0, y0, x1, y1, colour);\r
-                               else\r
-                                       Line_E_SE_Flat(x0, y0, x1, y1, colour);\r
-                       }\r
-                       else\r
-                               if (m < -1)\r
-                                       Line_N_NE_Flat(x0, y0, x1, y1, colour);\r
-                               else\r
-                                       Line_E_NE_Flat(x0, y0, x1, y1, colour);\r
-               }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r