• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
Substitube's Poké Balls

v20.1 Substitube's Poké Balls 2023-05-19

This resource pertains to version 20.1 of Pokémon Essentials.
Pokémon Essentials Version
v20.1 ➖

There's a whopping 58 designs in this video! Some of that is the same concept multiplied out (balls for Egg Groups, balls for types, etc.), but a lot of them are totally unique effects! I've adapted most of these for Essentials v20 and have the Poké Ball handlers and PBS entries here!

A few notes:
  • The following Poké Balls were skipped, but may be added in the future:
    • Nuzlocke Ball
    • Plus Ball
    • Multi Ball
    • Blast Ball
  • There are no graphics, just code.
  • No exact numbers were given for the catch rate boost, so everything was set to a 3x multiplier. (Except for balls with clear counterparts, like the Dawn Ball/Shrink Ball)
  • Similarly, no buy/sell price was given, so all balls are set to $1000
  • Following Net Ball's example, any ball with multiple conditions does not stack. (For example, even though a Surskit is Bug/Water, a Net Ball is just as effective on it as it would be on a Pokémon that's just Water-type)
You are, of course, welcome to tweak these however you see fit.

I have two ways to add these - a bulk installation where you just add them all in at once, and an individual listing section where the handler (and/or relevant code) and PBS entry is listed for each specific Poké Ball. (This is also where I clarify more on the exact mechanics.)

Paste this in a script section above Main, and add this to items.txt.

For the Dawn Ball -
To implement the inside-buildings feature, you'll have to do a little bit of extra work.

In Overworld_BattleStarting, find these lines:
Ruby:
Expand Collapse Copy
    if $game_map.metadata&.battle_environment == :Cave
      battle.time = 2   # This makes Dusk Balls work properly in caves
Below them, add these:
Ruby:
Expand Collapse Copy
    elsif $game_map.metadata&.battle_environment == :None
      battle.time = 0   # This makes Dawn Balls work properly indoors
Every map with the battle environment set to None in its map metadata will have a boost to Dawn Balls. To my knowledge, this should not affect anything else in-battle, as time-dependent mechanics aren't used in battle anymore to account for multiplayer functions across time zones. But if you've introduced mechanics that you think wouldn't pair well with this, or you've got an indoor location where it wouldn't make sense (like the Underground Path in Kanto), you may want to consider making another battle environment for Dawn Ball's effect.

For the Seeker Ball -
In the script section Item_BattleEffects, find this line:
Ruby:
Expand Collapse Copy
    if battler.semiInvulnerable?
And change it to:
Ruby:
Expand Collapse Copy
    if battler.semiInvulnerable? && !(item == :SEEKERBALL)

Add the following flags to any relevant species in pokemon.txt:
  • inorganic for any Pokémon made of artificial materials. (Voltorb, Trubbish, etc.) This is specifically to allow the Junk Ball to work on object-based Pokémon that aren't Steel-type, so you wouldn't need to add it to a species like Magnemite for it to work. But I would still recommend adding it anyways just in case you have any other mechanics that work on object-based Pokémon)
  • Mythic for any Mythical Pokémon, and Legendary for any Legendary.

