Tutorial para programar en Dreamcast con la versión de BennuGD de Indiket


Ir a la página Anterior  1, 2, 3, 4, 5, 6, 7  Siguiente

Objetivo: Re: Tutorial BennuGD de Indiket para Dreamcast
Le pongo este pequeño sample para el amigo Keidash aquí.

Me preguntaba como usar el mod_file en Dreamcast.

http://wiki.bennugd.org/index.php?title=Mod_file

Un pequeño ejemplo funcional de cómo lo hago para sacar datos de un archivo texto::

import "mod_file"
import "mod_say"
import "mod_video"
import "mod_text"
import "mod_ttf"
import "mod_map"



Process Main()
Private
int handle; // handle for the loaded file
string first_line; // here's where the first line of the file will go
int fuente; // Variable contenedora, creo

Begin

set_mode(640,480,16);


set_text_color(rgb(255,255,255));

// Open the file "file.txt"
if (os_id == 5); // si es Dreamcast
handle=fopen("/cd/file.txt",O_READ);
else // de lo contrario cambia la ruta
handle=fopen("file.txt",O_READ);
end



if (handle == 0)
say( "Could not open file" );
return;
end

// Read the first line form the file
first_line = fgets(handle);

// Output the read line
say( "Read from file:" );
say('"' + first_line + '"'); // Lo printea mal, no saca ñ y demas tema... :

write(0,20,30,0, "Esto es lo que saca del txt:");
write(0,21,42,0,'' + first_line + ' ');




// Close the file (important!)
fclose(handle);

loop
frame;
end

End


Solo hay una cosa, el archivo de texto tiene que tener una codificación específica que es con la que trabaja internamente BennuGD para poder mostrar acentos y demás, luego la especifico que ahora no recuerdo.

Lo pongo aquí por si le sirve a alguien más...

Objetivo: Re: Tutorial BennuGD De Indiket Para Dreamcast
Más tutoriales para quién le interese!

bennugd_dreamcast_sound

Estoy publicando una serie de tutoriales basados en mi aprendizaje de BennuGD para Dreamcast. Entre las curiosidades técnicas que me he encontrado y la falta de documentación para Dreamcast, me he decantado por hacer una serie de mini tutoriales que creo que pueden ayudar a alguien. De momento, he publicado los siguientes:

· TUTORIAL DEL APARTADO SONORO EN BENNUGD PARA DREAMCAST

· TUTORIAL PARA LA ADMINISTRACIÓN DE RAM EN BENNUGD PARA DREAMCAST

El siguiente tutorial en el que estoy trabajando es el de la creación de assets de 8bits para reducir la carga de la RAM en la Dreamcast.

Saludos! Espero que se a de ayuda :)

Objetivo: Re: Tutorial BennuGD de Indiket para Dreamcast
Muy buen trabajo, tío.

Lo de la RAM, creo que tengo un pequeño truco que te contaré y si funciona bien lo introduces ;)

Objetivo: Re: Tutorial BennuGD De Indiket Para Dreamcast
Ryo Suzuki escribió: [Ver mensaje]
Muy buen trabajo, tío.

Lo de la RAM, creo que tengo un pequeño truco que te contaré y si funciona bien lo introduces ;)


Entonces ya te voy a deber dos cañas jajaja, pero espero esa información con ansias.

Objetivo: Re: Tutorial BennuGD de Indiket para Dreamcast
Pues se ve que es una cosa heredada de la mala gestión de la RAM que se ve que ya tiene KOS, creo recordar que me comentó Indiket, pero yo lo que hago aunque es un poco chapuzas es reutilizar variables y recargar assets en la misma después de su correspondiente descarga y parece que me funciona mejor.

Ya me dirás si te funciona. Ya sé que parece una tontería...

Objetivo: Re: Tutorial BennuGD De Indiket Para Dreamcast
Ryo Suzuki escribió: [Ver mensaje]
Pues se ve que es una cosa heredada de la mala gestión de la RAM que se ve que ya tiene KOS, creo recordar que me comentó Indiket, pero yo lo que hago aunque es un poco chapuzas es reutilizar variables y recargar assets en la misma después de su correspondiente descarga y parece que me funciona mejor.

Ya me dirás si te funciona. Ya sé que parece una tontería...


Gracias por tu contesta amigo Ryo.

Esa solución que comentas es una "posible solución" y nótese las comillas, que explico en el tuto que tengo publicado. Realmente no es una solución. Lamentablemente eso que comentas no funciona, me explico.

Realmente cuando cargas un FPG, el valor devuelto que almacenas en la misma variable como tu comentas, es solo el identificador del FPG cargado en memoria, no es el fpg en si mismo. En este caso, los dos FPG se quedan en memoria y no se pueden borrar o el indicador de memoria ram libre no funciona, te pongo un ejemplo real:

