Mecha-9: Traducción japonesa para una plataforma antigua de 8 bits

Siempre me ha gustado desarrollar juegos. Es una forma de liberar mi lado creativo y me permite intentar cosas diferentes como una alternativa a los juegos que he probado.
Tuve éxito con Mecha-8 para MSX en 2012 después de liberarlo en cartucho físico, y el estilo de juego y los jefes finales le agradaron al público. La versión MSX de Mecha-8 también se portó a Colecovision y después a Sega Master System.
Animado por la buena recepción, decidí codificar Mecha-9 en 2015 como un juego que sucedía al mismo tiempo que Mecha-8. Tomé el personaje de Ryan Rock y lo hice el protagonista, se pierde en Mecha-8, y para Mecha-9 decidí justificarlo *spoiler aquí* haciendo que viajara sin querer en el espacio y tiempo.
Juego Mecha-9 para MSX. 2da. edición por Matra
Me siento contento de mis avances con los movimientos de los enemigos, los niveles diferentes, los jefes finales, y por supuesto la adictividad en general del juego. Mientras que en el primer juego la arma secundaria era como una megabomba, en Mecha-9 el arma secundaria reduce la velocidad de los enemigos para que el jugador pueda reaccionar a la lluvia de balas de los jefes finales y en algunas secciones de los últimos niveles.
Mientras mejoraba el juego, ya tenía traducciones al inglés y español, y tuve una idea. El subtítulo en la pantalla inicial ya tenía caracteres japoneses para decir Mecha-9 ¿se podría trasladar el juego al japonés?
La respuesta era bastante obvia: ¡Sí! El MSX es una computadora japonesa y la mayor parte de los primeros juegos usaban el tipo de letra interno Hiragana/Katakana. Como solo estaban disponibles 256 caracteres, la mitad de estos eran para el font Hiragana/Katakana. Este font era reemplazado en las computadoras europeas con caracteres gráficos genéricos, así que los juegos mostraban el texto japonés erroneamente como caracteres gráficos..
Adven'Chuta running in a Japanese MSX computer. Text is correctly shown
Adven'Chuta corriendo en una computadora MSX japonesa. El texto es correcto. Adven'Chuta running in a Spanish MSX computer. Text is trash.
Adven'Chuta corriendo en una computadora MSX española. El texto es incorrecto.
Pero yo no soy hábil en japonés así que tenía que buscar ayuda, así que me dirigí a mi buen amigo de Twitter @gcshigeru por ayuda. El 2 de septiembre del 2015 le escribí un mensaje para pedirle ayuda con la traducción al japonés, y tuve suerte de tener una respuesta positiva de su parte.

Yo no tenía idea

Mi primer idea fue que Shigeru traduciría la historia en inglés de Mecha-9 a sentencias PRINT de MSX BASIC que después yo podría convertir para usar en el juego.
Ya tenia alguna experiencia mostrando caracteres japoneses, ya que una vez escribí una rutina de conversión Shift-JIS, y la integré junto con un font en un browser para la web. Tomemos como ejemplo un periódico, el idioma japonés es escrito como caracteres Kanji. Los Kanji son el sistema principal de escritura del japonés y están influenciados por los caracteres chinos. Se han simplificado a través de los años, por ejemplo en 1942 se publicó "Standard Kanji Table" con un total de 2,528 caracteres para uso de las comunicaciones del gobierno japonés.
Caracter Kanji de la ROM MSX2+
Caracter Kanji de la ROM MSX2+. Usando CALL KANJI en BASIC y después oprimiendo Ctrl+Espacio.
Estos miles de caracteres son típicamente mostrados en una rejilla de 16x16 pixeles para MSX. En las computadoras MSX2 y MSX2+ tienden a contener una extensión de Kanji-ROM con alrededor de 3000 caracteres (nivel 1 o JIS1) o más de 4000 caracteres (nivel 1 y 2 JIS1+JIS2).
Sin embargo, no todos los MSX contienen esta extensión, y no quería integrar 128KB de datos para Kanji. Así que para simplificar mi trabajo y mis recursos, tuve que limitarme a Hiragana y Katakana.
Las computadoras MSX japonesas desde su creación traen un teclado mostrando caracteres Hiragana o Katakana. Estos caracteres son sílabas del idioma japonés. Katakana significa "kana fragmentado", ya que los caracteres katakana están derivados de fragmentos de kanji. Hiragana es un sistema de caracteres fonéticos, que significa kana "simple" o que "fluye"; es más cercano al alfabeto español, ya que tiene las cinco vocales あ (a), い (i), う (u), え (e), お (o) pero las uniones de consonante-vocal son 42.
Teclear estos caracteres Hiragana y Katakana en el MSX es solo cuestión de oprimir la tecla Kana para entrar en el modo japonés, y la tecla Caps apagada accesa el modo Hiragana mientras que al encenderla se accede el modo Katakana. Los caracteres están marcados en las teclas.
Computadora japonesa MSX1 National CF2000.
Computadora japonesa MSX1 National CF2000. Puede verse que el teclado muestra caracteres Katakana.
Q es カ (ka), W es キ (ki), E es ク (ku), R es ケ (ke), y T es コ (ko). Computadora japonesa MSX2+ Sony HB-F1XDJ.
Computadora japonesa MSX2+ Sony HB-F1XDJ. Puede verse que el teclado muestra caracteres Hiragana.
Q es た (ta), W es て (te), E es い (i), R es す (su), y T es か (ka).

