本文件描述了 PvZ Toolkit/Tools 中所使用的阵型字符串格式. 1. 阵型字符串为标准的 Base64 编码格式, 同时兼容 Base64URL 格式. (字符串理论长度大约为 18~164.) 2. 解码后的二进制字节流需要先与 0x54 (84) 进行异或运算. 3. 数据流为若干个字节的 zlib 压缩数据, 后跟 1 个字节的 RS 信息位. +=====================+----+ | ... zlib stream ... | RS | +=====================+----+ (压缩数据理论长度大约为 12~121 字节.) 4. RS 信息位分为两个部分, 分别表示钉耙位置和场景地图. 0000 0000 R S R: 钉耙位置, 不存在用 0 表示, 存在时取值为所在行数, 最上方为第 1 行. S: 场景地图, 取值 0 1 2 3 4 5 分别表示 白天 黑夜 泳池 雾夜 屋顶 月夜. 5. 压缩数据所用 zlib 版本为 1.2.11, 使用最高等级压缩 (Z_BEST_COMPRESSION). 解压后得到场上植物数据, 由若干个长度为两个字节的 GRID 结构组成. 0 1 +---+---+ | GRID | +---+---+ 当场景为泳池或者雾夜 (S==2 || S==3) 的时候结构总数量为 54, 其余为 45. 所有 GRID 按照从左到右从上到下的书写顺序排布, 对应实际地图位置. 6. 每个 GRID 结构表示场上一个格子的内容, 被分为若干个部分. 000000 0 0 00 0 0 0 0 0 0 P P P B B K K C C L I A I I I | 比特位 | 长度 | 标识 | 含义 | | ------ | ---- | ---- | ---- | | 10~15 | 6 | P | 主要植物类型 | | 9 | 1 | PI | 主要植物是否是模仿者 | | 8 | 1 | PA | 主要植物是否睡醒 | | 6~7 | 2 | B | 是否存在底部植物或墓碑 | | 5 | 1 | BI | 底部植物是否是模仿者 | | 4 | 1 | K | 是否存在南瓜壳 | | 3 | 1 | KI | 南瓜壳是否是模仿者 | | 2 | 1 | C | 是否存在咖啡豆 | | 1 | 1 | CI | 咖啡豆是否是模仿者 | | 0 | 1 | L | 是否存在梯子 | P: 0 表示不存在植物, 值为 1~48 时表示存在代号为 0~47 的植物. PI: 当 P 有效时表示植物是否是模仿者, 0 普通 1 模仿者. PA: 当 P 有效时表示植物是否睡醒, 0 睡着 1 睡醒. B: 0 表示不存在底部植物, 1 睡莲 2 花盆. 3 表示存在墓碑. BI: 当底部有睡莲或者花盆时用来表示其是否是模仿者, 0 普通 1 模仿者. K: 0 表示不存在南瓜壳, 1 表示存在. KI: 当存在南瓜壳时用来表示其是否是模仿者, 0 普通 1 模仿者. C: 0 表示不存在咖啡豆, 1 表示存在. CI: 当存在咖啡豆时用来表示其是否是模仿者, 0 普通 1 模仿者. L: 0 表示不存在梯子, 1 表示存在. 7. 其他细节. 钉耙位置在五行场地不大于 5, 在六行场地不大于 6 且不位于水路. (当前版本的实现中钉耙位置值尚未被使用.) 放置/种植推荐顺序: 钉耙 睡莲/花盆 主要植物 南瓜壳 咖啡豆 墓碑 梯子. P 不应该为 睡莲/花盆/南瓜壳/咖啡豆 以及大于 48 的数值. PA 用于白天场景 (S==0 || S==2 || S==4) 判断蘑菇类植物是否需要唤醒操作. 8. 参考资料: https://tools.ietf.org/html/rfc4648 https://www.ietf.org/rfc/rfc1950.txt https://pvz.lmintlcx.com/toolkit/ https://pvz.lmintlcx.com/tools/ ========= 版本: 1.0.1 作者: lmintlcx 日期: 2020/10/03