//***************************************************
//** Programa: Chopper Challenge GP                **
//** Autor: Guillermo Bernaldo de Quirós (Saruman) **
//** Web: www.saruman-games.tk                     **
//** Iniciado: 1-12-05                             **
//** v.1.0: 18-1-06
//***************************************************

//********TAREAS PENDIENTES:**********************
//QUE SE GUARDEN LOS RECORDS
//SONIDOS!!!
//Y MUSICA!!!
//PROBLEMA CON GRAFICO EN PAUSA (podemos dejarlo asi xD)
//SI ESO, CAMBIAR EL CUTRE-SISTEMA DE PAUSA (va a ser que no)
//MODO "PROGRESIVO" Y/O MODO "PERSONALIZADO"
//OTROS IDIOMAS: INGLES, FRANCES, HACAPULQUEÑO...
//ORDENAR MI HABITACION

Program CHOPPER;
                                         
Const
   retardo_en_menus=7;
   retardo_entre_menus=15;
   
Global
   desplazamiento;
   recordatorio_desplazamiento;
   permiso1=retardo_en_menus;
   permiso_intro=30;
   inicio_juego=0;
   borrar_pausa=0;
   dificultad_predeterminada=1;
   tiempo;
   fin=0;
   tiempo_ultimo;
   tiempo_record1=0;
   tiempo_record2=0;
   tiempo_record3=0;
   nivel;

Begin                                 
   set_title("CHOPPER CHALLENGE GP");                         
   set_mode (320,240,8);                              
   load_fpg("graficos.fpg");                                 
   intro();                          
   Loop
      Frame;
   End; 
End;

//****************************************

Process intro();

Begin
   graph=10;
   x=160; y=120; z=500;
   titulo();
   Set_text_color(0);
   write(0,150,85,1,"Druecke START");
   Loop
      permiso_intro--;
      If(permiso_intro<0 AND key(_enter)) delete_text(0); menu1(); Break; End;
      Frame;
   End;
End;

//****************************************

Process titulo();

Begin
   graph=11;
   x=190; y=-50; z=0;
   Loop
      If(permiso_intro<0 AND key(_enter)) Break; End;
      y+=5;
      If(y>=48) y=48; End;      
      Frame;
   End;
End;

//****************************************

Process menu1(); //Menu principal
   
Begin 
   let_me_alone();
   graph=12;
   x=160; y=73;
   Set_text_color(255);
   write(0,160,70,1,"Start");
   write(0,160,100,1,"Rekorde");
   write(0,160,130,1,"Instruktionen");
   write(0,160,160,1,"Credits");
   write(0,160,190,1,"Beenden");   
   titulo_menu();
   Loop
      If(key(_esc)) exit(); End; 
      permiso1--;
      If(permiso1<=0) permiso1=0; End;
         //***
      If(key(_down) AND y==73 AND permiso1==0) y=103; permiso1=retardo_en_menus; End;
      If(key(_down) AND y==103 AND permiso1==0) y=133; permiso1=retardo_en_menus; End;
      If(key(_down) AND y==133 AND permiso1==0) y=163; permiso1=retardo_en_menus; End;
      If(key(_down) AND y==163 AND permiso1==0) y=193; permiso1=retardo_en_menus; End;
      If(key(_down) AND y==193 AND permiso1==0) y=73; permiso1=retardo_en_menus; End;
         //***
      If(key(_up) AND y==193 AND permiso1==0) y=163; permiso1=retardo_en_menus; End;
      If(key(_up) AND y==163 AND permiso1==0) y=133; permiso1=retardo_en_menus; End;
      If(key(_up) AND y==133 AND permiso1==0) y=103; permiso1=retardo_en_menus; End;
      If(key(_up) AND y==103 AND permiso1==0) y=73; permiso1=retardo_en_menus; End;
      If(key(_up) AND y==73 AND permiso1==0) y=193; permiso1=retardo_en_menus; End;  
         //***
      If(y==73 AND key(_control) AND permiso1==0) permiso1=retardo_en_menus; delete_text(0); menu4(); Break; End;   
      If(y==103 AND key(_control)) permiso1=retardo_entre_menus; delete_text(0); menu5(); Break; End;
      If(y==133 AND key(_control)) permiso1=retardo_entre_menus; delete_text(0); menu2(); Break; End;
      If(y==163 AND key(_control)) permiso1=retardo_entre_menus; delete_text(0); menu3(); Break; End;
      If(y==193 AND key(_control)) exit(); End;
         //***
      If(key(_esc)) exit(); End;
      Frame;
   End;
End; 

//****************************************

Process menu2(); //Instrucciones
Begin
   graph=12;
   x=160; y=193;
   write(0,160,70,1,"Du fliegst soweit du kannst!");
   write(0,160,90,1,"Beruehre nichts!");
   write(0,160,110,1,"Druecke A zum Abheben"); 
   write(0,160,190,1,"Zurueck");
   Loop
      permiso1--;
      If(permiso1<=0) permiso1=0; End;
      If(y==193 AND key(_control) AND permiso1==0) permiso1=retardo_entre_menus;  delete_text(0); menu1(); Break; End;
      Frame;
   End;
End;

//****************************************

Process menu3(); //Creditos
Begin
   graph=12;
   x=160; y=193;
   write(0,160,70,1,"Chopper Challenge GP - Saruman");
   write(0,160,90,1,"Graficos ripeados - Saruman");
   write(0,160,110,1,"Graficos originales - Saruman");
   write(0,160,130,1,"www.saruman-games.tk (18-1-06)");
   write(0,160,190,1,"Zurueck");
   Loop
      permiso1--;
      If(permiso1<=0) permiso1=0; End;
      If(y==193 AND key(_control) AND permiso1==0) permiso1=retardo_entre_menus; delete_text(0); menu1(); Break; End;
      Frame;
   End;
End;
      
//****************************************

Process menu4(); //Seleccionar nivel               

Begin
   graph=12;
   x=160; 
   If(dificultad_predeterminada==1) y=103; End;
   If(dificultad_predeterminada==2) y=133; End;
   If(dificultad_predeterminada==3) y=163; End;
   write(0,160,70,1,"Waehle die Schwierigkeit");
   write(0,160,100,1,"Einfach");
   write(0,160,130,1,"Mittel");
   write(0,160,160,1,"Schwer");  
   write(0,160,190,1,"Zurueck");
   Loop
      permiso1--;
      If(permiso1<=0) permiso1=0; End;
         //***
      If(key(_down) AND y==103 AND permiso1==0) y=133; permiso1=retardo_en_menus; End;
      If(key(_down) AND y==133 AND permiso1==0) y=163; permiso1=retardo_en_menus; End;
      If(key(_down) AND y==163 AND permiso1==0) y=103; permiso1=retardo_en_menus; End;
         //***
      If(key(_up) AND y==163 AND permiso1==0) y=133; permiso1=retardo_en_menus; End;
      If(key(_up) AND y==133 AND permiso1==0) y=103; permiso1=retardo_en_menus; End;
      If(key(_up) AND y==103 AND permiso1==0) y=163; permiso1=retardo_en_menus; End; 
         //***
      If(y==103 AND key(_control) AND permiso1==0) 
         dificultad_predeterminada=1; 
         tiempo=0; 
         fin=0; 
         desplazamiento=8; 
         recordatorio_desplazamiento=8; 
         inicio_juego=1;
         nivel=1; 
         delete_text(0); 
         helicoptero(); 
         Break; 
      End;
      If(y==133 AND key(_control) AND permiso1==0) 
         dificultad_predeterminada=2; 
         tiempo=0; 
         fin=0; 
         desplazamiento=10; 
         recordatorio_desplazamiento=10; 
         inicio_juego=1;
         nivel=2; 
         delete_text(0); 
         helicoptero(); 
         Break; 
      End;
      If(y==163 AND key(_control) AND permiso1==0) 
         dificultad_predeterminada=3; 
         tiempo=0; 
         fin=0; 
         desplazamiento=12; 
         recordatorio_desplazamiento=12; 
         inicio_juego=1;
         nivel=3; 
         delete_text(0); 
         helicoptero(); 
         Break; 
      End;
      Frame;
   End;
