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:

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:

  1. Ve a la Base de datos de RPG Maker XP (F9).
  2. Selecciona la pestaña Tilesets.
  3. Busca tu tileset en la lista.
  4. Haz clic en Terrain Tag.
  5. Localiza los tiles de tu escalera lateral.
  6. Asigna el terrain tag 11 (StairLeft) a los tiles de escalera que suben hacia la izquierda.
  7. 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:

  1. 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.
  2. 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.
  3. Animación del sprite: El sprite del jugador se desplaza de forma suave entre las dos posiciones, manteniendo la animación de caminar.
  4. 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:

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:

# 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

El jugador se "atasca" en la escalera

Problemas visuales (sprite se ve encima/debajo de tiles incorrectos)

El jugador puede caminar fuera de la escalera en diagonal

Compatibilidad con Otros Sistemas

Las escaleras laterales son compatibles con la mayoría de sistemas de Pokémon Essentials, incluyendo:

Consejos de Diseño