-void\r
-modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset)\r
-{\r
- byte *p = bmp->palette;\r
- word w=0;\r
- word q=0;\r
- word qq=0;\r
- static word a[PAL_SIZE]; //palette array of change values!\r
- word z=0, aq=0, aa=0, pp=0;\r
-\r
- //modexWaitBorder();\r
- vga_wait_for_vsync();\r
- if((*i)==0)\r
- {\r
- memset(a, -1, sizeof(a));\r
- outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */\r
- }\r
- else if(qp==0)\r
- {\r
- q=(*i);\r
- }\r
- else\r
- {\r
- q=(*i);\r
- qq=(*i)/3;\r
-// printf("q: %02d\n", (q));\r
-// printf("qq: %02d\n", (qq));\r
- //printf(" (*i)-q=%02d\n", (*i)-q);\r
- outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */\r
- }\r
- if((*i)<PAL_SIZE/2 && w==0)\r
- {\r
- for(; (*i)<PAL_SIZE/2; (*i)++)\r
- {\r
- //if(i%3==0 && (p[i+5]==p[i+4] && p[i+4]==p[i+3] && p[i+3]==p[i+2] && p[i+2]==p[i+1] && p[i+1]==p[i] && p[i+5]==p[i]))\r
-//____ if((qp>0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else\r
- if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5]))\r
- {\r
- w++;\r
- break;\r
- }\r
- else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3))\r
- {\r
- //printf("qp=%d\n", qp);\r
- //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]);\r
- printf(" %d's color=%d\n", (*i), (a[qp])-(bmp->offset*3)+qp);\r
- //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit!\r
- if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; }\r
- }\r
- else\r
- {\r
- if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0);\r
- else\r
- if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]);\r
- else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]);\r
- printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); }\r
- }\r
- }\r
- //if(qp>0) printf("qp=%d\n", qp);\r
- //if(qp>0) printf(" (*i)=%d\n", (*i)/3);\r
- }\r
- //modexWaitBorder(); /* waits one retrace -- less flicker */\r
- vga_wait_for_vsync();\r
- if((*i)>=PAL_SIZE/2 && w==0)\r
- {\r
- for(; (*i)<PAL_SIZE; (*i)++)\r
- {\r
-//____ if((qp>0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else\r
- if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5]))\r
- {\r
- w++;\r
- break;\r
- }\r
- else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3))\r
- {\r
- //printf("qp=%d\n", qp);\r
- //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]);\r
- printf(" %d's color=%d\n", (*i), (a[qp]-(bmp->offset*3)+qp));\r
- //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit!\r
- if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; }\r
- }\r
- else\r
- {\r
- if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]);\r
- else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]);\r
- printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); }\r
- }\r
- }\r
- //printf(" (*i)=%d\n", (*i)/3);\r
- }\r
-\r
-printf("\nqqqqqqqq\n\n");\r
-\r
- //palette checker~\r
- if(q>0 && qp==0)\r
- {\r
- long lq;\r
- long bufSize = (bmp->width * bmp->height);\r
- pp = q;\r
- //printf("1(*i)=%02d\n", (*i)/3);\r
- //printf("1z=%02d\n", z/3);\r
- modexchkcolor(bmp, &q, &a, &aa, &z, i);\r
- //printf("2(*i)=%02d\n", (*i)/3);\r
- //printf("2z=%02d\n", z/3);\r
- aq=0;\r
-aqpee:\r
- while(aq<=aa)\r
- {\r
-// printf("a[%02d]=(%d)\n", aq, a[aq]);\r
- if(a[aq]==-1) aq++;\r
- else { aqoffset++; break; }\r
- }\r
-//update the image data here!\r
- for(lq=0; lq<bufSize; lq++)\r
- {\r
- /*\r
- note to self\r
- use a[qp] instead of bmp->offset for this spot!\r
- NO! wwww\r
- */\r
-\r
- /*\r
- Facking bloody point the values of the changed palette to correct values.... major confusion! wwww\r
- */\r
-\r
- //(offset/bmp->offset)*bmp->offset\r
-\r
-\r
- //printf("%02d ",bmp->data[lq]+bmp->offset);\r
- //if(lq > 0 && lq%bmp->width==0) printf("\n");\r
- //printf("%02d_", bmp->data[lq]+bmp->offset);\r
- /*if(bmp->data[lq]+bmp->offset==aq)\r
- {\r
- //printf("%02d", bmp->data[lq]);\r
- //printf("\n%02d\n", bmp->offset);\r
- printf("aq=%02d ", aq);\r
- printf("a[aq]=%02d ", a[aq]);\r
- printf("a[aq]+aqpp=%02d ", a[aq]+aqpp);\r
- printf("a[aq]-aqpp=%02d\n", a[aq]-aqpp);\r
- //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]);\r
-//++++ bmp->data[lq]=a[aq]-aqpp;\r
-// printf("_%d ", bmp->data[lq]);\r
- //if(lq > 0 && lq%bmp->width==0) printf("\n");\r
- }\r
- else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp)\r
- {\r
- if(bmp->data[lq]+bmp->offset >= aq)\r
- {\r
- bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp;//-((z-(*i))/3);\r
- //printf("_%d ", bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3);\r
- }\r
- else bmp->data[lq]+=(bmp->offset-aqpp);\r
- }*/\r
-\r
- //printf("%02d`", bmp->data[lq]);\r
- //if(lq > 0 && lq%bmp->width==0) printf("\n");\r
- }\r
-\r
-//printf(" aq=%02d\n", aq);\r
-//printf(" aa=%02d\n", aa);\r
-\r
- //update the palette~\r
- modexPalUpdate(bmp, &pp, aq, aqoffset);\r
- (*i)=pp;\r
-\r
- if(aq<aa){ pp=q; aq++; goto aqpee; }\r
- }\r
-}\r