Dex Ball - Registers the Pokémon in the dex as caught, even if it fails to catch.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:DEXBALL, proc { |ball, battle, battler|
  if !battle.pbPlayer.owned?(battler.species)
    battle.pbPlayer.pokedex.set_owned(battler.species)
    if $player.has_pokedex
      battle.pbDisplayPaused(_INTL("{1}'s data was added to the Pokédex.", battler.pokemon.speciesName))
      battle.pbPlayer.pokedex.register_last_seen(battler.pokemon)
      battle.scene.pbShowPokedex(battler.species)
    end
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[DEXBALL]
Name = Dex Ball
NamePlural = Dex Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A technologically-advanced Ball that records an entry in the PokéDex even without capturing a Pokémon.
Cycle Ball - Returns to the player after a Pokémon breaks out, provided the Pokémon was asleep, frozen, or paralyzed.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:CYCLEBALL, proc { |ball, battle, battler|
  if [:FROZEN,:SLEEP,:PARALYSIS].include?(battler.status)
    $bag.add(:CYCLEBALL)
    itemName = GameData::Item.get(:CYCLEBALL).name
    battle.pbDisplay(_INTL("The {1} flew back to {2}!", itemName, battle.pbPlayer.name))
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[CYCLEBALL]
Name = Cycle Ball
NamePlural = Cycle Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A technologically-advanced Ball that returns to trainers if it fails to catch an immobilized Pokémon.
Dawn Ball - Counterpart to the Dusk Ball, works better in the daytime or inside buildings.

A.I.R made a bag sprite for this!
18141

Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:DAWNBALL, proc { |ball, catchRate, battle, battler|
  multiplier = (Settings::NEW_POKE_BALL_CATCH_RATES) ? 3 : 3.5
  catchRate *= multiplier if battle.time == 0   # Daytime outside of caves
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[DAWNBALL]
Name = Dawn Ball
NamePlural = Dawn Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that makes it easier to catch wild Pokémon during the day or in well-lit buildings.
To implement the inside-buildings feature, you'll have to do a little bit of extra work.

In Overworld_BattleStarting, find these lines:
Ruby:
Expand Collapse Copy
    if $game_map.metadata&.battle_environment == :Cave
      battle.time = 2   # This makes Dusk Balls work properly in caves
Below them, add these:
Ruby:
Expand Collapse Copy
    elsif $game_map.metadata&.battle_environment == :None
      battle.time = 0   # This makes Dawn Balls work properly indoors
Every map with the battle environment set to None in its map metadata will have a boost to Dawn Balls. To my knowledge, this should not affect anything else in-battle, as time-dependent mechanics aren't used in battle anymore to account for multiplayer functions across time zones. But if you've introduced mechanics that you think wouldn't pair well with this, or you've got an indoor location where it wouldn't make sense (like the Underground Path in Kanto), you may want to consider making another battle environment for Dawn Ball's effect.
Luck Ball - Totally random catchrate, anywhere from 0 to 255.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:LUCKBALL, proc { |ball, catchRate, battle, battler|
  next rand(255)
})
Code:
Expand Collapse Copy
#-------------------------------
[LUCKBALL]
Name = Luck Ball
NamePlural = Luck Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A bizarre Poké Ball with a Pokémon catch rate left entirely to chance.
Stat Ball - Increased catch rate if target's stats have been lowered.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:STATBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.hasLoweredStatStages?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[STATBALL]
Name = Stat Ball
NamePlural = Stat Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A strategic Poké Ball that works better on Pokémon who have had their stats lowered in battle.
Evo Ball - Works better on evolved Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:EVOBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 unless battler.pokemon.species_data.get_previous_species == battler.species
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[EVOBALL]
Name = Evo Ball
NamePlural = Evo Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on evolved species of Pokémon.
Seeker Ball - Can catch Pokémon in semi-invulnerable states. (Fly, Dig, Surf, etc.)
Code:
Expand Collapse Copy
#-------------------------------
[SEEKERBALL]
Name = Seeker Ball
NamePlural = Seeker Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A technologically-advanced Ball that can catch Pokémon out of a trainer's sight.
In the script section Item_BattleEffects, find this line:
Ruby:
Expand Collapse Copy
    if battler.semiInvulnerable?
And change it to:
Ruby:
Expand Collapse Copy
    if battler.semiInvulnerable? && !(item == :SEEKERBALL)

Alternatively... maybe you'd like to give the player the ability to let any Poké Ball catch a semi-invulnerable target?
Ruby:
Expand Collapse Copy
    if battler.semiInvulnerable? && $bag.has?(:HOMINGDEVICE)
Shiny Ball - Works better on shiny Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:SHINYBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.shiny?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[SHINYBALL]
Name = Shiny Ball
NamePlural = Shiny Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A brilliant, gleaming Poké Ball that works especially well on shiny Pokémon.
Value Ball - Sets three random IVs to max.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnCatch.add(:VALUEBALL, proc { |ball, battle, pkmn|
  stats = []
  GameData::Stat.each_main { |s| stats.push(s.id) }
  chosen_stats = stats.sample(3)
  chosen_stats.each { |stat| pkmn.iv[stat] = 31 }
})
Code:
Expand Collapse Copy
#-------------------------------
[VALUEBALL]
Name = Value Ball
NamePlural = Value Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A particularly expensive Poké Ball that increases the power of captured Pokémon.
Shrink Ball - Counterpart to the Heavy Ball that works better on lighter Pokémon. Extra bonus for minimized Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:SHRINKBALL, proc { |ball, catchRate, battle, battler|
  next 0 if catchRate == 0
  weight = battler.pbWeight
  if Settings::NEW_POKE_BALL_CATCH_RATES
    if weight <= 1000
      catchRate += 30
    elsif weight <= 2000
      catchRate += 20
    elsif weight > 3000
      catchRate -= 20
    end
  else
    if weight <= 2048
      catchRate += 40
    elsif weight <= 3072
      catchRate += 30
    elsif weight >= 4096
      catchRate += 20
    else
      catchRate -= 20
    end
  end
  catchRate += 40 if battler.effects[PBEffects::Minimize]
  next catchRate.clamp(1, 255)
})
Code:
Expand Collapse Copy
#-------------------------------
[SHRINKBALL]
Name = Shrink Ball
NamePlural = Shrink Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A Poké Ball for catching very light Pokémon.
Trap Ball - Works better on Pokémon trapped by moves like Bind, Fire Spin, etc.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:TRAPBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.effects[PBEffects::Trapping] > 0
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[TRAPBALL]
Name = Trap Ball
NamePlural = Trap Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially on Pokémon ensnared by binding moves.
Rage Ball - Works better if your Pokémon fainted on the previous turn.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:RAGEBALL, proc { |ball, catchRate, battle, battler|
  lrf = battler.pbOpposingSide.effects[PBEffects::LastRoundFainted]
  catchRate *= 3 if lrf >= 0 && lrf == battle.turnCount - 1
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[RAGEBALL]
Name = Rage Ball
NamePlural = Rage Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works better when used by a trainer whose Pokémon recently fainted.
Executive Ball - Snag Ball with increased catch rate when used in trainer battles.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:EXECUTIVEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battle.trainerBattle?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[EXECUTIVEBALL]
Name = Executive Ball
NamePlural = Executive Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall, SnagBall
Description = A sinister Poké Ball used by Team Rocket executives that excels at stealing Pokémon from trainers.
Para Ball - Increased rate on paralyzed or Electric-type Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:PARABALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:ELECTRIC) || battler.paralyzed?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[PARABALL]
Name = Para Ball
NamePlural = Para Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on paralyzed or Electric-type Pokémon.
Burn Ball - Increased rate on burned or Fire-type Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:BURNBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:FIRE) || battler.burned?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[BURNBALL]
Name = Burn Ball
NamePlural = Burn Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on burned or Fire-type Pokémon.
Poison Ball - Increased rate on poisoned or Poison-type Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:POISONBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:POISON) || battler.poisoned?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[POISONBALL]
Name = Poison Ball
NamePlural = Poison Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on poisoned or Poison-type Pokémon.
Freeze Ball - Increased rate on frozen or Ice-type Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:FREEZEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:ICE) || battler.frozen?
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[FREEZEBALL]
Name = Freeze Ball
NamePlural = Freeze Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on frozen or Ice-type Pokémon.
Dizzy Ball - Increased rate on confused or Psychic-type Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:DIZZYBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:PSYCHIC) || battler.effects[PBEffects::Confusion] > 0
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[DIZZYBALL]
Name = Dizzy Ball
NamePlural = Dizzy Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on confused or Psychic-type Pokémon.
Minus Battle - Catch rate is multiplied by 5 - (number of Minus Balls left in the bag). If you have 5 or more Minus Balls in the bag, they'll fail. (Substitube didn't mention any specific numbers, feel free to toy with the formula however you'd like to balance it.)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MINUSBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= [(5 - $bag.quantity(:MINUSBALL)),0].min
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[MINUSBALL]
Name = Minus Ball
NamePlural = Minus Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A mathematical Poké Ball that works better the fewer copies a trainer has.
Divide Ball - If it fails to catch a Pokémon, divides its current HP in half.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:DIVIDEBALL, proc { |ball, battle, battler|
  battler.pbReduceHP((battler.hp / 2.0).round, false)
  battle.pbDisplay(_INTL("{1}'s health was divided in half!", battler.pbThis))
})
Code:
Expand Collapse Copy
#-------------------------------
[DIVIDEBALL]
Name = Divide Ball
NamePlural = Divide Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A mathematical Poké Ball that divides a Pokémon's health in half if it fails to capture it.
Equal Ball - Restores Pokémon's HP and PP if it fails to catch a Pokémon. (Does not cure status effects)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:EQUALBALL, proc { |ball, battle, battler|
  battler.pbRecoverHP(battler.totalhp)
  battler.moves.length.times do |i|
    pbBattleRestorePP(battler.pokemon, battler, i, battler.pokemon.moves[i].total_pp)
  end
  battle.pbDisplay(_INTL("{1}'s HP and PP were restored!", battler.pbThis))
})
Code:
Expand Collapse Copy
#-------------------------------
[EQUALBALL]
Name = Equal Ball
NamePlural = Equal Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A mathematical Poké Ball that resets a Pokémon's HP and PP if it fails to capture it.
Taunt Ball - Applies Taunt if it fails to catch the Pokémon. (Can't stack Taunt Ball and Taunt. Can use a Taunt Ball on a taunted Pokémon, but it'll just work like a regular Poké Ball. Will trigger a held Mental Herb.)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:TAUNTBALL, proc { |ball, battle, battler|
    unless battler.effects[PBEffects::Taunt] > 0
      battler.effects[PBEffects::Taunt] = 4
      battle.pbDisplay(_INTL("{1} fell for the taunt!", battler.pbThis))
      target.pbItemStatusCureCheck
    end
})
Code:
Expand Collapse Copy
#-------------------------------
[TAUNTBALL]
Name = Taunt Ball
NamePlural = Taunt Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A tactical Poké Ball that enrages any Pokémon it fails to catch, preventing them from using status moves.
Penalty Ball - Applies the effect of Disable if it fails to catch the Pokémon. (No effect if used first turn in a battle, can't disable multiple moves, have to wait for the effects of Disable/Penalty Ball to wear off before disabling another move. Can still throw another Penalty Ball, will just work like a regular Poké Ball. Will trigger a held Mental Herb.)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:PENALTYBALL, proc { |ball, battle, battler|
    unless battler.effects[PBEffects::Disable] > 0 || !battler.lastRegularMoveUsed
      battler.effects[PBEffects::Disable]     = 5
      battler.effects[PBEffects::DisableMove] = battler.lastRegularMoveUsed
      battle.pbDisplay(_INTL("{1}'s {2} was disabled!", battler.pbThis,
                              GameData::Move.get(battler.lastRegularMoveUsed).name))
      battler.pbItemStatusCureCheck
    end
})
Code:
Expand Collapse Copy
#-------------------------------
[PENALTYBALL]
Name = Penalty Ball
NamePlural = Penalty Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A tactical Poké Ball. If it fails to catch a Pokémon, it will disable their last-used move.
Concuss Ball - Causes the Pokémon to flinch if it fails to catch it. (This does interact with abilities - Steadfast will be triggered, and Inner Focus will prevent the flinching, though it currently doesn't display any message.)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:CONCUSSBALL, proc { |ball, battle, battler|
  battler.pbFlinch
})
Code:
Expand Collapse Copy
#-------------------------------
[CONCUSSBALL]
Name = Concuss Ball
NamePlural = Concuss Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A tactical Poké Ball. When thrown, it strikes hard enough to cause flinching.
Dowse Ball - Applies the effects of Foresight if it fails to catch a Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:DOWSEBALL, proc { |ball, battle, battler|
  unless battler.effects[PBEffects::Foresight]
    battler.effects[PBEffects::Foresight] = true
    battle.pbDisplay(_INTL("{1} was identified!", battler.pbThis))
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[DOWSEBALL]
Name = Dowse Ball
NamePlural = Dowse Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A tactical Poké Ball that identifies any Pokémon it fails to catch.
Choice Ball - Applies the effects of Encore if it fails to catch a Pokémon. If the Pokémon hasn't used a move yet, or is already under the effects of Encore, it'll just work like a regular Poké Ball. Will trigger a Mental Herb.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:CHOICEBALL, proc { |ball, battle, battler|
    moveBlacklist = [
      "DisableTargetUsingDifferentMove",   # Encore
      # Struggle
      "Struggle",   # Struggle
      # Moves that affect the moveset
      "ReplaceMoveThisBattleWithTargetLastMoveUsed",   # Mimic
      "ReplaceMoveWithTargetLastMoveUsed",   # Sketch
      "TransformUserIntoTarget",   # Transform
      # Moves that call other moves (see also below)
      "UseLastMoveUsedByTarget"   # Mirror Move
    ]
    if Settings::MECHANICS_GENERATION >= 7
      moveBlacklist += [
        # Moves that call other moves
#        "UseLastMoveUsedByTarget",   # Mirror Move                 # See above
        "UseLastMoveUsed",   # Copycat
        "UseMoveTargetIsAboutToUse",   # Me First
        "UseMoveDependingOnEnvironment",   # Nature Power
        "UseRandomUserMoveIfAsleep",   # Sleep Talk
        "UseRandomMoveFromUserParty",   # Assist
        "UseRandomMove"   # Metronome
      ]
    end
  unless battler.effects[PBEffects::Encore] > 0 || !battler.lastRegularMoveUsed ||
    moveBlacklist.include?(GameData::Move.get(battler.lastRegularMoveUsed).function_code)
      battler.effects[PBEffects::Encore]     = 4
      battler.effects[PBEffects::EncoreMove] = battler.lastRegularMoveUsed
      battle.pbDisplay(_INTL("{1} received an encore!", battler.pbThis))
      battler.pbItemStatusCureCheck
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[CHOICEBALL]
Name = Choice Ball
NamePlural = Choice Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A tactical Poké Ball. If it fails to catch a Pokémon, they will receive an encore for their last-used move.
Berry Ball - Heals by 20HP if it fails, unless the Pokémon is under the effect of Heal Block.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:BERRYBALL, proc { |ball, battle, battler|
  if battler.canHeal?
    battler.pbRecoverHP(20)
    itemName = GameData::Item.get(:BERRYBALL).name
    battle.pbDisplay(_INTL("{1} ate the {2} and recovered HP!", battler.pbThis, itemName))
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[BERRYBALL]
Name = Berry Ball
NamePlural = Berry Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = An all-natural Poké Ball that heals any Pokémon it fails to catch.
Lock Ball - Prevents the Pokémon from fleeing if it fails to catch it, using the same mechanic as Mean Look. Substitube's description said it would only prevent it for one turn, but it was simpler to make it permanent. Does not affect a Pokémon if another Pokémon on the field has already trapped them, if they're a Ghost-type and you've set MORE_TYPE_EFFECTS in Settings to true, or if the target is behind a Substitute.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:LOCKBALL, proc { |ball, battle, battler|
  unless battler.effects[PBEffects::Substitute] > 0 || battler.effects[PBEffects::MeanLook] >= 0 || (Settings::MORE_TYPE_EFFECTS && battler.pbHasType?(:GHOST))
    battler.effects[PBEffects::MeanLook] = 999
    battle.pbDisplay(_INTL("{1} can no longer escape!", battler.pbThis))
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[LOCKBALL]
Name = Lock Ball
NamePlural = Lock Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = An air-tight Poké Ball that prevents a Pokémon from fleeing, even it fails to catch it.
Vacuum Ball - If it fails, clears the following effects from the Pokémon's side:
  • Light Screen
  • Reflect
  • Aurora Veil
  • Substitute
  • Safeguard
  • Mist
  • Lucky Chant
  • Tailwind
  • Rainbow created by Water Pledge and Fire Pledge
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:VACUUMBALL, proc { |ball, battle, battler|
  if battler.pbOwnSide.effects[PBEffects::LightScreen] > 0
    battler.pbOwnSide.effects[PBEffects::LightScreen] = 0
    battle.pbDisplay(_INTL("{1}'s Light Screen wore off!", battler.pbTeam))
  end
  if battler.pbOwnSide.effects[PBEffects::Reflect] > 0
    battler.pbOwnSide.effects[PBEffects::Reflect] = 0
    battle.pbDisplay(_INTL("{1}'s Reflect wore off!", battler.pbTeam))
  end
  if battler.pbOwnSide.effects[PBEffects::AuroraVeil] > 0
    battler.pbOwnSide.effects[PBEffects::AuroraVeil] = 0
    battle.pbDisplay(_INTL("{1}'s Aurora Veil wore off!", battler.pbTeam))
  end
  if battler.effects[PBEffects::Substitute] > 0
    battler.effects[PBEffects::Substitute] = 0
    battle.pbDisplay(_INTL("{1}'s substitute faded!", battler.pbThis))
  end
  if battler.pbOwnSide.effects[PBEffects::Safeguard] > 0
    battler.pbOwnSide.effects[PBEffects::Safeguard] = 0
    battle.pbDisplay(_INTL("{1}'s is no longer protected by Safeguard!", battler.pbTeam))
  end
  if battler.pbOwnSide.effects[PBEffects::Mist] > 0
    battler.pbOwnSide.effects[PBEffects::Mist] = 0
    battle.pbDisplay(_INTL("{1}'s is no longer protected by mist!", battler.pbTeam))
  end
  if battler.pbOwnSide.effects[PBEffects::LuckyChant] > 0
    battler.pbOwnSide.effects[PBEffects::LuckyChant] = 0
    battle.pbDisplay(_INTL("{1}'s Lucky Chant wore off!", battler.pbTeam))
  end
  if battler.pbOwnSide.effects[PBEffects::Tailwind] > 0
    battler.pbOwnSide.effects[PBEffects::Tailwind] = 0
    battle.pbDisplay(_INTL("{1}'s Tailwind petered out!", battler.pbTeam))
  end
  if battler.pbOwnSide.effects[PBEffects::Rainbow] > 0
    battler.pbOwnSide.effects[PBEffects::Rainbow] = 0
    battle.pbDisplay(_INTL("The rainbow on {1}'s side disappeared!", battler.pbTeam))
  end
})
Code:
Expand Collapse Copy
#-------------------------------
[VACUUMBALL]
Name = Vacuum Ball
NamePlural = Vacuum Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A tactical Poké Ball. If it fails, it will clear the area of any barrier the wild Pokémon set up.
Rus Ball - The exact mechanics here were not especially clear - Substitube only said this would have "an increased chance of inflicting PokéRus". They put this in the section for balls with effects that trigger on failing to catch, but I don't see why this wouldn't apply as well if you caught it? And of course the specific odds weren't given. So what I've done is make it where on failing or succeeding to catch the Pokémon, there's another chance of the Pokémon catching PokéRus, this time with 2x the odds. (I was considering doing a Luxury Ball thing where Pokémon would be more susceptible to PokéRus if they were inside a Rus Ball, but apparently that's not how PokéRus works!)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::OnFailCatch.add(:RUSBALL, proc { |ball, battle, battler|
  battler.pokemon.givePokerus if rand(65_536) < (Settings::POKERUS_CHANCE / 2)
})
Battle::PokeBallEffects::OnCatch.add(:RUSBALL, proc { |ball, battle, pkmn|
  pkmn.givePokerus if rand(65_536) < (Settings::POKERUS_CHANCE / 2)
})
Code:
Expand Collapse Copy
#-------------------------------
[RUSBALL]
Name = Rus Ball
NamePlural = Rus Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A grimy Poké Ball that seems likely to pass disease onto any Pokémon it touches.
Clear Ball - Increased rate on Normal-types and Pokémon with type-changing abilities. (Color Change, Multitype, RKS System, Protean, Libero, or Mimicry) Note that it doesn't account for any in-battle changes in ability - if you used Skill Swap to pass one of these abilities over, it wouldn't affect the catch rate.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:CLEARBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:NORMAL) || [:PROTEAN,:COLORCHANGE,:MULTITYPE,:RKSSYSTEM,:LIBERO,:MIMICRY].include?(battler.pokemon.ability)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[CLEARBALL]
Name = Clear Ball
NamePlural = Clear Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Normal-type or type-changing Pokémon.
Knuckle Ball - Increased rate on Fighting- and Dark-types.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:KNUCKLEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:FIGHTING) || battler.pbHasType?(:DARK)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[KNUCKLEBALL]
Name = Knuckle Ball
NamePlural = Knuckle Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Fighting- and Dark-type Pokémon.
Float Ball - Increased rate on Flying-types or Pokémon with Levitate. (like the Clear Ball, this is if they have Levitate naturally, not with any move shenanigans)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:FLOATBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:FLYING) || battler.pokemon.hasAbility?(:LEVITATE)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[FLOATBALL]
Name = Float Ball
NamePlural = Float Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Flying-type or levitating Pokémon.
Yule Ball - Increased rate on Fairy-, Grass- and Ice-types.

