lunes, 25 de mayo de 2020

Desarrollo de Street Fighter 2 Champion Edition para C64. Parte 2: el entorno

En este artículo no voy a hablaros propiamente del desarrollo. Voy a hablar del entorno de desarrollo, de las herramientas que he utilizado para desarrollar el juego y porqué las he elegido. Todas las herramientas están enfocadas al desarrollo cruzado, es decir, al desarrollo desde el PC para C64, por lo que obviaré las herramientas propias de C64. Allá vamos...
  • Editor de código: Relaunch64. Para programar en ensamblador existen varias opciones: o bien utilizas un simple editor de textos de propósito general (Bloc de notas, Notepad++, nano, vi, emacs, Pluma,...), o un editor con funciones avanzadas (Relaunch64), o un IDE genérico (Eclipse con el plugin para ensamblador para C64), o alguno de los IDEs especializados como Kickass IDE, CBM .prg Studio o C64 Studio. En mi caso me decanté por Relaunch64, es un editor programado en Java que permite usar diferentes compiladores, tiene resaltado por color de código y permite compilar el código desde el mismo editor y ver los mensajes del compilador. Y es compatible con el Linux que uso a diario, algo muy importante, ya que los "Studio" comentados antes sólo funcionan bajo Windows.
Relaunch64.
  • Compilador: ACME. El compilador permite transformar el código ensamblador en un programa en código máquina que el C64 puede ejecutar. Aquí también tenemos varias alternativas: Kickassembler, CC65 (permite compilar programas en C para la CPU 6502), DASM, TASS, xa, vasm. ACME es un compilador bastante antiguo y espartano que proporciona funciones adicionales como macros o ensamblado condicional, función que utilizo bastante. También es compatible con Linux.
Compilador ACME.
  • Editor de sprites: SpritePad. Las alternativas que conozco son Spritemate (editor online bastante sencillo de usar), Pixcen y 7up Sprite Editor. SpritePad tiene varias ventajas: permite importar "hojas de sprites" en formato BMP (muy útil en mi caso) o incluso desde snapshots de Vice, permite invertir/girar/hacer espejo a sprites, intercambios de color transparente/color propio/multicolor1/multicolor2, desplazamiento de píxels dentro del sprite o animación de sprites. Su pega principal es que no es compatible con Linux y ello me obliga a usar una máquina virtual para utilizarlo.
SpritePad.

  • Editor de bitmaps: Multipaint. Aunque inicialmente comencé a trabajar con Project One por su manejo del formato Koala, y por las opciones de retoque del color que permite a la hora de importar imágenes en otros formatos, hace unas semanas migré a Multipaint, ya que las últimas versiones permiten trabajar con el formato Koala que utilizo en el juego. Además, cuenta con múltiples opciones de dibujo (puntos, líneas, cuadrados, círculos, patrones de pintado,...) un poco al estilo Deluxe Paint, que son muy útiles a la hora de dibujar fondos. Otra alternativas serían Pixcen (excesivamente simple para mi gusto) y Timanthes (más completo pero muy inestable). Multipaint es compatible con Linux.
Multipaint, imagen creada por Errazking.
  • Editor de caracteres: CharPad. Aunque VChar es una buena alternativa, CharPad, del mismo creador que SpritePad, me proporciona lo necesario para editar el charset o juego de caracteres personalizado que utilizo en el juego, si bien mi charset es muy sencillito. CharPad, al igual que SpritePad, funciona bajo Windows.
CharPad.
  • Editor de sonido: GoatTracker. A decir verdad, usé este tracker cuando convertí el tema de Ryu a formato SID, pero en cuanto Narcisound se incorporó al proyecto dejé de usarlo. GoatTracker permite crear efectos especiales sencillos y viene con ejemplos en ensamblador para que podamos combinar un SID con 2 pistas de música con la reproducción de los efectos de nuestro juego en la pista 3. Dispone de varios filtros y opciones de exportación, y es compatible con Linux.
GoatTracker.
  • Emulador: Vice64. Los 3 grandes emuladores para C64 son Vice64, Frodo y CCS64, pero me decanté por Vice64 porque es el que más conozco, por su monitor de ensamblador (herramienta vital para el desarrollo), por su modo warp que acelera las cargas desde disco, por sus múltiples opciones de configuración y por su compatibilidad. Y por su versión para Linux, claro.
Vice64.
  • Depurador: C64Debugger. Aquí las opciones que conozco se reducen a dos: C64Debugger e ICU64. ICU64 está diseñado para ser usado en Windows y con Frodo, aunque la última versión ya permite usar Vice. Por otra parte C64Debugger es compatible con Linux y usa Vice, y a pesar de que es algo inestable y tiende a cerrarse inesperadamente, me proporciona una serie de herramientas muy útiles que me permiten ver en tiempo real cosas como la lectura y escritura de áreas de la RAM, los sprites en uso o los datos bitmap, aparte de un monitor ensamblador o los muy útiles puntos de parada, para detener la ejecución del juego en alguna rutina concreta.
C64Debugger.
  • Otras herramientas: además de todo lo comentado anteriormente utilizo exomizer para compilar los ficheros del juego en versión disco, CC1541 para escribir ficheros en imágenes de diskette .d64 por línea de comandos y cartconv para crear el fichero .crt para la versión cartucho.
Como veis, programar en ensamblador te puede obligar a usar muchas herramientas diferentes, aunque siempre tenemos la opción de usar algún IDE como CBM .prg Studio o C64 Studio que integran depuradores, editores de sprites, de caracteres, de mapas o incluso de sonido, y que reducen considerablemente el número de programas a utilizar.

Si tenéis cualquier duda sobre los programas que utilizo o queréis contarme vuestra opinión sobre tal o cual herramienta ya sabéis, podéis escribir en los comentarios. El próximo día: sprites.


Saludos, Paco.

2 comentarios:

  1. No conocía Multipaint, así que me lo apunto.
    Por otro lado, por si no lo habías probado, tanto SprtePad como CharPad funcionan también bajo Wine.

    ResponderEliminar
    Respuestas
    1. Multipaint funciona muy bien, sobre todo la última versión. SpritePad y CharPad los había probado con el Wine de los repositorios oficiales de mi Debian (Stretch) y no funcionaban, al menos las últimas versiones, pero después de leerte he instalado Wine 5 manualmente (ha costado un poco) y ahora ya funcionan. ¡Gracias!

      Eliminar