The source code currently looks like this in battle.cpp: Code (text): //No Guard, as wall as Mimic, Transform & Swift in Gen 1. if ((hasWorkingAbility(player, Ability::NoGuard) || hasWorkingAbility(target, Ability::NoGuard)) || (gen() == 1 && (move == Move::Swift || move == Move::Mimic || move == Move::Transform))) { return true; } if (turnMemory(target).contains("EvadeAttack")) { if (!silent) { notifyMiss(multiTar, player, target); } return false; } if (acc == 0 || acc == 101 || (pokeMemory(target).value("LevitatedCount").toInt() > 0 && !MoveInfo::isOHKO(move, gen()))) { return true; What this means is that currently the Gen 1-moves Swift, Transform and Mimic (but not Bide, which also goes into this category of always-hitting moves) as well as Pokémon with No Guard will hit a user that has used Fly, Dig or any other variation of the move. After this, the check to make the users of Fly, Dig etc. invulnerable goes through, and after this, a check to guarantee that a move like Reflect, Swords Dance etc. always will hit. However, if I want to make a move - let's say Surf - always hit the foe even when he is flying, that is currently impossible because the "101 accuracy" check is placed after the Fly check, so to speak. My suggestion is to either change the order of the EvadeAttack and the Acc=101 checks, or add an identical copy of the Acc=101 check in front of the EvadeAttack check, with the difference being that this check searches for the number 102. This would allow us to create Swift-like moves at free will.
if this had happened while i was actually working on rbyplus, i'd have been very happy. now you're qualified for a "uh, thanks".