From d5307c3e5453458267ee375418cdc37ab4f0008d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Apr 2020 14:24:31 +0200 Subject: [PATCH] Poison Touch --- src/battle_script_commands.c | 3 +++ src/battle_util.c | 27 ++++++++++++++++++++++++--- src/data/pokemon/base_stats.h | 16 ++++++++-------- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c9dfa977d8..39cb1ae691 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4528,6 +4528,9 @@ static void Cmd_moveend(void) case MOVEEND_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.). if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0)) effect = TRUE; + // Poison Touch, possibly other in the future + else if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerAttacker, 0, 0, 0)) + effect = TRUE; gBattleScripting.moveendState++; break; case MOVEEND_STATUS_IMMUNITY_ABILITIES: // status immunities diff --git a/src/battle_util.c b/src/battle_util.c index a6b7029e7e..4edcaf3bcc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3526,7 +3526,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY) && !IsFlowerVeilProtected(gBattlerAttacker) && !IsLeafGuardProtected(gBattlerAttacker) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && IsMoveMakingContact(move, gBattlerAttacker) && (Random() % 3) == 0) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_SLEEP; @@ -3550,7 +3550,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY) && !IsFlowerVeilProtected(gBattlerAttacker) && !IsLeafGuardProtected(gBattlerAttacker) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && IsMoveMakingContact(move, gBattlerAttacker) && (Random() % 3) == 0) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; @@ -3572,7 +3572,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY) && !IsFlowerVeilProtected(gBattlerAttacker) && !IsLeafGuardProtected(gBattlerAttacker) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && IsMoveMakingContact(move, gBattlerAttacker) && (Random() % 3) == 0) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; @@ -3582,6 +3582,27 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA effect++; } break; + case ABILITY_POISON_TOUCH: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleMons[gBattlerTarget].hp != 0 + && !gProtectStructs[gBattlerTarget].confusionSelfDmg + && !IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_POISON) + && !IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_STEEL) + && GetBattlerAbility(gBattlerTarget) != ABILITY_IMMUNITY + && !(gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) + && !IsFlowerVeilProtected(gBattlerTarget) + && !IsLeafGuardProtected(gBattlerTarget) + && IsMoveMakingContact(move, gBattlerAttacker) + && (Random() % 3) == 0) + { + gBattleScripting.moveEffect = MOVE_EFFECT_POISON; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; case ABILITY_FLAME_BODY: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index c1861da7dd..c191da8162 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -7296,7 +7296,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .abilities = {ABILITY_FRISK, ABILITY_FRISK}, + .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8498,7 +8498,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .abilities = {ABILITY_FRISK, ABILITY_FRISK}, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9994,15 +9994,15 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_LEFTOVERS, - .item2 = ITEM_LEFTOVERS, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = {ABILITY_FRISK, ABILITY_FRISK}, + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10026,15 +10026,15 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .item1 = ITEM_LEFTOVERS, - .item2 = ITEM_LEFTOVERS, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .abilities = {ABILITY_FRISK, ABILITY_FRISK}, + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE,