20 Commits

Author SHA1 Message Date
Ishotihadus 2b07a718f7 Bump version to 3.9.11 2023-05-16 11:37:00 +09:00
Ishotihadus 59345b5d83 Fix Unity 2021 2023-05-16 11:09:15 +09:00
Ishotihadus 4db2517018 Bump version to 3.9.10 2022-11-23 21:43:48 +09:00
Ishotihadus 95573408d5 Add default TypeTrees 2022-11-23 21:43:22 +09:00
Ishotihadus d46e96b844 Fix extconf 2022-11-23 21:37:10 +09:00
Ishotihadus 4d204a9c45 Add comment to README by the suggestion #4 2022-11-23 21:20:10 +09:00
Ishotihadus 5c5ec70784 Fix Rakefile 2022-11-23 21:12:42 +09:00
Ishotihadus 5564af7ba9 Improve code format 2022-11-23 21:07:33 +09:00
Ishotihadus b0991a8bf6 Add Ruby 3.2 support 2022-11-23 21:03:21 +09:00
Ishotihadus de47d41874 bump version to 3.9.9 2021-08-10 17:40:37 +09:00
Ishotihadus 3f7a4b3c38 add default typetrees 2021-08-10 17:40:01 +09:00
Ishotihadus d0312af3d9 fix unity 2020 2021-08-10 17:39:55 +09:00
Ishotihadus 6972cefb1f improve robustness of mikunyan-image 2021-06-22 13:38:04 +09:00
Ishotihadus 0485c187ec add default typetrees 2021-06-15 14:16:41 +09:00
Ishotihadus a1c268e469 refactoring 2020-06-20 18:50:22 +09:00
Ishotihadus 387a683ff0 imporove mikunyan-image 2020-06-20 18:50:02 +09:00
Ishotihadus 9a520637e9 add Asset#path_id 2020-06-20 17:56:42 +09:00
Ishotihadus d37c72de80 improve Asset::ObjectEntry#type 2020-03-05 01:39:53 +09:00
Ishotihadus 0ab1fd27a6 bump version to 3.9.8 2020-03-01 02:32:26 +09:00
Ishotihadus 652a437d14 add support for version 21 & 22 2020-03-01 02:29:33 +09:00
53 changed files with 293 additions and 138 deletions
+42
View File
@@ -0,0 +1,42 @@
AllCops:
TargetRubyVersion: 2.6
Metrics/AbcSize:
Max: 170
Metrics/BlockLength:
Max: 250
Metrics/ClassLength:
Max: 1000
Metrics/CyclomaticComplexity:
Max: 70
Metrics/MethodLength:
Max: 100
Metrics/ModuleLength:
Max: 1000
Metrics/ParameterLists:
Max: 50
Metrics/PerceivedComplexity:
Max: 80
Layout/SpaceInsideBlockBraces:
EnforcedStyle: no_space
SpaceBeforeBlockParameters: false
Style/Documentation:
Enabled: false
Style/NumericPredicate:
EnforcedStyle: comparison
Style/MultilineBlockChain:
Enabled: false
Style/SpecialGlobalVars:
EnforcedStyle: use_perl_names
+2 -1
View File
@@ -244,7 +244,8 @@ Available options:
- [json](https://rubygems.org/gems/json)
- [extlz4](https://rubygems.org/gems/extlz4)
- [extlzma](https://rubygems.org/gems/extlzma)
- [extlzma2](https://rubygems.org/gems/extlzma2)
- extlzma2 requires liblzma. You may need a `--with-liblzma-dir=` argument to install extlzma2.
- [bin_utils](https://rubygems.org/gems/bin_utils)
- [chunky_png](https://rubygems.org/gems/chunky_png)
+2 -2
View File
@@ -13,10 +13,10 @@ ext_dirs = %w[decoders/native decoders/crunch]
ext_dirs.each do |dir|
Rake::ExtensionTask.new(dir) do |ext|
ext.lib_dir = 'lib/mikunyan'
ext.lib_dir = "lib/mikunyan/#{File.dirname(dir)}"
end
end
task compile: ext_dirs.map{|e| "compile:#{e}".to_sym}
task compile: ext_dirs.map {|e| "compile:#{e}".to_sym}
task default: %i[clobber compile spec]
+38 -18
View File
@@ -44,51 +44,71 @@ unless File.file?(arg)
exit(1)
end
assets = opts[:as_asset] ? [Mikunyan::Asset.file(arg)] : Mikunyan::AssetBundle.file(arg).assets
if opts[:as_asset]
assets = [Mikunyan::Asset.file(arg)]
else
bundle = Mikunyan::AssetBundle.file(arg)
assets = bundle.assets
end
outdir = opts[:outputdir] || File.basename(arg, '.*')
FileUtils.mkpath(outdir)
assets.each do |asset|
if opts[:sprite]
if opts[:sprite]
textures = {}
textures_meta = {}
assets.each do |asset|
json = {}
textures = {}
asset.each_object do |obj|
next unless obj.type == 'Sprite'
next unless obj.klass
obj = obj.parse
next unless obj
texture_id = obj.m_RD&.texture&.m_PathID&.value
next unless texture_id
next unless obj&.m_RD&.texture
file_id = obj.m_RD.texture.m_FileID.value
texture_asset = file_id == 0 ? asset : bundle && bundle[asset.references[file_id - 1].file_path]
texture_id = obj.m_RD.texture.m_PathID.value
next unless texture_asset && texture_id
unless textures.key?(texture_id)
texture_obj = asset.parse_object(texture_id)
unless textures.dig(texture_asset, texture_id)
texture_obj = texture_asset.parse_object(texture_id)
if texture_obj.is_a?(Mikunyan::CustomTypes::Texture2D)
textures[texture_id] = texture_obj.generate_png
json[texture_id] = {
textures[texture_asset] ||= {}
textures[texture_asset][texture_id] = texture_obj.generate_png
textures_meta[texture_asset] ||= {}
textures_meta[texture_asset][texture_id] = {
name: texture_obj.m_Name&.value, width: texture_obj.m_Width&.value, height: texture_obj.m_Height&.value,
format: texture_obj.m_TextureFormat&.value, path_id: texture_id, sprites: []
format: texture_obj.m_TextureFormat&.value, asset: texture_asset.name, path_id: texture_id
}
end
end
next unless textures_meta[texture_asset][texture_id]
unless json.key?([file_id, texture_id])
json[[file_id, texture_id]] = textures_meta[texture_asset][texture_id].dup
json[[file_id, texture_id]][:sprites] = []
end
x = obj.m_Rect&.x&.value
y = obj.m_Rect&.y&.value
width = obj.m_Rect&.width&.value
height = obj.m_Rect&.height&.value
json[texture_id][:sprites] << { name: obj.object_name, x: x, y: y, width: width, height: height, path_id: obj.path_id }
json[[file_id, texture_id]][:sprites] << { name: obj.object_name, x: x, y: y, width: width, height: height, path_id: obj.path_id }
next unless textures[texture_id] && x && y && width && height
textures[texture_id].crop(
x.round, (textures[texture_id].height - height - y).round, width.round, height.round
).save("#{outdir}/#{obj.object_name}.png")
texture = textures[texture_asset][texture_id]
next unless texture && x && y && width && height
texture.crop(x.round, (texture.height - height - y).round, width.round, height.round).save("#{outdir}/#{obj.object_name}.png")
end
puts opts[:pretty] ? JSON.pretty_generate(json.values) : JSON.generate(json.values)
else
end
else
assets.each do |asset|
json = []
asset.each_object do |obj|
next unless obj.type == 'Texture2D'
next unless obj.klass
obj = obj.parse
next unless obj.is_a?(Mikunyan::CustomTypes::Texture2D)
json << {
+3
View File
@@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'mkmf'
have_library('stdc++')
@@ -6,4 +8,5 @@ append_cppflags('-O2')
append_cppflags('-Wall')
append_cppflags('-Wextra')
append_cppflags('-Wvla')
create_makefile('mikunyan/decoders/crunch')
+3
View File
@@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'mkmf'
append_cppflags('-std=c11')
@@ -5,4 +7,5 @@ append_cppflags('-O2')
append_cppflags('-Wall')
append_cppflags('-Wextra')
append_cppflags('-Wvla')
create_makefile('mikunyan/decoders/native')
+36 -10
View File
@@ -56,7 +56,7 @@ module Mikunyan
# Returns object type name string
# @return [String,nil] type name
def type
klass&.type_tree&.tree&.type || Mikunyan::Constants::CLASS_ID2NAME[class_id]
klass&.type_tree&.tree&.type || Mikunyan::Constants::CLASS_ID2NAME[class_id || klass&.class_id]
end
end
@@ -103,6 +103,12 @@ module Mikunyan
@objects.each(&block)
end
# Returns object with specified path ID
# @return [ObjectEntry,nil]
def path_id(id)
@path_id_table[id]
end
# Returns list of all path IDs
# @return [Array<Integer>] list of all path IDs
def path_ids
@@ -114,8 +120,10 @@ module Mikunyan
def containers
obj = @path_id_table[1]
return nil unless obj.klass&.type_tree&.tree&.type == 'AssetBundle'
parse_object(obj).m_Container.value.map do |e|
ContainerInfo.new(e.first.value, e.second.preloadIndex.value, e.second.preloadSize.value, e.second.asset.m_FileID.value, e.second.asset.m_PathID.value)
ContainerInfo.new(e.first.value, e.second.preloadIndex.value, e.second.preloadSize.value,
e.second.asset.m_FileID.value, e.second.asset.m_PathID.value)
end
end
@@ -123,8 +131,9 @@ module Mikunyan
# @param [Integer,ObjectEntry] obj path ID or object
# @return [Mikunyan::BaseObject,nil] parsed object
def parse_object(obj)
obj = @path_id_table[obj] if obj.class == Integer
obj = @path_id_table[obj] if obj.instance_of?(Integer)
return nil unless obj.klass&.type_tree
value_klass = Mikunyan::CustomTypes.get_custom_type(obj.klass.type_tree.tree.type, obj.class_id)
ret = parse_object_private(BinaryReader.new(obj.data, @endian), obj.klass.type_tree.tree, value_klass)
ret.object_entry = obj
@@ -142,7 +151,7 @@ module Mikunyan
# @param [Integer,ObjectEntry] obj path ID or object
# @return [String,nil] type name
def object_type(obj)
obj = @path_id_table[obj] if obj.class == Integer
obj = @path_id_table[obj] if obj.instance_of?(Integer)
obj&.type
end
@@ -175,6 +184,14 @@ module Mikunyan
br.pos = file_size - meta_size
@endian = br.bool ? :big : :little
end
if @format >= 22
_meta_size = br.i32u
_file_size = br.i64u
data_offset = br.i64u
br.adv(8)
end
br.endian = @endian
@generator_version = br.cstr if @format >= 7
@@ -198,7 +215,8 @@ module Mikunyan
br.align(4) if @format >= 14
if @format >= 16
ObjectEntry.new(
path_id: wide_path_id ? br.i64s : br.i32s, offset: br.i32u, size: br.i32u,
path_id: wide_path_id ? br.i64s : br.i32s,
offset: @format >= 22 ? br.i64u : br.i32u, size: br.i32u,
class_idx: br.i32u, stripped?: @format == 16 ? br.bool : nil,
parent_asset: self
)
@@ -211,7 +229,7 @@ module Mikunyan
end
end
@path_id_table = @objects.map{|e| [e.path_id, e]}.to_h
@path_id_table = @objects.map {|e| [e.path_id, e]}.to_h
if @format >= 11
add_id_count = br.i32u
@@ -223,15 +241,21 @@ module Mikunyan
reference_count = br.i32u
@references = Array.new(reference_count) do
Reference.new(@format >= 6 ? br.cstr : nil, @format >= 5 ? br.read(16) : nil, @format >= 5 ? br.i32s : nil, br.cstr)
Reference.new(@format >= 6 ? br.cstr : nil, @format >= 5 ? br.read(16) : nil, @format >= 5 ? br.i32s : nil,
br.cstr)
end
@comment = br.cstr if @format >= 5
# _ = br.i32 if @format >= 21
@objects.each do |e|
br.jmp(data_offset + e.offset)
e.data = br.read(e.size)
e.klass = e.class_idx ? @klasses[e.class_idx] : @klasses.find{|e2| e2.class_id == e.class_id} || @klasses.find{|e2| e2.class_id == e.type_id}
e.klass = if e.class_idx
@klasses[e.class_idx]
else
@klasses.find {|e2| e2.class_id == e.class_id} || @klasses.find {|e2| e2.class_id == e.type_id}
end
end
end
@@ -274,6 +298,7 @@ module Mikunyan
elsif node.array?
children.each do |child|
next ret[child.name] = parse_object_private(br, child) unless child.name == 'data'
size = ret['size']&.value || raise('`size` node must appear before `data` node in array node')
ret.value =
if child.children.empty? && (!child.need_align? || br.pos % 4 == 0 && child.size % 4 == 0)
@@ -284,7 +309,7 @@ module Mikunyan
br.read(size * child.size).force_encoding('utf-8')
end
end
ret.value ||= Array.new(size){parse_object_private(br, child)}
ret.value ||= Array.new(size) {parse_object_private(br, child)}
ret['data'] = ret.value
end
elsif children.size == 1 && children[0].array? && children[0].type == 'Array' && children[0].name == 'Array'
@@ -292,7 +317,7 @@ module Mikunyan
ret.name = node.name
ret.type = node.type
else
ret.attr = children.map{|c| [c.name, parse_object_private(br, c)]}.to_h
ret.attr = children.map {|c| [c.name, parse_object_private(br, c)]}.to_h
if node.type == 'StreamingInfo'
ret.value = get_stream_blob(ret['path'].value, ret['offset'].value, ret['size'].value)
else
@@ -306,6 +331,7 @@ module Mikunyan
def get_stream_blob(path, offset, size)
return nil unless path && @bundle
return nil if path.empty?
path["archive:/#{@name}/"] = '' if path.start_with?("archive:/#{@name}/")
@bundle.blobs[path]&.byteslice(offset, size)
end
+13 -6
View File
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'extlz4'
require 'extlzma'
require 'extlzma2'
require 'mikunyan/asset'
require 'mikunyan/binary_reader'
@@ -21,7 +21,7 @@ module Mikunyan
# @param [String,Integer] index
# @return [Mikunyan::Asset,nil]
def [](index)
index.is_a?(String) ? @assets.find{|e| e.name == index} : @assets[index]
index.is_a?(String) ? @assets.find {|e| e.name == index} : @assets[index]
end
# Same as assets.each
@@ -59,7 +59,7 @@ module Mikunyan
@unity_version = br.cstr
@generator_version = br.cstr
@format < 6 ? load_unity_raw(br) : load_unity_fs(br)
@format == 6 || @signature == 'UnityFS' ? load_unity_fs(br, @signature) : load_unity_raw(br)
end
# @param [Mikunyan::BinaryReader] br
@@ -86,15 +86,22 @@ module Mikunyan
end
# @param [Mikunyan::BinaryReader] br
def load_unity_fs(br)
def load_unity_fs(br, signature)
file_size = br.i64u
ci_block_size = br.i32u
ui_block_size = br.i32u
flags = br.i32u
head = BinaryReader.new(uncompress(flags & 0x80 == 0 ? br.read(ci_block_size) : br.read_abs(ci_block_size, file_size - ci_block_size), ui_block_size, flags))
br.adv(1) unless signature == 'UnityFS'
br.align(16) if @format >= 7
head_bin = flags & 0x80 == 0 ? br.read(ci_block_size) : br.read_abs(ci_block_size, file_size - ci_block_size)
head = BinaryReader.new(uncompress(head_bin, ui_block_size, flags))
@guid = head.read(16)
br.align(16) unless flags & 0x200 == 0
block_count = head.i32u
raw_data = Array.new(block_count) do
u_size = head.i32u
@@ -114,7 +121,7 @@ module Mikunyan
end
def process_asset_entries(asset_entries)
@blobs = asset_entries.select(&:blob?).map{|e| [e.name, e.data]}.to_h
@blobs = asset_entries.select(&:blob?).map {|e| [e.name, e.data]}.to_h
@assets = asset_entries.reject(&:blob?).map do |e|
Asset.load(e.data, e.name, self)
end
+2
View File
@@ -56,6 +56,7 @@ module Mikunyan
def read(size)
ret = @io.read(size)
raise EOFError if ret.nil? || size && ret.bytesize < size
ret
end
@@ -75,6 +76,7 @@ module Mikunyan
# @return [String] string
def cstr
raise EOFError if @io.eof?
@io.each_byte.take_while(&:nonzero?).pack('C*')
end
+85 -85
View File
@@ -416,91 +416,91 @@ module Mikunyan
[1126, 'PackedAssets'],
[1127, 'VideoClipImporter'],
[2000, 'ActivationLogComponent'],
[100000, 'int'],
[100001, 'bool'],
[100002, 'float'],
[100003, 'MonoObject'],
[100004, 'Collision'],
[100005, 'Vector3f'],
[100006, 'RootMotionData'],
[100007, 'Collision2D'],
[100008, 'AudioMixerLiveUpdateFloat'],
[100009, 'AudioMixerLiveUpdateBool'],
[100010, 'Polygon2D'],
[100011, 'void'],
[19719996, 'TilemapCollider2D'],
[41386430, 'AssetImporterLog'],
[73398921, 'VFXRenderer'],
[76251197, 'SerializableManagedRefTestClass'],
[156049354, 'Grid'],
[181963792, 'Preset'],
[277625683, 'EmptyObject'],
[285090594, 'IConstraint'],
[293259124, 'TestObjectWithSpecialLayoutOne'],
[294290339, 'AssemblyDefinitionReferenceImporter'],
[334799969, 'SiblingDerived'],
[342846651, 'TestObjectWithSerializedMapStringNonAlignedStruct'],
[367388927, 'SubDerived'],
[369655926, 'AssetImportInProgressProxy'],
[382020655, 'PluginBuildInfo'],
[426301858, 'EditorProjectAccess'],
[468431735, 'PrefabImporter'],
[478637458, 'TestObjectWithSerializedArray'],
[478637459, 'TestObjectWithSerializedAnimationCurve'],
[483693784, 'TilemapRenderer'],
[638013454, 'SpriteAtlasDatabase'],
[641289076, 'AudioBuildInfo'],
[644342135, 'CachedSpriteAtlasRuntimeData'],
[646504946, 'RendererFake'],
[662584278, 'AssemblyDefinitionReferenceAsset'],
[668709126, 'BuiltAssetBundleInfoSet'],
[687078895, 'SpriteAtlas'],
[877146078, 'PlatformModuleSetup'],
[895512359, 'AimConstraint'],
[937362698, 'VFXManager'],
[994735392, 'VisualEffectSubgraph'],
[994735403, 'VisualEffectSubgraphOperator'],
[994735404, 'VisualEffectSubgraphBlock'],
[1001480554, 'Prefab'],
[1027052791, 'LocalizationImporter'],
[1091556383, 'Derived'],
[1111377672, 'PropertyModificationsTargetTestObject'],
[1114811875, 'ReferencesArtifactGenerator'],
[1152215463, 'AssemblyDefinitionAsset'],
[1154873562, 'SceneVisibilityState'],
[1183024399, 'LookAtConstraint'],
[1223240404, 'MultiArtifactTestImporter'],
[1268269756, 'GameObjectRecorder'],
[1325145578, 'LightingDataAssetParent'],
[1386491679, 'PresetManager'],
[1392443030, 'TestObjectWithSpecialLayoutTwo'],
[1403656975, 'StreamingManager'],
[1480428607, 'LowerResBlitTexture'],
[1542919678, 'StreamingController'],
[1571458007, 'RenderPassAttachment'],
[1628831178, 'TestObjectVectorPairStringBool'],
[1742807556, 'GridLayout'],
[1766753193, 'AssemblyDefinitionImporter'],
[1773428102, 'ParentConstraint'],
[1803986026, 'FakeComponent'],
[1818360608, 'PositionConstraint'],
[1818360609, 'RotationConstraint'],
[1818360610, 'ScaleConstraint'],
[1839735485, 'Tilemap'],
[1896753125, 'PackageManifest'],
[1896753126, 'PackageManifestImporter'],
[1953259897, 'TerrainLayer'],
[1971053207, 'SpriteShapeRenderer'],
[1977754360, 'NativeObjectType'],
[1981279845, 'TestObjectWithSerializedMapStringBool'],
[1995898324, 'SerializableManagedHost'],
[2058629509, 'VisualEffectAsset'],
[2058629510, 'VisualEffectImporter'],
[2058629511, 'VisualEffectResource'],
[2059678085, 'VisualEffectObject'],
[2083052967, 'VisualEffect'],
[2083778819, 'LocalizationAsset'],
[2089858483, 'ScriptedImporter']
[100_000, 'int'],
[100_001, 'bool'],
[100_002, 'float'],
[100_003, 'MonoObject'],
[100_004, 'Collision'],
[100_005, 'Vector3f'],
[100_006, 'RootMotionData'],
[100_007, 'Collision2D'],
[100_008, 'AudioMixerLiveUpdateFloat'],
[100_009, 'AudioMixerLiveUpdateBool'],
[100_010, 'Polygon2D'],
[100_011, 'void'],
[19_719_996, 'TilemapCollider2D'],
[41_386_430, 'AssetImporterLog'],
[73_398_921, 'VFXRenderer'],
[76_251_197, 'SerializableManagedRefTestClass'],
[156_049_354, 'Grid'],
[181_963_792, 'Preset'],
[277_625_683, 'EmptyObject'],
[285_090_594, 'IConstraint'],
[293_259_124, 'TestObjectWithSpecialLayoutOne'],
[294_290_339, 'AssemblyDefinitionReferenceImporter'],
[334_799_969, 'SiblingDerived'],
[342_846_651, 'TestObjectWithSerializedMapStringNonAlignedStruct'],
[367_388_927, 'SubDerived'],
[369_655_926, 'AssetImportInProgressProxy'],
[382_020_655, 'PluginBuildInfo'],
[426_301_858, 'EditorProjectAccess'],
[468_431_735, 'PrefabImporter'],
[478_637_458, 'TestObjectWithSerializedArray'],
[478_637_459, 'TestObjectWithSerializedAnimationCurve'],
[483_693_784, 'TilemapRenderer'],
[638_013_454, 'SpriteAtlasDatabase'],
[641_289_076, 'AudioBuildInfo'],
[644_342_135, 'CachedSpriteAtlasRuntimeData'],
[646_504_946, 'RendererFake'],
[662_584_278, 'AssemblyDefinitionReferenceAsset'],
[668_709_126, 'BuiltAssetBundleInfoSet'],
[687_078_895, 'SpriteAtlas'],
[877_146_078, 'PlatformModuleSetup'],
[895_512_359, 'AimConstraint'],
[937_362_698, 'VFXManager'],
[994_735_392, 'VisualEffectSubgraph'],
[994_735_403, 'VisualEffectSubgraphOperator'],
[994_735_404, 'VisualEffectSubgraphBlock'],
[1_001_480_554, 'Prefab'],
[1_027_052_791, 'LocalizationImporter'],
[1_091_556_383, 'Derived'],
[1_111_377_672, 'PropertyModificationsTargetTestObject'],
[1_114_811_875, 'ReferencesArtifactGenerator'],
[1_152_215_463, 'AssemblyDefinitionAsset'],
[1_154_873_562, 'SceneVisibilityState'],
[1_183_024_399, 'LookAtConstraint'],
[1_223_240_404, 'MultiArtifactTestImporter'],
[1_268_269_756, 'GameObjectRecorder'],
[1_325_145_578, 'LightingDataAssetParent'],
[1_386_491_679, 'PresetManager'],
[1_392_443_030, 'TestObjectWithSpecialLayoutTwo'],
[1_403_656_975, 'StreamingManager'],
[1_480_428_607, 'LowerResBlitTexture'],
[1_542_919_678, 'StreamingController'],
[1_571_458_007, 'RenderPassAttachment'],
[1_628_831_178, 'TestObjectVectorPairStringBool'],
[1_742_807_556, 'GridLayout'],
[1_766_753_193, 'AssemblyDefinitionImporter'],
[1_773_428_102, 'ParentConstraint'],
[1_803_986_026, 'FakeComponent'],
[1_818_360_608, 'PositionConstraint'],
[1_818_360_609, 'RotationConstraint'],
[1_818_360_610, 'ScaleConstraint'],
[1_839_735_485, 'Tilemap'],
[1_896_753_125, 'PackageManifest'],
[1_896_753_126, 'PackageManifestImporter'],
[1_953_259_897, 'TerrainLayer'],
[1_971_053_207, 'SpriteShapeRenderer'],
[1_977_754_360, 'NativeObjectType'],
[1_981_279_845, 'TestObjectWithSerializedMapStringBool'],
[1_995_898_324, 'SerializableManagedHost'],
[2_058_629_509, 'VisualEffectAsset'],
[2_058_629_510, 'VisualEffectImporter'],
[2_058_629_511, 'VisualEffectResource'],
[2_059_678_085, 'VisualEffectObject'],
[2_083_052_967, 'VisualEffect'],
[2_083_778_819, 'LocalizationAsset'],
[2_089_858_483, 'ScriptedImporter']
]
CLASS_ID2NAME = CLASS_ID_TABLE.to_h.freeze
+17 -7
View File
@@ -187,7 +187,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image
def self.decode_rgb565(width, height, bin, endian = :big)
ChunkyPNG::Image.from_rgb_stream(width, height, DecodeHelper.decode_rgb565(bin, width * height, endian == :big)).flip
ChunkyPNG::Image.from_rgb_stream(width, height,
DecodeHelper.decode_rgb565(bin, width * height, endian == :big)).flip
end
# Decode image from R16 binary
@@ -197,7 +198,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image
def self.decode_r16(width, height, bin, endian = :big)
ChunkyPNG::Image.from_rgb_stream(width, height, DecodeHelper.decode_r16(bin, width * height, endian == :big)).flip
ChunkyPNG::Image.from_rgb_stream(width, height,
DecodeHelper.decode_r16(bin, width * height, endian == :big)).flip
end
# Decode image from RGBA4444 binary
@@ -270,7 +272,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image
def self.decode_rhalf(width, height, bin, endian = :big)
ChunkyPNG::Image.from_rgb_stream(width, height, DecodeHelper.decode_rhalf(bin, width * height, endian == :big)).flip
ChunkyPNG::Image.from_rgb_stream(width, height,
DecodeHelper.decode_rhalf(bin, width * height, endian == :big)).flip
end
# Decode image from RG Half-float binary
@@ -280,7 +283,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image
def self.decode_rghalf(width, height, bin, endian = :big)
ChunkyPNG::Image.from_rgb_stream(width, height, DecodeHelper.decode_rghalf(bin, width * height, endian == :big)).flip
ChunkyPNG::Image.from_rgb_stream(width, height,
DecodeHelper.decode_rghalf(bin, width * height, endian == :big)).flip
end
# Decode image from RGBA Half-float binary
@@ -290,7 +294,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image
def self.decode_rgbahalf(width, height, bin, endian = :big)
ChunkyPNG::Image.from_rgba_stream(width, height, DecodeHelper.decode_rgbahalf(bin, width * height, endian == :big)).flip
ChunkyPNG::Image.from_rgba_stream(width, height,
DecodeHelper.decode_rgbahalf(bin, width * height, endian == :big)).flip
end
# Decode image from R float binary
@@ -366,7 +371,8 @@ module Mikunyan
# @param [Integer] bpp bit per pixel (2 or 4)
# @return [ChunkyPNG::Image] decoded image
def self.decode_pvrtc1(width, height, bin, bpp)
raise 'bpp of PVRTC1 must be 2 or 4' unless bpp == 2 || bpp == 4
raise 'bpp of PVRTC1 must be 2 or 4' unless [2, 4].include?(bpp)
ChunkyPNG::Image.from_rgba_stream(width, height, DecodeHelper.decode_pvrtc1(bin, width, height, bpp == 2))
end
@@ -449,7 +455,8 @@ module Mikunyan
# @param [String] bin binary to decode
# @return [ChunkyPNG::Image] decoded image
def self.decode_astc(width, height, blocksize, bin)
ChunkyPNG::Image.from_rgba_stream(width, height, DecodeHelper.decode_astc(bin, width, height, blocksize, blocksize))
ChunkyPNG::Image.from_rgba_stream(width, height,
DecodeHelper.decode_astc(bin, width, height, blocksize, blocksize))
end
# Decode image from crunched texture binary
@@ -488,8 +495,10 @@ module Mikunyan
fmt = object['m_TextureFormat']&.value
bin = object['image data']&.value
return unless width && height && fmt && bin && astc_list[fmt]
bin = object['m_StreamData']&.value if bin.empty?
return unless bin
header = [0x13, 0xab, 0xa1, 0x5c, astc_list[fmt], astc_list[fmt], 1].pack('C*')
header << [width].pack('V').byteslice(0, 3)
header << [height].pack('V').byteslice(0, 3)
@@ -500,6 +509,7 @@ module Mikunyan
# [0.0,1.0] -> [0,255]
def self.f2i(val)
return 0 unless val.finite?
(val * 255).round.clamp(0, 255)
end
end
+3 -3
View File
@@ -95,11 +95,11 @@ module Mikunyan
if @type == 'pair'
[@attr['first'].simplify, @attr['second'].simplify]
elsif @type == 'map' && @value.is_a?(Array)
@value.map{|e| [e['first'].simplify, e['second'].simplify]}.to_h
@value.map {|e| [e['first'].simplify, e['second'].simplify]}.to_h
elsif is_struct
@attr.map{|key, val| [key, val.simplify]}.to_h
@attr.transform_values(&:simplify)
elsif @value.is_a?(Array)
@value.map{|e| e.is_a?(ObjectValue) ? e.simplify : e}
@value.map {|e| e.is_a?(ObjectValue) ? e.simplify : e}
elsif @value.is_a?(ObjectValue)
@value.simplify
else
+4 -1
View File
@@ -20,7 +20,8 @@ module Mikunyan
# @attr [Integer,nil] v18meta
# @attr [Mikunyan::TypeTree::Node,nil] parent ̑
# @attr [Array<Mikunyan::TypeTree::Node>] children
Node = Struct.new(:version, :level, :array?, :type, :name, :size, :index, :flags, :v18meta, :parent, :children, keyword_init: true) do
Node = Struct.new(:version, :level, :array?, :type, :name, :size, :index, :flags, :v18meta, :parent, :children,
keyword_init: true) do
def need_align?
flags & 0x4000 != 0
end
@@ -84,6 +85,7 @@ module Mikunyan
end
stack[n.level] = n
end
br.adv(4) if version >= 21
else
nodes = []
stack = []
@@ -118,6 +120,7 @@ module Mikunyan
def self.load_default(class_id, hash)
file = File.expand_path("../typetrees/#{class_id}/#{hash.unpack1('H*')}.json", __FILE__)
return nil unless File.file?(file)
TypeTree.deserialize(JSON.parse(File.read(file)))
end
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes":[{"version":2,"level":0,"is_array":false,"type":"NavMeshSettings","name":"Base","size":12,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<NavMeshData>","name":"m_NavMeshData","size":12,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes":[{"version":2,"level":0,"is_array":false,"type":"Texture2D","name":"Base","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_Name","size":-1,"flags":557057,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":540673,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":524289,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":524289,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ForcedFallbackFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_DownscaleFallback","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IsAlphaChannelOptional","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Width","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Height","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"m_CompleteImageSize","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_MipsStripped","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_TextureFormat","size":4,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_MipCount","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IsReadable","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IsPreProcessed","size":1,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IgnoreMasterTextureLimit","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_StreamingMipmaps","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_StreamingMipmapsPriority","size":4,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ImageCount","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_TextureDimension","size":4,"flags":1,"v18meta":0},{"version":2,"level":1,"is_array":false,"type":"GLTextureSettings","name":"m_TextureSettings","size":24,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FilterMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_Aniso","size":4,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"m_MipBias","size":4,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_WrapU","size":4,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_WrapV","size":4,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_WrapW","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_LightmapFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ColorSpace","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_PlatformBlob","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16384,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":0,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"UInt8","name":"data","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":true,"type":"TypelessData","name":"image data","size":-1,"flags":16385,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"data","size":1,"flags":1,"v18meta":0},{"version":2,"level":1,"is_array":false,"type":"StreamingInfo","name":"m_StreamData","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt64","name":"offset","size":8,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"unsigned int","name":"size","size":4,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"string","name":"path","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":3,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"char","name":"data","size":1,"flags":1,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":3,"level":0,"is_array":false,"type":"PlayableDirector","name":"Base","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<GameObject>","name":"m_GameObject","size":12,"flags":65,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"UInt8","name":"m_Enabled","size":1,"flags":16641,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Object>","name":"m_PlayableAsset","size":12,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_InitialState","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_WrapMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_DirectorUpdateMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"double","name":"m_InitialTime","size":8,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_SceneBindings","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16384,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":0,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"DirectorGenericBinding","name":"data","size":24,"flags":0,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"PPtr<Object>","name":"key","size":12,"flags":0,"v18meta":0},{"version":1,"level":5,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":5,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"PPtr<Object>","name":"value","size":12,"flags":0,"v18meta":0},{"version":1,"level":5,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":5,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"ExposedReferenceTable","name":"m_ExposedReferences","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"map","name":"m_References","size":-1,"flags":49152,"v18meta":0},{"version":1,"level":3,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"size","size":4,"flags":0,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"pair","name":"data","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":5,"is_array":false,"type":"string","name":"first","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":6,"is_array":false,"type":"string","name":"id","size":-1,"flags":49152,"v18meta":0},{"version":1,"level":7,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":0},{"version":1,"level":8,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":0},{"version":1,"level":8,"is_array":false,"type":"char","name":"data","size":1,"flags":1,"v18meta":0},{"version":1,"level":5,"is_array":false,"type":"PPtr<Object>","name":"second","size":12,"flags":0,"v18meta":0},{"version":1,"level":6,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":6,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes":[{"version":1,"level":0,"is_array":false,"type":"VideoClip","name":"Base","size":-1,"flags":32768,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_Name","size":-1,"flags":557057,"v18meta":null},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":540673,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":524289,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":524289,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_OriginalPath","size":-1,"flags":49153,"v18meta":null},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"m_ProxyWidth","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"m_ProxyHeight","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"Width","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"Height","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"m_PixelAspecRatioNum","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"unsigned int","name":"m_PixelAspecRatioDen","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"double","name":"m_FrameRate","size":8,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"UInt64","name":"m_FrameCount","size":8,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Format","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_AudioChannelCount","size":-1,"flags":49153,"v18meta":null},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"UInt16","name":"data","size":2,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_AudioSampleRate","size":-1,"flags":49153,"v18meta":null},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"unsigned int","name":"data","size":4,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_AudioLanguage","size":-1,"flags":49153,"v18meta":null},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":49153,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"string","name":"data","size":-1,"flags":32769,"v18meta":null},{"version":1,"level":4,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":null},{"version":1,"level":5,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":null},{"version":1,"level":5,"is_array":false,"type":"char","name":"data","size":1,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"StreamedResource","name":"m_ExternalResources","size":-1,"flags":32768,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"string","name":"m_Source","size":-1,"flags":32769,"v18meta":null},{"version":1,"level":3,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":null},{"version":1,"level":4,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":null},{"version":1,"level":4,"is_array":false,"type":"char","name":"data","size":1,"flags":1,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"UInt64","name":"m_Offset","size":8,"flags":1,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"UInt64","name":"m_Size","size":8,"flags":1,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_HasSplitAlpha","size":1,"flags":0,"v18meta":null}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes":[{"version":4,"level":0,"is_array":false,"type":"Rigidbody2D","name":"Base","size":63,"flags":32768,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"PPtr<GameObject>","name":"m_GameObject","size":12,"flags":65,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_BodyType","size":4,"flags":8388608,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_Simulated","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseFullKinematicContacts","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseAutoMass","size":1,"flags":16384,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_Mass","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_LinearDrag","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_AngularDrag","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_GravityScale","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"PPtr<PhysicsMaterial2D>","name":"m_Material","size":12,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Interpolate","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_SleepingMode","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_CollisionDetection","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Constraints","size":4,"flags":12582912,"v18meta":null}]}
@@ -0,0 +1 @@
{"nodes":[{"version":2,"level":0,"is_array":false,"type":"BoxCollider2D","name":"Base","size":102,"flags":32768,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"PPtr<GameObject>","name":"m_GameObject","size":12,"flags":65,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"UInt8","name":"m_Enabled","size":1,"flags":16641,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_Density","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"PPtr<PhysicsMaterial2D>","name":"m_Material","size":12,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IsTrigger","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UsedByEffector","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UsedByComposite","size":1,"flags":8404992,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_Offset","size":8,"flags":2097152,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"SpriteTilingProperty","name":"m_SpriteTilingProperty","size":49,"flags":8421393,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"Vector4f","name":"border","size":16,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"x","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"y","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"z","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"w","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"Vector2f","name":"pivot","size":8,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"x","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"y","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"Vector2f","name":"oldSize","size":8,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"x","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"y","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"Vector2f","name":"newSize","size":8,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"x","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"float","name":"y","size":4,"flags":10485777,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"float","name":"adaptiveTilingThreshold","size":4,"flags":8388625,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"drawMode","size":4,"flags":8388625,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"bool","name":"adaptiveTiling","size":1,"flags":8405009,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_AutoTiling","size":1,"flags":8404992,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_Size","size":8,"flags":2097152,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_EdgeRadius","size":4,"flags":0,"v18meta":null}]}
@@ -0,0 +1 @@
{"nodes":[{"version":4,"level":0,"is_array":false,"type":"MeshCollider","name":"Base","size":43,"flags":32768,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<GameObject>","name":"m_GameObject","size":12,"flags":65,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<PhysicMaterial>","name":"m_Material","size":12,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IsTrigger","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_Enabled","size":1,"flags":16641,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_Convex","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_CookingOptions","size":4,"flags":8404992,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Mesh>","name":"m_Mesh","size":12,"flags":0,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":8388609,"v18meta":0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes":[{"version":1,"level":0,"is_array":false,"type":"AudioClip","name":"Base","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_Name","size":-1,"flags":557057,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":540673,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":524289,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":524289,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_LoadType","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Channels","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Frequency","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_BitsPerSample","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_Length","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_IsTrackerFormat","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_Ambisonic","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_SubsoundIndex","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_PreloadAudioData","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_LoadInBackground","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_Legacy3D","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"StreamedResource","name":"m_Resource","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"string","name":"m_Source","size":-1,"flags":32769,"v18meta":0},{"version":1,"level":3,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16385,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"size","size":4,"flags":1,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"char","name":"data","size":1,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":null,"name":"m_Offset","size":8,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt64","name":"m_Size","size":8,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_CompressionFormat","size":4,"flags":16384,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":1,"level":0,"is_array":false,"type":"RenderTexture","name":"Base","size":-1,"flags":32768,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_Name","size":-1,"flags":557057,"v18meta":null},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":540673,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":524289,"v18meta":null},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":524289,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ForcedFallbackFormat","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_DownscaleFallback","size":1,"flags":16384,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Width","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Height","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_AntiAliasing","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_DepthFormat","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ColorFormat","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_MipMap","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_GenerateMips","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_SRGB","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseDynamicScale","size":1,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_BindMS","size":1,"flags":16384,"v18meta":null},{"version":2,"level":1,"is_array":false,"type":"GLTextureSettings","name":"m_TextureSettings","size":24,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FilterMode","size":4,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_Aniso","size":4,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"float","name":"m_MipBias","size":4,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_WrapU","size":4,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_WrapV","size":4,"flags":0,"v18meta":null},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_WrapW","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Dimension","size":4,"flags":0,"v18meta":null},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_VolumeDepth","size":4,"flags":0,"v18meta":null}]}
@@ -0,0 +1 @@
{"nodes":[{"version":3,"level":0,"is_array":false,"type":"LightingSettings","name":"Base","size":-1,"flags":32768,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_Name","size":-1,"flags":557057,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":540673,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":524289,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":524289,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_GIWorkflowMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableBakedLightmaps","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableRealtimeLightmaps","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_RealtimeEnvironmentLighting","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_BounceScale","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_AlbedoBoost","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_IndirectOutputScale","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UsingShadowmask","size":1,"flags":16384,"v18meta":0}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -2,5 +2,5 @@
module Mikunyan
# version string
VERSION = '3.9.7'
VERSION = '3.9.11'
end
+4 -4
View File
@@ -14,20 +14,20 @@ Gem::Specification.new do |spec|
spec.description = 'Library to deserialize Unity assetbundles and assets.'
spec.homepage = 'https://github.com/Ishotihadus/mikunyan'
spec.license = 'MIT'
spec.required_ruby_version = '>= 2.6.0'
spec.files = `git ls-files -z`.split("\x0").reject do |f|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
f.match(%r{^(test|spec|features)/})
end
spec.bindir = 'exe'
spec.executables = spec.files.grep(%r{^exe/}){|f| File.basename(f)}
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f)}
spec.require_paths = ['lib']
spec.extensions = ['ext/decoders/native/extconf.rb', 'ext/decoders/crunch/extconf.rb']
spec.add_dependency 'bin_utils', '~> 0'
spec.add_dependency 'chunky_png', '~> 1'
spec.add_dependency 'extlz4', '~> 0'
spec.add_dependency 'extlzma', '~> 0'
spec.add_dependency 'json', '~> 2'
spec.add_dependency 'extlzma2', '~> 2'
spec.add_development_dependency 'bundler', '~> 2'
spec.add_development_dependency 'oily_png', '~> 1'