您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页暗黑2毁灭之王MOD制做指南1.42

暗黑2毁灭之王MOD制做指南1.42

来源:筏尚旅游网
暗黑2毁灭之王MOD制作

·历史纪录 v1.4 v1.3

v1.2x beta

v1.1

v1.0

新手上路

原作: Phrozen Heart

Mordini Fusman Myhrginoc

翻译:Dark_elf V 1.4 2nd

游戏小站:暗黑破坏神另类模式修改基地

http://www.cnmods.com

9/8/2003 增加了1.10和1.10s的内容,并且增加了些说明 6/22/2002

重写了全部练习以及详细说明,并且合并了许多 在以前单独列出的指南中的练习。

4/18/2002

几乎全部重写用以解决可能出现的任何错误。这 些版本是只在少数人中使用的Beta版。

12/8/2001

在“第一步”页面增加了一个指向datafile(MPQ 内部文件列表)的链接,用于帮助在使用MPQ Viewer时有问题的人。

10/4/2001 第一个完全正式版

·鸣谢Mike Meneldil

Rich Grenfell Paul Siramy Drackin Heynooffense Soul Slayer Alkalund ChaoticDeath Peaceatlast20 Rage AA Joel Falcou chippydip

千里之行始于足下

欢迎来到暗黑破坏神II。你可能已经玩够了标准模式,战网的服务器又非常LAG,也许,你下载了一个另类模式并且想知道它是怎么做到的。现在,你想自己动手做一个MOD但是却不知道从何入手。这个向导会告诉你在哪里能找到你想要的并且如何做些简单的修改。有很多种方式可以做到同样的事情,这篇指南中的方法只是其中之一。

以前的指南仅适用于1.09版,在最近的1.10beta版中,有些文件被修改了很多而有一些则完全没有被改动。本篇指南中的一些内容同时适用于109以及110beta,有一些则是109或110beta专用的。如果你想制作110beta的MOD,请注意,110beta中一些官方未排除的错误。本文中的例子可能在正式的110版本中不起作用,但是你可以从中学到很多制作MOD的技巧。

你也可以利用这篇指南来制作其他版本的MOD,但是这并不是本文的目的。本文仅适用于109以及110beta。当正式的110版发布而且Battle.net做出更新后,我们会推出新的指南。

源文件

在暗黑破坏神II的目录里能找到很多文件,它们大多与制作MOD无关。我们感兴趣的是Game.exe和扩展名为.MPQ的文件。Game.exe是主运行文件,Diablo II.EXE的作用仅仅是调用Game.exe。MPQ文件是压缩包,从各种物品的定义到每一幕的动画都在这些文件中。这些文件可以用扩展名来分组。

d2char.mpq d2data.mpq d2exp.mpq d2music.mpq d2xtalk.mpq d2sfx.mpq d2video.mpq 暗黑II的数据文件 – 人物的动画 暗黑II的数据文件 – 其他所有文件 暗黑II毁灭之王的数据、音效、动画 暗黑II的音乐以及Blizzard公司片头 暗黑II毁灭之王的人物以及NPC的对话 暗黑II的音效 暗黑II的过场动画 d2speech.mpq 暗黑II的人物以及NPC的对话 d2xmusic.mpq 暗黑II毁灭之王的音乐 d2xvideo.mpq 暗黑II毁灭之王的过场动画 patch_D2.mpq 发布补丁中所包含的修改过的内容 表一:暗黑破坏神II及毁灭之王的文件

txt bin cof dc6 dcc ds1 dt1 tbl wav dat 1:固定的游戏内容的数据库 2:未在游戏中使用的描述文件 当游戏运行时文本数据库的编译文件 人物动画的控制文件 装备图像,背景以及对应的行为动画 人物、怪物、对象以及效果动画 用于场景定义的地图文件以及固定怪物和物品的位置 用于地图创建地板、墙以及房顶表面的贴图 1:存放游戏中文字的表格 2:字体间距调整表格 音效、对话以及音乐文件 1:暗黑II调色板,用于转换dc6和dcc 2:色彩,用于定义同一怪物的不同颜色 表二:压缩包中的文件

交易的工具

