Physical/special split
The rule that picks which pair of stats a damaging move uses, physical or special, by the move's type or by the move itself.
On this page
The physical/special split picks which pair of stats a damaging move uses in the damage formula. In Pokémon Red and Blue, Crystal, and Emerald, the three earlier games the atlas has read for it, a move’s type decides it1,2,3. In Platinum each move carries its own class4.
- By typePokémon Red and Blue (1996). Fire, Water, Grass, Electric, Psychic, Ice, and Dragon moves use Special on both sides; the other types use Attack against Defense.1Pokémon Crystal (2000). The type decides, with Dark special and Steel physical.2Pokémon Emerald (2004). The type decides, as in the earlier games.3
- By movePokémon Platinum (2008). Each move's class, physical, special, or status, whatever its type.4
Games
| Game | Year | How | Note |
|---|---|---|---|
| Pokémon Red and Blue | 1996 | By type | Fire, Water, Grass, Electric, Psychic, Ice, and Dragon moves use Special on both sides; the other types use Attack against Defense |
| Pokémon Crystal | 2000 | By type | the type decides, with Dark special and Steel physical |
| Pokémon Emerald | 2004 | By type | the type decides, as in the earlier games |
| Pokémon Platinum | 2008 | By move | each move's class, physical, special, or status, whatever its type |
Every claim about this mechanic, by game (1)
References
- ^ abType picks the stats: Fire, Water, Grass, Electric, Psychic, Ice, and Dragon (
SPECIALupward) use Special on both sides; the rest use Attack against Defense.Codepret/pokeredHow we know
4041 cp SPECIAL ; types >= SPECIAL are all special 4042 jr nc, .specialAttack
engine/battle/core.asm lines 4040–4042 at af51989 · upstream ↗ constants/type_constants.asm#L19-L26 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abType still picks the stats: Steel is physical (below
SPECIAL); Dark is special, using Special Attack against Special Defense.Codepret/pokecrystalHow we know
2544 cp SPECIAL 2545 jr nc, .special
engine/battle/effect_commands.asm lines 2543–2545 at 97187cd · upstream ↗ constants/type_constants.asm#L9-L35 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abType still decides physical or special in Emerald, by its position relative to
TYPE_MYSTERY.Codepret/pokeemeraldHow we know
466#define IS_TYPE_PHYSICAL(moveType) (moveType < TYPE_MYSTERY) 467#define IS_TYPE_SPECIAL(moveType) (moveType > TYPE_MYSTERY)
include/battle.h lines 466–467 at 731ad5b · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abIn Platinum the damage formula reads each move's own class (
MOVE_DATA(move).class:CLASS_PHYSICAL,CLASS_SPECIAL, orCLASS_STATUS) and uses Attack against Defense for a physical move, Special Attack against Special Defense for a special one, whatever the move's type. Emerald picks the pair by type, below or aboveTYPE_MYSTERYin the type list, so Thunder Punch (Electric) is special in Emerald and physical in Platinum, and Shadow Ball (Ghost) is physical in Emerald and special in Platinum.Codepret/pokeplatinum · pret/pokeemeraldHow we know
12typedef struct MoveTable { 13 u16 effect; 14 u8 class; 15 u8 power;
include/move_table.h lines 12–15 at 49f78f3 · upstream ↗ 1CLASS_PHYSICAL 2CLASS_SPECIAL 3CLASS_STATUS
generated/move_classes.txt lines 1–3 at 49f78f3 · upstream ↗ 6635 attackStat = BattleMon_Get(battleCtx, attacker, BATTLEMON_ATTACK, NULL); 6636 defenseStat = BattleMon_Get(battleCtx, defender, BATTLEMON_DEFENSE, NULL); 6637 spAttackStat = BattleMon_Get(battleCtx, attacker, BATTLEMON_SP_ATTACK, NULL); 6638 spDefenseStat = BattleMon_Get(battleCtx, defender, BATTLEMON_SP_DEFENSE, NULL);
src/battle/battle_lib.c lines 6635–6638 at 49f78f3 · upstream ↗ 6704 moveClass = MOVE_DATA(move).class;src/battle/battle_lib.c line 6704 at 49f78f3 · upstream ↗ 6947 if (moveClass == CLASS_PHYSICAL) { ⋮ 6950 damage = attackStat * sStatStageBoosts[attackStage].numerator; ⋮ 6956 damage = attackStat * sStatStageBoosts[attackStage].numerator; ⋮ 6965 stageDivisor = defenseStat * sStatStageBoosts[defenseStage].numerator; ⋮ 6971 stageDivisor = defenseStat * sStatStageBoosts[defenseStage].numerator; ⋮ 6992 } else if (moveClass == CLASS_SPECIAL) {
src/battle/battle_lib.c lines 6947–6992 at 49f78f3 · upstream ↗ 10 "class": "CLASS_PHYSICAL", 11 "type": "TYPE_ELECTRIC",
res/moves/thunder_punch/data.json lines 10–11 at 49f78f3 · upstream ↗ 10 "class": "CLASS_SPECIAL", 11 "type": "TYPE_GHOST",
res/moves/shadow_ball/data.json lines 10–11 at 49f78f3 · upstream ↗ 466#define IS_TYPE_PHYSICAL(moveType) (moveType < TYPE_MYSTERY) 467#define IS_TYPE_SPECIAL(moveType) (moveType > TYPE_MYSTERY)
include/battle.h lines 466–467 at 731ad5b · upstream ↗ 13#define TYPE_GHOST 7 ⋮ 15#define TYPE_MYSTERY 9 ⋮ 19#define TYPE_ELECTRIC 13
include/constants/pokemon.h lines 13–19 at 731ad5b · upstream ↗ 120 [MOVE_THUNDER_PUNCH] = ⋮ 124 .type = TYPE_ELECTRIC,
src/data/battle_moves.h lines 120–124 at 731ad5b · upstream ↗ 3214 [MOVE_SHADOW_BALL] = ⋮ 3218 .type = TYPE_GHOST,
src/data/battle_moves.h lines 3214–3218 at 731ad5b · upstream ↗ 3232 if (IS_TYPE_PHYSICAL(type))src/pokemon.c line 3232 at 731ad5b · upstream ↗ 3287 if (IS_TYPE_SPECIAL(type))src/pokemon.c line 3287 at 731ad5b · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
Sources
Code
- pret contributors. 2026. “pokered: disassembly of Pokémon Red and Blue.” pret. Commit af51989. pret/pokered @ af51989 · licence, all uses
- pret contributors. 2026. “pokecrystal: disassembly of Pokémon Crystal.” pret. Commit 97187cd. pret/pokecrystal @ 97187cd · licence, all uses
- pret contributors. 2026. “pokeemerald: decompilation of Pokémon Emerald.” pret. Commit 731ad5b. pret/pokeemerald @ 731ad5b · licence, all uses
- pret contributors. 2026. “pokeplatinum: decompilation of Pokémon Platinum.” pret. Commit 49f78f3. pret/pokeplatinum @ 49f78f3 · licence, all uses