游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。. n4 v' `- K$ k) t: l' u

, a1 k7 I, c! l    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
4 P) u4 c% J0 o! X7 F- ~* E, S0 }: E% B# Q. V. S5 ^5 V% \
    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% y1 s  ~. [. u3 q0 N9 h, T( M/ K( r2 H# K3 ]
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号4 O; y" M6 q. r7 y
07      在地表二层 12 01 这个大序列下的子序列编号
( d/ ~- }6 E& l- B$ n; J86      物件层的大序列
/ ]' k$ D) k! u. F7 T$ H00      物件层的大序列下物件的子序列编号' {, N( z7 \  P7 t+ f) l: X7 l, Z6 p
03 03 00  目前不详
8 O7 @6 g; M( I3 J: Q7 Y01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。
7 V& z  w0 a- t0 u# i! Q9 B0 K+ U  c" {
//************************************************************0 C9 g& I. |2 n8 H9 Q9 }
// 加载地图基本数据函数;
: y/ n# n: C' W# i& @6 ]( Z( V//************************************************************
+ y( `2 U( E2 y9 `
( K6 e2 S- C" o) D$ \6 d+ c6 H" n//************************************************************
( z2 Q  N5 H. T3 ^4 O+ k: @// 加载地图基本数据函数;+ ^6 [) U3 F$ R9 I
//************************************************************( {8 L9 j0 B; k. M9 {$ s& `
$ J9 q6 K: I9 p: Y) a
int Cmap:oaddata(char *filnam)) q, y; s+ m0 x. K) R2 ], @3 Z
{
# h5 P- c  {, b4 F( k7 K) x        int Temdata;1 l& y4 A8 E% Y# d' s& M

" `* s9 Q( ]/ B* G0 _, t        if(filnam == "") return 0;% C) E# p3 x) J: ?4 \+ k$ s
& ?* V+ }  S: C# e" N5 o
        fp_map = fopen(filnam,"rb");/ V3 V' z% J6 N! l8 x3 H% K7 p3 h# ]

& G6 Q% J" W. Z5 t5 H        if(fp_map == NULL)        return 0;% i; a3 |1 e* U% B# Z  M
1 @& W- y' M. R( r
        fseek ( fp_map, 16, SEEK_SET);# A( f! _9 K; t6 `) @7 e4 j: I
        fread ( &ShortWidth, 4, 1, fp_map);
; c' Q2 z8 E  D        fread ( &Width, 4, 1, fp_map);
  n$ J- h- P+ j) a! ~        fread ( &Height, 4, 1, fp_map);6 Y' y( v$ v, A
% w* f2 n" n9 \/ p; Z
        int TW = Width / ShortWidth;
+ P# i/ k, n. E1 h# N        int TH = Height / ShortWidth;2 W7 ^8 y, X( Q  V8 I

% e8 Y# b0 K/ Q1 _7 z        for (int j = 0 ; j < Width ; j++)
: q4 g$ e8 Z0 }7 d3 c        {# Z- F  {* O' ]9 w
                _DELETE_ARRAY(Cell);
' g0 f% H5 Y- z; _                _DELETE_ARRAY(Role);
4 p. {  {4 q) T. l4 G        }
  v& M% h& x6 y8 t& q8 C9 h' }5 ~
" R1 A4 W7 @7 x8 i1 @        Cell = new stCell*[Width];
, d- E. @2 |. q* Z" A5 R. B) d: a        Role = new stRole*[Height];' ?' r: U5 u0 [3 A9 h
        for (j = 0 ; j < Width ; j++)7 Q/ g  }4 {' W4 @+ a
        {4 D5 g. Z9 Q' T7 d  W2 Z
            Cell[j] = new stCell[Height];
: d) D/ J) K1 a2 v  W' ]                Role[j] = new stRole[Height];        " u/ X$ L; B1 X2 p2 g
        }        : N, k% H) P# v; }! }5 g

