本站域名:
www.chinamods.com
     

- 地图下载 -

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


Game Park

暗黑破坏神官方网站

暗黑破坏神官方战网网站

 
States.txt修改全分析(如何使角色随意变身)
States.txt修改全分析(如何使角色随意变身)。 作者:Sloovy;整理:ylycloak。 
 

鸣谢:剑月明、Demonnests及所有参与讨论的朋友。

一、综述:

需要修改的有对应的Sets.txt或者UniqueItems.txt,反正你要修改哪个就是哪个了(废话),States.txt。需要参考或者可能需要修改的还有Overlay.txt。

首先,Overlay.txt是控制游戏中各种动画效果的文件(也许吧……),States.txt是控制游戏中各种状态的文件(大概吧……)。如果是已经存在的动画效果,只要在Overlay中找到它,并且在States.txt中添加对应状态就可以了。

开始实际的:
1.打开States.txt,在最下面添加一空行。找到id=176的monsterset,把它拷贝到最下面的空行里;
2.为了和变成Vampire的monsterset有所区别,我们把名字改成别的吧。最好是能直接体现效果的。比如bloodraven
3.好了,修改id成首个没用过的,比如184。现在可以检查一下,
state:bloodraven
id:184
transform:1 (告诉系统这个效果是会变形的)
disguise:1 (不知道什么意思)
restrict:空(为1就不能使用自己的技能和魔法之类的了)
castoverlay:teleport(施放时候的效果。我们让它显示的和Teleport一样)
removerlay:teleport(移除时候的效果,同样也是Teleport效果)
gfxtype:1(也许是变形的标志?)
gxclass:267(这是从monstats.txt里面找到的bloodraven的hcidx)
eol:0

现在可以把一个物品/套装属性改出个
prop:state
param:bloodraven
min:1
max:1

好了,装备上试试看吧。虽然目的基本达到了,但是不是Bloodraven?因为Bloodraven的动画和一般敌人rogue的放在一起的,所以没法指定。。。很遗憾。不过想变成Diablo之类还是没问题的。

States.txt修改经验:

先在States.txt找对应接近的名称。比如我希望装备上新的Valkyrie's Blessing套装后,会像召唤小V一样的效果,然后身上放的光也和小V一样,而不是一般套装光芒的样子,那么这样:

1.在States.txt里查找valkyrie,毕竟有现成的比较方便,也不容易出错;

2.在id=93的地方找到了valkyrie。但是很多不一样,比如这里transform=1,而我并不想让我的Ama变成小V的样子。那么应该是决定新建一个状态了。

3.继续看这行数据,看到overlay1=valkyrie,castoverlay=valkyriestart,好像也就这两个比较有用了。

4.打开Overlay.txt,查找valkyrie和valkyriestart,在第166和167行找到了。
overlay:valkyriestart ; filename:ValkyrieEmerge
overlay:valkyrie ; filename:ValkyrieGlow
其它的就不用管了。毕竟现在是用现成的动画,不是自己做新的

5.用CV5打开d2data.mpq,看看ValkyrieEmerge和ValkyrieGlow的庐山真面目——好了,就是我要的效果:放小V的动画,和小V身上的光;可以关闭Overlay.txt了。

6.好,继续编辑States.txt。再最下面加一行,state随便写个名字,这里我写valkyrieglory。加个id,然后把overlay1和castoverlay和id=93的valkyrie一行写一样的。那么这行的数据就是这样:
state:valkyrieglory
id:184
overlay1:valkyrie
castoverlay:valkyriestart
eol:0

7.好了,保存好States.txt。再打开Sets.txt,设定我的Valkyrie's Blessing:
FProp8:state
FParam8:valkyrieglory
FMin8:1
FMax8:1

8.OK~保存好文件,用-direct -txt进入游戏,穿上Valkyrie's Blessing Fullset试试效果……\^0^/ 成功~~

二、实例分析:

说一下我个人的理解

States.txt里面记录的是游戏中出现的各种状态,最大行数限制好像是256行。但是这些状态基本上都不会直接出现于游戏中,而是通过游戏中的属性、技能等,把状态和一些其它因素联合,组成最终于游戏中看得到的“属性”(有点乱了……)

----------------------------------------------------------
例1:女巫的Enchant。

我们知道,施法Enchant时,会有一个火圈在被施法者身边由下至上的转上去,然后手里的武器变成红色,同时攻击力、命中率提高-角色状态栏命中率显示数字变成蓝色,攻击力显示成红色,并且攻击带火属性……

看一下Enchant这个状态:
state: enchant
id: 16
attblue: 1
damred: 1
castoverlay: enchant
stat: skill_enchant
itemtype: weap
itemtrans: cred

state/id没什么好说的;
attblue=1,说明该状态使命中率栏变成蓝字;
damred=1,说明该状态使攻击力栏变成红色字;
castoverlay: enchant,施法动画是调用enchant这个overlay。可以在overlay.txt里面找到enchant,查看对应DCC,就是那个火圈由下至上转的动画了;
stat: skill_enchant,只在ItemStatCost.txt里面找到了对应的skill_enchant。不清楚是 当物品上有enchant时候,通过这个skill_enchant找到对应状态和技能计算方法,还是其它什么的;
itemtype=weap,说明状态是作用于武器上,而不是人物或者其它;
itemtrans=cred,使武器变为水晶红色。

