home *** CD-ROM | disk | FTP | other *** search
Wrap
#include "p_pacman.h" unsigned long int Punkte=0; int fressen_max=100; int fressen=0; int max_bonus=1; int unsterblich=0; int demo=0; int START_LEBEN=5; int NO_HIGH=0; LAB_CODE Labyrinth; LAB_CODE test_lab; DOT dots[40]; unsigned long int Life_counter; unsigned long int Geist_wert; int richt,Leben,Level,akt_speed; int speed[5], speed_change[5]; int ghost_dir[5][4], ghost_richt[5], ghost_angst[5], ghost_last[5]; int Eyes[5]; int Geist_zahl[5]; int Level_punkte; int B_Zeit; int Zeit,B_Flag,Z_Count; int in_a_row,Extra; int in_a_dot; int ExtraBonus; int Extra_Time; int geschenk_x,geschenk_y,geschenk_flag,Geschenk; int Fear,stop,slow; int Tod,t; int Start_Level; int Level_Count; int Ghost_fressen; int NO_HIGH; int shield,uhr,mal; int Akt_speed; char *LAB[10],*DOT1[9],*DOT2[9],*TITEL,*DESC[10]; HIGH High_Score= { { "Chris ", "Chris ", "Chris ", "Chris ", "Chris ", "Chris ", "Chris ", "Chris ", "Chris ", "Chris ", }, { (unsigned long int) 9, (unsigned long int) 8, (unsigned long int) 7, (unsigned long int) 6, (unsigned long int) 5, (unsigned long int) 4, (unsigned long int) 3, (unsigned long int) 2, (unsigned long int) 1, (unsigned long int) 0, }, { (int) 9, (int) 8, (int) 7, (int) 6, (int) 5, (int) 4, (int) 3, (int) 2, (int) 1, (int) 0 }, }; /* ///////////////////////////////////////////////////////////////////// */ void show_high(void) { int ff=0; setpage(0); showpage(1); show_pic(0,0,15,"pix\\h-liste"); while (ff<10) { gprintf(55,180+17*ff,15*16+2,15*16+5,"%i",ff+1); gprintf(75,180+17*ff,15*16+2,15*16+5,"%s",High_Score.Name[ff]); gprintf(75+14*8,180+17*ff,15*16+2,15*16+5,"%ld",High_Score.Score[ff]); gprintf(75+22*8,180+17*ff,15*16+2,15*16+5,"%d",High_Score.Level[ff] ); ff++; } } /* ///////////////////////////////////////////////////////////////////// */ void Gefressen(void) { for ( x = RED; x < LILA+1; ++ x) { if (Eyes[x]) { if (Eyes[x]>1) { Eyes[x]--; sprites[x].spidp->splookp = Zahl(Geist_zahl[x]*mal,sprites[x].spidp->splookp); } else sprites[x].spidp->splookp = augen[sprites[x].richtung]; } } } /* ///////////////////////////////////////////////////////////////////// */ void draw_ghost(int anim) { if (ghost_angst[RED]) if ((fressen>100)||(fressen%2)) sprites[RED].spidp->splookp = red[BLAU][anim]; if (ghost_angst[GELB]) if ((fressen>100)||(fressen%2)) sprites[GELB].spidp->splookp = gelb[BLAU][anim]; if (ghost_angst[LILA]) if ((fressen>100)||(fressen%2)) sprites[LILA].spidp->splookp = lila[BLAU][anim]; if (ghost_angst[GRUEN]) if ((fressen>100)||(fressen%2)) sprites[GRUEN].spidp->splookp = gruen[BLAU][anim]; } /* ///////////////////////////////////////////////////////////////////// */ void bilder(void) { switch (bild) { case PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][1]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][1]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][1]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][1]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][1]; draw_ghost(1); Gefressen(); break; } case 2*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][2]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][2]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][2]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][2]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][2]; draw_ghost(2); Gefressen(); break; } case 3*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][3]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][1]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][1]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][1]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][1]; draw_ghost(1); Gefressen(); break; } case 4*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][4]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][0]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][0]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][0]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][0]; draw_ghost(0); Gefressen(); break; } case 5*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][3]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][1]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][1]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][1]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][1]; draw_ghost(1); Gefressen(); break; } case 6*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][2]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][2]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][2]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][2]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][2]; draw_ghost(2); Gefressen(); break; } case 7*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][1]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][1]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][1]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][1]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][1]; draw_ghost(1); Gefressen(); break; } case 8*PHASE: { sprites[PACMAN].spidp->splookp = Pac[sprites[PACMAN].richtung][0]; sprites[RED].spidp->splookp = red[sprites[RED].richtung][0]; sprites[GELB].spidp->splookp = gelb[sprites[GELB].richtung][0]; sprites[LILA].spidp->splookp = lila[sprites[LILA].richtung][0]; sprites[GRUEN].spidp->splookp = gruen[sprites[GRUEN].richtung][0]; draw_ghost(0); Gefressen(); break; } } } /* ///////////////////////////////////////////////////////////////////// */ void sp_init(void) { dir=lastkey=0; page=1; speed[PACMAN]=Labyrinth.pac_speed; speed[RED]=Labyrinth.geister_speed[RED-1]; speed[GELB]=Labyrinth.geister_speed[GELB-1]; speed[GRUEN]=Labyrinth.geister_speed[GRUEN-1]; speed[LILA]=Labyrinth.geister_speed[LILA-1]; speed_change[0]=0; speed_change[1]=0; speed_change[2]=0; speed_change[3]=0; speed_change[4]=0; Eyes[0]=0; Eyes[1]=0; Eyes[2]=0; Eyes[3]=0; Eyes[4]=0; fressen=0; ghost_angst[RED]=0; ghost_angst[LILA]=0; ghost_angst[GELB]=0; ghost_angst[GRUEN]=0; Geschenk=0; geschenk_x=-1; geschenk_y=-1; Fear=0; stop=0; slow=0; shield=0; uhr=0; mal=1; sprites[ PACMAN ].spidp->splookp = Pac[WEST][0]; dx =0; /* Geschwindihkeit */ dy =0; ddx=0; ddy=0; richt=1; sprites[ PACMAN ].deltax[0] = sprites[ PACMAN ].deltax[1] = dx * 2; sprites[ PACMAN ].deltay[0] = sprites[ PACMAN ].deltay[1] = dy * 2; sprites[PACMAN].richtung=OST; x=Labyrinth.Pac_x*32-12; y=Labyrinth.Pac_y*40-16; SetSprite(sprites[PACMAN].spidp, x, y, x-dx, y-dy); sprites[ RED ].spidp->splookp = red[OST][0]; dx =speed[RED]; dy =0; ghost_richt[RED]=1; ghost_last[RED]=2; sprites[ RED ].deltax[0] = sprites[ RED ].deltax[1] = dx * 2; sprites[ RED ].deltay[0] = sprites[ RED ].deltay[1] = dy * 2; sprites[RED].richtung=OST; x=Labyrinth.red_x*32-12; y=Labyrinth.red_y*40-16; SetSprite( sprites[ RED ].spidp, x, y, x - dx, y - dy ); sprites[ GELB ].spidp->splookp = gelb[WEST][0]; dx=-speed[GELB]; dy=0; ghost_richt[GELB]=-1; ghost_last[GELB]=1; sprites[ GELB ].deltax[0] = sprites[ GELB ].deltax[1] = dx * 2; sprites[ GELB ].deltay[0] = sprites[ GELB ].deltay[1] = dy * 2; sprites[GELB].richtung=WEST; x=Labyrinth.gelb_x*32-12; y=Labyrinth.gelb_y*40-16; SetSprite( sprites[ GELB ].spidp, x, y, x - dx, y - dy ); sprites[ LILA ].spidp->splookp = lila[NORD][0] ; dx=0; dy=-speed[LILA]; ghost_richt[LILA]=-1; ghost_last[LILA]=3; sprites[ LILA ].deltax[0] = sprites[ LILA ].deltax[1] = dx * 2; sprites[ LILA ].deltay[0] = sprites[ LILA ].deltay[1] = dy * 2; sprites[LILA].richtung=NORD; x=Labyrinth.lila_x*32-12; y=Labyrinth.lila_y*40-16; SetSprite( sprites[ LILA ].spidp, x, y, x - dx, y - dy ); sprites[ GRUEN ].spidp->splookp = gruen[SUED][0]; dx=0; dy=speed[GRUEN]; ghost_richt[GRUEN]=1; ghost_last[GRUEN]=0; sprites[ GRUEN ].deltax[0] = sprites[ GRUEN ].deltax[1] = dx * 2; sprites[ GRUEN ].deltay[0] = sprites[ GRUEN ].deltay[1] = dy * 2; sprites[ GRUEN ].richtung=SUED; x=Labyrinth.gruen_x*32-12; y=Labyrinth.gruen_y*40-16; SetSprite( sprites[ GRUEN ].spidp, x, y, x - dx, y - dy ); dx=0; dy=0; set_color(255,0,0,0); x=Labyrinth.Pac_x-1; y=Labyrinth.Pac_y-1; if (Labyrinth.dots[y][x]!='z') { if (dots[((int) Labyrinth.dots[y][x])-((int) '.')].Art==0) { PutBack(Back,dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv,(int) x*32+32-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->width,(int) y*40+40-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->hight); Punkte+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; Life_counter+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; Level_punkte+=1; in_a_row=0; in_a_dot++; Labyrinth.dots[y][x]=' '; } } Print_Score_whole(Punkte); dx=0; dy=0; } /* ///////////////////////////////////////////////////////////////////// */ unsigned long int Game(void) { int xt,yt; int i; Life_counter=0; fressen_max=500; Leben=START_LEBEN; Extra=0; B_Zeit=0; while ((key!=27)&&((Leben)||(Extra))) { K_Clear(); fressen=0; ghost_angst[RED]=0; ghost_angst[LILA]=0; ghost_angst[GELB]=0; ghost_angst[GRUEN]=0; if (Extra==3) { Extra=0; Leben++; } if ((Level_punkte==Labyrinth.dot_anzahl)&&(Extra==2)) { setpage(0); showpage(1); show_pic(73,140,15,"pix\\punkte"); showpage(0); warte_d(130); Punkte+=50000L; Life_counter+=50000L; life(); Extra=0; } if (!Extra) { get_lab(Level); build(); Back=Save_Back(0,Back); Get_Back(1,Back); Do_Infor(); GrafPrintf(295,389,20,0,"%i",Leben); Level++; Level_Count++; B_Zeit=0; } else { if ((in_a_row<4)&&(!ExtraBonus)&&(in_a_dot==Labyrinth.Max_dot)) do_akt(Level); setpage(0); showpage(1); show_pic(73,140,14,"pix\\b_level"); showpage(0); warte_d(130); get_Extra(); build(); Back=Save_Back(0,Back); Get_Back(1,Back); B_Zeit=1; } in_a_row=0; in_a_dot=0; Extra_Time=0; ExtraBonus=0; Zeit=0; Z_Count=0; Level_punkte=0; sp_init(); if (B_Zeit) Extra=2; B_Flag=0; B_Zeit=0; page=1; showpage(0); play_sample(START); while (( key!=27 )&&(Level_punkte!=Labyrinth.dot_anzahl)&&(Leben)&&(Extra!=1)&&(Extra!=3)) { Tod=0; warte(); for ( i = RED; i < LILA+1; ++ i) { if ( (abs(sprites[i].spidp->x[1-page]-sprites[PACMAN].spidp->x[1-page])<10) &&(abs(sprites[i].spidp->y[1-page]-sprites[PACMAN].spidp->y[1-page])<10) &&(!Eyes[i]) ) { if ((!shield)&&(!ghost_angst[i]) && (!unsterblich)) Tod=1; else if (ghost_angst[i]) Tod=2; } } if (Tod) { if (Tod==1) { play_sample(DEAD); if (!Extra) { GrafPrintf(100,390,0,20,"DU BIST TOT !!!"); } else { GrafPrintf(100,390,0,20,"Kein Bonus !!!"); Extra=3; } for ( i = 0; i < SPRANZ; ++ i) { RemoveSprite(sprites[i].spidp); } if ((Extra_Time)&&(ExtraBonus==14)) { for ( xt = 1; xt < 10 ; ++ xt) { for ( yt = 1; yt < 10 ; ++ yt) { if ((Labyrinth.dots[yt-1][xt-1]!='x')&&(Labyrinth.dots[yt-1][xt-1]!=' ')&&(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].Art==0)) { PutVideo(dots[37].dotv,0,xt*32-dots[37].dotv->width,yt*40-dots[37].dotv->hight,FALSE); PutVideo(dots[37].dotv,1,xt*32-dots[37].dotv->width,yt*40-dots[37].dotv->hight,FALSE); PutBack(Back,dots[37].dotv,xt*32-dots[37].dotv->width,yt*40-dots[37].dotv->hight); Labyrinth.dots[yt-1][xt-1]=Labyrinth.restore[yt-1][xt-1]; PutVideo(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot,0,xt*32-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->width,yt*40-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->hight,FALSE); PutVideo(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot,1,xt*32-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->width,yt*40-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->hight,FALSE); PutBack(Back,dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot,xt*32-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->width,yt*40-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->hight); } } } ExtraBonus=0; } page=0; sprites[PACMAN].spidp->splookp = dead[0]; x=sprites[PACMAN].spidp->x[1-page]; y=sprites[PACMAN].spidp->y[1-page]; SetSprite( sprites[ PACMAN ].spidp,x,y,x,y); for ( i = 0; i < 14; ++ i) { showpage((BYTE) (1-page)); RestoreSpriteBg( sprites[PACMAN].spidp, page ); sprites[PACMAN].spidp->splookp = dead[i]; PrintSprite( sprites[PACMAN].spidp, page ); # ifndef NO_SOUND # ifndef SHAREWARE_SOUND if (sample_on) warte_d(7); else # endif # endif warte_d(4); page = (page+1) & 1; } RestoreSpriteBg( sprites[PACMAN].spidp, 0 ); RestoreSpriteBg( sprites[PACMAN].spidp, 1 ); RemoveSprite(sprites[PACMAN].spidp); sp_init(); if (Extra_Time) Extra_Time=1; K_Clear(); # ifndef NO_SOUND # ifndef SHAREWARE_SOUND if (sample_on) warte_d(45); # endif # endif Leben--; if (!Extra) GrafPrintf(295,389,20,0,"%i ",Leben); warte_d(8); GrafPrintf(100,390,0,0, " "); if ((!Extra)&&(Leben)) { play_sample(START); warte_d(2); K_Clear(); while (!get_key()); } } if (Tod==2) { for ( i = RED; i < LILA+1; ++ i) { if ( (abs(sprites[i].spidp->x[1-page]-sprites[PACMAN].spidp->x[1-page])<10) &&(abs(sprites[i].spidp->y[1-page]-sprites[PACMAN].spidp->y[1-page])<10) && (!Eyes[i]) ) { if (Ghost_fressen==0) ghost_angst[i]=0; speed[i]=Labyrinth.eye_speed; speed_change[i]=1; Eyes[i]=130; Punkte+=Geist_wert*mal; Life_counter+=Geist_wert*mal; play_sample(FRESSEN); life(); Geist_zahl[i]=(unsigned int) Geist_wert; if (Geist_wert<60000L) Geist_wert*=2; Print_Score(Punkte); } } } } showpage((BYTE) (1-page)); if (fressen==1) { ghost_angst[RED]=0; ghost_angst[GELB]=0; ghost_angst[GRUEN]=0; ghost_angst[LILA]=0; } if ((fressen==1)&&(!stop)&&(!slow)) { if (!Eyes[RED]) { speed[RED]=Labyrinth.geister_speed[RED-1]; speed_change[RED]=1; } if (!Eyes[GELB]) { speed[GELB]=Labyrinth.geister_speed[GELB-1]; speed_change[GELB]=1; } if (!Eyes[GRUEN]) { speed[GRUEN]=Labyrinth.geister_speed[GRUEN-1]; speed_change[GRUEN]=1; } if (!Eyes[LILA]) { speed[LILA]=Labyrinth.geister_speed[LILA-1]; speed_change[LILA]=1; } } if (B_Zeit==1) { Zeit=0; if (Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]=='z') { Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]=' '; if (ExtraBonus) { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,0,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,1,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); ExtraBonus=0; } else { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,0,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,1,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); } } if (Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]=='y') { Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]=Labyrinth.restore[Labyrinth.Bonus_y][Labyrinth.Bonus_x]; if (ExtraBonus) { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,0,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,1,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); ExtraBonus=0; } else { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,0,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,1,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); } PutBack(Back,dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot,(int) Labyrinth.Bonus_x*32+32-dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot->width,(int) Labyrinth.Bonus_y*40+40-dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot->hight); PutVideo(dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot,0,Labyrinth.Bonus_x*32+32-dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot->width,Labyrinth.Bonus_y*40+40-dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot->hight,FALSE); PutVideo(dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot,1,Labyrinth.Bonus_x*32+32-dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot->width,Labyrinth.Bonus_y*40+40-dots[((int) Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x])-((int) '.')].dot->hight,FALSE); } } if ((!B_Zeit)&&(Zeit==1500)&&(!Extra)) { B_Zeit=400; if (Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]!=' ') Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]='y'; else Labyrinth.dots[Labyrinth.Bonus_y][Labyrinth.Bonus_x]='z'; if (random(100)<70) { PutBack(Back,Bonus[Labyrinth.Bonus],(int) Labyrinth.Bonus_x*32+32-Bonus[Labyrinth.Bonus]->width,(int) Labyrinth.Bonus_y*40+40-Bonus[Labyrinth.Bonus]->hight); PutVideo(Bonus[Labyrinth.Bonus],0,Labyrinth.Bonus_x*32+32-Bonus[Labyrinth.Bonus]->width,Labyrinth.Bonus_y*40+40-Bonus[Labyrinth.Bonus]->hight,FALSE); PutVideo(Bonus[Labyrinth.Bonus],1,Labyrinth.Bonus_x*32+32-Bonus[Labyrinth.Bonus]->width,Labyrinth.Bonus_y*40+40-Bonus[Labyrinth.Bonus]->hight,FALSE); } else { i=random(160)+1; if (i>150) { ExtraBonus=16; /* Uhr */ i=-1; } if (i>140) { ExtraBonus=15; /* Schild */ i=-1; } if (i>130) { ExtraBonus=14; /* Diamant */ i=-1; } if (i>120) { ExtraBonus=13; /* 5 Mal */ i=-1; } if (i>110) { ExtraBonus=12; /* 2 Mal */ i=-1; } if (i>100) { ExtraBonus=11; /* Explode */ i=-1; } if (i>90) { ExtraBonus=1; /* Extra Level */ i=-1; } if (i>80) { /* Speedup I */ ExtraBonus=2; i=-1; } if (i>70) { /* Speedup II */ ExtraBonus=3; i=-1; } if (i>60) { /* Geschenk */ ExtraBonus=4; geschenk_x=-1; geschenk_y=-1; i=-1; } if (i>50) { /* Life */ ExtraBonus=5; i=-1; } if (i>40) { /* Fear */ ExtraBonus=6; i=-1; } if (i>30) { /* nextv */ ExtraBonus=7; i=-1; } if (i>20) { /* teleport */ ExtraBonus=8; i=-1; } if (i>10) { /* stop */ ExtraBonus=9; i=-1; } if (i>0) { /* slow */ if (Labyrinth.geister_speed[RED-1]>1) ExtraBonus=10; else ExtraBonus=9; i=-1; } if (ExtraBonus) { PutBack(Back,Extra_Bonus[ExtraBonus-1],(int) Labyrinth.Bonus_x*32+32-Extra_Bonus[ExtraBonus-1]->width,(int) Labyrinth.Bonus_y*40+40-Extra_Bonus[ExtraBonus-1]->hight); PutVideo(Extra_Bonus[ExtraBonus-1],0,Labyrinth.Bonus_x*32+32-Extra_Bonus[ExtraBonus-1]->width,Labyrinth.Bonus_y*40+40-Extra_Bonus[ExtraBonus-1]->hight,FALSE); PutVideo(Extra_Bonus[ExtraBonus-1],1,Labyrinth.Bonus_x*32+32-Extra_Bonus[ExtraBonus-1]->width,Labyrinth.Bonus_y*40+40-Extra_Bonus[ExtraBonus-1]->hight,FALSE); } } } if (B_Zeit) B_Zeit--; if (fressen) fressen--; if (Extra_Time) { set_color(255,0,Extra_Time/13,0); Extra_Time--; if ((!Extra_Time)&&(ExtraBonus==2)) { speed_change[PACMAN]=1; speed[PACMAN]=Labyrinth.pac_speed; ExtraBonus=0; } if (!Extra_Time) GrafPrintf(100,390,0,0," "); if ((!Extra_Time)&&(ExtraBonus==3)) { speed_change[PACMAN]=1; speed[PACMAN]=Labyrinth.pac_speed; ExtraBonus=0; } if ((!Extra_Time)&&(ExtraBonus==4)) { if (geschenk_x!=-1) { PutBack(Back,void_Bonus,(int) geschenk_x*32+32-void_Bonus->width,(int) geschenk_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,geschenk_x*32+32-void_Bonus->width,geschenk_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,1-page,geschenk_x*32+32-void_Bonus->width,geschenk_y*40+40-void_Bonus->hight,FALSE); } geschenk_x=-1; geschenk_y=-1; Geschenk=0; ExtraBonus=0; } if ((!Extra_Time)&&(ExtraBonus==6)) { Fear=0; ExtraBonus=0; } if ((!Extra_Time)&&(ExtraBonus==9)) { stop=0; ExtraBonus=0; speed[RED]=Labyrinth.geister_speed[RED-1]; speed_change[RED]=1; speed[GELB]=Labyrinth.geister_speed[GELB-1]; speed_change[GELB]=1; speed[GRUEN]=Labyrinth.geister_speed[GRUEN-1]; speed_change[GRUEN]=1; speed[LILA]=Labyrinth.geister_speed[LILA-1]; speed_change[LILA]=1; } if ((!Extra_Time)&&(ExtraBonus==10)) { stop=0; ExtraBonus=0; speed[RED]=Labyrinth.geister_speed[RED-1]; speed_change[RED]=1; speed[GELB]=Labyrinth.geister_speed[GELB-1]; speed_change[GELB]=1; speed[GRUEN]=Labyrinth.geister_speed[GRUEN-1]; speed_change[GRUEN]=1; speed[LILA]=Labyrinth.geister_speed[LILA-1]; speed_change[LILA]=1; } if ((!Extra_Time)&&(ExtraBonus==12)) { mal=1; ExtraBonus=0; } if ((!Extra_Time)&&(ExtraBonus==13)) { mal=1; ExtraBonus=0; } if ((!Extra_Time)&&(ExtraBonus==14)) { for ( xt = 1; xt < 10 ; ++ xt) { for ( yt = 1; yt < 10 ; ++ yt) { if ((Labyrinth.dots[yt-1][xt-1]!='x')&&(Labyrinth.dots[yt-1][xt-1]!=' ')&&(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].Art==0)) { PutVideo(dots[37].dotv,0,xt*32-dots[37].dotv->width,yt*40-dots[37].dotv->hight,FALSE); PutVideo(dots[37].dotv,1,xt*32-dots[37].dotv->width,yt*40-dots[37].dotv->hight,FALSE); PutBack(Back,dots[37].dotv,xt*32-dots[37].dotv->width,yt*40-dots[37].dotv->hight); Labyrinth.dots[yt-1][xt-1]=Labyrinth.restore[yt-1][xt-1]; PutVideo(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot,0,xt*32-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->width,yt*40-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->hight,FALSE); PutVideo(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot,1,xt*32-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->width,yt*40-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->hight,FALSE); PutBack(Back,dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot,xt*32-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->width,yt*40-dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].dot->hight); } } } ExtraBonus=0; } if ((!Extra_Time)&&(ExtraBonus==15)) { show_pic(0,0,1,"pix\\pac_gelb"); shield=0; ExtraBonus=0; } } mov_pac(); mov_ghost(RED); mov_ghost(GELB); mov_ghost(LILA); mov_ghost(GRUEN); for ( i = 0; i < SPRANZ; ++ i) RestoreSpriteBgNo(i,page); /* die spritres werden nicht einzeln gerettet, */ /* im speicher steht der hintergrund vollstaendig drin */ /* und wird dann gerettet */ for ( i = 0; i < SPRANZ; ++ i) { out = MoveSprite1(sprites[i].spidp, page, sprites[i].deltax[page],sprites[i].deltay[page]); if (out&OUT_TOP || out&OUT_BOTTOM) { if (sprites[i].deltay[page]>0) { sprites[i].spidp->y[1-page]=20; sprites[i].spidp->y[page]=20+sprites[i].deltay[page]/2; sprites[i].spidp->old_y[page]=20+sprites[i].deltay[page]/2; } else { sprites[i].spidp->y[1-page]=9*40-12; sprites[i].spidp->y[page]=9*40-12+sprites[i].deltay[page]/2; sprites[i].spidp->old_y[page]=9*40-12+sprites[i].deltay[page]/2; } } if (out&OUT_LEFT || out&OUT_RIGHT) { if (sprites[i].deltax[page]>0) { sprites[i].spidp->x[1-page]=13; sprites[i].spidp->x[page]=13+sprites[i].deltax[page]/2; sprites[i].spidp->old_x[page]=13+sprites[i].deltax[page]/2; } else { sprites[i].spidp->x[1-page]=9*32-5; sprites[i].spidp->x[page]=9*32-5+sprites[i].deltax[page]/2; sprites[i].spidp->old_x[page]=9*32-5+sprites[i].deltax[page]/2; } } } /* printen */ for ( i = 0; i < SPRANZ; ++ i) { bilder(); PrintSprite( sprites[i].spidp, page ); } bild++; if (bild==PHASE*8+1) bild=0; page = (page+1) & 1; Zeit = (Zeit+1) % 1501; } if ((Extra_Time)&&(ExtraBonus==15)) show_pic(0,0,1,"pix\\pac_gelb"); for ( i = 0; i < SPRANZ; ++ i) RemoveSprite(sprites[i].spidp); page=0; GrafPrintf(100,390,0,0," "); if (Extra==1) ExtraBonus=0; } if (!Leben) { Do_Game_Over(); } K_Clear(); Sim_Taste=0; Key_status=0; return Punkte; } /* ///////////////////////////////////////////////////////////////////// */ void near align(void) { sprites[PACMAN].deltax[1] = sprites[PACMAN].deltax[0]=2*dx ; sprites[PACMAN].deltay[1] = sprites[PACMAN].deltay[0]=2*dy ; if (dir+lastkey!=Achsengleich) { sprites[PACMAN].spidp->x[1-page]=(x+1)*32-12+2*dx; sprites[PACMAN].spidp->y[1-page]=(y+1)*40-16+2*dy; sprites[PACMAN].spidp->x[page]=(x+1)*32-12+dx; sprites[PACMAN].spidp->y[page]=(y+1)*40-16+dy; } else { sprites[PACMAN].spidp->x[1-page]=sprites[PACMAN].spidp->x[page]-dx; sprites[PACMAN].spidp->y[1-page]=sprites[PACMAN].spidp->y[page]-dy; sprites[PACMAN].spidp->x[page]-=(2*dx); sprites[PACMAN].spidp->y[page]-=(2*dy); } } /* ///////////////////////////////////////////////////////////////////// */ void life(void) { int t; if (Life_counter>=100000L) { Leben+=(int)(Life_counter/100000L); Life_counter=Punkte%100000L; GrafPrintf(295,389,20,0,"%i",Leben); # ifndef NO_SOUND # ifndef SHAREWARE_SOUND if ((mod_on)||(sample_on)) # else if (mod_on) # endif { for ( t = 0; t < 64;t++)/*=4) */ { set_color(0,0,0,t); } warte_d(2); for ( t = 64; t >=0; t--)/*=4) */ { set_color(0,0,0,t); } } else # endif { for ( t = 0; t < 64; t+=2) { set_color(0,0,0,t); warte_d(1); } for ( t = 64; t >=0; t-=2) { set_color(0,0,0,t); warte_d(1); } } } } /* ///////////////////////////////////////////////////////////////////// */ void mov_ghost(int ghost) { int Akt_speed; x=-1; Akt_speed=abs((sprites[ghost].deltay[page]+sprites[ghost].deltax[page])/2); if (!Akt_speed) Akt_speed=speed[ghost]; if (Akt_speed>4) Akt_speed++; for ( x1 = 0; x1 < Akt_speed; ++x1) { for ( y1 = 0; y1 < Akt_speed; ++y1) { if ((((sprites[ghost].spidp->x[page]+12+x1*ghost_richt[ghost])%32)==0)&&(((sprites[ghost].spidp->y[page]+16+y1*ghost_richt[ghost])%40)==0)) { x=((sprites[ghost].spidp->x[page]+12+x1*ghost_richt[ghost])/32)-1; y=((sprites[ghost].spidp->y[page]+16+y1*ghost_richt[ghost])/40)-1; if ((Labyrinth.dots[y][x]=='x')&&(Eyes[ghost])) { Eyes[ghost]=0; speed[ghost]=Labyrinth.geister_speed[ghost-1]; speed_change[ghost]=1; } if (((Labyrinth.lab[y][x+1]=='u')||(Labyrinth.lab[y][x+1]=='┌')||(Labyrinth.lab[y][x+1]=='│')||(Labyrinth.lab[y][x+1]=='┬')||(Labyrinth.lab[y][x+1]=='├')||(Labyrinth.lab[y][x+1]=='┼')||(Labyrinth.lab[y][x+1]=='┤')||(Labyrinth.lab[y][x+1]=='┐')||(Labyrinth.lab[y][x+1]==','))) ghost_dir[ghost][OST]=0; else { ghost_dir[ghost][OST]=3+random(4); if ((!Eyes[ghost])&&(sprites[PACMAN].spidp->x[page]>sprites[ghost].spidp->x[page])) if ((!ghost_angst[ghost])&&(!Fear)) ghost_dir[ghost][OST]+=5-(sprites[PACMAN].spidp->x[page]-sprites[ghost].spidp->x[page])/64; else ghost_dir[ghost][OST]=1; if ((Eyes[ghost])&&(x<Labyrinth.house_x)) ghost_dir[ghost][OST]+=random(8); if ((Labyrinth.dots[y][x+1]=='x')&&(Eyes[ghost])) ghost_dir[ghost][OST]=20; } if (((Labyrinth.lab[y][x]=='u')||(Labyrinth.lab[y][x]=='┌')||(Labyrinth.lab[y][x]=='│')||(Labyrinth.lab[y][x]=='┬')||(Labyrinth.lab[y][x]=='├')||(Labyrinth.lab[y][x]=='┼')||(Labyrinth.lab[y][x]=='┤')||(Labyrinth.lab[y][x]=='┐')||(Labyrinth.lab[y][x]==','))) ghost_dir[ghost][WEST]=0; else { ghost_dir[ghost][WEST]=3+random(4); if ((!Eyes[ghost])&&(sprites[PACMAN].spidp->x[page]<sprites[ghost].spidp->x[page])) if ((!ghost_angst[ghost])&&(!Fear)) ghost_dir[ghost][WEST]+=5-(sprites[ghost].spidp->x[page]-sprites[PACMAN].spidp->x[page])/64; else ghost_dir[ghost][WEST]=1; if ((Eyes[ghost])&&(x>Labyrinth.house_x)) ghost_dir[ghost][WEST]+=random(8); if ((Labyrinth.dots[y][x-1]=='x')&&(Eyes[ghost])) ghost_dir[ghost][WEST]=20; } if (( (Labyrinth.lab[y][x]=='r')||(Labyrinth.lab[y][x]=='┌')||(Labyrinth.lab[y][x]=='~')||(Labyrinth.lab[y][x]=='┬')||(Labyrinth.lab[y][x]=='├')||(Labyrinth.lab[y][x]=='┼')||(Labyrinth.lab[y][x]=='─')||(Labyrinth.lab[y][x]=='└')||(Labyrinth.lab[y][x]=='┴'))) ghost_dir[ghost][NORD]=0; else { ghost_dir[ghost][NORD]=3+random(4); if ((!Eyes[ghost])&&(sprites[PACMAN].spidp->y[page]<sprites[ghost].spidp->y[page])) if ((!ghost_angst[ghost])&&(!Fear)) ghost_dir[ghost][NORD]+=5-(sprites[ghost].spidp->y[page]-sprites[PACMAN].spidp->y[page])/80; else ghost_dir[ghost][NORD]=1; if ((Eyes[ghost])&&(y>Labyrinth.house_y)) ghost_dir[ghost][NORD]+=random(8); if ((Labyrinth.dots[y-1][x]=='x')&&(Eyes[ghost])) ghost_dir[ghost][NORD]=20; } if (((Labyrinth.lab[y+1][x]=='r')||(Labyrinth.lab[y+1][x]=='┌')||(Labyrinth.lab[y+1][x]=='~')||(Labyrinth.lab[y+1][x]=='┬')||(Labyrinth.lab[y+1][x]=='├')||(Labyrinth.lab[y+1][x]=='┼')||(Labyrinth.lab[y+1][x]=='─')||(Labyrinth.lab[y+1][x]=='└')||(Labyrinth.lab[y+1][x]=='┴'))) ghost_dir[ghost][SUED]=0; else { ghost_dir[ghost][SUED]=3+random(4); if ((!Eyes[ghost])&&(sprites[PACMAN].spidp->y[page]>sprites[ghost].spidp->y[page])) if ((!ghost_angst[ghost])&&(!Fear)) ghost_dir[ghost][SUED]+=5-(sprites[PACMAN].spidp->y[page]-sprites[ghost].spidp->y[page])/80; else ghost_dir[ghost][SUED]=1; if ((Eyes[ghost])&&(y<Labyrinth.house_y)) ghost_dir[ghost][SUED]+=random(8); if ((Labyrinth.dots[y+1][x]=='x')&&(Eyes[ghost])) ghost_dir[ghost][SUED]=20; } if (ghost_dir[ghost][3-ghost_last[ghost]]) ghost_dir[ghost][3-ghost_last[ghost]]=1; if (ghost_dir[ghost][ghost_last[ghost]]) ghost_dir[ghost][ghost_last[ghost]]++; x1=0; if (ghost_dir[ghost][0]<ghost_dir[ghost][1]) { x1=1; ghost_dir[ghost][0]=ghost_dir[ghost][1]; } if (ghost_dir[ghost][0]<ghost_dir[ghost][2]) { x1=2; ghost_dir[ghost][0]=ghost_dir[ghost][2]; } if (ghost_dir[ghost][0]<ghost_dir[ghost][3]) x1=3; ghost_dir[ghost][0]=x1; x1=Akt_speed; y1=Akt_speed; } } } /* for schleife */ if (x!=-1) { if ((ghost_last[ghost]!=ghost_dir[ghost][0])||(speed_change[ghost])) { speed_change[ghost]=0; switch (ghost_dir[ghost][0]) { case NORD: { sprites[ghost].deltax[1] = 0; sprites[ghost].deltay[1] = 2*-speed[ghost]; sprites[ghost].deltax[0] = 0; sprites[ghost].deltay[0] = 2*-speed[ghost]; if (ghost_last[ghost]+ghost_dir[ghost][0]==3) { sprites[ghost].spidp->x[1-page]=sprites[ghost].spidp->x[page]-sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[1-page]=sprites[ghost].spidp->y[page]-sprites[ghost].deltay[page]/2; sprites[ghost].spidp->x[page]-=sprites[ghost].deltax[page]; sprites[ghost].spidp->y[page]-=sprites[ghost].deltay[page]; } else { sprites[ghost].spidp->x[1-page]=(x+1)*32-12+sprites[ghost].deltax[page]; sprites[ghost].spidp->y[1-page]=(y+1)*40-16+sprites[ghost].deltay[page]; sprites[ghost].spidp->x[page]=(x+1)*32-12+sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[page]=(y+1)*40-16+sprites[ghost].deltay[page]/2; } sprites[ghost].richtung=NORD; ghost_last[ghost]=ghost_dir[ghost][0]; ghost_richt[ghost]=-1; break; } case SUED: { sprites[ghost].deltax[1] = 0; sprites[ghost].deltay[1] = 2*speed[ghost]; sprites[ghost].deltax[0] = 0; sprites[ghost].deltay[0] = 2*speed[ghost]; if (ghost_last[ghost]+ghost_dir[ghost][0]==3) { sprites[ghost].spidp->x[1-page]=sprites[ghost].spidp->x[page]-sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[1-page]=sprites[ghost].spidp->y[page]-sprites[ghost].deltay[page]/2; sprites[ghost].spidp->x[page]-=sprites[ghost].deltax[page]; sprites[ghost].spidp->y[page]-=sprites[ghost].deltay[page]; } else { sprites[ghost].spidp->x[1-page]=(x+1)*32-12+sprites[ghost].deltax[page]; sprites[ghost].spidp->y[1-page]=(y+1)*40-16+sprites[ghost].deltay[page]; sprites[ghost].spidp->x[page]=(x+1)*32-12+sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[page]=(y+1)*40-16+sprites[ghost].deltay[page]/2; } sprites[ghost].richtung=SUED; ghost_last[ghost]=ghost_dir[ghost][0]; ghost_richt[ghost]=1; break; } case OST: { sprites[ghost].deltay[1] = 0; sprites[ghost].deltax[1] = 2*speed[ghost]; sprites[ghost].deltay[0] = 0; sprites[ghost].deltax[0] = 2*speed[ghost]; if (ghost_last[ghost]+ghost_dir[ghost][0]==3) { sprites[ghost].spidp->x[1-page]=sprites[ghost].spidp->x[page]-sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[1-page]=sprites[ghost].spidp->y[page]-sprites[ghost].deltay[page]/2; sprites[ghost].spidp->x[page]-=sprites[ghost].deltax[page]; sprites[ghost].spidp->y[page]-=sprites[ghost].deltay[page]; } else { sprites[ghost].spidp->x[1-page]=(x+1)*32-12+sprites[ghost].deltax[page]; sprites[ghost].spidp->y[1-page]=(y+1)*40-16+sprites[ghost].deltay[page]; sprites[ghost].spidp->x[page]=(x+1)*32-12+sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[page]=(y+1)*40-16+sprites[ghost].deltay[page]/2; } sprites[ghost].richtung=OST; ghost_last[ghost]=ghost_dir[ghost][0]; ghost_richt[ghost]=1; break; } case WEST: { sprites[ghost].deltay[1] = 0; sprites[ghost].deltax[1] = -2*speed[ghost]; sprites[ghost].deltay[0] = 0; sprites[ghost].deltax[0] = -2*speed[ghost]; if (ghost_last[ghost]+ghost_dir[ghost][0]==3) { sprites[ghost].spidp->x[1-page]=sprites[ghost].spidp->x[page]-sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[1-page]=sprites[ghost].spidp->y[page]-sprites[ghost].deltay[page]/2; sprites[ghost].spidp->x[page]-=sprites[ghost].deltax[page]; sprites[ghost].spidp->y[page]-=sprites[ghost].deltay[page]; } else { sprites[ghost].spidp->x[1-page]=(x+1)*32-12+sprites[ghost].deltax[page]; sprites[ghost].spidp->y[1-page]=(y+1)*40-16+sprites[ghost].deltay[page]; sprites[ghost].spidp->x[page]=(x+1)*32-12+sprites[ghost].deltax[page]/2; sprites[ghost].spidp->y[page]=(y+1)*40-16+sprites[ghost].deltay[page]/2; } sprites[ghost].richtung=WEST; ghost_last[ghost]=ghost_dir[ghost][0]; ghost_richt[ghost]=-1; break; } } } } } /* ///////////////////////////////////////////////////////////////////// */ void do_case(void) { int i,t,xt,yt; switch (ExtraBonus) { case 1: { Extra=1; break; } case 2: { Extra_Time=800; speed_change[PACMAN]=1; speed[PACMAN]=4; GrafPrintf(120,390,255,255," SPEED "); break; } case 3: { Extra_Time=800; speed_change[PACMAN]=1; speed[PACMAN]=5; GrafPrintf(120,390,255,255,"EXTRA-SPEED "); break; } case 4: { Extra_Time=800; GrafPrintf(120,390,255,255," GESCHENKE "); Geschenk=1; break; } case 5: { Leben++; GrafPrintf(295,389,20,0,"%i",Leben); # ifndef NO_SOUND # ifndef SHAREWARE_SOUND if ((mod_on)||(sample_on)) # else if (mod_on) # endif { for ( t = 0; t < 64;t++)/*=4) */ { set_color(0,0,0,t); } warte_d(2); for ( t = 64; t >=0; t--)/*=4) */ { set_color(0,0,0,t); } } else # endif { for ( t = 0; t < 64; t+=2) { set_color(0,0,0,t); warte_d(1); } for ( t = 64; t >=0; t-=2) { set_color(0,0,0,t); warte_d(1); } } ExtraBonus=0; break; } case 6: { Extra_Time=800; GrafPrintf(120,390,255,255," FEAR "); Fear=1; break; } case 7: { Level_punkte=Labyrinth.dot_anzahl; ExtraBonus=0; break; } case 8: { Level_punkte=Labyrinth.dot_anzahl; t=1; if (random(100)>50) t=-1; Level+=(random(3)*t); ExtraBonus=0; break; } case 9: { speed[RED]=0; speed_change[RED]=1; speed[GELB]=0; speed_change[GELB]=1; speed[GRUEN]=0; speed_change[GRUEN]=1; speed[LILA]=0; speed_change[LILA]=1; Extra_Time=800; GrafPrintf(120,390,255,255," STOP "); stop=1; break; } case 10: { speed[RED]=1; speed_change[RED]=1; speed[GELB]=1; speed_change[GELB]=1; speed[GRUEN]=1; speed_change[GRUEN]=1; speed[LILA]=1; speed_change[LILA]=1; Extra_Time=800; GrafPrintf(120,390,255,255," SLOW "); slow=1; break; } case 11: { for ( i = RED; i < LILA+1; ++ i) { if (!Eyes[i]) { if ((!slow)&&(!stop)) { speed[i]=Labyrinth.eye_speed; speed_change[i]=1; } Eyes[i]=130; Punkte+=5000*mal; Life_counter+=5000*mal; life(); Geist_zahl[i]=5000; Print_Score(Punkte); } } ExtraBonus=0; break; } case 12: { Extra_Time=800; GrafPrintf(120,390,255,255," MAL 2 "); mal=2; break; } case 13: { Extra_Time=800; GrafPrintf(120,390,255,255," MAL 5 "); mal=5; break; } case 14: { Extra_Time=800; for ( xt = 1; xt < 10 ; ++ xt) { for ( yt = 1; yt < 10 ; ++ yt) { if ((Labyrinth.dots[yt-1][xt-1]!='x')&&(Labyrinth.dots[yt-1][xt-1]!=' ')&&(dots[((int) Labyrinth.dots[yt-1][xt-1])-((int) '.')].Art==0)) { Labyrinth.dots[yt-1][xt-1]='P'+random(6); PutVideo(dots[Labyrinth.dots[yt-1][xt-1]-'P'+34].dot,0,xt*32-dots[36].dot->width,yt*40-dots[36].dot->hight,FALSE); PutVideo(dots[Labyrinth.dots[yt-1][xt-1]-'P'+34].dot,1,xt*32-dots[36].dot->width,yt*40-dots[36].dot->hight,FALSE); PutBack(Back,dots[Labyrinth.dots[yt-1][xt-1]-'P'+34].dot,xt*32-dots[36].dot->width,yt*40-dots[36].dot->hight); } } } GrafPrintf(120,390,255,255," DIAMANTEN "); break; } case 15: { show_pic(0,0,1,"pix\\pac_grue"); shield=1; Extra_Time=800; GrafPrintf(120,390,255,255," SCHUTZ "); break; } case 16: { uhr=1; ExtraBonus=0; break; } } } /* ///////////////////////////////////////////////////////////////////// */ void mov_pac(void) { int t; if (B_Flag) { PutVideo(void_Bonus,page,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); B_Flag=0; Z_Count=6; zz=Get_Zahl(Labyrinth.Bonus_wert,zz); PutBack(Back,zz,(int) Labyrinth.Bonus_x*32+32-zz->width,(int) Labyrinth.Bonus_y*40+40-zz->hight); PutVideo(zz,0,Labyrinth.Bonus_x*32+32-zz->width,Labyrinth.Bonus_y*40+40-zz->hight,FALSE); PutVideo(zz,1,Labyrinth.Bonus_x*32+32-zz->width,Labyrinth.Bonus_y*40+40-zz->hight,FALSE); } if (Z_Count==2) { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); } if (Z_Count==1) { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); Z_Count=0; } if (!demo) key=game_get_key(); else key=demo_game_get_key(); if (key==27) GrafPrintf(110,390,0,0, " "); if ((key)&&(key!=lastkey)) { if (key==Hoch) { ddx =0; ddy =-speed[PACMAN]; } else { if (key==Runter) { ddx =0; ddy =speed[PACMAN]; } else { if (key==Rechts) { ddx =speed[PACMAN]; ddy =0; } else { if (key==Links) { ddx =-speed[PACMAN]; ddy =0; } else { if (key!=27) key=dir; else GrafPrintf(120,390,255,255," "); } } } } lastkey=key; } Akt_speed=abs((sprites[PACMAN].deltay[page]+sprites[PACMAN].deltax[page])/2); if (!Akt_speed) { Akt_speed=speed[PACMAN]; if (ExtraBonus==2) Akt_speed=4; } if (Akt_speed>4) Akt_speed++; for ( x1 = 0; x1 < Akt_speed; ++x1) { for ( y1 = 0; y1 < Akt_speed; ++y1) { if ( (((sprites[PACMAN].spidp->x[page]+12+x1*richt)%32)==0)&&(((sprites[PACMAN].spidp->y[page]+16+y1*richt)%40)==0) ) { x=((sprites[PACMAN].spidp->x[page]+12+x1*richt)/32)-1; y=((sprites[PACMAN].spidp->y[page]+16+y1*richt)/40)-1; if (geschenk_flag) { if (geschenk_x!=-1) { PutBack(Back,void_Bonus,(int) geschenk_x*32+32-void_Bonus->width,(int) geschenk_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,geschenk_x*32+32-void_Bonus->width,geschenk_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,1-page,geschenk_x*32+32-void_Bonus->width,geschenk_y*40+40-void_Bonus->hight,FALSE); } geschenk_flag=0; } if (Z_Count) Z_Count--; if (Z_Count==1) { PutBack(Back,void_Bonus,(int) x*32+32-void_Bonus->width,(int) y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); } if ((Labyrinth.dots[y][x]!=' ')&&(Labyrinth.dots[y][x]!='x')) { if ((Labyrinth.dots[y][x]!='y') && (Labyrinth.dots[y][x]!='z')) { if (dots[((int) Labyrinth.dots[y][x])-((int) '.')].Art==0) { in_a_row=0; PutBack(Back,dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv,(int) x*32+32-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->width,(int) y*40+40-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->hight); play_sample(DOTS); if (Geschenk) { t=(random(20)+1)*100; Punkte+=t*mal; Life_counter+=t*mal; zz=Get_Zahl(t,zz); PutBack(Back,zz,(int) x*32+32-zz->width,(int) y*40+40-zz->hight); geschenk_x=x; geschenk_y=y; geschenk_flag=1; } else { Punkte+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; Life_counter+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; } life(); Level_punkte+=1; Print_Score(Punkte); in_a_row=0; in_a_dot++; if ((in_a_dot==Labyrinth.Max_dot)&&(!Extra)) { Extra=1; } Labyrinth.dots[y][x]=' '; } else { if (dots[((int) Labyrinth.dots[y][x])-((int) '.')].Art==1) { if (!Extra) { play_sample(PILLE); if ((!stop)&&(!slow)) { if (!Eyes[RED]) { speed[RED]=Labyrinth.ghost_speed; speed_change[RED]=1; } if (!Eyes[LILA]) { speed[LILA]=Labyrinth.ghost_speed; speed_change[LILA]=1; } if (!Eyes[GELB]) { speed[GELB]=Labyrinth.ghost_speed; speed_change[GELB]=1; } if (!Eyes[GRUEN]) { speed[GRUEN]=Labyrinth.ghost_speed; speed_change[GRUEN]=1; } } PutBack(Back,dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv,(int) x*32+32-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->width,(int) y*40+40-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->hight); Punkte+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; Life_counter+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; play_sample(PILLE); life(); Level_punkte+=1; Print_Score(Punkte); fressen=Labyrinth.pillen_laenge; if (uhr) fressen*=2; if ((!Eyes[RED])||(Ghost_fressen==1)) ghost_angst[RED]=fressen; if ((!Eyes[LILA])||(Ghost_fressen==1)) ghost_angst[LILA]=fressen; if ((!Eyes[GELB])||(Ghost_fressen==1)) ghost_angst[GELB]=fressen; if ((!Eyes[GRUEN])||(Ghost_fressen==1)) ghost_angst[GRUEN]=fressen; in_a_row++; in_a_dot=0; if ((in_a_row==4)&&(!Extra)) Extra=1; Geist_wert=200; Labyrinth.dots[y][x]=' '; } else { play_sample(DOTS); PutBack(Back,dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv,(int) x*32+32-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->width,(int) y*40+40-dots[((int) Labyrinth.dots[y][x])-((int) '.')].dotv->hight); Punkte+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; Life_counter+=dots[((int) Labyrinth.dots[y][x])-((int) '.')].Wert*mal; life(); Level_punkte+=1; Print_Score(Punkte); Labyrinth.dots[y][x]=' '; } } } } else { if (Labyrinth.dots[y][x]=='y') { Labyrinth.dots[y][x]=' '; if (!ExtraBonus) { B_Zeit=0; B_Flag=1; PutBack(Back,void_Bonus,(int) x*32+32-void_Bonus->width,(int) y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); Punkte+=Labyrinth.Bonus_wert*mal; Life_counter+=Labyrinth.Bonus_wert*mal; life(); Level_punkte+=1; in_a_row=0; in_a_dot++; if ((in_a_dot==Labyrinth.Max_dot)&&(!Extra)) Extra=1; play_sample(EXTRA); Print_Score(Punkte); } else { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,1,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,0,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); if ((in_a_dot==Labyrinth.Max_dot)&&(!Extra)) Extra=1; Level_punkte+=1; in_a_row=0; in_a_dot++; B_Zeit=0; play_sample(EXTRA); do_case(); } } if (Labyrinth.dots[y][x]=='z') { Labyrinth.dots[y][x]=' '; if (!ExtraBonus) { B_Zeit=0; B_Flag=1; PutBack(Back,void_Bonus,(int) x*32+32-void_Bonus->width,(int) y*40+40-void_Bonus->hight); PutVideo(void_Bonus,page,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); Punkte+=Labyrinth.Bonus_wert*mal; Life_counter+=Labyrinth.Bonus_wert*mal; life(); play_sample(EXTRA); Print_Score(Punkte); } else { PutBack(Back,void_Bonus,(int) Labyrinth.Bonus_x*32+32-void_Bonus->width,(int) Labyrinth.Bonus_y*40+40-void_Bonus->hight); PutVideo(void_Bonus,1,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); PutVideo(void_Bonus,0,Labyrinth.Bonus_x*32+32-void_Bonus->width,Labyrinth.Bonus_y*40+40-void_Bonus->hight,FALSE); B_Zeit=0; play_sample(EXTRA); do_case(); } } } } if ((dx)||(dy)) { if ( (dir==Links)&&( (Labyrinth.lab[y][x]=='o')||(Labyrinth.lab[y][x]=='u')||(Labyrinth.lab[y][x]=='┌')||(Labyrinth.lab[y][x]=='│')||(Labyrinth.lab[y][x]=='┬')||(Labyrinth.lab[y][x]=='├')||(Labyrinth.lab[y][x]=='┼')||(Labyrinth.lab[y][x]=='┤')||(Labyrinth.lab[y][x]=='┐')||(Labyrinth.lab[y][x]==',') ) ) { dx=0; dy=0; align(); richt=1; goto raus1; } if ( (dir==Rechts)&&( (Labyrinth.lab[y][x+1]=='o')||(Labyrinth.lab[y][x+1]=='u')||(Labyrinth.lab[y][x+1]=='┌')||(Labyrinth.lab[y][x+1]=='│')||(Labyrinth.lab[y][x+1]=='┬')||(Labyrinth.lab[y][x+1]=='├')||(Labyrinth.lab[y][x+1]=='┼')||(Labyrinth.lab[y][x+1]=='┤')||(Labyrinth.lab[y][x+1]=='┐')||(Labyrinth.lab[y][x+1]==',') ) ) { dx=0; dy=0; align(); richt=1; goto raus1; } if ( (dir==Hoch)&&( (Labyrinth.lab[y][x]=='┌')||(Labyrinth.lab[y][x]=='l')||(Labyrinth.lab[y][x]=='r')||(Labyrinth.lab[y][x]=='~')||(Labyrinth.lab[y][x]=='┬')||(Labyrinth.lab[y][x]=='├')||(Labyrinth.lab[y][x]=='┼')||(Labyrinth.lab[y][x]=='─')||(Labyrinth.lab[y][x]=='└')||(Labyrinth.lab[y][x]=='┴') ) ) { dx=0; dy=0; align(); richt=1; goto raus1; } if ( (dir==Runter)&&( (Labyrinth.lab[y+1][x]=='┌')||(Labyrinth.lab[y+1][x]=='l')||(Labyrinth.lab[y+1][x]=='r')||(Labyrinth.lab[y+1][x]=='~')||(Labyrinth.lab[y+1][x]=='┬')||(Labyrinth.lab[y+1][x]=='├')||(Labyrinth.lab[y+1][x]=='┼')||(Labyrinth.lab[y+1][x]=='─')||(Labyrinth.lab[y+1][x]=='└')||(Labyrinth.lab[y+1][x]=='┴') ) ) { dx=0; dy=0; align(); richt=1; goto raus1; } } } raus1: if (speed_change[PACMAN]) { if (dx) dx=(dx/abs(dx))*speed[PACMAN]; if (dy) dy=(dy/abs(dy))*speed[PACMAN]; if (ddx) ddx=(ddx/abs(ddx))*speed[PACMAN]; if (ddy) ddy=(ddy/abs(ddy))*speed[PACMAN]; sprites[PACMAN].deltax[1] = 2*dx ; sprites[PACMAN].deltay[1] = 2*dy ; sprites[PACMAN].deltax[0] = 2*dx ; sprites[PACMAN].deltay[0] = 2*dy ; sprites[PACMAN].spidp->x[page]=sprites[PACMAN].spidp->x[1-page]-dx; sprites[PACMAN].spidp->y[page]=sprites[PACMAN].spidp->y[1-page]-dy; y1=0; x1=0; Akt_speed=abs((sprites[PACMAN].deltay[page]+sprites[PACMAN].deltax[page])/2); if (Akt_speed>4) Akt_speed++; speed_change[PACMAN]=0; } else { if (lastkey!=dir) { if (dir+lastkey==Achsengleich) { dx=ddx; dy=ddy; richt=-richt; align(); dir=lastkey; sprites[PACMAN].richtung = Get_Dir(dir); goto raus; } else { if (((((sprites[PACMAN].spidp->x[page]+12+x1*richt)%32)==0))&&(((sprites[PACMAN].spidp->y[page]+16+y1*richt)%40)==0)) { x=((sprites[PACMAN].spidp->x[page]+12+x1*richt)/32)-1; y=((sprites[PACMAN].spidp->y[page]+16+y1*richt)/40)-1; if ( (lastkey==Links)&&!(( (Labyrinth.lab[y][x]=='o')||(Labyrinth.lab[y][x]=='u')||(Labyrinth.lab[y][x]=='┌')||(Labyrinth.lab[y][x]=='│')||(Labyrinth.lab[y][x]=='┬')||(Labyrinth.lab[y][x]=='├')||(Labyrinth.lab[y][x]=='┼')||(Labyrinth.lab[y][x]=='┤')||(Labyrinth.lab[y][x]=='┐')||(Labyrinth.lab[y][x]==',') ) )) { dx=ddx; dy=ddy; richt=-1; align(); dir=lastkey; sprites[PACMAN].richtung = Get_Dir(dir); goto raus; } if ( (lastkey==Rechts)&&!(( (Labyrinth.lab[y][x+1]=='o')||(Labyrinth.lab[y][x+1]=='u')||(Labyrinth.lab[y][x+1]=='┌')||(Labyrinth.lab[y][x+1]=='│')||(Labyrinth.lab[y][x+1]=='┬')||(Labyrinth.lab[y][x+1]=='├')||(Labyrinth.lab[y][x+1]=='┼')||(Labyrinth.lab[y][x+1]=='┤')||(Labyrinth.lab[y][x+1]=='┐')||(Labyrinth.lab[y][x+1]==',') ) )) { dx=ddx; dy=ddy; richt=1; align(); dir=lastkey; sprites[PACMAN].richtung = Get_Dir(dir); goto raus; } if ((lastkey==Hoch)&&!(( (Labyrinth.lab[y][x]=='r')||(Labyrinth.lab[y][x]=='l')||(Labyrinth.lab[y][x]=='┌')||(Labyrinth.lab[y][x]=='~')||(Labyrinth.lab[y][x]=='┬')||(Labyrinth.lab[y][x]=='├')||(Labyrinth.lab[y][x]=='┼')||(Labyrinth.lab[y][x]=='─')||(Labyrinth.lab[y][x]=='└')||(Labyrinth.lab[y][x]=='┴') ) )) { dx=ddx; dy=ddy; richt=-1; align(); dir=lastkey; sprites[PACMAN].richtung = Get_Dir(dir); goto raus; } if ( (lastkey==Runter)&&!(( (Labyrinth.lab[y+1][x]=='l')||(Labyrinth.lab[y+1][x]=='r')||(Labyrinth.lab[y+1][x]=='┌')||(Labyrinth.lab[y+1][x]=='~')||(Labyrinth.lab[y+1][x]=='┬')||(Labyrinth.lab[y+1][x]=='├')||(Labyrinth.lab[y+1][x]=='┼')||(Labyrinth.lab[y+1][x]=='─')||(Labyrinth.lab[y+1][x]=='└')||(Labyrinth.lab[y+1][x]=='┴') ) )) { dx=ddx; dy=ddy; richt=1; align(); dir=lastkey; sprites[PACMAN].richtung = Get_Dir(dir); goto raus; } } } } } } /* for schleife */ raus: ; } } /* ///////////////////////////////////////////////////////////////////// */ void Do_Infor(void) { int i=0; setpage(1); showpage(0); show_pic(16,55,15,"pix\\info1"); gprintf(160-strlen(Labyrinth.Titel)*4,82,239+13,239+2,Labyrinth.Titel); if (Level>9) gprintf(250,82,239+15,239+2,"%d",Level); else gprintf(259,82,239+15,239+2,"%d",Level); while ((i<9)&&(Labyrinth.Desc[i][0])) gprintf(55,90+i*8,239+12,239+2,Labyrinth.Desc[i++]); i+=2; PutVideo( Pac[2][4]->pixbp,1,55, 90+i*8, TRUE); gprintf(90,90+i*8+12,239+14,239+2,"%d",Labyrinth.pac_speed); PutVideo( Bonus[Labyrinth.Bonus],1,180, 90+i*8, TRUE); gprintf(215,90+i*8+12,239+14,239+2,"%d",Labyrinth.Bonus_wert); i+=6; PutVideo( red[0][1]->pixbp,1,55, 90+i*8, TRUE); gprintf(90,90+i*8+12,239+14,239+2,"%d",Labyrinth.geister_speed[RED-1]); PutVideo( gelb[1][1]->pixbp,1,105, 90+i*8, TRUE); gprintf(140,90+i*8+12,239+14,239+2,"%d",Labyrinth.geister_speed[GELB-1]); PutVideo( gruen[2][1]->pixbp,1,155, 90+i*8, TRUE); gprintf(190,90+i*8+12,239+14,239+2,"%d",Labyrinth.geister_speed[GRUEN-1]); PutVideo( lila[3][1]->pixbp,1,205, 90+i*8, TRUE); gprintf(240,90+i*8+12,239+14,239+2,"%d",Labyrinth.geister_speed[LILA-1]); i+=6; PutVideo( red[4][0]->pixbp,1,55, 90+i*8, TRUE); gprintf(90,90+i*8+12,239+14,239+2,"%d, %d",Labyrinth.ghost_speed,Labyrinth.pillen_laenge); PutVideo( augen[1]->pixbp,1,180, 90+i*8, TRUE); gprintf(215,90+i*8+12,239+14,239+2,"%d",Labyrinth.eye_speed); showpage(1); K_Clear(); while (!key) { key=get_key(); warte_d(8); } showpage(0); Get_Back(1,Back); } /* ///////////////////////////////////////////////////////////////////// */ SPLOOK *Zahl(unsigned int Geist_zahl,SPLOOK *zurueck) { switch (Geist_zahl) { case 100: { zurueck= z100; break; } case 200: { zurueck= z200; break; } case 300: { zurueck= z300; break; } case 400: { zurueck= z400; break; } case 500: { zurueck= z500; break; } case 600: { zurueck= z600; break; } case 700: { zurueck= z700; break; } case 800: { zurueck= z800; break; } case 900: { zurueck= z900; break; } case 1100: { zurueck= z1100; break; } case 1200: { zurueck= z1200; break; } case 1300: { zurueck= z1300; break; } case 1400: { zurueck= z1400; break; } case 1500: { zurueck= z1500; break; } case 1600: { zurueck= z1600; break; } case 1700: { zurueck= z1700; break; } case 1800: { zurueck= z1800; break; } case 1900: { zurueck= z1900; break; } case 3000: { zurueck= z3000; break; } case 3200: { zurueck= z3200; break; } case 5000: { zurueck= z5000; break; } case 6400: { zurueck= z6400; break; } case 10000: { zurueck= z10000; break; } case 12800: { zurueck= z12800; break; } case 15000: { zurueck= z15000; break; } case 20000: { zurueck= z20000; break; } case 25000: { zurueck= z25000; break; } case 25600: { zurueck= z25600; break; } case 30000: { zurueck= z30000; break; } case 51200L: { zurueck= z51200; break; } case 1000: { zurueck= z1000; break; } case 2000: { zurueck= z2000; break; } case 4000: { zurueck= z4000; break; } case 8000: { zurueck= z8000; break; } default: { zurueck=sterne; } } return zurueck; } /* ///////////////////////////////////////////////////////////////////// */ PIXPTR Get_Zahl(int Eine_Zahl,PIXPTR Zahl_zeiger) { SPLOOK *Hilfe=NULL; Hilfe=Zahl((unsigned int ) Eine_Zahl,Hilfe); Zahl_zeiger=Hilfe->pixbp; return Zahl_zeiger; } /* ///////////////////////////////////////////////////////////////////// */ void do_akt(int nummer) { int tt,zahl,xx,yy; int x1,y1; BYTE i,aktplane,sb,eb,b,am,breite,hoehe; x1=0; y1=0; setpage(1); showpage(0); Eyes[0]=0; Eyes[1]=0; Eyes[2]=0; Eyes[3]=0; Eyes[4]=0; speed[RED]=0; speed[GELB]=0; speed[GRUEN]=0; speed[LILA]=0; speed_change[0]=0; speed_change[1]=0; speed_change[2]=0; speed_change[3]=0; speed_change[4]=0; show_pic(16,55,15,"pix\\info1"); set_color(239,0,0,0); set_color(240,0,0,0); set_color(241,0,0,0); set_color(242,0,0,0); zahl=random(nummer)%5; switch (zahl) { case 0: { show_pic(0,0,14,"pix\\dia1"); break; } case 1: { show_pic(0,0,14,"pix\\dia2"); break; } case 2: { show_pic(0,0,14,"pix\\dia3"); break; } case 3: { show_pic(0,0,14,"pix\\dia4"); break; } case 4: { show_pic(0,0,14,"pix\\dia5"); break; } } breite=33; hoehe=31; am = (BYTE) (((x1+breite-1)& ~3)-((x1+4)& ~3)) >> 2; sb = (BYTE) (x1 % 4); eb = (BYTE) ((x1+breite-1) % 4); for ( i=0; i<4; ++i ) { aktplane=(sb+i) % 4; b=am; if ( aktplane >= sb ) ++b; if ( aktplane <= eb ) ++b; cpback2scr(1,Back->bitptr[aktplane],x1+i,y1,b,hoehe); } xx = 2*32-12; yy = 4*40-16; PutVideo(dia,1,xx+150,yy-3,TRUE); showpage(1); Back=Save_Back(1,Back); Get_Back(0,Back); page=1; speed[PACMAN]=1; dx =1; richt=1; dy =0; sprites[ PACMAN ].deltax[0] = sprites[ PACMAN ].deltax[1] = dx * 2; sprites[ PACMAN ].deltay[0] = sprites[ PACMAN ].deltay[1] = dy * 2; sprites[PACMAN].richtung=OST; SetSprite( sprites[ PACMAN ].spidp, xx,yy, xx - dx, yy - dy ); SetSprite( sprites[ RED ].spidp,xx+21,yy+100, xx+21,yy+100); SetSprite( sprites[ GELB ].spidp,xx+71,yy+100,xx+71,yy+100 ); SetSprite( sprites[ GRUEN ].spidp,xx+121,yy+100,xx+121,yy+100 ); SetSprite( sprites[ LILA ].spidp,xx+170,yy+100,xx+170,yy+100 ); tt=0; while (tt!=300) { tt++; warte(); mov_ghost(RED); mov_ghost(GELB); mov_ghost(GRUEN); mov_ghost(LILA); showpage((BYTE) (1-page)); RestoreSpriteBg(sprites[PACMAN].spidp,page); RestoreSpriteBg(sprites[RED].spidp,page); RestoreSpriteBg(sprites[GELB].spidp,page); RestoreSpriteBg(sprites[GRUEN].spidp,page); RestoreSpriteBg(sprites[LILA].spidp,page); out=MoveSprite1(sprites[PACMAN].spidp,page,sprites[PACMAN].deltax[page],sprites[PACMAN].deltay[page]); PrintSprite( sprites[PACMAN].spidp, page ); PrintSprite( sprites[RED].spidp, page ); PrintSprite( sprites[GELB].spidp, page ); PrintSprite( sprites[LILA].spidp, page ); PrintSprite( sprites[GRUEN].spidp, page ); life(); if (sprites[PACMAN].spidp->x[1-page]==190) { PutVideo(dia,1,xx+150,yy-3,TRUE); PutBack(Back,diav,xx+150,yy-3); PutVideo(diav,0,xx+150,yy-3,FALSE); PutVideo(diav,1,xx+150,yy-3,FALSE); zz=Get_Zahl(10000+zahl*5000,zz); play_sample(FRESSEN); PutVideo(zz,0,xx+150,yy-3,TRUE); PutVideo(zz,1,xx+150,yy-3,TRUE); PutBack(Back,zz,xx+150,yy-3); ghost_angst[RED]=200; ghost_angst[GRUEN]=200; ghost_angst[LILA]=200; ghost_angst[GELB]=200; fressen=200; PrintSprite( sprites[PACMAN].spidp, page ); Punkte+=10000+zahl*5000; Life_counter+=10000+zahl*5000; Print_Score(Punkte); } if (sprites[PACMAN].spidp->x[1-page]==230) { sprites[ PACMAN ].deltax[0] = sprites[ PACMAN ].deltax[1] = 0; sprites[ PACMAN ].deltay[0] = sprites[ PACMAN ].deltay[1] = 0; sprites[PACMAN].spidp->x[1-page]=sprites[PACMAN].spidp->x[page]; } bilder(); bild++; if (bild==PHASE*8+1) bild=0; page = (page+1) & 1; } key=0; } /* ///////////////////////////////////////////////////////////////////// */ void Do_Level(int page) { key=page; while ((key!=27)&&(key!=13)) { GrafPrintf(20,390,239+14,0," Anfangslevel : %d ",Start_Level); key=get_kkey(); warte(); if (key==C_HOCH) Start_Level++; if ((key==C_RUNTER)&&(Start_Level)) Start_Level-=1; } GrafPrintf(20,390,239+14,0," ",Start_Level); key=0; } void Do_Info(int page) { int i=0; Back=Save_Back(page,Back); Get_Back(1-page,Back); setpage(page); showpage(1-page); show_pic(16,55,15,"pix\\info1"); Back=Save_Back(page,Back); Get_Back(1-page,Back); gprintf(160-strlen("PAC-MAN")*4,82,239+13,239+2,"PAC-MAN"); i=2; gprintf(55,90+(i++)*8,239+12,239+2,"Dieses Programm wurde"); i++; gprintf(55,90+(i++)*8,239+12,239+2,"1993 in 'C' geschrieben,"); i++; gprintf(55,90+(i++)*8,239+12,239+2,"Grafik-Zeug in Assembler."); i++; i++; gprintf(55,90+(i++)*8,239+11,239+2,"Version 1.2 (1995)"); i++; gprintf(55,90+(i++)*8,239+11,239+2,"Kommentare, Kritiken,"); i++; gprintf(55,90+(i++)*8,239+11,239+2,"Vorschläge können gerne"); i++; gprintf(55,90+(i++)*8,239+11,239+2,"an mich gerichtet werden."); i++; i++; gprintf(55,90+(i++)*8,239+10,239+2,"Adresse siehe Shareware-"); i++; gprintf(55,90+(i++)*8,239+10,239+2,"Hinweis."); i++; gprintf(55,90+(i++)*8,239+10,239+2,"FIDO : 2:2457/315.16"); i++; i++; i++; gprintf(160-strlen("taste")*4,90+(i++)*8,239+5,239+2,"TASTE"); showpage(page); setpage(1-page); K_Clear(); while (!key) { key=get_key(); warte_d(2); } } /* ///////////////////////////////////////////////////////////////////// */ void Do_Share(void) { int i=0; Back=Save_Back(page,Back); Get_Back(1-page,Back); setpage(1-page); showpage(page); show_pic(16,55,15,"pix\\info1"); /* gprintf(160-strlen("PAC-MAN")*4,82,239+13,239+2,"PAC-MAN"); i=2; gprintf(55,90+(i++)*8,239+12,239+2, "Diese Version des"); i++; gprintf(55,90+(i++)*8,239+9,239+2, "Programmes ist "); i++; gprintf(55,90+(i++)*8,239+7,239+2, "SHAREWARE !!!"); i+=2; gprintf(55,90+(i++)*8,239+9,239+2, "Bitte laßt Euch"); i++; gprintf(55,90+(i++)*8,239+10,239+2, "registrieren bei:"); i++; gprintf(55,90+(i++)*8,239+10,239+2, "Christopher Salomon"); i++; gprintf(55,90+(i++)*8,239+10,239+2, "Steinacker 11A"); i++; gprintf(55,90+(i++)*8,239+10,239+2, "57234 Wilnsdorf"); i++; gprintf(55,90+(i++)*8,239+10,239+2, "Deutschland"); i++; gprintf(55,90+(i++)*8,239+10,239+2, "Viel Spaß"); i++; i++; gprintf(55,90+(i++)*8,239+11,239+2," Chris"); i++; i++; */ gprintf(160-strlen("PAC-MAN")*4,82,239+13,239+2,"PAC-MAN"); i=2; gprintf(55,90+(i++)*8,239+12,239+2," Diese Version des"); i++; gprintf(55,90+(i++)*8,239+11,239+2," Programmes ist "); i++; gprintf(55,90+(i++)*8,239+10,239+2," registriert"); i++; gprintf(55,90+(i++)*8,239+10,239+2," für"); i+=2; i++; gprintf(55,90+(i++)*8,239+7,239+2, " Internet USERS"); i++; i++; gprintf(55,90+(i++)*8,239+10,239+2, "Viel Spaß wünscht"); i++; i++; gprintf(55,90+(i++)*8,239+11,239+2," ... Chris"); i++; i++; showpage(1-page); setpage(page); K_Clear(); while (!key) { key=get_key(); warte_d(8); } } /* ///////////////////////////////////////////////////////////////////// */ void Do_Game_Over(void) { int xx,yy,tt,no_move=0; page=0; setpage(page); showpage(1-page); show_pic(73,140,14,"pix\\pac_sarg"); PutVideo( red[0][1]->pixbp,page,92,165, TRUE); PutVideo( gelb[1][1]->pixbp,page,92, 210, TRUE); PutVideo( gruen[2][1]->pixbp,page,130, 155, TRUE); PutVideo( lila[3][1]->pixbp,page,130, 220, TRUE); Back=Save_Back(page,Back); Get_Back(1-page,Back); sprites[PACMAN].spidp->splookp = pacdead; dx =0; richt=-1; dy =-1; xx=183; yy=150; sprites[ PACMAN ].deltax[0] = sprites[ PACMAN ].deltax[1] = dx * 2; sprites[ PACMAN ].deltay[0] = sprites[ PACMAN ].deltay[1] = dy * 2; sprites[PACMAN].richtung=OST; SetSprite( sprites[ PACMAN ].spidp, xx,yy, xx - dx, yy - dy ); page=1; tt=0; while (tt!=300) { tt++; warte(); if (!no_move) { showpage((BYTE) (1-page)); RestoreSpriteBg(sprites[PACMAN].spidp,page); out=MoveSprite1(sprites[PACMAN].spidp,page,sprites[PACMAN].deltax[page],sprites[PACMAN].deltay[page]); PrintSprite( sprites[PACMAN].spidp, page ); if (sprites[PACMAN].spidp->y[page]==20) { no_move=1; RestoreSpriteBg(sprites[PACMAN].spidp,page); RestoreSpriteBg(sprites[PACMAN].spidp,1-page); } } page = (page+1) & 1; } setpage(1); showpage(0); show_pic(100,55,14,"pix\\game_o"); showpage(1); tt=0; K_Clear(); while (!key) { key=get_key(); warte_d(2); } } /* ///////////////////////////////////////////////////////////////////// */ void Print_Score(unsigned long Score) { char hilfe[25]; int i=0; int z=0; ultoa(Score,hilfe,10); while (hilfe[i]) { if (hilfe[i]!=statisch[i]) { switch (hilfe[i]) { case '0': { PutVideo(z_0,0,20+z,385,FALSE); PutVideo(z_0,1,20+z,385,FALSE); break; } case '1': { PutVideo(z_1,0,20+z,385,FALSE); PutVideo(z_1,1,20+z,385,FALSE); break; } case '2': { PutVideo(z_2,0,20+z,385,FALSE); PutVideo(z_2,1,20+z,385,FALSE); break; } case '3': { PutVideo(z_3,0,20+z,385,FALSE); PutVideo(z_3,1,20+z,385,FALSE); break; } case '4': { PutVideo(z_4,0,20+z,385,FALSE); PutVideo(z_4,1,20+z,385,FALSE); break; } case '5': { PutVideo(z_5,0,20+z,385,FALSE); PutVideo(z_5,1,20+z,385,FALSE); break; } case '6': { PutVideo(z_6,0,20+z,385,FALSE); PutVideo(z_6,1,20+z,385,FALSE); break; } case '7': { PutVideo(z_7,0,20+z,385,FALSE); PutVideo(z_7,1,20+z,385,FALSE); break; } case '8': { PutVideo(z_8,0,20+z,385,FALSE); PutVideo(z_8,1,20+z,385,FALSE); break; } case '9': { PutVideo(z_9,0,20+z,385,FALSE); PutVideo(z_9,1,20+z,385,FALSE); break; } } statisch[i]=hilfe[i]; } i++; z+=10; /* anederung von 9 aud 10 */ } } /* ///////////////////////////////////////////////////////////////////// */ void Print_Score_whole(unsigned long Score) { char hilfe[25]; int i=0; int z=0; ultoa(Score,hilfe,10); while (hilfe[i]) { switch (hilfe[i]) { case '0': { PutVideo(z_0,0,20+z,385,FALSE); PutVideo(z_0,1,20+z,385,FALSE); break; } case '1': { PutVideo(z_1,0,20+z,385,FALSE); PutVideo(z_1,1,20+z,385,FALSE); break; } case '2': { PutVideo(z_2,0,20+z,385,FALSE); PutVideo(z_2,1,20+z,385,FALSE); break; } case '3': { PutVideo(z_3,0,20+z,385,FALSE); PutVideo(z_3,1,20+z,385,FALSE); break; } case '4': { PutVideo(z_4,0,20+z,385,FALSE); PutVideo(z_4,1,20+z,385,FALSE); break; } case '5': { PutVideo(z_5,0,20+z,385,FALSE); PutVideo(z_5,1,20+z,385,FALSE); break; } case '6': { PutVideo(z_6,0,20+z,385,FALSE); PutVideo(z_6,1,20+z,385,FALSE); break; } case '7': { PutVideo(z_7,0,20+z,385,FALSE); PutVideo(z_7,1,20+z,385,FALSE); break; } case '8': { PutVideo(z_8,0,20+z,385,FALSE); PutVideo(z_8,1,20+z,385,FALSE); break; } case '9': { PutVideo(z_9,0,20+z,385,FALSE); PutVideo(z_9,1,20+z,385,FALSE); break; } } i++; z+=10; } } /* ///////////////////////////////////////////////////////////////////// */ void Do_Speed(int page) { Back=Save_Back(page,Back); Get_Back(1-page,Back); page=1; speed[PACMAN]=1; sprites[ PACMAN ].spidp = CreateSprite( Pac[OST][0] ); dx =1; richt=1; dy =0; sprites[ PACMAN ].deltax[0] = sprites[ PACMAN ].deltax[1] = dx * 2; sprites[ PACMAN ].deltay[0] = sprites[ PACMAN ].deltay[1] = dy * 2; sprites[PACMAN].richtung=OST; x = 5*32-12; y = 8*40-16; SetSprite( sprites[ PACMAN ].spidp, x, y, x - dx, y - dy ); key=0; while ((key!=27)&&(key!=13)) { key=get_kkey(); warte(); if (key==C_HOCH) i_warte+=10; if ((key==C_RUNTER)&&(i_warte)) i_warte-=10; showpage((BYTE) (1-page)); GrafPrintf(20,390,239+14,0," Delay : %d ",i_warte); RestoreSpriteBg(sprites[PACMAN].spidp,page); out=MoveSprite1(sprites[PACMAN].spidp,page,sprites[PACMAN].deltax[page],sprites[PACMAN].deltay[page]); if (out&OUT_LEFT || out&OUT_RIGHT) { if (sprites[PACMAN].deltax[page]>0) { sprites[PACMAN].spidp->x[1-page]=20; sprites[PACMAN].spidp->x[page]=20+sprites[PACMAN].deltax[page]/2; sprites[PACMAN].spidp->old_x[page]=20+sprites[PACMAN].deltax[page]/2; } } PrintSprite( sprites[PACMAN].spidp, page ); bilder(); bild++; if (bild==PHASE*8+1) bild=0; page = (page+1) & 1; } RemoveSprite( sprites[ PACMAN ].spidp); key=0; Get_Back(0,Back); Get_Back(1,Back); } /* ///////////////////////////////////////////////////////////////////// */ void Do_Ghost(void) { char *str[2]={"einmal","immer"}; key=1; while ((key!=27)&&(key!=13)) { GrafPrintf(20,390,239+14,0," Geister verschrecken : %s ",str[Ghost_fressen]); key=get_kkey(); warte(); if ((key==C_HOCH)||(key==C_RUNTER)) Ghost_fressen=(Ghost_fressen+1)%2; } GrafPrintf(20,390,239+14,0," "); key=0; } /* ///////////////////////////////////////////////////////////////////// */