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