这样,Enchant这个技能需要看得到的“状态”效果,我们都能从States.txt里面看到了。至于伤害的类型、计算,是Skills.txt里面的事情

----------------------------------------------------------
例2:Amazon的Valkyrie。

召唤小V的时候,她从天而降,身上发光 -_-n 揭开她的老底吧:

state: valkyrie
id: 93
transform: 1
disguise: 1
overlay1: valkyrie
castoverlay: valkyriestart
gfxtype: 2
gfxclass: 0

transform/disguise=1,表示这是一个变形的状态(我也有点想不通);
overlay1=valkyrie,看对应DCC后知道这是小V身上发的光;
castoverlay=valkyriestart,同样,看DCC后就知道这是小V从天而降那道光……;
gfxtype=2,这样就是指定变形效果用角色的图像;
gfxclass=0,指定是变形成Amazon的样子。
就这么简单了。。。

剩下呢?由Skills.txt和相关地方算出小V的攻击力/防御力/等等,由MonEquip.txt指定她的装备—— Lv27的时候,小V头戴Tiara,身穿Sacred Armor,手执War Pike,腰上Colossus Girdle,脚踩Myrmidon Greaves,腕带Crusader Gauntlets,还挂着Amulet,且全身Rare。嗯,奢侈的家伙。如果你的Ama弄这么一身穿着,我保证她和小V俩姐妹站一起时候没人分得出来谁是谁(发光效果不计-_-b)。只是我看恐怕没有哪个SpearZon到Lv56的时候能穿这身装备吧…

----------------------------------------------------------
例3:新增符文之语Delirium的变身效果。(注:Delirium=神经错乱,汗)

好像大家都对这个一道Teleport后变成冥河娃娃,和男巫套装变身成GhoulLord的效果比较感兴趣。这两个状态其实几乎是完全一样的。

state: delerium
id: 177
group: 3
transform: 1
restrict: 1
disguise: 1
castoverlay: teleport
removerlay: teleport
gfxtype: 1
gfxclass: 212

group=3,这样同属一组的其它状态就不能同时发挥作用了。包括男巫套装的变身,和德鲁伊的变狼/熊;
transform/disguise=1,同样,变身系技能(后注);
restrict=1,表示变身后就不能使用当前角色的技能了。去掉这里的1,就可以在变身状态下为所欲为了……;
castoverlay/removerlay=teleport,就是变身时和变身结束时都是Teleport的动画;
gfxtype=1,表示变身的目标是怪物(也是,正常人哪有动不动就变身的);
gfxclass=212,在MonStats.txt中,hcIdx=212的是Undead RatMan……哈哈哈,很可惜呀,连冥河娃娃都不是(只是让我想起某个常年居住于下水道中四只小乌龟的鼠人老师……)

至于变身后只能近身攻击,是由Monstats.txt中的Undead RatMan的IsMelee=1决定的。

※后注:同属变身系的技能还有:超人克赛的大炮变身,希瑞公主的“赐予我力量吧!”变身,美少女战士的彩带变身,乱马1/2的泼水变身,超级赛亚人的“超(x N)级赛亚人变身(1~M)”,话梅超人的“吃颗话梅就能变成超人!”等等等等……看来在日本为了防止部分“人”变身后做坏事而逍遥法外,得每人登记几套身份证,或者法律规定:“每周一至周五早8:00至晚22:00不得变身”……

----------------------------------------------------------
例4:尸爆效果(包括男巫的尸爆技能 和 FireEnhanced怪物死亡时的自爆)

state: corpseexp
id: 173
monstaydeath: 1
bossstaydeath: 1
hide: 1
udead: 1
notondead: 1
setfunc: 18
missile: corpseexplosion
onsound: necromancer_corpseexp_1

这个就麻烦了……因为我也不大明白……

monstaydeath=1,可能是表示处于这种状态的一般怪物死后无法被复活吧;
bossstaydeath=1,可能是表示处于这种状态的超级怪物死后也无法被复活;
hide=1,应该是隐藏起怪物的尸体;
udead=1,可能是无法选择怪物死后的尸体;
notondead=1,也许这个列名该理解为“Not On Dead”?全部状态里仅有Rest
In Peace和这个状态为1,而这两种状态都是在怪物死后稍等一下才发挥作用,而不是立刻就出现(圣骑士的打扫卫生Redemption是光环,而光环是有脉冲周期发挥作用的,应该没错吧);
setfunc=18,不知道这个ID=18的函数在哪里;
missile=CorpseExplosion,调用了Missiles.txt里面定义好的尸爆效果作为Missile,搞得地上恶心叭啦一大片,纯粹污染环境……
onsound=Necromancer_CorpseExp_1,没什么悬念了,男巫尸爆时候的音效。

