游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。- _1 y  ], o; D* l: ^3 y. i

+ y2 G9 X9 i6 n4 T# R) ^/ Y    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
, l2 |/ r% n7 Y. m5 X1 f3 I: i, m/ d6 C
    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 地表一层的序号
; t1 P! Q; e; J+ E6 `* T/ Y% m. ~: @, t) L8 l
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
3 ]2 ~5 }/ J6 J9 b5 F& S, D6 G07      在地表二层 12 01 这个大序列下的子序列编号" I8 d* ^6 Q4 a( x% G
86      物件层的大序列
: Z1 a1 t1 C3 p1 `. `, k' N00      物件层的大序列下物件的子序列编号" y* F' q/ ]4 o0 A
03 03 00  目前不详, z. W3 l# l3 i5 b
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。: t8 q7 M5 s( q% `
' S4 W6 X( |9 l+ M* r( U
//************************************************************( r2 N) ?1 X2 x& B! B
// 加载地图基本数据函数;
/ o; M5 l- u, l: Y; S//************************************************************
- _7 H# k. O. M$ v+ t7 b  {" B' z( w6 J, Y" @/ X, e
//************************************************************+ z- ]1 r( W  s
// 加载地图基本数据函数;
; c$ w' x. o8 ~2 w6 j  R* o//************************************************************! z. Y' C( i. F& m8 b

& X8 b8 X  F' O3 [- c, [& w3 }int Cmap:oaddata(char *filnam)
; D+ E: V" Y5 W{
" @4 z- }6 I. n! c( m7 w; L        int Temdata;# N+ @  V8 B* `2 {$ I6 G# I

# _) ~$ R6 ]' M        if(filnam == "") return 0;8 ^( \4 I  x6 U+ W5 s% r

; i) b4 d! ~) W& d! a5 y        fp_map = fopen(filnam,"rb");" A. z' P6 v8 A/ n) d- W

# \; B6 W: B9 T' D: {8 m        if(fp_map == NULL)        return 0;
) G" k# n, v7 i. |9 \: `+ i
, ^8 J- p/ w. ?! |# @2 |! U        fseek ( fp_map, 16, SEEK_SET);9 I# V; o, U8 j0 D6 Z% A
        fread ( &ShortWidth, 4, 1, fp_map);5 Z" |% x" P. ]" y
        fread ( &Width, 4, 1, fp_map);6 A* U- w# k! k& y! `* ?, A4 ^6 N
        fread ( &Height, 4, 1, fp_map);' H$ @2 U; n* w( g; b6 M6 U

