本站域名:
www.chinamods.com
     

- 地图下载 -

- MOD站点链接 -
御天暗黑MOD战网


Game Park

暗黑破坏神官方网站

暗黑破坏神官方战网网站

 
地图修改高级教程:新增区域实战教程

标题:新增区域实战教程

作者:Sloovy

日期:2004年1月8日

参考:Phrozen Keep - Phrozen Forums - [Any] New outdoor levels is possible,similar to Moo Moo Farm

版本:暗黑破坏神2 - 毁灭之王 v1.10 正式版


导读

1. 你必须正确安装了Afj666的地图扩展插件

2. 你需要有一些关于 DS1地图文件 和 修改 Levels.txt LvlPrest.txt 的知识;

3. 你需要会使用Paul的Win_DS1Edit。虽然我会谈到些用法,但是至少你得会让它跑起来;)

4. 文中颜色标注意义如下:

橙色:txt数据文件

红色:列名

绿色:需要填入的值

蓝色:提及的人名(多是作者名)

粗体:需要注意的地方


这里放几个预览图。

新增地图的左上角

新增地图的右下角

第一个测试版本用Cain Stone当出入口

帐篷门是出入口


我终于下定决心逼自己收起些懒惰,重新干点实际的Mod活。很幸运,昨晚用了不到2个小时,就搞定了自己新增的第一个区域,虽然算不上是顺利。

下来我会一步一步的尽量详细的讲解方法。另外,这篇文章里都是按照我完成的情况来讲的,大家可以按自己喜好慢慢尝试不同的方法和地图;)


一。制作DS1地图文件

因为我打算把新增的地图放在世界地图里Tristram、奶牛农场的下面,并且预期将来会把它和Tristram连接起来试试,所以我是用奶牛农场里奶牛王站的那一块地图来修改的(那一片是固定且唯一的)。


1. 在 D2data.mpq\Data\Global\Tiles\ACT1\OUTDOORS 里面找到bivouac.ds1,把它解压或者复制到你的Win_DS1Edit目录里面,并重命名为testmap1.ds1。新建一个内容如下的TestMap1.bat:

@echo off
win_ds1edit TestMap1.ds1 2 50 > debug_TestMap1.txt


2. 运行TestMap1.bat开始编辑这张新地图。进入编辑器后,如果觉得太慢可以按"F3"以停止动画效果,用加号减号放大缩小。如果没有顺利进入图形编辑器界面,查看debug_TestMap1.txt找找问题在哪里。

(1). 首先,我们要去掉奶牛王,毕竟一进去就被奶牛包围在中间的热情接待有点让人受不了。按一次"Tab"键进入Object编辑模式,点击奶牛王脚下的小方块(不是它头上的标签),确认它脚下的小方块、标签的外框和连线都变成粗体才算选中。按"Ctrl+X"删除它;

新地图修改1:选定奶牛王

 

(2). 为了纪念牺牲的奶牛王,我决定把它的“遗址”做成出入口。确认你还在Object编辑模式下,在原来奶牛王的地方按"Ins"键以插入新的Object——这时出现的应该是Gheed。右键点击他头上的标签,会弹出一个列表框。首先点击右上方的“Type2”切换到类型2物件,然后选择一个物件(我是用的Id=4,flag 2),点OK,应该是变成旗子了;

新地图修改2:改变Object

 

(3). 下来要把旗子做成出入口的标志。现在按两次"Tab"键切换回地图编辑模式,右键点击旗子脚下的那一格地图。这时会进入一个Wall/Floor编辑界面。在右边的界面里,第一行选择"Wall1"(默认就是),下面行的页选择"Special",然后向下翻页到vis6,选择它,点击OK退出;

新地图修改3:设定Vis6

 

(4). 最后,我们得把这个出入口的vis6设为隐藏的。否则在游戏里你会看到是一格绿色……。先选择vis6的那一格地图,然后按住"Ctrl+Shift"右键点击它,进入代码编辑模式。只需要把"W1"行第一列(下面标记的有Hidden的)改为1就可以OK退出了;

