Control de Eventos por Scripts
Los eventos de RPG Maker XP pueden ser controlados y manipulados mediante scripts de Ruby. Essentials proporciona varias funciones para obtener referencias a eventos, moverlos, cambiar sus gráficos, y controlar su comportamiento usando switches y self switches.
Obtener Referencia a un Evento
Para manipular un evento por script, primero necesitas obtener una referencia al mismo.
get_self — El evento actual
# Dentro de un Script del propio evento:
evento = get_self
Devuelve el objeto Game_Event del evento que está ejecutando el script.
get_character — Cualquier evento por ID
# Obtener un evento por su ID en el mapa actual
evento = get_character(5) # Evento con ID 5
# Obtener al jugador
jugador = get_character(0) # 0 = jugador
# o también:
jugador = $game_player
# Obtener el propio evento
yo = get_character(-1) # -1 = este evento
Acceder a eventos por ID directamente
# Acceder a un evento del mapa actual por su ID
evento = $game_map.events[ID_DEL_EVENTO]
# Ejemplo: obtener el evento con ID 3
evento3 = $game_map.events[3]
Mover Eventos con pbMoveRoute
La función pbMoveRoute permite definir una secuencia de movimientos para un evento:
# Mover un evento siguiendo una ruta
pbMoveRoute(evento, [
PBMoveRoute::Down, # Mover abajo
PBMoveRoute::Down, # Mover abajo de nuevo
PBMoveRoute::Right, # Mover a la derecha
PBMoveRoute::Right, # Mover a la derecha de nuevo
PBMoveRoute::TurnUp # Girar hacia arriba
])
Constantes de movimiento disponibles
| Constante | Acción |
|---|---|
PBMoveRoute::Down |
Mover abajo |
PBMoveRoute::Left |
Mover a la izquierda |
PBMoveRoute::Right |
Mover a la derecha |
PBMoveRoute::Up |
Mover arriba |
PBMoveRoute::TurnDown |
Girar hacia abajo |
PBMoveRoute::TurnLeft |
Girar a la izquierda |
PBMoveRoute::TurnRight |
Girar a la derecha |
PBMoveRoute::TurnUp |
Girar hacia arriba |
PBMoveRoute::Wait |
Esperar un frame |
PBMoveRoute::TurnTowardPlayer |
Girar hacia el jugador |
PBMoveRoute::TurnAwayFromPlayer |
Girar en sentido opuesto al jugador |
PBMoveRoute::StepAnime |
Activar animación de paso |
Mover al jugador
# Mover al jugador con pbMoveRoute
pbMoveRoute($game_player, [
PBMoveRoute::Up,
PBMoveRoute::Up,
PBMoveRoute::Right
])
Cambiar Gráficos de Eventos
Puedes cambiar el sprite de un evento por script:
# Cambiar el gráfico del evento actual
evento = get_self
evento.character_name = "NPC 01" # Nombre del archivo de charset
evento.character_hue = 0 # Tono de color (0 = normal)
# Hacer invisible un evento (quitar su gráfico)
evento.character_name = ""
# Cambiar la dirección del sprite
evento.direction = 2 # 2=abajo, 4=izq, 6=der, 8=arriba
Switches Globales
Los switches globales son interruptores booleanos (ON/OFF) que afectan a todo el juego. Son compartidos entre todos los mapas:
# Activar un switch global
$game_switches[10] = true
# Desactivar un switch global
$game_switches[10] = false
# Comprobar un switch global
if $game_switches[10]
pbMessage("El switch 10 está activado.")
end
Los switches globales se definen en RPG Maker XP (Database > System). Se usan comúnmente para:
- Controlar el progreso de la historia (ej: "Ya derrotó al primer líder").
- Desbloquear áreas del mapa.
- Activar o desactivar NPCs y eventos.
- Controlar eventos condicionales (como cortes de ruta).
Self Switches (A, B, C, D)
Los Self Switches son interruptores locales de cada evento. Cada evento tiene 4 self switches: A, B, C y D. Son independientes para cada evento en cada mapa.
# Activar Self Switch "A" del evento actual (dentro del evento)
# Normalmente se hace con el comando de evento "Control Self Switch"
# Por script, dentro del propio evento:
key = [$game_map.map_id, @event_id, "A"]
$game_self_switches[key] = true
$game_map.need_refresh = true
Usos comunes de Self Switches
- Self Switch A: Marcar que el evento ya fue interactuado (ej: objeto recogido, NPC ya habló).
- Self Switch B: Segunda fase del evento (ej: misión en progreso).
- Self Switch C: Tercera fase (ej: misión completada).
- Self Switch D: Cuarta fase o estado especial.
Ejemplo: Objeto recogible con Self Switch
# Página 1: Self Switch A está OFF
# Gráfico: Poké Ball en el suelo
# Trigger: Action Button
pbMessage("¡Has encontrado una Poción!")
pbReceiveItem(:POTION)
# Activar Self Switch A → cambia a Página 2
# Página 2: Self Switch A está ON
# Gráfico: vacío (sin sprite)
# Sin contenido → el objeto ya fue recogido
pbSetSelfSwitch y pbGetSelfSwitch
Essentials proporciona funciones específicas para manipular Self Switches de otros eventos sin tener que construir la clave manualmente:
pbSetSelfSwitch
# Cambiar el Self Switch de un evento específico
# pbSetSelfSwitch(event_id, switch_name, value, map_id = 0)
# Activar Self Switch "A" del evento 5 en el mapa actual
pbSetSelfSwitch(5, "A", true)
# Desactivar Self Switch "B" del evento 12 en el mapa 25
pbSetSelfSwitch(12, "B", false, 25)
# Activar Self Switch "C" de todos los eventos de este mapa
# (útil para limpiar todos los objetos recogibles, por ejemplo)
for id in $game_map.events.keys
pbSetSelfSwitch(id, "C", true)
end
pbGetSelfSwitch
# Consultar el estado de un Self Switch
# pbGetSelfSwitch(event_id, switch_name, map_id = 0)
# ¿El evento 5 tiene el Self Switch "A" activado?
if pbGetSelfSwitch(5, "A")
pbMessage("El evento 5 ya fue activado.")
end
# Comprobar un Self Switch de otro mapa
if pbGetSelfSwitch(3, "B", 25)
pbMessage("El evento 3 del mapa 25 tiene B activado.")
end
Switches Globales vs Self Switches
| Característica | Switches Globales | Self Switches |
|---|---|---|
| Alcance | Todo el juego | Un evento específico en un mapa |
| Cantidad | Ilimitados (definidos en Database) | 4 por evento (A, B, C, D) |
| Acceso | $game_switches[N] |
pbGetSelfSwitch(id, letra) |
| Uso ideal | Progreso de historia, desbloqueos | Estado individual de un evento |
Activar/Desactivar Eventos con Switches
La forma más común de controlar la visibilidad de un evento es usar condiciones de página:
# En el editor de eventos de RPG Maker XP:
# Página 1 — Condición: Switch 15 = OFF
# → El evento está visible y activo
# Página 2 — Condición: Switch 15 = ON
# → Página vacía (el evento desaparece)
# Para desactivar el evento desde otro script:
$game_switches[15] = true
$game_map.need_refresh = true # Refrescar el mapa
Patrones Comunes de Scripting de Eventos
NPC guardián (bloquea el paso hasta cierta condición)
# Página 1: Switch "TieneObjeto" está OFF
# Trigger: Player Touch o Event Touch
pbMessage("¡No puedes pasar! Necesitas el Pase VIP.")
# Página 2: Switch "TieneObjeto" está ON
# Sin contenido o movimiento lateral
# → El NPC se aparta y el jugador puede pasar
Evento de batalla con entrenador
# Página 1: Self Switch A = OFF
# Trigger: Event Touch o Player Touch
if TrainerBattle.start(:YOUNGSTER, "Pepe")
# El jugador ganó
pbMessage("¡Bien jugado!")
end
# → Activar Self Switch A
# Página 2: Self Switch A = ON
# Trigger: Action Button
pbMessage("¡Me ganaste limpiamente!")
Teletransportar al jugador
# Teletransportar al jugador a otro mapa
pbSEPlay("Door exit")
pbFadeOutIn {
$game_temp.player_transferring = true
$game_temp.player_new_map_id = 25 # ID del mapa destino
$game_temp.player_new_x = 10 # Coordenada X
$game_temp.player_new_y = 8 # Coordenada Y
$game_temp.player_new_direction = 2 # Dirección (2=abajo)
}
$game_map.need_refresh = true para que los cambios se reflejen inmediatamente en el mapa. Sin esto, los eventos podrían no actualizar sus páginas hasta que el jugador cambie de mapa.