在开始之前,你需要一些基本的工具来访问和修改所有的相关文件。而这些基本工具在“the Phrozen Keep的File Center”(http://dynamic6.gamespy.com/~phrozenkeep/)可以找到。常用工具以及本篇指南被打包在一起,名为“the Beginner’s Toolkit”。

• MPQ Viewer – 用来浏览和打开MPQ压缩包。有一个独立的datafile(MPQ内部

文件列表)用来记录已知的文件的文件名列表,没有它,MPQ Viewer不能列出有意义的文件。这个datafile(MPQ内部文件列表)在每个发布的Patch中都会有变化。 • Tab Delimited Text Editor – 用于处理TXT文件。D2EXCEL是专门用来处理这类

文件的,它在网站上有下载。如果,你导入导出的表格文件没有字串限定,微软的EXCEL或者其他电子表格软件也能用。但是微软EXCEL会删除最右边的空字段。虽然这些文件以.txt为扩展名,但它们并不是一般的文本文件(TEXT),所以,绝对不要用Word或NotePad(记事本)来处理这些文件,否则文件的数据格式会被损坏。(这个似乎是对的,没用过Word来处理这些,但是用Notepad处理后就有些问题) • Baron Darkstorm’s Table Editor – 编辑表格文件。这个工具很容易用,但是在处

理PatchString.tbl文件时会有些麻烦。其他的相同工具还有D2Tbl和Peer TBL Editor (v3.38)。 • DC6Con and DC6Maker – 预览和转换DC6格式的图像文件。

• CV5 (v5.2) – 用于提取、预览以及转换各种格式的图片。CVDCC.DLL是其中一

个用于DCC的必需部件,但是它需要另外下载。在本文不讨论如何编辑动画文

件。

• MPQ2K and MPQ Stormless Editor – 用于将你修改好的文件打包为MPQ格式。 其它需要另外下载的就是Patch_D2.mpq。这个文件不包含在暗黑II或者毁灭之王的安装光盘里。你可以在登陆BN时自动更新或者下载最新的补丁来获得。Patch_D2.mpq 包含所有MPQ中被修改的文件。一旦你修改了某个MPQ中的文件,你需要将它们放入Patch_D2.mpq来使它起作用。Patch_D2.mpq中的内容总是会覆盖以前的版本。

1.07 1.08 1.09 1.09b 1.09c 1.09d 1.10 beta 1.10s beta 6/19/2001 6/27/2001 8/21/2001 10/5/2001 12/5/2001 7/3/2003 8/4/2003 毁灭之王发布 维护并增加一些新内容 增加许多新内容 维护性补丁 维护性补丁 11/29/2001 维护性补丁 增加新内容 修复1.10beta的错误 表三 – 毁灭之王的升级纪录

很多MOD制作人员对1.09d评价不高,因为在1.09c中的错误在1.09d中并没有被修复。Blizzard公司希望给魔法装备设定的“Chance-cast skills(一定几率释放)”属性会在战斗中起作用,在1.09c和1.09d中它虽然有显示,但是没有伤害。你可以下载1.09b版的D2Client.dll, D2Common.dll 以及D2Game.dll。the Phrozen Keep的所有版本的MOD中均保留有着三个文件。备份1.09d的文件以登陆BN。混用1.09系列和1.10beta的文件会造成游戏崩溃。

1.10的两个Beta测试补丁已经发布,在正式的110出现之前可能还会有更多补丁。因为这个版本还不够稳定,你选择制作110的MOD时必须确定这些文件是110所特有的。所有的修改,在新版补丁推出时最好再做测试。图像方面则因为比较稳定应该不会有什么变动了。

你可以对应下表知道你的游戏的版本。右键单击文件来看文件的大小(不是所占硬盘的大小)和日期(修改日期而不是创建日期或访问日期)

1.09b 1.09b 1.09b 1.09d (Battle.net) 1.09d (Battle.net) 1.09d (Battle.net) 1.10 beta 1.10 beta 1.10 beta 1.10s beta 1.10s beta D2Client.dll D2Common.dll D2Game.dll D2Client.dll D2Common.dll D2Game.dll D2Client.dll D2Common.dll D2Game.dll D2Client.dll D2Common.dll 1.08 MB (1,138,745 bytes) 676 KB (692,281 bytes) 0.98 MB (1,028,151 bytes) 1.08 MB (1,134,644 bytes) 676 KB (692,276 bytes) 0.98 MB (1,028,146 bytes) 1.02 MB (1,073,204 bytes) 692 KB (708,660 bytes) 1.10 MB (1,159,218 bytes) 1.02 MB (1,073,204 bytes) 696 KB (712,756 bytes) 8/16/2001 8/16/2001 8/16/2001 11/29/2001 11/29/2001 11/29/2001 7/3/2003 7/3/2003 7/3/2003 7/27/2003 7/27/2003 1.10s beta D2Game.dll 1.10 MB (1,163,314 bytes) 7/27/2003 表四 – 不同版本的区别 现在你需要追踪你要修改的文件。 一种方法是在游戏目录中建立子目录,将每个MOD或者每一次TEST分别放入一个目录。你可以创建一个指向MOD目录的Game.exe的快捷方式当作游戏开始位置。The Phrozen Keep提供VB脚本的下载,它可以让游戏在Mods所在的目录中运行,并且可以自动调用mods所需要的自定义Dlls。你可以利用DLL管理器dll来运行使用109b的dll文件的mods而不影响你用当前最新dll登陆BN。

首先你需要将所需的暗黑工具和游戏分开存放(如果都放在一起很容易出现误操作而造成不可挽回的损失)。备份patch_D2.mpq这样你可以在Mods出错而无法修改时恢复到原始状态。同时复制一份存放到暗黑工具目录。将工具都安装到Patch_D2.mpq所在的目录,这样可以在第一时间内找到文件并修改。注意:1、调用MPQ2K所需要的文件中有一个名为storm.dll,这与游戏的文件重名,你必须把它分开存放!!!2、所有的文件修改都在暗黑工具目录中,这就需要你创建文件存放的目录。

练习 #1 – 增加数量

我们将从一个非常简单的修改开始:修改钥匙的数量。标准的数量限制是12,这对于有着很多箱子的地下城-比如憎恨牢狱(Durance of Hate)来说是远远不够的。我们准备把它修改为50,这样就免去了往返城镇之苦。

首先运行MPQ Viewer。在File(文件)菜单我们会看到有2个Open(打开)选项。第一次运行MPQ Viewer需要打开datafile(MPQ内部文件列表),它会告诉MPQ Viewer在一个压缩文件中到哪里找各种的文件。这个文件独立于MPQ Viewer并且在每个补丁版本中都不同。如下图,选择第一个Open来读取datafile(MPQ内部文件列表),MPQ Viewer会纪录上一次打开的数据文件。

图一 - MPQ Viewer 打开MPQ内部文件列表

接着按下Open archive按钮或者在File菜单中选择Open archive,在打开文件对话框中选择Patch_D2.MPQ 然后整个MPQ的文件目录会出现在主窗口。

图二 – MPQ Viewer列出的Patch_D2.MPQ的文件

在文件名前的路径表示它在MPQ文件中存放的位置,与Windows中目录和文件的存放形式一样。表二中说明只有2种类型txt文件:数据库文件以及描述文件。只有数据库文件对我们有用而且它们都存放在:data\\global\\excel。找到Misc.txt并保存。然后就可以关闭MPQ Viewer了。

图三 – 用D2EXCEL打开的Misc.txt

用D2EXCEL打开Misc.txt,出现图三所示界面。在打开的文件中你会发现每一行就是一条记录,而每一列是一个字段,这和数据库没有什么区别。我们想要调整Key的数量就需要调整Maxstock段的值。

首先点选右下角的“Lock First Column?”。(注意:软件中的这个单词写错了-_-a)这样,记录的Name段就被锁定了,这样我们能够轻易在对应“Skeleton Key”行的“Maxstock”段找到我们需要的内容。(图三用笔圈住的部分)我们看见这个位置的纪录为12,这是原始设定。现在,只需要将数值改为50,并选择“Save txt”(存储为TXT文件)即可。Load bin以及Save Bin的功能尚未实现。

我们是怎么知道“Skeleton Key”就是我们要修改的部分呢?这是txt文件修改部分最难的内容,这里显示的name并不是你在游戏里所见到的名字。在txt文件里,name仅仅是一个字段名,用来指向在tbl文件中的名字,而tbl文件中的内容才是游戏里最终显示的名字。我们将在第4章的练习里详细说明。

你很快会发现,这样的做法可用于所有有数量可被放在一起的物品。比如:让箭再多一点或者让一个Tome里有40个Scroll。你只需要在该物品的“Maxstock”列修改数量就可以了。但是注意,这个数量不能超过511。

如何使它工作?

现在,我们已经做好了修改,那么怎么运行游戏呢?我们修改了txt文件,但是游戏运行时却不读取这些文件。当游戏运行时,它会调用经过预先编译的,与txt文件内容相同,但是经过压缩成为二进制码的bin文件来获取数据。我们之前说过,D2EXCEL不支持bin文件。我们需要用特殊的游戏方式来为已经过修改的txt文件创建bin文件。这个方法就是命令参数:“-direct -txt”。每次用这个参数运行游戏,游戏会读取所有的txt文件,不管它已经被打包为MPQ或者是原始的txt文件,并且生成整套bin文件。在109x系列版本中你会得到大约70个bin文件,在110中则有90个左右。

在MPQ Viewer中我们会看到txt和bin文件是如何以data\\global\\excel路径在mpq压缩包中存放的。我们必须在游戏目录创建相同的目录结构。首先,在游戏目录(Diablo II)下创建data目录,接着在data目录中创建global目录,在global目录下创建excel目录。返回游戏目录(diablo II),按住右键拖动game.exe,然后选择创建快捷方式。接下来,右键单击快捷方式 game.exe,选择“属性”。

图四 – 创建-direct -txt模式快捷方式

图四所示即为参数的位置及写法。注意,如果在路径中有空格,那么整个路径包括文件一定要用引号括起。然后在最后加入命令参数“-direct -txt”。在参数与文件名之间以及参数与参数之间都有空格。保存快捷方式。

拷贝修改后的“Misc.txt”到刚才创建的“data\\global\\excel”目录。用新创建的快捷方式运行游戏并且用测试用人物进入游戏进行测试。每当你测试一个新的MOD,尽量使用测试人物进行游戏,这样即便出现问题也不会对你造成很大影响。在游戏里你可以买些钥匙来测试是否钥匙的存放数量已经改变。

如果你在生成bin文件后对txt文件又做了修改,那么在运行快捷方式前最好删除在“data\\global\\excel”目录下的bin文件。这样可以确保bin文件和最新的txt文件的一致性。因为在bin文件被创建时,一个文件中的部分内容经常会被其他文件所调用。补充最重要的一点:因为很多时候这些文件之间具有关联性,建议在打包时选择所有文件。个人不推荐作为标准打包方式。请参照练习2WinMPQ的用法。

★ 现在你需要决定你的MOD将打包为MPQ文件或是使用“-direct -txt”方式运行。

如果要将文件打包,那么你需要将修改后的文件封装入Patch_D2.mpq,并且将其复制到游戏目录,然后用一般方式运行游戏即可。并且,如果你想和使用MAC电脑的朋友分享你的MOD,你只能是用这种方式,但是不幸的是,它只在109b或109d中起作用,而在110beta中不能用这种方法(实际上还是可以用的)。第二种方式不需要打包为MPQ文件但是对于玩家来说,他们必须创建整一套文件存放路径。 ★ 接下来我们要做的是将修改后的txt文件以及对应生成的bin文件放入MPQ压缩包

中。进入“data\\global\\excel”目录找到“misc.bin”并且将它复制到你工作的文件夹。

使用MPQ2K 操作MPQ压缩包

在运行MPQ2K之前我们需要了解一些相关知识。MPQ2K不能在windows的图形界面下使用。如果你在windows界面运行它,你会看到一个dos窗口出现并随即关闭。你要做的是用MPQ2K的命令写一个脚本以及一个批处理文件来运行它。因为这两个文件都是标准的text文件,你可以用Notepad(记事本)来打开它们。

我们先从脚本文件开始。MPQ2K最重要的命令是打开压缩包、添加文件至压缩包以及关闭压缩包。用记事本创建MPQLoad,txt并写入以下四行内容。

O patch_D2.mpq

a misc.txt data\\global\\excel\\misc.txt a misc.bin data\\global\\excel\\misc.bin C patch_D2.mpq

注:O就是Open的缩写,a是Add,C是Close。

确定路径和上面内容一样使用的是反斜线。

打开和关闭压缩包的命令一定要是大写字母。小写字母“o”用于使用只读方式打开压缩包,此时你不能添加文件。添加文件命令也大小写之分,不过它们唯一的区别是小写的添加命令会压缩所要添加的文件,这有利于减小MPQ压缩包的容量。 现在要创建批处理文件。你只需要用记事本写一行内容并存为RunMPQ2K.bat即可。你需要确认在存储窗口中的“保存类型”为“所有文件”,然后在“文件名”处输入完全的文件名“RunMPQ2K.bat”。

mpq2k s MPQLoad.txt

现在已经可以打包了。你必须确认“patch_D2.mpq”,你修改过的txt文件,对应的bn文件,脚本文件,批处理文件以及MPQ2K所必需的4个文件(mpq2k.exe, staredit.exe, storm.dll, lmpqapi.dll)在同一目录下。双击批处理文件“RunMPQ2K.bat”然后你会看到由DOS窗口出现并关闭,此时,新的文件已经添加入“Patch_D2.mpq”。

如果你想看看它的工作记录,可以在批处理文件中写入如下内容。 @echo off

mpq2k s MPQLoad.txt > MPQLoad_Log.txt type MPQLoad_Log.txt | more pause

这个批处理中生成的文件“MPQ2Kload.txt”可以被记事本打开,并且你会了解MPQ2K是否正常运作。

图五 – 批处理文件的调用结果

最好再确认一次你已经将原始的“Patch_D2.MPQ”备份好了,否则你将不能进行标准游戏,而且,在MOD修改失败并造成无法运行游戏时,你还能够恢复。现在,将修改后的“Patch_D2.MPQ”复制到游戏目录并覆盖,然后用一般方式运行游戏,不要用“-direct -txt”命令。玩一会儿,看是否有问题,并且测试在一格空间能不能放多于12个钥匙。如果成功,那么恭喜你。你的第一个暗黑2MOD制作完毕。

练习 #2 – 贩卖的物品

这项练习最初是用于109b和109d的。在110版,可以买到魔法瓶。你可以从这个练习中发现110是如何做到这点的。而且,对于购买其他药水,宝石,珠宝,符石以及各种的装备都可以用这种方式来实现。Vendor这一字段在所有版本中通用。

在上一个联系中你学会了如何提取文件,编辑txt数据库,用“-direct -txt”命令模式调用游戏以及将文件加入MPQ压缩包。在这一节,我们回到“Misc.txt”并且学习如何让NPC卖其他的物品。方法是一样的,我们只需要在不同的记录中修改。

打开Misc.txt并找到“healing potion”和“mana potion”那几行。然后水平滚动,找到它们所在的Code段。Name栏中的名字和它在游戏中显示的名字并不一样。比如说:“Strong Healing Potion”对应游戏里的“Greater Healing Potion”, 而“Greater Healing Potion”对应的实际上是游戏里的“Super Healing Potion”。

图六 - Misc.txt药水的位置

再向右寻找商人的位置,图七所示为Act1的“Akara”。每个商人有5个描述字段。 “Akara”在110中已经可以卖魔法药水,我们可以先从她入手,因为让她卖“mana potion”和“healing potion”一样,只需要在“mana potion”行对应的字段填入数值即可。我们可以先用“Lesser Mana Potion”来测试。在“Lesser Mana Potion”行的“AkaraMin”段以及“AkaraMax ”段分别写入8和16,就像“Lesser heal Potion”行的内容一样。“AkaraMagicMax”以及“AkaraMagicMin”用于魔法物品,这不在本练习的讨论范围内。

图七 – Akara卖的药水

接下来可以对Lysander,Alkor,Jamella and Malah作相同的修改。注:所有的商人NPC都可以用这种方法来修改。

最后要做的是让NPC卖高级的药水并且不会卖完。我们要继续向右移动,找到图八所示位置。

图八 – 高级的药水且不会卖完

观察在“Upgrade”段“healing potion”行的值,并且在“mana potion”行的对应位置填入魔法药水的code。“xxx”表示不可用,而我们要使它可用,就要将它们改为“mp4”和“mp5”。最后,将“PermStoreItem”的位置填上1来使它不会卖完。 (在109系列版本中有这样一个错误,只有Normal游戏中的药水不会被卖完,而在其他难度,你只能通过出城,回城来刷新药水。在110中,它设置多个栏位的药水以避免这个问题出现。) 接下来要做的就和第一个练习一样。保存“Misc.txt”文件,将它复制到“data\\global\\excel”目录,用带“-direct -txt”参数的快捷方式运行游戏并产生bin文件。复制“Misc.bin”以及“Misc.txt”文件到工作目录,然后打包加入到“Patch_D2.MPQ”中。

练习 #3 – Paladin的技能盾

在这个练习中我们来探索如何给物品添加“Automatic mods”。“automatic mods”一般是指额外的技能,比如说Sorceress的手杖所拥有的技能。因为基本上所有的手杖都有技能,所以,它又被称为“Staff Mods”,你可以从段名找到它。制作的细节基本和上面的做法一样,在这里只提示不一样以及需要注意的部分。现在打开“ItemTypes.txt”文件。

图九 – Paladin专用盾牌

在上图你会发现使用的是Microsoft Excel打开的文件。在选择B2位置(即第一条记录的第一个字段)之后,在“窗口”菜单中选取“窗口冻结”,就会固定A1行和A1段。这个效果和D2Excel中使用“Lock First Column”是一样的。寻找“Auric Shields”行“StaffMods”段,然后填写“pal”。这样就会使得“Auric Shields”带有Paladin的技能。保存,并运行,测试。

这个例子介绍了如何使盾牌拥有Paladin的技能(“Auric Shield”这个名字并不是游戏中所显示的)。你可以把其它职业的技能也添加进来(比如Sor的技能)但是只有Paladin才能使用这类物品,所以那些技能放在这里是没有任何用处的(技能都是Class only,职业专用)。但是你可以将任何物品上所带的技能修改为某职业用。注意:这样修改的结果就是,游戏中生成的所有这类物品都会带有你设定的属性,所以,如果你将“Armor”行的“staffmods”段的值设定为“sor”,那么所有的Armor都会带有“Sor”的技能,这样的做法就有些太极端了。(个人建议:最好仅仅是对某一小类作修改。你可以在修改后去买Armor,你会发现所有的Armor都随机带着Meteor,teleport等,不过似乎Set或者Unique Armor不受影响。我在游戏中用自己的Cube配方重新洗了109中的7+,理论上它就是110中新生成的盔甲了,它的属性中并没有加入Sor的技能) 这次我们使用WinMPQ来打包txt和bin文件。运行WinMPQ,进入Option菜单的File List页,在这里添加MPQ列表文件。在这里输入的文件与使用MPQView时打开的列表文件一样。点击“Add List File…”然后选择列表文件即可。110正式版的列表文件你可以点击下载:datafile-D2v110final.zip。下图所示为添加了2个列表。列表越多,读入MPQ文件所需要的时间就越长。

图十 – WinMPQ装入文件列表

现在返回主界面,打开Patch_D2.mpq。再强调一次,保留原始文件不要动。随即列出的就是MPQ中的文件,包括文件的存放位置,原始大小和压缩后的大小。会有几个文件名无意义,路径以及文件名均以Unknown起始,这些文件与修改无关。

图十一 –MPQ中的文件

点击“Add”来加入我们修改过的“txt”和“bin”文件。这一部分是最重要的,操作不好会造成MPQ文件无谓的增大或者在游戏中不能实现修改的结果。要选择全部文件,建议使用“Add Folder”,然后选择“drive:\\Diablo II\\data\\global\\excel”,因为所有解压出来的txt以及bin文件都在这个目录中,在接下来出现的“Folder name”对话框中填写文件在MPQ中的存放路径。注意,一定要在目录的最后加上“\\”,否则文件将

会被错误的存储为“data\\global\\excel文件名”。修改其他目录的文件时也同样操作。原图有错误,已做修改。

图十二 – 填写存放路径

文件将直接在输入目录并确定后加入MPQ文件而且会自动替换已存在的文件。在点击“OK”时最好再次确认原始文件已经备份好了。

用WinMPQ同样可以提取文件。打开MPQ,选择你想要提取的文件然后点击“Extract”,再出现的路径选择窗口中选择你想保存的目录,它就会自动在这个目录下按照在MPQ中的位置建立完整路径。

练习#4 – 修改物品属性

这这个练习中,我们要学习tbl文件以及如何修改物品属性。我们将修改Manald ring的属性并将它改名为The Eye of Mordini。

使用MPQViewer从MPQ文件的“data\\global\\excel”路径中提取“UniqueItems.txt”。然后在右下角的Filter列表中选择“.tbl”来单独列出tbl文件。旧版本的MPQ Viewer将默认的tbl文件的扩展名为大写TBL,这样无法正确列出tbl文件,你需要手动设置,新版的MPQ Viewer已经不存在这个问题。

图十三 – 选择patchstring.tbl

你会发现有多种语言的“patchstring.tbl”,本例选择“data\\local\\lng\\eng\\ patchstring.tbl”。你需要选择和你所安装游戏语言版本一致的tbl文件。其中:CHI表示中文,ENU表示英文,JPN是日文。提取文件至完整路径放置。

打开“UniqueItems.txt”并找到“Manald Heal”的纪录。记住,在这里我们看到的并不是它在游戏中的名字(虽然名字一样,但在这里它只是一个关键字,对应tbl文件的关键字)。

图十四 – 用MS Excel打开的“UniqueItems.txt”

向右拖动,找到“ItemMod1Code”段,(在110里,它所在段为“Prop1”)这里的值就是Manald的第一个属性“Steal x% Mana”。你可以从“the Phrozen Keep”下载“the Magic Code Master List”或者从MPQ文件提取“Properties.txt”来获得魔法物品的修饰语。例如:值“manasteal”就是属性“Steal x% Mana”的修饰词

图十五(A) – 可能是109版的字段名称

图十五(B) – 110正式版的字段名称

“Manald heal”行的每一项属性都由4个字段来描述。第一个是属性代码,接下来的三项来描述这个属性的效果。“Par1”段是空着的,剩下的“min1”和“max1”的值定义了Manald生成时“steal x% Mna”的取值范围。

将“manasteal”修改为“mana%”,然后将“min1”和“min2”的值都设定为50。这样你就将“steal x% mana”属性修改成“increase max mana 50%”。因为“min1”和“max1”都设为50,在生成物品时便不再会有一个取值范围而是永远都是50%,它的情况如同SOJ。

图十六(A) - 修改后的Manald heal(109)

图十六(B) - 修改后的Manald heal(110)

“UniqueItems.txt”中为每个Unique物品设置了10项属性。每项属性都由4个字段来描述,而且,它们修改的方式一样。下面列举了其他两项属性。当你修改好存盘时,一定要将文件保存为“文本文件(制表符分隔)(*.txt)”,否则它将不会起作用。

图十七 –所有抗性增加50点最高抗性

图十八 – 增加1~3所有技能

编辑字串表格

我们已经修改了“Manald heal”的属性,但是它的名字还是“Manald Heal”。现在我们要做的就是修改字串表格中它的名字。在做这个工作之前,我们先来了解一下什么是字串表格以及它的作用。

基本所有在游戏中显示的文字都存放在.tbl文件中。tbl文件的内容包括:物品的名字以及属性,怪物,NPC的名字,BN的登陆消息以及错误报告,还有和NPC的对话等等。每种语言都有3个tbl文件,“String.tbl”在“d2data.mpq”中;“ExpansionString.tbl”在“d2exp.mpq”中;在 “patch_D2.mpq” 中的“PatchString.tbl”存放着在最近补丁中所修改的字串。

所有的字串表格分为2部分,左边是字串关键字,右边是在游戏中显示的描述文字。为了让一个物品的名字显示正确,字串关键字必须和数据库中的关键字一致。本例中“Manald heal”在文件中的显示文字都一样,而且在数据库中的名字也很容易找到。但是物品Hand AXE在tbl文件中的关键字显示为“hax”,而它的描述文字为“Hand Axe”。 有时候关键字在不同的文件中被定义,在这种情况下,“ExpansionString.tbl”中的定义会覆盖“String.tbl”;而“PatchString.tbl”中的定义会覆盖上面所说的2个文件。你

也许会想只需要在“PatchString.tbl”中修改就可以不管其他两个文件。但事实上不行。原因有二。1、每次Blizzard发布新的补丁,都会有一个新的“PatchString.tbl”,而如果你在这个文件里定义了很多关键字,要将它们转移到新版本中是很难的。2、用Darkstorm的表格编辑器编辑“PatchString.tbl”时很不稳定,虽然这个编辑器非常易用)。因此,许多MOD都会将“String.tbl“从“d2data.mpq”中提取出来,并且在修改后打包入“Patch_D2.mpq”,因为个人定义的关键字一般不会和官方冲突,也就不需要每次官方发布新版本之后作重复的定义工作。“String.tbl”不管在什么情况下都不会被修改,所以,在一定意义上来说是最稳定的。如果你要修改的记录存在于着几个tbl文件中,那么你必须修改所有文件中的记录。如果你只修改“String.tbl”,那么在游戏里将看不到修改后的结果。

