新天下霸图吧 关注:1,190贴子:10,592

人人都会修改地图教程之一:经营地图

只看楼主收藏回复

***开始之前,请让我们忘掉UltraEdit,用上WinHex。(UltraEdit和WinHex在静态修改方面完全一样,但WinHex的设置对初学者更友好更方便。而UltraEdit的宏;批处理;DOS命令。。。之类的,做为一个初学者,我们需要吗?我们需要吗?我们需要吗?

16进制、2进制,且与10进制的换算关系之类的基本常识要知道。不知道的请百度下16进制教程初步的学一学。
打开WinHex,在菜单上点:选项-常规(快捷键F5),在跳出的窗口中间靠下,有一个 ??字节每行 和 ??字节每组。我们改成16字节每行 和 4字节每组。(16字节每行 这一个以后要看情况多次修改。4字节每组 是用来每4个字节加个空格,这样查找数值时更方便,且一般游戏用的最多的就是2进制的32位,即16进制的4字节。这基本上可说是最佳分组。)
1:CITY0XX.DAT文件解析
打开WinHex,打开游戏目录/MAP/data/ 下的CITY0xx.dat文件。这里我以贵州为例。即CITY015.DAT。
我们可以看到如下图所示:

图中一大堆16进制数值,我们要找出其中的相同点。我的方法是直接按F5,进常规设置。把??字节每行,以4的倍数修改。从8字节每行开始。当我改到28字节每行时,截图就变成了如下,现在数值的对应关系就出来了。(我们改别的文件时,有可能有10或9字节一组的,我们改成 8字节每行,就会发现数值是斜着对应的,这样我们就可以知道数值的一组在4-12中间,然后就数下格子,就能知道要改成10或9字节每行)




IP属地:湖南1楼2017-01-18 13:40回复
    请勿插楼。。。。全发完后会删除中间无意义楼层。。。


    IP属地:湖南3楼2017-01-18 13:41
    收起回复
      Caja 已经找出了全部资源与建筑代码,如下
      代码备忘
      00 01 黄金
      02 03 紫金
      04 05 黑金
      06-0E 绿树
      0F-17 红树
      18-20 白树
      21-26 石矿
      27 28 白铁
      29 2A 黄铁
      2B 2C 黑铁
      2D-30 看板
      31-34 厢房
      35 正殿
      36-39 药圃
      3A 打铁铺
      3B 织造房
      3C 药房
      3D 修练房
      3E 武场
      3F 兵器场
      40 41 布庄
      42 43 茶铺
      44 水果摊
      45 46 民房
      现在让我们给Caja 掌声。


      IP属地:湖南4楼2017-01-18 13:44
      收起回复
        注:文中数值后面加了H的,全是16进制,如40H,6EH.....
        再注:请用手机下个Hex Plus 。这是手机上的16进制+10进制+8进制+2进制计算器
        再再注:Hex Plus 中,Decimal为10进制 ,Octal为8进制, Hex为16进制, Binary为2进制。


        1:4000 0000 ;3000 0000 游戏中最大可拥有格子数。40H为X轴(10进制64),30H为Y轴(10进制48)
        64*48=3072 最大3072个格子。
        格子在文件中的起始地址是730H,一个格子12字节。也就是说共有3072*12=36864个字节。换算成16进制为9000H,加上72F=972F(因为是730H起始,计算总字节时要-1)。我们把文件拉到最下,可看到文件共972F个字节。
        。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。
        2:C005 0000 ; 7004 0000 取用背景图的像素。C005 和 7004 在16进制计算器中表示为 5C0 470 ,即10进制的1472,1136。我们用ps打开Map文件夹下的MAP015.tga,会看到背景图的像素正好也是这个值。
        更换不同大小的背景后,要把这两个也按实际改了。
        PS:该值可以等于小与背景图像素,如果起过的话,进游戏后四边会花屏。
        。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。
        3:3000 0000 ;3000 0000 游戏中能显示的格子数。和编号1配合使用,不能起过编号1中的4000 0000 ;3000 0000 。一般直接改成和编号1相同就行。
        如果改成0100 0000;0100 0000,且把初始格子改成可建筑,则过游戏点选建筑后会发现只有顶上角唯一一个格子,而把建筑移到原有格子上,能明显看到道路和可建格子的区别。且建筑能放到那些格子上,但图片不显示,建筑也无效。
        。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。
        4:E002 0000 ; F0FF FFFF 第一个格子的坐标。2E0H=736,F0FF FFFF 即 -16 ,也就是格子起始在背景图的正中间,超过背景图往上16个像素点。(一个格子的上下角像素点=32,左右角像素点=64)
        通过修改这两个值,可以把所有格子整体左右和上下移动,以配合新背景图。
        。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。
        5-11见下页。


        IP属地:湖南5楼2017-01-19 19:47
        收起回复
          刚发现,我XP上没装CAD。那我就用画图随便画了3个框:

          A:长方行。背景图的大小。即上页编号2的值。
          B:小菱行。四个角正好在背景图的4个中点。游戏中能显示的背景图。
          C:格子区。格子的顶点和X,Y轴见其它战场地图修改教程。(谁有链接的请发在楼层中。)我画的不标准,应该是左右角的长度是上下角的2倍(一个格子的上下角像素点=32,左右角像素点=64)。
          其中B区的大小就是游戏中实际可见大小。C格子区格子加的再多,超过B区的部分也无法看到。

          。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。

          下楼继续5-11


          IP属地:湖南6楼2017-01-19 19:58
          收起回复
            5:4000 0000 ,40H=64,代表游戏中最多可有64个建筑(资源,民居,看板都算建筑。且看板居然要占2个建筑。。。。。)
            在内核解析出地图文件的调用前,无法扩容超过64个建筑。。。。所以64*48=3072个格子完全够用了。

            。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。

            6:1600 0000,地图中已有建筑。16H=22。贵州只给我们留了42个指标了。各位有后门的要多多拉拉关系了。指标越多越好。。。。。我们不拒绝暗箱。。。。。像滇池多好,政府只占了7个,留了57个指标给我们。(还是说不愧是魔教?暗箱大大的?)
            PS:如何增、改、删建筑在下文。。。。

            。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。

            11:4600 0000 ;9909 0000 ;4600 0000 ;6835 A518; FFFF FFFF; 0100 0000; 0100 0000
            此为第1个建筑。各组代码意义见编号7-10

            。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。

            7(共2组):4600 0000:请转到3楼Caja 的代码备忘。其中的46-2D都能在里面找到是什么建筑。想增、改、删建筑第一个改的就是这两组。且两组数要改为相同编号。

            。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。

            8:9909 0000:该建筑所在坐标。
            坐标算法要配合编号1,即一行64格,共48行。比如9909,在计算器中为999H,即10进制的2457,因为1行有64格,则该坐标在第38行第25格。下面的50H即10进制80,则是第2行第16格。。。。
            PS:该坐标的格子,在文中的地址16进制算法:x*c+730H 。其中X为编号8的坐标,C为一个格子占用字节为10进制的12字节,730H为格子的起始地址。用10进制算就是X*12+1840。不过我推荐直接用16进制计算。谁叫我们有一个叫“科学计算器”或“16进制计算器”的玩意呢。。。

            。。。。。。。请叫我分隔线。。。。。。。该死的度娘排版。。。。。。。

            9:0100 0000,0200 0000,0300.。。。。该建筑是第几个,改格子时要用到。
            不过请忽略原值,看我红色写的00 01 02。。。18,这才是修改要用到的实际值。不同地图自己手动数一下,用16进制。
            比如编号7里面的 09,从代码备忘里能看到是树木,在坐标4F,用x*c+730H公式可知:4F*C+730=AE4。
            我们用修改器中的位置-转移到偏移量:

            按确定,可跳转到该地址,能看到如下:
            其中10就是我写的红色数值,0F 0E 11 12都正好和上下的代码对应。比如0F和0E的地址正好是50、51,11和12在09的下方,地址正好是52、53。


            IP属地:湖南7楼2017-01-19 20:39
            收起回复
              接上文。 看板:
              我们看编号7中的2E和2D,这两个是看板的右侧和左侧。其地址在0C07 和0B07,即70C和70B。
              70B*C+730=5BC0。我们跳转到该地址可看到如下:(改格子时 按F5 ,改成-12字节每行)

              我们可以看到 15、0C正好和编号9的行数对上。怎么移动下文再说。
              还是编号7,我们看0000 0000 。这是金矿。金矿占3*3共9个格子。402*c+730=3748H。跳转到3748H:

              我们可以看到2个1A07和1个0A00。从1A27开始往下数64组数,我们又能看到3组1A27,再往下64组,同样3组1A27。这三套加起来就是一个金矿。其中0A的意思同上。1A27实际为0A+1027。代表这是0A所有建筑的其它占地格子。

              民居:编号7中第1个4600 0000,坐标9909 0000 这个,它是第0号。则其地址在:999*C+730H=7A5C。


              同理往下数64组数,一定还有4套各5组1027。



              10:01表示图中拥有该建筑,00表示没有建筑。配合编号6一起用。编号10中有几个01,编号6就要改成多少。


              IP属地:湖南8楼2017-01-19 22:54
              回复
                格子区解释:
                首先,按F5,把常规设置里面的 ??字节每行 改成12。因为一个格子占12字节。(战场地图一个格子占8字节。不过和此文无关。故不做解说)
                总算给我找到一处,张图中每样东西都有的地址:



                一个格子的12字节,起始点是上图中的建筑处,结束处是上图的装饰处。如下表:
                AAAA FFFF ; FFFF BBBB ; CCCC DDDD

                AAAA: 代表建筑,其值为5楼 编号9的值。移动资源、看板、民居主要就是改这里。

                两段FFFF 无意义,不管。

                BBBB:格子编号。FFFF为无格子。0000为可游戏中建筑格子。
                0100为仅弟子可移动,不可建筑编号。也就是道路。
                0200为弟子和村民可移动,不可建筑编号。同样为道路。但行侠仗义和欺压良民都在这格子上。
                其中,矿场等资源一定要有道路连接。0100和0200都行,不然弟子不会去采矿。
                民居类一定要有0200号道路连接,不然村民不出来,行侠也会因为没村民而无法增加值。

                CCCC:墙。拆墙的话,如果在设置里改成了一行显示12字节,那把上图中墙所在的竖排(从地址730H开始),如0200等,所有不是FFFF的全改成FFFF,则可把墙全拆了。

                DDDD:装饰美化专用格,比如这个:(好吧。我是忘了这个叫什么,顺便问问你们。。。。)

                这一竖排的可以放心删。


                IP属地:湖南9楼2017-01-19 23:24
                收起回复
                  CITY0xx.DAT已经解析完了。我们下面就以贵州为例,来移动所有资源,删除几个民居和树,移动看板来学会怎么改经营地图。
                  明天继续。。。。晚安


                  IP属地:湖南10楼2017-01-19 23:27
                  收起回复
                    在修改地图之前,我们可以先做一个规划:


                    比如此教程将按如下形式改:黑色为民房,3*3紫色为矿,3个1格的紫色为树,中间6*4为厢房(6间,可用BUG住满人)。其它4*4为建筑。蓝色为编号0100的路。民房中间两条为0200的路,专供行侠仗义或欺压良民。
                    注,因游戏最多支持64*48个格子,故我做了个48*48的。再多也没意义,每个地图最大支持64个建筑(含资源,民房,看板)


                    IP属地:湖南11楼2017-01-23 21:24
                    收起回复
                      格子要按上图规划的原因是,在游戏中能显示的格子基本上在下图的红框中:


                      IP属地:湖南12楼2017-01-23 21:29
                      收起回复
                        开始之前,先按F5,把每行显示字节数改成12。
                        然后,把地址730-972C间的内容全改成FF。
                        快捷方法:把文件拉到最后几页,一般这几页没格子,装饰等,基本上全是FF。
                        比如我从地址9000开始,按住FF,且拖到最后,按鼠标右键,选复制(CTRL+C)。
                        然后转移到地址730,按CTLR+B写入,就会把之下几页的内容覆盖成全FF。
                        注:不能按CTRL+V粘贴,这样是从地址730开始插入你复制的内容,地址731起会顺移到你粘贴的内容之后,这样会造成文件增大,有可能会进不去游戏。
                        ***必须用CTLR+B写入***

                        从上图规.划中我们可以看到X轴和Y轴都空了2行,那我们改图时坐标就要减2,如民居前的道路当成第1排,则第一个格子的坐标是17-2=15,即16进制F。用16进制公式可以得到这一梅子的起始地址:F*C+730=7E4,根据9楼格子的12字节的意义,我们添加道路和格子,要用起始地址+6,则实际地址是7EA。且这一行有14个格子的路,那我们就要改出14个0100。
                        现在让我们点击 位置-转移到偏移量,(快捷键ALT+G)填地址7EA:

                        然后我们把该竖排改出14个0100。如下图:

                        如图我是写7个0100,再复制7行,用CTRL+B写入。下面要用到多次这种方法,可以节省大量时间。


                        IP属地:湖南13楼2017-01-29 15:58
                        回复
                          顶下楼主的心得,希望更多的玩家能够动手制作mod分享


                          IP属地:福建14楼2017-01-30 16:40
                          回复


                            IP属地:福建15楼2017-01-30 23:45
                            回复