mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
DNA splicers
This commit is contained in:
@@ -66,6 +66,8 @@ class PictureWindow < SpriteWindow_Base
|
||||
setBitmap(pathOrBitmap)
|
||||
end
|
||||
|
||||
def picture; @_iconbitmap; end
|
||||
|
||||
def dispose
|
||||
clearBitmaps()
|
||||
super
|
||||
|
||||
@@ -18,6 +18,17 @@ class AnimatedBitmap
|
||||
end
|
||||
end
|
||||
|
||||
def pbSetColor(r = 0, g = 0, b = 0, a = 255)
|
||||
for i in 0..@bitmap.bitmap.width
|
||||
for j in 0..@bitmap.bitmap.height
|
||||
if @bitmap.bitmap.get_pixel(i, j).alpha != 0
|
||||
color = Color.new(r, g, b, a)
|
||||
@bitmap.bitmap.set_pixel(i, j, color)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def [](index)
|
||||
; @bitmap[index];
|
||||
end
|
||||
@@ -82,7 +93,6 @@ class AnimatedBitmap
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
|
||||
@@ -83,7 +83,7 @@ module PokeBattle_BattleCommon
|
||||
if itemName.starts_with_vowel?
|
||||
pbDisplay(_INTL("{1} threw an {2}!",pbPlayer.name,itemName))
|
||||
else
|
||||
pbDisplay(_INTL("{1} threw a {2}!",pbPlayer.name,itemName))
|
||||
pbDisplay(_INTL("{1} vcthrew a {2}!",pbPlayer.name,itemName))
|
||||
end
|
||||
pbDisplay(_INTL("But there was no target..."))
|
||||
return
|
||||
|
||||
@@ -2,42 +2,44 @@
|
||||
# ItemHandlers
|
||||
#===============================================================================
|
||||
module ItemHandlers
|
||||
UseText = ItemHandlerHash.new
|
||||
UseFromBag = ItemHandlerHash.new
|
||||
ConfirmUseInField = ItemHandlerHash.new
|
||||
UseInField = ItemHandlerHash.new
|
||||
UseOnPokemon = ItemHandlerHash.new
|
||||
CanUseInBattle = ItemHandlerHash.new
|
||||
UseInBattle = ItemHandlerHash.new
|
||||
UseText = ItemHandlerHash.new
|
||||
UseFromBag = ItemHandlerHash.new
|
||||
ConfirmUseInField = ItemHandlerHash.new
|
||||
UseInField = ItemHandlerHash.new
|
||||
UseOnPokemon = ItemHandlerHash.new
|
||||
CanUseInBattle = ItemHandlerHash.new
|
||||
UseInBattle = ItemHandlerHash.new
|
||||
BattleUseOnBattler = ItemHandlerHash.new
|
||||
BattleUseOnPokemon = ItemHandlerHash.new
|
||||
|
||||
def self.hasUseText(item)
|
||||
return UseText[item]!=nil
|
||||
return UseText[item] != nil
|
||||
end
|
||||
|
||||
def self.hasOutHandler(item) # Shows "Use" option in Bag
|
||||
return UseFromBag[item]!=nil || UseInField[item]!=nil || UseOnPokemon[item]!=nil
|
||||
def self.hasOutHandler(item)
|
||||
# Shows "Use" option in Bag
|
||||
return UseFromBag[item] != nil || UseInField[item] != nil || UseOnPokemon[item] != nil
|
||||
end
|
||||
|
||||
def self.hasUseInFieldHandler(item) # Shows "Register" option in Bag
|
||||
return UseInField[item]!=nil
|
||||
def self.hasUseInFieldHandler(item)
|
||||
# Shows "Register" option in Bag
|
||||
return UseInField[item] != nil
|
||||
end
|
||||
|
||||
def self.hasUseOnPokemon(item)
|
||||
return UseOnPokemon[item]!=nil
|
||||
return UseOnPokemon[item] != nil
|
||||
end
|
||||
|
||||
def self.hasUseInBattle(item)
|
||||
return UseInBattle[item]!=nil
|
||||
return UseInBattle[item] != nil
|
||||
end
|
||||
|
||||
def self.hasBattleUseOnBattler(item)
|
||||
return BattleUseOnBattler[item]!=nil
|
||||
return BattleUseOnBattler[item] != nil
|
||||
end
|
||||
|
||||
def self.hasBattleUseOnPokemon(item)
|
||||
return BattleUseOnPokemon[item]!=nil
|
||||
return BattleUseOnPokemon[item] != nil
|
||||
end
|
||||
|
||||
# Returns text to display instead of "Use"
|
||||
@@ -75,35 +77,33 @@ module ItemHandlers
|
||||
end
|
||||
|
||||
# Returns whether item was used
|
||||
def self.triggerUseOnPokemon(item,pkmn,scene)
|
||||
def self.triggerUseOnPokemon(item, pkmn, scene)
|
||||
return false if !UseOnPokemon[item]
|
||||
return UseOnPokemon.trigger(item,pkmn,scene)
|
||||
return UseOnPokemon.trigger(item, pkmn, scene)
|
||||
end
|
||||
|
||||
def self.triggerCanUseInBattle(item,pkmn,battler,move,firstAction,battle,scene,showMessages=true)
|
||||
return true if !CanUseInBattle[item] # Can use the item by default
|
||||
return CanUseInBattle.trigger(item,pkmn,battler,move,firstAction,battle,scene,showMessages)
|
||||
def self.triggerCanUseInBattle(item, pkmn, battler, move, firstAction, battle, scene, showMessages = true)
|
||||
return true if !CanUseInBattle[item] # Can use the item by default
|
||||
return CanUseInBattle.trigger(item, pkmn, battler, move, firstAction, battle, scene, showMessages)
|
||||
end
|
||||
|
||||
def self.triggerUseInBattle(item,battler,battle)
|
||||
UseInBattle.trigger(item,battler,battle)
|
||||
def self.triggerUseInBattle(item, battler, battle)
|
||||
UseInBattle.trigger(item, battler, battle)
|
||||
end
|
||||
|
||||
# Returns whether item was used
|
||||
def self.triggerBattleUseOnBattler(item,battler,scene)
|
||||
def self.triggerBattleUseOnBattler(item, battler, scene)
|
||||
return false if !BattleUseOnBattler[item]
|
||||
return BattleUseOnBattler.trigger(item,battler,scene)
|
||||
return BattleUseOnBattler.trigger(item, battler, scene)
|
||||
end
|
||||
|
||||
# Returns whether item was used
|
||||
def self.triggerBattleUseOnPokemon(item,pkmn,battler,choices,scene)
|
||||
def self.triggerBattleUseOnPokemon(item, pkmn, battler, choices, scene)
|
||||
return false if !BattleUseOnPokemon[item]
|
||||
return BattleUseOnPokemon.trigger(item,pkmn,battler,choices,scene)
|
||||
return BattleUseOnPokemon.trigger(item, pkmn, battler, choices, scene)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
def pbCanRegisterItem?(item)
|
||||
return ItemHandlers.hasUseInFieldHandler(item)
|
||||
end
|
||||
@@ -112,74 +112,72 @@ def pbCanUseOnPokemon?(item)
|
||||
return ItemHandlers.hasUseOnPokemon(item) || GameData::Item.get(item).is_machine?
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# Change a Pokémon's level
|
||||
#===============================================================================
|
||||
def pbChangeLevel(pkmn,newlevel,scene)
|
||||
def pbChangeLevel(pkmn, newlevel, scene)
|
||||
newlevel = newlevel.clamp(1, GameData::GrowthRate.max_level)
|
||||
if pkmn.level==newlevel
|
||||
pbMessage(_INTL("{1}'s level remained unchanged.",pkmn.name))
|
||||
elsif pkmn.level>newlevel
|
||||
attackdiff = pkmn.attack
|
||||
if pkmn.level == newlevel
|
||||
pbMessage(_INTL("{1}'s level remained unchanged.", pkmn.name))
|
||||
elsif pkmn.level > newlevel
|
||||
attackdiff = pkmn.attack
|
||||
defensediff = pkmn.defense
|
||||
speeddiff = pkmn.speed
|
||||
spatkdiff = pkmn.spatk
|
||||
spdefdiff = pkmn.spdef
|
||||
speeddiff = pkmn.speed
|
||||
spatkdiff = pkmn.spatk
|
||||
spdefdiff = pkmn.spdef
|
||||
totalhpdiff = pkmn.totalhp
|
||||
pkmn.level = newlevel
|
||||
pkmn.calc_stats
|
||||
scene.pbRefresh
|
||||
pbMessage(_INTL("{1} dropped to Lv. {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
|
||||
pbMessage(_INTL("{1} dropped to Lv. {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))
|
||||
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))
|
||||
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed))
|
||||
else
|
||||
attackdiff = pkmn.attack
|
||||
attackdiff = pkmn.attack
|
||||
defensediff = pkmn.defense
|
||||
speeddiff = pkmn.speed
|
||||
spatkdiff = pkmn.spatk
|
||||
spdefdiff = pkmn.spdef
|
||||
speeddiff = pkmn.speed
|
||||
spatkdiff = pkmn.spatk
|
||||
spdefdiff = pkmn.spdef
|
||||
totalhpdiff = pkmn.totalhp
|
||||
pkmn.level = newlevel
|
||||
pkmn.changeHappiness("vitamin")
|
||||
pkmn.calc_stats
|
||||
scene.pbRefresh
|
||||
if scene.is_a?(PokemonPartyScreen)
|
||||
scene.pbDisplay(_INTL("{1} grew to Lv. {2}!",pkmn.name,pkmn.level))
|
||||
scene.pbDisplay(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
else
|
||||
pbMessage(_INTL("{1} grew to Lv. {2}!",pkmn.name,pkmn.level))
|
||||
pbMessage(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
|
||||
end
|
||||
attackdiff = pkmn.attack-attackdiff
|
||||
defensediff = pkmn.defense-defensediff
|
||||
speeddiff = pkmn.speed-speeddiff
|
||||
spatkdiff = pkmn.spatk-spatkdiff
|
||||
spdefdiff = pkmn.spdef-spdefdiff
|
||||
totalhpdiff = pkmn.totalhp-totalhpdiff
|
||||
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),scene)
|
||||
totalhpdiff, attackdiff, defensediff, spatkdiff, spdefdiff, speeddiff), scene)
|
||||
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),scene)
|
||||
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
|
||||
# Learn new moves upon level up
|
||||
movelist = pkmn.getMoveList
|
||||
for i in movelist
|
||||
next if i[0]!=pkmn.level
|
||||
pbLearnMove(pkmn,i[1],true) { scene.pbUpdate }
|
||||
next if i[0] != pkmn.level
|
||||
pbLearnMove(pkmn, i[1], true) { scene.pbUpdate }
|
||||
end
|
||||
# Check for evolution
|
||||
newspecies = pkmn.check_evolution_on_level_up
|
||||
if newspecies
|
||||
pbFadeOutInWithMusic {
|
||||
evo = PokemonEvolutionScene.new
|
||||
evo.pbStartScreen(pkmn,newspecies)
|
||||
evo.pbStartScreen(pkmn, newspecies)
|
||||
evo.pbEvolution
|
||||
evo.pbEndScreen
|
||||
scene.pbRefresh if scene.is_a?(PokemonPartyScreen)
|
||||
@@ -191,9 +189,9 @@ end
|
||||
def pbTopRightWindow(text, scene = nil)
|
||||
window = Window_AdvancedTextPokemon.new(text)
|
||||
window.width = 198
|
||||
window.x = Graphics.width-window.width
|
||||
window.y = 0
|
||||
window.z = 99999
|
||||
window.x = Graphics.width - window.width
|
||||
window.y = 0
|
||||
window.z = 99999
|
||||
pbPlayDecisionSE
|
||||
loop do
|
||||
Graphics.update
|
||||
@@ -208,33 +206,33 @@ end
|
||||
#===============================================================================
|
||||
# Restore HP
|
||||
#===============================================================================
|
||||
def pbItemRestoreHP(pkmn,restoreHP)
|
||||
newHP = pkmn.hp+restoreHP
|
||||
newHP = pkmn.totalhp if newHP>pkmn.totalhp
|
||||
hpGain = newHP-pkmn.hp
|
||||
def pbItemRestoreHP(pkmn, restoreHP)
|
||||
newHP = pkmn.hp + restoreHP
|
||||
newHP = pkmn.totalhp if newHP > pkmn.totalhp
|
||||
hpGain = newHP - pkmn.hp
|
||||
pkmn.hp = newHP
|
||||
return hpGain
|
||||
end
|
||||
|
||||
def pbHPItem(pkmn,restoreHP,scene)
|
||||
if !pkmn.able? || pkmn.hp==pkmn.totalhp
|
||||
def pbHPItem(pkmn, restoreHP, scene)
|
||||
if !pkmn.able? || pkmn.hp == pkmn.totalhp
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
return false
|
||||
end
|
||||
hpGain = pbItemRestoreHP(pkmn,restoreHP)
|
||||
hpGain = pbItemRestoreHP(pkmn, restoreHP)
|
||||
scene.pbRefresh
|
||||
scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.",pkmn.name,hpGain))
|
||||
scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.", pkmn.name, hpGain))
|
||||
return true
|
||||
end
|
||||
|
||||
def pbBattleHPItem(pkmn,battler,restoreHP,scene)
|
||||
def pbBattleHPItem(pkmn, battler, restoreHP, scene)
|
||||
if battler
|
||||
if battler.pbRecoverHP(restoreHP)>0
|
||||
scene.pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis))
|
||||
if battler.pbRecoverHP(restoreHP) > 0
|
||||
scene.pbDisplay(_INTL("{1}'s HP was restored.", battler.pbThis))
|
||||
end
|
||||
else
|
||||
if pbItemRestoreHP(pkmn,restoreHP)>0
|
||||
scene.pbDisplay(_INTL("{1}'s HP was restored.",pkmn.name))
|
||||
if pbItemRestoreHP(pkmn, restoreHP) > 0
|
||||
scene.pbDisplay(_INTL("{1}'s HP was restored.", pkmn.name))
|
||||
end
|
||||
end
|
||||
return true
|
||||
@@ -243,20 +241,20 @@ end
|
||||
#===============================================================================
|
||||
# Restore PP
|
||||
#===============================================================================
|
||||
def pbRestorePP(pkmn,idxMove,pp)
|
||||
def pbRestorePP(pkmn, idxMove, pp)
|
||||
return 0 if !pkmn.moves[idxMove] || !pkmn.moves[idxMove].id
|
||||
return 0 if pkmn.moves[idxMove].total_pp<=0
|
||||
return 0 if pkmn.moves[idxMove].total_pp <= 0
|
||||
oldpp = pkmn.moves[idxMove].pp
|
||||
newpp = pkmn.moves[idxMove].pp+pp
|
||||
newpp = pkmn.moves[idxMove].total_pp if newpp>pkmn.moves[idxMove].total_pp
|
||||
newpp = pkmn.moves[idxMove].pp + pp
|
||||
newpp = pkmn.moves[idxMove].total_pp if newpp > pkmn.moves[idxMove].total_pp
|
||||
pkmn.moves[idxMove].pp = newpp
|
||||
return newpp-oldpp
|
||||
return newpp - oldpp
|
||||
end
|
||||
|
||||
def pbBattleRestorePP(pkmn, battler, idxMove, pp)
|
||||
return if pbRestorePP(pkmn,idxMove,pp) == 0
|
||||
return if pbRestorePP(pkmn, idxMove, pp) == 0
|
||||
if battler && !battler.effects[PBEffects::Transform] &&
|
||||
battler.moves[idxMove] && battler.moves[idxMove].id == pkmn.moves[idxMove].id
|
||||
battler.moves[idxMove] && battler.moves[idxMove].id == pkmn.moves[idxMove].id
|
||||
battler.pbSetPP(battler.moves[idxMove], pkmn.moves[idxMove].pp)
|
||||
end
|
||||
end
|
||||
@@ -292,9 +290,9 @@ def pbRaiseEffortValues(pkmn, stat, evGain = 10, ev_limit = true)
|
||||
return evGain
|
||||
end
|
||||
|
||||
def pbRaiseHappinessAndLowerEV(pkmn,scene,stat,messages)
|
||||
h = pkmn.happiness<255
|
||||
e = pkmn.ev[stat]>0
|
||||
def pbRaiseHappinessAndLowerEV(pkmn, scene, stat, messages)
|
||||
h = pkmn.happiness < 255
|
||||
e = pkmn.ev[stat] > 0
|
||||
if !h && !e
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
return false
|
||||
@@ -304,27 +302,27 @@ def pbRaiseHappinessAndLowerEV(pkmn,scene,stat,messages)
|
||||
end
|
||||
if e
|
||||
pkmn.ev[stat] -= 10
|
||||
pkmn.ev[stat] = 0 if pkmn.ev[stat]<0
|
||||
pkmn.ev[stat] = 0 if pkmn.ev[stat] < 0
|
||||
pkmn.calc_stats
|
||||
end
|
||||
scene.pbRefresh
|
||||
scene.pbDisplay(messages[2-(h ? 0 : 2)-(e ? 0 : 1)])
|
||||
scene.pbDisplay(messages[2 - (h ? 0 : 2) - (e ? 0 : 1)])
|
||||
return true
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Battle items
|
||||
#===============================================================================
|
||||
def pbBattleItemCanCureStatus?(status,pkmn,scene,showMessages)
|
||||
if !pkmn.able? || pkmn.status!=status
|
||||
def pbBattleItemCanCureStatus?(status, pkmn, scene, showMessages)
|
||||
if !pkmn.able? || pkmn.status != status
|
||||
scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
def pbBattleItemCanRaiseStat?(stat,battler,scene,showMessages)
|
||||
if !battler || !battler.pbCanRaiseStatStage?(stat,battler)
|
||||
def pbBattleItemCanRaiseStat?(stat, battler, scene, showMessages)
|
||||
if !battler || !battler.pbCanRaiseStatStage?(stat, battler)
|
||||
scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages
|
||||
return false
|
||||
end
|
||||
@@ -336,7 +334,7 @@ end
|
||||
#===============================================================================
|
||||
def pbBikeCheck
|
||||
if $PokemonGlobal.surfing || $PokemonGlobal.diving ||
|
||||
(!$PokemonGlobal.bicycle && $game_player.pbTerrainTag.must_walk)
|
||||
(!$PokemonGlobal.bicycle && $game_player.pbTerrainTag.must_walk)
|
||||
pbMessage(_INTL("Can't use that here."))
|
||||
return false
|
||||
end
|
||||
@@ -368,17 +366,17 @@ def pbClosestHiddenItem
|
||||
playerY = $game_player.y
|
||||
for event in $game_map.events.values
|
||||
next if !event.name[/hiddenitem/i]
|
||||
next if (playerX-event.x).abs>=8
|
||||
next if (playerY-event.y).abs>=6
|
||||
next if $game_self_switches[[$game_map.map_id,event.id,"A"]]
|
||||
next if (playerX - event.x).abs >= 8
|
||||
next if (playerY - event.y).abs >= 6
|
||||
next if $game_self_switches[[$game_map.map_id, event.id, "A"]]
|
||||
result.push(event)
|
||||
end
|
||||
return nil if result.length==0
|
||||
return nil if result.length == 0
|
||||
ret = nil
|
||||
retmin = 0
|
||||
for event in result
|
||||
dist = (playerX-event.x).abs+(playerY-event.y).abs
|
||||
next if ret && retmin<=dist
|
||||
dist = (playerX - event.x).abs + (playerY - event.y).abs
|
||||
next if ret && retmin <= dist
|
||||
ret = event
|
||||
retmin = dist
|
||||
end
|
||||
@@ -388,58 +386,104 @@ end
|
||||
#===============================================================================
|
||||
# Teach and forget a move
|
||||
#===============================================================================
|
||||
def pbLearnMove(pkmn,move,ignoreifknown=false,bymachine=false,&block)
|
||||
def pbLearnMove(pkmn, move, ignoreifknown = false, bymachine = false, &block)
|
||||
return false if !pkmn
|
||||
move = GameData::Move.get(move).id
|
||||
if pkmn.egg? && !$DEBUG
|
||||
pbMessage(_INTL("Eggs can't be taught any moves."),&block)
|
||||
pbMessage(_INTL("Eggs can't be taught any moves."), &block)
|
||||
return false
|
||||
end
|
||||
if pkmn.shadowPokemon?
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves."),&block)
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves."), &block)
|
||||
return false
|
||||
end
|
||||
pkmnname = pkmn.name
|
||||
movename = GameData::Move.get(move).name
|
||||
if pkmn.hasMove?(move)
|
||||
pbMessage(_INTL("{1} already knows {2}.",pkmnname,movename),&block) if !ignoreifknown
|
||||
pbMessage(_INTL("{1} already knows {2}.", pkmnname, movename), &block) if !ignoreifknown
|
||||
return false
|
||||
end
|
||||
if pkmn.numMoves<Pokemon::MAX_MOVES
|
||||
if pkmn.numMoves < Pokemon::MAX_MOVES
|
||||
pkmn.learn_move(move)
|
||||
pbMessage(_INTL("\\se[]{1} learned {2}!\\se[Pkmn move learnt]",pkmnname,movename),&block)
|
||||
pbMessage(_INTL("\\se[]{1} learned {2}!\\se[Pkmn move learnt]", pkmnname, movename), &block)
|
||||
return true
|
||||
end
|
||||
loop do
|
||||
pbMessage(_INTL("{1} wants to learn {2}, but it already knows {3} moves.\1",
|
||||
pkmnname, movename, pkmn.numMoves.to_word), &block) if !bymachine
|
||||
pbMessage(_INTL("Please choose a move that will be replaced with {1}.",movename),&block)
|
||||
forgetmove = pbForgetMove(pkmn,move)
|
||||
if forgetmove>=0
|
||||
pkmnname, movename, pkmn.numMoves.to_word), &block) if !bymachine
|
||||
pbMessage(_INTL("Please choose a move that will be replaced with {1}.", movename), &block)
|
||||
forgetmove = pbForgetMove(pkmn, move)
|
||||
if forgetmove >= 0
|
||||
oldmovename = pkmn.moves[forgetmove].name
|
||||
oldmovepp = pkmn.moves[forgetmove].pp
|
||||
pkmn.moves[forgetmove] = Pokemon::Move.new(move) # Replaces current/total PP
|
||||
oldmovepp = pkmn.moves[forgetmove].pp
|
||||
pkmn.moves[forgetmove] = Pokemon::Move.new(move) # Replaces current/total PP
|
||||
if bymachine && Settings::TAUGHT_MACHINES_KEEP_OLD_PP
|
||||
pkmn.moves[forgetmove].pp = [oldmovepp,pkmn.moves[forgetmove].total_pp].min
|
||||
pkmn.moves[forgetmove].pp = [oldmovepp, pkmn.moves[forgetmove].total_pp].min
|
||||
end
|
||||
pbMessage(_INTL("1, 2, and...\\wt[16] ...\\wt[16] ... Ta-da!\\se[Battle ball drop]\1"),&block)
|
||||
pbMessage(_INTL("{1} forgot how to use {2}.\\nAnd...\1",pkmnname,oldmovename),&block)
|
||||
pbMessage(_INTL("\\se[]{1} learned {2}!\\se[Pkmn move learnt]",pkmnname,movename),&block)
|
||||
pbMessage(_INTL("1, 2, and...\\wt[16] ...\\wt[16] ... Ta-da!\\se[Battle ball drop]\1"), &block)
|
||||
pbMessage(_INTL("{1} forgot how to use {2}.\\nAnd...\1", pkmnname, oldmovename), &block)
|
||||
pbMessage(_INTL("\\se[]{1} learned {2}!\\se[Pkmn move learnt]", pkmnname, movename), &block)
|
||||
pkmn.changeHappiness("machine") if bymachine
|
||||
return true
|
||||
elsif pbConfirmMessage(_INTL("Give up on learning {1}?",movename),&block)
|
||||
pbMessage(_INTL("{1} did not learn {2}.",pkmnname,movename),&block)
|
||||
elsif pbConfirmMessage(_INTL("Give up on learning {1}?", movename), &block)
|
||||
pbMessage(_INTL("{1} did not learn {2}.", pkmnname, movename), &block)
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbForgetMove(pkmn,moveToLearn)
|
||||
def pbLearnMove(pkmn, move, ignoreifknown = false, bymachine = false, fast = false, &block)
|
||||
return false if !pkmn
|
||||
move = GameData::Move.get(move).id
|
||||
if pkmn.egg? && !$DEBUG
|
||||
pbMessage(_INTL("Eggs can't be taught any moves."), &block)
|
||||
return false
|
||||
end
|
||||
if pkmn.shadowPokemon?
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves."), &block)
|
||||
return false
|
||||
end
|
||||
pkmnname = pkmn.name
|
||||
movename = GameData::Move.get(move).name
|
||||
if pkmn.hasMove?(move)
|
||||
pbMessage(_INTL("{1} already knows {2}.", pkmnname, movename), &block) if !ignoreifknown
|
||||
return false
|
||||
end
|
||||
if pkmn.numMoves < Pokemon::MAX_MOVES
|
||||
pkmn.learn_move(move)
|
||||
pbMessage(_INTL("\\se[]{1} learned {2}!\\se[Pkmn move learnt]", pkmnname, movename), &block)
|
||||
return true
|
||||
end
|
||||
loop do
|
||||
pbMessage(_INTL("{1} wants to learn {2}, but it already knows {3} moves.\1",
|
||||
pkmnname, movename, pkmn.numMoves.to_word), &block) if !bymachine && !fast
|
||||
pbMessage(_INTL("Please choose a move that will be replaced with {1}.", movename), &block)
|
||||
forgetmove = pbForgetMove(pkmn, move)
|
||||
if forgetmove >= 0
|
||||
oldmovename = pkmn.moves[forgetmove].name
|
||||
oldmovepp = pkmn.moves[forgetmove].pp
|
||||
pkmn.moves[forgetmove] = Pokemon::Move.new(move) # Replaces current/total PP
|
||||
if bymachine && Settings::TAUGHT_MACHINES_KEEP_OLD_PP
|
||||
pkmn.moves[forgetmove].pp = [oldmovepp, pkmn.moves[forgetmove].total_pp].min
|
||||
end
|
||||
pbMessage(_INTL("1, 2, and...\\wt[16] ...\\wt[16] ... Ta-da!\\se[Battle ball drop]\1"), &block) if !fast
|
||||
pbMessage(_INTL("{1} forgot how to use {2}.\\nAnd...\1", pkmnname, oldmovename), &block) if !fast
|
||||
pbMessage(_INTL("\\se[]{1} learned {2}!\\se[Pkmn move learnt]", pkmnname, movename), &block)
|
||||
pkmn.changeHappiness("machine") if bymachine
|
||||
return true
|
||||
elsif pbConfirmMessage(_INTL("Give up on learning {1}?", movename), &block)
|
||||
pbMessage(_INTL("{1} did not learn {2}.", pkmnname, movename), &block)
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbForgetMove(pkmn, moveToLearn)
|
||||
ret = -1
|
||||
pbFadeOutIn {
|
||||
scene = PokemonSummary_Scene.new
|
||||
screen = PokemonSummaryScreen.new(scene)
|
||||
ret = screen.pbStartForgetScreen([pkmn],0,moveToLearn)
|
||||
ret = screen.pbStartForgetScreen([pkmn], 0, moveToLearn)
|
||||
}
|
||||
return ret
|
||||
end
|
||||
@@ -448,10 +492,10 @@ end
|
||||
# Use an item from the Bag and/or on a Pokémon
|
||||
#===============================================================================
|
||||
# @return [Integer] 0 = item wasn't used; 1 = item used; 2 = close Bag to use in field
|
||||
def pbUseItem(bag,item,bagscene=nil)
|
||||
def pbUseItem(bag, item, bagscene = nil)
|
||||
itm = GameData::Item.get(item)
|
||||
useType = itm.field_use
|
||||
if itm.is_machine? # TM or TR or HM
|
||||
if itm.is_machine? # TM or TR or HM
|
||||
if $Trainer.pokemon_count == 0
|
||||
pbMessage(_INTL("There is no Pokémon."))
|
||||
return 0
|
||||
@@ -459,15 +503,15 @@ def pbUseItem(bag,item,bagscene=nil)
|
||||
machine = itm.move
|
||||
return 0 if !machine
|
||||
movename = GameData::Move.get(machine).name
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name))
|
||||
if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?",movename))
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1", itm.name))
|
||||
if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?", movename))
|
||||
return 0
|
||||
elsif pbMoveTutorChoose(machine,nil,true,itm.is_TR?)
|
||||
elsif pbMoveTutorChoose(machine, nil, true, itm.is_TR?)
|
||||
bag.pbDeleteItem(item) if itm.is_TR?
|
||||
return 1
|
||||
end
|
||||
return 0
|
||||
elsif useType==1 || useType==5 # Item is usable on a Pokémon
|
||||
elsif useType == 1 || useType == 5 # Item is usable on a Pokémon
|
||||
if $Trainer.pokemon_count == 0
|
||||
pbMessage(_INTL("There is no Pokémon."))
|
||||
return 0
|
||||
@@ -483,22 +527,22 @@ def pbUseItem(bag,item,bagscene=nil)
|
||||
end
|
||||
pbFadeOutIn {
|
||||
scene = PokemonParty_Scene.new
|
||||
screen = PokemonPartyScreen.new(scene,$Trainer.party)
|
||||
screen.pbStartScene(_INTL("Use on which Pokémon?"),false,annot)
|
||||
screen = PokemonPartyScreen.new(scene, $Trainer.party)
|
||||
screen.pbStartScene(_INTL("Use on which Pokémon?"), false, annot)
|
||||
loop do
|
||||
scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
|
||||
chosen = screen.pbChoosePokemon
|
||||
if chosen<0
|
||||
if chosen < 0
|
||||
ret = false
|
||||
break
|
||||
end
|
||||
pkmn = $Trainer.party[chosen]
|
||||
if pbCheckUseOnPokemon(item,pkmn,screen)
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,screen)
|
||||
if ret && useType==1 # Usable on Pokémon, consumed
|
||||
if pbCheckUseOnPokemon(item, pkmn, screen)
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item, pkmn, screen)
|
||||
if ret && useType == 1 # Usable on Pokémon, consumed
|
||||
bag.pbDeleteItem(item)
|
||||
if !bag.pbHasItem?(item)
|
||||
pbMessage(_INTL("You used your last {1}.",itm.name)) { screen.pbUpdate }
|
||||
pbMessage(_INTL("You used your last {1}.", itm.name)) { screen.pbUpdate }
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -508,16 +552,19 @@ def pbUseItem(bag,item,bagscene=nil)
|
||||
bagscene.pbRefresh if bagscene
|
||||
}
|
||||
return (ret) ? 1 : 0
|
||||
elsif useType==2 # Item is usable from Bag
|
||||
elsif useType == 2 # Item is usable from Bag
|
||||
intret = ItemHandlers.triggerUseFromBag(item)
|
||||
case intret
|
||||
when 0 then return 0
|
||||
when 1 then return 1 # Item used
|
||||
when 2 then return 2 # Item used, end screen
|
||||
when 3 # Item used, consume item
|
||||
when 0 then
|
||||
return 0
|
||||
when 1 then
|
||||
return 1 # Item used
|
||||
when 2 then
|
||||
return 2 # Item used, end screen
|
||||
when 3 # Item used, consume item
|
||||
bag.pbDeleteItem(item)
|
||||
return 1
|
||||
when 4 # Item used, end screen and consume item
|
||||
when 4 # Item used, end screen and consume item
|
||||
bag.pbDeleteItem(item)
|
||||
return 2
|
||||
end
|
||||
@@ -530,7 +577,7 @@ end
|
||||
|
||||
# Only called when in the party screen and having chosen an item to be used on
|
||||
# the selected Pokémon
|
||||
def pbUseItemOnPokemon(item,pkmn,scene)
|
||||
def pbUseItemOnPokemon(item, pkmn, scene)
|
||||
itm = GameData::Item.get(item)
|
||||
# TM or HM
|
||||
if itm.is_machine?
|
||||
@@ -540,11 +587,11 @@ def pbUseItemOnPokemon(item,pkmn,scene)
|
||||
if pkmn.shadowPokemon?
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves.")) { scene.pbUpdate }
|
||||
elsif !pkmn.compatible_with_move?(machine)
|
||||
pbMessage(_INTL("{1} can't learn {2}.",pkmn.name,movename)) { scene.pbUpdate }
|
||||
pbMessage(_INTL("{1} can't learn {2}.", pkmn.name, movename)) { scene.pbUpdate }
|
||||
else
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name)) { scene.pbUpdate }
|
||||
if pbConfirmMessage(_INTL("Do you want to teach {1} to {2}?",movename,pkmn.name)) { scene.pbUpdate }
|
||||
if pbLearnMove(pkmn,machine,false,true) { scene.pbUpdate }
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1", itm.name)) { scene.pbUpdate }
|
||||
if pbConfirmMessage(_INTL("Do you want to teach {1} to {2}?", movename, pkmn.name)) { scene.pbUpdate }
|
||||
if pbLearnMove(pkmn, machine, false, true) { scene.pbUpdate }
|
||||
$PokemonBag.pbDeleteItem(item) if itm.is_TR?
|
||||
return true
|
||||
end
|
||||
@@ -553,14 +600,14 @@ def pbUseItemOnPokemon(item,pkmn,scene)
|
||||
return false
|
||||
end
|
||||
# Other item
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,scene)
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item, pkmn, scene)
|
||||
scene.pbClearAnnotations
|
||||
scene.pbHardRefresh
|
||||
useType = itm.field_use
|
||||
if ret && useType==1 # Usable on Pokémon, consumed
|
||||
if ret && useType == 1 # Usable on Pokémon, consumed
|
||||
$PokemonBag.pbDeleteItem(item)
|
||||
if !$PokemonBag.pbHasItem?(item)
|
||||
pbMessage(_INTL("You used your last {1}.",itm.name)) { scene.pbUpdate }
|
||||
pbMessage(_INTL("You used your last {1}.", itm.name)) { scene.pbUpdate }
|
||||
end
|
||||
end
|
||||
return ret
|
||||
@@ -568,47 +615,47 @@ end
|
||||
|
||||
def pbUseKeyItemInField(item)
|
||||
ret = ItemHandlers.triggerUseInField(item)
|
||||
if ret==-1 # Item effect not found
|
||||
if ret == -1 # Item effect not found
|
||||
pbMessage(_INTL("Can't use that here."))
|
||||
elsif ret==3 # Item was used and consumed
|
||||
elsif ret == 3 # Item was used and consumed
|
||||
$PokemonBag.pbDeleteItem(item)
|
||||
end
|
||||
return ret!=-1 && ret!=0
|
||||
return ret != -1 && ret != 0
|
||||
end
|
||||
|
||||
def pbUseItemMessage(item)
|
||||
itemname = GameData::Item.get(item).name
|
||||
if itemname.starts_with_vowel?
|
||||
pbMessage(_INTL("You used an {1}.",itemname))
|
||||
pbMessage(_INTL("You used an {1}.", itemname))
|
||||
else
|
||||
pbMessage(_INTL("You used a {1}.",itemname))
|
||||
pbMessage(_INTL("You used a {1}.", itemname))
|
||||
end
|
||||
end
|
||||
|
||||
def pbCheckUseOnPokemon(_item,pkmn,_screen)
|
||||
def pbCheckUseOnPokemon(_item, pkmn, _screen)
|
||||
return pkmn && !pkmn.egg?
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Give an item to a Pokémon to hold, and take a held item from a Pokémon
|
||||
#===============================================================================
|
||||
def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
def pbGiveItemToPokemon(item, pkmn, scene, pkmnid = 0)
|
||||
newitemname = GameData::Item.get(item).name
|
||||
if pkmn.egg?
|
||||
scene.pbDisplay(_INTL("Eggs can't hold items."))
|
||||
return false
|
||||
elsif pkmn.mail
|
||||
scene.pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",pkmn.name))
|
||||
return false if !pbTakeItemFromPokemon(pkmn,scene)
|
||||
scene.pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.", pkmn.name))
|
||||
return false if !pbTakeItemFromPokemon(pkmn, scene)
|
||||
end
|
||||
if pkmn.hasItem?
|
||||
olditemname = pkmn.item.name
|
||||
if pkmn.hasItem?(:LEFTOVERS)
|
||||
scene.pbDisplay(_INTL("{1} is already holding some {2}.\1",pkmn.name,olditemname))
|
||||
scene.pbDisplay(_INTL("{1} is already holding some {2}.\1", pkmn.name, olditemname))
|
||||
elsif newitemname.starts_with_vowel?
|
||||
scene.pbDisplay(_INTL("{1} is already holding an {2}.\1",pkmn.name,olditemname))
|
||||
scene.pbDisplay(_INTL("{1} is already holding an {2}.\1", pkmn.name, olditemname))
|
||||
else
|
||||
scene.pbDisplay(_INTL("{1} is already holding a {2}.\1",pkmn.name,olditemname))
|
||||
scene.pbDisplay(_INTL("{1} is already holding a {2}.\1", pkmn.name, olditemname))
|
||||
end
|
||||
if scene.pbConfirm(_INTL("Would you like to switch the two items?"))
|
||||
$PokemonBag.pbDeleteItem(item)
|
||||
@@ -619,9 +666,9 @@ def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
scene.pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
|
||||
else
|
||||
if GameData::Item.get(item).is_mail?
|
||||
if pbWriteMail(item,pkmn,pkmnid,scene)
|
||||
if pbWriteMail(item, pkmn, pkmnid, scene)
|
||||
pkmn.item = item
|
||||
scene.pbDisplay(_INTL("Took the {1} from {2} and gave it the {3}.",olditemname,pkmn.name,newitemname))
|
||||
scene.pbDisplay(_INTL("Took the {1} from {2} and gave it the {3}.", olditemname, pkmn.name, newitemname))
|
||||
return true
|
||||
else
|
||||
if !$PokemonBag.pbStoreItem(item)
|
||||
@@ -630,26 +677,26 @@ def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
end
|
||||
else
|
||||
pkmn.item = item
|
||||
scene.pbDisplay(_INTL("Took the {1} from {2} and gave it the {3}.",olditemname,pkmn.name,newitemname))
|
||||
scene.pbDisplay(_INTL("Took the {1} from {2} and gave it the {3}.", olditemname, pkmn.name, newitemname))
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if !GameData::Item.get(item).is_mail? || pbWriteMail(item,pkmn,pkmnid,scene)
|
||||
if !GameData::Item.get(item).is_mail? || pbWriteMail(item, pkmn, pkmnid, scene)
|
||||
$PokemonBag.pbDeleteItem(item)
|
||||
pkmn.item = item
|
||||
scene.pbDisplay(_INTL("{1} is now holding the {2}.",pkmn.name,newitemname))
|
||||
scene.pbDisplay(_INTL("{1} is now holding the {2}.", pkmn.name, newitemname))
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def pbTakeItemFromPokemon(pkmn,scene)
|
||||
def pbTakeItemFromPokemon(pkmn, scene)
|
||||
ret = false
|
||||
if !pkmn.hasItem?
|
||||
scene.pbDisplay(_INTL("{1} isn't holding anything.",pkmn.name))
|
||||
scene.pbDisplay(_INTL("{1} isn't holding anything.", pkmn.name))
|
||||
elsif !$PokemonBag.pbCanStore?(pkmn.item)
|
||||
scene.pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
|
||||
elsif pkmn.mail
|
||||
@@ -663,14 +710,14 @@ def pbTakeItemFromPokemon(pkmn,scene)
|
||||
end
|
||||
elsif scene.pbConfirm(_INTL("If the mail is removed, its message will be lost. OK?"))
|
||||
$PokemonBag.pbStoreItem(pkmn.item)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.",pkmn.item.name,pkmn.name))
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.", pkmn.item.name, pkmn.name))
|
||||
pkmn.item = nil
|
||||
pkmn.mail = nil
|
||||
ret = true
|
||||
end
|
||||
else
|
||||
$PokemonBag.pbStoreItem(pkmn.item)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.",pkmn.item.name,pkmn.name))
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.", pkmn.item.name, pkmn.name))
|
||||
pkmn.item = nil
|
||||
ret = true
|
||||
end
|
||||
@@ -684,7 +731,7 @@ def pbChooseItem(var = 0, *args)
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
screen = PokemonBagScreen.new(scene, $PokemonBag)
|
||||
ret = screen.pbChooseItemScreen
|
||||
}
|
||||
$game_variables[var] = ret || :NONE if var > 0
|
||||
@@ -695,7 +742,7 @@ def pbChooseApricorn(var = 0)
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
screen = PokemonBagScreen.new(scene, $PokemonBag)
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_apricorn? })
|
||||
}
|
||||
$game_variables[var] = ret || :NONE if var > 0
|
||||
@@ -706,7 +753,7 @@ def pbChooseFossil(var = 0)
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
screen = PokemonBagScreen.new(scene, $PokemonBag)
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_fossil? })
|
||||
}
|
||||
$game_variables[var] = ret || :NONE if var > 0
|
||||
@@ -717,7 +764,7 @@ end
|
||||
# in the given Global Variable. Only items which the player has are listed.
|
||||
def pbChooseItemFromList(message, variable, *args)
|
||||
commands = []
|
||||
itemid = []
|
||||
itemid = []
|
||||
for item in args
|
||||
next if !GameData::Item.exists?(item)
|
||||
itm = GameData::Item.get(item)
|
||||
@@ -732,7 +779,7 @@ def pbChooseItemFromList(message, variable, *args)
|
||||
commands.push(_INTL("Cancel"))
|
||||
itemid.push(nil)
|
||||
ret = pbMessage(message, commands, -1)
|
||||
if ret < 0 || ret >= commands.length-1
|
||||
if ret < 0 || ret >= commands.length - 1
|
||||
$game_variables[variable] = nil
|
||||
return nil
|
||||
end
|
||||
|
||||
@@ -936,58 +936,6 @@ ItemHandlers::UseOnPokemon.add(:PRISONBOTTLE,proc { |item,pkmn,scene|
|
||||
next true
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:DNASPLICERS,proc { |item,pkmn,scene|
|
||||
if !pkmn.isSpecies?(:KYUREM)
|
||||
scene.pbDisplay(_INTL("It had no effect."))
|
||||
next false
|
||||
end
|
||||
if pkmn.fainted?
|
||||
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
||||
next false
|
||||
end
|
||||
# Fusing
|
||||
if pkmn.fused.nil?
|
||||
chosen = scene.pbChoosePokemon(_INTL("Fuse with which Pokémon?"))
|
||||
next false if chosen<0
|
||||
poke2 = $Trainer.party[chosen]
|
||||
if pkmn==poke2
|
||||
scene.pbDisplay(_INTL("It cannot be fused with itself."))
|
||||
next false
|
||||
elsif poke2.egg?
|
||||
scene.pbDisplay(_INTL("It cannot be fused with an Egg."))
|
||||
next false
|
||||
elsif poke2.fainted?
|
||||
scene.pbDisplay(_INTL("It cannot be fused with that fainted Pokémon."))
|
||||
next false
|
||||
elsif !poke2.isSpecies?(:RESHIRAM) &&
|
||||
!poke2.isSpecies?(:ZEKROM)
|
||||
scene.pbDisplay(_INTL("It cannot be fused with that Pokémon."))
|
||||
next false
|
||||
end
|
||||
newForm = 0
|
||||
newForm = 1 if poke2.isSpecies?(:RESHIRAM)
|
||||
newForm = 2 if poke2.isSpecies?(:ZEKROM)
|
||||
pkmn.setForm(newForm) {
|
||||
pkmn.fused = poke2
|
||||
$Trainer.remove_pokemon_at_index(chosen)
|
||||
scene.pbHardRefresh
|
||||
scene.pbDisplay(_INTL("{1} changed Forme!",pkmn.name))
|
||||
}
|
||||
next true
|
||||
end
|
||||
# Unfusing
|
||||
if $Trainer.party_full?
|
||||
scene.pbDisplay(_INTL("You have no room to separate the Pokémon."))
|
||||
next false
|
||||
end
|
||||
pkmn.setForm(0) {
|
||||
$Trainer.party[$Trainer.party.length] = pkmn.fused
|
||||
pkmn.fused = nil
|
||||
scene.pbHardRefresh
|
||||
scene.pbDisplay(_INTL("{1} changed Forme!",pkmn.name))
|
||||
}
|
||||
next true
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:NSOLARIZER,proc { |item,pkmn,scene|
|
||||
if !pkmn.isSpecies?(:NECROZMA) || pkmn.form == 2
|
||||
|
||||
@@ -54,6 +54,14 @@ class PokemonSprite < SpriteWrapper
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
def setPokemonBitmapFromId(id,back=false)
|
||||
@_iconbitmap.dispose if @_iconbitmap
|
||||
@_iconbitmap = GameData::Species.sprite_bitmap_from_pokemon_id(id, back)
|
||||
self.bitmap = (@_iconbitmap) ? @_iconbitmap.bitmap : nil
|
||||
self.color = Color.new(0,0,0,0)
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
def setPokemonBitmapSpecies(pokemon,species,back=false)
|
||||
@_iconbitmap.dispose if @_iconbitmap
|
||||
@_iconbitmap = (pokemon) ? GameData::Species.sprite_bitmap_from_pokemon(pokemon, back, species) : nil
|
||||
|
||||
@@ -12,6 +12,15 @@ module GameData
|
||||
return ret
|
||||
end
|
||||
|
||||
def self.sprite_bitmap_from_pokemon_id(id, back = false)
|
||||
if back
|
||||
ret = self.back_sprite_bitmap(id)
|
||||
else
|
||||
ret = self.front_sprite_bitmap(id)
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def self.front_sprite_bitmap(dex_number)
|
||||
filename = self.sprite_filename(dex_number)
|
||||
return (filename) ? AnimatedBitmap.new(filename) : nil
|
||||
|
||||
1648
Data/Scripts/050_AddOns/New Items effects.rb
Normal file
1648
Data/Scripts/050_AddOns/New Items effects.rb
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user