Historial de desarrollo de Asalto y castigo para SAM Coupé
Descripción del contenido de la página
Historial de desarrollo de la versión de Asalto y castigo, para SAM Coupé en MasterBASIC.
2011-07-24
Primer vistazo al código de la versión para QL en SuperBASIC, para estimar las dificultades de la conversión.
2011-08-07
Como punto de partida se toma la versión B-20110717 del código del proyecto análogo en SuperBASIC, ya concluido.
Primeros cambios en el código.
- Cambiado
enddef
porendproc
(incluso de las funciones, que habrá que adaptar con parámetros por referencia). - Cambiados los bucles
repeat
-endrepeat
pordo
-loop
. - Cambiado
loc
porlocal
. - Cambiado el operador
instr
por la función homónima. - Cambiado
ink
porpen
. - Cambiado
endfor
pornext
. - Cambiado
inarray%()
porinarray()
. - Primera versión del procedimiento para imprimir textos justificados.
- Reconstruidas las etiquetas con
label
en lugar del apaño que hubo que hacer con SuperBASIC, que carece de esta funcionalidad. - Reconstruidas con
then
las estructurasif
cortas. - Transformada la función procedural
accept$
en el procedimientolisten
. - Transformadas las funciones no procedurales en simples funciones de MasterBASIC.
- Transformada la función procedural
yes
en el procedimientoask
.
2012-11-17
Revisión superficial del código para ver en qué estado está la conversión.
Conversión de las estructuras select
de SuperBASIC, mediante if
- else if
; una alternativa más elegante pero compleja era la ejecución con keyin
de nombres de procedimientos guardados en una matriz.
Las salidas de los bucles do
- loop
estaban hechas con if
- exit do
debido a la conversión literal del código en SuperBASIC. Son sustituidas por exit if
, más compacto.
Acortados los nombres de las matrices que tenían más de diez caracteres (límite de MasterBASIC).
Añadido fn
a las invocaciones de funciones. (MasterBASIC no permite definir funciones largas. Las alternativas son: usar deffn
para las funciones cortas, de un cálculo, o bien usar procedimientos con parámetros pasados por referencia, adaptaciones ambas que ya fueron hechas en 2011-08).
Cambiado el operador de concatenación &
por +
.
Eliminados los paréntesis que quedaban en las invocaciones de procedimientos.
Sustituidos los separadores de impresión !
por espacios en las cadenas.
Corregidos varios if
que tenían dos then
, debido a las sustituciones automáticas que se hicieron en el código original en SuperBASIC; este lenguaje permite omitir then
y usar :
en su lugar, y así estaba escrito el código de la versión para QL.
Los mensajes de error estaban en variables cuyo nombre era demasiado largo (MasterBASIC no permite más de diez caracteres, mientras que SuperBASIC acepta treinta y seis). Para no abreviar los nombres (lo que reduce la legibilidad) los errores se imprimen con procedimientos, cuyo nombre sí puede ser más largo.
Corregida la sintaxis de input
.
Sustituidos los return
en procedimientos por exit proc
.
Por primera vez el código es importado con éxito por el programa MBimport.
2012-11-18
Terminada una versión adaptada, simplificada y mejorada del procedimiento de impresión de párrafos justificados:
defproc tell txt$
// Imprime un texto justificado a la izquierda.
// Versión adaptada del código publicado en el manual electrónico
// «SAM Coupé A-Z of hinst'n'tips» (por Malevolent, 1993):
# local width,z
# let width=1+(peek svar UWRHS)-peek svar UWLHS
# if len txt$>width
# let txt$=txt$+" "
# do
# let z=width+2
# do:\
# let z=z-1:\
# loop until txt$(z)=" " or z=1
# let z=z+(width-1)*(z=1)
# print txt$( to z-(z=width+1))
# let txt$=txt$(z+1 to )
# loop until len txt$<width+2
# let txt$=txt$( to len txt$-1)
# end if
# print txt$
// Versión simplificada y mejorada:
local width,first,last,c
let \
first=1,\
last=len txt$,\
width=peek UWRHS-peek UWLHS+1
do while (last-first)>width
for c=first+width to first step-1:\
if txt$(c)=" " then exit for
next c
print txt$(first to c-1):\
let first=c+1
loop
print txt$(first to last)
endproc
Primera ejecución del programa. Fallo en la rutina de entrada de comandos.
2012-12-05
El programa es dividido en dos: el procedimiento que crea las matrices de datos, junto con todas las líneas data
, pasan a un programa independiente que creará las matrices anticipadamente y las grabará en el disco. El programa principal solo tendrá que cargarlas. Esto ahorra tiempo de ejecución al arrancar el juego, y memoria; además hace el desarrollo más ligero, pues MBimport no necesita «tragarse» todo ese código (que no cambia) para cada prueba de una nueva versión.
2012-12-11
Creación de datos
El método para cargar las matrices en el programa principal ha sido simplificado: El programa que crea las matrices no las guarda en disco sino que borra todas líneas y se graba a sí mismo con otro nombre (esto evidentemente funciona desde un comando keyin
). El programa así grabado no tendrá líneas de código, pero sí todas sus matrices y variables. Por ello el método se ha ampliado: el programa también inicializa todas las variables requeridas.
El programa principal únicamente necesita hacer un merge
del programa vacío que contiene todas las variables y matrices. Esto es más rápido que cargar cada matriz por separado.
Conversión de imágenes
Para usar la carátula del juego, que ya se utilizó en la versión para QL, hace falta convertirla.
Las numerosas pruebas con el programa BMP to SAM han empezado a dar fruto, con ayuda de algunas indagaciones en el archivo de la lista de correo de usuarios de SAM Coupé. Este programa convierte imágenes de formato BMP a pantallas del modo 4 de la SAM. Consta de una parte en SAM BASIC y una rutina en código máquina. Fue escrito por P. Crompton y publicado en el [[http://www.worldofsam.org/node/567|número 46 de Fred|hreflang="en" title="Página de World of SAM dedicada al número 46 de la revista en disco Fred"]] Para facilitar la creación de ficheros de disco virtual MGT con las imágenes BMP requeridas escribí recientemente el programa MGTize. Para convertir las imágenes al formato requerido por BMP to SAM usé una combinación de manipulaciónes con mtPaint y comandos de netpbm, pero la conversión de la paleta aún no funciona bien. Espero poder automatizar todo el proceso, desde la imagen original hasta su versión convertida e incorporada a un disco virtual MGT, todo sin intervención de la SAM Coupé.
2012-12-12
Primeros pantallazos:
2014-06-19
Revisión de código. Se elimina del programa principal el código que crea las variables y matrices, que ya había sido copiado al programa auxiliar y estaba desactivado.
Se simplifica el selector de acción: en lugar de un larga estructura if
se usa keyin
y una matriz con los nombres de los procedimientos.
2015-01-20
Revisión de código. Las líneas de código de más de 80 caracteres son divididas en varias líneas de texto. Parte de los comentarios pendientes son traducidos al inglés.