游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
7 V2 v9 {9 g7 P" H
/ j6 _( y" \; a$ `5 j4 H3 \: m    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
) X9 ]% P0 ], L/ ~0 g0 i# G
3 K) j! I' g; c& ?8 ]1 Z6 g    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 地表一层的序号
) K+ }% L7 R: T# i! }" ]  Y5 A- x8 M
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
& w9 x% b8 K6 A: r+ O1 s* h) i07      在地表二层 12 01 这个大序列下的子序列编号" F* t( J  J. B/ h5 H. t1 x9 j3 R3 i
86      物件层的大序列
6 i6 K* z# l0 o" E$ O2 d00      物件层的大序列下物件的子序列编号
- I5 u( Z+ p& Z% g) y03 03 00  目前不详; S) n  h6 @1 k& l
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
! o7 w6 v, }+ t) j4 c) f7 ?( G7 i8 w( S# J/ l6 h
//************************************************************
% a2 s: W: `+ F7 b* X1 r7 E// 加载地图基本数据函数;
9 Q+ w* R/ v$ R* Q* @6 U//************************************************************9 r  |" u* I' T( T% M

; _7 N& K6 H' z; ?8 b//************************************************************, w2 M9 ?& o) w# ]
// 加载地图基本数据函数;! I( ~( l- E6 V4 A5 ]$ L" _
//************************************************************: L1 w3 M2 g/ @

8 R2 F2 n, u' |( |1 L3 T" a. g1 M, aint Cmap:oaddata(char *filnam)  X" q  `7 M" D( u
{
( z$ E* X  G) A0 y$ h3 ~  u) p% V        int Temdata;
! w* X1 a: L. y5 F+ g# g2 s
/ H- b0 r+ R0 F/ V, n        if(filnam == "") return 0;8 q  h( c  f" t0 X# a4 d
+ V% |' ^% M$ N* w  o9 {6 a
        fp_map = fopen(filnam,"rb");* }* |: l/ }: F; C

( X; c2 G0 L6 e2 |4 e* J        if(fp_map == NULL)        return 0;
3 M6 H1 ]  X9 v  A( s
1 `9 P7 B0 ~! q9 E        fseek ( fp_map, 16, SEEK_SET);
" u6 D& n& J3 y+ @* |4 E        fread ( &ShortWidth, 4, 1, fp_map);# ?2 s2 T8 L" _
        fread ( &Width, 4, 1, fp_map);, M5 B4 O) {  j+ z: G6 F: u7 l
        fread ( &Height, 4, 1, fp_map);
' y$ F$ z  Q) V( r1 e+ k
2 t3 O/ w. ^. p3 O8 y        int TW = Width / ShortWidth;7 E! S* t( t# X1 q6 I2 v
        int TH = Height / ShortWidth;
; _" e# y0 i8 A/ {1 w, B
) p, U2 P% g9 R8 @0 N( u        for (int j = 0 ; j < Width ; j++)
. M3 f* A) o# F& S0 M2 C        {' F( x- p$ O" Y; L
                _DELETE_ARRAY(Cell);4 \  z% o0 j  G" I3 x8 B
                _DELETE_ARRAY(Role);
6 k, }% L, f8 L9 `$ c, `7 T* i        }) d, N# @" ?# M0 |( B
+ M( }, x7 H. p9 _
        Cell = new stCell*[Width];* [4 K" m- w' i. \/ i6 ]( t
        Role = new stRole*[Height];
7 [4 p4 u6 j5 c. b+ R        for (j = 0 ; j < Width ; j++)
- V. t) t4 O/ _1 q        {
& D: i1 j/ d8 e7 p; Y4 U            Cell[j] = new stCell[Height];0 c! m8 n9 Y! r  m; _
                Role[j] = new stRole[Height];        
4 T. F9 I, |2 M        }        
! w0 w7 U3 i' T- v" G' O
6 r5 Q' ~" W& x- E        fseek ( fp_map, 28, SEEK_SET);. R/ Y7 H! X7 n, U( q
9 ]' Q( e9 w; V- l, j3 T5 z
        for (int y1 = 0; y1 < TH ; y1++)4 \% R( s' d3 I. i
        {
1 O4 a7 _% c$ |2 `                for (int x1 = 0; x1 < TW ; x1++)- U5 K$ t' T. A' R) D
                {7 b* P" Y/ D+ Z/ i$ M
                        fseek ( fp_map, 20, SEEK_CUR);$ O. o. i7 k: C7 V
                        for (int y2 = 0; y2 < ShortWidth ; y2++)( e7 B% I7 v: _% l' I
                        {+ M, ^+ `1 c9 l6 Q1 k
                                for (int x2 = 0; x2 < ShortWidth ; x2++)" _7 p, v( h; ?% j) O# S, {
                                {
1 z) ^! v$ u7 z  e6 s7 w                                        fread ( &Temdata , 2, 1, fp_map);2 ~# m" ~+ @; g4 s9 Z
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;  a, T8 n. y' x
# C6 H9 F9 y* D, L( u
                                        fread ( &Temdata , 1, 1, fp_map);
9 J# E, x3 B6 D4 ]8 r                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;9 O) k8 P3 b) m: _$ e
! R( t/ D% N1 x  R% \
                                        fread ( &Temdata , 2, 1, fp_map);
% I) c% @, h, L+ R. R- r                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
" h( {: Q- W' k8 S; f4 J9 S, D
  D2 l7 x& a& H! G                                        fread ( &Temdata , 1, 1, fp_map);! e) i/ D. \/ ~$ |4 S, T: u
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
2 t7 Z6 G, j; x! z) M                                        // 6个字节
' i9 z3 W5 b" y2 f9 {1 ]" Z/ W! a1 S2 o
                                        fread ( &Temdata , 1, 1, fp_map);
8 @6 @! e; c# ~                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;+ g6 z" \2 h) [) @& K7 ?& p, H
                                       
" M% n* }' U0 @' A                                        fread ( &Temdata , 1, 1, fp_map);
7 }- g, i( x7 e                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
# |3 a- z* v; C8 I7 ^& u1 {  _
/ e$ f: r# |! E                                        //fseek ( fp_map,3,SEEK_CUR);
! R4 m* l# W5 x* l) p/ `                                        fread ( &Temdata , 1, 1, fp_map);9 R* |  @$ e- z4 A
                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
$ O" c7 m$ A4 u& w                                       
4 c. `2 ?; i( n* _9 I                                        fread ( &Temdata , 2, 1, fp_map);6 J! o: J' f' R
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;/ `9 v# U9 {  l. W
$ X0 K7 a, o+ ?
                                        // 1个字节
5 q# F" @% I- K( A9 x                                        fread ( &Temdata , 1, 1, fp_map);1 ]/ s7 w  b" t2 W* W- s
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
* c  J. ]9 `& b/ M/ e; Z5 F9 O6 Q                                        //if (ftell(fp_map) > FilZize) return 0;) ]: m$ h+ [: k9 z8 p
                                }
1 V: I0 u1 t- E$ h/ |7 b0 R                        }
2 N6 M& g# \! X+ c                }
1 H0 ?3 Z) O3 I: v; Y- R        }: s% m8 P# x; d

4 t* ^  H! e9 n6 E- s  s+ {        fclose(fp_map);
, ?. E5 D; j- i( ^: ~% H% ]" f- z: w- a% @

$ E+ \  c5 v* g3 q- P. M9 u0 i+ s        return 1;
' T3 z1 i' l0 \}

7 R$ i7 ^, P5 E0 z9 w
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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