TXT源码文件全面解读
Armor.txt By Nefarius,Kingpin,Ric Faith & Paul Siramy前言:
Armor.txt,Misc.txt,Weapons.txt三者有许多共同之处。它们事实上只是一个大文件的三个小部分:游戏在读取它们的时候会将三者合而为一,全部列入一个大型表格里。这三个文件涵盖了所有游戏中的基础物品类型:普通/扩展/精华级的装甲、头盔、手套、盾牌、武器;以及各种药剂、宝石、钥匙、卷轴等等……
因此,我们完全可以往这三个文件中添加一些列。例如把Transmogrify、TMogType、TMogMin和TMogMax四列添加到Armor.txt里面(这四列原本只在Misc.txt中),并且让某种头盔使用这四列的取值,那么这种头盔就可以变成其他物品的模样。乍看上去这似乎是不可能做到的,因为起初在Armor.txt中并无可实现此功能的这四列。
注意:要想往某个txt文件中加入列,请勿使用D2Excel工具,D2Excel无法实现此功能。请使用MS Excel或者其他能够识别并输出以制表符分界的电子表格的工具。
本文件需要用到的txt文件有:
·AutoMagic.txt
·Belt.txt
·Composit.txt
·ItemTypes.txt
·Missiles.txt
·Sound.txt
本文件将在以下文件中被引用:
·CharStats.txt
·CompCode.txt
·CubeMain.txt
·SetItems.txt
·UniqueItems.txt
·……
各列功能说明如下:
Name:物品参考名称,仅作注释用
Version:0 = D2原版,100 = D2资料片(置为100的物品将无法在D2原版中出现)
Compactsave:1 = 压缩存档,0 = 不压缩存档。所谓压缩存档是用来获取较小的存档文件,同时也意味着关于物品的属性:诸如数量、魔法词缀、伤害、防御、耐久度等等,将不被保存(压缩存档一般仅用于一些无须属性的物品例如治疗药剂、各阶宝石等)
Rarity:0 = 该物品不会从装甲架上掉落,置为1或者更高的数值则将决定此物品从装甲架上掉落的几率,这个值越高,则物品越稀有(这里必须有至少一种物品的值为1,否则当你在游戏里点击装甲架时游戏将崩溃)
Spawnable:0 = 无法由NPC出售,1 = 可以由NPC出售
Minac/Maxac:该防具的最小/最大防御值;ItemStatsCost.txt中定义了这些取值的上限
Absorbs:无用参数,以前的作用与“伤害减少X”类似
Speed:正值 = 减慢行走/跑步速度,负值 = 增加行走/跑步速度
Reqstr:装备物品所需的力量,取值范围是0-65535;假如超出这个范围,将依据循环计数的原则。例如,在这里填写值65538,则系统会认为是2
Levelreq:装备物品所需的最低人物等级
Block:格档几率,总的格档几率上限为75%
Durability:基础耐久度,最大值为255,超出范围则循环计数
Nodurrability:是否无耐久物品,1 = 无法破坏物品(无耐久),0 = 有耐久度
假如这里置为1,则游戏里不会显示“无法破坏”字样,而是去掉物品的耐久属性
Durwarning:耐久警报图标出现的临界值,当物品耐久度低于或等于这个值时,警报图标将出现在屏幕上以提醒玩家,这玩艺快坏了。
Cost:基础价钱
Gamble Cost:赌博价钱的默认值,但仅对于Misc.txt中的戒指和项链起作用
Code:由3位字母/数字组成的代码,每样物品对应一个且不得重复;此代码为许多txt文件所引用,但不必将其写入TBL文件
Namestr:物品的代码/名称,如果这里的字串并未出现在TBL文件中,则此字串将直接作为物品的名称;反之,则使用TBL文件中此字串所对应的名称
注意:如果需要显示空格的话,使用TBL文件是唯一的途径
Normcode:该物品的普通级代码
Ubercode:该物品的扩展级代码
Ultracode:该物品的精华级代码
这三列用于确定物品的阶级,例如:需要升级一件普通级物品为扩展级,则游戏将获取此物品的代码,然后将其与这三列相对照
举例说明:狮头尖盔(Lion Helm)的属性为
·Code = ba7
·Normcode = ba2
·Ubercode = ba7
·Ultracode = bac
所以游戏判定狮头尖盔为扩展级物品,则上述升级普通级物品的公式将不对其起作用
Level:基础物品等级(亦即物品品质等级——QLvl);并非用于决定其上出现何种词缀,而是被用于建立诸如weapXX、armoXX等财宝阶层(TC),以免任何怪物都可以掉落所有物品,例如:一个TC等级为20的怪物无法掉落一件包含于TC = armo30中的30级装甲
MagicLvl:魔法等级增量,例如:某物品的这个值为5,且某玩家通过赌博得到了一件10级的该物品,则该物品上可能出现的词缀等级最大为15级
Auto Prefix:物品自带的词缀,引自AutoMagic.txt中的Group列值
Alternategfx:人物动画所使用的DCC文件代码,例如:哥德盾牌(code = gts)的此列值为kit,意味着假如一个野蛮人装备了这面盾牌,则他的A1(Attack1)模式动画的SH(Shield)图层将使用的DCC文件为BASHKITA11HS.DCC,而非BASHGTSA11HS.DCC或者BASHBUCA11HS.DCC文件
OpenBetaGfx:无用参数,D2测试版中用于参照使用了何种alternategfx值
Spelloffset:未知参数,仅在Armor.txt中出现
Component:该物品装备人物后所使用的动画图层,引自Composit.txt,以下是索引:
0 - HD(Head)头部
1 - TR(Torso)躯干
2 - LG(Legs)腿部
3 - RA(Right Arm)右臂
4 - LA(Left Arm)左臂
5 - RH(Right Hand)右手
6 - LH(Left Hand)左手
7 - SH(Shield)盾牌
8 - S1(Right Shoulder)右肩
9 - S2(Left Shoulder)左肩
10 - S3(Necro Shield)死灵法师盾牌
11 - S4(Special 4)特4
12 - S5(Special 5)特5
13 - S6(Special 6)特6
14 - S7(Special 7)特7
15 - S8(Special 8)特8
16则意味着该物品不使用任何图层,因为在Composit.txt中没有16所对应的索引
以下六列分别是一件装甲的一个组成部分,每部分都有三种色度:浅、中、深,这六列的取值说明了该装甲在不同部位会使用何种色度
0 = LIT(Light)浅
1 = MED(Medium)中
2 = HVY(Heavy)深
rArm:RA图层(Right Arm)右臂
lArm:LA图层(Left Arm)左臂
Torso:TR图层(Torso)躯干
Legs:LG图层(Legs)腿部
rSPad:S1图层(Special 1 – Right Shoulder)右肩
lSPad:S2图层(Special 2 – Left Shoulder)左肩
例如,布甲的取值为rSPad = 1,lSPad = 1,所以当布甲穿在亚马逊身上时,她的全身都是初始的红色(浅色),但左右肩变为灰白色(中等)
以下四列分别是不同情况下程序对物品所调用的DC6文件名称
Flippyfile:物品掉落时的动画文件
Invfile:物品栏里的图像文件
Uniqueinvfile:暗金物品所使用的物品栏图像文件
Setinvfile:套装物品所使用的物品栏图像文件
DC6文件的路径为data\global\items,例如:假如某物品的flippyfile列值为flpcap,则程序将在该物品掉落时播放data\global\items\flpcap.dc6文件
Invwidth/Invheight:物品在物品栏中占用的宽/高格数
以下三列用于描述物品上孔数的属性
Hasinv:该物品是否可以拥有孔,以镶嵌入宝石/符文,1 = 可以打孔,0 = 不能打孔
Gemsockets:该物品上可能出现的最大孔数,但一件物品不可能拥有多于其物品栏占用格子数量的孔数
另外,ItemType.txt中还有三个根据物品等级高低限制其孔数的列——MaxSock1、MaxSock25、MaxSock40
例如:假使某种头盔的Gamsocket = 4,但头盔的Maxsock1 = 2,因此一顶不足25级的该种头盔所能拥有的最大孔数就只能是2
Gemapplytype:镶嵌物镶嵌入该物品后所获得的属性,0 = 武器、1 = 装甲/头盔、2 = 盾牌;假如使用了其他数值,则该物品将不可能有孔
Useable:是否可以右键单击该物品以使用,1 = 可以、0 = 不可以;这一列多用于Misc.txt里的各种药剂/卷轴
注意:右键单击物品所获得的作用效果源于程序的硬代码。所以假设你并未编辑相应的dll文件,那么即使该值设定为1也不会有什么效果。
Throwable:无用参数;其本意是决定该物品是否能够投掷:1 = 可以,0 = 不可以;但这个功能定义于ItemTypes.txt中,而在Armor.txt和Misc.txt中该列值均为0,Weapons.txt中无此列
Missiletype:投掷该物品的话出现的飞射物种类,引自Missiles.txt中的ID列
Stackable:该物品能否多个叠放成堆:1 = 可以,并有数量属性,0 = 不可以
Minstack:一堆该物品的最小数量
Maxstack:一堆该物品所能拥有的最大数量
Qntwarning:警告标志出现的数量临界值
当该物品的数量小于等于临界值时,屏幕上将出现警告标志
这些列不作用于Armor.txt,仅用于Misc.txt(钥匙、书)以及Weapons.txt(标枪、箭矢等)
Type/Type2:物品的基础类型,主要用于合成公式、物品镶嵌物等;引自ItemTypes.txt中的Code列
Dropsound:物品掉落时的声音,引自Sound.txt中的Sound列
Dropsfxframe:物品掉落声音播放的桢数
Usesound:当物品装备上或者在物品栏里放下时的声音,引自Sound.txt中的Sound列
Quest:专门为任务物品定义的硬代码ID;任务物品一次只能携带一件且无法交易给NPC
Questdiffcheck:该物品是否通用于所有难度;值为1,则该物品将仅在其出现的难度适用;此列仅出现于Misc.txt和Weapons.txt中
Unique:1 = 仅存在暗金形态,0 = 无约束;这列多用于仅允许暗金形态出现的任务物品,假如某非任务物品的此列为1,那么该物品将只能出现暗金形态
Transparent:未知参数,游戏中无用;或许只是一个用于表示某物品处于透明形态的标志位?
Transtbl:未知参数,游戏中无用;猜想是当Transparent列非0时用来表示透明度……
Quivered:1 = 该物品需要弹药方可使用,0 = 无需弹药也可使用;此列仅用于Weapons.txt中的弓和十字弓,在Armor.txt、Misc.txt中均无用
Lightradius:无用参数
Belt:在Armor.txt中作为一个索引,来说明物品所代表的腰带种类
0 – 无用/无腰带 – 1行
1 – 饰带 – 2行
2 – 无用 – 1行
3 – 束带 – 4行
4 – 轻扣带 – 2行
5 – 重扣带 – 3行
6 – 高级腰带 – 4行
以上引自Belt.txt中的索引行(或许是硬代码规定的……),仅有Expansion行之上的部分有用;高级腰带包含了所有的扩展/精华级腰带
Belt:在Misc.txt中的意义与Armor.txt中完全不同
0 = 无法被放置于腰带栏,1 = 可以被放置于腰带栏
由于Misc.txt和Armor.txt同属一个大文件,所以程序大概是先判定物品的种类(是防具还是宝石药剂之类),再确定该列的用途
Mindam/Maxdam:该物品所具备的最小/最大伤害值,请注意这个值并非总会在游戏中的物品描述里显示,以下是对于不同的物品类型,该列值的具体含义:
对于盾牌 – 盾击伤害
对于鞋子 – 踢击伤害
对于武器 – 单手近战伤害
StrBonus:装备该物品时力量对伤害的加成系数,例如100表示每点力量 = 1%增强伤害, 75则表示每点力量 = 0.75%增强伤害
DexBonus:装备该物品时敏捷对伤害的加成系数,例如100表示每点敏捷 = 1%增强伤害, 75则表示每点敏捷 = 0.75%增强伤害
Armor.txt里这一列的伤害加成值仅对鞋子和盾牌有用,对于盾牌是对盾击伤害的加成,对于鞋子则是对踢击伤害的加成
Gemoffset:此列作为保留位,游戏加载时将自动填充,用以链接可打孔的物品及其相应的Gems.txt文件中的内容;不过假如这里事先填写一个非零值的话,游戏是否允许这里出现双重值仍旧存疑
Bitfield1:主要用于区分不同材质的物品,目前已知的是:
1 = 皮革制
3 = 金属制
仅有金属制物品可以用来召唤钢铁石魔
以下列用以控制不同的商人出售不同的物品,这里以Vendor来泛指Charsi、Gheed、Akara、Fara、Lysander、Drognan、Hratli、Alkor、Ormus、Elzix、Asheara、Cain、Halbu、Jamella、Larzuk、Malah、Drehya这些商人
VendorMin/VendorMax:某商人所能出售的该物品最小/最大数量,这里填写的数字过大将导致游戏因无法显示过多的物品而崩溃
VendorMagicMin/VendorMagicMax:某商人所能出售的该种魔法物品最小/最大数量
VendorMagicLvl:该物品所能获得的最高魔法词缀等级
PermStoreItem:该列不出现在Armor.txt中(仅存在于Misc.txt和Weapons.txt),但你可以人为的加进去;它用来控制物品是否始终在NPC处有出售:1 = 始终出售,0 = 不一定
Source Art:无用参数
Game Art:无用参数
Transform:有关该物品的动画所使用的颜色
InvTrans:该物品在物品栏中所使用的颜色
SkipName:控制游戏是否不显示该物品的基础名称,例如用于蝮蛇护符,则游戏不会显示两次“蝮蛇护符”字样
NightmareUpgrade/HellUpgrade:在噩梦/地狱难度商人将使用此处代码对应的物品来取代原物品,xxx = 不变
Nameable:用于安亚任务奖励,控制该物品是否能够被个人化:1 = 可以,0 = 不行
AutoMagic.txt By Quatl
前言:
本文件控制掉落物品上的自带词缀(autoaffix)及其自带属性(automod),automod会给物品添加一些魔法属性,但不会改变其魔法类型(蓝色/黄色/白色物品);这里你可以很轻松的控制各种属性何时出现,以及可附加的物品种类:例如,你可以添加某一组新的automod,控制该组automod出现所需的物品等级,以及该组各个automod出现几率,等等
相关文件:
这里要用到的文件有:
·Properties.txt
·ItemTypes.txt
该txt的内容将用于以下文件:
·Weapons.txt(Auto Prefix列)
·Armor.txt(Auto Prefix列)
各列功能具体描述:
Name:注释字符串,一般用以指明各前缀/后缀的名称以方便编辑修改
Version:100 = 仅用于D2资料片,0 = D2原版/资料片均可用
Spawnable:布尔函数,控制该automod是否允许出现在游戏中,1 = 允许,0 = 禁用
Rare:布尔函数,控制该automod是否可以出现于黄金物品上,1 = 可出现于黄金及蓝色物品上,0 = 仅可出现于蓝色物品;注意Rare列与Spawnable列是相互独立的,即当某automod的Spawnable列为零但Rare列为1时,该automod仍可出现在黄金物品上
Level:该automod出现于物品上所需的最低物品等级,用以使不同等级的物品上出现不同种类的automod;详细的解说请看附录
MaxLevel:该automod可附加的物品最高等级,
LevelReq:该automod的需求等级,与拥有该automod的物品原始需求等级相加
Class:角色代码,决定可使用该automod的角色类型,包括ama,nec,sor,pal,bar,dru和ass
ClassLevReq:当Class列非空时,本列用来为Class列中填写的角色等级提供特殊需求等级,但这看起来有些多余,因为其他角色无法使用该automod,所以不确定此列是否有用
Frequency:对于automod组而言,该组各个automod的出现几率;该值越高出现几率就越大,具体选择方法请参见附录
Group:本列值相同的各个automod将被视为同组automod,同组的各个automod只允许同时出现一个,另外LevelReq,ClassLevelReq以及Frequency列都被用于同组automod的各种相关计算,具体请参考附录;这里的组代码也用于填入Weapons.txt和Armor.txt文件的Auto Prefix列中以说明何种automod可附加于何种物品
Mod1Code-Mod3Code:各个automod所拥有的实际属性,每个automod最多可以拥有三个属性,这里的值引自Properties.txt中的属性代码
Mod1Param-Mod3Param,Mod1Min-Mod3Min,Mod1Max-Mod3Max:各个automod属性的参数,最小值和最大值;具体填入何种值请参考Properties.txt的文件引导
Transform:布尔函数,是否允许拥有该automod的物品改变颜色,1 = 变为TransformColor列中填写的颜色,0 = 原色
TransformColor:颜色代码,当Transform列的值为1时有效,以下是各个颜色代码的列表:
白色 whit
浅灰 gry
深灰 dgry
黑色 blac
淡蓝 blu
深蓝 dblu
水晶蓝 cblu
淡红 lred
深红 dred
水晶红 cred
浅绿 lgrn
深绿 dgrn
水晶绿 cgrn
浅黄 lyel
深黄 dyel
淡金色 lgld
深金色 dgld
淡紫 lpur
深紫 dpur
橙色 oran
亮白色 bwht
iType1-iType7:可附加该automod的物品类型,引自ItemTypes.txt中的类型代码
EType1-EType7:禁止附加该automod的物品类型,引自ItemTypes.txt中的类型代码
注意:这几列值事实上是多余的,因为在Weapons.txt和Armor.txt的Auto Prefix列中必须填入相应的组类型才能应用该automod,但这几列值设置不好将导致一些问题;因此一般设置iType1 = weap,iType2 = armo,iType3 = misc,然后用Group列控制该功能
Divide:拥有该automod的物品价格除数因子
Multiply:拥有该automod的物品价格乘数因子
Add:拥有该automod的物品价格增量
附录:关于Frequency和Group列
Group列的值一般被认为是该automod的ID或者代码,被其他文件引用以控制何种物品上可出现何种automod,这类物品主要是一些白色形态也可出现魔法词缀的物品,例如亚马逊专用弓/标枪/矛,法师专用法珠,圣骑士专用盾牌以及死灵法师专用盾,等
因此要想给某种类型的物品添加新的automod,或者将某类automod赋予某种新的物品,则必须修改该物品相应的Armor.txt或者Weapons.txt文件,并编辑AutoMagic.txt
例如,现在要使匕首类武器拥有
毒素伤害5-10,持续时间10秒:
首先,打开Weapons.txt,在每个匕首类武器的Auto Prefix列中填入将要附加的automod组代码:306(这里填写的值可以随意,但不能超过四位数且必须保证不与其它词缀组相重复)
其次,回到AutoMagic.txt,添加新的行,各列值如下:
Name:Poisoned Dagger
Version:100
Spawnable:1
Rare:1(这里如果填入0,则该automod将只能出现在蓝色匕首上)
MaxLevel:留空或自行填入相应内容
LvlReq:留空或自行填入相应内容
Class/ClassLevelReq:留空
Frequency:1
Group:306,对应前面Weapons.txt中的内容
Mod1Code:dmg-pois(引自Properties.txt中的毒素伤害代码)
Mod1Param:256(持续时间为10秒)
Mod1Min:5
Mod1Max:10
Transform/TransformColor:留空或自行填入相应内容
iType:knif(匕首所属的物品类型)
EType:留空
Divide/Multiply/Add:0
OK,现在该automod就制作完成了,但是似乎有点欠缺,5-10毒素伤害太少了,我们开始试图为高等级的匕首添加一些更强大的属性,比如这样:
1-20 级 5-10毒素伤害
21-40级 10-20毒素伤害
41-60级 20-30毒素伤害
61级及以上 30-45毒素伤害,25%致命攻击几率
这样我们需要4行来分别表示这四种属性,但是它们同属一个组,亦即使用相同的automod ID值,现在新建三行,填入与刚才那行相同的内容,只不过在Level和MaxLevel处做一些小改动:第一行的Level/MaxLevel列填入1/20,第二行填入21/40,然后是41/60和60/None;另外,该组的第四个automod还有25%致命攻击的几率,于是我们在第四行的Mod2Code处填入deadly,Mod2Min = 25 = Mod2Max;OK,现在同组的四个按物品等级出现的automod也做好了
但我们似乎应当演示一下Frequency列的用法,好吧,让它们的属性变成这样:
1-25级 5-10毒素伤害
15-45级 10-20毒素伤害
40-65级 20-30毒素伤害
60级及以上 30-45毒素伤害,25%致命攻击几率
那么在15-25级的匕首会出现哪一种automod呢?
我们分别在四行的Frequency列中填入5,3,2,1,于是在15-25级的匕首上,游戏会根据Frequency列的值随机抽取一个automod:
出现5-10毒素伤害的几率为5/(5+3)=5/8 = 62.5%
而出现10-20毒素伤害的几率为3/(5+3)=3/8 = 37.5%
如上算法,则在40-45级的匕首上,出现10-20毒素伤害的几率为3/5 = 60%,而20-30毒素伤害的几率为2/5 = 40%
当然了,如果某等级可能出现多个automod,仍然使用该算法
AutoMap.txt By Red Havoc
这篇文章里我们准备涉及一个经常给地图制作者们带来烦恼的领域:AutoMaps(自动地图);整治Diablo2中那些地图文件的时候我们有时会遇到一些关于automap的问题,例如:往LvlTypes.txt中的某个场景类型中加入dt1s文件时,或者往游戏中导入新的贴图文件时,等等;在这些情况下游戏的自动地图可能会不显示,或者出现缺口甚至漏掉部分地形,有时还可能显示出错误的元素,比如你想看到一个雕像但游戏却让你看到一堵墙或者一棵树……
为了修正以上这些问题,我们需要修改AutoMap.txt文件——一个大概拥有3300行,包含许多数据,看起来庞大无比的文件;不过一旦你了解了它,修改起来将会很简单:在做过一些尝试之后,你应该可以在很短的时间之内制作一张崭新的自动地图,你会发现制作地图这项工作并非想象的那么费时费力
在我们学习怎样制作地图之前,我想在这里给出一些关于自动地图如何工作的说明,以及automap.txt文件的功能概要;
然后,我们将逐列的分析automap.txt文件;
这篇文章的最后,我们会看到一些制作新自动地图的实例;包括一个快速有效的制作自动地图的方法,一个从其他场景类型中转换出新的自动地图的实例,以及要想使制作出的自动地图如原版游戏中的地图那样精致,你不可不知的小建议
关于自动地图如何工作:
我们知道,当角色在游戏中遍历各场景时,自动地图就会随之生成;如果你走在一个地下城里,自动地图会按照比例生成一个显示墙壁、大门、拐角等的缩略图,并且保存你所走过的所有区域的地图;而对于城镇的自动地图而言,每当你首次进入它时地图都会自动全部生成;另外,第二、四、五幕的城镇地图还有一些特殊的地方,下面我们将会提到
首先,让我们看看自动地图的图片文件存放路径,解压D2Exp.mpq文件,在以下路径里:
Data\global\ui\automap
我们可以找到两个dc6文件,MaxiMap.dc6(用于平常的自动地图)和MaxiMapS.dc6(用于资料片中提供的缩略版自动地图);二者均为多层次的dc6文件,包含了所有自动地图所要用到的小图标图样,这些图标最大尺寸为16*32像素(缩略版位8*16);我们可以用DrTester或者Dc6Table Tool等工具来浏览这些小图标文件;不过,这两个dc6文件中大约有1500个各种不同的图标,稍后在你自己定制风格的自动地图中选用这些图标文件的话,光是浏览一遍就会非常的……繁琐……
另外在以下路径里,还有一些相关的地图文件:
Act2Map.dc6(在D2Data.mpq文件中)
Act2MapS.dc6
Act4Map.dc6(在D2Data.mpq文件中)
Act4MapS.dc6
ExTnMap.dc6
ExTnMapS.dc6
这些文件就是前面提到的,第二、四、五幕的特殊地图文件,它们与普通场景的地图的区别在于,这里不是由很多小图标图样拼成的地图,而是由一些大型的图样拼凑在一起,因此当你重新绘制城镇地图并且希望自动地图显示正常时,你就必须编辑这些文件
OK,现在我们知道了自动地图图像的来源,那么游戏如何得知何时绘制何种图标呢?这就要归结于游戏构图使用的修饰图样了;每种修饰图样都对应自动地图中的一种图标,所以当角色接近这些修饰图样时,其相应的图标就会显示在自动地图上;举个例子:角色在经过第一幕的某个小屋时,这个小屋的墙壁图样对应的自动地图图标组合起来将是一个房子的模样,因此我们接近小屋时,游戏会显示其对应的图标——一栋房子,这个对应关系是由某个txt文件规定的,而如你所知的那样,这个txt文件就是我们正在讨论的AutoMap.txt
并非所有图样都有其对应的图标,通常只有一些明显的实物和场景构图需要的部分有,例如第一幕的野外,除了小路和场景构图所需的墙壁等,其他诸如水坑、石头之类均没有对应的自动地图图标
AutoMap.txt引导文件:
现在我们知道,AutoMap.txt只是用来为各种地图图样指定其相应的图标,因此让我们看看其具体的作用机理,txt的内容可分为两部分,一部分用于定义地图图样,另一部分为该图样指定自动地图图标
LevelName:这里填入的值即为该场景类型的名称,场景类型似乎是由硬代码规定的,所以在LvlTypes.txt中加入自定义的场景类型无效,因此这里的值最好是已有的场景类型
TileName:这里填入代码,用以指定具体的地图图样及其类型ID,以下是具体代码:
TileName 类型ID 注释
fl 0 地板(floor)
wl 1 墙壁左侧(wall left)
wr 2 墙壁右侧(wall right)
wtlr 3 墙壁顶部下方左侧(wall top lower right)
wtll 4 墙壁顶部下方右侧(wall top lower left)
wtr 5 墙壁顶部右侧(wall top right)
wbl 6 墙壁底部左侧(wall bottom left)
wbr 7 墙壁底部右侧(wall bottom right)
wld 8 墙壁左侧门(wall left door)
wrd 9 墙壁右侧门(wall right door)
wle 10 墙壁左侧出口(wall left exit)
wre 11 墙壁右侧出口(wall right exit)
co 12 中心物体(center object)
sh 13 影子(shadow)
tr 14 树(tree)
rf 15 屋顶(roof)
ld 16 左下角(left down)
rd 17 右下角(right down)
fd 18 全景下方(full down)
fi 19 全景不可见(full invisible?)与18成对出现
Style:即为各地图图样的主ID,采用十进制计数
StartSequence/EndSequence:这两列是地图图样的修饰ID,利用这两列可以定义游戏选取修饰图样的ID范围,例如Start = 4,End = 8,则游戏将使用修饰ID =4,5,6,7,8的图样,这里所有数字均采用十进制;另外,这里的值为-1表示游戏将不使用修饰ID,仅使用前面的TileName和Style列中定义的图样主ID
以上四列的值一起定义了该行所表示的贴图文件:LevelName限定了指定幕的指定场景中可能存在的贴图文件范围,然后TileName、Style以及Sequence列分别指定了贴图文件的类型ID、主ID和修饰ID,从而确定了该贴图文件,因为同一场景中只可能有一个贴图文件能同时满足这三个指定值;另外Start/End两列则允许同一行的贴图文件有多种修饰方式,用于不同贴图文件,但在自动地图上显示相同图标的场合,例如多种样式的墙壁
Type1-4:注释列
Cel1-4:这四列定义了特定贴图文件在MaxiMap(s).dc6文件中所属的层,这或许是生成自动地图时最需要指明的一点:每行可以包含20个图片(用DC6Table编辑图像的话你可以设置每行包含更多的图片),因此第一行为图标0-图标19,第二行为图标20-图标39以此类推;输入各个图标的代码即可知道其隶属的贴图文件
设置以上四列实际上是用来为自动地图加入一些随机特性,如果其中有两列或两列以上不为空,则当该贴图文件显示在自动地图上时游戏会随机的从这些列中抽取一个来显示,这种功能主要用于一些包含许多同种贴图文件的大型地图,重复使用一种图标会使游戏看起来死气沉沉,而随机显示的图标将使自动地图看起来花样繁多,更加贴近真实
以上是我们关于AutoMap.txt的解说,下面将给出一些制作新自动地图的实例
制作个性化的自动地图:
现在让我们看看如何制作自己的自动地图,这里我将阐述一些我在编辑自动地图文件过程中所发现有用的方法和诀窍,其中一个就是用来生成一个简化版的自动地图——仅仅标示出该场景/地下城的主要轮廓以及一些有用的地点,这种方法很迅速并且无需太繁琐的操作,所以主要用于工作繁忙而你又不愿意在自动地图上花费过多时间的场合;接下来,我们将学习如何利用新加的dt1s文件将地图填充完整,以及解决一些在编辑地图过程中遇到的小问题;最后,我们将讨论一些高效制作完全版地图的技术及此过程中可能出现的故障
首先让我们来看第一种简化版的方法,它基于D2中的所有地图都包含的所谓的“地板”贴图,即可使角色在其上行走/跑动的地方(有些不允许角色在其上行走的地方不在我们的讨论范围),按如下的步骤做:用WinDs1Edit打开一个地图文件,将所有的墙壁和房屋等删除,现在该场景所有的修饰物都消失了,但你可以清楚地看到整个地图的布局——这和我们所想要制作的自动地图效果是一样的:我们可以让自动地图只显示所有“地板”贴图,以构成一个类似于地下城的“地板平面图”的自动地图;当然了,这种方法的局限性太大,比如说在某个地下城里,使用地板平面图无法标示出那些死角,也无法显示一些比较重要的元素,如阶梯、拐角等;但是这种方法用于一些粗略显示还是很有效的,并且无需对AutoMap.txt文件作太多的编辑
于是,你所要做的就是:查找各种地板贴图所使用的ID,打开AutoMap.txt,在你要修改的场景类型下面添加几行,并且在这几行中添入正确的内容;对所有的贴图文件都使用同样的自动地图图标,这样你就可以得到一个差强人意的整体自动地图;对于拐角等特殊元素,我们则需要为其指定相应的地板贴图,并为这些贴图指定对应的自动地图图标,这样它们将也可以在自动地图上显示出来
要为D2导入新的地图,TileMaker Tool是不错的工具选择,该工具仅生成地板贴图文件,因此它看起来就是为我们这种方法量身定做的;不过该工具有点小问题需要考虑:请看其生成出的图样,你会发现它会生成很多完全空白(无任何地图元素)的地图块;由于TileMaker是将整个图片转换为许多个地图块文件,因此原始图片上的各个边界、拐角等元素都将被转换,问题就在于:如果你为这些元素指定了自动地图图标,那么你所获取的自动地图将和原始地图不一致,因为自动地图上包含了太多原始地图上所没有的内容;要解决这个问题有以下几种方法:
从dt1文件中删除所有空白的地图块,但这样做很繁琐,并且需要对ini文件进行许多查找并修改的操作
从AutoMap.txt中删除所有与这些空白地图块相对应的行,但是对于大型地图而言这种繁复的查找操作同样很痛苦
最简单的方法就是去TileMaker生成的ds1文件中,删除掉所有空白的地图块;去除了这些空白块,自动地图上就不会显示额外的内容了
·注意,新导入的地图文件所使用的原始图片背景色必须是纯黑的,与D2的默认背景色相同,否则导入后背景效果将非常难看
现在让我们讨论下一个问题:我们在第一幕的某个地穴中扩展了几个特殊房间,里面有些特殊Boss或者什么玩艺的那种,我们为其使用军营中提取的地图贴图文件(basewall.dt1),场景是没错了,但自动地图上没有相关显示,为什么?
事实上这只是因为AutoMap.txt中没有为该地穴提供相应的贴图文件主ID接口,军营内所有贴图文件的主ID均为5,但在AutoMap.txt中,地穴仅包含了主ID为1、2、3、4以及21的贴图文件,只要将军营的贴图ID与地穴相匹配,地穴中的这类元素自然会显示在自动地图上
因此为了修正此类错误,我们去AutoMap.txt文件中找到军营(在277-324行),将其中的相关行拷贝到地穴(在426-551行)下面,并使其类型ID、主ID和修饰ID与实际相匹配,OK,事情完成
最后一个问题,怎样为某场景添加完整的自动地图文件?或许现在看来这已经很简单了,将各个地图的贴图文件匹配其相对应的正确的图标即可;不过仍然有一些问题需要说明:
首先,尝试着按照暴雪原版的风格去编辑地图文件,为各种墙壁或门使用整齐划一的图标,混乱的显示将导致玩家很快就迷路;为同一个场景的自动地图使用一组同样风格的图标,例如军营中使用棱角分明的墙,地穴中使用歪歪扭扭的石头样图标,等;并且保证各种颜色的搭配合理,比如说,灰色的地牢中使用同样色度的灰色自动地图将导致玩家很难分辨,同时某些特殊地方诸如出口入口之类,用特殊颜色显示出来会使玩家更容易找到目标
·你可以用自己风格的图片去扩展AutoMap.dc6文件的内容,只要在DC6Table生成的表格最后按照正确的尺寸填入新的图标即可;在编译的时候该工具会将其作为新的图层导入进去,并且该值可以被Cel列的值定位
制作自动地图并不难,但我仍然要在这里指出一些问题,以避免当您实际操作遇到时慌了手脚:有些时候我们会看到同一个地图块上有许多不同图层的贴图文件,如果对其中每一个都指定一个自动地图图标的话,显示就很混乱了,因为自动地图图标可是不能叠放的;不过事实上游戏会在多个图标之间做出选择,只显示类型ID值最高的图标,这样有时在某些贴图文件重叠的区域,我们会看到自动地图上显示出缺口
对于这个问题似乎没什么太好的解决办法,除非你在制作地图块的时候就已经考虑到了这一点;但是游戏生成自动地图的函数是很难描述的,并且最终地图产生出来的效果也很难预测;对于D2原始的那些地图,生成自动地图的方式都是模糊匹配,因此避免了该问题的发生
以上就是全部的自动地图方面的内容,希望对您有所帮助
CharStats.txt By Nefarius
Class:该行属性所对应的角色类型,仅为参考列,作注释用
Str:角色的初始力量值
Dex:角色的初始敏捷值
Int:角色的初始精力值
Vit:角色的初始体力值
Tot:仅为参考列,做注释用,一般填入该角色的四项初始属性之和
Stamina:角色的初始耐力值
HPAdd:除了初始体力所关联的生命值之外,额外的初始生命值增量
PercentStr:无用参数,但代码会加载之,并且通过代码可以自定义其用途
PercentDex:无用参数,但代码会加载之,并且通过代码可以自定义其用途
PercentInt:无用参数,但代码会加载之,并且通过代码可以自定义其用途
PercentVit:无用参数,但代码会加载之,并且通过代码可以自定义其用途
ManaRegen:角色法力从0到恢复满所需的时间,以秒为单位,因此该值越小则法力恢复速度越快,越大则越慢
ToHitFactor:在角色的基础攻击命中率上额外增加的命中率值;除非修改了相关代码,否则这里如果填写一个绝对值很大的负值将有可能导致角色的攻击命中率小于0
WalkVelocity:角色的行走速度(资料片之前的版本该值为7)
RunVelocity:角色的跑步速度(资料片之前的版本该值为11)
RunDrain:角色跑动时消耗耐力值的速率,该值越小则耐力值消耗也越慢
Comment:显然是注释列
LifePerLevel:每升一级增加的生命值,单位为1/4,即每升一级至少可以加64/256点生命值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
StaminaPerLevel:每升一级增加的耐力值,单位为1/4,即每升一级至少可以加64/256点耐力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
ManaPerLevel:每升一级增加的法力值,单位为1/4,即每升一级至少可以加64/256点法力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
LifePerVitality:每一点体力增加的生命值,单位为1/4,即每一点体力至少可以加64/256点生命值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
StaminaPerVitality:每一点体力增加的耐力值,单位为1/4,即每一点体力至少可以加64/256点耐力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
ManaPerMagic:每一点精力增加的法力值,单位为1/4,即每一点精力至少可以加64/256点法力值(屏幕上的数值以整数形式显示,但在游戏中它的分数部分仍旧有效)
StatPerLevel:每升一级增加的状态点数
#Walk:注释列,暴雪在此处填写的是WL动作的动画桢数
#Run:注释列,暴雪在此处填写的是RN动作的动画桢数
#Swing:注释列,暴雪在此处填写的是A1动作(当装备近战武器时)的动画桢数
#Spell:注释列,暴雪在此处填写的是SC动作的动画桢数
#GetHit:注释列,暴雪在此处填写的是GH动作的动画桢数
#Bow:注释列,暴雪在此处填写的是A1动作(当装备弓时)的动画桢数
BlockFactor:在Armor.txt中规定的盾牌格档基础上增加的格档几率
StartSkill:该角色新建时其武器上附加的技能ID,引自Skills.txt中的ID指针
Skill1-Skill10:角色创建时即可使用的技能,这里的值引自Skills.txt中的ID指针
StrAllSkills:当游戏中出现“+X某角色的全部技能等级”属性时显示的字符串,例如,+1亚马逊技能等级
StrSkillTab1:当游戏中出现“+X某角色的第一系列技能等级”属性时显示的字符串,例如,+1弓和十字弓技能
StrSkillTab2:当游戏中出现“+X某角色的第二系列技能等级”属性时显示的字符串,例如,+1被动和魔法技能
StrSkillTab3:当游戏中出现“+X某角色的第三系列技能等级”属性时显示的字符串,例如,+1标枪和长矛技能
StrClassOnly:当游戏中出现“某角色专用”属性时显示的字符串,例如,限亚马逊使用
BaseWClass:当角色未装备武器时游戏默认其装备的武器类型的图像,例如hth表示游戏将调用hth动画的DCC文件来绘制角色图像,因此角色无装备时的图像是空手的,如果填入1hs则角色无装备时的图像及其攻击动画是拿着单手剑的样子
Item1-Item10:新建角色身上的装备,例如要想某新建角色身上有赫拉迪克方块,则在某一列填入其代码“box”即可,这里的值引自Weapons.txt,Armor.txt,Misc.txt中的ID指针
Item1Loc-Item10Loc:对应前一列装备的放置地点,留空则意味着放在物品栏中,如果可放入腰带,则游戏会默认放在腰带里,这里的值引自BodyLocs.txt中的ID指针
Item1Count-Item10Count:对应ItemX列中装备的数量
CubeMain.txt By Nefarius & Myhrginoc
前言:
本txt文件控制着所有的赫拉迪克合成公式
相关文件:
这里用到的文件有
·ItemType.txt
·Misc.txt
·Armor.txt
·SetItems.txt
·UniqueItems.txt
·Properties.txt
·ItemStatCost.txt
各列详细说明:
Description:该列仅作为注释,无实际功能
Enabled:布尔函数,控制该公式是否可用,1 = 可以,0 = 不可以
Ladder:布尔函数,该公式是否仅可用于天梯模式或单机,1 = 是,0 = 否
Min Diff:使用该合成公式所需的最低游戏难度,0 = 所有难度下均可用,1 = 噩梦和地狱难度,2 = 仅限地狱难度
Version:该公式的适用版本,是旧版D2C,新版D2C还是资料片,0 = 旧版D2C,1 = 新版D2C,100 = 资料片;这里不确定1所代表的意义是否准确
以下三列的详细情况请参照附录
Op:实时控制选项,用以判断该公式的合成条件
Param:实时控制选项,用以判断该公式的合成条件
Value:实时控制选项,用以判断该公式的合成条件
Class:用以判断该合成公式适用于何种角色,可在ama、bar、pal、nec、sor、dru、ass中任选一个你需要的值
NumInputs:该公式需要放入盒子的物品数量;如果在Inputs列中对某物品定义了qty属性,则也应将其真实数量算进来
Inputs1-7:这七列分别表示该公式所需的各个物品,这里可以填入一些参数来说明物品类型,其中Inputs1列中填入公式的最主要物品,也就是合成配方第一个生成物的原始物品;这里具体可以填入何种参数请参见其他资料
Output:该公式生成的第一个产物,也可以填入一些输出参数,具体参数类型请参见其他资料
Lvl:Output列中的生成物等级,该生成物的等级会被强制定义为这里的数字
pLvl:Output列中生成物等级与合成者等级之间的关系
iLvl:Output列中生成物等级与Inputs1列中的原始物品之间的关系
Mod1-5:这部分内容定义了Output列中的生成物的附加属性
·Mod # - 属性代码,用以为生成物附加属性
·Mod # Chance – 该属性附加到生成物上的几率
·Mod # Param – 该属性所使用的参数
·Mod # Min – 该属性的取值下限
·Mod # Max – 该属性的取值上限
要想使输出物品的属性值固定,可以让Mod # Min = Mod # Max
Output b:该公式生成的第二个产物,也可以填入一些输出参数,具体参数类型请参见其他资料
b Lvl:Output b列中的生成物等级,该生成物的等级会被强制定义为这里的数字
b pLvl:Output b列中生成物等级与合成者等级之间的关系
b iLvl:Output b列中生成物等级与Inputs1列中的原始物品之间的关系
b Mod1-5:这部分内容定义了Output b列中的生成物的附加属性,其具体作用方式与前面的Mod1-5各列相同
Output c:该公式生成的第三个产物,也可以填入一些输出参数,具体参数类型请参见其他资料
c Lvl:Output c列中的生成物等级,该生成物的等级会被强制定义为这里的数字
c pLvl:Output c列中生成物等级与合成者等级之间的关系
c iLvl:Output c列中生成物等级与Inputs1列中的原始物品之间的关系
c Mod1-5:这部分内容定义了Output c列中的生成物的附加属性,其具体作用方式与前面的Mod1-5各列相同
*EoL:行结束符,值始终为0以避免游戏出错
附录:
这里的属性全部引自ItemStatCost.txt中的ID(例如strength的ID = 0)
Op Param Value 效果
1 None 日期 当且仅当当前日期 >= Value值时有效
2 None Code 当且仅当当前日期 == Code时有效(0 = 星期天,1 = 星期一……)
3 属性 属性值 当且仅当人物当前属性 >= Value值时有效
4 属性 属性值 当且仅当人物当前属性 <= Value值时有效
5 属性 属性值 当且仅当人物当前属性 != Value值时有效
6 属性 属性值 当且仅当人物当前属性 == Value值时有效
7 属性 属性值 当且仅当人物基础属性 >= Value值时有效
8 属性 属性值 当且仅当人物基础属性 <= Value值时有效
9 属性 属性值 当且仅当人物基础属性 != Value值时有效
10 属性 属性值 当且仅当人物基础属性 == Value值时有效
11 属性 属性值 当且仅当人物当前属性 – 基础属性 >= Value值时有效
12 属性 属性值 当且仅当人物当前属性 – 基础属性 <= Value值时有效
13 属性 属性值 当且仅当人物当前属性 – 基础属性 != Value值时有效
14 属性 属性值 当且仅当人物当前属性 – 基础属性 == Value值时有效
15 属性 属性值 当且仅当Input1物品当前属性 >= Value值时有效
16 属性 属性值 当且仅当Input1物品当前属性 <= Value值时有效
17 属性 属性值 当且仅当Input1物品当前属性 != Value值时有效
18 属性 属性值 当且仅当Input1物品当前属性 == Value值时有效
19 属性 属性值 当且仅当Input1物品基础属性 >= Value值时有效
20 属性 属性值 当且仅当Input1物品基础属性 <= Value值时有效
21 属性 属性值 当且仅当Input1物品基础属性 != Value值时有效
22 属性 属性值 当且仅当Input1物品基础属性 == Value值时有效
23 属性 属性值 当且仅当Input1物品当前属性 – 基础属性 >= Value值时有效
24 属性 属性值 当且仅当Input1物品当前属性 – 基础属性 <= Value值时有效
25 属性 属性值 当且仅当Input1物品当前属性 – 基础属性 != Value值时有效
26 属性 属性值 当且仅当Input1物品当前属性 – 基础属性 == Value值时有效
27 None None 当且仅当合成物品的OtherID 值 != Value值时有效
28 None None 当且仅当合成物品的difficulty值 < 当前游戏难度时有效(程序会事先检测该合成物品是否为任务物品,以及其对应的questdiffcheck列值是否为1)
29到255均为闲置代码,无用
DifficultyLevels.txt By Nefarius,Joel Falcou,Jarulf & Foxbat
前言:本文件用来定义一些基于游戏难度等级的,全游戏中起作用的参数
相关联的txt文件:
本文件与其它txt文件没有什么关联,仅仅是一份独立的参数表
各列功能说明如下:
Name:难度名称,该列最好不要添加其他内容
ResistPenalty:该值是角色进入当前难度所受到的抗性惩罚
DeathExpPenalty:该值是角色在当前难度死亡后会丢失的经验值百分比
UberCodeOddsNormal:无用参数,1.07版以前该值是扩展级劣质/普通/超强物品在当前难度的掉落几率
UberCodeOddsGood:无用参数,1.07版以前该值是扩展级蓝色/黄金/套装/暗金物品在当前难度的掉落几率
UltraCodeOddsNormal:无用参数,1.07版以前无此列
UltraCodeOddsNormal:无用参数,1.07版以前无此列
MonsterSkillBonus:于当前难度下对MonStats.txt文件中定义的怪物技能等级的加成值,对于飞射物的伤害值并无提升效果
MonsterFreezeDivisor,MonsterColdDivisor:对当前难度下的怪物被冰冻/冻结时间的惩罚因子,此值不能为0
AiCurseDivisor,LifeStealDivisor,ManaStealDivisor:当前难度下对可转化AI类诅咒持续时间,生命偷取效果,法力偷取效果的惩罚因子;1.10以后版本中该值不能为0,1.10版中该值为0将导致转化AI类诅咒/生命偷取/法力偷取等属性失效
UniqueDamageBonus,ChampionDamageBonus:对当前难度下的金怪及其仆从,以及冠军级怪物拥有的伤害和准确率加成效果进行百分比惩罚
HireableBossDamagePercent:决定当前难度下你的雇佣兵/召唤物等仆从会对每幕最终Boss造成的伤害百分比,例如地狱难度此值为25,则你的雇佣兵对Boss造成的伤害只是原始伤害的1/4
MonsterCEDamagePercent:当前难度下怪物的尸体爆炸技能所能造成的伤害百分比:多人难度下怪物的生命值会增加,与此同时其尸体爆炸所造成的伤害也会提升,但这类伤害都将受到此列值所规定的限制
StaticFieldMin:当前难度下静电力场技能能够使怪物生命降低到的下限值,这里值设定为0将导致各个难度下法师均能利用静电力场技能将怪物的生命无限降低,如D2原版那样
GambleRare,GambleSet,GambleUnique,GambleUber,GambleUltra:硬代码所规定的函数中将用到这些参数,用以决定赌博时各个难度下出现黄金、套装、暗金、扩展级物品和精华级物品的几率
DifficultyLevels.txt By Nefarius,Joel Falcou,Jarulf & Foxbat
前言:本文件用来定义一些基于游戏难度等级的,全游戏中起作用的参数
相关联的txt文件:
本文件与其它txt文件没有什么关联,仅仅是一份独立的参数表
各列功能说明如下:
Name:难度名称,该列最好不要添加其他内容
ResistPenalty:该值是角色进入当前难度所受到的抗性惩罚
DeathExpPenalty:该值是角色在当前难度死亡后会丢失的经验值百分比
UberCodeOddsNormal:无用参数,1.07版以前该值是扩展级劣质/普通/超强物品在当前难度的掉落几率
UberCodeOddsGood:无用参数,1.07版以前该值是扩展级蓝色/黄金/套装/暗金物品在当前难度的掉落几率
UltraCodeOddsNormal:无用参数,1.07版以前无此列
UltraCodeOddsNormal:无用参数,1.07版以前无此列
MonsterSkillBonus:于当前难度下对MonStats.txt文件中定义的怪物技能等级的加成值,对于飞射物的伤害值并无提升效果
MonsterFreezeDivisor,MonsterColdDivisor:对当前难度下的怪物被冰冻/冻结时间的惩罚因子,此值不能为0
AiCurseDivisor,LifeStealDivisor,ManaStealDivisor:当前难度下对可转化AI类诅咒持续时间,生命偷取效果,法力偷取效果的惩罚因子;1.10以后版本中该值不能为0,1.10版中该值为0将导致转化AI类诅咒/生命偷取/法力偷取等属性失效
UniqueDamageBonus,ChampionDamageBonus:对当前难度下的金怪及其仆从,以及冠军级怪物拥有的伤害和准确率加成效果进行百分比惩罚
HireableBossDamagePercent:决定当前难度下你的雇佣兵/召唤物等仆从会对每幕最终Boss造成的伤害百分比,例如地狱难度此值为25,则你的雇佣兵对Boss造成的伤害只是原始伤害的1/4
MonsterCEDamagePercent:当前难度下怪物的尸体爆炸技能所能造成的伤害百分比:多人难度下怪物的生命值会增加,与此同时其尸体爆炸所造成的伤害也会提升,但这类伤害都将受到此列值所规定的限制
StaticFieldMin:当前难度下静电力场技能能够使怪物生命降低到的下限值,这里值设定为0将导致各个难度下法师均能利用静电力场技能将怪物的生命无限降低,如D2原版那样
GambleRare,GambleSet,GambleUnique,GambleUber,GambleUltra:硬代码所规定的函数中将用到这些参数,用以决定赌博时各个难度下出现黄金、套装、暗金、扩展级物品和精华级物品的几率
Gems.txt By Nefarius
Name:参考列,仅作注释,一般用来填写该行的宝石/符文名称
Letter:符文镶嵌入物品后物品上显示的符文字样,如El,Eld等
Transform:宝石/符文镶嵌入物品后该物品会变成何种颜色,引自Color.txt中的色彩代码
Code:各个宝石/符文的物品代码,也就是控制着附加在各个宝石/符文上的属性,1.07版之前这些都是硬代码规定的,因此不编辑相应的dll文件就无法添加新的宝石/符文
NumMods:也是参考列,仅作注释,一般用来填写该宝石/符文上的属性数量
WeaponMod1-WeaponMod3:该宝石/符文镶嵌到GemApplyType(见Armor.txt,Weapons.txt以及Misc.txt文件的此列)为0的物品上时(默认为武器),其所附加的属性,这里的值引自Properties.txt文件的ID指针
WeaponMod1Param-WeaponMod3Param:与其前一列的属性相对应的属性参数值(这里最好不要使用带参数的属性,也不要填写该处的数值,否则当多个相同的宝石/符文镶嵌入同一个物品时会造成参数值叠加而出现一些不可预料的后果)
WeaponMod1Min-WeaponMod3Min:其对应的属性最小值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)
WeaponMod1Max-WeaponMod3Max:其对应的属性最大值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)
HelmMod1-HelmMod3:该宝石/符文镶嵌到GemApplyType(见Armor.txt,Weapons.txt以及Misc.txt文件的此列)为1的物品上时(默认为头盔/装甲),其所附加的属性,这里的值引自Properties.txt文件的ID指针
HelmMod1Param-HelmMod3Param:与其前一列的属性相对应的属性参数值(这里最好不要使用带参数的属性,也不要填写该处的数值,否则当多个相同的宝石/符文镶嵌入同一个物品时会造成参数值叠加而出现一些不可预料的后果)
HelmMod1Min-HelmMod3Min:其对应的属性最小值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)
HelmMod1Max-HelmMod3Max:其对应的属性最大值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)
ShieldMod1-ShieldMod3:该宝石/符文镶嵌到GemApplyType(见Armor.txt,Weapons.txt以及Misc.txt文件的此列)为2的物品上时(默认为武器),其所附加的属性,这里的值引自Properties.txt文件的ID指针
ShieldMod1Param-ShieldMod3Param:与其前一列的属性相对应的属性参数值(这里最好不要使用带参数的属性,也不要填写该处的数值,否则当多个相同的宝石/符文镶嵌入同一个物品时会造成参数值叠加而出现一些不可预料的后果)
ShieldMod1Min-ShieldMod3Min:其对应的属性最小值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)
ShieldMod1Max-ShieldMod3Max:其对应的属性最大值(注意:宝石的属性不会被游戏存档保存,因此如果设定了属性的随机数值,则该宝石的属性每一桢都将发生变化,直到其镶嵌入某物品为止)
Hireling.txt By Draco & Ric Faith
前言:
本文件控制所有与雇佣兵有关的内容,通过这里你可以设置雇佣何种雇佣兵、他们的装备、属性及技能等
本文件将用到的文件有:
·ItemTypes.txt
·Skills.txt
Hireling:描述雇佣兵的种类,如罗格或野蛮人;仅作为注释,无实际作用
SubType:雇佣兵的具体种类,如冰/火罗格或防御/进攻枪兵;仅作注释,无实际作用
Version:0 = D2原版,100 = D2资料片
ID:ID数字,用以分辨不同种类的雇佣兵
Class:使用何种单位作为雇佣兵,引自MonStats.txt中的HcIdx列
Act:该雇佣兵在哪一幕可以雇到
Difficulty:1 = 普通级,2 = 噩梦级,3 = 地狱级
Level:雇佣兵的等级,雇佣兵的等级与其技能等级和属性密切相关
Seller:引自MonStats.txt中的HcIDx列,决定在哪个NPC处可以雇到该雇佣兵
NameFirst,NameLast:游戏随机给雇佣兵起名字所要用到的两列
Gold:雇用该雇佣兵所花费的金钱,随等级提升而变化
Exp/Lvl:用于计算雇佣兵升级所需经验值的因子,从这一等级(L)提升至下一等级(L+1)所需的经验值为:Exp/Lvl * L * L * (L+1)
HP:该雇佣兵在其基础等级时的生命值
HP/Lvl:该雇佣兵每升一级所提升的生命值
Defence:该雇佣兵在其基础等级时的防御值
Def/Lvl:该雇佣兵每升一级所提升的防御值
Str:该雇佣兵基础等级时的力量值
Str/Lvl:该雇佣兵每升一级所提升的力量值
Dex:该雇佣兵基础等级时的敏捷值
Dex/Lvl:该雇佣兵每升一级所提升的敏捷值
AR:该雇佣兵基础等级时的攻击准确率
AR/Lvl:该雇佣兵每升一级提升的攻击准确率
Share:用以关联普通,噩梦,地狱难度下雇佣兵的等级阀值
Dmg-Min,Dmg-Max:雇佣兵基础等级时的最小/最大伤害值
Dmg/Lvl:雇佣兵每升一级所提升的伤害值,以1/8为单位
Resist:雇佣兵基础等级时的所有抗性值
Resist/Lvl:雇佣兵每升一级提升的所有抗性值,以1/8为单位
WType1,WType2:该雇佣兵所能使用的武器种类,此值无法修改
HireDesc:雇佣兵显示在游戏里的名称,与TBL文件相关
Default Chance:雇佣兵使用普通攻击而不是技能的概率
Skill1-Skill6:雇佣兵可以使用的技能,引自Skills.txt中的ID指针
Mode1-Mode6:前一列中的技能所使用的动作模式,大体上如下:1 = 光环,4 = 攻击,5 = 攻击(用于野蛮人佣兵,与4的效果相同),7 = 施展动作,14 = 顺序动作(如戳刺)
Chance1-Chance6:该雇佣兵基础等级时使用该技能的几率;例如一名一等普通级火焰箭佣兵:
Default Chance = 75,Chance1 = 10,Chance = 25
则普通攻击几率 = 75/(75+10+25) = 68.18%
施展技能1——内视的几率 = 10/110 = 9.09%
施展技能2——火焰箭的几率 = 25/110 = 22.73%
而该雇佣兵升级至二等之后:
Default Chance = 75,Chance1 = 10,Chance = 69
则普通攻击几率 = 75/(75+10+69) = 48.70%
施展技能1——内视的几率 = 10/110 = 6.49%
施展技能2——火焰箭的几率 = 25/110 = 44.81%
因此可以看到,雇佣兵升级的同时其各种AI几率也会相应的变动
ChancePerLevel1-ChancePerLevel6:雇佣兵每升一级所提升的使用该机能的几率
Level1-Level6:雇佣兵基础等级时所使用的该技能的等级
LvlPerLvl1-LvlPerLvl6:雇佣兵每升一级所提升的该技能等级,0 = 不提升
Head,Torso,Weapon,Shield:这几项用于雇佣兵各部位的动画图象
Inventory.txt By Nefarius
Class:注释列,用以描述该行所对应的角色类型
InvLeft:屏幕左边缘坐标(X轴方向)
InvRight:屏幕右边缘坐标(即InvLeft + DC6文件的宽度)
InvTop:屏幕顶端坐标(Y轴方向)
InvBottom:屏幕底端坐标(即InvTop + DC6文件的高度)
GridX:物品栏由多少列组成
GridY:物品栏由多少行组成
GridLeft:物品栏左边缘坐标(X轴方向)
GridRight:物品栏右边缘坐标(GridLeft + GridBoxWidth * GridX)
GridTop:物品栏顶端坐标(Y轴方向)
GridBottom:物品栏底端坐标(GridTop + GridBoxHeight * GridY)
GridBoxWidth:物品栏每格宽度
GridBoxHeight:物品栏每格高度
rArmLeft:右手武器位的左边缘坐标(X轴方向)
rArmRight:右手武器位的右边缘坐标(rArmLeft + rArmWidth)
rArmTop:右手武器位的顶端坐标(Y轴方向)
rArmBottom:右手武器位的底端坐标(rArmTop + rArmHeight)
rArmWidth:右手武器位的宽度
rArmHeight:右手武器位的高度
TorsoLeft:装甲位的左边缘坐标(X轴方向)
TorsoRight:装甲位的右边缘坐标(TorsoLeft + TorsoWidth)
TorsoTop:装甲位的顶端坐标(Y轴方向)
TorsoBottom:装甲位的底端坐标(TorsoTop + TorsoHeight)
TorsoWidth:装甲位的宽度
TorsoHeight:装甲位的高度
lArmLeft:左手武器位的左边缘坐标(X轴方向)
lArmRight:左手武器位的右边缘坐标(lArmLeft + lArmWidth)
lArmTop:左手武器位的顶端坐标(Y轴方向)
lArmBottom:左手武器位的底端坐标(lArmTop + lArmHeight)
lArmWidth:左手武器位的宽度
lArmHeight:左手武器位的高度
HelmLeft:头盔位的左边缘坐标(X轴方向)
HelmRight:头盔位的右边缘坐标(HelmLeft + HelmWidth)
HelmTop:头盔位的顶端坐标(Y轴方向)
HelmBottom:头盔位的底端坐标(HelmTop + HelmHeight)
HelmWidth:头盔位的宽度
HelmHeight:头盔位的高度
NeckLeft:项链位的左边缘坐标(X轴方向)
NeckRight:项链位的右边缘坐标(NeckLeft + NeckWidth)
NeckTop:项链位的顶端坐标(Y轴方向)
NeckBottom:项链位的底端坐标(NeckTop + NeckHeight)
NeckWidth:项链位的宽度
NeckHeight:项链位的高度
rHandLeft:右手戒指位的左边缘坐标(X轴方向)
rHandRight:右手戒指位的右边缘坐标(rHandLeft + rHandWidth)
rHandTop:右手戒指位的顶端坐标(Y轴方向)
rHandBottom:右手戒指位的底端坐标(rHandTop + rHandHeight)
rHandWidth:右手戒指位的宽度
rHandHeight:右手戒指位的高度
lHandLeft:左手戒指位的左边缘坐标(X轴方向)
lHandRight:左手戒指位的右边缘坐标(lHandLeft + lHandWidth)
lHandTop:左手戒指位的顶端坐标(Y轴方向)
lHandBottom:左手戒指位的底端坐标(lHandTop + lHandHeight)
lHandWidth:左手戒指位的宽度
lHandHeight:左手戒指位的高度
BeltLeft:腰带位的左边缘坐标(X轴方向)
BeltRight:腰带位的右边缘坐标(BeltLeft + BeltWidth)
BeltTop:腰带位的顶端坐标(Y轴方向)
BeltBottom:腰带位的底端坐标(BeltTop + BeltHeight)
BeltWidth:腰带位的宽度
BeltHeight:腰带位的高度
FeetLeft:鞋子位的左边缘坐标(X轴方向)
FeetRight:鞋子位的右边缘坐标(FeetLeft + FeetWidth)
FeetTop:鞋子位的顶端坐标(Y轴方向)
FeetBottom:鞋子位的底端坐标(FeetTop + FeetHeight)
FeetWidth:鞋子位的宽度
FeetHeight:鞋子位的高度
GloveLeft:手套位的左边缘坐标(X轴方向)
GloveRight:手套位的右边缘坐标(GloveLeft + GloveWidth)
GloveTop:手套位的顶端坐标(Y轴方向)
GloveBottom:手套位的底端坐标(GloveTop + GloveHeight)
GloveWidth:手套位的宽度
GloveHeight:手套位的高度
*暴雪为了使显示效果紧凑一些,以上的各个数值都缩减了一些像素