Appearance
Zen Mode (ID: 161)
Basic Info
- Name: Zen Mode
- ID: 161
- Enum: ABILITY_ZEN_MODE
- Description: "Transforms into Zen Mode on entry until end of battle."
Extended In-Game Description
Zen Mode triggers permanent form change upon battle entry. Unlike HP-based transformations, this activates unconditionally when entering battle. The transformation lasts the entire battle and cannot be reversed. Works with Darmanitan forms, changing stats, typing, and movepool.
Character count: 293
Implementation Analysis
Core Mechanics
cpp
constexpr Ability ZenMode = {
.onEntry = Forecast.onEntry,
.onEndTurn = Forecast.onEndTurn,
.unsuppressable = TRUE,
.randomizerBanned = TRUE,
};
Key Features
- Uses Forecast Implementation: Shares the same transformation logic as Forecast ability
- Unsuppressable: Cannot be disabled by abilities like Mold Breaker
- Randomizer Banned: Excluded from randomization due to form-specific nature
- Battle Entry Trigger: Activates immediately when entering battle
Transformation Logic
Located in src/battle_util.c
in ShouldChangeFormHpBased()
:
cpp
// Darmanitan
if (species == SPECIES_DARMANITAN && (BattlerHasAbility(battler, ABILITY_ZEN_MODE, FALSE)) && gBattleMons[battler].hp != 0) {
gBattleScripting.abilityPopupOverwrite = ABILITY_ZEN_MODE;
gBattlerAttacker = battler;
UpdateAbilityStateIndicesForNewSpecies(gActiveBattler, SPECIES_DARMANITAN_ZEN_MODE);
gBattleMons[battler].species = SPECIES_DARMANITAN_ZEN_MODE;
return TRUE;
}
// Darmanitan Galarian
if (species == SPECIES_DARMANITAN_GALARIAN && (BattlerHasAbility(battler, ABILITY_ZEN_MODE, FALSE)) && gBattleMons[battler].hp != 0) {
gBattleScripting.abilityPopupOverwrite = ABILITY_ZEN_MODE;
gBattlerAttacker = battler;
UpdateAbilityStateIndicesForNewSpecies(gActiveBattler, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN);
gBattleMons[battler].species = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN;
return TRUE;
}
Supported Transformations
SPECIES_DARMANITAN → SPECIES_DARMANITAN_ZEN_MODE
- Type: Fire → Fire/Psychic
- Stats: Physical attacker → Special attacker
- Attack: 140 → 35, Special Attack: 50 → 140
- Different ability set and movepool
SPECIES_DARMANITAN_GALARIAN → SPECIES_DARMANITAN_ZEN_MODE_GALARIAN
- Type: Ice → Ice/Fire
- Stats: Balanced → Speed-focused
- Speed: 95 → 140, Attack: 140 → 120
- Different ability set and movepool
Usage Patterns
Current Implementation Status
- Fully Implemented: Complete transformation logic exists
- Currently Unused: No Pokemon in the game actually has this ability assigned
- Form Species Exist: Zen Mode forms are defined but not accessible
Activation Conditions
- Pokemon must have Zen Mode ability
- Pokemon must be alive (HP > 0)
- Must be specific supported species (Darmanitan/Galarian Darmanitan)
- Triggers on battle entry only
Battle Behavior
- Permanent Duration: Lasts entire battle, no reversal possible
- Entry Activation: Happens immediately when sent into battle
- Ability Display: Shows ability popup when transforming
- Stat Changes: Complete stat redistribution based on new form
- Type Changes: Gains secondary typing (Psychic or Fire)
Technical Details
Function Calls
- Uses
TryTransformAttacker()
for transformation handling - Calls
UpdateAbilityStateIndicesForNewSpecies()
for ability updates - Updates
gBattleMons[battler].species
directly - Sets
gBattleScripting.abilityPopupOverwrite
for display
Comparison with Similar Abilities
- vs Forecast: Same implementation, but different species and conditions
- vs Stance Change: Zen Mode is permanent, Stance Change is move-based
- vs Shields Down: Zen Mode isn't HP-based, triggers unconditionally
Form Differences
Regular Darmanitan → Zen Mode:
- HP: 105 → 105 (unchanged)
- Attack: 140 → 35 (-105)
- Defense: 65 → 95 (+30)
- Sp. Attack: 50 → 140 (+90)
- Sp. Defense: 65 → 95 (+30)
- Speed: 95 → 50 (-45)
- Typing: Fire → Fire/Psychic
Galarian Darmanitan → Zen Mode:
- HP: 105 → 105 (unchanged)
- Attack: 140 → 120 (-20)
- Defense: 65 → 60 (-5)
- Sp. Attack: 50 → 35 (-15)
- Sp. Defense: 65 → 60 (-5)
- Speed: 95 → 140 (+45)
- Typing: Ice → Ice/Fire
Integration Notes
Battle System Integration
- Fully integrated with form change system
- Works with ability suppression checks
- Handles species updates correctly
- Manages ability state transitions
Randomizer Considerations
- Marked as
randomizerBanned = TRUE
- Prevents assignment to incompatible Pokemon
- Avoids breaking form change logic
Potential Use Cases
If enabled on appropriate Pokemon:
- Creates powerful late-game sweepers with form change strategy
- Provides type coverage changes mid-battle
- Offers stat redistribution for different battle roles
- Adds tactical depth to team building
The ability is complete and functional but currently serves as unused infrastructure, ready for activation on appropriate Pokemon species.