游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。% ?, B- Q3 T) L7 R* n/ _+ K) W+ n' C

) i( X5 {+ c1 p( ^6 q    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。0 n  B) t5 H4 A0 z/ R: t

1 o* a: b% @& Y& N    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 地表一层的序号
+ K7 v( g" ]' k% m- e- @# p  a. E  Y! z  `
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号8 [4 e8 L- x' w) g8 q
07      在地表二层 12 01 这个大序列下的子序列编号
  G1 Q8 j2 r. U, k# a86      物件层的大序列
! M5 F9 ~& K! H5 ~00      物件层的大序列下物件的子序列编号
6 i! F# v% j0 n( ^03 03 00  目前不详
: g7 n5 ~4 |# @9 O01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
; q* N0 W) }* E# J! N7 x
7 k7 `4 \. g6 w$ d2 d# ^! Y$ `//************************************************************1 M( l0 ]. d! ?# F% i) P4 g
// 加载地图基本数据函数;
5 ]9 G& @& ^' O//************************************************************
) S3 k9 G) q; a
5 P; @' [* J  U/ ^+ ^; Y. t//************************************************************
! O6 @7 f9 {2 N9 _& P// 加载地图基本数据函数;
+ x1 @: O7 \+ l3 T) \//************************************************************
9 l3 D( m6 [  y6 k& s2 e" u
+ O* d# W/ a3 O4 _3 ], N3 S5 ?int Cmap:oaddata(char *filnam)! }* \+ d  S5 J( C& }$ N! U9 t$ p
{
  w, Q3 B' ~& _4 \        int Temdata;/ z/ T+ u' N* h$ N# U: {  {
4 j* X2 [& B8 u$ o
        if(filnam == "") return 0;
; v! Q- a; {1 ]( q: t" z* ~  P' x  y# `7 L0 Q0 ]2 A1 B
        fp_map = fopen(filnam,"rb");
* U! _/ s& ^, B, c! R5 j
( X  n0 [" k  J! Y; G        if(fp_map == NULL)        return 0;& k* ]. n, W: G( j# Y* r

" F+ N, r0 o: @3 D        fseek ( fp_map, 16, SEEK_SET);8 {. ?/ x" p9 b( v0 T
        fread ( &ShortWidth, 4, 1, fp_map);  y! f% @0 b! c. B
        fread ( &Width, 4, 1, fp_map);
  M: a, w. T% T* U  F( W        fread ( &Height, 4, 1, fp_map);2 \/ o# x# N) l1 l
. k# P1 K# M3 {5 c3 f  ]" P# D
        int TW = Width / ShortWidth;/ L! C# ~! C: E& e; t
        int TH = Height / ShortWidth;
- Q9 J- W7 f! e! h
+ P$ \; P6 c: `! N$ \        for (int j = 0 ; j < Width ; j++)
) t, d' ]4 M6 t1 v+ ^        {
! _6 x' _, L* l( Y1 k2 z: I# S                _DELETE_ARRAY(Cell);; L/ o3 O' r" I/ U  C1 P
                _DELETE_ARRAY(Role);
  k( C! I, R$ A& S$ `        }" n8 U7 w* t" n2 C  ~' L7 s0 B

$ l) l/ ^9 M9 Z! Q% [6 Z        Cell = new stCell*[Width];0 e" T8 Y" }  ]  b3 ^  D* ~
        Role = new stRole*[Height];
2 H; A/ e4 t" m5 Y        for (j = 0 ; j < Width ; j++)
+ K7 w' U4 K! g0 {        {
4 K, s% F' f" a            Cell[j] = new stCell[Height];# N" d2 c( B4 J( j
                Role[j] = new stRole[Height];        
6 j" d# W3 h  f) ?; L5 K        }        $ W* r8 S. X  Y% J

% Y# Q1 n) ]4 d; n% B% u: ]4 i        fseek ( fp_map, 28, SEEK_SET);
3 D# E5 |# a) D3 k6 f. f& |, |- y& c
        for (int y1 = 0; y1 < TH ; y1++); q9 J' \0 [9 `- d/ E6 R1 t
        {) l: t9 y+ J" O
                for (int x1 = 0; x1 < TW ; x1++)
" t7 `9 Z, B* W) t                {! Q5 ~8 E5 W" V4 j( B  A# v2 w$ W
                        fseek ( fp_map, 20, SEEK_CUR);+ {. k$ [) g6 p) F4 x  O
                        for (int y2 = 0; y2 < ShortWidth ; y2++)0 R: Q4 f0 \& h, t! r! Q
                        {, a( _% }2 S6 X
                                for (int x2 = 0; x2 < ShortWidth ; x2++)  K3 n; f2 E' A) p
                                {
' H# D  m, n& T                                        fread ( &Temdata , 2, 1, fp_map);
4 P! \. N4 N8 }# j/ o6 Z" _                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;# R; s7 T, T" o% u, t0 h6 a; K

7 x/ n4 l1 ?; P4 v% W" T                                        fread ( &Temdata , 1, 1, fp_map);
% n9 W9 H( F$ t' E1 [' y                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;. ^" V% P* @; T4 q4 l( n% d

: Y/ G9 R0 |* x3 ~! H! V* u1 s/ U                                        fread ( &Temdata , 2, 1, fp_map);& n# Q  J0 Q8 d. t5 P! M- h; @% {
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;, c; I* u) {: k: c, L; P" r
, _* s7 W4 t$ \" V7 q
                                        fread ( &Temdata , 1, 1, fp_map);- c: a! w8 @3 K/ ?% d2 Q
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
9 ^! b' i+ j" `) s6 s4 m5 k                                        // 6个字节
' M" H' [7 r3 o- e" R, z- n4 @( F
2 x) t/ c% I  y                                        fread ( &Temdata , 1, 1, fp_map);1 w. g& ~) V$ x
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
7 O7 e( _+ c, T                                        8 H/ m; t+ Q% Y. w; Y* Z
                                        fread ( &Temdata , 1, 1, fp_map);
! d1 T' s2 @! v# s$ y9 ^  @6 y( n                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
9 @* z; o6 ^8 y5 ^- q, m# I
0 v+ b; m3 v9 S9 R4 N& @) B- o$ z                                        //fseek ( fp_map,3,SEEK_CUR);
2 T& u  E( k$ p& e5 M                                        fread ( &Temdata , 1, 1, fp_map);" R: |" l% N  Q( C0 V
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;7 C; l* R2 V/ O9 K( j4 }8 }( c
                                        * z- g! {5 n  S' l' Y
                                        fread ( &Temdata , 2, 1, fp_map);. |) z) X0 t1 T& D8 W
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;. ^& q: G- k1 r4 X- s3 L

; u  P5 `! P5 S1 [1 j( m/ d# ]* K                                        // 1个字节& Y5 q6 F& ]2 y
                                        fread ( &Temdata , 1, 1, fp_map);4 E, X* G% M8 a3 N* [0 o) i3 q
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
/ C% V0 N0 n! f' H# J# Y/ e1 g% u                                        //if (ftell(fp_map) > FilZize) return 0;" l' c# b+ O& ~+ N4 S
                                }; ^+ Y2 B! Z3 U! P' _* p
                        }
' d; W4 l6 r% G! f2 x! P                }
. w. r" [) N* G6 m        }9 A9 y1 ~" @0 `1 D+ t/ h  @

- D8 x' K' D' F" p9 U        fclose(fp_map);
2 x! a4 v" ?( N3 n' A! k
- X* f' h2 u' q9 D* Y7 x8 t- j
) D. I: l7 g0 C1 s7 v3 p. o1 r        return 1;! \2 }# W) s1 }4 ^, F; c
}
- p8 Q* K4 ], D6 T% _6 ~' L. o
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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