"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Abilities = void 0;
exports.Abilities = {
    disguise: {
        inherit: true,
        onDamage(damage, target, source, effect) {
            if (effect && effect.effectType === 'Move' &&
                ['mimikyu', 'mimikyutotem'].includes(target.species.id) && !target.transformed) {
                if (["rollout", "iceball"].includes(effect.id)) {
                    source.volatiles[effect.id].contactHitCount--;
                }
                this.add("-activate", target, "ability: Disguise");
                this.effectState.busted = true;
                return 0;
            }
        },
        onUpdate(pokemon) {
            if (['mimikyu', 'mimikyutotem'].includes(pokemon.species.id) && this.effectState.busted) {
                const speciesid = pokemon.species.id === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted';
                pokemon.formeChange(speciesid, this.effect, true);
            }
        },
    },
    darkaura: {
        inherit: true,
        isBreakable: true,
    },
    fairyaura: {
        inherit: true,
        isBreakable: true,
    },
    innerfocus: {
        inherit: true,
        rating: 1,
        onTryBoost() { },
    },
    intimidate: {
        inherit: true,
        rating: 4,
    },
    moody: {
        inherit: true,
        onResidual(pokemon) {
            let stats = [];
            const boost = {};
            let statPlus;
            for (statPlus in pokemon.boosts) {
                if (pokemon.boosts[statPlus] < 6) {
                    stats.push(statPlus);
                }
            }
            let randomStat = stats.length ? this.sample(stats) : undefined;
            if (randomStat)
                boost[randomStat] = 2;
            stats = [];
            let statMinus;
            for (statMinus in pokemon.boosts) {
                if (pokemon.boosts[statMinus] > -6 && statMinus !== randomStat) {
                    stats.push(statMinus);
                }
            }
            randomStat = stats.length ? this.sample(stats) : undefined;
            if (randomStat)
                boost[randomStat] = -1;
            this.boost(boost, pokemon, pokemon);
        },
    },
    oblivious: {
        inherit: true,
        onTryBoost() { },
    },
    owntempo: {
        inherit: true,
        onTryBoost() { },
    },
    rattled: {
        onDamagingHit(damage, target, source, move) {
            if (['Dark', 'Bug', 'Ghost'].includes(move.type)) {
                this.boost({ spe: 1 });
            }
        },
        name: "Rattled",
        rating: 1.5,
        num: 155,
    },
    scrappy: {
        inherit: true,
        onTryBoost() { },
    },
    slowstart: {
        inherit: true,
        condition: {
            duration: 5,
            onResidualOrder: 28,
            onResidualSubOrder: 2,
            onStart(target) {
                this.add('-start', target, 'ability: Slow Start');
            },
            onModifyAtkPriority: 5,
            onModifyAtk(atk, pokemon, target, move) {
                // This is because the game checks the move's category in data, rather than what it is currently, unlike e.g. Huge Power
                if (this.dex.moves.get(move.id).category === 'Physical') {
                    return this.chainModify(0.5);
                }
            },
            onModifySpAPriority: 5,
            onModifySpA(spa, pokemon, target, move) {
                // Ordinary Z-moves like Breakneck Blitz will halve the user's Special Attack as well
                if (this.dex.moves.get(move.id).category === 'Physical') {
                    return this.chainModify(0.5);
                }
            },
            onModifySpe(spe, pokemon) {
                return this.chainModify(0.5);
            },
            onEnd(target) {
                this.add('-end', target, 'Slow Start');
            },
        },
    },
    soundproof: {
        inherit: true,
        onTryHit(target, source, move) {
            if (move.flags['sound']) {
                this.add('-immune', target, '[from] ability: Soundproof');
                return null;
            }
        },
    },
    technician: {
        inherit: true,
        onBasePowerPriority: 19,
    },
};
//# sourceMappingURL=abilities.js.map