Unity 2017 compatibility
This commit is contained in:
@@ -25,7 +25,7 @@ class AssetEdit:
|
|||||||
def filePath(self):
|
def filePath(self):
|
||||||
return sys.argv[2] + "/" + self.file
|
return sys.argv[2] + "/" + self.file
|
||||||
|
|
||||||
def pngToTexture2D(self, pngData):
|
def pngToTexture2D(self, pngData, unityVersion):
|
||||||
image = Image.open(self.filePath)
|
image = Image.open(self.filePath)
|
||||||
image = ImageOps.flip(image)
|
image = ImageOps.flip(image)
|
||||||
imageData = image.convert("RGBA").tobytes()
|
imageData = image.convert("RGBA").tobytes()
|
||||||
@@ -43,7 +43,12 @@ class AssetEdit:
|
|||||||
output += (2).to_bytes(4, byteorder="little") # m_FilterMode
|
output += (2).to_bytes(4, byteorder="little") # m_FilterMode
|
||||||
output += (2).to_bytes(4, byteorder="little") # m_Aniso
|
output += (2).to_bytes(4, byteorder="little") # m_Aniso
|
||||||
output += (0).to_bytes(4, byteorder="little") # m_MipBias
|
output += (0).to_bytes(4, byteorder="little") # m_MipBias
|
||||||
output += (1).to_bytes(4, byteorder="little") # m_WrapMode
|
if unityVersion[0] == 5:
|
||||||
|
output += (1).to_bytes(4, byteorder="little") # m_WrapMode
|
||||||
|
elif unityVersion[0] == 2017:
|
||||||
|
output += (1).to_bytes(4, byteorder="little") * 3 # m_wrap{U,V,W}
|
||||||
|
else:
|
||||||
|
sys.stderr.write("Warning: Unrecognized Unity version: " + str(unityVersion[0]))
|
||||||
output += (0).to_bytes(4, byteorder="little") # m_LightmapFormat
|
output += (0).to_bytes(4, byteorder="little") # m_LightmapFormat
|
||||||
output += (1).to_bytes(4, byteorder="little") # m_ColorSpace
|
output += (1).to_bytes(4, byteorder="little") # m_ColorSpace
|
||||||
output += len(imageData).to_bytes(4, byteorder="little")
|
output += len(imageData).to_bytes(4, byteorder="little")
|
||||||
@@ -123,8 +128,7 @@ class AssetEdit:
|
|||||||
obj = assets.objects[self.id]
|
obj = assets.objects[self.id]
|
||||||
self.type = obj.type_id
|
self.type = obj.type_id
|
||||||
|
|
||||||
@property
|
def bytes(self, unityVersion):
|
||||||
def bytes(self):
|
|
||||||
out = (2).to_bytes(4, byteorder='little') # Unknown
|
out = (2).to_bytes(4, byteorder='little') # Unknown
|
||||||
out += b"\0" * 3 # Unknown
|
out += b"\0" * 3 # Unknown
|
||||||
out += self.id.to_bytes(4, byteorder='little') # Unknown
|
out += self.id.to_bytes(4, byteorder='little') # Unknown
|
||||||
@@ -134,7 +138,7 @@ class AssetEdit:
|
|||||||
with open(self.filePath, "rb") as file:
|
with open(self.filePath, "rb") as file:
|
||||||
fileBytes = file.read()
|
fileBytes = file.read()
|
||||||
if self.shouldDecode:
|
if self.shouldDecode:
|
||||||
fileBytes = self.pngToTexture2D(fileBytes)
|
fileBytes = self.pngToTexture2D(fileBytes, unityVersion)
|
||||||
out += len(fileBytes).to_bytes(4, byteorder='little') # Payload Size
|
out += len(fileBytes).to_bytes(4, byteorder='little') # Payload Size
|
||||||
out += b"\0" * 4 # Unknown
|
out += b"\0" * 4 # Unknown
|
||||||
out += fileBytes # Payload
|
out += fileBytes # Payload
|
||||||
@@ -169,6 +173,7 @@ for file in os.listdir(sys.argv[2]):
|
|||||||
|
|
||||||
with open(sys.argv[1], "rb") as assetsFile:
|
with open(sys.argv[1], "rb") as assetsFile:
|
||||||
bundle = assetsFile.read()
|
bundle = assetsFile.read()
|
||||||
|
unityVersion = [int(x) for x in bundle[20:28].decode("utf-8").rstrip("\0").split(".")]
|
||||||
assetsFile.seek(0)
|
assetsFile.seek(0)
|
||||||
assets = Asset.from_file(assetsFile)
|
assets = Asset.from_file(assetsFile)
|
||||||
for edit in edits:
|
for edit in edits:
|
||||||
@@ -180,5 +185,5 @@ edits = sorted(edits, key=lambda x: x.id)
|
|||||||
with open(sys.argv[3], "wb") as outputFile:
|
with open(sys.argv[3], "wb") as outputFile:
|
||||||
outputFile.write(generateHeader(len(edits)))
|
outputFile.write(generateHeader(len(edits)))
|
||||||
for edit in edits:
|
for edit in edits:
|
||||||
outputFile.write(edit.bytes)
|
outputFile.write(edit.bytes(unityVersion))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user