游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。+ `" J" e* b8 d+ S; S% z
; q; ?) T  B$ ]$ a
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。/ x9 o. ~- O3 M' @1 |& c! z0 R3 u! I
3 `! v- O4 V6 a+ M
    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 地表一层的序号+ x$ B  a. W# r# p& e$ y" ]+ [+ m
3 S5 _5 N' Q7 J! P7 ]% L
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号. n% L# \, t2 h0 ], u9 f8 ?, q; \
07      在地表二层 12 01 这个大序列下的子序列编号
2 N# h- R8 q& y( B  f' N' B86      物件层的大序列) ]. T. l( F+ S5 q9 q4 g. n, Y
00      物件层的大序列下物件的子序列编号
0 }* z0 [6 R4 s+ X* ]/ Q5 L03 03 00  目前不详
8 I9 g/ z, B8 h& ]) w( L# }01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
' F0 |4 G3 ^5 a' Z( _' r, E) U7 Z/ Q, ?" _3 Z" P
//************************************************************/ A, a% k- \% h5 ]; j7 u
// 加载地图基本数据函数;# q2 b" s; [5 @; W
//************************************************************  L4 @0 t0 E" m# i" k! P
& [  o% q, X5 R7 `+ i4 V
//************************************************************, ]5 S7 h" L! ^+ ?
// 加载地图基本数据函数;
; g& W. Y: }5 x$ R5 ^* j: O//************************************************************$ N5 `) f7 b. ~1 n
4 w3 g5 t: Y6 c& x6 y6 _( I
int Cmap:oaddata(char *filnam)6 W3 K1 L, s7 I
{
1 B6 F1 e0 ~8 {5 T8 M3 Q0 ^6 P, N) a        int Temdata;, m, g" t$ m: e

; ?, p& u* g+ s, \! Y1 j        if(filnam == "") return 0;
- v  I) Z- z( v/ R7 @1 d$ F
+ R4 e- }; Y2 t; R" S" |+ x" D# n        fp_map = fopen(filnam,"rb");
% S  Q7 H' V$ M
. f: i5 x, t- s/ k) D9 r        if(fp_map == NULL)        return 0;
7 S) G% E) `: Q& g2 @+ b( F( _5 t' m, i" I8 b( g# {, f) r
        fseek ( fp_map, 16, SEEK_SET);
) K/ s! ~: C0 D9 f4 e0 U        fread ( &ShortWidth, 4, 1, fp_map);# x" ~1 ^9 Z5 s) E
        fread ( &Width, 4, 1, fp_map);
- B% w$ u! \5 e8 k- [; u        fread ( &Height, 4, 1, fp_map);) ], C4 w+ P% [6 S: {! A. [9 d

. h) H, s/ q0 ~, V, g7 g+ c        int TW = Width / ShortWidth;
3 o: \4 C+ J  F  }( ]        int TH = Height / ShortWidth;' x- m, N' g/ \- v* K! T& J9 H

/ J6 Y2 m# A! p. A        for (int j = 0 ; j < Width ; j++)
. i8 {: F' x7 D9 h9 b        {6 K6 b" N4 a% N/ n0 r& r8 ^: a
                _DELETE_ARRAY(Cell);
0 s* e$ g$ z( t+ I+ d) a. U" u                _DELETE_ARRAY(Role);
6 r% c' }1 R* _- X$ Z        }
$ ~+ u+ _# }) G
& C. `+ C' V- [0 E        Cell = new stCell*[Width];6 E, ]) i6 h& Y
        Role = new stRole*[Height];
- p! m* k/ [. G7 K0 q, V& t: x6 @        for (j = 0 ; j < Width ; j++)( j5 x) D/ c+ W+ P5 q& u; }
        {
0 b+ \; p, I) N" y4 ?            Cell[j] = new stCell[Height];
9 ^7 _) m& s, J) D                Role[j] = new stRole[Height];        
# H7 I. C! Y, t2 Q3 v3 u        }        % L0 K3 k6 C! g" q6 T1 u9 i. ?9 w
) |" p" ^  q0 ]2 ]/ I5 l
        fseek ( fp_map, 28, SEEK_SET);
! D3 T- {" O7 h. A" P2 s6 K3 ~- t8 {( M- R
        for (int y1 = 0; y1 < TH ; y1++)  y3 h+ B1 t& ?* _! B/ V* `5 A3 N
        {
# f& b7 C; ?: F$ ]                for (int x1 = 0; x1 < TW ; x1++)
4 P! [: K6 z# }7 f0 O                {
" ^$ ]- l- j5 y# L4 U5 |/ p                        fseek ( fp_map, 20, SEEK_CUR);1 X! O( y" d8 b3 U4 @9 @
                        for (int y2 = 0; y2 < ShortWidth ; y2++)- ], @4 M" r& R# m  h6 v: |  W( z
                        {
4 y; C8 g( H5 L/ @0 ?                                for (int x2 = 0; x2 < ShortWidth ; x2++)$ f- C& q8 {& p6 `0 `# o) `+ F
                                {8 h6 _9 I( S9 q- Z4 S
                                        fread ( &Temdata , 2, 1, fp_map);
( X# B: J, f- ~* q                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;& x: Z% c; H5 o7 F8 X5 w2 y6 q2 I

6 b4 \: R5 _0 D                                        fread ( &Temdata , 1, 1, fp_map);
* B$ _! d4 n& R5 V0 u, s& d1 L                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
& O/ ~) k1 b4 }! c
5 N8 {7 s1 X+ W+ ?2 w, `                                        fread ( &Temdata , 2, 1, fp_map);$ f* `8 n2 o/ U+ Q. \9 J" b. j
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;$ R. `5 Z% \) ]" [) h# g

! F$ t9 e$ W# t# U& I; y/ p                                        fread ( &Temdata , 1, 1, fp_map);1 O- \* _( F: k' v4 x
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;" w8 ?# K' T1 V. ~2 I  k
                                        // 6个字节
# d6 T- Q& W1 }% ]# M& h4 K" h) p2 ~* A0 p& u! T
                                        fread ( &Temdata , 1, 1, fp_map);
/ u* x0 \" ?, Z! Q                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;# A: T1 A. o& J- B6 z9 i
                                       
2 H5 E8 t, Q3 q                                        fread ( &Temdata , 1, 1, fp_map);$ l7 H3 R5 @6 n# ]0 ^4 q! ^0 ?
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
/ L, ?' T: v. S) k% m/ i2 |; g' w& U; {& \* b1 p3 N
                                        //fseek ( fp_map,3,SEEK_CUR);, O  _% J, k) u9 x/ V0 x4 _# q
                                        fread ( &Temdata , 1, 1, fp_map);
8 d  h  e# A& w. K8 X1 r  [3 ~) V                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
5 n, r4 n4 `- y: ]+ H  U                                       
- |1 m  V9 }" V( U0 q* C) J. d                                        fread ( &Temdata , 2, 1, fp_map);
9 w. _& p7 q: I5 M4 g# H" C                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;' ]% V/ R. p% B9 P* W
- [" A3 R/ B7 j2 `! u$ S
                                        // 1个字节
7 k6 t! W+ k( D$ n7 H  X8 X                                        fread ( &Temdata , 1, 1, fp_map);
# n: y5 u! w: R                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
. O1 Y0 h! T! G! s# Q( p' n                                        //if (ftell(fp_map) > FilZize) return 0;% p; ~9 N1 G8 K6 Q, j2 a- }
                                }" l" G0 G1 S$ i+ @: G0 ~8 S
                        }
$ T6 a( s# m% T" l; X' E5 R                }
, e8 `5 q: }. n* b3 P  u8 t        }
- u& f' a2 v& S; E* V5 I, M9 i
, E5 X: f8 |9 U, i4 t( [        fclose(fp_map);
( t! p5 S: p% a: V* B
' d8 W0 M4 q2 J: ~) r
0 N/ b6 d2 C6 i+ z* ?! o2 H        return 1;6 i. \, [: z! d8 N
}

) A! i. W" a8 N
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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