Historial de desarrollo del proyecto abandonado Bandera negra en Sinclair BASIC

Descripción del contenido de la página

Historial de desarrollo del proyecto abandonado de juego de simulación Bandera negra en Sinclair BASIC.

El proyecto fue tan fugaz que no hay mucho que contar, pero a pesar de ello, como es costumbre, aquí muestro los pasos.

2011-08-01

Ficheros de que consta la cinta (todos se llaman "jollyroger"):

Pasados a un disquete con Beta DOS los siete ficheros, con nombres de «jr0» a «jr6». Cambiados los comandos de cinta por los de disquete +D. Creado un fichero «Autoload» para el disquete.

Anulación del sencillo sistema de protección del programa principal.

Primeros textos traducidos.

2010-08-02

Terminadas la mayoría de las traducciones, en bruto (sin tener en cuenta la maquetación).

Función para centrar textos en una línea.

Creación de un juego de caracteres con los caracteres castellanos en la posición en que están en el juego de la ZX Spectrum 128 española, más una tilde elevada para poder mezclarla con las vocales.

Reajuste de la memoria liberada y de las rutinas de selección de juegos de caracteres.

Función para calcular la palabra «doblones» o «doblón».

Constantes y funciones para los caracteres castellanos. Añadidos a los textos.

Memoria insuficiente. Sustitución de números frecuentes por variables, para ahorrar memoria. Uso de VAL por el mismo motivo. Solucionado.

2011-08-03

Exportación del programa a un fichero TAP para leerlo en BASin y exportarlo en un BAS con el que poder trabajar cómodamente con Vim. El BAS modificado se pasa cada vez a TAP con BASin para poder cargarlo con el emulador Fuse y pasarlo a la imagen de disquete MGT.

Nuevas funciones para simplificar la impresión de menús.

Conversión en rutinas de código duplicado.

Completada la traducción de los números de 0 a 10 por las constantes de n0 a n10. Nueva constante de cadena l$, también para ahorrar memoria.

Simplificada la impresión de palmeras, eliminando el código redundante.

El panel de control del barco se imprime tras el escenario, no antes.

Se imprime el nombre del tripulante herido en cada evento.

Corrección: No se hiere a ningún tripulante cuando el nativo da munición o provisiones, o cuando encontramos un poblado.

Simplificado el código que decide si tiene lugar una tormenta.

El porcentaje de daño al encallar es variable.

Función para imprimir el nombre de un tripulante con su longitud correcta, sin espacios; la longitud se guarda ahora en el primer octeto de la cadena.

2011-08-04

Remozado de la pantalla de introducción. Nuevos colores y textos. Variable para el nombre del barco.

Rutina para impresión de párrafos formateados.

Nuevos nombres completos para las variables principales de la trama.

Renombradas las líneas iniciales de cada bloque o subrutina, para que coincidan con las de llamada. Marcadas las subrutinas para distinguirlas de los bloques del flujo principal.

Renombrada la matriz f() como s(), para guardar relación con s$().

El número de hombres afectados al atacar un bote propio es variable. El mensaje de información es más claro.

Se calcula la longitud máxima de los nombres de los tripulantes antes de dimensionar su matriz.

La energía de cada tripulante varía ahora de 4 (sano) a 0 (muerto), lo que simplifica y hace más legibles algunos cálculos; en el original variaba de 1 (sano) a 5 (muerto).

2011-08-05

Los dos juegos de caracteres originales y el nuevo castellanizado ya no están todos en memoria al mismo tiempo. El cargador los copia del disquete al disco RAM, de donde el programa principal los carga cuando los necesita.

Sustituidos el lento sistema de borrado de zonas de pantalla por la carga de un fichero de atributos desde el disco RAM.

Reorganizadas las rutinas que dibujan el escenario marítimo, para evitar llamadas innecesarias.

2011-08-06

