Archivos PBS

¿Qué son los PBS?

Los archivos PBS (Pokémon Battle System) son archivos de texto que contienen toda la información de datos del juego: Pokémon, movimientos, habilidades, objetos, entrenadores, encuentros, etc. Son la forma principal de modificar el contenido del juego sin tocar el código Ruby.

Nota: En La Base de Sky, todos los PBS ya vienen actualizados con datos hasta la Gen 9, incluyendo los 1025 Pokémon, todos los movimientos y habilidades.

Ubicación

Los archivos PBS se encuentran en la carpeta:

PBS/

Dentro del directorio raíz del proyecto. Al compilar el juego, estos archivos se convierten en datos binarios utilizados internamente.

Lista de archivos PBS

ArchivoContenidoDoc. relacionada
pokemon.txtDefinición de todas las especies de PokémonPokémon
pokemon_forms.txtFormas alternativas (regionales, Mega, etc.)Pokémon
moves.txtTodos los movimientos/ataquesMovimientos
abilities.txtTodas las habilidadesHabilidades
items.txtTodos los objetosObjetos
trainers.txtEntrenadores y sus equiposEntrenadores
trainer_types.txtTipos de entrenadores (clases)Entrenadores
encounters.txtEncuentros salvajes por mapaCombate
types.txtTipos de Pokémon y tabla de efectividad—
metadata.txtMetadatos de mapasMapas
map_metadata.txtMetadatos adicionales por mapaMapas
town_map.txtMapa del pueblo/regiónMapas
map_connections.txtConexiones entre mapasMapas
ribbons.txtCintas/medallas—
shadow_pokemon.txtPokémon oscuros—
phone.txtContactos del PokégearInterfaz
berry_plants.txtDatos de plantas de bayasObjetos
regional_dexes.txtPokédex regionalesPokédex
pokemon_metrics.txtPosición de sprites en batalla (offsets)—
battle_tower_trainers.txtEntrenadores para la Battle TowerDesafío de Batalla
battle_tower_pokemon.txtPool de Pokémon para la Battle TowerDesafío de Batalla
battle_facility_lists.txtConfiguración de instalaciones de batallaDesafío de Batalla
dungeon_parameters.txtParámetros de mazmorras proceduralesMazmorras
dungeon_tilesets.txtTilesets para mazmorras proceduralesMazmorras

Formato de los PBS

Los PBS utilizan un formato de texto plano basado en secciones. Ejemplo de una entrada de Pokémon:

[PIKACHU]
Name = Pikachu
Types = ELECTRIC
BaseStats = 35,55,40,90,50,50
GenderRatio = Female50Percent
GrowthRate = Medium
BaseEXP = 112
EVs = SPEED,2
CatchRate = 190
Happiness = 70
Abilities = STATIC
HiddenAbilities = LIGHTNINGROD
Moves = 1,TAILWHIP,1,THUNDERSHOCK,4,GROWL,...
EggMoves = BESTOW,BIDE,CHARGE,...
EggGroups = Field,Fairy
HatchSteps = 2560
Height = 0.4
Weight = 6.0
Color = Yellow
Shape = 8
Habitat = Forest
Category = Ratón
Pokedex = Cuando varios de estos Pokémon se juntan...

Archivos adicionales y parciales

Cada PBS admite archivos adicionales junto al original, con el mismo nombre base más un sufijo: _algo. Sirven para no tocar el archivo original y mantener tus cambios separados (por ejemplo, en su propio commit o carpeta de mods).

PBS/pokemon.txt              <- archivo base
PBS/pokemon_custom.txt       <- adicional
PBS/pokemon_AAA.txt          <- adicional
PBS/pokemon_custom_001.txt   <- adicional
PBS/pokemon_custom_002.txt   <- adicional

El sufijo puede ser cualquier texto. Los archivos se cargan en orden alfabético (sin distinguir mayúsculas/minúsculas) por nombre completo, y el archivo base (sin sufijo) siempre carga primero. En el ejemplo de arriba el orden real es: pokemon.txt → pokemon_AAA.txt → pokemon_custom.txt → pokemon_custom_001.txt → pokemon_custom_002.txt.

Añadir o redefinir una sección

Una sección con un ID nuevo en un archivo adicional añade una entrada nueva. Una sección con un ID que ya existe la redefine: solo hace falta escribir los campos que cambian, el resto se hereda tal cual del archivo cargado antes. No hace falta repetir el Pokémon entero.

# PBS/pokemon.txt (original, completo)
[BULBASAUR]
Types = GRASS,POISON
BaseStats = 45,49,49,65,65,45
Abilities = OVERGROW
Moves = 1,TACKLE,3,GROWL,...
Evolutions = IVYSAUR,Level,16
(...resto de campos)

