mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
unrealtime, bugfixes, recomp
This commit is contained in:
919
Data/Scripts/050_AddOns/Multiple save file.rb
Normal file
919
Data/Scripts/050_AddOns/Multiple save file.rb
Normal file
@@ -0,0 +1,919 @@
|
||||
# # Store save file after load save file
|
||||
# $storenamefilesave = nil
|
||||
# # Some method for checking save file
|
||||
# module FileSave
|
||||
# # Set name of folder
|
||||
# #DIR_SAVE_GAME = System.data_directory
|
||||
# DIR_SAVE_GAME = "Save Game"
|
||||
# # Set name of file for saving:
|
||||
# # Ex: Game1,Game2,etc
|
||||
# FILENAME_SAVE_GAME = "Game"
|
||||
# # Create dir
|
||||
# def self.createDir(dir = DIR_SAVE_GAME)
|
||||
# Dir.mkdir(dir) if !safeExists?(dir)
|
||||
# end
|
||||
#
|
||||
# # Return location
|
||||
# def self.location(dir = DIR_SAVE_GAME)
|
||||
# self.createDir
|
||||
# return "#{dir}"
|
||||
# end
|
||||
#
|
||||
# # Array file
|
||||
# def self.count(arr = false, dir = DIR_SAVE_GAME, file = FILENAME_SAVE_GAME, type = "rxdata")
|
||||
# self.createDir(dir)
|
||||
# File.rename("#{dir}/#{file}.#{type}", "#{dir}/#{file}1.#{type}") if File.file?("#{dir}/#{file}.#{type}")
|
||||
# return arr ? Dir.glob("#{dir}/#{file}*.#{type}") : Dir.glob("#{dir}/#{file}*.#{type}").size
|
||||
# end
|
||||
#
|
||||
# # Rename
|
||||
# def self.rename(dir = DIR_SAVE_GAME, file = FILENAME_SAVE_GAME, type = "rxdata")
|
||||
# arr = self.count(true)
|
||||
# return if arr.size <= 0
|
||||
# name = []
|
||||
# arr.each { |f| name << (File.basename(f, ".#{type}").gsub(/[^0-9]/, "")) }
|
||||
# needtorewrite = false
|
||||
# (0...arr.size).each { |i|
|
||||
# needtorewrite = true if arr[i] != "#{dir}/#{file}#{name[i]}.#{type}"
|
||||
# }
|
||||
# if needtorewrite
|
||||
# numbername = []
|
||||
# name.each { |n| numbername << n.to_i }
|
||||
# (0...numbername.size).each { |i|
|
||||
# loop do
|
||||
# break if i == 0
|
||||
# diff = numbername.index(numbername[i])
|
||||
# break if diff == i
|
||||
# numbername[i] += 1
|
||||
# end
|
||||
# Dir.mkdir("#{dir}/#{numbername[i]}")
|
||||
# File.rename("#{arr[i]}", "#{dir}/#{numbername[i]}/#{file}#{numbername[i]}.#{type}")
|
||||
# }
|
||||
# (0...name.size).each { |i|
|
||||
# name2 = "#{dir}/#{numbername[i]}/#{file}#{numbername[i]}.#{type}"
|
||||
# File.rename(name2, "#{dir}/#{file}#{numbername[i]}.#{type}")
|
||||
# Dir.delete("#{dir}/#{numbername[i]}")
|
||||
# }
|
||||
# end
|
||||
# arr.size.times { |i|
|
||||
# num = 0
|
||||
# namef = sprintf("%d", i + 1)
|
||||
# loop do
|
||||
# break if File.file?("#{dir}/#{file}#{namef}.#{type}")
|
||||
# num += 1
|
||||
# namef2 = sprintf("%d", i + 1 + num)
|
||||
# File.rename("#{dir}/#{file}#{namef2}.#{type}", "#{dir}/#{file}#{namef}.#{type}") if File.file?("#{dir}/#{file}#{namef2}.#{type}")
|
||||
# end
|
||||
# }
|
||||
# end
|
||||
#
|
||||
# # Save
|
||||
# def self.name(n = nil, re = true, dir = DIR_SAVE_GAME, file = FILENAME_SAVE_GAME, type = "rxdata")
|
||||
# self.rename if re
|
||||
# return "#{dir}/#{file}1.rxdata" if n.nil?
|
||||
# if !n.is_a?(Numeric)
|
||||
# p "Set number for file save"
|
||||
# return
|
||||
# end
|
||||
# return "#{dir}/#{file}#{n}.rxdata"
|
||||
# end
|
||||
#
|
||||
# # Old file save
|
||||
# def self.title
|
||||
# return System.game_title.gsub(/[^\w ]/, '_')
|
||||
# end
|
||||
#
|
||||
# # Version 19
|
||||
# def self.dirv19(dir = DIR_SAVE_GAME, file = FILENAME_SAVE_GAME, type = "rxdata")
|
||||
# game_title = self.title
|
||||
# return if !File.directory?(System.data_directory)
|
||||
# old_file = System.data_directory + '/Game.rxdata'
|
||||
# return if !File.file?(old_file)
|
||||
# self.rename
|
||||
# size = self.count
|
||||
# File.move(old_file, "#{dir}/#{file}#{size + 1}.#{type}")
|
||||
# end
|
||||
#
|
||||
# # Version 18
|
||||
# def self.dirv18(dir = DIR_SAVE_GAME, file = FILENAME_SAVE_GAME, type = "rxdata")
|
||||
# game_title = self.title
|
||||
# home = ENV['HOME'] || ENV['HOMEPATH']
|
||||
# return if home.nil?
|
||||
# old_location = File.join(home, 'Saved Games', game_title)
|
||||
# return if !File.directory?(old_location)
|
||||
# old_file = File.join(old_location, 'Game.rxdata')
|
||||
# return if !File.file?(old_file)
|
||||
# self.rename
|
||||
# size = self.count
|
||||
# File.move(old_file, "#{dir}/#{file}#{size + 1}.#{type}")
|
||||
# end
|
||||
# end
|
||||
# #-------------------------#
|
||||
# # Set for module SaveData #
|
||||
# #-------------------------#
|
||||
# module SaveData
|
||||
# def self.delete_file(file = FILE_PATH)
|
||||
# File.delete(file)
|
||||
# File.delete(file + '.bak') if File.file?(file + '.bak')
|
||||
# end
|
||||
#
|
||||
# def self.move_old_windows_save
|
||||
# FileSave.dirv19
|
||||
# FileSave.dirv18
|
||||
# end
|
||||
#
|
||||
# def self.changeFILEPATH(new = nil)
|
||||
# return if new.nil?
|
||||
# const_set(:FILE_PATH, new)
|
||||
# end
|
||||
# end
|
||||
# #---------------------#
|
||||
# # Set 'set_up_system' #
|
||||
# #---------------------#
|
||||
# module Game
|
||||
# def self.set_up_system
|
||||
# SaveData.changeFILEPATH($storenamefilesave.nil? ? FileSave.name : $storenamefilesave)
|
||||
# SaveData.move_old_windows_save if System.platform[/Windows/]
|
||||
# save_data = (SaveData.exists?) ? SaveData.read_from_file(SaveData::FILE_PATH) : {}
|
||||
# if save_data.empty?
|
||||
# SaveData.initialize_bootup_values
|
||||
# else
|
||||
# SaveData.load_bootup_values(save_data)
|
||||
# end
|
||||
# # Set resize factor
|
||||
# pbSetResizeFactor([$PokemonSystem.screensize, 4].min)
|
||||
# # Set language (and choose language if there is no save file)
|
||||
# if Settings::LANGUAGES.length >= 2
|
||||
# $PokemonSystem.language = pbChooseLanguage if save_data.empty?
|
||||
# pbLoadMessages('Data/' + Settings::LANGUAGES[$PokemonSystem.language][1])
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# #--------------------#
|
||||
# # Set emergency save #
|
||||
# #--------------------#
|
||||
# def pbEmergencySave
|
||||
# oldscene = $scene
|
||||
# $scene = nil
|
||||
# pbMessage(_INTL("The script is taking too long. The game will restart."))
|
||||
# return if !$Trainer
|
||||
# # It will store the last save file when you dont file save
|
||||
# count = FileSave.count
|
||||
# SaveData.changeFILEPATH($storenamefilesave.nil? ? FileSave.name : $storenamefilesave)
|
||||
# if SaveData.exists?
|
||||
# File.open(SaveData::FILE_PATH, 'rb') do |r|
|
||||
# File.open(SaveData::FILE_PATH + '.bak', 'wb') do |w|
|
||||
# while s = r.read(4096)
|
||||
# w.write s
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# if Game.save
|
||||
# pbMessage(_INTL("\\se[]The game was saved.\\me[GUI save game] The previous save file has been backed up.\\wtnp[30]"))
|
||||
# else
|
||||
# pbMessage(_INTL("\\se[]Save failed.\\wtnp[30]"))
|
||||
# end
|
||||
# $scene = oldscene
|
||||
# end
|
||||
#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# # Save #
|
||||
# #------------------------------------------------------------------------------#
|
||||
# # Custom message
|
||||
# def pbCustomMessageForSave(message, commands, index, &block)
|
||||
# return pbMessage(message, commands, index, &block)
|
||||
# end
|
||||
#
|
||||
# # Save screen
|
||||
# class PokemonSaveScreen
|
||||
# def pbSaveScreen
|
||||
# ret = false
|
||||
# # Check for renaming
|
||||
# FileSave.rename
|
||||
# # Count save file
|
||||
# count = FileSave.count
|
||||
# # Start
|
||||
# @scene.pbStartScreen
|
||||
# msg = _INTL("What do you want to do?")
|
||||
# cmds = [_INTL("Save"),
|
||||
# _INTL("Save to new file"),
|
||||
# _INTL("Overwrite another save"),
|
||||
# _INTL("Cancel")
|
||||
# ]
|
||||
# cmd2 = pbCustomMessageForSave(msg, cmds, 3)
|
||||
#
|
||||
# # New save file
|
||||
# case cmd2
|
||||
# when 1
|
||||
# ret = writeToNewSaveFile(count)
|
||||
# # Overwrite
|
||||
# when 2
|
||||
# ret = overwriteSaveFile(count)
|
||||
# when 0
|
||||
# ret = overwriteCurrentFile(count)
|
||||
# end
|
||||
#
|
||||
# @scene.pbEndScreen
|
||||
# return ret
|
||||
# end
|
||||
#
|
||||
# def overwriteCurrentFile(count)
|
||||
# if !$storenamefilesave.nil? && count > 0
|
||||
# SaveData.changeFILEPATH($storenamefilesave)
|
||||
# if Game.save
|
||||
# pbMessage(_INTL("\\se[]{1} saved the game.\\me[GUI save game]\\wtnp[30]", $Trainer.name))
|
||||
# ret = true
|
||||
# else
|
||||
# pbMessage(_INTL("\\se[]Save failed.\\wtnp[30]"))
|
||||
# ret = false
|
||||
# end
|
||||
#
|
||||
# SaveData.changeFILEPATH(!$storenamefilesave.nil? ? $storenamefilesave : FileSave.name)
|
||||
# return ret
|
||||
# else
|
||||
# return writeToNewSaveFile(count)
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def overwriteSaveFile(count)
|
||||
# if count <= 0
|
||||
# pbMessage(_INTL("No save file was found."))
|
||||
# else
|
||||
# pbFadeOutIn {
|
||||
# file = ScreenChooseFileSave.new(count)
|
||||
# file.movePanel
|
||||
# file.endScene
|
||||
# return file.staymenu
|
||||
# }
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def writeToNewSaveFile(count)
|
||||
# SaveData.changeFILEPATH(FileSave.name(count + 1))
|
||||
# ret = false
|
||||
# if Game.save
|
||||
# pbMessage(_INTL("\\se[]{1} saved the game.\\me[GUI save game]\\wtnp[30]", $Trainer.name))
|
||||
# ret = true
|
||||
# else
|
||||
# pbMessage(_INTL("\\se[]Save failed.\\wtnp[30]"))
|
||||
# end
|
||||
# SaveData.changeFILEPATH(!$storenamefilesave.nil? ? $storenamefilesave : FileSave.name)
|
||||
# return ret
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# # Load #
|
||||
# #------------------------------------------------------------------------------#
|
||||
# class PokemonLoadScreen
|
||||
# def initialize(scene)
|
||||
# @scene = scene
|
||||
# end
|
||||
#
|
||||
# def pbStartLoadScreen
|
||||
# commands = []
|
||||
# cmd_continue = -1
|
||||
# cmd_new_game = -1
|
||||
# cmd_options = -1
|
||||
# cmd_debug = -1
|
||||
# cmd_quit = -1
|
||||
# show_continue = FileSave.count > 0
|
||||
# commands[cmd_continue = commands.length] = _INTL('Continue') if show_continue
|
||||
# commands[cmd_new_game = commands.length] = _INTL('New Game')
|
||||
# commands[cmd_options = commands.length] = _INTL('Options')
|
||||
# commands[cmd_delete = commands.length] = _INTL('Delete Save') if show_continue
|
||||
# commands[cmd_debug = commands.length] = _INTL('Debug') if $DEBUG
|
||||
# commands[cmd_quit = commands.length] = _INTL('Quit Game')
|
||||
# @scene.pbStartScene(commands, false, nil, 0, 0)
|
||||
# @scene.pbStartScene2
|
||||
# loop do
|
||||
# command = @scene.pbChoose(commands)
|
||||
# pbPlayDecisionSE if command != cmd_quit
|
||||
# case command
|
||||
# when cmd_continue
|
||||
# pbFadeOutIn {
|
||||
# file = ScreenChooseFileSave.new(FileSave.count)
|
||||
# file.movePanel(1)
|
||||
# @scene.pbEndScene if !file.staymenu
|
||||
# file.endScene
|
||||
# return if !file.staymenu
|
||||
# }
|
||||
# when cmd_new_game
|
||||
# @scene.pbEndScene
|
||||
# Game.start_new
|
||||
# return
|
||||
# when cmd_options
|
||||
# pbFadeOutIn do
|
||||
# scene = PokemonOption_Scene.new
|
||||
# screen = PokemonOptionScreen.new(scene)
|
||||
# screen.pbStartScreen(true)
|
||||
# end
|
||||
# when cmd_debug
|
||||
# pbFadeOutIn { pbDebugMenu(false) }
|
||||
# when cmd_quit
|
||||
# pbPlayCloseMenuSE
|
||||
# @scene.pbEndScene
|
||||
# $scene = nil
|
||||
# return
|
||||
# when cmd_delete
|
||||
# #pbStartDeleteScreen
|
||||
# deleteFileMenu(FileSave.count)
|
||||
# else
|
||||
# pbPlayBuzzerSE
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def deleteFileMenu(count)
|
||||
# if count <= 0
|
||||
# pbMessage(_INTL("No save file was found."))
|
||||
# else
|
||||
# pbFadeOutIn {
|
||||
# file = ScreenChooseFileSave.new(count)
|
||||
# file.movePanel(2)
|
||||
# file.endScene
|
||||
# Graphics.frame_reset if file.deletefile
|
||||
# }
|
||||
# # Return menu
|
||||
# return false
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def pbStartDeleteScreen
|
||||
# @scene.pbStartDeleteScene
|
||||
# @scene.pbStartScene2
|
||||
# count = FileSave.count
|
||||
# if count < 0
|
||||
# pbMessage(_INTL("No save file was found."))
|
||||
# else
|
||||
# msg = _INTL("What do you want to do?")
|
||||
# cmds = [_INTL("Delete All File Save"), _INTL("Delete Only One File Save"), _INTL("Cancel")]
|
||||
# cmd = pbCustomMessageForSave(msg, cmds, 3)
|
||||
# case cmd
|
||||
# when 0
|
||||
# if pbConfirmMessageSerious(_INTL("Delete all saves?"))
|
||||
# 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]"))
|
||||
# haserrorwhendelete = false
|
||||
# count.times { |i|
|
||||
# name = FileSave.name(i + 1, false)
|
||||
# begin
|
||||
# SaveData.delete_file(name)
|
||||
# rescue
|
||||
# haserrorwhendelete = true
|
||||
# end
|
||||
# }
|
||||
# pbMessage(_INTL("You have at least one file that cant delete and have error")) if haserrorwhendelete
|
||||
# Graphics.frame_reset
|
||||
# pbMessage(_INTL("The save file was deleted."))
|
||||
# end
|
||||
# end
|
||||
# when 1
|
||||
# pbFadeOutIn {
|
||||
# file = ScreenChooseFileSave.new(count)
|
||||
# file.movePanel(2)
|
||||
# file.endScene
|
||||
# Graphics.frame_reset if file.deletefile
|
||||
# }
|
||||
# end
|
||||
# end
|
||||
# @scene.pbEndScene
|
||||
# $scene = pbCallTitle
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# #------------------------------------------------------------------------------#
|
||||
# # Scene for save menu, load menu and delete menu #
|
||||
# #------------------------------------------------------------------------------#
|
||||
# class ScreenChooseFileSave
|
||||
# attr_reader :staymenu
|
||||
# attr_reader :deletefile
|
||||
#
|
||||
# def initialize(count)
|
||||
# @sprites = {}
|
||||
# @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
# @viewport.z = 99999
|
||||
# # Set value
|
||||
# # Check quantity
|
||||
# @count = count
|
||||
# if @count <= 0
|
||||
# pbMessage("No save file was found.")
|
||||
# return
|
||||
# end
|
||||
# # Check still menu
|
||||
# @staymenu = false
|
||||
# @deletefile = false
|
||||
# # Check position
|
||||
# @position = 0
|
||||
# # Check position if count > 7
|
||||
# @choose = 0
|
||||
# # Set position of panel 'information'
|
||||
# @posinfor = 0
|
||||
# # Quantity of panel in information page
|
||||
# @qinfor = 0
|
||||
# # Check mystery gift
|
||||
# @mysgif = false
|
||||
# end
|
||||
#
|
||||
# # Set background (used "loadbg")
|
||||
# def drawBg
|
||||
# color = Color.new(248, 248, 248)
|
||||
# addBackgroundOrColoredPlane(@sprites, "background", "loadbg", color, @viewport)
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Set Panel
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Draw panel
|
||||
# def startPanel
|
||||
# # Check and rename
|
||||
# FileSave.rename
|
||||
# # Start
|
||||
# drawBg
|
||||
# # Set bar
|
||||
# num = (@count > 7) ? 7 : @count
|
||||
# (0...num).each { |i|
|
||||
# create_sprite("panel #{i}", "loadPanels", @viewport)
|
||||
# w = 384; h = 46
|
||||
# set_src_wh_sprite("panel #{i}", w, h)
|
||||
# x = 16; y = 444
|
||||
# set_src_xy_sprite("panel #{i}", x, y)
|
||||
# x = 24 * 2; y = 16 * 2 + 48 * i
|
||||
# set_xy_sprite("panel #{i}", x, y)
|
||||
# }
|
||||
# # Set choose bar
|
||||
# create_sprite("choose panel", "loadPanels", @viewport)
|
||||
# w = 384; h = 46
|
||||
# set_src_wh_sprite("choose panel", w, h)
|
||||
# x = 16; y = 444 + 46
|
||||
# set_src_xy_sprite("choose panel", x, y)
|
||||
# choosePanel(@choose)
|
||||
# # Set text
|
||||
# create_sprite_2("text", @viewport)
|
||||
# textPanel
|
||||
# pbFadeInAndShow(@sprites) { update }
|
||||
# end
|
||||
#
|
||||
# def choosePanel(pos = 0)
|
||||
# x = 24 * 2; y = 16 * 2 + 48 * pos
|
||||
# set_xy_sprite("choose panel", x, y)
|
||||
# end
|
||||
#
|
||||
# # Draw text panel
|
||||
# BaseColor = Color.new(252, 252, 252)
|
||||
# ShadowColor = Color.new(0, 0, 0)
|
||||
#
|
||||
# def textPanel(font = nil)
|
||||
# return if @count <= 0
|
||||
# bitmap = @sprites["text"].bitmap
|
||||
# bitmap.clear
|
||||
# if @count > 0 && @count < 7
|
||||
# namesave = 0; endnum = @count
|
||||
# else
|
||||
# namesave = (@position > @count - 7) ? @count - 7 : @position
|
||||
# endnum = 7
|
||||
# end
|
||||
# textpos = []
|
||||
# (0...endnum).each { |i|
|
||||
# string = _INTL("Save File #{namesave + 1 + i}")
|
||||
# if i + 1 == getCurrentSaveFileNumber()
|
||||
# string += " (Current)"
|
||||
# end
|
||||
# x = 24 * 2 + 36; y = 16 * 2 + 5 + 48 * i
|
||||
# textpos << [string, x, y, 0, BaseColor, ShadowColor]
|
||||
# }
|
||||
# (font.nil?) ? pbSetSystemFont(bitmap) : bitmap.font.name = font
|
||||
# pbDrawTextPositions(bitmap, textpos)
|
||||
# end
|
||||
#
|
||||
# def getCurrentSaveFileNumber()
|
||||
# saveFilePath = $storenamefilesave
|
||||
# return nil if saveFilePath == nil
|
||||
# begin
|
||||
# filename = saveFilePath.split(".")[0]
|
||||
# return filename[-1].to_i
|
||||
# rescue nil
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# # Move panel
|
||||
# # Type: 0: Save; 1: Load; 2: Delete
|
||||
# def movePanel(type = 0)
|
||||
# infor = false; draw = true; loadmenu = false
|
||||
# @type = type
|
||||
# loop do
|
||||
# # Panel Page
|
||||
# if !loadmenu
|
||||
# if !infor
|
||||
# if draw;
|
||||
# startPanel; draw = false
|
||||
# else
|
||||
# # Update
|
||||
# update_ingame
|
||||
# if checkInput(Input::UP)
|
||||
# @position -= 1
|
||||
# @choose -= 1
|
||||
# if @choose < 0
|
||||
# if @position < 0
|
||||
# @choose = (@count < 7) ? @count - 1 : 6
|
||||
# else
|
||||
# @choose = 0
|
||||
# end
|
||||
# end
|
||||
# @position = @count - 1 if @position < 0
|
||||
# # Move choose panel
|
||||
# choosePanel(@choose)
|
||||
# # Draw text
|
||||
# textPanel
|
||||
# end
|
||||
# if checkInput(Input::DOWN)
|
||||
# @position += 1
|
||||
# @choose += 1 if @position > @count - 7
|
||||
# (@choose = 0; @position = 0) if @position >= @count
|
||||
# # Move choose panel
|
||||
# choosePanel(@choose)
|
||||
# # Draw text
|
||||
# textPanel
|
||||
# end
|
||||
# if checkInput(Input::USE)
|
||||
# dispose
|
||||
# draw = true
|
||||
# if self.fileLoad.empty?
|
||||
# @choose = 0; @position = 0
|
||||
# if FileSave.count == 0
|
||||
# pbMessage(_INTL('You dont have any save file. Restart game now.'))
|
||||
# @staymenu = false
|
||||
# $scene = pbCallTitle if @type == 1
|
||||
# break
|
||||
# end
|
||||
# else
|
||||
# infor = true
|
||||
# end
|
||||
# end
|
||||
# if checkInput(Input::BACK)
|
||||
# @staymenu = true if @type == 1
|
||||
# break
|
||||
# end
|
||||
# end
|
||||
# # Information page
|
||||
# elsif infor
|
||||
# if draw;
|
||||
# startPanelInfor(@type); draw = false
|
||||
# else
|
||||
# # Update
|
||||
# update_ingame
|
||||
# # Load file
|
||||
# loadmenu = true if @type == 1
|
||||
# if checkInput(Input::USE)
|
||||
# # Save file
|
||||
# case @type
|
||||
# when 0
|
||||
# SaveData.changeFILEPATH(FileSave.name(@position + 1))
|
||||
# if Game.save
|
||||
# pbMessage(_INTL("\\se[]{1} saved the game.\\me[GUI save game]\\wtnp[30]", $Trainer.name))
|
||||
# ret = true
|
||||
# else
|
||||
# pbMessage(_INTL("\\se[]Save failed.\\wtnp[30]"))
|
||||
# ret = false
|
||||
# end
|
||||
# SaveData.changeFILEPATH($storenamefilesave.nil? ? FileSave.name : $storenamefilesave)
|
||||
# break
|
||||
# # Delete file
|
||||
# when 2
|
||||
# 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]"))
|
||||
# # Delete
|
||||
# self.deleteFile
|
||||
# @deletefile = true
|
||||
# end
|
||||
# end
|
||||
# break
|
||||
# end
|
||||
# end
|
||||
# (dispose; draw = true; infor = false) if checkInput(Input::BACK)
|
||||
# end
|
||||
# end
|
||||
# else
|
||||
# # Update
|
||||
# update_ingame
|
||||
# # Start
|
||||
# if @qinfor > 0
|
||||
# if checkInput(Input::UP)
|
||||
# @posinfor -= 1
|
||||
# @posinfor = @qinfor if @posinfor < 0
|
||||
# choosePanelInfor
|
||||
# end
|
||||
# if checkInput(Input::DOWN)
|
||||
# @posinfor += 1
|
||||
# @posinfor = 0 if @posinfor > @qinfor
|
||||
# choosePanelInfor
|
||||
# end
|
||||
# end
|
||||
# if checkInput(Input::USE)
|
||||
# # Set up system again
|
||||
# $storenamefilesave = FileSave.name(@position + 1)
|
||||
# Game.set_up_system
|
||||
# if @posinfor == 0
|
||||
# Game.load(self.fileLoad)
|
||||
# @staymenu = false
|
||||
# break
|
||||
# # Mystery Gift
|
||||
# elsif @posinfor == 1 && @mysgif
|
||||
# pbFadeOutIn {
|
||||
# pbDownloadMysteryGift(self.fileLoad[:player])
|
||||
# @posinfor = 0; @qinfor = 0; @mysgif = false
|
||||
# dispose; draw = true; loadmenu = false; infor = false
|
||||
# }
|
||||
# # Language
|
||||
# elsif Settings::LANGUAGES.length >= 2 && (@posinfor == 2 || (@posinfor == 1 && !@mysgif))
|
||||
# $PokemonSystem.language = pbChooseLanguage
|
||||
# pbLoadMessages('Data/' + Settings::LANGUAGES[$PokemonSystem.language][1])
|
||||
# self.fileLoad[:pokemon_system] = $PokemonSystem
|
||||
# File.open(FileSave.name(@position + 1), 'wb') { |file| Marshal.dump(self.fileLoad, file) }
|
||||
# @posinfor = 0; @qinfor = 0; @mysgif = false
|
||||
# dispose; draw = true; loadmenu = false; infor = false
|
||||
# end
|
||||
# end
|
||||
# if checkInput(Input::BACK)
|
||||
# @posinfor = 0; @qinfor = 0; @mysgif = false
|
||||
# dispose; draw = true; loadmenu = false; infor = false
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Set information
|
||||
# #-------------------------------------------------------------------------------
|
||||
# def startPanelInfor(type)
|
||||
# # Draw background
|
||||
# drawBg
|
||||
# create_sprite("infor panel 0", "loadPanels", @viewport)
|
||||
# w = 408; h = 222
|
||||
# set_src_wh_sprite("infor panel 0", w, h)
|
||||
# x = 0; y = 0
|
||||
# set_src_xy_sprite("infor panel 0", x, y)
|
||||
# x = 24 * 2; y = 16 * 2
|
||||
# set_xy_sprite("infor panel 0", x, y)
|
||||
# drawInfor(type)
|
||||
# end
|
||||
#
|
||||
# # Color
|
||||
# TEXTCOLOR = Color.new(232, 232, 232)
|
||||
# TEXTSHADOWCOLOR = Color.new(136, 136, 136)
|
||||
# MALETEXTCOLOR = Color.new(56, 160, 248)
|
||||
# MALETEXTSHADOWCOLOR = Color.new(56, 104, 168)
|
||||
# FEMALETEXTCOLOR = Color.new(240, 72, 88)
|
||||
# FEMALETEXTSHADOWCOLOR = Color.new(160, 64, 64)
|
||||
#
|
||||
# # Draw information (text)
|
||||
# def drawInfor(type, font = nil)
|
||||
# # Set trainer
|
||||
# trainer = self.fileLoad[:player]
|
||||
# # Set mystery gift and language
|
||||
# if type == 1
|
||||
# mystery = self.fileLoad[:player].mystery_gift_unlocked
|
||||
# @mysgif = mystery
|
||||
# @qinfor += 1 if mystery
|
||||
# @qinfor += 1 if Settings::LANGUAGES.length >= 2
|
||||
# (0...@qinfor).each { |i|
|
||||
# create_sprite("panel load #{i}", "loadPanels", @viewport)
|
||||
# w = 384; h = 46
|
||||
# set_src_wh_sprite("panel load #{i}", w, h)
|
||||
# x = 16; y = 444
|
||||
# set_src_xy_sprite("panel load #{i}", x, y)
|
||||
# x = 24 * 2 + 8; y = 16 * 2 + 48 * i + 112 * 2
|
||||
# set_xy_sprite("panel load #{i}", x, y)
|
||||
# } if @qinfor > 0
|
||||
# end
|
||||
# # Move panel (information)
|
||||
# create_sprite("infor panel 1", "loadPanels", @viewport)
|
||||
# w = 408; h = 222
|
||||
# set_src_wh_sprite("infor panel 1", w, h)
|
||||
# x = 0; y = 222
|
||||
# set_src_xy_sprite("infor panel 1", x, y)
|
||||
# x = 24 * 2; y = 16 * 2
|
||||
# set_xy_sprite("infor panel 1", x, y)
|
||||
# # Set
|
||||
# create_sprite_2("text", @viewport)
|
||||
# framecount = self.fileLoad[:frame_count]
|
||||
# totalsec = (framecount || 0) / Graphics.frame_rate
|
||||
# bitmap = @sprites["text"].bitmap
|
||||
# textpos = []
|
||||
# # Text of trainer
|
||||
# x = 24 * 2; y = 16 * 2
|
||||
# title = (type == 0) ? "Save" : (type == 1) ? "Load" : "Delete"
|
||||
# textpos << [_INTL("#{title}"), 16 * 2 + x, 5 * 2 + y, 0, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# textpos << [_INTL("Badges:"), 16 * 2 + x, 56 * 2 + y, 0, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# textpos << [trainer.badge_count.to_s, 103 * 2 + x, 56 * 2 + y, 1, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# textpos << [_INTL("Pokédex:"), 16 * 2 + x, 72 * 2 + y, 0, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# textpos << [trainer.pokedex.seen_count.to_s, 103 * 2 + x, 72 * 2 + y, 1, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# textpos << [_INTL("Time:"), 16 * 2 + x, 88 * 2 + y, 0, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# hour = totalsec / 60 / 60
|
||||
# min = totalsec / 60 % 60
|
||||
# if hour > 0
|
||||
# textpos << [_INTL("{1}h {2}m", hour, min), 103 * 2 + x, 88 * 2 + y, 1, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# else
|
||||
# textpos << [_INTL("{1}m", min), 103 * 2 + x, 88 * 2 + y, 1, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# end
|
||||
# if trainer.male?
|
||||
# textpos << [trainer.name, 56 * 2 + x, 32 * 2 + y, 0, MALETEXTCOLOR, MALETEXTSHADOWCOLOR]
|
||||
# elsif textpos << [trainer.name, 56 * 2 + x, 32 * 2 + y, 0, FEMALETEXTCOLOR, FEMALETEXTSHADOWCOLOR]
|
||||
# else
|
||||
# textpos << [trainer.name, 56 * 2 + x, 32 * 2 + y, 0, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# end
|
||||
# mapid = self.fileLoad[:map_factory].map.map_id
|
||||
# mapname = pbGetMapNameFromId(mapid)
|
||||
# mapname.gsub!(/\\PN/, trainer.name)
|
||||
# textpos << [mapname, 193 * 2 + x, 5 * 2 + y, 1, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# # Load menu
|
||||
# if type == 1
|
||||
# # Mystery gift / Language
|
||||
# string = []
|
||||
# string << _INTL("Mystery Gift") if mystery
|
||||
# string << _INTL("Language") if Settings::LANGUAGES.length >= 2
|
||||
# if @qinfor > 0
|
||||
# (0...@qinfor).each { |i|
|
||||
# str = string[i]
|
||||
# x1 = x + 36 + 8
|
||||
# y1 = y + 5 + 112 * 2 + 48 * i
|
||||
# textpos << [str, x1, y1, 0, TEXTCOLOR, TEXTSHADOWCOLOR]
|
||||
# }
|
||||
# end
|
||||
# end
|
||||
# # Set text
|
||||
# (font.nil?) ? pbSetSystemFont(bitmap) : bitmap.font.name = font
|
||||
# pbDrawTextPositions(bitmap, textpos)
|
||||
#
|
||||
# # Set trainer (draw)
|
||||
# if !trainer || !trainer.party
|
||||
# # Fade
|
||||
# pbFadeInAndShow(@sprites) { update }
|
||||
# return
|
||||
# else
|
||||
# meta = GameData::Metadata.get_player(trainer.character_ID)
|
||||
# if meta
|
||||
# filename = pbGetPlayerCharset(meta, 1, trainer, true)
|
||||
# @sprites["player"] = TrainerWalkingCharSprite.new(filename, @viewport)
|
||||
# charwidth = @sprites["player"].bitmap.width
|
||||
# charheight = @sprites["player"].bitmap.height
|
||||
# @sprites["player"].x = 56 * 2 - charwidth / 8
|
||||
# @sprites["player"].y = 56 * 2 - charheight / 8
|
||||
# @sprites["player"].src_rect = Rect.new(0, 0, charwidth / 4, charheight / 4)
|
||||
# end
|
||||
# for i in 0...trainer.party.length
|
||||
# @sprites["party#{i}"] = PokemonIconSprite.new(trainer.party[i], @viewport)
|
||||
# @sprites["party#{i}"].setOffset(PictureOrigin::Center)
|
||||
# @sprites["party#{i}"].x = (167 + 33 * (i % 2)) * 2
|
||||
# @sprites["party#{i}"].y = (56 + 25 * (i / 2)) * 2
|
||||
# @sprites["party#{i}"].z = 99999
|
||||
# end
|
||||
# # Fade
|
||||
# pbFadeInAndShow(@sprites) { update }
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def choosePanelInfor
|
||||
# if @posinfor == 0
|
||||
# w = 408; h = 222
|
||||
# set_src_wh_sprite("infor panel 1", w, h)
|
||||
# x = 0; y = 222
|
||||
# set_src_xy_sprite("infor panel 1", x, y)
|
||||
# x = 24 * 2; y = 16 * 2
|
||||
# set_xy_sprite("infor panel 1", x, y)
|
||||
# else
|
||||
# w = 384; h = 46
|
||||
# set_src_wh_sprite("infor panel 1", w, h)
|
||||
# x = 16; y = 490
|
||||
# set_src_xy_sprite("infor panel 1", x, y)
|
||||
# x = 24 * 2 + 8
|
||||
# y = 16 * 2 + 48 * (@posinfor - 1) + 112 * 2
|
||||
# set_xy_sprite("infor panel 1", x, y)
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Delete
|
||||
# #-------------------------------------------------------------------------------
|
||||
# def deleteFile
|
||||
# savefile = FileSave.name(@position + 1, false)
|
||||
# begin
|
||||
# SaveData.delete_file(savefile)
|
||||
# pbMessage(_INTL('The saved data was deleted.'))
|
||||
# rescue SystemCallError
|
||||
# pbMessage(_INTL('All saved data could not be deleted.'))
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Load File
|
||||
# #-------------------------------------------------------------------------------
|
||||
# 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('Cant load this save file'))
|
||||
# pbMessage(_INTL('The save file is corrupt, or is incompatible with this game.'))
|
||||
# exit unless pbConfirmMessageSerious(_INTL('Do you want to delete this save file?'))
|
||||
# self.deleteFile
|
||||
# $game_system = Game_System.new
|
||||
# $PokemonSystem = PokemonSystem.new
|
||||
# end
|
||||
#
|
||||
# def fileLoad
|
||||
# return load_save_file(FileSave.name(@position + 1))
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Set SE for input
|
||||
# #-------------------------------------------------------------------------------
|
||||
# def checkInput(name)
|
||||
# if Input.trigger?(name)
|
||||
# (name == Input::BACK) ? pbPlayCloseMenuSE : pbPlayDecisionSE
|
||||
# return true
|
||||
# end
|
||||
# return false
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Set bitmap
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Image
|
||||
# def create_sprite(spritename, filename, vp, dir = "Pictures")
|
||||
# @sprites["#{spritename}"] = Sprite.new(vp)
|
||||
# @sprites["#{spritename}"].bitmap = Bitmap.new("Graphics/#{dir}/#{filename}")
|
||||
# end
|
||||
#
|
||||
# # Set x, y
|
||||
# def set_xy_sprite(spritename, x, y)
|
||||
# @sprites["#{spritename}"].x = x
|
||||
# @sprites["#{spritename}"].y = y
|
||||
# end
|
||||
#
|
||||
# # Set src
|
||||
# def set_src_wh_sprite(spritename, w, h)
|
||||
# @sprites["#{spritename}"].src_rect.width = w
|
||||
# @sprites["#{spritename}"].src_rect.height = h
|
||||
# end
|
||||
#
|
||||
# def set_src_xy_sprite(spritename, x, y)
|
||||
# @sprites["#{spritename}"].src_rect.x = x
|
||||
# @sprites["#{spritename}"].src_rect.y = y
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Text
|
||||
# #-------------------------------------------------------------------------------
|
||||
# # Draw
|
||||
# def create_sprite_2(spritename, vp)
|
||||
# @sprites["#{spritename}"] = Sprite.new(vp)
|
||||
# @sprites["#{spritename}"].bitmap = Bitmap.new(Graphics.width, Graphics.height)
|
||||
# @sprites["#{spritename}"].bitmap.clear
|
||||
# end
|
||||
#
|
||||
# #-------------------------------------------------------------------------------
|
||||
# def dispose
|
||||
# pbDisposeSpriteHash(@sprites)
|
||||
# end
|
||||
#
|
||||
# def update
|
||||
# pbUpdateSpriteHash(@sprites)
|
||||
# end
|
||||
#
|
||||
# def update_ingame
|
||||
# Graphics.update
|
||||
# Input.update
|
||||
# pbUpdateSpriteHash(@sprites)
|
||||
# end
|
||||
#
|
||||
# def endScene
|
||||
# dispose
|
||||
# @viewport.dispose
|
||||
# end
|
||||
# end
|
||||
278
Data/Scripts/050_AddOns/UnrealTime.rb
Normal file
278
Data/Scripts/050_AddOns/UnrealTime.rb
Normal file
@@ -0,0 +1,278 @@
|
||||
#===============================================================================
|
||||
# * Unreal Time System - by FL (Credits will be apreciated)
|
||||
#===============================================================================
|
||||
#
|
||||
# This script is for Pokémon Essentials. It makes the time in game uses its
|
||||
# own clock that only pass when you are in game instead of using real time
|
||||
# (like Minecraft and Zelda: Ocarina of Time).
|
||||
#
|
||||
#== INSTALLATION ===============================================================
|
||||
#
|
||||
# To this script works, put it above main OR convert into a plugin.
|
||||
#
|
||||
#== HOW TO USE =================================================================
|
||||
#
|
||||
# This script automatic works after installed.
|
||||
#
|
||||
# If you wish to add/reduce time, there are 3 ways:
|
||||
#
|
||||
# 1. EXTRA_SECONDS/EXTRA_DAYS are variables numbers that hold time passage;
|
||||
# The time in these variable isn't affected by PROPORTION.
|
||||
# Example: When the player sleeps you wish to the time in game advance
|
||||
# 8 hours, so put in EXTRA_SECONDS a game variable number and sum
|
||||
# 28800 (60*60*8) in this variable every time that the players sleeps.
|
||||
#
|
||||
# 2. 'UnrealTime.add_seconds(seconds)' and 'UnrealTime.add_days(days)' does the
|
||||
# same thing, in fact, EXTRA_SECONDS/EXTRA_DAYS call these methods.
|
||||
#
|
||||
# 3. 'UnrealTime.advance_to(16,17,18)' advance the time to a fixed time of day,
|
||||
# 16:17:18 on this example.
|
||||
#
|
||||
#== NOTES ======================================================================
|
||||
#
|
||||
# If you wish to some parts still use real time like the Trainer Card start time
|
||||
# and Pokémon Trainer Memo, just change 'pbGetTimeNow' to 'Time.now' in their
|
||||
# scripts.
|
||||
#
|
||||
# This script uses the Ruby Time class. Before Essentials version 19 (who came
|
||||
# with 64-bit ruby) it can only have 1901-2038 range.
|
||||
#
|
||||
# Some time methods:
|
||||
# 'pbGetTimeNow.year', 'pbGetTimeNow.mon' (the numbers from 1-12),
|
||||
# 'pbGetTimeNow.day','pbGetTimeNow.hour', 'pbGetTimeNow.min',
|
||||
# 'pbGetTimeNow.sec', 'pbGetAbbrevMonthName(pbGetTimeNow.mon)',
|
||||
# 'pbGetTimeNow.strftime("%A")' (displays weekday name),
|
||||
# 'pbGetTimeNow.strftime("%I:%M %p")' (displays Hours:Minutes pm/am)
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
if defined?(PluginManager) && !PluginManager.installed?("Unreal Time System")
|
||||
PluginManager.register({
|
||||
:name => "Unreal Time System",
|
||||
:version => "1.1",
|
||||
:link => "https://www.pokecommunity.com/showthread.php?t=285831",
|
||||
:credits => "FL"
|
||||
})
|
||||
end
|
||||
|
||||
module UnrealTime
|
||||
# Set false to disable this system (returns Time.now)
|
||||
ENABLED=true
|
||||
|
||||
# Time proportion here.
|
||||
# So if it is 100, one second in real time will be 100 seconds in game.
|
||||
# If it is 60, one second in real time will be one minute in game.
|
||||
PROPORTION=60
|
||||
|
||||
# Starting on Essentials v17, the map tone only try to refresh tone each 30
|
||||
# real time seconds.
|
||||
# If this variable number isn't -1, the game use this number instead of 30.
|
||||
# When time is changed with advance_to or add_seconds, the tone refreshes.
|
||||
TONE_CHECK_INTERVAL = 10.0
|
||||
|
||||
# Make this true to time only pass at field (Scene_Map)
|
||||
# A note to scripters: To make time pass on other scenes, put line
|
||||
# '$PokemonGlobal.addNewFrameCount' near to line 'Graphics.update'
|
||||
TIME_STOPS=true
|
||||
|
||||
# Make this true to time pass in battle, during turns and command selection.
|
||||
# This won't affect the Pokémon and Bag submenus.
|
||||
# Only works if TIME_STOPS=true.
|
||||
BATTLE_PASS=true
|
||||
|
||||
# Make this true to time pass when the Dialog box or the main menu are open.
|
||||
# This won't affect the submenus like Pokémon and Bag.
|
||||
# Only works if TIME_STOPS=true.
|
||||
TALK_PASS=true
|
||||
|
||||
# Choose switch number that when true the time won't pass (or -1 to cancel).
|
||||
# Only works if TIME_STOPS=true.
|
||||
SWITCH_STOPS=-1
|
||||
|
||||
# Choose variable(s) number(s) that can hold time passage (or -1 to cancel).
|
||||
# Look at description for more details.
|
||||
EXTRA_SECONDS=79
|
||||
EXTRA_DAYS=-1
|
||||
|
||||
# Initial date. In sequence: Year, month, day, hour and minutes.
|
||||
# Method UnrealTime.reset resets time back to this time.
|
||||
def self.initial_date
|
||||
return Time.local(2000,1,1, 12,0)
|
||||
end
|
||||
|
||||
# Advance to next time. If time already passed, advance
|
||||
# into the time on the next day.
|
||||
# Hour is 0..23
|
||||
def self.advance_to(hour,min=0,sec=0)
|
||||
if hour < 0 || hour > 23
|
||||
raise RangeError, "hour is #{hour}, should be 0..23"
|
||||
end
|
||||
day_seconds = 60*60*24
|
||||
seconds_now = pbGetTimeNow.hour*60*60+pbGetTimeNow.min*60+pbGetTimeNow.sec
|
||||
target_seconds = hour*60*60+min*60+sec
|
||||
seconds_added = target_seconds-seconds_now
|
||||
seconds_added += day_seconds if seconds_added<0
|
||||
$PokemonGlobal.newFrameCount+=seconds_added
|
||||
PBDayNight.sheduleToneRefresh
|
||||
end
|
||||
|
||||
# Resets time to initial_date.
|
||||
def self.reset
|
||||
raise "Method doesn't work when TIME_STOPS is false!" if !TIME_STOPS
|
||||
$game_variables[EXTRA_SECONDS]=0 if EXTRA_DAYS>0
|
||||
$game_variables[EXTRA_DAYS]=0 if EXTRA_DAYS>0
|
||||
$PokemonGlobal.newFrameCount=0
|
||||
$PokemonGlobal.extraYears=0
|
||||
PBDayNight.sheduleToneRefresh
|
||||
end
|
||||
|
||||
# Does the same thing as EXTRA_SECONDS variable.
|
||||
def self.add_seconds(seconds)
|
||||
raise "Method doesn't work when TIME_STOPS is false!" if !TIME_STOPS
|
||||
$PokemonGlobal.newFrameCount+=(seconds*Graphics.frame_rate)/PROPORTION.to_f
|
||||
PBDayNight.sheduleToneRefresh
|
||||
end
|
||||
|
||||
def self.add_days(days)
|
||||
add_seconds(60*60*24*days)
|
||||
end
|
||||
|
||||
NEED_32_BIT_FIX = [''].pack('p').size <= 4
|
||||
end
|
||||
|
||||
# Essentials V18 and lower compatibility
|
||||
module Settings
|
||||
TIME_SHADING = defined?(ENABLESHADING) ? ENABLESHADING : ::TIME_SHADING
|
||||
end if defined?(TIME_SHADING) || defined?(ENABLESHADING)
|
||||
|
||||
module PBDayNight
|
||||
class << self
|
||||
if method_defined?(:getTone) && UnrealTime::TONE_CHECK_INTERVAL > 0
|
||||
def getTone
|
||||
@cachedTone = Tone.new(0,0,0) if !@cachedTone
|
||||
return @cachedTone if !Settings::TIME_SHADING
|
||||
toneNeedUpdate = (!@dayNightToneLastUpdate ||
|
||||
Graphics.frame_count-@dayNightToneLastUpdate >=
|
||||
Graphics.frame_rate*UnrealTime::TONE_CHECK_INTERVAL
|
||||
)
|
||||
if toneNeedUpdate
|
||||
getToneInternal
|
||||
@dayNightToneLastUpdate = Graphics.frame_count
|
||||
end
|
||||
return @cachedTone
|
||||
end
|
||||
end
|
||||
|
||||
# Shedule a tone refresh on the next try (probably next frame)
|
||||
def sheduleToneRefresh
|
||||
@dayNightToneLastUpdate = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbGetTimeNow
|
||||
return Time.now if !$PokemonGlobal || !UnrealTime::ENABLED
|
||||
day_seconds = 60*60*24
|
||||
if UnrealTime::TIME_STOPS
|
||||
# Sum the extra values to newFrameCount
|
||||
if UnrealTime::EXTRA_SECONDS>0
|
||||
UnrealTime.add_seconds(pbGet(UnrealTime::EXTRA_SECONDS))
|
||||
$game_variables[UnrealTime::EXTRA_SECONDS]=0
|
||||
end
|
||||
if UnrealTime::EXTRA_DAYS>0
|
||||
UnrealTime.add_seconds(day_seconds*pbGet(UnrealTime::EXTRA_DAYS))
|
||||
$game_variables[UnrealTime::EXTRA_DAYS]=0
|
||||
end
|
||||
elsif UnrealTime::EXTRA_SECONDS>0 && UnrealTime::EXTRA_DAYS>0
|
||||
# Checks to regulate the max/min values at UnrealTime::EXTRA_SECONDS
|
||||
while pbGet(UnrealTime::EXTRA_SECONDS)>=day_seconds
|
||||
$game_variables[UnrealTime::EXTRA_SECONDS]-=day_seconds
|
||||
$game_variables[UnrealTime::EXTRA_DAYS]+=1
|
||||
end
|
||||
while pbGet(UnrealTime::EXTRA_SECONDS)<=-day_seconds
|
||||
$game_variables[UnrealTime::EXTRA_SECONDS]+=day_seconds
|
||||
$game_variables[UnrealTime::EXTRA_DAYS]-=1
|
||||
end
|
||||
end
|
||||
start_time=UnrealTime.initial_date
|
||||
if UnrealTime::TIME_STOPS
|
||||
time_played=$PokemonGlobal.newFrameCount
|
||||
else
|
||||
time_played=Graphics.frame_count
|
||||
end
|
||||
time_played=(time_played*UnrealTime::PROPORTION)/Graphics.frame_rate
|
||||
time_jumped=0
|
||||
if UnrealTime::EXTRA_SECONDS>-1
|
||||
time_jumped+=pbGet(UnrealTime::EXTRA_SECONDS)
|
||||
end
|
||||
if UnrealTime::EXTRA_DAYS>-1
|
||||
time_jumped+=pbGet(UnrealTime::EXTRA_DAYS)*day_seconds
|
||||
end
|
||||
time_ret = 0
|
||||
# Before Essentials V19, there is a year limit. To prevent crashes due to this
|
||||
# limit, every time that you reach in year 2036 the system will subtract 6
|
||||
# years (to works with leap year) from your date and sum in
|
||||
# $PokemonGlobal.extraYears. You can sum your actual year with this extraYears
|
||||
# when displaying years.
|
||||
loop do
|
||||
time_fix=0
|
||||
if $PokemonGlobal.extraYears!=0
|
||||
time_fix = $PokemonGlobal.extraYears*day_seconds*(365*6+1)/6
|
||||
end
|
||||
time_ret=start_time+(time_played+time_jumped-time_fix)
|
||||
break if !UnrealTime::NEED_32_BIT_FIX || time_ret.year<2036
|
||||
$PokemonGlobal.extraYears+=6
|
||||
end
|
||||
return time_ret
|
||||
end
|
||||
|
||||
if UnrealTime::ENABLED
|
||||
class PokemonGlobalMetadata
|
||||
attr_accessor :newFrameCount # Became float when using extra values
|
||||
attr_accessor :extraYears
|
||||
|
||||
def addNewFrameCount
|
||||
return if (UnrealTime::SWITCH_STOPS>0 &&
|
||||
$game_switches[UnrealTime::SWITCH_STOPS])
|
||||
self.newFrameCount+=1
|
||||
end
|
||||
|
||||
def newFrameCount
|
||||
@newFrameCount=0 if !@newFrameCount
|
||||
return @newFrameCount
|
||||
end
|
||||
|
||||
def extraYears
|
||||
@extraYears=0 if !@extraYears
|
||||
return @extraYears
|
||||
end
|
||||
end
|
||||
|
||||
if UnrealTime::TIME_STOPS
|
||||
class Scene_Map
|
||||
alias :updateold :update
|
||||
def update
|
||||
$PokemonGlobal.addNewFrameCount
|
||||
updateold
|
||||
end
|
||||
|
||||
if UnrealTime::TALK_PASS
|
||||
alias :miniupdateold :miniupdate
|
||||
def miniupdate
|
||||
$PokemonGlobal.addNewFrameCount
|
||||
miniupdateold
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if UnrealTime::BATTLE_PASS
|
||||
class PokeBattle_Scene
|
||||
alias :pbGraphicsUpdateold :pbGraphicsUpdate
|
||||
def pbGraphicsUpdate
|
||||
$PokemonGlobal.addNewFrameCount
|
||||
pbGraphicsUpdateold
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user