Program pixbros;
Local
	BUG;
	anim;
	grav;
	toca_down;
		toca_down_left;
		toca_down_right;
	toca_left;
	toca_right;
	toca_up;
		toca_up_left;
		toca_up_right;
	tipo; //0=mario & luigi, 1=seta, ...
	item;
Global
	g_anim;
	fpgs[4];
	estado;
	suelo;
	snd[13];
	mapa_scroll;
	mapa_durezas;
	id_jugador;
	p1_puntos;
	p1_vidas;
	p1_monedas;
	p1_mundo;

	p2_puntos;
	p2_vidas;
	p2_monedas;
	p2_mundo;

	tiempo;
	turno;
	
Begin
        set_mode(320,240,8);
	set_fps(60,9);
	carga_fpgs();
	carga_wavs();
	anim_global();
	pruebas();
End

include "pruebas.pix";

Process anim_global();
Begin
	Loop
		g_anim+=2;
		If(g_anim=>89) g_anim=0; End
		Frame;
	End
End

Process carga_fpgs();
Begin
	fpgs[0]=load_fpg("./fpg/mario.fpg");
//	fpgs[1]=load_fpg("./fpg/luigi.fpg");
//	fpgs[2]=load_fpg("./fpg/items.fpg");
//	fpgs[3]=load_fpg("./fpg/enemigos.fpg");
	fpgs[4]=load_fpg("./fpg/tiles.fpg");
End

Process carga_wavs();
Private
	i;
Begin
	While(i<14)
		snd[i]=load_wav("./wav/"+itoa(i)+".wav");
		i++;
		Frame(25);
	End
End

Process pon_mod(i);
Begin
	stop_song();
	play_song(load_song("./mod/"+itoa(i)+".it"),-1);
End

Process sonido(i);
Begin
	play_wav(snd[i],0);
End

Process jugador(x,y);
Private
	subiendo;
	inercia;
	saltando;
	x_out;
	y_out;
	alto_queco;
	ancho_queco;
Begin
	file=fpgs[0];
	flags=1;
	ctype=c_scroll;
	write_int(0,0,0,0,OFFSET grav);
	Loop
// durezas
		ancho_queco=graphic_info(file,graph,g_wide);
		alto_queco=graphic_info(file,graph,g_height);
		toca_down=map_get_pixel(0,mapa_durezas,x,y+alto_queco/2);
			toca_down_left=map_get_pixel(0,mapa_durezas,x-ancho_queco/2,y+alto_queco/2);
			toca_down_right=map_get_pixel(0,mapa_durezas,x+ancho_queco/2,y+alto_queco/2);
		toca_left=map_get_pixel(0,mapa_durezas,x-ancho_queco/2,y);
		toca_right=map_get_pixel(0,mapa_durezas,x+ancho_queco/2,y);
		toca_up=map_get_pixel(0,mapa_durezas,x,y-alto_queco/2);
			toca_up_left=map_get_pixel(0,mapa_durezas,x-ancho_queco/2+1,y-alto_queco/2);
			toca_up_right=map_get_pixel(0,mapa_durezas,x+ancho_queco/2-1,y-alto_queco/2);
