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