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