DNA splicers

This commit is contained in:
infinitefusion
2021-06-27 15:54:18 -04:00
parent 421a66b610
commit 996d12ae70
9 changed files with 2368 additions and 718 deletions

View File

@@ -66,6 +66,8 @@ class PictureWindow < SpriteWindow_Base
setBitmap(pathOrBitmap) setBitmap(pathOrBitmap)
end end
def picture; @_iconbitmap; end
def dispose def dispose
clearBitmaps() clearBitmaps()
super super

View File

@@ -18,6 +18,17 @@ class AnimatedBitmap
end end
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) def [](index)
; @bitmap[index]; ; @bitmap[index];
end end
@@ -82,7 +93,6 @@ class AnimatedBitmap
end end
end end
end end
#=============================================================================== #===============================================================================

View File

@@ -83,7 +83,7 @@ module PokeBattle_BattleCommon
if itemName.starts_with_vowel? if itemName.starts_with_vowel?
pbDisplay(_INTL("{1} threw an {2}!",pbPlayer.name,itemName)) pbDisplay(_INTL("{1} threw an {2}!",pbPlayer.name,itemName))
else else
pbDisplay(_INTL("{1} threw a {2}!",pbPlayer.name,itemName)) pbDisplay(_INTL("{1} vcthrew a {2}!",pbPlayer.name,itemName))
end end
pbDisplay(_INTL("But there was no target...")) pbDisplay(_INTL("But there was no target..."))
return return

View File

