Added Setting SHOW_MODIFIED_MOVE_PROPERTIES, other minor tweaks and fixes

This commit is contained in:
Maruno17
2024-10-29 22:14:36 +00:00
parent 35be8fcf67
commit 210cfc654f
9 changed files with 144 additions and 146 deletions

View File

@@ -10,13 +10,10 @@ SaveData.register(:player) do
end end
SaveData.register(:game_system) do 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 ensure_class :Game_System
save_value { $game_system } save_value { $game_system }
load_value { |value| $game_system = value } load_value { |value| $game_system = value }
new_game_value { Game_System.new } new_game_value { Game_System.new }
# reset_on_new_game
end end
SaveData.register(:pokemon_system) do SaveData.register(:pokemon_system) do

View File

@@ -37,6 +37,13 @@ module Settings
"Pt park", "Pt route", "Pt sea", "Pt town"] "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 # TODO: Allow renaming a Pokémon from the party screen/summary screen (not
# sure which). Gen 9 feature. # sure which). Gen 9 feature.
# TODO: Allow forgetting/remembering moves from the summary screen. Gen 9 # TODO: Allow forgetting/remembering moves from the summary screen. Gen 9

View File

@@ -102,135 +102,133 @@ module GameData
return false return false
end end
# TODO: Make the below depend on a Setting rather than quoting it out.
def display_type(pkmn, move = nil) def display_type(pkmn, move = nil)
=begin if Settings::SHOW_MODIFIED_MOVE_PROPERTIES
case @function_code case @function_code
when "TypeDependsOnUserIVs" when "TypeDependsOnUserIVs"
return pbHiddenPower(pkmn)[0] return pbHiddenPower(pkmn)[0]
when "TypeAndPowerDependOnUserBerry" when "TypeAndPowerDependOnUserBerry"
item_data = pkmn.item item_data = pkmn.item
if item_data if item_data
item_data.flags.each do |flag| item_data.flags.each do |flag|
next if !flag[/^NaturalGift_(\w+)_(?:\d+)$/i] next if !flag[/^NaturalGift_(\w+)_(?:\d+)$/i]
typ = $~[1].to_sym typ = $~[1].to_sym
ret = typ if GameData::Type.exists?(typ) ret = typ if GameData::Type.exists?(typ)
break break
end
end end
end return :NORMAL
return :NORMAL when "TypeDependsOnUserPlate"
when "TypeDependsOnUserPlate" item_types = {
item_types = { :FISTPLATE => :FIGHTING,
:FISTPLATE => :FIGHTING, :SKYPLATE => :FLYING,
:SKYPLATE => :FLYING, :TOXICPLATE => :POISON,
:TOXICPLATE => :POISON, :EARTHPLATE => :GROUND,
:EARTHPLATE => :GROUND, :STONEPLATE => :ROCK,
:STONEPLATE => :ROCK, :INSECTPLATE => :BUG,
:INSECTPLATE => :BUG, :SPOOKYPLATE => :GHOST,
:SPOOKYPLATE => :GHOST, :IRONPLATE => :STEEL,
:IRONPLATE => :STEEL, :FLAMEPLATE => :FIRE,
:FLAMEPLATE => :FIRE, :SPLASHPLATE => :WATER,
:SPLASHPLATE => :WATER, :MEADOWPLATE => :GRASS,
:MEADOWPLATE => :GRASS, :ZAPPLATE => :ELECTRIC,
:ZAPPLATE => :ELECTRIC, :MINDPLATE => :PSYCHIC,
:MINDPLATE => :PSYCHIC, :ICICLEPLATE => :ICE,
:ICICLEPLATE => :ICE, :DRACOPLATE => :DRAGON,
:DRACOPLATE => :DRAGON, :DREADPLATE => :DARK,
:DREADPLATE => :DARK, :PIXIEPLATE => :FAIRY
:PIXIEPLATE => :FAIRY }
} if pkmn.hasItem?
if pkmn.hasItem? item_types.each do |item, item_type|
item_types.each do |item, item_type| return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type)
return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) end
end end
end when "TypeDependsOnUserMemory"
when "TypeDependsOnUserMemory" item_types = {
item_types = { :FIGHTINGMEMORY => :FIGHTING,
:FIGHTINGMEMORY => :FIGHTING, :FLYINGMEMORY => :FLYING,
:FLYINGMEMORY => :FLYING, :POISONMEMORY => :POISON,
:POISONMEMORY => :POISON, :GROUNDMEMORY => :GROUND,
:GROUNDMEMORY => :GROUND, :ROCKMEMORY => :ROCK,
:ROCKMEMORY => :ROCK, :BUGMEMORY => :BUG,
:BUGMEMORY => :BUG, :GHOSTMEMORY => :GHOST,
:GHOSTMEMORY => :GHOST, :STEELMEMORY => :STEEL,
:STEELMEMORY => :STEEL, :FIREMEMORY => :FIRE,
:FIREMEMORY => :FIRE, :WATERMEMORY => :WATER,
:WATERMEMORY => :WATER, :GRASSMEMORY => :GRASS,
:GRASSMEMORY => :GRASS, :ELECTRICMEMORY => :ELECTRIC,
:ELECTRICMEMORY => :ELECTRIC, :PSYCHICMEMORY => :PSYCHIC,
:PSYCHICMEMORY => :PSYCHIC, :ICEMEMORY => :ICE,
:ICEMEMORY => :ICE, :DRAGONMEMORY => :DRAGON,
:DRAGONMEMORY => :DRAGON, :DARKMEMORY => :DARK,
:DARKMEMORY => :DARK, :FAIRYMEMORY => :FAIRY
:FAIRYMEMORY => :FAIRY }
} if pkmn.hasItem?
if pkmn.hasItem? item_types.each do |item, item_type|
item_types.each do |item, item_type| return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type)
return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) end
end end
end when "TypeDependsOnUserDrive"
when "TypeDependsOnUserDrive" item_types = {
item_types = { :SHOCKDRIVE => :ELECTRIC,
:SHOCKDRIVE => :ELECTRIC, :BURNDRIVE => :FIRE,
:BURNDRIVE => :FIRE, :CHILLDRIVE => :ICE,
:CHILLDRIVE => :ICE, :DOUSEDRIVE => :WATER
:DOUSEDRIVE => :WATER }
} if pkmn.hasItem?
if pkmn.hasItem? item_types.each do |item, item_type|
item_types.each do |item, item_type| return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type)
return item_type if pkmn.item_id == item && GameData::Type.exists?(item_type) end
end end
when "TypeIsUserFirstType"
return pkmn.types[0]
end end
when "TypeIsUserFirstType"
return pkmn.types[0]
end end
=end
return @type return @type
end end
# TODO: Make the below depend on a Setting rather than quoting it out. def display_power(pkmn, move = nil)
def display_damage(pkmn, move = nil) if Settings::SHOW_MODIFIED_MOVE_PROPERTIES
=begin case @function_code
case @function_code when "TypeDependsOnUserIVs"
when "TypeDependsOnUserIVs" return pbHiddenPower(pkmn)[1]
return pbHiddenPower(pkmn)[1] when "TypeAndPowerDependOnUserBerry"
when "TypeAndPowerDependOnUserBerry" item_data = pkmn.item
item_data = pkmn.item if item_data
if item_data item_data.flags.each do |flag|
item_data.flags.each do |flag| return [$~[1].to_i, 10].max if flag[/^NaturalGift_(?:\w+)_(\d+)$/i]
return [$~[1].to_i, 10].max if flag[/^NaturalGift_(?:\w+)_(\d+)$/i] end
end end
end return 1
return 1 when "ThrowUserItemAtTarget"
when "ThrowUserItemAtTarget" item_data = pkmn.item
item_data = pkmn.item if item_data
if item_data item_data.flags.each do |flag|
item_data.flags.each do |flag| return [$~[1].to_i, 10].max if flag[/^Fling_(\d+)$/i]
return [$~[1].to_i, 10].max if flag[/^Fling_(\d+)$/i] end
return 10
end 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 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
=end
return @power return @power
end end

