Decode WarHammer.ani

This commit is contained in:
2020-04-16 01:48:44 +01:00
parent 87c0aae54b
commit beebfda3ba
2 changed files with 190 additions and 216 deletions

View File

@@ -19,7 +19,7 @@ module Obj
def self.parse(data)
hdr = new(*data[0..SIZE - 1].unpack("VVVVV"))
pp hdr
# pp hdr
hdr.validate!(data.bytes.size)
hdr
end
@@ -96,7 +96,7 @@ module Obj
DirEntry.parse(rel_data.byteslice(rel_offset, DirEntry::SIZE))
end
pp entries
# pp entries
new(entries)
end
@@ -380,6 +380,18 @@ def correlate(filenames)
pp results
end
def directory(filename, num)
data = File.read(filename).force_encoding("BINARY")
hdr = Obj::Header.parse(data)
dir = Obj::SpriteDir.parse(data[hdr.dir_range])
entry = dir.entries[num]
puts "Sprite directory starts at 0x#{hdr.dir_offset.to_s(16)}"
puts "Directory entry for sprite #{num} is at 0x#{(hdr.dir_offset + (Obj::DirEntry::SIZE * num)).to_s(16)}"
puts "Sprite #{num} is at 0x#{(hdr.data_offset + entry.rel_offset).to_s(16)} and is #{entry.sprite_size} bytes"
end
def sprites(filename)
obj = load_obj(filename)
@@ -514,6 +526,8 @@ def unknown16(filenames)
end
case command = ARGV.shift
when "directory" then
directory(ARGV[0], ARGV[1].to_i)
when "unknown16" then
unknown16(ARGV)
when "sprites" then