游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
5 a1 |& y1 s/ `) n6 g
* @: q* a4 _& A- v, d    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。! L. O8 M/ H  T
$ s' H; x" i( _; v" |& \
    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 地表一层的序号
7 ?: s" U. m. I2 P+ E0 ?/ s. R4 j6 Y: @# |1 T! n0 x" P3 r
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号5 t* ~3 {6 L# J# L, K
07      在地表二层 12 01 这个大序列下的子序列编号" P: m( _% g1 B6 @: u' F- j. e7 z% x
86      物件层的大序列
& V& o5 J, z' `% o- X% @00      物件层的大序列下物件的子序列编号
5 a7 V8 p5 ^4 I6 a7 {* v4 N7 n03 03 00  目前不详
( S% g/ F/ @0 Y2 S& S: u01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
- d* d1 C# |/ Z) a/ j% L+ E- w1 I
//************************************************************
/ u# X6 F9 `/ p7 m+ r3 p, X2 _- P// 加载地图基本数据函数;4 [6 Y/ X2 j9 S7 O: O
//************************************************************* K5 w7 a) l! P

1 x. ?4 {" }1 B$ Y- D/ y6 Q2 w//************************************************************
( _+ a, }/ u* ~6 q! X2 ?// 加载地图基本数据函数;  a# n, z/ N& H. G  s5 }
//************************************************************
8 u# @, _) d5 ^, z; _
% d5 Y' @( i' ]int Cmap:oaddata(char *filnam)
- W+ j( h. }; b, {{
$ Z, y# i9 ^1 y5 _3 o. O, ~# ~% |        int Temdata;9 I6 o; e, K4 a& ?

9 y: ~- z3 z- d4 z" T        if(filnam == "") return 0;
$ ^) F  d, u- p( ]) L8 W; @7 _' L) O; c6 c. Q% N8 q3 E4 _
        fp_map = fopen(filnam,"rb");
1 P% _+ B- ?" q. a3 K3 @
% g0 S7 E) d3 R) h- w" f9 ^: m        if(fp_map == NULL)        return 0;
5 A7 @! I9 K; K
' w* ?* q# I0 S/ Q& {$ T        fseek ( fp_map, 16, SEEK_SET);: o$ _0 C. \9 n; ]6 O
        fread ( &ShortWidth, 4, 1, fp_map);
