Sistema de encuentros salvajes
El sistema de encuentros determina cuándo y qué monstruos salvajes aparecen mientras el jugador explora el mundo. MCE soporta varios tipos de encuentro, tablas ponderadas, rangos de nivel, encuentros según la hora del día y el clima, y repelentes.

Los tiles sobre los que está el jugador son todo el disparador. Un EncounterTile marca el tile y su
tipo, un WildEncountersSet indica qué vive allí y con qué niveles, el SceneInfo del mapa une
ambos, y cada paso sobre un tile de encuentro se evalúa contra una probabilidad.
Cómo funcionan los encuentros
- El jugador termina un paso sobre un tile que lleva un
EncounterTile(o, en una escena de dungeon, sobre cualquier tile). - El paso se evalúa contra la probabilidad de encuentro del
EncounterTypede ese tile. - Si la tirada tiene éxito, el
SceneInfodel mapa proporciona elWildEncountersSetde ese tipo. Se construye su lista de encuentros posibles para el momento del día y el clima actuales, y se elige una entrada según su peso. - Se saca un nivel entre el
MinLevely elMaxLevelde la entrada. - Un repelente o el líder del equipo todavía pueden cancelar el encuentro (abajo).
- Se crea un objeto
BattleParameterscon la especie, el nivel y la forma del monstruo seleccionado, y elBattleLauncherhace la transición a la escena de batalla.
Tipos de encuentro
El enum EncounterType nombra los tipos de encuentro:
| Tipo | Uso típico |
|---|---|
Grass | Hierba alta |
Water, Surfing | Tiles de agua; surfear sobre ellos |
Cave | Suelos de cueva. Una escena marcada como dungeon (IsDungeon en su SceneInfo) usa Cave en cada tile, sin necesidad de tiles pintados |
FishingOldRod, FishingGoodRod, FishingSuperRod | Pescar con cada caña |
Diving | Bajo el agua |
RockSmash, HeadButt | Romper una roca; golpear un árbol |
BugContest | El concurso de captura de bichos |
Other | Cualquier cosa que defina tu juego |
Configurar zonas de encuentro
Paso 1: Tiles de encuentro
Un tile de encuentro es un tile cuyo prefab tiene el componente EncounterTile. El componente tiene un ajuste, Encounter Type. Crea el tuyo creando un prefab con el componente, eligiendo el tipo y usando el prefab como GameObject de un asset de tile; luego pinta ese tile en la capa del tilemap donde deben aparecer los monstruos. El motor incluye algunos ya hechos, como Assets/OpenMon/Game/Prefabs/World/Water/Water/WaterEncounterTile.prefab.
Paso 2: Un WildEncountersSet
Crea uno en Assets > Create > MCE > Battle > Encounters > WildEncountersSet (o New Wild Encounter Set en la pestaña Database del Hub). Un conjunto tiene tres listas:
| Lista | Significado |
|---|---|
| Base Encounters | Monstruos que siempre aparecen |
| Encounters Per Moment | Monstruos extra para Night, Dawn, Day o Dusk |
| Encounters Per Weather | Monstruos extra bajo un clima determinado fuera de batalla (Sunny, Rain, Fog, Sandstorm, Snowstorm) |
Los encuentros posibles en un momento dado son la lista base más las entradas del momento actual más las entradas del clima actual.
Cada entrada es un WildEncounter:
| Campo | Descripción |
|---|---|
| Monster | Referencia al MonsterEntry |
| Form Calculator | Asset que decide qué forma aparece (ver abajo) |
| Min Level / Max Level | Rango de nivel, de 1 a 100 (el máximo nunca es menor que el mínimo) |
| Weight | Peso relativo de esta entrada (más alto = más común) |
Paso 3: El SceneInfo del mapa
El asset SceneInfo del mapa vincula los tipos de encuentro con los conjuntos. En su grupo Encounters, agrega una entrada por tipo: Grass → tu conjunto de hierba, Surfing → tu conjunto de agua, y así sucesivamente. Un tipo sin entrada no tiene monstruos salvajes. El mismo asset puede contener, por tipo:
- un escenario de batalla (el fondo/terreno de batalla para ese tipo de encuentro; si no está establecido se usan los datos propios del tile),
- la probabilidad de encuentro propia del mapa (abajo),
- si se puede pescar aquí y si la escena es un dungeon.
Cálculo de probabilidad
Los pesos son relativos, no porcentajes. El sistema suma todos los pesos y la probabilidad de cada entrada es su peso dividido por el total:
Chance = Entry Weight / Sum of All Weights
| Monstruo | Peso | Probabilidad real |
|---|---|---|
| Leafpup | 40 | 40/100 = 40% |
| Windling | 30 | 30/100 = 30% |
| Silkworm | 20 | 20/100 = 20% |
| Sparkbit | 10 | 10/100 = 10% |
Probabilidad de encuentro por paso
Que un paso dispare o no un encuentro es una segunda tirada, independiente:
- La probabilidad global es la tabla
TileEncounterChancedel assetMCESettings: un valor (de 0 a 1) para cada tipo de encuentro. Un tipo ausente de la tabla cuenta como 0 y registra una advertencia una vez. - Un mapa puede sobrescribirla para un tipo con su propia probabilidad en su
SceneInfo(OwnEncounterChances). Ese tipo también usa los multiplicadores del mapa para correr (por defecto 1) y para ir en bici (por defecto 0,8). Sin probabilidad propia, la regla global reduce la tirada en bici en ese mismo 0,8. - Para los tipos listados en
EncountersWithModifiableChances(MCESettings), la habilidad y el objeto equipado del líder del equipo multiplican la probabilidad (por ejemplo, un objeto que reduce los encuentros salvajes). - Un objeto de flauta de encuentros cambia la probabilidad hasta el siguiente cambio de mapa.
- Pescar usa la probabilidad propia del mapa para la caña usada; sin ella, un pez siempre pica.
La probabilidad de que un salvaje sea shiny es WildShinyChance en MCESettings (1/512 por defecto).
Encuentros según la hora del día y el clima
El momento del día sigue a TimeManager.DayProgress (de 0 a 1 a lo largo de un día de juego, cuya duración es DayLengthInSeconds en MCESettings):
| Momento | Horas |
|---|---|
Dawn | 05:00 - 06:59 |
Day | 07:00 - 16:59 |
Dusk | 17:00 - 18:59 |
Night | 19:00 - 04:59 |
Pon los monstruos que solo aparecen en un momento dado (o con cierto clima) en la lista Encounters Per Moment (o Per Weather) del mismo conjunto; no hacen falta assets separados.
Encuentros con formas
Un WildEncounter elige su forma mediante su Form Calculator, un asset EncounterFormCalculator con dos métodos: GetEncounterForm(sceneInfo, encounterType) devuelve la forma que debe aparecer, y GetAllPossibleForms() lista todas las formas que puede producir (la dex lo usa).
MCE incluye SingleFormEncounter (Create > MCE > Battle > Encounters > Calculators > SingleFormEncounter), que siempre devuelve una forma fija. Para formas que dependen de la región o del calendario, crea una subclase de EncounterFormCalculator:
[CreateAssetMenu(menuName = "MyGame/Encounters/Form By Region")]
public class FormByRegion : EncounterFormCalculator
{
[SerializeField] private Region NorthRegion;
[SerializeField] private Form NorthForm;
[SerializeField] private Form SouthForm;
public override Form GetEncounterForm(SceneInfo sceneInfo, EncounterType encounterType) =>
sceneInfo.Asset.Region == NorthRegion ? NorthForm : SouthForm;
public override List<Form> GetAllPossibleForms() => new() { NorthForm, SouthForm };
}
Patrones especiales de encuentro
Pesca
Los encuentros de pesca necesitan CanFishHere en el SceneInfo del mapa y un WildEncountersSet para cada tipo de caña (FishingOldRod, FishingGoodRod, FishingSuperRod) en su grupo Encounters. La caña que usa el jugador decide qué conjunto responde.
Encuentros legendarios / de una sola vez
Para encuentros especiales que solo deben ocurrir una vez:
- Usa un evento de CommandGraph con un nodo SingleWildFight en lugar de encuentros aleatorios.
- Protégelo con un nodo IfBool sobre una variable de juego (por ejemplo
LegendaryDefeated). - Tras la batalla, establece la variable con SetBoolVariable para evitar nuevos encuentros.
- Este enfoque te da control total sobre el contexto del encuentro (escenas, diálogos, terreno).
Batallas salvajes dobles
El nodo DoubleWildFight inicia una batalla doble contra dos monstruos salvajes desde un CommandGraph.
Repelentes y prevención de encuentros
Los jugadores pueden usar objetos para evitar encuentros. Un repelente es un objeto Repel con un RepelAmount de pasos, usado mediante el efecto UseRepel:
| Objeto | Efecto |
|---|---|
Repelente (cualquier objeto Repel) | Durante RepelAmount pasos, cancela los encuentros cuyo nivel sea inferior al del líder del equipo |
Los repelentes se implementan como un contador de pasos en el jugador (repelCounter, que avanza en cada paso). La comprobación ocurre después de elegir el encuentro y sacar su nivel: con el contador por encima de cero y un nivel menor que el del líder, el encuentro se cancela. La habilidad del líder del equipo también puede cancelar un encuentro (ShouldPreventEncounter). Tú decides la cantidad de pasos de cada objeto repelente en su asset.
Juego en línea
En la capa MMORPG el encuentro lo decide el servidor: el cliente pregunta (StartWildEncounter) con el nombre de la escena y el tipo de encuentro, y el servidor responde con la especie y el nivel. Si el servidor lo rechaza, el encuentro se cancela; nunca se resuelve localmente. Consulta Autoridad de batalla.
Buenas prácticas
- Equilibra las probabilidades de encuentro. Demasiado alta (>25 %) resulta molesta. Demasiado baja (<5 %) hace que el mundo se sienta vacío. Lo típico es un 8-15 %.
- Escala los niveles con la progresión. La Ruta 1 debería tener monstruos de nivel 2-5, no de nivel 50.
- Varía las tablas de encuentro entre mapas. Cada ruta debe sentirse distinta.
- Incluye encuentros raros. Una entrada de bajo peso por tabla da a los jugadores algo que buscar.
- Prueba los encuentros según la hora del día. Los jugadores no deberían sentirse castigados por jugar a una hora concreta.
- Coloca los repelentes pronto. Los jugadores agradecen tener control sobre los encuentros antes de la mitad del juego.