Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - warrior_rockk

Páginas: [1] 2
1
Mesa de Ayuda / Punteros anidados
« en: Diciembre 13, 2016, 09:08:58 am »
Supongamos el siguiente código:


Código: [Seleccionar]

Type _tipo
        int codigo;
byte* elementos;
end;


global
struct str
byte dato;
_tipo* tipos;
end;
end;


Lo que tenemos es una estructura con un puntero a un tipo definido por el usuario que, a su vez, ese tipo tiene un puntero de bytes. Para iniciar el puntero de tipos haríamos lo siguiente:


Código: [Seleccionar]
str.tipos = calloc(5,sizeof(_tipo));


Y para iniciar el puntero del tipo, tendríamos que recorrer las 5 posiciones de tipo e ir asignándolas:


Código: [Seleccionar]
for (i=0;i<5;i++)
      str.tipos[i].elementos = calloc(10,sizeof(byte));
end;


Hasta aquí todo correcto. Habríamos asignado en la estructura str, un array de 5 tipos con 10 elementos tipo byte dentro cada uno.


Mi duda ahora es a la hora de liberar la memoria. Sospecho que free(str.tipos) no es suficiente ya que, un puntero es un elemento que contiene un bloque de memoria, esto es, apunta a una dirección de memoria de inicio y de un tamaño determinado. A la hora de crear el puntero de tipos, como dentro del TYPE tipo hay un puntero, el sistema no sabe el tamaño que tendrá que reservar. De hecho, reserva 4 bytes por puntero porque es lo que ocupa una dirección de memoria. Pero esa dirección de memoria puede extenderse desconocidamente porque todavía no ha sido asignada.
Mi duda es, a la hora de llamar a free, ¿se encarga de leer los punteros dentro del bloque de memoria y liberar a su vez las zonas de memoria anidadas¿ ¿o tendríamos que recorrer de nivel inferior a superior liberando los elementos de cada tipo para luego liberar tipo?


Espero que se me haya entendido...

2
Proyectos / Castle of Illusion BennuGD
« en: Diciembre 10, 2016, 10:19:37 am »
Bueno, os presento mi proyecto que, tras meses de dejarlo aparcado, lo muestro en su estado ya que no creo que lo continúe.
Estuve realizando un engine de plataformas de 8 bits para mis juegos y , para ir implementando características, decidí hacer un port del juego Castle of Illusion de la Master System, ya que, es tengo un gran recuerdo de ese juego y, me interesa realizar el engine con las características/limitaciones de esa consola.
En algún punto del desarrollo, me emocioné con la idea de hacer el port del juego completo, abrir todas las herramientas de edición al público para crear una especie de "Open Castle of Illusion" e incluso una versión "EXtended" que añadiría nuevas fases para cada zona y ampliaría el contenido del juego. Pero, como suele pasar, la magnitud del trabajo de ripeo e implementación de los comportamientos de cada enemigo, niveles, etc... me llevó a dejar esa idea.
El engine si que sigue desarrollándose y mejorándose siendo la base de mis futuros juegos.


En este enlace podéis probar lo que hay hecho: interfaz, intro, tutorial/preludio, primer nivel completo 100% y segundo nivel nuevo de prueba:

https://drive.google.com/open?id=0B9l2mkoElB5MbmhzenNRVUF5UjQ

Adjunto también unos pantallazos y videos.


Video del gameplay:
https://vid.me/lhTX


Video del modo debug:
https://vid.me/9nub

Modo debug:



Editor de niveles en .NET






Editor de mapeado con Tile Studio

3
Mesa de Ayuda / Captura de video a 60fps
« en: Octubre 10, 2016, 06:48:00 am »
Buenas,


he buscado por el foro pero no he dado con la solución que me gustaría. Mi consulta es sobre captura de vídeo a , por lo menos, 60 fps para poder grabar el gameplay de nuestros juegos sin perder la fluidez del mismo. ¿habéis utilizado algún software que os dé buen resultado?