Código: [Descargar] [Ocultar]
  1. Process Main() 
  2. Private 
  3. int fpgid = 0; 
  4. End 
  5. Begin 
  6.  
  7. define_region(1, 0, 0, 640, 480); 
  8. set_mode(640,480, MODE_8BITS); 
  9.  
  10. fpgid = set_FPG("/cd/files/graphs/screen3.fpg"); 
  11.  
  12. p_sMemFree = format((memory_free()MB),0); 
  13.  
  14. write(0, 500, 60, ALIGN_TOP_RIGHT, "Free Mem:"); 
  15. write_var(0, 580, 60, ALIGN_TOP_RIGHT, p_sMemFree); 
  16.  
  17. write(0, 640/2, 480/2, ALIGN_CENTER, "PRESS SPACE"); 
  18.  
  19. Repeat 
  20. frame; 
  21. Until(key(_space)) 
  22.  
  23. UNLOAD_FPG(fpgid); 
  24.  
  25. CLEAR_SCREEN(); 
  26. DELETE_TEXT(ALL_TEXT); 
  27.  
  28. fpgid = set_FPG("/cd/files/graphs/screen4.fpg"); 
  29.  
  30. p_sMemFree = format((memory_free()MB),0); 
  31.  
  32. write(0, 500, 60, ALIGN_TOP_RIGHT, "Free Mem:"); 
  33. write_var(0, 580, 60, ALIGN_TOP_RIGHT, p_sMemFree); 
  34.  
  35. write(0, 640/2, 480/2 - 10, ALIGN_CENTER, "CARGA FINALIZADA"); 
  36. write(0, 640/2, 480/2, ALIGN_CENTER, "PRESS SPACE"); 
  37.  
  38. Repeat 
  39. frame; 
  40. Until(key(_space)) 
  41.  
  42. End 
  43.  


Si te fijas, hago lo que tu comentas, reasigno el valor devuelto por load_fpg() a la misma variable, pero los dos siguen en memoria ¿Cómo se que siguen en memoria? Pues fácil, comprobando la memoria libre en cada caso, antes y depués de cargar y descargar. Este mismo ejemplo exportado a el emulador, muestra como la memoria RAM a pesar de hacer un UNLOAD_FPG() sigue teniendo la misma RAM ocupada.


image_001_1527837263_192211
image_002_1527837275_345746


Esto indica que:

1. O el UNLOAD_FPG() no funciona, por lo que más me decanto ya que el juego me da cuelgues de out of memory cuando tengo varias cosas cargadas y hago UNLOADS de los mismos y vuelvo a cargar más.

2. Que el muestreo de la memoria RAM libre tampoco funciona, cosa que no se que pensar, ya que con el punto 1 que indico es muy evidente que la RAM se satura.

Si te fijas en las imágenes, la RAM es la misma tanto al cargar como al descargar los elementos de la RAM, por eso me decanto más por el primer punto.

No se si se me está pasando algo la verdad ¿Tú qué opinas?

Objetivo: Re: Tutorial BennuGD de Indiket para Dreamcast
Bien comprobado.

Prueba con load_png.


P.D: También te digo una que una cosa es lo que pone y otra cosa es lo que sucede en realidad...

Objetivo: Re: Tutorial BennuGD De Indiket Para Dreamcast
EDITO: acabo de arreglarlo, tenia una linea de codigo a medio escribir y se solucionaba si la quitaba. Aunque sigo sin saber como usar el configurador del mando--
EDITO 2: Me vuelve a dar el mismo error da igual donde use lo de os_id, el segundo proceso me da error. SI lo quito, sin embargo, me compila. Y si vuelvo a otra version anterior del prg donde lo tenia funcionando, funciona tambien

Pues estooo... perdon si molesto a alguien, pero el bennu no me deja compilar una cosa. Los problemas empezaron cuando intente hacer funciones especificas para dreamcast (usando if (os_id)), pero no entiendo que relacion pueda tener con el problema

Adjunto imagenes:

18n_zh_8

Me da este error, que en la linea 55 hay un proceso no definido, excepto que...

dq_9vyic

d_ic1ylf

Si alguien pudiese echar un cable lo agradeceria (y si me explica tambien como usar el configurador del mando de keidash pues...)

Perfil MP  
Objetivo: Re: Tutorial BennuGD De Indiket Para Dreamcast
Ryo Suzuki escribió: [Ver mensaje]
Bien comprobado.

Prueba con load_png.


P.D: También te digo una que una cosa es lo que pone y otra cosa es lo que sucede en realidad...


LOAD_PNG() es la misma pesca, pero con diferente caña. Obtienes el ID identificador, pero nunca acceso al recurso en memoria del mismo. En versiónes anteriores de BennuGD se podía obtener el puntero en memoria como segundo parámetro, y esto permitiría luego trabajar con esa sección en memoria, pero en versiones más recientes lo eliminaron. Ni idea de porqué.

A parte de que LOAD_PNG() no tiene el método de descarga del mismo, es decir, no existe un UNLOAD_PNG().

Objetivo: Re: Tutorial BennuGD De Indiket Para Dreamcast
Una pregunta: ¿como consigo que no se me vea todo en negro cuando uso el emulador para probar mi código? En pc me va, pero cuando lo ejecuto en dreamcast solo consigo música cdda en loop.

Puedo adjuntar código y assets si es necesario... Los gráficos están todos en un mismo archivo FPG de 16 bits, y la profundidad de color de la pantalla también es 16 bits.

Perdón si molesto-

última edición por Keewan el 03 Junio 2018, 09:12 PM; editado 1 vez
Perfil MP  
Ir a la página Anterior  1, 2, 3, 4, 5, 6, 7  Siguiente

Página 5 de 7


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.122s (PHP: 19% SQL: 81%)
Consultas SQL: 15 - Debug off - GZIP Desactivado