Movimientos en Campo
Los movimientos en campo (también llamados movimientos HM o movimientos de campo) son movimientos que los Pokémon pueden usar fuera del combate para interactuar con el mundo. Estos incluyen Corte, Surf, Fuerza, Vuelo, Flash, Cascada, Buceo, Golpe Roca, Treparocas, Remolino, Despejar y Cabezazo.
Lista de movimientos de campo
| Movimiento | Nombre interno | Efecto en campo |
|---|---|---|
| Corte (Cut) | CUT |
Corta árboles pequeños que bloquean el camino. |
| Surf | SURF |
Permite al jugador desplazarse por el agua. |
| Fuerza (Strength) | STRENGTH |
Permite empujar rocas con eventos de tipo boulder. |
| Vuelo (Fly) | FLY |
Abre el mapa regional para volar a ciudades visitadas. |
| Flash | FLASH |
Ilumina cuevas oscuras. |
| Cascada (Waterfall) | WATERFALL |
Permite subir cascadas de agua. |
| Buceo (Dive) | DIVE |
Permite sumergirse en aguas profundas y volver a la superficie. |
| Golpe Roca (Rock Smash) | ROCKSMASH |
Rompe rocas frágiles que bloquean el camino. Puede iniciar un combate salvaje. |
| Treparocas (Rock Climb) | ROCKCLIMB |
Permite escalar paredes rocosas marcadas. |
| Remolino (Whirlpool) | WHIRLPOOL |
Disipa remolinos de agua que bloquean el paso. |
| Despejar (Defog) | DEFOG |
Despeja la niebla en mapas con clima de niebla. |
| Cabezazo (Headbutt) | HEADBUTT |
Golpea árboles para encontrar Pokémon salvajes escondidos. |
Cómo funcionan los movimientos de campo
Los movimientos de campo se gestionan mediante el sistema de HiddenMoveHandlers. Este sistema define dos handlers principales para cada movimiento:
HiddenMoveHandlers::CanUseMove
Este handler comprueba si el movimiento puede usarse en la situación actual. Verifica condiciones como:
- ¿El jugador tiene la medalla requerida? (si las medallas están habilitadas)
- ¿El tile frente al jugador es del tipo correcto?
- ¿Se cumplen las condiciones del mapa?
HiddenMoveHandlers::CanUseMove.add(:CUT, proc { |move, pkmn, showmsg|
# Verificar si hay un árbol cortable en frente
facingEvent = $game_player.pbFacingEvent
if !facingEvent || facingEvent.name != "Tree"
pbMessage(_INTL("No se puede usar aquí.")) if showmsg
next false
end
next true
})
HiddenMoveHandlers::UseMove
Este handler ejecuta el efecto del movimiento cuando se usa con éxito:
HiddenMoveHandlers::UseMove.add(:CUT, proc { |move, pokemon|
# Mostrar animación del Pokémon usando Corte
pbHiddenMoveAnimation(pokemon)
# Eliminar el árbol
facingEvent = $game_player.pbFacingEvent
if facingEvent
pbSmashEvent(facingEvent)
pbMessage(_INTL("¡{1} usó Corte!", pokemon.name))
end
next true
})
Configurar mapas para movimientos de campo
Para que los movimientos de campo funcionen correctamente, necesitas configurar los mapas con los elementos adecuados:
Terrain Tags (Etiquetas de terreno)
Los terrain tags son valores asignados a los tiles del mapa que determinan cómo interactúan con los movimientos de campo:
| Terrain Tag | Uso |
|---|---|
Water |
Tiles de agua donde se puede usar Surf. |
Waterfall |
Tiles de cascada donde se puede usar Cascada. |
WaterfallCrest |
El tile superior de una cascada. |
DeepWater |
Agua profunda donde se puede usar Buceo. |
Whirlpool |
Remolinos de agua que se despejan con Remolino. |
RockClimb |
Paredes escalables con Treparocas. |
RockClimbCrest |
El tile superior de una pared de treparocas. |
Eventos del mapa
Algunos movimientos de campo interactúan con eventos del mapa en lugar de terrain tags:
- Corte: Necesita un evento con el nombre
"Tree"(o configurado como árbol cortable). - Golpe Roca: Necesita un evento con el nombre
"Rock"(o configurado como roca rompible). - Fuerza: Necesita un evento configurado como boulder (roca empujable) usando el sistema de eventos de RPG Maker.
- Cabezazo: Necesita un evento con el nombre
"HeadbuttTree"configurado sobre un tile de árbol.
Ejemplo: Configurar un árbol cortable
- En RPG Maker, crea un nuevo evento en el mapa.
- Ponle el nombre
Tree. - Asigna el gráfico del árbol cortable.
- Configura la prioridad como "Mismo nivel que el héroe".
- El trigger debe ser "Acción del jugador" o "Contacto del jugador".
- El sistema de Essentials se encargará del resto.
Ejemplo: Configurar Surf
- En el editor de tilesets, asigna el terrain tag
Watera los tiles de agua. - Asegúrate de que los tiles de agua estén configurados como intransitables para el jugador a pie.
- El handler de Surf detectará automáticamente los tiles de agua y permitirá al jugador navegar.
Crear un movimiento de campo personalizado
Puedes añadir tus propios movimientos de campo registrando handlers de CanUseMove y
UseMove:
# Handler para comprobar si se puede usar
HiddenMoveHandlers::CanUseMove.add(:SWEETSCENT, proc { |move, pkmn, showmsg|
# Solo funciona en hierba alta o cuevas con encuentros
if !$PokemonEncounters.pbEncounterPossibleHere?
pbMessage(_INTL("No parece haber Pokémon salvajes aquí.")) if showmsg
next false
end
next true
})
# Handler para ejecutar el efecto
HiddenMoveHandlers::UseMove.add(:SWEETSCENT, proc { |move, pokemon|
pbHiddenMoveAnimation(pokemon)
pbMessage(_INTL("¡{1} usó Dulce Aroma!", pokemon.name))
# Iniciar un encuentro salvaje
$PokemonEncounters.pbGenerateEncounter
next true
})
La Base de Sky: Uso de HMs sin medallas
La Base de Sky incluye una opción para permitir el uso de movimientos HM sin necesidad de tener la medalla correspondiente. Esta característica facilita el desarrollo y permite diseños de juego más flexibles.
Configuración
En el archivo de configuración del proyecto, puedes activar o desactivar el requisito de medallas para los HMs:
# En la configuración de La Base de Sky
# Si es true, los HMs se pueden usar sin medalla
POKEMON_HM_SIN_MEDALLA = true
Cuando esta opción está activada:
- El jugador puede usar cualquier movimiento de campo sin necesidad de haber derrotado al líder de gimnasio correspondiente.
- Solo se necesita que un Pokémon del equipo conozca el movimiento.
- Esto es útil para fangames que no usan el sistema de medallas tradicional o que quieren un flujo de juego más libre.
Resumen de archivos relevantes
| Archivo/Sección | Contenido |
|---|---|
Field_HiddenMoves |
Handlers principales de CanUseMove y UseMove para cada HM. |
Field_Surf |
Lógica específica de Surf (montar, desmontar, movimiento en agua). |
Field_Fly |
Lógica de Vuelo y selección de destino en el mapa regional. |
Field_DiveSurf |
Lógica de Buceo (sumergirse y emerger). |
Game_MapMetadata |
Metadatos del mapa que pueden afectar a los movimientos de campo (cueva oscura, etc.). |