这个状态就牵扯了一堆关于尸体的问题了。而没有什么试验和权威的解释,我实在是没有什么概念…… 我会试试看能不能复活Shadow Master的……那样的Shadow可是会血多到恐怖,hohohoho~

三、简易教程:

1.制作变身道具:
(A). 变身为游戏角色(以变身为Amazon为例):
首先,打开States.txt,在最下面新增一行,拷贝id=176的monsterset下来修改,或者直接填入以下内容:
state : morph2ama (方便识别);
id : 184 (下一个未使用的ID编号);
group : 3 (和其它变身技能放在同一组);
transform : 1 (变形状态标志);
restrict : 空 (变身状态下不限制使用技能魔法等);
disguise : 1 (变形状态标志);
castoverlay : teleport (变身时候是Teleport动画);
removerlay : teleport (取消变身状态时候也是Teleport动画);
gfxtype : 2 (确认是变身为游戏角色);
gfxclass : 0 (变身为Amazon);
eol : 0 (行结束标志)。

好了,这样就完成了新增一个状态,可以保存并关闭States.txt了。

现在打开UniqueItems.txt。为了方便测试,我们不新增装备,而只是给Unique Hunter's Bow -- WitherString增加这个变身效果。

搜索WitherString,在行号为62的地方找到它,在它的最后一个属性Prop6后面增加效果:
prop7 : state
par7 : morph2ama
min7 : 1
max7 : 1

这样就可以了。保存并关闭UniqueItems.txt。

使用-direct -txt进入游戏,用类似 “物品+鉴定卷轴->暗金物品” 的公式合成个新的Unique Hunter's Bow,装备上试试?

※“新的”非常重要,一个物品一旦产生,那么它的属性就已经确定了,也就是说不会包含新增的属性。所有暗金、绿色装备都存在这个情况。


(B). 变身为怪物/雇佣兵/NPC:
为了偷懒起见,我就不打算详细说了,基本上和上面的morph2ama是一样的。不同的地方就是 States.txt里面的状态,gfxtype = 1,gfxclass为对应人物/怪物在Monstats.txt里面的hcidx:

Mephisto : 242
Diablo : 243
Baal : 544 (可能,不确定)

Act1 雇佣兵:271
Act2 雇佣兵:338
Act3 雇佣兵:359
Act5 雇佣兵:560/561

Charsi : 154
Atma : 176
Natalya : 297
Jamella : 405
Anya : 512 (而且叫做Drehya?)
Cain : 520
Tyrael : 521
DarkWanderer : 368

2. 模拟小V发光效果:
我打算给新增的Valkyrie's Blessing套装增加个发光效果,并且不是一般套装那一圈的光,而是和小V的光芒一样,那么在States.txt中增加这样一行:
state : valkyrieglory
id : 185 (下一个未使用的ID编号);
overlay : valkyrie (这个是从ID=93行的Valkyrie里面拷贝过来的,具体参见第二部分);
castoverlay : valkyriestart (同上);
eol : 0。

然后打开Sets.txt,在新增的Valkyrie's Blessing最后一个属性的后面这样增加:
FCodeX : state
FParamX : valkyrieglory
FMinX : 1
FMaxX : 1

保存,用-direct -txt进入游戏并合成新的套装后试验试验,效果很酷吧!

四、遗憾之处:

1.States.txt中还有很多不确定或者不明白的字段,包括了可能会非常有用的各个函数等等;

2.似乎States.txt的限制是256行。这样,就算你有大量的好点子和燃烧不尽的体力耐力热情,很可能也会面对巧妇难为无米之炊的尴尬情况——毕竟很难保证你可以删除或者更改原有的状态而不影响游戏正常运行。但是往好的方面想,毕竟它是可扩充的——这已经很令人感谢Blizzard的大度了,更何况也许很快可以扩充到4096行的插件就会出现——现在已经有几个这样的先例了;

3.对于希望制作变身系状态的Modder们来说,这可能是个很鸡肋的事情 —— 一个状态只能对应变身成一种怪物/角色。这就意味不但限制了变身的种类数量,而且还有大量重复的繁杂劳动和测试工作。

五、总结:

1.States.txt是控制游戏中大多数“可视效果”状态的“中间件”。它通过调用较底层的Overlay,ItemStatCost,Missile等基本组件,把一组常见且可用的视觉效果封装为一个State,再供物品的属性/技能/攻击等 游戏中的最终效果调用;

2.多个States可以组合,而且经常以组合后的效果出现在游戏中;

3.目前States.txt中最大ID为183,应该还有72个可用的状态,可以说应该够了。合理有效的创建、搭配States,才是我们的主要目标,而不是一味制作一堆变身系状态……

六、声明:

1.这篇文章几乎只是依照我自己对States.txt的理解写出来的,肯定会有错误和疏漏之处,还请大家不吝指出;

2.写的时候参考了Phrozen Keep上的一些文章(主要是FileGuide),但是我相信应该不存在剽窃之类的问题。

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

如转载,请注明出处。