游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
$ P' G: k, ]8 E8 @- ^- g( N& Z/ }3 D% L2 e
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。( |- r+ a! T8 g2 a. R# @* s

( _- T* I7 ~0 q. `    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 地表一层的序号
, X2 ]3 h" r4 M1 E  P' S: a% p
4 e/ Y+ w2 B- {2 x. F/ @03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
: }" `( P% B( q  U07      在地表二层 12 01 这个大序列下的子序列编号( l  y- u$ C2 f+ ]  d! \: F4 a+ R
86      物件层的大序列
! P3 W& N. z3 p00      物件层的大序列下物件的子序列编号6 q# n" u% ^, v6 x" i
03 03 00  目前不详
. D' M! E6 P+ G0 N# K0 |3 w7 |+ G01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
& g* ^- }* M/ z
( x( }( K. D' `# g, V3 P//************************************************************1 N0 R/ A- c+ [2 }
// 加载地图基本数据函数;
: M: [) \& k  b+ z5 |# y; ~//************************************************************
$ |! O. }7 e, ?  C$ S3 Q+ _$ v
7 g7 u, }- N; I//************************************************************
* R8 @9 J2 ]6 {5 ^+ G# _// 加载地图基本数据函数;
, V/ u2 q/ W) i% r* d//************************************************************0 ]* W& v  u3 f+ `

# i8 G$ Q  L1 g; Gint Cmap:oaddata(char *filnam)$ I# o0 O; f: [$ \
{/ D6 G/ Q! z! H
        int Temdata;' R" F$ A/ z* s& j2 G( B
! ]! e9 e5 @& \* \* \1 [+ N
        if(filnam == "") return 0;
* e' E5 l. ?+ `
+ }2 R1 E* R8 v; K. Q        fp_map = fopen(filnam,"rb");$ c/ S# s2 o5 d; i* I
6 X* l3 T4 y4 x0 J/ p/ y( R
        if(fp_map == NULL)        return 0;
: y3 K/ S7 k8 ]" r( c+ k' l$ T: t- X) g8 }: J6 d1 ]
        fseek ( fp_map, 16, SEEK_SET);, Z* B: H, T$ k" G1 G: `; q* H; W/ Q
        fread ( &ShortWidth, 4, 1, fp_map);; M3 E; m2 s: j8 I( G1 @
        fread ( &Width, 4, 1, fp_map);& c- W1 n$ |2 ^# [
        fread ( &Height, 4, 1, fp_map);
$ D7 }3 `6 I- ~6 F+ r  M  p( ~0 w7 F! @: B* n; B! q4 ?
        int TW = Width / ShortWidth;9 ~- t! ?- u5 m( R( S7 ^8 D. k
        int TH = Height / ShortWidth;
& [, d+ }/ V% d" a9 l/ Q7 {" v0 q! c5 C7 A: b  e; w) g  P7 A' R
        for (int j = 0 ; j < Width ; j++)% s6 `8 q5 o; i8 ]! v3 t
        {
) [& X1 |9 b+ w4 H, ~7 V9 B                _DELETE_ARRAY(Cell);+ j) z3 y. l$ l* H# t
                _DELETE_ARRAY(Role);
( t- {$ T+ g% L* I1 B4 R        }
- }" r8 g2 A3 q& ]" ?, Q9 d5 }$ ]3 t8 I
        Cell = new stCell*[Width];! p- t6 }7 M# @+ e% c0 x
        Role = new stRole*[Height];
