Skip to content

Custom code II: variables y comandos simplificados

greenwebsevilla edited this page Nov 25, 2025 · 9 revisions

A continuación veremos una lista de variables a las que podremos acceder desde los ficheros custom code y también una serie de comandos simplificados o funciones para realizar ciertas consultas o tareas de manera mucho más fácil e intuitiva. Para algunos se dan ejemplos de uso. Estas variables y comandos los vamos a organizar por categorías, agrupando los que tengan cierta relación, como por ejemplos aquellos/as que afectan o dependen del player.


Generales

  • MODE256

Comando. Cambia el modo gráfico del Spectrum Next a 256x192.

  • MODE320

Comando. Cambia el modo gráfico del Spectrum Next a 320x256.

  • CROP_ULA

Comando. Reduce el área visible de la capa ULA al primer tercio de pantalla (8 filas de caracteres), que es donde se muestra el HUD.

  • FULL_ULA

Comando. Muestra la capa ULA completa. Durante el juego los dos tercios finales se usan para almacenar los datos del mapeado y enemigos.

  • HIDE_SPRITES

Comando. Oculta todos los sprites.

  • SHOW_SPRITES

Comando. Vuelve a mostrar los sprites si previamente se han ocultado.


Niveles

  • LEVEL_NUM

Variable. Contiene el número del nivel actual.

IF LEVEL_NUM = 0
 ...
END IF
  • GOTOMAP (num, x, y)

Función. Carga el mapa número num y posiciona al player en las coordenadas x,y en tiles.

  • STAGE_CLEAR

Comando. Finaliza el nivel actual y muestra la pantalla de stage clear (o lo que se haya programado en el fichero stage_clear.bas).

  • END_GAME

Comando. Finaliza el juego y muestra la pantalla de fin (o lo que se haya programado en el fichero game_ending.bas).

  • RESTART_LEVEL

Comando. Reinicia el nivel actual, cargando de nuevo tanto el mapa como los enemigos y reiniciando la música.


Player

  • PLAYER_X

Variable. Guarda el valor de la coordenada X del player en píxeles.

  • PLAYER_Y

Variable. Guarda el valor de la coordenada Y del player en píxeles.

  • PLAYER_VX

Variable. Guarda el valor de la velocidad del player en el eje X. Si es positivo, se mueve hacia la derecha. Si es negativo, se mueve hacia la izquierda. Si es 0, el player está quieto horizontalmente.

  • PLAYER_VY

Variable. Guarda el valor de la velocidad del player en el eje Y. Si es positivo, se mueve hacia abajo. Si es negativo, se mueve hacia arriba. Si es 0, el player está quieto verticalmente.

  • PLAYER_X_IN_TILES

Variable. Guarda el valor de la coordenada X del player en tiles.

  • PLAYER_Y_IN_TILES

Variable. Guarda el valor de la coordenada Y del player en tiles.

  • PLAYER_ENERGY

Variable. Guarda el valor de la energía restante del player.

  • PLAYER_LIVES

Variable. Guarda el número de vidas reatantes del player.

  • PLAYER_IN_ZONE (x1, y1, x2, y2)

Función. Comprueba si el player se encuentra en una zona rectangular del mapa definida por las coordenadas de los tiles superior izquierdo e inferior derecho que definen dicho rectángulo. Devuelve TRUE o FALSE.

IF PLAYER_IN_ZONE(10,7,12,8) 'Si el jugador toca este área del mapa
   GOTOMAP(1,38,8) 'cargamos el mapa 1 y posicionará al player en el tile x=38, y=8
END IF
  • PLAYER_TOUCH_TILE_NUM

Función. Devuelve el número de tile concreto dentro del tileset sobre el que se encuentra el player.

IF PLAYER_TOUCH_TILE_NUM = 12 'Si el jugador está sobre un tile número 12, se cumple la condición
   ...
END IF
  • PLAYER_TOUCH_TILE_TYPE

Función. Devuelve el tipo de tile (comportamiento) sobre el que se encuentra el player.

IF PLAYER_TOUCH_TILE_TYPE = 5 'Si el jugador está sobre un tile del tipo 5, se cumple la condición
   ...
END IF
  • SCORE_ADD (n)

Función. Suma n puntos al marcador.

  • REFILL_ENERGY

Comando. Rellena la energía del player al máximo.

  • PLAYER_DIE

Comando. Hace que el player muera inmediatamente.

  • SET_PLAYER_ANIMATION (anim_speed, frame1, [frame2], [frame3], [frame4], [frame5], [frame6], [frame7], [frame8])

Función. Define la animación del player.

  • El primer parámetro, anim_speed. define la velocidad de la animaciòn, es decir, cada cuántos frames cambia la animación a la siguiente imagen (recuerda que el juego funciona a 50/60 frames por segundo).
  • Los demás parámetros definen la secuencia de imágenes que componen la animación, siendo solo obligatorio el primero (frame1) y el resto hasta completar el número de frames que se haya definido en MAX_FRAMES_PLAYER.

Ejemplo: Definimos una animación para andar, con una velocidad de 8 frames, 4 fotogramas en total usando la secuencia 0,1,2,1.

