游客您好
  • 点击联系客服

    在线时间:8:30-18:00

    客服微信

    Wkr-3000y-kf

    电子邮件

    3000y@wenkeruan.com
  • 手机版

    随时掌握游戏动态

  • 扫一扫二维码

    添加微信客服

Lv.7 版主
8号会员,9活跃值,2022.09.01 加入
  • 127发帖
  • 123主题
  • 0关注
  • 0粉丝
这个人很懒,什么也没有留下。
独家推荐 更多>

深度解释map地图文件

[复制链接]
异仟年认证商人 发表于 2022-9-5 20:39:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
*.map 文件是记载地图信息的文件。
3 o! s$ S; H/ h7 g. M8 d3 R. l+ ?4 x1 n# y5 C" d) f
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
- s0 x9 R$ j6 u; q
6 m5 V( I8 J0 X6 K% H    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 地表一层的序号
6 P4 y, _% ~: Q% O
) [6 d! r5 v9 ~03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
- F0 l/ m1 a0 ^! Z- p07      在地表二层 12 01 这个大序列下的子序列编号
$ k; e5 ^9 n" |3 l6 T8 m( G86      物件层的大序列
; F! f/ f4 ^. j4 B00      物件层的大序列下物件的子序列编号
# M! U- o5 b' N03 03 00  目前不详1 u6 ?% i( x! T* m% J
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
+ M9 w. n! j6 k. k9 I; v" N
) N2 z3 m; E* c$ R' U+ H4 b//************************************************************6 D% Y( G  S' C1 |9 u5 G
// 加载地图基本数据函数;
6 N% y. X% h$ V//************************************************************0 s. F4 w; f8 j7 U/ _

/ s) o# V! U6 g: T9 b# o$ B. ]//************************************************************4 s, G5 g6 W/ m0 Y
// 加载地图基本数据函数;
5 Y* ^! X- M+ ~, p8 _. t8 J: q//************************************************************% Y, k2 e) D! K: n4 m$ S6 p
) `( f" x  F9 o& _+ c
int Cmap:oaddata(char *filnam)
1 q  q3 u8 k9 Z: w' w2 C9 Q# |{
4 T& |) w8 Z; k1 q% D: [  I        int Temdata;' d0 |6 Z6 M9 O8 ^! P' k: Z0 X

! I3 h6 X' N$ [1 K* B" p" [        if(filnam == "") return 0;. c3 G! X. N7 j

. Y6 E; s8 }6 j2 g        fp_map = fopen(filnam,"rb");" C6 X. ^9 f9 D: O: z2 I

$ _5 R0 X: j  L# J0 f7 Q        if(fp_map == NULL)        return 0;* F" C- I$ v. W2 J

8 ]% I6 }6 U/ `* B2 B9 n        fseek ( fp_map, 16, SEEK_SET);
4 E% C, d/ p) G. \0 P        fread ( &ShortWidth, 4, 1, fp_map);$ f2 a. ]1 ?3 e* Y6 F. o1 N
        fread ( &Width, 4, 1, fp_map);
/ F; D; N6 H+ M' d        fread ( &Height, 4, 1, fp_map);' L4 s' a, f2 @" l