4
Mesa de Ayuda / Trabajar correctamente con librerías
« en: Mayo 18, 2016, 06:42:35 am »
Como se ha comentado en los posts que se refieren a la capacidad de compilar e incluir las librerías data-code (dcl), no está implementada la exportación de defines o constantes, con lo que, se debe incluir un archivo .h con ellos. Hasta aquí está claro. ¿Pero que pasa cuando la complejidad de la librería impide tener todas las constantes o defines en un mismo archivo de definición?
Supongamos una librería que se compone de varios .prgs y varios .h cada uno de ellos conteniendo su categoría de constantes y defines, por tema de claridad y ordenación. En ese caso, no sirve el uso de la dcl porque se pierde esa información.
Por otro lado, si intentamos trabajar con la librería con el código fuente y agregarla con include, tenemos el problema de que si la librería está en un directorio distinto al programa que la llama, fallan las llamadas a los includes que tenga los archivos de la librería porque, evidentemente, el path apunta al directorio del programa en cuestión.
¿Como resolver esta situación en este caso?


Saludetes,

5
General / Obtener numero graficos en un fpg
« en: Abril 18, 2016, 01:58:39 am »
Por como está estructurado el formato interno de un fpg, no se conoce el numero de gráficos que hay en un fpg ya que, tras la cabecera, se leen secuencialmente los pixeles. Con lo cual, ¿no hay modo de saber desde Bennu cuantas imágenes tiene un fpg? ¿Como lo hacéis si tenéis que mostrar una lista de graficos de un fpg para un editor o para algún conversor que recorra los graficos de un fpg?

6
General / desactivar scale_resolution
« en: Abril 14, 2016, 10:19:01 pm »
Hay un bug en la wiki de documentación. Para desactivar el scale_resolution tras haberlo seteado, no hay que asignarlo al valor NULL (que es un 0) si no que hay que asignarle -1.
Lo dejo aquí por si alguien lo busca algún día...

7
Site / No funciona mensajes no leídos
« en: Febrero 18, 2016, 11:38:22 pm »
No sé si alguno os pasa pero, desde hace unos días no funciona la opción de mostrar los mensajes no leídos. Te indica que no hay ninguno desde tu última visita pero si que los hay realmente. De hecho, si pulsas la opción que aparece de "ver todos los temas no leídos" ,entonces si que aparecen los recientes no leídos en las primeras posiciones.


¿solo me pasa a mi?

8
PixTudio / Problemas de rendimiento
« en: Enero 13, 2016, 11:33:05 am »
Creo que estoy haciendo algo mal...
Quería hacer una prueba de rendimiento con PixTudio para comparar la mejora de utilizar aceleración por GPU pero, ante el mismo código compilado con Bennu y PixTudio, me funciona muchísimo mas rápido Bennu ¿?¿? ¿Como puede ser?
Para que os hagáis una idea, el código de prueba era el clásico ejemplo de generar X procesos con gráfico de un rectángulo rebotando por la pantalla.

9
Extensions / mod_gme: Game Music Emulator
« en: Septiembre 09, 2015, 05:19:16 am »
Module for play videogame music in our respective formats.
The current systems / formats that allowed:



