Board logo

标题: 我准备制作一款地雷传MOD,请指教!!! [打印本页]

作者: momo2255    时间: 2011-4-11 18:10     标题: 我准备制作一款地雷传MOD,请指教!!!

上个月,玩金山老游戏地雷战,突然奇想做个MOD。
于是,我开始动手了。
首先,我的目标是人物对话,打开地雷战目录,发现一个TXT.dat文件,怀疑是地雷战对话文件。用WINHEX打开,发现全是乱码,相信是经过加密,于是随意修改一个话,启动游戏,发现游戏主角死亡时对话信息出现一段乱码。
于是启动OD,用二进制搜索TXT乱码,查到地址后,下硬件断点。再进游戏,出现对话事件后,OD中断,看到把TXT文件中的乱码一个字节送入CL,然后xor cl,51.
不错,XOR 51应该是解密关键,于是回到WINHEX,打开TXT.dat,用编辑,修改数据,XOR 51,确定。果然,出现游戏人物对话。
游戏文件夹下MAP.dat,接照字面上猜,不是地图图块就是地图图块像素。WINHEX打开MAP.dat找到dlz-11.blk,把后面全是十六进制数据全改为0,再进入游戏,发现第一关地图地图全是空地.
修改成功,确定了MAP.dat是游戏地图图块文件。
还原MAP.dat未修改前数据,启动OD,加载地雷战,F9启动。进入第一关桃花岭,搜索MAP中第关地图图块数据,找到地址584390,随意选定一块区域,填充0。果然,游戏地图改动。在数据窗口把584390加入标签,标签名为地图图块。
接下来,我们就可以找所有地图图块代码,584390地址中两个字节表示一个地图一个地形图块,一个一个手动填写,太麻烦了。启动VC吧,HWND hwnd=::FindWindow(NULL,"dlz");
        DWORD id;
        ::GetWindowThreadProcessId(hwnd,&id);
        HANDLE handle=::OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION,FALSE,id);
WCHAR buf[1000];
        for(int i=0;i<1000;i++)
                buf=(wchar)i;
        bool b=WriteProcessMemory(handle,(LPVOID)(0x584390),&buf,2000,NULL);
如果代码把地图内存图块全部找出,加到游戏果然屏幕全是不同地图图块。
嗯,全是图块代码也到手了,以后可以用这些代码写地图编辑器。
等会接着播报调色板、脚本剧情,DX中DDRAW破解,找出游戏消息,重载游戏、在游戏是载入LUA引擎等等等等
作者: momo2255    时间: 2011-4-11 18:13

有感兴趣的人吗?
如果有,我接着播放。
作者: lxking2856    时间: 2011-4-26 11:24

有不过这样太慢了!何时才能出地雷传?
作者: huyong    时间: 2011-8-28 12:15

希望能早日玩上这游戏,支持一个




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0