Terminado el nuevo cargador: lee la lista de zonas de atributos creadas en el disquete por el programa herramienta zonesMaker y los pasa al disco RAM con una subrutina. También usa una subrutina para cargar cada juego de caracteres.

El informe de tripulación es accesible también en tierra. La pantalla se salva en el disco RAM antes de imprimirlo y de borrar el panel; y se restaura para borrarlo.

El número de doblones hallados en todos los casos es ahora variable; el gráfico muestra esa cantidad de monedas y la cantidad se pone en letra en el texto.

El informe de estado se imprime en la pantalla principal, de la misma manera que el informe de tripulación.

Los caracteres 163 y 164, últimos del grupo de GDU, no son accesibles en ZX Spectrum 128. Por ello han sido copiados a un grupo de GDU auxiliar, que se carga del disco RAM cuando se necesita. Estos dos caracteres gráficos forman el cofre del tesoro.

Reescribir un código en Sinclair BASIC repleto de saltos es muy laborioso y muy lento, incluso editándolo con Vim. El lenguaje tiene muchas limitaciones. Estimo las posibilidades de traducir el código para otra plataforma: en Beta BASIC para ZX Spectrum, en S*BASIC para QL o en MasterBASIC para SAM Coupé. Comienzo las primeras pruebas para hacer una versión en MasterBASIC.

2011-08-08

Conversión de los números de línea en etiquetas.

Corrección de un aparente error del original: la rutina de desembarco discriminaba el tipo de isla antes de la escena de acercamineto del bote, con lo que esta escena no tenía lugar con la isla del tesoro. Extrañamente, se comprobaba otra vez el tipo de isla tras la escena del bote.

Detectado un grave problema de BASin en la traducción de las etiquetas: Cuando se hace referencia a una etiqueta de más de seis caracteres de longitud, la siguiente etiqueta usada en la misma línea de BASIC no se traduce, a menos que haya un comando de separación. Consultado al respecto el autor de BASin.

2011-08-11

Comienzo de la unificación del código de ambos paneles.

Simplificado el recuento de las pistas acertadas en la isla del tesoro. Se puede prescindir de la matriz.

Cambios en el códigos que gestiona los eventos, para mejorar la legibilidad.

Eliminación de comprobaciones duplicadas en el dibujo del escenario de la isla.

Paul Dunn, el autor de BASin, informa de que el programa ya no está en desarrollo, en favor de SpecBAS. Sin embargo existe cierta posibilidad de que un amigo suyo pueda corregir el fallo y publicar un ejecutable.

Sin poder usar libremente etiquetas con nombres largos y significativos, la reescritura del código es demasiado penosa y no compensa. Aparco el proyecto. El código fuente servirá para una versión en MasterBASIC o en Beta BASIC, más potentes y cómodos que Sinclair BASIC.

2014-07-15

El formato de definición de etiquetas es modificado, para poder convertir el código fuente a TAP con el programa zmakebas de Russell Marks (versión 1.1 de 2000-11). Es el único cambio necesario. Sin embargo, se producen algunos errores extraños, entre los cuales de «etiqueta no definida»:

zmakebas -l -o bandera_negra.tap -n bn bandera_negra.bas
', inserting literallynown escape `
', inserting literallynown escape `
', inserting literallynown escape `
', inserting literallynown escape `
', inserting literallynown escape `
line 302: undefined label

Páginas relacionadas

Bandera negra [en Sinclair BASIC]
[Proyecto abandonado:] Juego de simulación y aventuras para ZX Spectrum, escrito en Sinclair BASIC con el formato de BASin.
Bandera negra [para SAM Coupé, en MBim]
[Proyecto abandonado:] Juego de simulación y aventuras para SAM Coupé, escrito en MasterBASIC con formato MBim.
Historial de desarrollo del proyecto Bandera negra en MasterBASIC
Historial de desarrollo del proyecto abandonado de juego de simulación Bandera negra en MasterBASIC.