PROGRAM goku;

GLOBAL
	int bg;
	int bgDurezas;
	int startGame = 0;
	
	int gGoku[2];
	
	int gBulma;
	int gFantasma[2];
	int gVegeta[2];
	int gNappa[2];

	int gKame;
	
	int gPausa;
	int gDinero;
	
	int sndJump;
	int sndDeath;
	int sndCoin;
	
	int musMain;
	int musPause;
	
	struct partida
		int puedeSaltar = 0;
		int puedeRecoger = 0;
		int pausa = 0;
		int dinero;
		string textoMision = "";
		int estadoMision = 0;
		int muerto = 0;
	end
	
	
LOCAL
	float fx, fy;
	float incx, incy;
	float contx, conty;
	
BEGIN

	exitHandler();
	full_screen = false;
	set_title("tonto el que lo lea");
	set_mode(640,480,16);
	set_fps(60,0);
	
	musMain = load_song("music/moon.ogg");
	musPause = load_song("music/pause.ogg");
	
	play_song(musMain, -1);

	sndJump = load_wav("sound/jump.ogg");
	sndDeath = load_wav("sound/death.ogg");
	sndCoin = load_wav("sound/coin.ogg");
	
	bg = load_png("png/level.png");
	bgDurezas = load_png("png/levelDurezas.png");
	
	gGoku[0] = load_png("png/goku.png");
	gGoku[1] = load_png("png/goku2.png");

	gBulma = load_png("png/bulma.png");
	
	gFantasma[0] = load_png("png/fantasma.png");
	gFantasma[1] = load_png("png/fantasma2.png");
	
	gVegeta[0] = load_png("png/veg1.png");
	gVegeta[1] = load_png("png/veg2.png");	
	
	gNappa[0] = load_png("png/napa1.png");
	gNappa[1] = load_png("png/napa2.png");	
	
	gPausa = load_png("png/pause.png");
	gDinero = load_png("png/saco.png");
	
	gKame = load_png("png/kame.png");
	
	set_center(0, gGoku[0], 16, 64);
	set_center(0, gGoku[1], 16, 64);
	
	menuPrincipal();
	
	repeat frame;until(startGame);


	pauseHandler();
	
	start_scroll(0,0,bg,0,0,0);
	scroll.camera = camara();
	write(0,120,0,2,"Sacos de dinero:");
	write_int(0,125,0,0,&partida.dinero);
	
	from x = 0 to 5; sacoDeDinero(320 + 48*x, 40); end
	
	from x = 0 to 9;
		sacoDeDinero(1320 + 48*x, 40);
	end
	
	from x = 0 to 10; fantasma();end
	
	goku();		
	bulma();
	vegeta();
	nappa();
	
	write_string(0, 320, 40, 4, &partida.textoMision);
	
	partida.textoMision = "Ve a hablar con Bulma. Usa WASD.";
	
	loop
		frame;
	end
	
END

PROCESS exitHandler()

BEGIN
	repeat
		frame;
	until(key(_esc) || exit_status);
	exit(0,0);

END

PROCESS pauseHandler()

BEGIN
	x = 320;
	y = 240;
	size = 200;

	loop
		while(partida.pausa)frame;end
		if(key(_P))repeat frame; until(!key(_P));
			graph=gPausa;
			play_song(musPause, -1);
			partida.pausa = 1; 
			repeat frame; until(key(_p)); 
			repeat frame; until(!key(_p)); 
			play_song(musMain, -1);
			partida.pausa = 0; 
			graph = 0;
		end
		
		frame;
	end
END

PROCESS menuPrincipal()

BEGIN
	x = 320;
	y = 240;
	alpha_steps = 127;
	graph = load_png("png/title.png");
	from alpha = 0 to 255; frame(50);end
	write(0,600,400,2, "PULSA ENTER JODER");
	repeat frame;until(key(_enter));
	repeat frame;until(!key(_enter));
	delete_text(all_text);
	startGame = 1;
	from alpha = 255 to 0; frame(10);end

END

PROCESS camara();

PRIVATE
	int protaId;

BEGIN
	loop
		if(protaId = get_id(type goku))
		fx += (protaId.fx - fx)*0.025;
		x = fx;
		end
		
		frame;
	end
END

PROCESS goku();

PRIVATE 
	int col;

