Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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));*/

	}
}