IF PLAYER_WALKING
     SET_PLAYER_ANIMATION(8, 0,1,2,1)
END IF
  • PLAYER_EXTRA_TOP_BB

Variable. Define que altura extra tendrá la caja de colisiones del player. Indicado para cuando usamos sprites de tamaño 16x32 píxeles.

' Ejemplo: aumentar por encima 8 pixeles la caja de colisión del player (para sprite 16x32)'
PLAYER_EXTRA_TOP_BB = 8

Estados del player

Funciones que devuelven TRUE o FALSE si el player se encuentra en uno de estos estados:

  • PLAYER_JUMPING: el jugador está saltando o en el aire.
  • PLAYER_WALKING: el jugador está moviéndose horizontalmente (ojo, también si está en el aire).
  • PLAYER_GOING_LEFT: el jugador está moviéndose hacia la izquierda.
  • PLAYER_GOING_RIGHT: el jugador está moviéndose hacia la derecha.
  • PLAYER_GOING_UP: el jugador está moviéndose hacia arriba.
  • PLAYER_GOING_DOWN: el jugador está moviéndose hacia abajo.
  • PLAYER_ON_LADDER: el jugador está sobre una escalera.
  • PLAYER_FLICKERING: el jugador está parpadeando y es inmune.
  • PLAYER_DYING: el jugador está muriendo.

Utilidades / Loop

  • TEXT(x,y,color,text)

Función. Imprime un texto en la capa ULA en el área del hud o de textos (primer tercio de pantalla). Parámetros:

  • x e y son las coordenadas en caracteres de 8x8.
  • color: tinta del texto del 0 al 7
  • text: cadena de texto que queremos imprimir entre comillas. Ejemplo:
TEXT(10,3,2,"HOLA MUNDO")
  • MUSIC

Variable. Guarda el número de la canción que está sonando. Si se cambia, sonará la canción que indique su valor.

Por ejemplo, para que suene la música 2 (fichero 2.pt3):

MUSIC = 2
  • SOUND (n)

Función. hace que suene el sonido número n.

Por ejemplo, para que suene el sonido 4:

SOUND(4)
  • STOP_MUSIC

Comando. Para la música que esté sonando.

  • PLAY_MUSIC

Comando. Reanuda la música que estaba sonando antes de llamar a STOP_MUSIC.

  • RESET_MUSIC

Comando. Reinicia la música que esté sonando en ese momento.

  • PAUSA(n)

Hace una pausa de n frames. Para pausar un segundo aproximadamente, usaríamos PAUSA(50)

  • PRINT_TILE (x, y, num_tile)

Función. Imprime un tile en el área visible del mapa. Este tile permanecerá cambiado hasta que desaparezca del área visible, luego reaparecerá en su estado original.

Parámetros:

  • x e y son las coordenadas en tiles dentro del mapa actual. Puedes consultar las coordenadas en el editor de mapas Tiled.
  • num_tile es el número de tile, dentro del tileset, que queremos imprimir.
  • UPDATE_TILE

Función. Imprime y modifica un tile en del mapa, aunque no se esté viendo en el área de juego en ese momento. Este tile permanecerá cambiado mientras no cambiemos de mapa. Si se recarga el mapa, reaparecerá en su estado original.

Parámetros:

  • x e y son las coordenadas en tiles dentro del mapa actual. Puedes consultar las coordenadas en el editor de mapas Tiled.
  • num_tile es el número de tile, dentro del tileset, que queremos imprimir.
  • DELETE_HUD

Comando. Borra todo el primer tercio en la capa ULA.

  • DELETE_TEXT_AREA

Comando. Borra todo el área de texto en la capa ULA. Este área son las líneas del primer tercio de pantalla que quedan por debajo del hud.

  • PRINT_HUD

Comando. Imprime todos los elementos del hud que estén activos: puntos, vidas, energía, tiempo...


Tiempo

  • TIME

Variable. Contiene el tiempo restante que queda en el contador de tiempo.

  • TIMER_ON

Comando. Pone en marcha el contador de tiempo.

  • TIMER_OFF

Comando. Detiene el contador de tiempo.

  • RESTART_TIME

Comando. Pone el contador de tiempo a su estado inicial, que hemos definido previamente en la macro TIMER_INITIAL dentro de config.bas


Enemigos (y objetos)

En cada fotograma de juego se ejecuta un bucle recorriendo todos los enemigos del mapa actual. Dentro de ese bucle, podemos emplear las siguientes órdenes para leer, escribir o alterar algún dato o comportamiento de cualquier enemigo u objeto.

  • ENEMY_TYPE

Variable. Contiene el tipo de enemigo.

  • ENEMY_STATUS

Variable. Contiene el estado del enemigo.

  • NO_KILL

Comando. hace que el enemigo u objeto no mate al jugador. Usar en enems_collisions.bas para hacer que ciertos sprites no sean dañinos.

Por ejemplo, un sprite tipo 10 podría ser un item que recarga la energía del player:

