本文章介绍附魔的机制。
附魔基础
当把一件可附魔的物品放上附魔台时,可用的附魔等级将会依据以下公式随机生成。附魔等级由附近书架的数量(最多15个)及附魔等级在附魔列表中所在的行数决定。
以下是可用附魔等级的计算步骤:
- 可用附魔等级基数(base) = (1..8 + (b/2) + 0..b)
其中b 是附近书架的数量(≤15),“x..y”表示在[x,y]闭区间内产生一个随机数。产生基数后,游戏会根据附魔等级所在的行数,进行第二步计算:
- 第一行等级 = max (base / 3, 1)
- 第二行等级 = (base × 2) / 3 + 1
- 第三行等级 = max (base, b × 2)
在正式版 1.3 前,可用附魔等级基数计算公式为 base = (1..5 + (b/2) + 0..b) ,并乘以“行列因数”(第一行为1⁄3,第二行为2⁄3,第三行为1)得到。最小的附魔等级与附魔台周围有效书架数目的一半相同。
在正式版 1.1 前,上式的“(b/2)”项曾是“0..(b/2)”,这使得附魔等级随机性变大,刷出高等级附魔选项会耗费大量时间。同时,可用附魔等级的最低级固定在1,不会受书架数目的影响。
| 书架数目 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 最小等级(第一行) | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
| 最大等级(第三行) | 8 | 9 | 11 | 12 | 14 | 15 | 17 | 18 | 20 | 21 | 23 | 24 | 26 | 27 | 29 | 30 |
在创造模式中,附魔不需要经验等级。
书架的放置
附魔台附近的书架可以提高可用的附魔等级。在预览版 12w22a 中,若附魔台周围没有不贴紧附魔台的书架,则可用附魔等级最高只会到8级。 有效的书架必须距离附魔台2个方块远,且必须与附魔台处于同一或高1个方块的高度。书架和附魔台之间的空间必须是空气(火把与雪也不允许),而该“之间”则是如下图所示(空格代表空气,而不影响):
| 俯视: | 或 | ||
|---|---|---|---|
| 侧视: | 或 |
由于只需要15个书架即可达到最大附魔等级,所以书架的排列有很多种方法。一种最简单的方法是用一层书架围着附魔台绕上一圈:
另外一种方法则是做一个“图书角”,书架放两层。这种方法使用了16个书架,比需要的还要多。
如果需要限制最大附魔等级,一种简单的方法就是往附魔台与书架之间的空间中插火把禁用部分书架。把火把拿下可以重新恢复最大的附魔等级。
另外要注意的是,要检查附魔区域的环境,并保证书架与附魔台之间的绝对空无。例如在覆雪生物群系中,雪可以把所有书架都无效化。因此,除非你希望得到较小的附魔等级,则在附魔前要进行仔细的检查和清理。
魔咒是如何选择出来的
“魔咒等级”是某一魔咒所需的经验级别(在按钮上的绿色数字)。
“魔咒威力”是某一特定魔咒的力量。例如,“锋利IV”有4点威力。
魔咒的挑选有三个步骤。
第一步 - 对附魔等级加入调节值
首先游戏会把两个调节值加入到被选的附魔等级中。每个调节值会被限制在一定的范围内,数字接近范围中央的会比靠近两端的更常见。
第一调节值是基于附魔对象的“附魔能力”,这取决于该物品的材料和类型(见下表)。游戏会在0至附魔能力的一半(实际上,游戏会先将附魔能力除以4,四舍五入为整数后再乘以2)之间随机挑选一个数字,然后将这个数字和1加到附魔等级里。此时,弓的附魔能力是1。然后,这个随机数会经过三角形分布处理,使得最终结果靠近附魔能力一半的几率远大于靠近极值的几率。
| 修改后的附魔等级 = 附魔等级 + 随机值(0, 附魔能力 / 4 * 2) + 1 (每步计算完毕后四舍五入) |
|---|
| 材料 | 对应盔甲的附魔能力 | 对应剑/工具的附魔能力 |
|---|---|---|
| 木 | 不可用 | 15 |
| 皮革 | 15 | 不可用 |
| 石 | 不可用 | 5 |
| 铁 | 9 | 14 |
| 链(链甲) | 12 | 不可用 |
| 钻石 | 10 | 10 |
| 金 | 25 | 22 |
接着,Minecraft会在0.85和1.15之间挑选一个值,并再次经过三角形分布处理。修改后的附魔等级会乘以这个值(因此它可以增加或减少最多15%),然后四舍五入至整数,得到最终的等级调节值。
伪代码
// 返回一个区间为[0,n-1)的随机整数 function randomInt(n); // 返回一个区间为[0,1)的一个随机实数 function randomFloat(); // 利用三角随机分布,生成一个区间为[1,1+(附魔能力/2))的随机数 enchantability_2 = enchantability / 2; int rand_enchantability = 1 + randomInt(enchantability_2 / 2 + 1) + randomInt(enchantability_2 / 2 + 1); // 选择附魔能级 int k = chosen_enchantment_level + rand_enchantability; // 0.85至1.15之间的附魔奖励 float rand_bonus_percent = (randomFloat() + randomFloat() - 1) * 0.15; // 最终计算得到等级 int final_level = (int)(k * (1 + rand_bonus_percent) + 0.5);
来源:[1]
第二步 - 寻找可能的魔咒
一把附有几个魔咒的剑。(在正式版 1.3 后,锋利 V 无法附到钻石剑上。)
现在,以等级调节值为基础,游戏会先列出所有可应用于目标物品的附魔类型及其威力(候选表),以便之后的挑选。
魔咒等级表中列出了每一种魔咒类型的可用等级及其威力。对于每一级威力的每种魔咒,都有与其规定的等级调节值范围。当等级调节值符合某级威力某个魔咒的等级调节值范围时,这个魔咒进入候选表;如果等级调节值同时包含于同一个魔咒不同级别威力的等级调节值范围内时,较高等级的魔咒进入候选表。例如,剑的“锋利 I”和“锋利 II”魔咒的等级调节值范围分别为 1 - 21 和 12 - 32 ,则当等级调节值为10时,“锋利 I”进入候选列表;当等级调节值为15时,“锋利 II”则会进入候选列表。Enchantview Mod 可以查看将要附魔的物品能附上什么魔咒。
第三步 - 从候选表中选择魔咒
现在它有了该物品的附魔候选表,游戏会从它们之中选择一些会最后应用到的附魔。
最终附上的魔咒至少会有一个,第一个魔咒会从“权重”名单中被挑选出来——权重越高的魔咒,选中的机会越高。
| P(魔咒)=(魔咒权重)/(∑i=1可能的魔咒的数量〖魔咒权重i〗) |
|---|
| 盔甲魔咒 | 权重 |
|---|---|
| 保护 | 10 |
| 火焰保护 | 5 |
| 摔落保护 | 5 |
| 爆炸保护 | 2 |
| 弹射物保护 | 5 |
| 水下呼吸 | 2 |
| 水下速掘 | 2 |
| 剑魔咒 | 权重 |
| 锋利 | 10 |
| 亡灵杀手 | 5 |
| 节肢杀手 | 5 |
| 击退 | 5 |
| 火焰附加 | 2 |
| 抢夺 | 2 |
| 工具魔咒 | 权重 |
| 效率 | 10 |
| 精准采集 | 1 |
| 耐久 | 5 |
| 时运 | 2 |
| 弓魔咒 | 权重 |
| 力量 | 10 |
| 击退 | 2 |
| 火矢 | 2 |
| 无限 | 1 |
第一个魔咒被选中后,根据以下算法来判断是否得到更多魔咒:
- 将等级调节值除以2,并四舍五入。(这不影响魔咒候选表,因为候选表在第二步已经确定。)
- 以 P=(修改后的等级调节值+1)/50 的几率决定是否选择额外的魔咒。
- 选择额外的魔咒后,删除表中任何与先前选择附魔相冲的魔咒。
- 从剩下的魔咒候选表中挑选一个魔咒(像之前一样,以权重为基准)并将其加入到该物品。
- 重复第一步。
相冲的魔咒
一些魔咒会与其他魔咒相冲,因此不能附到同一物品上,有效地减低玩家拥有过强武器/盔甲的可能性。
魔咒相冲的规则是:
- 每个魔咒与本身相冲。(所以你不能得到有两个相同魔咒的的工具。)
- 所有保护类魔咒相互冲突,所以一个物品只能有一个。(在程序代码中,摔落保护是一种保护类魔咒,但它不与其他保护类魔咒发生冲突。)
- 所有伤害类魔咒(锋利、亡灵杀手和节肢杀手)相互冲突。
- “精准采集”和“时运”也会互相冲突。(在通过使用物品修改器得到的同时拥有“时运”与“精准采集”魔咒的镐中,“时运”会失效,因为“精准采集”的存在导致根本就不能采到方块的掉落资源,只能够得到方块本身。)
钻石工具所有可能附魔列表。
附魔模拟器
附魔系统的测试与模拟系统:http://github.com/Zazcallabah/mce/downloads
附魔可能性图表
正式版 1.3 中各种附魔的可能性图表:http://0xcafebabe.com/2012/05/minecraft-1-3-probabilities/
快照 12w22a 前的附魔可能性图表:http://0xcafebabe.com/2012/01/minecraft-1-0-probabilities/
参考
- ↑ Minecraft 1.3.2 源代码