4 C2 V3 O/ o, P4 e' h        for (j = 0 ; j < Width ; j++)- G+ Q/ D( N: C4 f
        {
: p( u+ @& b4 ]8 r/ J            Cell[j] = new stCell[Height];
5 W( @+ x6 V4 C9 h& U                Role[j] = new stRole[Height];        , W  y' A& f# n! r: P  e! C
        }        
; h0 O( B6 f- M- ^6 I- m' S
0 N1 {2 G5 @) f5 Y+ y! P2 R        fseek ( fp_map, 28, SEEK_SET);3 ^% O1 d) W% |% ~/ j# S$ b

+ U/ z& r' ^* I- z, R9 i        for (int y1 = 0; y1 < TH ; y1++)- z/ B7 |# K6 g8 b3 [, h+ ~1 g0 X
        {
- s" J! U0 v3 O1 D                for (int x1 = 0; x1 < TW ; x1++)
4 s. t" h  x2 y$ y                {
! K9 k: C" h; L7 |5 Z                        fseek ( fp_map, 20, SEEK_CUR);% T' m/ m& [  U
                        for (int y2 = 0; y2 < ShortWidth ; y2++)9 M# N( I( l/ Z- f
                        {
  }: l7 x, s- C. ?. h                                for (int x2 = 0; x2 < ShortWidth ; x2++)
3 j  m$ D3 z- t8 A+ B% `; \                                {' |1 a5 i( N0 N$ w. H
                                        fread ( &Temdata , 2, 1, fp_map);- I8 x$ n8 i( E. b- F# B* S2 F
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;1 x! K1 f: B! U* E$ e

  Y) O( Z$ F2 f' k4 j: t4 B; V                                        fread ( &Temdata , 1, 1, fp_map);
) ]0 G2 F& V7 `# O3 p2 S& Y                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;" m- J) c3 _1 {

' e/ A" C1 Q  g, H4 o: k/ i                                        fread ( &Temdata , 2, 1, fp_map);9 R7 g8 x& ~: E9 L
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
. t' Q) ^6 \4 k& A
/ @8 k5 O  I5 R9 E* S5 X1 x                                        fread ( &Temdata , 1, 1, fp_map);2 H( p5 O$ u/ v; ]2 m
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
5 \0 k$ e( f9 z+ \                                        // 6个字节
- ]- E* W; p3 U1 k" f# m
6 f2 Q1 z4 d' _3 K; _( e                                        fread ( &Temdata , 1, 1, fp_map);) D/ @$ c% T6 ^, k% A! ]8 M
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
( w# |$ ~% ^9 u( V                                        ! j' a% w0 g2 O  s3 f5 y/ b2 L! i
                                        fread ( &Temdata , 1, 1, fp_map);$ K. f; R4 p* k, w: G4 K* ~' U1 d  L
                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
- f+ i( _6 a" v* l( V, {* i' `) ~' J6 ?* Y$ q# ?+ T
                                        //fseek ( fp_map,3,SEEK_CUR);
, _: T3 d9 n. j- K" O9 z                                        fread ( &Temdata , 1, 1, fp_map);
9 R* z6 n+ I1 `( C2 d                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;7 Q4 G$ I& N7 O
                                       
4 O" q, {# N8 N: ?5 @                                        fread ( &Temdata , 2, 1, fp_map);
8 [) w5 c- Q9 ?9 v2 |' p$ P                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
$ p6 P; |: Q5 l( F, W
$ U# K! x% ^0 d" Z- q# j                                        // 1个字节
# B" m- ]; i( G1 U% W0 S4 B' m                                        fread ( &Temdata , 1, 1, fp_map);( s& r% y( t, ?  P1 ^- m  L$ l' z
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
; R( W. x% W. _( Q                                        //if (ftell(fp_map) > FilZize) return 0;1 Q8 w# o$ Q* q1 U, s% @
                                }
0 i! b& i$ Q4 d# s                        }% i% \* V* h, R( f
                }
3 X0 S" b1 x; L) k  p        }
/ L( c/ O4 J" S& ]2 h/ `- m7 c' ~
% f, L0 z+ y7 i/ G( s" ~2 P4 J, F2 ?- T+ m        fclose(fp_map);
4 Q9 ^( k/ t# n; M+ z. r: i7 o- n
# h8 Z/ a% R' h2 r( M2 H; X2 D: P# Z& S% Q
        return 1;
# i$ C8 \- w% U. ?3 g( z8 D! u}

) U" h8 r4 z( Q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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