AY        ZX Spectrum/Amstrad CPC
GBS       Nintendo Game Boy
GYM       Sega Genesis/Mega Drive
HES       NEC TurboGrafx-16/PC Engine
KSS       MSX Home Computer/other Z80 systems (doesn't support FM sound)
NSF/NSFE  Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
SAP       Atari systems using POKEY sound chip
SPC       Super Nintendo/Super Famicom
VGM/VGZ   Sega Master System/Mark III, Sega Genesis/Mega Drive,BBC Micro


This is the list of functions:


Citar
int gme_load_song(string filename)


int gme_play_song()


int gme_stop_song()


int gme_pause_song()


int gme_resume_song()


int gme_voice_count()


int gme_mute_voice(int voice)


int gme_unmute_voice(int voice)


int gme_set_tempo(float tempo)


int gme_song_ended()


string gme_get_song_info(int info_type)


double gme_get_song_length()


double gme_get_intro_length()


double gme_get_loop_length()


double gme_get_song_pos()


int gme_fade_off(double duration_ms)


int gme_is_fading()


I attached the module and example of use.


10
Extensiones / mod_gme: Modulo para reproducir archivos de música de consola
« en: Septiembre 09, 2015, 05:13:29 am »
Estos días he estado trasteando, por curiosidad , como hacer módulos en Bennu y, aprovechando que encontré en internet una librería en C de emulación de sintetizadores de consolas, me he animado con este módulo que reproduce formatos de música de diversas consolas. En concreto:



AY        ZX Spectrum/Amstrad CPC
GBS       Nintendo Game Boy
GYM       Sega Genesis/Mega Drive
HES       NEC TurboGrafx-16/PC Engine
KSS       MSX Home Computer/other Z80 systems (doesn't support FM sound)
NSF/NSFE  Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
SAP       Atari systems using POKEY sound chip
SPC       Super Nintendo/Super Famicom
VGM/VGZ   Sega Master System/Mark III, Sega Genesis/Mega Drive,BBC Micro


Su uso es muy simple, con load_song(string filename), cargamos en memoria la canción que queramos (autodetecta el tipo de sistema) y con play_song() lo reproducimos.
Existen diversas funciones para cambiar el tempo, silenciar canales independientes, obtener información de la canción, hacer fade, etc...
Esta es la lista de funciones hasta ahora:


Código: [Seleccionar]
//cargar un archivo de musica

int gme_load_song(string filename)


//reproducir musica cargada
int gme_play_song()


//detener musica
int gme_stop_song()


//pausar musica
int gme_pause_song()


//reanudar musica
int gme_resume_song()


//obtener numero de voces / canales
int gme_voice_count()


//mutear voz / canal
int gme_mute_voice(int voice)


//desmutear voz / canal
int gme_unmute_voice(int voice)


//setear tempo (1.0 = tiempo normal)
int gme_set_tempo(float tempo)


//devuelve true si la canción ha terminado
int gme_song_ended()


//devuelve información de la pista. Existen varias constantes tales como GME_GAME_INFO o GME_SONG_INFO.. en el ejemplo están todos)
string gme_get_song_info(int info_type)


//devuelve (en milisegundos) la duración de la canción
double gme_get_song_length()


//devuelve (en milisegundos) la duración del intro de la canción (-1 si no tuviera)
double gme_get_intro_length()


//devuelve (en milisegundos) la duración del loop de la canción (-1 si no tuviera)
double gme_get_loop_length()


//devuelve los milisegundos de reproducción actual
double gme_get_song_pos()


//hace un fade off de la musica a la duracion de milisegundos que se le pase)
int gme_fade_off(double duration_ms)


//devuelve true si está haciendo fade off
int gme_is_fading()



Adjunto la extensión y ejemplo de uso donde se puede ver fácilmente las diversas opciones que tiene.




Cosas pendientes por hacer:
===================
-descomprimir automáticamente archivos vgm comprimidos
-función para cambiar el volumen de la canción
-integrarlo en SDL_mixer para mejor convivencia con Bennu
-documentar todas funciones
-...


Saludos!




11
Android / Rendimiento muy bajo y autoescalado con PixPlantilla
« en: Agosto 25, 2015, 11:09:38 pm »
Llevaba desconectado del desarrollo de Bennu para Android desde que salió el Packager y lo he estado retomando con la PixPlantilla, que resuelve el problema con las gpu Adreno, es mucho mas estable y permite ver y comprender el proceso de compilado en su totalidad. ¡Gran trabajo!
El problema viene con que me estoy encontrando un rendimiento demasiado bajo, ya que, simplemente seteando el modo gráfico y mostrando los fps, no es capaz de llegar a más de 40-50fps! Incluso seteando la resolución nativa del móvil para que no haga reescalado. Algo debo estar haciendo mal porque me consta que se están desarrollando juegos con este port siendo funcionales. Decir también que el móvil es de gama media-alta.


El otro "problema" que me he encontrado, es que esta versión de Bennu-Android de la plantilla, como se ha comentado por el foro, realiza escalado automáticamente a la resolución nativa del móvil. Esto tiene una desventaja y es que, perdemos el control sobre el reescalado que podíamos hacer vía código. En la anterior versión del Packager, podíamos vía Bennu, hacer el scaleresolution a un tamaño determinado, o incluso el scale2x que es más rápido, y escalar en la "proporción" que quisiéramos ,con lo que, si teníamos un juego en una resolución muy menor a la nativa de la pantalla pero no queríamos reescalar a la total nativa del móvil para no perder frames, podíamos hacer que, por lo menos, ocupara la mitad de la pantalla.
Entiendo que las modificaciones de una versión a otra se engloban en el SDLActivity.java. He intentado comparar la versión del Packager con la de la plantilla pero hay demasiados cambios , sobretodo en la gestión de las superficies de dibujado. Con lo que, mi pregunta es, ¿hay alguna sección de ese código donde se pueda activar/desactivar el autoescalado?




12
Android / Problema con feof y fgets
« en: Agosto 21, 2015, 03:45:13 am »
He estado realizando pruebas de lectura de archivo de texto y me he encontrado con que, en Android, la función feof nunca devuelve final de archivo y la función fgets, al encontrar cadena vacía deja la aplicación colgada. Como ya he tenido experiencia en otros lenguajes con los temas de codificación de carácteres y retornos de carro, expongo la lista de todo lo que he probado:


-he probado con retornos de carro en formato Windows (CR+LF) y en fomato Unix (LF)
-he probado que la ultima linea de texto tenga retorno y sin ella
-he probado que el archivo tenga codificación ANSI y UTF-8


En todos los casos y combinaciones de ellos, lee todas las lineas pero al llegar a la última, el feof no devuelve fin de linea y al intentar leer una linea inexistente con fgets, se cuelga irremediablemente. En Windows funciona correctamente.


Este sería el loop de lectura:
Código: [Seleccionar]
_file = fopen("game-en.lng",O_READ);
while(!feof(_file))
linea = fgets(_file);
end;

13
Mesa de Ayuda / Retardo al setear fullscreen
« en: Junio 12, 2015, 03:16:50 am »
Tengo un problema cuando seteo el modo gráfico en fullscreen y es que, desde que ejecuto el set_mode hasta que el sistema operativo se pone en pantalla completa y setea la resolución, pasa un tiempo (en algunos casos de mas de 5 segundos), en los que no se ve la pantalla pero la ejecución del programa sigue en marcha, con lo que, a la hora de controlar el mostrar los logos de splash o cualquier otra cosa, se hace imposible.
He probado consultar la resolución de pantalla antes y después de iniciar el modo gráfico pero Bennu devuelve instantáneamente la nueva resolución aunque aun el SO esté cambiándola.
¿No hay manera de saber cuando se terminado de cambiar la resolución y Bennu es "visible"? ¿No habéis tenido problemas con esto? Meter un retardo es una solución un poco chapucera ya que, no todas las tarjetas gráficas tardan lo mismo en cambiar la resolución...

14
Mesa de Ayuda / llamada a get_id() despues de devolver 0
« en: Junio 03, 2015, 02:48:22 am »
Según la wiki, cuando ya no quedan mas procesos del tipo pedido para get_id y que éste devuelva 0, hasta que no se haga un frame en ese proceso no reseteará la cuenta y no enviará de nuevo los procesos, pero, ¿esto ha cambiado verdad? Porque hago llamadas a get_id después de que devuelva 0 y me repite la lista de procesos (cosa que me viene de maravilla porque lo utilizo).


Saludos,

15
Mesa de Ayuda / No compresión en save_fpg
« en: Marzo 21, 2015, 09:55:48 am »
¿Hay alguna manera de que los fpgs guardados con save_fpg no los guarde comprimidos?. Estoy haciéndome un editor de niveles en .NET y quiero evitar implementar la descompresión de los fpgs.

Páginas: [1] 2