global ancho
global alto

if file exist("config.ini")=1
	open to read 1,"config.ini"
	read byte 1,res
	close file 1
else
	res=2
endif

if res=1
	ancho=640 : alto=480
endif

if res=2
	ancho=800 : alto=600
endif

if res=3
	ancho=1024 : alto=768
endif

set window off
set display mode ancho,alto,32
disable escapekey

sync on
sync rate 0
hide mouse

REM CARGA INICIAL ESTATICA
REM ---------------------------
gosub declara_variables

load image "gfx\load.png",158,1 : img.ld=158
cls
sprite 10,(ancho/2)-180,(alto/2)-32,img.ld
sync
cls
sync



cargar_bombas()
cargar_explosiones()
cargar_enemigos()
cargar_jugador()

load image "gfx\tbar.png",201,1

load image "gfx\go.png",101,1
img_go=101

load image "gfx\des.png",102,1
img_des=102

load image "gfx\st.png",151,1 : img.jugar=151
load image "gfx\op.png",152,1 : img.opciones=152
load image "gfx\ht.png",153,1 : img.ayuda=153
load image "gfx\cr.png",154,1 : img.creditos=154
load image "gfx\exit.png",155,1 : img.salir=155
load image "gfx\sp.png",156,1 : img.punto=156
load image "gfx\pnt.png",157,1 : img.mouse=157
load image "gfx\water.png",159 : img.agua=159
load image "gfx\b3d.png",160,1 : img.titulo=160
load image "gfx\sres.png",161,1 : img.res=161
load image "gfx\640.png",162,1 : img.r1=162
load image "gfx\800.png",163,1 : img.r2=163
load image "gfx\1024.png",164,1 : img.r3=164
load image "gfx\bk.png",165,1 : img.atras=165
load image "gfx\f1.png",166,1 : img.f1=166
load image "gfx\f2.png",167,1 : img.f2=167
load image "gfx\f3.png",168,1 : img.f3=168
load image "gfx\crs.png",169,1 : img.crs=169
load image "gfx\gover.png",170,1 : img.gover=170
load image "gfx\egame.png",171,1 : img.egame=171
load image "gfx\ins.png",172,1 : img.ins = 172
load image "gfx\ctr.png",173,1 : img.ctr = 173
load image "gfx\hup.png",174,1 : img.hup = 174
load image "gfx\gtz.png",175,1 : img.gtz =175

load music "sfx\inicio.mp3",2
load music "sfx\msc1.mp3",1
load music "sfx\fm.mp3",3 : mus_menu=3
load sound "sfx\mc.wav",20 : snd_menu=20

mapa.limites=cargar_modelo("media\limites.x")
mapa.salida=cargar_modelo("media\tele.x")
REM ---------------------------

REM CREA AMBIENTE
set camera range 1,2000

inc onum
make object plain onum,10000,10000
position object onum,0,-70,0
texture object onum,img.agua
xrotate object onum,-90
set object light onum,0
scale object texture onum,5,5
mapa.agua2=onum

inc onum
make object plain onum,10000,10000
texture object onum,img.agua
xrotate object onum,90
position object onum,0,-50,0
scale object texture onum,200,200
set alpha mapping on onum,50
set object light onum,0
mapa.agua1=onum
REM ---------------------


REM MENU PRINCIPAL
menu:
perder_vida()
stop music 1
jugador(1).vidas=3
loop music mus_menu
borrar_sprites()
position mouse 0,0

