Buenas,estaba intentando portar un pequeño juego (semi terminado) de fenix a bennu,y me compila perfectamente,pero a la hora de ejecutarlo,seme cierra rapidamente la ventana.
Aqui os dejo el codigo,no os asusteis que seguro que hay errores gravisimos.
[code language="bennu"]program the_war;
global
//PARA GUARDAR DEMOS (YA SE VERA)//
struct demo;
byte direccion,findemo;
end
//PARA GUARDAR LOS RECORD//
struct guardando;
int datos[10];
end
//IDENTIFICADORES//
id_naves;
id_music;
id_main;
id_level;
id_item;
//sonidos
id_laser;
id_ex;
estado_programa=1;
ultimo_estado=0;
//musicas
music1;
music2;
music3;
//otros
puntos;
puntos2;
tokes1;
tokes2;
nav1;
nav2;
id_count;
id_scr;
blok;
clan;
paused;
archivo_juego;
//IDENTIFICADORESZ PARA GUARDAR DEMOS//
archivo_demo;
begin
//full_screen=true;
graph_mode=mode_16bits;
id_main=load_fpg("gfx/main.fpg");
id_level=load_fpg("gfx/sce.fpg");
id_naves=load_fpg("gfx/naves.fpg");
id_count=load_fnt("gfx/count.fnt");
id_scr=load_fnt("gfx/scr.fnt");
id_item=load_fpg("gfx/item.fpg");
id_laser=load_wav("snd/laser.snd");
music1=load_song("data/menu.ogg");
music2=load_song("data/lev1.ogg");
music3=load_song("data/lev2.ogg");
archivo_demo=fopen("dmo/demo.dmo",demo);
//id_ex=load_wav("snd/ex.snd");
set_mode(640,480,16);
Loop
if (ultimo_estado<>estado_programa)
Switch (estado_programa);
Case 1: titulo(); End
Case 2: juego(); End
Case 3: record(); End
case 4: credits(); end
case 5: exit("",1); end
End
ultimo_estado=estado_programa;
End
Frame;
end
end
Process titulo();
Begin
fade_on();
play_song(music1,-1);
fade_on();
put_screen(id_main,4);
if(key(_enter));end
put_screen(id_main,1);
Loop
If (key(_1)) estado_programa=2;break; End
If (key(_2)) estado_programa=3;break;
End
If (key(_3)) estado_programa=4;break; End
if (key(_4)) estado_programa=5;break; end
Frame;
End
End
process juego();
begin
stop_song();
fade_off();
delete_text(all_text);
clear_screen();
level1();
end
process entrenamiento();
begin
credits();
end
process record();
begin
fade_off();
clear_screen();
fade_on();
put_screen(id_main,3);
load("score.dat",guardando);
puntos=guardando.datos[0];
puntos2=guardando.datos[1];
tokes1=guardando.datos[2];
tokes2=guardando.datos[3];
write(id_scr,0,0,14,"PLAYER 1");
write(id_scr,0,50,14,"Puntuacion obtenida:");
write(id_scr,0,70,14,"ultimos golpes:");
write_int(id_scr,230,50,14,&puntos);
write_int(id_scr,180,73,14,&tokes1);
write(id_scr,350,0,14,"PLAYER 2");
write(id_scr,350,50,14,"Puntuacion obtenida:");
write(id_scr,350,70,14,"Ultimos golpes:");
write_int(id_scr,570,50,14,&puntos2);
write_int(id_scr,510,70,14,&tokes2);
loop
if(key(_enter));estado_programa=1;delete_text(all_text);clear_screen();fade_off();break;end
frame;
end
end
/// AQUI SE COMIENZA LA CREACION DE LOS NIVELES ///
process level1();
begin
play_song(music2,-1);
fade_on();
write(id_count,0,0,14,"PLAYER 1:");
write_int(id_count,160,0,14,&puntos);
write(id_count,410,0,14,"PLAYER 2:");
write_int(id_count,580,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
put_screen(id_level,1);
player1(120,200);
player2(410,120);
cajalife(120,300);
caja100(475,270);
loop
if(key(_esc));exit("",1);END
if(key(_f1));let_me_alone();savescore();tokes1=0;tokes2=0; clear_screen();fade_off();delete_text(all_text);level2();break;end
frame;
end
end
// FASE 2 // 15/08/2004/23:43:54
process level2();
begin
stop_song();
play_song(music3,-1);
fade_on();
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
player1(120,200);
player2(410,120);
caja100(350,390);
cajalife(300,420);
loop
if(key(_esc));exit("",1);END
if(key(_f2));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);level3();break;end
frame;
end
end
//FASE 3//16/08/2004/16:12:47
process level3();
begin
fade_on();
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
player1(120,200);
player2(410,120);
caja100(223,420);
cajalife(324,223);
loop
if(key(_esc));exit("",1);END
if(key(_f3));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);level4();break;end
frame;
end
end
process Level4();
begin
stop_song();
play_song(music2,-1);
fade_on();
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
player1(120,200);
player2(410,120);
caja100(400,320);
cajalife(334,220);
loop
if(key(_esc));exit("",1);END
if(key(_f4));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);level3();break;end
frame;
end
end
process level5();
begin
stop_song();
play_song(music3,-1);
fade_on();
write(id_count,0,0,14,"Player 1:");
write_int(id_count,130,0,14,&puntos);
write(id_count,410,0,14,"Player 2:");
write_int(id_count,550,0,14,&puntos2);
write(id_count,0,20,14,"Tokes:");
write(id_count,410,20,14,"Tokes:");
write_int(id_count,90,20,14,&tokes1);
write_int(id_count,500,20,14,&tokes2);
player1(120,200);
player2(410,120);
caja100(423,220);
cajalife(134,320);
loop
if(key(_esc));exit("",1); END
if(key(_f5));let_me_alone();savescore();tokes1=0;tokes2=0;clear_screen();fade_off();delete_text(all_text);splashfinal();break;end
frame;
end
end
/// AQUI COMIENZA LA CREACION DE LA NAVES QUE SE VERAN LAS CARAS //
process player1(x,y);
begin
file=id_naves;
graph=1;
write_int(0,120,0,14,&x);
write_int(0,120,10,14,&y);
loop
if(collision(type disparop2));puntos2=puntos2+10;tokes1=tokes1+1;end
if(tokes1>10)explosion(x,y);break;end
if(collision(type player2));explosion(x,y);break;end
if(key(_right))x=x+25;end
if(key(_left))x=x-25;end
if(key(_down))y=y+15;end
if(key(_up))y=y-15;end
if (key(_enter) and blok==0)disparop1(x,y+0,0) ;play_wav(id_laser,0); blok=1; end
if (!key(_enter)) blok=0; end
//IF(KEY(_p));pausa();end
//if(key(_space));sinpausa();end
frame;
end
end
process player2(x,y);
begin
file=id_naves;
graph=2;
loop
if(collision(type disparop1));puntos=puntos+10;tokes2=tokes2+1;end
if(tokes2>10);explosion(x,y);break;end
if(collision(type player1));explosion(x,y);break;end
if(key(_d))x=x+25;end
if(key(_a))x=x-25;end
if(key(_s))y=y+15;end
if(key(_w))y=y-15;end
if (key(_space) and clan==0)disparop2(x,y-10,180000) ;play_wav(id_laser,0); clan=1; end
if (!key(_space)) clan=0; end
frame;
end
end
Process disparop1(x,y,angle);
Begin
file=id_naves;
advance(24);
graph=3;
While (NOT out_region(id,0))
advance(16);
Frame;
End
End
Process disparop2(x,y,angle);
Begin
file=id_naves;
advance(24);
graph=4;
While (NOT out_region(id,0))
advance(16);
Frame;
End
End
process explosion(x,y);
begin
file=id_naves;
from graph=5 to 9;frame;end
end
process savescore();
begin
//aki se comienza //
guardando.datos[0]=puntos;
guardando.datos[1]=puntos2;
guardando.datos[2]=tokes1;
guardando.datos[3]=tokes2;
save("score.dat",guardando);
end
process caja100(x,y);
begin
file=id_item;
graph=1;
loop
if(collision(type disparop1));puntos=puntos+100;explosion(x,y);break;end
if(collision(type disparop2));puntos2=puntos2+100;explosion(x,y);break;end
frame;
end
end
process cajalife(x,y);
begin
file=id_item;
graph=2;
loop
if(collision(type disparop1));tokes1=tokes1-1;explosion(x,y);break;end
if(collision(type disparop2));tokes2=tokes2-1;explosion(x,y);break;end
frame;
end
end
//AQUI VA EL PROCESO DE LOS CREDITOS//
process credits();
private
fondo_map;
textos[]=
"PROGRAMADOR","Goku jr","",
"GRAFISTAS","Goku jr","Dark man","Aunque este ultimo...",
"SONIDOS","Goku jr","",
"JUGABILIDAD","Eso lo direis los que jugais","",
"AGRADECIMIENTOS","GRACIAS A TODO MUNDO",
"EN ESPECIAL A...","LOS QUE HAN HECHO FENIX","",
"LENGUAJE","FENIX";
begin
FADE_ON();
delete_text(all_text);
fondo_map=load_png("1.png");
put_screen(0,fondo_map);
From y=0 To 19;
write(id_count,320,40+y*20,4,textos[y]);
Frame;
End
end
//PROCESO PARA GUARDAR DEMOS //
// FIN DE LA ALPHA //
//CREANDO LA PAUSA//
process pausa();
begin
signal(type player1,s_freeze);
signal(type player2,s_freeze);
signal(type level1,s_freeze);
signal(type level2,s_freeze);
signal(type level3,s_freeze);
signal(type caja100,s_freeze);
signal(type cajalife,s_freeze);
paused=write(id_count,280,150,14,"PAUSA");
loop
frame;
end
end
process sinpausa();
begin
delete_text(paused);
signal(type player1,s_wakeup);
signal(type player2,s_wakeup);
signal(type level1,s_wakeup);
signal(type level2,s_wakeup);
signal(type level3,s_wakeup);
signal(type caja100,s_wakeup);
signal(type cajalife,s_wakeup);
signal(type pausa,s_kill);
loop
frame;
end
end
process splashfinal();
begin
clear_screen();
delete_text(all_text);
unload_fpg(id_level);
put_screen(id_main,4);
loop
frame;
end
end[/code]
podrias tambien poner los graficos y sonidos?
Sip,aora lo subo a megaupload mismo.
Aqui esta :
http://www.megaupload.com/?d=YIA73UFT
Extraer en el mismo directorio donde tengas el prg.
Salu2!
lo compilaste con -g y ejecutaste con -d, para ver donde cancelaba?
Parece que en la linea 57,al hacer un fopen
pero no se por que puede ser.
VALE...con borrar ese fopen parece funcionar
EDIT 2 : al darle a cualquiera de las opciones del menu, menos a creditos y salir,se queda la pantalla en negro y solo suena la musica
¿Por qué usas archivo_demo=fopen("dmo/demo.dmo",demo);?
Demo no lo seteas, así que puede tener valores raros por lo que veo. Usa o_write, o_read, etc.
Edit 1:
Mi consejo, no uses un proceso para cada nivel, usa algo estilo
process level(int nivel)
begin
//Cosas comunes a todos los niveles
switch (nivel)
case 1:
//Cosas exclusivas nivel 1
end
case 2:
end
end
end
todo ese codigo en fenix funciona correctamente,ya he borrado el fopen, y funciona el menu del juego,ahora probare a hacer lo de los niveles.
Salu2!
Lo veo demasiado absurdo, pero... ¿has puesto los import de las funciones que uses? En el código que has pegado no están. Aunque sin ellos ni te compilaría, así que lo veo raro :P
dudo realmente que eso funcione en fenix, y si lo hace lo hace mal...
fopen es para abrir un archivo y no para leer una estructura, demo es una estructura, y el 2do parametro del fopen debe ser un int y no un pointer... fijate en la wiki para mas ayuda... de los modos de apertura...
quizas lo que necesites usar ahi sea un load...
ahora si preguntas porque compila pasando un pointer cuando espera un int? es por las conversiones automaticas de tipo...
Vamos a ver jeje
el juego en fenix es completamente jugable.
olvidaos de lo del fopen demo,es una cosa que nunca implemente en el juego,la cuestion esque en bennu compila,pero se ejecutamal,y no se a q se debe.
Salu2!
en principio se debe a eso... si hay algun otro problema lo desconozco, pero ese es el primero...
Vale,quitando eso,llega al menu, y despues de ahi,al pusar uno,funciona el primer nivel (eso a sido gracias a que he jitado los fade_off()) pero he quitado todos los fade_off de los niveles, y en los siguientes niveles no se muestran los mapas.
buuuf que lioo!