Skip to main content

Type System

The type system is the backbone of battle strategy in any monster capture game. MCE includes a fully configurable type effectiveness chart, dual-type support, and editor tooling for customizing the type matchups.

Overview​

Every monster has one or two types. Every move has exactly one type. When a move hits a target, the game calculates a type effectiveness multiplier based on the move's type vs. the target's type(s).

The Type Chart Editor

The chart is data, not code — the editor above writes the same assets the battle formula reads at runtime. That is what makes an 18-type grid a starting point rather than a rule: you can add a type, remove one, or rewrite a cell, and nothing needs recompiling.

The default multipliers are:

ResultMultiplierMessage
Super Effective2.0x"It's super effective!"
Not Very Effective0.5x"It's not very effective..."
Immune0.0x"It doesn't affect [target]..."
Neutral1.0x(no message)

For dual-typed monsters, the multipliers stack multiplicatively. A Fire move against a Grass/Ice monster deals 2.0 x 2.0 = 4.0x damage.

Default Type Chart​

The demo ships with 18 types matching the standard monster capture genre (plus a Typeless type):

Normal, Fire, Water, Grass, Electric, Ice, Fighting, Poison, Ground, Flying, Psychic, Bug, Rock, Ghost, Dragon, Dark, Steel, Fairy

Customizing Types

These 18 types are only a starting point. Types are ordinary MonsterType assets, so you can add, remove, or rename them. Some games use fewer types (early gens used 15), and some original games create entirely custom type charts.

Type Effectiveness Chart​

The chart is stored on the types themselves: every MonsterType asset has an AttackMultipliers dictionary (defending type → multiplier) for the moves of that type. The IMonsterDatabase.GetTypeEffectiveness() method returns the multiplier at runtime:

float multiplier = database.GetTypeEffectiveness(attackingType, defendingType);

Key matchups to remember:

Attacking TypeStrong Against (2x)Weak Against (0.5x)Immune (0x)
FireGrass, Ice, Bug, SteelFire, Water, Rock, Dragon--
WaterFire, Rock, GroundWater, Grass, Dragon--
GrassWater, Rock, GroundFire, Grass, Poison, Flying, Bug, Dragon, Steel--
ElectricWater, FlyingElectric, Grass, DragonGround
GroundFire, Electric, Poison, Rock, SteelGrass, BugFlying
GhostPsychic, GhostDarkNormal
Normal--Rock, SteelGhost

The full chart is viewable and editable in the Type Chart Editor. A pair that is missing from a type's dictionary counts as neutral (1.0x).

Dual Types​

When a monster has two types, both types are checked when receiving damage:

Final Multiplier = Effectiveness(move_type vs type1) * Effectiveness(move_type vs type2)

This creates several interesting scenarios:

Move TypeTarget TypesCalculationResult
IceDragon / Flying2.0 x 2.04.0x (double super effective)
ElectricWater / Ground2.0 x 0.00.0x (immune, Ground absorbs)
FightingNormal / Ghost1.0 x 0.00.0x (immune, Ghost absorbs)
WaterFire / Rock2.0 x 2.04.0x (double super effective)

STAB (Same-Type Attack Bonus)​

When a monster uses a move that matches one of its own types, the move gets a 1.5x STAB bonus (DamageMath.StabMultiplier). The bonus multiplies with the type effectiveness and the other damage factors:

Final Damage = Base Damage * STAB * Type Effectiveness

For example, a Water-type monster using a Water move against a Fire target:

Base * 1.5 (STAB) * 2.0 (super effective) = 3.0x total

Using the Type Chart Editor​

The Type Chart Editor is an interactive grid tool for viewing and modifying type matchups:

Open the OpenMon Hub (Tools > MCE > OpenMon Hub) → Database tab → Type Chart Editor

In the editor:

  1. View Mode -- The grid shows the full NxN type chart; the title bar says how many types it lists. Rows are attacking types, columns are defending types, and each type's color marks its row and column.
  2. Color Coding -- Green = super effective (2x), Red = not very effective (0.5x), Dark gray = no effect (0x), Light gray = neutral (1x).
  3. Edit Mode -- Click any cell to cycle through the values: neutral → 2 → 0.5 → 0 → neutral. Every change can be undone with Unity's Undo.
  4. Refresh -- Reloads the list of types from the project (it also reloads when the window gets focus).
  5. Save All -- Marks every type dirty and saves the assets to disk.

The grid lists the MonsterType assets that have Index switched on. To add or remove a type, create or delete the asset (below) -- the editor has no add or remove button of its own.

Changing Types Affects Everything

Modifying the type chart affects all battles in your game. Test thoroughly after any changes. Adding or removing types requires updating monster and move assignments.

Creating Custom Types​

If you are building an original game, you may want a custom type chart:

  1. Create a MonsterType asset: Assets > Create > MCE > Monster Database > Type, or New Monster Type in the Hub's Database tab. Name it (e.g., Cosmic, Sound, Digital), set its color and icon, and keep Index on so it shows up in the chart.
  2. Open the Type Chart Editor and press Refresh: the new type appears as a row and a column.
  3. Set the effectiveness values for every interaction with existing types.
  4. Create monsters and moves that use your new type.

Design Tips for Custom Types​

  • Balance offensively and defensively. A type should have roughly equal strengths and weaknesses.
  • Avoid too many immunities. Immunities are powerful and can create frustrating gameplay if overused.
  • Keep the total number manageable. 15-20 types is the sweet spot. More than 25 becomes hard for players to memorize.
  • Create interesting counterplay. The best type matchups create risk/reward decisions, not automatic wins.

Querying Types in Code​

SDK Interface (Indie, Pro, Source and Studio Editions)​

using System.Linq;
using OpenMon.MCE.SDK;

IReadOnlyList<MonsterType> allTypes = engine.Database.GetAllTypes();
var fire = allTypes.FirstOrDefault(type => type.name == "Fire");
var grass = allTypes.FirstOrDefault(type => type.name == "Grass");

float effectiveness = engine.Database.GetTypeEffectiveness(fire, grass);
// Returns 2.0 when both types exist in the database

Direct Access (Source and Studio Editions)​

With source code access, you can also work with the type chart directly through the MonsterDatabase classes and modify effectiveness values at runtime for special battle conditions.

Best Practices​

  1. Use the Type Chart Editor for modifications -- it records undo steps and saves the type assets for you.
  2. Document your custom types if you are creating an original game. Players need to learn the matchups.
  3. Test edge cases with dual types. 4x weaknesses and double immunities can surprise players.
  4. Consider move distribution when balancing types. A type that is defensively strong but has no good moves available is effectively weak.