Tropezando como una piedra en un río

Por suerte, Shigeru era más inteligente que yo, e hizo la traducción usando su computadora moderna. Yo seguía con la idea de hacerlo en el hardware real y ya había realizado intentos de teclear japonés en mi Sony HB-F1XDJ.
Cuando recibí el primer email de Shigeru, me tomó casi dos horas teclear el primer párrafo de la historia en el intérprete BASIC. Tuve que tener mi National CF-2000 al lado del Sony HB-F1XDJ para referirme al Katakana en el teclado. Después de una estimación, me di cuenta de que escribir la historia completa ¡me tomaría varios días!
Primera versión de la traducción por @gcshigeru:

わたしたちがはんけ゛きしなけれは゛
やられてしまうわ!
トリシアをえんこ゛します!
わたしたちにはへ゛つのハ゜イロットか゛
ひつようた゛わ!ノリコきこえてる?
La primera pantalla de historia de Mecha-9.
La primera pantalla de historia de Mecha-9 en japonés usando MSX-BASIC. 9 de octubre de 2015.
Fue triste (pero afortunado) descubrir que falló la unidad de disco de mi MSX2+, a pesar de que era capaz de leer un disco, dañaba el disco al escribir, así que estaba incapacitado para guardar mi trabajo o leerlo en otra computadora. Mi plan de tener la historia de Mecha-9 completa en MSX-BASIC estaba destinado al fracaso.

¡Usa herramientas modernas!

