process mover_cuerda (mc_n)
private
       cuerda[1];
       cont1;
       cont2;
begin
     cuerda[0]=draw_line(mc_n*40,     0,  (mc_n*40)+15,119);
     cuerda[1]=draw_line((mc_n*40)+15,120,mc_n*40,     239);
     for (cont1=15;cont1>0;cont1--);
         //for (cont2=0;cont2<3;cont2++)
             delete_draw(cuerda[0]);
             delete_draw(cuerda[1]);
             cuerda[0]=draw_line(mc_n*40,0,           (mc_n*40)+cont1,119);
             cuerda[1]=draw_line((mc_n*40)+cont1,120, mc_n*40,239);
             frame;
             delete_draw(cuerda[0]);
             delete_draw(cuerda[1]);
             cuerda[0]=draw_line(mc_n*40,0,           (mc_n*40)-cont1,119);
             cuerda[1]=draw_line((mc_n*40)-cont1,120, mc_n*40,239);
             frame;
         //end
     end
     delete_draw(cuerda[0]);
     delete_draw(cuerda[1]);
end

process nubes ()
begin
     file=graficos1;
     graph=3;
     flags=16;
     x=0;
     y=0;
     loop
         while (x>-320) x--; frame(300); end
         while (x<0) x++; frame(300); end
     end
end

process pajaro (x,y,x2,y2)
private
       cont1;
       cont2;
       angle2;
       salir;
begin
     file=graficos1;
     graph=4;
     if (x2>x) salir=true; end
     x=x*10;
     y=y*10;
     x2=x2*10;
     y2=y2*10;
     resolution=10;
     //x=100;
     //y=100;
     z=-2;
     cont1=4;
     loop
         //movimiento
         angle2=fget_angle(x,y,x2,y2);
         xadvance(angle2,10);
         //representacion del gráfico
         cont2++;
         if (cont2>4)
            cont2=0;
            cont1++;
            if (cont1>12) cont1=4; end
         end
         graph=cont1;
         //condicion de salida
         if (salir)
            if (x>3500) break; end
         else
             if (x<-300) break; end
         end
         frame;
     end
end

process arpa ()
private
       hijos[1];
       nota_wav[6];
       //separacion entre cuerdas=40
       cuerda[6][1]; //7 notas, dos cuerdas (una la parte superior y otra la inferior
       cuerda_cogida;
       ant_left;
       cont;
       
       temp;
