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.
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
-
La generación se ejecuta al preparar un mapa con el
metadato
Dungeon = true. - El diseño se escribe en los datos del mapa en memoria y puede cambiar cuando el mapa se configura de nuevo.
- El generador construye terreno y decoración; la colocación de objetos o entrenadores no debe darse por automática. Configura esos eventos por separado si el juego los necesita.
-
La semilla se toma del parámetro
RNGSeed, de la semilla global guardada o de una nueva semilla aleatoria, según cuál esté disponible.