Decode WarHammer.ani
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user