//Slucs el barbarillo v0.4


Program Slucs;

Global
        int fpg,punt=0,nivel=1,vidas=3,control=0;
        int enemigo=0,m=7;
        int idbueno,idpunt,idgenem;
        int idefect;
        int idefect2;
        int idmusica;
End 

Private
        //int bueno;
        
End

Begin

        set_fps(40,1);
        set_title("Slucs");
        set_mode(640,480,16);
        
//Carga de graficos
        fpg=load_fpg("graficos.fpg");
        
//Carga musica
        idefect=load_song("zap.ogg");
        idefect2=load_song("enemigo.ogg");
        idmusica=load_song("musica.mod");
//Processo que cierra el juego        
        salir();
//Introduccion        
        put_screen(fpg,1);
        Loop
                If(key(_ENTER))break;End 
                delete_text(0);
                write(0,250,240,0,"Pulse Intro para jugar");
                write(0,10,460,0,"V0.4");
                frame;
        End
        clear_screen();
        put_screen(fpg,8);

        idbueno=bueno();
        tiempo();
        idpunt=puntuacion();
        idgenem=generaenemigos();
End 

//
//Personaje pricipal
//
Process bueno()
Private
        int muerto=0;
End
Begin
        x=320;y=430;file=fpg;graph=4;

        Loop
                
                If (control==0)
                 If (key(_left)) 
                   if(x<15) x=15; End
                   if(x>620) x=620; End  
                   x=x-m; 
                 End
                 IF (key(_right))
                   if(x<15) x=15; End
                   if(x>620) x=620; End  
                  x=x+m; 
                  End

//Control deslizante
                 Else
                 If (key(_left)) 
                   While(x>15)  
                     x=x-m;
                     frame;
                   End 
                 End
                 IF (key(_right))
                   While(x<620)
                     x=x+m;     
                     frame;
                   End 
                 End
                 
                End

                 If (collision(TYPE obeja)) punt+=20;play_song(idefect,0); End
                 If (collision(TYPE muerte)) 
                    vidas--;
                    muerto=0;
                    While(muerto<=50)
                        if(muerto%10==0)
                          graph=4;
                        else
                          graph=11;
                        End
                        frame;
                        muerto++;
                    End 
                    graph=4;
                    m=7;
                 End

                 If (collision(TYPE hada))        
                        play_song(idefect2,0);   
                        timer[0]=0;
//Tipo de enemigo con el que colisiona
                        enemigo=1;
                        m=2;
                        graph=5;                   
                 End    

                  If (collision(TYPE elfo))
                        play_song(idefect2,0);                     
                        timer[0]=0;
//Tipo de enemigo con el que colisiona
                        enemigo=2;
                        m=-7;
                        graph=4;      
                 End    

                 If (collision(TYPE tomate))
                        play_song(idefect2,0);            
//Grafico y velocidad normal
                        m=7;
                        graph=4;    
                        timer[0]=0;
//Tipo de enemigo con el que colisiona
                        enemigo=3;
//Cambio a control deslizante
                        control=1;
                 End
                 
                 If (collision(TYPE lechuga))  
                   vidas++;
                 End
                 FRAME;
        End
End


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

  Personajes

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

//
//Personaje enemigo obeja
//
Process obeja()
Private
  int velocidad;
End
Begin
        x=rand(5,630);y=0;graph=2;file=fpg;velocidad=rand(3,8);
        Repeat
             y+=velocidad;
             Frame;
        Until (y > 500 OR collision(type bueno))

End


//
//Personaje enemigo hada
//
Process hada()
Private
  int velocidad;
End
Begin
        x=rand(5,620);y=0;graph=3;file=fpg;velocidad=rand(3,8);
        Repeat
             y+=velocidad;
             Frame;
        Until (y > 500 OR collision(type bueno))

End

//
//Personaje enemigo elfo
//
Process elfo()
Private
  int velocidad;
End
Begin
        x=rand(5,620);y=0;graph=6;file=fpg;velocidad=rand(3,8);
        Repeat
             y+=velocidad;
             Frame;
        Until (y > 500 OR collision(type bueno))

