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:
| Result | Multiplier | Message |
|---|---|---|
| Super Effective | 2.0x | "It's super effective!" |
| Not Very Effective | 0.5x | "It's not very effective..." |
| Immune | 0.0x | "It doesn't affect [target]..." |
| Neutral | 1.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
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 Type | Strong Against (2x) | Weak Against (0.5x) | Immune (0x) |
|---|---|---|---|
| Fire | Grass, Ice, Bug, Steel | Fire, Water, Rock, Dragon | -- |
| Water | Fire, Rock, Ground | Water, Grass, Dragon | -- |
| Grass | Water, Rock, Ground | Fire, Grass, Poison, Flying, Bug, Dragon, Steel | -- |
| Electric | Water, Flying | Electric, Grass, Dragon | Ground |
| Ground | Fire, Electric, Poison, Rock, Steel | Grass, Bug | Flying |
| Ghost | Psychic, Ghost | Dark | Normal |
| Normal | -- | Rock, Steel | Ghost |
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 Type | Target Types | Calculation | Result |
|---|---|---|---|
| Ice | Dragon / Flying | 2.0 x 2.0 | 4.0x (double super effective) |
| Electric | Water / Ground | 2.0 x 0.0 | 0.0x (immune, Ground absorbs) |
| Fighting | Normal / Ghost | 1.0 x 0.0 | 0.0x (immune, Ghost absorbs) |
| Water | Fire / Rock | 2.0 x 2.0 | 4.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:
- View Mode -- The grid shows the full NxN type chart. Rows are attacking types, columns are defending types.
- Color Coding -- Green = super effective (2x), Red = not very effective (0.5x), Black = immune (0x), Gray = neutral (1x).
- Edit Mode -- Click any cell to cycle through effectiveness values.
- Add Type -- Add a new type row and column to the chart.
- Remove Type -- Remove a type (warns about affected monsters and moves).
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:
- Open the Type Chart Editor.
- Click Add Type and name your new type (e.g.,
Cosmic,Sound,Digital). - Set the effectiveness values for every interaction with existing types.
- 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
- Use the Type Chart Editor for modifications -- do not edit the chart SO directly.
- Document your custom types if you are creating an original game. Players need to learn the matchups.
- Test edge cases with dual types. 4x weaknesses and double immunities can surprise players.
- Consider move distribution when balancing types. A type that is defensively strong but has no good moves available is effectively weak.