Tuve que redirigir mi forma de trabajar japonés en MSX. Primera consideración: No tenía suficiente tiempo para hacerlo manualmente, tenía que ser una conversión automática de la traducción de Shigeru a datos MSX.
Su traducción estaba en Shift-JIS, esto era leído muy eficientemente por TextEdit en macOS, solo tenía que abrir el archivo y seleccionar la codificación antes de leerlo. Internamente macOS lo convierte automáticamente a Unicode. El siguiente paso también era obvio, salvarlo como un archivo de texto UTF-8 para mis esfuerzos de proceso. ¿Por qué UTF-8? Debido a que la rutina de decodificación es bastante simple (vea la sección Codificación de Caracteres del artículo UTF-8 en la Wikipedia). Me salvó de hacer el esfuerzo completo de buscar el estándar Shift-JIS porque yo estaba más versado en Unicode.
Después obtuve imágenes de los caracteres japoneses disponibles en la ROM de un MSX japonés estándar de msx.org, pero necesitaba una referencia para la conversión Unicode que obtuve de la Wikipedia (bloques Unicode de Hiragana y Katakana), también encontré un font 8x8 de dominio público conteniendo Hiragana, e incluía el número de caracter de Unicode.
Teniendo el font MSX y el font de dominio público, hice una comparación manual para hacer la conversión de Unicode a los códigos de 8 bits del MSX para los caracteres Hiragana/Katakana, y entonces escribí el programa completo de conversión de Unicode a códigos MSX.

    /*
    ** Conversión Unicode a códigos MSX Hiragana/Katakana.
    ** por Oscar Toledo G. https://nanochess.org/
    ** Última revisión: 12-oct-2015.
    **
    ** Hago este código del dominio público para tus proyectos MSX.
    */
    c = 0;
    d = 0;
    switch (*unicode_pointer++) {
        /* Hiragana */
	case 0x3041: c = 0x87; break; /* ぁ small A */
	case 0x3042: c = 0x91; break; /* あ A */
	case 0x3043: c = 0x88; break; /* ぃ small I */
	case 0x3044: c = 0x92; break; /* い I */
	case 0x3045: c = 0x89; break; /* ぅ small U */
	case 0x3046: c = 0x93; break; /* う U */
	case 0x3047: c = 0x8a; break; /* ぇ small E */
	case 0x3048: c = 0x94; break; /* え E */	
	case 0x3049: c = 0x8b; break; /* ぉ small O */
	case 0x304a: c = 0x95; break; /* お O */
	case 0x304b: c = 0x96; break; /* か KA */
	case 0x304c: c = 0x96; d = 0xde; break; /* が GA */
	case 0x304d: c = 0x97; break; /* き KI */
	case 0x304e: c = 0x97; d = 0xde; break; /* ぎ GI */
	case 0x304f: c = 0x98; break; /* く KU */

	case 0x3050: c = 0x98; d = 0xde; break; /* ぐ GU */
	case 0x3051: c = 0x99; break; /* け KE */
	case 0x3052: c = 0x99; d = 0xde; break; /* げ GE */
	case 0x3053: c = 0x9a; break; /* こ KO */
	case 0x3054: c = 0x9a; d = 0xde; break; /* ご GO */
	case 0x3055: c = 0x9b; break; /* さ SA */
	case 0x3056: c = 0x9b; d = 0xde; break; /* ざ ZA */
	case 0x3057: c = 0x9c; break; /* し SI */
	case 0x3058: c = 0x9c; d = 0xde; break; /* じ ZI */
	case 0x3059: c = 0x9d; break; /* す SU */
	case 0x305a: c = 0x9d; d = 0xde; break; /* ず SU */
	case 0x305b: c = 0x9e; break; /* せ SE */
	case 0x305c: c = 0x9e; d = 0xde; break; /* ぜ ZE */
	case 0x305d: c = 0x9f; break; /* そ SO */
	case 0x305e: c = 0x9f; d = 0xde; break; /* ぞ SO */
	case 0x305f: c = 0xe0; break; /* た TA */

	case 0x3060: c = 0xe0; d = 0xde; break; /* だ DA */
	case 0x3061: c = 0xe1; break; /* ち TI */
	case 0x3062: c = 0xe1; d = 0xde; break; /* ぢ DI */
	case 0x3063: c = 0x8f; break; /* っ small TU */
	case 0x3064: c = 0xe2; break; /* つ TU */
	case 0x3065: c = 0xe2; d = 0xde; break; /* づ DU */
	case 0x3066: c = 0xe3; break; /* て TE */
	case 0x3067: c = 0xe3; d = 0xde; break; /* で DE */
	case 0x3068: c = 0xe4; break; /* と TO */
	case 0x3069: c = 0xe4; d = 0xde; break; /* ど DO */
	case 0x306a: c = 0xe5; break; /* な NA */
	case 0x306b: c = 0xe6; break; /* に NI */
	case 0x306c: c = 0xe7; break; /* ぬ NU */
	case 0x306d: c = 0xe8; break; /* ね NE */
	case 0x306e: c = 0xe9; break; /* の NO */
	case 0x306f: c = 0xea; break; /* は HA */

	case 0x3070: c = 0xea; d = 0xde; break; /* BA */
	case 0x3071: c = 0xea; d = 0xdf; break; /* PA */
	case 0x3072: c = 0xeb; break; /* ひ HI */
	case 0x3073: c = 0xeb; d = 0xde; break; /* び BI */
	case 0x3074: c = 0xeb; d = 0xdf; break; /* ぴ PI */
	case 0x3075: c = 0xec; break; /* ふ HU */
	case 0x3076: c = 0xec; d = 0xde; break; /* ぶ BU */
	case 0x3077: c = 0xec; d = 0xdf; break; /* ぷ PU */
	case 0x3078: c = 0xed; break; /* へ HE */
	case 0x3079: c = 0xed; d = 0xde; break; /* べ BE */
	case 0x307a: c = 0xed; d = 0xdf; break; /* ぺ PE */
	case 0x307b: c = 0xee; break; /* ほ HO */
	case 0x307c: c = 0xee; d = 0xde; break; /* ぼ BO */
	case 0x307d: c = 0xee; d = 0xdf; break; /* ぽ PO */
	case 0x307e: c = 0xef; break; /* ま MA */
	case 0x307f: c = 0xf0; break; /* み MI */

	case 0x3080: c = 0xf1; break; /* む MU */
	case 0x3081: c = 0xf2; break; /* め ME */
	case 0x3082: c = 0xf3; break; /* も MO */
	case 0x3083: c = 0x8c; break; /* ゃ small YA */
	case 0x3084: c = 0xf4; break; /* や YA */
	case 0x3085: c = 0x8d; break; /* ゅ small YU */
	case 0x3086: c = 0xf5; break; /* ゆ YU */
	case 0x3087: c = 0x8e; break; /* ょ small YO */
	case 0x3088: c = 0xf6; break; /* よ YO */
	case 0x3089: c = 0xf7; break; /* ら RA */
	case 0x308a: c = 0xf8; break; /* り RI */
	case 0x308b: c = 0xf9; break; /* る RU */
	case 0x308c: c = 0xfa; break; /* れ RE */
	case 0x308d: c = 0xfb; break; /* ろ RO */
/*	case 0x308e: c = 0xfc; break; *//* ゎ small WA */
	case 0x308f: c = 0xfc; break; /* わ WA */
/*	case 0x3090: c = ; break; *//* ゐ WI archaic */
/*	case 0x3091: c = ; break; *//* ゑ WE archaic */
	case 0x3092: c = 0x86; break; /* を WO */
	case 0x3093: c = 0xfd; break; /* ん N */
	case 0x3094: c = 0x93; d = 0xde; break; /* ゔ VU */
	case 0x309b: c = 0xde; break; /* ゛ voiced sound */
	case 0x309c: c = 0xdf; break; /* ゜ sound mark */

	/* Katakana */
	case 0x30a1: c = 0xa7; break; /* ァ small A */
	case 0x30a2: c = 0xb1; break; /* ア A */
	case 0x30a3: c = 0xa8; break; /* ィ small I */
	case 0x30a4: c = 0xb2; break; /* イ I */
	case 0x30a5: c = 0xa9; break; /* ゥ small U */
	case 0x30a6: c = 0xb3; break; /* ウ U */
	case 0x30a7: c = 0xaa; break; /* ェ small E */
	case 0x30a8: c = 0xb4; break; /* エ E */
	case 0x30a9: c = 0xab; break; /* ォ small O */
	case 0x30aa: c = 0xb5; break; /* オ O */
	case 0x30ab: c = 0xb6; break; /* カ KA */
	case 0x30ac: c = 0xb6; d = 0xde; break; /* カ GA */
	case 0x30ad: c = 0xb7; break; /* キ KI */
	case 0x30ae: c = 0xb7; d = 0xde; break; /* ギ GI */
	case 0x30af: c = 0xb8; break; /* ク KU */
	
	case 0x30b0: c = 0xb8; d = 0xde; break; /* グ GU */
	case 0x30b1: c = 0xb9; break; /* ケ KE */
	case 0x30b2: c = 0xb9; d = 0xde; break; /* ゲ GE */
	case 0x30b3: c = 0xba; break; /* コ KO */
	case 0x30b4: c = 0xba; d = 0xde; break; /* ゴ GO */
	case 0x30b5: c = 0xbb; break; /* サ SA */
	case 0x30b6: c = 0xbb; d = 0xde; break; /* ザ ZA */
	case 0x30b7: c = 0xbc; break; /* シ SI */
	case 0x30b8: c = 0xbc; d = 0xde; break; /* ジ ZI */
	case 0x30b9: c = 0xbd; break; /* ス SU */
	case 0x30ba: c = 0xbd; d = 0xde; break; /* ズ ZU */
	case 0x30bb: c = 0xbe; break; /* セ SE */
	case 0x30bc: c = 0xbe; d = 0xde; break; /* ゼ ZE */
	case 0x30bd: c = 0xbf; break; /* ソ SO */
	case 0x30be: c = 0xbf; d = 0xde; break; /* ゾ ZO */
	case 0x30bf: c = 0xc0; break; /* タ TA */

	case 0x30c0: c = 0xc0; d = 0xde; break; /* ダ DA */
	case 0x30c1: c = 0xc1; break; /* チ TI */
	case 0x30c2: c = 0xc1; d = 0xde; break; /* ヂ DI */
	case 0x30c3: c = 0xaf; break; /* ッ small TU */
	case 0x30c4: c = 0xc2; break; /* ツ TU */
	case 0x30c5: c = 0xc2; d = 0xde; break; /* ヅ DU */
	case 0x30c6: c = 0xc3; break; /* テ TE */
	case 0x30c7: c = 0xc3; d = 0xde; break; /* デ DE */ 
	case 0x30c8: c = 0xc4; break; /* ト TO */
	case 0x30c9: c = 0xc4; d = 0xde; break; /* ド DO */
	case 0x30ca: c = 0xc5; break; /* ナ NA */
	case 0x30cb: c = 0xc6; break; /* ニ NI */
	case 0x30cc: c = 0xc7; break; /* ヌ	NU */
	case 0x30cd: c = 0xc8; break; /* ネ NE */
	case 0x30ce: c = 0xc9; break; /* ノ NO */
	case 0x30cf: c = 0xca; break; /* ハ HA */

	case 0x30d0: c = 0xca; d = 0xde; break; /* バ BA */
	case 0x30d1: c = 0xca; d = 0xdf; break; /* パ PA */
	case 0x30d2: c = 0xcb; break; /* ヒ HI */
	case 0x30d3: c = 0xcb; d = 0xde; break; /* ビ BI */
	case 0x30d4: c = 0xcb; d = 0xdf; break; /* ピ PI */
	case 0x30d5: c = 0xcc; break; /* フ HU */
	case 0x30d6: c = 0xcc; d = 0xde; break; /* ブ BU */
	case 0x30d7: c = 0xcc; d = 0xdf; break; /* プ PU */
	case 0x30d8: c = 0xcd; /* ヘ HE */
	case 0x30d9: c = 0xcd; d = 0xde; break; /* ベ BE */
	case 0x30da: c = 0xcd; d = 0xdf; break; /* ペ PE */
	case 0x30db: c = 0xce; /* ホ HO */
	case 0x30dc: c = 0xce; d = 0xde; break; /* ボ BO */
	case 0x30dd: c = 0xce; d = 0xdf; break; /* ポ PO */
	case 0x30de: c = 0xcf; break; /* マ MA */
	case 0x30df: c = 0xd0; break; /* ミ MI */

	case 0x30e0: c = 0xd1; break; /* ム MU */
	case 0x30e1: c = 0xd2; break; /* メ ME */
	case 0x30e2: c = 0xd3; break; /* モ MO */
	case 0x30e3: c = 0xac; break; /* ャ small YA */
	case 0x30e4: c = 0xd4; break; /* ヤ YA */
	case 0x30e5: c = 0xad; break; /* ュ small YU */
	case 0x30e6: c = 0xd5; break; /* ユ YU */
	case 0x30e7: c = 0xae; break; /* ョ small YO */
	case 0x30e8: c = 0xd6; break; /* ヨ YO */
	case 0x30e9: c = 0xd7; break; /* ラ RA */
	case 0x30ea: c = 0xd8; break; /* リ RI */
	case 0x30eb: c = 0xd9; break; /* ル RU */
	case 0x30ec: c = 0xda; break; /* レ RE */
	case 0x30ed: c = 0xdb; break; /* ロ RO */
/*	case 0x30ee: c = 0xdc; break; *//* ヮ small WA */
	case 0x30ef: c = 0xdc; break; /* ワ WA */

/*	case 0x30f0: c = 0x; break; *//* ヰ WI archaic */
/*	case 0x30f1: c = 0x; break; *//* ヱ WE archaic */
	case 0x30f2: c = 0xa6; break; /* ヲ WO */
	case 0x30f3: c = 0xdd; break; /* ン N */
	case 0x30f4: c = 0xb3; d = 0xde; break; /* ヴ VU archaic */
/*	case 0x30f5: c =; break; *//* ヵ small KA not common */
/*	case 0x30f6: c =; break; *//* ヶ small KE not common */
	case 0x30f7: c = 0xdc; d = 0xde; break; /* ヷ VA */
/*	case 0x30f8: c = 0x; d = 0xde; break; *//* ヸ VI archaic */
/*	case 0x30f9: c = 0x; d = 0xde; break; *//* ヹ VE archaic */
	case 0x30fa: c = 0xa6; d = 0xde; break; /* ヺ VO */
	case 0x30fb: c = 0xa5; break; /* ・ */
	case 0x30fc: c = 0x2d; break; /* ー Prolonged sound mark*/

        /* Others */
	case 0x0020: c = 0; break;
	case 0x0035: c = 0x35; break; /* 5 */
	case 0x0030: c = 0x30; break; /* 0 */
	case 0x003f: c = 0x3f; break; /* ? */
	case 0xff1f: c = 0x3f; break; /* ? */
	case 0xff01: c = 0x21; break; /* ! */
	case 0x2026: c = 0xa5; d = 0xa5; break; /* … */
	case 0x3002: c = 0xa1; break; /* 。*/
	case 0xff65: c = 0xa5; break; /* ・ */
	case 0x3001: c = 0xa4; break; /* 、*/
        default: printf("Unhandled character 0x%04x\n", b); err = 1;
      }
      if (c) {
        fprintf(output, "$%02X", c);
        if (d) {
          fprintf(output, ",$%02X", d);
        }
    }