End

//
//Personaje enemigo muerte
//
Process muerte()
Private
  int velocidad;
End
Begin
        x=rand(5,620);y=0;graph=7;file=fpg;velocidad=10;
        Repeat
             y+=velocidad;
             Frame;
        Until (y > 500 OR collision(type bueno))

End

//
//Personaje enemigo tomate
//
Process tomate()
Private
  int velocidad;
End
Begin
        x=rand(5,620);y=0;graph=9;file=fpg;velocidad=8;
        Repeat
             y+=velocidad;
             Frame;
        Until (y > 500 OR collision(type bueno))

End


//
//Esencia de lechuga
//
Process lechuga()
Private
  int velocidad;
End
Begin
        x=rand(5,620);y=0;graph=10;file=fpg;velocidad=4;
        Repeat
             y+=velocidad;
             Frame;
        Until (y > 500 OR collision(type bueno))

End


//
//Puntuacion
//
Process puntuacion()
Begin

         Loop
           delete_text(0);
           write(0,10,10,0,"Puntuacion");
           write(0,10,20,0,punt);

           write(0,500,10,0,"Pulse Esc para salir");

           write(0,150,10,0,"Vidas");
           write(0,150,20,0,vidas);
           //write_var(0,0,0,0,timer[1]);
//Niveles 
        If (punt<1000)
            write(0,90,10,0,"Nivel 1");
            nivel=1;
        End
        If (punt>=1000)
            write(0,90,10,0,"Nivel 2");
            nivel=2;
        End
        If (punt>=3000)
            write(0,90,10,0,"Nivel 3");
            nivel=3;
        End
        If (punt>=6000)
           vidas=0;
        End
        If (vidas==0)
            fade(100,0,0,5);
            let_me_alone();
            write(0,290,240,0,"Game Over");
            If (key(_esc)) exit(); End     
        End      
          frame;
        End

End

//
//Control tiempo efectos enemigo
//
Process tiempo()
Begin
  Loop

//Si ha chocado con el enemigo tipo hada
    if(enemigo==1)
      if(timer[0]>=1000)
        enemigo=0;
        m=7;
        idbueno.graph=4;
      End                              
    End
//Si ha chocado con el enemigo tipo elfo
    if(enemigo==2)
      if(timer[0]>=500)
        enemigo=0;
        m=7;
      End                              
    End
//Si ha chocado con el enemigo tipo tomate
    if(enemigo==3)
      if(timer[0]>=500)
        enemigo=0;
//Vuelta al control normal
        control=0;
      End                              
    End
    frame;
  End
End

//
//Salir
//
Process salir()
Private
  int congelado=0,bloqueo=0;
End
Begin
  Loop
    If(key(_p))
      If(bloqueo==0)
        If(congelado==1)
          fade_on();
          signal(idbueno,s_wakeup);
          signal(idpunt,s_wakeup);
          signal(idgenem,s_wakeup_tree);
          congelado=0;
          delete_text(0);
        Else
          fade(25,25,25,16);      
          signal(idbueno,s_freeze);
          signal(idpunt,s_freeze);
          signal(idgenem,s_freeze_tree);
          congelado=1;
          write(0,300,240,0,"Pausa");
        End
      bloqueo=1;
      End
    Else
      bloqueo=0;
    End
    
    If (key(_esc)) exit(); End
    frame;      
    End
End

Process generaenemigos()
Begin
//Generacion de enemigos
        Loop
                If(rand(1,100)<5)
                        obeja();
                End
                If(rand(1,100)<3)
                        hada();
                End
                If(rand(1,200)<2)
                        muerte();
                End
                 If(rand(1,2000)<2)
                        lechuga();
                End
                If(nivel>1)
                        If(rand(1,100)<3)
                                elfo();
                        End
                End
                If(nivel>2)
                        If(rand(1,100)<3)
                               tomate();
                        End
                End
                If(vidas==0)
                        break;
                End
                frame;
        End
End