process ocarina_imagen (x,y,file,graph)
begin
     signal(id,s_freeze);
     frame;
     //loop frame; end
end

process ocarina_imagen_nota (x,y,file,graph)
begin
     alpha=0;
     for (alpha=0;alpha<255;alpha+=20)
         frame;
     end
     alpha=255;
     signal(id,s_freeze);
     frame;
end

process ocarina ()
private
       hijos[12];
       nota_pulsada;
       nota;                 //reservada para los botones A, B, X, Y y SELECT
       nota_ant;             //reservada para los botones A, B, X, Y y SELECT
       nota_final;           //reservada para los botones Up, Down, L y R
       nota_final_ant;       //reservada para los botones Up, Down, L y R
       nota_wav[18][1];
       nota_chan;
       
       //nueva_nota;         //indica si hemos cambiado de nota 0=no; 1=si (boton); 2=si (alterada con LRUD)
       //continuar_sonido;   //Indica si el sonido empieza o continua (boleano)
       pos_nota;
begin
     while (key(_backspace)) frame; end
     //write_int(0,0,0,0,&nueva_nota);
     graficos1=load_fpg("ocarina.fpg");
     put(graficos1,1,0,0);
     put(graficos1,1,0,120);
     nota_wav[0][0]=load_wav("ocarina/00a-La_A.wav");
     nota_wav[0][1]=load_wav("ocarina/00b-La_A.wav");
     nota_wav[1][0]=load_wav("ocarina/01a-LaS_AS.wav");
     nota_wav[1][1]=load_wav("ocarina/01b-LaS_AS.wav");
     nota_wav[2][0]=load_wav("ocarina/02a-Si_B.wav");
     nota_wav[2][1]=load_wav("ocarina/02b-Si_B.wav");
     nota_wav[3][0]=load_wav("ocarina/03a-Do_C.wav");
     nota_wav[3][1]=load_wav("ocarina/03b-Do_C.wav");
     nota_wav[4][0]=load_wav("ocarina/04a-DoS_CS.wav");
     nota_wav[4][1]=load_wav("ocarina/04b-DoS_CS.wav");
     nota_wav[5][0]=load_wav("ocarina/05a-Re_D.wav");
     nota_wav[5][1]=load_wav("ocarina/05b-Re_D.wav");
     nota_wav[6][0]=load_wav("ocarina/06a-ReS_DS.wav");
     nota_wav[6][1]=load_wav("ocarina/06b-ReS_DS.wav");
     nota_wav[7][0]=load_wav("ocarina/07a-Mi_E.wav");
     nota_wav[7][1]=load_wav("ocarina/07b-Mi_E.wav");
     nota_wav[8][0]=load_wav("ocarina/08a-Fa_F.wav");
     nota_wav[8][1]=load_wav("ocarina/08b-Fa_F.wav");
     nota_wav[9][0]=load_wav("ocarina/09a-FaS_FS.wav");
     nota_wav[9][1]=load_wav("ocarina/09b-FaS_FS.wav");
     nota_wav[10][0]=load_wav("ocarina/10a-Sol_G.wav");
     nota_wav[10][1]=load_wav("ocarina/10b-Sol_G.wav");
     nota_wav[11][0]=load_wav("ocarina/11a-SolS_GS.wav");
     nota_wav[11][1]=load_wav("ocarina/11b-SolS_GS.wav");
     nota_wav[12][0]=load_wav("ocarina/12a-La_A.wav");
     nota_wav[12][1]=load_wav("ocarina/12b-La_A.wav");
     nota_wav[13][0]=load_wav("ocarina/13a-LaS_AS.wav");
     nota_wav[13][1]=load_wav("ocarina/13b-LaS_AS.wav");
     nota_wav[14][0]=load_wav("ocarina/14a-Si_B.wav");
     nota_wav[14][1]=load_wav("ocarina/14b-Si_B.wav");
     nota_wav[15][0]=load_wav("ocarina/15a-Do_C.wav");
     nota_wav[15][1]=load_wav("ocarina/15b-Do_C.wav");
     nota_wav[16][0]=load_wav("ocarina/16a-DoS_CS.wav");
     nota_wav[16][1]=load_wav("ocarina/16b-DoS_CS.wav");
     nota_wav[17][0]=load_wav("ocarina/17a-Re_D.wav");
     nota_wav[17][1]=load_wav("ocarina/17b-Re_D.wav");
     nota_wav[18][0]=load_wav("ocarina/18a-ReS_DS.wav");
     nota_wav[18][1]=load_wav("ocarina/18a-ReS_DS.wav");
     
     hijos[0]=test_buttons();
     loop
         if (gp2x_keys[4]==1)          //comprobamos espacio
            nota=3;
            nota_pulsada=_space;
            if (pos_nota==0)
               for (x=1;x<=12;x++)
                   signal(hijos[x],s_kill);
               end
            end
            hijos[1+pos_nota]=ocarina_imagen_nota(100+((pos_nota%6)*35),110+(120*(pos_nota/6)),graficos1,2);
            pos_nota++;
         end
         if (gp2x_keys[3]==1)          //comprobamos x
            nota=6;
            nota_pulsada=_x;
            if (pos_nota==0)
               for (x=1;x<=12;x++)
                   signal(hijos[x],s_kill);
               end
            end
            hijos[1+pos_nota]=ocarina_imagen_nota(100+((pos_nota%6)*35),80+(120*(pos_nota/6)),graficos1,3);
            pos_nota++;
         end
         if (gp2x_keys[1]==1)          //comprobamos b (alt)
            nota=10;
            nota_pulsada=_alt;
            if (pos_nota==0)
               for (x=1;x<=12;x++)
                   signal(hijos[x],s_kill);
               end
            end
            hijos[1+pos_nota]=ocarina_imagen_nota(100+((pos_nota%6)*35),65+(120*(pos_nota/6)),graficos1,4);
            pos_nota++;
         end
         if (gp2x_keys[0]==1)          //comprobamos a (ctrl)
            nota=12;
            nota_pulsada=_control;
            if (pos_nota==0)
               for (x=1;x<=12;x++)
                   signal(hijos[x],s_kill);
               end
            end
            hijos[1+pos_nota]=ocarina_imagen_nota(100+((pos_nota%6)*35),50+(120*(pos_nota/6)),graficos1,5);
            pos_nota++;
         end
         if (gp2x_keys[2]==1)          //comprobamos y (z)
            nota=15;
            nota_pulsada=_z;
            if (pos_nota==0)
               for (x=1;x<=12;x++)
                   signal(hijos[x],s_kill);
               end
            end
            hijos[1+pos_nota]=ocarina_imagen_nota(100+((pos_nota%6)*35),35+(120*(pos_nota/6)),graficos1,6);
            pos_nota++;
         end
         
         if (pos_nota==12)
            pos_nota=0;
         end
         
         //***********************************************************

         nota_final=nota;
         if (key(_up)) nota_final+=2; end
         if (key(_tab)) nota_final++; end
         if (key(_backspace)) nota_final--; end
         if (key(_down)) nota_final-=2; end
         
         if (nota_final!=nota_final_ant)       //hemos cambiado de nota
            nota_final_ant=nota_final;
            if (is_playing_wav(nota_chan))     //primero quitamos sonido anterior
               stop_wav(nota_chan);
            end
            //y ahora hay que poner el sonido nuevo (si la tecla aun sigue pulsada)
            if (key(nota_pulsada))
               //veamos si es que hemos cambiado de nota o estamos alterando la actual
               if (nota!=nota_ant)
                  nota_chan=play_wav(nota_wav[nota_final][0],0);
                  nota_ant=nota;
               else
                   nota_chan=play_wav(nota_wav[nota_final][1],0);
               end
            end
         else                                  //no hemos cambiado de nota, debemos mantenerla
             if (key(nota_pulsada))
                if (!is_playing_wav(nota_chan))
                   nota_chan=play_wav(nota_wav[nota_final][1],0);
                end
             else
                 if (is_playing_wav(nota_chan))     //primero quitamos sonido anterior
                    stop_wav(nota_chan);
                 end
             end
         end
            
            

         
         if (key(_a) && key(_s)) break; end
         
         frame;
     end

     if (is_playing_wav(nota_chan)) stop_wav(nota_chan); end
     for (x=0;x<=18;x++)
         unload_wav(nota_wav[x][0]);
         unload_wav(nota_wav[x][1]);
     end
     for (x=0;x<=12;x++)
         if (exists(hijos[x])) signal(hijos[x],s_kill); end
     end
     clear_screen();
     unload_fpg(graficos1);
     estado=0;
     frame;
