Added parent pocket functionality to BagPocket, started implementing Bag UI redesign

This commit is contained in:
Maruno17
2024-09-17 00:20:41 +01:00
parent 801c2d35c6
commit 4770057818
9 changed files with 612 additions and 232 deletions

View File

@@ -6,6 +6,7 @@ module ItemHandlers
UseFromBag = ItemHandlerHash.new
ConfirmUseInField = ItemHandlerHash.new
UseInField = ItemHandlerHash.new
UsableOnPokemon = ItemHandlerHash.new
UseOnPokemon = ItemHandlerHash.new
UseOnPokemonMaximum = ItemHandlerHash.new
CanUseInBattle = ItemHandlerHash.new
@@ -29,6 +30,10 @@ module ItemHandlers
return !UseInField[item].nil?
end
def hasUsableOnPokemon(item)
return !UsableOnPokemon[item].nil?
end
def hasUseOnPokemon(item)
return !UseOnPokemon[item].nil?
end
@@ -82,6 +87,12 @@ module ItemHandlers
return (UseInField.trigger(item)) ? 1 : 0
end
# Returns whether item will have an effect if used on pkmn.
def triggerUsableOnPokemon(item, pkmn)
return false if !UsableOnPokemon[item]
return UsableOnPokemon.trigger(item, pkmn)
end
# Returns whether item was used.
def triggerUseOnPokemon(item, qty, pkmn, scene)
return false if !UseOnPokemon[item]
@@ -125,7 +136,9 @@ def pbCanRegisterItem?(item)
end
def pbCanUseOnPokemon?(item)
return ItemHandlers.hasUseOnPokemon(item) || GameData::Item.get(item).is_machine?
return ItemHandlers.hasUseOnPokemon(item) ||
ItemHandlers.hasUsableOnPokemon(item) ||
GameData::Item.get(item).is_machine?
end
#===============================================================================
@@ -676,7 +689,7 @@ def pbUseItem(bag, item, bag_scene = nil)
end
screen.choose_pokemon do |pkmn, party_index|
next true if party_index < 0
next false if !pbCheckUseOnPokemon(item, pkmn, screen)
next false if !pbCheckUseOnPokemon(item, pkmn)
qty = 1
max_at_once = ItemHandlers.triggerUseOnPokemonMaximum(item, pkmn)
max_at_once = [max_at_once, bag.quantity(item)].min
@@ -781,10 +794,19 @@ def pbUseItemMessage(item)
end
end
def pbCheckUseOnPokemon(item, pkmn, _screen)
# Returns whether pkmn is able to have an item used on it.
def pbCheckUseOnPokemon(item, pkmn)
return pkmn && !pkmn.egg? && (!pkmn.hyper_mode || GameData::Item.get(item)&.is_scent?)
end
# This method assumes the item is usable on a Pokémon. It returns whether the
# item will have an effect when used on pkmn.
def pbItemHasEffectOnPokemon?(item, pkmn)
return false if !pbCheckUseOnPokemon(item, pkmn)
ret = ItemHandlers.triggerUsableOnPokemon(item, pkmn)
return ret
end
#===============================================================================
# Give an item to a Pokémon to hold, and take a held item from a Pokémon.
#===============================================================================

File diff suppressed because it is too large Load Diff

View File

@@ -56,7 +56,7 @@ class PokemonBag
def quantity(item)
item_data = GameData::Item.try_get(item)
return 0 if !item_data
pocket = item_data.pocket
pocket = item_data.bag_pocket
return ItemStorageHelper.quantity(@pockets[pocket], item_data.id)
end
@@ -68,7 +68,7 @@ class PokemonBag
def can_add?(item, qty = 1)
item_data = GameData::Item.try_get(item)
return false if !item_data
pocket = item_data.pocket
pocket = item_data.bag_pocket
max_size = max_pocket_size(pocket)
max_size = @pockets[pocket].length + 1 if max_size < 0 # Infinite size
return ItemStorageHelper.can_add?(
@@ -79,7 +79,7 @@ class PokemonBag
def add(item, qty = 1)
item_data = GameData::Item.try_get(item)
return false if !item_data
pocket = item_data.pocket
pocket = item_data.bag_pocket
max_size = max_pocket_size(pocket)
max_size = @pockets[pocket].length + 1 if max_size < 0 # Infinite size
ret = ItemStorageHelper.add(@pockets[pocket],
@@ -101,7 +101,7 @@ class PokemonBag
def remove(item, qty = 1)
item_data = GameData::Item.try_get(item)
return false if !item_data
pocket = item_data.pocket
pocket = item_data.bag_pocket
return ItemStorageHelper.remove(@pockets[pocket], item_data.id, qty)
end
@@ -119,7 +119,7 @@ class PokemonBag
old_item_data = GameData::Item.try_get(old_item)
new_item_data = GameData::Item.try_get(new_item)
return false if !old_item_data || !new_item_data
pocket = old_item_data.pocket
pocket = old_item_data.bag_pocket
old_id = old_item_data.id
new_id = new_item_data.id
ret = false