alien-b-s
Descripción del contenido de la página
Programa herramienta escrito en Beta BASIC para crear las cadenas gráficas del juego Alien-B.
Beta BASIC permite definir gráficos en cadenas de texto, con resolución de cuadros de caracteres, con o sin información de color, y dibujarlos en cualquier posición de alta resolución. Este pequeño programa prepara en el disco las matrices de texto con los gráficos utilizados por el programa Alien-B, para ahorrar memoria: el juego solo tiene que cargar las matrices del disco.
El procedimiento mkData
es interesante. Es un ejemplo de aplicación de uno de los comandos más creativos de Beta BASIC: KEYIN
. Este comando ejecuta una cadena como si la introdujéramos por teclado en el intérprete, lo que permite guardar y manipular código en Beta BASIC para ejecutarlo durante el funcionamiento del programa, e incluso hacer que el propio programa se modifique a sí mismo, como en este caso. Escribí el procedimiento mkData
para transformar las antiguas líneas DATA
, comprimidas para ahorrar memoria cuando formaban parte del programa principal, en otras más legibles, con los octetos en binario.
Pantallazo
Código fuente
10 REM alien-b-s
20 REM This tool program creates and saves to disk the sprite data arrays used
by the program Alien-B.
30 REM Copyright (C) 2011 Marcos Cruz (programandala.net)
40 REM Licencia/Permesilo/License
programandala.net/license
50 REM 2011-02-02 First version, with code extracted from Alien-B
60
REM ################
Main
70 RANDOMIZE USR 58419
REM Beta BASIC on
80 LET aliens=4
90 CLS #
PRINT INVERSE 1;"alien-b-s"
PRINT '"Making the arrays..."
make
100 LET f$="alien"
PRINT "Saving array '"+f$+"'..."
SAVE OVER d*;f$ DATA g$()
110 LET f$="aim"
PRINT "Saving array '"+f$+"'..."
SAVE OVER d*;f$ DATA x$()
120 show
PRINT "Done!"
STOP
130
REM ################
Make
140 DEF PROC make
150 REM Make the sprite data arrays
160 LOCAL g,s,b
170 RESTORE
180 DIM g$(aliens,18)
FOR g=1 TO aliens
FOR s=1 TO 18
READ b
LET g$(g,s)=CHR$ b
NEXT s
NEXT g
190 DIM x$(9)
FOR s=1 TO 9
READ b
LET x$(s)=CHR$ b
NEXT s
200 END PROC
210 DEF PROC show
220 REM Show the sprites
230 LOCAL s
240 FOR s=1 TO aliens
PLOT 20*s,20*s;g$(s)
PLOT 40*s,20*s;x$
NEXT s
250 END PROC
260
REM ################
Data
270 REM Alien 1, left
280 DATA 0,
BIN 00000011,
BIN 00011111,
BIN 00111000,
BIN 01111111,
BIN 01011111,
BIN 00000111,
BIN 00000011,
BIN 00000001
290 DATA 0,
BIN 10000000,
BIN 11111000,
BIN 11111100,
BIN 11111110,
BIN 11111010,
BIN 11100000,
BIN 11000000,
BIN 10000000
300
REM Alien 2, down
310 DATA 0,
BIN 00000011,
BIN 00011111,
BIN 01111100,
BIN 11111111,
BIN 10011111,
BIN 00000111,
BIN 00000011,
BIN 00000001
320 DATA 0,
BIN 11000000,
BIN 11111000,
BIN 00111110,
BIN 11111111,
BIN 11111001,
BIN 11100000,
BIN 11000000,
BIN 10000000
330
REM Alien 3, right
340 DATA 0,
BIN 00000011,
BIN 00011111,
BIN 00111111,
BIN 01111111,
BIN 01011111,
BIN 00000111,
BIN 00000011,
BIN 00000001
350 DATA 0,
BIN 11000000,
BIN 11111000,
BIN 00011100,
BIN 11111110,
BIN 11111010,
BIN 11100000,
BIN 11000000,
BIN 10000000
360
REM Alien 4, landing
370 DATA 0,
BIN 00000011,
BIN 00011111,
BIN 01111100,
BIN 11111111,
BIN 10011111,
BIN 10000111,
BIN 10000011,
BIN 10000000
380 DATA 0,
BIN 11000000,
BIN 11111000,
BIN 00111110,
BIN 11111111,
BIN 11111001,
BIN 11100001,
BIN 11000001,
BIN 00000001
390
REM Aim
400 DATA 0,
BIN 10000001,
BIN 01000010,
BIN 00000000,
BIN 00000000,
BIN 00000000,
BIN 00000000,
BIN 01000010,
BIN 10000001
410
REM ################
Meta
420 DEF PROC s
430 ERASE d*"alien-b-s~"
440 ERASE d*"alien-b-s" TO "alien-b-s~"
450 CLEAR
SAVE d*"alien-b-s"
STOP
460 END PROC
470 DEF PROC mkDatas
480 REM Create binary data lines from the old decimal data
490 LOCAL s,baseLine
500 RESTORE 630
REM old data line
510 LET baseLine=9900
REM new data line
520 FOR s=1 TO 2*aliens
mkData baseLine+s
NEXT s
530 END PROC
540 DEF PROC mkData lineNumber
550 REM Create one binary data line from the old decimal data
560 LOCAL d,datum,l$
570 PRINT lineNumber
READ datum
LET l$=STR$ lineNumber+" DATA "+STR$ datum+","+CHR$ 15
580 FOR d=1 TO 8
READ datum
LET l$=l$+"BIN "+BIN$(datum)+((","+CHR$ 15) AND (8>d))
NEXT d
590 KEYIN l$
600 END PROC
610
620
REM ################
Old data
630 DATA NOT PI,INT PI,VAL "31",CODE "8",VAL "127",VAL "95",n7,INT PI,SGN PI,NOT PI,VAL "128",VAL "248",VAL "252",VAL "254",VAL "250",VAL "224",VAL "192",VAL "128"
REM Alien 1 (left)
640 DATA NOT PI,INT PI,VAL "31",CODE "|",VAL "255",VAL "159",n7,INT PI,SGN PI,NOT PI,VAL "192",VAL "248",CODE ">",VAL "255",VAL "249",VAL "224",VAL "192",VAL "128"
REM Alien 2 (down)
650 DATA NOT PI,INT PI,VAL "31",CODE "?",VAL "127",CODE "_",n7,INT PI,SGN PI,NOT PI,VAL "192",VAL "248",VAL "28",VAL "254",VAL "250",VAL "224",VAL "192",VAL "128"
REM Alien 3 (right)
660 DATA NOT PI,INT PI,VAL "31",CODE "|",VAL "255",VAL "159",VAL "135",VAL "131",VAL "128",NOT PI,VAL "192",VAL "248",VAL "62",VAL "255",VAL "249",VAL "225",VAL "193",SGN PI
REM Alien 4 (land)
670 DATA NOT PI,VAL "129",CODE "B",NOT PI,NOT PI,NOT PI,NOT PI,CODE "B",VAL "129"
REM Aim
Descargas
Este programa está en el disco de Alien-B.