理论到此为止,接下来我们要将“Manald Heal”修改为“The Eye of Mordini”。“Manald Heal”在“String.tbl”中被定义,所以我们不管是在“String.tbl”修改还是在“PatchString.tbl”中添加新纪录都可以。我们将来学习如何用这两种方法来实现,即便我们只需要提取“PatchString.tbl”文件。

运行Darkstorm Table Editor(默认文件名为“tbled102.exe”),你会看到下面的开始界面。

图十九 - Darkstorm Table Editor

打开“PatchString.tbl”并且移动到最后一行,你会发现右边窗口仅在你选定左边窗口中的关键字后才显示文字。有些关键字只有“x”或者“X”,这些关键字的内容和其它数据库的内容(txt文件)完全没有联系,它们是从可执行文件中引用的特殊字串。你会看到一些关键字的内容是“All Resistances +%d”,这些是在游戏中文字中带有变量时填入并显示的。

图二十 - 已读取PatchString.tbl

因为我们要添加一个新的主键,所以点击“+”,出现主键添加对话框,输入名字并确定之后,你所输入的关键字会在左边窗口的底部出现并选定,同时光标会出现在右边窗口。你只有一次机会来输入新的关键字,你必须将“Manald Heal”的关键字与“UniqueItems.txt”中的纪录一致。幸运的是,“Manald Heal”的记录和它的关键字是一致的,所以我们只需要在这里输入主键“Manald Heal”,然后在右边输入“The Eye of Mordini”。结果如下图。我们所输入的主键内容是否与游戏中的一致无关紧要。但是如果你输入主键时出现了错误并且想修改,那么只能将这个主键完全删除然后重新创建;右边的内容可以随便修改。注意:绝对不要删除任何现有的主键,如果你不想用它们,最好是仅仅删除主键所对应的内容!