新地图修改4:设定Vis6为隐藏层

 

(5). 保存退出,编辑新地图DS1的工作结束。

新地图修改5:完成图

 

3. 我们还得修改 浪人营地 的地图,方便跑到新的地图去。

(1). 从 D2Exp.mpq 或者 D2Data.mpq 里面解压出Data\Global\Tiles\ACT1\Town\TownE1.ds1,把它放到你的Win_DS1Edit目录里面。新建一个内容如下的TownE1.bat:

@echo off
win_ds1edit TownE1.ds1 1 1 > debug_TownE1.txt

(2). 运行TownE1.bat开始编辑 浪人营地 的地图。找到左下角显示坐标为(29,22)的一格,应该正好是在 浪人营地 左下方帐篷的门那一格;

(3). 在这一格上面左键选定后点击右键,进入Wall/Floor编辑界面。我们这里要先选择第一行的"Wall2",然后选择下面右边的"Special",找到vis6并选择后OK退出;

浪人营地帐篷开门2:在Wall2上设定Vis6

※<1>. 这里为什么要用"Wall2",而不是和修改新地图时候一样使用"Wall1"呢?

因为这里"Wall1"这个单元格已经被帐篷的门这张图片(我觉得更像一片一片的贴纸)占据了。可以试试选择"Wall1"、"Special"里面的"vis6",会看到帐篷门变成了草地……显然我们不想要这种不自然的帐篷,更不想用它来当出入口 >_<

浪人营地帐篷开门3:在Wall1上设定Vis的下场

 

※<2>. 为什么指定使用vis6呢?必须和对应的出入口选择一样的vis吗?

不是的,纯粹只是我的习惯而且。毕竟相同的vis让人很容易认为它们是连接在一起的,方便一些;)

(4). 同样,我们的目标是自然的"门",而不是一格绿色方块。选择vis6所在的格子,按住"Ctrl+Shift"右键点击它,进入代码编辑模式。把"W2"行第一列改为1就可以OK退出了。这样就完成了隐藏vis的工作;

浪人营地帐篷开门4:设定Wall2的隐藏

 

(5). 保存退出。浪人营地的地图编辑这样就可以结束了。

浪人营地帐篷开门1:完成图

 

4. 方便起见,我们把新增的地图也放到和 浪人营地 一起的目录里吧。在你的暗黑目录里新建或者找到 Data\Global\Tiles\Act1\Town,把刚才修改好的TestMap1.ds1和TownE1.ds1都放到这里就OK了。


二。修改LvlWarp.txt

 

为了方便在帐篷上开门,得给LvlWarp.txt最后加这么一行:

Act1 Small Tent R 83 -20 -111 46 112 0 5 2 1 0 2 b 0

这个是新定义一个出入口的设置,我的理解是:当你把游标放到vis所在格子的什么范围之内,会显示出“通向 XXXX”字样的定义。不一定对喔(免责声明)。

具体的在Ds1 Editor - Tutorial 1 - A new Tent Warp有详细说明。


三。修改LvlPrest.txt

1. 我们要指定让 浪人营地 使用TownE1.ds1这张地图。毕竟同时修改4张地图不但麻烦,而且很容易出错。用任何表格编辑工具(推荐AFJ Sheet 0.52beta)打开LvlPrest.txt

向右滚动,很快就可以看到File1(Q),File2(R),File3(S),File4(T),File5(U),File6(V)这几个列。选定第三行,Name列是"Act1 - Town 1",可以看到File1File4分别对应了TownN1,TownE1,TownS1,TownW1四张地图。而这四张地图就是 浪人营地 的出口对应四个方向的固定地图。把它们都写成 Act1/Town/TownE1.ds1,这样无论 浪人营地 本来应该是往哪个方向出口,现在都会显示向东……代价就是有75%的概率我们都没法从正常的出口出 浪人营地 了 -_- 所以一定要用专门的测试人物进行测试!


