Mazmorras procedurales

La base genera un diseño aleatorio de celdas, salas, pasillos y decoración cuando configura un mapa marcado como mazmorra. La generación se activa mediante metadatos de mapa y usa dos archivos PBS para definir parámetros y tiles del tileset.

Importante: el código actual no usa la propiedad DungeonMap ni una llamada de evento pbGenerateDungeon. La propiedad reconocida es Dungeon, y la generación ocurre durante la configuración del mapa.

Marcar un mapa como mazmorra

En PBS/map_metadata.txt, añade Dungeon = true a la sección cuyo número corresponde al mapa:

[012]
Dungeon = true

Al configurar ese mapa, el handler :random_dungeon comprueba el metadato, lee el tileset asignado al mapa y genera el diseño. No hace falta llamar a una función desde un evento Autorun.

Parámetros de generación

PBS/dungeon_parameters.txt define una sección por zona. La clave de la sección es el área, que el juego consulta mediante $PokemonGlobal.dungeon_area. Por ejemplo:

[cave]
DungeonSize = 5,4
CellSize = 10,10
MinRoomSize = 5,5
MaxRoomSize = 9,9
CorridorWidth = 2
ShiftCorridors = true
NodeLayout = full
RoomLayout = full
RoomChance = 70
ExtraConnections = 2
FloorPatches = 2,50,25
FloorDecorations = 50,200
VoidDecorations = 50,200
Campo Qué controla
DungeonSize Número de celdas de ancho y alto.
CellSize Tamaño en tiles de cada celda.
MinRoomSize / MaxRoomSize Dimensiones mínimas y máximas de salas.
CorridorWidth Ancho de los pasillos.
ShiftCorridors Permite desplazar aleatoriamente los pasillos.
NodeLayout / RoomLayout Forma de la red de celdas y distribución de salas. El código reconoce full, no_corners, ring, antiring, plus, diagonal_up, diagonal_down, cross y quadrants.
RoomChance Probabilidad porcentual de que una celda apta se convierta en sala.
ExtraConnections Conexiones adicionales entre celdas.
FloorPatches Radio, probabilidad y suavizado de parches del suelo.
FloorDecorations / VoidDecorations Densidad de decoración en el suelo y el vacío.
RNGSeed Semilla opcional para la generación aleatoria.
Flags Flags de generación consultables por el sistema.

Los valores predeterminados del código incluyen una cuadrícula de 5×5 celdas, celdas de 10×10 tiles, pasillos de ancho 2 y una probabilidad de salas del 70%. Define explícitamente los campos que necesites; los valores predeterminados pueden cambiar entre versiones.

Asignar tiles del tileset

PBS/dungeon_tilesets.txt tiene una sección por ID de tileset. Cada línea asocia el índice de un tile o autotile con una categoría que usa el generador:

[7]
Autotile = 1,floor_patch
Tile = 40,void
Tile = 41,void_decoration
Tile = 42,floor
Tile = 0,walls
DoubleWalls = true
FloorPatchUnderWalls = true

Algunas categorías reconocidas son floor, floor_patch, floor_decoration, floor_decoration_large, void, void_decoration, void_decoration_large y walls. El índice debe corresponder a la posición real del tile/autotile en el tileset del proyecto.

El archivo también permite opciones de composición como SnapToLargeGrid, LargeVoidTiles, LargeWallTiles, LargeFloorTiles, DoubleWalls, FloorPatchUnderWalls y ThinNorthWallOffset. Consulta las secciones ya incluidas en PBS/dungeon_tilesets.txt como referencia para los IDs de tileset que utiliza tu proyecto.

Elegir parámetros por evento

El área y la versión se guardan en metadatos globales. Así se puede seleccionar una configuración antes de transferir al mapa:

$PokemonGlobal.dungeon_area = :cave
$PokemonGlobal.dungeon_version = 0
pbFadeOutIn do
  $game_temp.player_new_map_id = 12
  $game_temp.player_new_x = 5
  $game_temp.player_new_y = 5
  $game_temp.player_new_direction = 2
  $game_temp.player_transferring = true
  $scene.transfer_player
end

El código busca primero una sección versionada como [cave_1] cuando la versión es mayor que 0; si no existe, usa la sección base [cave]. Si no encuentra configuración, el sistema crea parámetros predeterminados. Ajusta el ID y las coordenadas de transferencia a tu mapa.

Flujo y límites

Artículos relacionados