图二十一 - 添加新主键和内容

现在保存.tbl文件。

如果你想修改“String.tbl”而不是“PatchString.tbl”,那么做法是一样的,不过不是添加主键而是Search(寻找)“Manald Heal”这一主键并且将右边窗口的内容修改为“The

Eye of Mordini”。Search寻找这一功能仅适用于查找主键。

图二十二 - 搜索主键

和前几次一样,将修改的“UniqueItems.txt”放到你工作目录的“data\\global\\excel”,而本例中修改后的“PatchString.tbl”则要存放在“data\\local\\lng\\eng”中。注意:lng目录下要按照你所解开tbl所在的文件存放位置而定,比如ENG是英文版,DEU是德语。 如果你想让强制使修改后的tbl文件成为英语版而能在任何版本都可以使用,你需要用记事本创建一个特殊的文件:Use,没有扩展名,仅仅是Use,而它的内容仅仅是一个空格。然后将它放在“Data\\Local”目录,并且将它打包入MPQ文件,然后你会发现,不管你原来的tbl文件存放在哪个目录,它总会出现在“Data\\Local\\Lng\\Eng”目录。 用“-direct -txt”方式创建新的bin文件,然后将它复制到你的工作目录,然后用MPQ2K打包。批处理文件的内容如下:

O patch_D2.mpq

a uniqueitems.txt data\\global\\excel\eitems.txt a uniqueitems.bin data\\global\\excel\eitems.bin a patchstring.tbl data\\local\\LNG\\ENG\\patchstring.tbl C patch_D2.mpq

但你打开其他txt文件的时候,你会发现很多字段的内容和“UniqueItems.txt”很像. 任何像*code, *param, *min and *max这样在一起的字段的工作方式都和“UniqueItems.txt”中的一样。 步步为营!

上面的几个练习都是制作简单的修改。一个完成的MOD会有大量的修改。绝对不要一次做多处修改。一次只做一个修改,然后测试,更正,接着做下一个。你一次做的修改越多,错误也就会越多,同时测试起来也越困难。即便你越做越得心应手,也不要忘记限制自己尽量作少量修改。

在接下来的练习中你会学习如何测试创建的新物品。

练习#5 – 强制得到物品

我们知道像Key或者Arrow这种东西在游戏里很容易找到,但是Paladin的专用盾牌或者Manald Heal戒指却不常常从天而降。有很多方法来强制特殊物品出现,但是它们需要很精深的的MOD制作技术。在这里我们要实现的方法叫“Quill Rat Drop”这是因为Blood Moor里到处都有Quill Rat。这很容易实现,所以你也不必担心它会怎样工作。我们在这里还会提出测试版和正式发布版的区别。

