Saltar al contenido principal

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.

Hierba alta en la Ruta 1

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​

  1. El jugador termina un paso sobre un tile que lleva un EncounterTile (o, en una escena de dungeon, sobre cualquier tile).
  2. El paso se evalúa contra la probabilidad de encuentro del EncounterType de ese tile.
  3. Si la tirada tiene éxito, el SceneInfo del mapa proporciona el WildEncountersSet de 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.
  4. Se saca un nivel entre el MinLevel y el MaxLevel de la entrada.
  5. Un repelente o el líder del equipo todavía pueden cancelar el encuentro (abajo).
  6. Se crea un objeto BattleParameters con la especie, el nivel y la forma del monstruo seleccionado, y el BattleLauncher hace la transición a la escena de batalla.

Tipos de encuentro​

El enum EncounterType nombra los tipos de encuentro:

TipoUso típico
GrassHierba alta
Water, SurfingTiles de agua; surfear sobre ellos
CaveSuelos de cueva. Una escena marcada como dungeon (IsDungeon en su SceneInfo) usa Cave en cada tile, sin necesidad de tiles pintados
FishingOldRod, FishingGoodRod, FishingSuperRodPescar con cada caña
DivingBajo el agua
RockSmash, HeadButtRomper una roca; golpear un árbol
BugContestEl concurso de captura de bichos
OtherCualquier 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:

ListaSignificado
Base EncountersMonstruos que siempre aparecen
Encounters Per MomentMonstruos extra para Night, Dawn, Day o Dusk
Encounters Per WeatherMonstruos 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:

CampoDescripción
MonsterReferencia al MonsterEntry
Form CalculatorAsset que decide qué forma aparece (ver abajo)
Min Level / Max LevelRango de nivel, de 1 a 100 (el máximo nunca es menor que el mínimo)
WeightPeso 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
MonstruoPesoProbabilidad real
Leafpup4040/100 = 40%
Windling3030/100 = 30%
Silkworm2020/100 = 20%
Sparkbit1010/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 TileEncounterChance del asset MCESettings: 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):

MomentoHoras
Dawn05:00 - 06:59
Day07:00 - 16:59
Dusk17:00 - 18:59
Night19: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:

  1. Usa un evento de CommandGraph con un nodo SingleWildFight en lugar de encuentros aleatorios.
  2. Protégelo con un nodo IfBool sobre una variable de juego (por ejemplo LegendaryDefeated).
  3. Tras la batalla, establece la variable con SetBoolVariable para evitar nuevos encuentros.
  4. 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:

ObjetoEfecto
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​

  1. 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 %.
  2. Escala los niveles con la progresión. La Ruta 1 debería tener monstruos de nivel 2-5, no de nivel 50.
  3. Varía las tablas de encuentro entre mapas. Cada ruta debe sentirse distinta.
  4. Incluye encuentros raros. Una entrada de bajo peso por tabla da a los jugadores algo que buscar.
  5. Prueba los encuentros según la hora del día. Los jugadores no deberían sentirse castigados por jugar a una hora concreta.
  6. Coloca los repelentes pronto. Los jugadores agradecen tener control sobre los encuentros antes de la mitad del juego.