游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4098|回复: 4

花木兰中的游戏图片提起

[复制链接]

16

主题

266

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
发表于 2005-5-25 12:52:00 | 显示全部楼层 |阅读模式
没加任何密的,图片只是打了个包而已,临时代码
int ReadBMPFileNameLength(BYTE * data)
{
        int i=0;
        while(*data)
        {
                i++;
                data++;
        }
        return i;

}
void HmlFile()
{
        HANDLE hFile,hFileMap;
        BYTE *Data;
        char* filename="D:\\Program Files\\HuaMuLan\\bmp\\Menu.pkg";
        hFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        if(hFile==INVALID_HANDLE_VALUE)
                return;
        hFileMap=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
        if(hFileMap==NULL)
        {
                CloseHandle(hFile);
                return ;
        }
        CloseHandle(hFile);
        Data=(BYTE *)MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);
        if(Data==NULL)
                return;

        CloseHandle(hFileMap);
       


        int Count;
        //BYTE *curPoint=Data;

        memcpy(&Count,&Data[0],4);

        int FilePoint=4;
        while(Count>0)
        {
                //取得文件名长度
                int bmpFileNameLength=ReadBMPFileNameLength(&Data[FilePoint]);
                if(bmpFileNameLength==0)
                        break;

                char * bmpFileName=new char[bmpFileNameLength+1];

                //memset(bmpFileName,0,sizeof(char)*bmpFileNameLength);
               
                //取得文件名
                memcpy(bmpFileName,&Data[FilePoint],bmpFileNameLength);
                //标识结尾
                bmpFileName[bmpFileNameLength]='\0';
                char sbmpFileName[MAX_PATH];
                sprintf(sbmpFileName,"d:\\huamulanimage\\%s",bmpFileName);
                FilePoint +=bmpFileNameLength + 1;

                DWORD bmpStart,bmpSize;
               
                //取得文件位置
                memcpy(&bmpStart,&Data[FilePoint],4);
                FilePoint +=4;
               
                //取得文件大小
                memcpy(&bmpSize,&Data[FilePoint],4);
                FilePoint +=4;

                BYTE *bmpData=new BYTE[bmpSize];

                memcpy(bmpData,&Data[bmpStart],bmpSize);

                FILE* fp;

                if((fp=fopen(sbmpFileName,"wb"))==NULL)
                        break;
                fwrite(bmpData,bmpSize,1,fp);

                fclose(fp);

                delete [] bmpFileName;
                delete [] bmpData;
                Count--;
               

        }


        UnmapViewOfFile(Data);
       
        return ;
}

一个室内场景

sf_2005525125213.rar

282.02 KB, 下载次数:

71

主题

1804

帖子

1880

积分

金牌会员

Rank: 6Rank: 6

积分
1880
QQ
发表于 2005-5-26 16:50:00 | 显示全部楼层

Re:花木兰中的游戏图片提起

噢!看看里面的图片哦!能传些上来马?

16

主题

266

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
 楼主| 发表于 2005-5-27 12:13:00 | 显示全部楼层

Re:花木兰中的游戏图片提起

1、文件没有经过加密处理
2、图片格式为TGA格式(从文件中找到大量的Autodesk 3ds max,TRUEVISION-XFILE这是TGA特有标识)
3、从游戏中可知,一个NPC的方向是为8个方向,在一组NPC索引中第一个DWORD表示此NPC有多少个动作(如,走、打、挨打、魔法等)所以得知NPC的总块为 sum=动作*8;得到一组NPC图片文件的起始位置
4、紧接着后面就是上面对应的图片文件的总大小了,也是为一个DWORD;
5、NPC就是这样的方式一个一个的迭加在一起的

文件根本没加密,只要看看就可以提起出来了

16

主题

266

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
 楼主| 发表于 2005-5-27 12:19:00 | 显示全部楼层

Re: 花木兰中的游戏图片提起

合并其中的一个图片
sf_2005527121847.jpg

16

主题

115

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
发表于 2005-8-12 23:24:00 | 显示全部楼层

Re:花木兰中的游戏图片提起

谢谢,但我有一个问题,

就是用什么算法吧,才能吧那些图片拼起来的哦?

我说的是地图,,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 10:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表