8 o$ n* T, Z! h2 }( l        int TW = Width / ShortWidth;0 c2 s! p+ ?; i3 i" J; x
        int TH = Height / ShortWidth;
3 W' d$ D4 ?  g  c1 z; c0 S3 }  w: a7 j
        for (int j = 0 ; j < Width ; j++)4 ~% I$ O/ {$ B# d
        {! r: t* \! c- d
                _DELETE_ARRAY(Cell);
1 {$ f( T% ^' F$ f5 X  c5 h9 h                _DELETE_ARRAY(Role);, e. D; m/ P9 E2 o
        }  ?4 J" d9 S% T% W/ S
& K9 O' e+ v; k. T1 H  l5 o3 y
        Cell = new stCell*[Width];
4 y( F# Z  R$ [+ _( I        Role = new stRole*[Height];
/ @- U& L; A5 L* e% t1 \6 e% @        for (j = 0 ; j < Width ; j++)
6 A$ N* h8 o( A  P3 R' z; O1 D        {
+ I. L- L. E# P            Cell[j] = new stCell[Height];. J5 |7 Z+ z, O- E. z- u) e
                Role[j] = new stRole[Height];        
4 n7 A( z3 B8 v4 ^) d& k        }        
$ C/ [  q/ ]8 _1 ^  k% y. M% n
9 S& I) h) ]# k- z; G# v' x        fseek ( fp_map, 28, SEEK_SET);. @: I# T- r/ W

6 a' ^. l& [0 g) L7 }7 H. [        for (int y1 = 0; y1 < TH ; y1++)
; u/ B$ C/ i( c0 P# A( D# x2 P        {; t9 ?! L) p( S$ q
                for (int x1 = 0; x1 < TW ; x1++)
0 S& H5 q# x. l. j. c" g" f" ?                {# ?) E: p' _" z' j  S
                        fseek ( fp_map, 20, SEEK_CUR);
4 s# ?) }1 v5 |4 v* ~                        for (int y2 = 0; y2 < ShortWidth ; y2++)' ~* @, p* q, |+ i- K0 C* B* n
                        {  B1 D( u3 S; }
                                for (int x2 = 0; x2 < ShortWidth ; x2++)% S' {' J5 `; O4 F" B# o" i5 n0 d
                                {
" V3 z. B. I1 r9 u8 M( ~2 ]& ~                                        fread ( &Temdata , 2, 1, fp_map);
: g7 m+ E9 p5 R/ v0 u                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;8 l& J* v  [( ]$ m9 U

1 W3 J! e2 q& u6 R$ o8 P% U0 l( Q4 b                                        fread ( &Temdata , 1, 1, fp_map);
8 k8 `$ Y! x3 D- n                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;4 f" J3 P) F6 ^" ?8 q: @4 H

6 U( Y2 F! \. C$ P6 {" I* I                                        fread ( &Temdata , 2, 1, fp_map);
! Y! R1 W4 a8 U* B                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
4 E; e8 d* z7 R
) p* L$ X' l& A: [* `. ?0 J                                        fread ( &Temdata , 1, 1, fp_map);. ~* \" i$ ~; e) q
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
! L5 l# ~! t% ^$ @- L) x/ l                                        // 6个字节: h- l' h8 |& b

% v! Z& f8 X" b3 d/ y9 l* u2 N0 S, x                                        fread ( &Temdata , 1, 1, fp_map);
1 z2 `- ]7 V6 y9 }4 u                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;* {+ d9 p0 S4 ]9 A. Q0 I* i7 k
                                        1 D0 J$ \. o- x2 A4 ]- \
                                        fread ( &Temdata , 1, 1, fp_map);' M; e1 M* O2 J0 o1 S: L, U
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;9 m! ]' Q3 Q" d" f: S
# b8 I6 B5 f6 H% K
                                        //fseek ( fp_map,3,SEEK_CUR);
0 T' b; k; n7 l) ]% X: W                                        fread ( &Temdata , 1, 1, fp_map);
* |! ]. k  L: A. j                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
1 \  o7 l( _7 F3 p; N) H6 h; E- i                                       
# f" K' b7 S6 E: Y" A                                        fread ( &Temdata , 2, 1, fp_map);
1 ~; a( T  c5 k. Q                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
6 r9 W% [9 d1 a  }! |4 S' r+ `5 ^. s# {$ ?. B1 F6 ]
                                        // 1个字节
& M% r$ H. `: U! F# W& r+ P1 J  k2 |                                        fread ( &Temdata , 1, 1, fp_map);$ |  G8 a( E" Y/ X0 Q2 P
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
: S) j  L9 c. p0 c, {                                        //if (ftell(fp_map) > FilZize) return 0;
8 F$ |0 z/ y! h                                }* \+ d) F2 d3 S0 H2 |  @
                        }
" Y, H6 N$ _9 T6 b4 V                }3 Q; B+ i: g9 c4 q9 J5 j  I  X+ K3 G( d
        }
4 ]6 r" t9 \% g' B1 d  `! L! K7 |" q" F6 l0 t/ Z! n7 M& H! |
        fclose(fp_map);9 ~+ a9 B) ?7 j* `$ ~' r2 r7 H

0 I. I4 I7 K9 ^9 E: W; q+ [
$ M- c! E: Q' }  a$ |        return 1;
3 v, U$ M/ K' o" ^) z}
8 A6 f; g7 [. h; l8 O+ K
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

Powered by Discuz!X3.4 ©2001-2013 Comsenz Inc.闽公网安备 35099902000100号增值电信业务经营许可证 闽B2-20220593 闽ICP备2023014375号