// horizontal
		If((key(_left) AND !key(_right)) OR (!key(_left) AND key(_right)) OR (inercia>0 OR inercia<0))
			If(estado==0)
				If(anim<=30) graph=4; End
				If(anim>30 AND anim<=60) graph=5; End
				If(anim>60) graph=6; End
				If(inercia>20 AND key(_left)) graph=3; End
				If(inercia<-20 AND key(_right)) graph=3; End
			End
			If(estado==1)
				If(anim<=30) graph=17; End
				If(anim>30 AND anim<=60) graph=18; End
				If(anim>60) graph=19; End
				If(inercia>20 AND key(_left)) graph=16; End
				If(inercia<-20 AND key(_right)) graph=16; End
			End
			If(estado==2)
				If(anim<=30) graph=33; End
				If(anim>30 AND anim<=60) graph=34; End
				If(anim>60) graph=35; End
				If(inercia>20 AND key(_left)) graph=31; End
				If(inercia<-20 AND key(_right)) graph=31; End
			End
			If(key(_left) AND toca_left!=suelo) inercia-=2; If(saltando==0) flags=0; End End
			If(key(_right) AND toca_right!=suelo) inercia+=2; If(saltando==0) flags=1; End End
		End
		If(inercia>0 AND !key(_right)) inercia--; End
		If(inercia<0 AND !key(_left)) inercia++; End
		If(key(_down))
			If(estado==1) graph=14; End
			If(estado==2) graph=29; End
		End
		If(!key(_left) AND !key(_right) AND !key(_down) AND subiendo==0 AND (inercia>-4 AND inercia<4) OR (key(_left) AND key(_right)))
			If(estado==0) graph=7; End
			If(estado==1) graph=20; End
			If(estado==2) graph=36; End
		End
		If(inercia<-50 AND !key(_alt)) inercia=-50; End
		If(inercia>50 AND !key(_alt)) inercia=50; End
		If(inercia<-80) inercia=-80; End
		If(inercia>80) inercia=80; End
		x_out=x+inercia/20;
		While(toca_right!=suelo AND x<x_out)
			toca_right=map_get_pixel(0,mapa_durezas,x+ancho_queco/2,y);
			x++;
		End
		While(x>x_out AND toca_left!=suelo)
			toca_left=map_get_pixel(0,mapa_durezas,x-ancho_queco/2,y);
			x--;
		End		
		While(x<scroll.camera.x-152 OR x<8) x++; End
		If(key(_alt)) anim+=8; Else anim+=4; End
// vertical
		If(toca_down==suelo) grav=0; saltando=0; End
		If(key(_control) AND subiendo==0 AND (toca_down==suelo OR toca_down_left==suelo OR toca_down_right==suelo) AND saltando==0)
			sonido(8);
			saltando=1;
			p1_puntos+=100;
			If(inercia>60) grav=-70; Else grav=-40; End
			y-=2;
		End
		If(key(_space)) while(key(_space)) size+=5; frame; end item=1; end
		If(key(_control) AND saltando==1)
			grav-=10;
			If(grav<-90 AND inercia<60) saltando=-1; End
			If(grav<-110 AND inercia>60) saltando=-1; End
		End
		If((toca_up==suelo OR toca_up_left==suelo OR toca_up_right==suelo) AND saltando!=0 AND grav<40) saltando=-1; grav=40; End
		If(saltando==1 AND (!key(_control) OR grav<-140)) saltando=-1; End
		If(key(_s)) estado=-1; End // PRUEBAS
		If(toca_down!=suelo AND subiendo!=1 AND saltando!=1)
			grav+=4;
		End
		y_out=y+grav/20;
		While(toca_down!=suelo AND y<y_out)
			toca_down=map_get_pixel(0,mapa_durezas,x,y+alto_queco/2);
			y++;
		End
		While(y>y_out AND (toca_up!=suelo AND toca_up_left!=suelo AND toca_up_right!=suelo))
			toca_up=map_get_pixel(0,mapa_durezas,x,y-alto_queco/2);		
			toca_up_left=map_get_pixel(0,mapa_durezas,x-ancho_queco/2+1,y-alto_queco/2);
			toca_up_right=map_get_pixel(0,mapa_durezas,x+ancho_queco/2-1,y-alto_queco/2);
			y--;
		End
		If(y>240) estado=-1; End
		If(anim>89 OR inercia==0) anim=0; End
		If(saltando!=0)
			If(estado==0) graph=2; End
			If(estado==1) graph=15; End
			If(estado==2) graph=30; End
		End
		If(estado==-1) Break; End
//
include "./items.pix";
//
		If((inercia>0 AND toca_right==suelo) OR ((inercia<0 AND toca_left==suelo))) inercia=0; End
		Frame;	
	End
	sonido(4);
	stop_song();
	graph=1;
	Frame(5000);
	grav=-80;
	While(y<260)
		y+=grav/20;
		grav+=3;
		Frame;
	End
End


Process enemigo(x,y,tipo);
Private
	grafs[3]; // 0 y 1 movimiento, 2 muerte, 3 ataque
	direccion;