IF ENEMY_TYPE = 10
        NO_KILL                   'LA COLISION CON ESTE SPRITE NO MATA
        KILL_SPRITE_NO_RESPAWN    'BORRA EL SPRITE Y DESACTIVA EL RESPAWN
        REFILL_ENERGY             'RECARGA LA ENERGÍA DEL JUGADOR
END IF
  • KILL_SPRITE

Comando. Elimina el enemigo u objeto.

  • KILL_SPRITE_NO_RESPAWN

Comando. Elimina el enemigo u objeto y además no reaparecerá aunque hayamos activado RESPAWN_ENEMIES dentro de config.bas

  • ENEMY_ANIMATION (num_frames, anim_speed, frame1, [frame2], [frame3], [frame4], [frame5], [frame6], [frame7], [frame8])

Función. Define la animación del enemigo u objeto. Parámetros:

  • num_frames: indica el número de fotogramas que tendrá la animación.
  • anim_speed: define la velocidad de la animación, es decir, cada cuántos frames cambia la animación a la siguiente imagen (recuerda que el juego funciona a 50/60 frames por segundo).
  • Los demás parámetros definen la secuencia de imágenes que componen la animación, siendo solo obligatorio el primero (frame1) y el resto hasta completar el número de frames que se haya definido en MAX_FRAMES_ENEMIES.

Ejemplo: Definimos una animación para el enemigo tipo 3, con 4 fotogramas, con una velocidad de 8 frames, usando la secuencia 0,1,2,3.

IF ENEMY_TYPE = 3
     ENEMY_ANIMATION(4,4, 0,1,2,3)
END IF
  • ENEMY_SHOOT (vx, vy)

Función. Crea un disparo que parte del enemigo actual con las velocidades horizontal (vx) y vertical (vy) indicadas.

  • MOVE_ENEMY

Comando. Mueve al enemigo tanto en horizontal como vertical con las velocidades que hayamos definido en Tiled mediante el creador de enemigos.

  • CHECK_ENEMY_LIMITS

Comando. Comprueba si el enemigo u objeto está en uno de sus límites, y cambia de sentido si choca con alguno de ellos.

  • CHECK_ENEMY_TILES

Comando. Comprueba si el enemigo u objeto choca contra algún tile de tipo sólido (8), y cambia de sentido en caso afirmativo.

  • MOVE_FANTY

Comando. Mueve al enemigo tipo fanty.

  • ENEMY_ADD_GRAVITY

Comando. Añade gravedad al enemigo u objeto. Esto lo arrastrará hacia abajo. Usar en enemigos JUMPERS (3) y OSCILLATORS (4) o en tu propio tipo si te atreves.

  • ENEMY_IS_TOUCHING_GROUND

Función. Devuelve TRUE o FALSE según el enemigo u objeto pise un tile tipo sólido (8) o plataforma (4)

  • ENEMY_BOUNCE

Comando. hace que el enemigo (por ejemplo tipo JUMPER) de un salto.

Ejemplo de uso:

IF ENEMY_IS_TOUCHING_GROUND 
  ENEMY_BOUNCE
END IF
  • MOVE_OSCILLATOR

Comando. Mueve al enemigo tipo oscilador.

  • ENEMY_EXTRA_TOP_BB

Variable. Define que altura extra tendrá la caja de colisiones del enemigo u objeto. Indicado para cuando usamos sprites de tamaño 16x32 píxeles.

  • ENEMY_COUNTER

Variable. Es un contador individual para cada enemigo u objeto. Para usos variados.

  • ENEMY_VAR1

Variable. Usa esta variable para tus propias cosas. Cada enemigo tiene su propia variable.

  • ENEMY_VAR2

Variable. Usa esta variable para tus propias cosas. Cada enemigo tiene su propia variable.

  • ENEMY_VAR3

Variable. Usa esta variable para tus propias cosas. Cada enemigo tiene su propia variable.

  • ENEMY_VAR4

Variable. Usa esta variable para tus propias cosas. Cada enemigo tiene su propia variable.

  • ENEMY_VAR5

Variable. Usa esta variable para tus propias cosas. Cada enemigo tiene su propia variable.


Otras variables

  • HALF_LIFE

Variable que cambia entre 0 y 1 cada fotograma. Ejemplo de uso:

'Solo se mueve cada dos frames'
IF HALF_LIFE       
   MOVE_FANTY       
END IF
  • QUARTER_LIFE

Variable que cambia entre 0 y 1 cada 2 fotogramas. Ejemplo de uso:

'Solo se mueve cada 4 frames'
IF HALF_LIFE       
   MOVE_FANTY       
END IF

Resto de variables

  • OBJECTS_NUMBER

Variable. Guarda el número de objetos recogidos por el jugador.

  • SCORE

Variable. Guarda la puntuación.

  • FIRST_TILANIM

Variable. Define que número de tile (dentro del tileset) es el primero que estará animado. Usar antes de cargar el mapa en before_entering_map.bas

Animar los tiles del mapa 2 a partir del 120:

IF LEVEL_NUM = 2
    FIRST_TILANIM = 120
END IF

Clone this wiki locally