You can begin and end in class PokeBattle_Move_0C2. The attacker's effects[PBEffects::HyperBeam] is set to 2 if the attack does damage. So long as this value is greater than 0, the Pokémon with it is recharging and can't move (it's reduced by 1 at the end of each turn). You want instead to set the value if the attack does damage and the opponent survived the attack.
Think about it.