游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
. X( \+ @# o  f4 i3 y; d2 x  l  |& K
    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。
7 ^: ?$ c0 X% W/ R
, l% G7 h' n; `% P    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 地表一层的序号
5 H* q8 b; [* b" f! J6 K# ?/ l$ c$ o2 _: v5 {* }4 k& }
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号
- x8 q& F, R# C) e07      在地表二层 12 01 这个大序列下的子序列编号+ k# f* Y5 x5 X; ]! \  }
86      物件层的大序列
' O8 h2 a3 T: n00      物件层的大序列下物件的子序列编号
: e# o6 `" J  a6 q03 03 00  目前不详* f/ W5 V1 B6 E! k0 \
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。0 s) a% g/ D- w0 c" ~

5 q6 y) g4 ~0 V5 e9 i( e/ S! q# ]//************************************************************
1 ?1 {* c. ~% }, q, \// 加载地图基本数据函数;+ B- g3 k1 E& J! A1 L4 X2 i
//************************************************************4 _4 j( f, u0 g5 V+ O4 R0 w  v3 B

2 X0 h' V$ D7 N- x3 {1 `8 B5 d$ b//************************************************************# X' @7 a$ ^7 J, W% @
// 加载地图基本数据函数;/ c! a4 \0 @9 b; }
//************************************************************
: f) d9 w; A% J5 |  A/ @. m$ p$ r, Q0 ~' q
int Cmap:oaddata(char *filnam)3 x- x! Z8 Z) s1 ~8 }
{
& X. X' }$ Q! Q  n$ j3 a        int Temdata;
& r- @4 V0 R" z$ N9 X' N: h6 r) q4 t, ^7 V, q
        if(filnam == "") return 0;
* \$ Y! L* s; [6 s. O0 T' _
. @' Y  D! E" C- R+ J! y, U+ n        fp_map = fopen(filnam,"rb");$ B# I2 z1 h( E' ~1 y9 S# o
! M; b. l7 X* r# b0 g; ~% n$ K
        if(fp_map == NULL)        return 0;0 r8 J. \5 Z  W  Q

* I- j8 r6 I# o        fseek ( fp_map, 16, SEEK_SET);! A( j+ c; M" v5 E
        fread ( &ShortWidth, 4, 1, fp_map);* u  r0 A7 D- T5 f$ M, @) g$ q1 @. X
        fread ( &Width, 4, 1, fp_map);
, Y8 G* ]% D+ t; N: u' [: ^        fread ( &Height, 4, 1, fp_map);
! f) P! s" J7 d# ^: u4 `9 k
* _: [  Q, l2 q) Z        int TW = Width / ShortWidth;
: P' K$ \4 K' U! n# z, d) b        int TH = Height / ShortWidth;- X( K1 ]0 ^* I/ v$ J

