游客您好
  • 点击联系客服

    在线时间: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 文件是记载地图信息的文件。
6 f7 P5 A& a1 J, [; b+ \; g. F7 @
- ^! ^6 H- h3 \" R    地表层是由地块组成的,地表层共有 2层,一层是实际的地表层,这层里面是草地、沙漠、土地等组成地表的基本结构。" E+ h. Q9 R- F7 z; A$ L
2 n- @7 O  k$ e) z
    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 地表一层的序号
- M3 F+ d- ]( H2 }' ?% W+ e/ m1 j# A/ [
03      在地表一层 13 00 这个大序列下的子序列编号12 01 地表二层的序号0 R- U" _& s/ {3 \& O" O& w
07      在地表二层 12 01 这个大序列下的子序列编号
6 n: H& q2 g" ?; f3 Z7 ~3 j, H86      物件层的大序列
, V/ j3 M8 r1 s' ?' K9 h00      物件层的大序列下物件的子序列编号
  d2 I9 S/ j, _) J# E  O( }5 f! x( J03 03 00  目前不详" \: b8 q+ N6 L" v' Y
01      行止标识服务器端用的 smp文件就是用客户端的 map文件生成的,不同的是,服务器端只保留了地块数据中最后一个字节的数据,就是行止数据,其他的都去掉了,因为服务器端不用显示图象文件。好了,最后我给出读取map文件的函数,这个函数就是我们在演示程序使用的读取地图数据信息的函数。6 T, s2 ]5 A7 O  o4 S; b4 F$ T

# l; {, z8 n' k( V  D7 u% }//************************************************************* k9 D& K, m. Q1 w- `
// 加载地图基本数据函数;
; j! y5 X) L5 @& E- X) ]//************************************************************
# M4 ~# Y7 K% }
9 `1 E, s- X. [6 p2 a//************************************************************
1 \% e: Q# M& _: N. {0 V// 加载地图基本数据函数;
1 X9 H+ {# Z# l  ~: b  K: i//************************************************************
; b- n( y, b9 @
  ?5 k* Z  |7 y0 J$ ?4 q5 j: ]int Cmap:oaddata(char *filnam)/ A+ w" ^: L- P- S* x
{
# ~4 v  y% J  r6 L        int Temdata;
8 J" u7 `+ A  K: S! X! H9 ~% K6 c1 A! ?- R, ]1 p/ F; I6 G' o
        if(filnam == "") return 0;2 _  z& A2 w/ f
& c  T9 R3 Z1 g8 j% m
        fp_map = fopen(filnam,"rb");
& G6 t4 w. E- H0 L. F! o# ]- B$ b3 f* r- F& O2 a9 A" q
        if(fp_map == NULL)        return 0;$ ^" q/ n8 D7 {2 Y$ w2 R' [; S2 F" m

