mirror of
https://github.com/drmext/MonkeyBusiness.git
synced 2024-11-28 01:10:53 +01:00
34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
class EamuseLZ77:
|
|
@staticmethod
|
|
def decode(data):
|
|
data_length = len(data)
|
|
offset = 0
|
|
output = []
|
|
while offset < data_length:
|
|
flag = data[offset]
|
|
offset += 1
|
|
for bit in range(8):
|
|
if flag & (1 << bit):
|
|
output.append(data[offset])
|
|
offset += 1
|
|
else:
|
|
if offset >= data_length:
|
|
break
|
|
lookback_flag = int.from_bytes(data[offset : offset + 2], "big")
|
|
lookback_length = (lookback_flag & 0x000F) + 3
|
|
lookback_offset = lookback_flag >> 4
|
|
offset += 2
|
|
if lookback_flag == 0:
|
|
break
|
|
for _ in range(lookback_length):
|
|
loffset = len(output) - lookback_offset
|
|
if loffset <= 0 or loffset >= len(output):
|
|
output.append(0)
|
|
else:
|
|
output.append(output[loffset])
|
|
return bytes(output)
|
|
|
|
# @staticmethod
|
|
# def encode(data):
|
|
# return bytes(output)
|