do
	cls
	set cursor 0,0
	mx=mousex()
	my=mousey()
	
	dibujar_fondo()
	
	rem dibuja opciones
	centro=(alto/4)-128
	sprite 10,(ancho/2)-180,alto-320-centro,img.jugar
	sprite 11,(ancho/2)-180,alto-256-centro,img.opciones
	sprite 12,(ancho/2)-180,alto-192-centro,img.ayuda
	sprite 13,(ancho/2)-180,alto-128-centro,img.creditos
	sprite 14,(ancho/2)-180,alto-64-centro,img.salir
	
	rem TITULO
	if alto=480
		sprite 15,(ancho/2)-206,0,img.titulo
	else
		sprite 15,(ancho/2)-206,alto-alto+(alto/8),img.titulo
	endif
	
	rem dibuja cursor
	sprite 5,mx,my,img.punto
	sprite 6,mx,my,img.mouse
	
	rem jugar
	if sprite collision(5,10)
		if mouseclick()=1
			play sound snd_menu
			goto juego
		endif
	endif
	
	rem opciones
	if sprite collision(5,11)
		if mouseclick()=1
			play sound snd_menu
			goto opciones
		endif
	endif
	
	rem ayuda
	if sprite collision(5,12)
		if mouseclick()=1

			if ancho=640 then sprite 65,0,0,img.f3
			if ancho=800 then sprite 65,0,0,img.f2
			if ancho=1024 then sprite 65,0,0,img.f1
			
			sprite 66,(ancho/2)-320,(alto/2)-240,img.ins
			print "Press any key to continue..."
			sync
			suspend for key
			delete sprite 66
			delete sprite 65
		endif
	endif
	
	rem creditos
	if sprite collision(5,13)
		if mouseclick()=1
			play sound snd_menu
			goto creditos
		endif
	endif
	
	rem salir
	if sprite collision(5,14)
		if mouseclick()=1
			play sound snd_menu
			wait 100
			end
		endif
	endif

	if returnkey()=1
		exit
	endif
	sync
loop

REM OPCIONES
opciones:
borrar_sprites()
position mouse 0,alto/2

do
	cls
	text 256,alto-20,"NOTE: Resolution change needs program restart to take effect."
	mx=mousex()
	my=mousey()
	
	dibujar_fondo()
	
	centro=(alto/8)-64
	sprite 10,(ancho/2)-256,0,img.res
	sprite 11,(ancho/2)-256,alto-380-centro,img.r1
	sprite 12,(ancho/2)-256,alto-280-centro,img.r2
	sprite 13,(ancho/2)-256,alto-180-centro,img.r3
	sprite 14,0,alto-64,img.atras
	
	rem dibuja cursor
	sprite 5,mx,my,img.punto
	sprite 6,mx,my,img.mouse
	
	if sprite collision(5,11)
		if mouseclick()=1
			grabar_res(1)
			play sound snd_menu
			goto menu
		endif
	endif
	
	if sprite collision(5,12)
		if mouseclick()=1
			grabar_res(2)
			play sound snd_menu
			goto menu
		endif
	endif
		
	if sprite collision(5,13)
		if mouseclick()=1
			grabar_res(3)
			play sound snd_menu
			goto menu	
		endif
	endif		
	
	if sprite collision(5,14)
		if mouseclick()=1
			play sound snd_menu
			goto menu			
		endif
	endif		
	
	sync
loop

rem CREDITOS
creditos:
borrar_sprites()
position mouse 0,alto/2

do
	cls

	mx=mousex()
	my=mousey()
	
	dibujar_fondo()
	
	sprite 10,(ancho/2)-300,0,img.crs
	sprite 11,0,alto-64,img.atras
	
	rem dibuja cursor
	sprite 5,mx,my,img.punto
	sprite 6,mx,my,img.mouse
		
	if sprite collision(5,11)
		if mouseclick()=1
			play sound snd_menu
			goto menu
		endif
	endif
		
	sync
loop

juego:
REM NIVELES
rem -----------

mapa$="maps\m1.map"
gosub nivel

mapa$="maps\m2.map"
gosub nivel

mapa$="maps\m3.map"
gosub nivel

mapa$="maps\m4.map"
gosub nivel

mapa$="maps\m5.map"
gosub nivel

mapa$="maps\m6.map"
gosub nivel

mapa$="maps\m7.map"
gosub nivel

mapa$="maps\m8.map"
gosub nivel

