Saltar al contenido principal

Sistema de encuentros salvajes

El sistema de encuentros determina cuando y que monstruos salvajes aparecen mientras el jugador explora el mundo. MCE soporta multiples metodos de encuentro, tablas de probabilidad configurables, rangos de nivel y encuentros por hora del dia.

Como funcionan los encuentros

  1. El jugador camina sobre un tile que tiene datos de encuentro.
  2. Cada paso, el sistema lanza un dado contra la tasa de encuentro.
  3. Si el lanzamiento tiene exito, se selecciona un monstruo de la tabla de encuentros del tile basandose en probabilidad ponderada.
  4. Se crea un objeto BattleParameters con la especie, nivel y forma del monstruo seleccionado.
  5. El BattleLauncher hace la transicion a la escena de batalla.

WildEncountersSet

El ScriptableObject WildEncountersSet define la tabla de encuentros para un area determinada:

Cree uno en: Assets > Create > OpenMon > Wild Encounters Set

Cada entrada del conjunto contiene:

CampoDescripcion
MonsterReferencia al ScriptableObject MonsterEntry
Min LevelNivel minimo que puede tener el monstruo salvaje
Max LevelNivel maximo que puede tener el monstruo salvaje
ProbabilityPeso relativo para esta entrada (mayor = mas comun)

El nivel real se elige aleatoriamente entre Min y Max cada vez que se activa el encuentro.

Calculo de probabilidad

Las probabilidades son pesos relativos, no porcentajes. El sistema suma todos los pesos y calcula la probabilidad de cada entrada:

Probabilidad = Peso de la entrada / Suma de todos los pesos

Tabla de ejemplo:

MonstruoPesoProbabilidad real
Leafpup4040/100 = 40%
Windling3030/100 = 30%
Silkworm2020/100 = 20%
Sparkbit1010/100 = 10%

Tipos de encuentro

MCE soporta diferentes metodos de encuentro mediante el enum EncounterType:

TipoDisparadorDescripcion
WalkingCaminar por hierba alta o cuevasEncuentros estandar del mundo
SurfingSurfear sobre tiles de aguaEncuentros en superficie de agua
FishingUsar la cana de pescar en aguaEncuentros basados en cana (Old Rod, Good Rod, Super Rod)
RockSmashUsar Rock Smash en una roca rompibleEncuentros basados en rocas
HeadbuttUsar Headbutt en un arbolEncuentros basados en arboles

Cada WildEncountersSet puede tener encuentros separados por tipo. Solo los encuentros que coincidan con la accion actual (caminar, surfear, pescar) se consideran.

Configurar zonas de encuentro

Metodo 1: Componente EncounterTile

  1. En su escena, cree un GameObject vacio en la jerarquia del mapa.
  2. Anade el componente EncounterTile.
  3. Asigne un WildEncountersSet al campo Encounters.
  4. Posicione y dimensione la zona de encuentro para cubrir los tiles deseados.

Metodo 2: Encuentros predeterminados de SceneInfo

El SceneInfo de cada escena puede tener un WildEncountersSet predeterminado. Cualquier tile de hierba transitable en la escena usara esta tabla de encuentros a menos que sea sobreescrita por un EncounterTile especifico.

Metodo 3: Encuentros por tile

Para control detallado, puede asignar diferentes conjuntos de encuentros a diferentes areas del mismo mapa. Coloque multiples componentes EncounterTile cubriendo diferentes regiones.

Tasa de encuentro

La tasa de encuentro controla con que frecuencia se activan los encuentros por paso:

  • Tasa base: Configurada por zona de encuentro (rango tipico: 5-25%).
  • Modificadores: Objetos (por ejemplo, Repel reduce a 0%), habilidades (por ejemplo, Stench reduce la tasa) y objetos (por ejemplo, Cleanse Tag).
  • Contador de pasos: El sistema rastrea los pasos desde el ultimo encuentro. Despues de muchos pasos sin encuentro, la tasa aumenta ligeramente para prevenir sequias prolongadas.

