Tiempo
Pokémon Essentials incluye un sistema completo de día y noche que afecta la apariencia visual del juego, los encuentros salvajes, los eventos y más. Por defecto, el sistema usa la hora real del ordenador del jugador.
Sistema de día y noche
El ciclo de día y noche aplica un tinte de color (overlay) sobre los mapas exteriores para simular diferentes momentos del día. Este efecto es automático en todos los mapas que no sean interiores o cuevas.
Los mapas interiores, cuevas y edificios no reciben el tinte de tiempo por defecto. Esto se controla con el tipo de mapa en los metadatos:
[010]
Name = Ciudad Celeste
MapType = Town # Mapas exteriores reciben tinte de tiempo
[011]
Name = Casa del Jugador
MapType = Indoor # Los interiores NO reciben tinte
Períodos del día
Essentials divide el día en varios períodos, cada uno con su propio tinte visual:
| Período | Horario | Tinte | Método de comprobación |
|---|---|---|---|
| Mañana | 05:00 - 09:59 | Anaranjado suave | pbIsMorning? |
| Día | 10:00 - 16:59 | Sin tinte (luminosidad plena) | pbIsDay? |
| Tarde | 17:00 - 19:59 | Naranja/rojizo | pbIsAfternoon? |
| Atardecer | 20:00 - 20:59 | Rojizo oscuro | pbIsEvening? |
| Noche | 21:00 - 04:59 | Azul oscuro | pbIsNight? |
Métodos útiles de tiempo
Essentials proporciona varios métodos para consultar y trabajar con el tiempo del juego:
Obtener la hora actual
# Obtener el objeto Time actual del juego
time = pbGetTimeNow
# Obtener la hora (0-23)
hora = time.hour
# Obtener los minutos
minutos = time.min
# Obtener el día de la semana (0=Domingo, 6=Sábado)
dia_semana = time.wday
# Obtener el mes (1-12)
mes = time.mon
Comprobar el período del día
# ¿Es de día? (incluye mañana, día y tarde)
if pbIsDay?
pbMessage("Es de día.")
end
# ¿Es de noche? (21:00 - 04:59)
if pbIsNight?
pbMessage("Es de noche.")
end
# ¿Es por la mañana? (05:00 - 09:59)
if pbIsMorning?
pbMessage("Es por la mañana.")
end
# ¿Es por la tarde? (17:00 - 19:59)
if pbIsAfternoon?
pbMessage("Es por la tarde.")
end
# ¿Es por la noche/atardecer? (20:00 - 20:59)
if pbIsEvening?
pbMessage("Está atardeciendo.")
end
Tintes del tiempo
Los tintes de color se aplican automáticamente a los mapas exteriores. Los colores y las transiciones se
definen en el script Game_Map y en las clases de tinte.
Personalizar los tintes
Los tintes de cada período se pueden modificar en el módulo Settings o en los scripts
relacionados. Cada tinte se define como un Tone con valores de rojo, verde, azul y gris:
# Formato: Tone.new(rojo, verde, azul, gris)
# Ejemplo de tinte nocturno
NIGHT_TONE = Tone.new(-70, -90, 15, 55)
# Ejemplo de tinte matutino
MORNING_TONE = Tone.new(-15, -30, -10, 20)
Los valores negativos oscurecen el color, los positivos lo intensifican. El cuarto valor (gris) controla la desaturación.
Desactivar el tinte en un mapa
# En los metadatos del mapa
[012]
Name = Casino
MapType = Indoor # No aplica tinte automáticamente
NoTimeTone = true # Fuerza que no se aplique tinte
Eventos basados en el tiempo
Puedes crear eventos que se comporten de forma diferente según la hora del día:
NPC que cambia de diálogo
# En un evento de NPC
if pbIsMorning?
pbMessage("¡Buenos días! El sol está saliendo.")
elsif pbIsDay?
pbMessage("¡Buenas tardes! ¡Qué buen día hace!")
elsif pbIsAfternoon?
pbMessage("Ya está cayendo la tarde...")
elsif pbIsEvening?
pbMessage("¡Qué bonito atardecer!")
else
pbMessage("Buenas noches. Deberías descansar.")
end
Encuentros diferentes según la hora
Los encuentros salvajes pueden variar según el período del día. En el archivo PBS encounters.txt:
[010] # Ruta 1
Land,21
RATTATA,3,5
PIDGEY,3,5
LandDay,21
SENTRET,3,5
PIDGEY,4,6
LandNight,21
HOOTHOOT,3,5
RATTATA,4,6
LandMorning,21
PIDGEY,3,5
LEDYBA,3,5
Los tipos de encuentro con sufijo temporal (LandDay, LandNight,
LandMorning) solo se activan en el período correspondiente.
Tiendas con stock variable
# Una tienda que vende objetos diferentes de noche
if pbIsNight?
pbPokemonMart([:DUSKBALL, :REPEL, :SUPERREPEL, :ESCAPEROPE])
else
pbPokemonMart([:POKEBALL, :GREATBALL, :POTION, :SUPERPOTION])
end
Configuración en Settings
El módulo Settings contiene varias constantes relacionadas con el tiempo:
# Si el juego usa tiempo real del ordenador
Settings::TIME_BASED_EVENTS = true
# Si se desactiva, no hay ciclo día/noche ni eventos temporales
# Establecer en false para juegos sin sistema de tiempo
Si TIME_BASED_EVENTS es false:
- No se aplican tintes de día/noche.
- Los métodos como
pbIsNight?siempre devuelvenfalse. - Los encuentros temporales no se activan.
- Las evoluciones por hora del día no funcionan.
Tiempo real vs. tiempo de juego
Por defecto, Essentials usa el tiempo real del ordenador del jugador. Esto significa que si son las 22:00 en el reloj del sistema, será de noche en el juego.
Ventajas del tiempo real
- Inmersión natural: el mundo del juego refleja el momento real del día.
- Sin necesidad de configuración adicional.
- Los eventos temporales funcionan automáticamente.
Usar un sistema de tiempo propio
Si prefieres que el tiempo del juego avance independientemente de la hora real, puedes modificar el método
pbGetTimeNow:
# Ejemplo: Tiempo de juego basado en pasos
# Cada 100 pasos = 1 hora de juego
def pbGetTimeNow
steps = $player.step_count
hours = (steps / 100) % 24
# Crear un objeto Time con la hora calculada
base = Time.local(2024, 1, 1, hours, 0, 0)
return base
end
Este enfoque requiere más trabajo pero permite un control total sobre el flujo del tiempo en el juego.
Evoluciones por tiempo
Algunos Pokémon evolucionan solo a ciertas horas del día. Esto se configura en el PBS pokemon.txt:
# Eevee evoluciona a Espeon de día y a Umbreon de noche
Evolutions = ESPEON,Happiness,Day,UMBREON,Happiness,Night
Las condiciones de tiempo para evolución son:
Day— Solo evoluciona de día (05:00 - 19:59)Night— Solo evoluciona de noche (20:00 - 04:59)Morning— Solo evoluciona por la mañana (05:00 - 09:59)Afternoon— Solo evoluciona por la tarde (17:00 - 19:59)Evening— Solo evoluciona al atardecer (20:00 - 20:59)