Техническая особенность реализации. Каждый покемон получит в базу ещё 1 переменную - id номер его абилки. Дальше по принципу таблицы эффективности типов, можно составить аналогичную таблицу на влияния абилок на определённые атаки.
Иными словами, кодовая структура уже есть. Она дублируется и изменяется для нового параметра.
Примерная блок-схема предельно проста:
Абилка защитная

Где n - номер абилки, который защищает от атаки/статуса. A_id - номер абилки у покемона.
Абилка понижающая:
У таких покемонов как Гроули/арканайн, Гаярдос абилка в начале боя снижает атаку противника на 1.
Здесь ещё проще. на 0 ходе(инициализация) - сразу выставить статус, и делать проверки при смене покемона. То бишь, чтобы статус ложился и на тех, кого выпустили.
А чтобы контролировать повторное наложение статуса: повторный выпуск покемона в бой нужно 6 переменных(покемоны противника) булевского типа(логические) - если статус на пока наложен - True, если нет - False. По окончанию боя - все переменные False