Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.
I designed it specifically for Zangoose/Seviper. I can't really think of any other Pokemon pairings that have that sort of bitter rivalry with each other. Maybe Yungoos/Alolan Rattata. But then it wouldn't make sense why Yungoos and Zangoose activate Bad Blood when together (since the ability would technically activate on any pairing, as long as they are different species). So the concept only really works when the only species that have it should "hate" each other.
Anyway, I'm not working on a game project. It's far too much of an investment and I just don't have that sort of time and patience. I basically just tinker around with making stuff here and there when im bored and in a creative mood.
I designed it specifically for Zangoose/Seviper. I can't really think of any other Pokemon pairings that have that sort of bitter rivalry with each other. Maybe Yungoos/Alolan Rattata. But then it wouldn't make sense why Yungoos and Zangoose activate Bad Blood when together (since the ability would technically activate on any pairing, as long as they are different species). So the concept only really works when the only species that have it should "hate" each other.
Anyway, I'm not working on a game project. It's far too much of an investment and I just don't have that sort of time and patience. I basically just tinker around with making stuff here and there when im bored and in a creative mood.
I'm brand new here, but I have a couple ideas. If anybody sees this and thinks they can do it please let me know. Also I'd like constructive feedback from anybody willing.
1. A pair of abilities that function like Drizzle/Drought, but instead of effectively using automatically Rain Dance/Sunny Day on switch-in they use Light Screen/Reflect on switch-in.
2. A unique item for Mewtwo that multiplies defenses by 1.5 (yes, broken I know, but it has a purpose in my intended hack's story)
3. A pair of abilities that do what the Grip Claw/Binding Band do respectively.
4. A pair of moves that are the Fire/Electric equivalents of Ice Hammer (including be tagged as "punch" moves)
5. An ability that boosts kicking moves similarly to Iron Fist (I didn't specify the multiplier, because I haven't settled on one as I may increase Iron Fist and/or simply make this proposed ability match it in power)
6. A move that is the Fire equivalent of Frost Breath.
7. A move called Leech Spores (name in progress) that both badly poisons and mimics Leech Seeds effects (new signature move for Venusaur to increase playthrough tank-build viability)
8. A special, Fire equivalent of Reversal (intended to be used with Blaze and a Charcoal on a Typhlosion)
9. To make at least Hydro Pump, and possibly Hydro Cannon, be affected by Mega Launcher
9a- Alternatively, a special water move that is boosted by Mega Launcher, works like Psyshock (calculates damage based on the opponents Def., not Sp. Def.), 100% to lower the target's defense, and has base power 65 (subject to balancing as this may or may not end up overpowered- obviously intended to be a new signature for Blastoise)
10. 65 Base Power, physical, Water-type move that is boosted by Strong Jaw (new Feraligatr Signature)
11. Death Roll, a physical variant of Brine (Feraligatr Signature #2)
12. A pair of moves that are the Ice/Electric equivalents of Blaze Kick
13. A move called Blast Kick (name in progress)with the following stats:
110 Base Power, 85 Accuracy, Fire/Physical, Increased crit. ratio, 10% chance to burn (new Blaziken signature)
14. A move that is a viable intermediary between the two poor choices for a Rock-type attack: Rock Slide and Stone Edge. I propose Boulderfall (name in progress); Physical, Rock-type, 90 Base Power, 90 accuracy, and a secondary affect such as 10/30% chance to flinch/lower target's Def. by one stage (Rock slide will be buffed from 90->95 accuracy to remain fair to those who wish to cheese with Serene Grace flinch hax)
15. A move called Axe Kick: Steel-type, 95 Base Power, 90 accuracy, 20% chance to lower the target's Def. by one stage (new move for Hitmonlee, Blaziken and any other kickers I may be forgetting)
16. Flying Knee (name in progress), a kick equivalent of Sky Uppercut, except it's Flying Type. 100 Base Power, 85 accuracy, will not be taught to Flying type Pokemon to remain balanced
17. A physical, Bug-type, partial-trapping move called Pincer Crush. New signature for Pinsir (I don't intend to implement megas) with 70 base power and 95 accuracy.
18. Vicious Kick(name in progress), a physical, Dark-type move that deals double damage to statused targets. 60 Base Power, 95 accuracy
19. A Ground-type variant of Avalanche called Mudslide (name in progress)
20. An ability like Drought/Drizzle, but activate the effect's Ingrain on switch-in instead of Sunny Day/Rain Dance
21. A move named Dust Devil (name in progress) that acts as a Special, Rock (or Ground depending on balancing) equivalent to Hurricane. Always hits in Sand Storm and has a chance to lower the target's Def.
22. Change Heat Wave's burn chance to setting up Sunny Day instead. Change Base Power and Accuracy to 75 and 95 respectively
22a- An Electric-type equivalent that sets up rain called Thunderstorm, and an Ice-type equivalent that sets up hail called Cold Front (or Cold Snap, name in progress)
23. Grapple- a Fighting-type, partial-trapping move
I actually have quite a few more ideas, but those are either less polished or come in the way of minor balance changes. Thoughts?
I'm brand new here, but I have a couple ideas. If anybody sees this and thinks they can do it please let me know. Also I'd like constructive feedback from anybody willing.
1. A pair of abilities that function like Drizzle/Drought, but instead of effectively using automatically Rain Dance/Sunny Day on switch-in they use Light Screen/Reflect on switch-in.
2. A unique item for Mewtwo that multiplies defenses by 1.5 (yes, broken I know, but it has a purpose in my intended hack's story)
3. A pair of abilities that do what the Grip Claw/Binding Band do respectively.
4. A pair of moves that are the Fire/Electric equivalents of Ice Hammer (including be tagged as "punch" moves)
5. An ability that boosts kicking moves similarly to Iron Fist (I didn't specify the multiplier, because I haven't settled on one as I may increase Iron Fist and/or simply make this proposed ability match it in power)
6. A move that is the Fire equivalent of Frost Breath.
7. A move called Leech Spores (name in progress) that both badly poisons and mimics Leech Seeds effects (new signature move for Venusaur to increase playthrough tank-build viability)
8. A special, Fire equivalent of Reversal (intended to be used with Blaze and a Charcoal on a Typhlosion)
9. To make at least Hydro Pump, and possibly Hydro Cannon, be affected by Mega Launcher
9a- Alternatively, a special water move that is boosted by Mega Launcher, works like Psyshock (calculates damage based on the opponents Def., not Sp. Def.), 100% to lower the target's defense, and has base power 65 (subject to balancing as this may or may not end up overpowered- obviously intended to be a new signature for Blastoise)
10. 65 Base Power, physical, Water-type move that is boosted by Strong Jaw (new Feraligatr Signature)
11. Death Roll, a physical variant of Brine (Feraligatr Signature #2)
12. A pair of moves that are the Ice/Electric equivalents of Blaze Kick
13. A move called Blast Kick (name in progress)with the following stats:
110 Base Power, 85 Accuracy, Fire/Physical, Increased crit. ratio, 10% chance to burn (new Blaziken signature)
14. A move that is a viable intermediary between the two poor choices for a Rock-type attack: Rock Slide and Stone Edge. I propose Boulderfall (name in progress); Physical, Rock-type, 90 Base Power, 90 accuracy, and a secondary affect such as 10/30% chance to flinch/lower target's Def. by one stage (Rock slide will be buffed from 90->95 accuracy to remain fair to those who wish to cheese with Serene Grace flinch hax)
15. A move called Axe Kick: Steel-type, 95 Base Power, 90 accuracy, 20% chance to lower the target's Def. by one stage (new move for Hitmonlee, Blaziken and any other kickers I may be forgetting)
16. Flying Knee (name in progress), a kick equivalent of Sky Uppercut, except it's Flying Type. 100 Base Power, 85 accuracy, will not be taught to Flying type Pokemon to remain balanced
17. A physical, Bug-type, partial-trapping move called Pincer Crush. New signature for Pinsir (I don't intend to implement megas) with 70 base power and 95 accuracy.
18. Vicious Kick(name in progress), a physical, Dark-type move that deals double damage to statused targets. 60 Base Power, 95 accuracy
19. A Ground-type variant of Avalanche called Mudslide (name in progress)
20. An ability like Drought/Drizzle, but activate the effect's Ingrain on switch-in instead of Sunny Day/Rain Dance
21. A move named Dust Devil (name in progress) that acts as a Special, Rock (or Ground depending on balancing) equivalent to Hurricane. Always hits in Sand Storm and has a chance to lower the target's Def.
22. Change Heat Wave's burn chance to setting up Sunny Day instead. Change Base Power and Accuracy to 75 and 95 respectively
22a- An Electric-type equivalent that sets up rain called Thunderstorm, and an Ice-type equivalent that sets up hail called Cold Front (or Cold Snap, name in progress)
23. Grapple- a Fighting-type, partial-trapping move
I actually have quite a few more ideas, but those are either less polished or come in the way of minor balance changes. Thoughts?
Wow, ok. That's a lot lol. But honestly, MOST of these are extremely simple, and you really shouldn't need anyone to build them for you. You can literally just copy/paste existing code and tweak a line or two to get what you want.
1) Seems fairly straight forward, and probably the only one I'll actually make for you because it's too complicated to explain in one sentence.
In PokeBattle_Battler, look for the code for "# Intimidate", and post this directly above it:
Code:
if self.hasWorkingAbility(:AUTOREFLECT) && onactive
if self.pbOwnSide.effects[PBEffects::Reflect]<1
PBDebug.log("[Ability triggered] #{pbThis}'s Auto Reflect")
@battle.pbDisplay(_INTL("{1}'s Reflect raised its team's Defense!",pbThis))
self.pbOwnSide.effects[PBEffects::Reflect]=5
self.pbOwnSide.effects[PBEffects::Reflect]=8 if self.hasWorkingItem(:LIGHTCLAY)
end
end
Now, do this again, but this time replace "Reflect" with "Light Screen." Don't forget to add these abilities to your Abilities PBS file.
2) Just copy the code for Deep Sea Scale, and swap out Clamperl for Mewtwo, make it physical-based, and change the defense multiplier to 1.5
3) Just add "|| attacker.hasWorkingAbility(:name of ability here)" next to the two instances of Grip Claw in the script.
Do something similar for Binding Band.
4) Just literally copy Hammer Arm in the PBS file, and simply change its name and typing.
5) Follow my instructions for the "Sharp Edge" ability in the first post, but replace all the move names with kicking moves & and change the multiplier/ability name to whatever you want.
6) Literally copy Frost Breath and change its name and typing.
7) Hmm probably an easy way to do this, probably by just copying Leech Seed and creating a new flag or function code to add poisoning.
8) Literally copy Reversal and change its name, typing, and change its category to special.
9) Give Hydro Pump/Cannon the "m" flag in the PBS file to make them count as "pulse" moves, which are boosted by Mega Launcher.
9a) You'll probably have to create a new function code to cram all of those effects in a single move. But you can more or less use the code for Psyshock as your guide.
10) Copy Bite and change its name, type, and power.
11) Copy Brine, and change its name and category to physical.
12) Copy Blaze Kick, and change its name and typing.
13) Again, just copy Blaze Kick but this time change its power/acc.
14) Ok from now on, any new move ideas you list im just gonna give the same advice and say copy an existing move that functions like the one you want, and just tweak it. Im skipping any further things in your list that this advice would apply to.
15) ---
16) ---
17) ---
18) ---
19) ---
20) Make an on-active ability the same way I showed you in #1, but all you need to use is one line that says "self.effects[PBEffects::Ingrain]=true" in the script for it.
21) A bit more complicated. You'll probably need to add a new function code for the unique sandstorm effect of this move.
22) Change Heat Wave's function code to 0FF in the move PBS file, which initiates sunny weather.
22a) Just make new moves that have the function codes for the appropriate weather. You can find function codes for all existing moves in the Essentials wiki, here
23) ---
Wow I didn't expect somebody to respond so quickly. I actually did realize that a lot of them were simply reskins of existing functions, but I put them there so if somebody DID respond I could ask; What do you think of my proposed changes? Could they add potentially depth to generally crappy Pokemon to help decentralize the meta? If you played a hack with these kinds of changes would you consider it 'tacky' or 'over the top'? Would you consider these changes tasteful and/or unique enough to be appreciated without being OP?
Wow I didn't expect somebody to respond so quickly. I actually did realize that a lot of them were simply reskins of existing functions, but I put them there so if somebody DID respond I could ask; What do you think of my proposed changes? Could they add potentially depth to generally crappy Pokemon to help decentralize the meta? If you played a hack with these kinds of changes would you consider it 'tacky' or 'over the top'? Would you consider these changes tasteful and/or unique enough to be appreciated without being OP?
Hmm there's probably better places here to have that sort of conversation. Not that I'm opposed to it, but generally this board seems to be about the raw mechanics behind implementing ideas, rather than opinions on the direction of your project's game play. As far as that goes, my opinion is essentially "hey, it's a fan game, make what you'd want to play." I think focusing on making the experience for the player as interesting and engaging as possible (whether through story, challenge, etc) is more important than worrying about a balanced meta game down the line that, let's be honest, is unlikely to have a thriving player base. Focusing on the core story experience is what matters most for a fan game, at least imo. And sometimes having a few OP tools at your disposal can actually be fun for players, so I wouldn't hold back on things like that for fear of meta balance. But at the same time, going overboard with things like that can kill the experience, too. It's a fine line that requires play testing, in the end.
All valid points, but the story is really something I'm not looking for public commenting on *for now*. I only really asked about balancing opinions because I hate that when playing the official games there are mons that absolutely SUCK for a playthrough, which is the only kind of play fangames have due to lack of connectivity and deciated fanbases. When I talked about a decentralized meta I was referring to playthrough viability rather than actual competitve play. Most fangames don't do much to service the problem of poor playthrough viability for lesser used types or sepcies outside of either the creator's favorites OR imo being far too liberal with changes to base stats and movepools to the point that some mons are unrecognizable from their former self. If there is somewhere better suited for this topic could you point me that way? I'm an absolute forum noob
I happened to be in the mood, so I banged out a few easy abilities that popped into my head.
Spellcaster
Effect: Powers up the user's special elemental moves.
Notes: This boosts the damage of any special attacks by 20% that are of the classic elemental spell types; Fire, Electric, and Ice.
In PokeBattle_Move, paste the following below the code for Mega Launcher:
Code:
#===========================================================================
# Custom Ability - Cannon Fire
#===========================================================================
if attacker.hasWorkingAbility(:CANNONFIRE) && isBombMove?
damagemult=(damagemult*1.5).round
end
High Pitched
Effect: Powers up the user's sound-based moves.
Notes: This boosts the damage of all sound-based moves by 50%.
In PokeBattle_Move, paste the following below the code for Mega Launcher:
Code:
#===========================================================================
# Custom Ability - High Pitched
#===========================================================================
if attacker.hasWorkingAbility(:HIGHPITCHED) && isSoundBased?
damagemult=(damagemult*1.5).round
end
Echo Lock
Effect: The user's sound-based moves never miss.
Notes: This makes sound moves unable to miss, even allowing them to hit opponents using moves like Fly or Dig.
Iron Hide
Effect: Resists contact moves, but Water reduces speed.
Notes: This halves the damage the user takes from contact moves. However, whenever the user is struck by a Water-type attack, this will cause them to "rust", and thus lower their speed by 1 stage each time.
1) In PokeBattle_Battler, find the code for the Rattled ability, and paste this below it:
Code:
#=======================================================================
# Custom Ability - Iron Hide
#=======================================================================
if target.hasWorkingAbility(:IRONHIDE) && isConst?(movetype,PBTypes,:WATER)
@battle.pbDisplay(_INTL("{1} started to rust!",target.pbThis))
if target.pbReduceStatWithCause(PBStats::SPEED,1,target,PBAbilities.getName(target.ability))
PBDebug.log("[Ability triggered] #{target.pbThis}'s Iron Hide (lower Speed)")
end
end
#=======================================================================
2) In PokeBattle_Move, find the code for the Solid Rock ability, and paste this below it:
Code:
#=========================================================================
# Custom Ability - Iron Hide
#=========================================================================
if opponent.hasWorkingAbility(:IRONHIDE) && isContactMove?
finaldamagemult=(finaldamagemult*0.5).round
end
#=========================================================================
Inflation
Effect: Air intake expands the body, boosting defense.
Notes: When struck by a wind-based move, the user inhales the wind to expand its own body. This nullifies damage, while simultaneously boosting the user's defense. This will also increase the user's weight slightly.
2) In PokeBattle_Move, find the code for the Motor Drive ability, and paste this below it:
Code:
#===========================================================================
# Custom Ability - Inflation
#===========================================================================
if opponent.hasWorkingAbility(:INFLATION) && isWindMove?
PBDebug.log("[Ability triggered] #{opponent.pbThis}'s Inflation (made #{@name} ineffective)")
if opponent.pbCanIncreaseStatStage?(PBStats::DEFENSE,opponent)
opponent.pbIncreaseStatWithCause(PBStats::DEFENSE,1,opponent,PBAbilities.getName(opponent.ability))
opponent.effects[PBEffects::WeightChange]+=25
@battle.pbDisplay(_INTL("{1} sucked in the wind and began to inflate!",opponent.pbThis))
else
@battle.pbDisplay(_INTL("{1}'s {2} made {3} ineffective!",
opponent.pbThis,PBAbilities.getName(opponent.ability),self.name))
end
return true
end
#===========================================================================
Wind Rider
Effect: Boosts speed when struck with strong winds.
Notes: When the user is struck by a wind-based move, damage is negated and converted into raising their Speed by 1 stage. If the user is on the field while the Strong Winds weather is in play, their speed is doubled, like Swift Swim.
2) In PokeBattle_Battler, find the line speedmult=speedmult*2 if self.hasWorkingAbility(:SANDRUSH), and paste this below it:
Code:
#===========================================================================
# Custom Ability - Wind Rider
#===========================================================================
when PBWeather::STRONGWINDS
speedmult=speedmult*2 if self.hasWorkingAbility(:WINDRIDER)
#===========================================================================
3) In PokeBattle_Move, find the code for the Motor Drive ability, and paste this below it:
Code:
#===========================================================================
# Custom Ability - Wind Rider
#===========================================================================
if opponent.hasWorkingAbility(:WINDRIDER) && isWindMove?
PBDebug.log("[Ability triggered] #{opponent.pbThis}'s Wind Rider (made #{@name} ineffective)")
if opponent.pbCanIncreaseStatStage?(PBStats::SPEED,opponent)
opponent.pbIncreaseStatWithCause(PBStats::SPEED,1,opponent,PBAbilities.getName(opponent.ability))
@battle.pbDisplay(_INTL("{1} rides the wind currents!",opponent.pbThis))
else
@battle.pbDisplay(_INTL("{1}'s {2} made {3} ineffective!",
opponent.pbThis,PBAbilities.getName(opponent.ability),self.name))
end
return true
end
Phantom
Effect: Evasion scales higher against slower foes.
Notes: This boosts the user's evasion if their speed stat is significantly higher than the opponent's. If the user has double the opponent's speed or more, the user's base evasion is doubled. If the user's speed is at least 50% greater than the opponent's, evasion is increased by 50%. If the user's speed is at least 25% greater than the opponent's, evasion is increased by 25%.
In PokeBattle_Move, find the code for the Snow Cloak ability, and paste this below it:
Code:
#=========================================================================
# Custom Ability - Phantom
#=========================================================================
if opponent.hasWorkingAbility(:PHANTOM)
if opponent.speed>=(attacker.speed*2)
evasion*=2
elsif opponent.speed>=(attacker.speed*1.5)
evasion*=1.5
elsif opponent.speed>=(attacker.speed*1.25)
evasion*=1.25
end
end
#=========================================================================
Mutate
Effect: The user changes forms with certain moves.
Notes: This ability is coded to exclusively work with Deoxys. This allows Deoxys to change into its various forms in battle, similar to how Aegislash changes between forms.
This is how it works:
Defense Forme
Deoxys will mutate into its Defense Forme whenever any of the following "tank" moves are selected:
Recover, Spikes, Amnesia, Iron Defense, Stealth Rock, Calm Mind, Cosmic Power, Wonder Room, Trick Room, Rest, Magic Coat, Mirror Coat, Safeguard, Protect, Reflect, Light Screen
Speed Forme
Deoxys will mutate into its Speed Forme whenever any of the following "trickster" moves are selected:
Taunt, Pursuit, Snatch, Double Team, Swift, Agility, Extreme Speed, Substitute, Knock Off, Trick, Ally Switch
Attack Forme
Deoxys will mutate into its Attack Forme whenever any offensive move not listed above is selected.
Normal Forme
Deoxys will revert into its Normal Forme whenever any move not listed above is selected.
Example Images:
Spoiler:
Installation:
Spoiler:
In PokeBattle_Battler, find the code for Stance Change ability, and paste this below that:
Code:
#===========================================================================
# Custom Ability - Mutate
#===========================================================================
if hasWorkingAbility(:MUTATE) && isConst?(species,PBSpecies,:DEOXYS) &&
!@effects[PBEffects::Transform]
# Defense Forme
if (isConst?(thismove.id,PBMoves,:RECOVER) ||
isConst?(thismove.id,PBMoves,:SPIKES) ||
isConst?(thismove.id,PBMoves,:AMNESIA) ||
isConst?(thismove.id,PBMoves,:IRONDEFENSE) ||
isConst?(thismove.id,PBMoves,:STEALTHROCK) ||
isConst?(thismove.id,PBMoves,:CALMMIND) ||
isConst?(thismove.id,PBMoves,:COSMICPOWER) ||
isConst?(thismove.id,PBMoves,:WONDERROOM) ||
isConst?(thismove.id,PBMoves,:TRICKROOM) ||
isConst?(thismove.id,PBMoves,:REST) ||
isConst?(thismove.id,PBMoves,:MAGICCOAT) ||
isConst?(thismove.id,PBMoves,:MIRRORCOAT) ||
isConst?(thismove.id,PBMoves,:SAFEGUARD) ||
isConst?(thismove.id,PBMoves,:PROTECT) ||
isConst?(thismove.id,PBMoves,:REFLECT) ||
isConst?(thismove.id,PBMoves,:LIGHTSCREEN)) && self.form!=2
self.form=2
pbUpdate(true)
@battle.scene.pbChangePokemon(self,@pokemon)
@battle.pbDisplay(_INTL("{1} mutated into Defense Forme!",pbThis))
PBDebug.log("[Form changed] #{pbThis} changed to Defense Forme")
# Speed Forme
elsif (isConst?(thismove.id,PBMoves,:TAUNT) ||
isConst?(thismove.id,PBMoves,:PURSUIT) ||
isConst?(thismove.id,PBMoves,:SNATCH) ||
isConst?(thismove.id,PBMoves,:DOUBLETEAM) ||
isConst?(thismove.id,PBMoves,:SWIFT) ||
isConst?(thismove.id,PBMoves,:AGILITY) ||
isConst?(thismove.id,PBMoves,:EXTREMESPEED) ||
isConst?(thismove.id,PBMoves,:SUBSTITUTE) ||
isConst?(thismove.id,PBMoves,:KNOCKOFF) ||
isConst?(thismove.id,PBMoves,:TRICK) ||
isConst?(thismove.id,PBMoves,:ALLYSWITCH)) && self.form!=3
self.form=3
pbUpdate(true)
@battle.scene.pbChangePokemon(self,@pokemon)
@battle.pbDisplay(_INTL("{1} mutated into Speed Forme!",pbThis))
PBDebug.log("[Form changed] #{pbThis} changed to Speed Forme")
# Attack Forme
elsif thismove.pbIsDamaging? && self.form!=1
self.form=1
pbUpdate(true)
@battle.scene.pbChangePokemon(self,@pokemon)
@battle.pbDisplay(_INTL("{1} mutated into Attack Forme!",pbThis))
PBDebug.log("[Form changed] #{pbThis} changed to Attack Forme")
# Normal Forme
else
if self.form!=0
self.form=0
pbUpdate(true)
@battle.scene.pbChangePokemon(self,@pokemon)
@battle.pbDisplay(_INTL("{1} reverted into Normal Forme!",pbThis))
PBDebug.log("[Form changed] #{pbThis} changed to Normal Forme")
end
end
end
#===========================================================================
2) It would also be a good idea to add Mutate to the list of exceptions in various places in the script to prevent the ability from being copied or swapped and such. Just CTRL+F Stance Change and add this ability in the same places.
Remember to add any of the above abilities to the abilities PBS file
Code:
XXX,SPELLCASTER,Spellcaster,"Powers up the user's special elemental moves."
XXX,CANNONFIRE,Cannon Fire,"Powers up the user's bomb and blast attacks."
XXX,HIGHPITCHED,High Pitched,"Powers up the user's Sound-based moves."
XXX,ECHOLOCK,Echo Lock,"The user's sound-based moves never miss."
XXX,INFLATION,Inflation,"Air intake expands the body, boosting defense."
XXX,WINDRIDER,Wind Rider,"Boosts speed when struck with strong winds."
XXX,IRONHIDE,Iron Hide,"Resists contact moves, but Water reduces speed."
XXX,PHANTOM,Phantom,"Evasion scales higher against slower foes."
XXX,MUTATE,Mutate,"The user changes forms with certain moves."
One more addition I've been meaning to get around to.
I've always found it particularly irritating in Pokemon games how certain airborne species are treated. Pokemon like Beedrill, who are Bug/Poison are susceptible to Ground moves, despite the fact that it's clearly flying. But because it lacks the typing and Levitate, it can still be hit by Earthquake and such. Not only that, but Pokemon like Flygon, who is a viable candidate for plenty of more interesting abilities, is shackled with Levitate and unable to ever get anything more interesting. I've decided to finally change this.
This isn't an Ability exactly, but something i'm calling an "Inherent Trait" that airborne Pokemon share that functions identically to Levitate, but without taking up the Ability slot. This particular trait is called Natural Flight.
The following guidelines were applied to decide which Pokemon should be eligible for Natural Flight:
Spoiler:
If the Pokemon has wings, and have been seen to regularly use them for locomotion despite lacking the Flying type.
Examples: Beedrill, Venomoth, Flygon, Latios, Cutiefly
If the Pokemon has the Flying type, but loses it upon changing forms (yet still retains their wings/ability to fly).
Examples: Mega Charizard X, Mega Altaria
If the Pokemon has the Levitate ability in the main series, but it would make no logical sense how the Pokemon could move around or even hold itself up if the ability was suppressed.
Examples: Gastly, Solrock, Chimecho, Bronzor, Cryogonal
If the Pokemon is shown to be capable of traveling in the air as its primary form of locomotion (whether by flying, levitating, hovering, drifting on air currents, ignoring by gravity, etc), AND it lacks the proper body type/limbs/ability necessary to sensibly travel by land.
Examples: Magnemite, Shedinja, Shuppet, Beldum, Klink
If the Pokemon has the necessary limbs and ability to travel by land, but don't make much sense doing so as their primary mode of locomotion (whether because their limbs are too inadequate, or because their behavior doesn't permit it, or because they would look too awkward doing so, etc), and are shown to primarily move by air.
Examples: Volbeat, Mew, Munna, Uxie, Pumpkaboo
If the Pokemon could sensibly travel on land, but its primary gimmick or standout feature of its design is its ability to fly or hover in some fashion.
Examples: Alolan Raichu, Mega Mewtwo Y, Giratina (Origin Forme), Kartana, Meloetta (Aria Forme)
The following guidelines were applied to decide which Pokemon should NOT be eligible for Natural Flight:
Spoiler:
If the Pokemon already has the Flying type.
If the Pokemon has the Levitate ability in the main series, but could feasibly still stand, move, or function if the ability was suppressed (have limbs of some kind to rest on or move with, even if they're rather basic), and they don't already fit into categories 1-4 above once Levitate is suppressed.
Examples: Baltoy, Claydol, Chingling, Eelektross
If the Pokemon is an aquatic species that is shown to be airborne simply for animation purposes (surfing, swimming, drifting, etc), but could not actually travel like that out of water in a way that makes sense.
Examples: Dewgong, Cloyster, Clawitzer, mostly every fish Pokemon
If the Pokemon is a non-aquatic species that is shown to be airborne in its animation, but only due to some specific circumstances of its design that does not imply flight. Perhaps because it's meant to appear as if its hanging from a wall or a tree, or something of that nature.
Examples: Weepinbell, Burmy, Wormadam, Carnivine, Ferrothorn
If the Pokemon is merely seen to be capable of short bursts of flight, but makes perfectly logical sense moving on the ground, and has all the required limbs or abilities to sensibly travel on land without requiring flight, and there's no stand out feature of its design that would be misrepresented by not making the Pokemon constantly airborne.
Examples: Heracross, Garchomp, Mewtwo, Gengar, Banette
If the Pokemon makes visual sense to be airborne, but not being grounded would break part of its primary gameplay function.
Examples: Tapu Koko, Tapu Bulu, Tapu Fini, Tapu Lele
With all that out of the way, here are all the Pokemon that I feel make sense having Natural Flight:
Spoiler:
Mega Charizard X
Beedrill
Alolan Raichu
Venomoth
Geodude
Magnemite
Magneton
Gastly
Haunter
Koffing
Weezing
Porygon
Mega Mewtwo Y
Mew
Misdreavus
Unown
Porygon 2
Celebi
Dustox
Shedinja
Vibrava
Flygon
Lunatone
Solrock
Castform
Shuppet
Duskull
Chimecho
Mega Altaria
Glalie
Beldum
Metang
Mega Metagross
Latias
Latios
Jirachi
Mismagius
Bronzor
Bronzong
Magnezone
Porygon-Z
Dusknoir
Froslass
Rotom
Uxie
Mesprit
Azelf
Giratina - Origin Forme
Cresselia
Darkrai
Munna
Musharna
Cottonee
Petilil
Yamask
Solosis
Duosion
Reuniclus
Vanillite
Vanillish
Vanilluxe
Escavalier
Klink
Klang
Klinklang
Lampent
Chandelure
Cryogonal
Hydreigon
Volcarona
Meloetta - Aria Forme
Flabebe
Floette
Honedge
Doublade
Aegislash
Spritzee
Carbink
Klefki
Phantump
Pumpkaboo
Diancie
Hoopa - Confined
Vikavolt
Cutiefly
Ribombee
Comfey
Cosmog
Cosmoem
Lunala
Nihilego
Kartana
Necrozma, Dawn Wings Necrozma, Ultra Necrozma
Poipole
Naganadel
Details
Natural Flight flags the Pokemon as "airborne", and thus they are immune to every ground-based effect that a Flying-type or Levitate Pokemon would be. However, there are some differences. Since Natural Flight is neither a type OR ability, it isn't vulnerable to things like Soak or Gastro Acid, which would negate the user's type/ability. However, Natural Flight is still affected by things like Gravity and Smack Down, which removes Ground immunity. Natural Flight isn't considered an effect either, so it cannot be Baton Passed like something like Magnet Rise could be.
Installation
Spoiler:
1) In PokeBattle_Battler, find the line "def isAirborne?(ignoreability=false)", and paste this above it:
Code:
#=============================================================================
# Inherent Trait - Natural Flight
#=============================================================================
# The master list of all eligible Pokemon species/forms.
#=============================================================================
def isNaturalFlyer?
if (
# Gen 1
(isConst?(self.species,PBSpecies,:CHARIZARD) && self.form==1) || # Mega Charizard X
isConst?(self.species,PBSpecies,:BEEDRILL) ||
(isConst?(self.species,PBSpecies,:RAICHU) && self.form==1) || # Alolan Raichu
isConst?(self.species,PBSpecies,:VENOMOTH) ||
isConst?(self.species,PBSpecies,:ABRA) ||
(isConst?(self.species,PBSpecies,:ALAKAZAM) && self.form==1) || # Mega Alakazam
isConst?(self.species,PBSpecies,:GEODUDE) || # All forms
isConst?(self.species,PBSpecies,:MAGNEMITE) ||
isConst?(self.species,PBSpecies,:MAGNETON) ||
isConst?(self.species,PBSpecies,:GASTLY) ||
isConst?(self.species,PBSpecies,:HAUNTER) ||
isConst?(self.species,PBSpecies,:KOFFING) ||
isConst?(self.species,PBSpecies,:WEEZING) ||
isConst?(self.species,PBSpecies,:PORYGON) ||
(isConst?(self.species,PBSpecies,:MEWTWO) && self.form==2) || # Mega Mewtwo Y
isConst?(self.species,PBSpecies,:MEW) ||
# Gen 2
isConst?(self.species,PBSpecies,:MISDREAVUS) ||
isConst?(self.species,PBSpecies,:UNOWN) || # All forms
isConst?(self.species,PBSpecies,:PORYGON2) ||
isConst?(self.species,PBSpecies,:CELEBI) ||
# Gen 3
isConst?(self.species,PBSpecies,:DUSTOX) ||
isConst?(self.species,PBSpecies,:SHEDINJA) ||
isConst?(self.species,PBSpecies,:VOLBEAT) ||
isConst?(self.species,PBSpecies,:ILLUMISE) ||
isConst?(self.species,PBSpecies,:VIBRAVA) ||
isConst?(self.species,PBSpecies,:FLYGON) ||
isConst?(self.species,PBSpecies,:LUNATONE) ||
isConst?(self.species,PBSpecies,:SOLROCK) ||
isConst?(self.species,PBSpecies,:CASTFORM) || # All Forms
isConst?(self.species,PBSpecies,:SHUPPET) ||
isConst?(self.species,PBSpecies,:DUSKULL) ||
(isConst?(self.species,PBSpecies,:ALTARIA) && self.form==1) || # Mega Altaria
isConst?(self.species,PBSpecies,:GLALIE) || # All Forms
isConst?(self.species,PBSpecies,:BELDUM) ||
isConst?(self.species,PBSpecies,:METANG) ||
(isConst?(self.species,PBSpecies,:METAGROSS) && self.form==1) || # Mega Metagross
isConst?(self.species,PBSpecies,:LATIAS) || # All Forms
isConst?(self.species,PBSpecies,:LATIOS) || # All Forms
isConst?(self.species,PBSpecies,:JIRACHI) ||
# Gen 4
isConst?(self.species,PBSpecies,:MISMAGIUS) ||
isConst?(self.species,PBSpecies,:BRONZOR) ||
isConst?(self.species,PBSpecies,:BRONZONG) ||
isConst?(self.species,PBSpecies,:MAGNEZONE) ||
isConst?(self.species,PBSpecies,:PORYGONZ) ||
isConst?(self.species,PBSpecies,:DUSKNOIR) ||
isConst?(self.species,PBSpecies,:FROSLASS) ||
isConst?(self.species,PBSpecies,:ROTOM) || # All Forms
isConst?(self.species,PBSpecies,:UXIE) ||
isConst?(self.species,PBSpecies,:MESPRIT) ||
isConst?(self.species,PBSpecies,:AZELF) ||
(isConst?(self.species,PBSpecies,:GIRATINA) && self.form==1) || # Origin Forme
isConst?(self.species,PBSpecies,:CRESSELIA) ||
isConst?(self.species,PBSpecies,:DARKRAI) ||
# Gen 5
isConst?(self.species,PBSpecies,:MUNNA) ||
isConst?(self.species,PBSpecies,:MUSHARNA) ||
isConst?(self.species,PBSpecies,:COTTONEE) ||
isConst?(self.species,PBSpecies,:PETILIL) ||
isConst?(self.species,PBSpecies,:YAMASK) ||
isConst?(self.species,PBSpecies,:SOLOSIS) ||
isConst?(self.species,PBSpecies,:DUOSION) ||
isConst?(self.species,PBSpecies,:REUNICLUS) ||
isConst?(self.species,PBSpecies,:VANILLITE) ||
isConst?(self.species,PBSpecies,:VANILLISH) ||
isConst?(self.species,PBSpecies,:VANILLUXE) ||
isConst?(self.species,PBSpecies,:ESCAVALIER) ||
isConst?(self.species,PBSpecies,:KLINK) ||
isConst?(self.species,PBSpecies,:KLANG) ||
isConst?(self.species,PBSpecies,:KLINKLANG) ||
isConst?(self.species,PBSpecies,:LAMPENT) ||
isConst?(self.species,PBSpecies,:CHANDELURE) ||
isConst?(self.species,PBSpecies,:CRYOGONAL) ||
isConst?(self.species,PBSpecies,:HYDREIGON) ||
isConst?(self.species,PBSpecies,:VOLCARONA) ||
(isConst?(self.species,PBSpecies,:MELOETTA) && self.form==0) || # Aria Forme
# Gen 6
isConst?(self.species,PBSpecies,:FLABEBE) || # All Forms
isConst?(self.species,PBSpecies,:FLOETTE) || # All Forms
isConst?(self.species,PBSpecies,:HONEDGE) ||
isConst?(self.species,PBSpecies,:DOUBLADE) ||
isConst?(self.species,PBSpecies,:AEGISLASH) || # All Forms
isConst?(self.species,PBSpecies,:SPRITZEE) ||
isConst?(self.species,PBSpecies,:CARBINK) ||
isConst?(self.species,PBSpecies,:KLEFKI) ||
isConst?(self.species,PBSpecies,:PHANTUMP) ||
isConst?(self.species,PBSpecies,:PUMPKABOO) || # All Forms
isConst?(self.species,PBSpecies,:DIANCIE) || # All Forms
(isConst?(self.species,PBSpecies,:HOOPA) && self.form==0) || # Hoopa Confined
# Gen 7
isConst?(self.species,PBSpecies,:VIKAVOLT) ||
isConst?(self.species,PBSpecies,:CUTIEFLY) ||
isConst?(self.species,PBSpecies,:RIBOMBEE) ||
isConst?(self.species,PBSpecies,:COMFEY) ||
isConst?(self.species,PBSpecies,:COSMOG) ||
isConst?(self.species,PBSpecies,:COSMOEM) ||
isConst?(self.species,PBSpecies,:LUNALA) ||
isConst?(self.species,PBSpecies,:NIHILEGO) ||
isConst?(self.species,PBSpecies,:KARTANA) ||
(isConst?(self.species,PBSpecies,:NECROZMA) && self.form!=1) || #All forms but Dusk Mane
isConst?(self.species,PBSpecies,:POIPOLE) ||
isConst?(self.species,PBSpecies,:NAGANADEL)
)
return true
end
end
#=============================================================================
2) Next, right below the line "return true if self.hasWorkingAbility(:LEVITATE) && !ignoreability", paste this:
Code:
#===========================================================================
# Inherent Trait - Natural Flight
#===========================================================================
# Makes all Natural Flight species considered airborne
#===========================================================================
return true if self.isNaturalFlyer?
#===========================================================================
3) Now find the line "if target.hasWorkingItem(:AIRBALLOON)", and paste this right above it:
Code:
#=======================================================================
# Inherent Trait - Natural Flight
#=======================================================================
# Ground immunity message for Pokemon with Natural Flight
#=======================================================================
if !user.hasMoldBreaker && target.isNaturalFlyer?
@battle.pbDisplay(_INTL("{1} avoids Ground moves due to its natural flight!",target.pbThis))
return false
end
#=======================================================================
4) Now go to PokeBattle_MoveEffects, and find the line "opponent.hasWorkingAbility(:LEVITATE) && !opponent.effects[PBEffects::SmackDown]" and paste this right below it:
5) In PokeBattle_AI, find every instance of "hasWorkingAbility(:LEVITATE)" and paste the appropriate instance of "isNaturalFlyer?" beneath it. Just use what's written for Levitate as a guide.
Where does this leave Levitate?
The Levitate ability still has a niche. Because there are some Pokemon that do not make sense being intrinsically capable of constant flight by design, but have the potential to use their powers to fly. These are the Pokemon that I think fall into this niche, and would actually make sense having Levitate as an ability, rather than having Natural Flight as an inherent trait.
Really interesting idea, I like how you did it and I share your opinion on the absurdity of certain pokemons being hit by earthquake.
However, the game is balanced this way, so you might want to give some disadvantaged to these pokemons. For example magnezone is extremely vulnerable to ground and making this weakness a strength is clearly making it an overpowered poke. Especially because it learns magnet rise to do so, so I guess it is on the ground most of the time and not after using magnet rise. For other pokes like beedrill, maybe your add should work like adding a third type which is flying and so go with the weaknesses flying type has. Because it doesn't make sense neither that beedrill is not weak to ice where icy moves should clearly hinder it to moving its wings properly.
Just ideas but great work and thank you for all the content, I learned a lot reading your abilities
Really interesting idea, I like how you did it and I share your opinion on the absurdity of certain pokemons being hit by earthquake.
However, the game is balanced this way, so you might want to give some disadvantaged to these pokemons. For example magnezone is extremely vulnerable to ground and making this weakness a strength is clearly making it an overpowered poke. Especially because it learns magnet rise to do so, so I guess it is on the ground most of the time and not after using magnet rise. For other pokes like beedrill, maybe your add should work like adding a third type which is flying and so go with the weaknesses flying type has. Because it doesn't make sense neither that beedrill is not weak to ice where icy moves should clearly hinder it to moving its wings properly.
Just ideas but great work and thank you for all the content, I learned a lot reading your abilities
Sure, I'm totally aware that this outright breaks certain Pokemon. As do some of the other Abilities I've made. My goal isn't necessarily balance, but to just get general ideas out there that people can play with. It's up to those who end up using these ideas to balance them. Like with your example with Magnezone, yes, it's pretty busted if it's allowed to have this. But, there's no reason why you couldn't just nerf Magnezone's stats or something to compensate for this huge buff. I'm not really concerning myself with going through every individual Pokemon and balancing them, however, since I don't know how each person is handling their game. Game balance is on the game designers.
As for typing issues, that doesn't necessarily bother me. Beedrill still had wings and was visually flying around way before I created this mechanic, and it wasn't weak to ice then either. There's plenty of winged Pokemon that aren't weak to Ice. It don't really see that as an issue, just a design quirk that existed prior to me even making this.
Regardless, I'm glad you find some value in what I've created, and I hope it's given you some ideas of your own.
I've been on a roll lately, and have whipped up another batch of abilities. Some of these are among my most intricate abilities yet, and have some really fun and complex effects that can make for some pretty interesting battles. I'll probably give this a break for a while after posting these, though. It's been taking up a lot of my time recently. Enjoy!
Ability: Delivery
Effect: Passes a held item to a foe upon entry.
Notes: When the user enters the battlefield, it immediately passes its held item to the first viable opponent. This ability won't trigger if all opponents are already holding an item.
Installation:
In PokeBattle_Battler, add this above the line # Intimidate:
Code:
#===========================================================================
# Custom Ability - Delivery
#===========================================================================
if self.hasWorkingAbility(:DELIVERY) && onactive
if self.item>0
if pbOpposing1 && !pbOpposing1.fainted? && pbOpposing1.item==0 &&
[email protected](pbOpposing1,pbOpposing1.item) &&
[email protected](self,self.item)
@battle.pbDisplay(_INTL("{1}'s {2} was delivered to {3}!",
pbThis,PBItems.getName(self.item),pbOpposing1.pbThis(true)))
pbOpposing1.item=self.item
self.item=0
pbBerryCureCheck
elsif pbOpposing2 && !pbOpposing2.fainted? && pbOpposing2.item==0 &&
[email protected](pbOpposing2,pbOpposing2.item) &&
[email protected](self,self.item)
@battle.pbDisplay(_INTL("{1}'s {2} was delivered to {3}!",
pbThis,PBItems.getName(self.item),pbOpposing2.pbThis(true)))
pbOpposing2.item=self.item
self.item=0
pbBerryCureCheck
end
end
end
#===========================================================================
Ability: Matriarchy
Effect: Boosts damage when there are female allies.
Notes: In a double battle, if both the user and its partner are female, both Pokemon deal 50% more damage.
Installation:
In PokeBattle_Move, add this above the code for Thick Club:
Code:
#===========================================================================
# Custom Ability - Matriarchy
#===========================================================================
if (attacker.hasWorkingAbility(:MATRIARCHY) ||
attacker.pbPartner.hasWorkingAbility(:MATRIARCHY)) &&
(attacker.gender==1 && attacker.pbPartner.gender==1)
atkmult=(atkmult*1.5).round
end
#===========================================================================
Ability: Underdog
Effect: Boosts damage when at a disadvantage.
Notes: The user gets varying damage boosts depending on certain conditions.
Damage boosts:
If the user's stats aren't boosted, but the opponent's are:
If the opponent has 6 or more stat boosts, then the user deals 50% more damage.
If the opponent has 3 or more stat boosts, then the user deals 20% more damage.
If the opponent has at least one stat boost, then the user deals 10% more damage.
If the opponent is 10 or more levels higher than the user, the user deals 50% more damage.
If the opponent has at least 50% HP remaining, and the user's HP is low (1/8th or less), then the user deals 30% more damage.
If the user suffers from a status condition while the opponent does not, then the user deals 20% more damage.
All of these damage boosts will stack, meaning the Underdog user has the potential to deal a maximum 150% bonus damage if every possible condition is met (opponent has 6+ stat boosts, is 10+ levels higher, and is in healthy condition while the user is low on HP and has a status condition).
Damage with Underdog (opponent 10+ levels higher)
+50% Boost
Damage when user has a status effect
+20% boost (stacks with above)
Damage when user's HP is low & opponent healthy
+30% boost (stacks with above)
Damage when opponent has 6+ stat boosts (stacked with previous)
+50% boost (stacks with above)
Installation:
In PokeBattle_Move, add this above the code for Thick Club:
Code:
#===========================================================================
# Custom Ability - Underdog
#===========================================================================
if attacker.hasWorkingAbility(:UNDERDOG)
for i in [PBStats::ATTACK,PBStats::DEFENSE,
PBStats::SPEED,PBStats::SPATK,PBStats::SPDEF,
PBStats::EVASION,PBStats::ACCURACY]
# When the user as no stat boosts...
if attacker.stages[i]<1
# Damage +50% if opponent has 6x or more stat boosts
if opponent.stages[i]>=6
atkmult=(atkmult*1.5).round
# Damage +20% if opponent has 3x or more stat boosts
elsif opponent.stages[i]>=3
atkmult=(atkmult*1.2).round
# Damage +10% if opponent has 1 or more stat boosts
elsif opponent.stages[i]>0
atkmult=(atkmult*1.1).round
end
end
end
# Damage +50% if opponent is 10+ lvls higher
if opponent.level>=attacker.level+10
atkmult=(atkmult*1.5).round
end
# Damage +30% if user is low on HP and opponent is healthy
if attacker.hp<=attacker.totalhp/8 && opponent.hp>=opponent.totalhp/2
atkmult=(atkmult*1.3).round
end
# Damage +20% if user is statused and opponent is not
if attacker.status>0 && opponent.status==0
atkmult=(atkmult*1.2).round
end
end
#===========================================================================
Ability: Kaboom!
Effect: The user detonates after its countdown reaches 0.
Notes: When the user enters the battlefield, a timer is set at 3. With each passing turn, this timer is reduced by 1 at the end of the turn. Once the timer reaches 0, the user will detonate, creating a deadly explosion that OHKO's every Pokemon on the field, including itself. The damage from this effect is typeless, and cannot be evaded. However, there are a few counters to this effect.
Kaboom! counters:
Pokemon with the Damp ability will prevent the user from detonating after the timer reaches 0. The user will have to be switched out to reset the timer.
Pokemon who are out of range due to moves like Fly and Dig will avoid damage from Kaboom!.
Pokemon that used a Protect move will negate damage from Kaboom!. If Wide Guard or Mat Block was used, both Pokemon will be protected. You can even use this to protect your own Pokemon from the blast, however the user of Kaboom! will always be KO'd regardless.
Pokemon with the Sturdy ability negate all damage from Kaboom!.
Pokemon behind a Substitute will avoid being KO'd. However, the Substitute will always be destroyed, regardless of its HP.
Pokemon using the move Endure, or holding a Focus Sash/Band may survive the blast with 1 HP.
Pokemon with the Nine Lives ability (if you installed it) will survive the blast with 1 HP. This counts as a OHKO effect, so this will consume 7 lives (more on this in the next ability below)
Note that even if one or more of these effects are in play, the Kaboom! user will always be KO'd regardless (except, of course, if the detonation was prevented with Damp).
Countdown after final turn (all Pokemon are KO'd after this message):
Installation:
Spoiler:
1) In PokeBattle_Battler, paste this above the line # Imposter:
Code:
#===========================================================================
# Custom Ability - Kaboom!
#===========================================================================
if self.hasWorkingAbility(:KABOOM) && onactive
@battle.pbDisplay(_INTL("{1}'s timer has been set!",pbThis))
end
2) In PokeBattle_Battle, paste this near the bottom, right below the section of code for Sticky Barb:
Code:
#=========================================================================
# Custom Ability - Kaboom!
#=========================================================================
if i.hasWorkingAbility(:KABOOM)
if i.turncount==1
pbDisplay(_INTL("...3!"))
elsif i.turncount==2
pbDisplay(_INTL("...2!"))
elsif i.turncount==3
pbDisplay(_INTL("...1!!"))
end
end
#=========================================================================
3) In PokeBattle_Battle, look for the section under def pbAttackPhase, and paste all of this above the very last instance of "break" before the def ends:
Code:
#=========================================================================
# Custom Ability - Kaboom!
#=========================================================================
for i in priority
if i.hasWorkingAbility(:KABOOM) && i.turncount==4
pbDisplay(_INTL("{1}'s countdown reached 0!",i.pbThis))
# Prevented with Damp
bearer=i.pbPartner if i.pbPartner.hasWorkingAbility(:DAMP)
bearer=i.pbOpposing1 if i.pbOpposing1.hasWorkingAbility(:DAMP)
bearer=i.pbOpposing2 if i.pbOpposing2.hasWorkingAbility(:DAMP)
if bearer!=nil
pbDisplay(_INTL("{1}'s {2} prevents {3} from detonating!",
bearer.pbThis,PBAbilities.getName(bearer.ability),i.pbThis(true)))
else
pbDisplay(_INTL("...BOOM!",i.pbThis))
@scene.pbDamageAnimation(i,0)
i.pbReduceHP(i.hp,true)
i.pbFaint
# Avoided when out of range
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
for j in 0...4
next if !@battlers[j] || @battlers[j].fainted?
# Avoided when out of range
if blacklist.include?(PBMoveData.new(@battlers[j].effects[PBEffects::TwoTurnAttack]).function)
pbDisplay(_INTL("{1} avoided the blast!",@battlers[j].pbThis))
# Blocked by Protect moves
elsif (@battlers[j].effects[PBEffects::Protect] ||
@battlers[j].effects[PBEffects::KingsShield] ||
@battlers[j].effects[PBEffects::SpikyShield]) &&
!@battlers[j].effects[PBEffects::ProtectNegation]
pbDisplay(_INTL("{1} protected itself!",@battlers[j].pbThis))
elsif @battlers[j].pbOwnSide.effects[PBEffects::WideGuard] &&
!@battlers[j].effects[PBEffects::ProtectNegation]
pbDisplay(_INTL("{1} was protected by Wide Guard!",@battlers[j].pbThis))
elsif @battlers[j].pbOwnSide.effects[PBEffects::MatBlock] &&
!@battlers[j].effects[PBEffects::ProtectNegation]
pbDisplay(_INTL("{1}'s {2} was blocked by the kicked-up mat!",
i.pbThis,PBAbilities.getName(i.ability)))
# Blocked by Sturdy
elsif @battlers[j].hasWorkingAbility(:STURDY)
pbDisplay(_INTL("{1} was protected by {2}!",@battlers[j].pbThis,
PBAbilities.getName(@battlers[j].ability)))
# Negated by Substitute
elsif @battlers[j].effects[PBEffects::Substitute]>0
@battlers[j].effects[PBEffects::Substitute]=0
@battlers[j].damagestate.substitute=true
@scene.pbDamageAnimation(@battlers[j],0)
pbDisplay(_INTL("The substitute took damage for {1}!",@battlers[j].pbThis))
pbDisplay(_INTL("{1}'s substitute faded!",@battlers[j].name))
PBDebug.log("[End of effect] #{@battlers[j].pbThis}'s Substitute faded")
# Survived with Endure
elsif @battlers[j].effects[PBEffects::Endure]
@scene.pbDamageAnimation(@battlers[j],0)
@battlers[j].damagestate.endured=true
@battlers[j].pbReduceHP(i.pbOpposing1.hp-1,true)
PBDebug.log("[Lingering effect triggered] #{@battlers[j].pbThis}'s Endure")
# Survived with Focus Sash
elsif @battlers[j].hasWorkingItem(:FOCUSSASH) && @battlers[j].hp==@battlers[j].totalhp
@battlers[j].damagestate.focussash=true
@scene.pbDamageAnimation(@battlers[j],0)
@battlers[j].pbReduceHP(i.pbOpposing1.hp-1,true)
@battlers[j].pbConsumeItem
pbDisplay(_INTL("{1} hung on using its Focus Sash!",@battlers[j].pbThis))
# Survived with Focus Band
elsif @battlers[j].hasWorkingItem(:FOCUSBAND) && pbRandom(10)==0
@battlers[j].damagestate.focusband=true
@scene.pbDamageAnimation(@battlers[j],0)
@battlers[j].pbReduceHP(@battlers[j].hp-1,true)
pbDisplay(_INTL("{1} hung on using its Focus Band!",@battlers[j].pbThis))
# Add Nine Lives here
else
@scene.pbDamageAnimation(@battlers[j],0)
@battlers[j].pbReduceHP(@battlers[j].hp,true)
@battlers[j].pbFaint
end
end
end
break if advance
end
end
#=========================================================================
NOTE: If you happen to have my Pokemon Birthsigns scripts installed, you would paste this code in the appropriate spot in the Zodiac Powers script instead.
Ability: Nine Lives
Effect: The user may use up some lives to survive a KO.
Notes: The user will survive attacks that would otherwise KO it with 1 HP remaining, as long as it has at least one "life" left. The user always starts out with 9 lives at the start of each battle, but lives will be consumed each time the ability kicks in to save the user from being KO'd. The Pokemon's life counter may be reset by switching out. The user must have more than 1 HP when hit to survive the attack, otherwise this ability will not activate. This ability will not save Pokemon from being KO'd by indirect damage, only attacking moves or moves that instantly set the Pokemon's HP to zero (OHKO).
Life costs:
1 Life: If the user is KO'd by an attack when their HP is below 25% (but more than 1 HP), one life will be consumed to survive the hit.
3 Lives: If the user is KO'd by an attack when their HP is below 50%, up to three lives will be consumed to survive the hit.
4 Lives: If the user is KO'd by the effects of Perish Song or Destiny Bond, up to four lives will be consumed to survive the effects.
5 Lives: If the user is KO'd by an attack when their HP was above 50% (but not full), up to five lives will be consumed to survive the hit.
6 Lives: If the user is KO'd by a single attack when it was at full HP, up to six lives will be consumed to survive the hit.
7 Lives: If the user is hit by a OHKO move, up to seven lives will be consumed to survive the hit.
Note that the ability will still activate as long as the user has at least one life left, even if its less than the number of lives needed to survive an attack. For example, if you only have four lives left and are hit by a OHKO attack which consumes seven lives, you will still survive the attack by consuming all of your remaining four lives.
6) Further down still, find the line # Imposter, and you can post this above it:
Code:
#===========================================================================
# Custom Ability - Nine Lives
#===========================================================================
if self.hasWorkingAbility(:NINELIVES) && onactive && lives>0
@battle.pbDisplay(_INTL("{1} has {2} lives to spare!",pbThis,lives))
end
#===========================================================================
7) Now go down to the code for Destiny Bond, and find this:
Code:
user.pbReduceHP(user.hp)
user.pbFaint # no return
@battle.pbJudgeCheckpoint(user)
And replace it with this:
Code:
#=======================================================================
# Custom Ability - Nine Lives (Destiny Bond)
#=======================================================================
if user.hasWorkingAbility(:NINELIVES) && user.hp>1 && user.lives>0
user.damagestate.ninelives=true
user.lives-=4
user.pbReduceHP(user.hp-1)
speech=("life") if user.lives==1
speech=("lives") if user.lives>1
@battle.pbDisplay(_INTL("{1} hung on by using up some of its nine lives!",user.pbThis))
if user.lives<=0
@battle.pbDisplay(_INTL("{1} has no more lives left!",user.pbThis))
else
@battle.pbDisplay(_INTL("{1} only has {2} {3} remaining!",user.pbThis,user.lives,speech))
end
else
user.pbReduceHP(user.hp)
user.pbFaint # no return
@battle.pbJudgeCheckpoint(user)
end
#=======================================================================
8) Now move on to PokeBattle_Move and find the line elsif damage==opponent.totalhp, and paste this right above it:
Code:
#=======================================================================
# Custom Ability - Nine Lives (Normal KO)
#=======================================================================
elsif opponent.hasWorkingAbility(:NINELIVES) && !attacker.hasMoldBreaker &&
opponent.hp>1 && opponent.lives>0
opponent.damagestate.ninelives=true
if damage>=opponent.totalhp
opponent.lives-=6
elsif damage>opponent.totalhp/2
opponent.lives-=5
elsif damage>opponent.totalhp/4
opponent.lives-=3
else
opponent.lives-=1
end
damage=damage-1
PBDebug.log("[Ability triggered] #{opponent.pbThis}'s Nine Lives")
#=======================================================================
9) Go down and find the line elsif opponent.damagestate.focussash, and paste this right above:
Code:
#===========================================================================
# Custom Ability - Nine Lives
#===========================================================================
elsif opponent.damagestate.ninelives
speech=("life") if opponent.lives==1
speech=("lives") if opponent.lives>1
@battle.pbDisplay(_INTL("{1} hung on by using up some of its nine lives!",opponent.pbThis))
if opponent.lives<=0
@battle.pbDisplay(_INTL("{1} has no more lives left!",opponent.pbThis))
else
@battle.pbDisplay(_INTL("{1} only has {2} {3} remaining!",opponent.pbThis,opponent.lives,speech))
end
#===========================================================================
10) Now in PokeBattle_MoveEffects, go down until you find the section for OHKO moves.
Find the line here starting with damage=pbEffectFixedDamage and replace that whole line with all of this:
Code:
#===========================================================================
# Custom Ability - Nine Lives (OHKO)
#===========================================================================
if !attacker.hasMoldBreaker && opponent.hasWorkingAbility(:NINELIVES) &&
opponent.hp>1 && opponent.lives>0
damage=pbEffectFixedDamage(opponent.totalhp-1,attacker,opponent,hitnum,alltargets,showanimation)
opponent.damagestate.ninelives=true
opponent.lives-=7
speech=("life") if opponent.lives==1
speech=("lives") if opponent.lives>1
@battle.pbDisplay(_INTL("{1} hung on by using up some of its nine lives!",opponent.pbThis))
if opponent.lives<=0
@battle.pbDisplay(_INTL("{1} has no more lives left!",opponent.pbThis))
else
@battle.pbDisplay(_INTL("{1} only has {2} {3} remaining!",opponent.pbThis,opponent.lives,speech))
end
else
damage=pbEffectFixedDamage(opponent.totalhp,attacker,opponent,hitnum,alltargets,showanimation)
end
#===========================================================================
11) Lastly, in PokeBattle_Battle, go down until you find the section under # Perish Song.
Find the line i.pbReduceHP(i.hp,true) here, and replace it with all of this:
Code:
#=====================================================================
# Custom Ability - Nine Lives (Perish Song)
#=====================================================================
if i.hasWorkingAbility(:NINELIVES) && i.hp>1 && i.lives>0
i.damagestate.ninelives=true
i.lives-=4
i.pbReduceHP(i.hp-1,true)
speech=("life") if i.lives==1
speech=("lives") if i.lives>1
pbDisplay(_INTL("{1} hung on by using up some of its nine lives!",i.pbThis))
if i.lives<=0
pbDisplay(_INTL("{1} has no more lives left!",i.pbThis))
else
pbDisplay(_INTL("{1} only has {2} {3} remaining!",i.pbThis,i.lives,speech))
end
else
i.pbReduceHP(i.hp,true)
end
#=====================================================================
Extra) If you've already installed Kaboom! and wish to add Nine Lives along with it, go into the code for Kaboom and find the line "Add Nine Lives here," and paste this there:
Code:
#=================================================================
# Custom Ability - Nine Lives (Kaboom!)
#=================================================================
# Survived with Nine Lives
elsif @battlers[j].hasWorkingAbility(:NINELIVES) &&
@battlers[j].hp>1 && @battlers[j].lives>0
@battlers[j].damagestate.ninelives=true
@battlers[j].lives-=7
@scene.pbDamageAnimation(@battlers[j],0)
@battlers[j].pbReduceHP(@battlers[j].hp-1,true)
speech=("life") if @battlers[j].lives==1
speech=("lives") if @battlers[j].lives>1
pbDisplay(_INTL("{1} hung on by using up some of its nine lives!",@battlers[j].pbThis))
if @battlers[j].lives<=0
pbDisplay(_INTL("{1} has no more lives left!",@battlers[j].pbThis))
else
pbDisplay(_INTL("{1} only has {2} {3} remaining!",@battlers[j].pbThis,
@battlers[j].lives,speech))
end
#=================================================================
Ability: Lucky 7
Effect: The user's luck kicks in every 7th turn.
Notes: Every seventh consecutive turn the user remains on the field, they are granted with seven different bonuses that are all in effect for that turn only.
Seven effects:
The user makes a Wish that will be granted by the end of the turn, restoring up to 50% of their max HP.
The user's team gains the Rainbow effect for 1 turn, doubling the odds of additional effects from moves occurring.
The user's team gains the Lucky Chant effect for 1 turn, negating the opponent's ability to land critical hits.
The user's status conditions are cured, if any.
The user's critical hit chance is boosted.
The user gains a Helping Hand and will deal 50% more damage for this turn only.
The user will Endure all incoming attacks with 1 HP remaining for this turn only.
1) In PokeBattle_Battler, find the line # Imposter and paste this right above it:
Code:
#===========================================================================
# Custom Ability - Lucky 7
#===========================================================================
if self.hasWorkingAbility(:LUCKY7) && onactive
@battle.pbDisplay(_INTL("{1} is waiting for its luck to kick in!",pbThis))
end
2) In PokeBattle_Battle, find the line # Mega Evolution and paste this above it:
Code:
#===========================================================================
# Custom Ability - Lucky 7
#===========================================================================
for i in priority
if i.hasWorkingAbility(:LUCKY7)
if i.turncount%7==0
pbDisplay(_INTL("{1} is feelin' lucky!",i.pbThis))
# Effect 1 - Wish (half user's HP, heals this turn)
if i.effects[PBEffects::Wish]<=0
pbDisplay(_INTL("{1} made a wish!",i.pbThis))
i.effects[PBEffects::Wish]=1
i.effects[PBEffects::WishAmount]=((i.totalhp+1)/2).floor
i.effects[PBEffects::WishMaker]=i.pokemonIndex
end
if i.pbOwnSide.effects[PBEffects::Rainbow]<=0 ||
i.pbOwnSide.effects[PBEffects::LuckyChant]<=0
pbDisplay(_INTL("{1}'s team is surrounded by an aura of good fortune!",i.pbThis))
# Effect 2 - Rainbow (1 turn)
if i.pbOwnSide.effects[PBEffects::Rainbow]<=0
i.pbOwnSide.effects[PBEffects::Rainbow]=1
end
# Effect 3 - Lucky Chant (1 turn)
if i.pbOwnSide.effects[PBEffects::LuckyChant]<=0
i.pbOwnSide.effects[PBEffects::LuckyChant]=1
end
end
# Effect 4 - Cures status
if i.status>0
pbDisplay(_INTL("{1}'s status condition was miraculously cured!",i.pbThis))
i.pbCureStatus(true)
i.pbCureAttract
end
# Effect 5 - Focus Energy
if i.effects[PBEffects::FocusEnergy]<=0
i.effects[PBEffects::FocusEnergy]=2
end
# Effect 6 - Helping Hand
if !i.effects[PBEffects::HelpingHand]
i.effects[PBEffects::HelpingHand]=true
end
# Effect 7 - Endure
if !i.effects[PBEffects::Endure]
i.effects[PBEffects::Endure]=true
end
pbDisplay(_INTL("{1} is ready to take on the opponent!",i.pbThis))
PBDebug.log("[Ability triggered] #{i.pbThis}'s lucked kicked in due to Lucky 7!")
end
end
end
#===========================================================================
NOTE: If you happen to have my Pokemon Birthsigns scripts installed, you would paste this code in the appropriate spot in the Zodiac Powers script instead.
Ability: Gambler
Effect: Rolls the dice each turn for random effects.
Notes: At the end of each turn, the user rolls a pair of dice and an effect is put into play depending on the number that was rolled. The effects can be both good and bad, and can completely change up the flow of a battle. This ability won't activate on turns the user spends asleep or frozen.
Dice rolls:
Roll 2: The user's current HP is halved.
Roll 3: Free turn. No effect.
Roll 4: Traps all Pokemon on the field, preventing switching or fleeing.
Roll 5: The user becomes Cursed.
Roll 6: Any stat changes for all Pokemon on the field are reset.
Roll 7: The user and its partner are fully healed, and their status is cured. Also removes several negative effects including: Curse, Confusion, Attraction, Nightmare, Mean Look, Disable, Imprison, Taunt, Torment, Gastro Acid, Leech Seed, and Heal Block.
Roll 8: All eligible Pokemon on the field are put to sleep and have the Nightmare status inflicted.
Roll 9: Cuts the Attack and Sp.Atk stats of opponents by 3 stages.
Roll 10: All eligible opponents have their ability replaced with Truant.
Roll 11: The opponents are fully healed, and their status is cured. Also removes several negative effects including: Curse, Confusion, Attraction, Nightmare, Mean Look, Disable, Imprison, Taunt, Torment, Gastro Acid, Leech Seed, and Heal Block.
Roll 12: Each of the user's stats are increased by 2 stages.
Rolling a 7 fully heals your Pokemon, and clears away harmful effects:
Installation:
Spoiler:
1) In PokeBattle_Battler, paste this above the line # Imposter:
Code:
#===========================================================================
# Custom Ability - Gambler
#===========================================================================
if self.hasWorkingAbility(:GAMBLER) && onactive
@battle.pbDisplay(_INTL("{1} is ready to roll the dice!",pbThis))
end
2) In PokeBattle_Battle, look for # Moody, and you can paste this either above that or below the section of code handling Moody:
Code:
#=========================================================================
# Custom Ability - Gambler
#=========================================================================
if i.hasWorkingAbility(:GAMBLER)
rand=pbRandom(11)
if !(i.status==PBStatuses::SLEEP || i.status==PBStatuses::FROZEN)
if rand==0
# Roll 2 - Halves user's HP
pbDisplay(_INTL("{1} rolled a 2!",i.pbThis))
i.pbReduceHP((i.hp/2).floor)
pbDisplay(_INTL("{1}'s HP was cut by half!",i.pbThis))
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (cut HP)")
elsif rand==1
# Roll 3 - Free turn/No effect
pbDisplay(_INTL("{1} rolled a 3!",i.pbThis))
pbDisplay(_INTL("Free turn!",i.pbThis))
elsif rand==2
# Roll 4 - Traps all Pokemon
pbDisplay(_INTL("{1} rolled a 4!",i.pbThis))
for j in 0...4
next if !@battlers[j] || @battlers[j].fainted?
if @battlers[j].effects[PBEffects::MeanLook]=-1 &&
(!USENEWBATTLEMECHANICS || !@battlers[j].pbHasType?(:GHOST))
@battlers[j].effects[PBEffects::MeanLook]=1
end
if @battlers[j].effects[PBEffects::MeanLook]>0
pbDisplay(_INTL("{1} can no longer escape!",@battlers[j].pbThis))
end
end
elsif rand==3
# Roll 5 - Inflicts the user with Curse
pbDisplay(_INTL("{1} rolled a 5!",i.pbThis))
if !i.effects[PBEffects::Curse]
i.effects[PBEffects::Curse]=true
pbDisplay(_INTL("A curse was laid on {1}!",i.pbThis(true)))
else
pbDisplay(_INTL("But {1} is already cursed...",i.pbThis(true)))
end
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (Curse)")
elsif rand==4
# Roll 6 - Eliminates stat changes of all Pokemon
pbDisplay(_INTL("{1} rolled a 6!",i.pbThis))
for j in 0...4
battlers[j].stages[PBStats::ATTACK] = 0
battlers[j].stages[PBStats::DEFENSE] = 0
battlers[j].stages[PBStats::SPEED] = 0
battlers[j].stages[PBStats::SPATK] = 0
battlers[j].stages[PBStats::SPDEF] = 0
battlers[j].stages[PBStats::ACCURACY] = 0
battlers[j].stages[PBStats::EVASION] = 0
end
pbDisplay(_INTL("All stat changes were eliminated!"))
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (clear all stat changes)")
elsif rand==5
# Roll 7 - Fully heals the user and its partner
pbDisplay(_INTL("{1} rolled a 7!",i.pbThis))
for ally in [i,i.pbPartner]
next if !ally || ally.fainted?
ally.effects[PBEffects::Curse]=false
ally.effects[PBEffects::Confusion]=0
ally.effects[PBEffects::Disable]= 0
ally.effects[PBEffects::DisableMove]= 0
ally.effects[PBEffects::Imprison]= false
ally.effects[PBEffects::MeanLook]=-1
ally.effects[PBEffects::Nightmare]=false
ally.effects[PBEffects::Taunt]=0
ally.effects[PBEffects::Torment]=false
ally.effects[PBEffects::GastroAcid]=false
ally.effects[PBEffects::LeechSeed]=-1
ally.effects[PBEffects::Toxic]=0
ally.effects[PBEffects::HealBlock]=0
ally.pbCureAttract
if ally.hp<ally.totalhp || ally.status>0
ally.pbRecoverHP(ally.totalhp)
ally.pbCureStatus(false)
pbDisplay(_INTL("{1} was fully restored!",ally.pbThis))
end
end
pbDisplay(_INTL("Any harmful effects on the team were cleared away!"))
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (heal user's side)")
elsif rand==6
# Roll 8 - Puts all Pokemon to sleep and inflicts Nightmare
pbDisplay(_INTL("{1} rolled an 8!",i.pbThis))
for j in 0...4
next if !@battlers[j] || @battlers[j].fainted?
if @battlers[j].pbCanSleep?(nil,false)
@battlers[j].pbSleep
@battlers[j].effects[PBEffects::Nightmare]=true
else
pbDisplay(_INTL("{1} can't be put to sleep!",@battlers[j].pbThis))
end
end
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (put all Pokemon to sleep)")
elsif rand==7
# Roll 9 - Drastically cuts the opponent's Attack/Sp.Atk
pbDisplay(_INTL("{1} rolled a 9!",i.pbThis))
for foe in [i.pbOpposing1,i.pbOpposing2]
next if !foe || foe.fainted?
showanim=true
if foe.pbCanReduceStatStage?(PBStats::ATTACK,nil,false,nil)
foe.pbReduceStat(PBStats::ATTACK,3,nil,false,nil,showanim)
showanim=false
end
if foe.pbCanReduceStatStage?(PBStats::SPATK,nil,false,nil)
foe.pbReduceStat(PBStats::SPATK,3,nil,false,nil,showanim)
showanim=false
end
end
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (lowers opponent's stats)")
elsif rand==8
# Roll 10 - Gives opponents the Truant ability
pbDisplay(_INTL("{1} rolled a 10!",i.pbThis))
for foe in [i.pbOpposing1,i.pbOpposing2]
next if !foe || foe.fainted?
abilityname=PBAbilities.getName(getConst(PBAbilities,:TRUANT))
nochange= (isConst?(foe.ability,PBAbilities,:MULTITYPE) ||
isConst?(foe.ability,PBAbilities,:POWERCONSTRUCT) ||
isConst?(foe.ability,PBAbilities,:ZENMODE) ||
isConst?(foe.ability,PBAbilities,:STANCECHANGE) ||
isConst?(foe.ability,PBAbilities,:RKSSYSTEM) ||
isConst?(foe.ability,PBAbilities,:SHIELDSDOWN) ||
isConst?(foe.ability,PBAbilities,:SCHOOLING) ||
isConst?(foe.ability,PBAbilities,:DISGUISE) ||
isConst?(foe.ability,PBAbilities,:COMATOSE) ||
isConst?(foe.ability,PBAbilities,:BATTLEBOND))
if nochange
pbDisplay(_INTL("{1}'s ability could not be changed!",foe.pbThis))
elsif isConst?(foe.ability,PBAbilities,:TRUANT)
pbDisplay(_INTL("But {1} already has the {2} ability!",foe.pbThis(true),abilityname))
else
oldabil=foe.ability
foe.ability=getConst(PBAbilities,:TRUANT) || 0
pbDisplay(_INTL("{1} acquired {2}!",foe.pbThis,abilityname))
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (gives opponents Truant)")
if foe.effects[PBEffects::Illusion] && isConst?(oldabil,PBAbilities,:ILLUSION)
PBDebug.log("[Ability triggered] #{foe.pbThis}'s Illusion ended")
foe.effects[PBEffects::Illusion]=nil
@scene.pbChangePokemon(foe,foe.pokemon)
pbDisplay(_INTL("{1}'s {2} wore off!",foe.pbThis,PBAbilities.getName(oldabil)))
end
end
end
elsif rand==9
# Roll 11 - Fully heals opponents
pbDisplay(_INTL("{1} rolled an 11!",i.pbThis))
for foe in [i.pbOpposing1,i.pbOpposing2]
next if !foe || foe.fainted?
foe.effects[PBEffects::Curse]=false
foe.effects[PBEffects::Confusion]=0
foe.effects[PBEffects::Disable]= 0
foe.effects[PBEffects::DisableMove]= 0
foe.effects[PBEffects::Imprison]= false
foe.effects[PBEffects::MeanLook]=-1
foe.effects[PBEffects::Nightmare]=false
foe.effects[PBEffects::Taunt]=0
foe.effects[PBEffects::Torment]=false
foe.effects[PBEffects::GastroAcid]=false
foe.effects[PBEffects::LeechSeed]=-1
foe.effects[PBEffects::Toxic]=0
foe.effects[PBEffects::HealBlock]=0
foe.pbCureAttract
if foe.hp<foe.totalhp || foe.status>0
foe.pbRecoverHP(foe.totalhp)
foe.pbCureStatus(false)
pbDisplay(_INTL("{1} was fully restored!",foe.pbThis))
end
end
pbDisplay(_INTL("Any harmful effects on the foe's team were cleared away!"))
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (heals opponent's side)")
elsif rand==10
# Roll 12 - Raises all of the user's stats by 2 stages
pbDisplay(_INTL("{1} rolled a 12!",i.pbThis))
showanim=true
if i.pbCanIncreaseStatStage?(PBStats::ATTACK,i,false,self)
i.pbIncreaseStat(PBStats::ATTACK,2,i,false,self,showanim)
showanim=false
end
if i.pbCanIncreaseStatStage?(PBStats::DEFENSE,i,false,self)
i.pbIncreaseStat(PBStats::DEFENSE,2,i,false,self,showanim)
showanim=false
end
if i.pbCanIncreaseStatStage?(PBStats::SPATK,i,false,self)
i.pbIncreaseStat(PBStats::SPATK,2,i,false,self,showanim)
showanim=false
end
if i.pbCanIncreaseStatStage?(PBStats::SPDEF,i,false,self)
i.pbIncreaseStat(PBStats::SPDEF,2,i,false,self,showanim)
showanim=false
end
if i.pbCanIncreaseStatStage?(PBStats::SPEED,i,false,self)
i.pbIncreaseStat(PBStats::SPEED,2,i,false,self,showanim)
showanim=false
end
PBDebug.log("[Ability triggered] #{i.pbThis}'s Gambler (raise all stats)")
end
end
end
#=========================================================================
Just a side note with installing abilities:
If you're using Luka's EBS like I am, you have to add any new abilities with a "switch in" entry message to his list of abilities in EliteBattle_0. Otherwise, the messages will not play as intended.
As always, don't forget to add any new abilities to your PBS file:
Code:
XXX,DELIVERY,Delivery,"Passes a held item to a foe upon entry."
XXX,MATRIARCHY,Matriarchy,"Boosts damage when there are female allies."
XXX,UNDERDOG,Underdog,"Boosts damage when at a disadvantage."
XXX,KABOOM,Kaboom!,"The user detonates after its countdown reaches 0."
XXX,NINELIVES,Nine Lives,"The user may use up some lives to survive a KO."
XXX,LUCKY7,Lucky 7,"The user's luck kicks in every 7th turn."
XXX,GAMBLER,Gambler,"Rolls the dice each turn for random effects."
Hello, your ability Ethereal gave me an idea for an ability called Reflector that sets up the Mirror Coat effect when hit by a move that can be Mirror Coated. Any tips on how to code that? It would likely work with Pokemon like Mr. Mime.
I also need help with Steely Glare, an Intimidate variation I came up with that sharply lowers Defense. Would work well with Pokemon like Gyarados and maybe Dragonite as a HA to make a nod to Iris's Dragonite from the anime.
Hello, your ability Ethereal gave me an idea for an ability called Reflector that sets up the Mirror Coat effect when hit by a move that can be Mirror Coated. Any tips on how to code that? It would likely work with Pokemon like Mr. Mime.
I also need help with Steely Glare, an Intimidate variation I came up with that sharply lowers Defense. Would work well with Pokemon like Gyarados and maybe Dragonite as a HA to make a nod to Iris's Dragonite from the anime.
XXX,DEFLECTOR,Deflector,"Bounces back damage taken by Special Attacks."
1) In PokeBattle_Battler, find the line starting with "if target.hasWorkingAbility(:WEAKARMOR)", and paste the following above it:
Code:
#=======================================================================
# Custom Ability - Deflector
#=======================================================================
if target.hasWorkingAbility(:DEFLECTOR) && move.pbIsSpecial?(movetype)
if !user.fainted? && !target.fainted?
PBDebug.log("[Ability triggered] #{target.pbThis}'s #{PBAbilities.getName(target.ability)}")
@battle.scene.pbDamageAnimation(user,0)
user.pbReduceHP((damage*1.5).floor)
@battle.pbDisplay(_INTL("{1}'s {2} bounced back damage at {3}!",target.pbThis,
PBAbilities.getName(target.ability),user.pbThis(true)))
end
end
#=======================================================================
*Note: I renamed this ability Deflector, since Reflector could become confusing with the actual move "Reflect". This ability does not actually use the Mirror Coat effect, it merely imitates it. So its possible, for example, to use the actual move Mirror Coat in conjunction with this ability to damage the target twice. This ability can also damage Dark-types, unlike Mirror Coat, since the damage is typeless. This ability will trigger immediately after the user is struck by a Special move, and not at the end of the turn, unlike Mirror Coat. This means that it's possible for this ability to trigger multiple times if struck with a multi-hit move, or by two different opponents in a double battle. Because of all these perks that this ability has over Mirror Coat, the damage dealt by this ability is only 1.5x stronger, rather than 2x stronger like Mirror Coat.
Steely Glare
Abilities PBS:
Code:
XXX,STEELYGLARE,Steely Glare,"Harshly lowers the foe's Defense stat."
1) In PokeBattle_Battler, find the line "# Download", and paste this directly above it:
Code:
#===========================================================================
# Custom Ability - Steely Glare
#===========================================================================
if self.hasWorkingAbility(:STEELYGLARE) && onactive
PBDebug.log("[Ability triggered] #{pbThis}'s Steely Glare")
for i in 0...4
if pbIsOpposing?(i) && [email protected][i].fainted?
@battle.battlers[i].pbReduceDefenseStatSteelyGlare(self)
[email protected][i]
if opp.hasWorkingItem(:ADRENALINEORB)
if opp.pbIncreaseStatWithCause(PBStats::SPEED,1,opp,PBItems.getName(opp.item))
opp.pokemon.itemInitial=0 if opp.pokemon.itemInitial==opp.item
opp.item=0
end
end
if opp.hasWorkingAbility(:RATTLED)
if opp.pbIncreaseStatWithCause(PBStats::SPEED,1,opp,PBAbilities.getName(opp.ability))
PBDebug.log("[Ability triggered] #{opp.pbThis}'s Rattled")
end
end
end
end
end
#===========================================================================
2) In PokeBattle_BattlerEffects, find the line "def pbReduceAttackStatIntimidate(opponent)", and paste all of the following in a new section above it:
Code:
#=============================================================================
# Custom Ability - Steely Glare
#=============================================================================
def pbReduceDefenseStatSteelyGlare(opponent)
return false if fainted?
if effects[PBEffects::Substitute]>0
@battle.pbDisplay(_INTL("{1}'s substitute protected it from {2}'s {3}!",
pbThis,opponent.pbThis(true),PBAbilities.getName(opponent.ability)))
return false
end
if !opponent.hasWorkingAbility(:CONTRARY)
if pbOwnSide.effects[PBEffects::Mist]>0
@battle.pbDisplay(_INTL("{1} is protected from {2}'s {3} by Mist!",
pbThis,opponent.pbThis(true),PBAbilities.getName(opponent.ability)))
return false
end
if hasWorkingAbility(:CLEARBODY) || hasWorkingAbility(:WHITESMOKE) ||
hasWorkingAbility(:BIGPECKS) || hasWorkingAbility(:FULLMETALBODY) ||
hasWorkingAbility(:INNERFOCUS) || hasWorkingAbility(:OBLIVIOUS) ||
hasWorkingAbility(:SCRAPPY) || hasWorkingAbility(:OWNTEMPO) ||
(hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS))
abilityname=PBAbilities.getName(self.ability)
oppabilityname=PBAbilities.getName(opponent.ability)
@battle.pbDisplay(_INTL("{1}'s {2} prevented {3}'s {4} from working!",
pbThis,abilityname,opponent.pbThis(true),oppabilityname))
return false
end
if pbPartner.hasWorkingAbility(:FLOWERVEIL) && pbHasType?(:GRASS)
abilityname=PBAbilities.getName(pbPartner.ability)
oppabilityname=PBAbilities.getName(opponent.ability)
@battle.pbDisplay(_INTL("{1}'s {2} prevented {3}'s {4} from working!",
pbPartner.pbThis,abilityname,opponent.pbThis(true),oppabilityname))
return false
end
end
return pbReduceStatWithCause(PBStats::DEFENSE,2,opponent,PBAbilities.getName(opponent.ability))
end
#=============================================================================
*Note: I added all of the changes to this ability that were added to the Intimidate ability up to Gen 8, meaning that the Inner Focus, Oblivious, Scrappy, and Own Tempo abilities will all block Steely Glare, along with Full Metal Body. The Rattled ability and Adrenaline Orb will also activate their effects when the user is affected by Steely Glare. These aren't present in the code for Intimidate, so make the appropriate changes if you want this ability to function like the stock Essentials version of Intimidate does.
oh hi! i was trying to figure out how to code a ability that changes fire type moves to another type. any way i could do that without breaking the game?
Ability in question: Dragonic roar (or Drakeize, name is pending) - Fire type moves become dragon type.