End;

//****************************************

Process menu5(); //Records
Begin
   graph=12;
   x=160; y=193;
   write(0,160,70,1,"RECORDE:");
   write(0,120,100,1,"Schwer:");
   write(0,200,100,1,tiempo_record1);
   write(0,120,120,1,"Mittel:");
   write(0,200,120,1,tiempo_record2);
   write(0,122,140,1,"Schwer:");
   write(0,200,140,1,tiempo_record3);
   write(0,160,190,1,"Zurueck");
   Loop
      permiso1--;
      If(permiso1<=0) permiso1=0; End;
      If(y==193 AND key(_control) AND permiso1==0) permiso1=retardo_entre_menus;  delete_text(0); menu1(); Break; End;
      Frame;
   End;
End;

//****************************************

Process titulo_menu();

Private
   tamano=80;
   contador_crecimiento=0;

Begin
   graph=13;
   x=160; y=30;
   Loop
      size=tamano;
      contador_crecimiento++;      
      If(contador_crecimiento>0 AND contador_crecimiento<=10) tamano=tamano+2; End;
      If(contador_crecimiento>10 AND contador_crecimiento<=20) tamano=tamano-2; End;      
      If(contador_crecimiento==20) contador_crecimiento=0; End;      
      If(inicio_juego==1) Break; End;
      Frame;
   End;
End;

//****************************************       

Process helicoptero();

Private
   velocidad=0;
   grafico;
   pausa=5;
   pausa_si_o_no=0;
   
Begin
   let_me_alone();                                           
   x=45; y=125;                           
   barrera1();        
   suelo1();
   suelo2();
   techo1();
   techo2();
   marcador();
   Loop
      If(pausa_si_o_no==0) tiempo++; End;
      define_region(1,0,0,320,220);
      graph=grafico;
      If(pausa_si_o_no==0)
         If(NOT key(_control)) grafico=1; End;
         If(key(_control)) grafico=2; End;            
	     Velocidad=velocidad+1;
	     y+=velocidad;
	  End;
	  If(pausa_si_o_no==1)
	     grafico=1;
	  End;                                     
	  If(y<12) y=12; velocidad=0; End;                       
	  If(y>225) y=225; End;                  
	  If(key(_control)) 
	     velocidad=velocidad-3; 
	  End;              
	  If(velocidad<=-7) velocidad=-7; End;
	  If(velocidad>=8) velocidad=8; End;
	  If(collision(Type suelo1) 
	     OR collision(Type suelo2)
	     OR collision(Type suelo3)
	     OR collision(Type techo1)
	     OR collision(Type techo2)
	     OR collision(Type techo3)
	     OR collision(Type barrera1)
	     OR collision(Type barrera2)
	     OR collision(Type barrera3))
	     fin=1;
	  End;
	  If(fin==1)
	     tiempo_ultimo=tiempo;
	     If(dificultad_predeterminada==1 AND tiempo_ultimo>tiempo_record1) tiempo_record1=tiempo_ultimo; End;
	     If(dificultad_predeterminada==2 AND tiempo_ultimo>tiempo_record2) tiempo_record2=tiempo_ultimo; End;
	     If(dificultad_predeterminada==3 AND tiempo_ultimo>tiempo_record3) tiempo_record3=tiempo_ultimo; End;
	     permiso1=retardo_entre_menus+5;
	     inicio_juego=0;
	     delete_text(0);
	     tu_tiempo();
	     Break;
	  End;
	  pausa--;
	  If(pausa<=0) pausa=0; End;
	  If(key(_enter) AND pausa==0 AND pausa_si_o_no==0)
	     pausa_si_o_no=1; 
	     pausa=5; 
	     desplazamiento=0;
	     borrar_pausa=0;
	     pausa();
	  End;
	  If(key(_enter) AND pausa==0 AND pausa_si_o_no==1) 
	     pausa_si_o_no=0;
	     pausa=5; 
	     desplazamiento=recordatorio_desplazamiento;
	     borrar_pausa=1;  
	  End;
	  If(key(_esc)) pausa=1; exit(); End;
	  Frame;
   End;
