Class: RubyGS::SaveFileReader

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_gs/save_file_reader.rb

Class Method Summary collapse

Class Method Details

.calc_checksums(file) ⇒ Object

DEPRECATED: Calculates the checksum values for both regions within a save file.



18
19
20
21
22
23
24
25
26
# 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) ⇒ Object

Calculates the checksum values within a save file and writes them to the save file.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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) ⇒ Object

Reads a .sav file and builds a SaveFile object from its data.



11
12
13
14
# 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