|
慕容音 家族 栖凤楼 - 金翅凤凰
四方统领
    
邪派首席 - 帖子
- 2350
- 精华
- 7
- 声望
- 17042
- 银两
- 99
- 来自
- Τάρταρος
- 注册时间
- 2007-11-27
|
1楼
大 中
小 发表于 2008-6-15 20:42 只看该作者
场景文件(Sn.grp)格式【作者:曾大虾、游泳的鱼】
游戏中的地图分为大地图,内场景地图,战斗地图三类。
内场景的地图包括以下文件:
1、alldef.grp(初始化内场景地图构建文件)
2、alldefbk.grp(备份用内场景地图构建文件)【可以认为是场景临时文件】
3、s*.grp(存档用内场景地图构建文件)
4、相应的idx文件
5、贴图信息文件为sdx***和smp*** (或合并贴图SDX和SMP)
内场景构建文件:
alldef.grp是原始地图,即玩新游戏用的地图;
s*.grp当然就是存档的地图.
这两个文件格式一样,只是初始化和存档的关系。
S*.grp文件及alldef.grp结构
每个场景分6层图,每层图大小64×64。
前三层为:每两个字节存储1个贴图代码(贴图索引号×2),若无贴图用00 00填充。
1层:地面贴图代码数据
2层:建筑贴图代码数据(如花草、房子、树木、石头),如果这个位置代码为00 00表示人可以通过。【-1也表示该位置无建筑】
3层:空中贴图代码数据(如:挂在墙上的画、剑或摆放桌面的花瓶等挂或悬或摆在空中的事物)
第四层为:每两个字节在地图中相应位置(D*中相应场景事件描述的XY坐标)存储1个事件索引(D*中相应场景事件的顺序号),若无事件则用FF FF(-1)填充。
4层:场景事件数据
第五、六层为:使2、3层表现为凸出或凹陷,每两个字节存储1个海拔数据,若无海拔则用00 00填充。
5层:建筑海拔(2层y方向偏移),表示第2层图片在贴图时需要向上偏移象素数【也是人物贴图的偏移量】
6层:空中海拔(3层y方向偏移),表示第3层图片在贴图时需要向上偏移象素数
下面以allsin为例具体介绍文件的结构。
allsin.idx 占用400字节磁盘空间,每4个字节为1项,共100项(只有前84项有用,分别对应84个场景),每项指向allsin.grp对应的一个32位地址,其中每个地址长0xc000,即49152Byte。
因此allsin.grp共49152×100=4915200Byte
allsin.grp中每49152的内容(每1个场景)为6层地图信息,每张地图64*64, 每个贴图信息(贴图代码)为2个字节,依次存放。
即64*64*6*2=49152
在程序中可用数组SinData(63,63,5)表示一个场景数据
此文件从00地址开始每两个字节为一个贴图代码填充,其坐标为x,y值:
00000000h: AE 03 AE 03 AE 03 AE 03 AE 03 AE 03 AE 03 AE 03-贴图代码
坐标为x,y值:0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0
……
然后开始第二行
00000100h: AE 03 AE 03 AE 03 AE 03 AE 03 AE 03 AE 03 AE 03
坐标为x,y值:0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1
x最大为0~63,y最大为0~63
已知游戏中地图坐标x,y值,在allsin.grp中10进制开始地址值为:X×2+128×Y
第n个内场景地图引用的贴图文件为:sdx00n,和smp00n
关于贴图存储格式释疑请参见:“浅谈《金庸群侠传》的图片压缩格式”
S*.grp释义同上
关于贴图代码和贴图索引号
贴图索引号(“《金庸群侠传》Fish修改器”中每个贴图左上角数字)可用“《金庸群侠传》Fish修改器”-“地图贴图编辑”-“贴图编辑”查得
贴图代码 = 贴图索引号×2
贴图索引号=贴图代码÷2
【】内的为scarscc注释
[ 本帖最后由 scarscc 于 2008-7-1 13:29 编辑 ]
|