Added support for all three Gen 4 location sign styles, minor tweaks to other code

This commit is contained in:
Maruno17
2024-10-28 23:18:57 +00:00
parent 3eb2724794
commit 35be8fcf67
13 changed files with 286 additions and 139 deletions

View File

@@ -252,7 +252,7 @@ MenuHandlers.add(:pause_menu, :pokegear, {
MenuHandlers.add(:pause_menu, :town_map, {
"name" => _INTL("Town Map"),
"order" => 40,
"condition" => proc { next !$player.has_pokegear && $bag.has?(:TOWNMAP) },
"condition" => proc { next Settings::SHOW_TOWN_MAP_IN_PAUSE_MENU && !$player.has_pokegear && $bag.has?(:TOWNMAP) },
"effect" => proc { |menu|
pbPlayDecisionSE
pbFadeOutIn do

View File

@@ -751,7 +751,7 @@ class UI::Party < UI::BaseScreen
# :battle_use_item For battle.
# :use_item Like :choose_pokemon but with a different help text
# :teach_pokemon Like :choose_pokemon but with a different help text
# :choose_entry_order Battle Frontier thing
# :choose_entry_order Battle Frontier thing
def initialize(party, mode: :normal)
@party = (party.is_a?(Array)) ? party : [party]
@mode = mode
@@ -880,14 +880,7 @@ class UI::Party < UI::BaseScreen
@visuals.refresh_party
end
# TODO: Get rid of this method once storage screen and PokemonDebugPartyScreen
# have been rewritten.
def pbRefreshSingle(_party_index)
refresh
end
# TODO: Get rid of this method once storage screen and PokemonDebugPartyScreen
# have been rewritten.
# TODO: Get rid of this method once ItemHandlers have been rewritten.
def pbHardRefresh
refresh_party
refresh

View File

@@ -3,7 +3,6 @@
#===============================================================================
class UI::TrainerCardVisuals < UI::BaseVisuals
GRAPHICS_FOLDER = "Trainer Card/" # Subfolder in Graphics/UI
BADGE_SIZE = [32, 32] # [width, height] of a Gym Badge
BADGE_SPACING = 16 # Size of gap between adjacent Gym Badges
FIRST_BADGE_X = 72 # Left edge of the first Gym Badge

View File

@@ -1,3 +1,47 @@
module UI::LoadSaveDataMixin
def load_all_save_data
@save_data = []
files = SaveData.all_save_files
files.each do |file|
this_save_data = load_save_file(SaveData::DIRECTORY, file)
@save_data.push([file, this_save_data])
end
end
def load_save_file(directory, filename)
ret = SaveData.read_from_file(directory + filename)
if !SaveData.valid?(ret)
if File.file?(directory + filename + ".bak")
show_message(_INTL("The save file is corrupt. A backup will be loaded."))
ret = load_save_file(directory, filename + ".bak")
end
if prompt_corrupted_save_deletion(filename)
delete_save_data(filename)
$PokemonSystem = PokemonSystem.new if self.is_a?(UI::Load)
else
exit
end
end
return ret
end
def prompt_corrupted_save_deletion(filename)
show_message(_INTL("The save file is corrupt, or is incompatible with this game.") + "\1")
pbPlayDecisionSE
return show_confirm_serious_message(_INTL("Do you want to delete the save file and start anew?"))
end
def delete_save_data(filename)
begin
SaveData.delete_file(filename)
yield if block_given?
show_message(_INTL("The save file was deleted."))
rescue SystemCallError
show_message(_INTL("The save file could not be deleted."))
end
end
end
#===============================================================================
#
#===============================================================================
@@ -380,7 +424,7 @@ class UI::LoadVisuals < UI::BaseVisuals
# Set the options, and change the language if relevant
old_language = $PokemonSystem.language
SaveData.load_bootup_values(@save_data[@slot_index][1], true)
if $PokemonSystem.language != old_language
if $PokemonSystem.language != old_language && Settings::LANGUAGES[$PokemonSystem.language]
MessageTypes.load_message_files(Settings::LANGUAGES[$PokemonSystem.language][1])
full_refresh
end
@@ -502,6 +546,16 @@ class UI::LoadVisuals < UI::BaseVisuals
return :delete_save
end
return update_interaction(Input::USE)
elsif Input.trigger?(Input::JUMPUP)
if @index != @commands.keys[0]
pbPlayCursorSE
set_index(@commands.keys[0])
end
elsif Input.trigger?(Input::JUMPDOWN)
if @index != @commands.keys[@commands.length - 1]
pbPlayCursorSE
set_index(@commands.keys[@commands.length - 1])
end
end
return nil
end
@@ -524,8 +578,11 @@ class UI::Load < UI::BaseScreen
SCREEN_ID = :load_screen
include UI::LoadSaveDataMixin
def initialize
load_all_save_data
determine_default_save_file
if $DEBUG && !FileTest.exist?("Game.rgssad") && Settings::SKIP_CONTINUE_SCREEN
@disposed = true
perform_action((@save_data.empty?) ? :new_game : :continue)
@@ -554,49 +611,18 @@ class UI::Load < UI::BaseScreen
#-----------------------------------------------------------------------------
# TODO: Move this kind of code into module SaveData.
def load_all_save_data
@save_data = []
def determine_default_save_file
@default_slot_index = 0
last_edited_time = nil
files = SaveData.all_save_files
files.each do |file|
# Load the save file
this_save_data = load_save_file(SaveData::DIRECTORY, file)
@save_data.push([file, this_save_data])
# Find the most recently edited save file; default to selecting that one
save_time = this_save_data[:stats].real_time_saved || 0
@save_data.each_with_index do |data, i|
save_time = data[1][:stats].real_time_saved || 0
if !last_edited_time || save_time > last_edited_time
last_edited_time = save_time
@default_slot_index = @save_data.length - 1
@default_slot_index = i
end
end
SaveData.load_bootup_values(@save_data[@default_slot_index][1], true) if !@save_data.empty?
MessageTypes.load_message_files(Settings::LANGUAGES[$PokemonSystem.language][1])
end
# TODO: Move this kind of code into module SaveData.
def load_save_file(directory, filename)
ret = SaveData.read_from_file(directory + filename)
if !SaveData.valid?(ret)
if File.file?(directory + filename + ".bak")
show_message(_INTL("The save file is corrupt. A backup will be loaded."))
ret = load_save_file(directory, filename + ".bak")
end
if prompt_corrupted_save_deletion(filename)
delete_save_data(filename)
$PokemonSystem = PokemonSystem.new
else
exit
end
end
return ret
end
def prompt_corrupted_save_deletion(filename)
show_message(_INTL("The save file is corrupt, or is incompatible with this game.") + "\1")
pbPlayDecisionSE
return show_confirm_serious_message(_INTL("Do you want to delete the save file and start anew?"))
MessageTypes.load_message_files(Settings::LANGUAGES[$PokemonSystem.language][1]) if Settings::LANGUAGES[$PokemonSystem.language]
end
def prompt_save_deletion(filename)
@@ -612,16 +638,6 @@ class UI::Load < UI::BaseScreen
end
end
def delete_save_data(filename)
begin
SaveData.delete_file(filename)
yield if block_given?
show_message(_INTL("The save file was deleted."))
rescue SystemCallError
show_message(_INTL("The save file could not be deleted."))
end
end
#-----------------------------------------------------------------------------
def full_refresh

View File

@@ -323,12 +323,16 @@ class UI::SaveVisuals < UI::BaseVisuals
if @save_data[index][1][:game_system].adventure_magic_number == $game_system.adventure_magic_number
save_time = @save_data[index][1][:stats].real_play_time
delta_time = ($stats.play_time - save_time).to_i
hour = (delta_time / 60) / 60
min = (delta_time / 60) % 60
if hour > 0
draw_text(_INTL("Play time since save: {1}h {2}m", hour, min), 8, 4)
if delta_time >= 0
hour = (delta_time / 60) / 60
min = (delta_time / 60) % 60
if hour > 0
draw_text(_INTL("Play time since save: {1}h {2}m", hour, min), 8, 4)
else
draw_text(_INTL("Play time since save: {1}m", min), 8, 4)
end
else
draw_text(_INTL("Play time since save: {1}m", min), 8, 4)
draw_text(_INTL("Alternate version of your adventure!"), 8, 4)
end
else
draw_text(_INTL("Different adventure!"), 8, 4)
@@ -411,9 +415,12 @@ class UI::Save < UI::BaseScreen
SCREEN_ID = :save_screen
include UI::LoadSaveDataMixin
def initialize
create_current_save_data
load_all_save_data
determine_default_save_file
super
end
@@ -439,14 +446,7 @@ class UI::Save < UI::BaseScreen
}]
end
def load_all_save_data
# Load the save file
@save_data = []
files = SaveData.all_save_files
files.each do |file|
this_save_data = load_save_file(SaveData::DIRECTORY, file)
@save_data.push([file, this_save_data])
end
def determine_default_save_file
# Find the save file index matching the current game's filename number
if $stats.save_filename_number && $stats.save_filename_number >= 0
expected_filename = SaveData.filename_from_index($stats.save_filename_number)
@@ -457,38 +457,6 @@ class UI::Save < UI::BaseScreen
end
end
def load_save_file(directory, filename)
ret = SaveData.read_from_file(directory + filename)
if !SaveData.valid?(ret)
if File.file?(directory + filename + ".bak")
show_message(_INTL("The save file is corrupt. A backup will be loaded."))
ret = load_save_file(directory, filename + ".bak")
end
if prompt_corrupted_save_deletion(filename)
delete_save_data(filename)
else
exit
end
end
return ret
end
def prompt_corrupted_save_deletion(filename)
show_message(_INTL("The save file is corrupt, or is incompatible with this game.") + "\1")
pbPlayDecisionSE
return show_confirm_serious_message(_INTL("Do you want to delete the save file and start anew?"))
end
def delete_save_data(filename)
begin
SaveData.delete_file(filename)
yield if block_given?
show_message(_INTL("The save file was deleted."))
rescue SystemCallError
show_message(_INTL("The save file could not be deleted."))
end
end
def different_adventure?(slot_index)
return false if !@save_data[slot_index]
return false if !@save_data[slot_index][1][:game_system].adventure_magic_number