Páginas

26 agosto 2014

spriteSX devtool v0.9.4b


En estos días de verano, a pensar del aletargamiento por el calor, he sacado algunas horas para hacer algo de provecho y ha salido esta versión del spriteSX con algunas herramientas que creo interesantes para los que dibujéis figuras móviles para el TMS9918 y V9938.

Ahora dispone de herramientas tipo Paint, para hacer líneas, rectángulos, circunferencias y rellenado. Todas pueden actuar en positivo o negativo según el botón del ratón que pulsemos y los rectángulos y circunferencias pueden ser con o sin relleno. En una versión próxima quiero sustituir la herramienta de circunferencia por elipses.

Quizás estas herramientas no sean muy interesantes, sobretodo en el caso de una figura de solo 8x8, pero nadie me negará que la siguiente funcionalidad es de lo más útil. Para que podáis echar atrás algún paso que no os guste como os ha quedado, le he añadido un Undo/Redo de 16 pasos.

Otra funcionalidad que he añadido, son atajos de teclado, para los que prefiráis esta forma de acceder a las funcionalidades de la aplicación.

También he corregido un par de bugs y le he añadido ejemplos en ensamblador.

Aprovecho para agradecer la ayuda de Fubu y JamQue, que en una merienda de colas y sandwiches de nocilla, me echaron una mano en el desarrollo de dos de las herramientas de esta versión. :)

  • Podéis descargarlo en la WEB del proyecto spriteSX devtool.
  • Tenéis más información de la versión en el Readme.

05 julio 2014

MSX tiles devtool v0.9b


Hoy toca publicar la primera versión del MSX tiles devtool. Se trata de una aplicación para trabajar con imágenes en el modo gráfico 2 del VDP TMS9918 y obtener un volcado a diferentes formatos de código (Ensamblador, C o Basic). 

Esta herramienta nació hace unos años para convertir los proyectos del nMSXtiles de Pentacour a C, además de la necesidad de algunas herramientas para poder desarrollar el software PSGed.

Además de la entrada de proyectos del nMSXtiles dispone de un formato propio, y de formatos gráficos como el SC2 (Binario del MSX Basic) y bitmap GIF/PNG.

Incluye algunas herramientas como un optimizador de los datos para mejorar la compresión y otras para cambiar colores o tiles. La salida a código podremos hacerla con compresión RLE o RLE WB (comentado en este blog).

También disponemos de un editor de la paleta del V9938 o superiores. Además disponemos de un visor donde podremos ver el mapa o los tres bancos de tilesets de nuestra imagen.

Podéis descargarlo en la WEB del proyecto MSX tiles devtool.

04 julio 2014

spriteSX devtool v0.9.3b


Acabo de publicar una versión del SpriteSX con nueva funcionalidad que espero que os sea útil.

El primer cambio lo encontraremos en el nombre: pasa de spriteSX ED a spriteSX devtool, para englobarlo dentro de la serie de aplicaciones que estoy creando pensadas para el desarrollo cruzado para MSX, aunque también útil para otras plataformas que utilicen el mismo hardware.

Dentro de los cambios de funcionalidad, le he añadido gestión de datos de proyecto, para poder organizarnos mejor. Disponemos de una ventana donde podremos indicar: nombre, autor, grupo y descripción, y desde donde también sabremos la fecha de inicio y de última modificación.

Posiblemente lo más interesante sea la ventana para cargar o guardar un bitmap o binario SC2 (MSX Basic), que entre otras cosas, nos permitirá editar los sprites desde una aplicación gráfica y generar nuestros sprites a código con spriteSX.

Internamente he añadido un gestor de los directorios de los diferentes formatos de archivo, pensado para facilitar el acceso a estos.

Aun queda mucho que hacer, pero poco a poco lo vamos a ir mejorando.

Podéis descargarlo en la WEB del proyecto spriteSX devtool.

27 junio 2014

Compresión RLE SMS Wonder Boy

Hace un tiempo, estuve investigando la compresión RLE (Run-Length Encoding), para utilizarlo en gráficos de MSX. Si no conoces el RLE, se puede resumir, diciendo que es un sistema muy simple, que se basa en reducir secuencias de valores repetidos en dos bytes: número de repeticiones y valor.

Si hablamos del RLE más básico, en el modo gráfico de los MSX de primera generación (SC2), funciona muy bien con los colores, ya que es donde suele repetirse muchos bloques de datos. En muchos casos se puede conseguir más de un 70% de ganancia, dependiendo del estilo y técnica usada en la creación de la imagen, y si contiene los valores debidamente ordenados. Me refiero a que la relación entre el color de tinta y fondo con el patrón, no se invierta muy a menudo, si son los mismos colores. Esto se puede conseguir si la herramienta que utilicemos para crear nuestros gráficos, tengamos control de que colores usamos para la tinta o fondo, o en el caso de un conversor, este ordene los datos. 

Continuando con el RLE básico, cuando se trata de comprimir la información de los patrones, este sistema rara vez resulta efectivo, ya que la información es más variada y no se suelen repetir muchos valores. Esto provoca que por cada valor se gasten dos bytes, con lo que se obtendría un resultado de mayor tamaño.

Otra de las ventajas que tiene, es que es muy rápido y a la hora de utilizarlo es un poco más simple que la función de volcado (LDIRVM), ya que no necesitaremos averiguar e indicar el tamaño del bloque de datos.