A.I.R made a bag sprite for this!
18140

Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:YULEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:FAIRY) || battler.pbHasType?(:GRASS) || battler.pbHasType?(:ICE)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[YULEBALL]
Name = Yule Ball
NamePlural = Yule Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Fairy-, Grass-, and Ice-type Pokémon.
Magma Ball - Increased rate on Fire-, Rock-, and Ground-types.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MAGMABALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:FIRE) || battler.pbHasType?(:GROUND) || battler.pbHasType?(:ROCK)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[MAGMABALL]
Name = Magma Ball
NamePlural = Magma Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Fire-, Rock-, and Ground-type Pokémon.
Spirit Ball - Increased rate on Psychic- and Ghost-types.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:SPIRITBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:GHOST) || battler.pbHasType?(:PSYCHIC)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[SPIRITBALL]
Name = Spirit Ball
NamePlural = Spirit Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Psychic- and Ghost-type Pokémon.
Junk Ball - Increased rate on Steel-types and Pokémon formed from inorganic objects.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:JUNKBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pbHasType?(:STEEL) || battler.pokemon.species_data.has_flag?("Inorganic")
  next catchRate
})
For any non-Steel-type you want this ball to affect, you need to add the species flag Inorganic in pokemon.txt.
Code:
Expand Collapse Copy
#-------------------------------
[JUNKBALL]
Name = Junk Ball
NamePlural = Junk Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Steel-type or inorganic Pokémon.
Meadow Ball - Increased rate when used on Grassy Terrain.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MEADOWBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battle.field.terrain == :Grassy
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[MEADOWBALL]
Name = Meadow Ball
NamePlural = Meadow Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used on Grassy Terrain.
Mist Ball - Increased rate when used on Misty Terrain.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MISTBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battle.field.terrain == :Misty
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[MISTBALL]
Name = Mist Ball
NamePlural = Mist Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used on Misty Terrain.
Storm Ball - Increased rate when used on Electric Terrain.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:STORMBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battle.field.terrain == :Electric
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[STORMBALL]
Name = Storm Ball
NamePlural = Storm Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used on Electric Terrain.
Warp Ball - Increased rate when used on Psychic Terrain or in psychic rooms. (Trick Room, Wonder Room, etc.)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:WARPBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battle.field.terrain == :Psychic || battle.field.effects[PBEffects::TrickRoom] > 0 || battle.field.effects[PBEffects::WonderRoom] > 0 || battle.field.effects[PBEffects::MagicRoom] > 0
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[WARPBALL]
Name = Warp Ball
NamePlural = Warp Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used on Psychic Terrain or inside strange rooms.
Sand Ball - Increased rate in Sandstorm.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:SANDBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if [:Sandstorm].include?(battler.effectiveWeather)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[SANDBALL]
Name = Sand Ball
NamePlural = Sand Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used in a sandstorm.
Drizzle Ball - Increased rate in rain. (regular or primal)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:DRIZZLEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if [:Rain, :HeavyRain].include?(battler.effectiveWeather)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[DRIZZLEBALL]
Name = Drizzle Ball
NamePlural = Drizzle Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used in rain.
Hail Ball - Increased rate in hail or snow.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:HAILBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if [:Hail, :Snow].include?(battler.effectiveWeather)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[HAILBALL]
Name = Hail Ball
NamePlural = Hail Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used in cold weather.
Drought Ball - Increased rate in harsh sunlight. (regular or primal)
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:DROUGHTBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if [:Sun, :HarshSun].include?(battler.effectiveWeather)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[DROUGHTBALL]
Name = Drought Ball
NamePlural = Drought Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well when used in harsh sunlight.
Kin Ball - Increased rate on Pokémon from the Humanlike and Fairy Egg Groups.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:KINBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Humanlike) || battler.pokemon.species_data.egg_groups.include?(:Fairy)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[KINBALL]
Name = Kin Ball
NamePlural = Kin Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Humanlike or Fairy Egg Groups.
Field Ball - Increased rate on Pokémon from the Field Egg Group.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:FIELDBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Field)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[FIELDBALL]
Name = Field Ball
NamePlural = Field Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Field Egg Group.
Morph Ball - Increased rate on Pokémon from the Amorphous Egg Group.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MORPHBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Amorphous)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[MORPHBALL]
Name = Morph Ball
NamePlural = Morph Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Amorphous Egg Group.
Nature Ball - Increased rate on Pokémon from the Grass and Bug Egg Groups.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:NATUREBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Bug) || battler.pokemon.species_data.egg_groups.include?(:Grass)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[NATUREBALL]
Name = Nature Ball
NamePlural = Nature Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Grass or Bug Egg Groups.
Ore Ball - Increased rate on Pokémon from the Mineral Egg Group.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:OREBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Mineral)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[OREBALL]
Name = Ore Ball
NamePlural = Ore Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Mineral Egg Group.
Monster Ball - Increased rate on Pokémon from the Monster Egg Group.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MONSTERBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Monster)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[MONSTERBALL]
Name = Monster Ball
NamePlural = Monster Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Monster Egg Group.
Elder Ball - Increased rate on Pokémon from the Dragon Egg Group.