BEGIN
	fx = x = 640;
	fy = y = 340;
	ctype = c_scroll;
	
	loop	
		while(partida.pausa)frame;end
	
		if(key(_d) && incx<4)incx+=0.07; flags = 0;end
		if(key(_a) && incx>-4)incx-=0.07; flags = 1;end
		
		if(key(_e) && partida.puedeSaltar)incy=-3;incx=3;end
		if(key(_q) && partida.puedeSaltar)incy=-3;incx=-3;end
		
		contx = 0;
		while(contx > incx)
		col = map_get_pixel(0, bgDurezas, fx-12, fy);
			if(!colisionLateral(x-12))fx-=0.2; else incx=0;fx+=0.1;end
			contx-=0.1;
		end

		contx=0;
		while(contx < incx)
			if(!colisionLateral(x+12))fx+=0.2; else incx=0;fx-=0.1;end
			contx+=0.1;
		end
		

		col = map_get_pixel(0, bgDurezas, fx, fy+1);
		if(col<=0 && key(_w) && partida.puedeSaltar)
			play_wav(sndJump, 0);
			incy=-5.0;
		end
		if(col>0)
			incy+=0.1;
		end

		conty= incy;
		
		while(conty>0)
			col = map_get_pixel(0, bgDurezas, fx, fy+1);
			if(col>0)fy+=0.1; else incy=0;fy-=0.01;end
			conty-=0.1;
		end

		while(conty<0)
			col = map_get_pixel(0, bgDurezas, fx, fy-64);
			if(col>0)fy-=0.1; else incy=1;fy+=0.1;end
			conty+=0.1;
		end

		

		incx*=0.985;
		col = incx;
		if(abs(col)<1 &&!key(_d) && !key(_a))incx=0;end
		x = fx;
		y = fy;
		
		if(key(_space) && !get_id(type kame))kame();end
		
		if(y>478)partida.muerto = 1;end
		
		
		if(partida.muerto)
			gokuMuerto();
			graph=0;
			frame;
			partida.muerto=0;
			fx = 64; fy =64;
		end
		
		graph = gGoku[timer%2];
		frame;
	end
END

FUNCTION colisionLateral(x)

BEGIN
	y = father.y-2;
	from z = 0 to 60;
		if(map_get_pixel(0, bgDurezas, x, y-z)<=0) return true;end
	end
	return false;
END

PROCESS gokuMuerto()

BEGIN
	signal(father, s_sleep);
	ctype = c_scroll;
	fx = x = father.x;
	fy = y = father.y;
	graph = father.graph;
	play_wav(sndDeath, 0);

	
	incy = -12.0;
	
	while (fy<500)
		angle+=30000;
		fy+=incy;
		incy+=0.35;
		y=fy;
		frame;
	end
	father.x=x;
	father.y=y;
	signal(father, s_wakeup);

END

PROCESS sacoDeDinero(x, y);

BEGIN
	graph = gDinero;
	ctype=c_scroll;

	while(map_get_pixel(0,bgDurezas,x,y+19)<=0)y--;end

	
	repeat
		if(map_get_pixel(0,bgDurezas,x,y+18)>0)y++;end
		frame;
	until(collision(type goku) && partida.puedeRecoger);

	partida.dinero++;
	play_wav(sndCoin, 0);
	
END

PROCESS bulma()

PRIVATE
	int idProta;
	int choca = 0;
BEGIN
	ctype=c_scroll;
	graph = gBulma;
	x = 60;
	y = 383;
	z = 1;
	
	loop
		while(partida.pausa)frame;end
		y = 383 - abs(10*cos(timer*5000));

		choca = collision(type goku);
		
		if(choca && partida.estadoMision==0)
			partida.textoMision = "BULMA: Puto cerdo! Vas cagao y no puedes saltar. Vendo dodotis por 5 sacos de dinero.";
			partida.puedeRecoger = 1;
			partida.estadoMision = 1;
		end
		
		if(choca && partida.estadoMision==1 && partida.dinero>=5)
			partida.textoMision = "BULMA: Ya estas listo. Un tal Vegeta ha preguntao por ti. Ve a buscarlo.";
			partida.estadoMision = 2;
			partida.dinero -= 5;
			partida.puedeSaltar = 1;
		end

		if(choca && partida.estadoMision==6)
			partida.textoMision = "BULMA: Necesito 100 sacos de dinero o mas para un asunto. Me los prestas?";
			partida.puedeRecoger = 1;
			partida.estadoMision = 7;
		end

		if(choca && partida.estadoMision==7 && partida.dinero>=100)
			partida.dinero = 0;
			partida.textoMision = "BULMA: Gracias! Nappa te contara el resto del plan.";
			partida.puedeRecoger = 1;
			partida.estadoMision = 8;
			while(x>-50)x-=10;frame;end
		end

		
		if(key(_n))partida.dinero=600;end
		
		idProta = get_id(type goku);
		if(idProta)
			if(idProta.x>x)flags=0; else flags=1;end
		end
		
		frame;
	end
