Escaleras Laterales
Las escaleras laterales (también llamadas side stairs) son un recurso visual y funcional que permite al jugador subir o bajar niveles en diagonal dentro de un mapa. A diferencia de las escaleras convencionales (que simplemente teletransportan de un mapa a otro), las escaleras laterales simulan un movimiento diagonal paso a paso, creando una sensación de profundidad mucho más realista en los mapas.
En Pokémon Essentials, este sistema se implementa mediante terrain tags (etiquetas de terreno) especiales que indican al motor cómo debe moverse el jugador al pisar ciertos tiles. Este artículo cubre todo lo necesario para configurar y personalizar escaleras laterales en tu proyecto.
Conceptos Básicos
El sistema de escaleras laterales funciona asignando terrain tags específicos a los tiles que componen la escalera en tu tileset. Cuando el jugador camina sobre un tile que tiene uno de estos terrain tags, el motor de juego modifica automáticamente la dirección de movimiento para simular un desplazamiento diagonal.
Existen cuatro direcciones posibles para las escaleras laterales:
- Arriba-Izquierda: El jugador sube caminando hacia la izquierda.
- Arriba-Derecha: El jugador sube caminando hacia la derecha.
- Abajo-Izquierda: El jugador baja caminando hacia la izquierda.
- Abajo-Derecha: El jugador baja caminando hacia la derecha.
Cada dirección tiene su propio terrain tag asignado, lo que permite al motor distinguir cómo debe desplazar al personaje.
Terrain Tags para Escaleras
En Pokémon Essentials, los terrain tags para escaleras laterales están definidos dentro del módulo
GameData::TerrainTag. Los valores por defecto son los siguientes:
| Terrain Tag | Nombre Interno | Dirección de Subida | Descripción |
|---|---|---|---|
| 11 | StairLeft |
Arriba-Izquierda | El jugador se desplaza en diagonal arriba-izquierda al subir y abajo-derecha al bajar. |
| 12 | StairRight |
Arriba-Derecha | El jugador se desplaza en diagonal arriba-derecha al subir y abajo-izquierda al bajar. |
Estos terrain tags se definen en el archivo PBS terrain_tags.txt y están registrados en el código
fuente del motor. En la versión estándar de Essentials, solo se incluyen dos tags (izquierda y derecha), ya que
la dirección de bajada se calcula automáticamente como la opuesta.
Configuración en el Tileset
Para configurar escaleras laterales en tu mapa, sigue estos pasos:
Paso 1: Preparar los tiles de escalera
Necesitas tiles gráficos que representen visualmente una escalera en diagonal. Estos tiles suelen ocupar varias celdas para crear la pendiente visual. Puedes dibujarlos tú mismo o utilizar recursos de la comunidad. Asegúrate de que los tiles encajen correctamente con el grid de 32×32 píxeles.
Paso 2: Importar al tileset
Abre RPG Maker XP y añade los tiles de escalera a tu tileset existente o crea uno nuevo. Los tiles de escalera deben colocarse en la sección del tileset que mejor se adapte a su uso (generalmente en la parte B, C o D del autotile o en los tiles estáticos).
Paso 3: Asignar terrain tags
Este es el paso más importante. Abre la configuración de terrain tags de tu tileset:
- Ve a la Base de datos de RPG Maker XP (F9).
- Selecciona la pestaña Tilesets.
- Busca tu tileset en la lista.
- Haz clic en Terrain Tag.
- Localiza los tiles de tu escalera lateral.
-
Asigna el terrain tag
11(StairLeft) a los tiles de escalera que suben hacia la izquierda. -
Asigna el terrain tag
12(StairRight) a los tiles de escalera que suben hacia la derecha.
Importante: Asigna el terrain tag a todos los tiles que componen la escalera, no solo al primer o último peldaño. Cada tile que el jugador pueda pisar en la escalera debe tener el tag correcto.
Paso 4: Configurar las pasabilidades
Además del terrain tag, debes configurar las pasabilidades (passability) correctamente. Los tiles de escalera deben ser pasables (el jugador puede caminar sobre ellos). Si un tile de escalera está marcado como impasable, el jugador no podrá subir por la escalera.
También es recomendable bloquear los tiles adyacentes a la escalera que no deberían ser transitables para evitar que el jugador se "salga" de la escalera durante el movimiento diagonal.
Cómo Funciona el Movimiento
Cuando el jugador se mueve sobre un tile con terrain tag de escalera, el motor aplica la siguiente lógica:
- Detección del terrain tag: Al intentar moverse, el motor comprueba si el tile actual o el tile destino tienen un terrain tag de escalera.
-
Modificación del movimiento: Si el jugador camina hacia arriba sobre un tile
StairLeft, su posición se desplaza simultáneamente una celda hacia arriba y una celda hacia la izquierda, creando el movimiento diagonal. - Animación del sprite: El sprite del jugador se desplaza de forma suave entre las dos posiciones, manteniendo la animación de caminar.
- Ajuste visual de altura: Opcionalmente, el sprite puede desplazarse verticalmente unos píxeles para simular el cambio de altura visual.
El sistema también gestiona automáticamente el caso inverso: si el jugador baja por una escalera
StairLeft, se desplaza hacia abajo y hacia la derecha.
El Módulo StairsBase
En La Base de Sky, el módulo StairsBase proporciona la implementación principal de las escaleras
laterales. Este módulo se encarga de:
- Detectar cuándo el jugador pisa un tile de escalera.
- Calcular la posición destino correcta (diagonal).
- Animar el movimiento del sprite del jugador.
- Gestionar la prioridad de capas y la altura visual.
- Prevenir conflictos con otros sistemas de movimiento.
El módulo se encuentra en la sección de scripts del proyecto y se carga automáticamente al iniciar el juego.
Métodos principales
# Comprueba si un tile es una escalera lateral
def self.isStairTile?(map_id, x, y)
terrain_tag = $game_map.terrain_tag(x, y)
return terrain_tag == :StairLeft || terrain_tag == :StairRight
end
# Obtiene la dirección de desplazamiento de la escalera
def self.stairDirection(terrain_tag, move_direction)
case terrain_tag
when :StairLeft
return (move_direction == 8) ? [4, 8] : [6, 2] # arriba=izq+arriba, abajo=der+abajo
when :StairRight
return (move_direction == 8) ? [6, 8] : [4, 2] # arriba=der+arriba, abajo=izq+abajo
end
return nil
end
Ejemplo Práctico: Crear una Escalera Lateral
Veamos un ejemplo completo de cómo crear una escalera lateral en un mapa de cueva:
1. Diseño del mapa
Imagina un mapa de cueva donde el jugador debe subir un nivel. La escalera ocupa un espacio de 3 tiles de ancho por 4 tiles de alto, descendiendo de izquierda a derecha (el jugador sube caminando hacia la derecha):
Disposición de tiles (vista desde arriba):
[Pared] [Pared] [Pared] [Pared]
[Suelo] [Esc-1] [Pared] [Pared]
[Suelo] [Suelo] [Esc-2] [Pared]
[Suelo] [Suelo] [Suelo] [Esc-3]
[Suelo] [Suelo] [Suelo] [Suelo]
Esc-1, Esc-2, Esc-3 = tiles de escalera con terrain tag 12 (StairRight)
2. Configuración de terrain tags
Selecciona cada uno de los tiles Esc-1, Esc-2 y Esc-3 en la configuración de terrain tags del tileset y
asígnales el valor 12 (StairRight), ya que la escalera sube hacia la derecha.
3. Prueba en el juego
Al probar el mapa, el jugador debería poder caminar hacia arriba estando sobre cualquiera de los tiles de escalera y desplazarse diagonalmente hacia arriba y a la derecha automáticamente.
Personalización Avanzada
Velocidad de movimiento en escaleras
Por defecto, el movimiento diagonal en escaleras usa la misma velocidad que el movimiento normal. Si deseas que el jugador se mueva más lento al subir escaleras (simulando esfuerzo), puedes modificar el factor de velocidad:
# En el script de movimiento del jugador
# Modifica la velocidad al caminar sobre escaleras
def move_speed_on_stairs
base_speed = self.move_speed
terrain = $game_map.terrain_tag(self.x, self.y)
if terrain == :StairLeft || terrain == :StairRight
return base_speed * 0.8 # 80% de la velocidad normal
end
return base_speed
end
Sonido de pasos en escaleras
Puedes agregar un sonido de pasos diferente cuando el jugador camina por las escaleras:
# Reproduce un sonido diferente al caminar por escaleras
def play_stair_footstep
terrain = $game_map.terrain_tag(self.x, self.y)
if terrain == :StairLeft || terrain == :StairRight
pbSEPlay("Stair step", 80, 100)
end
end
Escaleras con cambio de capa
En algunos diseños de mapas, las escaleras pueden necesitar que el jugador cambie de prioridad de capa (por ejemplo, para pasar por detrás de un tile de puente o cornisa). Puedes gestionar esto con:
# Al subir la escalera, cambia la prioridad del jugador
Events.onStepTaken += proc {
terrain = $game_map.terrain_tag($game_player.x, $game_player.y)
if terrain == :StairLeft || terrain == :StairRight
# Ajusta la prioridad visual según la posición Y
$game_player.screen_z_offset = calculate_stair_height($game_player.y)
end
}
Escaleras Laterales y NPCs
Los NPCs también pueden utilizar escaleras laterales. Para que un NPC se mueva por una escalera, necesitas configurar su ruta de movimiento de forma especial:
- No uses rutas automáticas (Move toward player) sobre escaleras, ya que el sistema de pathfinding estándar no comprende el movimiento diagonal de las escaleras.
- Define rutas de movimiento personalizadas (Custom Move Route) que incluyan el movimiento diagonal manualmente.
- Usa el comando
Set Move Routeen un evento para mover al NPC paso a paso por la escalera.
# Ejemplo de ruta personalizada para un NPC subiendo escalera derecha
# En un evento de tipo "Move Route":
# - Move Right
# - Move Up
# - Move Right
# - Move Up
# (Repite para cada peldaño de la escalera)
Resolución de Problemas
El jugador no se mueve en diagonal
- Verifica que el terrain tag está correctamente asignado al tile (debe ser 11 o 12).
- Asegúrate de que el script
StairsBaseestá presente y activo en tu proyecto. - Comprueba que no hay otro script o plugin que interfiera con el movimiento del jugador.
- Confirma que los tiles de la escalera son pasables en la configuración del tileset.
El jugador se "atasca" en la escalera
- Verifica que todos los tiles de la escalera (no solo algunos) tienen el terrain tag correcto.
- Comprueba que el tile destino del movimiento diagonal es pasable.
- Asegúrate de que no hay eventos invisibles bloqueando el paso en los tiles de la escalera.
Problemas visuales (sprite se ve encima/debajo de tiles incorrectos)
- Ajusta las prioridades de los tiles en la configuración del tileset.
- Configura correctamente el
screen_z_offsetdel jugador en los tiles de escalera. - Usa capas de tiles superiores para cubrir el sprite si es necesario.
El jugador puede caminar fuera de la escalera en diagonal
- Coloca tiles impasables a los lados de la escalera para evitar que el jugador se salga del camino.
- Usa eventos invisibles como barreras si los tiles adyacentes deben ser visualmente pasables.
Compatibilidad con Otros Sistemas
Las escaleras laterales son compatibles con la mayoría de sistemas de Pokémon Essentials, incluyendo:
- Encuentros salvajes: Los encuentros pueden ocurrir normalmente en tiles de escalera si estos también tienen asignado un terrain tag de hierba alta (sin embargo, esto no es habitual).
- Bicicleta: El jugador puede usar la bicicleta en escaleras, aunque visualmente puede verse extraño. Considera bloquear la bicicleta en escaleras.
- Seguidores: Si usas un sistema de Pokémon seguidores, asegúrate de que el seguidor también se desplace correctamente en diagonal. Algunos plugins de seguidores ya gestionan esto.
- Running shoes: Las zapatillas de correr funcionan normalmente en escaleras, aplicando el factor de velocidad adicional.
Consejos de Diseño
- No hagas escaleras demasiado largas (más de 5-6 peldaños); resultan tediosas de recorrer.
- Coloca un tile de "descanso" (suelo plano) entre dos tramos de escalera si la diferencia de altura es grande.
- Usa escaleras laterales con moderación; en exceso pueden hacer la navegación confusa.
- Asegúrate de que las escaleras sean visualmente claras para que el jugador entienda que puede subirlas.
- Prueba siempre las escaleras tanto subiendo como bajando para asegurar que el movimiento es fluido en ambas direcciones.