Página 1 de 3

Proyecto: Doctor Adventures

Publicado: Mié, 26 Ago 2015, 01:32
por errecepe
Buenas,

soy nuevo en este foro, y me presento enseñando un juego diseñado con la churrera empezado hace unos días.
En realidad, fue la típica prueba que empiezas, y le acabas cogiendo 'cariño'... Lo malo, que arrastro sprites y tilesets
de otros proyectos mojonos, y pretendo al menos, rediseñarlos o crearlos de cero.

Tengo prácticamente todo realizado, sólo tengo algún problema para poder meter alguna linea de script más,
ya que, ahora mismo, estoy en un punto en el que un par de SET TILE de más o de menos, provocan que al morir en una partida
y volver a mostrar la pantalla de title.bin, la muestre corrupta y aunque deje jugar, se acaba colgando y necesitas volver a cargar el juego.






Otro problema que tengo, es que si defino en config.h:

#define INITIAL_AMMO 10

a algún valor, me da el siguiente error al compilar:

C:\doctoradventures\dev>zcc +zx -vn doctorad.c -o doctorad.bin -lndos -lsplib2 -zorg=24200
1 archivo(s) copiado(s).
1 archivo(s) copiado(s).
sccz80:"engine.h" L:109 Warning:#17:Expected ';'

Esto ya me ocurría antes de tener los problemas de memoria previamente comentados.


Según vaya modificando el tileset, iré publicando alguna foto.
También estaría bien colgar alguna 'beta', ... todos los consejos son bienvenidos.

Image


saludos, @errecepe

Re: Proyecto: Doctor Adventures

Publicado: Mié, 26 Ago 2015, 08:39
por na_th_an
¡Bienvenido!

El error que te da es un fallo que hay en el código de la versión 3.99.3c. En la linea 109 de engine.h falta un ; al final, con ponerl se arregla el fallo.

Veo que estás teniendo problemas de memoria (Si tu bloque principal ocupa más de 36655 bytes - creo que era, ese es tu problema). Aquí tienes varias opciones:

- Usar la versión "WIP" no lanzada oficialmente de la Churrera que puedes encontrar por ejemplo en este hilo: viewtopic.php?p=68004#p68004 . Esta versión aprieta un poco los machos en un par de áreas para liberar alrededor de 200 bytes, y permite además configurar los requerimientos de memoria para ajustarlos al máximo a tu juego. La Churrera reserva una cantidad fija de memoria para los sprites, y esta versión te permite ajustar exactamente la cantidad de memoria que se reserva dependiendo de los sprites que uses en pantalla. Viene todo explicado en el hilo. Quizá esto te salve el juego.
- Intentar obtener más memoria de la que se llevan las pantallas comprimidas. Creo que se menciona en el tutorial: cuanto más complejas sean las pantallas de título, marco y final peor se comprimen y más memoria ocupan. Si eliminas elementos de ellas para que tengan "menos cosas" seguro que liberas bastante memoria.
- Eliminar la música beeper. Puedes sacarte así de la manga un Kb y pico extra para tí. El menú se queda mudo, pero si eres músico y quieres añadir música siempre se puede acomodar en una zona de la memoria alta para que suene justo antes de ejecutarlo, al terminar la carga. En cuanto se ejecute el juego se sobrescribirá y no se podrá volver a oír, pero es mejor que nada (es como funciona Ramiro, por ejemplo, entre otros).
- Reducir el mapa - dependiendo si usas packed o unpacked, puedes ganar 75 o 150 bytes por cada pantalla que recortes.
- Pasar a 128K - las pantallas comprimidas y la música AY van en RAM extra con lo que se te libera bastante memoria para tu juego.
- Comprimir el mapa con las utilidades de A.Villena - algunos chicos del foro lo han usado, pero serían ellos los que tendrían que ayudarte con el paso. Aquí hay instrucciones: viewtopic.php?p=50087#p50087 .
- Portar el juego a MK2 - se hace en un momento y ganas varias cosas: todo está más optimizado con lo que probablemente tu juego cabrá sin cambios, el motor va más fluido con lo que tu juego irá más suave y más rápido, y además tienes como el doble de posibilidades de añadir cosas chulas al juego

Como ves hay muchas cosas que puedes hacer para conseguir la memoria que necesitas.