END


PROCESS vegeta()

PRIVATE
	int idProta;
	int choca = 0;
BEGIN
	ctype=c_scroll;
	graph = gVegeta[0];
	x = 1060;
	y = 383;
	z = 1;
	
	loop
		while(partida.pausa)frame;end
		y = 383 - abs(10*cos(timer*5000));

		choca = collision(type goku);
		
		if(choca && partida.estadoMision==2)
			partida.textoMision = "Vegeta: Oye pringao, traeme 10 sacos de dinero o te parto la jeta.";
			partida.estadoMision = 3;
		end

		if(choca && partida.estadoMision==3 && partida.dinero>=10)
			partida.dinero-=10;
			partida.textoMision = "Vegeta: Guay. Ve a hablar con Nappa para aprender a pegar.";
			partida.estadoMision = 4;
		end

		if(choca && partida.estadoMision==5)
			partida.dinero+=10;
			partida.textoMision = "Vegeta: Te devuelvo tu pasta. Mata fantasmas para conseguir mas. Ve con Bulma.";
			partida.estadoMision = 6;
		end

		
		idProta = get_id(type goku);
		if(idProta)
			if(idProta.x>x)flags=0; graph = gVegeta[0]; else flags=1; graph = gVegeta[1];end
		end
		
		frame;
	end
END

PROCESS nappa()

PRIVATE
	int idProta;
	int choca = 0;
BEGIN
	ctype=c_scroll;
	graph = gNappa[0];
	x = 4060;
	y = 363;
	z = 1;
	
	loop
		while(partida.pausa)frame;end
		y = 383 - abs(10*cos(timer*5000));

		choca = collision(type goku);
		
		if(choca && partida.estadoMision==4)
			partida.textoMision = "Nappa: pulsa ESPACIO para tirar kames. Vuelve con Vegeta.";
			partida.estadoMision = 5;
		end

		if(choca && partida.estadoMision==8)
			partida.textoMision = "Nappa: Mira que eres capullo! Bulma se ha ido con tu pasta!";
			write(0,320,240,4, "Fin del juego. Pulsa ESC o algo, no se.");
			partida.estadoMision = 9;
		end
		
		
		idProta = get_id(type goku);
		if(idProta)
			if(idProta.x>x)flags=0; graph = gNappa[0]; else flags=1; graph = gNappa[1];end
		end
		
		frame;
	end
END




PROCESS fantasma();
PRIVATE
	int g;
	int tiempoInmune = 100;
	int nx, ny;
BEGIN
	y = rand(0, 480);
	x = rand(3000, 6000);
	g = rand(1,15);
	ctype = c_scroll;
	nx = rand(0,6000);
	ny = rand(180,440);
	loop
		while(partida.pausa)frame;end
		g = (g+1)%20;
		graph = gFantasma[g/10];
		flags=0;
		if(tiempoInmune>0)tiempoInmune--;flags=4;end

		if(x>nx)x-=2;end
		if(x<nx)x+=2;end
		if(y>ny)y-=2;end
		if(y<ny)y+=2;end

		if(collision(type goku))partida.muerto=1;end
		if(collision(type kame))play_wav(sndDeath, 0);sacoDeDinero(x,y);tiempoInmune=100;x=6000;y=0;end
		
		if(fget_dist(x,y,nx,ny)<20)
			nx = rand(0,6000);
			ny = rand(180,440);
		end
		frame;
	end
END

PROCESS kame()

PRIVATE
	int vida=50;
BEGIN
	ctype = c_scroll;
	x = father.x;
	y = father.y-32;
	flags = father.flags;
	z = father.z-1;
	incx = 7;
	if(flags==1)incx=-incx;end
	graph = gKame;
	
	while(vida>0)
		
		x+=incx;
		vida--;
		frame;
	end
	
END