Encuentros por hora del dia

Diferentes monstruos pueden aparecer a diferentes horas del dia:

PeriodoHoras
Manana06:00 - 11:59
Dia12:00 - 17:59
Tarde18:00 - 20:59
Noche21:00 - 05:59

Configure encuentros basados en hora creando assets WildEncountersSet separados para cada periodo de tiempo y asignandolos a traves de la configuracion de hora del dia de la zona de encuentro.

Encuentros de formas

Algunas especies tienen formas que aparecen de manera diferente segun las condiciones. El EncounterFormCalculator determina en que forma aparece un monstruo salvaje:

  • Formas regionales: Basadas en la etiqueta de region del mapa.
  • Formas estacionales: Basadas en el calendario del juego.
  • Formas aleatorias: Seleccionadas aleatoriamente entre las formas disponibles.

Use el componente SingleFormEncounter para forzar una forma especifica en una entrada de encuentro.

Patrones de encuentro especiales

Pesca

Los encuentros de pesca requieren que el jugador use un objeto de cana de pescar mientras esta frente a un tile de agua:

  1. Cree un WildEncountersSet con entradas EncounterType.Fishing.
  2. Asignelo a la configuracion de encuentros del area de agua.
  3. Diferentes niveles de cana (Old Rod, Good Rod, Super Rod) filtran que entradas estan disponibles.

Encuentros legendarios / unicos

Para encuentros especiales que solo deben ocurrir una vez:

  1. Use un evento de CommandGraph en lugar de encuentros aleatorios.
  2. El evento verifica una variable del juego (por ejemplo, LegendaryDefeated) antes de activarse.
  3. Despues de la batalla, establezca la variable para prevenir re-encuentros.
  4. Este enfoque le da control total sobre el contexto del encuentro (cinematicas, dialogo, terreno).

Encuentros de horda

Multiples monstruos salvajes a la vez:

  • Configure la entrada de encuentro con una bandera de horda.
  • La batalla genera 3-5 monstruos de la especie especificada.
  • El jugador los enfrenta uno a la vez o puede apuntar al grupo (con movimientos AOE, si estan soportados).

Repelentes y prevencion de encuentros

Los jugadores pueden usar objetos para prevenir encuentros:

ObjetoEfectoDuracion
RepelPreviene encuentros con monstruos debajo del nivel del lider del jugador100 pasos
Super RepelMismo efecto, mayor duracion200 pasos
Max RepelMismo efecto, duracion maxima250 pasos

Los repelentes se implementan como un contador de pasos. El sistema de encuentros verifica el contador de repelente antes de lanzar el dado para encuentros.

Utilidades de encuentro

La clase EncounterUtils proporciona metodos auxiliares:

// Check if encounters are possible at the current tile
bool canEncounter = EncounterUtils.CanEncounterAt(position, encounterType);

// Get the encounter set for a position
WildEncountersSet set = EncounterUtils.GetEncounterSet(position, encounterType);

// Roll for an encounter (returns null if no encounter triggers)
WildEncounter encounter = EncounterUtils.RollEncounter(set);

Mejores practicas

  1. Equilibre las tasas de encuentro. Demasiado alta (>25%) se siente molesta. Demasiado baja (<5%) hace que el mundo se sienta vacio. 8-15% es tipico.
  2. Escale los niveles con la progresion. La Ruta 1 deberia tener monstruos de nivel 2-5, no de nivel 50.
  3. Varie las tablas de encuentro entre mapas. Cada ruta deberia sentirse distinta.
  4. Incluya encuentros raros. Una entrada de encuentro del 5% por tabla da a los jugadores algo que buscar.
  5. Pruebe los encuentros por hora del dia. Los jugadores no deberian sentirse penalizados por jugar a una hora especifica.
  6. Coloque repelentes temprano. Los jugadores aprecian tener control de encuentros antes de la mitad del juego.