@@ -13,31 +13,33 @@ module ItemHandlers
BattleUseOnPokemon = ItemHandlerHash.new BattleUseOnPokemon = ItemHandlerHash.new
def self.hasUseText(item) def self.hasUseText(item)
return UseText[item]!=nil return UseText[item] != nil
end end
def self.hasOutHandler(item) # Shows "Use" option in Bag def self.hasOutHandler(item)
return UseFromBag[item]!=nil || UseInField[item]!=nil || UseOnPokemon[item]!=nil # Shows "Use" option in Bag
return UseFromBag[item] != nil || UseInField[item] != nil || UseOnPokemon[item] != nil
end end
def self.hasUseInFieldHandler(item) # Shows "Register" option in Bag def self.hasUseInFieldHandler(item)
return UseInField[item]!=nil # Shows "Register" option in Bag
return UseInField[item] != nil
end end
def self.hasUseOnPokemon(item) def self.hasUseOnPokemon(item)
return UseOnPokemon[item]!=nil return UseOnPokemon[item] != nil
end end
def self.hasUseInBattle(item) def self.hasUseInBattle(item)
return UseInBattle[item]!=nil return UseInBattle[item] != nil
end end
def self.hasBattleUseOnBattler(item) def self.hasBattleUseOnBattler(item)
return BattleUseOnBattler[item]!=nil return BattleUseOnBattler[item] != nil
end end
def self.hasBattleUseOnPokemon(item) def self.hasBattleUseOnPokemon(item)
return BattleUseOnPokemon[item]!=nil return BattleUseOnPokemon[item] != nil
end end
# Returns text to display instead of "Use" # Returns text to display instead of "Use"
@@ -75,35 +77,33 @@ module ItemHandlers
end end
# Returns whether item was used # Returns whether item was used
def self.triggerUseOnPokemon(item,pkmn,scene) def self.triggerUseOnPokemon(item, pkmn, scene)
return false if !UseOnPokemon[item] return false if !UseOnPokemon[item]
return UseOnPokemon.trigger(item,pkmn,scene) return UseOnPokemon.trigger(item, pkmn, scene)
end end
def self.triggerCanUseInBattle(item,pkmn,battler,move,firstAction,battle,scene,showMessages=true) def self.triggerCanUseInBattle(item, pkmn, battler, move, firstAction, battle, scene, showMessages = true)
return true if !CanUseInBattle[item] # Can use the item by default return true if !CanUseInBattle[item] # Can use the item by default
return CanUseInBattle.trigger(item,pkmn,battler,move,firstAction,battle,scene,showMessages) return CanUseInBattle.trigger(item, pkmn, battler, move, firstAction, battle, scene, showMessages)
end end
def self.triggerUseInBattle(item,battler,battle) def self.triggerUseInBattle(item, battler, battle)
UseInBattle.trigger(item,battler,battle) UseInBattle.trigger(item, battler, battle)
end end
# Returns whether item was used # Returns whether item was used
def self.triggerBattleUseOnBattler(item,battler,scene) def self.triggerBattleUseOnBattler(item, battler, scene)
return false if !BattleUseOnBattler[item] return false if !BattleUseOnBattler[item]
return BattleUseOnBattler.trigger(item,battler,scene) return BattleUseOnBattler.trigger(item, battler, scene)
end end
# Returns whether item was used # 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 false if !BattleUseOnPokemon[item]
return BattleUseOnPokemon.trigger(item,pkmn,battler,choices,scene) return BattleUseOnPokemon.trigger(item, pkmn, battler, choices, scene)
end end
end end
def pbCanRegisterItem?(item) def pbCanRegisterItem?(item)
return ItemHandlers.hasUseInFieldHandler(item) return ItemHandlers.hasUseInFieldHandler(item)
end end
@@ -112,16 +112,14 @@ def pbCanUseOnPokemon?(item)
return ItemHandlers.hasUseOnPokemon(item) || GameData::Item.get(item).is_machine? return ItemHandlers.hasUseOnPokemon(item) || GameData::Item.get(item).is_machine?
end end
#=============================================================================== #===============================================================================
# Change a Pokémon's level # Change a Pokémon's level
#=============================================================================== #===============================================================================
def pbChangeLevel(pkmn,newlevel,scene) def pbChangeLevel(pkmn, newlevel, scene)
newlevel = newlevel.clamp(1, GameData::GrowthRate.max_level) newlevel = newlevel.clamp(1, GameData::GrowthRate.max_level)
if pkmn.level==newlevel if pkmn.level == newlevel
pbMessage(_INTL("{1}'s level remained unchanged.",pkmn.name)) pbMessage(_INTL("{1}'s level remained unchanged.", pkmn.name))
elsif pkmn.level>newlevel elsif pkmn.level > newlevel
attackdiff = pkmn.attack attackdiff = pkmn.attack
defensediff = pkmn.defense defensediff = pkmn.defense
speeddiff = pkmn.speed speeddiff = pkmn.speed
@@ -131,17 +129,17 @@ def pbChangeLevel(pkmn,newlevel,scene)
pkmn.level = newlevel pkmn.level = newlevel
pkmn.calc_stats pkmn.calc_stats
scene.pbRefresh scene.pbRefresh
pbMessage(_INTL("{1} dropped to Lv. {2}!",pkmn.name,pkmn.level)) pbMessage(_INTL("{1} dropped to Lv. {2}!", pkmn.name, pkmn.level))
attackdiff = pkmn.attack-attackdiff attackdiff = pkmn.attack - attackdiff
defensediff = pkmn.defense-defensediff defensediff = pkmn.defense - defensediff
speeddiff = pkmn.speed-speeddiff speeddiff = pkmn.speed - speeddiff
spatkdiff = pkmn.spatk-spatkdiff spatkdiff = pkmn.spatk - spatkdiff
spdefdiff = pkmn.spdef-spdefdiff spdefdiff = pkmn.spdef - spdefdiff
totalhpdiff = pkmn.totalhp-totalhpdiff 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}", 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}", 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 else
attackdiff = pkmn.attack attackdiff = pkmn.attack
defensediff = pkmn.defense defensediff = pkmn.defense
@@ -154,32 +152,32 @@ def pbChangeLevel(pkmn,newlevel,scene)
pkmn.calc_stats pkmn.calc_stats
scene.pbRefresh scene.pbRefresh
if scene.is_a?(PokemonPartyScreen) 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 else
pbMessage(_INTL("{1} grew to Lv. {2}!",pkmn.name,pkmn.level)) pbMessage(_INTL("{1} grew to Lv. {2}!", pkmn.name, pkmn.level))
end end
attackdiff = pkmn.attack-attackdiff attackdiff = pkmn.attack - attackdiff
defensediff = pkmn.defense-defensediff defensediff = pkmn.defense - defensediff
speeddiff = pkmn.speed-speeddiff speeddiff = pkmn.speed - speeddiff
spatkdiff = pkmn.spatk-spatkdiff spatkdiff = pkmn.spatk - spatkdiff
spdefdiff = pkmn.spdef-spdefdiff spdefdiff = pkmn.spdef - spdefdiff
totalhpdiff = pkmn.totalhp-totalhpdiff 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}", 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}", 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 # Learn new moves upon level up
movelist = pkmn.getMoveList movelist = pkmn.getMoveList
for i in movelist for i in movelist
next if i[0]!=pkmn.level next if i[0] != pkmn.level
pbLearnMove(pkmn,i[1],true) { scene.pbUpdate } pbLearnMove(pkmn, i[1], true) { scene.pbUpdate }
end end
# Check for evolution # Check for evolution
newspecies = pkmn.check_evolution_on_level_up newspecies = pkmn.check_evolution_on_level_up
if newspecies if newspecies
pbFadeOutInWithMusic { pbFadeOutInWithMusic {
evo = PokemonEvolutionScene.new evo = PokemonEvolutionScene.new
evo.pbStartScreen(pkmn,newspecies) evo.pbStartScreen(pkmn, newspecies)
evo.pbEvolution evo.pbEvolution
evo.pbEndScreen evo.pbEndScreen
scene.pbRefresh if scene.is_a?(PokemonPartyScreen) scene.pbRefresh if scene.is_a?(PokemonPartyScreen)
@@ -191,7 +189,7 @@ end
def pbTopRightWindow(text, scene = nil) def pbTopRightWindow(text, scene = nil)
window = Window_AdvancedTextPokemon.new(text) window = Window_AdvancedTextPokemon.new(text)
window.width = 198 window.width = 198
window.x = Graphics.width-window.width window.x = Graphics.width - window.width
window.y = 0 window.y = 0
window.z = 99999 window.z = 99999
pbPlayDecisionSE pbPlayDecisionSE
@@ -208,33 +206,33 @@ end
#=============================================================================== #===============================================================================
# Restore HP # Restore HP
#=============================================================================== #===============================================================================
def pbItemRestoreHP(pkmn,restoreHP) def pbItemRestoreHP(pkmn, restoreHP)
newHP = pkmn.hp+restoreHP newHP = pkmn.hp + restoreHP
newHP = pkmn.totalhp if newHP>pkmn.totalhp newHP = pkmn.totalhp if newHP > pkmn.totalhp
hpGain = newHP-pkmn.hp hpGain = newHP - pkmn.hp
pkmn.hp = newHP pkmn.hp = newHP
return hpGain return hpGain
end end
def pbHPItem(pkmn,restoreHP,scene) def pbHPItem(pkmn, restoreHP, scene)
if !pkmn.able? || pkmn.hp==pkmn.totalhp if !pkmn.able? || pkmn.hp == pkmn.totalhp
scene.pbDisplay(_INTL("It won't have any effect.")) scene.pbDisplay(_INTL("It won't have any effect."))
return false return false
end end
hpGain = pbItemRestoreHP(pkmn,restoreHP) hpGain = pbItemRestoreHP(pkmn, restoreHP)
scene.pbRefresh 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 return true
end end
def pbBattleHPItem(pkmn,battler,restoreHP,scene) def pbBattleHPItem(pkmn, battler, restoreHP, scene)
if battler if battler
if battler.pbRecoverHP(restoreHP)>0 if battler.pbRecoverHP(restoreHP) > 0
scene.pbDisplay(_INTL("{1}'s HP was restored.",battler.pbThis)) scene.pbDisplay(_INTL("{1}'s HP was restored.", battler.pbThis))
end end
else else
if pbItemRestoreHP(pkmn,restoreHP)>0 if pbItemRestoreHP(pkmn, restoreHP) > 0
scene.pbDisplay(_INTL("{1}'s HP was restored.",pkmn.name)) scene.pbDisplay(_INTL("{1}'s HP was restored.", pkmn.name))
end end
end end
return true return true
@@ -243,18 +241,18 @@ end
#=============================================================================== #===============================================================================
# Restore PP # 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] || !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 oldpp = pkmn.moves[idxMove].pp
newpp = pkmn.moves[idxMove].pp+pp newpp = pkmn.moves[idxMove].pp + pp
newpp = pkmn.moves[idxMove].total_pp if newpp>pkmn.moves[idxMove].total_pp newpp = pkmn.moves[idxMove].total_pp if newpp > pkmn.moves[idxMove].total_pp
pkmn.moves[idxMove].pp = newpp pkmn.moves[idxMove].pp = newpp
return newpp-oldpp return newpp - oldpp
end end
def pbBattleRestorePP(pkmn, battler, idxMove, pp) 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] && 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) battler.pbSetPP(battler.moves[idxMove], pkmn.moves[idxMove].pp)
@@ -292,9 +290,9 @@ def pbRaiseEffortValues(pkmn, stat, evGain = 10, ev_limit = true)
return evGain return evGain
end end
def pbRaiseHappinessAndLowerEV(pkmn,scene,stat,messages) def pbRaiseHappinessAndLowerEV(pkmn, scene, stat, messages)
h = pkmn.happiness<255 h = pkmn.happiness < 255
e = pkmn.ev[stat]>0 e = pkmn.ev[stat] > 0
if !h && !e if !h && !e
scene.pbDisplay(_INTL("It won't have any effect.")) scene.pbDisplay(_INTL("It won't have any effect."))
return false return false
@@ -304,27 +302,27 @@ def pbRaiseHappinessAndLowerEV(pkmn,scene,stat,messages)
end end
if e if e
pkmn.ev[stat] -= 10 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 pkmn.calc_stats
end end
scene.pbRefresh scene.pbRefresh
scene.pbDisplay(messages[2-(h ? 0 : 2)-(e ? 0 : 1)]) scene.pbDisplay(messages[2 - (h ? 0 : 2) - (e ? 0 : 1)])
return true return true
end end
#=============================================================================== #===============================================================================
# Battle items # Battle items
#=============================================================================== #===============================================================================
def pbBattleItemCanCureStatus?(status,pkmn,scene,showMessages) def pbBattleItemCanCureStatus?(status, pkmn, scene, showMessages)
if !pkmn.able? || pkmn.status!=status if !pkmn.able? || pkmn.status != status
scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages
return false return false
end end
return true return true
end end
def pbBattleItemCanRaiseStat?(stat,battler,scene,showMessages) def pbBattleItemCanRaiseStat?(stat, battler, scene, showMessages)
if !battler || !battler.pbCanRaiseStatStage?(stat,battler) if !battler || !battler.pbCanRaiseStatStage?(stat, battler)
scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages
return false return false
end end
@@ -368,17 +366,17 @@ def pbClosestHiddenItem
playerY = $game_player.y playerY = $game_player.y
for event in $game_map.events.values for event in $game_map.events.values
next if !event.name[/hiddenitem/i] next if !event.name[/hiddenitem/i]
next if (playerX-event.x).abs>=8 next if (playerX - event.x).abs >= 8
next if (playerY-event.y).abs>=6 next if (playerY - event.y).abs >= 6
next if $game_self_switches[[$game_map.map_id,event.id,"A"]] next if $game_self_switches[[$game_map.map_id, event.id, "A"]]
result.push(event) result.push(event)
end end
return nil if result.length==0 return nil if result.length == 0
ret = nil ret = nil
retmin = 0 retmin = 0
for event in result for event in result
dist = (playerX-event.x).abs+(playerY-event.y).abs dist = (playerX - event.x).abs + (playerY - event.y).abs
next if ret && retmin<=dist next if ret && retmin <= dist
ret = event ret = event
retmin = dist retmin = dist
end end
@@ -388,58 +386,104 @@ end
#=============================================================================== #===============================================================================
# Teach and forget a move # 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 return false if !pkmn
move = GameData::Move.get(move).id move = GameData::Move.get(move).id
if pkmn.egg? && !$DEBUG 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 return false
end end
if pkmn.shadowPokemon? 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 return false
end end
pkmnname = pkmn.name pkmnname = pkmn.name
movename = GameData::Move.get(move).name movename = GameData::Move.get(move).name
if pkmn.hasMove?(move) 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 return false
end end
if pkmn.numMoves<Pokemon::MAX_MOVES if pkmn.numMoves < Pokemon::MAX_MOVES
pkmn.learn_move(move) 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 return true
end end
loop do loop do
pbMessage(_INTL("{1} wants to learn {2}, but it already knows {3} moves.\1", pbMessage(_INTL("{1} wants to learn {2}, but it already knows {3} moves.\1",
pkmnname, movename, pkmn.numMoves.to_word), &block) if !bymachine pkmnname, movename, pkmn.numMoves.to_word), &block) if !bymachine
pbMessage(_INTL("Please choose a move that will be replaced with {1}.",movename),&block) pbMessage(_INTL("Please choose a move that will be replaced with {1}.", movename), &block)
forgetmove = pbForgetMove(pkmn,move) forgetmove = pbForgetMove(pkmn, move)
if forgetmove>=0 if forgetmove >= 0
oldmovename = pkmn.moves[forgetmove].name oldmovename = pkmn.moves[forgetmove].name
oldmovepp = pkmn.moves[forgetmove].pp oldmovepp = pkmn.moves[forgetmove].pp
pkmn.moves[forgetmove] = Pokemon::Move.new(move) # Replaces current/total PP pkmn.moves[forgetmove] = Pokemon::Move.new(move) # Replaces current/total PP
if bymachine && Settings::TAUGHT_MACHINES_KEEP_OLD_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 end
pbMessage(_INTL("1, 2, and...\\wt[16] ...\\wt[16] ... Ta-da!\\se[Battle ball drop]\1"),&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("{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("\\se[]{1} learned {2}!\\se[Pkmn move learnt]", pkmnname, movename), &block)
pkmn.changeHappiness("machine") if bymachine pkmn.changeHappiness("machine") if bymachine
return true return true
elsif pbConfirmMessage(_INTL("Give up on learning {1}?",movename),&block) elsif pbConfirmMessage(_INTL("Give up on learning {1}?", movename), &block)
pbMessage(_INTL("{1} did not learn {2}.",pkmnname,movename),&block) pbMessage(_INTL("{1} did not learn {2}.", pkmnname, movename), &block)
return false return false
end end
end 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 ret = -1
pbFadeOutIn { pbFadeOutIn {
scene = PokemonSummary_Scene.new scene = PokemonSummary_Scene.new
screen = PokemonSummaryScreen.new(scene) screen = PokemonSummaryScreen.new(scene)
ret = screen.pbStartForgetScreen([pkmn],0,moveToLearn) ret = screen.pbStartForgetScreen([pkmn], 0, moveToLearn)
} }
return ret return ret
end end
@@ -448,7 +492,7 @@ end
# Use an item from the Bag and/or on a Pokémon # 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 # @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) itm = GameData::Item.get(item)
useType = itm.field_use useType = itm.field_use
if itm.is_machine? # TM or TR or HM if itm.is_machine? # TM or TR or HM
@@ -459,15 +503,15 @@ def pbUseItem(bag,item,bagscene=nil)
machine = itm.move machine = itm.move
return 0 if !machine return 0 if !machine
movename = GameData::Move.get(machine).name movename = GameData::Move.get(machine).name
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.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)) if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?", movename))
return 0 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? bag.pbDeleteItem(item) if itm.is_TR?
return 1 return 1
end end
return 0 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 if $Trainer.pokemon_count == 0
pbMessage(_INTL("There is no Pokémon.")) pbMessage(_INTL("There is no Pokémon."))
return 0 return 0
@@ -483,22 +527,22 @@ def pbUseItem(bag,item,bagscene=nil)
end end
pbFadeOutIn { pbFadeOutIn {
scene = PokemonParty_Scene.new scene = PokemonParty_Scene.new
screen = PokemonPartyScreen.new(scene,$Trainer.party) screen = PokemonPartyScreen.new(scene, $Trainer.party)
screen.pbStartScene(_INTL("Use on which Pokémon?"),false,annot) screen.pbStartScene(_INTL("Use on which Pokémon?"), false, annot)
loop do loop do
scene.pbSetHelpText(_INTL("Use on which Pokémon?")) scene.pbSetHelpText(_INTL("Use on which Pokémon?"))
chosen = screen.pbChoosePokemon chosen = screen.pbChoosePokemon
if chosen<0 if chosen < 0
ret = false ret = false
break break
end end
pkmn = $Trainer.party[chosen] pkmn = $Trainer.party[chosen]
if pbCheckUseOnPokemon(item,pkmn,screen) if pbCheckUseOnPokemon(item, pkmn, screen)
ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,screen) ret = ItemHandlers.triggerUseOnPokemon(item, pkmn, screen)
if ret && useType==1 # Usable on Pokémon, consumed if ret && useType == 1 # Usable on Pokémon, consumed
bag.pbDeleteItem(item) bag.pbDeleteItem(item)
if !bag.pbHasItem?(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 break
end end
end end
@@ -508,12 +552,15 @@ def pbUseItem(bag,item,bagscene=nil)
bagscene.pbRefresh if bagscene bagscene.pbRefresh if bagscene
} }
return (ret) ? 1 : 0 return (ret) ? 1 : 0
elsif useType==2 # Item is usable from Bag elsif useType == 2 # Item is usable from Bag
intret = ItemHandlers.triggerUseFromBag(item) intret = ItemHandlers.triggerUseFromBag(item)
case intret case intret
when 0 then return 0 when 0 then
when 1 then return 1 # Item used return 0
when 2 then return 2 # Item used, end screen when 1 then
return 1 # Item used
when 2 then
return 2 # Item used, end screen
when 3 # Item used, consume item when 3 # Item used, consume item
bag.pbDeleteItem(item) bag.pbDeleteItem(item)
return 1 return 1
@@ -530,7 +577,7 @@ end
# Only called when in the party screen and having chosen an item to be used on # Only called when in the party screen and having chosen an item to be used on
# the selected Pokémon # the selected Pokémon
def pbUseItemOnPokemon(item,pkmn,scene) def pbUseItemOnPokemon(item, pkmn, scene)
itm = GameData::Item.get(item) itm = GameData::Item.get(item)
# TM or HM # TM or HM
if itm.is_machine? if itm.is_machine?
@@ -540,11 +587,11 @@ def pbUseItemOnPokemon(item,pkmn,scene)
if pkmn.shadowPokemon? if pkmn.shadowPokemon?
pbMessage(_INTL("Shadow Pokémon can't be taught any moves.")) { scene.pbUpdate } pbMessage(_INTL("Shadow Pokémon can't be taught any moves.")) { scene.pbUpdate }
elsif !pkmn.compatible_with_move?(machine) 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 else
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name)) { 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 pbConfirmMessage(_INTL("Do you want to teach {1} to {2}?", movename, pkmn.name)) { scene.pbUpdate }
if pbLearnMove(pkmn,machine,false,true) { scene.pbUpdate } if pbLearnMove(pkmn, machine, false, true) { scene.pbUpdate }
$PokemonBag.pbDeleteItem(item) if itm.is_TR? $PokemonBag.pbDeleteItem(item) if itm.is_TR?
return true return true
end end
@@ -553,14 +600,14 @@ def pbUseItemOnPokemon(item,pkmn,scene)
return false return false
end end
# Other item # Other item
ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,scene) ret = ItemHandlers.triggerUseOnPokemon(item, pkmn, scene)
scene.pbClearAnnotations scene.pbClearAnnotations
scene.pbHardRefresh scene.pbHardRefresh
useType = itm.field_use 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) $PokemonBag.pbDeleteItem(item)
if !$PokemonBag.pbHasItem?(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
end end
return ret return ret
@@ -568,47 +615,47 @@ end
def pbUseKeyItemInField(item) def pbUseKeyItemInField(item)
ret = ItemHandlers.triggerUseInField(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.")) 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) $PokemonBag.pbDeleteItem(item)
end end
return ret!=-1 && ret!=0 return ret != -1 && ret != 0
end end
def pbUseItemMessage(item) def pbUseItemMessage(item)
itemname = GameData::Item.get(item).name itemname = GameData::Item.get(item).name
if itemname.starts_with_vowel? if itemname.starts_with_vowel?
pbMessage(_INTL("You used an {1}.",itemname)) pbMessage(_INTL("You used an {1}.", itemname))
else else
pbMessage(_INTL("You used a {1}.",itemname)) pbMessage(_INTL("You used a {1}.", itemname))
end end
end end
def pbCheckUseOnPokemon(_item,pkmn,_screen) def pbCheckUseOnPokemon(_item, pkmn, _screen)
return pkmn && !pkmn.egg? return pkmn && !pkmn.egg?
end end
#=============================================================================== #===============================================================================
# Give an item to a Pokémon to hold, and take a held item from a Pokémon # 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 newitemname = GameData::Item.get(item).name
if pkmn.egg? if pkmn.egg?
scene.pbDisplay(_INTL("Eggs can't hold items.")) scene.pbDisplay(_INTL("Eggs can't hold items."))
return false return false
elsif pkmn.mail elsif pkmn.mail
scene.pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.",pkmn.name)) scene.pbDisplay(_INTL("{1}'s mail must be removed before giving it an item.", pkmn.name))
return false if !pbTakeItemFromPokemon(pkmn,scene) return false if !pbTakeItemFromPokemon(pkmn, scene)
end end
if pkmn.hasItem? if pkmn.hasItem?
olditemname = pkmn.item.name olditemname = pkmn.item.name
if pkmn.hasItem?(:LEFTOVERS) 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? 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 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 end
if scene.pbConfirm(_INTL("Would you like to switch the two items?")) if scene.pbConfirm(_INTL("Would you like to switch the two items?"))
$PokemonBag.pbDeleteItem(item) $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.")) scene.pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
else else
if GameData::Item.get(item).is_mail? if GameData::Item.get(item).is_mail?
if pbWriteMail(item,pkmn,pkmnid,scene) if pbWriteMail(item, pkmn, pkmnid, scene)
pkmn.item = item 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 return true
else else
if !$PokemonBag.pbStoreItem(item) if !$PokemonBag.pbStoreItem(item)
@@ -630,26 +677,26 @@ def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
end end
else else
pkmn.item = item 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 return true
end end
end end
end end
else 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) $PokemonBag.pbDeleteItem(item)
pkmn.item = 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 return true
end end
end end
return false return false
end end
def pbTakeItemFromPokemon(pkmn,scene) def pbTakeItemFromPokemon(pkmn, scene)
ret = false ret = false
if !pkmn.hasItem? 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) elsif !$PokemonBag.pbCanStore?(pkmn.item)
scene.pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed.")) scene.pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
elsif pkmn.mail elsif pkmn.mail
@@ -663,14 +710,14 @@ def pbTakeItemFromPokemon(pkmn,scene)
end end
elsif scene.pbConfirm(_INTL("If the mail is removed, its message will be lost. OK?")) elsif scene.pbConfirm(_INTL("If the mail is removed, its message will be lost. OK?"))
$PokemonBag.pbStoreItem(pkmn.item) $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.item = nil
pkmn.mail = nil pkmn.mail = nil
ret = true ret = true
end end
else else
$PokemonBag.pbStoreItem(pkmn.item) $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.item = nil
ret = true ret = true
end end
@@ -684,7 +731,7 @@ def pbChooseItem(var = 0, *args)
ret = nil ret = nil
pbFadeOutIn { pbFadeOutIn {
scene = PokemonBag_Scene.new scene = PokemonBag_Scene.new
screen = PokemonBagScreen.new(scene,$PokemonBag) screen = PokemonBagScreen.new(scene, $PokemonBag)
ret = screen.pbChooseItemScreen ret = screen.pbChooseItemScreen
} }
$game_variables[var] = ret || :NONE if var > 0 $game_variables[var] = ret || :NONE if var > 0
@@ -695,7 +742,7 @@ def pbChooseApricorn(var = 0)
ret = nil ret = nil
pbFadeOutIn { pbFadeOutIn {
scene = PokemonBag_Scene.new 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? }) ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_apricorn? })
} }
$game_variables[var] = ret || :NONE if var > 0 $game_variables[var] = ret || :NONE if var > 0
@@ -706,7 +753,7 @@ def pbChooseFossil(var = 0)
ret = nil ret = nil
pbFadeOutIn { pbFadeOutIn {
scene = PokemonBag_Scene.new 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? }) ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_fossil? })
} }
$game_variables[var] = ret || :NONE if var > 0 $game_variables[var] = ret || :NONE if var > 0
@@ -732,7 +779,7 @@ def pbChooseItemFromList(message, variable, *args)
commands.push(_INTL("Cancel")) commands.push(_INTL("Cancel"))
itemid.push(nil) itemid.push(nil)
ret = pbMessage(message, commands, -1) ret = pbMessage(message, commands, -1)
if ret < 0 || ret >= commands.length-1 if ret < 0 || ret >= commands.length - 1
$game_variables[variable] = nil $game_variables[variable] = nil
return nil return nil
end end