View File

@@ -159,43 +159,38 @@ class Battle::Move
if battler.isSpecies?(:MORPEKO) || battler.effects[PBEffects::TransformSpecies] == :MORPEKO if battler.isSpecies?(:MORPEKO) || battler.effects[PBEffects::TransformSpecies] == :MORPEKO
return pbBaseType(battler) return pbBaseType(battler)
end end
# TODO: Make the below depend on a Setting rather than quoting it out.
=begin
when "TypeDependsOnUserPlate", "TypeDependsOnUserMemory", when "TypeDependsOnUserPlate", "TypeDependsOnUserMemory",
"TypeDependsOnUserDrive", "TypeAndPowerDependOnUserBerry", "TypeDependsOnUserDrive", "TypeAndPowerDependOnUserBerry",
"TypeIsUserFirstType", "TypeAndPowerDependOnWeather", "TypeIsUserFirstType", "TypeAndPowerDependOnWeather",
"TypeAndPowerDependOnTerrain" "TypeAndPowerDependOnTerrain"
return pbBaseType(battler) return pbBaseType(battler) if Settings::SHOW_MODIFIED_MOVE_PROPERTIES
=end
end end
return @realMove.display_type(battler.pokemon) return @realMove.display_type(battler.pokemon)
end end
# TODO: Make the below depend on a Setting rather than quoting it out. def display_power(battler)
def display_damage(battler) if Settings::SHOW_MODIFIED_MOVE_PROPERTIES
=begin case @function_code
case @function_code when "TypeAndPowerDependOnUserBerry"
when "TypeAndPowerDependOnUserBerry" return pbNaturalGiftBaseDamage(battler.item_id)
return pbNaturalGiftBaseDamage(battler.item_id) when "TypeAndPowerDependOnWeather", "TypeAndPowerDependOnTerrain",
when "TypeAndPowerDependOnWeather", "TypeAndPowerDependOnTerrain", "PowerHigherWithUserHP", "PowerLowerWithUserHP",
"PowerHigherWithUserHP", "PowerLowerWithUserHP", "PowerHigherWithUserHappiness", "PowerLowerWithUserHappiness",
"PowerHigherWithUserHappiness", "PowerLowerWithUserHappiness", "PowerHigherWithUserPositiveStatStages", "PowerDependsOnUserStockpile"
"PowerHigherWithUserPositiveStatStages", "PowerDependsOnUserStockpile" return pbBaseType(@power, battler, nil)
return pbBaseType(@power, battler, nil) end
end end
=end return @realMove.display_power(battler.pokemon)
return @realMove.display_damage(battler.pokemon)
end end
# TODO: Make the below depend on a Setting rather than quoting it out.
def display_category(battler) def display_category(battler)
=begin if Settings::SHOW_MODIFIED_MOVE_PROPERTIES
case @function_code case @function_code
when "CategoryDependsOnHigherDamageIgnoreTargetAbility" when "CategoryDependsOnHigherDamageIgnoreTargetAbility"
pbOnStartUse(user, nil) pbOnStartUse(user, nil)
return @calcCategory return @calcCategory
end
end end
=end
return @realMove.display_category(battler.pokemon) return @realMove.display_category(battler.pokemon)
end end