Pero volviendo al principio de este post, buscando sobre este tema, encontré en la WEB SMS Power, un artículo donde se describen diferentes sistemas RLE utilizados en varios juegos de la Sega Master System. De entre todos, le vi posibilidades al del Wonder Boy, así que lo adapté para MSX pero modificando algunas cosas. 

Su funcionamiento es el siguiente:
  • Se utiliza un valor como control. He elegido el valor $80 ya que el 0 es un valor muy común y como veremos más adelante, cuando un valor coincida con el número de control se utilizarán 2 bytes. Con este pequeño cambio se obtiene mayor compresión. En una prueba de un tileset de 115 tiles, obtuve una ganancia de más de 70 Bytes.
  • Si el siguiente valor al control es 0, se utiliza para cuando el valor coincide con el de control y este no se repite. 
  • Si el siguiente valor al control es igual a 255, entonces indica que es el final.
  • Si el siguiente valor al control no es ni 0 ni 255, entonces indicará el número de repeticiones (entre 1 y 254), y habrá un tercer dato que contendrá el valor que se repite. Como 1 repetición no se utiliza, en el decodificador se incrementa uno para abarcar de 2 a 255 repeticiones. 
  • Si el primer valor no es igual al número asignado como control, será un dato que no se repite y se escribe directamente a la salida.
Se ha eliminado el código de control ($FF), para los casos de una solo repetición (dos valores), ya que usar un segundo código de control no ofrece un beneficio claro (o al menos en las pruebas que he realizado).

Resumiendo un poco: los datos que no se repitan sólo ocupan un valor excepto cuando sea igual al valor asignado como control que se usarán dos, pero en los casos que si se repitan, se gastarán 3 Bytes, uno más que el RLE básico.

Este sistema funciona muy bien con los datos de patrones, pero con los colores hay casos donde es más eficiente el RLE básico.

Adjunto la rutina descompresora a RAM y a VRAM, junto con un ejemplo:
En breve publicaré la utilidad MSXtiles devtool, donde se puede sacar a código y de forma independiente (patrones, colores y mapa), los diferentes tipos de datos que componen una pantalla de MSX (SC2) en RLE básico o el basado en WB.

17 junio 2014

msxdev'14> 4e estado del arte

El 15 de junio se acabo el plazo de entrega de la msxdev'14 y no he podido presentar mi proyecto. Los últimos meses he querido darle prioridad a las msxdevtools, aunque también me ha absorbido parte del tiempo temas de la AAMSX y de 303bcn. Así que lo presentaré para la msxdev'15.
De todas formas, he podido dedicar tiempo para el diseño del juego y la parte gráfica, pero no he entrado en aspectos técnicos como la elaboración del motor o las físicas.

Este proyecto tiene un interés para mi, ya que la experiencia del desarrollo me servirá para aprender, pensando en futuros proyectos, pero también debido a que me ayudará a pulir la funcionalidad de las msxdevtools.

Para que veáis como es el estilo gráfico del juego os adelanto un diseño de uno de los mundos.


Aprovecho para felicitar a los participantes de la dev, por los excelentes trabajos presentados y suerte a todos!

Nos vemos en la próxima! :)

01 marzo 2014

SpriteSX ED v0.9b

Después de más de un año que empecé a desarrollar esta aplicación, por fin, ya esta disponible su primera versión.

Esta pensado para el desarrollo gráfico de figuras móviles (sprites), para proyectos en MSX u otras plataformas que utilicen los procesadores de vídeo TMS9918 o V9938.

Aun le falta trabajar algunos aspectos para que sea una herramienta realmente útil, pero poco a poco se irán desarrollando nuevas funcionalidades.


Las características son:

  • Asistente (wizard), para crear un nuevo proyecto. 
  • Los proyecto pueden ser de diferentes tipos de sprites: 8x8 o 16x16, mono o multicolor.
  • Leer, Fusionar y Guardar proyectos, incluyendo la paleta de colores. 
  • Posibilidad de conversión de un proyecto almacenado, al formato en curso. 
  • Herramientas para eliminar, mover, rotar y voltear un sprite. 
  • Edición del color por línea y del bit OR, en modo multicolor (V9938). 
  • Control de la lista de sprites con herramientas de orden, copiar y borrar. 
  • Hasta 256 sprites de 8x8 y 64 de 16x16, por proyecto. 
  • Herramienta para la edición de la paleta de colores (V9938). Permite leer o guardar la paleta de forma independiente. 
  • Ventana de generación de código que proporciona una salida con formato ensamblador, C o BASIC, en decimal o hexadecimal.

Esta programado en .net por lo que necesitareis un ordenador con framework 3.0 o superior.

Podéis descargarlo o consultar más información, en la WEB del proyecto de spriteSXED.

26 febrero 2014

BytesGen! v0.7.2.0b

Acabo de publicar una nueva versión de esta herramienta pensada como complemento en el desarrollo-cruzado.

Incorpora los siguientes cambios:
  • Para la salida en BASIC, el incremento por defecto ahora es 10 (antes= 15).
  • Drag&Drop de un fichero de sistema a la entrada de fichero (en Binary file).
  • Añadidos nuevos formatos de salida de datos (FF, 0xFF, 0FFh, FF#, FF$, y &HFF).
  • La salida se limpia al cambiar de pestaña.
  • Añadido botón de borrado de la salida.
  • Cambios estéticos en la interfaz gráfica.
Podéis descargarla (incluido los fuentes), desde la WEB del proyecto: BytesGen!