- Pokémon Essentials Version
- v20.1 ➖
I've had a few ideas for various new mechanics kicking around and figured I might as well share them! There's no graphics anywhere here - I'm no spriter, as you can probably tell from the icon lol. If you do end up creating your own graphics for something here, I'd really appreciate if you'd let it be included as part of the resource!
There's no PBS for items - I haven't decided on cost or description for them just yet, and I don't want to make PBS entries with just name and pocket. I might get around to adding some later, this is an ongoing project!
Sprite generously made by wrigty12!
Slot Charm - Slot Machines will never slip when stopped, and move at 75% speed.
Sprite generously made by wrigty12!
The TCG doesn’t have a physical/special split, I just went for Special Defense since that’s what the Soul Dew boosts. If you want to make it Defense, switch
You will need to add the flag Regi to all Regis in your game, similar to the UltraBeast flag.
Beastite - Held item for Ultra Beasts that increases the damage of all attacks by 20%. Based on Beastite from the TCG.
Burning Scarf - Held item equivalent to Flame Body. Based on the Burning Scarf from the TCG.
In the TCG, it has a 100% chance (and regardless of contact, because the TCG doesn’t have contact mechanics), but to keep it from outclassing Flame Body, I gave it the same 30% chance.
Curse Powder - Held item equivalent to Aftermath. Unlike Aftermath, however, it’s not affected by Damp. Contact is still required. Based on Curse Powder from the TCG.
Dragon Talon - Rocky Helmet, but, similar to the Black Sludge, damages the holder by ⅛ max HP at the end of each turn if they’re not Dragon-type. Based on the Dragon Talon from the TCG.
Hard Charm - Boosts Defense by 10%, basically a Defense counterpart to the Muscle Band/Wise Glasses. Based on the Hard Charm from the TCG.
Hustle Belt - Increases power of moves by 30% when holder is at 30% or less of total HP. (The same “in a pinch” as in Blaze/Torrent/Overgrow/Swarm) Based on the Hustle Belt from the TCG.
Gloves - Held items that increase damage by 10% if the target is a certain type. Based on these items from the TCG:
Fairy Charms - Reduces damage by 50% if the move is of a certain type (or, in one case, if attacker is an Ultra Beast) and the holder is a Fairy-type. Based on these items from the TCG:
You could make this a Key Item or an item that gets used up when you use it on a Pokémon, and make players seek them out like Heart Scales.
Set the
There's no PBS for items - I haven't decided on cost or description for them just yet, and I don't want to make PBS entries with just name and pocket. I might get around to adding some later, this is an ongoing project!
Evolution Methods
LevelShiny
- Pokémon evolves at or above the given level if it's shiny. Make sure to put this first in the list of evos, so the others don't override it. And make sure to consider the lore for this evolved form - if it only evolves when it's shiny, the player should only ever see it shiny, even if they encounter it in the wild or when used by another trainer. (But you don't have to use this as the only way to get a species - you could use it to let shiny mons evolve earlier!)
Ruby:
GameData::Evolution.register({
:id => :LevelShiny,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
next pkmn.level >= parameter && pkmn.shiny?
}
})
LevelQuiet
and LevelLoud
- Evolves at or above the given level if BGM and SE in settings are less than 50 (LevelQuiet) or above 50 (LevelLoud). They don't have to be the same number, but they have to both be in the quiet/loud range - SE at 50 and BGM at 60 wouldn't work for loud, for example.
Ruby:
GameData::Evolution.register({
:id => :LevelQuiet,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
next pkmn.level >= parameter && $PokemonSystem.bgmvolume <50 && $PokemonSystem.sevolume <50
}
})
GameData::Evolution.register({
:id => :LevelLoud,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
next pkmn.level >= parameter && $PokemonSystem.bgmvolume>50 && $PokemonSystem.sevolume>50
}
})
LevelNickname
- Evolves at or above the given level if given a nickname.
Ruby:
GameData::Evolution.register({
:id => :LevelNickname,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
next pkmn.level >= parameter && pkmn.name != pkmn.speciesName
}
})
LevelStatus
- Level up with a given non-volatile status effect. (Burn, Sleep, Poison, etc.) The argument is the status effect rather than the level - for example, TOXEON,LevelStatus,Poison
. This does mean that any level-up would meet the evolution requirement - if you want a specific level and a specific status effect, you could hard-code the level requirement, or you could hardcode the status and have multiple evolution methods for each status. (Vendily and Adrichuwu put one together here)
Ruby:
GameData::Evolution.register({
:id => :LevelStatus,
:parameter => :Status,
:level_up_proc => proc { |pkmn, parameter|
next pkmn.status == parameter
}
})
LevelCharge
and LevelDischarge
- Evolves at or above the given level if the system is charging or using its battery. Note that desktop computers are considered to always be charging, so you'll want to provide some alternative methods here. (I'm not even sure how power states are read with JoiPlay users)
Ruby:
GameData::Evolution.register({
:id => :LevelCharge,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
pstate = System.power_state
next pkmn.level >= parameter && !pstate[:discharging]
}
})
GameData::Evolution.register({
:id => :LevelDischarge,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
pstate = System.power_state
next pkmn.level >= parameter && pstate[:discharging]
}
})
LevelRand
- 50% chance of evolving at or above the given level, rather than being guaranteed. (The chance is generated on level-up, so a player could still soft-reset)
Ruby:
GameData::Evolution.register({
:id => :LevelRand,
:parameter => Integer,
:level_up_proc => proc { |pkmn, parameter|
next pkmn.level >= parameter && rand(2) == 0
}
})
Items
Charms
Berry Charm - Doubles the yield of all Berry Plants.Sprite generously made by wrigty12!
In Overworld_BerryPlants, under the line
add
Ruby:
def pbPickBerry(berry, qty = 1)
Ruby:
qty *= 2 if $bag.has?(:BERRYCHARM)
Sprite generously made by wrigty12!
In Minigame_SlotMachine, change line
to
and change line
to
Ruby:
@slipping = 0 if noslipping
Ruby:
@slipping = 0 if noslipping || $bag.has?(:SPINNINGCHARM)
Ruby:
@toppos += SCROLLSPEED
Ruby:
speed = SCROLLSPEED
speed *= 3/4 if $bag.has?(:SPINNINGCHARM)
@toppos += speed
Held Items
Ancient Crystal - Held item for Regis that boosts Special Defense by 30%. Based on the Ancient Crystal from the TCG.
Ruby:
Battle::ItemEffects::DamageCalcFromTarget.add(:ANCIENTCRYSTAL,
proc { |item, user, target, move, mults, baseDmg, type|
next if !target.pokemon.species_data.has_flag?("Regi")
if move.specialMove?
mults[:defense_multiplier] *= 1.3
end
}
)
specialMove?
to physicalMove?
.You will need to add the flag Regi to all Regis in your game, similar to the UltraBeast flag.
Ruby:
Battle::ItemEffects::DamageCalcFromUser.add(:BEASTITE,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if user.pokemon.species_data.has_flag?("UltraBeast")
}
)
Ruby:
Battle::ItemEffects::OnBeingHit.add(:BURNINGSCARF,
proc { |item, user, target, move, battle|
next if battle.pbRandom(100) >= 30
next if !move.pbContactMove?(user) || !user.affectedByContactEffect? || user.burned?
if user.pbCanBurn?(target, Battle::Scene::USE_ABILITY_SPLASH)
msg = _INTL("{1}'s {2} burned {3}!", target.pbThis, target.itemName, user.pbThis(true))
user.pbBurn(target, msg)
end
}
)
In the TCG, it has a 100% chance (and regardless of contact, because the TCG doesn’t have contact mechanics), but to keep it from outclassing Flame Body, I gave it the same 30% chance.
Ruby:
Battle::ItemEffects::OnBeingHit.add(:CURSEPOWDER,
proc { |item, user, target, move, battle|
next if !target.fainted?
next if !move.pbContactMove?(user)
battle.pbShowAbilitySplash(target)
if user.takesIndirectDamage?(Battle::Scene::USE_ABILITY_SPLASH) &&
user.affectedByContactEffect?(Battle::Scene::USE_ABILITY_SPLASH)
battle.scene.pbDamageAnimation(user)
user.pbReduceHP(user.totalhp / 4, false)
battle.pbDisplay(_INTL("{1} was hurt by {2}'s {3}!", user.pbThis,target.pbThis, target.itemName))
end
}
)
Ruby:
Battle::ItemEffects::OnBeingHit.add(:DRAGONTALON,
proc { |item, user, target, move, battle|
next if !move.pbContactMove?(user) || !user.affectedByContactEffect?
next if !user.takesIndirectDamage?
battle.scene.pbDamageAnimation(user)
user.pbReduceHP(user.totalhp / 6, false)
battle.pbDisplay(_INTL("{1} was hurt by the {2}!", user.pbThis, target.itemName))
}
)
Battle::ItemEffects::EndOfRoundHealing.add(:DRAGONTALON,
proc { |item, battler, battle|
if !battler.pbHasType?(:DRAGON) && battler.takesIndirectDamage?
battle.pbCommonAnimation("UseItem", battler)
battler.pbTakeEffectDamage(battler.totalhp / 8) { |hp_lost|
battle.pbDisplay(_INTL("{1} is hurt by its {2}!", battler.pbThis, battler.itemName))
}
end
}
)
Ruby:
Battle::ItemEffects::DamageCalcFromTarget.add(:HARDCHARM,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:defense_multiplier] *= 1.1 if move.physicalMove?
}
)
Ruby:
Battle::ItemEffects::DamageCalcFromUser.add(:HUSTLEBELT,
proc { |item, user, target, move, mults, baseDmg, type|
if user.hp <= user.totalhp / 3
mults[:attack_multiplier] *= 1.3
end
}
)
- Crushing Gloves (Steel)
- Cleansing Gloves (Technically Ghost/Poison/Psychic by TCG mechanics, but I chose Ghost because it made the most sense for the design)
- Digging Gloves (technically Rock/Ground/Fighting by TCG mechanics, but I chose Ground because it made the most sense for the design)
- Fire-Resistant Gloves (Fire)
- Hunting Gloves (Dragon)
- Justified Gloves (Dark)
- Rubber Gloves (Electric)
- Spongy Gloves (Water)
- Weeding Gloves (Grass)
Ruby:
Battle::ItemEffects::DamageCalcFromUser.add(:CRUSHINGGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:STEEL)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:CLEANSINGGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:GHOST)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:DIGGINGGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:GROUND)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:FIRERESISTANTGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:FIRE)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:HUNTINGGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:DRAGON)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:JUSTIFIEDGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:DARK)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:RUBBERGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:ELECTRIC)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:SPONGYGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:WATER)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:WEEDINGGLOVES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if target.pbHasType?(:GRASS)
}
)
- Fairy Charm F (Fighting)
- Fairy Charm G (Grass)
- Fairy Charm L (Electric)
- Fairy Charm P (Psychic)
- Fairy Charm UB (Ultra Beasts)
Ruby:
Battle::ItemEffects::DamageCalcFromTarget.add(:FAIRYCHARMF,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:defense_multiplier] *= 1.5 if type == :FIGHTING && target.pbHasType?(:FAIRY)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:FAIRYCHARMG,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:defense_multiplier] *= 1.5 if type == :GRASS && target.pbHasType?(:FAIRY)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:FAIRYCHARML,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:defense_multiplier] *= 1.5 if type == :ELECTRIC && target.pbHasType?(:FAIRY)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:FAIRYCHARMP,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:defense_multiplier] *= 1.5 if type == :PSYCHIC && target.pbHasType?(:FAIRY)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:FAIRYCHARMUB,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:defense_multiplier] *= 1.5 if user.pokemon.species_data.has_flag?("UltraBeast") && target.pbHasType?(:FAIRY)
}
Poké Balls
Color Ball - makes a Pokémon shiny, but sets all of its IVs to 0. Based on this Rare Candy Treatment comic.
Ruby:
Battle::PokeBallEffects::OnCatch.add(:COLORBALL, proc { |ball, battle, pkmn|
pkmn.shiny = true
GameData::Stat.each_main { |s| pkmn.iv[s.id] = 0 }
})
Other
Memory Capsule - An item equivalent to the Move Reminder. Based on the Memory Capsule from the TCG.You could make this a Key Item or an item that gets used up when you use it on a Pokémon, and make players seek them out like Heart Scales.
Ruby:
ItemHandlers::UseOnPokemon.add(:MEMORYCAPSULE, proc { |item, qty, pkmn, scene|
if !pkmn.can_relearn_move?
scene.pbDisplay(_INTL("It won't have any effect."))
next false
end
next pbRelearnMoveScreen(pkmn)
})
FieldUse
property to OnPokemon
.- Credits
- Credit to TechSkylander1518, please!
Certain ideas here were inspired by others as well, so please check the notes for the specific idea you're using!