为了测试,我们需要提取并修改“TreasureClassEx.txt”。这个数据库存中的数据决定你在杀死一个怪物或者打开箱子时会掉出什么物品。现在我们来看这个文件的一小部分,由于Blizzard的设计非常人性化,我们很容易为Quill Rats设定一套数据。

图二十三 - “UniqueItems.txt”中“Manald Heal”的记录

我们现在要用在上个练习中使用的“UniqueItems.txt”。将“UniqueItems.txt”作个备份,如果出了什么问题我们可以立刻恢复。找到Manald Heal的记录,找到上图所示我们感兴趣的三个字段。将“Level”和“LevelReq”的值设置为1,这是为了允许“Quill Rat”能够掉落ring并且测试人物可以使用。注意第三个字段的内容是“rin”,这部分内容是告诉游戏,我们希望“Quill Rat”掉落该物品。保存并复制文件到“data\\global\\excel”。

图二十四 – “TreasureClassEx.txt”中“Quill Rat”的记录

现在打开“TreasureClassEx.txt”,找到第一行“Quill Rat”,你会发现只有上面一点点内容,其它字段都为空。上图所示部分已经包括了所有我们想要修改的部分。首先删除“NoDrop”,“Item2”和“Prob2”字段的所有内容。然后将“item1”字段的内容从“gld”改为“rin”,这样子“Quill Rat”可以掉落戒指。最后把“Unique”段的内容改为“1024”。这个数值强迫掉落物品为Unique ring(暗金戒指),而且由于Quill Rats的等级很低,所以它也就只能掉落经过我们修改的,物品等级已经成为1的Manald Heal ring。保存不能够复制到你的游戏目录下的“data\\global\\excel directory”。 现在用快捷方式开始游戏。在游戏中杀死一些Quill Rats来测试它们掉落的物品,你会得到很多“The Eye of Mordini”。在鉴定它们之后即便你的测试人物为1级,也应该能使用。带上一个并查看你增加的属性是否和Ring上的属性一致。如果所有属性正常表示你成功了,而且这是可以发布的正式版本。

这种方式仅适用于那些基本装备或者魔法属性与人物或者怪物的等级无关,比如Magic或Rare物品。要使测试更有效,更全面,你需要创建一个Lv90以上的人物在Hell级别游戏中测试。

练习 #6 – 增大区域

很久以来大多数MOD的制作仅仅修改了物品,但是还有很多方式来修改这个游戏。在the Phrozen Keep的很多MOD中已经实现了修改、导入新的怪物,修改任务,改变画面以及和NPC的对话。但是他们的实现方法已经远远超出这片指南所能提供的技巧。但是,修改地图却不是一件很难的事情。

在暗黑中有三种区域,Outdoor区域包含了很多随机产生的部分。每个部分都是一个独立的ds1文件。目前这些区域还不能被扩展。一些区域则很难用1种或多种设置来实现,这些ds1文件中还包括特殊怪物以及物品。这些地区很难被扩展。

图二十五 – 编辑迷宫大小

第三种是迷宫,这是最容易被扩展的部分。你需要做的只是提取“LvlMaze.txt”并修改“Rooms”列的字段。在110版本中,这个数据库增加了Rooms的字段,因此你可以为不同的难度设定不同大小的迷宫。 在大多数场景中的迷宫: 第一幕

First floor of all caves (excluding Den of Evil)

所有洞窟的第一层(除了邪恶洞窟)

Crypt and Mausoleum underneath the Rogue Cemetary 埋骨之地 下面的 墓地 和 大陵寝 First four levels of the Forgotten Tower 遗忘之塔 的前四层

Jail and Catacomb levels of the Corrupted Monastery, except Andariel’s Lair 除了安达利尔的巢穴(地下墓穴第四层)外,堕落修道院的 监牢 和 地下墓穴 各层

第二幕

Sewers under Lut Gholein

鲁·高因 下面的 下水道 Stony Tomb 石制古墓

Halls of the Dead 死亡之殿 Maggot’s Lair 蛆虫巢穴

Ancient Tunnels 古代通道

First floor of the Claw Viper Temple

利爪蝮蛇神殿第一层

第三幕

both Spider caves

蜘蛛巢穴 和 蜘蛛洞窟 Flayer Dungeon 剥皮地窖 Swampy Pit 沼泽地洞

first level of Sewers under Kurast 库拉斯特下面 的 下水道第一层 first two levels of the Durance of Hate

憎恨囚牢前两层

第四幕 无

第五幕 First floor of all Ice Caves

所有冰洞窟的第一层

其他的区域在“LvlMaze.txt”中,其中一些不能用这种方法修改,比如:第一幕中洞穴的第二层或是第五幕场景中的Abaddon等。其他的也许能用这种方式来修改,但是并没有经过测试。

练习 #7 – 物品图片

在这节我们简单的学习一下如何增加和修改物品图片。物品的图片存放在“data\\global\\items”目录下的dc6文件中。这个文件不能被一般的图片编辑器所识别,我们必须转换图片的格式。要创建一个新的物品图片必须先建立一个标准图片,然后转换成dc6格式。而要编辑现有的图片,你必须先转换格式,再修改,最后再转回dc6格式。我们在这个练习中只学习如何建立新的Rune图片。但是在MPQ文件包中并没有一个空白的Rune图片。

最难的部分是将现有的Rune从D2exp.mpq中提取、转换为可编辑的格式并且还要擦去原来的Rune标志。这很难做而且还要保留Rune的光影效果。幸运的是,the Keep File Center提供了打包的物品,其中有一些就是我们所需要。其中一个是Riparious’ Gem Pack,它包括2种不同格式的空白Rune(BMP以及DC6)。打开BMP文件并画上一个符号。下面的例子是用阿拉伯字母制作的Rune,它说明了制作物品图片的困难。左边的小图是游戏中的真实尺寸。

图二十六 – Rune例图,原始尺寸以及放大尺寸

为了使物品和装备的网格大小匹配,物品图片必须是一个固定大小。每个网格是28*28象素的正方形。而且图片大小必须是网格的整数倍。

网格 尺寸 1x1 28x28 1x2 28x56 1x3 28x84 1x4 28x112 网格 尺寸 2x1 56x28 2x2 56x56 2x3 56x84 2x4 56x112 网格 尺寸 3x1 84x28 3x2 84x56 3x3 84x84 3x4 84x112 网格 尺寸 4x1 112x28 4x2 112x56 4x3 112x84 4x4 112x112 表五 – 标准物品尺寸(尺寸单位:象素)

将你的图片存为256色的pcx或bmp格式。 暗黑2不使用高彩颜色模式,如果你用高彩或真彩存储,它的显示将会不正确。运行DC6 Maker。

图二十七 – DC6 Maker的运行界面

DC6 Maker 与记事本很像,开始时会打开一个空白文档。(不知为什么在我的XP下不能运行,因此不能给出使用的感觉)当你将一个图片文件转换为dc6时,你需要将它当作一帧动画来插入。这是因为dc6的格式很复杂而且支持多帧的图片或是一些动画。但是装备图片是静态的,所以每个文件只有1帧。点击“Insert Frame”并且选择你的图片文件,接着在软件界面的右边会弹出一个预览窗口。

每一幕都有单独的的颜色方案,并且颜色方案存放在一个256色的调色板中。这对于怪物或者物品来说很合适,但是对装备来说就不够了。首先选择一个存在于所有Act的静态颜色。点击调色板“palette”并选取“units palette”。然后点“Setting”并选择“Use Transcolor”。这个颜色用于背景色就像Rune的黑色背景。选择调色板窗口最左上角的颜色0(纯黑)作为装备过渡色(transcolor),并且确认左下角的数字是0,0,0。然后点击“Set Transcolor”设置。

图二十八 – 选择透明背景色

返回主窗口,选择“Save As”,文件名设定为在游戏调用的名字。然后在txt文件的invfile字段填入你定义的文件名,不带扩展名dc6(最好是英文)。(在txt文件中应该新定义了一个rune,或者修改了一个已存在的rune,原文在这里没有说清楚。)如果你定义了一个套装或Unique的武器或者盔甲图片,则需要填写的字段为“setinvfile”或“uniqueinvfile”。

练习 #8 – 合成配方