Personalmente, yo no me lo pensaría y lo portaría a MK2. Es algo que puedes hacer, como digo, en un rato. Quizá sea hora de hacer un minitutorial con el proceso para portar de Churrera a MK2, sería interesante. Veré si encuentro tiempo.

Si no quieres portar a MK2, yo probaría las soluciones en el orden que te las he dado.

¡Suerte!

Re: Proyecto: Doctor Adventures

Publicado: Mié, 26 Ago 2015, 09:51
por Gocho
Lo del tuto de churrera a MK2 sería ideal...

Re: Proyecto: Doctor Adventures

Publicado: Mié, 26 Ago 2015, 19:37
por errecepe
$this->bbcode_second_pass_quote('na_th_an', '
')El error que te da es un fallo que hay en el código de la versión 3.99.3c. En la linea 109 de engine.h falta un ; al final, con ponerl se arregla el fallo.


ostia.. pues no me había dado por mirar que fuera precisamente de lo que se quejaba.. no me lo esperaba ! :D
El ; que faltaba es exactamente en la 104. Ahora va perfecto.

$this->bbcode_second_pass_quote('na_th_an', '
')Veo que estás teniendo problemas de memoria (Si tu bloque principal ocupa más de 36655 bytes - creo que era, ese es tu problema). Aquí tienes varias opciones:

- Usar la versión "WIP" no lanzada oficialmente de la Churrera que puedes encontrar por ejemplo en este hilo: viewtopic.php?p=68004#p68004 . Esta versión aprieta un poco los machos en un par de áreas para liberar alrededor de 200 bytes, y permite además configurar los requerimientos de memoria para ajustarlos al máximo a tu juego. La Churrera reserva una cantidad fija de memoria para los sprites, y esta versión te permite ajustar exactamente la cantidad de memoria que se reserva dependiendo de los sprites que uses en pantalla. Viene todo explicado en el hilo. Quizá esto te salve el juego.
- Intentar obtener más memoria de la que se llevan las pantallas comprimidas. Creo que se menciona en el tutorial: cuanto más complejas sean las pantallas de título, marco y final peor se comprimen y más memoria ocupan. Si eliminas elementos de ellas para que tengan "menos cosas" seguro que liberas bastante memoria.
- Eliminar la música beeper. Puedes sacarte así de la manga un Kb y pico extra para tí. El menú se queda mudo, pero si eres músico y quieres añadir música siempre se puede acomodar en una zona de la memoria alta para que suene justo antes de ejecutarlo, al terminar la carga. En cuanto se ejecute el juego se sobrescribirá y no se podrá volver a oír, pero es mejor que nada (es como funciona Ramiro, por ejemplo, entre otros).
- Reducir el mapa - dependiendo si usas packed o unpacked, puedes ganar 75 o 150 bytes por cada pantalla que recortes.
- Pasar a 128K - las pantallas comprimidas y la música AY van en RAM extra con lo que se te libera bastante memoria para tu juego.
- Comprimir el mapa con las utilidades de A.Villena - algunos chicos del foro lo han usado, pero serían ellos los que tendrían que ayudarte con el paso. Aquí hay instrucciones: viewtopic.php?p=50087#p50087 .
- Portar el juego a MK2 - se hace en un momento y ganas varias cosas: todo está más optimizado con lo que probablemente tu juego cabrá sin cambios, el motor va más fluido con lo que tu juego irá más suave y más rápido, y además tienes como el doble de posibilidades de añadir cosas chulas al juego


- lo de la version WIP suena bien. Si no implica sacrificar nada a cambio, me pondré ahora mismo a ello.
Era una de las cosas que me preocupaba, no tenía claro si tenía en cuenta cuantos sprites me estaba usando (en work.png uso unos 24 tiles, quedando luego tileset.png medio vacio)
- lo de las pantallas, ya tube que reducir drásticamente la pantalla de final (la de title pesa 2010 bytes)
- lo del beeper ¿ es sencillo ? En la primera versión que probé de la churrera, no había musica al iniciar el juego. En la que bajé después (más nueva) si que la hay, y la verdad... no he sabido desactivarla.
- reducir el mapa, te refieres en cantidad, o alto/ancho en tiles ? No sabia que se pudieran 'packear' o no tambien las pantallas.
- Lo de los 128K en principio no lo contemplo. Mi idea es que funcione sobre 48kb.
- Portarlo a MK2, pues.. me tira un poco para atrás, porque me conozco, y como me complique mucho el tema, soy capaz de no acabarlo. Si la base es similar a la churrera, pues no descarto que el siguiente juego que realize, lo haga en MK2


Siento las preguntas de nab, pero es que sólo llevo un par de semanas con el tema, y bueno, que tampoco dispongo de todo el tiempo que me gustaría...

Muchas gracias por las respuestas ! :adore:

saludos, @errecepe

Re: Proyecto: Doctor Adventures

Publicado: Jue, 27 Ago 2015, 08:39
por na_th_an
Te respondo entre lineas:

$this->bbcode_second_pass_quote('errecepe', '-') lo de la version WIP suena bien. Si no implica sacrificar nada a cambio, me pondré ahora mismo a ello.
Era una de las cosas que me preocupaba, no tenía claro si tenía en cuenta cuantos sprites me estaba usando (en work.png uso unos 24 tiles, quedando luego tileset.png medio vacio)


La versión WIP es básicamente la que tienes pero con varios cambios un tanto agresivos para sacar más bytes (que por lo pronto han usado dos personas y que parecen funcionar perfectamente), además de la configuración para el número exacto de bloques que usen tus sprites. La Churrera tal y como la tienes toma el máximo posible de bloques necesarios si lo activas todo. Por ejemplo (y te hablo de memoria) creo que la Churrera reserva 60 bloques; si tienes los 4 sprites (personaje + 3 enemigos) y los disparos activados con 3 balas, necesitarás 4*10 + 3*5 = 55 bloques, con lo que algo ya estás ahorrando. Cada bloque son 15 bytes. 75 bytes no parece mucho pero muchas veces es todo lo que necesitas.

$this->bbcode_second_pass_quote('errecepe', '-') lo de las pantallas, ya tube que reducir drásticamente la pantalla de final (la de title pesa 2010 bytes)


Y si te ves apurado habría que reducirla incluso menos. En Ramiro el Vampiro tuvimos que quitar título y créditos incluso. Por lo general, para 48K, yo trato de "empezar" el proyecto con la pantalla de título ocupando un máximo de 1200 bytes. Siempre habrá tiempo de hacer una más complicada al final, si sobra espacio.

$this->bbcode_second_pass_quote('errecepe', '-') lo del beeper ¿ es sencillo ? En la primera versión que probé de la churrera, no había musica al iniciar el juego. En la que bajé después (más nueva) si que la hay, y la verdad... no he sabido desactivarla.

Quitar la música beeper por completo es cuestión de comentar dos lineas: la que incluye el código del player y la que lo llama. Cambiar la música es más laborioso pero no es difícil.

Para quitar la música beeper hay que comentar esta linea que hay al final del churromain.c:

$this->bbcode_second_pass_code('', '#include "music.h"')

Y luego hay que quitar la llamada que ejecuta el player en engine.h (alrededor de la linea 1516; ten en cuenta que esta linea está en un bloque de ensamblador y tendrás que comentarla usando un PUNTO Y COMA ; ):

$this->bbcode_second_pass_code('', 'call musicstart')

$this->bbcode_second_pass_quote('', '-') reducir el mapa, te refieres en cantidad, o alto/ancho en tiles ? No sabia que se pudieran 'packear' o no tambien las pantallas.

Me refiero a quitar pantallas. Lo de packed/unpacked se explica al principio del tutorial: se refiere a hacer mapas de hasta 16 tiles, en los que cada tile ocupa medio byte (4 bits, por eso se llaman "packed", porque se meten dos tiles por byte) o de 17 a 48 tiles, en los que cada tile ocupa todo un byte. Los mapas "packed" ocupan exactamente la mitad que los unpacked, y muchas veces los tiles "extra" que necesitas se pueden colocar como decoraciones desde script.

$this->bbcode_second_pass_quote('', '-') Lo de los 128K en principio no lo contemplo. Mi idea es que funcione sobre 48kb.
- Portarlo a MK2, pues.. me tira un poco para atrás, porque me conozco, y como me complique mucho el tema, soy capaz de no acabarlo. Si la base es similar a la churrera, pues no descarto que el siguiente juego que realize, lo haga en MK2

Portarlo a MK2 implica coger MK2 pelado, copiar tus gráficos y tu mapa, activar en config.h las mismas cosas que tienes, y compilar. Tardé unos dos minutos en portar Aquanoids de Neil Parsons a MK2. Aquanoids no usa nada especal de MK2, sólo se beneficia de las mejores rutinas y mejor organización, y poco más. Antes de tocar nada, Aquanoids no funcionaba porque sobrepasaba los 37Kb. Al portar a MK2 se quedó levemente por encima de los 34. Significa que se ahorró 3 Kb sólo cambiando de engine :D Entiendo que puede surgir la tentación de ponerse a juguetear con las cosas nuevas, pero si con todas las cosas que hay arriba no consigues liberar los bytes que necesitas, me temo que será la única salvación.

$this->bbcode_second_pass_quote('', '
')Siento las preguntas de nab, pero es que sólo llevo un par de semanas con el tema, y bueno, que tampoco dispongo de todo el tiempo que me gustaría...

Muchas gracias por las respuestas ! :adore:

saludos, @errecepe

Suerte, verás como sale adelante.

Re: Proyecto: Doctor Adventures

Publicado: Jue, 27 Ago 2015, 21:03
por errecepe
Bueno, pues aquí pongo a disposición de los posibles curiosos, una primera versión supuestamente completable,
de lo que llevo.

http://www.birdsprojects.com/rcp/gamedev/zx/doctoradventures/201508272036.rar

Digo supuestamente porque yo mismo soy incapaz de completarlo.
Incluso iniciando con arma, más vida de la normal... soy incapaz.
Pero vamos, a 'cachos' si lo he completado.

Cualquier crítica será bienvenida.
Sobre todo en el aspecto de jugabilidad y la dificultad que presenta.


En el aspecto técnico, doctorad.bin viene pesando 35.773 bytes, por lo que aun puedo meterle algo de decoración.

Una duda que tengo, es, SIN estar usando la versión WIP ésta que permite optimizar la cantidad de sprites a usar de tileset.png,
cuantos tiles más puedo usar en el actual work.png ?
me da, por la cantidad de 0 que veo en mi tileset.h, que todos los espacios vacíos del gráfico van a ocupar lo mismo en bytes en
tileset.h, pero no se si se comprimen de alguna manera como las pantallas, y si, usar más gráficos implicaría subir el tamaño de doctorad.bin.

Si ocupan lo mismo, luego podría poner unos cuantos SET TILE a modo de decoración.

Aun tengo que quitar, al menos, la musiquilla que suena en el menu de inicio... No se cuantos bytes más me dará eso.
Los SOUND del juego, si que no quiero perderlos.


Y ahora otra cosa que me preocupa: los gráficos.
Los de tileset son de otros juegos. Sólo uno o dos son realizados a mano desde 0. El resto están ligeramente modificados (todos).

El sprite del personaje principal, es de otro juego mojono, también ligeramente modificado.
Los enemigos, son directamente los de PLANETA ROJO de Salvador Cantero.

Hasta que punto puedo usarlos tranquilamente ?
La verdad, me da mucha pereza rehacer todo el tileset, y ya puestos, el resto de enemigos...
Pero vamos, si tengo que.. lo haría, o usaría algunos disponibles, que supongo que habrá...
No se,.. desconozco como funciona este tema.


saludos, y gracias por todo!
@errecepe

Re: Proyecto: Doctor Adventures

Publicado: Jue, 27 Ago 2015, 21:17
por na_th_an
Buenas.

Lo del número de tiles es lo que te decía de packed/unpacked y se explica en el capítulo de la churrera que habla sobre el mapa y el tileset.

Aquí hay dos opciones:

- Usar cada byte para almacenar dos tiles. Un byte son 8 bits, así que tenemos 4 bits para cada tile. Eso significa que sólo puede haber 16 tiles distintos en el mapa . El resto de los tiles se puede usar, pero hay que ponerlos usando SET_TILE en el script. Así, cada pantalla ocupa 75 bytes. Para hacerlo, hay que asegurarse de que en el mapa todos los tiles son de 0 a 15 y poner "packed" en mapcnv. (*)

- Usar cada byte para almacenar un tile. Un byte son 8 bits, con lo que en teoría podríamos tener 256 tiles distintos. Lo que pasa es que por (ciertas razones que si queréis explico) el máximo soportado son 48 tiles distintos. Por tanto, cada pantalla ocuparía 150 bytes, y el mapa ocuparía el doble exacto que uno que sea tipo "packed".

(*)Hay UN MONTÓN de trucos que se puede usar para tener mapas de 16 tiles (tipo packed) pero poder disponer de más gráficos. Puedes cambiar qué 16 tiles de los 48 se pintan dependiendo de en qué pantalla estás, por ejemplo, como se hace en Ramiro el Vampiro. Puedes colocar decoraciones desde el script sin restricciones, puedes hacer que el fondo se pinte programáticamente usando otros tiles que no están en el mapa... Hay muchas cosas que se pueden pergreñar dependiendo de cómo sea tu mapa y que pueden ayudar a no tener que emplear un byte por tile en el mapa.

Leo que usas SET_TILE para decorar, así que asumo que estás usando un mapa packed de 16 tiles. Puedes rellenar todo el tileset (hasta 48) sin que ocupe más, claro. Como ves, lo que condiciona el tamaño del mapa (aparte del tamaño) es cuántos tiles se pueden meter en un byte, sin importar realmente cuántos tiles haya en el tileset.

Sobre el tema de los gráficos, sólo te puedo hablar de los gráficos nuestros. Nosotros publicamos con una licencia CC que puedes leer en la web. Con que hagas un uso no comercial, cites procedencia, y distribuyas en los mismos términos puedes hacer con los gráficos lo que te de la gana :D

Re: Proyecto: Doctor Adventures

Publicado: Jue, 27 Ago 2015, 21:45
por errecepe
Ostrás.. entonces, si cada pantalla ocupa solo 75 bytes con el packed, y aun me quedan 882 hasta los 36655, aun podría meter 11 (882 / 75=11) pantallas más ?

Digamos 10 (2 filas de 5), para hacer un par de filas a los laterales, y dejar algún byte (132 bytes) para el scripting de más necesario.

Es así ?

Y aun podría usar el resto de tiles, si los uso con SET TILES ... buah...

esto me va a dar para unos días más con este proyecto xD

Re: Proyecto: Doctor Adventures

Publicado: Vie, 28 Ago 2015, 09:15
por elborra
Bievenido al foro errecepe,

Lo tuyo ha sido legar y demo al canto. A ver si este finde puedo le doy un tiento al juego (y a los otros que han ido saliendo :D)

A todo lo que te ha dicho nathan añadir (por si quieres hacerte cálculos) que cada vez que usas SET TILE (x,t) = n consumes 4 bytes.

Re: Proyecto: Doctor Adventures

Publicado: Sab, 29 Ago 2015, 01:05
por errecepe
bueno, más que demo... no se ni como calificarlo...
hace tiempo (bastante) que había visto el curso de la churrera, y tenía ganas de incarle el diente.

Recientemente vi Planeta Rojo y Aquanoids y fué lo que acabó de motivarme a intentarlo.


Y eso que te bajas el zip, descomprimes... empiezas a trabajar sobre ello...
y probando probando... pues te sabe mal echarlo a perder...
Creo que le habré dedicado unas 8 o 9 noches... no mucho más..

Insisto en la falta de tiempo..


Si te digo la verdad, descubrí el archivo de motor-de-clausulas.txt hace dos días (justo antes de subir la 'demo'),
donde vi que estaban todas (o al menos un montón) de clausulas y comentarios explicando... -,-

Ahí ya acabé de enloquecer... por lo que, supongo que daré por finalizado pronto esta primera parte,
y empezaré ya una segunda, con algo más de idea y 'documentación'.


Respecto a lo que me dices de los 4 bytes... pues ahora me tocará echar cuentas de si merece la pena,
teniendo en cuenta la media de SET TILES por pantalla para completar la decoración.. y comprobar que sale más a cuenta.

Me viene genial la información!

Por otro lado, respecto al tema de gráficos, Salva Cantero (autor de Planeta Rojo) me ha confirmado que su proyecto es 'CC', y que puedo hacer lo que quiera.. o sea,
que tampoco tengo que 'preocuparme' por eso... (genial, porque soy pésimo realizando gráficos)

saludos, @errecepe !