mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-08 05:34:58 +00:00
Rewrote load game screen inc. supporting multiple save files, allowed \PN and \v[42] in map names and Town Map point names
This commit is contained in:
360
Data/Scripts/016c_UI_old/013_UI_old_Load.rb
Normal file
360
Data/Scripts/016c_UI_old/013_UI_old_Load.rb
Normal file
@@ -0,0 +1,360 @@
|
||||
=begin
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class PokemonLoadPanel < Sprite
|
||||
attr_reader :selected
|
||||
|
||||
TEXT_COLOR = Color.new(232, 232, 232)
|
||||
TEXT_SHADOW_COLOR = Color.new(136, 136, 136)
|
||||
MALE_TEXT_COLOR = Color.new(56, 160, 248)
|
||||
MALE_TEXT_SHADOW_COLOR = Color.new(56, 104, 168)
|
||||
FEMALE_TEXT_COLOR = Color.new(240, 72, 88)
|
||||
FEMALE_TEXT_SHADOW_COLOR = Color.new(160, 64, 64)
|
||||
|
||||
def initialize(index, title, isContinue, trainer, stats, mapid, viewport = nil)
|
||||
super(viewport)
|
||||
@index = index
|
||||
@title = title
|
||||
@isContinue = isContinue
|
||||
@trainer = trainer
|
||||
@totalsec = stats&.play_time.to_i || 0
|
||||
@mapid = mapid
|
||||
@selected = (index == 0)
|
||||
@bgbitmap = AnimatedBitmap.new("Graphics/UI/Load/panels")
|
||||
@refreshBitmap = true
|
||||
@refreshing = false
|
||||
refresh
|
||||
end
|
||||
|
||||
def dispose
|
||||
@bgbitmap.dispose
|
||||
self.bitmap.dispose
|
||||
super
|
||||
end
|
||||
|
||||
def selected=(value)
|
||||
return if @selected == value
|
||||
@selected = value
|
||||
@refreshBitmap = true
|
||||
refresh
|
||||
end
|
||||
|
||||
def pbRefresh
|
||||
@refreshBitmap = true
|
||||
refresh
|
||||
end
|
||||
|
||||
def refresh
|
||||
return if @refreshing
|
||||
return if disposed?
|
||||
@refreshing = true
|
||||
if !self.bitmap || self.bitmap.disposed?
|
||||
self.bitmap = Bitmap.new(@bgbitmap.width, 222)
|
||||
pbSetSystemFont(self.bitmap)
|
||||
end
|
||||
if @refreshBitmap
|
||||
@refreshBitmap = false
|
||||
self.bitmap&.clear
|
||||
if @isContinue
|
||||
self.bitmap.blt(0, 0, @bgbitmap.bitmap, Rect.new(0, (@selected) ? 222 : 0, @bgbitmap.width, 222))
|
||||
else
|
||||
self.bitmap.blt(0, 0, @bgbitmap.bitmap, Rect.new(0, 444 + ((@selected) ? 46 : 0), @bgbitmap.width, 46))
|
||||
end
|
||||
textpos = []
|
||||
if @isContinue
|
||||
textpos.push([@title, 32, 16, :left, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
textpos.push([_INTL("Badges:"), 32, 118, :left, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
textpos.push([@trainer.badge_count.to_s, 206, 118, :right, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
textpos.push([_INTL("Pokédex:"), 32, 150, :left, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
textpos.push([@trainer.pokedex.seen_count.to_s, 206, 150, :right, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
textpos.push([_INTL("Time:"), 32, 182, :left, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
hour = @totalsec / 60 / 60
|
||||
min = @totalsec / 60 % 60
|
||||
if hour > 0
|
||||
textpos.push([_INTL("{1}h {2}m", hour, min), 206, 182, :right, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
else
|
||||
textpos.push([_INTL("{1}m", min), 206, 182, :right, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
end
|
||||
if @trainer.male?
|
||||
textpos.push([@trainer.name, 112, 70, :left, MALE_TEXT_COLOR, MALE_TEXT_SHADOW_COLOR])
|
||||
elsif @trainer.female?
|
||||
textpos.push([@trainer.name, 112, 70, :left, FEMALE_TEXT_COLOR, FEMALE_TEXT_SHADOW_COLOR])
|
||||
else
|
||||
textpos.push([@trainer.name, 112, 70, :left, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
end
|
||||
mapname = pbGetMapNameFromId(@mapid)
|
||||
mapname.gsub!(/\\PN/, @trainer.name)
|
||||
textpos.push([mapname, 386, 16, :right, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
else
|
||||
textpos.push([@title, 32, 14, :left, TEXT_COLOR, TEXT_SHADOW_COLOR])
|
||||
end
|
||||
pbDrawTextPositions(self.bitmap, textpos)
|
||||
end
|
||||
@refreshing = false
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class PokemonLoad_Scene
|
||||
def pbStartScene(commands, show_continue, trainer, stats, map_id)
|
||||
@commands = commands
|
||||
@sprites = {}
|
||||
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@viewport.z = 99998
|
||||
addBackgroundOrColoredPlane(@sprites, "background", "Load/bg", Color.new(248, 248, 248), @viewport)
|
||||
y = 32
|
||||
commands.length.times do |i|
|
||||
@sprites["panel#{i}"] = PokemonLoadPanel.new(
|
||||
i, commands[i], (show_continue) ? (i == 0) : false, trainer, stats, map_id, @viewport
|
||||
)
|
||||
@sprites["panel#{i}"].x = 48
|
||||
@sprites["panel#{i}"].y = y
|
||||
@sprites["panel#{i}"].pbRefresh
|
||||
y += (show_continue && i == 0) ? 224 : 48
|
||||
end
|
||||
@sprites["cmdwindow"] = Window_CommandPokemon.new([])
|
||||
@sprites["cmdwindow"].viewport = @viewport
|
||||
@sprites["cmdwindow"].visible = false
|
||||
@max_party_index = 0
|
||||
end
|
||||
|
||||
def pbStartScene2
|
||||
pbFadeInAndShow(@sprites) { pbUpdate }
|
||||
end
|
||||
|
||||
def pbStartDeleteScene
|
||||
@sprites = {}
|
||||
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@viewport.z = 99998
|
||||
addBackgroundOrColoredPlane(@sprites, "background", "Load/bg", Color.new(248, 248, 248), @viewport)
|
||||
end
|
||||
|
||||
def pbUpdate
|
||||
oldi = @sprites["cmdwindow"].index rescue 0
|
||||
pbUpdateSpriteHash(@sprites)
|
||||
newi = @sprites["cmdwindow"].index rescue 0
|
||||
if oldi != newi
|
||||
@sprites["panel#{oldi}"].selected = false
|
||||
@sprites["panel#{oldi}"].pbRefresh
|
||||
@sprites["panel#{newi}"].selected = true
|
||||
@sprites["panel#{newi}"].pbRefresh
|
||||
while @sprites["panel#{newi}"].y > Graphics.height - 80
|
||||
@commands.length.times do |i|
|
||||
@sprites["panel#{i}"].y -= 48
|
||||
end
|
||||
(@max_party_index + 1).times do |i|
|
||||
break if !@sprites["party#{i}"]
|
||||
@sprites["party#{i}"].y -= 48
|
||||
end
|
||||
@sprites["player"].y -= 48 if @sprites["player"]
|
||||
end
|
||||
while @sprites["panel#{newi}"].y < 32
|
||||
@commands.length.times do |i|
|
||||
@sprites["panel#{i}"].y += 48
|
||||
end
|
||||
(@max_party_index + 1).times do |i|
|
||||
break if !@sprites["party#{i}"]
|
||||
@sprites["party#{i}"].y += 48
|
||||
end
|
||||
@sprites["player"].y += 48 if @sprites["player"]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbSetParty(trainer)
|
||||
return if !trainer || !trainer.party
|
||||
meta = GameData::PlayerMetadata.get(trainer.character_ID)
|
||||
if meta
|
||||
filename = pbGetPlayerCharset(meta.walk_charset, trainer, true)
|
||||
@sprites["player"] = TrainerWalkingCharSprite.new(filename, @viewport)
|
||||
if !@sprites["player"].bitmap
|
||||
raise _INTL("Player character {1}'s walking charset was not found (filename: \"{2}\").", trainer.character_ID, filename)
|
||||
end
|
||||
charwidth = @sprites["player"].bitmap.width
|
||||
charheight = @sprites["player"].bitmap.height
|
||||
@sprites["player"].x = 112 - (charwidth / 8)
|
||||
@sprites["player"].y = 112 - (charheight / 8)
|
||||
@sprites["player"].z = 99999
|
||||
end
|
||||
trainer.party.each_with_index do |pkmn, i|
|
||||
@sprites["party#{i}"] = PokemonIconSprite.new(pkmn, @viewport)
|
||||
@sprites["party#{i}"].setOffset(PictureOrigin::CENTER)
|
||||
@sprites["party#{i}"].x = 334 + (66 * (i % 2))
|
||||
@sprites["party#{i}"].y = 112 + (50 * (i / 2))
|
||||
@sprites["party#{i}"].z = 99999
|
||||
@max_party_index = i
|
||||
end
|
||||
end
|
||||
|
||||
def pbChoose(commands)
|
||||
@sprites["cmdwindow"].commands = commands
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
pbUpdate
|
||||
if Input.trigger?(Input::USE)
|
||||
return @sprites["cmdwindow"].index
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbEndScene
|
||||
pbFadeOutAndHide(@sprites) { pbUpdate }
|
||||
pbDisposeSpriteHash(@sprites)
|
||||
@viewport.dispose
|
||||
end
|
||||
|
||||
def pbCloseScene
|
||||
pbDisposeSpriteHash(@sprites)
|
||||
@viewport.dispose
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class PokemonLoadScreen
|
||||
def initialize(scene)
|
||||
@scene = scene
|
||||
if SaveData.exists?
|
||||
@save_data = load_save_file(SaveData::FILE_PATH)
|
||||
else
|
||||
@save_data = {}
|
||||
end
|
||||
end
|
||||
|
||||
# @param file_path [String] file to load save data from
|
||||
# @return [Hash] save data
|
||||
def load_save_file(file_path)
|
||||
save_data = SaveData.read_from_file(file_path)
|
||||
unless SaveData.valid?(save_data)
|
||||
if File.file?(file_path + ".bak")
|
||||
pbMessage(_INTL("The save file is corrupt. A backup will be loaded."))
|
||||
save_data = load_save_file(file_path + ".bak")
|
||||
else
|
||||
self.prompt_save_deletion
|
||||
return {}
|
||||
end
|
||||
end
|
||||
return save_data
|
||||
end
|
||||
|
||||
# Called if all save data is invalid.
|
||||
# Prompts the player to delete the save files.
|
||||
def prompt_save_deletion
|
||||
pbMessage(_INTL("The save file is corrupt, or is incompatible with this game.") + "\1")
|
||||
exit unless pbConfirmMessageSerious(
|
||||
_INTL("Do you want to delete the save file and start anew?")
|
||||
)
|
||||
self.delete_save_data
|
||||
$game_system = Game_System.new
|
||||
$PokemonSystem = PokemonSystem.new
|
||||
end
|
||||
|
||||
def pbStartDeleteScreen
|
||||
@scene.pbStartDeleteScene
|
||||
@scene.pbStartScene2
|
||||
if SaveData.exists?
|
||||
if pbConfirmMessageSerious(_INTL("Delete all saved data?"))
|
||||
pbMessage(_INTL("Once data has been deleted, there is no way to recover it.") + "\1")
|
||||
if pbConfirmMessageSerious(_INTL("Delete the saved data anyway?"))
|
||||
pbMessage(_INTL("Deleting all data. Don't turn off the power.") + "\\wtnp[0]")
|
||||
self.delete_save_data
|
||||
end
|
||||
end
|
||||
else
|
||||
pbMessage(_INTL("No save file was found."))
|
||||
end
|
||||
@scene.pbEndScene
|
||||
$scene = pbCallTitle
|
||||
end
|
||||
|
||||
def delete_save_data
|
||||
begin
|
||||
SaveData.delete_file
|
||||
pbMessage(_INTL("The saved data was deleted."))
|
||||
rescue SystemCallError
|
||||
pbMessage(_INTL("All saved data could not be deleted."))
|
||||
end
|
||||
end
|
||||
|
||||
def pbStartLoadScreen
|
||||
if $DEBUG && !FileTest.exist?("Game.rgssad") && Settings::SKIP_CONTINUE_SCREEN
|
||||
if @save_data.empty?
|
||||
Game.start_new
|
||||
else
|
||||
Game.load(@save_data)
|
||||
end
|
||||
return
|
||||
end
|
||||
commands = []
|
||||
cmd_continue = -1
|
||||
cmd_new_game = -1
|
||||
cmd_options = -1
|
||||
cmd_language = -1
|
||||
cmd_mystery_gift = -1
|
||||
cmd_debug = -1
|
||||
cmd_quit = -1
|
||||
show_continue = !@save_data.empty?
|
||||
if show_continue
|
||||
commands[cmd_continue = commands.length] = _INTL("Continue")
|
||||
if @save_data[:player].mystery_gift_unlocked
|
||||
commands[cmd_mystery_gift = commands.length] = _INTL("Mystery Gift")
|
||||
end
|
||||
end
|
||||
commands[cmd_new_game = commands.length] = _INTL("New Game")
|
||||
commands[cmd_options = commands.length] = _INTL("Options")
|
||||
commands[cmd_language = commands.length] = _INTL("Language") if Settings::LANGUAGES.length >= 2
|
||||
commands[cmd_debug = commands.length] = _INTL("Debug") if $DEBUG
|
||||
commands[cmd_quit = commands.length] = _INTL("Quit Game")
|
||||
map_id = show_continue ? @save_data[:map_factory].map.map_id : 0
|
||||
@scene.pbStartScene(commands, show_continue, @save_data[:player], @save_data[:stats], map_id)
|
||||
@scene.pbSetParty(@save_data[:player]) if show_continue
|
||||
@scene.pbStartScene2
|
||||
loop do
|
||||
command = @scene.pbChoose(commands)
|
||||
pbPlayDecisionSE if command != cmd_quit
|
||||
case command
|
||||
when cmd_continue
|
||||
@scene.pbEndScene
|
||||
Game.load(@save_data)
|
||||
return
|
||||
when cmd_new_game
|
||||
@scene.pbEndScene
|
||||
Game.start_new
|
||||
return
|
||||
when cmd_mystery_gift
|
||||
pbFadeOutIn { pbDownloadMysteryGift(@save_data[:player]) }
|
||||
when cmd_options
|
||||
pbFadeOutIn do
|
||||
scene = PokemonOption_Scene.new
|
||||
screen = PokemonOptionScreen.new(scene)
|
||||
screen.pbStartScreen(true)
|
||||
end
|
||||
when cmd_language
|
||||
@scene.pbEndScene
|
||||
$PokemonSystem.language = pbChooseLanguage
|
||||
MessageTypes.load_message_files(Settings::LANGUAGES[$PokemonSystem.language][1])
|
||||
if show_continue
|
||||
@save_data[:pokemon_system] = $PokemonSystem
|
||||
File.open(SaveData::FILE_PATH, "wb") { |file| Marshal.dump(@save_data, file) }
|
||||
end
|
||||
$scene = pbCallTitle
|
||||
return
|
||||
when cmd_debug
|
||||
pbFadeOutIn { pbDebugMenu(false) }
|
||||
when cmd_quit
|
||||
pbPlayCloseMenuSE
|
||||
@scene.pbEndScene
|
||||
$scene = nil
|
||||
return
|
||||
else
|
||||
pbPlayBuzzerSE
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
=end
|
||||
@@ -1,3 +1,4 @@
|
||||
=begin
|
||||
#===============================================================================
|
||||
# Pokémon icons.
|
||||
#===============================================================================
|
||||
@@ -2029,3 +2030,4 @@ class PokemonStorageScreen
|
||||
return retval
|
||||
end
|
||||
end
|
||||
=end
|
||||
|
||||
Reference in New Issue
Block a user