More .obj file diving
This commit is contained in:
@@ -19,6 +19,7 @@ module Obj
|
||||
|
||||
def self.parse(data)
|
||||
hdr = new(*data[0..SIZE - 1].unpack("V*"))
|
||||
pp hdr
|
||||
hdr.validate!(data.bytes.size)
|
||||
hdr
|
||||
end
|
||||
@@ -81,6 +82,8 @@ module Obj
|
||||
DirEntry.parse(rel_data.byteslice(rel_offset, DirEntry::SIZE))
|
||||
end
|
||||
|
||||
pp entries
|
||||
|
||||
new(entries)
|
||||
end
|
||||
|
||||
@@ -128,18 +131,21 @@ module Obj
|
||||
end
|
||||
|
||||
class Sprite
|
||||
attr_reader :header, :data, :raw
|
||||
attr_reader :header, :records, :raw
|
||||
|
||||
def self.parse(rel_data)
|
||||
hdr = SpriteHeader.parse(rel_data)
|
||||
sprite_pixels = rel_data[hdr.pixel_range]
|
||||
|
||||
new(hdr, sprite_pixels, rel_data)
|
||||
records = sprite_pixels.split("\x00")
|
||||
records.map { |record| record += "\x00" }
|
||||
|
||||
new(hdr, records, rel_data)
|
||||
end
|
||||
|
||||
def initialize(header, data, raw = nil)
|
||||
def initialize(header, records, raw = nil)
|
||||
@header = header
|
||||
@data = data
|
||||
@records = records
|
||||
@raw = raw
|
||||
end
|
||||
end
|
||||
@@ -208,12 +214,12 @@ def display(data, blocksize=8, skip=0, header: false)
|
||||
block.concat([nil]*(blocksize-block.size)) if block.size < blocksize
|
||||
|
||||
out = [
|
||||
# "0x#{hex(i*blocksize, 4)}",
|
||||
"0x#{hex(i*blocksize, 4)}",
|
||||
block.map { |b| hex(b, 2) }, # hex
|
||||
# " | " + block.map { |b| text(b) }.join("") + " |", # ascii
|
||||
# block.map { |b| ascii(b) } ,# decimal bytes
|
||||
# "",# decimal 2-bytes
|
||||
# decimal 4-bytes
|
||||
" | " + block.map { |b| text(b) }.join("") + " |", # ascii
|
||||
block.map { |b| ascii(b) } ,# decimal bytes
|
||||
"",# decimal 2-bytes
|
||||
# decimal 4-bytes
|
||||
]
|
||||
|
||||
puts out.flatten.join(' ')
|
||||
@@ -231,7 +237,7 @@ def dump(filename, spriteno = -1)
|
||||
|
||||
if spriteno == -1
|
||||
puts "Dumping all sprites for #{filename}"
|
||||
obj.sprites.each { |sprite| display(sprite.raw, 2, header: true) }
|
||||
obj.sprites.each_with_index { |sprite, i| puts "Sprite #{i}\n" ; display(sprite.raw, 8, header: true) }
|
||||
else
|
||||
puts "Dumping sprite #{spriteno} for #{filename}"
|
||||
display(obj.sprites[spriteno])
|
||||
@@ -260,7 +266,7 @@ def decompress(filename)
|
||||
print "Sprite %02d... x=#{hdr.width} y=#{hdr.height}"%i
|
||||
|
||||
decompressed = []
|
||||
data = sprite.data.bytes
|
||||
data = sprite.raw[24..-1].bytes
|
||||
hdr = sprite.header
|
||||
|
||||
loop do
|
||||
@@ -331,6 +337,8 @@ def sprites(filename)
|
||||
obj.sprites.each_with_index do |spr, i|
|
||||
hdr = spr.header
|
||||
px = hdr.width * hdr.height
|
||||
pp hdr
|
||||
pp spr
|
||||
|
||||
|
||||
puts "%s %03d: %02x %02x %02x %02x %3d %3d %5d %5d %.2f %02x %02x ... %02x"%[
|
||||
|
Reference in New Issue
Block a user