void animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp) { short dire=32*d1; //direction short qq; //scroll offset if(d2==0) qq = 0; else qq = ((lp)*SPEED); switch (d1) { case 0: //up x=x-4; y=y-qq-TILEWH; break; case 1: // right x=x+qq-4; y=y-TILEWH; break; case 2: //down x=x-4; y=y+qq-TILEWH; break; case 3: //left x=x-qq-4; y=y-TILEWH; break; } modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40); if(2>ls && ls>=1) { modexDrawSpriteRegion(dest->page, x, y, 48, dire, 24, 32, bmp); }else if(3>ls && ls>=2) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }else if(4>ls && ls>=3) { modexDrawSpriteRegion(dest->page, x, y, 0, dire, 24, 32, bmp); }else if(5>ls && ls>=4) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); } //TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40); //modexClearRegion(top->page, 66, 66, 2, 40, 0); //modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40); //turn this off if XT if(detectcpu() > 0) modexWaitBorder(); }
void VL_modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqpp) { 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; sword aqpw; // if(qp>0) printf("(*i)=%02d\n", (*i)); modexWaitBorder(); if((*i)==0) outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ else if(qp==0) { q=(*i); } else { q=(*i); qq=(*i)/3; // printf("q: %02d\n", (q)); // printf("qq: %02d\n", (qq)); //printf(" (*i)-q=%02d\n", (*i)-q); // printf("================\n"); outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */ } if((*i)<PAL_SIZE && w==0) { for(; (*i)<PAL_SIZE; (*i)++) { //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])) //____ 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 if(((((*i)-q)%3==0) || ((qp>0)&&((*i)-(bmp->offset*3))%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])) { if(qp>0) { (*i)-=(aqpp*3); aqpw=aqpp-1; outp(PAL_WRITE_REG, qq+(((*i)+(aqpw*3)-(bmp->offset*3))/3)); for(ii=aqpp; ii>0; ii--) { outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))]); outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3)+1)-(bmp->offset*3))]); outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3)+2)-(bmp->offset*3))]); // printf("position = %d\n", qq+(((*i)+(aqpw*3)-(bmp->offset*3))/3)); /*if(qp>0){ //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)]); } printf("[%d]", p[((((*i)+((aqpp-ii)*3)))-(bmp->offset*3))]); printf("[%d]", p[((((*i)+((aqpp-ii)*3))+1)-(bmp->offset*3))]); printf("[%d] | ", p[((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))]); printf("[%d]", p[((((*i)+((aqpp-ii)*3))+3)-(bmp->offset*3))]); printf("[%d]", p[((((*i)+((aqpp-ii)*3))+4)-(bmp->offset*3))]); printf("[%d]", p[((((*i)+((aqpp-ii)*3))+5)-(bmp->offset*3))]); printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))]); }*/ //printf("%d\n", ((*i)+((ii)*3))/3); //printf("ii=%d\n", ii); //printf("aqpp=%d\n", aqpp); //printf(" %d\n", ((*i)+((aqpp-ii)*3))/3); } //printf(" %d\n",((((*i)+((aqpp-ii)*3)))-(bmp->offset*3))); //printf(" %d\n",((((*i)+((aqpp-ii)*3))+1)-(bmp->offset*3))); //printf(" %d\n",((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))); //printf("(*i)=%d\n", (*i)); } //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; } else { if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0); else if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); else outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3))]); } } } //palette checker~ if(q>0 && qp==0) { long lq; long bufSize = (bmp->width * bmp->height); chkcolor(bmp, &q, &a, &aa, &z); /*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);*/ aq=0; pp = q; ppee=q; aqpee: while(aq<=aa) { //printf("a[%02d]=(%d)", aq, a[aq]); if(a[aq]==0) aq++; 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);*/ for(lq=0; lq<bufSize; lq++) { if(bmp->data[lq]+bmp->offset==aq) { //printf("\n%02d\n", bmp->data[lq]); //printf("\n%02d\n", bmp->offset); //printf("\naq= %02d\n", aq); //printf("a[aq]= %02d\n", a[aq]); //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); bmp->data[lq]=a[aq]; //printf("_%d \n", bmp->data[lq]); } else if(bmp->data[lq]+bmp->offset < (z/3)-aqpp) { if(bmp->data[lq]+bmp->offset >= aq) bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp; else bmp->data[lq]+=(bmp->offset); } //printf("%02d ", bmp->data[lq]); //if(lq > 0 && lq%bmp->width==0) printf("\n"); } while(pp<=(aq*3)) { if(((pp/3)==aq || spee>0)) { /*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]);*/ //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(spee==0) spee++; } /*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]);*/ pp+=3; } //update the palette~ //printf(" aqpp= %d\n", aqpp); VL_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("aa= %02d\n", aa); printf(" ppee= %02d\n", ppee);*/ if(aq<aa){ /*printf("~~~~\n"); */ppee=q; aq++; goto aqpee; } /*printf("ppee=%d\n", ppee); printf("pp=%d\n", pp); printf("q=%d\n", q); printf("(*i)=%d\n", (*i));*/ } }