View File

@@ -65,7 +65,7 @@ class Pokemon
def display_type(pkmn); return GameData::Move.get(@id).display_type(pkmn, self); end 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_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 def display_accuracy(pkmn); return GameData::Move.get(@id).display_accuracy(pkmn, self); end
end end
end end

View File

@@ -84,7 +84,7 @@ class MoveRelearner_Scene
0, 78 + ((@sprites["commands"].index - @sprites["commands"].top_item) * 64), 0, 78 + ((@sprites["commands"].index - @sprites["commands"].top_item) * 64),
0, 0, 258, 72]) 0, 0, 258, 72])
selMoveData = GameData::Move.get(@moves[@sprites["commands"].index]) selMoveData = GameData::Move.get(@moves[@sprites["commands"].index])
power = selMoveData.display_damage(@pokemon) power = selMoveData.display_power(@pokemon)
category = selMoveData.display_category(@pokemon) category = selMoveData.display_category(@pokemon)
accuracy = selMoveData.display_accuracy(@pokemon) accuracy = selMoveData.display_accuracy(@pokemon)
textpos.push([_INTL("CATEGORY"), 272, 120, :left, Color.new(248, 248, 248), Color.black]) textpos.push([_INTL("CATEGORY"), 272, 120, :left, Color.new(248, 248, 248), Color.black])

View File

@@ -588,7 +588,7 @@ module UI
def choose_number_as_money_multiplier(help_text, money_per_unit, maximum, init_value = 1) def choose_number_as_money_multiplier(help_text, money_per_unit, maximum, init_value = 1)
@sprites[:speech_box].visible = true @sprites[:speech_box].visible = true
@sprites[:speech_box].text = help_text @sprites[:speech_box].text = help_text
position_speech_box(text) position_speech_box(help_text)
# Show the help text # Show the help text
loop do loop do
Graphics.update Graphics.update

View File

@@ -780,7 +780,7 @@ class UI::PokemonSummaryVisuals < UI::BaseVisuals
selected_move = ((@move_index || 0) == Pokemon::MAX_MOVES) ? @new_move : @pokemon.moves[@move_index || 0] selected_move = ((@move_index || 0) == Pokemon::MAX_MOVES) ? @new_move : @pokemon.moves[@move_index || 0]
# Power # Power
draw_text(_INTL("POWER"), 20, 128) 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 == 0 # Status move
power_text = "???" if power_text == 1 # Variable power move power_text = "???" if power_text == 1 # Variable power move
draw_text(power_text, 222, 128, align: :right, theme: :black) draw_text(power_text, 222, 128, align: :right, theme: :black)

View File

@@ -465,6 +465,7 @@ class UI::BagSellVisuals < UI::BagVisuals
end end
def refresh_on_index_changed(old_index) def refresh_on_index_changed(old_index)
super
refresh_unit_price_window refresh_unit_price_window
end end
end end