mapa$="maps\m9.map"
gosub nivel

mapa$="maps\m10.map"
gosub nivel


stop sound snd_idl1
stop music 1

cls
sprite 66,(ancho/2)-300,(alto/2)-240,img.gtz
sync
wait 3000

goto menu

REM ----------

REM ----------------------------------------------------------------
REM 
REM  NIVEL 
REM
REM ----------------------------------------------------------------

nivel:
borrar_sprites()
set text font "Arial"
set text size 30

cls
sprite 12,(ancho/2)-180,(alto/2)-32,img.ld
sync

apurado=0
tiempo_actual=0
preparar_nivel()
cargar_nivel(mapa$)
mapa.modocam=6
loop sound 21


REM REFRESH INICIAL
controlar_bombas()
controla_explosiones()
controla_enemigos()
controla_jugador()
controla_cuadros()
controla_camara()
controlar_sprites()
REM ----------------


wait 2000

lastim=timer()
comienzo=timer()
mapa.maxtiempo=120
play music 2
set music speed 1,100
do
   initim=timer()
   DT#=(initim-lastim)
   DT#=DT#/100
   lastim=timer()
	if DT#>0.5 then DT#=0.5

		
   set cursor 0,0
	print "FPS:",screen fps(),
	
	if timer()-comienzo>3000 and jugando=0
		jugando=1
		crear_sprite((ancho/2)-180,(alto/2)-64,img_go,20)
		loop music 1
	endif
	
	if tiempo_actual>2400 and apurado=0
		set music speed 1,150
		crear_sprite((ancho/2)-180,(alto/2)-64,img.hup,20)
		apurado=1
	endif
		
	if tiempo_actual>3000
		perder_vida()
		matar_jugador()
	endif
		
	if scancode()=1
		salir_al_menu()
	endif
	
	if jugando=1
		tiempo_actual=tiempo_actual+(1*DT#)
		controlar_bombas()
		controla_explosiones()
		controla_enemigos()
		controla_jugador()
		controla_cuadros()
	endif
	
	if jugando=2
		if jugador(1).fade<100
			jugador(1).fade=jugador(1).fade+(5*DT#)
			ghost object on jugador(1).objeto,0
			fade object jugador(1).objeto,100-jugador(1).fade
		else
			jugador(1).vidas=jugador(1).vidas+1
			return
		endif
	endif
	
	if jugando=3
		p#=p#+(1*DT#)
		if p#>20
			p#=0
			jugador(1).vidas=jugador(1).vidas-1
			if jugador(1).vidas>0
				perder_vida()
				goto nivel
			else
				game_over()
			endif
		endif
		
		controla_cuadros()
		controla_explosiones()
	endif
	
	controla_camara()
	controlar_sprites()
	
	text (ancho/2),0,"Time: "+str$(int((3000-tiempo_actual)))
	text (ancho/2),30,"Lives: "+str$(jugador(1).vidas)

   sync
loop


function grabar_res(r as byte)
	if file exist("config.ini")=1
		delete file "config.ini"
	endif
	open to write 1,"config.ini"
	write byte 1,r
	close file 1
endfunction

function dibujar_fondo()
	if ancho=1024
		sprite 9,0,0,img.f1
	endif
	
	if ancho=800
			sprite 9,0,0,img.f2
	endif
	
	if ancho=640
		sprite 9,0,0,img.f3
	endif
endfunction

function game_over()
	cls
	sprite 10,(ancho/2)-256,(alto/2)-32,img.gover
	sync
	wait 3000
	goto menu
endfunction

function salir_al_menu()
	sprite 10,(ancho/2)-256,(alto/2)-32,img.egame
	sync
	suspend for key
	delete sprite 10
	if scancode()=21
		goto menu
	endif
endfunction

function perder_vida()
	jugador(1).maxbombas=1
	jugador(1).powbomba=1
	jugador(1).vel=6
	jugador(1).autobomba=0
endfunction
 