- Pokémon Essentials Version
- v18.1 ➖
This is a Proper Wild Item Drop script. I based my script on the work of Cilerba (https://reliccastle.com/threads/1332/)
I'd also like to say thank you to ThatWelshOne_, Vendily and Golisopod User for helping with parts of the script and pointing me in the right direction, respectively!
Essentially, what this does is read the pokemon.txt PBS file and generate a list of items that can be "dropped" by a wild pokemon at the end of a battle. These items are completely separate from Wild Hold Items (so a wild pokemon can both hold an item and drop completely different items at the same time if you so wish). The way the script is set up now, a pokemon will have up to 3 different drop items defined. At the end of a battle, a random number between 1-3 will be set for each item and that number of items will be "dropped" and added to the player's bag. There is a 50 percent chance to drop the common item, 20 to drop the uncommon item, and 5 to drop the rare item. These can be edited in the portion of the script "chances". There are also 2 other arrays of chances that the script will use instead, if the first pokemon in your party has the Compound Eyes ability, or the Super Luck ability, respectively.
Set up is very simple.
First, you're gonna want to define wildDropItems. In PokeBattle_Pokemon, find the section
In Compiler_PBS find
and paste this directly below it:
Now to add the proper fields to the PBS file:
in Misc_Data, scroll down to the section labeled Pokemon Data and add these to the list of things there:
SpeciesWildDropCommon = 28
SpeciesWildDropUncommon = 29
SpeciesWildDropRare = 30
(Make sure the numbers you use here are unused in your file, my next available ones were 28-30 but if you're already using those, just use the next available numbers)
then, just below, in
find
and directly underneath it, paste:
the next step is the actual script, put this anywhere above "Main". I recommend directly above, as that is where I have it placed.
The very last step is adding the fields WildDropCommon/WildDropUncommon/WildDropRare to the PBS file for whichever pokemon you want and defining the item that you want to be dropped. This is an optional field, so you don't have to define one at all, and I personally recommend putting those fields underneath the POKEDEX entry (or WIldItemCommon/WildItemUncommon/WildItemRare fields, if those are defined. I'm not sure if the position is important, but why chance it?)
If you have questions or any bugs/issues to report, lemme know and I'll try my best to help. I'm still learning to code myself!
I'd also like to say thank you to ThatWelshOne_, Vendily and Golisopod User for helping with parts of the script and pointing me in the right direction, respectively!
Essentially, what this does is read the pokemon.txt PBS file and generate a list of items that can be "dropped" by a wild pokemon at the end of a battle. These items are completely separate from Wild Hold Items (so a wild pokemon can both hold an item and drop completely different items at the same time if you so wish). The way the script is set up now, a pokemon will have up to 3 different drop items defined. At the end of a battle, a random number between 1-3 will be set for each item and that number of items will be "dropped" and added to the player's bag. There is a 50 percent chance to drop the common item, 20 to drop the uncommon item, and 5 to drop the rare item. These can be edited in the portion of the script "chances". There are also 2 other arrays of chances that the script will use instead, if the first pokemon in your party has the Compound Eyes ability, or the Super Luck ability, respectively.
Set up is very simple.
First, you're gonna want to define wildDropItems. In PokeBattle_Pokemon, find the section
def wildHoldItems
and underneath it, paste this bit of code:
Ruby:
# Returns the items this species can drop in the wild.
def wildDropItems
ret = []
ret.push(pbGetSpeciesData(@species,formSimple,SpeciesWildDropCommon))
ret.push(pbGetSpeciesData(@species,formSimple,SpeciesWildDropUncommon))
ret.push(pbGetSpeciesData(@species,formSimple,SpeciesWildDropRare))
return ret
end
In Compiler_PBS find
Ruby:
# If any held item is defined for this form, clear default data for all
# three held items.
if (contents["WildItemCommon"] && contents["WildItemCommon"]!="") ||
(contents["WildItemUncommon"] && contents["WildItemUncommon"]!="") ||
(contents["WildItemRare"] && contents["WildItemRare"]!="")
speciesData[speciesID][SpeciesWildItemCommon] = nil
speciesData[speciesID][SpeciesWildItemUncommon] = nil
speciesData[speciesID][SpeciesWildItemRare] = nil
end
and paste this directly below it:
Ruby:
if (contents["WildDropCommon"] && contents["WildDropCommon"]!="") ||
(contents["WildDropUncommon"] && contents["WildDropUncommon"]!="") ||
(contents["WildDropRare"] && contents["WildDropRare"]!="")
speciesData[speciesID][SpeciesWildDropCommon] = nil
speciesData[speciesID][SpeciesWildDropUncommon] = nil
speciesData[speciesID][SpeciesWildDropRare] = nil
end
Now to add the proper fields to the PBS file:
in Misc_Data, scroll down to the section labeled Pokemon Data and add these to the list of things there:
SpeciesWildDropCommon = 28
SpeciesWildDropUncommon = 29
SpeciesWildDropRare = 30
(Make sure the numbers you use here are unused in your file, my next available ones were 28-30 but if you're already using those, just use the next available numbers)
then, just below, in
def self.optionalValues(compilingForms = false)
find
Ruby:
"WildItemCommon" => [SpeciesWildItemCommon, "e", :PBItems],
"WildItemUncommon" => [SpeciesWildItemUncommon, "e", :PBItems],
"WildItemRare" => [SpeciesWildItemRare, "e", :PBItems],
and directly underneath it, paste:
Ruby:
"WildDropCommon" => [SpeciesWildDropCommon, "e", :PBItems],
"WildDropUncommon" => [SpeciesWildDropUncommon, "e", :PBItems],
"WildDropRare" => [SpeciesWildDropRare, "e", :PBItems],
the next step is the actual script, put this anywhere above "Main". I recommend directly above, as that is where I have it placed.
Ruby:
class PokeBattle_Scene
def pbWildBattleSuccess
@battle.battlers.each {|b|
next if !b
next if !b.opposes?
pkmn = b.pokemon
next if !pkmn
if pkmn.wildDropItems.inject(0){|sum,x| sum + x } != 0
wildDrop = pkmn.wildDropItems
firstqty = rand(3)+1
secondqty = rand(3)+1
thirdqty = rand(3)+1
firstPkmn = $Trainer.firstPokemon
chances = [50,20,5]
chances = [60,40,15] if firstPkmn && isConst?(firstPkmn.ability,PBAbilities,:COMPOUNDEYES)
chances = [50,50,50] if firstPkmn && isConst?(firstPkmn.ability,PBAbilities,:SUPERLUCK)
droprnd = rand(100)
if (wildDrop[0]==wildDrop[1] && wildDrop[1]==wildDrop[2]) || droprnd<chances[0]
if $PokemonBag.pbStoreItem(wildDrop[0],firstqty)
itemname = PBItems.getName(wildDrop[0])
pocket = pbGetPocket(wildDrop[0])
@battle.pbDisplayPaused(_INTL("{1} dropped\n{2} <icon=bagPocket#{pocket}> x{3}!",b.pbThis,itemname,firstqty))
end
end
if droprnd<chances[1]
if $PokemonBag.pbStoreItem(wildDrop[1],secondqty)
itemname = PBItems.getName(wildDrop[1])
pocket = pbGetPocket(wildDrop[1])
@battle.pbDisplayPaused(_INTL("{1} dropped\n{2} <icon=bagPocket#{pocket}> x{3}!",b.pbThis,itemname,secondqty))
end
end
if droprnd<chances[2]
if $PokemonBag.pbStoreItem(wildDrop[2],thirdqty)
itemname = PBItems.getName(wildDrop[2])
pocket = pbGetPocket(wildDrop[2])
@battle.pbDisplayPaused(_INTL("{1} dropped\n{2} <icon=bagPocket#{pocket}> x{3}!",b.pbThis,itemname,thirdqty))
end
end
end
}
@battleEnd = true
pbBGMPlay(pbGetWildVictoryME)
end
end
The very last step is adding the fields WildDropCommon/WildDropUncommon/WildDropRare to the PBS file for whichever pokemon you want and defining the item that you want to be dropped. This is an optional field, so you don't have to define one at all, and I personally recommend putting those fields underneath the POKEDEX entry (or WIldItemCommon/WildItemUncommon/WildItemRare fields, if those are defined. I'm not sure if the position is important, but why chance it?)
If you have questions or any bugs/issues to report, lemme know and I'll try my best to help. I'm still learning to code myself!
- Credits
- Tungesten Basilisk (Me)
Cilerba
ThatWelshOne_