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

MCE ships with 18 types matching the standard monster capture genre:

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

Customizing Types

These 18 types are the default. You can add, remove, or rename types using the Type Chart Editor. Some games use fewer types (early gens used 15), and some original games create entirely custom type charts.

Type Effectiveness Chart

The full 18x18 chart is stored as a ScriptableObject database. 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.

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. This bonus is applied after type effectiveness:

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:

MCE > Tools > Type Chart Editor

In the editor:

  1. View Mode -- The grid shows the full NxN type chart. Rows are attacking types, columns are defending types.
  2. Color Coding -- Green = super effective (2x), Red = not very effective (0.5x), Black = immune (0x), Gray = neutral (1x).
  3. Edit Mode -- Click any cell to cycle through effectiveness values.
  4. Add Type -- Add a new type row and column to the chart.
  5. Remove Type -- Remove a type (warns about affected monsters and moves).
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. Open the Type Chart Editor.
  2. Click Add Type and name your new type (e.g., Cosmic, Sound, Digital).
  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 (All Tiers)

using OpenMon.MCE.SDK;

// Through the SDK interface
float effectiveness = engine.Database.GetTypeEffectiveness(
MonsterType.Fire,
MonsterType.Grass
);
// Returns 2.0

IReadOnlyList<MonsterType> allTypes = engine.Database.GetAllTypes();

Direct Access (Source Tier)

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 -- do not edit the chart SO directly.
  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.