Página 1 de 3
Problema al morir
Publicado: Lun, 28 Sep 2015, 19:14
por karkayu
Buenas again!!!
Tengo un problemilla que me tiene bastante descolocado.
El juego funciona bien peeeero cuando el prota muere el juego no termina correctamente.La mayoría de los casos reinicia la maquina, pero otras veces aparece codigo en pantalla y se cuelga.
Eso es algo que ha sucedido tras añadir/cambiar algo porque, esta claro que antes no lo hacía.
Cosas que he probado:
- Como estuve tocando engine.h para solucionar lo del tiempo y el sonido al finalizar el juego, he cambiado ese archivo por otro 'virgen' (el que traía por defecto la churrera en el zip).
- He reducido el número de tiles por si fuera problema de memoria. Incluso los he vuelto a pasar a B/N.
- He puesto un archivo de scripts vacio por si fuera problema de los scripts (aunque no toco el archivo .spt desde hace tiempo)
- He dejado extern.h vacío
Pero todo sigue igual.
¿Alguna idea de que puede ser?
Solucionado: Es problema de memoria. El juego se pasa en casi 300bytes del limite permitido.
Re: Problema al morir
Publicado: Lun, 28 Sep 2015, 21:43
por karkayu
Curioso. He quitado la recarga de vida en el juego (tanto objetos en sí como la variable PLAYER_REFILL a 0) y parece que todo ha vuelto a la normalidad.
Re: Problema al morir
Publicado: Mar, 29 Sep 2015, 10:23
por na_th_an
(Reducir o simplificar los tiles no ahorra memoria, los tiles tienen un tamaño fijo de 2304 bytes, lo que ocupan 256 caracteres y 256 atributos).
Cualquier cuelgue por lo general implica algo saliéndose de madre y escribiendo donde no debe. ¿Cuánto ocupa tu binario? ¿Qué versión de la Churrera estás usando? ¿Cómo está configurada la memoria al principio del archivo .c?
Re: Problema al morir
Publicado: Mar, 29 Sep 2015, 14:26
por karkayu
$this->bbcode_second_pass_quote('na_th_an', '(')Reducir o simplificar los tiles no ahorra memoria, los tiles tienen un tamaño fijo de 2304 bytes, lo que ocupan 256 caracteres y 256 atributos).
Cualquier cuelgue por lo general implica algo saliéndose de madre y escribiendo donde no debe. ¿Cuánto ocupa tu binario? ¿Qué versión de la Churrera estás usando? ¿Cómo está configurada la memoria al principio del archivo .c?
Al tileset le hacia falta un buen repaso. Era algo que tenía que hacer tarde o temparno. Tenía tiles antiguos que no usaba y me molestaban.
- El archivo .tap actual (que funciona sin problemas tanto en emu como en maquina real) ocupa 42.8Kb
- Version 3.99.3c
- No he tocado nada en el archivo .c Está todo como viene por defecto. Tampoco he activado el modo 128K.
Como he comentado antes, sin la recarga de vida el juego rula bien. A las malas doy un poco más de vida al inicio y paso de las recargas.
Re: Problema al morir
Publicado: Mar, 29 Sep 2015, 14:38
por na_th_an
No sirve de nada saber cuánto ocupa el tap completo. Lo importante es saber cuanto ocupa el binario del juego, lo que se carga y se ejecuta. Es fácil mirarlo desde el emulador con el visor de bloques de la cinta: es el último bloque.
En teoría no debería sobrepasar los 36K "mucho". De todos modos viendo que la cinta ocupa 42.8K y que la pantalla de carga son aproximadamente 6.25K, yo diría que está "ahí ahí"... Si tu binario ocupa demasiado, hay solapamiento con la zona de memoria reservada para la pila. Esto causa todo tipo de cosas divertidas: o bien se te corrompen los sprites, o bien a la salida de una subrutina el control salta a sabe dios.
Ok, si usas la versión "c" la memoria dinámica que se reserva siempre es la máxima así que no es un problema de que no estés reservando la suficiente memoria para los sprites.
Cuando dices que quitas o pones las recargas ¿a qué te refieres en concreto? Si te refieres a activar o desactivar "USE_HOTSPOTS_TYPE_3" tiene sentido, porque si los activas el código es más largo.
Dependiendo de cuanto "te hayas pasado" (si este es el problema) podrías echar esto a andar con la versión "d" de desarrollo que te puse antes. Puedes ahorrar bastante memoria (bastante me refiero a un cuarto de K o algo así, pero suele ser suficiente), además de apretar un poco más la pila y dejar más espacio, por lo que a lo mejor te salva el culete
Re: Problema al morir
Publicado: Mar, 29 Sep 2015, 17:12
por karkayu
$this->bbcode_second_pass_quote('na_th_an', 'N')o sirve de nada saber cuánto ocupa el tap completo. Lo importante es saber cuanto ocupa el binario del juego, lo que se carga y se ejecuta. Es fácil mirarlo desde el emulador con el visor de bloques de la cinta: es el último bloque.
En teoría no debería sobrepasar los 36K "mucho". De todos modos viendo que la cinta ocupa 42.8K y que la pantalla de carga son aproximadamente 6.25K, yo diría que está "ahí ahí"... Si tu binario ocupa demasiado, hay solapamiento con la zona de memoria reservada para la pila. Esto causa todo tipo de cosas divertidas: o bien se te corrompen los sprites, o bien a la salida de una subrutina el control salta a sabe dios.
Ok, si usas la versión "c" la memoria dinámica que se reserva siempre es la máxima así que no es un problema de que no estés reservando la suficiente memoria para los sprites.
Cuando dices que quitas o pones las recargas ¿a qué te refieres en concreto? Si te refieres a activar o desactivar "USE_HOTSPOTS_TYPE_3" tiene sentido, porque si los activas el código es más largo.
Dependiendo de cuanto "te hayas pasado" (si este es el problema) podrías echar esto a andar con la versión "d" de desarrollo que te puse antes. Puedes ahorrar bastante memoria (bastante me refiero a un cuarto de K o algo así, pero suele ser suficiente), además de apretar un poco más la pila y dejar más espacio, por lo que a lo mejor te salva el culete
¿te puedes creer que no encuentro la opción de bloques de cinta que dices en el emulador? Uso el Fuse.
En cuanto a lo de las recargas me refiero a que tenia activado USE_HOTSPOTS_TYPE_3, colocados 'corazones' por diversas parte del mapa y la constante PLAYER_REFILL con un valor mayor a 0.
Como no me acordaba de USE_HOTSPOTS_TYPE_3 hasta que me lo has dicho, no la tenía desactivada. Pero es curioso porque si borro los 'corazoncitos' del mapa y coloco a cero la constante PLAYER_REFILL (sin desactivar USE_HOTSPOTS_TYPE_3), el juego rula bien.
Si desactivo USE_HOTSPOTS_TYPE_3 y PLAYER_REFILL, me da error de compilacion: "mainloop.h" L:636 Error:#42:Unknown symbol: PLAYER_REFILL
Si desactivo USE_HOTSPOTS_TYPE_3 y dejo PLAYER_REFILL, el juego vuelve a colgarse al morir (aunque no haya corazoncitos por el mapa).
Probaré a usar la versión "d" e intentaré averiguar lo de los bloques de cinta (más que nada para saber cuando me paso).
Gracias