support UnityWeb assets
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
require 'extlz4'
|
||||
require 'extlzma'
|
||||
|
||||
module Mikunyan
|
||||
# Class for representing Unity AssetBundle
|
||||
@@ -37,21 +38,38 @@ module Mikunyan
|
||||
|
||||
case @signature
|
||||
when 'UnityRaw'
|
||||
load_unity_raw(br)
|
||||
load_unity_raw(br, false)
|
||||
when 'UnityFS'
|
||||
load_unity_fs(br)
|
||||
when 'UnityWeb'
|
||||
if @format <= 3
|
||||
load_unity_raw(br, true)
|
||||
else
|
||||
load_unity_fs(br)
|
||||
end
|
||||
else
|
||||
warn("Unknown signature: #{@signature}")
|
||||
raise("Unknown signature: #{@signature}")
|
||||
end
|
||||
end
|
||||
|
||||
def load_unity_raw(br)
|
||||
def load_unity_raw(br, compressed)
|
||||
@assets = []
|
||||
|
||||
file_size = br.i32u
|
||||
header_size = br.i32u
|
||||
|
||||
br.jmp(header_size)
|
||||
if compressed
|
||||
br.adv(4)
|
||||
block_count = br.i32u
|
||||
blocks = block_count.times.map{{ :c => br.i32u, :u => br.i32u }}
|
||||
br.jmp(header_size)
|
||||
data = String.new
|
||||
blocks.each{|b| data << LZMA.decode(br.read(b[:c]))}
|
||||
br = BinaryReader.new(data)
|
||||
else
|
||||
br.jmp(header_size)
|
||||
end
|
||||
|
||||
asset_count = br.i32u
|
||||
asset_count.times do
|
||||
asset_pos = br.pos
|
||||
@@ -99,8 +117,12 @@ module Mikunyan
|
||||
case flags & 0x3f
|
||||
when 0
|
||||
block
|
||||
# when 1
|
||||
# LZMA
|
||||
when 2, 3
|
||||
LZ4::raw_decode(block, max_dest_size)
|
||||
LZ4.raw_decode(block, max_dest_size)
|
||||
# when 4
|
||||
# LZHMA
|
||||
else
|
||||
warn("Unknown compression flag: #{@flags}")
|
||||
block
|
||||
|
||||
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
||||
spec.extensions = ["ext/decoders/native/extconf.rb"]
|
||||
|
||||
spec.add_dependency 'extlz4', '~> 0'
|
||||
spec.add_dependency 'extlzma', '~> 0'
|
||||
spec.add_dependency 'bin_utils', '~> 0'
|
||||
spec.add_dependency 'chunky_png', '~> 1'
|
||||
spec.add_dependency 'json', '~> 2'
|
||||
|
||||
Reference in New Issue
Block a user