End;

//****************************************

Process pausa();

Begin
   graph=9;
   x=160; y=120;
   Loop
      If(borrar_pausa==1) Break; End;
      Frame;
   End;
End;

//****************************************

Process barrera1();

Private
   permiso_barrera1=0;

Begin   
   graph=rand(6,8);                     
   x=320; y=220; region=1;   
   Repeat 
      x-=desplazamiento;                   
      If(x<=60 AND permiso_barrera1==0) permiso_barrera1=1; barrera2(); End;
      If(x<=-10) Break; End;       
	  If(fin==0) Frame; End;	
   Until(fin==1);
End;

//****************************************

Process barrera2();

Private
   permiso_barrera2=0;

Begin
   graph=rand(6,8);
   x=320; y=rand(20,200); region=1;   
   Repeat
      x-=desplazamiento;
      If(x<=60 AND permiso_barrera2==0) permiso_barrera2=1; barrera3(); End;
      If(x<=-10) Break; End;
      If(fin==0); Frame; End;
   Until(fin==1);
End;   

//****************************************

Process barrera3();

Private
   permiso_barrera3=0;

Begin
   graph=rand(6,8);
   x=320; y=rand(20,200); region=1;
   Repeat
      x-=desplazamiento;
      If(x<=60 AND permiso_barrera3==0) permiso_barrera3=1; barrera2(); End;
      If(x<=-10) Break; End;
      If(fin==0) Frame; End;   
   Until(fin==1);
End;

//****************************************
     
Process suelo1();

Begin
   graph=rand(3,5);
   x=160; y=211; z=-1;
   Repeat
      x-=desplazamiento;
      If(x<=-160) suelo3(); Break; End;
      If(fin==0) Frame; End;
   Until(fin==1);
End;

//*****************************************

Process suelo2();

Begin
   graph=rand(3,5);
   x=480; y=211; z=-2;
   Repeat
      x-=desplazamiento;
      If(x<=-160) suelo2(); Break; End;
      If(fin==0) Frame; End;
   Until(fin==1);
End;

//*****************************************

Process suelo3();

Begin
   graph=rand(3,5);
   x=480; y=211; z=-3;
   Repeat
      x-=desplazamiento;
      If(x<=-160) suelo3(); Break; End;
      If(fin==0) Frame; End;
   Until(fin==1);
End;

//*****************************************

Process techo1();

Begin
   graph=rand(14,16);
   x=160; y=8; z=-1;
   Repeat
      x-=desplazamiento;
      If(x<=-160) techo3(); Break; End;
      If(fin==0) Frame; End;
   Until(fin==1);
End;

//*****************************************

Process techo2();

Begin
   graph=rand(14,16);
   x=480; y=8; z=-2;
   Repeat
      x-=desplazamiento;
      If(x<=-160) techo2(); Break; End;
      If(fin==0) Frame; End;
   Until(fin==1);
End;

//*****************************************

Process techo3();

Begin
   graph=rand(14,16);
   x=480; y=8; z=-3;
   Repeat
      x-=desplazamiento;
      If(x<=-160) techo3(); Break; End;
      If(fin==0) Frame; End;
   Until(fin==1);
End;

//*****************************************

Process tu_tiempo();

Begin
   graph=12;
   x=160; y=193;
   write(0,160,70,1,"VERLOREN:");
   write(0,160,100,1,tiempo_ultimo);
   write(0,160,190,1,"Fortsetzen");
   Loop
      permiso1--;
      If(permiso1<=0) permiso1=0; End;
      If(key(_control) AND permiso1==0)
         permiso1=retardo_entre_menus;
         delete_text(0);
         menu1();
         Break;
      End;
      Frame;
   End;
End;             

//*****************************************

Process marcador();

Begin
   write(0,42,226,1,"Zeit:");
   write_int(0,100,226,1,&tiempo);
   Loop
      Frame;
   End;
End;

//CONTINUARA... www.saruman-games.tk