Begin
	If(tipo==1) grafs[0]=1; grafs[1]=1; grafs[2]=2; End // el goomba de toa la vida
	If(tipo==2) grafs[0]=11; grafs[1]=11; grafs[2]=12; End // el goomba 2
	If(tipo==3) grafs[0]=21; grafs[1]=21; grafs[2]=22; End // el goomba 3
//
	If(tipo==4) grafs[0]=3; grafs[1]=4; grafs[2]=0; End // tortuga voladora
	If(tipo==5) grafs[0]=5; grafs[1]=6; grafs[2]=0; End // tortuga 
	If(tipo==6) grafs[0]=7; grafs[1]=8; grafs[2]=0; End // tortuga ostiada
	If(tipo==7) grafs[0]=13; grafs[1]=14; grafs[2]=0; End // tortuga voladora2
	If(tipo==8) grafs[0]=15; grafs[1]=16; grafs[2]=0; End // tortuga 2
	If(tipo==9) grafs[0]=17; grafs[1]=18; grafs[2]=0; End // tortuga ostiada2
	If(tipo==10) grafs[0]=23; grafs[1]=24; grafs[2]=0; End // tortuga voladora
	If(tipo==11) grafs[0]=25; grafs[1]=26; grafs[2]=0; End // tortuga 
	If(tipo==12) grafs[0]=27; grafs[1]=29; grafs[2]=0; End // tortuga ostiada
//
	If(tipo==13) grafs[0]=10; grafs[1]=10; grafs[2]=9; grafs[3]=9; End // medusa, agua
//
	If(tipo==14) grafs[0]=19; grafs[1]=20; grafs[2]=0; End // carnivora 1
	If(tipo==15) grafs[0]=30; grafs[1]=31; grafs[2]=0; End // carnivora 2
//
	If(tipo==16) grafs[0]=32; grafs[1]=32; grafs[2]=33; grafs[3]=33; End // lakituu!!!
//
	If(tipo==17) grafs[0]=34; grafs[1]=35; grafs[2]=0; grafs[3]=36; End // bixo del martillo
	If(tipo==18) grafs[0]=43; grafs[1]=44; grafs[2]=0; grafs[3]=45; End // bixo del martillo2
//
	If(tipo==19) grafs[0]=38; grafs[1]=39; grafs[2]=0; End // tortuga caparazon1
	If(tipo==20) grafs[0]=40; grafs[1]=40; grafs[2]=0; End // tortuga caparazon1
	If(tipo==21) grafs[0]=47; grafs[1]=48; grafs[2]=0; End // tortuga caparazon2
	If(tipo==22) grafs[0]=49; grafs[1]=49; grafs[2]=0; End // tortuga caparazon2
	Loop
		include "./goomba.pix";
		If(anim<29) graph=grafs[0]; Else graph=grafs[1]; End
		anim++;
		If(anim>59) anim=0; End
		Frame;		
	End
//
// despues de muerto
	If(tipo==4 OR tipo==5 OR tipo==7 OR tipo==8 OR tipo==10 OR tipo==11)
		enemigo(x,y,tipo+1);
	End
End

Process marcadores();
Begin
//	puntos
	If(turno==0) write(0,30,10,0,"GABBA"); write_int(0,30,18,0,OFFSET p1_puntos); Else write(0,30,10,0,"LUIGI"); write_int(0,30,18,0,OFFSET p2_puntos); End 
//	monedas
	write(0,132,18,0,"x");	
	If(turno==0) write_int(0,140,18,0,OFFSET p1_monedas); Else write_int(0,140,18,0,OFFSET p2_monedas); End
//	mundo
	write(0,170,10,0,"WORD");
	If(turno==0) write_int(0,170,18,0,OFFSET p1_mundo); Else write_int(0,170,18,0,OFFSET p2_mundo); End
//	tiempo;
	write(0,230,10,0,"TIMEE");
	write_int(0,238,18,0,OFFSET tiempo);
	loop
		tiempo=rand(-721,561);
		if(key(_enter)) exit(0,0); end
		frame;
	end
End

include "pantallas.pix";
