Usando los nibbles tendría imagino 16 posibilidades, para un Gauntlet está bien pero para algo más complejo visualmente, no sé
No te creas, Darth. Te pongo dos ejemplos:
1. En el Saimazoom el mapa está definido por nibbles (cada tile, un nibble). Pero si cuentas las tiles distintas que hay, no te saldrán las cuentas, ya que las tiles decorado + los items + las tiles del rio, en total suman unas 28 tiles distintas o así. ¿Donde está el truco?. En que nunca salen las 28 tiles en la pantalla a la vez
, así que puedo definir de las 16 tiles que 4 de ellas sean cambiantes dependiendo de la localización en la que esté. Luego guardo un pequeño index que ocupa pocos bytes que indica cuales son esas 4 tiles en cada pantallita y listo. Redefinición al poder.
2. Mapas a nivel de bit. Si, si, unos y ceros y a tomar vientos. Lo importante es la rutina que renderizará el tema.
Imagínate una pantalla definida así.
(The Legend of Zelda, NES)
Cómo ves, las tiles son distintas, pero solo en apariencia al ser renderizadas, no en el buffer. Es decir, esta pantalla está definida con unos (pared) y ceros (hueco "pasable"). ¿Que ocurre?. Que el programa, al pintar cada tile, COMPRUEBA CUALES SON LAS TILES QUE LA RODEAN... así, un "1" rodeado de "0"s por todas partes se renderiza con la tile de la roquita independiente, un "1" rodeado de "1"s resulta ser una pared y un "1" con un "0" debajo y a la derecha y un "1" arriba y a la izquierda se convierte en una tile de "esquina". Es decir, que controla gráficamente 10 tiles distintas (las 8 direcciones + la del medio + mas un "1" rodeado de ceros), tan solo con bits!. Así, esta pantalla de 16x11 tiles (bits) ocupa 176 bits, osea ¡¡¡22 BYTES!!! (y todo esto sin comprimirlo después con RLE!!!!). Claro, así te puedes cascar un mapeado acojonantemente gigante. Ahora tu me dirás... y los enemigos de pantalla?, y las puertas?... pues los enemigos de cada pantalla puede ser un byte más en la cabecera de cada pantalla (ese byte indicaría el tipo de "party" de enemigos). Podríamos usar otro byte para definir el set de tiles a utilizar para que muestre difierentes tiles (podemos tener varias de esas 10 tiles, por ejemplo decorado montañoso, de playa, un bosque).Y las puertas, cofres y demás, formaría parte de un index de excepciones que llevaría un buffer aparte. ¡Y ya está!.
CÁLCULO: Así tenemos que cada pantalla=24 bytes (party monstruos(1 byte), tileset(1 byte), map data (22bytes)) > 4800 bytes=200 pantallas!!! (y esto, sin una compresión posterior). ¡Y mostrando mogollón de tiles distintas!.
Lo único es que esto es válido para un juego pantalla a pantalla, aunque también podría valer para tu scroller si renderizas todo el tema en RAM y luego lo vas volcando como apuntaba jltursan.