Mazmorras

Las mazmorras (dungeons) son mapas especiales que pueden regenerarse aleatoriamente cada vez que el jugador entra. Pokémon Essentials incluye un sistema para crear mazmorras con generación procedural, oscuridad y puzles clásicos de la saga.

Flag de Mazmorra en los Metadatos del Mapa

Para que un mapa funcione como mazmorra, debes activar la opción correspondiente en los metadatos del mapa. En el archivo PBS map_metadata.txt:

[012]   # Número del mapa
Name = Cueva Oscura
DungeonMap = true

Cuando DungeonMap está activado:

Generación aleatoria de mazmorras

Essentials proporciona el método pbGenerateDungeon para crear layouts aleatorios. Este método genera una cueva con pasillos y salas conectadas.

Uso básico

# En un evento de tipo "Autorun" en el mapa de la mazmorra
pbGenerateDungeon

Este comando genera un layout aleatorio usando los tiles del tileset actual. La generación utiliza los tiles definidos en las primeras posiciones del tileset para suelo y paredes.

Cómo funciona la generación

  1. El sistema divide el mapa en una cuadrícula de celdas.
  2. Genera salas aleatorias dentro de las celdas.
  3. Conecta las salas con pasillos.
  4. Coloca tiles de pared en los bordes y tiles de suelo en las áreas transitables.
  5. Opcionalmente, coloca eventos como objetos del suelo y entrenadores.

Mapas que se resetean al entrar

Un mapa con DungeonMap = true se regenera cada vez que el jugador entra. Esto significa que:

Si quieres un mapa estático que solo se resetee bajo ciertas condiciones, puedes controlar esto con un interruptor (switch):

# En un evento Autorun del mapa
if !$game_switches[50]   # Si el switch 50 no está activado
  pbGenerateDungeon
  $game_switches[50] = true
end

Encuentros salvajes en mazmorras

Las mazmorras suelen tener una mayor densidad de encuentros salvajes. Puedes configurar esto en los metadatos del mapa:

[012]
Name = Cueva Oscura
DungeonMap = true
WildBattleDensity = 30  # Mayor densidad (por defecto es 25)

Un valor más bajo significa encuentros más frecuentes. El valor estándar es 25; valores entre 10-20 crean mazmorras con encuentros muy frecuentes.

Oscuridad y Flash

Puedes crear mazmorras oscuras donde el jugador necesita usar el movimiento Flash para ver. Esto se configura en los metadatos del mapa:

[012]
Name = Cueva Oscura
DarkMap = true

Cuando DarkMap está activado:

Controlar la oscuridad por script

# Activar oscuridad manualmente
$PokemonTemp.darknessSprite = DarknessSprite.new

# Iluminar el mapa (simular Flash)
pbFlash

Puzles de Fuerza (Strength)

Los puzles de empujar rocas con el movimiento Fuerza (Strength) son clásicos de las mazmorras Pokémon.

Configurar un puzle de Fuerza

  1. Crea un evento para cada roca empujable con un gráfico de roca.
  2. En el evento, establece la condición: el movimiento Fuerza debe estar activo.
  3. Usa el comando de movimiento "Push" para permitir empujar la roca.

La forma más sencilla de crear una roca empujable es usar el evento predefinido de Essentials:

# En un evento con trigger "Player Touch"
pbStrengthBoulder

Este comando verifica automáticamente si Fuerza está activado y permite empujar la roca en la dirección en que el jugador la toca.

Verificar posición de rocas

# Comprobar si un evento (roca) está en una posición específica
if $game_map.events[5].x == 10 && $game_map.events[5].y == 8
  # La roca está en la posición correcta
  pbSE("Door open")
  # Abrir el camino
end

Puzles de hielo deslizante

El hielo deslizante es un puzle donde el jugador se desliza en una dirección hasta chocar con una pared u obstáculo.

Configuración

Asigna el terrain tag Ice a los tiles de hielo deslizante:

  1. Abre el editor de terrain tags desde el menú de Debug.
  2. Selecciona el tile de hielo.
  3. Asígnale el terrain tag Ice.

Cuando el jugador pisa un tile con el terrain tag Ice, se desliza automáticamente en la dirección de movimiento hasta que encuentra un tile sin hielo o un obstáculo.

Tiles de parada

Para crear puzles interesantes, coloca obstáculos estratégicos (rocas, paredes) que detengan al jugador en posiciones específicas. Las rocas de Fuerza también se pueden combinar con puzles de hielo.

Mecánicas comunes de mazmorra

Pisos con trampas

Puedes crear tiles trampa que dañen al equipo del jugador o lo teletransporten:

# Evento con trigger "Player Touch" - Trampa de daño
pbMessage("¡Pisaste una trampa!")
$player.party.each do |pkmn|
  next if pkmn.fainted?
  pkmn.hp -= (pkmn.totalhp / 10)
  pkmn.hp = 1 if pkmn.hp < 1
end

Interruptores de piso

Placas de presión que activan eventos al pisarlas:

# Evento con trigger "Player Touch" - Placa de presión
pbSE("Switch")
$game_switches[20] = true  # Activa un interruptor global
pbMessage("Se escuchó un ruido a lo lejos...")
# Otro evento puede verificar este switch para abrir una puerta

Teletransporte entre pisos

Usa escaleras o agujeros para conectar diferentes pisos de la mazmorra:

# Evento con trigger "Player Touch" - Caída por agujero
pbSE("Player fall")
pbFadeOutIn {
  $game_temp.player_transferring = true
  $game_temp.player_new_map_id = 15      # ID del mapa destino
  $game_temp.player_new_x = 8            # Coordenada X
  $game_temp.player_new_y = 12           # Coordenada Y
  $game_temp.player_new_direction = 0    # Mantener dirección
  $scene.transfer_player
}
pbMessage("¡Caíste por un agujero!")

Niebla y efectos visuales

Puedes añadir efectos de niebla a las mazmorras para crear ambiente:

# En los metadatos del mapa
[012]
Name = Cueva Misteriosa
Weather = Fog, 9