-
-
Notifications
You must be signed in to change notification settings - Fork 0
Custom code II: variables y comandos simplificados
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.
- 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.
- 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_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
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.
- 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...
- 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
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.
- 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
- 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
This is an early version of the engine. Some features may change or be removed in the near future if necessary.
🎨 ABOUT THE GRAPHIC SETS INCLUDED IN THE ENGINE
All graphic sets, sprites, tiles, and static screens are copyrighted and are provided exclusively for educational purposes and to demonstrate the demo game. They may not be used, either as-is or modified, to create any other game or project — whether free or commercial — without prior authorization from the author.
- ¿Qué es Next MS Engine?
- Preparando el entorno de desarrollo: Visual Studio Code
- Preparando el entorno de desarrollo: Tiled
- Preparando el entorno de desarrollo: Aseprite
- Sprites
- Tiles
- Mapas
- Enemigos y objetos en el mapa
- Música y sonido
- Configurando el motor
- Animaciones de sprites
- Custom code I: ficheros
- Custom code II: variables y comandos