2. 现在可以开始正式新增我们的地图了:

(1). 既然是用的奶牛农场地图测试,用它的数据修改自然是最方便的。找到第52行,NameAct 1 - Bivouac的。选定整行复制一下,然后在最下面新增一行,粘贴上去;

(2). 按以下修改这行的数据:

Name : Act1 - Test New Map 1 -- 方便识别的名字就行
Def : 1090 -- 下一个未使用的Def编号。原始文件里1089是最后一个
LevelId : 133 -- 同样是下一个未使用的LevelId编号。原始文件里面最后一个是132
Outdoors : 1 -- 定义是户外区域
SizeX : 0 -- 当我填入了正确的地图大小时候,却总是出现nSizeX类似的错误。然后仔细看了其它行,发现大多数预设定区域是(0,0),于是试了试,居然成功了
SizeY : 0 -- 同SizeY
Scan : 1 -- 当Scan=0的时候,似乎系统不会扫描这张地图和对应地图的vis。所以要让vis起作用,这里一定要设成1
Files : 1 -- 指定使用文件的个数。似乎对预设区域就是指定几张可能情况的地图,对于随机迷宫区域就是组合时候可用的地图数目
File1 : Act1/Town/TestMap1.ds1 -- 指定地图文件

其它的都不用动了。保存LvlPrest.txt吧。


四。修改Levels.txt

 

1. 打开Levels.txt,修改一下 浪人营地 的第三行:

Name : Act1 - Town
Id : 1
Vis6 : 133 -- 指示Vis6连接到Id = 133的地图
Warp6 : 83 -- 设置Vis6的Warp类型。使用新定义的帐篷门类型


2. 找到第41行复制一下,NameAct1 - Moo Moo Farm的行。在最下面新增一行,粘贴上去;


3. 按照以下修改新增行:

以下粗体是修改了的。为了方便解释我基本上把全部的列都列了出来,但并不需要全部修改 :)

