Sprite BASIC es una expansión de 47 nuevos comandos para el BASIC de la C64, escrito por Andreas Schulteiß y originalmente publicado como un listado para tipear en la revista española Commodore World Nro 33 de Enero de 1987 (y posiblemente también en la revista RUN en otros lugares de Europa y EEUU).
Sprite BASIC usa interrupciones para manejar los sprites y sus colisiones, y también el sonido, de manera de poder tener sprites moviendose por la pantalla y sonido mientras el programa BASIC se sigue ejecutando.
Comandos para sprites y caracteres personalizados
SHOW número de sprite (1-8 ), indicador multicolor (0-1), prioridad (0-1) Sirve para hacer visible un sprite. Ejemplo:
SHOW1,1,0 conecta el sprite 1 en multicolor y sin prioridad sobre el fondo
HIDE número de sprite (1-8 ) Desconecta un sprite. Ejemplo:
HIDE 1 desconecta el sprite 1.
SET número de sprite (1-8 ), coordenada X (0-511), coordenada Y (0-255). Coloca un sprite en una posición de la pantalla. Ejemplo:
SET3,160,130 coloca el sprite 3 en el centro de la pantalla
BLOCK número de sprite (1-8 ), número de bloque (0-63). Determina la zona de almacenamiento de datos para el sprite. Ejemplo:
BLOCK1,10 selecciona el bloque 10 para el sprite 1.
COLOR número de sprite (1-8 ), color (0-15). Selecciona el color del sprite. Ejemplo:
COLOR7,1 selecciona el color blanco para el sprite 1.
MULTI color1 (0-15), color2 (0-15). Define los multi-colores para todos los sprites. Ejemplo:
MULTI6,2 selecciona los colores azul y rojo
SIZE número de sprite (1-8 ), ampliación X (0-1), ampliación Y (0-1). Determina la expansión X e Y del sprite. Ejemplo:
SIZE4,1,0 hace que el sprite 4 se expanda en horizontal.
SPREDIT número de bloque (0-63). Determina el número de bloque o banco de datos del sprite que se va a editar con el comando PAT (ver más adelante). Ejemplo:
SPREDIT12 selecciona el bloque 12
CHREDIT número de carácter (0-511). Determina el carácter que va a ser editado con PAT. Ejemplo:
CHREDIT1 la "A" va a ser el cáracter editado.
CHREDIT257 la "A" del segundo juego de caracteres es la que se va a editar.
PAT“cadena de definición”. Sirve para definir un sprite o un carácter. Si la cadena es de 8 caracteres, se define un carácter (ver CHREDIT) y hacen falta 8 definiciones. Si es de 24, se crea un sprite (ver SPREDIT) y hacen falta 24 definiciones. Un carácter “.” significa pixel apagado, y cualquier otro carácter, pixel encendido. Ejemplo:
MPAT“cadena de definición” (12 caracteres). Sirve para definir sprites multicolores: “.” es un pixel apagado, “A” pixel del color del sprite, “B” pixel con multicolor1 y “C” pixel con multicolor2. Ejemplo:
OLD copia los dos juegos de caracteres ROM del C-64, con lo que los caracteres definidos con CHREDIT y PAT quedan sustituidos por caracteres normales.
COPY bloque1 (0-63), bloque2 (0-63). Copia un bloque de un lugar a otro. Ejemplo:
COPY1,2 copia el bloque 1 sobre el 2.
Comandos de movimiento
Move número de sprite (1-8 ), ángulo (0-360, sentido antihorario según la horizontal), extensión de los pasos, velocidad (0-127, 1 la máxima), número de pasos (0-65535, 0 es movimiento continuo), flag BASIC (0 seguir el programa, 1 esperar a que el sprite termine de moverse). Usado para mover un sprite por la pantalla. Ejemplo:
MOVE1,90,1,1,10,1 el sprite 1 se mueve en vertical hacia arriba con la maxima velocidad en pasos de 1 pixel. En total da diez pasos y luego sigue el programa BASIC.
MOVE8,77,4,4,20,0,0 el sprite 8 se mueve de forma continua en un angulo de 77 grados a velocidad 20, con pasos de 4 pixeles. El programa BASIC continua por su cuenta.
NOMOVE número de sprite (1-8 ). Detener un sprite. Ejemplo:
NOMOVE3 detiene el movimiento del sprite 3.
TURN número de sprite (1-8 ), ángulo (0-360), número de pasos (0-65535), número de repeticiones (0-255, siendo 0 ininterrumpido). Indica a un sprite que cambie su direccián de movimiento tras un número determinado de pasos. Ejemplo:
TURN1,90,10,20 el sprite 1 girara 90 grados tras dar 10 pasos, repitiendose esto 20 veces.
NOTURN número de sprite (1-8 ). Detiene el cambio de dirección y el sprite vuelve a moverse normalente. Ejemplo:
ANIMATE número de sprite (1-8 ), primer bloque (0-63), número de bloques (0-63), número de pasos. Un sprite cambia de forma alternativamente. Ejemplo:
ANIMATE1,13,3,10 el sprite 1 cambia de forma (banco de lectura de datos) cada 10 pasos, comenzando en el 13 y siguiendo en 14-15.
NOANIMATE número de sprite (1-8 ). Detiene la animación. Ejemplo:
NOANIMATE4 detiene la animación del sprite 4
Comandos de manejo de colisiones
SPCOL número de sprite (1-8 ), número de linea (0-63999). Hace que el programa se ramifique a la línea especificada cuando se detecta una colisión del sprite con otro sprite. Ejemplo:
SPCOL1,1000 hace que si el sprite 1 colisiona con otro sprite el programa se ramifique a la linea 1000.
NOSPCOL número de sprite. Anula la orden anterior. Ejemplo:
CHCOL número de sprite (1-8 ), número de linea (0-63999). Es como SPCOL pero para colisiones entre el sprite y los caracteres.
NOCHCOL número de sprite (1-8 ). Anula CHCOL.
BACK Después de SPCOL o CHCOL, el programa dará un salto atrás al encontrar esta orden, exactamente al lugar del que partió. El resultado es como GOSUB/RETURN.
POP Hace desaparecer la dirección para BACK. De este modo puede volver a cualquier parte del programa con GOTO en vez de con BACK.
CLFLAG El flag de colisión se queda activado cuando se ejecuta CHCOL o SPCOL por lo que si se produce otra colisión no podra ser detectada, por lo que es recomendable poner este comando al final de la subrutina de colisión, o inmediatamente despues de haber resuelto la condición que produjo la colisión en primer lugar.
(Nota: La revista recomienda colocar este comando al principio de la subrutina, pero de esa manera, al no haberse resuelto la condición que produjo la llamada a la subrutina, solo se logra que se llame a la subrutina una y otra vez, produciendo al final un desbordamiento de pila y la finalización del programa.)
Comandos de sonido
VOL intensidad (0-15). Regula el volumen. Ejemplo:
ADSR voz (1-3), ataque (0-15), decaimiento (0-15), sostenimiento (0-15), relajación (0-15). Determina la envolvente del sonido. Ejemplo:
ADSR1,1,9,0,0 produce sonido de piano.
WAVE voz (1-3), tipo de onda (0-3). Fija la forma de onda. Puede ser: 0=triangular, 1=diente de sierra, 2=cuadrada, 3=ruido blanco. Ejemplo:
WAVE1,3 la voz 1 produce ruido
PULSE voz (1-3), ancho del pulso (0-65535). Determina la relación en una oscilación cuadrada. Ejemplo:
PULSE2,2000 la voz 2 tiene una relación de 1:2000.
PLAY voz (1-3), frecuencia en Hz, duración en segundos, flag (0=el programa continúa. 1=el programa se detiene hasta que termina el sonido). Sirve para tocar una nota. Ejemplo:
PLAY1,400,1,0 toca el diapason A durante 1 segundo mientras el programa BASIC se ejecuta.
Otros comandos
CURSOR columna (0-39), línea (0-24). Pone el cursor en una posición de la pantalla. Ejemplo:
CURSOR20,12 coloca el cursor en el centro de la pantalla
PLOTcolumna (0-39), línea (0-24), código (0-255), color (0-15). Coloca un carácter en la pantalla con color incluido. Ejemplo:
PLOT20,12,1,0 pone una A en negro en el centro de la pantalla.
BORDER color (0-15). Cambia el color del borde de la pantalla.
PAPER color (0-15). Cambia el color del fondo de la pantalla.
INK color (0-15). Cambia el color de los caracteres para las sentencias PRINT que sigan.
NOBREAK Desconecta la tecla STOP
RENEW Recupera un programa BASIC borrado con NEW o con reset.
KILL Desconecta Sprite BASIC.
Funciones
SPX(S). Contiene la coordenada X del sprite S. Ejemplo:
SPY(S). Contiene la coordenada Y del sprite S. Ejemplo:
ANG(S) Indica el ángulo con que se mueve el sprite S.
SCOL(S) Indica si el sprite S ha chocado (1) o no (0) con otro sprite. Ejemplo:
IF SCOL(2) THEN PRINT"CHOCASTE"
CCOL(S) Si el sprite S ha chocado con un carácter de la pantalla indica 1, si no, 0.
CHAR(X,Y) Indica el carácter que esta en la columna X, línea Y de la pantalla (en codigo de pantalla).
FIRE(P) Indica el estado del botón de disparo del joystick en el puerto P. Ejemplo:
JOY(N) Esta función permite la utilización en todo momento del joystick: N=1 “pregunta” al joystick 2 en todas las direcciones. N=2 joystick 2 solo en sentido horizontal (180 y 360 grados). N=3 solo en sentido vertical (90 y 270 grados). N=4 solo vertical y horizontal sin las diagonales. N=5 a 8 son los equivalentes para el puerto 1.
Descargar imagen D64 comprimida: spritebasic.zip
La imagen contiene:
- SBASICGEN: El generador BASIC del Sprite BASIC tecleado desde la revista.
- SPRITE BASIC: El ejecutable del Sprite BASIC, carga este programa para empezar a usarlo.
- CARS: Pequeño juego de demostracion del Sprite BASIC, cargarlo despues de inicializar el Sprite BASIC.