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



13
14
15
16
17
18
19
20
# File 'lib/ruby_gs/save_file_reader.rb', line 13

def self.calc_checksums(file)
  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



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/ruby_gs/save_file_reader.rb', line 22

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



8
9
10
11
# File 'lib/ruby_gs/save_file_reader.rb', line 8

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