' N& l8 R+ x; k' q2 z. [        for (int j = 0 ; j < Width ; j++)! _1 r& v) d$ |) p' \! y* g- l
        {
2 K9 {  V7 `+ F+ w9 k* F# a2 n                _DELETE_ARRAY(Cell);
0 u& P! |9 a2 F! S- Z                _DELETE_ARRAY(Role);& ]* Z% y9 r6 t! j5 x( k2 k6 L( ?
        }" o6 B2 X. S" x0 i3 L0 ^8 s
/ i- X/ e* Q: Q1 L6 ]
        Cell = new stCell*[Width];/ y6 f) K/ W) d+ j
        Role = new stRole*[Height];4 j3 D$ Z3 t2 a% v$ b5 Q9 f
        for (j = 0 ; j < Width ; j++): Z* g) R' ]- m, C* H
        {& A* X8 {9 H  U
            Cell[j] = new stCell[Height];
- N5 x8 v( f5 A& X7 M/ _* ^                Role[j] = new stRole[Height];        6 L+ F. r) X$ h. y
        }        & L1 d- \2 i( \; ~) d

4 X$ U6 C( }+ Y: t1 F- u- q: H" [" ]1 X        fseek ( fp_map, 28, SEEK_SET);
" X$ A, v& n' y( U
! z" p- A/ M. Z  p7 D/ H        for (int y1 = 0; y1 < TH ; y1++)
; J% O: A& b6 H1 A, w        {
7 _* \# c8 H9 l' g                for (int x1 = 0; x1 < TW ; x1++)7 N: Z7 P# N+ u$ ]
                {
0 O  Q, D: A2 s( b8 d% n3 o                        fseek ( fp_map, 20, SEEK_CUR);8 E$ O& j, N# y# v. {
                        for (int y2 = 0; y2 < ShortWidth ; y2++)
9 V/ Q# |- h2 i                        {+ d5 v1 D* w$ R4 _( x
                                for (int x2 = 0; x2 < ShortWidth ; x2++)+ x+ r9 Z( z$ d9 h* m0 `: x
                                {0 l0 M1 r, p% D+ [' e9 C$ R0 q
                                        fread ( &Temdata , 2, 1, fp_map);
) {7 l2 [  R; S( X( @                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;
# R7 M' c1 z9 o, Z
$ t2 j/ L* d# Z                                        fread ( &Temdata , 1, 1, fp_map);; L( Z5 c! Z5 j
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;1 f/ `. ?" r# T6 i* H& H

$ M8 I5 }+ a- N                                        fread ( &Temdata , 2, 1, fp_map);
# I( q# S6 C/ l% B6 U: E, {* a7 w2 o                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;/ U" g9 F: P; d, S$ M* \

- R6 s8 c" ~+ ]                                        fread ( &Temdata , 1, 1, fp_map);
. u! c2 E! L/ e. q1 a& _& ^  X                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;% T8 z, X: Y+ X, h0 m, \. I
                                        // 6个字节6 O6 B' K( a" j$ ]

% R3 @! |$ l$ A" Q, P                                        fread ( &Temdata , 1, 1, fp_map);( C2 y8 @' @; r: T8 c
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
8 ]8 S& J. ^! [$ \/ |# l' K                                        ! B0 c# K! m8 Y' a2 h
                                        fread ( &Temdata , 1, 1, fp_map);
/ A* j! O4 v' P: G+ p; I: i; |1 P                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
% c% Z7 k* F9 o: P3 U2 a8 {7 G; |
                                        //fseek ( fp_map,3,SEEK_CUR);
$ {. r* q% o; c) O2 B, O2 a                                        fread ( &Temdata , 1, 1, fp_map);
2 V$ l6 T+ W; I! V. @8 x; f                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;
/ L7 g; O. p& B) r+ T& b$ f                                       
0 |( \" Z& T6 V9 w( Q9 |6 g/ u# b                                        fread ( &Temdata , 2, 1, fp_map);
5 X$ w/ |5 Y5 F/ O1 @7 K                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;3 s% `. O, k" F. G, M- G

( c* F9 I9 k4 g; Y' d% e                                        // 1个字节6 M% ^( A' K2 }0 \! Q6 i* p
                                        fread ( &Temdata , 1, 1, fp_map);' x: p: T4 h; L* }$ d
                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;8 `$ e& \$ x, O% U( X& f
                                        //if (ftell(fp_map) > FilZize) return 0;  a: B) P8 |8 I
                                }
4 ?: K' K* j, D1 X. P                        }$ |( b+ a" g7 k3 [! P$ k
                }
( k/ ^# p& X2 V) z3 c        }/ r3 n: u2 d& B: [( q: ]2 i1 O

9 r6 D  X0 {( A4 n5 K        fclose(fp_map);
6 |  S+ W2 q7 n+ Z  J9 B) o6 r" A% G# ]! N# T: I
0 s4 U' {% _% y( q/ P1 Q0 x7 _5 y
        return 1;0 ?* I& U! V$ |' J; I
}
3 b# V. S) k, d6 O7 T9 s7 V' C0 Q
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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