From: sparky4 Date: Fri, 3 Apr 2015 02:20:43 +0000 (-0500) Subject: trying to fix~ palette updater bug! wwww X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=b5c46f5e85d6be9895fa484766867907a885439c;p=16.git trying to fix~ palette updater bug! wwww modified: data/g.pal modified: pcxtest.exe modified: scroll.exe modified: src/lib/bitmap.h modified: src/lib/modex16.c modified: src/lib/modex16.h modified: src/scroll.c modified: test.exe modified: test2.exe --- diff --git a/data/g.pal b/data/g.pal index c473ce56..43abfbf8 100644 Binary files a/data/g.pal and b/data/g.pal differ diff --git a/pcxtest.exe b/pcxtest.exe index 488f4366..089ddf2b 100644 Binary files a/pcxtest.exe and b/pcxtest.exe differ diff --git a/scroll.exe b/scroll.exe index 48d9d53b..38a9e171 100644 Binary files a/scroll.exe and b/scroll.exe differ diff --git a/src/lib/bitmap.h b/src/lib/bitmap.h index e0e93c38..40ec9627 100644 --- a/src/lib/bitmap.h +++ b/src/lib/bitmap.h @@ -9,7 +9,7 @@ typedef struct { word width; word height; byte *palette; - word offset; + word offset; } bitmap_t; typedef struct { diff --git a/src/lib/modex16.c b/src/lib/modex16.c index bcf98c11..1886172c 100644 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -593,17 +593,17 @@ modexPalWhite() { void modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqpp) { - const byte *p = bmp->palette; +//---- static word count=0; + byte *p = bmp->palette; word w=0; word q=0; word qq=0; word ii; static word a[256] = { 0 }; - word z=0,aq=0,aa=0; - word pp=0,spee=0,ppee=0; + word z=0, aq=0, aa=0, pp=0; sword aqpw; -// if(qp>0) printf("(*i)=%02d\n", (*i)); + //printf("1 (*i)=%02d\n", (*i)/3); modexWaitBorder(); if((*i)==0) outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ else if(qp==0) @@ -657,6 +657,7 @@ printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[ //printf(" %d\n",((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))); //printf("(*i)=%d\n", (*i)); } + //if(q>0) printf("%d\n", (*i)/3); //printf("[%d]", p[((*i)-q)]); printf("[%d]", p[((*i)-q)+1]); printf("[%d]", p[((*i)-q)+2]); printf("[%d]", p[((*i)-q)+3]); printf("[%d]", p[((*i)-q)+4]); printf("[%d]", p[((*i)-q)+5]); printf(" %d [%d]\n", (*i), p[((*i)-q)]); w++; break; @@ -707,6 +708,7 @@ printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[ //printf(" %d\n",((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))); //printf("(*i)=%d\n", (*i)); } + //if(q>0) printf("%d\n", (*i)/3); //printf("[%d]", p[((*i)-q)]); printf("[%d]", p[((*i)-q)+1]); printf("[%d]", p[((*i)-q)+2]); printf("[%d]", p[((*i)-q)+3]); printf("[%d]", p[((*i)-q)+4]); printf("[%d]", p[((*i)-q)+5]); printf(" %d [%d]\n", (*i), p[((*i)-q)]); w++; break; @@ -719,20 +721,28 @@ printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[ } } +// if(q>0) + printf("2 (*i)=%02d\n", (*i)/3); + //palette checker~ if(q>0 && qp==0) { long lq; long bufSize = (bmp->width * bmp->height); - chkcolor(bmp, &q, &a, &aa, &z); + pp = q; + //printf("1(*i)=%02d\n", (*i)/3); + //printf("1z=%02d\n", z/3); + chkcolor(bmp, &q, &a, &aa, &z, i); + //printf("2(*i)=%02d\n", (*i)/3); + //printf("2z=%02d\n", z/3); /*printf("z=%d\n", z/3); printf("q+z=%d\n", (q+z)/3); - printf("z-ppee=%d\n", (z-ppee)/3); - printf("q=%d\n", q/3); - printf("aa=%d\n", aa);*/ + printf("z-ppee=%d\n", (z-ppee)/3);*/ + //printf(" q=%d\n", q/3); + //printf("aa=%d\n", aa); - aq=0; pp = q; ppee=q; + aq=0;//ppee=q; aqpee: while(aq<=aa) { @@ -741,10 +751,10 @@ aqpee: else{ aqpp++; break; } } -/* printf("aq=%02d\n", aq); - printf("z=%02d\n", z/3); - printf("(z/3)-aqpp=%02d\n", (z/3)-aqpp); - printf("aqpp=%02d\n", aqpp);*/ + //printf("(*i) =%02d\n", (*i)/3); + //printf("z =%02d\n", z/3); + printf("aq=%02d\n", aq); + //printf("aqpp=%02d\n", aqpp); for(lq=0; lqdata[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); bmp->data[lq]=a[aq]; - //printf("_%d \n", bmp->data[lq]); + printf("_%d ", bmp->data[lq]); + if(lq > 0 && lq%bmp->width==0) printf("\n"); } - else if(bmp->data[lq]+bmp->offset < (z/3)-aqpp) + else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp) { - if(bmp->data[lq]+bmp->offset >= aq) bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp; + if(bmp->data[lq]+bmp->offset >= aq) + { + bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3); + //printf("_%d \n", bmp->data[lq]); + } else bmp->data[lq]+=(bmp->offset); } @@ -768,47 +783,61 @@ aqpee: //if(lq > 0 && lq%bmp->width==0) printf("\n"); } - while(pp<=(aq*3)) + /*while(pp<=(aq*3)) { if(((pp/3)==aq || spee>0)) { - /*printf("spee=%d\n", spee); + printf("spee=%d\n", spee); printf(" pp=%02d ", pp/3); printf("old bmp: [%d]", bmp->palette[(pp-ppee)]); printf("[%d]", bmp->palette[(pp-ppee)+1]); - printf("[%d]\n", bmp->palette[(pp-ppee)+2]);*/ + printf("[%d]\n", bmp->palette[(pp-ppee)+2]); //if(spee==0) printf("\npp=%02d\n\n", pp/3); - bmp->palette[(pp-ppee)]= bmp->palette[(pp-ppee)+3]; - bmp->palette[(pp-ppee)+1]= bmp->palette[(pp-ppee)+4]; - bmp->palette[(pp-ppee)+2]= bmp->palette[(pp-ppee)+5]; + //if(bmp->cleaned==0) + //{ + bmp->palette[(pp-ppee)]= bmp->palette[(pp-ppee)+3]; + bmp->palette[(pp-ppee)+1]= bmp->palette[(pp-ppee)+4]; + bmp->palette[(pp-ppee)+2]= bmp->palette[(pp-ppee)+5]; + //} if(spee==0) spee++; } - /*printf(" pp=%02d ", pp/3); + printf(" pp=%02d ", pp/3); printf(" bmp: [%d]", bmp->palette[(pp-ppee)]); printf("[%d]", bmp->palette[(pp-ppee)+1]); - printf("[%d]\n", bmp->palette[(pp-ppee)+2]);*/ + printf("[%d]\n", bmp->palette[(pp-ppee)+2]); pp+=3; - } + //if(pp==(aq*3)) bmp->cleaned++; + }*/ + +//printf(" aq=%02d\n", aq); +//printf(" aa=%02d\n", aa);/ //update the palette~ //printf(" aqpp= %d\n", aqpp); - modexPalUpdate(bmp, &ppee, 1, aqpp); - (*i)=ppee; - //printf(" aqpp= %d\n", aqpp); - //printf(" ppee= %d\n", ppee); - - /*printf(".\n"); - printf("aqpp= %02d\n", aqpp/3); - printf("aq= %02d\n", aq); + //printf("1 pp= %d\n", pp/3); + modexPalUpdate(bmp, &pp, 1, aqpp); + (*i)=pp; + //printf(" (*i)=%d\n", (*i)/3); + //printf("2 pp=%02d\n", pp/3); + + //printf(".\n"); + //printf(" aqpp= %d\n", aqpp); + /*printf("aq= %02d\n", aq); printf("aa= %02d\n", aa); printf(" ppee= %02d\n", ppee);*/ - if(aq0) + { + //printf("z=%d\n", z/3); + //printf("(*i)=%d\n", (*i)/3); + //(*i)+=3; +//---- printf("count=%d\n", count); + }*/ } } @@ -848,7 +877,7 @@ modexPalUpdate3(byte *p) //color checker~ //i want to make another vesion that checks the palette when the palette is being appened~ -void chkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z) +void chkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z, word *i) { byte *pal; word zz=0; @@ -857,17 +886,19 @@ void chkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z) //printf("q: %02d\n", (*q)); //check palette for dups - for((*z)=0; (*z)data->offset=(paloffset/3); modexPalUpdate(map.tiles->data, &paloffset, 0, 0); + printf("\n====\n"); + printf("0 paloffset= %d\n", paloffset/3); + printf("====\n\n"); gpal = modexNewPal(); modexPalSave(gpal); modexSavePalFile("data/g.pal", gpal); @@ -544,7 +547,12 @@ void main() { //if(keyp(0x0E)) while(1){ if(xmsmalloc(24)) break; } if(keyp(25)){ pdump(bg); pdump(spri); } if(keyp(24)){ modexPalUpdate3(gpal); paloffset=0; pdump(bg); pdump(spri); } - if(keyp(22)){ paloffset=0; modexPalBlack(); modexPalUpdate(&ptmp, &paloffset, 0, 0); modexPalUpdate(map.tiles->data, &paloffset, 0, 0); pdump(bg); pdump(spri); } + if(keyp(22)){ + paloffset=0; modexPalBlack(); modexPalUpdate(&ptmp, &paloffset, 0, 0); + printf("1paloffset = %d\n", paloffset/3); + modexPalUpdate(map.tiles->data, &paloffset, 0, 0); + printf("2paloffset = %d\n", paloffset/3); + pdump(bg); pdump(spri); } if(keyp(87)) { diff --git a/test.exe b/test.exe index b20a2ed2..d00b5a50 100644 Binary files a/test.exe and b/test.exe differ diff --git a/test2.exe b/test2.exe index 68e9c919..72389ad3 100644 Binary files a/test2.exe and b/test2.exe differ