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
- El jugador camina sobre un tile que tiene datos de encuentro.
- Cada paso, el sistema lanza un dado contra la tasa de encuentro.
- Si el lanzamiento tiene exito, se selecciona un monstruo de la tabla de encuentros del tile basandose en probabilidad ponderada.
- Se crea un objeto
BattleParameterscon la especie, nivel y forma del monstruo seleccionado. - El
BattleLauncherhace 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:
| Campo | Descripcion |
|---|---|
| Monster | Referencia al ScriptableObject MonsterEntry |
| Min Level | Nivel minimo que puede tener el monstruo salvaje |
| Max Level | Nivel maximo que puede tener el monstruo salvaje |
| Probability | Peso 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:
| Monstruo | Peso | Probabilidad real |
|---|---|---|
| Leafpup | 40 | 40/100 = 40% |
| Windling | 30 | 30/100 = 30% |
| Silkworm | 20 | 20/100 = 20% |
| Sparkbit | 10 | 10/100 = 10% |
Tipos de encuentro
MCE soporta diferentes metodos de encuentro mediante el enum EncounterType:
| Tipo | Disparador | Descripcion |
|---|---|---|
| Walking | Caminar por hierba alta o cuevas | Encuentros estandar del mundo |
| Surfing | Surfear sobre tiles de agua | Encuentros en superficie de agua |
| Fishing | Usar la cana de pescar en agua | Encuentros basados en cana (Old Rod, Good Rod, Super Rod) |
| RockSmash | Usar Rock Smash en una roca rompible | Encuentros basados en rocas |
| Headbutt | Usar Headbutt en un arbol | Encuentros 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
- En su escena, cree un GameObject vacio en la jerarquia del mapa.
- Anade el componente
EncounterTile. - Asigne un
WildEncountersSetal campo Encounters. - 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:
| Periodo | Horas |
|---|---|
| Manana | 06:00 - 11:59 |
| Dia | 12:00 - 17:59 |
| Tarde | 18:00 - 20:59 |
| Noche | 21: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:
- Cree un
WildEncountersSetcon entradasEncounterType.Fishing. - Asignelo a la configuracion de encuentros del area de agua.
- 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:
- Use un evento de CommandGraph en lugar de encuentros aleatorios.
- El evento verifica una variable del juego (por ejemplo,
LegendaryDefeated) antes de activarse. - Despues de la batalla, establezca la variable para prevenir re-encuentros.
- 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:
| Objeto | Efecto | Duracion |
|---|---|---|
| Repel | Previene encuentros con monstruos debajo del nivel del lider del jugador | 100 pasos |
| Super Repel | Mismo efecto, mayor duracion | 200 pasos |
| Max Repel | Mismo efecto, duracion maxima | 250 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
- 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.
- Escale los niveles con la progresion. La Ruta 1 deberia tener monstruos de nivel 2-5, no de nivel 50.
- Varie las tablas de encuentro entre mapas. Cada ruta deberia sentirse distinta.
- Incluya encuentros raros. Una entrada de encuentro del 5% por tabla da a los jugadores algo que buscar.
- Pruebe los encuentros por hora del dia. Los jugadores no deberian sentirse penalizados por jugar a una hora especifica.
- Coloque repelentes temprano. Los jugadores aprecian tener control de encuentros antes de la mitad del juego.