【问题标题】:DEFLATE discrepancy?缩小差异?
【发布时间】:2021-12-23 10:02:46
【问题描述】:

所以我正在尝试创建一个 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
完全相同的输入生成它 它们是不同的,但对它们进行膨胀会给出相同的确切数据。但是,当我将数据放入游戏时,尝试加载关卡时它会崩溃。
这两个值之间有什么真正不同,我可以解决它吗?

【问题讨论】:

  • 请发布您用来放气和充气的 Python 脚本。
  • 我已经弄清楚了,但我还不能标记为已回答。在元数据的其他地方,它交换了一些我不知道的位。现在可以了。尽管如此,我还是想知道它们之间有什么不同
  • 您可以为自己的问题写一个答案,然后接受答案。

标签: python lua zlib deflate


【解决方案1】:

这是同一数据的两种不同编码,均有效。它们的复制顺序不同。以下是两者的可读形式,首先来自游戏:

! 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

然后来自 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

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

【讨论】:

  • 你不是像 Adler-32 校验和算法的作者那样的 Mark Adler 吗?
  • 我是…………
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多