home *** CD-ROM | disk | FTP | other *** search
- #include "p_io.h"
-
- int lastkey=1;
- int key_flag=0;
- int allow_int=0;
- int INIT_JOY=0;
- int JOYSTICK=0;
- int dir, key;
- int Achsengleich, Hoch, Runter, Rechts, Links;
- JSPOS jsp[2]; /* aktuelle Joystick-Position */
- BYTE aktstick; /* ausgewählter Joystick */
- BYTE j1but[2]; /* Button 1 auf Joystick 1 und 2 */
- BYTE j2but[2]; /* Button 2 auf Joystick 1 und 2 */
- BYTE out; /* nimmt Flags für Seitenkollision auf */
- int maxx, maxy; /* maximale Joystick-Position */
- int minx, miny; /* minimale Joystick-Position */
- int x_plus,x_minus;
- int y_plus,y_minus;
- int Sim_Taste, Key_status;
- int i_warte;
-
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void GetJoyButton(BYTE *j1b1, BYTE *j1b2)
- {
- union REGS regs; /* nimmt die Prozessorregister auf */
- regs.h.ah = 0x84; /* Funktion 84h */
- regs.x.dx = 0; /* Unterfunktion 00h */
- int86( 0x15, ®s, ®s ); /* Interrupt 15h aufrufen */
- *j1b1 = (( regs.h.al & 16 ) >> 4) ^ 1; /* Bit 4 von AL = J1B1 */
- *j1b2 = (( regs.h.al & 32 ) >> 5) ^ 1; /* Bit 5 von AL = J1B2 */
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void GetJoyPos(JSPOS *Js1Ptr)
- {
- stick(&Js1Ptr->x,&Js1Ptr->y);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void InitJoy(int page)
- {
- union REGS regs; /* nimmt die Prozessorregister auf */
- int Joystick_da=1;
- unsigned int i=0;
- BYTE status;
- j1but[0]=0;
- j2but[0]=0;
- Back=Save_Back(page,Back);
- Get_Back(1-page,Back);
- setpage(1);
- showpage(0);
- show_pic(16,55,15,"pix\\info1");
- regs.h.ah = 0x84; /* Funktion 84h */
- regs.x.dx = 1; /* Unterfunktion 00h */
- int86( 0x15, ®s, ®s ); /* Interrupt 15h aufrufen */
- if (regs.x.cflag)
- {
- gprintf(55,112,239+13,239+2,"Interrupt 15h nicht");
- gprintf(55,122,239+13,239+2,"gefunden !");
- showpage(1);
- Joystick_da=0;
- key=0;
- while (key!=' ')
- key=get_key();
- key=0;
- }
- if (Joystick_da)
- {
- for ( i=0; i<40000L; ++i )
- status=inportb(0x201);
- if (status==0xff)
- {
- gprintf(55,112,239+13,239+2,"Joystick nicht");
- gprintf(55,122,239+13,239+2,"gefunden !");
- showpage(1);
- Joystick_da=0;
- K_Clear();
- while (key!=' ')
- key=get_key();
- key=0;
- }
- }
- if (Joystick_da)
- {
- gprintf(55,82,239+13,239+2,"Bitte bewegen Sie den");
- gprintf(55,92,239+13,239+2,"Joystick in die obere");
- gprintf(55,102,239+13,239+2,"rechte Schalterstellung");
- gprintf(55,112,239+13,239+2,"und betätigen Sie einen");
- gprintf(55,122,239+13,239+2,"der beiden Buttons." );
- showpage(1);
- K_Clear();
- do
- {
- GetJoyButton( &j1but[0], &j2but[0] );
- key=get_kkey();
- }
- while (((j1but[0]|j2but[0])==0)&&(!key)) ;
- aktstick=0;
- if (!key)
- {
- warte_d(8);
- INIT_JOY=1;
- GetJoyPos( &jsp[0]); /* Position abfragen */
- maxx = jsp[aktstick].x; /* und merken */
- miny = jsp[aktstick].y;
- do /* warten, bis Taste wieder losgelassen */
- GetJoyButton( &j1but[0], &j2but[0] );
- while ( ( j1but[aktstick] | j2but[aktstick]) != 0);
- gprintf(55,152,239+13,239+2,"Bitte bewegen Sie den");
- gprintf(55,162,239+13,239+2,"Joystick in die untere");
- gprintf(55,172,239+13,239+2,"linke Schalterstellung");
- gprintf(55,182,239+13,239+2,"und betätigen Sie einen");
- gprintf(55,192,239+13,239+2,"der beiden Buttons." );
- do /* wieder auf Betätigung einer Taste warten */
- GetJoyButton( &j1but[0], &j2but[0] );
- while ( ( j1but[aktstick] | j2but[aktstick] ) == 0 );
- GetJoyPos( &jsp[0] ); /* Position abfragen */
- minx = jsp[aktstick].x; /* und merken */
- maxy = jsp[aktstick].y;
- x_plus=(maxx/10)*7;
- x_minus=(maxx/10)*3;
- y_plus=(maxy/10)*7;
- y_minus=(maxy/10)*3;
- allow_int=1;
- }
- }
- K_Clear();
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void Do_Joy(void)
- {
- JOYSTICK=1;
- set_color(0,63,0,0);
- warte_d(2);
- set_color(0,0,0,0);
- Hoch=C_HOCH;
- Runter=C_RUNTER;
- Links=C_LINKS;
- Rechts=C_RECHTS;
- Achsengleich=C_ACHSENGLEICH;
- K_Clear();
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- int get_file_int(FILE *Load_Lab)
- {
- char load_buf=0;
- int zahl;
- int t;
- t=1;
- zahl=0;
- while ((load_buf<'0')||(load_buf>'9'))
- if (!fread(&load_buf,1,1,Load_Lab))
- fehler(14,1);
- do
- {
- if ((load_buf>='0')&&(load_buf<='9'))
- {
- zahl*=t;
- if (t<10) t=10;
- zahl+=(int) (load_buf-'0');
- }
- if (!fread(&load_buf,1,1,Load_Lab))
- fehler(14,2);
- }
- while ((load_buf>='0')&&(load_buf<='9'));
- return zahl;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void load_laby(BYTE lab_col)
- {
- int xx,yy;
- char *filename="pix\\lab1";
- yy=0;
- xx=0;
- setpage(0);
- showpage(1);
- filename[7]='1'+lab_col;
- if (lab_col>9)
- filename[7]='A'+lab_col-10;
- show_pic(0,0,6,filename);
- nichts= GetVideo(0,xx,yy,33,40,nichts);
- xx+=34;
- gar_nichts= GetVideo(0,xx,yy,33,40,gar_nichts);
- xx+=34;
- l=GetVideo(0,xx,yy,33,40,l);
- xx+=34;
- r= GetVideo(0,xx,yy,33,40,r);
- xx+=34;
- o= GetVideo(0,xx,yy,33,40,o);
- xx+=34;
- u= GetVideo(0,xx,yy,33,40,u);
- xx+=34;
- lr= GetVideo(0,xx,yy,33,40,lr);
- xx+=34;
- ou= GetVideo(0,xx,yy,33,40,ou);
- xx+=34;
- lo= GetVideo(0,xx,yy,33,40,lo);
- xx=0;
- yy+=41;
- lu= GetVideo(0,xx,yy,33,40,lu);
- xx+=34;
- ro= GetVideo(0,xx,yy,33,40,ro);
- xx+=34;
- ru= GetVideo(0,xx,yy,33,40,ru);
- xx+=34;
- lro= GetVideo(0,xx,yy,33,40,lro);
- xx+=34;
- lru= GetVideo(0,xx,yy,33,40,lru);
- xx+=34;
- lou= GetVideo(0,xx,yy,33,40,lou);
- xx+=34;
- rou= GetVideo(0,xx,yy,33,40,rou);
- xx+=34;
- lrou= GetVideo(0,xx,yy,33,40,lrou);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void load_lab(int nummer, char *File_Name)
- {
- int s,t;
- FILE *Load_Lab;
- LAB_CODE test_lab;
- char load_buf;
- test_lab.Titel=TITEL;
- test_lab.Desc[0]=DESC[0];
- test_lab.Desc[1]=DESC[1];
- test_lab.Desc[2]=DESC[2];
- test_lab.Desc[3]=DESC[3];
- test_lab.Desc[4]=DESC[4];
- test_lab.Desc[5]=DESC[5];
- test_lab.Desc[6]=DESC[6];
- test_lab.Desc[7]=DESC[7];
- test_lab.Desc[8]=DESC[8];
- test_lab.lab[0]=LAB[0];
- test_lab.lab[1]=LAB[1];
- test_lab.lab[2]=LAB[2];
- test_lab.lab[3]=LAB[3];
- test_lab.lab[4]=LAB[4];
- test_lab.lab[5]=LAB[5];
- test_lab.lab[6]=LAB[6];
- test_lab.lab[7]=LAB[7];
- test_lab.lab[8]=LAB[8];
- test_lab.lab[9]=LAB[9];
- test_lab.dots[0]=DOT1[0];
- test_lab.dots[1]=DOT1[1];
- test_lab.dots[2]=DOT1[2];
- test_lab.dots[3]=DOT1[3];
- test_lab.dots[4]=DOT1[4];
- test_lab.dots[5]=DOT1[5];
- test_lab.dots[6]=DOT1[6];
- test_lab.dots[7]=DOT1[7];
- test_lab.dots[8]=DOT1[8];
- test_lab.restore[0]=DOT2[0];
- test_lab.restore[1]=DOT2[1];
- test_lab.restore[2]=DOT2[2];
- test_lab.restore[3]=DOT2[3];
- test_lab.restore[4]=DOT2[4];
- test_lab.restore[5]=DOT2[5];
- test_lab.restore[6]=DOT2[6];
- test_lab.restore[7]=DOT2[7];
- test_lab.restore[8]=DOT2[8];
- nummer++;
- if (nummer<10)
- {
- File_Name[11]='0';
- File_Name[12]=((BYTE) nummer) +'0';
- }
- if (nummer>=10)
- {
- File_Name[11]=((BYTE) nummer/10) +'0';
- File_Name[12]=((BYTE) (nummer-(nummer/10)*10)) +'0';
- }
- if ((Load_Lab = fopen(File_Name, "rb"))== NULL)
- {
- if (File_Name[6]=='l')
- {
- nummer=1;
- Level=0;
- if ((Load_Lab = fopen("level\\level01.pac", "rb"))== NULL)
- {
- fehler(13,1);
- }
- }
- else
- {
- nummer=1;
- if ((Load_Lab = fopen("level\\bonus01.pac", "rb"))== NULL)
- {
- fehler(13,2);
- }
- }
- }
- /*///////////////// Titel lesen */
- t=0;
- do
- {
- fread(&load_buf,1,1,Load_Lab);
- if ((load_buf!='*')&&(load_buf!=(BYTE)0x0a)&&(load_buf!=(BYTE)0x0d))
- {
- TITEL[t++]=load_buf;
- }
- }
- while ((load_buf!='*')&&(load_buf!=(BYTE)0x0d));
- TITEL[t]=(BYTE)0;
- while (load_buf!=(BYTE)0x0a)
- fread(&load_buf,1,1,Load_Lab);
- /*//////////////// Desc lesen */
- s=0;
- while (s<9)
- {
- t=0;
- do
- {
- fread(&load_buf,1,1,Load_Lab);
- if ((load_buf!='*')&&(load_buf!=(BYTE)0x0a)&&(load_buf!=(BYTE)0x0d))
- {
- DESC[s][t++]=load_buf;
- }
- }
- while ((load_buf!='*')&&(load_buf!=(BYTE)0x0d));
- DESC[s][t]=(BYTE)0;
- while (load_buf!=(BYTE)0x0a)
- fread(&load_buf,1,1,Load_Lab);
- s++;
- }
- /*//////////////// Lab lesen */
- s=0;
- while (s<10)
- {
- t=0;
- while (t<10)
- {
- fread(&load_buf,1,1,Load_Lab);
- if ((load_buf!='*')&&(load_buf!=(BYTE)0x0a)&&(load_buf!=(BYTE)0x0d))
- {
- LAB[s][t++]=load_buf;
- }
- }
- LAB[s][t]=(BYTE)0;
- while (load_buf!=(BYTE)0x0a)
- fread(&load_buf,1,1,Load_Lab);
- s++;
- }
- /*//////////////// Dots lesen */
- s=0;
- while (s<9)
- {
- t=0;
- while (t<9)
- {
- fread(&load_buf,1,1,Load_Lab);
- if ((load_buf!='*')&&(load_buf!=(BYTE)0x0a)&&(load_buf!=(BYTE)0x0d))
- {
- DOT1[s][t]=load_buf;
- DOT2[s][t++]=load_buf;
- }
- }
- DOT1[s][t]=(BYTE)0;
- DOT2[s][t]=(BYTE)0;
- while (load_buf!=(BYTE)0x0a)
- fread(&load_buf,1,1,Load_Lab);
- s++;
- }
- test_lab.Pac_x=get_file_int(Load_Lab);
- test_lab.Pac_y=get_file_int(Load_Lab);
- test_lab.dot1_type=get_file_int(Load_Lab);
- test_lab.dot2_type=get_file_int(Load_Lab);
- test_lab.Bonus=get_file_int(Load_Lab);
- test_lab.Bonus_x=get_file_int(Load_Lab);
- test_lab.Bonus_y=get_file_int(Load_Lab);
- test_lab.Bonus_wert=get_file_int(Load_Lab);
- test_lab.dot1_col=get_file_int(Load_Lab);
- test_lab.dot2_col=get_file_int(Load_Lab);
- test_lab.lab_col=get_file_int(Load_Lab);
- test_lab.red_x=get_file_int(Load_Lab);
- test_lab.red_y=get_file_int(Load_Lab);
- test_lab.gelb_x=get_file_int(Load_Lab);
- test_lab.gelb_y=get_file_int(Load_Lab);
- test_lab.gruen_x=get_file_int(Load_Lab);
- test_lab.gruen_y=get_file_int(Load_Lab);
- test_lab.lila_x=get_file_int(Load_Lab);
- test_lab.lila_y=get_file_int(Load_Lab);
- test_lab.house_x=get_file_int(Load_Lab);
- test_lab.house_y=get_file_int(Load_Lab);
- test_lab.dot_anzahl=get_file_int(Load_Lab);
- test_lab.geister_speed[RED-1]=get_file_int(Load_Lab);
- test_lab.geister_speed[GELB-1]=get_file_int(Load_Lab);
- test_lab.geister_speed[GRUEN-1]=get_file_int(Load_Lab);
- test_lab.geister_speed[LILA-1]=get_file_int(Load_Lab);
- test_lab.ghost_speed=get_file_int(Load_Lab);
- test_lab.eye_speed=get_file_int(Load_Lab);
- test_lab.pac_speed=get_file_int(Load_Lab);
- test_lab.pillen_laenge=get_file_int(Load_Lab);
- test_lab.Max_dot=get_file_int(Load_Lab);
- fclose(Load_Lab);
- load_laby(test_lab.lab_col);
- switch (test_lab.dot1_col)
- {
- case 0 :
- {
- setpage(0);
- showpage(1);
- show_pic(0,0,7,"pix\\dot1_1");
- break;
- }
- case 1 :
- {
- setpage(0);
- showpage(1);
- show_pic(0,0,7,"pix\\dot1_2");
- break;
- }
- case 2 :
- {
- setpage(0);
- showpage(1);
- show_pic(0,0,7,"pix\\dot1_3");
- break;
- }
- }
- switch (test_lab.dot2_col)
- {
- case 0 :
- {
- setpage(0);
- showpage(1);
- show_pic(0,0,8,"pix\\dot1_1");
- break;
- }
- case 1 :
- {
- setpage(0);
- showpage(1);
- show_pic(0,0,8,"pix\\dot1_2");
- break;
- }
- case 2 :
- {
- setpage(0);
- showpage(1);
- show_pic(0,0,8,"pix\\dot1_3");
- break;
- }
- }
- Labyrinth=test_lab;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void get_lab(int nummer)
- {
- char *File_Name="level\\level00.pac";
- load_lab(nummer,File_Name);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void get_Extra(void)
- {
- int nummer;
- char *File_Name="level\\Bonus00.pac";
- nummer=random(max_bonus);
- load_lab(nummer,File_Name);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void get_max_bonus(void)
- {
- FILE *BONUS;
- if ((BONUS = fopen("level\\bonus.pac", "rb"))== NULL)
- {
- fehler(16,1);
- }
- max_bonus=get_file_int(BONUS);
- fclose(BONUS);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- BYTE demo_game_get_key(void)
- {
- BYTE Taste;
- Taste=get_kkey();
- if (Taste) return 27;
- if ((random(100)>50)&&(dx+dy))
- return lastkey;
- switch (random(4))
- {
- case 0:
- {
- Taste=Hoch;
- if (dy>0)
- Taste=lastkey;
- break;
- }
- case 1:
- {
- Taste=Runter;
- if (dy<0)
- Taste=lastkey;
- break;
- }
- case 2:
- {
- Taste=Links;
- if (dx>0)
- Taste=lastkey;
- break;
- }
- case 3:
- {
- Taste=Rechts;
- if (dx<0)
- Taste=lastkey;
- break;
- }
- }
- return Taste;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- BYTE game_get_key(void)
- {
- union REGS regs; /* nimmt die Prozessorregister auf */
- BYTE Taste=0;
- int jx,jy;
- if (!JOYSTICK)
- return get_kkey();
- else
- {
- Taste=get_kkey();
- if ((Taste!='c')&&(Taste!='C')&&(Taste!=(BYTE)27))
- {
- Taste=0;
- regs.h.ah = 0x84; /* Funktion 84h */
- regs.x.dx = 0; /* Unterfunktion 00h */
- int86( 0x15, ®s, ®s ); /* Interrupt 15h aufrufen */
- j1but[0] = (( regs.h.al & 16 ) >> 4) ^ 1; /* Bit 4 von AL = J1B1 */
- j1but[0] = (( regs.h.al & 32 ) >> 5) ^ 1; /* Bit 5 von AL = J1B2 */
- if ((j1but[aktstick] | j2but[aktstick] ) == 1)
- Taste= ' ';
- GetJoyPos( &jsp[0] ); /* Position abfragen */
- jx = jsp[0].x;
- jy = jsp[0].y;
- if (jx>x_plus) Taste=C_RECHTS; /* 6; */
- if (jx<x_minus) Taste=C_LINKS; /* 4; */
- if (jy>y_plus) Taste=C_RUNTER; /* 2; */
- if (jy<x_minus) Taste=C_HOCH; /* 8; */
- }
- }
- return Taste;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- BYTE Get_Dir(register BYTE dir)
- {
- switch (dir)
- {
- case C_HOCH :
- {
- return (BYTE) 3;
- }
- case C_RUNTER :
- {
- return (BYTE) 0;
- }
- case C_LINKS :
- {
- return (BYTE) 1;
- }
- case C_RECHTS :
- {
- return (BYTE) 2;
- }
- case K_RECHTS :
- {
- return (BYTE) 2;
- }
- case K_HOCH :
- {
- return (BYTE) 3;
- }
- case K_RUNTER :
- {
- return (BYTE) 0;
- }
- case K_LINKS :
- {
- return (BYTE) 1;
- }
- }
- return (BYTE) 0;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void get_default(void)
- {
- FILE *def_werte;
- if ((def_werte = fopen("default.pac", "rb"))== NULL)
- {
- def_werte = fopen("default.pac", "wb");
- fwrite(&config,sizeof(config),1,def_werte);
- fclose(def_werte);
- def_werte = fopen("default.pac", "rb");
- }
- fread(&config,sizeof(config),1,def_werte);
- fclose(def_werte);
- Start_Level=config.start_l;
- i_warte=config.warte;
- # ifndef NO_SOUND
- mod_device=config.mod_device;
- mix=config.mix;
- mod_on=config.mod_on;
- # ifndef SHAREWARE_SOUND
- sample_on=config.sample_on;
- # endif
- # endif
- Ghost_fressen=config.Ghost_fressen;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void save_config(void)
- {
- FILE *Best;
- config.start_l=Start_Level;
- config.warte=i_warte;
- # ifndef NO_SOUND
- config.mod_device=mod_device;
- config.mix=mix;
- config.mod_on=mod_on;
- # ifndef SHAREWARE_SOUND
- config.sample_on=sample_on;
- # endif
- # endif
- config.Ghost_fressen=Ghost_fressen;
- Best = fopen("default.pac", "wb");
- fwrite(&config,sizeof(config),1,Best);
- fclose(Best);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void warte(void)
- {
- int i=0,ii;
- while (i++<i_warte)
- {
- ii=0;
- while (ii++<i_warte)
- ;
- }
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void Do_Input(void)
- {
- allow_int=0;
- JOYSTICK=0;
- if (key_flag)
- {
- Hoch=C_HOCH;
- Runter=C_RUNTER;
- Links=C_LINKS;
- Rechts=C_RECHTS;
- Achsengleich=C_ACHSENGLEICH;
- key_flag=0;
- }
- else
- {
- Hoch=K_HOCH;
- Runter=K_RUNTER;
- Links=K_LINKS;
- Rechts=K_RECHTS;
- Achsengleich=K_ACHSENGLEICH;
- key_flag=1;
- }
- set_color(0,0,0,63);
- warte_d(2);
- set_color(0,0,0,0);
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- void K_Clear(void)
- {
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- get_key();
- key=0;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
- BYTE get_key(void)
- {
- BYTE Taste;
- if (!JOYSTICK)
- Taste=get_kkey();
- else
- {
- Taste=get_kkey();
- GetJoyButton( &j1but[0], &j2but[0] );
- if ((j1but[aktstick] | j2but[aktstick] ) == 1)
- Taste= ' ';
- }
- if (demo)
- Taste='q';
- if (!key)
- {
- Sim_Taste++;
- switch (Sim_Taste/2000)
- {
- case 1:
- {
- if (Key_status!=1)
- {
- Taste='q';
- Key_status=1;
- }
- break;
- }
- case 2:
- {
- if (Key_status!=2)
- {
- Taste='i';
- Key_status=2;
- }
- break;
- }
- case 3:
- {
- if (Key_status!=3)
- {
- Taste='q';
- Key_status=3;
- }
- break;
- }
- case 4:
- {
- if (Key_status!=4)
- {
- Taste='d';
- Key_status=4;
- Sim_Taste=0;
- }
- break;
- }
- }
- }
- else
- {
- Sim_Taste=(Sim_Taste/1000)*1000;
- }
- return Taste;
- }
- /*
- /////////////////////////////////////////////////////////////////////
- */
-