void MovePac(struct Player *P) { int nx,ny,goo=0,dx=0,dy=0,part; bool Check=false; P->mc++; if(WakaFlag) { WakaFlag=0; P->cur=P->old; } else { WakaFlag=1; P->old=P->cur; P->cur=SPR_PACNONE; //destw->draw(picts[SPR_PACNONE],P->zx,P->zy); destw->copyBlock(srcs,picts[SPR_PACNONE]->x,picts[SPR_PACNONE]->y,P->zx,P->zy,BITMAP_X,BITMAP_Y); } if(P->mc==P->speed) { if((P->bx==0)&&(P->by==5)) { DoTunnel(P,LEFT_TUNNEL); } else if((P->bx==18)&&(P->by==5)) { DoTunnel(P,RIGHT_TUNNEL); } P->mc=0; nx=P->zx; ny=P->zy; if(P->mcnt==CountMax) Check=true; if(P->mcnt<0) Check=true; if(Check) { P->mcnt=0; P->dir=P->nextdir; } switch(P->dir) { case DIR_UP: dy= -1; P->cur=SPR_PACUP; break; case DIR_DOWN: dy=1; P->cur=SPR_PACDOWN; break; case DIR_LEFT: dx= -1; P->cur=SPR_PACLEFT; break; case DIR_RIGHT: dx=1; P->cur=SPR_PACRIGHT; break; default: break; } dx=dx*AspectX; dy=dy*AspectY; //dy=DirY[P->dir]; dx=DirX[P->dir]; //P->cur=(*shapes)[P->dir]; if(Check) { P->lx=(nx+BITMAP_X/2)/BITMAP_X; P->ly=(ny+BITMAP_Y/2)/BITMAP_Y; part=ReadBoard(P->bx,P->by); if((part)==(int)'.') { WriteBoard(P->bx,P->by,(int)','); NumDots--; NumPoints+=1; UpdateScore(); } else if((part)==(int)'*') { WriteBoard(P->bx,P->by,(int)','); NumDots--; NumPoints+=10; UpdateScore(); DoMyBlue(); } /*P->lx=(nx+BITMAP_X/2)/BITMAP_X; P->ly=(ny+BITMAP_Y/2)/BITMAP_Y;*/ goo=CheckSpace(nx,ny,&dx,&dy); if(goo) { P->dir=DIR_STOP; P->nextdir=DIR_STOP; } } if(!goo) { if(FOOBAR_PACMOVE) DrawBoardPart(P->lx,P->ly,ReadBoard(P->lx,P->ly)); nx+=dx; ny+=dy; P->mcnt++; #ifdef CATCH_OUT if(ny<0) { ny=1; P->dir=DIR_DOWN; } if(ny>SCREEN_Y+BITMAP_X) { ny=SCREEN_Y-2; P->dir=DIR_UP; } if(nx<0) { nx=1; P->dir=DIR_RIGHT; } if(nx>SCREEN_X) { nx=SCREEN_X-2; P->dir=DIR_LEFT; } #endif if(WakaFlag) { //destw->draw(picts[P->cur],nx,ny); destw->copyBlock(srcs,picts[P->cur]->x,picts[P->cur]->y,nx,ny,BITMAP_X,BITMAP_Y); } else { //destw->draw(picts[SPR_PACNONE],nx,ny); destw->copyBlock(srcs,picts[SPR_PACNONE]->x,picts[SPR_PACNONE]->y,nx,ny,BITMAP_X,BITMAP_Y); } P->zx=nx; P->zy=ny; P->bx=(nx+BITMAP_X/2)/BITMAP_X; P->by=(ny+BITMAP_Y/2)/BITMAP_Y; } } }
int main (int argc, char *argv[]) { void *mod_data; FILE *mod_fd; size_t mod_size; mod_fd = fopen("GLOS-pope.xm","r"); fseek(mod_fd, 0, SEEK_END); mod_size = ftell(mod_fd); fseek(mod_fd, 0, SEEK_SET); mod_data = malloc(mod_size); fread(mod_data, 1, mod_size, mod_fd); fclose(mod_fd); ModPlug_Settings cfg; ModPlug_GetSettings(&cfg); cfg.mChannels = 2; cfg.mBits = 16; cfg.mFrequency = 48000; cfg.mResamplingMode = MODPLUG_RESAMPLE_SPLINE; cfg.mFlags = MODPLUG_ENABLE_OVERSAMPLING; ModPlug_SetSettings(&cfg); module = ModPlug_Load(mod_data, mod_size); srandom(0); memset(¶ms, 0, sizeof params); params.rate = 48000; params.on_speed = 2.0/100.0; params.off_speed = 2.0/30.0; params.start_wait = 8; params.start_dwell = 2; params.curve_dwell = 0; params.corner_dwell = 2; params.curve_angle = cosf(30.0*(M_PI/180.0)); // 30 deg params.end_dwell = 2; params.end_wait = 1; params.snap = 1/100000.0; params.flatness = 0.000005; params.max_framelen = params.rate / 24; params.render_flags = RENDER_GRAYSCALE; if(olInit(10, 30000) < 0) return 1; olSetRenderParams(¶ms); olSetAudioCallback(gen_audio); float time = 0; float ftime; int i,j; int frames = 0; memset(mbuf, 0, sizeof mbuf); font = olGetDefaultFont(); float xpos = 1.0; DoStars(96); DoTitle(111); DoMetaballs(143); DoFire(174); DoTunnel(175+32); DoCubes(175+32+64); DoEuskal(); #if 0 while(1) { int obj; float w; points_left = cur_draw; olPushColor(); //olMultColor(C_GREY((int)(255.0f * cur_draw / count))); olSetVertexShader(cutoff); olDrawIlda(ild); olSetVertexShader(NULL); olPopColor(); /* olSetVertexShader(sinescroller); w = olDrawString(font, xpos, 0.35, 0.4, C_WHITE, "Hello, World! This is a test message displayed using the OpenLase text functions. Sine scrollers FTW!"); if (xpos < (-w-1.5)) xpos = 1.0; olSetVertexShader(NULL);*/ /* olDrawString(font, -1, 0.35, 0.4, C_WHITE, "Hello, World!"); olDrawString(font, -1, -0, 0.4, C_WHITE, "How are you?"); olDrawString(font, -1, -0.35, 0.4, C_WHITE, " (-; :-)");*/ //render_cubes(time); //render_metaballs(time); //ender_fire(); /* olBegin(OL_BEZIERSTRIP); olVertex(0,1,C_WHITE); olVertex(1,1,C_WHITE); olVertex(1,1,C_WHITE); olVertex(1,0,C_WHITE); olVertex(1,-1,C_WHITE); olVertex(1,-1,C_WHITE); olVertex(0,-1,C_WHITE); olEnd();*/ ftime = olRenderFrame(150); frames++; gbl_time += ftime; xpos -= ftime; cur_draw += ftime * count / 5.0; if (cur_draw > count) cur_draw = count; printf("Frame time: %f, FPS:%f\n", ftime, frames/time); } #endif olShutdown(); exit (0); }