Added "Consumable" property to items.txt, light effects now properly centre themselves on the event regardless of graphic size, Disguise/Double Iron Bash Gen 8 changes

This commit is contained in:
Maruno17
2021-07-21 22:46:49 +01:00
parent 03a7ff39ad
commit 551f64e8a1
20 changed files with 184 additions and 162 deletions

View File

@@ -9,6 +9,7 @@ module GameData
attr_reader :real_description attr_reader :real_description
attr_reader :field_use attr_reader :field_use
attr_reader :battle_use attr_reader :battle_use
attr_reader :consumable
attr_reader :type attr_reader :type
attr_reader :move attr_reader :move
@@ -23,11 +24,12 @@ module GameData
"SellPrice" => [:sell_price, "u"], "SellPrice" => [:sell_price, "u"],
"Description" => [:description, "q"], "Description" => [:description, "q"],
"FieldUse" => [:field_use, "e", {"OnPokemon" => 1, "Direct" => 2, "TM" => 3, "FieldUse" => [:field_use, "e", {"OnPokemon" => 1, "Direct" => 2, "TM" => 3,
"HM" => 4, "OnPokemonReusable" => 5, "TR" => 6}], "HM" => 4, "OnPokemonReusable" => 1, "TR" => 6}],
"BattleUse" => [:battle_use, "e", {"OnPokemon" => 1, "OnMove" => 2, "OnBattler" => 3, "BattleUse" => [:battle_use, "e", {"OnPokemon" => 1, "OnMove" => 2, "OnBattler" => 3,
"OnFoe" => 4, "Direct" => 5, "OnPokemonReusable" => 6, "OnFoe" => 4, "Direct" => 5, "OnPokemonReusable" => 1,
"OnMoveReusable" => 7, "OnBattlerReusable" => 8, "OnMoveReusable" => 2, "OnBattlerReusable" => 3,
"OnFoeReusable" => 9, "DirectReusable" => 10}], "OnFoeReusable" => 4, "DirectReusable" => 5}],
"Consumable" => [:consumable, "b"],
"Type" => [:type, "e", {"Mail" => 1, "IconMail" => 2, "SnagBall" => 3, "Type" => [:type, "e", {"Mail" => 1, "IconMail" => 2, "SnagBall" => 3,
"PokeBall" => 4, "Berry" => 5, "KeyItem" => 6, "PokeBall" => 4, "Berry" => 5, "KeyItem" => 6,
"EvolutionStone" => 7, "Fossil" => 8, "Apricorn" => 9, "EvolutionStone" => 7, "Fossil" => 8, "Apricorn" => 9,
@@ -94,6 +96,8 @@ module GameData
@field_use = hash[:field_use] || 0 @field_use = hash[:field_use] || 0
@battle_use = hash[:battle_use] || 0 @battle_use = hash[:battle_use] || 0
@type = hash[:type] || 0 @type = hash[:type] || 0
@consumable = hash[:consumable]
@consumable = !is_important? if @consumable.nil?
@move = hash[:move] @move = hash[:move]
end end
@@ -136,6 +140,10 @@ module GameData
def can_hold?; return !is_important?; end def can_hold?; return !is_important?; end
def consumed_after_use?
return !is_important? && @consumable
end
def unlosable?(species, ability) def unlosable?(species, ability)
return false if species == :ARCEUS && ability != :MULTITYPE return false if species == :ARCEUS && ability != :MULTITYPE
return false if species == :SILVALLY && ability != :RKSSYSTEM return false if species == :SILVALLY && ability != :RKSSYSTEM

View File

@@ -186,7 +186,7 @@ class PokeBattle_Move
target.damageState.totalHPLost += damage target.damageState.totalHPLost += damage
return return
end end
# Disguise takes the damage # Disguise/Ice Face takes the damage
return if target.damageState.disguise || target.damageState.iceFace return if target.damageState.disguise || target.damageState.iceFace
# Target takes the damage # Target takes the damage
if damage>=target.hp if damage>=target.hp
@@ -305,6 +305,7 @@ class PokeBattle_Move
end end
@battle.pbHideAbilitySplash(target) @battle.pbHideAbilitySplash(target)
target.pbChangeForm(1,_INTL("{1}'s disguise was busted!",target.pbThis)) target.pbChangeForm(1,_INTL("{1}'s disguise was busted!",target.pbThis))
target.pbReduceHP(target.totalhp / 8, false) if Settings::MECHANICS_GENERATION >= 8
elsif target.damageState.iceFace elsif target.damageState.iceFace
@battle.pbShowAbilitySplash(target) @battle.pbShowAbilitySplash(target)
if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH

View File

@@ -2619,7 +2619,7 @@ end
class PokeBattle_Move_175 < PokeBattle_FlinchMove class PokeBattle_Move_175 < PokeBattle_FlinchMove
def multiHitMove?; return true; end def multiHitMove?; return true; end
def pbNumHits(user,targets); return 2; end def pbNumHits(user,targets); return 2; end
def tramplesMinimize?(param=1); return true; end def tramplesMinimize?(param=1); return Settings::MECHANICS_GENERATION <= 7; end
end end

View File

@@ -41,8 +41,7 @@ class PokeBattle_Battle
#============================================================================= #=============================================================================
def pbConsumeItemInBag(item,idxBattler) def pbConsumeItemInBag(item,idxBattler)
return if !item return if !item
useType = GameData::Item.get(item).battle_use return if !GameData::Item.get(item).consumed_after_use?
return if useType==0 || (useType>=6 && useType<=10) # Not consumed upon use
if pbOwnedByPlayer?(idxBattler) if pbOwnedByPlayer?(idxBattler)
if !$PokemonBag.pbDeleteItem(item) if !$PokemonBag.pbDeleteItem(item)
raise _INTL("Tried to consume item that wasn't in the Bag somehow.") raise _INTL("Tried to consume item that wasn't in the Bag somehow.")
@@ -60,8 +59,7 @@ class PokeBattle_Battle
def pbReturnUnusedItemToBag(item,idxBattler) def pbReturnUnusedItemToBag(item,idxBattler)
return if !item return if !item
useType = GameData::Item.get(item).battle_use return if !GameData::Item.get(item).consumed_after_use?
return if useType==0 || (useType>=6 && useType<=10) # Not consumed upon use
if pbOwnedByPlayer?(idxBattler) if pbOwnedByPlayer?(idxBattler)
if $PokemonBag && $PokemonBag.pbCanStore?(item) if $PokemonBag && $PokemonBag.pbCanStore?(item)
$PokemonBag.pbStoreItem(item) $PokemonBag.pbStoreItem(item)

View File

@@ -107,21 +107,21 @@ class PokeBattle_Battle
next false if !item next false if !item
battler = pkmn = nil battler = pkmn = nil
case useType case useType
when 1, 2, 6, 7 # Use on Pokémon/Pokémon's move when 1, 2 # Use on Pokémon/Pokémon's move
next false if !ItemHandlers.hasBattleUseOnPokemon(item) next false if !ItemHandlers.hasBattleUseOnPokemon(item)
battler = pbFindBattler(idxPkmn,idxBattler) battler = pbFindBattler(idxPkmn,idxBattler)
pkmn = pbParty(idxBattler)[idxPkmn] pkmn = pbParty(idxBattler)[idxPkmn]
next false if !pbCanUseItemOnPokemon?(item,pkmn,battler,itemScene) next false if !pbCanUseItemOnPokemon?(item,pkmn,battler,itemScene)
when 3, 8 # Use on battler when 3 # Use on battler
next false if !ItemHandlers.hasBattleUseOnBattler(item) next false if !ItemHandlers.hasBattleUseOnBattler(item)
battler = pbFindBattler(idxPkmn,idxBattler) battler = pbFindBattler(idxPkmn,idxBattler)
pkmn = battler.pokemon if battler pkmn = battler.pokemon if battler
next false if !pbCanUseItemOnPokemon?(item,pkmn,battler,itemScene) next false if !pbCanUseItemOnPokemon?(item,pkmn,battler,itemScene)
when 4, 9 # Poké Balls when 4 # Poké Balls
next false if idxPkmn<0 next false if idxPkmn<0
battler = @battlers[idxPkmn] battler = @battlers[idxPkmn]
pkmn = battler.pokemon if battler pkmn = battler.pokemon if battler
when 5, 10 # No target (Poké Doll, Guard Spec., Launcher items) when 5 # No target (Poké Doll, Guard Spec., Launcher items)
battler = @battlers[idxBattler] battler = @battlers[idxBattler]
pkmn = battler.pokemon if battler pkmn = battler.pokemon if battler
else else

View File

@@ -71,13 +71,13 @@ class PokeBattle_Battle
item = @choices[b.index][1] item = @choices[b.index][1]
next if !item next if !item
case GameData::Item.get(item).battle_use case GameData::Item.get(item).battle_use
when 1, 2, 6, 7 # Use on Pokémon/Pokémon's move when 1, 2 # Use on Pokémon/Pokémon's move
pbUseItemOnPokemon(item, @choices[b.index][2], b) if @choices[b.index][2] >= 0 pbUseItemOnPokemon(item, @choices[b.index][2], b) if @choices[b.index][2] >= 0
when 3, 8 # Use on battler when 3 # Use on battler
pbUseItemOnBattler(item, @choices[b.index][2], b) pbUseItemOnBattler(item, @choices[b.index][2], b)
when 4, 9 # Use Poké Ball when 4 # Use Poké Ball
pbUsePokeBallInBattle(item, @choices[b.index][2], b) pbUsePokeBallInBattle(item, @choices[b.index][2], b)
when 5, 10 # Use directly when 5 # Use directly
pbUseItemInBattle(item, @choices[b.index][2], b) pbUseItemInBattle(item, @choices[b.index][2], b)
else else
next next

View File

@@ -8,7 +8,7 @@ class PokeBattle_AI
return false if !item return false if !item
# Determine target of item (always the Pokémon choosing the action) # Determine target of item (always the Pokémon choosing the action)
useType = GameData::Item.get(item).battle_use useType = GameData::Item.get(item).battle_use
if [1, 2, 3, 6, 7, 8].include?(useType) # Use on Pokémon if [1, 2, 3].include?(useType) # Use on Pokémon
idxTarget = @battle.battlers[idxTarget].pokemonIndex # Party Pokémon idxTarget = @battle.battlers[idxTarget].pokemonIndex # Party Pokémon
end end
# Register use of item # Register use of item

View File

@@ -221,26 +221,21 @@ class PokeBattle_Scene
next unless cmdUse>=0 && command==cmdUse # Use next unless cmdUse>=0 && command==cmdUse # Use
# Use types: # Use types:
# 0 = not usable in battle # 0 = not usable in battle
# 1 = use on Pokémon (lots of items), consumed # 1 = use on Pokémon (lots of items, Blue Flute)
# 2 = use on Pokémon's move (Ethers), consumed # 2 = use on Pokémon's move (Ethers)
# 3 = use on battler (X items, Persim Berry), consumed # 3 = use on battler (X items, Persim Berry, Red/Yellow Flutes)
# 4 = use on opposing battler (Poké Balls), consumed # 4 = use on opposing battler (Poké Balls)
# 5 = use no target (Poké Doll, Guard Spec., Launcher items), consumed # 5 = use no target (Poké Doll, Guard Spec., Poké Flute, Launcher items)
# 6 = use on Pokémon (Blue Flute), not consumed
# 7 = use on Pokémon's move, not consumed
# 8 = use on battler (Red/Yellow Flutes), not consumed
# 9 = use on opposing battler, not consumed
# 10 = use no target (Poké Flute), not consumed
case useType case useType
when 1, 2, 3, 6, 7, 8 # Use on Pokémon/Pokémon's move/battler when 1, 2, 3 # Use on Pokémon/Pokémon's move/battler
# Auto-choose the Pokémon/battler whose action is being decided if they # Auto-choose the Pokémon/battler whose action is being decided if they
# are the only available Pokémon/battler to use the item on # are the only available Pokémon/battler to use the item on
case useType case useType
when 1, 6 # Use on Pokémon when 1 # Use on Pokémon
if @battle.pbTeamLengthFromBattlerIndex(idxBattler)==1 if @battle.pbTeamLengthFromBattlerIndex(idxBattler)==1
break if yield item.id, useType, @battle.battlers[idxBattler].pokemonIndex, -1, itemScene break if yield item.id, useType, @battle.battlers[idxBattler].pokemonIndex, -1, itemScene
end end
when 3, 8 # Use on battler when 3 # Use on battler
if @battle.pbPlayerBattlerCount==1 if @battle.pbPlayerBattlerCount==1
break if yield item.id, useType, @battle.battlers[idxBattler].pokemonIndex, -1, itemScene break if yield item.id, useType, @battle.battlers[idxBattler].pokemonIndex, -1, itemScene
end end
@@ -273,7 +268,7 @@ class PokeBattle_Scene
pkmn = party[idxPartyRet] pkmn = party[idxPartyRet]
next if !pkmn || pkmn.egg? next if !pkmn || pkmn.egg?
idxMove = -1 idxMove = -1
if useType==2 || useType==7 # Use on Pokémon's move if useType==2 # Use on Pokémon's move
idxMove = pkmnScreen.pbChooseMove(pkmn,_INTL("Restore which move?")) idxMove = pkmnScreen.pbChooseMove(pkmn,_INTL("Restore which move?"))
next if idxMove<0 next if idxMove<0
end end
@@ -283,7 +278,7 @@ class PokeBattle_Scene
break if idxParty>=0 break if idxParty>=0
# Cancelled choosing a Pokémon; show the Bag screen again # Cancelled choosing a Pokémon; show the Bag screen again
itemScene.pbFadeInScene itemScene.pbFadeInScene
when 4, 9 # Use on opposing battler (Poké Balls) when 4 # Use on opposing battler (Poké Balls)
idxTarget = -1 idxTarget = -1
if @battle.pbOpposingBattlerCount(idxBattler)==1 if @battle.pbOpposingBattlerCount(idxBattler)==1
@battle.eachOtherSideBattler(idxBattler) { |b| idxTarget = b.index } @battle.eachOtherSideBattler(idxBattler) { |b| idxTarget = b.index }
@@ -305,7 +300,7 @@ class PokeBattle_Scene
pbFadeOutAndHide(@sprites) pbFadeOutAndHide(@sprites)
itemScene.pbFadeInScene itemScene.pbFadeInScene
end end
when 5, 10 # Use with no target when 5 # Use with no target
break if yield item.id, useType, idxBattler, -1, itemScene break if yield item.id, useType, idxBattler, -1, itemScene
end end
end end

View File

@@ -141,22 +141,25 @@ end
class LightEffect_Basic < LightEffect class LightEffect_Basic < LightEffect
def initialize(event, viewport = nil, map = nil, filename = nil)
super
@light.ox = @light.bitmap.width / 2
@light.oy = @light.bitmap.height / 2
@light.opacity = 100
end
def update def update
return if !@light || !@event return if !@light || !@event
super super
@light.opacity = 100
@light.ox = 32
@light.oy = 48
if (Object.const_defined?(:ScreenPosHelper) rescue false) if (Object.const_defined?(:ScreenPosHelper) rescue false)
@light.x = ScreenPosHelper.pbScreenX(@event) @light.x = ScreenPosHelper.pbScreenX(@event)
@light.y = ScreenPosHelper.pbScreenY(@event) @light.y = ScreenPosHelper.pbScreenY(@event) - Game_Map::TILE_HEIGHT / 2
@light.zoom_x = ScreenPosHelper.pbScreenZoomX(@event) @light.zoom_x = ScreenPosHelper.pbScreenZoomX(@event)
@light.zoom_y = @light.zoom_x
else else
@light.x = @event.screen_x @light.x = @event.screen_x
@light.y = @event.screen_y @light.y = @event.screen_y - Game_Map::TILE_HEIGHT / 2
@light.zoom_x = 1.0
end end
@light.zoom_y = @light.zoom_x
@light.tone = $game_screen.tone @light.tone = $game_screen.tone
end end
end end
@@ -164,6 +167,12 @@ end
class LightEffect_DayNight < LightEffect class LightEffect_DayNight < LightEffect
def initialize(event, viewport = nil, map = nil, filename = nil)
super
@light.ox = @light.bitmap.width / 2
@light.oy = @light.bitmap.height / 2
end
def update def update
return if !@light || !@event return if !@light || !@event
super super
@@ -177,18 +186,14 @@ class LightEffect_DayNight < LightEffect
end end
@light.opacity = 255-shade @light.opacity = 255-shade
if @light.opacity>0 if @light.opacity>0
@light.ox = 32
@light.oy = 48
if (Object.const_defined?(:ScreenPosHelper) rescue false) if (Object.const_defined?(:ScreenPosHelper) rescue false)
@light.x = ScreenPosHelper.pbScreenX(@event) @light.x = ScreenPosHelper.pbScreenX(@event)
@light.y = ScreenPosHelper.pbScreenY(@event) @light.y = ScreenPosHelper.pbScreenY(@event) - Game_Map::TILE_HEIGHT / 2
@light.zoom_x = ScreenPosHelper.pbScreenZoomX(@event) @light.zoom_x = ScreenPosHelper.pbScreenZoomX(@event)
@light.zoom_y = ScreenPosHelper.pbScreenZoomY(@event) @light.zoom_y = ScreenPosHelper.pbScreenZoomY(@event)
else else
@light.x = @event.screen_x @light.x = @event.screen_x
@light.y = @event.screen_y @light.y = @event.screen_y - Game_Map::TILE_HEIGHT / 2
@light.zoom_x = 1.0
@light.zoom_y = 1.0
end end
@light.tone.set($game_screen.tone.red, @light.tone.set($game_screen.tone.red,
$game_screen.tone.green, $game_screen.tone.green,

View File

@@ -49,12 +49,12 @@ module ItemHandlers
# 0 - Item not used # 0 - Item not used
# 1 - Item used, don't end screen # 1 - Item used, don't end screen
# 2 - Item used, end screen # 2 - Item used, end screen
# 3 - Item used, don't end screen, consume item
# 4 - Item used, end screen, consume item
def self.triggerUseFromBag(item) def self.triggerUseFromBag(item)
return UseFromBag.trigger(item) if UseFromBag[item] return UseFromBag.trigger(item) if UseFromBag[item]
# No UseFromBag handler exists; check the UseInField handler if present # No UseFromBag handler exists; check the UseInField handler if present
return UseInField.trigger(item) if UseInField[item] if UseInField[item]
return (UseInField.trigger(item)) ? 1 : 0
end
return 0 return 0
end end
@@ -68,10 +68,9 @@ module ItemHandlers
# -1 - Item effect not found # -1 - Item effect not found
# 0 - Item not used # 0 - Item not used
# 1 - Item used # 1 - Item used
# 3 - Item used, consume item
def self.triggerUseInField(item) def self.triggerUseInField(item)
return -1 if !UseInField[item] return -1 if !UseInField[item]
return UseInField.trigger(item) return (UseInField.trigger(item)) ? 1 : 0
end end
# Returns whether item was used # Returns whether item was used
@@ -561,11 +560,11 @@ def pbUseItem(bag,item,bagscene=nil)
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.consumed_after_use?
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 # 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
@@ -593,7 +592,7 @@ def pbUseItem(bag,item,bagscene=nil)
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 && itm.consumed_after_use?
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 }
@@ -608,16 +607,9 @@ def pbUseItem(bag,item,bagscene=nil)
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 if intret >= 0
when 0 then return 0 bag.pbDeleteItem(item) if intret == 1 && itm.consumed_after_use?
when 1 then return 1 # Item used return intret
when 2 then return 2 # Item used, end screen
when 3 # Item used, consume item
bag.pbDeleteItem(item)
return 1
when 4 # Item used, end screen and consume item
bag.pbDeleteItem(item)
return 2
end end
pbMessage(_INTL("Can't use that here.")) pbMessage(_INTL("Can't use that here."))
return 0 return 0
@@ -643,7 +635,7 @@ def pbUseItemOnPokemon(item,pkmn,scene)
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.consumed_after_use?
return true return true
end end
end end
@@ -654,8 +646,7 @@ def pbUseItemOnPokemon(item,pkmn,scene)
ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,scene) ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,scene)
scene.pbClearAnnotations scene.pbClearAnnotations
scene.pbHardRefresh scene.pbHardRefresh
useType = itm.field_use if ret && itm.consumed_after_use?
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 }
@@ -668,10 +659,10 @@ 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 > 0 && GameData::Item.get(item).consumed_after_use?
$PokemonBag.pbDeleteItem(item) $PokemonBag.pbDeleteItem(item)
end end
return ret!=-1 && ret!=0 return ret > 0
end end
def pbUseItemMessage(item) def pbUseItemMessage(item)

View File

@@ -10,16 +10,14 @@ ItemHandlers::UseText.copy(:BICYCLE,:MACHBIKE,:ACROBIKE)
#=============================================================================== #===============================================================================
# UseFromBag handlers # UseFromBag handlers
# Return values: 0 = not used # Return values: 0 = not used
# 1 = used, item not consumed # 1 = used
# 2 = close the Bag to use, item not consumed # 2 = close the Bag to use
# 3 = used, item consumed
# 4 = close the Bag to use, item consumed
# If there is no UseFromBag handler for an item being used from the Bag (not on # If there is no UseFromBag handler for an item being used from the Bag (not on
# a Pokémon and not a TM/HM), calls the UseInField handler for it instead. # a Pokémon and not a TM/HM), calls the UseInField handler for it instead.
#=============================================================================== #===============================================================================
ItemHandlers::UseFromBag.add(:HONEY,proc { |item| ItemHandlers::UseFromBag.add(:HONEY,proc { |item|
next 4 next 2
}) })
ItemHandlers::UseFromBag.add(:ESCAPEROPE,proc { |item| ItemHandlers::UseFromBag.add(:ESCAPEROPE,proc { |item|
@@ -28,7 +26,7 @@ ItemHandlers::UseFromBag.add(:ESCAPEROPE,proc { |item|
next 0 next 0
end end
if ($PokemonGlobal.escapePoint rescue false) && $PokemonGlobal.escapePoint.length>0 if ($PokemonGlobal.escapePoint rescue false) && $PokemonGlobal.escapePoint.length>0
next (GameData::Item.get(item).is_key_item?) ? 2 : 4 # End screen and use item next 2 # End screen and use item
end end
pbMessage(_INTL("Can't use that here.")) pbMessage(_INTL("Can't use that here."))
next 0 next 0
@@ -78,9 +76,8 @@ ItemHandlers::ConfirmUseInField.add(:ESCAPEROPE,proc { |item|
#=============================================================================== #===============================================================================
# UseInField handlers # UseInField handlers
# Return values: 0 = not used # Return values: false = not used
# 1 = used, item not consumed # true = used
# 3 = used, item consumed
# Called if an item is used from the Bag (not on a Pokémon and not a TM/HM) and # Called if an item is used from the Bag (not on a Pokémon and not a TM/HM) and
# there is no UseFromBag handler above. # there is no UseFromBag handler above.
# If an item has this handler, it can be registered to the Ready Menu. # If an item has this handler, it can be registered to the Ready Menu.
@@ -89,11 +86,11 @@ ItemHandlers::ConfirmUseInField.add(:ESCAPEROPE,proc { |item|
def pbRepel(item,steps) def pbRepel(item,steps)
if $PokemonGlobal.repel>0 if $PokemonGlobal.repel>0
pbMessage(_INTL("But a repellent's effect still lingers from earlier.")) pbMessage(_INTL("But a repellent's effect still lingers from earlier."))
return 0 return false
end end
pbUseItemMessage(item) pbUseItemMessage(item)
$PokemonGlobal.repel = steps $PokemonGlobal.repel = steps
return 3 return true
end end
ItemHandlers::UseInField.add(:REPEL,proc { |item| ItemHandlers::UseInField.add(:REPEL,proc { |item|
@@ -138,7 +135,7 @@ ItemHandlers::UseInField.add(:BLACKFLUTE,proc { |item|
pbMessage(_INTL("Wild Pokémon will be repelled.")) pbMessage(_INTL("Wild Pokémon will be repelled."))
$PokemonMap.blackFluteUsed = true $PokemonMap.blackFluteUsed = true
$PokemonMap.whiteFluteUsed = false $PokemonMap.whiteFluteUsed = false
next 1 next true
}) })
ItemHandlers::UseInField.add(:WHITEFLUTE,proc { |item| ItemHandlers::UseInField.add(:WHITEFLUTE,proc { |item|
@@ -146,24 +143,24 @@ ItemHandlers::UseInField.add(:WHITEFLUTE,proc { |item|
pbMessage(_INTL("Wild Pokémon will be lured.")) pbMessage(_INTL("Wild Pokémon will be lured."))
$PokemonMap.blackFluteUsed = false $PokemonMap.blackFluteUsed = false
$PokemonMap.whiteFluteUsed = true $PokemonMap.whiteFluteUsed = true
next 1 next true
}) })
ItemHandlers::UseInField.add(:HONEY,proc { |item| ItemHandlers::UseInField.add(:HONEY,proc { |item|
pbUseItemMessage(item) pbUseItemMessage(item)
pbSweetScent pbSweetScent
next 3 next true
}) })
ItemHandlers::UseInField.add(:ESCAPEROPE,proc { |item| ItemHandlers::UseInField.add(:ESCAPEROPE,proc { |item|
escape = ($PokemonGlobal.escapePoint rescue nil) escape = ($PokemonGlobal.escapePoint rescue nil)
if !escape || escape==[] if !escape || escape==[]
pbMessage(_INTL("Can't use that here.")) pbMessage(_INTL("Can't use that here."))
next 0 next false
end end
if $game_player.pbHasDependentEvents? if $game_player.pbHasDependentEvents?
pbMessage(_INTL("It can't be used when you have someone with you.")) pbMessage(_INTL("It can't be used when you have someone with you."))
next 0 next false
end end
pbUseItemMessage(item) pbUseItemMessage(item)
pbFadeOutIn { pbFadeOutIn {
@@ -177,13 +174,13 @@ ItemHandlers::UseInField.add(:ESCAPEROPE,proc { |item|
$game_map.refresh $game_map.refresh
} }
pbEraseEscapePoint pbEraseEscapePoint
next (GameData::Item.get(item).is_key_item?) ? 1 : 3 next true
}) })
ItemHandlers::UseInField.add(:SACREDASH,proc { |item| ItemHandlers::UseInField.add(:SACREDASH,proc { |item|
if $Trainer.pokemon_count == 0 if $Trainer.pokemon_count == 0
pbMessage(_INTL("There is no Pokémon.")) pbMessage(_INTL("There is no Pokémon."))
next 0 next false
end end
canrevive = false canrevive = false
for i in $Trainer.pokemon_party for i in $Trainer.pokemon_party
@@ -192,7 +189,7 @@ ItemHandlers::UseInField.add(:SACREDASH,proc { |item|
end end
if !canrevive if !canrevive
pbMessage(_INTL("It won't have any effect.")) pbMessage(_INTL("It won't have any effect."))
next 0 next false
end end
revived = 0 revived = 0
pbFadeOutIn { pbFadeOutIn {
@@ -212,7 +209,7 @@ ItemHandlers::UseInField.add(:SACREDASH,proc { |item|
end end
screen.pbEndScene screen.pbEndScene
} }
next (revived==0) ? 0 : 3 next (revived > 0)
}) })
ItemHandlers::UseInField.add(:BICYCLE,proc { |item| ItemHandlers::UseInField.add(:BICYCLE,proc { |item|
@@ -222,9 +219,9 @@ ItemHandlers::UseInField.add(:BICYCLE,proc { |item|
else else
pbMountBike pbMountBike
end end
next 1 next true
end end
next 0 next false
}) })
ItemHandlers::UseInField.copy(:BICYCLE,:MACHBIKE,:ACROBIKE) ItemHandlers::UseInField.copy(:BICYCLE,:MACHBIKE,:ACROBIKE)
@@ -233,39 +230,39 @@ ItemHandlers::UseInField.add(:OLDROD,proc { |item|
notCliff = $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player) notCliff = $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff) if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff)
pbMessage(_INTL("Can't use that here.")) pbMessage(_INTL("Can't use that here."))
next 0 next false
end end
encounter = $PokemonEncounters.has_encounter_type?(:OldRod) encounter = $PokemonEncounters.has_encounter_type?(:OldRod)
if pbFishing(encounter,1) if pbFishing(encounter,1)
pbEncounter(:OldRod) pbEncounter(:OldRod)
end end
next 1 next true
}) })
ItemHandlers::UseInField.add(:GOODROD,proc { |item| ItemHandlers::UseInField.add(:GOODROD,proc { |item|
notCliff = $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player) notCliff = $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff) if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff)
pbMessage(_INTL("Can't use that here.")) pbMessage(_INTL("Can't use that here."))
next 0 next false
end end
encounter = $PokemonEncounters.has_encounter_type?(:GoodRod) encounter = $PokemonEncounters.has_encounter_type?(:GoodRod)
if pbFishing(encounter,2) if pbFishing(encounter,2)
pbEncounter(:GoodRod) pbEncounter(:GoodRod)
end end
next 1 next true
}) })
ItemHandlers::UseInField.add(:SUPERROD,proc { |item| ItemHandlers::UseInField.add(:SUPERROD,proc { |item|
notCliff = $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player) notCliff = $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff) if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff)
pbMessage(_INTL("Can't use that here.")) pbMessage(_INTL("Can't use that here."))
next 0 next false
end end
encounter = $PokemonEncounters.has_encounter_type?(:SuperRod) encounter = $PokemonEncounters.has_encounter_type?(:SuperRod)
if pbFishing(encounter,3) if pbFishing(encounter,3)
pbEncounter(:SuperRod) pbEncounter(:SuperRod)
end end
next 1 next true
}) })
ItemHandlers::UseInField.add(:ITEMFINDER,proc { |item| ItemHandlers::UseInField.add(:ITEMFINDER,proc { |item|
@@ -300,31 +297,31 @@ ItemHandlers::UseInField.add(:ITEMFINDER,proc { |item|
pbMessage(_INTL("There's an item buried around here!")) pbMessage(_INTL("There's an item buried around here!"))
end end
end end
next 1 next true
}) })
ItemHandlers::UseInField.copy(:ITEMFINDER,:DOWSINGMCHN,:DOWSINGMACHINE) ItemHandlers::UseInField.copy(:ITEMFINDER,:DOWSINGMCHN,:DOWSINGMACHINE)
ItemHandlers::UseInField.add(:TOWNMAP,proc { |item| ItemHandlers::UseInField.add(:TOWNMAP,proc { |item|
pbShowMap(-1,false) pbShowMap(-1,false)
next 1 next true
}) })
ItemHandlers::UseInField.add(:COINCASE,proc { |item| ItemHandlers::UseInField.add(:COINCASE,proc { |item|
pbMessage(_INTL("Coins: {1}", $Trainer.coins.to_s_formatted)) pbMessage(_INTL("Coins: {1}", $Trainer.coins.to_s_formatted))
next 1 next true
}) })
ItemHandlers::UseInField.add(:EXPALL,proc { |item| ItemHandlers::UseInField.add(:EXPALL,proc { |item|
$PokemonBag.pbChangeItem(:EXPALL,:EXPALLOFF) $PokemonBag.pbChangeItem(:EXPALL,:EXPALLOFF)
pbMessage(_INTL("The Exp Share was turned off.")) pbMessage(_INTL("The Exp Share was turned off."))
next 1 next true
}) })
ItemHandlers::UseInField.add(:EXPALLOFF,proc { |item| ItemHandlers::UseInField.add(:EXPALLOFF,proc { |item|
$PokemonBag.pbChangeItem(:EXPALLOFF,:EXPALL) $PokemonBag.pbChangeItem(:EXPALLOFF,:EXPALL)
pbMessage(_INTL("The Exp Share was turned on.")) pbMessage(_INTL("The Exp Share was turned on."))
next 1 next true
}) })
#=============================================================================== #===============================================================================

View File

@@ -238,7 +238,7 @@ Events.onMapChange += proc { |_sender,_e|
# Item handlers # Item handlers
################################################################################ ################################################################################
ItemHandlers::UseInField.add(:POKERADAR,proc { |item| ItemHandlers::UseInField.add(:POKERADAR,proc { |item|
next (pbUsePokeRadar) ? 1 : 0 next pbUsePokeRadar
}) })
ItemHandlers::UseFromBag.add(:POKERADAR,proc { |item| ItemHandlers::UseFromBag.add(:POKERADAR,proc { |item|

View File

@@ -800,9 +800,9 @@ end
#=============================================================================== #===============================================================================
def pbItemEditor def pbItemEditor
field_use_array = [_INTL("Can't use in field")] field_use_array = [_INTL("Can't use in field")]
GameData::Item::SCHEMA["FieldUse"][2].each { |key, value| field_use_array[value] = key } GameData::Item::SCHEMA["FieldUse"][2].each { |key, value| field_use_array[value] = key if !field_use_array[value] }
battle_use_array = [_INTL("Can't use in battle")] battle_use_array = [_INTL("Can't use in battle")]
GameData::Item::SCHEMA["BattleUse"][2].each { |key, value| battle_use_array[value] = key } GameData::Item::SCHEMA["BattleUse"][2].each { |key, value| battle_use_array[value] = key if !battle_use_array[value] }
type_array = [_INTL("No special type")] type_array = [_INTL("No special type")]
GameData::Item::SCHEMA["Type"][2].each { |key, value| type_array[value] = key } GameData::Item::SCHEMA["Type"][2].each { |key, value| type_array[value] = key }
item_properties = [ item_properties = [
@@ -815,6 +815,7 @@ def pbItemEditor
[_INTL("Description"), StringProperty, _INTL("Description of this item")], [_INTL("Description"), StringProperty, _INTL("Description of this item")],
[_INTL("FieldUse"), EnumProperty.new(field_use_array), _INTL("How this item can be used outside of battle.")], [_INTL("FieldUse"), EnumProperty.new(field_use_array), _INTL("How this item can be used outside of battle.")],
[_INTL("BattleUse"), EnumProperty.new(battle_use_array), _INTL("How this item can be used within a battle.")], [_INTL("BattleUse"), EnumProperty.new(battle_use_array), _INTL("How this item can be used within a battle.")],
[_INTL("Consumable"), BooleanProperty, _INTL("Whether this item is consumed after use.")],
[_INTL("Type"), EnumProperty.new(type_array), _INTL("For special kinds of items.")], [_INTL("Type"), EnumProperty.new(type_array), _INTL("For special kinds of items.")],
[_INTL("Move"), MoveProperty, _INTL("Move taught by this HM, TM or TR.")] [_INTL("Move"), MoveProperty, _INTL("Move taught by this HM, TM or TR.")]
] ]
@@ -842,6 +843,7 @@ def pbItemEditor
itm.real_description, itm.real_description,
itm.field_use, itm.field_use,
itm.battle_use, itm.battle_use,
itm.consumable,
itm.type, itm.type,
itm.move itm.move
] ]
@@ -857,8 +859,9 @@ def pbItemEditor
:description => data[6], :description => data[6],
:field_use => data[7], :field_use => data[7],
:battle_use => data[8], :battle_use => data[8],
:type => data[9], :consumable => data[9],
:move => data[10] :type => data[10],
:move => data[11]
} }
# Add item's data to records # Add item's data to records
GameData::Item.register(item_hash) GameData::Item.register(item_hash)

View File

@@ -458,6 +458,9 @@ module Compiler
if GameData::Item.exists?(item_id) if GameData::Item.exists?(item_id)
raise _INTL("Item ID '{1}' is used twice.\r\n{2}", item_id, FileLineData.linereport) raise _INTL("Item ID '{1}' is used twice.\r\n{2}", item_id, FileLineData.linereport)
end end
consumable = !([3, 4, 5].include?(line[7]) || line[8] >= 6)
line[7] = 1 if line[7] == 5
line[8] -= 5 if line[8] > 5
# Construct item hash # Construct item hash
item_hash = { item_hash = {
:id => item_id, :id => item_id,
@@ -468,6 +471,7 @@ module Compiler
:description => line[6], :description => line[6],
:field_use => line[7], :field_use => line[7],
:battle_use => line[8], :battle_use => line[8],
:consumable => consumable,
:type => line[9], :type => line[9],
:move => line[10] :move => line[10]
} }

View File

@@ -215,6 +215,7 @@ module Compiler
battle_use = GameData::Item::SCHEMA["BattleUse"][2].key(item.battle_use) battle_use = GameData::Item::SCHEMA["BattleUse"][2].key(item.battle_use)
f.write(sprintf("BattleUse = %s\r\n", battle_use)) if battle_use f.write(sprintf("BattleUse = %s\r\n", battle_use)) if battle_use
type = GameData::Item::SCHEMA["Type"][2].key(item.type) type = GameData::Item::SCHEMA["Type"][2].key(item.type)
f.write(sprintf("Consumable = false\r\n")) if !item.is_important? && !item.consumable
f.write(sprintf("Type = %s\r\n", type)) if type f.write(sprintf("Type = %s\r\n", type)) if type
f.write(sprintf("Move = %s\r\n", item.move)) if item.move f.write(sprintf("Move = %s\r\n", item.move)) if item.move
f.write(sprintf("Description = %s\r\n", item.real_description)) f.write(sprintf("Description = %s\r\n", item.real_description))

View File

@@ -29,15 +29,14 @@ Some moves have changed properties/effects:
than the order in which they were Quashed. than the order in which they were Quashed.
- Parting Shot is able to make the user switch out if its effect is redirected - Parting Shot is able to make the user switch out if its effect is redirected
by Mirror Armor. Throat Spray is triggered and applies before the switch. by Mirror Armor. Throat Spray is triggered and applies before the switch.
- Double Iron Bash no longer has a different effect if the target is Minimized.
Some abilities have changed effects: Some abilities have changed effects:
- Intimidate now triggers Rattled. - Intimidate now triggers Rattled. Rattled needs a new ability handler just for
triggering this way.
- If another Pokémon faints before a Pokémon with Analytic makes its move, - If another Pokémon faints before a Pokémon with Analytic makes its move,
Analytic calculates whether it would have moved before or after the fainted Analytic calculates whether it would have moved before or after the fainted
Pokémon. In Gen 8, speed- and priority-modifying effects aren't considered, Pokémon. In Gen 8, speed- and priority-modifying effects aren't considered,
but in earlier Gens they are. but in earlier Gens they are.
- Disguise now reduces the damage taken to 1/8, rather than to 0.
Some items have changed properties/effects: Some items have changed properties/effects:
- Zygarde Cube now changes a Zygarde's ability. - Zygarde Cube now changes a Zygarde's ability.

View File

@@ -30,6 +30,7 @@ NamePlural = Black Flutes
Pocket = 1 Pocket = 1
Price = 400 Price = 400
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear. Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear.
#------------------------------- #-------------------------------
[WHITEFLUTE] [WHITEFLUTE]
@@ -38,6 +39,7 @@ NamePlural = White Flutes
Pocket = 1 Pocket = 1
Price = 500 Price = 500
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear. Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear.
#------------------------------- #-------------------------------
[HONEY] [HONEY]
@@ -3996,8 +3998,9 @@ Name = Blue Flute
NamePlural = Blue Flutes NamePlural = Blue Flutes
Pocket = 7 Pocket = 7
Price = 100 Price = 100
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = OnPokemonReusable BattleUse = OnPokemon
Consumable = false
Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep. Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep.
#------------------------------- #-------------------------------
[YELLOWFLUTE] [YELLOWFLUTE]
@@ -4005,7 +4008,8 @@ Name = Yellow Flute
NamePlural = Yellow Flutes NamePlural = Yellow Flutes
Pocket = 7 Pocket = 7
Price = 300 Price = 300
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion. Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion.
#------------------------------- #-------------------------------
[REDFLUTE] [REDFLUTE]
@@ -4013,7 +4017,8 @@ Name = Red Flute
NamePlural = Red Flutes NamePlural = Red Flutes
Pocket = 7 Pocket = 7
Price = 200 Price = 200
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation. Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation.
#------------------------------- #-------------------------------
[POKEDOLL] [POKEDOLL]
@@ -4117,8 +4122,8 @@ Name = Poké Flute
NamePlural = Poké Flutes NamePlural = Poké Flutes
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = DirectReusable BattleUse = Direct
Type = KeyItem Type = KeyItem
Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone. Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone.
#------------------------------- #-------------------------------
@@ -4184,7 +4189,7 @@ Name = Gracidea
NamePlural = Gracideas NamePlural = Gracideas
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays. Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays.
#------------------------------- #-------------------------------
@@ -4209,7 +4214,7 @@ Name = DNA Splicers
NamePlural = DNA Splicers NamePlural = DNA Splicers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning. Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning.
#------------------------------- #-------------------------------
@@ -4218,7 +4223,7 @@ Name = Reveal Glass
NamePlural = Reveal Glasses NamePlural = Reveal Glasses
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape. Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape.
#------------------------------- #-------------------------------

View File

@@ -30,6 +30,7 @@ NamePlural = Black Flutes
Pocket = 1 Pocket = 1
Price = 400 Price = 400
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear. Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear.
#------------------------------- #-------------------------------
[WHITEFLUTE] [WHITEFLUTE]
@@ -38,6 +39,7 @@ NamePlural = White Flutes
Pocket = 1 Pocket = 1
Price = 500 Price = 500
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear. Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear.
#------------------------------- #-------------------------------
[HONEY] [HONEY]
@@ -4797,8 +4799,9 @@ Name = Blue Flute
NamePlural = Blue Flutes NamePlural = Blue Flutes
Pocket = 7 Pocket = 7
Price = 100 Price = 100
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = OnPokemonReusable BattleUse = OnPokemon
Consumable = false
Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep. Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep.
#------------------------------- #-------------------------------
[YELLOWFLUTE] [YELLOWFLUTE]
@@ -4806,7 +4809,8 @@ Name = Yellow Flute
NamePlural = Yellow Flutes NamePlural = Yellow Flutes
Pocket = 7 Pocket = 7
Price = 300 Price = 300
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion. Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion.
#------------------------------- #-------------------------------
[REDFLUTE] [REDFLUTE]
@@ -4814,7 +4818,8 @@ Name = Red Flute
NamePlural = Red Flutes NamePlural = Red Flutes
Pocket = 7 Pocket = 7
Price = 200 Price = 200
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation. Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation.
#------------------------------- #-------------------------------
[POKEDOLL] [POKEDOLL]
@@ -4918,8 +4923,8 @@ Name = Poké Flute
NamePlural = Poké Flutes NamePlural = Poké Flutes
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = DirectReusable BattleUse = Direct
Type = KeyItem Type = KeyItem
Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone. Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone.
#------------------------------- #-------------------------------
@@ -4993,7 +4998,7 @@ Name = Gracidea
NamePlural = Gracideas NamePlural = Gracideas
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays. Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays.
#------------------------------- #-------------------------------
@@ -5002,7 +5007,7 @@ Name = Reveal Glass
NamePlural = Reveal Glasses NamePlural = Reveal Glasses
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape. Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape.
#------------------------------- #-------------------------------
@@ -5011,7 +5016,7 @@ Name = Prison Bottle
NamePlural = Prison Bottles NamePlural = Prison Bottles
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago. Description = A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago.
#------------------------------- #-------------------------------
@@ -5020,7 +5025,7 @@ Name = DNA Splicers
NamePlural = DNA Splicers NamePlural = DNA Splicers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning. Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning.
#------------------------------- #-------------------------------
@@ -5029,7 +5034,7 @@ Name = N-Solarizer
NamePlural = N-Solarizers NamePlural = N-Solarizers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A machine to fuse Necrozma, which needs light, and Solgaleo. Description = A machine to fuse Necrozma, which needs light, and Solgaleo.
#------------------------------- #-------------------------------
@@ -5038,7 +5043,7 @@ Name = N-Lunarizer
NamePlural = N-Lunarizers NamePlural = N-Lunarizers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A machine to fuse Necrozma, which needs light, and Lunala. Description = A machine to fuse Necrozma, which needs light, and Lunala.
#------------------------------- #-------------------------------

View File

@@ -30,6 +30,7 @@ NamePlural = Black Flutes
Pocket = 1 Pocket = 1
Price = 20 Price = 20
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear. Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear.
#------------------------------- #-------------------------------
[WHITEFLUTE] [WHITEFLUTE]
@@ -38,6 +39,7 @@ NamePlural = White Flutes
Pocket = 1 Pocket = 1
Price = 20 Price = 20
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear. Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear.
#------------------------------- #-------------------------------
[HONEY] [HONEY]
@@ -6155,8 +6157,9 @@ Name = Blue Flute
NamePlural = Blue Flutes NamePlural = Blue Flutes
Pocket = 7 Pocket = 7
Price = 20 Price = 20
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = OnPokemonReusable BattleUse = OnPokemon
Consumable = false
Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep. Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep.
#------------------------------- #-------------------------------
[YELLOWFLUTE] [YELLOWFLUTE]
@@ -6164,7 +6167,8 @@ Name = Yellow Flute
NamePlural = Yellow Flutes NamePlural = Yellow Flutes
Pocket = 7 Pocket = 7
Price = 20 Price = 20
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion. Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion.
#------------------------------- #-------------------------------
[REDFLUTE] [REDFLUTE]
@@ -6172,7 +6176,8 @@ Name = Red Flute
NamePlural = Red Flutes NamePlural = Red Flutes
Pocket = 7 Pocket = 7
Price = 20 Price = 20
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation. Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation.
#------------------------------- #-------------------------------
[POKEDOLL] [POKEDOLL]
@@ -6294,8 +6299,8 @@ Name = Poké Flute
NamePlural = Poké Flutes NamePlural = Poké Flutes
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = DirectReusable BattleUse = Direct
Type = KeyItem Type = KeyItem
Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone. Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone.
#------------------------------- #-------------------------------
@@ -6360,7 +6365,7 @@ Name = Gracidea
NamePlural = Gracideas NamePlural = Gracideas
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays. Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays.
#------------------------------- #-------------------------------
@@ -6369,7 +6374,7 @@ Name = Reveal Glass
NamePlural = Reveal Glasses NamePlural = Reveal Glasses
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape. Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape.
#------------------------------- #-------------------------------
@@ -6378,7 +6383,7 @@ Name = Prison Bottle
NamePlural = Prison Bottles NamePlural = Prison Bottles
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago. Description = A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago.
#------------------------------- #-------------------------------
@@ -6396,7 +6401,7 @@ Name = DNA Splicers
NamePlural = DNA Splicers NamePlural = DNA Splicers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning. Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning.
#------------------------------- #-------------------------------
@@ -6405,7 +6410,7 @@ Name = N-Solarizer
NamePlural = N-Solarizers NamePlural = N-Solarizers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A machine to fuse Necrozma, which needs light, and Solgaleo. Description = A machine to fuse Necrozma, which needs light, and Solgaleo.
#------------------------------- #-------------------------------
@@ -6414,7 +6419,7 @@ Name = N-Lunarizer
NamePlural = N-Lunarizers NamePlural = N-Lunarizers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A machine to fuse Necrozma, which needs light, and Lunala. Description = A machine to fuse Necrozma, which needs light, and Lunala.
#------------------------------- #-------------------------------

View File

@@ -30,6 +30,7 @@ NamePlural = Black Flutes
Pocket = 1 Pocket = 1
Price = 20 Price = 20
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear. Description = A black flute made from blown glass. Its melody makes wild Pokémon less likely to appear.
#------------------------------- #-------------------------------
[WHITEFLUTE] [WHITEFLUTE]
@@ -38,6 +39,7 @@ NamePlural = White Flutes
Pocket = 1 Pocket = 1
Price = 20 Price = 20
FieldUse = Direct FieldUse = Direct
Consumable = false
Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear. Description = A white flute made from blown glass. Its melody makes wild Pokémon more likely to appear.
#------------------------------- #-------------------------------
[HONEY] [HONEY]
@@ -6155,8 +6157,9 @@ Name = Blue Flute
NamePlural = Blue Flutes NamePlural = Blue Flutes
Pocket = 7 Pocket = 7
Price = 20 Price = 20
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = OnPokemonReusable BattleUse = OnPokemon
Consumable = false
Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep. Description = A blue flute made from blown glass. Its melody awakens a single Pokémon from sleep.
#------------------------------- #-------------------------------
[YELLOWFLUTE] [YELLOWFLUTE]
@@ -6164,7 +6167,8 @@ Name = Yellow Flute
NamePlural = Yellow Flutes NamePlural = Yellow Flutes
Pocket = 7 Pocket = 7
Price = 20 Price = 20
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion. Description = A yellow flute made from blown glass. Its melody snaps a single Pokémon out of confusion.
#------------------------------- #-------------------------------
[REDFLUTE] [REDFLUTE]
@@ -6172,7 +6176,8 @@ Name = Red Flute
NamePlural = Red Flutes NamePlural = Red Flutes
Pocket = 7 Pocket = 7
Price = 20 Price = 20
BattleUse = OnBattlerReusable BattleUse = OnBattler
Consumable = false
Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation. Description = A red flute made from blown glass. Its melody snaps a single Pokémon out of infatuation.
#------------------------------- #-------------------------------
[POKEDOLL] [POKEDOLL]
@@ -6294,8 +6299,8 @@ Name = Poké Flute
NamePlural = Poké Flutes NamePlural = Poké Flutes
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
BattleUse = DirectReusable BattleUse = Direct
Type = KeyItem Type = KeyItem
Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone. Description = A flute that is said to instantly awaken any Pokémon. It has a lovely tone.
#------------------------------- #-------------------------------
@@ -6360,7 +6365,7 @@ Name = Gracidea
NamePlural = Gracideas NamePlural = Gracideas
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays. Description = A flower sometimes bundled in bouquets to convey gratitude on special occasions like birthdays.
#------------------------------- #-------------------------------
@@ -6369,7 +6374,7 @@ Name = Reveal Glass
NamePlural = Reveal Glasses NamePlural = Reveal Glasses
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape. Description = A glass that reveals the truth. It is a mysterious glass that returns a Pokémon back to its original shape.
#------------------------------- #-------------------------------
@@ -6378,7 +6383,7 @@ Name = Prison Bottle
NamePlural = Prison Bottles NamePlural = Prison Bottles
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago. Description = A bottle believed to have been used to seal away the power of a certain Pokémon long, long ago.
#------------------------------- #-------------------------------
@@ -6396,7 +6401,7 @@ Name = DNA Splicers
NamePlural = DNA Splicers NamePlural = DNA Splicers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning. Description = A splicer that fuses Kyurem and a certain Pokémon. They are said to have been one in the beginning.
#------------------------------- #-------------------------------
@@ -6405,7 +6410,7 @@ Name = N-Solarizer
NamePlural = N-Solarizers NamePlural = N-Solarizers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A machine to fuse Necrozma, which needs light, and Solgaleo. Description = A machine to fuse Necrozma, which needs light, and Solgaleo.
#------------------------------- #-------------------------------
@@ -6414,7 +6419,7 @@ Name = N-Lunarizer
NamePlural = N-Lunarizers NamePlural = N-Lunarizers
Pocket = 8 Pocket = 8
Price = 0 Price = 0
FieldUse = OnPokemonReusable FieldUse = OnPokemon
Type = KeyItem Type = KeyItem
Description = A machine to fuse Necrozma, which needs light, and Lunala. Description = A machine to fuse Necrozma, which needs light, and Lunala.
#------------------------------- #-------------------------------