游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
# O: i, ]% \! U8 a( s# _
: |9 i# {& C& S+ |8 p    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。# X; h# k% ]" f9 H
: d. f8 U/ M+ U% p
    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 地表一层的序号& H* w7 U1 R6 U  Y( E6 @4 I
. f' e. x8 ^: r7 k9 U/ Z5 D
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号7 P, ~+ M5 y; c: _: ?4 |
07      在地表二层 12 01 这个大序列下的子序列编号# G: w5 ?9 X$ k
86      物件层的大序列
; d( o! R, n9 f00      物件层的大序列下物件的子序列编号
( g( y4 V+ p( x4 V9 z" _5 S2 J; y03 03 00  目前不详
. U1 l: O7 j0 }% E$ n01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。* Z  c' L( y0 i. n

! X# Y+ a( h; Z5 K" O//************************************************************5 I% U6 n9 d5 [, k+ @; O1 N- K
// 加载地图基本数据函数;' }( Z. q) O5 B. k, x3 E2 n
//************************************************************
: e" Y; u$ M1 P2 y) I, [- M, M. U& ^! v) U" T8 U2 E3 Y
//************************************************************
  q$ j" |4 D  Z2 r/ b. |8 q. _// 加载地图基本数据函数;- u, h# a/ a, f6 J6 ]" H
//************************************************************4 g) q% m( \+ q6 O# l  e% G

4 y" l) V" y3 o# ?% F* }  Yint Cmap:oaddata(char *filnam)6 \/ r/ \6 V* L6 M
{- j# R. u* w8 `$ v
        int Temdata;* c/ X8 \9 t5 H+ E! \6 G5 E

) ]  V  ~( G3 ^  g+ t        if(filnam == "") return 0;
7 _8 Z6 N4 G& _3 \* E  j3 C0 Z- j
! h) `: L& j. a/ f        fp_map = fopen(filnam,"rb");5 z" V! \  U' Y4 G

" f" g7 f" b# ^1 A1 }$ A        if(fp_map == NULL)        return 0;9 F7 b, j: A# `/ X# i, L) M

  x8 C- G: K# I6 m# W        fseek ( fp_map, 16, SEEK_SET);% M* E+ K* B1 P( i9 Z5 J2 Y+ A
        fread ( &ShortWidth, 4, 1, fp_map);
. F4 S$ J1 _3 @        fread ( &Width, 4, 1, fp_map);7 T8 V$ f! I2 V
        fread ( &Height, 4, 1, fp_map);
; C) i; d9 C8 v! O0 X" A
% j: |" H% t' j9 \/ p# y2 V9 J        int TW = Width / ShortWidth;0 {, I; o7 `  Z
        int TH = Height / ShortWidth;
+ }% c2 r8 u' n
$ @2 }1 k) {/ k" g. |        for (int j = 0 ; j < Width ; j++)
! `9 O1 i' J/ K- h+ J/ _        {9 N' m/ j3 Z& v! P
                _DELETE_ARRAY(Cell);
: s! |" l8 @  q                _DELETE_ARRAY(Role);; K3 d0 H! x& {( X% s% f! S
        }
8 f; J: B; [/ ]4 M9 y
# [) @4 F: E- H* u$ F        Cell = new stCell*[Width];
, i7 p4 Q3 H+ l+ m- {' w        Role = new stRole*[Height];" D  t: D. k2 P5 e- O: C8 d7 D' t% o
        for (j = 0 ; j < Width ; j++)
7 r* i. Y! i' x) e2 U        {! O. }' p( V- R# S2 p: p
            Cell[j] = new stCell[Height];
$ k$ w  |+ E- ~' O" E; n                Role[j] = new stRole[Height];        9 H$ m. t) i$ U) L
        }        
. S$ s% o1 S' e; g9 v+ R" `0 H, l' ^' S0 F: v1 u; X3 y
        fseek ( fp_map, 28, SEEK_SET);
4 o4 o9 i6 j3 Z1 x+ V& m, b! j  i
9 {! M: D, ?/ Y8 t6 z  O        for (int y1 = 0; y1 < TH ; y1++). w: z4 Q5 I) R  N$ Y/ t" d. D& r" S7 M
        {; g( P8 o% y4 o; M
                for (int x1 = 0; x1 < TW ; x1++)1 j: t# v1 y4 c8 w. r* }( k1 m
                {
, {' u2 t' u0 o$ F8 d                        fseek ( fp_map, 20, SEEK_CUR);3 r% n* d0 ?1 {+ z& @
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
) d; @# w& f) N  a) o                        {
7 K+ Y* L( S& g                                for (int x2 = 0; x2 < ShortWidth ; x2++). Y8 O+ x2 \" U- N+ X
                                {6 H& r5 o; k* Q, ?' N( S" [! d' G: n
                                        fread ( &Temdata , 2, 1, fp_map);
. ?( h1 w- U: I& Y" V2 w% Q3 N                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
" f5 D0 \' l" c* f' K* a1 a
. b1 q: K# [" Q  Z8 x6 I                                        fread ( &Temdata , 1, 1, fp_map);
! \( k- _& h7 B2 q& T                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
: d# }: z2 ]+ e; X9 r+ E$ j7 Y, ]% h% N6 }6 _; ~/ Z" H
                                        fread ( &Temdata , 2, 1, fp_map);; c7 [% X) }: }& [. D
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
+ F& @) ^. ^/ Z; l- j- h- p' X- D% O, L, K+ P$ |
                                        fread ( &Temdata , 1, 1, fp_map);
3 a6 n! o0 A. L2 ]                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
$ \# J8 d  ^. E                                        // 6个字节
: M& T5 k% s, [9 [  f( J. p3 ]  L0 ^7 c! J3 x- t# L( _: B
                                        fread ( &Temdata , 1, 1, fp_map);. i2 [. B% p/ }8 T, m, J
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;1 L1 T0 R7 B7 j
                                       
, K& y( I! v7 l1 `& V8 V5 d                                        fread ( &Temdata , 1, 1, fp_map);: c$ G( R1 n+ ?0 w  p
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;% G" n7 K& f+ x7 B0 Q" |
, Y3 O! g  X( N) D
                                        //fseek ( fp_map,3,SEEK_CUR);/ u9 u" w" t. s; a- ?
                                        fread ( &Temdata , 1, 1, fp_map);
/ w& V$ D) U, a8 Q                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
7 T5 U; ]2 v: S( \. x2 l8 ^( s                                       
+ @; W0 p6 a* l: u+ g% y                                        fread ( &Temdata , 2, 1, fp_map);4 K* b2 P7 k6 f$ [- H- v
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;$ H1 U) N; Z- O9 k7 {

3 n& u% }: ?% F/ T1 \$ c' k                                        // 1个字节1 s' e+ O- q" `# o4 _7 |$ [  b
                                        fread ( &Temdata , 1, 1, fp_map);
+ q2 F9 `, r+ ]; Y' O' M6 u7 ?                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
1 n& X5 E6 ]( i8 v4 `                                        //if (ftell(fp_map) > FilZize) return 0;1 d! Q9 U: A1 [3 V8 T
                                }$ c8 b/ k: G& Z0 M
                        }
: B' \: A; ?  o0 j# w+ P/ |/ H                }
5 R2 ]- W' L* b, n( [# a* e3 W; Y1 H        }" G2 [; B9 S, u+ S/ U

- @" A; K/ L7 b1 m+ n        fclose(fp_map);
2 z4 X3 ~3 G- E# ?* ~2 Y( B2 o' B3 ?6 H! O' `5 [0 f. h

8 }$ K; Y7 G7 l: X) ~        return 1;; |( P! r6 C4 j3 t6 S
}

  z" L6 m1 O# F) Y8 U& E. M& |% c6 M
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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