Pronto en el proceso descubrí que mi Sony HB-F1XDJ mostraba el texto de la pantalla de una forma un poco ilegible (de hecho probablemente es un capacitor SMT viejo en la salida de video), pero esto puede ser mejorado haciendo líneas de dos pixeles de ancho. Momento de trabajar, revisé todo el font y lo hice más legible, pero no quería usar demasiado tiempo. ¿Qué caracteres eran necesarios? Era una situación del huevo y la gallina, así que escribí el convertidor, y el resultado lo alimentaba al generador de font para detectar si algún caracter rediseñado faltaba.
Diseño de font para Mecha-9.
Diseño de font para Mecha-9. A la izquierda está el font MSX original, en el centro el font Hiragana 8x8 de dominio público, y a la derecha mi versión.
Me alegra que no tuve que hacer el font completo, ya que algunas letras tienen líneas muy delicadas.

    /*
    ** Font 8x8 bold Hiragana/Katakana para MSX.
    ** por Oscar Toledo G. https://nanochess.org/
    ** Última revisión: 13-oct-2015. El caracter 0xaf era muy alto.
    **
    ** Hago este código del dominio público para tus proyectos MSX.
    */
    
    /*
    ** Esto solo contiene los caracteres usados por mi juego Mecha-9.
    ** Necesitarás dibujar los otros caracteres que yo no usé.
    */

