From 210cfc654f24c152168e336ee427d0474826462d Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Tue, 29 Oct 2024 22:14:36 +0000 Subject: [PATCH] Added Setting SHOW_MODIFIED_MOVE_PROPERTIES, other minor tweaks and fixes --- .../002_Save data/004_Game_SaveValues.rb | 3 - Data/Scripts/003_New_UI_Settings.rb | 7 + .../Scripts/010_Data/002_PBS data/005_Move.rb | 228 +++++++++--------- .../011_Battle/003_Move/001_Battle_Move.rb | 43 ++-- Data/Scripts/014_Pokemon/004_Pokemon_Move.rb | 2 +- Data/Scripts/016_UI/022_UI_MoveRelearner.rb | 2 +- Data/Scripts/016b_UI redesign/000_UI_base.rb | 2 +- .../016b_UI redesign/006_UI_Summary.rb | 2 +- .../016b_UI redesign/020_UI_PokeMart.rb | 1 + 9 files changed, 144 insertions(+), 146 deletions(-) diff --git a/Data/Scripts/002_Save data/004_Game_SaveValues.rb b/Data/Scripts/002_Save data/004_Game_SaveValues.rb index 9d3eb56f4..cc844b3db 100644 --- a/Data/Scripts/002_Save data/004_Game_SaveValues.rb +++ b/Data/Scripts/002_Save data/004_Game_SaveValues.rb @@ -10,13 +10,10 @@ SaveData.register(:player) do end SaveData.register(:game_system) do - # TODO: Am I sure this doesn't need to be loaded in bootup? -# load_in_bootup ensure_class :Game_System save_value { $game_system } load_value { |value| $game_system = value } new_game_value { Game_System.new } -# reset_on_new_game end SaveData.register(:pokemon_system) do diff --git a/Data/Scripts/003_New_UI_Settings.rb b/Data/Scripts/003_New_UI_Settings.rb index ce2d4dc2c..1183665a4 100644 --- a/Data/Scripts/003_New_UI_Settings.rb +++ b/Data/Scripts/003_New_UI_Settings.rb @@ -37,6 +37,13 @@ module Settings "Pt park", "Pt route", "Pt sea", "Pt town"] } + # Whether a move's power/type/category/etc. as shown in battle, the summary + # screen and the Move Reminder screen will appear as their calculated values + # (true) or their values from the PBS file moves.txt (false). For example, if + # this is true, Judgment's displayed type will depend on the Plate being held + # by the Pokémon that knows it. + SHOW_MODIFIED_MOVE_PROPERTIES = false + # TODO: Allow renaming a Pokémon from the party screen/summary screen (not # sure which). Gen 9 feature. # TODO: Allow forgetting/remembering moves from the summary screen. Gen 9 diff --git a/Data/Scripts/010_Data/002_PBS data/005_Move.rb b/Data/Scripts/010_Data/002_PBS data/005_Move.rb index 241501a23..e9f655ce9 100644 --- a/Data/Scripts/010_Data/002_PBS data/005_Move.rb +++ b/Data/Scripts/010_Data/002_PBS data/005_Move.rb @@ -102,135 +102,133 @@ module GameData return false end - # TODO: Make the below depend on a Setting rather than quoting it out. def display_type(pkmn, move = nil) -=begin - case @function_code - when "TypeDependsOnUserIVs" - return pbHiddenPower(pkmn)[0] - when "TypeAndPowerDependOnUserBerry" - item_data = pkmn.item - if item_data - item_data.flags.each do |flag| - next if !flag[/^NaturalGift_(\w+)_(?:\d+)$/i] - typ = $~[1].to_sym - ret = typ if GameData::Type.exists?(typ) - break + if Settings::SHOW_MODIFIED_MOVE_PROPERTIES + case @function_code + when "TypeDependsOnUserIVs" + return pbHiddenPower(pkmn)[0] + when "TypeAndPowerDependOnUserBerry" + item_data = pkmn.item + if item_data + item_data.flags.each do |flag| + next if !flag[/^NaturalGift_(\w+)_(?:\d+)$/i] + typ = $~[1].to_sym + ret = typ if GameData::Type.exists?(typ) + break + end end - end - return :NORMAL - when "TypeDependsOnUserPlate" - item_types = { - :FISTPLATE => :FIGHTING, - :SKYPLATE => :FLYING, - :TOXICPLATE => :POISON, - :EARTHPLATE => :GROUND, - :STONEPLATE => :ROCK, - :INSECTPLATE => :BUG, - :SPOOKYPLATE => :GHOST, - :IRONPLATE => :STEEL, - :FLAMEPLATE => :FIRE, - :SPLASHPLATE => :WATER, - :MEADOWPLATE => :GRASS, - :ZAPPLATE => :ELECTRIC, - :MINDPLATE => :PSYCHIC, - :ICICLEPLATE => :ICE, - :DRACOPLATE => :DRAGON, - :DREADPLATE => :DARK, - :PIXIEPLATE => :FAIRY - } - if pkmn.hasItem? - item_types.each do |item, item_type| - return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) + return :NORMAL + when "TypeDependsOnUserPlate" + item_types = { + :FISTPLATE => :FIGHTING, + :SKYPLATE => :FLYING, + :TOXICPLATE => :POISON, + :EARTHPLATE => :GROUND, + :STONEPLATE => :ROCK, + :INSECTPLATE => :BUG, + :SPOOKYPLATE => :GHOST, + :IRONPLATE => :STEEL, + :FLAMEPLATE => :FIRE, + :SPLASHPLATE => :WATER, + :MEADOWPLATE => :GRASS, + :ZAPPLATE => :ELECTRIC, + :MINDPLATE => :PSYCHIC, + :ICICLEPLATE => :ICE, + :DRACOPLATE => :DRAGON, + :DREADPLATE => :DARK, + :PIXIEPLATE => :FAIRY + } + if pkmn.hasItem? + item_types.each do |item, item_type| + return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) + end end - end - when "TypeDependsOnUserMemory" - item_types = { - :FIGHTINGMEMORY => :FIGHTING, - :FLYINGMEMORY => :FLYING, - :POISONMEMORY => :POISON, - :GROUNDMEMORY => :GROUND, - :ROCKMEMORY => :ROCK, - :BUGMEMORY => :BUG, - :GHOSTMEMORY => :GHOST, - :STEELMEMORY => :STEEL, - :FIREMEMORY => :FIRE, - :WATERMEMORY => :WATER, - :GRASSMEMORY => :GRASS, - :ELECTRICMEMORY => :ELECTRIC, - :PSYCHICMEMORY => :PSYCHIC, - :ICEMEMORY => :ICE, - :DRAGONMEMORY => :DRAGON, - :DARKMEMORY => :DARK, - :FAIRYMEMORY => :FAIRY - } - if pkmn.hasItem? - item_types.each do |item, item_type| - return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) + when "TypeDependsOnUserMemory" + item_types = { + :FIGHTINGMEMORY => :FIGHTING, + :FLYINGMEMORY => :FLYING, + :POISONMEMORY => :POISON, + :GROUNDMEMORY => :GROUND, + :ROCKMEMORY => :ROCK, + :BUGMEMORY => :BUG, + :GHOSTMEMORY => :GHOST, + :STEELMEMORY => :STEEL, + :FIREMEMORY => :FIRE, + :WATERMEMORY => :WATER, + :GRASSMEMORY => :GRASS, + :ELECTRICMEMORY => :ELECTRIC, + :PSYCHICMEMORY => :PSYCHIC, + :ICEMEMORY => :ICE, + :DRAGONMEMORY => :DRAGON, + :DARKMEMORY => :DARK, + :FAIRYMEMORY => :FAIRY + } + if pkmn.hasItem? + item_types.each do |item, item_type| + return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) + end end - end - when "TypeDependsOnUserDrive" - item_types = { - :SHOCKDRIVE => :ELECTRIC, - :BURNDRIVE => :FIRE, - :CHILLDRIVE => :ICE, - :DOUSEDRIVE => :WATER - } - if pkmn.hasItem? - item_types.each do |item, item_type| - return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) + when "TypeDependsOnUserDrive" + item_types = { + :SHOCKDRIVE => :ELECTRIC, + :BURNDRIVE => :FIRE, + :CHILLDRIVE => :ICE, + :DOUSEDRIVE => :WATER + } + if pkmn.hasItem? + item_types.each do |item, item_type| + return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) + end end + when "TypeIsUserFirstType" + return pkmn.types[0] end - when "TypeIsUserFirstType" - return pkmn.types[0] end -=end return @type end - # TODO: Make the below depend on a Setting rather than quoting it out. - def display_damage(pkmn, move = nil) -=begin - case @function_code - when "TypeDependsOnUserIVs" - return pbHiddenPower(pkmn)[1] - when "TypeAndPowerDependOnUserBerry" - item_data = pkmn.item - if item_data - item_data.flags.each do |flag| - return [$~[1].to_i, 10].max if flag[/^NaturalGift_(?:\w+)_(\d+)$/i] + def display_power(pkmn, move = nil) + if Settings::SHOW_MODIFIED_MOVE_PROPERTIES + case @function_code + when "TypeDependsOnUserIVs" + return pbHiddenPower(pkmn)[1] + when "TypeAndPowerDependOnUserBerry" + item_data = pkmn.item + if item_data + item_data.flags.each do |flag| + return [$~[1].to_i, 10].max if flag[/^NaturalGift_(?:\w+)_(\d+)$/i] + end end - end - return 1 - when "ThrowUserItemAtTarget" - item_data = pkmn.item - if item_data - item_data.flags.each do |flag| - return [$~[1].to_i, 10].max if flag[/^Fling_(\d+)$/i] + return 1 + when "ThrowUserItemAtTarget" + item_data = pkmn.item + if item_data + item_data.flags.each do |flag| + return [$~[1].to_i, 10].max if flag[/^Fling_(\d+)$/i] + end + return 10 end - return 10 + return 0 + when "PowerHigherWithUserHP" + return [150 * pkmn.hp / pkmn.totalhp, 1].max + when "PowerLowerWithUserHP" + n = 48 * pkmn.hp / pkmn.totalhp + return 200 if n < 2 + return 150 if n < 5 + return 100 if n < 10 + return 80 if n < 17 + return 40 if n < 33 + return 20 + when "PowerHigherWithUserHappiness" + return [(pkmn.happiness * 2 / 5).floor, 1].max + when "PowerLowerWithUserHappiness" + return [((255 - pkmn.happiness) * 2 / 5).floor, 1].max + when "PowerHigherWithLessPP" + dmgs = [200, 80, 60, 50, 40] + ppLeft = [[(move&.pp || @total_pp) - 1, 0].max, dmgs.length - 1].min + return dmgs[ppLeft] end - return 0 - when "PowerHigherWithUserHP" - return [150 * pkmn.hp / pkmn.totalhp, 1].max - when "PowerLowerWithUserHP" - n = 48 * pkmn.hp / pkmn.totalhp - return 200 if n < 2 - return 150 if n < 5 - return 100 if n < 10 - return 80 if n < 17 - return 40 if n < 33 - return 20 - when "PowerHigherWithUserHappiness" - return [(pkmn.happiness * 2 / 5).floor, 1].max - when "PowerLowerWithUserHappiness" - return [((255 - pkmn.happiness) * 2 / 5).floor, 1].max - when "PowerHigherWithLessPP" - dmgs = [200, 80, 60, 50, 40] - ppLeft = [[(move&.pp || @total_pp) - 1, 0].max, dmgs.length - 1].min - return dmgs[ppLeft] end -=end return @power end diff --git a/Data/Scripts/011_Battle/003_Move/001_Battle_Move.rb b/Data/Scripts/011_Battle/003_Move/001_Battle_Move.rb index 33df386fe..8e3dac768 100644 --- a/Data/Scripts/011_Battle/003_Move/001_Battle_Move.rb +++ b/Data/Scripts/011_Battle/003_Move/001_Battle_Move.rb @@ -159,43 +159,38 @@ class Battle::Move if battler.isSpecies?(:MORPEKO) || battler.effects[PBEffects::TransformSpecies] == :MORPEKO return pbBaseType(battler) end - # TODO: Make the below depend on a Setting rather than quoting it out. -=begin when "TypeDependsOnUserPlate", "TypeDependsOnUserMemory", "TypeDependsOnUserDrive", "TypeAndPowerDependOnUserBerry", "TypeIsUserFirstType", "TypeAndPowerDependOnWeather", "TypeAndPowerDependOnTerrain" - return pbBaseType(battler) -=end + return pbBaseType(battler) if Settings::SHOW_MODIFIED_MOVE_PROPERTIES end return @realMove.display_type(battler.pokemon) end - # TODO: Make the below depend on a Setting rather than quoting it out. - def display_damage(battler) -=begin - case @function_code - when "TypeAndPowerDependOnUserBerry" - return pbNaturalGiftBaseDamage(battler.item_id) - when "TypeAndPowerDependOnWeather", "TypeAndPowerDependOnTerrain", - "PowerHigherWithUserHP", "PowerLowerWithUserHP", - "PowerHigherWithUserHappiness", "PowerLowerWithUserHappiness", - "PowerHigherWithUserPositiveStatStages", "PowerDependsOnUserStockpile" - return pbBaseType(@power, battler, nil) + def display_power(battler) + if Settings::SHOW_MODIFIED_MOVE_PROPERTIES + case @function_code + when "TypeAndPowerDependOnUserBerry" + return pbNaturalGiftBaseDamage(battler.item_id) + when "TypeAndPowerDependOnWeather", "TypeAndPowerDependOnTerrain", + "PowerHigherWithUserHP", "PowerLowerWithUserHP", + "PowerHigherWithUserHappiness", "PowerLowerWithUserHappiness", + "PowerHigherWithUserPositiveStatStages", "PowerDependsOnUserStockpile" + return pbBaseType(@power, battler, nil) + end end -=end - return @realMove.display_damage(battler.pokemon) + return @realMove.display_power(battler.pokemon) end - # TODO: Make the below depend on a Setting rather than quoting it out. def display_category(battler) -=begin - case @function_code - when "CategoryDependsOnHigherDamageIgnoreTargetAbility" - pbOnStartUse(user, nil) - return @calcCategory + if Settings::SHOW_MODIFIED_MOVE_PROPERTIES + case @function_code + when "CategoryDependsOnHigherDamageIgnoreTargetAbility" + pbOnStartUse(user, nil) + return @calcCategory + end end -=end return @realMove.display_category(battler.pokemon) end diff --git a/Data/Scripts/014_Pokemon/004_Pokemon_Move.rb b/Data/Scripts/014_Pokemon/004_Pokemon_Move.rb index 50c82c542..efbee7ffd 100644 --- a/Data/Scripts/014_Pokemon/004_Pokemon_Move.rb +++ b/Data/Scripts/014_Pokemon/004_Pokemon_Move.rb @@ -65,7 +65,7 @@ class Pokemon def display_type(pkmn); return GameData::Move.get(@id).display_type(pkmn, self); end def display_category(pkmn); return GameData::Move.get(@id).display_category(pkmn, self); end - def display_damage(pkmn); return GameData::Move.get(@id).display_damage(pkmn, self); end + def display_power(pkmn); return GameData::Move.get(@id).display_power(pkmn, self); end def display_accuracy(pkmn); return GameData::Move.get(@id).display_accuracy(pkmn, self); end end end diff --git a/Data/Scripts/016_UI/022_UI_MoveRelearner.rb b/Data/Scripts/016_UI/022_UI_MoveRelearner.rb index e48ea7987..e25eda49f 100644 --- a/Data/Scripts/016_UI/022_UI_MoveRelearner.rb +++ b/Data/Scripts/016_UI/022_UI_MoveRelearner.rb @@ -84,7 +84,7 @@ class MoveRelearner_Scene 0, 78 + ((@sprites["commands"].index - @sprites["commands"].top_item) * 64), 0, 0, 258, 72]) selMoveData = GameData::Move.get(@moves[@sprites["commands"].index]) - power = selMoveData.display_damage(@pokemon) + power = selMoveData.display_power(@pokemon) category = selMoveData.display_category(@pokemon) accuracy = selMoveData.display_accuracy(@pokemon) textpos.push([_INTL("CATEGORY"), 272, 120, :left, Color.new(248, 248, 248), Color.black]) diff --git a/Data/Scripts/016b_UI redesign/000_UI_base.rb b/Data/Scripts/016b_UI redesign/000_UI_base.rb index c5ba52c74..e2eb8657e 100644 --- a/Data/Scripts/016b_UI redesign/000_UI_base.rb +++ b/Data/Scripts/016b_UI redesign/000_UI_base.rb @@ -588,7 +588,7 @@ module UI def choose_number_as_money_multiplier(help_text, money_per_unit, maximum, init_value = 1) @sprites[:speech_box].visible = true @sprites[:speech_box].text = help_text - position_speech_box(text) + position_speech_box(help_text) # Show the help text loop do Graphics.update diff --git a/Data/Scripts/016b_UI redesign/006_UI_Summary.rb b/Data/Scripts/016b_UI redesign/006_UI_Summary.rb index 4fcbe35ce..f5430c484 100644 --- a/Data/Scripts/016b_UI redesign/006_UI_Summary.rb +++ b/Data/Scripts/016b_UI redesign/006_UI_Summary.rb @@ -780,7 +780,7 @@ class UI::PokemonSummaryVisuals < UI::BaseVisuals selected_move = ((@move_index || 0) == Pokemon::MAX_MOVES) ? @new_move : @pokemon.moves[@move_index || 0] # Power draw_text(_INTL("POWER"), 20, 128) - power_text = selected_move.display_damage(@pokemon) + power_text = selected_move.display_power(@pokemon) power_text = "---" if power_text == 0 # Status move power_text = "???" if power_text == 1 # Variable power move draw_text(power_text, 222, 128, align: :right, theme: :black) diff --git a/Data/Scripts/016b_UI redesign/020_UI_PokeMart.rb b/Data/Scripts/016b_UI redesign/020_UI_PokeMart.rb index 7dc8bf481..de5986b17 100644 --- a/Data/Scripts/016b_UI redesign/020_UI_PokeMart.rb +++ b/Data/Scripts/016b_UI redesign/020_UI_PokeMart.rb @@ -465,6 +465,7 @@ class UI::BagSellVisuals < UI::BagVisuals end def refresh_on_index_changed(old_index) + super refresh_unit_price_window end end