缩小差异?

Hep*_*r44 0 python lua zlib deflate

所以我试图创建一个 python 脚本来为 MMF2+Lua 制作的游戏生成一个关卡,但我遇到了一些我不知道如何修复的问题。
生成一个带有游戏边框的 16x16 空关卡会给出以下结果(缩小):
78 5E 63 20 0A FC 27 00 40 86 8C AA C1 1D 02 23 3D 7C 08 27 32 00 9F 62 FE 10
它应该是一个扁平的 18x18 数组,其边缘具有0x00,其余部分具有0xFF
我的 python 脚本使用完全相同的输入生成此数据zlib.deflate
78 9C 63 60 20 06 FC 27 00 46 D5 8C AA C1 A7 86 30 00 00 9F 62 FE 10
它们是不同的,但膨胀它们会给出相同的数据。但是,当我将数据放入游戏时,尝试加载关卡时它崩溃了。
这两个值之间到底有什么不同,我可以修复它吗?

Mar*_*ler 5

这是同一数据的两种不同编码,都是有效的。它们的不同之处在于副本的顺序。以下是两者的可读形式,首先来自游戏:

! infgen 2.6 output
!
zlib
!
last
fixed
literal 0
match 37 1
literal 255
match 31 1
match 4 69
match 258 36
match 26 258
match 256 288
match 34 613
end
!
adler
Run Code Online (Sandbox Code Playgroud)

然后从 zlib :

! infgen 2.6 output
!
zlib
!
last
fixed
literal 0 0
match 36 1
literal 255
match 31 1
match 258 36
match 258 36
match 28 36
match 34 1
end
!
adler
Run Code Online (Sandbox Code Playgroud)

literal给出插入到流中的一个或多个字节。match是流中先前字节的副本(可能与正在复制的字节重叠),其中第一个参数是要复制的字节数,第二个参数是要复制的距离(以字节为单位)。