暗黑里最有意思的部分算是the Horadric Cube了。Blizzard提供了一些很有用的配方来帮助我们开荒(实际上感觉没有神符之语合适开荒人员,合成物品除了RP极好时才可能出现一些低等级的好属性,其它时间都是TH在烧宝石、珠宝和符石) ,但是Cube能做到的远不只这些。在本节的内容中我们覆盖了合成配方的一些基本构成并且要对现有的配方作些补充。将“cubemain.txt”从mpq中提取。“cubemain.txt”的结构在109版本中从根本上做了改变,因此这章的练习只能在109系列版本中运行。同样,在110版本中它也做了很大的修改,但是我们涉及的部分却还是一样的。

学习制作合成配方的最好方法是研究Blizzard的原始配方。比如:我们想让Rune都能够升级,而不仅限于前9号(在110中已经实现了Rune的升级,不过我们可以让它实现得更简单),那么完成下面的练习就可以实现了。

图二十九 – “Cubemain.txt”的配方资格设定(1.09版)

数据库的第一部分设定是配方的资格,它是否在游戏中启用或启用的条件。第一列是合成配方的描述,它仅供参考而对游戏没有影响。一个配方必须被设定为能用或不能用,它是一个布尔型的字段,因此“enabled”设定为1,启用;0则是不启用。“Min diff”设定在哪个难度之上能被使用:0或空着表示Normal难度,1是Nightmare难度,2是Hell难度。“Version”段设为0表示在D2或者毁灭之王中都可以使用,而100仅限于毁灭之王。(在110版中,“enable”和“min diff”之间还有一个“ladder”它为0或空应该是在std或ladder中都可以,而1表示仅在ladder中)接下来的三列的内容用于比较游戏者当前的日期(仅在109b/d,在110中变为“Op”,“Param”和“Value”并且有了更广泛的用处)。接着的“Class”是一个3字母职业代码,比如你想限制这条配方为死灵法师专用,那么字段的内容为代码“nec”。

图三十 - 输入部分

第二部分是输入部分。这部分的内容确定了配方所需要的原料。一些官方设定的合成原料如图所示。“input1”部分是最重要的,参与配方的所有原料都在这里列出。而且,“numinputs”字段中的数量一定要和所有参与配方的原料的数量总和一致。引号用来括起参与合成的原料,比如:“fhl,mag,upg”。3字母的物品代码或者4字母的类型代码都是允许的。

下面的表格列出了一些用于输入或者输出的参数。大多数参数在输入和输出中都可以使用。

将参数结合可升级原料,可用于优秀upg 为数字 或精英物品 low 低等级物品 crf 合成物品 nor 一般物品 tmp tempered item (1.10 only) 基本物品(1.10 only) – 输hiq 超级物品 bas 入 基本物品 (1.10 only) – mag 魔法物品 reg 输出 rar 稀有物品 exc 优秀/例外物品(1.10 only) set 套装 eli 精英物品(1.10 only) uni 暗金物品 noe 非无形装备 = 表六 - 一些合成参数

any eth nos 任何物品,但是这个参数有时候不起作用 无形装备 无孔装备 sock 增加孔数 (需要=) pre suf qty 前缀属性(需要=) 后缀属性(需要=) 数量(需要=) 图三十一 - 输出部分

第三部分是输出部分。这些字段描述新生成的物品。有三个参数是输出物品所专用的:useitem,usetype,以及sock = #。“Useitem”用于生成新物品属性时保留所有原料的属性。你可以用这个参数来将物品的属性增强到游戏的极限。“Usetype”将“input1”列中的物品属性完全消去(包括无形属性),重新生成物品属性。最后,“Sock”用于给物品打孔,孔的数量不能超过游戏的限制。

3个表示等级的字段(lvl, plvl和ilvl)用来控制随即生成属性的等级要求。如果“lvl”被使用,其他两个等级的设定将会被忽略,所生成的属性的等级将在设定值以上。如果仅仅是“plvl”被定义,那么生成的属性的最高等级将是玩家等级*plvl%,同时没有最小值。如果仅是“ilvl”被定义,那么生成属性的等级是原始等级的ilvl%(old_ilvl* ilvl%)。如果“plvl”和“ilvl”被同时定义,那么,生成属性的最小值是玩家等级*plvl%,最大值是old_ilvl* ilvl%。在任何情况下,最后生成的属性被限制在99级以内。要求人物等级为新物品属性中等级最高属性的需求,即每个随机属性的等级加三的等级。 接下来是5部分属性,第一部分在上图中列了出来。这些属性的设置与

“UniqueItems.txt”中的属性设置一样。如果“Mod#Chance”列的字段被设置(#:数字,表示第几项属性),那么该部分设定的属性将按照设定的几率产生。比如你想让这个属性有33%的几率产生,那么在“mod#chance”字段的值设置为33。

在110x中,总共设置了3组输入和输出物品,每组独立,第二、三组分别为b,c。每组的输入输出设置与例子一样。在本节我们不需要用到其他两组设置,但是你可以用它们来一次得到多个输出物品。比如说将原料作为催化剂,合成之后依旧存在。 现在我们开始制作合成配方。在完成normal难度的Act2之后,商人那里卖的都是魔法物品,你找不到一件一般装备。因此我们要做两条配方,1、将魔法武器转化为带空的Superior武器;2、将魔法盔甲转换为带孔的Superior盔甲。在这个例子中,“any”

参数就不起作用,我们必须给每种物品制作配方。我们要用无孔魔法物品+2个鉴定卷轴(不是书)来生成新的达到该种物品最大孔数的Superior物品。

在“Cubemain.txt”中的最后新建两行,一个是武器,一个是盔甲。(建议在原文件的最后加上一个分隔线并说明一下部分是谁制作的。比如:Craft Cubemain Changed by Sloovy 2003/8/21。1、不会和原有的配方混淆;2、声明作者)请记住,一定不要插入行,而只是在末尾添加。插入仅在部分txt中可以实现而且会造成很多错误。在每一行的第一个字段填写简介,说明该行配方的作用。然后跳到输入部分,在该行的“NumInputs”字段填入3,因为我们用1个魔法物品和2个卷轴。然后在“input1”字段填入:“weap,nos,mag”来说明是无孔魔法武器,填入“armo,nos,mag”说明是无孔魔法装甲。“Input2”中填入 “isc,qty=2”表示2个鉴定卷轴。然后到“Output”列,内容为全部填写为“usetype,hiq,sock=6”。(因为游戏中物品的最大孔数是6,而大多数均低于6,在这里设置为6就保证无论什么物品都能达到它本身所限制的孔数。)

保存文件并生成bin文件打包。进入游戏来测试所制作的配方。但是,不是所有物品都能达到6孔,它们都有自身孔数的限制,而且在低难度下的物品最多只有3个孔,所以需要你进入Hell游戏来测试。合成之后你会发现除了物品已经被打上了孔,它还成为超级物品。如果设置了不同数目的打孔配方,那么就很容易得到制作神符之语的原料。下面的例子就是将用护身符将魔法物品降级为超级物品并按照配方中所用宝石的不同而添加不同数量的孔。

图三十二 – 一些配方的例子

练习 #9 – 技能的编辑

技能的修改同样是MOD制作中很难的部分。一些技能可以通过编辑“skills.txt”来达到我们的要求。我们在这里限制自己仅对txt文件作出修改。接下来我们要将死灵法师的teeth变为法师的Ice Bolt。

我们需要提取“missiles.txt”、“skills.txt”、和“string.tbl”这三个文件。下图是“Missiles.txt”中Teeth的内容。虽然在109b/d和110中,Missiles.txt和Skills.txt都有很大的改变,而且下图来自109d,但是我们要修改的字段并没有变化。

图三十三 - 在“Missiles.txt”文件中Teeth的属性设置

打开“missiles.txt”并找到“Teeth”这一行。向右卷动,找到如上图所示的颜色设置部分。Teeth默认的颜色被设置为255/255/255,也就是白色,将它的颜色修改为81/81/255来获得Ice Bolt的蓝色。

“CelFile”字段填写魔法释放的动画效果文件,没有dcc扩展名。将该段的内容修改为“icebolt”(没有引号也不填扩展名dcc)。每个dcc文件都有着固定帧数的动画,因此在“AnimLen”字段填入Ice Bolt的动画的帧数6。

“LoopAnim”,“SubLoop”,“SubStart”和“SubStop”设定魔法在飞行时动画的重复次数。将“LoopAnim”设为1,其它都设为0。

检查我们对Teeth的修改是否和现有Ice bolt的设定一一对应。然后保存missiles.txt。

图三十四 – “Skills.txt”中Teeth的设定 (1.09b/d版)

图三十五 - “Skills.txt”中Teeth的设定(110版)