end


//*****************************************************************************
//  MENU INICIAL
//*****************************************************************************
process ocarina_flecha (x,y)
begin
     file=graficos1;
     flags=4;
     z=-600;
     signal(id,s_freeze);
     frame;
     //loop frame; end
end

process intro_ocarina ()
private
       cont;
       hijos[11];
       textos[9];
       ant_l;
       ant_r;
begin
     set_text_color(rgb(255,255,255));
     write(0,160,100,1,"Y : Instrucciones");
     write(0,160,140,1,"X : Tocar");
     loop
         if (key(_z))
            delete_text(all_text);
            graficos1=load_fpg("inst_ocarina.fpg");
            file=graficos1;
            hijos[0]=ocarina_flecha(0,240);
            hijos[1]=ocarina_flecha(320,240);
            while (cont<3)
                  switch (cont)
                  case 0:      //foto: como coger la consola
                       x=480;
                       y=120;
                       graph=3;
                       hijos[0].graph=0;
                       hijos[1].graph=2;
                       while (x!=160)
                             x-=5;
                             frame;
                       end
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              while (x>=-160)
                                    x-=5;
                                    frame;
                              end
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           frame;
                       end
                  end
                  case 1:      //Posicion de los dedos
                       graph=0;
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       
                       hijos[2]=ocarina_imagen(120-250,25,graficos1,4);
                       hijos[3]=ocarina_imagen(40-250,75,graficos1,5);
                       hijos[4]=ocarina_imagen(80-250,125,graficos1,6);
                       hijos[5]=ocarina_imagen(80-250,175,graficos1,7);
                       hijos[6]=ocarina_imagen(80-250,225,graficos1,13);
                       hijos[7]=ocarina_imagen(235+250,50,graficos1,8);
                       hijos[8]=ocarina_imagen(203+250,82,graficos1,9);
                       hijos[9]=ocarina_imagen(267+250,82,graficos1,10);
                       hijos[10]=ocarina_imagen(235+250,114,graficos1,11);
                       hijos[11]=ocarina_imagen(208+250,174,graficos1,12);
                       set_text_color(rgb(0,127,255));
                       textos[0]=write(0,10-250,45,0,"Sube la nota medio tono.");
                       textos[1]=write(0,10-250,95,0,"Baja la nota medio tono.");
                       textos[2]=write(0,10-250,145,0,"Sube la nota un tono.");
                       textos[3]=write(0,30-250,195,0,"Baja la nota un tono.");
                       textos[4]=write(0,120,225+125,0,"Pulsar a la vez para SALIR.");
                       textos[5]=write(0,255+250,50,3,"DO/C");
                       textos[6]=write(0,220+250,82,3,"LA/A");
                       textos[7]=write(0,285+250,82,3,"SOL/G");
                       textos[8]=write(0,255+250,114,3,"RE#/D#");
                       textos[9]=write(0,228+250,174,3,"DO/C");
                       for (x=0;x<=250;x+=2)
                           hijos[2].x+=2;
                           hijos[3].x+=2;
                           hijos[4].x+=2;
                           hijos[5].x+=2;
                           hijos[6].x+=2;
                           hijos[7].x-=2;
                           hijos[8].x-=2;
                           hijos[9].x-=2;
                           hijos[10].x-=2;
                           hijos[11].x-=2;
                           move_text(textos[0],10-250+x,45);
                           move_text(textos[1],10-250+x,95);
                           move_text(textos[2],10-250+x,145);
                           move_text(textos[3],30-250+x,195);
                           move_text(textos[4],120,225+125-(x/2));
                           move_text(textos[5],255+250-x,50);
                           move_text(textos[6],220+250-x,82);
                           move_text(textos[7],285+250-x,82);
                           move_text(textos[8],255+250-x,114);
                           move_text(textos[9],228+250-x,174);
                           frame;
                       end
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                       for (x=0;x<=250;x+=2)
                           hijos[2].x-=2;
                           hijos[3].x-=2;
                           hijos[4].x-=2;
                           hijos[5].x-=2;
                           hijos[6].x-=2;
                           hijos[7].x+=2;
                           hijos[8].x+=2;
                           hijos[9].x+=2;
                           hijos[10].x+=2;
                           hijos[11].x+=2;
                           move_text(textos[0],10-x,45);
                           move_text(textos[1],10-x,95);
                           move_text(textos[2],10-x,145);
                           move_text(textos[3],30-x,195);
                           move_text(textos[4],120,225+(x/2));
                           move_text(textos[5],255+x,50);
                           move_text(textos[6],220+x,82);
                           move_text(textos[7],285+x,82);
                           move_text(textos[8],255+x,114);
                           move_text(textos[9],228+x,174);
                           frame;
                       end
                       for (x=2;x<=11;x++) signal(hijos[x],s_kill); end
                       delete_text(all_text);
                  end
                  case 2:       //Preparado
                       write(0,180,120,1,"Pulsa R para empezar.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              delete_text(all_text);
                              signal(hijos[0],s_kill);
                              signal(hijos[1],s_kill);
                              unload_fpg(graficos1);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  end //switch
            end   //while (cont<4)
         end      //if (key(_z))

         //empieza el instrumento
         if (key(_x) || (cont==3))
            break;
         end

         frame;
     end
     delete_text(all_text);
     estado=2;
     ocarina();
end