Name : Act1 - Test New Map 1 -- 随便给一个容易识别的新名字就行
Id : 133 -- 下一个未使用的Id编号
Pal : 0 -- 使用Act1的色盘(Palette) (0~4对应1~5幕)
Act : 0 -- 第一幕(0~4对应1~5幕)
QuestFlag : 清空 -- 不需要先完成某个任务才能进入
QuestFlagEx : 清空 -- 不需要先完成某个任务才能进入
Layer : 26 -- 层设置。不用改变
SizeX : 16 -- 普通难度下新地图的X轴尺寸。在Win_DS1Edit里面看最右边(东边)一格的坐标就知道了
SizeY : 16 -- 普通难度下新地图的Y轴尺寸。在Win_DS1Edit里面看最右边(东边)一格的坐标就知道了
SizeX(N) : 16 -- 恶梦难度下新地图的X轴尺寸。
SizeY(N) : 16 -- 恶梦难度下新地图的Y轴尺寸。
SizeX(H) : 16 -- 地狱难度下新地图的X轴尺寸。
SizeY(H) : 16 -- 地狱难度下新地图的Y轴尺寸。
OffsetX : 5000 -- 请参看第六部分“世界地图设置”部分详细说明
OffsetY : 1328 -- 请参看第六部分“世界地图设置”部分详细说明
Depend : 0 -- 不清楚具体作用,不需要改动
Teleport : 1 -- 允许瞬间移动
Rain : 1 -- 有下雨的天气变化
Mud : 0 -- Beta版使用的参数。正式版里没用
NoPer : 0 -- 是否强制使用3D显示
LOSDraw : 0 -- 是否按照视线绘制(Line of Sight Draw)
FloorFilter : 1 -- 是否过滤房屋、树等外景(1=是,0=否),说明:主要是针对DT1文件
BlankScreen : 1 -- 外景参数
DrawEdges : 1 -- 是否显示墙等物品的边缘
IsInside : 0 -- 是否此地图位于不可见的位置(如地下),这里因为是户外区域
DrlgType : 2 -- 重要!设置地图为固定尺寸的预设区域
LevelType : 2 -- 地图的类型(同lvltypes.txt文件关联)。奶牛农场是使用了Id = 2的Wilderness类型
SubType : -1 -- 预设区域不需要。应该是指定随机生成区域的地图类型
SubTheme : -1 -- 预设区域不需要。应该是指定随机生成区域的地图主题
SubWaypoint : -1 -- 预设区域不需要。应该是指定随机生成区域里的路标
SubShrine : -1 -- 预设区域不需要。应该是指定随机生成区域的神坛
Vis0 : 0 -- Vis0连接的地图Id,没有就是0
Vis1 : 0 -- Vis1连接的地图Id,没有就是0
Vis2 : 0 -- Vis2连接的地图Id,没有就是0
Vis3 : 0 -- Vis3连接的地图Id,没有就是0
Vis4 : 0 -- Vis4连接的地图Id,没有就是0
Vis5 : 0 -- Vis5连接的地图Id,没有就是0
Vis6 : 1 -- Vis6连接的地图Id,这里是连接到Id = 1的 浪人营地
Vis7 : 0 -- Vis7连接的地图Id,没有就是0
Warp0 : -1 -- Vis0的Warp类型,没有就是-1
Warp1 : -1 -- Vis1的Warp类型,没有就是-1
Warp2 : -1 -- Vis2的Warp类型,没有就是-1
Warp3 : -1 -- Vis3的Warp类型,没有就是-1
Warp4 : -1 -- Vis4的Warp类型,没有就是-1
Warp5 : -1 -- Vis5的Warp类型,没有就是-1
Warp6 : 83 -- Vis6的Warp类型,这里还是用帐篷门的类型(偷懒)
Warp7 : -1 -- Vis7的Warp类型,没有就是-1
Intensity : 0
Red : 0
Green : 0
Blue : 0
Portal : 0
Position : 1 -- 似乎是部分预设地图有固定的位置时候为1
SaveMonsters : 0
Quest : 0
WarpDist : 2025
MonLvl1 : 28
MonLvl2 : 53
MonLvl3 : 78
MonLvl1Ex : 28
MonLvl2Ex : 64
MonLvl3Ex : 81
MonDen : 800
MonDen(N) : 800
MonDen(H) : 800
MonUMin : 0
MonUMax : 1
MonUMin(N) : 3
MonUMax(N) : 4
MonUMin(H) : 6
MonUMax(H) : 8
MonWndr : 1
MonSpcWalk : 0
NumMon :
mon1 :
mon2 :
mon3 :
mon4 :
mon5 :
mon6 :
mon7 :
mon8 :
mon9 :
mon10 :
rangedspawn :
nmon1 :
nmon2 :
nmon3 :
nmon4 :
nmon5 :
nmon6 :
nmon7 :
nmon8 :
nmon9 :
nmon10 :
umon1 :
umon2 :
umon3 :
umon4 :
umon5 :
umon6 :
umon7 :
umon8 :
umon9 :
umon10 :
cmon1 :
cmon2 :
cmon3 :
cmon4 :
cpct1 :
cpct2 :
cpct3 :
cpct4 :
camt1 :
camt2 :
camt3 :
camt4 :
Themes : 0
SoundEnv : 18 -- 这张地图使用的背景音乐。我用了喜欢的Harem
Waypoint : 255 -- 255表示没有路标
LevelName : Test New Map 1 -- 这张地图(区域)的名字,对应PatchString.tbl中的键名
LevelWarp : To Test New Map 1 -- 通向这张地图的出入口名字,对应PatchString.tbl中的键名
EntryFile : A1L41 -- 进入地图时候显示的“通向 XXXX”的图片
其它的也不用动了。保存Levels.txt并退出。


