Ejemplo n.º 1
0
void MimplFrame(int input) {
	if (input) {
		SDL_Event event;
		int key;

                while(SDL_PollEvent(&event))
                {
		switch (event.type)
                        {
                        case SDL_KEYDOWN:
                                key=event.key.keysym.sym;
                                if(key==SDLK_UP) {MastInput[0]|=0x01;break;}
                                if(key==SDLK_DOWN) {MastInput[0]|=0x02;break;}
                                if(key==SDLK_LEFT) {MastInput[0]|=0x04;break;}
                                if(key==SDLK_RIGHT) {MastInput[0]|=0x08;break;}
                                if(key==SDLK_PAGEDOWN) {MastInput[0]|=0x10;break;}
                                if(key==SDLK_END) {MastInput[0]|=0x20;break;}
                                if(key==SDLK_LALT) {
				  MastInput[0]|=0x80;
				  if ((MastEx&MX_GG)==0)
				    MastInput[0]|=0x40;
				  break;}

                                if(key==SDLK_u) {MastInput[1]|=0x01;break;}
                                if(key==SDLK_j) {MastInput[1]|=0x02;break;}
                                if(key==SDLK_h) {MastInput[1]|=0x04;break;}
                                if(key==SDLK_k) {MastInput[1]|=0x08;break;}
                                if(key==SDLK_f) {MastInput[1]|=0x10;break;}
                                if(key==SDLK_g) {MastInput[1]|=0x20;break;}

                                break;
                        case SDL_KEYUP:
                                key=event.key.keysym.sym;
                                if(key==SDLK_UP) {MastInput[0]&=0xfe;break;}
                                if(key==SDLK_DOWN) {MastInput[0]&=0xfd;break;}
                                if(key==SDLK_LEFT) {MastInput[0]&=0xfb;break;}
                                if(key==SDLK_RIGHT) {MastInput[0]&=0xf7;break;}
                                if(key==SDLK_PAGEDOWN) {MastInput[0]&=0xef;break;}
                                if(key==SDLK_END) {MastInput[0]&=0xdf;break;}
                                if(key==SDLK_LALT) {MastInput[0]&=0x3f;break;}

                                if(key==SDLK_u) {MastInput[1]&=0xfe;break;}
                                if(key==SDLK_j) {MastInput[1]&=0xfd;break;}
                                if(key==SDLK_h) {MastInput[1]&=0xfb;break;}
                                if(key==SDLK_k) {MastInput[1]&=0xf7;break;}
                                if(key==SDLK_f) {MastInput[1]&=0xef;break;}
                                if(key==SDLK_g) {MastInput[1]&=0xdf;break;}
                                break;
                        default:
                                break;
                        }
		}
	}


	scrlock();
	MastFrame();
	scrunlock();

#if 0
	pydega_cbpostframe(mainstate);
#else
#ifndef NOPYTHON
	MPyEmbed_CBPostFrame();
#endif
#endif

	if (input) {
		MastInput[0]&=~0x40;
	}
}
Ejemplo n.º 2
0
main(int argc, char *argv[])
{
int i,k;
char *remap,*remap2;
unsigned char *p1, *p2;
long frames;
int flash;
int whichmap;
int key;
int ispaused;
unsigned long videoflags;
int done;
int now;
SDL_Event event;
long starttime;
int buttonstate;

	srand(time(NULL));
	if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
	{
		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
		exit(1);
	}
	videoflags = SDL_SWSURFACE|SDL_FULLSCREEN|SDL_HWPALETTE;

	thescreen = SDL_SetVideoMode(XSIZE, YSIZE, 8, videoflags);
	if ( thescreen == NULL )
	{
		fprintf(stderr, "Couldn't set display mode: %s\n",
							SDL_GetError());
		SDL_Quit();
		exit(5);
	}

	vmem1=NULL;
	vmem2=malloc(XSIZE*YSIZE);
	if(!vmem2) nomem();
	mul640=malloc(YSIZE*sizeof(char *));
	if(!mul640) nomem();
	remap=malloc(16384);
	if(!remap) nomem();
	remap2=malloc(16384);
	if(!remap2) nomem();
	blobs=malloc(MAXBLOBS*sizeof(struct blob));
	if(!blobs) nomem();

	puts("Fire demo by David Ashley ([email protected])");
	puts("1 = Change color map");
	puts("2 = Randomly change color map");
	puts("p = Pause");
	puts("spc = Fire");
	puts("esc = Exit");
	puts("Left mouse button = paint");
	puts("Right mouse button, CR = ignite atmosphere");

	freeblobs=activeblobs=0;
	for(i=0;i<MAXBLOBS;i++)
	{
		blobs[i].blobnext=freeblobs;
		freeblobs=blobs+i;
	}

	normal(remap);
	bright(remap2);

	flash=0;
	whichmap=0;
	loadcolors(whichmap);
	frames=0;
	ispaused=0;
	addblob();
	done = 0;
	now=0;
	starttime=SDL_GetTicks();
	buttonstate=0;
	mousex=mousey=0;

	while(!done)
	{
		if ( scrlock() < 0 ) continue;
		frames++;
		if ( vmem1 != (unsigned char *)thescreen->pixels )
		{
			p1=vmem1=thescreen->pixels;
			for (i=0;i<YSIZE;i++)
			{
				mul640[i]=i*thescreen->pitch+vmem1;
				memset(p1,0,XSIZE);
				p1+=thescreen->pitch;
			}
		}
		if(!ispaused)
		{
			now++;
			if(!flash)
			{
				if(explodenum>96 && explodenum<160 && !(rand()&511) || (buttonstate&8))
					flash=60;
			} else --flash;
			explodenum=(now>>4)+1;if(explodenum==320) now=0;
			if(explodenum>256) explodenum=256;
			if(!(rand()&31))
				addblob();
			moveblobs();
			putblobs();
			if(buttonstate&2) trydisk();
			p1=vmem1;
			p2=vmem2;
			k=thescreen->pitch;
			for(i=0;i<YSIZE;i++)
			{
				memcpy(p2,p1,XSIZE);
				p2+=XSIZE;
				p1+=k;
			}
			fire(vmem2,vmem1,k,flash ? remap2 :remap);
		}
		scrunlock();

		while(SDL_PollEvent(&event))
		{
			switch (event.type)
			{
			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				if ( event.button.state == SDL_PRESSED )
					buttonstate|=1<<event.button.button;
				else
					buttonstate&=~(1<<event.button.button);
				mousex=event.button.x;
				mousey=event.button.y;
				if(!ispaused && buttonstate&2) trydisk();
				break;
			case SDL_MOUSEMOTION:
				mousex=event.motion.x;
				mousey=event.motion.y;
				if(!ispaused && buttonstate&2) trydisk();
				break;
			case SDL_KEYDOWN:
				key=event.key.keysym.sym;
				if(key==SDLK_RETURN) {flash=60;break;}
				if(key==SDLK_1 || key==SDLK_2)
				{
					if(key==SDLK_1)
						++whichmap;
					else
						whichmap=rand();
					loadcolors(whichmap);
					break;
				}
				if(key==SDLK_ESCAPE) {done=1;break;}
				if(key==SDLK_SPACE && !ispaused) {addblob();break;}
				if(key==SDLK_p) {ispaused=!ispaused;break;}
				break;
			case SDL_QUIT:
				done = 1;
				break;
			default:
				break;
			}
		}
	}