出于对 Lanzainc
系列产品的联动、兼容及其它功能的考虑,现设计在系列范围内通用的存档封装
下文中,Lanzainc 存档数据格式 统一简称为 LSD
LSD
采用和 PNG
文件相同的结构,以 PNG 数据块为基础组成部分,即:
名称 | 设计尺寸 | 说明 |
---|---|---|
PNG 标识符 | 8 字节 | 89 50 4E 47 0D 0A 1A 0A |
PNG 数据块 | 不定长 | 任意数据块,可以是图像数据,也可以是自定义数据 |
…… | …… | …… |
PNG 结尾块 | 12 字节 | 标识为 IEND 的数据块,不持有实际数据 |
顺位 | 名称 | 设计尺寸 | 说明 |
---|---|---|---|
1 | 长度(大端序) | 4 字节 | 该数据块中存储实际数据的长度 |
2 | 类型 | 4 字节 | 4 字节长的 ASCII 字符组,标识该数据块的类型 |
3 | 实际数据 | 不定长 | 该数据块中存储的实际数据 |
4 | CRC(大端序) | 4 字节 | 校验值 |
下列的数据块类型,在当前 PNG 结构中很常见,并发挥一定的作用;
它们不会(也不应)影响 LSD
的行为,在读写时保持其原样存在即可
类型 | 说明 | 数目 | 位置 |
---|---|---|---|
IHDR |
文件头数据块 | 1 个 | 第一块 |
cHRM |
基色和白色点数据块 | 至多 1 个 | 在 PLTE 和 IDAT 之前 |
gAMA |
图像 γ 数据块 | 至多 1 个 | 在 PLTE 和 IDAT 之前 |
sBIT |
样本有效位数据块 | 至多 1 个 | 在 PLTE 和 IDAT 之前 |
PLTE |
调色板数据块 | 至多 1 个 | 在 IDAT 之前 |
bKGD |
背景颜色数据块 | 至多 1 个 | 在 PLTE 之后;IDAT 之前 |
hIST |
图像直方图数据块 | 至多 1 个 | 在 PLTE 之后;IDAT 之前 |
tRNS |
图像透明数据块 | 至多 1 个 | 在 PLTE 之后;IDAT 之前 |
oFFs |
(专用公共数据块) | 至多 1 个 | 在 IDAT 之前 |
pHYs |
物理像素尺寸数据块 | 至多 1 个 | 在 IDAT 之前 |
sCAL |
(专用公共数据块) | 至多 1 个 | 在 IDAT 之前 |
IDAT |
图像数据块 | 至少 1 个 | 和其它 IDAT 连续 |
tIME |
图像最后修改时间数据块 | 至多 1 个 | 任意 |
tEXt |
文本信息数据块 | 任意个 | 任意 |
zTXt |
压缩文本数据块 | 任意个 | 任意 |
fRAc |
(专用公共数据块) | 任意个 | 任意 |
glFg |
(专用公共数据块) | 任意个 | 任意 |
glFt |
(专用公共数据块) | 任意个 | 任意 |
glFx |
(专用公共数据块) | 任意个 | 任意 |
IEND |
文件尾数据块 | 1 个 | 最后一块 |
LSD
定义的数据块类型下列的数据块类型,是真正组成 LSD
的部分
类型 | 说明 | 数目 | 位置 |
---|---|---|---|
.LSD |
LSD 元数据块 |
至多 1 个 | 任意 |
.LDT |
LSD 普通数据块 |
任意个 | 在 .LSD 之后 |
.LRF |
LSD 运行时文件数据块 |
任意个 | 在 .LSD 之后 |
.LOM |
LSD ROM 数据块 |
任意个 | 在 .LSD 之后 |
.LSD
元数据块只有此数据块存在时,此 PNG 文件才被视为 LSD
元数据块应有如下的标准结构:
顺位 | 名称 | 设计尺寸 | 说明 |
---|---|---|---|
1 | 产品标识码 | 8 字节 | 8 字节长的 ASCII 字符组,标识该文件存储的是源于哪个系列产品的数据 |
2 | 版本信息 | 8 字节 | 8 字节长的 ASCII 字符组,标识该文件存储的数据版本,可用于兼容性判断等 |
3 | 端序标记 | 1 字节 | 表示最后保存数据时使用的字节序 0x0A 为大端序;0x0C 为小端序 |
4 | 保留(填充)字段 0 | 3 字节 | 暂无使用场景 |
5 | 保留(填充)字段 1 | 4 字节 | 暂无使用场景 |
6 | 保留(填充)字段 2 | 8 字节 | 暂无使用场景 |
.LDT
普通数据块(LSD
Data)一般来说,此数据块都是自定义的数据,可以根据元数据块的信息决定解析的方式;这也应该是最通用的数据部分
.LRF
运行时文件数据块(LSD
Runtime File)此数据块存储在运行时进行释放的文件数据;即:读档时,此数据块的全部内容会被释放到 目标目录
下,存档时,这些内容也应以此数据块的形式存入存档中;游戏结束时,这些文件需被清理
典型的应用场景为数据库
本数据块应有如下的标准结构:
顺位 | 名称 | 设计尺寸 | 说明 |
---|---|---|---|
1 | 目标目录类型 | 1 字节 | 0x3A 为用户目录;0x5A 为临时文件目录 |
2 | 压缩类型 | 1 字节 | 0x1A 为不压缩;0x1F 为 deflate ;0x22 为 LZ4 |
3 | 保留(填充)字段 | 2 字节 | 暂无使用场景 |
4 | 相对路径 | 不定长 | 说明此运行时文件的释放路径 |
5 | 文件数据 | 不定长 | 此文件的存储数据,其长度就是此数据块的剩余长度 |
.LOM
ROM 数据块(LSD
Rom)在特殊的系列作品中,此数据块会被映射为某种内存区域,通过寻址方式来访问;然而,真正访问文件的效率必然不高,所以通常此数据块的内容会被读入另准备的 ROM 缓冲区,再做处理