• 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.
  • The Eevee Expo Game Jam has concluded! 🎉 Head on over to the game jam forum to play through the games.
    Don't forget to come back September 21st to vote for your favorites!
  • Reminder: AI-generated content is not allowed on the forums per the Rules and Regulations. Please contact us if you have any questions!

Idea [v21.1] Five Abilities from Elite Redux

jtrainor9708

Novice
Member
Joined
Mar 22, 2025
Posts
11
I'm a big fan of Pokemon Elite Redux, and want to recreate some of the abilities in my Essentials Game. Here are the ones I want to recreate:

Sea Guardian: Raises user's highest stat by 1 when it Rains.
Sand Song: Gives sound moves a 1.2x boost and turn Ground Type if they are Normal Type
Predator: Dealing a KO heals 1/4 of this Pokémon's max HP
Energy Siphon: Heals the user for 1/4 of the damage they deal
Wind Rage: Clears the field of Weather, Terrains, Entry Hazards, etc... on switch-in

I barely know anything on how to program these abilities, so if anyone could help me, that would be greatly appreciated. Thank you!
 
Ruby:
Expand Collapse Copy
Battle::AbilityEffects::OnSwitchIn.add(:SEAGUARDIAN,
  proc { |ability, battler, battle, switch_in|
    next if ![:Rain, :HeavyRain].include?(battler.effectiveWeather)
    stats = battler.plainStats.sort_by {|stat, value| value}.reverse
    highestStat = stats[0][0]
    next if battler.pbCanRaiseStatStage?(highestStat)
    battler.pbRaiseStatStageByAbility(highestStat, 1, battler)
  }
)

Ruby:
Expand Collapse Copy
Battle::AbilityEffects::DamageCalcFromUser.add(:SANDSONG,
  proc { |ability, user, target, move, mults, power, type|
    mults[:power_multiplier] *= 1.2 if move.soundMove?
  }
)

Battle::AbilityEffects::ModifyMoveBaseType.add(:SANDSONG,
  proc { |ability, user, move, type|
    next if type != :NORMAL || !GameData::Type.exists?(:GROUND) || !move.soundMove?
    next :FLYING
  }
)

Ruby:
Expand Collapse Copy
Battle::AbilityEffects::OnEndOfUsingMove.add(:PREDATOR,
  proc { |ability, user, targets, move, battle|
    next if battle.pbAllFainted?(user.idxOpposingSide)
    numFainted = 0
    targets.each { |b| numFainted += 1 if b.damageState.fainted}
    next if numFainted == 0 || !user.canHeal?
    battle.pbShowAbilitySplash(user)
    user.pbRecoverHP(user.totalhp / 4 * numFainted)
    battle.pbDisplay(_INTL("{1}'s HP was restored.", user.pbThis))
    battle.pbHideAbilitySplash(user)
  }
)

Ruby:
Expand Collapse Copy
Battle::AbilityEffects::OnDealingHit.add(:ENERGYSIPHON,
  proc { |ability, user, target, move, battle|
    next if !user.canHeal?
    next if target.damageState.hpLost <= 0
    hpGain = (target.damageState.hpLost / 4.0).round
    battle.pbShowAbilitySplash(user)
    user.pbRecoverHPFromDrain(hpGain, target)
    battle.pbHideAbillitySplash(user)
  }
)
 
Ruby:
Expand Collapse Copy
Battle::AbilityEffects::OnSwitchIn.add(:SEAGUARDIAN,
  proc { |ability, battler, battle, switch_in|
    next if ![:Rain, :HeavyRain].include?(battler.effectiveWeather)
    stats = battler.plainStats.sort_by {|stat, value| value}.reverse
    highestStat = stats[0][0]
    next if battler.pbCanRaiseStatStage?(highestStat)
    battler.pbRaiseStatStageByAbility(highestStat, 1, battler)
  }
)

Ruby:
Expand Collapse Copy
Battle::AbilityEffects::DamageCalcFromUser.add(:SANDSONG,
  proc { |ability, user, target, move, mults, power, type|
    mults[:power_multiplier] *= 1.2 if move.soundMove?
  }
)

Battle::AbilityEffects::ModifyMoveBaseType.add(:SANDSONG,
  proc { |ability, user, move, type|
    next if type != :NORMAL || !GameData::Type.exists?(:GROUND) || !move.soundMove?
    next :FLYING
  }
)

Ruby:
Expand Collapse Copy
Battle::AbilityEffects::OnEndOfUsingMove.add(:PREDATOR,
  proc { |ability, user, targets, move, battle|
    next if battle.pbAllFainted?(user.idxOpposingSide)
    numFainted = 0
    targets.each { |b| numFainted += 1 if b.damageState.fainted}
    next if numFainted == 0 || !user.canHeal?
    battle.pbShowAbilitySplash(user)
    user.pbRecoverHP(user.totalhp / 4 * numFainted)
    battle.pbDisplay(_INTL("{1}'s HP was restored.", user.pbThis))
    battle.pbHideAbilitySplash(user)
  }
)

Ruby:
Expand Collapse Copy
Battle::AbilityEffects::OnDealingHit.add(:ENERGYSIPHON,
  proc { |ability, user, target, move, battle|
    next if !user.canHeal?
    next if target.damageState.hpLost <= 0
    hpGain = (target.damageState.hpLost / 4.0).round
    battle.pbShowAbilitySplash(user)
    user.pbRecoverHPFromDrain(hpGain, target)
    battle.pbHideAbillitySplash(user)
  }
)
Thank you so much! I didn't see any code for Wind Rage, so I'm assuming that is extremely difficult to make.
 
Back
Top