- 8
- Posts
- 4
- Years
- Germany
- Seen May 7, 2021
Hi😊
I'm new here in this community. Last friday I started to learn about Pokémon Essentials, RPG Maker XP and how to create my own Pokémon game :)
Never did this before but I added a cool feature in my game that I want to share with you! EXP Candy!
I hope you like it!
Items added:
- Exp. Candy XS
- Exp. Candy S
- Exp. Candy M
- Exp. Candy L
- Exp. Candy XL
Code:
The base for this feature I took from this post: here and Vendily's reply.
He basically defined a new method called "pbChangeExp" which is a based on the existing method "pbChangeLevel"
---------------
What I did: I just refined this code because some things where missing.
The first thing I added was the pbChangeExp method:
I inserted the following code in the 'PItem_Items' script in the [[ Items ]]-section.
What it does :
1. If a Pokémon gains only 1 level it will: add the exp. to reach the next level -> display level up -> handle learning new move and evolution -> add left exp. -> display that + how much exp. are left to reach the next level
2. If a Pokémon gains more than 1 level it will: immediately jump to destination level unless there is a level in between where the Pokémon wants to learn a new move or evoles. If this happens it will display level up -> handle move learning / evolving (also if both events happen at the same level) -> go on until the Pokémon wants to learn the next move or reaches its destination level
I also changed the message that will be displayed if the destination level is reached so you can tell the difference between: "Pokémon gained 1 level" and "Pokémon gained more than 1 level"
PS: The texts in this method are written in German so you might wanna change that back to English, sorry for that^^
The translation for the alternative level up message is basically: {1} has risen to level {2}! (see elsif and elsif under # [MESSAGES] For 'Level Up!' #)
The second thing I added were the EXP Candy Items:
For that I added the following code block to the 'PItem_ItemEffects' script in the [[ Items ]]-section.
This is basically the RARECANDY item but we call 'pbChangeExp' instead of 'pbChangeLevel'.
PS: I change the amount of exp. gained from: Exp. Candy XS, Exp. Candy S and Exp. Candy M from 100 exp., 800 exp. and 3000 exp. to 500 exp., 1500 exp. and 4500 exp.
PBS Item.txt
Obviously I also needed to add the items to the PBS item.txt. Like this:
(You might need to change the first number in each line)
Sprites
To set up sprites for my new items I took this sprite from rarecandy:
"<Game folder>\Graphics\Icons\item263.png"
and copied it for every Exp. candy I made: item638.png, item639.png, item640.png, ...
Thank You!
I'm new here in this community. Last friday I started to learn about Pokémon Essentials, RPG Maker XP and how to create my own Pokémon game :)
Never did this before but I added a cool feature in my game that I want to share with you! EXP Candy!
I hope you like it!
Items added:
- Exp. Candy XS
- Exp. Candy S
- Exp. Candy M
- Exp. Candy L
- Exp. Candy XL
Code:
The base for this feature I took from this post: here and Vendily's reply.
He basically defined a new method called "pbChangeExp" which is a based on the existing method "pbChangeLevel"
---------------
What I did: I just refined this code because some things where missing.
The first thing I added was the pbChangeExp method:
I inserted the following code in the 'PItem_Items' script in the [[ Items ]]-section.
What it does :
1. If a Pokémon gains only 1 level it will: add the exp. to reach the next level -> display level up -> handle learning new move and evolution -> add left exp. -> display that + how much exp. are left to reach the next level
2. If a Pokémon gains more than 1 level it will: immediately jump to destination level unless there is a level in between where the Pokémon wants to learn a new move or evoles. If this happens it will display level up -> handle move learning / evolving (also if both events happen at the same level) -> go on until the Pokémon wants to learn the next move or reaches its destination level
I also changed the message that will be displayed if the destination level is reached so you can tell the difference between: "Pokémon gained 1 level" and "Pokémon gained more than 1 level"
PS: The texts in this method are written in German so you might wanna change that back to English, sorry for that^^
The translation for the alternative level up message is basically: {1} has risen to level {2}! (see elsif and elsif under # [MESSAGES] For 'Level Up!' #)
Spoiler:
Code:
#===============================================================================
# Change a Pokémon's Exp.
#===============================================================================
def pbChangeExp(pkmn,newexp,scene)
newexp=0 if newexp<0
maxexp=PBExperience.pbGetMaxExperience(pkmn.growthrate)
# TEST AREA |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#Kernel.pbMessage(_INTL("aktuelle EXP = {1}",pkmn.exp))
#Kernel.pbMessage(_INTL("total EXP current Lvl. = {1}",PBExperience.pbGetExpInternal(pkmn.level,pkmn.growthrate)))
#Kernel.pbMessage(_INTL("total EXP current Lvl. + 1 = {1}",PBExperience.pbGetExpInternal(pkmn.level+1,pkmn.growthrate)))
#Kernel.pbMessage(_INTL("max EXP = {1}",maxexp))
#Kernel.pbMessage(_INTL("Exp. Gain Pattern = {1}",pkmn.growthrate)) # see 'PBExperience'-script below [[ Data ]]-section
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
newexp=maxexp if newexp>maxexp
if pkmn.exp>newexp
attackdiff=pkmn.attack
defensediff=pkmn.defense
speeddiff=pkmn.speed
spatkdiff=pkmn.spatk
spdefdiff=pkmn.spdef
totalhpdiff=pkmn.totalhp
oldlevel=pkmn.level
expdiff=pkmn.exp-newexp
pkmn.exp=newexp
pkmn.calcStats
scene.pbRefresh
if oldlevel!=pkmn.level
attackdiff=pkmn.attack-attackdiff
defensediff=pkmn.defense-defensediff
speeddiff=pkmn.speed-speeddiff
spatkdiff=pkmn.spatk-spatkdiff
spdefdiff=pkmn.spdef-spdefdiff
totalhpdiff=pkmn.totalhp-totalhpdiff
Kernel.pbMessage(_INTL("{1} was downgraded to Level {2}!",pkmn.name,pkmn.level))
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pkmn.totalhp,pkmn.attack,pkmn.defense,pkmn.spatk,pkmn.spdef,pkmn.speed))
else
Kernel.pbMessage(_INTL("{1} lost {2} Exp. points!",pkmn.name,expdiff))
end
elsif pkmn.exp==newexp
Kernel.pbMessage(_INTL("{1}'s Exp. points remained unchanged.",pkmn.name))
# IMPORTANT PART -----------------------------------
else
# ADDING EXP FROM BONBON -------------
expdiff=newexp-pkmn.exp # Gained Exp. from Bonbon
Kernel.pbMessage(_INTL("{1} erhält insgesamt {2} Exp. Punkte.",pkmn.name,expdiff))
# level pkmn will reach due to Exp. boost
newlevel = PBExperience.pbGetLevelFromExperience(newexp,pkmn.growthrate)
# diff between current pkmn level and level it will reach due to Exp. boost
lvldiff = newlevel - pkmn.level
# set count (begin = pkmn level)
x = pkmn.level
while x < newlevel+1
x += 1
expcurr = pkmn.exp # currentExp
expend = PBExperience.pbGetExpInternal(x,pkmn.growthrate) # nextLevelExp
expgain = expend - expcurr # Diff currentExp to nextLevelExp to only level up one level at a time
# Gains level if only 1 levels is gained
#
# [INFO: The 'Level UP!' is displayed: "<pkmn> reached Lv. <lvl>"
# 'Learning new move' and 'evolution' are handled]
if expgain < expdiff && lvldiff < 2
# pre level up (stats curr)
oldlevel=pkmn.level
attackdiff=pkmn.attack
defensediff=pkmn.defense
speeddiff=pkmn.speed
spatkdiff=pkmn.spatk
spdefdiff=pkmn.spdef
totalhpdiff=pkmn.totalhp
#level up
pkmn.exp = pkmn.exp + expgain # Add Diff until next Level -> Level UP!
expdiff = expdiff - expgain # reduce left Exp.
pkmn.calcStats
scene.pbRefresh
# post level up (new stats)
if oldlevel!=pkmn.level
Kernel.pbMessage(_INTL("{1} erreicht Level {2}!",pkmn.name,pkmn.level))
attackdiff=pkmn.attack-attackdiff
defensediff=pkmn.defense-defensediff
speeddiff=pkmn.speed-speeddiff
spatkdiff=pkmn.spatk-spatkdiff
spdefdiff=pkmn.spdef-spdefdiff
totalhpdiff=pkmn.totalhp-totalhpdiff
pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pkmn.totalhp,pkmn.attack,pkmn.defense,pkmn.spatk,pkmn.spdef,pkmn.speed))
movelist=pkmn.getMoveList
for i in movelist
if i[0]==pkmn.level # Learned a new move
pbLearnMove(pkmn,i[1],true)
end
end
newspecies=pbCheckEvolution(pkmn)
if newspecies>0
pbFadeOutInWithMusic(99999){
evo=PokemonEvolutionScene.new
evo.pbStartScreen(pkmn,newspecies)
evo.pbEvolution
evo.pbEndScreen
}
end
end
# Gains level and immediately jumps to destination level apart from...
#
# [INFO: Intermediate 'Level UPs!' are displayed when pokemon wants to
# 'Learn a new move' or 'Evole']
elsif expgain < expdiff && lvldiff > 1
# pre level up (stats curr)
oldlevel=pkmn.level
attackdiff=pkmn.attack
defensediff=pkmn.defense
speeddiff=pkmn.speed
spatkdiff=pkmn.spatk
spdefdiff=pkmn.spdef
totalhpdiff=pkmn.totalhp
#level up
pkmn.exp = pkmn.exp + expgain # Add Diff until next Level -> Level UP!
expdiff = expdiff - expgain # reduce left Exp.
#pkmn.exp = newexp
pkmn.calcStats
scene.pbRefresh
# post level up (new stats)
if oldlevel!=pkmn.level
attackdiff=pkmn.attack-attackdiff
defensediff=pkmn.defense-defensediff
speeddiff=pkmn.speed-speeddiff
spatkdiff=pkmn.spatk-spatkdiff
spdefdiff=pkmn.spdef-spdefdiff
totalhpdiff=pkmn.totalhp-totalhpdiff
# [CHECK] For 'Learn a new move' and 'Evole species' #
newspecies=pbCheckEvolution(pkmn)
movelist=pkmn.getMoveList
movebool = -1
for i in movelist
# Learned a new move
if i[0]==pkmn.level
movebool = i[0]
newmove = i[1]
end
end
# [MESSAGES] For 'Level Up!' #
# If pkmn wants to learn a new move or pkmn want to evole: Show Level Up! Message (or if both is true)
if (pkmn.level != newlevel) and (movebool==pkmn.level or newspecies>0)
if pkmn.level != newlevel
Kernel.pbMessage(_INTL("{1} erreicht Level {2}!",pkmn.name,pkmn.level))
pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pkmn.totalhp,pkmn.attack,pkmn.defense,pkmn.spatk,pkmn.spdef,pkmn.speed))
end
# If pkmn reaches its destination level AND (learns a new move OR evoles)
elsif (pkmn.level == newlevel) and (movebool==pkmn.level or newspecies>0)
# Level Up! Message
Kernel.pbMessage(_INTL("{1} ist bis auf Level {2} gestiegen!",pkmn.name,pkmn.level))
pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pkmn.totalhp,pkmn.attack,pkmn.defense,pkmn.spatk,pkmn.spdef,pkmn.speed))
# If pkmn reaches its destination level AND (doesn't learn a new move OR doesn't evole)
elsif (pkmn.level == newlevel) and (movebool!=pkmn.level) and (newspecies<=0)
# Level Up! Message
Kernel.pbMessage(_INTL("{1} ist bis auf Level {2} gestiegen!",pkmn.name,pkmn.level))
pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pkmn.totalhp,pkmn.attack,pkmn.defense,pkmn.spatk,pkmn.spdef,pkmn.speed))
end
# Learned a new move [CHECK above]
for i in movelist
if i[0]==pkmn.level
pbLearnMove(pkmn,newmove,true)
end
end
# Evolve species [CHECK above]
if newspecies>0
pbFadeOutInWithMusic(99999){
evo=PokemonEvolutionScene.new
evo.pbStartScreen(pkmn,newspecies)
evo.pbEvolution
evo.pbEndScreen
}
end
end
# Don't Level UP just add the left Exp.
else
pkmn.exp = pkmn.exp + expdiff
break
end
end
# ADDING EXP FROM BONBON END-------------
# [INFO MESSAGE] For 'Adding left Exp.' and 'Exp. left to reach next level' #
expnextlevel = PBExperience.pbGetExpInternal(pkmn.level+1,pkmn.growthrate)-pkmn.exp
Kernel.pbMessage(_INTL("{1} erhält {2} Exp. Punkte!\\n({3} Exp. bis Level {4})",pkmn.name,expdiff,expnextlevel,pkmn.level+1))
#Kernel.pbMessage(_INTL("{1} gained {2} Exp. points!\\n({3} Exp. left to reach level {4})",pkmn.name,expdiff,expnextlevel,pkmn.level+1)) #english
# IMPORTANT PART END-----------------------------------
end
end
The second thing I added were the EXP Candy Items:
For that I added the following code block to the 'PItem_ItemEffects' script in the [[ Items ]]-section.
This is basically the RARECANDY item but we call 'pbChangeExp' instead of 'pbChangeLevel'.
PS: I change the amount of exp. gained from: Exp. Candy XS, Exp. Candy S and Exp. Candy M from 100 exp., 800 exp. and 3000 exp. to 500 exp., 1500 exp. and 4500 exp.
Spoiler:
Code:
# EXP CANDY XS: 500 exp.
ItemHandlers::UseOnPokemon.add(:EXPCANDYXS,proc { |item,pkmn,scene|
if pkmn.level>=PBExperience.maxLevel || pkmn.shadowPokemon?
scene.pbDisplay(_INTL("It won't have any effect."))
next false
end
[COLOR="Magenta"]pbChangeExp(pkmn,pkmn.exp+500,scene)[/COLOR]
scene.pbHardRefresh
next true
})
# EXP CANDY S: 1500 exp
ItemHandlers::UseOnPokemon.add(:EXPCANDYS,proc { |item,pkmn,scene|
if pkmn.level>=PBExperience.maxLevel || pkmn.shadowPokemon?
scene.pbDisplay(_INTL("It won't have any effect."))
next false
end
pbChangeExp(pkmn,pkmn.exp+1500,scene)
scene.pbHardRefresh
next true
})
# EXP CANDY M: 4500 exp
ItemHandlers::UseOnPokemon.add(:EXPCANDYM,proc { |item,pkmn,scene|
if pkmn.level>=PBExperience.maxLevel || pkmn.shadowPokemon?
scene.pbDisplay(_INTL("It won't have any effect."))
next false
end
pbChangeExp(pkmn,pkmn.exp+4500,scene)
scene.pbHardRefresh
next true
})
# EXP CANDY L: 10000 exp
ItemHandlers::UseOnPokemon.add(:EXPCANDYL,proc { |item,pkmn,scene|
if pkmn.level>=PBExperience.maxLevel || pkmn.shadowPokemon?
scene.pbDisplay(_INTL("It won't have any effect."))
next false
end
pbChangeExp(pkmn,pkmn.exp+10000,scene)
scene.pbHardRefresh
next true
})
# EXP CANDY L: 30000 exp
ItemHandlers::UseOnPokemon.add(:EXPCANDYXL,proc { |item,pkmn,scene|
if pkmn.level>=PBExperience.maxLevel || pkmn.shadowPokemon?
scene.pbDisplay(_INTL("It won't have any effect."))
next false
end
pbChangeExp(pkmn,pkmn.exp+30000,scene)
scene.pbHardRefresh
next true
})
PBS Item.txt
Obviously I also needed to add the items to the PBS item.txt. Like this:
(You might need to change the first number in each line)
638,EXPCANDYXS,Exp. Candy XS,Exp. Candies XS,1,20,"A candy that is packed with energy. When consumed, it will grant a single Pokémon a very small amount of 500 Exp. Points.",1,0,0,
639,EXPCANDYS,Exp. Candy S,Exp. Candies S,1,240,"A candy that is packed with energy. When consumed, it will grant a single Pokémon a small amount of 1500 Exp. Points.",1,0,0,
640,EXPCANDYM,Exp. Candy M,Exp. Candies M,1,1000,"A candy that is packed with energy. When consumed, it will grant a single Pokémon a moderate amount of 4.500 Exp. Points.",1,0,0,
641,EXPCANDYL,Exp. Candy L,Exp. Candies L,1,3000,"A candy that is packed with energy. When consumed, it will grant a single Pokémon a large amount of 10.000 Exp. Points.",1,0,0,
642,EXPCANDYXL,Exp. Candy XL,Exp. Candies XL,1,10000,"A candy that is packed with energy. When consumed, it will grant a single Pokémon a very large amount 30.000 of Exp. Points.",1,0,0,
Sprites
To set up sprites for my new items I took this sprite from rarecandy:
"<Game folder>\Graphics\Icons\item263.png"
and copied it for every Exp. candy I made: item638.png, item639.png, item640.png, ...
Thank You!