14 Commits

Author SHA1 Message Date
Ishotihadus c32481cc13 Bump version to v3.9.13 2026-01-11 01:41:47 +09:00
Ishotihadus a462047004 Fix format 2026-01-11 01:41:41 +09:00
Ishotihadus 13711a710a Add several typetrees 2026-01-11 01:40:31 +09:00
Ishotihadus 01701b4d86 Bump version to 3.9.12 2023-06-28 14:13:12 +09:00
Ishotihadus be0d1fc84d Add TypeTrees 2023-06-28 14:13:00 +09:00
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
61 changed files with 390 additions and 119 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
+1 -1
View File
@@ -1,2 +1,2 @@
source "https://rubygems.org" source 'https://rubygems.org'
gemspec gemspec
+2 -1
View File
@@ -244,7 +244,8 @@ Available options:
- [json](https://rubygems.org/gems/json) - [json](https://rubygems.org/gems/json)
- [extlz4](https://rubygems.org/gems/extlz4) - [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) - [bin_utils](https://rubygems.org/gems/bin_utils)
- [chunky_png](https://rubygems.org/gems/chunky_png) - [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| ext_dirs.each do |dir|
Rake::ExtensionTask.new(dir) do |ext| Rake::ExtensionTask.new(dir) do |ext|
ext.lib_dir = 'lib/mikunyan' ext.lib_dir = "lib/mikunyan/#{File.dirname(dir)}"
end end
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] task default: %i[clobber compile spec]
+3
View File
@@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'mkmf' require 'mkmf'
have_library('stdc++') have_library('stdc++')
@@ -6,4 +8,5 @@ append_cppflags('-O2')
append_cppflags('-Wall') append_cppflags('-Wall')
append_cppflags('-Wextra') append_cppflags('-Wextra')
append_cppflags('-Wvla') append_cppflags('-Wvla')
create_makefile('mikunyan/decoders/crunch') create_makefile('mikunyan/decoders/crunch')
+3
View File
@@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'mkmf' require 'mkmf'
append_cppflags('-std=c11') append_cppflags('-std=c11')
@@ -5,4 +7,5 @@ append_cppflags('-O2')
append_cppflags('-Wall') append_cppflags('-Wall')
append_cppflags('-Wextra') append_cppflags('-Wextra')
append_cppflags('-Wvla') append_cppflags('-Wvla')
create_makefile('mikunyan/decoders/native') create_makefile('mikunyan/decoders/native')
+18 -8
View File
@@ -120,8 +120,10 @@ module Mikunyan
def containers def containers
obj = @path_id_table[1] obj = @path_id_table[1]
return nil unless obj.klass&.type_tree&.tree&.type == 'AssetBundle' return nil unless obj.klass&.type_tree&.tree&.type == 'AssetBundle'
parse_object(obj).m_Container.value.map do |e| 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
end end
@@ -129,8 +131,9 @@ module Mikunyan
# @param [Integer,ObjectEntry] obj path ID or object # @param [Integer,ObjectEntry] obj path ID or object
# @return [Mikunyan::BaseObject,nil] parsed object # @return [Mikunyan::BaseObject,nil] parsed object
def parse_object(obj) 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 return nil unless obj.klass&.type_tree
value_klass = Mikunyan::CustomTypes.get_custom_type(obj.klass.type_tree.tree.type, obj.class_id) 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 = parse_object_private(BinaryReader.new(obj.data, @endian), obj.klass.type_tree.tree, value_klass)
ret.object_entry = obj ret.object_entry = obj
@@ -148,7 +151,7 @@ module Mikunyan
# @param [Integer,ObjectEntry] obj path ID or object # @param [Integer,ObjectEntry] obj path ID or object
# @return [String,nil] type name # @return [String,nil] type name
def object_type(obj) 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 obj&.type
end end
@@ -226,7 +229,7 @@ module Mikunyan
end end
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 if @format >= 11
add_id_count = br.i32u add_id_count = br.i32u
@@ -238,7 +241,8 @@ module Mikunyan
reference_count = br.i32u reference_count = br.i32u
@references = Array.new(reference_count) do @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 end
@comment = br.cstr if @format >= 5 @comment = br.cstr if @format >= 5
@@ -247,7 +251,11 @@ module Mikunyan
@objects.each do |e| @objects.each do |e|
br.jmp(data_offset + e.offset) br.jmp(data_offset + e.offset)
e.data = br.read(e.size) 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
end end
@@ -290,6 +298,7 @@ module Mikunyan
elsif node.array? elsif node.array?
children.each do |child| children.each do |child|
next ret[child.name] = parse_object_private(br, child) unless child.name == 'data' 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') size = ret['size']&.value || raise('`size` node must appear before `data` node in array node')
ret.value = ret.value =
if child.children.empty? && (!child.need_align? || br.pos % 4 == 0 && child.size % 4 == 0) if child.children.empty? && (!child.need_align? || br.pos % 4 == 0 && child.size % 4 == 0)
@@ -300,7 +309,7 @@ module Mikunyan
br.read(size * child.size).force_encoding('utf-8') br.read(size * child.size).force_encoding('utf-8')
end end
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 ret['data'] = ret.value
end end
elsif children.size == 1 && children[0].array? && children[0].type == 'Array' && children[0].name == 'Array' elsif children.size == 1 && children[0].array? && children[0].type == 'Array' && children[0].name == 'Array'
@@ -308,7 +317,7 @@ module Mikunyan
ret.name = node.name ret.name = node.name
ret.type = node.type ret.type = node.type
else 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' if node.type == 'StreamingInfo'
ret.value = get_stream_blob(ret['path'].value, ret['offset'].value, ret['size'].value) ret.value = get_stream_blob(ret['path'].value, ret['offset'].value, ret['size'].value)
else else
@@ -322,6 +331,7 @@ module Mikunyan
def get_stream_blob(path, offset, size) def get_stream_blob(path, offset, size)
return nil unless path && @bundle return nil unless path && @bundle
return nil if path.empty? return nil if path.empty?
path["archive:/#{@name}/"] = '' if path.start_with?("archive:/#{@name}/") path["archive:/#{@name}/"] = '' if path.start_with?("archive:/#{@name}/")
@bundle.blobs[path]&.byteslice(offset, size) @bundle.blobs[path]&.byteslice(offset, size)
end end
+11 -6
View File
@@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'extlz4' require 'extlz4'
require 'extlzma' require 'extlzma2'
require 'mikunyan/asset' require 'mikunyan/asset'
require 'mikunyan/binary_reader' require 'mikunyan/binary_reader'
@@ -21,7 +21,7 @@ module Mikunyan
# @param [String,Integer] index # @param [String,Integer] index
# @return [Mikunyan::Asset,nil] # @return [Mikunyan::Asset,nil]
def [](index) 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 end
# Same as assets.each # Same as assets.each
@@ -59,7 +59,7 @@ module Mikunyan
@unity_version = br.cstr @unity_version = br.cstr
@generator_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 end
# @param [Mikunyan::BinaryReader] br # @param [Mikunyan::BinaryReader] br
@@ -86,17 +86,22 @@ module Mikunyan
end end
# @param [Mikunyan::BinaryReader] br # @param [Mikunyan::BinaryReader] br
def load_unity_fs(br) def load_unity_fs(br, signature)
file_size = br.i64u file_size = br.i64u
ci_block_size = br.i32u ci_block_size = br.i32u
ui_block_size = br.i32u ui_block_size = br.i32u
flags = br.i32u flags = br.i32u
br.adv(1) unless signature == 'UnityFS'
br.align(16) if @format >= 7 br.align(16) if @format >= 7
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)) 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) @guid = head.read(16)
br.align(16) unless flags & 0x200 == 0
block_count = head.i32u block_count = head.i32u
raw_data = Array.new(block_count) do raw_data = Array.new(block_count) do
u_size = head.i32u u_size = head.i32u
@@ -116,7 +121,7 @@ module Mikunyan
end end
def process_asset_entries(asset_entries) 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| @assets = asset_entries.reject(&:blob?).map do |e|
Asset.load(e.data, e.name, self) Asset.load(e.data, e.name, self)
end end
+2
View File
@@ -56,6 +56,7 @@ module Mikunyan
def read(size) def read(size)
ret = @io.read(size) ret = @io.read(size)
raise EOFError if ret.nil? || size && ret.bytesize < size raise EOFError if ret.nil? || size && ret.bytesize < size
ret ret
end end
@@ -75,6 +76,7 @@ module Mikunyan
# @return [String] string # @return [String] string
def cstr def cstr
raise EOFError if @io.eof? raise EOFError if @io.eof?
@io.each_byte.take_while(&:nonzero?).pack('C*') @io.each_byte.take_while(&:nonzero?).pack('C*')
end end
+85 -85
View File
@@ -416,91 +416,91 @@ module Mikunyan
[1126, 'PackedAssets'], [1126, 'PackedAssets'],
[1127, 'VideoClipImporter'], [1127, 'VideoClipImporter'],
[2000, 'ActivationLogComponent'], [2000, 'ActivationLogComponent'],
[100000, 'int'], [100_000, 'int'],
[100001, 'bool'], [100_001, 'bool'],
[100002, 'float'], [100_002, 'float'],
[100003, 'MonoObject'], [100_003, 'MonoObject'],
[100004, 'Collision'], [100_004, 'Collision'],
[100005, 'Vector3f'], [100_005, 'Vector3f'],
[100006, 'RootMotionData'], [100_006, 'RootMotionData'],
[100007, 'Collision2D'], [100_007, 'Collision2D'],
[100008, 'AudioMixerLiveUpdateFloat'], [100_008, 'AudioMixerLiveUpdateFloat'],
[100009, 'AudioMixerLiveUpdateBool'], [100_009, 'AudioMixerLiveUpdateBool'],
[100010, 'Polygon2D'], [100_010, 'Polygon2D'],
[100011, 'void'], [100_011, 'void'],
[19719996, 'TilemapCollider2D'], [19_719_996, 'TilemapCollider2D'],
[41386430, 'AssetImporterLog'], [41_386_430, 'AssetImporterLog'],
[73398921, 'VFXRenderer'], [73_398_921, 'VFXRenderer'],
[76251197, 'SerializableManagedRefTestClass'], [76_251_197, 'SerializableManagedRefTestClass'],
[156049354, 'Grid'], [156_049_354, 'Grid'],
[181963792, 'Preset'], [181_963_792, 'Preset'],
[277625683, 'EmptyObject'], [277_625_683, 'EmptyObject'],
[285090594, 'IConstraint'], [285_090_594, 'IConstraint'],
[293259124, 'TestObjectWithSpecialLayoutOne'], [293_259_124, 'TestObjectWithSpecialLayoutOne'],
[294290339, 'AssemblyDefinitionReferenceImporter'], [294_290_339, 'AssemblyDefinitionReferenceImporter'],
[334799969, 'SiblingDerived'], [334_799_969, 'SiblingDerived'],
[342846651, 'TestObjectWithSerializedMapStringNonAlignedStruct'], [342_846_651, 'TestObjectWithSerializedMapStringNonAlignedStruct'],
[367388927, 'SubDerived'], [367_388_927, 'SubDerived'],
[369655926, 'AssetImportInProgressProxy'], [369_655_926, 'AssetImportInProgressProxy'],
[382020655, 'PluginBuildInfo'], [382_020_655, 'PluginBuildInfo'],
[426301858, 'EditorProjectAccess'], [426_301_858, 'EditorProjectAccess'],
[468431735, 'PrefabImporter'], [468_431_735, 'PrefabImporter'],
[478637458, 'TestObjectWithSerializedArray'], [478_637_458, 'TestObjectWithSerializedArray'],
[478637459, 'TestObjectWithSerializedAnimationCurve'], [478_637_459, 'TestObjectWithSerializedAnimationCurve'],
[483693784, 'TilemapRenderer'], [483_693_784, 'TilemapRenderer'],
[638013454, 'SpriteAtlasDatabase'], [638_013_454, 'SpriteAtlasDatabase'],
[641289076, 'AudioBuildInfo'], [641_289_076, 'AudioBuildInfo'],
[644342135, 'CachedSpriteAtlasRuntimeData'], [644_342_135, 'CachedSpriteAtlasRuntimeData'],
[646504946, 'RendererFake'], [646_504_946, 'RendererFake'],
[662584278, 'AssemblyDefinitionReferenceAsset'], [662_584_278, 'AssemblyDefinitionReferenceAsset'],
[668709126, 'BuiltAssetBundleInfoSet'], [668_709_126, 'BuiltAssetBundleInfoSet'],
[687078895, 'SpriteAtlas'], [687_078_895, 'SpriteAtlas'],
[877146078, 'PlatformModuleSetup'], [877_146_078, 'PlatformModuleSetup'],
[895512359, 'AimConstraint'], [895_512_359, 'AimConstraint'],
[937362698, 'VFXManager'], [937_362_698, 'VFXManager'],
[994735392, 'VisualEffectSubgraph'], [994_735_392, 'VisualEffectSubgraph'],
[994735403, 'VisualEffectSubgraphOperator'], [994_735_403, 'VisualEffectSubgraphOperator'],
[994735404, 'VisualEffectSubgraphBlock'], [994_735_404, 'VisualEffectSubgraphBlock'],
[1001480554, 'Prefab'], [1_001_480_554, 'Prefab'],
[1027052791, 'LocalizationImporter'], [1_027_052_791, 'LocalizationImporter'],
[1091556383, 'Derived'], [1_091_556_383, 'Derived'],
[1111377672, 'PropertyModificationsTargetTestObject'], [1_111_377_672, 'PropertyModificationsTargetTestObject'],
[1114811875, 'ReferencesArtifactGenerator'], [1_114_811_875, 'ReferencesArtifactGenerator'],
[1152215463, 'AssemblyDefinitionAsset'], [1_152_215_463, 'AssemblyDefinitionAsset'],
[1154873562, 'SceneVisibilityState'], [1_154_873_562, 'SceneVisibilityState'],
[1183024399, 'LookAtConstraint'], [1_183_024_399, 'LookAtConstraint'],
[1223240404, 'MultiArtifactTestImporter'], [1_223_240_404, 'MultiArtifactTestImporter'],
[1268269756, 'GameObjectRecorder'], [1_268_269_756, 'GameObjectRecorder'],
[1325145578, 'LightingDataAssetParent'], [1_325_145_578, 'LightingDataAssetParent'],
[1386491679, 'PresetManager'], [1_386_491_679, 'PresetManager'],
[1392443030, 'TestObjectWithSpecialLayoutTwo'], [1_392_443_030, 'TestObjectWithSpecialLayoutTwo'],
[1403656975, 'StreamingManager'], [1_403_656_975, 'StreamingManager'],
[1480428607, 'LowerResBlitTexture'], [1_480_428_607, 'LowerResBlitTexture'],
[1542919678, 'StreamingController'], [1_542_919_678, 'StreamingController'],
[1571458007, 'RenderPassAttachment'], [1_571_458_007, 'RenderPassAttachment'],
[1628831178, 'TestObjectVectorPairStringBool'], [1_628_831_178, 'TestObjectVectorPairStringBool'],
[1742807556, 'GridLayout'], [1_742_807_556, 'GridLayout'],
[1766753193, 'AssemblyDefinitionImporter'], [1_766_753_193, 'AssemblyDefinitionImporter'],
[1773428102, 'ParentConstraint'], [1_773_428_102, 'ParentConstraint'],
[1803986026, 'FakeComponent'], [1_803_986_026, 'FakeComponent'],
[1818360608, 'PositionConstraint'], [1_818_360_608, 'PositionConstraint'],
[1818360609, 'RotationConstraint'], [1_818_360_609, 'RotationConstraint'],
[1818360610, 'ScaleConstraint'], [1_818_360_610, 'ScaleConstraint'],
[1839735485, 'Tilemap'], [1_839_735_485, 'Tilemap'],
[1896753125, 'PackageManifest'], [1_896_753_125, 'PackageManifest'],
[1896753126, 'PackageManifestImporter'], [1_896_753_126, 'PackageManifestImporter'],
[1953259897, 'TerrainLayer'], [1_953_259_897, 'TerrainLayer'],
[1971053207, 'SpriteShapeRenderer'], [1_971_053_207, 'SpriteShapeRenderer'],
[1977754360, 'NativeObjectType'], [1_977_754_360, 'NativeObjectType'],
[1981279845, 'TestObjectWithSerializedMapStringBool'], [1_981_279_845, 'TestObjectWithSerializedMapStringBool'],
[1995898324, 'SerializableManagedHost'], [1_995_898_324, 'SerializableManagedHost'],
[2058629509, 'VisualEffectAsset'], [2_058_629_509, 'VisualEffectAsset'],
[2058629510, 'VisualEffectImporter'], [2_058_629_510, 'VisualEffectImporter'],
[2058629511, 'VisualEffectResource'], [2_058_629_511, 'VisualEffectResource'],
[2059678085, 'VisualEffectObject'], [2_059_678_085, 'VisualEffectObject'],
[2083052967, 'VisualEffect'], [2_083_052_967, 'VisualEffect'],
[2083778819, 'LocalizationAsset'], [2_083_778_819, 'LocalizationAsset'],
[2089858483, 'ScriptedImporter'] [2_089_858_483, 'ScriptedImporter']
] ]
CLASS_ID2NAME = CLASS_ID_TABLE.to_h.freeze CLASS_ID2NAME = CLASS_ID_TABLE.to_h.freeze
+17 -7
View File
@@ -187,7 +187,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary # @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_rgb565(width, height, bin, endian = :big) 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 end
# Decode image from R16 binary # Decode image from R16 binary
@@ -197,7 +198,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary # @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_r16(width, height, bin, endian = :big) 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 end
# Decode image from RGBA4444 binary # Decode image from RGBA4444 binary
@@ -270,7 +272,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary # @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_rhalf(width, height, bin, endian = :big) 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 end
# Decode image from RG Half-float binary # Decode image from RG Half-float binary
@@ -280,7 +283,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary # @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_rghalf(width, height, bin, endian = :big) 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 end
# Decode image from RGBA Half-float binary # Decode image from RGBA Half-float binary
@@ -290,7 +294,8 @@ module Mikunyan
# @param [Symbol] endian endianness of binary # @param [Symbol] endian endianness of binary
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_rgbahalf(width, height, bin, endian = :big) 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 end
# Decode image from R float binary # Decode image from R float binary
@@ -366,7 +371,8 @@ module Mikunyan
# @param [Integer] bpp bit per pixel (2 or 4) # @param [Integer] bpp bit per pixel (2 or 4)
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_pvrtc1(width, height, bin, bpp) 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)) ChunkyPNG::Image.from_rgba_stream(width, height, DecodeHelper.decode_pvrtc1(bin, width, height, bpp == 2))
end end
@@ -449,7 +455,8 @@ module Mikunyan
# @param [String] bin binary to decode # @param [String] bin binary to decode
# @return [ChunkyPNG::Image] decoded image # @return [ChunkyPNG::Image] decoded image
def self.decode_astc(width, height, blocksize, bin) 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 end
# Decode image from crunched texture binary # Decode image from crunched texture binary
@@ -488,8 +495,10 @@ module Mikunyan
fmt = object['m_TextureFormat']&.value fmt = object['m_TextureFormat']&.value
bin = object['image data']&.value bin = object['image data']&.value
return unless width && height && fmt && bin && astc_list[fmt] return unless width && height && fmt && bin && astc_list[fmt]
bin = object['m_StreamData']&.value if bin.empty? bin = object['m_StreamData']&.value if bin.empty?
return unless bin return unless bin
header = [0x13, 0xab, 0xa1, 0x5c, astc_list[fmt], astc_list[fmt], 1].pack('C*') header = [0x13, 0xab, 0xa1, 0x5c, astc_list[fmt], astc_list[fmt], 1].pack('C*')
header << [width].pack('V').byteslice(0, 3) header << [width].pack('V').byteslice(0, 3)
header << [height].pack('V').byteslice(0, 3) header << [height].pack('V').byteslice(0, 3)
@@ -500,6 +509,7 @@ module Mikunyan
# [0.0,1.0] -> [0,255] # [0.0,1.0] -> [0,255]
def self.f2i(val) def self.f2i(val)
return 0 unless val.finite? return 0 unless val.finite?
(val * 255).round.clamp(0, 255) (val * 255).round.clamp(0, 255)
end end
end end
+3 -3
View File
@@ -95,11 +95,11 @@ module Mikunyan
if @type == 'pair' if @type == 'pair'
[@attr['first'].simplify, @attr['second'].simplify] [@attr['first'].simplify, @attr['second'].simplify]
elsif @type == 'map' && @value.is_a?(Array) 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 elsif is_struct
@attr.map{|key, val| [key, val.simplify]}.to_h @attr.transform_values(&:simplify)
elsif @value.is_a?(Array) 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) elsif @value.is_a?(ObjectValue)
@value.simplify @value.simplify
else else
+3 -1
View File
@@ -20,7 +20,8 @@ module Mikunyan
# @attr [Integer,nil] v18meta # @attr [Integer,nil] v18meta
# @attr [Mikunyan::TypeTree::Node,nil] parent ̑ # @attr [Mikunyan::TypeTree::Node,nil] parent ̑
# @attr [Array<Mikunyan::TypeTree::Node>] children # @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? def need_align?
flags & 0x4000 != 0 flags & 0x4000 != 0
end end
@@ -119,6 +120,7 @@ module Mikunyan
def self.load_default(class_id, hash) def self.load_default(class_id, hash)
file = File.expand_path("../typetrees/#{class_id}/#{hash.unpack1('H*')}.json", __FILE__) file = File.expand_path("../typetrees/#{class_id}/#{hash.unpack1('H*')}.json", __FILE__)
return nil unless File.file?(file) return nil unless File.file?(file)
TypeTree.deserialize(JSON.parse(File.read(file))) TypeTree.deserialize(JSON.parse(File.read(file)))
end end
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":7,"level":0,"is_array":false,"type":"MonoScript","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_ExecutionOrder","size":4,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":null,"name":"m_PropertiesHash","size":16,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[0]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[1]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[2]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[3]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[4]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[5]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[6]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[7]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[8]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[9]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[10]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[11]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[12]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[13]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[14]","size":1,"flags":16,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"UInt8","name":"bytes[15]","size":1,"flags":16,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_ClassName","size":-1,"flags":32784,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16401,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":17,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":17,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_Namespace","size":-1,"flags":32784,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16401,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":17,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":17,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"string","name":"m_AssemblyName","size":-1,"flags":32784,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16401,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":17,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"char","name":"data","size":1,"flags":17,"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
@@ -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
@@ -0,0 +1 @@
{"nodes":[{"version":3,"level":0,"is_array":false,"type":"Canvas","name":"Base","size":53,"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":"int","name":"m_RenderMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Camera>","name":"m_Camera","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":"float","name":"m_PlaneDistance","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_PixelPerfect","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_ReceivesEvents","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_OverrideSorting","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_OverridePixelPerfect","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_SortingBucketNormalizedSize","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_VertexColorAlwaysGammaSpace","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_AdditionalShaderChannelsFlag","size":4,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_SortingLayerID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"SInt16","name":"m_SortingOrder","size":2,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"SInt8","name":"m_TargetDisplay","size":1,"flags":1,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":3,"level":0,"is_array":false,"type":"Canvas","name":"Base","size":57,"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":"int","name":"m_RenderMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Camera>","name":"m_Camera","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":"float","name":"m_PlaneDistance","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_PixelPerfect","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_ReceivesEvents","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_OverrideSorting","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_OverridePixelPerfect","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_SortingBucketNormalizedSize","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_VertexColorAlwaysGammaSpace","size":1,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_AdditionalShaderChannelsFlag","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_UpdateRectTransformForStandalone","size":4,"flags":16384,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_SortingLayerID","size":4,"flags":8388609,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"SInt16","name":"m_SortingOrder","size":2,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"SInt8","name":"m_TargetDisplay","size":1,"flags":1,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":1,"level":0,"is_array":false,"type":"RectTransform","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":"Quaternionf","name":"m_LocalRotation","size":16,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"w","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalPosition","size":12,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalScale","size":12,"flags":2113536,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_Children","size":-1,"flags":32833,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16449,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":65,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"PPtr<Transform>","name":"data","size":12,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Transform>","name":"m_Father","size":12,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_AnchorMin","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_AnchorMax","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_AnchoredPosition","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_SizeDelta","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_Pivot","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":2,"level":0,"is_array":false,"type":"RectTransform","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":"Quaternionf","name":"m_LocalRotation","size":16,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"w","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalPosition","size":12,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalScale","size":12,"flags":2113536,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_Children","size":-1,"flags":32833,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16449,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":65,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"PPtr<Transform>","name":"data","size":12,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Transform>","name":"m_Father","size":12,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":1,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_AnchorMin","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_AnchorMax","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_AnchoredPosition","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_SizeDelta","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_Pivot","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"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
@@ -0,0 +1 @@
{"nodes":[{"version":1,"level":0,"is_array":false,"type":"Transform","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":"Quaternionf","name":"m_LocalRotation","size":16,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"w","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalPosition","size":12,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalScale","size":12,"flags":2113536,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_Children","size":-1,"flags":32833,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16449,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":65,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"PPtr<Transform>","name":"data","size":12,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Transform>","name":"m_Father","size":12,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":1,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":2,"level":0,"is_array":false,"type":"Transform","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":"Quaternionf","name":"m_LocalRotation","size":16,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"w","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalPosition","size":12,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector3f","name":"m_LocalScale","size":12,"flags":2113536,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"z","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"vector","name":"m_Children","size":-1,"flags":32833,"v18meta":0},{"version":1,"level":2,"is_array":true,"type":"Array","name":"Array","size":-1,"flags":16449,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"int","name":"size","size":4,"flags":65,"v18meta":0},{"version":1,"level":3,"is_array":false,"type":"PPtr<Transform>","name":"data","size":12,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":65,"v18meta":0},{"version":1,"level":4,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":65,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<Transform>","name":"m_Father","size":12,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"int","name":"m_FileID","size":4,"flags":1,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"SInt64","name":"m_PathID","size":8,"flags":1,"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":2,"level":0,"is_array":false,"type":"CircleCollider2D","name":"Base","size":44,"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":"float","name":"m_Density","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"PPtr<PhysicsMaterial2D>","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_UsedByEffector","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UsedByComposite","size":1,"flags":8404992,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"Vector2f","name":"m_Offset","size":8,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"x","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":2,"is_array":false,"type":"float","name":"y","size":4,"flags":2097152,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"float","name":"m_Radius","size":4,"flags":0,"v18meta":0}]}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes":[{"version":3,"level":0,"is_array":false,"type":"RenderTexture","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":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Height","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_AntiAliasing","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_MipCount","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_DepthFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ColorFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_MipMap","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_GenerateMips","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_SRGB","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseDynamicScale","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_BindMS","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableCompatibleFormat","size":1,"flags":16384,"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_Dimension","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_VolumeDepth","size":4,"flags":0,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":6,"level":0,"is_array":false,"type":"RenderTexture","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":"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":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Height","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_AntiAliasing","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_MipCount","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_DepthStencilFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ColorFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_MipMap","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_GenerateMips","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_SRGB","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseDynamicScale","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseDynamicScaleExplicit","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_BindMS","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableCompatibleFormat","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableRandomWrite","size":1,"flags":16384,"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_Dimension","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_VolumeDepth","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ShadowSamplingMode","size":4,"flags":0,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":5,"level":0,"is_array":false,"type":"RenderTexture","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":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_Height","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_AntiAliasing","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_MipCount","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_DepthStencilFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ColorFormat","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_MipMap","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_GenerateMips","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_SRGB","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_UseDynamicScale","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_BindMS","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableCompatibleFormat","size":1,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_EnableRandomWrite","size":1,"flags":16384,"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_Dimension","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_VolumeDepth","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_ShadowSamplingMode","size":4,"flags":0,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":4,"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}]}
@@ -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}]}
@@ -0,0 +1 @@
{"nodes":[{"version":9,"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":"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
@@ -0,0 +1 @@
{"nodes":[{"version":5,"level":0,"is_array":false,"type":"Animator","name":"Base","size":52,"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<Avatar>","name":"m_Avatar","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":"PPtr<RuntimeAnimatorController>","name":"m_Controller","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_CullingMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_UpdateMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_ApplyRootMotion","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_LinearVelocityBlending","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_StabilizeFeet","size":1,"flags":8404992,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_HasTransformHierarchy","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_AllowConstantClipSamplingOptimization","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_KeepAnimatorStateOnDisable","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_WriteDefaultValuesOnDisable","size":1,"flags":8404992,"v18meta":0}]}
@@ -0,0 +1 @@
{"nodes":[{"version":7,"level":0,"is_array":false,"type":"Animator","name":"Base","size":53,"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<Avatar>","name":"m_Avatar","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":"PPtr<RuntimeAnimatorController>","name":"m_Controller","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_CullingMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"int","name":"m_UpdateMode","size":4,"flags":0,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_ApplyRootMotion","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_LinearVelocityBlending","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_StabilizeFeet","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_AnimatePhysics","size":1,"flags":8404992,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_HasTransformHierarchy","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_AllowConstantClipSamplingOptimization","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_KeepAnimatorStateOnDisable","size":1,"flags":8388608,"v18meta":0},{"version":1,"level":1,"is_array":false,"type":"bool","name":"m_WriteDefaultValuesOnDisable","size":1,"flags":8404992,"v18meta":0}]}
+1 -1
View File
@@ -2,5 +2,5 @@
module Mikunyan module Mikunyan
# version string # version string
VERSION = '3.9.9' VERSION = '3.9.13'
end end
+4 -4
View File
@@ -14,20 +14,20 @@ Gem::Specification.new do |spec|
spec.description = 'Library to deserialize Unity assetbundles and assets.' spec.description = 'Library to deserialize Unity assetbundles and assets.'
spec.homepage = 'https://github.com/Ishotihadus/mikunyan' spec.homepage = 'https://github.com/Ishotihadus/mikunyan'
spec.license = 'MIT' 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)/}) f.match(%r{^(test|spec|features)/})
end end
spec.bindir = 'exe' 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.require_paths = ['lib']
spec.extensions = ['ext/decoders/native/extconf.rb', 'ext/decoders/crunch/extconf.rb'] spec.extensions = ['ext/decoders/native/extconf.rb', 'ext/decoders/crunch/extconf.rb']
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 'extlz4', '~> 0' spec.add_dependency 'extlz4', '~> 0'
spec.add_dependency 'extlzma', '~> 0' spec.add_dependency 'extlzma2', '~> 2'
spec.add_dependency 'json', '~> 2'
spec.add_development_dependency 'bundler', '~> 2' spec.add_development_dependency 'bundler', '~> 2'
spec.add_development_dependency 'oily_png', '~> 1' spec.add_development_dependency 'oily_png', '~> 1'
+89
View File
@@ -0,0 +1,89 @@
# frozen_string_literal: true
require 'extlz4'
require 'mikunyan'
def unlz4(bin)
header = bin.unpack('V4')
LZ4.raw_decode(bin.byteslice(16, header[2]))
end
exit(1) if ARGV.empty?
files = []
opts = { recursive: false }
ARGV.each do |arg|
if ['--recursive', '-r'].include?(arg)
opts[:recursive] = true
else
files << arg
end
end
files = files.flat_map do |f|
if File.directory?(f)
Dir.glob(opts[:recursive] ? "#{f}/**/*" : "#{f}/*")
else
f
end
end
files.select! {|e| File.file?(e)}
count = files.size
files.shuffle.each_with_index do |file, idx|
type =
File.open(file, 'rb') do |io|
sig = io.read(5)
next :raw if sig == 'Unity'
sig = (sig + io.read(11)).unpack('V4')
:cgss_lz4 if sig[0] == 100 && sig[3] == 1
end
next unless type
file_output = false
print "\r\e[0K[#{idx + 1}/#{count}] #{file}"
bundle =
case type
when :raw
Mikunyan::AssetBundle.file(file)
when :cgss_lz4
Mikunyan::AssetBundle.load(unlz4(File.binread(file)))
end
bundle.each_asset do |asset|
print "\r\e[0K[#{idx + 1}/#{count}] #{file}: #{asset.name}"
asset_output = false
asset.each_object do |obj|
result = obj.parse
unless result
print "\r\e[0K"
unless asset_output
unless file_output
puts file
file_output = true
end
puts " asset `#{asset.name}`"
asset_output = true
end
puts " \e[34m#{format('% 17x', obj.path_id)}: Skipped (#{obj.type})\e[0m"
end
# if obj.parse
# puts " \e[32m#{format('% 17x', obj.path_id)}: Success\e[0m"
# else
# puts " \e[34m#{format('% 17x', obj.path_id)}: Skip (#{obj.type})\e[0m"
# end
rescue StandardError
print "\r\e[0K"
unless asset_output
unless file_output
puts file
file_output = true
end
puts " asset `#{asset.name}`"
asset_output = true
end
puts " \e[1m\e[31m#{format('% 17x', obj.path_id)}: Failed (#{$!})\e[0m"
puts $!
end
end
end
puts
+60
View File
@@ -0,0 +1,60 @@
# frozen_string_literal: true
require 'extlz4'
require 'mikunyan'
def unlz4(bin)
header = bin.unpack('V4')
LZ4.raw_decode(bin.byteslice(16, header[2]))
end
exit(1) if ARGV.empty?
files = []
ARGV.each do |arg|
if File.directory?(arg)
files += Dir.glob("#{arg}/**/*")
else
files << arg
end
end
files.select! {|e| File.file?(e)}
count = files.size
files.shuffle.each_with_index do |file, idx|
type =
File.open(file, 'rb') do |io|
sig = io.read(5)
next :raw if sig == 'Unity'
sig = (sig + io.read(11)).unpack('V4')
:cgss_lz4 if sig[0] == 100 && sig[3] == 1
end
next unless type
print "\r\e[0K[#{idx + 1}/#{count}] #{file}"
bundle =
case type
when :raw
Mikunyan::AssetBundle.file(file)
when :cgss_lz4
Mikunyan::AssetBundle.load(unlz4(File.binread(file)))
end
bundle.each_asset do |asset|
print "\r\e[0K[#{idx + 1}/#{count}] #{file}: #{asset.name}"
asset.klasses.each do |klass|
hash = klass.hash.unpack1('H*')
next unless hash.size == 32 && klass.type_tree
dir = "lib/mikunyan/typetrees/#{klass.class_id}"
json_file = "#{dir}/#{hash}.json"
next if File.exist?(json_file)
puts "\r\e[0K[#{idx + 1}/#{count}] #{file}: #{asset.name}"
puts " #{klass.type_tree.tree.type} (#{klass.class_id}) -> #{hash}"
Dir.mkdir(dir) unless File.directory?(dir)
File.binwrite(json_file, JSON.generate(klass.type_tree.serialize))
end
end
end
puts