This commit is contained in:
Bas Couwenberg 2024-11-15 13:53:25 +01:00 committed by GitHub
commit f1c53f6464
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

14
rpatool
View file

@ -69,6 +69,8 @@ class RenPyArchive:
RPA2_MAGIC = 'RPA-2.0 '
RPA3_MAGIC = 'RPA-3.0 '
RPA3_2_MAGIC = 'RPA-3.2 '
DMA8_2_MAGIC = 'DMA-8.2 '
DMA8_3_MAGIC = 'DMA-8.3 '
# For backward compatibility, otherwise Python3-packed archives won't be read by Python2
PICKLE_PROTOCOL = 2
@ -92,7 +94,11 @@ class RenPyArchive:
self.handle.seek(0)
magic = self.handle.readline().decode('utf-8')
if magic.startswith(self.RPA3_2_MAGIC):
if magic.startswith(self.DMA8_3_MAGIC):
return 'dma-8.3'
elif magic.startswith(self.DMA8_2_MAGIC):
return 'dma-8.2'
elif magic.startswith(self.RPA3_2_MAGIC):
return 3.2
elif magic.startswith(self.RPA3_MAGIC):
return 3
@ -108,12 +114,12 @@ class RenPyArchive:
self.handle.seek(0)
indexes = None
if self.version in [2, 3, 3.2]:
if self.version in [2, 3, 3.2, 'dma-8.2', 'dma-8.3']:
# Fetch metadata.
metadata = self.handle.readline()
vals = metadata.split()
offset = int(vals[1], 16)
if self.version == 3:
if self.version in [3, 'dma-8.2', 'dma-8.3']:
self.key = 0
for subkey in vals[2:]:
self.key ^= int(subkey, 16)
@ -128,7 +134,7 @@ class RenPyArchive:
indexes = _unpickle(contents)
# Deobfuscate indexes.
if self.version in [3, 3.2]:
if self.version in [3, 3.2, 'dma-8.2', 'dma-8.3']:
obfuscated_indexes = indexes
indexes = {}
for i in obfuscated_indexes.keys():