* [, m1 o2 O: F' s, B, c/ o7 g        int TW = Width / ShortWidth;
% N2 u" V# [2 ~6 q; q+ l/ I' ^" T        int TH = Height / ShortWidth;
+ R/ I! Z( h& X! q& ~, h3 v' `  a8 M6 a
        for (int j = 0 ; j < Width ; j++)) P& o7 H$ V4 j
        {
: {7 f5 m( F3 `9 h; J! A                _DELETE_ARRAY(Cell);; I  A) j" \4 Q; b* |! e" E7 M# J, O
                _DELETE_ARRAY(Role);7 z, s3 z* a: ]! R; D, k, O
        }
) y5 g! l- Q3 [
/ ^% N& `9 N- h. |+ ^        Cell = new stCell*[Width];0 K  N- O+ @- _( `9 u
        Role = new stRole*[Height];* V6 D! S6 W7 B
        for (j = 0 ; j < Width ; j++)9 w* @6 q8 |4 W3 |3 R, w1 J9 u
        {" Y- `8 B+ G5 Q# c5 O0 V6 P
            Cell[j] = new stCell[Height];; f4 Q1 P! s9 y
                Role[j] = new stRole[Height];        
2 l  c: [4 ^3 e        }        4 y1 L6 N6 U; m0 |
- X. V3 r/ w: O5 M: S7 t
        fseek ( fp_map, 28, SEEK_SET);1 R" m: {; `! o$ j6 c

7 ?) R/ v3 u3 Y3 S        for (int y1 = 0; y1 < TH ; y1++)
4 J$ p3 B$ l, X) {& J( s/ i2 K        {: V; E( n1 K, h, Y# A- p
                for (int x1 = 0; x1 < TW ; x1++)/ P) e4 U. F+ N0 x
                {& y+ d, Y, f3 c, h6 N; H; o- x
                        fseek ( fp_map, 20, SEEK_CUR);) P- F: M% e, ]6 f, `5 [4 U3 g
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
5 {. Q# r9 a  [                        {: U% j7 e* i; x7 H) o$ l! O
                                for (int x2 = 0; x2 < ShortWidth ; x2++)' u9 [& o" q9 _" n
                                {
5 `5 O5 r& L5 C                                        fread ( &Temdata , 2, 1, fp_map);, `$ J% J& z2 Y: @  q
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;# f* c  _9 n- Q8 u) C  S- K
3 D4 \/ ]* p3 m2 Q% \4 d* Y8 b
                                        fread ( &Temdata , 1, 1, fp_map);
! Z8 z8 l; p5 U6 W4 d  z' G                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
* x# Q# ^4 m( W4 Q* ^$ e( h6 q7 E' S6 e5 u- W1 w
                                        fread ( &Temdata , 2, 1, fp_map);; ?! e- K2 M9 L% j( s( z+ a
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;- C3 w1 q  h! Y) b% h
: M  {( @" x: ]0 Y9 N
                                        fread ( &Temdata , 1, 1, fp_map);
. O: i, m  o/ g6 w                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;: t# c" M9 ?0 R$ K" p3 [. ?" s
                                        // 6个字节' j: A& Z/ g( I1 @) |
1 b( l! f9 a: C- ?* p6 l0 X
                                        fread ( &Temdata , 1, 1, fp_map);
7 r" L9 T, @! N; }" C! U                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;) d( c% G3 f0 {% F7 ~5 ^1 Y
                                       
* E; Y  k5 U: ^% l5 n; a7 S                                        fread ( &Temdata , 1, 1, fp_map);
+ t5 S: ?8 w# x* m                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;/ W( z: D" U9 ?5 K( H  P/ S8 l
! |1 n; d, x- V
                                        //fseek ( fp_map,3,SEEK_CUR);6 u7 T( k' b* t3 _/ }8 b
                                        fread ( &Temdata , 1, 1, fp_map);3 n& L1 ^7 V' Z
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;9 s: }' }* i# ^, j9 s/ o& N& E
                                       
6 p: b. l* e( r9 V* o! ?                                        fread ( &Temdata , 2, 1, fp_map);
2 N3 O7 D& X9 o/ ]8 B/ e                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
- G8 S  ?2 |! E, y2 X  o( F2 y
3 R/ C  {  c, O2 _                                        // 1个字节
1 y: Z! u+ A& U+ Y0 A4 b                                        fread ( &Temdata , 1, 1, fp_map);
4 E* z% c0 O1 Y; W  F- ^: u                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
3 q& U5 D, _, l! W, f                                        //if (ftell(fp_map) > FilZize) return 0;
& D/ F# u4 F$ _                                }
5 y+ R- D/ Y( W! b                        }7 J% O2 C) r; O; e+ g! N2 M
                }6 M* [% b. b3 m9 E
        }
& m% K, ?5 O# t  x4 ]: U* @/ Z+ @( k- o+ n; b! L3 Y4 o% z  G6 u( Y
        fclose(fp_map);. w6 N7 \1 k! @0 A% f

. z9 N9 g- j# f/ p- e
$ z  L% J$ L3 J5 o6 `+ n        return 1;
% D& Z; @6 L3 f) ~}
0 e/ r2 k  q4 k' I) Z" `
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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