打开“skills.txt”并找到Teeth所在行,然后找到如上图所示的定义魔法伤害的字段。Teeth是魔法伤害而Ice Bolt是冰冻伤害,因此将“EType”的内容改为“cold”。其他字段控制伤害的大小,先不管它们。

“Elen”字段用来设定技能效果持续的时间。它的基本单位是帧。游戏中每秒是25帧,这是游戏固定的。“Cold”是一些与时间相关的伤害属性之一,因此我们要给它设定一个值。如果冰冻持续效果为2秒,那么在这里填入50。其他三项“ElevelLen#”控制每级的持续时间。这些字段填0即可。

保存“skills.txt”。接下来要做的是将字串关键字与新修改的技能相关联。 用Table Editor打开“string.tbl”,用Search功能找到“Teeth”。找到的第一个关键字是“strSkill28”,它是一般飞行类魔法的列表。将它修改为Bolt。接下来找到的是Teeth技能的开始部分,如下图

图三十六 – Teeth技能部分

这一部分的第一个关键字是“SkillName67”,它定义了技能在游戏中显示的名字. 你可以把它修改为“Ice Teeth”或者其他什么。接下来的两个关键字定义了游戏中对新技能的描述。“Skillsd67”是简短描述,它的内容是“fires barbed teeth”。“skilld67”是完整描述,内容如上图。修改这两个关键字的内容,比如:分别填写“fires ice bolts”和“fires a sleeting barrage of deadly frigid shards”。最后一项“skillan67”是替换名字,它一般与游戏中显示的名字相同,因此把它的内容填写为“skillname67”的内容。

保存“string.tbl”。生成bin文件并将他们均放入Patch_D2.MPQ。现在,进入游戏并选择Nec看看他的技能是否被改变。当你察看技能时,名字和对技能的描述应该和你在“string.tbl”中修改的一样。

很多技能都是通过编码和“Skill.txt”联系起来。如果你想交换不同职业的技能,那就需要编辑DLL文件了。但是通过本节的练习,你能够修改技能的各种属性而不用管什么图像或者汇编语言。

练习 #10 – 新光环 (仅适用1.10x)

前几个练习所讨论的修改都适用于109和110版本。本节内容和下一章的内容都是110专用。

创建新技能最简单的方法是仿照一个现有的。打开“states.txt”并且找到“meditation”行。它的“id”字段应该是“48”。将该行全部复制并粘贴到文件的最后(记住先在文件的末尾添加分隔线,这样能够很容易找到你所作的修改)。现在就有了2行“meditation”。把在文件尾部的“state”字段的“meditation”改名为你所设定的名字。在本例中为“auraregen”,然后给它一个未被使用的数字,比如“181”作为识别。(我

们使用“auraregen”作为技能声明,这样不会与“properties.txt”中的“regen”冲突。)下图所示为我们需要使用的几个字段。

图三十七 – “States.txt”中的修改

我们希望这个光环能够瞬间起作用,因此在“immed”字段填1。现在已经完成了对“States.txt“的修改。如果你想让这个光环有特殊的视觉效果,在“overlay1”和“overlay2”中填入动画文件的名字,不带扩展名(或者像本例一样只填一个,然后让“overlay2”空着)。保存“states.txt”。 打开“skills.txt”,在“skill”列找到“Meditation”字段。它的识别号码“id”应该是“120”。将这一行复制并粘贴到文件的末尾,修改“skill”段的内容为“RegenHPMana”,同样也给该行的“id”一个没有被使用过的数字,本例为“357”。这样不会影响其它的技能。还要在“skilldesc”字段填入“RegenHPMana”,“aurastat”字段填入“auraregen”。 接下来找到该行对应“aurastate”和“auratargetstate”列的字段并全部填入“auraregen”。再往后到“aurastat1”,这个字段的内容应该是“manarecoverybonus”,而且接着的“aurastatcalc1”字段的内容应该是“ln34”。它们的作用是在游戏中提高魔法值的恢复速度,但这只是我们想实现的属性的一部分。现在找到“aurastat2”和“aurastatcalc2”,它们的内容分别为“hitpoints”和“skill('Prayer'.edns)”,它们设定技能“Meditation”从其它相关技能中得到的加成。我们并不想让它与其它技能相关联,因此我们要把这部分的内容修改为生命恢复。在“aurastat2”列的字段填入“hpregen”,“aurastatcalc2”填入“ln12”。在这里,每级恢复生命以及每级生命回复的增加量与原来光环的设定相同。本指南并不对多种类型的计算做讨论,但是与计算相关的参数都在“Param”列中。

图三十八 – Skills.txt中的修改

找到“reqlevel”列,并赋值“1”给该字段,这是为了方便测试。取消所有在“reqskill1”~“reqskill3”中设定的前置技能。这些字段设定了学该技能之前必须学的几项技能。对“skills.txt”的修改到此为止,保存并退出。

现在我们打开最后一个需要修改的文件“skilldesc.txt”。同样,复制“Meditation”行并粘贴到文件尾部。在这里我们会做大量的修改。将“skilldesc”列的内容改为“RegenHPMana”,它必须和skills.txt中“skilldesc”的内容一样。现在我们要将这个技能放到战斗技能页面(这主要是为了易于区分)并将它放到一个在技能页面上没有用到的位置。在“SkillPage”列输入3(表明是在战斗技能页面),“SkillRow”列输入1。最后在“SkillColumn”输入2。

图三十九 – 在“Skilldesc.txt”中设置技能图标位置以及技能说明

现在我们需要一些文字来描述技能的功用。我们在修改Teeth技能时已经知道,所有的技能说明都是相同的模式:技能名字,简短说明,完整说明和替换的名字。我们将

这个新技能按照上图设定:“str name”为“Skillname282”,“str short”为“skillsd282”,“str long”为“skillld282”和“str alt”为“skillan282”。打开一个tbl文件,推荐使用“string.tbl”并且将下面表格的内容添加入string.tbl。

Skillname282 skillsd282 skillld282 skillan282 Regenerate All Regenerates HP and Mana when active, gives life & mana regeneration for you and your party Regenerate All 表七 - 新技能的说明

这些指示对该技能的笼统说明,因为是我们复制的“Meditation”的内容,它原本的当前级别、下一级别以及它的相关技能的文字该如何处理?这些处理起来比较麻烦,但是它们有一个标准的格式。在“Skilldesc.txt”里有三部分内容,它们是(desc,dsc2,和dsc3),它们设定的技能说明如下:

desc* -> 与技能等级相关属性的说明(从下到上6组设置) dsc2* -> 与技能等级无关属性的说明(从下到上4组设置) dsc3* -> 相关技能的加成说明(从上到下7组设置)

在每个部分,最多会有7组参数。等级相关和等级无关的描述以倒序显示(从下到上),而相关技能则是顺序显示。每一部分都有一个类型描述(descline,dsc2line,dsc3line。即下图的type),一个或两个文字说明(text),然后是1~2个算式(clac)。类型描述是标准的字串,出自一个预先定义格式的列表。(这不在本指南讨论的范围)。文字说明则作为查找tbl文件内容的关键字。算式与Skills.txt中使用参数计算的方式一样。 在我们定义的新技能的位置,我们会发现下表的内容,因为我们复制的是“Meditation”的内容。 descline1 descline2 descline3 dsc2line1 dsc3line1 dsc3line2 type 4 2 19 67 40 18 text a StrSkill50 StrSkill88 StrSkill18 skillname99 Sksyn skillname99 text b StrSkill23 Healplev2 skillname120 calc a skill('Prayer'.edmn) ln34 ln12 skill('Prayer'.edmn) 2 calc b 表八 - Meditation的技能描述

总的来说“descline1”描述每级Prayer给它的加成,“descline2”描述魔法恢复的性质,“descline3”描述光环的作用范围。“dscline2”描述相关技能对它的影响。“dsc3line1”和“dsc3line2”给出相关技能列表,不过在本例中没有相关技能的设定。

现在我们开始制作技能说明。首先来消除相关技能信息,这只需要清除 “descline1”(除了“desctexta”中的内容),“dsc2line1”,“dsc3line1”和“dsc3line2”中的相关信息即可,如下表:

descline1 descline2 descline3 dsc2line1 dsc3line1 dsc3line2 type 2 19 text a StrSkill50 StrSkill88 StrSkill18 text b StrSkill23 calc a ln34 ln12 calc b 表九 - 除去相关技能后的技能说明

