Karoshi MSX Community
05 de Julio de 2021, 11:54:30 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Nueva herramienta para Scrolls TMS  (Leído 5641 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« : 23 de Diciembre de 2011, 12:40:52 am »

Buenas, voy a enseñaros una cosita que empecé como herramienta auxiliar para un proyecto de juego que tengo entre manos, y que creo que puede ser útil para facilitar el desarrollo de nuevos juegos, o incluso para que gente que nunca se haya se haya atrevido aún se anime porque sólo con tener una imagen del mapeado, en pocos segundos, conseguiremos una rom (Y el fuente en ASM) funcional con un scroll de dicha imagen que sirva como esqueleto para seguir con un montón de dificultades ya superadas. Está pensado para MSX1, Screen 2 y movimiento de 8x8 píxeles.

Costa de dos partes, una es una aplicación escrita en Java (Como no  Roll Eyes) que toma de entrada una imagen y parámetros acerca del tamaño y posición del scroll y da como salida cuatro archivos:
  • El banco de patrones
  • El banco de colores
  • El mapa de nombres
  • Configuracion para asm

Lo más interesante que creo que tiene, es que es capaz de sacar provecho de que los distintos tercios de la pantalla pueden tener juegos de caracteres distintos, es decir analiza los tiles que forman toda la imagen, y teniendo en cuenta el tamaño y posición de la ventana respecto a los tercios, se encarga de hacer la ¿Mejor? distribución posible, teniendo en cuenta los que se repiten en dos o tres tercios y los que sólo aparecen en uno de ellos. Por ejemplo, si queremos hacer un scroll puramente  horizontal a pantalla completa (Suponiendo que no haya marcos, contadores, etc), pues permitirá hasta 256 caracteres distintos por línea. Si por ejemplo el scroll fuera una ventana de 32*9 caracteres situados en 0,0. De la líneas 0 a 7 podría asignar 256 caracteres correspondientes al 1er tercio, y en la línea 8 otros 256. Para el caso de scroll verticales, obviamente se le puede sacar mucho menos provecho a esto, pero casi siempre alguno más sale que poniendo los bancos iguales.

Otra ventaja es que el grafista puede ir puliendo la imagen por su cuenta y probando si cumple las condiciones, y un momento ensamblarlo con el trabajo del programador y ver el resultado.

La segunda parte, es un archivo .ASM que todavía estoy puliendo y comentando, y un .BAT a modo de MAKE que ensambla todo. Os dejo un par de ejemplos de la salida, sólo hay que elegir la imagen, el tamaño de la ventana, y su posición y salen cosas así:


Se mueve con los cursores a velocidad normal, y dejando la barra pulsada va más rápido. Todo entra en un frame, así que no hay problemas de velocidad, además sólo hay que decir la coordenada superior izquierda y la rutina se encarga de todo y posicionaría al siguiente frame. Así que también se podría utilizar para juegos sin scroll de varias pantallas, colocándolas todas en la misma imagen y reposicionando según necesidad.

Las limitaciones, pues por ejemplo el tamaño del mapa. Ahora mismo el motor en sí ocupa poco más de 1KBs, los patrones y los colores se comprimen con BITBUSTER, y el mapa va descomprimido y ocupará ancho*alto píxeles, por ejemplo en la demo del Golvelius serían 144x144=20736, y a pesar de eso la rom ocupa 24KB. El límite por ahora para no complicar mucho las cosas es de crear ROMs de hasta 32KB. Si se van a poner mapeados extensos y no se quiere usar un megarom, siempre se podrá comprimir e ir descomprimiendo a ram.

¿Que os parece?  ¿Alguna pregunta?  ¿Alguien se animaría a utilizarla?

¡Espero que en breve pueda poner alguna beta disponible!
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 23 de Diciembre de 2011, 08:26:46 am »

Hola. Interesante propuesta, especialmente si viene con un conversor listo para ser usado.

En cualquier caso, dos son las cosas que me preocupan:

- El consumo de memoria, ya sea ROM o RAM, para mantener todo esto funcionando. Aunque sea muchísimo más complejo desarrollar un conversor automático, lo suyo sería emplear metatiles para ahorrar memoria, aunque la complejidad del programa crecería.

- El tema de las diagonales: como utilizas en las demos movimiento al pixel, cuando haces diagonales es muy posible que el movimiento vertical y el horizontal no se den en el mismo frame, lo que produce un efecto visualmente muy incómodo de bamboleo de la imagen. Se puede solucionar, pero impactará en el movimiento del cursor. Esto mismo sucedía (sucede?) con la demo del Super Mario Bros que estaba preparando Retrocanada en MRC.

En cualquier caso, una solución fantástica para alguien que quiera disponer de un scroll sin complicarse la vida lo más mínimo. Enhorabuena por la iniciativa y por compartirlo. Eso sí, me interesa saber más sobre el proyecto que te hizo desarrollar todo esto.

Saludos,
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #2 : 23 de Diciembre de 2011, 10:21:27 pm »

Pues comento sobre tus preocupaciones  Cheesy

Sí, tener que tener el mapa descomprimido ya sea en rom o ram no es la solución perfecta, pero quería mantener lo más sencilla posible la parte de las rutinas en el MSX. Programar una buena solución general para sacar partido de los metatiles algorítmicamente es como dices muchísimo más compleja, sería algo parecido a un codec de vídeo, y aunque en la parte Java no habría problemas en cuanto a recursos, la descompresión en el Z80 se llevaría sus buenos ciclos, necesitaría un buffer ram, además el tiempo de ejecución variaría dependiendo de la complejidad de la imagen y del frame en paticular... Lo que hay ahora cabe en el retrazado, siempre consume los mismos ciclos, sólo necesita unos pocos byes de ram además de los del mapa, y puede dibujar en cada frame el scroll en la posición que se quiera sólo modificando dos variables. Vaya, que la memoria es el precio a pagar por que todo lo demás sea bastante favorable (Creo)

De todas formas, cogiendo como el fantástico Knightmare como ejemplo de juego con fases tirando a largas, cada una ocuparía descomprimida 32x238=7616 bytes, pero con bitbuster se comprimen a menos de 1KB (El a su modo sí le saca partido a los metatiles  Grin), así que si contamos con ese espacio en ram podríamos meterlo también sin muchos problemas en 32KB.

En cuanto a las diagonales, ya me había dado cuenta del efecto 'escalera' que dices, pero bueno, eso en realidad es ya cosa del uso que sé le dé a las rutinas, ahora que siguen al cursor es muy evidente, pero ya para cada juego se podría hacer que el desplazamiento cayese en el mismo frame si el protagonista salta por ejemplo, o si se hace un algo tipo offroad el scroll podía moverse sólo horizontal y verticalmente para rodear la pista.

Y bueno, añadir, que con pocas modificaciones, se podría hacer que generase scrolles más finos partiendo de la misma imagen, por ejemplo si queremos hacer un juego con scroll horizontal puro de 4 en 4 píxeles, podría calcular los tiles necesarios desplazados, y el programa se encargaría de  encajarlos en las tablas de patrones y nombres (Si caben), y crear dos mapas de nombres, una para las posiciones 'normales' y otra para las 'intermedias'. De nuevo, el precio es más RAM o ROM. Y ya, llevándolo al extremo, si la imagen es la adecuada, podría llegar a generar scrolles al pixel, vaya, que le das el mapeado del Malaika y Roll Eyes Contando además con la ventaja de que cualquier cambio en el mapeado o tiles no necesitaría más que unos segundos para ternerlo aplicado al código!


En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #3 : 30 de Enero de 2012, 11:06:16 am »

He estado dándole vueltas al asunto del excesivo consumo de memoria, y he encontrado una mejora sencilla, que como siempre dependiendo del mapeado en cuestión resulta más o menos eficaz: No guardar las líneas horizontales que se repiten. Con los de scroll vertical puro con los que he hecho más pruebas (Knightmare y Zanac) se consigue un ahorro del 50% aproximadamente.

También he trasteado otras técnicas para comprimirlo más, como partir cada línea en varios trozos o descomprimir RLE directamente a VRAM con la rutina que hizo Iggy Rock, pero ya habría que afinar un poco manualmente para cada tipo de juego y mapa la mejor opción, y el código dejaría de ser sencillo y genérico , así que por ahora las dejo aparcadas.

La parte que analiza la imagen ya está prácticamente terminada, y la del motor funciona, falta hacerlo un poco más claro todo, comentarla mejor y poco más.

En línea
Iggy Rock
Visitante
« Respuesta #4 : 10 de Febrero de 2012, 03:01:05 pm »

Eh! que interesante! puedes colgar algún ejemplo incluyendo estas mejoras?
« Última modificación: 10 de Febrero de 2012, 03:03:22 pm por Iggy Rock » En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #5 : 10 de Febrero de 2012, 04:44:53 pm »

Pues no puedo poner ejemplos por ahora porque sólo probé la parte del conversor, no he modificado todavía el asm del motor para aceptar la compresión. De todas formas tampoco tendrían nada de especial porque se verían exactamente igual que los que ya hay subidos, sólo que los mapas ocuparían menos memoria.

Por si te interesa lo que hace el compresor es crear el mapa sin repetir líneas, y crea una tabla adicional de words del tamaño de la altura del mapa con el desplazamiento al inicio de cada línea. Así que presentarlo es casi igual, sólo que la siguiente línea no está a continuación de la otra, además hay que sumar (o restar) este desplazamiento.


En línea
PAC
Karoshi Fan
**
Mensajes: 91


« Respuesta #6 : 17 de Febrero de 2012, 12:27:23 pm »

Hola Mortimer,

Comentarte que actualmente estoy dentro del staff del MSX Resource Center. Los mandamases Grin nos comentaron que cualquier cosa que se moviera en el bando español Cheesy la hiciéramos saber y así, de esta forma, poder añadirla a la sección de noticias. ¿Te gustaría que tu nueva herramienta fuera anunciada o quizás mejor esperar? En mi opinión no es necesario que esté finalizada, el hecho de anunciarla allí también te puede servir para mejorarla con comentarios de usuarios al igual que está sucediendo en Karoshi.

Saludos.
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #7 : 17 de Febrero de 2012, 03:10:29 pm »

Hola Pac, muchas gracias, pero prefiero esperar a poder ofrecer algo descargable y usable, y tener también la documentación en inglés antes de hacer la presentación 'oficial'. Cuando llegue el momento te doy un toque!

Aprovecho para contaros que el conversor ya funciona bien, pero ahora le estoy añadiendo un gui para hacerlo más fácil de usar. Y el motor también funciona, peor aún tengo que depurarlo y comentarlo.
En línea
PAC
Karoshi Fan
**
Mensajes: 91


« Respuesta #8 : 17 de Febrero de 2012, 04:40:43 pm »

Vale! Wink
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!