{
    num: 132,
    accuracy: 100,
    basePower: 10,
    category: "Physical",
    isNonstandard: "Past",
    name: "Constrict",
    pp: 35,
    priority: 0,
    flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
    onTryImmunity(target) {
        return this.dex.getImmunity("trapped", target);
    },
    volatileStatus: "constrict",
    condition: {
        duration: 4,
        onStart(pokemon, source) {
            this.add("-start", pokemon, "move: Constrict", "[of] " + source);
        },
        onResidualOrder: 14,
        onResidual(pokemon) {
            const source = this.effectState.source;
            if (source && (!source.isActive || source.hp <= 0 || !source.activeTurns)) {
                delete pokemon.volatiles["constrict"];
                this.add("-end", pokemon, "Constrict", "[partiallytrapped]", "[silent]");
                return;
            }
            this.boost({ spe: -1 }, pokemon, source, this.dex.getActiveMove("constrict"));
        },
        onTrapPokemon(pokemon) {
            if (this.effectState.source && this.effectState.source.isActive)
                pokemon.tryTrap();
        }
    },
    target: "normal",
    type: "Normal",
    contestType: "Tough"
}
