class RubyGS::SaveFileReader
Public Class Methods
calc_checksums(file)
click to toggle source
DEPRECATED: Calculates the checksum values for both regions within a save file.
# File lib/ruby_gs/save_file_reader.rb, line 18 def self.calc_checksums(file) warn "[DEPRECATION] SaveFileReader::calc_checksums is deprecated. Please use SaveFileReader::correct_checksums! instead." file.pos = 0 content = file.read.split("").map(&:ord) c1 = content[0x2009..0x2D68].reduce(&:+) c2 = content[0x0C6B..0x17EC].reduce(&:+) + content[0x3D96..0x3F3F].reduce(&:+) + content[0x7E39..0x7E6C].reduce(&:+) file.close [c1.to_s(16),c2.to_s(16)] end
correct_checksums!(file)
click to toggle source
Calculates the checksum values within a save file and writes them to the save file.
# File lib/ruby_gs/save_file_reader.rb, line 30 def self.correct_checksums!(file) file.pos = 0 content = file.read.split("").map(&:ord) c1 = content[0x2009..0x2D68].inject(&:+) c2 = content[0x0C6B..0x17EC].inject(&:+) + content[0x3D96..0x3F3F].inject(&:+) + content[0x7E39..0x7E6C].inject(&:+) content[0x2D6A] = (c1 & 0xFF00) >> 8 content[0x2D69] = c1 & 0xFF content[0x7E6E] = (c2 & 0xFF00) >> 8 content[0x7E6D] = c2 & 0xFF file.pos = 0 file.write content.map(&:chr).join("") file.flush file end
read(file)
click to toggle source
Reads a .sav file and builds a SaveFile
object from its data.
# File lib/ruby_gs/save_file_reader.rb, line 11 def self.read(file) raise "filename cannot be nil" if not file SaveFile.new SaveFileGS.read(File.open(file,"r")), file, true # TODO: Detect whether save belongs to Gold/Silver or Crystal end