Skip to main content

IMonsterDatabase

Read-only contract for querying the Monster Database. This is the public API surface for all database queries.

imonster database

Read-only at runtime. Content is authored as assets in the editor and gameplay never mutates it.

Namespace: OpenMon.MCE.SDK

Definition​

public interface IMonsterDatabase
{
MonsterEntry GetMonster(uint dexNumber);
MonsterEntry GetMonster(string name);
IReadOnlyList<MonsterEntry> GetAllMonsters();

Move GetMove(string name);
IReadOnlyList<Move> GetAllMoves();

Ability GetAbility(string name);
IReadOnlyList<Ability> GetAllAbilities();

Item GetItem(string name);
IReadOnlyList<Item> GetAllItems();

IReadOnlyList<MonsterType> GetAllTypes();
float GetTypeEffectiveness(MonsterType attackingType, MonsterType defendingType);

IReadOnlyList<Form> GetAllForms();

int MonsterCount { get; }
}

Methods​

GetMonster(uint dexNumber)​

Get a monster entry by its national dex number.

ParameterTypeDescription
dexNumberuintThe unique dex number

Returns: MonsterEntry or null if not found.

GetMonster(string name)​

Get a monster entry by its species name.

ParameterTypeDescription
namestringThe species name (case-sensitive)

Returns: MonsterEntry or null if not found.

GetAllMonsters()​

Get all registered monster entries in the database.

Returns: IReadOnlyList<MonsterEntry> -- all species, ordered by dex number.

GetMove(string name)​

Get a move by its name.

Returns: Move or null if not found.

GetAllMoves()​

Get all registered moves.

Returns: IReadOnlyList<Move> -- all 640+ moves.

GetAbility(string name)​

Get an ability by its name.

Returns: Ability or null if not found.

GetAllAbilities()​

Get all registered abilities.

Returns: IReadOnlyList<Ability>.

GetItem(string name)​

Get an item by its name.

Returns: Item or null if not found.

GetAllItems()​

Get all registered items.

Returns: IReadOnlyList<Item>.

GetAllTypes()​

Get all registered monster types.

Returns: IReadOnlyList<MonsterType> -- the 18 standard types (or custom types if modified).

GetTypeEffectiveness(MonsterType, MonsterType)​

Get the type effectiveness multiplier for one type attacking another.

ParameterTypeDescription
attackingTypeMonsterTypeThe move's type
defendingTypeMonsterTypeThe target's type (single type)

Returns: float -- 0.0 (immune), 0.5 (not very effective), 1.0 (neutral), or 2.0 (super effective).

Dual Types

This method checks one attacking type against one defending type. For dual-typed defenders, call it twice and multiply the results:

float effectiveness = db.GetTypeEffectiveness(moveType, defenderType1)
* db.GetTypeEffectiveness(moveType, defenderType2);

GetAllForms()​

Get all registered forms.

Returns: IReadOnlyList<Form>.

Properties​

MonsterCount​

Total number of monster entries in the database.

Type: int

Usage Example​

using System.Linq;

[Inject] private IMonsterCaptureEngine engine;

void Example()
{
IMonsterDatabase db = engine.Database;

// Find a specific monster — by name, or by National Dex number.
MonsterEntry sparkbit = db.GetMonster("Sparkbit");
MonsterEntry starter = db.GetMonster(1u);

// Types are ScriptableObjects, not an enum — fetch them from the database.
MonsterType fire = db.GetAllTypes().FirstOrDefault(t => t.name == "Fire");
MonsterType water = db.GetAllTypes().FirstOrDefault(t => t.name == "Water");

// Check a type matchup.
float eff = db.GetTypeEffectiveness(water, fire);
Debug.Log($"Water vs Fire: {eff}x"); // 2.0x

// Count all Fire-type species. A monster's types live on its per-form data
// (DataByFormEntry), reached through the MonsterEntry[form] indexer.
int fireCount = db.GetAllMonsters().Count(m =>
{
if (m.AvailableForms == null || m.AvailableForms.Count == 0) return false;
var data = m[m.AvailableForms[0]];
return data != null && (data.FirstType == fire || data.SecondType == fire);
});
Debug.Log($"Fire-type species: {fireCount}");
}