千年 *.map文件格式说明

3
回复
293
查看
[复制链接]

微信扫一扫 分享朋友圈

1000

矿工

368万

金币

9万

娱乐币

管理员

Rank: 9Rank: 9Rank: 9

积分
3737394

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2019-3-13 16:50:01 | 显示全部楼层 |阅读模式

>资源名称:千年 *.map文件格式说明

>资源类型:资料共享

>下载帮助:链接失效解压密码吾爱尚玩VIP特权

>本站所有资源均来源于网络,版权归原作者所有,禁止用于一切商业用途。

公告页游平台手游平台金币获取金币充值VIP购买

[资源名称]


千年 *.map文件格式说明


[资源类型]


资料共享


[资源详情]


   内容介绍

*.map 文件是记载地图信息的文件。
地表层是由“地块”组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
第2层地表就复杂一点,它是“物件”层的补偿层。“物件”是指树木、花草、房屋等东西的统称。
为什么说第 2层是“物件”层的补偿层那,因为图象显示要有前后关系,近处的覆盖远处的东西,但长在地上的花,无论离的多么近都会被覆盖,所以给加在了地表2层。
下面开始说一个实际的文件start.map,用UE打开它后会看到 16进制数据,右面对应是asc码,前7个字节的16进制数据是:“41 54 5A 4D 41 50 32”,看右侧对应的 asc码是 “ATZMAP2”,这个是地图格式标识,是说明文件格式的。之后 9个字节为空,我们跳过,不用理会。之后的 4个字节是 :“28 00 00 00”,这个宽度是组成大地图的小正方形的宽度,为什么这么说呢?看下面的图你就会明白了,比如是一个9 * 9 的大地图,是这样记录在 .map文件中的:1 1 1 2 2 2 3 3 31 1 1 2 2 2 3 3 31 1 1 2 2 2 3 3 34 4 4 5 5 5 6 6 64 4 4 5 5 5 6 6 64 4 4 5 5 5 6 6 6前面我们所说的组成大地图的小正方形的宽度(兰色那个矩阵),在这里就是 3。
我们再继续看map文件,接下来的8个字节是:“ C8 00 00 00 C8 00 00 00”,前 4个字节是这个地图的宽度,后4个字节是这个地图的高度。下面是正式开始的地图数据了,这里有一点要注意的,我们前面提到了“组成大地图的小正方形”,他们在map 文件中被记录的时候,每个这个正方形的数据前面都会空出20个字节,在读文件的时候跳过即可。地块数据由12个字节的数据来表示。
比如:“13 00 03 12 01 07 86 00 03 03 00 01”这个地块。13 00 地表一层的序号
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
07      在地表二层 12 01 这个大序列下的子序列编号
86      物件层的大序列
00      物件层的大序列下物件的子序列编号
03 03 00  目前不详
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。
下面是读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
  1. //************************************************************
  2. // 加载地图基本数据函数;
  3. //************************************************************

  4. //************************************************************
  5. // 加载地图基本数据函数;
  6. //************************************************************

  7. int Cmap::Loaddata(char *filnam)
  8. {
  9.         int Temdata;

  10.         if(filnam == "") return 0;

  11.         fp_map = fopen(filnam,"rb");

  12.         if(fp_map == NULL)        return 0;

  13.         fseek ( fp_map, 16, SEEK_SET);
  14.         fread ( &ShortWidth, 4, 1, fp_map);
  15.         fread ( &Width, 4, 1, fp_map);
  16.         fread ( &Height, 4, 1, fp_map);

  17.         int TW = Width / ShortWidth;
  18.         int TH = Height / ShortWidth;

  19.         for (int j = 0 ; j < Width ; j++)
  20.         {
  21.                 _DELETE_ARRAY(Cell);
  22.                 _DELETE_ARRAY(Role);
  23.         }

  24.         Cell = new stCell*[Width];
  25.         Role = new stRole*[Height];
  26.         for (j = 0 ; j < Width ; j++)
  27.         {
  28.             Cell[j] = new stCell[Height];
  29.                 Role[j] = new stRole[Height];        
  30.         }        

  31.         fseek ( fp_map, 28, SEEK_SET);

  32.         for (int y1 = 0; y1 < TH ; y1++)
  33.         {
  34.                 for (int x1 = 0; x1 < TW ; x1++)
  35.                 {
  36.                         fseek ( fp_map, 20, SEEK_CUR);
  37.                         for (int y2 = 0; y2 < ShortWidth ; y2++)
  38.                         {
  39.                                 for (int x2 = 0; x2 < ShortWidth ; x2++)
  40.                                 {
  41.                                         fread ( &Temdata , 2, 1, fp_map);
  42.                                         Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;

  43.                                         fread ( &Temdata , 1, 1, fp_map);
  44.                                         Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;

  45.                                         fread ( &Temdata , 2, 1, fp_map);
  46.                                         Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;

  47.                                         fread ( &Temdata , 1, 1, fp_map);
  48.                                         Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
  49.                                         // 6个字节

  50.                                         fread ( &Temdata , 1, 1, fp_map);
  51.                                         Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
  52.                                        
  53.                                         fread ( &Temdata , 1, 1, fp_map);
  54.                                         Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;

  55.                                         //fseek ( fp_map,3,SEEK_CUR);
  56.                                         fread ( &Temdata , 1, 1, fp_map);
  57.                                         Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
  58.                                        
  59.                                         fread ( &Temdata , 2, 1, fp_map);
  60.                                         Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;

  61.                                         // 1个字节
  62.                                         fread ( &Temdata , 1, 1, fp_map);
  63.                                         Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
  64.                                         //if (ftell(fp_map) > FilZize) return 0;
  65.                                 }
  66.                         }
  67.                 }
  68.         }

  69.         fclose(fp_map);


  70.         return 1;
  71. }
复制代码



   内容截图


   附件下载   (如果本资源侵犯到您的权益,请联系在线管理员QQ:1589479632处理!)

0

矿工

23

金币

0

娱乐币

普通会员

Rank: 1

积分
35
发表于 2020-2-29 18:16:16 | 显示全部楼层
fdsfsffdgdgddg

0

矿工

6

金币

0

娱乐币

普通会员

Rank: 1

积分
16
发表于 2020-3-27 04:34:43 | 显示全部楼层
就像学习这种理论知识

50

矿工

130

金币

0

娱乐币

普通会员

Rank: 1

积分
648
发表于 2020-4-25 06:44:21 | 显示全部楼层
千年又得学习好久 已经扔下十几年不搞了
VIP介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ- 申请友链-站点统计-小黑屋- 吾爱尚玩资源基地|523play.com | VIP购买

Powered by Discuz!© 2016-2017 Comsenz Inc.