附魔機制
附魔基礎
當把一件可附魔的物品放上附魔台時,可用的附魔等級將會依據以下公式隨機生成。附魔等級由附近書架的數量(最多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個書架即可達到最大附魔等級,所以書架的排列有很多種方法。
方法1
一種最簡單的方法是用一層書架圍着附魔台繞上一圈:
方法2
另外一種方法則是做一個“圖書角”。
第一層
第二層
方法3
另外一個“圖書角”,書架放兩層。這種方法使用了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 + 1;
// 最終計算得到等級
int final_level = (int)(k * (1 + rand_bonus_percent) + 0.5);
第二步-尋找可能的魔咒
現在,以等級調節值為基礎,遊戲會先列出所有可應用於目標物品的附魔類型及其威力(候選表),以便之後的挑選。
魔咒等級表中列出了每一種魔咒類型的可用等級及其威力。對於每一級威力的每種魔咒,都有與其規定的等級調節值範圍。當等級調節值符合某級威力某個魔咒的等級調節值範圍時,這個魔咒進入候選表;如果等級調節值同時包含於同一個魔咒不同級別威力的等級調節值範圍內時,較高等級的魔咒進入候選表。例如,劍的“鋒利I”和“鋒利II”魔咒的等級調節值範圍分別為1 - 21 和12 - 32 ,則當等級調節值為10時,“鋒利I”進入候選列表;當等級調節值為15時,“鋒利II”則會進入候選列表。Enchantview Mod 可以查看將要附魔的物品能附上什麼魔咒。
一把附有幾個魔咒的劍。(在正式版1.3 後,鋒利V 無法附到鑽石劍上。)
第三步-從候選表中選擇魔咒
現在它有了該物品的附魔候選表,遊戲會從它們之中選擇一些會最後應用到的附魔。
最終附上的魔咒至少會有一個,第一個魔咒會從“權重”名單中被挑選出來——權重越高的魔咒,選中的機會越高。
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 |
第一個魔咒被選中後,根據以下算法來判斷是否得到更多魔咒:
1、將等級調節值除以2,並四捨五入。(這不影響魔咒候選表,因為候選表在第二步已經確定。)
2、以P=(修改後的等級調節值+1)/50 的概率決定是否選擇額外的魔咒。
3、選擇額外的魔咒後,刪除表中任何與先前選擇附魔相沖的魔咒。
4、從剩下的魔咒候選表中挑選一個魔咒(像之前一樣,以權重為基準)並將其加入到該物品。
5、重複第一步。