begin
     while (key(_tab)) frame; end
     graficos1=load_fpg("arpa.fpg");
     nota_wav[0]=load_wav("arpa/00-do1.wav");
     nota_wav[1]=load_wav("arpa/01-mi1.wav");
     nota_wav[2]=load_wav("arpa/02-sol1.wav");
     nota_wav[3]=load_wav("arpa/03-do2.wav");
     nota_wav[4]=load_wav("arpa/04-mi2.wav");
     nota_wav[5]=load_wav("arpa/05-sol2.wav");
     nota_wav[6]=load_wav("arpa/06-do3.wav");
     map_clear(0,0,rgb(0,0,128));
     hijos[0]=nubes();
     
     //write_int(0,0,230,6,&cuerda_cogida);
     //write_int(0,0,220,6,&temp);
     mouse.file=graficos1;
     //mouse.graph=1;
     
     file=graficos1;
     //flags=4;
     put(graficos1,2,0,0);
     drawing_color(rgb(255,255,255));
     for (cont=0;cont<7;cont++)
         cuerda[cont][0]=draw_line((cont+1)*40,0,  (cont+1)*40,120);
         cuerda[cont][1]=draw_line((cont+1)*40,120,(cont+1)*40,239);
     end
     
     loop
         if (key(_backspace)) break; end
         //temp=mouse.x%40;
         
         if (mouse.left)       //comprobamos que la pantalla está pulsada
            mouse.graph=1;           //mostramos la posicion actual
            if (cuerda_cogida==0)     //miramos que no teníamos cogida ninguna cuerda
               if ((mouse.x%40)<4 ) //y ahora que estamos sobre una de ellas
                  cuerda_cogida=mouse.x/40;     //la posicion 0 no tiene cuerda, pero cuerda_cogida=0 no indica
               end                              //ninguna cuerda posible
               if ((mouse.x%40)>36)
                  cuerda_cogida=(mouse.x/40)+1;
               end
               if (cuerda_cogida>7) cuerda_cogida=0; end
            else
                cont=abs(mouse.x-(cuerda_cogida*40));
                if (cont<15)   //hemos cogido la cuerda pero no estamos suficientemente lejos para soltarla
                   delete_draw(cuerda[cuerda_cogida-1][0]);
                   delete_draw(cuerda[cuerda_cogida-1][1]);
                   cuerda[cuerda_cogida-1][0]=draw_line(cuerda_cogida*40,0,   mouse.x,mouse.y);
                   cuerda[cuerda_cogida-1][1]=draw_line(mouse.x,mouse.y, cuerda_cogida*40,239);
                else
                    play_wav(nota_wav[cuerda_cogida-1],0);    //tocar cuerda
                    //mover cuerda
                    mover_cuerda(cuerda_cogida);
                    delete_draw(cuerda[cuerda_cogida-1][0]);
                    delete_draw(cuerda[cuerda_cogida-1][1]);
                    cuerda[cuerda_cogida-1][0]=draw_line(cuerda_cogida*40,0,   cuerda_cogida*40,120);
                    cuerda[cuerda_cogida-1][1]=draw_line(cuerda_cogida*40,120, cuerda_cogida*40,239);
                    
                    cuerda_cogida=0;
                end
            end

            ant_left=true;
         else
             mouse.graph=50;
             if (ant_left && (cuerda_cogida!=0))  //antes la teníamos el puntero sobre la pantalla con una cuerda
                play_wav(nota_wav[cuerda_cogida-1],0);    //tocar cuerda
                //mover cuerda
                mover_cuerda(cuerda_cogida);
                delete_draw(cuerda[cuerda_cogida-1][0]);
                delete_draw(cuerda[cuerda_cogida-1][1]);
                cuerda[cuerda_cogida-1][0]=draw_line(cuerda_cogida*40,0,   cuerda_cogida*40,120);
                cuerda[cuerda_cogida-1][1]=draw_line(cuerda_cogida*40,120, cuerda_cogida*40,239);
                
                cuerda_cogida=0;
             end
             ant_left=false;
         end
         
         //pajaro de decorado
         if (!exists(hijos[1]))
            if (rand(0,99)<5)
               temp=rand(0,1);
               if (temp==0)
                  hijos[1]=pajaro(-40,rand(20,220),360,rand(20,220));
               else
                   hijos[1]=pajaro(360,rand(20,220),-40,rand(20,220));
               end
            end
         end
         frame;
     end
     
     unload_fpg(graficos1);
     for (cont=0;cont<7;cont++)
         delete_draw(cuerda[cont][0]);
         delete_draw(cuerda[cont][1]);
     end
     mouse.graph=0;
     clear_screen();
     signal(hijos[0],s_kill);
     if (exists(hijos[1])) signal(hijos[1],s_kill); end
     estado=0;
     frame;
end

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

process intro_arpa ()
private
       cont;
       hijos[1];
       ant_l;
       ant_r;
       fuentes1;
begin
     set_text_color(rgb(255,255,255));
     write(0,160,100,1,"Y : Instrucciones");
     write(0,160,140,1,"X : Tocar");
     fuentes1=load_fnt("comic_roja.fnt");
     loop
         if (key(_z))
            delete_text(all_text);
            graficos1=load_fpg("inst_arpa.fpg");
            file=graficos1;
            hijos[0]=arpa_flecha(0,240);
            hijos[1]=arpa_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:      //Instrucciones
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       write(fuentes1,160,3,1,"Como tocar el arpa.");
                       set_text_color(rgb(255,255,0));
                       write(0,30,50,0,"Usa el puntero como si fuera tu dedo y");
                       write(0,10,60,0,"rasga las cuerdas para que suenen.");
                       write(0,30,70,0,"Cada cuerda está asociada a una nota y");
                       write(0,10,80,0,"suena un tiempo determinado. No hace falta usar");
                       write(0,10,90,0,"ningun botón ni el mando (se siente, las F100");
                       write(0,10,100,0,"no pueden usar este instrumento).");
                       write(0,30,110,0,"Para salir, pulsa L.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              delete_text(all_text);
                              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
                  case 2:       //Como tocar (las notas)

                       write(0,160,90,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);
     unload_fnt(fuentes1);
     estado=2;
     arpa();
end