# PBS/pokemon_custom.txt (adicional, parcial)
[BULBASAUR]
BaseStats = 50,50,50,50,50,50
Evolutions = IVYSAUR,Level,12

Tras compilar, Bulbasaur queda con BaseStats y Evolutions nuevos, y Types, Abilities, Moves, etc. exactamente como en el original.

No todos los PBS mergean campo a campo

El merge parcial aplica a los PBS "por entidad" (una sección = un registro con muchos campos): pokemon.txt, pokemon_forms.txt, pokemon_metrics.txt, shadow_pokemon.txt, moves.txt, abilities.txt, items.txt, types.txt, berry_plants.txt, ribbons.txt, trainer_types.txt, town_map.txt, metadata.txt, map_metadata.txt, dungeon_tilesets.txt, dungeon_parameters.txt y phone.txt.

encounters.txt y trainers.txt también aceptan archivos adicionales, pero ahí repetir el mismo mapa/entrenador en un archivo adicional reemplaza el registro entero (no fusiona campo a campo: hay que reescribir todos los tipos de encuentro o todo el equipo). map_connections.txt y regional_dexes.txt son listas: un archivo adicional solo añade filas, no hay un ID individual que fusionar.

Formato JSON

Cualquier PBS (el original o uno adicional) se puede escribir en JSON en vez de texto plano, con el mismo nombre base y en la misma carpeta PBS/. Si existen los dos para el mismo archivo (p. ej. pokemon_custom.txt y pokemon_custom.json), gana el .txt y el .json se ignora — la regla es por archivo, no global: podés mezclar .txt y .json libremente entre el original y los adicionales.

La estructura general es un objeto raíz donde cada key es el ID de sección (el mismo que irías entre corchetes en el .txt) y el valor es un objeto con los campos:

{
  "PIKACHU": {
    "Name": "Pikachu",
    "Types": ["ELECTRIC"],
    "BaseStats": {
      "HP": 35, "ATTACK": 55, "DEFENSE": 40,
      "SPECIAL_ATTACK": 50, "SPECIAL_DEFENSE": 50, "SPEED": 90
    },
    "GenderRatio": "Female50Percent",
    "GrowthRate": "Medium",
    "BaseEXP": 112,
    "EVs": { "SPEED": 2 },
    "CatchRate": 190,
    "Happiness": 70,
    "Abilities": ["STATIC"],
    "HiddenAbilities": ["LIGHTNINGROD"],
    "Moves": [
      { "level": 1, "move": "TAILWHIP" },
      { "level": 1, "move": "THUNDERSHOCK" },
      { "level": 4, "move": "GROWL" }
    ],
    "EggMoves": ["BESTOW", "BIDE", "CHARGE"],
    "EggGroups": ["Field", "Fairy"],
    "HatchSteps": 2560,
    "Height": 0.4,
    "Weight": 6.0,
    "Color": "Yellow",
    "Shape": 8,
    "Habitat": "Forest",
    "Category": "Ratón",
    "Pokedex": "Cuando varios de estos Pokémon se juntan..."
  }
}

Dos comodidades solo disponibles en JSON, pensadas para no errar el orden de un campo posicional:

Un archivo adicional parcial en JSON se ve así (equivalente al ejemplo de Bulbasaur de la sección anterior):

{
  "BULBASAUR": {
    "BaseStats": {
      "HP": 50, "ATTACK": 50, "DEFENSE": 50,
      "SPECIAL_ATTACK": 50, "SPECIAL_DEFENSE": 50, "SPEED": 50
    },
    "Evolutions": [
      { "species": "IVYSAUR", "method": "Level", "parameter": 12 }
    ]
  }
}

Solo se escriben los campos que cambian — el resto se hereda igual que en .txt.

Nota: Los PBS de forma "lista" en vez de "por entidad" también aceptan .json, pero con una forma distinta: map_connections.json es un array de filas [map1, side1, offset1, map2, side2, offset2] (o de objetos con esas mismas keys); regional_dexes.json es un objeto keyed por número de Pokédex con un array de especies; encounters.json es un objeto keyed por "MapID_Version"; trainers.json es un objeto keyed por "Tipo,Nombre,Version".

Dynamic PBS

La Base de Sky incluye el plugin Dynamic PBS que permite modificar datos de PBS en tiempo real durante el juego sin necesidad de recompilar:

Compilar los PBS

Para que los cambios en los PBS tomen efecto:

  1. Editar el archivo PBS correspondiente con un editor de texto
  2. Abrir el juego en modo Debug
  3. El juego detecta cambios y recompila automáticamente
  4. Los datos actualizados se guardan en la carpeta Data/
Importante

Siempre haz una copia de seguridad de tus archivos PBS antes de editarlos. Un error de formato puede causar que la compilación falle.

Artículos relacionados