9 x' J) H( L' t2 g, E6 E. r7 O        fread ( &Width, 4, 1, fp_map);
( V/ b8 t9 {: z; k$ ?! \        fread ( &Height, 4, 1, fp_map);
. s0 x6 \3 e5 T3 ]+ q: j% g3 Z! {5 t, Z" W" d( e  U6 g% B
        int TW = Width / ShortWidth;
. @  c  u* D* M" x5 D/ H        int TH = Height / ShortWidth;! S/ A; o" E- O2 v3 J) g( K
: v, h6 f. ]  z+ ~- S% |
        for (int j = 0 ; j < Width ; j++)/ t9 a' o; `- p0 G
        {+ ?2 e' j. g) g) E
                _DELETE_ARRAY(Cell);. `0 _0 P1 `3 H' s6 P" v
                _DELETE_ARRAY(Role);9 {) _) r2 b" i6 o& t8 [1 i. ~
        }: g5 E! I& q" a7 K3 z
% o, I2 A+ C" t
        Cell = new stCell*[Width];
' C7 `* B% b9 m8 U+ O        Role = new stRole*[Height];0 @( v+ m8 N! b4 V
        for (j = 0 ; j < Width ; j++)
" \! o4 o* H# k        {$ r9 O" E* o" O, s
            Cell[j] = new stCell[Height];
. b4 U( K. C8 V! ^5 T                Role[j] = new stRole[Height];        # u- g. `/ G( R5 q' K3 I2 f
        }        ! t# D7 w3 s8 ]' u: ^$ p7 H, J$ M" E

9 J8 ^" g0 z+ {  F( P. _        fseek ( fp_map, 28, SEEK_SET);
, d1 d6 D9 C2 w0 `) g  E8 w5 Z6 s" I' T$ O8 E' X
        for (int y1 = 0; y1 < TH ; y1++)' y4 ~1 D: e# S+ M- r; b: X
        {
+ l/ u+ y  n7 z* d  W                for (int x1 = 0; x1 < TW ; x1++)
+ F5 k+ b2 u1 H0 l+ w* H- L                {/ p0 q% {: \- }& _$ b6 t1 n
                        fseek ( fp_map, 20, SEEK_CUR);
6 j% P& @  n$ X( g* t                        for (int y2 = 0; y2 < ShortWidth ; y2++); a9 D& R9 R8 h2 }8 A8 k8 \: O( C" @
                        {% k- ^/ d$ T5 k# f, F8 j
                                for (int x2 = 0; x2 < ShortWidth ; x2++): K4 C, W" j, R1 `! v
                                {: n- L/ R5 p+ W3 U. F' e
                                        fread ( &Temdata , 2, 1, fp_map);
/ i, f- ]8 p$ [7 V+ v. z                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
- S( m& C. U5 l; V( w( ~. x
+ T  W4 U; ?' V4 v0 Q) [) K                                        fread ( &Temdata , 1, 1, fp_map);
" C! n, _, Y* C- G# N                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;8 ]  u$ }5 c3 r. H- f, H

' Y, D' ?7 d5 t                                        fread ( &Temdata , 2, 1, fp_map);
/ ?5 R: e4 |1 w, }                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
! Q/ _6 z9 j6 d$ f" Y1 }9 N  W4 m$ |! }. P$ `# G" P; i
                                        fread ( &Temdata , 1, 1, fp_map);+ Y9 v" G! Z/ S( W7 D; J0 K
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
9 N/ M, {* F; u9 w                                        // 6个字节5 w/ S1 d" O" o$ h$ k$ I- a
% i6 W0 n8 d! C& u9 ~$ k
                                        fread ( &Temdata , 1, 1, fp_map);( M: Y# {4 e' h) C
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;  O- ~- l+ b( e: b& T0 n
                                       
. V: q! q" z& @% |* W                                        fread ( &Temdata , 1, 1, fp_map);
! A3 r7 w3 ^" e                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
4 P( k' g4 P7 h/ M9 [' |2 T" A) S9 _- q* c( _2 f
                                        //fseek ( fp_map,3,SEEK_CUR);9 s7 d9 ^6 V% M1 ~) `* v
                                        fread ( &Temdata , 1, 1, fp_map);
9 Q" L% g. m+ Y- Z5 g4 Z- |' o                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
8 ~+ \* _( n) r( N# X7 m                                        & j- w7 \. L5 g* w1 K. o
                                        fread ( &Temdata , 2, 1, fp_map);, b+ E- K# F- T% b
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
; _+ z- h9 R5 l
' Q2 x+ L8 H" V* a5 y" Q# ?7 V                                        // 1个字节" Q- m4 B0 _% X/ d0 l0 o
                                        fread ( &Temdata , 1, 1, fp_map);
$ K& _; B6 j7 d3 g                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;, P6 ~; v* u! a! G7 n, Q8 o4 J# c
                                        //if (ftell(fp_map) > FilZize) return 0;
# b5 T. L0 P" B$ b5 E$ w                                }) J2 d: M* ~# f& `
                        }
  Q6 I2 s% n% |* Y: \                }4 W, C. z2 W  |( n2 F) `+ ~( g! k
        }
+ U* t! i# g/ t2 a) l. W0 l# l( {1 y5 w# l6 V/ P8 @
        fclose(fp_map);
: |  n( M6 Y" b! k
/ L3 U. Y& a6 s# r2 H1 W: X& A; b' Q& n8 h" e: {' U
        return 1;2 J9 `- e- C2 e. K* u9 t
}

5 a- z& l. d! N: p& F( x! p3 u  O; ~4 c
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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