unsigned char hiragana_font[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 0x80 */
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x40, 0xFE, 0x48, 0x70, 0x48, 0x82, 0x7C, 0x00, 
  0x00, 0x00, 0x10, 0x7E, 0x3C, 0x5A, 0x34, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x68, 0xFC, 0x66, 0x6C, 0x60, 0x00, 
  0x00, 0x00, 0x08, 0x5C, 0x6A, 0x0C, 0x30, 0x00, 
  0x00, 0x00, 0x18, 0x1E, 0x78, 0xCC, 0x7A, 0x00, 
  0x00, 0x00, 0x00, 0x3C, 0x06, 0x06, 0x1C, 0x00,

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 0x90 */
  0x20, 0xFE, 0x20, 0x7C, 0xAA, 0xB2, 0x64, 0x00, 
  0x00, 0xC0, 0xCC, 0xC6, 0xC6, 0xF6, 0x60, 0x00, 
  0x1C, 0x02, 0x7C, 0xC6, 0x06, 0x0C, 0x38, 0x00, 
  0x38, 0x00, 0xFE, 0x0C, 0x38, 0x6C, 0xCE, 0x00, 
  0x24, 0xF2, 0x20, 0x7C, 0xA6, 0xA6, 0x4C, 0x00, 
  0x20, 0x24, 0xF2, 0x4A, 0x48, 0x88, 0x30, 0x00, 
  0x10, 0x7C, 0x08, 0x7E, 0x04, 0x80, 0x7C, 0x00, 
  0x1C, 0x30, 0x60, 0xC0, 0x70, 0x18, 0x0C, 0x00, 
  0xCC, 0xCC, 0xDE, 0xCC, 0xEC, 0x4C, 0x18, 0x00, 
  0x00, 0x70, 0x1E, 0x00, 0xC0, 0xC0, 0x7E, 0x00, 
  0x30, 0x3E, 0xF8, 0x0C, 0x7E, 0xC0, 0x7C, 0x00, 
  0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0x78, 0x00, 
  0x18, 0xFE, 0x18, 0x38, 0x68, 0x38, 0x18, 0x00, 
  0x04, 0x64, 0xFE, 0x64, 0x6C, 0x60, 0x3E, 0x00, 
  0xF8, 0x30, 0x60, 0xFE, 0x30, 0x60, 0x3C, 0x00,

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 0xa0 */
  0x00, 0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x00, 
  0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x60, 0xFE, 0x66, 0x6C, 0x60, 0x30, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0xac, 0xac, 0x0C, 0x18, 0x70, 0x00,  /* 0xaf TU pequeÒa */

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 0xb0 */
  0xFE, 0x06, 0x36, 0x30, 0x30, 0x60, 0xC0, 0x00, 
  0x06, 0x0C, 0x38, 0xF8, 0x18, 0x18, 0x18, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0xFC, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x00, 
  0x0C, 0xFE, 0x1C, 0x3C, 0x6C, 0xCC, 0x18, 0x00, 
  0x60, 0xFE, 0x66, 0x66, 0x66, 0xC6, 0xCE, 0x00, 
  0x30, 0xFC, 0x30, 0xFE, 0x30, 0x30, 0x30, 0x00, 
  0x7E, 0xC6, 0x86, 0x0C, 0x0C, 0x18, 0x30, 0x00, 
  0x60, 0x7E, 0xD8, 0x98, 0x18, 0x18, 0x30, 0x00, 
  0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0x00, 
  0x6C, 0xFE, 0x6C, 0x6C, 0x0C, 0x18, 0x30, 0x00, 
  0xE0, 0x26, 0x06, 0xE6, 0x26, 0x0C, 0xF8, 0x00, 
  0xFE, 0x06, 0x06, 0x0C, 0x18, 0x3C, 0xE6, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x7E, 0xC6, 0x86, 0x3C, 0x18, 0x3C, 0x66, 0x00,  /* 0xc0 */
  0x06, 0xFC, 0x30, 0xFE, 0x30, 0x30, 0xE0, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x60, 0x60, 0x78, 0x6C, 0x66, 0x60, 0x60, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x30, 0xFC, 0x0C, 0x38, 0xFC, 0xB6, 0x30, 0x00, 
  0x06, 0x06, 0x06, 0x0C, 0x18, 0x30, 0xE0, 0x00, 
  0x28, 0x28, 0x2C, 0x6C, 0x66, 0x66, 0xC6, 0x00, 
  0xC0, 0xCE, 0xF8, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 
  0xFE, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0xFE, 0x06, 0x06, 0x06, 0x6C, 0x38, 0x0C, 0x00,

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 0xd0 */
  0x30, 0x30, 0x60, 0x60, 0xCC, 0xCE, 0xFA, 0x00, 
  0x06, 0x06, 0x26, 0x3C, 0x1C, 0x76, 0xC0, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x60, 0xFE, 0x66, 0x6C, 0x60, 0x30, 0x30, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x7C, 0x00, 0xFE, 0x06, 0x0C, 0x18, 0x70, 0x00, 
  0xC6, 0xC6, 0xC6, 0xC6, 0x06, 0x0C, 0x38, 0x00, 
  0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0xCE, 0xDC, 0x00, 
  0x60, 0x60, 0x60, 0x66, 0x6C, 0x78, 0xE0, 0x00, 
  0x00, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0xC0, 0x66, 0x06, 0x0C, 0x38, 0xE0, 0x00, 
  0xD8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x70, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x60, 0xFC, 0x60, 0x6E, 0xC0, 0xD8, 0xCE, 0x00,  /* 0xe0 */
  0x30, 0xFE, 0x60, 0xFC, 0x06, 0x06, 0x7C, 0x00, 
  0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x38, 0x00, 
  0x00, 0xFE, 0x1C, 0x30, 0x60, 0x60, 0x38, 0x00, 
  0x30, 0x36, 0x3C, 0x70, 0xC0, 0xC0, 0x7E, 0x00, 
  0x24, 0xF2, 0x48, 0x48, 0x9C, 0xAA, 0x10, 0x00, 
  0x60, 0xC0, 0xDE, 0xC0, 0xC0, 0xD8, 0xCE, 0x00, 
  0x44, 0x48, 0x7E, 0xB2, 0x96, 0xAA, 0x4C, 0x00, 
  0x40, 0xE0, 0x4C, 0x52, 0x66, 0xCA, 0x4C, 0x00, 
  0x00, 0x7C, 0xD6, 0x92, 0xB2, 0xA6, 0x6C, 0x00, 
  0x0C, 0x9E, 0x8C, 0x8C, 0x9E, 0xB4, 0x5C, 0x00, 
  0x48, 0xCC, 0x4C, 0x4A, 0x88, 0xD8, 0x70, 0x00, 
  0x38, 0x08, 0x20, 0x16, 0x4A, 0xCA, 0x18, 0x00, 
  0x00, 0x20, 0x70, 0xD8, 0x8C, 0x06, 0x02, 0x00, 
  0xBE, 0x8C, 0xBE, 0x8C, 0xDC, 0xAE, 0x18, 0x00, 
  0x18, 0x7E, 0x18, 0x7E, 0x38, 0x6C, 0x36, 0x00,

  0xE0, 0x24, 0x24, 0x7C, 0xA6, 0xA4, 0x68, 0x00,  /* 0xf0 */
  0x20, 0xF4, 0x22, 0x60, 0xA0, 0x66, 0x3C, 0x00, 
  0x04, 0x44, 0x7C, 0xCA, 0xAA, 0x92, 0x64, 0x00, 
  0x60, 0xF8, 0x60, 0xF8, 0x60, 0x66, 0x3C, 0x00, 
  0x00, 0x68, 0xFC, 0x66, 0x66, 0x6C, 0x60, 0x00, 
  0x88, 0xBC, 0xEA, 0x8A, 0xBC, 0x08, 0x30, 0x00, 
  0x18, 0x18, 0x1E, 0x18, 0x78, 0xCC, 0x76, 0x00, 
  0x78, 0x0C, 0xC0, 0xFC, 0xC6, 0x0C, 0x38, 0x00, 
  0x00, 0xC6, 0xC6, 0xC6, 0xE6, 0xCC, 0x18, 0x00, 
  0xF8, 0x30, 0x7C, 0xE6, 0x1A, 0x2E, 0x1C, 0x00, 
  0x20, 0xF0, 0x2C, 0x34, 0x64, 0xE4, 0x26, 0x00, 
  0xF8, 0x30, 0x7C, 0xE6, 0x06, 0x06, 0x3C, 0x00, 
  0x40, 0xE0, 0x5C, 0x76, 0x66, 0xC6, 0x5C, 0x00, 
  0x10, 0x30, 0x60, 0x70, 0xD8, 0xDA, 0x8C, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
};
Shigeru tuvo ayuda extra de PSS.K y ambos hicieron dos revisiones más de la traducción. Usando una conversión de la última traducción (y antes de mandar el juego a Matra para publicarlo), le envié a Shigeru un video completo de la historia japonesa de Mecha-9, y afortunadamente solo un caracter estaba equivocado (era muy alto).
Captura de pantalla del desarrollo de Mecha-9.
Captura de pantalla del desarrollo de Mecha-9. Se pueden ver los datos japoneses finales en la ventana superior derecha.
The first story screen of Mecha-9 in Japanese.
La primera pantalla de historia de Mecha-9 en japonés. The second story screen of Mecha-9 in Japanese.
La segunda pantalla de historia de Mecha-9 en japonés.
Después de tener mis copias de Mecha-9, le envié a Shigeru su copia de Mecha-9 hasta Osaka, Japón. Estuve muy feliz de saber que se sentía honrado de haber trabajado en la tradución, y yo también muy honrado de trabajar con él. Le escribí sobre este artículo para saber su opinión y me dijo que le agradó y que traducir Mecha-9 fue muy divertido.
Estuve muy feliz de ver que mi juego tuvo un gran éxito en Japón. Encontré personas esperando el juego, y personas jugándolo con imágenes y videos en Twitter (ahora X).
Mecha-9 fue publicado hace ya varios años, liberé la ROM hace poco y puedes descargarlo para tu MSX aquí.
Mecha-9 para MSX. Juego de 2da. edición.
Mecha-9 para MSX. Juego de 2da. edición. Caja y cartucho.

Ligas relacionadas

Última modificación: 31-ene-2024