function controla_jugador()
   xi#=object position x(jugador(1).objeto)
   zi#=object position z(jugador(1).objeto)
	jugador(1).slide=3*DT#
	
	if keystate(200)=1 and keystate(208)=0 and keystate(203)=0 and keystate(205)=0
      jugador(1).movimiento=1		
	endif
	
	if keystate(208)=1 and keystate(200)=0 and keystate(203)=0 and keystate(205)=0
      jugador(1).movimiento=2	
	endif


	if keystate(203)=1 and keystate(200)=0 and keystate(208)=0 and keystate(205)=0
      jugador(1).movimiento=3	
	endif

	if keystate(205)=1 and keystate(200)=0 and keystate(208)=0 and keystate(203)=0
      jugador(1).movimiento=4
	endif

	if controlkey()=1 and jugador(1).autobomba=1
		explotar_bombas()
	endif
	
   if spacekey()=1 and cuenta_bombas()<jugador(1).maxbombas and timer()-jugador(1).lastbomba>300 and jugando=1
      crear_bomba(get_cuadro(jugador(1).posx),get_cuadro(jugador(1).posz))
      jugador(1).lastbomba=timer()
   endif

   select jugador(1).movimiento
      case 1:
         rotate object jugador(1).objeto,0,0,0
         cx=get_cuadro(jugador(1).posx)
         cz=get_cuadro(jugador(1).posz)
         ncz=cz-1

         if ncz>0
            if cuadros(ncz,cx).objeto>0
               if abs(resto#)>6
                  resto#=get_resto_cuad#(cx,jugador(1).posx)
                  if resto#>0
                     jugador(1).posx=jugador(1).posx-(jugador(1).slide)
                  else
                     jugador(1).posx=jugador(1).posx+(jugador(1).slide)
                  endif
               endif
               
               resto2#=get_resto_cuad#(cz,jugador(1).posz)
               if resto2#<0
               	jugador(1).posz=jugador(1).posz+(jugador(1).vel*DT#)
               endif
               
            else
               resto#=get_resto_cuad#(cx,jugador(1).posx)
               if abs(resto#)>0.5
                  if resto#>0
                     jugador(1).posx=jugador(1).posx+(jugador(1).slide)
                  else
                     jugador(1).posx=jugador(1).posx-(jugador(1).slide)
                  endif
               else
                  jugador(1).posz=jugador(1).posz+(jugador(1).vel*DT#)
               endif
            endif

            else
            	
            	if ncz=0 
            		if cuadros(0,cx).objeto>0
	            		jugador(1).posz=jugador(1).posz+(jugador(1).vel*DT#)
	            		if jugador(1).posz>-16  then jugador(1).posz=-16
	            	else
	            		jugador(1).posz=jugador(1).posz+(jugador(1).vel*DT#)
	            		if jugador(1).posz>0 then jugador(1).posz=0	            			
            		endif
            		
	            endif

	            if ncz<0
	            	jugador(1).posz=jugador(1).posz+(jugador(1).vel*DT#)
	            	if jugador(1).posz>0  then jugador(1).posz=0
	            endif
         endif

      endcase

      case 2:
         rotate object jugador(1).objeto,0,180,0

         cx=get_cuadro(jugador(1).posx)
         cz=get_cuadro(jugador(1).posz)
         ncz=cz+1

         if ncz<13
            if cuadros(ncz,cx).objeto>0
               if abs(resto#)>6
                  resto#=get_resto_cuad#(cx,jugador(1).posx)
                  if resto#>0
                     jugador(1).posx=jugador(1).posx-(jugador(1).slide)
                  else
                     jugador(1).posx=jugador(1).posx+(jugador(1).slide)
                  endif
               endif
               
               resto2#=get_resto_cuad#(cz,jugador(1).posz)
               if resto2#>0
               	jugador(1).posz=jugador(1).posz-(jugador(1).vel*DT#)
               endif
               
            else
               resto#=get_resto_cuad#(cx,jugador(1).posx)
               if abs(resto#)>0.5
                  if resto#>0
                     jugador(1).posx=jugador(1).posx+(jugador(1).slide)
                  else
                     jugador(1).posx=jugador(1).posx-(jugador(1).slide)
                  endif
               else
                  jugador(1).posz=jugador(1).posz-(jugador(1).vel*DT#)
               endif
            endif

         else
            jugador(1).posz=jugador(1).posz-(jugador(1).vel*DT#)
            if jugador(1).posz<-192 then jugador(1).posz=-192
         endif

      endcase

      case 3:
         rotate object jugador(1).objeto,0,270,0
         cx=get_cuadro(jugador(1).posx)
         cz=get_cuadro(jugador(1).posz)
         ncx=cx-1

         if ncx>0
            if cuadros(cz,ncx).objeto>0
               if abs(resto#)>6
                  resto#=get_resto_cuad#(cz,jugador(1).posz)
                  if resto#>0
                     jugador(1).posz=jugador(1).posz+(jugador(1).slide)
                  else
                     jugador(1).posz=jugador(1).posz-(jugador(1).slide)
                  endif
               endif
               
               resto2#=get_resto_cuad#(cx,jugador(1).posx)
               if resto2#<0
               	jugador(1).posx=jugador(1).posx-(jugador(1).vel*DT#)
               endif
               
               else
               resto#=get_resto_cuad#(cz,jugador(1).posz)
               if abs(resto#)>0.5
                  if resto#>0
                     jugador(1).posz=jugador(1).posz-(jugador(1).slide)
                  else
                     jugador(1).posz=jugador(1).posz+(jugador(1).slide)
                  endif
               else
                  jugador(1).posx=jugador(1).posx-(jugador(1).vel*DT#)
               endif
            endif

            else
            	if ncx=0
            		if cuadros(cz,ncx).objeto>0
         				resto#=get_resto_cuad#(1,jugador(1).posx)

         				if resto#<0
         					jugador(1).posx=jugador(1).posx-(jugador(1).vel*DT#)
         				endif
            		else
            			jugador(1).posx=jugador(1).posx-(jugador(1).vel*DT#)
	            		if jugador(1).posx<0 then jugador(1).posx=0   
            		endif
            			
            	endif
            	
            	if ncx<0
	            	jugador(1).posx=jugador(1).posx-(jugador(1).vel*DT#)
	            	if jugador(1).posx<0 then jugador(1).posx=0
	            endif
         endif

      endcase

      case 4:
         rotate object jugador(1).objeto,0,90,0
         cx=get_cuadro(jugador(1).posx)
         cz=get_cuadro(jugador(1).posz)
         ncx=cx+1

         if ncx<35
            if cuadros(cz,ncx).objeto>0
               resto#=get_resto_cuad#(cz,jugador(1).posz)
               if abs(resto#)>6
                  if resto#>0
                     jugador(1).posz=jugador(1).posz+(jugador(1).slide)
                  else
                     jugador(1).posz=jugador(1).posz-(jugador(1).slide)
                  endif
               endif  
               
               resto2#=get_resto_cuad#(cx,jugador(1).posx)
               if resto2#>0
               	jugador(1).posx=jugador(1).posx+(jugador(1).vel*DT#)
               endif

               
            else
               resto#=get_resto_cuad#(cz,jugador(1).posz)
               if abs(resto#)>0.5
                  if resto#>0
                     jugador(1).posz=jugador(1).posz-(jugador(1).slide)
                  else
                     jugador(1).posz=jugador(1).posz+(jugador(1).slide)
                  endif
               else
                  jugador(1).posx=jugador(1).posx+(jugador(1).vel*DT#)
               endif

            endif

         else
            jugador(1).posx=jugador(1).posx+(jugador(1).vel*DT#)
            if jugador(1).posx>544 then jugador(1).posx=544
         endif
      endcase

   endselect

	if jugador(1).movimiento>0
		set sound volume snd_idl1,100
	else
		set sound volume snd_idl1,90
	endif
   rem Resetea
   jugador(1).movimiento=0

   rem aplico movimiento
   position object jugador(1).objeto,jugador(1).posx,0,jugador(1).posz

   Rem revisa colisiones con bombas
   for i = 0 to 10
      if bombas(i).activa=1
         if distancia(bombas(i).objeto,jugador(1).objeto)<14
            if bombas(i).chocada=0
               colision=1
            endif
         else
            bombas(i).chocada=0
      endif
      endif
   next i

   rem si colisiona vuelve para atras
   if colision=1
      jugador(1).posx=xi#
      jugador(1).posz=zi#
      position object jugador(1).objeto,xi#,0,zi#
      colision=0
   endif

endfunction


function matar_jugador()
	
	if jugador(1).vivo>0
		cx=get_cuadro(jugador(1).posx)
		cz=get_cuadro(jugador(1).posz)
		play sound 11
		crear_explosion(cx,cz)
		hide object jugador(1).objeto
		crear_sprite((ancho/2)-180,(alto/2)-64,img_des,20)
		jugando=3
		jugador(1).vivo=0
	endif
	
endfunction

function cargar_jugador()
	load sound "sfx\idl1.wav",21
	snd_idl1=21
	jugador(1).objeto=cargar_modelo("media\bman.x")
	jugador(1).maxbombas=1
	jugador(1).powbomba=1
	jugador(1).vel=6
	jugador(1).slide=1
	jugador(1).vivo=1
endfunction
 
 function controla_camara()
 	if keystate(59)=1
 		mapa.modocam=1
 		mapa.camzoom=0
 	endif
 	
 	if keystate(60)=1
 		mapa.modocam=2
 		mapa.camzoom=0
 	endif
 	
 	 if keystate(61)=1
 		mapa.modocam=3
 		mapa.camzoom=0
 	 endif
 	 	
 	 if keystate(62)=1
 		mapa.modocam=4
 		mapa.camzoom=0
 	 endif
 	 
 	  if keystate(63)=1
 		mapa.modocam=5
 		mapa.camzoom=0
 	  endif
 	  
 	  if keystate(64)=1
 		mapa.modocam=6
 		mapa.camzoom=0
 	  endif
 	   	  
 	  if keystate(65)=1
 		mapa.modocam=7
 		mapa.camzoom=0
 	  endif
 	  
 	  if keystate(66)=1
 		mapa.modocam=8
 		mapa.camzoom=0
 	  endif
 	 
 	 if keystate(74)=1
 	 		mapa.camzoom=mapa.camzoom-(DT#*5)
 	 endif
 	 
 	if keystate(78)=1
 	 		mapa.camzoom=mapa.camzoom+(DT#*5)
 	endif
 	  	 
 	camx#=camera position x()
 	camz#=camera position z()
 	px#=object position x( jugador(1).objeto )
 	pz#=object position z( jugador(1).objeto )
 	
 	select mapa.modocam
 		case 1
 			rotate camera 90,0,0
 			position camera jugador(1).posx,200,jugador(1).posz
 			move camera mapa.camzoom
 		endcase

 		case 2
 			rotate camera 90,0,0
 			position camera jugador(1).posx,175,jugador(1).posz
 			move camera mapa.camzoom
 		endcase
 		
 		 case 3
 		 	rotate camera 90,0,0
 			position camera jugador(1).posx,150,jugador(1).posz
 			move camera mapa.camzoom
 		 endcase
 		 		
 		 case 4
 		 	rotate camera 90,0,0
 			position camera jugador(1).posx,125,jugador(1).posz
 			move camera mapa.camzoom
 		 endcase
 		 
 		 case 5
 		 	rotate camera 60,0,0
 		 	position camera jugador(1).posx,150,jugador(1).posz-100
 		 	move camera mapa.camzoom
 		 endcase
 		 
 		  case 6
 		 	rotate camera 60,0,0
 		 	position camera jugador(1).posx,200,jugador(1).posz-100
 		 	move camera mapa.camzoom
 		  endcase
 		  		 
 		  		 
 		  case 7
 		 	rotate camera 60,0,0
 		 	position camera jugador(1).posx,250,jugador(1).posz-100
 		 	move camera mapa.camzoom
 		  endcase
 		  
 		  case 8
 		 	rotate camera 60,0,0
 		 	position camera jugador(1).posx,250,jugador(1).posz-150
 		 	move camera mapa.camzoom
 		 endcase
 	endselect
 endfunction
 