4. 现在,我们还差一个A1L41的图片。没有它进入新地图的时候可是会出错的。不过解决方法很简单,用个代替的就行了……

在 D2Data.mpq\Data\Local\UI\Eng\ACT1 里面解压出来A1L40.dc6,把它改名成A1L41.dc6,放到 暗黑目录下面\Data\Local\UI\ENG\Expansion就可以了。

※<1>. 如果你想用的是中文版或者其它语言版本的图片,就在Data\Local\UI\XXX\ACT1目录下面找到对应的文件,放到Data\Local\UI\XXX\Expansion下面;

※<2>. 为什么放A1L41的目录不是...\Act1,而是...\Expansion呢?我想可能是因为新增的地图在Expansion行下面吧……我也尝试把新增行放到奶牛农场所在行的下面,但是出现了...nSize...错误 ~_~

※<3>. 除了用图像编辑工具做DC6外,有一个专门的做这些出入口图像的工具,Joel的txtDC6,但是我运行时候却出错,无论是WinMe还是WinXP……


五。修改PatchString.tbl

很简单的。

1. 用TBL编辑工具打开PatchString.tbl,新增一个键,键名(左边窗口的)叫Test New Map 1,键值(右边窗口)也同样写Test New Map 1。这是当你按"Tab"键显示的地图名称;


2. 再新增一个键。键名叫To Test New Map 1,键值同样写To Test New Map 1。这是当游标指向通往这个地图的入口(帐篷门)时候显示的文字。

※ 左边的键名是和Levels.txt里面LevelName/LevelWarp列相同的值,一定要用英文(虽然我没试过用中文……);右边的键值是游戏中显示的文字,可以根据不同的语言版本PatchString.tbl自己写。


六。世界地图设置

为了方便调整,我计划暂时把新增的地图放到奶牛农场的下面,虽然最终目标是希望它和Tristram连接起来。这样就需要OffsetX应该是和Tristram、奶牛农场在一个组里——5000;


关于OffsetY,虽然应该是能让地图之间不重叠就可以,但是我发现原始的Levels.txt里面,同一组地图里,下面一张地图的OffsetY是上面一张地图的OffsetY加上100再加上地图SizeY。


例如:Tower Cellar Lv1的Offset是(2500,1000),Size是(200,200),而Tower Cellar Lv2的Offset(2500,1300)就是:

OffsetX(Tower Lv2) = OffsetX(Tower Lv1) = 2500
OffsetY(Tower Lv2) = OffsetY(Tower Lv1) + SizeY(Tower Lv1) + 100 = 1000 + 200 + 100 = 1300


所以新增的地图的Offset就设置为:

OffsetX(New Map) = OffsetX(Moo Moo Farm) = 5000
OffsetY(New Map) = OffsetY(Moo Moo Farm) + SizeY(Moo Moo Farm) + 100 = 1148 + 80 + 100 = 1328


七。常见错误

 

新增地图时候一步几个错误是正常的事情……虽然很让人灰心。除了在窗口模式下面运行看错误时候的提示窗口内容外,还可以查看暗黑目录下面D2YYMMDD.txt(YYMMDD表示两位年两位月两位日),在里面搜索"Error"、"Warning"和从下向上搜索很容易找到问题所在。这里我会尽量列出来我碰到过的错误,方便大家少走弯路。


1. 没有正常安装区域扩展插件

Assertion Failure
Location : D2Common\DUNGEON\Dungeon.cpp, line #796
Expression : ptAct

2. 陆续补充中……


特别感谢:

感谢 游戏小站 上的各位朋友和斑竹们,尤其是 ylycloak剑月明 :)

感谢 Impk …… 我是直接拿了人家的页面来用,还没通知过 血脸杀手 那边……

感谢我的BF Dark_elf,时常要忍受我抓狂时的无理取闹,南无~~

CopyRight (c) 2003-2008 游戏小站(Game Park)版权所有

如转载,请注明出处。