@@ -41,7 +41,10 @@ def __init__(
4141 if signature == "UnityArchive" :
4242 raise NotImplementedError ("BundleFile - UnityArchive" )
4343 elif signature in ["UnityWeb" , "UnityRaw" ]:
44- m_DirectoryInfo , blocksReader = self .read_web_raw (reader )
44+ if self .version == 6 :
45+ m_DirectoryInfo , blocksReader = self .read_fs (reader )
46+ else :
47+ m_DirectoryInfo , blocksReader = self .read_web_raw (reader )
4548 elif signature == "UnityFS" :
4649 m_DirectoryInfo , blocksReader = self .read_fs (reader )
4750 else :
@@ -98,6 +101,10 @@ def read_fs(self, reader: EndianBinaryReader):
98101 uncompressedSize = reader .read_u_int ()
99102 dataflagsValue = reader .read_u_int ()
100103
104+ # UnityWeb version 6
105+ if self .signature != "UnityFS" :
106+ reader .read_byte ()
107+
101108 version = self .parse_version ()
102109 # https://issuetracker.unity3d.com/issues/files-within-assetbundles-do-not-start-on-aligned-boundaries-breaking-patching-on-nintendo-switch
103110 # Unity CN introduced encryption before the alignment fix was introduced.
@@ -116,19 +123,12 @@ def read_fs(self, reader: EndianBinaryReader):
116123 if self .dataflags & self .dataflags .UsesAssetBundleEncryption :
117124 self .decryptor = ArchiveStorageManager .ArchiveStorageDecryptor (reader )
118125
119- # check if we need to align the reader
120- # - align to 16 bytes and check if all are 0
121- # - if not, reset the reader to the previous position
122- if self .version >= 7 :
126+ # if header version is 7 or later we need to align the reader
127+ # for 2019.4.15 and later, version should be 7 and aligned
128+ # but some games in these versions somehow has version 6 while aligned
129+ if self .version >= 7 or ( version [ 0 ] == 2019 and version >= ( 2019 , 4 , 15 )) :
123130 reader .align_stream (16 )
124131 self ._uses_block_alignment = True
125- elif version >= (2019 , 4 ):
126- pre_align = reader .Position
127- align_data = reader .read ((16 - pre_align % 16 ) % 16 )
128- if any (align_data ):
129- reader .Position = pre_align
130- else :
131- self ._uses_block_alignment = True
132132
133133 start = reader .Position
134134 if self .dataflags & ArchiveFlags .BlocksInfoAtTheEnd : # kArchiveBlocksInfoAtTheEnd
0 commit comments