/ t; _  Q4 V8 E        fseek ( fp_map, 16, SEEK_SET);! v2 g' O1 d( {/ p8 X# {- ?
        fread ( &ShortWidth, 4, 1, fp_map);6 `/ Q- p; E( L. ~
        fread ( &Width, 4, 1, fp_map);
& V- V5 e/ b1 W7 o+ K        fread ( &Height, 4, 1, fp_map);
  [, ~2 c+ v' @% K7 b. z
$ v" Q$ e5 [" N/ y+ J0 u        int TW = Width / ShortWidth;
, R0 X( L; C3 M        int TH = Height / ShortWidth;
: _, G' M# {  r4 ?# ~+ G% z8 n9 _9 P; X: K/ _
        for (int j = 0 ; j < Width ; j++)
& d' A9 s- R' L* P$ @! n: G        {' @& Q& k3 L7 s! {' E
                _DELETE_ARRAY(Cell);5 j2 d3 {8 Q& \6 a
                _DELETE_ARRAY(Role);
  y- L1 a- ?3 \, X7 O        }
# A9 k9 h: c; q1 h% v1 A3 K
2 T' ~4 [; h% I        Cell = new stCell*[Width];( S- n8 y3 b3 {* B
        Role = new stRole*[Height];' ^( k. V; W# Q, C, u# u
        for (j = 0 ; j < Width ; j++)
& g, W( C) T* Q- d; L# o/ W        {: t5 a, k, {6 f
            Cell[j] = new stCell[Height];
- Z. }% l( X7 M& t' O, u$ D                Role[j] = new stRole[Height];        6 d8 H- w8 y8 m- y4 N1 B& G
        }        
+ l1 t+ r, G$ C( r, ~4 L8 z  A5 E5 ~. k8 \7 r
        fseek ( fp_map, 28, SEEK_SET);! N% D1 U% T+ p  N, r$ Q
7 N7 m+ J: J. }+ x9 [" i% p3 ~5 @% H
        for (int y1 = 0; y1 < TH ; y1++)% b. \) U/ A0 ?1 k
        {
. N# @! a4 d5 |* l  T5 @                for (int x1 = 0; x1 < TW ; x1++)- o. x! B2 [0 G6 Y. i( a1 e" d6 M
                {* H! F/ G- z" ?  G2 t) W, c, H( P5 K
                        fseek ( fp_map, 20, SEEK_CUR);
3 T9 r5 x0 E6 I" G                        for (int y2 = 0; y2 < ShortWidth ; y2++)$ _& o0 B9 ^4 u
                        {1 u/ ?% P$ h) L0 d# R4 c+ s5 C
                                for (int x2 = 0; x2 < ShortWidth ; x2++)
% {+ m4 F5 ?+ w: l: i1 D                                {
0 X9 y! S. \$ f                                        fread ( &Temdata , 2, 1, fp_map);
8 _$ h8 ~+ l5 `! H0 |                                        Cell[x2+x1*40][y2+y1*40].Cell_ID1 = Temdata;+ P. v  [3 b0 U5 O8 N0 n

+ U3 |+ |) [- h' b3 V                                        fread ( &Temdata , 1, 1, fp_map);7 c8 W' |2 O3 P
                                        Cell[x2+x1*40][y2+y1*40].Cell_list1 = Temdata;
* F; ^5 z, R2 X' s5 K
: T$ I" P- N+ }5 ~                                        fread ( &Temdata , 2, 1, fp_map);
" ?, ~& n9 Y/ e" T0 n/ g                                        Cell[x2+x1*40][y2+y1*40].Cell_ID2 = Temdata;
' h' w3 t; `) U) |, n( c2 c$ E: X' \# ]' ^2 q  V
                                        fread ( &Temdata , 1, 1, fp_map);
7 I0 D( y6 @4 l/ z& f( F                                        Cell[x2+x1*40][y2+y1*40].Cell_list2 = Temdata;
. f' ?  f& Z7 J0 k( T+ s/ _                                        // 6个字节7 w! q( U$ e0 J0 g# p
* a3 }! s8 h+ {8 K% s
                                        fread ( &Temdata , 1, 1, fp_map);5 e' Y- g8 Z$ }  N9 u  z
                                        Cell[x2+x1*40][y2+y1*40].Obj_list = Temdata;
# i+ o, y' F# U                                       
0 o2 I3 k. c- L& T- `; x7 Z                                        fread ( &Temdata , 1, 1, fp_map);
! ^5 @& M8 m, f                                        Cell[x2+x1*40][y2+y1*40].Obj_ID = Temdata;
$ u/ M# {6 e! ?
. t$ k6 I; n2 w. H% A                                        //fseek ( fp_map,3,SEEK_CUR);
9 p8 F1 @4 e, B                                        fread ( &Temdata , 1, 1, fp_map);
7 }* y9 L: X7 T; V$ T" u4 _  q                                        Cell[x2+x1*40][y2+y1*40].ani_list = Temdata;" v5 v1 E* [- K2 L6 A  L
                                       
( {! m& C, @1 `0 m2 ~% |                                        fread ( &Temdata , 2, 1, fp_map);% P: W  {. ^" @7 b8 `
                                        Cell[x2+x1*40][y2+y1*40].ani_ID = Temdata;
3 E0 f, Z0 E5 C% |- G' S0 {
  v: A# [% r" w5 }0 i2 Q                                        // 1个字节! ^& V, I1 n' w# t
                                        fread ( &Temdata , 1, 1, fp_map);
8 r+ V) Q$ n" a5 |, [4 X7 [                                        Cell[x2+x1*40][y2+y1*40].CpType = Temdata;. N! g. S6 g7 h. |
                                        //if (ftell(fp_map) > FilZize) return 0;
5 ~9 O  V- i6 B& c" F8 c                                }) k6 c! l8 W2 Q* U) x6 ~2 ]  [
                        }2 Z# q  V6 Z$ H
                }( I4 ^/ q* V7 C$ l
        }# O, Z8 U, a3 e
7 y4 X% y4 `4 ]0 `$ w" Z
        fclose(fp_map);
( i& g/ }: Z- P/ R) m5 P4 ^6 P# e4 m" k, n7 D( _
& ]9 u9 |9 \2 n- @
        return 1;
/ p* {! u2 B& v/ V1 u. u/ X}
! F$ u8 V+ D9 f! a" Q+ J
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

三千游戏官方客服

扫一扫二维码

添加qq客服

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