Proyecto juego Churrera. Dudas

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

Re: Proyecto juego Churrera. Dudas

Mensajepor elborra » Mar, 04 Feb 2014, 13:09

Continuando por aquí he vuelto al tema del uso de tilesets, algo que ya había resuelto con anterioridad (gracias a nathan) pero que el desarrollo del juego a "sufrido" unos cambios y ahora no se que es mejor o peor; e independientemente me gustaría saber un poco el funcionamiento (o el trato) de los tiles en la churrera.

Me explico, nathan propuso que en lugar del proceso por defecto con los tiles: "crear, reordenar, juntar con la fuente y exportar a tileset.h", los exportara a .bin y comprimiera con appack, para luego descomprimir cuando hiciera falta, etc, etc, así mediante un extern podia cambiar de tilesets rápidamente...

Bien mi duda es, en el método tradicional, ¿qué pasa con tileset.h después de compilar?, quizás esto sea una pregunta demasiado vaga y extensa de contestar... A mi principalmente lo que me interesa es el espacio final que ocupa un tileset, o mejor dicho, habría alguna diferencia de tamaños respecto a comprimir el tileset, o a fin de cuentas algo parecido ocurre en la trastienda para el método tradicional?
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto juego Churrera. Dudas

Mensajepor na_th_an » Mar, 04 Feb 2014, 13:17

Ningún dato se puede usar si está comprimido, por tanto hay que hacer sitio para descomprimirlo. Por lo general, el tileset.h están los caracteres que se utilizan en el juego y sus colores, apuntados por el puntero "tileset", ocupando 2304 bytes. Cuando cambias de tileset, lo que se hace es descomprimir un set comprimido (que puede estar en otro sitio de la RAM de 48K, o en alguna página de la RAM extra de los 128K) sobre "tileset", remplazando efectivamente los 2304 bytes originales por otros.

Lo que hacemos nosotros en los juegos de 128K (Goku mal y los que preparamos) es tener en tileset.h el tileset básico que sólo contiene las letras, para poder imprimir textos antes de cargar los niveles. También podrías tener ahí el tileset inicial, si lo que vas a hacer es cambiar el tileset en medio del juego.

El tamaño del tileset comprimido depende de la complejidad del mismo.

No entiendo muy bien tu pregunta :D Cuando compilas el juego, los 2304 bytes con los caracteres y sus colores se ubican en una posición de memoria apuntada por "tileset". Al inicializar el motor gráfico, simplemente se le comunica dónde puede encontrar estos gráficos. Cuando descomprimes un tileset nuevo sobre ese área de memoria, el motor gráfico ni se da cuenta. Sólo sigue usando los datos que tiene para dibujar, y estos han cambiado.
Como diría Rorshach: "Urm..."
Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

Re: Proyecto juego Churrera. Dudas

Mensajepor elborra » Mar, 04 Feb 2014, 16:15

$this->bbcode_second_pass_quote('na_th_an', '.')..
El tamaño del tileset comprimido depende de la complejidad del mismo.

No entiendo muy bien tu pregunta :D Cuando compilas el juego, los 2304 bytes con los caracteres y sus colores se ubican en una posición de memoria apuntada por "tileset". Al inicializar el motor gráfico, simplemente se le comunica dónde puede encontrar estos gráficos. Cuando descomprimes un tileset nuevo sobre ese área de memoria, el motor gráfico ni se da cuenta. Sólo sigue usando los datos que tiene para dibujar, y estos han cambiado.

Yep, es que cuando tengo dudas con algo soy muuuuy malo explicandome.... Quizás poniendo mi caso concreto es más sencillo.

No creo que vaya a manejar 2 tilesets completos que se alternen, en cambio he llegado a una solución intermedia donde los primeros 32 tiles son fijos y los 16 restantes son "sets" variables, por tanto 80 tiles (48 a la vez, claro). Independientemente de como gestione esto (todo en tileset.h y con offsets), está claro que los datos de los gráficos tienen que estar en algún lado (el gráfico monocromo 1:1 y los atributos por otro lado), ok. Mi duda es si el contenido de tileset.h recibe algún tratamiento especial al compilarse o simplemente habrá X bytes reservados (según el tamaño de la estructura) con una equivalencia 1:1 (que es lo que imagino). Lo cual significa que si exporto el tileset a .bin y lo comprimo me ocuparía menos espacio físico ( Para utilizarlo está claro que tengo que descomprimir la información con la función unpack que ya usais para las pantallas fijas).

Antes de soltar el mismo rollo abajo, al final esto se resume en: ¿ diferentes set de tiles en tileset.h es peor que N tileset.bin comprimidos?

Ahora bien, quizás mi ineptitud técnica del spectrum (hablo del Spectrum48K) hace que no tenga/tuviera claro algunos conceptos:
- La memoria del Spectrum es de 48K: ¿eso significa que cualquier cinta/juego para este sistema no puede ocupar más de 48KB de código? (sin meternos en dobles cargas o como pifostios se llame...si es que existe jajajaja ... y teniendo en cuenta que en esos 48KB tb está el loader y supongo que alguna cosa más)

- Si esto es así, tengo 48KB para todo, ¿ de los cuales splib y/o la churrera tiene si o si reservados 2304 bytes para los caracteres?, los 48 tiles y los atributos de color de todos, esa zona siempre vendrá apuntada por "tileset" dices, pero no veo esto claro (no se si lo dices por no extenderte o es que realmente es así) porque tileset es una estructura (vaaale tileset o tileset[0] apuntará al principio) pero con esto no "dibujo" nada, supongo que en algún lado "alguién" tendrá que decirle a splib que apunte tb a dicha estructura (seguro la estoy cagando por cada palabra que digo...) En cualquier caso, que me pongo a desvariar en cosas que ocurren gracias a la magia y yo con la magia no me meto :P .... volviendo al tema, si tengo 48K para todo y hay una zona de esos 48K de 2304 bytes donde siempre deberan estarán los datos en raw para que así se puedan pintar, en cuestión de espacio siempre vendrá mejor que comprima los datos y cuando me hagan falta los descomprimo en esa zona de 2304 bytes (donde corresponda si no voy a cambiarla entera), cherto'? :cabesa: