游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
0 k' [1 {' C2 Y1 A! ]( l) O) R7 C+ y7 n3 v* w% t7 \: W" F% n
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。- T- [5 ]* x7 R; B* q# u, p
8 E! X$ C8 Z5 v! X
    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 地表一层的序号
8 g* I8 F$ e3 h8 `3 k& N; t( W% \  ?. x4 y$ I# u: A9 H6 w/ L
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号: R: G) U6 x/ a1 j4 h  Y/ a
07      在地表二层 12 01 这个大序列下的子序列编号
% I" ~  ~7 _1 I' t" x* o8 J# B86      物件层的大序列
- c: R  T# x! `3 T# p3 B00      物件层的大序列下物件的子序列编号
9 L6 N, H" w4 S/ w8 E4 c6 U' X03 03 00  目前不详9 b6 ^6 \5 S7 s: z4 u6 J
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
5 d8 t& s5 o8 f! @8 |6 n6 |8 m( Z$ L" V( g; q' S- S+ Y/ J
//************************************************************3 z) ]% L9 c4 }, e' I. x, x9 t  P5 D
// 加载地图基本数据函数;+ t' |3 i0 C6 L9 o+ Y6 T! X! z7 y
//************************************************************
* `' ?" c, w& q: o  a6 C
0 n8 i0 z7 t6 S. H! Q$ `3 @//************************************************************
/ Q# d6 |# L% E// 加载地图基本数据函数;$ W9 P# p+ B6 _# G* P
//************************************************************
$ {6 T; x3 C& n, S) r7 P6 w5 S+ i% w2 i, m0 b. e" D4 q# e
int Cmap:oaddata(char *filnam)
* X: A; B2 V# w7 h{$ D# N0 e6 A; w9 S9 `/ B  T
        int Temdata;9 j3 [2 A8 ?6 J5 V3 W! o
. F8 ~8 _6 y( |4 P
        if(filnam == "") return 0;2 {, ]5 f( ~0 g( w! y. K0 ?( Z
+ G' k# L. ?! F$ y8 v9 @
        fp_map = fopen(filnam,"rb");
- C6 T# B( A5 R7 x- o2 j" E
' d1 o/ c+ x3 Q* h, ^  w. E5 I3 n4 s        if(fp_map == NULL)        return 0;
! v1 u& }  ?" d$ {& v- B/ p$ y1 U( I/ x1 V) x! b, ]: I
        fseek ( fp_map, 16, SEEK_SET);( t+ A0 B0 J/ q. ?! ?( v5 w
        fread ( &ShortWidth, 4, 1, fp_map);
$ f8 N' g8 H9 u2 u4 [. Y  k5 b, M        fread ( &Width, 4, 1, fp_map);7 M5 f5 y+ K5 a* K
        fread ( &Height, 4, 1, fp_map);2 w* G/ H: J! J, {8 n1 _6 x  c7 w" `' v

1 L2 f, v5 Q1 g/ A% S- h7 {2 `        int TW = Width / ShortWidth;
% Q' L( O0 @# ~2 J! S        int TH = Height / ShortWidth;
. w$ m$ j/ f" O, T3 t6 O: [/ E! X% {: l# w
        for (int j = 0 ; j < Width ; j++)
/ M3 T8 }7 T1 i& s: k        {- `1 v5 e/ h  o4 _) g: k
                _DELETE_ARRAY(Cell);
. D+ X7 O* w+ g6 s: m5 j                _DELETE_ARRAY(Role);
0 w3 H2 u  R, P% U2 y        }
6 F& F6 Y& }# l% c
( \9 R$ ]* Z% c- M$ X* S+ R        Cell = new stCell*[Width];
! x: Y6 A  @6 f        Role = new stRole*[Height];1 O4 c" f/ C7 r9 L" ?+ A
        for (j = 0 ; j < Width ; j++)# ]7 b% x" T; \3 V# ?
        {
0 v4 V; A) @6 n! B1 Y/ A9 C: M- Y            Cell[j] = new stCell[Height];
  O' C' A& b! W, j' R                Role[j] = new stRole[Height];        ) x8 Z4 p6 V/ P( F% k1 h$ O
        }        6 l2 B) i' @! i6 Y4 W* k; C. Q
: A- z% }5 d$ k4 T- G
        fseek ( fp_map, 28, SEEK_SET);
( g% S. G: \- L, L0 C4 L* |5 J  I# J+ g3 K! d7 u1 m. D+ c; F5 H
        for (int y1 = 0; y1 < TH ; y1++)# J" G! B9 Q7 i# b- m
        {. a# v9 k! {* s9 @
                for (int x1 = 0; x1 < TW ; x1++)8 P, t1 E5 r: y, n
                {8 \( ^$ D2 ^0 f, Z$ M
                        fseek ( fp_map, 20, SEEK_CUR);- B+ x7 ^; N! o* y3 Y; B# F
                        for (int y2 = 0; y2 < ShortWidth ; y2++)4 S' Z7 \- h# m. h& k" I
                        {
5 D2 b6 ?5 P6 ~0 D3 y* R- W' c                                for (int x2 = 0; x2 < ShortWidth ; x2++)
3 n& U! k6 `5 X, ~4 h' L2 u                                {
2 T) a: b6 }6 W5 Q7 P                                        fread ( &Temdata , 2, 1, fp_map);
5 e  O- E* w4 @" x                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
/ @( M' ]$ ^; f- R) j# E0 h+ X
; R' K( Y" k6 Q+ h% {                                        fread ( &Temdata , 1, 1, fp_map);
% A% W& r# p+ O. v& N; a+ F                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;& e- s6 {, I$ g" \
* ~6 O0 c- h9 j# u& K& X
                                        fread ( &Temdata , 2, 1, fp_map);1 G1 d7 g( f: ~
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;. _5 p$ X( `/ A$ ~

8 w, }# i" m8 l                                        fread ( &Temdata , 1, 1, fp_map);
% i; h. Y$ O9 p5 M+ D+ K                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
  f" X3 f" y4 F$ B2 s                                        // 6个字节8 X2 P7 L, L, y, y
) S1 x% Y' F/ ?/ z( ]
                                        fread ( &Temdata , 1, 1, fp_map);
. o' C9 f! m$ N$ Q" c  `$ r                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;2 e, ^" A+ N7 h$ Q
                                        % {; K5 u  \  a  f( g/ }
                                        fread ( &Temdata , 1, 1, fp_map);& X4 v7 U& S% F& g
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
$ h3 V# x8 l- H* ]/ y; e( E( k
$ `' J5 A  b) {3 J* y6 p1 t" m                                        //fseek ( fp_map,3,SEEK_CUR);
) j- H* I6 q% @0 i4 `" C3 [* f                                        fread ( &Temdata , 1, 1, fp_map);
$ n" B: {- z) K' e                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;5 L4 f8 p) o3 F, `7 T8 M+ ]
                                       
8 Z  X9 S% T$ G2 ^' A6 Y                                        fread ( &Temdata , 2, 1, fp_map);. F4 ^# d, j. D2 n' X
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
, Z5 L: b( j, M7 o6 n) e$ L/ ~# U" P9 t' A  ^, b( C
                                        // 1个字节
5 \9 P& t0 w4 e3 a9 ]                                        fread ( &Temdata , 1, 1, fp_map);
9 Y( _+ L: |# h; e1 w" O                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;! ]' _/ j$ j* c$ Y# u% S5 J
                                        //if (ftell(fp_map) > FilZize) return 0;
, j& S9 N; G# J' O1 R5 A8 g8 P7 s- k                                }
4 C) q% c6 M- H: \* n( J5 [; T& e                        }7 w7 ^2 r( ^8 [: O7 N# m
                }, \3 @. A1 x6 U7 u& N. Z0 _
        }+ c' T! r/ I. J/ p1 f
+ T. m) |- X- I! O0 Y- R
        fclose(fp_map);$ y: P: s1 V$ _5 A8 M
2 T! c. ~8 |8 Q+ g8 q
$ g- t4 m7 ~" Y- _4 |$ t
        return 1;( Y6 C' J% }" @1 N2 B! X+ }6 G
}
- x' p2 c1 b8 [' c# ]$ v. O' ]6 F
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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