View File

@@ -936,58 +936,6 @@ ItemHandlers::UseOnPokemon.add(:PRISONBOTTLE,proc { |item,pkmn,scene|
next true 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| ItemHandlers::UseOnPokemon.add(:NSOLARIZER,proc { |item,pkmn,scene|
if !pkmn.isSpecies?(:NECROZMA) || pkmn.form == 2 if !pkmn.isSpecies?(:NECROZMA) || pkmn.form == 2

View File

@@ -54,6 +54,14 @@ class PokemonSprite < SpriteWrapper
changeOrigin changeOrigin
end 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) def setPokemonBitmapSpecies(pokemon,species,back=false)
@_iconbitmap.dispose if @_iconbitmap @_iconbitmap.dispose if @_iconbitmap
@_iconbitmap = (pokemon) ? GameData::Species.sprite_bitmap_from_pokemon(pokemon, back, species) : nil @_iconbitmap = (pokemon) ? GameData::Species.sprite_bitmap_from_pokemon(pokemon, back, species) : nil

View File

@@ -12,6 +12,15 @@ module GameData
return ret return ret
end 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) def self.front_sprite_bitmap(dex_number)
filename = self.sprite_filename(dex_number) filename = self.sprite_filename(dex_number)
return (filename) ? AnimatedBitmap.new(filename) : nil return (filename) ? AnimatedBitmap.new(filename) : nil

File diff suppressed because it is too large Load Diff

View File

@@ -33,13 +33,13 @@ class PBFusion
Custom6 = 31 Custom6 = 31
Custom7 = 32 Custom7 = 32
EVONAMES=["Unknown", EVONAMES = ["Unknown",
"Happiness","HappinessDay","HappinessNight","Level","Trade", "Happiness", "HappinessDay", "HappinessNight", "Level", "Trade",
"TradeItem","Item","AttackGreater","AtkDefEqual","DefenseGreater", "TradeItem", "Item", "AttackGreater", "AtkDefEqual", "DefenseGreater",
"Silcoon","Cascoon","Ninjask","Shedinja","Beauty", "Silcoon", "Cascoon", "Ninjask", "Shedinja", "Beauty",
"ItemMale","ItemFemale","DayHoldItem","NightHoldItem","HasMove", "ItemMale", "ItemFemale", "DayHoldItem", "NightHoldItem", "HasMove",
"HasInParty","LevelMale","LevelFemale","Location","TradeSpecies", "HasInParty", "LevelMale", "LevelFemale", "Location", "TradeSpecies",
"Custom1","Custom2","Custom3","Custom4","Custom5","Custom6","Custom7" "Custom1", "Custom2", "Custom3", "Custom4", "Custom5", "Custom6", "Custom7"
] ]
# 0 = no parameter # 0 = no parameter
@@ -48,18 +48,16 @@ class PBFusion
# 3 = Move internal name # 3 = Move internal name
# 4 = Species internal name # 4 = Species internal name
# 5 = Type internal name # 5 = Type internal name
EVOPARAM=[0, # Unknown (do not use) EVOPARAM = [0, # Unknown (do not use)
0,0,0,1,0, # Happiness, HappinessDay, HappinessNight, Level, Trade 0, 0, 0, 1, 0, # Happiness, HappinessDay, HappinessNight, Level, Trade
2,2,1,1,1, # TradeItem, Item, AttackGreater, AtkDefEqual, DefenseGreater 2, 2, 1, 1, 1, # TradeItem, Item, AttackGreater, AtkDefEqual, DefenseGreater
1,1,1,1,1, # Silcoon, Cascoon, Ninjask, Shedinja, Beauty 1, 1, 1, 1, 1, # Silcoon, Cascoon, Ninjask, Shedinja, Beauty
2,2,2,2,3, # ItemMale, ItemFemale, DayHoldItem, NightHoldItem, HasMove 2, 2, 2, 2, 3, # ItemMale, ItemFemale, DayHoldItem, NightHoldItem, HasMove
4,1,1,1,4, # HasInParty, LevelMale, LevelFemale, Location, TradeSpecies 4, 1, 1, 1, 4, # HasInParty, LevelMale, LevelFemale, Location, TradeSpecies
1,1,1,1,1,1,1 # Custom 1-7 1, 1, 1, 1, 1, 1, 1 # Custom 1-7
] ]
end end
class SpriteMetafile class SpriteMetafile
VIEWPORT = 0 VIEWPORT = 0
TONE = 1 TONE = 1
@@ -90,15 +88,15 @@ class SpriteMetafile
return @metafile[i] return @metafile[i]
end end
def initialize(viewport=nil) def initialize(viewport = nil)
@metafile=[] @metafile = []
@values=[ @values = [
viewport, viewport,
Tone.new(0,0,0,0),Rect.new(0,0,0,0), Tone.new(0, 0, 0, 0), Rect.new(0, 0, 0, 0),
true, true,
0,0,0,0,0,100,100, 0, 0, 0, 0, 0, 100, 100,
0,false,0,255,0, 0, false, 0, 255, 0,
Color.new(0,0,0,0),Color.new(0,0,0,0), Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0),
0 0
] ]
end end
@@ -110,12 +108,12 @@ class SpriteMetafile
def dispose def dispose
end end
def flash(color,duration) def flash(color, duration)
if duration>0 if duration > 0
@values[FLASHCOLOR]=color.clone @values[FLASHCOLOR] = color.clone
@values[FLASHDURATION]=duration @values[FLASHDURATION] = duration
@metafile.push([FLASHCOLOR,color]) @metafile.push([FLASHCOLOR, color])
@metafile.push([FLASHDURATION,duration]) @metafile.push([FLASHDURATION, duration])
end end
end end
@@ -124,8 +122,8 @@ class SpriteMetafile
end end
def x=(value) def x=(value)
@values[X]=value @values[X] = value
@metafile.push([X,value]) @metafile.push([X, value])
end end
def y def y
@@ -133,8 +131,8 @@ class SpriteMetafile
end end
def y=(value) def y=(value)
@values[Y]=value @values[Y] = value
@metafile.push([Y,value]) @metafile.push([Y, value])
end end
def bitmap def bitmap
@@ -143,8 +141,8 @@ class SpriteMetafile
def bitmap=(value) def bitmap=(value)
if value && !value.disposed? if value && !value.disposed?
@values[SRC_RECT].set(0,0,value.width,value.height) @values[SRC_RECT].set(0, 0, value.width, value.height)
@metafile.push([SRC_RECT,@values[SRC_RECT].clone]) @metafile.push([SRC_RECT, @values[SRC_RECT].clone])
end end
end end
@@ -153,8 +151,8 @@ class SpriteMetafile
end end
def src_rect=(value) def src_rect=(value)
@values[SRC_RECT]=value @values[SRC_RECT] = value
@metafile.push([SRC_RECT,value]) @metafile.push([SRC_RECT, value])
end end
def visible def visible
@@ -162,8 +160,8 @@ class SpriteMetafile
end end
def visible=(value) def visible=(value)
@values[VISIBLE]=value @values[VISIBLE] = value
@metafile.push([VISIBLE,value]) @metafile.push([VISIBLE, value])
end end
def z def z
@@ -171,8 +169,8 @@ class SpriteMetafile
end end
def z=(value) def z=(value)
@values[Z]=value @values[Z] = value
@metafile.push([Z,value]) @metafile.push([Z, value])
end end
def ox def ox
@@ -180,8 +178,8 @@ class SpriteMetafile
end end
def ox=(value) def ox=(value)
@values[OX]=value @values[OX] = value
@metafile.push([OX,value]) @metafile.push([OX, value])
end end
def oy def oy
@@ -189,8 +187,8 @@ class SpriteMetafile
end end
def oy=(value) def oy=(value)
@values[OY]=value @values[OY] = value
@metafile.push([OY,value]) @metafile.push([OY, value])
end end
def zoom_x def zoom_x
@@ -198,8 +196,8 @@ class SpriteMetafile
end end
def zoom_x=(value) def zoom_x=(value)
@values[ZOOM_X]=value @values[ZOOM_X] = value
@metafile.push([ZOOM_X,value]) @metafile.push([ZOOM_X, value])
end end
def zoom_y def zoom_y
@@ -207,8 +205,8 @@ class SpriteMetafile
end end
def zoom_y=(value) def zoom_y=(value)
@values[ZOOM_Y]=value @values[ZOOM_Y] = value
@metafile.push([ZOOM_Y,value]) @metafile.push([ZOOM_Y, value])
end end
def angle def angle
@@ -216,8 +214,8 @@ class SpriteMetafile
end end
def angle=(value) def angle=(value)
@values[ANGLE]=value @values[ANGLE] = value
@metafile.push([ANGLE,value]) @metafile.push([ANGLE, value])
end end
def mirror def mirror
@@ -225,8 +223,8 @@ class SpriteMetafile
end end
def mirror=(value) def mirror=(value)
@values[MIRROR]=value @values[MIRROR] = value
@metafile.push([MIRROR,value]) @metafile.push([MIRROR, value])
end end
def bush_depth def bush_depth
@@ -234,8 +232,8 @@ class SpriteMetafile
end end
def bush_depth=(value) def bush_depth=(value)
@values[BUSH_DEPTH]=value @values[BUSH_DEPTH] = value
@metafile.push([BUSH_DEPTH,value]) @metafile.push([BUSH_DEPTH, value])
end end
def opacity def opacity
@@ -243,8 +241,8 @@ class SpriteMetafile
end end
def opacity=(value) def opacity=(value)
@values[OPACITY]=value @values[OPACITY] = value
@metafile.push([OPACITY,value]) @metafile.push([OPACITY, value])
end end
def blend_type def blend_type
@@ -252,8 +250,8 @@ class SpriteMetafile
end end
def blend_type=(value) def blend_type=(value)
@values[BLEND_TYPE]=value @values[BLEND_TYPE] = value
@metafile.push([BLEND_TYPE,value]) @metafile.push([BLEND_TYPE, value])
end end
def color def color
@@ -261,8 +259,8 @@ class SpriteMetafile
end end
def color=(value) def color=(value)
@values[COLOR]=value.clone @values[COLOR] = value.clone
@metafile.push([COLOR,@values[COLOR]]) @metafile.push([COLOR, @values[COLOR]])
end end
def tone def tone
@@ -270,23 +268,21 @@ class SpriteMetafile
end end
def tone=(value) def tone=(value)
@values[TONE]=value.clone @values[TONE] = value.clone
@metafile.push([TONE,@values[TONE]]) @metafile.push([TONE, @values[TONE]])
end end
def update def update
@metafile.push([-1,nil]) @metafile.push([-1, nil])
end end
end end
class SpriteMetafilePlayer class SpriteMetafilePlayer
def initialize(metafile,sprite=nil) def initialize(metafile, sprite = nil)
@metafile=metafile @metafile = metafile
@sprites=[] @sprites = []
@playing=false @playing = false
@index=0 @index = 0
@sprites.push(sprite) if sprite @sprites.push(sprite) if sprite
end end
@@ -299,64 +295,62 @@ class SpriteMetafilePlayer
end end
def play def play
@playing=true @playing = true
@index=0 @index = 0
end end
def update def update
if @playing if @playing
for j in @index...@metafile.length for j in @index...@metafile.length
@index=j+1 @index = j + 1
break if @metafile[j][0]<0 break if @metafile[j][0] < 0
code=@metafile[j][0] code = @metafile[j][0]
value=@metafile[j][1] value = @metafile[j][1]
for sprite in @sprites for sprite in @sprites
case code case code
when SpriteMetafile::X when SpriteMetafile::X
sprite.x=value sprite.x = value
when SpriteMetafile::Y when SpriteMetafile::Y
sprite.y=value sprite.y = value
when SpriteMetafile::OX when SpriteMetafile::OX
sprite.ox=value sprite.ox = value
when SpriteMetafile::OY when SpriteMetafile::OY
sprite.oy=value sprite.oy = value
when SpriteMetafile::ZOOM_X when SpriteMetafile::ZOOM_X
sprite.zoom_x=value sprite.zoom_x = value
when SpriteMetafile::ZOOM_Y when SpriteMetafile::ZOOM_Y
sprite.zoom_y=value sprite.zoom_y = value
when SpriteMetafile::SRC_RECT when SpriteMetafile::SRC_RECT
sprite.src_rect=value sprite.src_rect = value
when SpriteMetafile::VISIBLE when SpriteMetafile::VISIBLE
sprite.visible=value sprite.visible = value
when SpriteMetafile::Z when SpriteMetafile::Z
sprite.z=value sprite.z = value
# prevent crashes # prevent crashes
when SpriteMetafile::ANGLE when SpriteMetafile::ANGLE
sprite.angle=(value==180) ? 179.9 : value sprite.angle = (value == 180) ? 179.9 : value
when SpriteMetafile::MIRROR when SpriteMetafile::MIRROR
sprite.mirror=value sprite.mirror = value
when SpriteMetafile::BUSH_DEPTH when SpriteMetafile::BUSH_DEPTH
sprite.bush_depth=value sprite.bush_depth = value
when SpriteMetafile::OPACITY when SpriteMetafile::OPACITY
sprite.opacity=value sprite.opacity = value
when SpriteMetafile::BLEND_TYPE when SpriteMetafile::BLEND_TYPE
sprite.blend_type=value sprite.blend_type = value
when SpriteMetafile::COLOR when SpriteMetafile::COLOR
sprite.color=value sprite.color = value
when SpriteMetafile::TONE when SpriteMetafile::TONE
sprite.tone=value sprite.tone = value
end end
end end
end end
@playing=false if @index==@metafile.length @playing = false if @index == @metafile.length
end end
end end
end end
def pbSaveSpriteState(sprite) def pbSaveSpriteState(sprite)
state=[] state = []
return state if !sprite || sprite.disposed? return state if !sprite || sprite.disposed?
state[SpriteMetafile::BITMAP] = sprite.x state[SpriteMetafile::BITMAP] = sprite.x
state[SpriteMetafile::X] = sprite.x state[SpriteMetafile::X] = sprite.x
@@ -378,7 +372,7 @@ def pbSaveSpriteState(sprite)
return state return state
end end
def pbRestoreSpriteState(sprite,state) def pbRestoreSpriteState(sprite, state)
return if !state || !sprite || sprite.disposed? return if !state || !sprite || sprite.disposed?
sprite.x = state[SpriteMetafile::X] sprite.x = state[SpriteMetafile::X]
sprite.y = state[SpriteMetafile::Y] sprite.y = state[SpriteMetafile::Y]
@@ -400,87 +394,81 @@ end
def pbSaveSpriteStateAndBitmap(sprite) def pbSaveSpriteStateAndBitmap(sprite)
return [] if !sprite || sprite.disposed? return [] if !sprite || sprite.disposed?
state=pbSaveSpriteState(sprite) state = pbSaveSpriteState(sprite)
state[SpriteMetafile::BITMAP]=sprite.bitmap state[SpriteMetafile::BITMAP] = sprite.bitmap
return state return state
end end
def pbRestoreSpriteStateAndBitmap(sprite,state) def pbRestoreSpriteStateAndBitmap(sprite, state)
return if !state || !sprite || sprite.disposed? return if !state || !sprite || sprite.disposed?
sprite.bitmap=state[SpriteMetafile::BITMAP] sprite.bitmap = state[SpriteMetafile::BITMAP]
pbRestoreSpriteState(sprite,state) pbRestoreSpriteState(sprite, state)
return state return state
end end
##################### #####################
class PokemonFusionScene class PokemonFusionScene
private private
def pbGenerateMetafiles(s1x,s1y,s2x,s2y,s3x,s3y,sxx,s3xx)
sprite=SpriteMetafile.new
sprite3=SpriteMetafile.new
sprite2=SpriteMetafile.new
sprite.opacity=255 def pbGenerateMetafiles(s1x, s1y, s2x, s2y, s3x, s3y, sxx, s3xx)
sprite3.opacity=255 sprite = SpriteMetafile.new
sprite2.opacity=0 sprite3 = SpriteMetafile.new
sprite2 = SpriteMetafile.new
sprite.opacity = 255
sprite3.opacity = 255
sprite2.opacity = 0
sprite.ox=s1x sprite.ox = s1x
sprite.oy=s1y sprite.oy = s1y
sprite2.ox=s2x sprite2.ox = s2x
sprite2.oy=s2y sprite2.oy = s2y
sprite3.ox=s3x sprite3.ox = s3x
sprite3.oy=s3y sprite3.oy = s3y
sprite.x = sxx sprite.x = sxx
sprite3.x=s3xx sprite3.x = s3xx
red=10 red = 10
green=5 green = 5
blue=90 blue = 90
for j in 0...26 for j in 0...26
sprite.color.red= red sprite.color.red = red
sprite.color.green=green sprite.color.green = green
sprite.color.blue=blue sprite.color.blue = blue
sprite.color.alpha=j*10 sprite.color.alpha = j * 10
sprite.color=sprite.color sprite.color = sprite.color
sprite3.color.red= red sprite3.color.red = red
sprite3.color.green=green sprite3.color.green = green
sprite3.color.blue=blue sprite3.color.blue = blue
sprite3.color.alpha=j*10 sprite3.color.alpha = j * 10
sprite3.color=sprite3.color sprite3.color = sprite3.color
sprite2.color = sprite.color
sprite2.color=sprite.color
sprite.update sprite.update
sprite3.update sprite3.update
sprite2.update sprite2.update
end end
anglechange=0 anglechange = 0
sevenseconds=Graphics.frame_rate*3 #actually 3 seconds sevenseconds = Graphics.frame_rate * 3 #actually 3 seconds
for j in 0...sevenseconds for j in 0...sevenseconds
sprite.angle+=anglechange sprite.angle += anglechange
sprite.angle%=360 sprite.angle %= 360
sprite3.angle+=anglechange sprite3.angle += anglechange
sprite3.angle%=360 sprite3.angle %= 360
anglechange += 5 if j % 2 == 0
anglechange+=5 if j%2==0 if j >= sevenseconds - 50
if j>=sevenseconds-50 sprite2.angle = sprite.angle
sprite2.angle=sprite.angle sprite2.opacity += 6
sprite2.opacity+=6
end end
if sprite.x < sprite3.x && j >=20 if sprite.x < sprite3.x && j >= 20
sprite.x +=2 sprite.x += 2
sprite3.x -= 2 sprite3.x -= 2
else else
#sprite.ox+=1 #sprite.ox+=1
@@ -491,96 +479,92 @@ class PokemonFusionScene
sprite3.update sprite3.update
sprite2.update sprite2.update
end end
sprite.angle=360-sprite.angle sprite.angle = 360 - sprite.angle
sprite3.angle=360-sprite.angle sprite3.angle = 360 - sprite.angle
sprite2.angle=360-sprite2.angle sprite2.angle = 360 - sprite2.angle
for j in 0...sevenseconds for j in 0...sevenseconds
sprite2.angle+=anglechange sprite2.angle += anglechange
sprite2.angle%=360 sprite2.angle %= 360
anglechange-=5 if j%2==0 anglechange -= 5 if j % 2 == 0
if j<50 if j < 50
sprite.angle=sprite2.angle sprite.angle = sprite2.angle
sprite.opacity-=6 sprite.opacity -= 6
sprite3.angle=sprite2.angle sprite3.angle = sprite2.angle
sprite3.opacity-=6 sprite3.opacity -= 6
end end
sprite3.update sprite3.update
sprite.update sprite.update
sprite2.update sprite2.update
end end
for j in 0...26 for j in 0...26
sprite2.color.red=30 sprite2.color.red = 30
sprite2.color.green=230 sprite2.color.green = 230
sprite2.color.blue=55 sprite2.color.blue = 55
sprite2.color.alpha=(26-j)*10 sprite2.color.alpha = (26 - j) * 10
sprite2.color=sprite2.color sprite2.color = sprite2.color
sprite.color=sprite2.color sprite.color = sprite2.color
sprite.update sprite.update
sprite2.update sprite2.update
end end
@metafile1=sprite @metafile1 = sprite
@metafile2=sprite2 @metafile2 = sprite2
@metafile3=sprite3 @metafile3 = sprite3
end end
# Starts the evolution screen with the given Pokemon and new Pokemon species. # Starts the evolution screen with the given Pokemon and new Pokemon species.
def pbStartScreen(pokemon1,pokemon2,newspecies) def pbStartScreen(pokemon1, pokemon2, newspecies)
@sprites={} @sprites = {}
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height) @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z=99999 @viewport.z = 99999
@pokemon1=pokemon1 @pokemon1 = pokemon1
@pokemon2=pokemon2 @pokemon2 = pokemon2
@newspecies=newspecies @newspecies = newspecies
addBackgroundOrColoredPlane(@sprites,"background","evolutionbg", addBackgroundOrColoredPlane(@sprites, "background", "evolutionbg",
Color.new(248,248,248),@viewport) Color.new(248, 248, 248), @viewport)
poke1_number = GameData::Species.get(@pokemon1.species).id_number
poke2_number = GameData::Species.get(@pokemon2.species).id_number
rsprite1=PokemonSprite.new(@viewport) rsprite1 = PokemonSprite.new(@viewport)
rsprite2=PokemonSprite.new(@viewport) rsprite2 = PokemonSprite.new(@viewport)
rsprite3 =PokemonSprite.new(@viewport) rsprite3 = PokemonSprite.new(@viewport)
rsprite1.setPokemonBitmap(@pokemon1,false) rsprite1.setPokemonBitmapFromId(poke1_number, false)
rsprite3.setPokemonBitmap(@pokemon2,false) rsprite3.setPokemonBitmapFromId(poke2_number, false)
rsprite2.setPokemonBitmapSpecies(@pokemon1,@newspecies,false) rsprite2.setPokemonBitmapFromId(@newspecies, false)
rsprite1.ox=rsprite1.bitmap.width/2 rsprite1.ox = rsprite1.bitmap.width / 2
rsprite1.oy=rsprite1.bitmap.height/2 rsprite1.oy = rsprite1.bitmap.height / 2
rsprite3.ox=rsprite3.bitmap.width/2 rsprite3.ox = rsprite3.bitmap.width / 2
rsprite3.oy=rsprite3.bitmap.height/2 rsprite3.oy = rsprite3.bitmap.height / 2
rsprite2.ox=rsprite2.bitmap.width/2 rsprite2.ox = rsprite2.bitmap.width / 2
rsprite2.oy=rsprite2.bitmap.height/2 rsprite2.oy = rsprite2.bitmap.height / 2
rsprite2.x = Graphics.width / 2
rsprite1.y = (Graphics.height - 96) / 2
rsprite3.y = (Graphics.height - 96) / 2
rsprite1.x = (Graphics.width / 2) - 100
rsprite3.x = (Graphics.width / 2) + 100
rsprite2.x=Graphics.width/2 rsprite2.y = (Graphics.height - 96) / 2
rsprite1.y=(Graphics.height-96)/2 rsprite2.opacity = 0
rsprite3.y=(Graphics.height-96)/2 @sprites["rsprite1"] = rsprite1
@sprites["rsprite2"] = rsprite2
@sprites["rsprite3"] = rsprite3
rsprite1.x=(Graphics.width/2)-100 pbGenerateMetafiles(rsprite1.ox, rsprite1.oy, rsprite2.ox, rsprite2.oy, rsprite3.ox, rsprite3.oy, rsprite1.x, rsprite3.x)
rsprite3.x=(Graphics.width/2)+100
@sprites["msgwindow"] = Kernel.pbCreateMessageWindow(@viewport)
rsprite2.y=(Graphics.height-96)/2
rsprite2.opacity=0
@sprites["rsprite1"]=rsprite1
@sprites["rsprite2"]=rsprite2
@sprites["rsprite3"]=rsprite3
pbGenerateMetafiles(rsprite1.ox,rsprite1.oy,rsprite2.ox,rsprite2.oy,rsprite3.ox,rsprite3.oy,rsprite1.x,rsprite3.x)
@sprites["msgwindow"]=Kernel.pbCreateMessageWindow(@viewport)
pbFadeInAndShow(@sprites) pbFadeInAndShow(@sprites)
####FUSION MULTIPLIER ####FUSION MULTIPLIER
@@ -591,9 +575,9 @@ class PokemonFusionScene
####LEVEL DIFFERENCE ####LEVEL DIFFERENCE
if (level1 >= level2) then if (level1 >= level2) then
avgLevel = (2*level1 + level2)/3 avgLevel = (2 * level1 + level2) / 3
else else
avgLevel = (2*level2 + level1)/3 avgLevel = (2 * level2 + level1) / 3
end end
####CAPTURE RATES ####CAPTURE RATES
@@ -614,23 +598,24 @@ class PokemonFusionScene
end end
def averageFusionIvs() def averageFusionIvs()
for i in 0..@pokemon1.iv.length-1 return
poke1Iv = @pokemon1.iv[i] # for i in 0..@pokemon1.iv.length-1
poke2Iv = @pokemon2.iv[i] # poke1Iv = @pokemon1.iv[i]
@pokemon1.iv[i] = ((poke1Iv+poke2Iv)/2).floor # poke2Iv = @pokemon2.iv[i]
end # @pokemon1.iv[i] = ((poke1Iv+poke2Iv)/2).floor
# end
end end
#unused. was meant for super splicers, but too broken #unused. was meant for super splicers, but too broken
def setHighestFusionIvs() def setHighestFusionIvs()
for i in 0..@pokemon1.iv.length-1 for i in 0..@pokemon1.iv.length - 1
iv1 = @pokemon1.iv[i] iv1 = @pokemon1.iv[i]
iv2 = @pokemon2.iv[i] iv2 = @pokemon2.iv[i]
@pokemon1.iv[i] = iv1 >= iv2 ? iv1 : iv2 @pokemon1.iv[i] = iv1 >= iv2 ? iv1 : iv2
end end
end end
# Closes the evolution screen. # Closes the evolution screen.
def pbEndScreen def pbEndScreen
Kernel.pbDisposeMessageWindow(@sprites["msgwindow"]) Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
pbFadeOutAndHide(@sprites) pbFadeOutAndHide(@sprites)
@@ -638,12 +623,11 @@ class PokemonFusionScene
@viewport.dispose @viewport.dispose
end end
# Opens the fusion screen # Opens the fusion screen
def pbFusionScreen(cancancel=false,superSplicer=false) def pbFusionScreen(cancancel = false, superSplicer = false)
metaplayer1=SpriteMetafilePlayer.new(@metafile1,@sprites["rsprite1"]) metaplayer1 = SpriteMetafilePlayer.new(@metafile1, @sprites["rsprite1"])
metaplayer2=SpriteMetafilePlayer.new(@metafile2,@sprites["rsprite2"]) metaplayer2 = SpriteMetafilePlayer.new(@metafile2, @sprites["rsprite2"])
metaplayer3=SpriteMetafilePlayer.new(@metafile3,@sprites["rsprite3"]) metaplayer3 = SpriteMetafilePlayer.new(@metafile3, @sprites["rsprite3"])
metaplayer1.play metaplayer1.play
metaplayer2.play metaplayer2.play
@@ -652,20 +636,18 @@ class PokemonFusionScene
pbBGMStop() pbBGMStop()
pbPlayCry(@pokemon) pbPlayCry(@pokemon)
Kernel.pbMessageDisplay(@sprites["msgwindow"], Kernel.pbMessageDisplay(@sprites["msgwindow"],
_INTL("The Pokémon are being fused!",@pokemon1.name)) _INTL("The Pokémon are being fused!", @pokemon1.name))
Kernel.pbMessageWaitForInput(@sprites["msgwindow"], 100, true)
Kernel.pbMessageWaitForInput(@sprites["msgwindow"],100,true)
pbPlayDecisionSE() pbPlayDecisionSE()
oldstate=pbSaveSpriteState(@sprites["rsprite1"]) oldstate = pbSaveSpriteState(@sprites["rsprite1"])
oldstate2=pbSaveSpriteState(@sprites["rsprite2"]) oldstate2 = pbSaveSpriteState(@sprites["rsprite2"])
oldstate3=pbSaveSpriteState(@sprites["rsprite3"]) oldstate3 = pbSaveSpriteState(@sprites["rsprite3"])
pbBGMPlay("fusion") pbBGMPlay("fusion")
canceled = false canceled = false
noMoves=false noMoves = false
begin begin
metaplayer1.update metaplayer1.update
metaplayer2.update metaplayer2.update
@@ -673,8 +655,8 @@ class PokemonFusionScene
Graphics.update Graphics.update
Input.update Input.update
if Input.trigger?(Input::B) && Input.trigger?(Input::C)# && Input.trigger?(Input::A)# && cancancel if Input.trigger?(Input::B) && Input.trigger?(Input::C) # && Input.trigger?(Input::A)# && cancancel
noMoves=true noMoves = true
pbSEPlay("buzzer") pbSEPlay("buzzer")
Graphics.update Graphics.update
end end
@@ -686,79 +668,78 @@ class PokemonFusionScene
@pbEndScreen @pbEndScreen
_INTL("Huh? The fusion was cancelled!") _INTL("Huh? The fusion was cancelled!")
else else
frames=pbCryFrameLength(@newspecies) frames = pbCryFrameLength(@newspecies)
pbBGMStop() pbBGMStop()
pbPlayCry(@newspecies) pbPlayCry(@newspecies)
frames.times do frames.times do
Graphics.update Graphics.update
end end
pbMEPlay("Voltorb Flip Win") pbMEPlay("Voltorb Flip Win")
newspeciesname=PBSpecies.getName(@newspecies) newSpecies = GameData::Species.get(@newspecies)
oldspeciesname=PBSpecies.getName(@pokemon1.species) newspeciesname = newSpecies.real_name
oldspeciesname = GameData::Species.get(@pokemon1.species).real_name
Kernel.pbMessageDisplay(@sprites["msgwindow"], Kernel.pbMessageDisplay(@sprites["msgwindow"],
_INTL("\\se[]Congratulations! Your Pokémon were fused into {2}!\\wt[80]",@pokemon1.name,newspeciesname)) _INTL("\\se[]Congratulations! Your Pokémon were fused into {2}!\\wt[80]", @pokemon1.name, newspeciesname))
averageFusionIvs() averageFusionIvs()
#add to pokedex #add to pokedex
if ! $Trainer.owned[@newspecies] if !$Trainer.pokedex.owned?(newSpecies)
$Trainer.seen[@newspecies]=true $Trainer.pokedex.set_seen(newSpecies)
$Trainer.owned[@newspecies]=true $Trainer.pokedex.set_owned(newSpecies)
pbSeenForm(@pokemon)
Kernel.pbMessageDisplay(@sprites["msgwindow"], Kernel.pbMessageDisplay(@sprites["msgwindow"],
_INTL("{1}'s data was added to the Pokédex",newspeciesname)) _INTL("{1}'s data was added to the Pokédex", newspeciesname))
@scene.pbShowPokedex(@newspecies) #@scene.pbShowPokedex(@newspecies)
end end
#first check if hidden ability #first check if hidden ability
hiddenAbility1 = @pokemon1.ability == @pokemon1.getAbilityList[0][-1] hiddenAbility1 = @pokemon1.ability == @pokemon1.getAbilityList[0][-1]
hiddenAbility2 = @pokemon2.ability == @pokemon2.getAbilityList[0][-1] hiddenAbility2 = @pokemon2.ability == @pokemon2.getAbilityList[0][-1]
#change species #change species
@pokemon1.species=@newspecies @pokemon1.species = newSpecies
#Check moves for new species #Check moves for new species
movelist=@pokemon1.getMoveList movelist = @pokemon1.getMoveList
for i in movelist for i in movelist
if i[0]==@pokemon1.level if i[0] == @pokemon1.level
pbLearnMove(@pokemon1,i[1]) if !noMoves #(pokemon,move,ignoreifknown=true, byTM=false , quick =true) pbLearnMove(@pokemon1, i[1]) if !noMoves #(pokemon,move,ignoreifknown=true, byTM=false , quick =true)
end end
end end
#@pokemon1.ability = pbChooseAbility(@pokemon1,@pokemon2) #@pokemon1.ability = pbChooseAbility(@pokemon1,@pokemon2)
removeItem=false removeItem = false
if @pokemon2.isShiny? || @pokemon1.isShiny? if @pokemon2.isShiny? || @pokemon1.isShiny?
@pokemon1.makeShiny @pokemon1.makeShiny
end end
#make it untraded, pour qu'on puisse le unfused après, même si un des 2 était traded #make it untraded, pour qu'on puisse le unfused après, même si un des 2 était traded
@pokemon1.obtainMode = 0 @pokemon1.obtain_method = 0
@pokemon1.setAbility(pbChooseAbility(@pokemon1,hiddenAbility1,hiddenAbility2)) @pokemon1.ability = pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2)
if superSplicer if superSplicer
@pokemon1.setNature(pbChooseNature(@pokemon1.nature,@pokemon2.nature)) @pokemon1.nature = pbChooseNature(@pokemon1.nature, @pokemon2.nature)
end end
movelist=@pokemon2.moves movelist = @pokemon2.moves
for k in movelist for k in movelist
if k.id != 0 if k.id != 0
pbLearnMove(@pokemon1,k.id,true,false,true) if !noMoves pbLearnMove(@pokemon1, k.id, true, false,true) if !noMoves #todo: learn moves faster
end end
end end
pbSEPlay("Voltorb Flip Point") pbSEPlay("Voltorb Flip Point")
@pokemon1.firstmoves=[] #@pokemon1.firstmoves = []
@pokemon1.name=newspeciesname if @pokemon1.name==oldspeciesname @pokemon1.name = newspeciesname if @pokemon1.name == oldspeciesname
@pokemon1.level = setPokemonLevel(@pokemon1.level, @pokemon2.level,superSplicer) @pokemon1.level = setPokemonLevel(@pokemon1.level, @pokemon2.level, superSplicer)
@pokemon1.calcStats @pokemon1.calc_stats
@pokemon1.obtainMode = 0 @pokemon1.obtain_method = 0
end end
end end
end end
def setPokemonLevel(pokemon1,pokemon2,superSplicers) def setPokemonLevel(pokemon1, pokemon2, superSplicers)
lv1 = @pokemon1.level lv1 = @pokemon1.level
lv2 = @pokemon2.level lv2 = @pokemon2.level
if superSplicers if superSplicers
@@ -769,9 +750,9 @@ def setPokemonLevel(pokemon1,pokemon2,superSplicers)
end end
else else
if (lv1 >= lv2) then if (lv1 >= lv2) then
return (2*lv1 + lv2)/3 return (2 * lv1 + lv2) / 3
else else
return (2*lv2 + lv1)/3 return (2 * lv2 + lv1) / 3
end end
end end
return lv1 return lv1
@@ -785,10 +766,7 @@ def pbShowPokedex(species)
} }
end end
def pbChooseAbility(poke, hidden1 = false, hidden2 = false)
def pbChooseAbility(poke,hidden1=false,hidden2=false)
abilityList = poke.getAbilityList abilityList = poke.getAbilityList
#pas sur de l'ordre pour les hidden (3 et 4) peut-être a inverser #pas sur de l'ordre pour les hidden (3 et 4) peut-être a inverser
#Mais les fusions ont tjrs 4 hidden abilities #Mais les fusions ont tjrs 4 hidden abilities
@@ -797,39 +775,39 @@ def pbChooseAbility(poke,hidden1=false,hidden2=false)
#4. hidden du poke 1 #4. hidden du poke 1
#5. hidden du poke2 #5. hidden du poke2
abID1 = hidden1 ? abilityList[4][0] : abilityList[0][0]
abID2 = hidden2 ? abilityList[5][0] : abilityList[1][0]
abID1 = hidden1 ? abilityList[0][4] : abilityList[0][0]
abID2 = hidden2 ? abilityList[0][5] : abilityList[0][1]
if (Kernel.pbMessage("Choose an ability.",[_INTL("{1}",PBAbilities.getName(abID1)),_INTL("{1}",PBAbilities.getName(abID2))],2))==0 ability1_name = GameData::Ability.get(abID1).name
ability2_name = GameData::Ability.get(abID2).name
if (Kernel.pbMessage("Choose an ability.", [_INTL("{1}", ability1_name), _INTL("{1}", ability2_name)], 2)) == 0
return hidden1 ? 4 : 0 return hidden1 ? 4 : 0
end end
return hidden2 ? 5 : 1 return hidden2 ? 5 : 1
end end
#pas au point. renvoie tjrs la mm nature #pas au point. renvoie tjrs la mm nature
def pbChooseNature(species1,species2) def pbChooseNature(species1, species2)
nature1 = PBNatures.getName(species1) nature1 = PBNatures.getName(species1)
nature2 = PBNatures.getName(species2) nature2 = PBNatures.getName(species2)
if (Kernel.pbMessage("Choose a nature.",[_INTL("{1}",nature1),_INTL("{1}",nature2)],2))==0 if (Kernel.pbMessage("Choose a nature.", [_INTL("{1}", nature1), _INTL("{1}", nature2)], 2)) == 0
return PBNatures.getNum(nature1) return PBNatures.getNum(nature1)
else else
return PBNatures.getNum(nature2) return PBNatures.getNum(nature2)
end end
end end
#EDITED FOR GEN2 #EDITED FOR GEN2
def fixEvolutionOverflow(retB,retH,oldSpecies) def fixEvolutionOverflow(retB, retH, oldSpecies)
#raise Exception.new("retB: " + retB.to_s + " retH: " + retH.to_s) #raise Exception.new("retB: " + retB.to_s + " retH: " + retH.to_s)
oldBody = getBasePokemonID(oldSpecies) oldBody = getBasePokemonID(oldSpecies)
oldHead = getBasePokemonID(oldSpecies,false) oldHead = getBasePokemonID(oldSpecies, false)
return -1 if isNegativeOrNull(retB) && isNegativeOrNull(retH) return -1 if isNegativeOrNull(retB) && isNegativeOrNull(retH)
return oldBody*NB_POKEMON+retH if isNegativeOrNull(retB) #only head evolves return oldBody * NB_POKEMON + retH if isNegativeOrNull(retB) #only head evolves
return retB*NB_POKEMON + oldHead if isNegativeOrNull(retH) #only body evolves return retB * NB_POKEMON + oldHead if isNegativeOrNull(retH) #only body evolves
return retB*NB_POKEMON+retH #both evolve return retB * NB_POKEMON + retH #both evolve
end end