A.I.R made a bag sprite for this!
18139

Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:ELDERBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.egg_groups.include?(:Dragon)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[ELDERBALL]
Name = Elder Ball
NamePlural = Elder Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A somewhat different Poké Ball that works especially well on Pokémon from the Dragon Egg Group.
Unown Ball - Increased catch rate on Unown.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:UNOWNBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.isSpecies?(:UNOWN)
  next catchRate
})
Code:
Expand Collapse Copy
#-------------------------------
[UNOWNBALL]
Name = Unown Ball
NamePlural = Unown Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A bizarre Poké Ball that excels at catching Unown.
Mythic Ball - Increased rate on Mythical and Legendary Pokémon.
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:MYTHICBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.has_flag?("Mythic") || battler.pokemon.species_data.has_flag?("Legendary")
  next catchRate
})
Add the Mythic or Legendary flag for all relevant species in pokemon.txt.
Code:
Expand Collapse Copy
#-------------------------------
[MYTHICBALL]
Name = Mythic Ball
NamePlural = Mythic Balls
Pocket = 3
Price = 1000
BattleUse = OnFoe
Flags = PokeBall
Description = A grand, storied Poké Ball that works especially well on Legendary and Mythical Pokémon.

Substitube gave quick ideas for balls that depended on the dex color or body shape, but didn't give any names or designs, so I'm going to give examples of how these handlers would work, but not make a full set.

Here's an example of a handler that checks the dex color of a Pokémon:
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:BLUEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.color == :Blue
  next catchRate
})
Here's an example of a handler that checks the body shape of a Pokémon:
Ruby:
Expand Collapse Copy
Battle::PokeBallEffects::ModifyCatchRate.add(:SNAKEBALL, proc { |ball, catchRate, battle, battler|
  catchRate *= 3 if battler.pokemon.species_data.shape == :Serpentine
  next catchRate
})

No graphics for most of these yet, but A.I.R made a bag sprite for the Elder Ball, Yule Ball, and Dawn Ball!
18139
18140
18141


See also:
Credits
Substitube
TechSkylander1518
A.I.R for the Elder Ball, Yule Ball, and Dawn Ball bag sprite
Author
TechSkylander1518
Views
3,849
First release
Last update

Ratings

5.00 star(s) 1 ratings

More resources from TechSkylander1518

Back
Top