"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Abilities = void 0;
exports.Abilities = {
    cutecharm: {
        inherit: true,
        onDamagingHit(damage, target, source, move) {
            if (damage && move.flags['contact']) {
                if (this.randomChance(1, 3)) {
                    source.addVolatile('attract', target);
                }
            }
        },
    },
    effectspore: {
        inherit: true,
        onDamagingHit(damage, target, source, move) {
            if (damage && move.flags['contact'] && !source.status) {
                const r = this.random(300);
                if (r < 10) {
                    source.setStatus('slp', target);
                }
                else if (r < 20) {
                    source.setStatus('par', target);
                }
                else if (r < 30) {
                    source.setStatus('psn', target);
                }
            }
        },
    },
    flamebody: {
        inherit: true,
        onDamagingHit(damage, target, source, move) {
            if (damage && move.flags['contact']) {
                if (this.randomChance(1, 3)) {
                    source.trySetStatus('brn', target);
                }
            }
        },
    },
    flashfire: {
        inherit: true,
        onTryHit(target, source, move) {
            if (target !== source && move.type === 'Fire') {
                if (move.id === 'willowisp' && (target.hasType('Fire') || target.status || target.volatiles['substitute'])) {
                    return;
                }
                if (target.status === 'frz') {
                    return;
                }
                if (!target.addVolatile('flashfire')) {
                    this.add('-immune', target, '[from] ability: Flash Fire');
                }
                return null;
            }
        },
    },
    forecast: {
        inherit: true,
        flags: {},
    },
    intimidate: {
        inherit: true,
        onStart(pokemon) {
            let activated = false;
            for (const target of pokemon.adjacentFoes()) {
                if (!target.volatiles['substitute']) {
                    activated = true;
                    break;
                }
            }
            if (!activated) {
                this.hint("In Gen 3, Intimidate does not activate if every target has a Substitute.", false, pokemon.side);
                return;
            }
            this.add('-ability', pokemon, 'Intimidate', 'boost');
            for (const target of pokemon.adjacentFoes()) {
                if (target.volatiles['substitute']) {
                    this.add('-immune', target);
                }
                else {
                    this.boost({ atk: -1 }, target, pokemon, null, true);
                }
            }
        },
    },
    lightningrod: {
        onFoeRedirectTarget(target, source, source2, move) {
            if (move.type !== 'Electric')
                return;
            if (this.validTarget(this.effectState.target, source, move.target)) {
                return this.effectState.target;
            }
        },
        flags: { breakable: 1 },
        name: "Lightning Rod",
        rating: 0,
        num: 32,
    },
    minus: {
        inherit: true,
        onModifySpA(spa, pokemon) {
            for (const active of this.getAllActive()) {
                if (!active.fainted && active.hasAbility('plus')) {
                    return this.chainModify(1.5);
                }
            }
        },
    },
    plus: {
        inherit: true,
        onModifySpA(spa, pokemon) {
            for (const active of this.getAllActive()) {
                if (!active.fainted && active.hasAbility('minus')) {
                    return this.chainModify(1.5);
                }
            }
        },
    },
    poisonpoint: {
        inherit: true,
        onDamagingHit(damage, target, source, move) {
            if (damage && move.flags['contact']) {
                if (this.randomChance(1, 3)) {
                    source.trySetStatus('psn', target);
                }
            }
        },
    },
    pressure: {
        inherit: true,
        onStart(pokemon) {
            this.addSplit(pokemon.side.id, ['-ability', pokemon, 'Pressure', '[silent]']);
        },
    },
    raindish: {
        inherit: true,
        onWeather() { },
        onResidualOrder: 10,
        onResidualSubOrder: 3,
        onResidual(pokemon) {
            if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
                this.heal(pokemon.baseMaxhp / 16);
            }
        },
    },
    roughskin: {
        inherit: true,
        onDamagingHit(damage, target, source, move) {
            if (damage && move.flags['contact']) {
                this.damage(source.baseMaxhp / 16, source, target);
            }
        },
    },
    shadowtag: {
        inherit: true,
        onFoeTrapPokemon(pokemon) {
            pokemon.trapped = true;
        },
    },
    static: {
        inherit: true,
        onDamagingHit(damage, target, source, move) {
            if (damage && move.flags['contact']) {
                if (this.randomChance(1, 3)) {
                    source.trySetStatus('par', target);
                }
            }
        },
    },
    trace: {
        inherit: true,
        onUpdate(pokemon) {
            if (!pokemon.isStarted)
                return;
            const target = pokemon.side.randomFoe();
            if (!target || target.fainted)
                return;
            const ability = target.getAbility();
            if (pokemon.setAbility(ability)) {
                this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);
            }
        },
        flags: {},
    },
    truant: {
        inherit: true,
        onStart() { },
        onSwitchIn(pokemon) {
            pokemon.truantTurn = this.turn !== 0;
        },
        onBeforeMove(pokemon) {
            if (pokemon.truantTurn) {
                this.add('cant', pokemon, 'ability: Truant');
                return false;
            }
        },
        onResidualOrder: 27,
        onResidual(pokemon) {
            pokemon.truantTurn = !pokemon.truantTurn;
        },
    },
    voltabsorb: {
        inherit: true,
        onTryHit(target, source, move) {
            if (target !== source && move.type === 'Electric' && move.id !== 'thunderwave') {
                if (!this.heal(target.baseMaxhp / 4)) {
                    this.add('-immune', target, '[from] ability: Volt Absorb');
                }
                return null;
            }
        },
    },
};
//# sourceMappingURL=abilities.js.map