接下来还要做什么呢?在“descline1”部分,我们保留“StrSkill50”,它表示“Heals:”(治疗),在“descline2”部分,我们有两类属性,它们表示:用公式[text a]+(calc a)+[text b]生成关键字。我们现在打开“String.tbl”文件并找到text中的两个关键字。我们会看到“StrSkill88”=“Mana Recovery Rate:”,“StrSkill23”=“percent”。然后在“descline3”填入类型19,这表示:用公式[text a]+[calc a] + “yards”生成关键字。“StrSkill18”=“Radius:”(范围)。

(注:这部分比较混乱。它的表格中的type实际就是txt文件中descline#所在列的内容。)

现在我们想创建一个描述生命回复参数的关键字。它的格式和魔法恢复的格式一样。“String.tbl”中的“StrSkill108”被定义为“points”,参照下表设置: descline1 descline2 descline3 type 2 2 19 text a StrSkill50 StrSkill88 StrSkill18 text b StrSkill108 StrSkill23 calc a ln12 ln34 ln12 calc b 表十 - 新技能的完整说明

图四十 – 恢复效果的说明

按照图四十设置“Skilldesc.txt”的内容。(注:这部分的说明似乎是重复的,或者说结构与正式的110版有所不同。还没有对它进行测试,如果有问题还需要大家指正。)你还要确认清除了“dsc2line1”,“dsc3line1”和“dssc3line2”的所有内容,如下图(清除了desc2的所有内容)。保存“Skilldesc.txt”,进入游戏来检查修改结果。

图四十一 – 清除所有相关技能的说明

图四十二 – 清除所有相关技能的说明

练习 #11 – 增强属性的药水 (仅适用1.10x)

在这最后的联系中我们将创建一种药水,它的效果和祭坛(Shrine)一样,使用后会暂时的提升人物属性。同上一节的修改一样,它所用到的内容都是110所特有的。但是制作它和创建新物品一样,你可以回到109的几个练习来熟悉一下制作方法。 首先要打开的文件是“misc.txt”,复制“解冻药水”(第十行)到文件的最后,然后将“name”和“*name”的字段内容都修改为“Fire Resist Potion”或其他类似的名字。(注:本例制作的是增加火焰抗性的药水)。修改“code”和“namestr”字段为“frp”。然后是“State”字段,修改为“potion_fire_res”,清空“cstate1”和“cstate2”字段的内容,不要留下空格什么的!!“Len”字段的内容定义效果持续时间,时间单位是帧,1秒是25帧。

图四十三 – 增强火焰抗性的药水

将“Stat1”内容修改为“fireresist”,“calc1”是“30”来获得30%火焰抗性。“Stat2”改为“maxfireresist”同时在“calc2”列的字段中填写5来获得增加5%火焰抗性上限。最后在“spelldesc”填入1,在“spelldescstr”中填入你将在tbl文件中定义的关键字,比如“PotionFireRes”。保存misc.txt。

图四十四 - 药水的效果

现在打开“states.txt”并且在文件尾部增加一行新的记录。“state”列的字段内容为“potion_fire_res”,“ID”为接着上一个记录的未被使用的数字。“rfblue”字段填1,这样在药水使用后,你对应的属性显示为蓝色。找到“Stat”列,将内容修改为“fireresist”。 最后,在“eol”列填上0。这样能很直观地表现出属性的增强,这样玩家就会知道他是否还处于属性增强的状态之下。

现在你已经创建了一个增加火焰抗性的药水,但是除了使用它之后在属性页面能看到属性有增强之外,并没有任何从角色本身能看到的直观表现。现在我们给这个药水添加使用后在身体出现和Pal的火焰炕性光环一样的外观。依旧在“states.txt”中,找到“overlay1”列并且输入“aura_resistfire”,然后在“Castoverlay”列的字段输入“cast_resistfire”。最后在“onsound”填写“paladin_aura_resistfire”。保存“States.txt”。

图四十五 使用药水后的外观

然后我们需要添加文字说明。打开“string.tbl”,添加关键字“frp”,内容为“Fire

Resistance Potion”。然后再添加关键字“PotionFireRes”并且内容为“‘+X% to Maximum Fire Resistance’, ‘+Y% to Fire Resistance’”(X是你设定火焰抗性上限,Y是你设定的火焰抗性)。

图四十六 - 药水的文字说明

如果你这是后进入游戏会发现可以在能够卖解冻药水的商人那里买到,而且只花费25Gold。我们需要打开“Misc.txt”再做些修改,修改它的价格和获得方式。我们将“cost”列的内容修改为500,并且去除所有和商人有关的内容,本例为“Akara”(只需要清除“AkaraMin”和“AkaraMax”的内容)。如果你不想在城镇中买到药水,你必须修改所有商人的“min”,“max”字段。

图四十七 - 调整价格和获得方式

在把药水从所有商人的货物列表中去除之后,我们需要从野外生物或者其他对象那里获得。我们通过练习五的方式很容易做到,但是我们在这里要用一个更稳定点的方式,要让药水得到的途径更广泛而不仅限于某个对象。打开“TreasureClassEx.txt”并且找到“Treasure Class”段上“potion1~6”的纪录,我们要在每个纪录的空位加入新药水。如下图所示。

图四十八 - 在现有的物品掉落表中添加新的内容

最后的这个方法很重要,它可以设定各种物品。“TreasureClassEx.txt”是一个很复杂的文件,它是如何工作的并不在本指南中做讨论。但是这个文件的基本作用是设定物品掉落的几率,以及哪些物品会从哪些怪物身上掉出。最多有10种物品被列出,而且每一个都有一定机率被选择。“Picks”字段设定从掉落物品的记录中读几次,如果多于1,你最多可以一次得到6件物品。每件物品的掉落几率是它的掉落几率处以所有10件物品的几率和“No Drop”几率的总和来得到的。比如“Potion1”的内容被我们修改后,将所有“Prob*”的值全部加起来是“12+4+5+4+1+4+1=31”那么,我们新加入物品在

被选择的时候,它的掉落几率是:1/31。如果未被选择,则不会掉落。

注意:

你可以通过修改“itemstatcosts.txt”来创建任何药水来改变你的属性。但是如果你在上一瓶药水的效果没有消失的时候是用同样的药水,第二瓶药水只会消除全部效果。

尾声

the Phrozen Keep的全部成员希望你能喜欢这篇指南,希望它对你有用。通过修改txt文件能够对游戏做成很多修改,而这篇指南中的内容只是冰山一角。你可以通过其他指南和源文件来进一步学习。我们很欢迎大家在下面的解答中找不到答案时向我们提问题。

以下是一些常见问题:

1. 始终保证一次修改一点儿内容。变化越少,你越是能够在出问题时发现问题所

在。 2. 如果你给txt格式数据库或tbl文件添加新纪录,记着每次都在文件末尾添加。

绝对不要在文件中部插入新的纪录或者删除已有的记录。如果你不想让tbl文件中的文字性描述出现在游戏中,不要删除该关键字,而仅仅是将它的内容清空。有一些文件是无法添加内容的,但是目前只有“LvlMaze.txt”。 3. 用练习五的方式可以轻易获得我们设定的物品,但是如果你要测试高级的物品,仅仅是修改物品的等级“level”和等级要求“levelreq”的内容是不够的。你需要使用“TreasureClassEx.txt”文件中“Quill 1 (H)”的纪录,并且用高等级人物在Hell难度中进行测试。 4. 学习现有的记录来了解一个新的纪录是如何工作的。

5. 如果游戏崩溃,你可以通过两种途径来知道是哪里出问题了。第一个是弹出的

错误消息窗口,如下图。这条消息一般都很含混,但是如果你将错误信息纪录并发布在论坛中提问,有些人能够更好的帮助你。这个消息在你用窗口模式运行游戏时很容易出现。窗口方式:在快捷方式的命令行中添加 –w命令。

另外一个是游戏出错时,错误消息会纪录在游戏的安装目录下。文件名就像这样“D2020508.txt”,它的命名方式是D2后游戏当前的时间,年、月、日各2位。打开这个文件并从文件末尾向上寻找下面的内容:

18:38:26.480 ***** UNHANDLED EXCEPTION: ACCESS_VIOLATION (c0000005)

18:38:26.480 Fault address: 6FD83438 01:00042438 F:\\DIABLO II\\D2COMMON.DLL

如果你有弹出错误消息,那么这个也会在文件中记录下来。这通常是查明

Unhandled Exception的唯一方法,这通常是Diablo II试图存取被限制的内存部分而造成的通常Windows错误。

6. 常来the Phrozen Keep寻找最新的指南和教程来拓展你的知识。这份指南仅仅带

领你初步了解暗黑2的MOD制作。

祝大家玩得愉快!!!

更多信息,请访问:www.cnmods.com

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务