Tienda Pokémon

La Tienda Pokémon (Poké Mart) es donde el jugador compra y vende objetos. En Pokémon Essentials, las tiendas se implementan mediante la función pbPokemonMart y se pueden personalizar con inventarios específicos, precios variables y monedas alternativas.

Función pbPokemonMart

La función principal para abrir una tienda es:

pbPokemonMart(stock)

Donde stock es un array con los identificadores internos de los objetos disponibles para comprar.

Ejemplo básico

# Tienda con objetos básicos
pbPokemonMart([
  :POKEBALL,
  :GREATBALL,
  :POTION,
  :SUPERPOTION,
  :ANTIDOTE,
  :PARALYZEHEAL,
  :AWAKENING,
  :REPEL
])

Los precios de cada objeto se toman automáticamente del PBS items.txt. No necesitas especificar precios manualmente a menos que quieras cambiarlos.

Configurar el Inventario de la Tienda

El inventario se define como un array de símbolos (IDs internos de objetos). Puedes crear tiendas especializadas:

Tienda de Poké Balls

pbPokemonMart([
  :POKEBALL,
  :GREATBALL,
  :ULTRABALL,
  :NETBALL,
  :DIVEBALL,
  :NESTBALL,
  :REPEATBALL,
  :TIMERBALL,
  :LUXURYBALL,
  :DUSKBALL,
  :QUICKBALL
])

Farmacia / Tienda de medicinas

pbPokemonMart([
  :POTION,
  :SUPERPOTION,
  :HYPERPOTION,
  :MAXPOTION,
  :FULLRESTORE,
  :REVIVE,
  :ANTIDOTE,
  :PARALYZEHEAL,
  :BURNHEAL,
  :ICEHEAL,
  :AWAKENING,
  :FULLHEAL
])

Tiendas con Precios Variables

Si quieres cambiar el precio de un objeto específico en una tienda, puedes usar un array de dos elementos [objeto, precio]:

# Tienda con precios personalizados
pbPokemonMart([
  [:POKEBALL, 100],      # Normalmente 200, aquí a mitad de precio
  [:GREATBALL, 300],     # Precio reducido
  [:POTION, 150],        # Precio especial
  :SUPERPOTION           # Precio normal del PBS
])

Modo Solo Compra y Solo Venta

Puedes configurar la tienda para que solo permita comprar o solo vender:

Solo comprar (sin opción de venta)

# El segundo parámetro es el mensaje de bienvenida
# El tercer parámetro controla si se puede vender (false = no)
pbPokemonMart(
  [:POKEBALL, :GREATBALL, :ULTRABALL],
  "¡Bienvenido a la tienda de Poké Balls!",
  false   # No permite vender objetos
)

Solo vender (sin inventario de compra)

# Pasar un array vacío como stock para solo vender
pbPokemonMart([], "Compro objetos a buen precio.")

Inventario Basado en Medallas

Puedes hacer que el inventario de la tienda cambie según las medallas que tenga el jugador:

# Inventario que crece con las medallas
stock = [:POKEBALL, :POTION, :ANTIDOTE]

if $player.badge_count >= 2
  stock += [:GREATBALL, :SUPERPOTION, :SUPERREPEL]
end

if $player.badge_count >= 4
  stock += [:ULTRABALL, :HYPERPOTION, :MAXREPEL]
end

if $player.badge_count >= 6
  stock += [:FULLRESTORE, :REVIVE, :MAXPOTION]
end

if $player.badge_count >= 8
  stock += [:MAXREVIVE, :FULLHEAL, :ULTRABALL]
end

pbPokemonMart(stock)

Este patrón es muy utilizado en los juegos oficiales, donde las tiendas de cada ciudad tienen más objetos a medida que progresas.

Tienda de Puntos de Batalla (BP Shop)

Para crear una tienda que use Puntos de Batalla (BP) en lugar de dinero, usa pbBattlePointShop:

# Tienda de BP
pbBattlePointShop([
  :POWERBRACER,
  :POWERBELT,
  :POWERLENS,
  :POWERBAND,
  :POWERANKLET,
  :POWERWEIGHT,
  :CHOICEBAND,
  :CHOICESPECS,
  :CHOICESCARF,
  :FOCUSSASH,
  :LIFEORB
])

Los precios en BP se definen en el PBS items.txt con el campo de precio alternativo, o se pueden especificar directamente.

Tiendas con Moneda Personalizada

Puedes crear tiendas que usen una moneda completamente personalizada usando variables del juego:

# Tienda con moneda personalizada (usando una variable como moneda)
# Variable 50 = "Monedas de Oro" del jugador

stock = [
  [:RARECANDY, 5],      # 5 Monedas de Oro
  [:PPUP, 3],            # 3 Monedas de Oro
  [:MASTERBALL, 50],     # 50 Monedas de Oro
]

pbMessage("¡Bienvenido a la Tienda de Monedas de Oro!")
pbMessage("Tienes #{$game_variables[50]} Monedas de Oro.")

opciones = []
stock.each { |item| opciones.push(GameData::Item.get(item[0]).name + " - #{item[1]} monedas") }
opciones.push("Salir")

loop do
  eleccion = pbMessage("¿Qué deseas comprar?", opciones, opciones.length)
  break if eleccion >= stock.length

  item_data = stock[eleccion]
  if $game_variables[50] >= item_data[1]
    $game_variables[50] -= item_data[1]
    pbReceiveItem(item_data[0])
    pbMessage("Ahora tienes #{$game_variables[50]} Monedas de Oro.")
  else
    pbMessage("No tienes suficientes Monedas de Oro.")
  end
end

Evento Completo del Vendedor

Un evento típico del vendedor de la Tienda Pokémon:

# Evento del vendedor
# Trigger: Action Button
# Graphic: NPC vendedor

pbMessage("¡Bienvenido a la Tienda Pokémon!")
pbMessage("¿En qué puedo ayudarte?")
pbPokemonMart([
  :POKEBALL,
  :GREATBALL,
  :POTION,
  :SUPERPOTION,
  :ANTIDOTE,
  :PARALYZEHEAL,
  :AWAKENING,
  :REPEL
])
pbMessage("¡Vuelve cuando quieras!")
Consejo: Puedes combinar la Tienda Pokémon con el Centro Pokémon en un mismo edificio (como en los juegos de Generación V en adelante). Simplemente coloca ambos eventos — la enfermera y el vendedor — en el mismo mapa.