游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
# p2 f  w& a& e
, ?1 b8 @/ I% p! Z* p    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
% I, K/ V4 k1 [2 B9 o3 {1 r
. B4 f" j& \: F" M2 B: Y# R: n    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 地表一层的序号" s! E' q. _$ b
" d. h2 B( _: n
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
0 P' g* P8 i: K# y: U, w! Q07      在地表二层 12 01 这个大序列下的子序列编号
8 Q4 _! I2 m1 @86      物件层的大序列
& Z- y/ M: m% T: `. H/ {00      物件层的大序列下物件的子序列编号% K5 Q5 a4 }8 O
03 03 00  目前不详
* d2 q- v; R" X01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。2 s# O/ t4 S; T" u  a/ o- V, K9 _

$ |8 k2 A, M9 y1 F1 J$ k$ j//************************************************************' [. C/ G) M, [& u
// 加载地图基本数据函数;7 o4 ?) ^* ]8 o" i; w
//************************************************************
' X/ G9 I, ^& S$ g, {4 z' {5 e6 ]
$ D! j' f9 r2 o8 Q: H* k, b//************************************************************8 t% D' v7 ~: K3 L4 y
// 加载地图基本数据函数;
' W8 Z8 i7 q) q5 h. ~) n0 B//************************************************************
' a5 Q- [* o9 `) S/ k+ ?; k
: c  n5 Q7 y- a# xint Cmap:oaddata(char *filnam)" U8 c6 d- I/ X; N. T7 f
{
( w4 y, t) ]! k- j, P6 Q# U& J        int Temdata;7 o5 m- o4 j% g% X6 r' ^4 R

2 `0 q: N) @/ Q5 i2 [6 z1 r( o        if(filnam == "") return 0;
6 d  H+ y- h* r7 M8 I4 x! j4 e2 g( L, j. r1 d, ^- y
        fp_map = fopen(filnam,"rb");8 `2 C, c. G+ y, E
" Y* l7 Q: F" Z  R3 ?+ P
        if(fp_map == NULL)        return 0;& o- U( L, {; D: L3 {

5 v+ v- L9 w; _) W- K8 w        fseek ( fp_map, 16, SEEK_SET);
7 _1 e, ^  l: h6 H3 _5 e5 Y        fread ( &ShortWidth, 4, 1, fp_map);
- h/ j4 @: s5 Z        fread ( &Width, 4, 1, fp_map);
' x! `, w6 a; F# R3 K        fread ( &Height, 4, 1, fp_map);
( |; @6 n- r) w+ _* ^
$ F  d1 P- J! |        int TW = Width / ShortWidth;/ D1 p5 H5 @2 ?# }
        int TH = Height / ShortWidth;( C, l( c) o& b% }8 z* b& l
7 A, Z# _- V) X
        for (int j = 0 ; j < Width ; j++)
/ R$ P- h5 t; X2 o0 u        {8 I9 |( }; B* M2 S
                _DELETE_ARRAY(Cell);0 i0 E/ A9 a7 Y
                _DELETE_ARRAY(Role);
. ^+ C3 q$ v# I. H+ Y4 ^& E+ m        }6 e6 W+ ^$ |* }; M& q" F# [* A3 m

7 [2 w2 g" V' m$ e# L        Cell = new stCell*[Width];
5 X3 h) p! z4 ~7 D6 e' ]8 ?        Role = new stRole*[Height];
6 G8 f* u3 D4 s) @8 ]# w        for (j = 0 ; j < Width ; j++), O7 j* \7 ]( e( E& u& T
        {
% _, J/ a( D1 d* ?: k- d+ A            Cell[j] = new stCell[Height];
6 y1 ?$ x* K6 @8 W0 E( c  b                Role[j] = new stRole[Height];        
# D* }- [0 B; S        }          _) @, O! d4 O3 n  ?  K6 T# i
) |# t. q9 A% @) D' A/ R) o" u3 T
        fseek ( fp_map, 28, SEEK_SET);
( r6 T  F$ t2 h) A8 T# ^( y8 i/ \+ T( q9 x4 B+ f8 r
        for (int y1 = 0; y1 < TH ; y1++)
/ o% |. \; [$ p$ C, M' w        {( O& U) T9 `8 P$ S$ @; _$ _
                for (int x1 = 0; x1 < TW ; x1++)2 T, [1 O2 E/ z5 z+ c8 @! |7 G
                {3 I. M. K5 L6 G1 t; P9 v
                        fseek ( fp_map, 20, SEEK_CUR);
. E/ A6 N% [0 e- v4 h( w% y9 ?& o                        for (int y2 = 0; y2 < ShortWidth ; y2++)
# N7 a1 u# f2 x- N' Z) z' x                        {
1 U/ i1 w& q# t                                for (int x2 = 0; x2 < ShortWidth ; x2++)
7 G  w7 J$ M! ?3 m, v$ g$ U- x9 m; Y                                {4 z3 p4 r# S  w5 |# S# O: ]% V
                                        fread ( &Temdata , 2, 1, fp_map);1 n, a3 Z: X0 v3 p9 r; ^
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
; f* x2 {; a& B2 M6 G! Y6 L. n$ b# Y+ g$ C# t+ C' A: r' w+ }* [$ I
                                        fread ( &Temdata , 1, 1, fp_map);" b0 E! Z& F8 g, Q. Z3 I. U
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;: I. T4 Q( y8 ]$ _3 X1 }
: Y+ y8 {, ^! z4 p$ }1 K
                                        fread ( &Temdata , 2, 1, fp_map);
' {1 M% t+ |9 k( U3 F8 o                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;# D5 g7 O% B, H0 M* Z

7 F# n5 Q7 x. I: y$ g                                        fread ( &Temdata , 1, 1, fp_map);% {1 q. T1 i9 b" m
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;) l& ]7 s1 ^! n8 u$ ^, a
                                        // 6个字节, I7 V  C+ \8 ]8 \0 J! _

, J1 ?, E" @! c, `' @+ n( W                                        fread ( &Temdata , 1, 1, fp_map);+ F" U3 o$ N0 P" s  ^; W
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;# r6 Y2 U5 k5 J# ?: q2 e
                                       
4 e. ~- t, Q5 E6 K" \                                        fread ( &Temdata , 1, 1, fp_map);
7 t: F! a5 Q# ?8 v: U                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
& r  r6 ]1 H& N  L; z- c% T/ i
$ ^, w' w4 v3 k5 \& R* a                                        //fseek ( fp_map,3,SEEK_CUR);
5 b7 n9 H; X1 O; O                                        fread ( &Temdata , 1, 1, fp_map);
" e  J& R2 H% @4 V$ p  r! R  l( I                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;: x6 C9 J* @6 H) U0 B" L
                                        9 u# {/ H$ ^8 {, K0 z, B
                                        fread ( &Temdata , 2, 1, fp_map);! z8 F5 c. t9 K/ I: [/ m
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;. c; e) t9 G, C; |( z: `" B" w. Y
* f3 B2 A! G; T  D
                                        // 1个字节
0 W! R2 |4 l* Q                                        fread ( &Temdata , 1, 1, fp_map);
- @2 Z! Y9 Z( g, [" U; L                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;$ D: i) G6 g: `4 t
                                        //if (ftell(fp_map) > FilZize) return 0;
  e) f  b5 o  r: y                                }& f4 e4 Y) v; }( K% E( @& q
                        }
! p5 N9 G2 J1 [8 ~8 k                }
' h% W; q3 _  }6 e* C2 c( C$ L        }' V" Q+ ^" d% _: r- m, U3 Y  B; k- v

/ Z- o5 f! b/ U5 d2 G: |3 m$ |        fclose(fp_map);8 ^1 K$ j) M& C: A; M3 W! B+ W: m. a
8 O1 a! r$ K8 ]3 t+ s# `% l

* z4 b: Q  u5 F$ o        return 1;
) q/ M7 D+ H- [7 i" T% z. ?, `/ t5 g}
  j( E, M* b1 F, F# Y
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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