love2d教程22--金庸群侠资源格式解析1
2013-03-25 16:01
190 查看
昨天折腾了大半天参考了铁血丹心论坛里各位前辈的经验,还只是完成了一点,先记录一下,以后再补充。
大家可以下载金庸群侠的dosbox版(以下简称“金”),资源文件在game目录下。
一、文件纵览
“金”的文件命名很有规律,图片文件分为“.idx、.grp、.col”,分别是图片索引、图片数据、调色板。
图片索引里保存着对应图片在图片数据里的地址。若我们要载入第5幅图片,则先到.idx里其地址,软后
到对应的.grp里取数据,取出后再按调色板显示。
文件列表:
1.所有人物头像hdgrp.grphdgrp.idx
2.所有武功效果eft.grpeft.idx
3.所有武功动作fight???.grpfight???.idx
4.所有场景地图块fmap.grpfmap.idx
5.所有外景地图块mmap.grpmmap.idx
6.云cloud.grpcloud.idx
7.片尾动画kend.grpkend.idx
8.制作群信息endword.grpendword.idx
9.256色调色板mmap.col
二、调色板解析
把调色板Mmap.col用十六进制编辑工具(linux可以用ghexedit,windows用winhex)打开,可以看到
一共有768字节(一个字节是8个比特,即8位二进制数/2位十六进制数)。按照前辈的说法,它表示了
256种颜色,768/256=3即3个字节代表一种颜色,正是我们熟悉的rgb颜色,不过它的顺序是bgr,我
估计是大端模式的体现。而且“金”的颜色值是6位进制,要乘以4才行。
既然这个文件那么小,我便想干脆把它转换为lua的table算了。
下面是转换代码:make-color-table.lua
打开终端/cmd,输入luamake-color-table.luaMMAP.COL>>mmapcol.lua就可以生成颜色表的luatable了。
然后使用查找替换把",},",替换为",}",去掉多余的逗号。
三、idx解析
这个文件比较坑人,它的第一个地址居然是对应grp文件里的第二个图片,而且最后一个地址在grp里不存在。
它里面的地址是四个字节,也是大端模式,比如"0fac01bc",实际表示的是"bc01ac0f"。
解析idx就只需要逆序一下地址,并转化为十进制数。
代码暂时不贴了,等完成了grp文件的解析后一起贴出来。
大家可以下载金庸群侠的
一、文件纵览
“金”的文件命名很有规律,图片文件分为“.idx、.grp、.col”,分别是图片索引、图片数据、调色板。
图片索引里保存着对应图片在图片数据里的地址。若我们要载入第5幅图片,则先到.idx里其地址,软后
到对应的.grp里取数据,取出后再按调色板显示。
文件列表:
1.所有人物头像hdgrp.grphdgrp.idx
2.所有武功效果eft.grpeft.idx
3.所有武功动作fight???.grpfight???.idx
4.所有场景地图块fmap.grpfmap.idx
5.所有外景地图块mmap.grpmmap.idx
6.云cloud.grpcloud.idx
7.片尾动画kend.grpkend.idx
8.制作群信息endword.grpendword.idx
9.256色调色板mmap.col
二、调色板解析
把调色板Mmap.col用十六进制编辑工具(linux可以用ghexedit,windows用winhex)打开,可以看到
一共有768字节(一个字节是8个比特,即8位二进制数/2位十六进制数)。按照前辈的说法,它表示了
256种颜色,768/256=3即3个字节代表一种颜色,正是我们熟悉的rgb颜色,不过它的顺序是bgr,我
估计是大端模式的体现。而且“金”的颜色值是6位进制,要乘以4才行。
既然这个文件那么小,我便想干脆把它转换为lua的table算了。
下面是转换代码:make-color-table.lua
localf=assert(io.open(arg[1],"rb")) localblock=3 localnum whiletruedo --每次读取3个字节 localbytes=f:read(block) ifnotbytesthenbreakend io.write("{") forbinstring.gfind(bytes,".")do num=tonumber(string.byte(b))*4--把每个字节转化为number*4 io.write(tostring(num)..",") end io.write("},") end
f:close()
打开终端/cmd,输入luamake-color-table.luaMMAP.COL>>mmapcol.lua就可以生成颜色表的luatable了。
然后使用查找替换把",},",替换为",}",去掉多余的逗号。
三、idx解析
这个文件比较坑人,它的第一个地址居然是对应grp文件里的第二个图片,而且最后一个地址在grp里不存在。
它里面的地址是四个字节,也是大端模式,比如"0fac01bc",实际表示的是"bc01ac0f"。
解析idx就只需要逆序一下地址,并转化为十进制数。
代码暂时不贴了,等完成了grp文件的解析后一起贴出来。
相关文章推荐
- love2d教程23--金庸群侠资源格式解析2
- 基于cocos2dx的2D手游美术资源制作技术选型(1)--UI、纹理格式、动画制作 - 宏波.王
- love2d教程17--物理引擎1
- love2d教程18--物理引擎2
- love2d教程26--对话条
- 基于cocos2dx的2D手游美术资源制作技术选型(1)--UI、纹理格式、动画制作
- love2d教程28--血条
- Unity2D游戏开发基础教程1.2项目、资源和场景
- love2d教程3--输入和音乐
- love2d教程12--画布和批量绘图
- love2d教程27--菜单
- [IOS开发教程] IOS中用NSJSONSerialization来实现对JSON格式的解析
- love2d教程21--定时器
- love2d教程6--摄相机2边界和图层
- Love2d新手入门教程之贪吃蛇(附源码)
- [Unity 笔记] Unity Editor中如何更改Texture2D对应资源的压缩格式,并保存
- Unity2D游戏开发基础教程1.2 项目、资源和场景
- love2d教程4--材质和贴图
- love2d教程32--碎图打包器texturepacker
- Android应用资源文件格式解析与保护对抗研究