! r( k( U1 {$ Y        fseek ( fp_map, 28, SEEK_SET);
/ ^; ], J1 [& z1 h8 F8 \1 z
& [0 C4 P4 ~* A8 x4 G7 |        for (int y1 = 0; y1 < TH ; y1++)
4 S7 w) e) w( T# Q- @) g; H        {! n  Y$ }9 g9 s$ e
                for (int x1 = 0; x1 < TW ; x1++)* T' g# P) A4 I: p1 m+ O( Z
                {# F3 k8 k/ C+ s( p
                        fseek ( fp_map, 20, SEEK_CUR);
: f6 q# `9 A+ b1 E  ]- w9 a$ H7 ?6 L                        for (int y2 = 0; y2 < ShortWidth ; y2++)
' {; j* x% z" F                        {
; E4 r" S/ w! V" h8 p                                for (int x2 = 0; x2 < ShortWidth ; x2++)$ l, P: W3 G! ?+ d9 a; X2 s/ `' Y1 L
                                {: T" h3 y) _' K( T
                                        fread ( &Temdata , 2, 1, fp_map);$ R/ M' k/ a2 w
                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;& u, Q0 _6 U% e% B" d

- j5 r) Y& C+ {$ O5 B& L9 J& g                                        fread ( &Temdata , 1, 1, fp_map);
. T' L) S; n7 B  z# e                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;! |- d' U6 v7 z( x7 }+ g) W
) ^7 M# Q) k& h
                                        fread ( &Temdata , 2, 1, fp_map);
9 G* h+ T% l  F7 @, m2 Y                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
# f, v! n; i6 B: k
" H! o7 N+ t) P* U& c- o  M                                        fread ( &Temdata , 1, 1, fp_map);* b% ~% H- i1 y
                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;( ^8 n5 L  E+ j
                                        // 6个字节" N( j; w( g+ `3 S/ j$ A) L1 ]
4 `  B# P" d3 ]$ e7 G
                                        fread ( &Temdata , 1, 1, fp_map);. E7 M. {# {7 f: W! \* c0 e, T1 C6 [1 X
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
- w" o: w3 Y8 u                                       
: c2 [8 o9 C4 ?$ Q; @, t                                        fread ( &Temdata , 1, 1, fp_map);
" z' a4 ~. |( y# k: r5 O                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;; `6 i$ z( t  u& @& F0 R
: K4 T" J$ p/ t9 [
                                        //fseek ( fp_map,3,SEEK_CUR);
+ q8 N7 V% \# S$ ]  C9 o                                        fread ( &Temdata , 1, 1, fp_map);
5 i/ K8 Q4 s- ~# B; w                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;# u% w) u. F: y' J  T& M, h; L% A
                                       
6 C  V& I  `& w                                        fread ( &Temdata , 2, 1, fp_map);7 K4 g1 i7 Y2 m2 S1 v
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
  i3 a* [6 |! w! n4 X' J8 S# s' U5 C% d' k( e# `
                                        // 1个字节
! t3 \" x# c* ^1 E  R                                        fread ( &Temdata , 1, 1, fp_map);
  e" A3 U) c; O7 J                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;
7 E/ ?2 K2 H3 A! V/ M& c2 g                                        //if (ftell(fp_map) > FilZize) return 0;+ [7 m5 R8 h' v$ d3 ?
                                }/ [$ }" G: T. f; h! R2 v
                        }
- u2 B5 ]* n) L! I9 V4 [0 R, r                }
4 i' s) c+ C. a/ w, V7 V7 Q4 m        }
5 H5 a' B" H* d! ~1 {/ M7 [
5 z1 {1 O; d7 E* V, K, K! X        fclose(fp_map);
8 V! y' l- K3 \) L1 X) b: e8 @; L5 m& Y. j5 h1 A6 q

- n* m$ |" M; m8 s( u2 Z        return 1;
) _0 c& P) I! w* P, |; F6 v}

; r4 g& g" U4 `; `' ]# m
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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