專家攻略:調用和遞歸

出自Noita Wiki
跳至導覽 跳至搜尋

正常施法

在介紹如何複製法術之前,我們先複習一下正常是怎麼施法的。正常施法通過抽取施法——要麼是法杖自己抽取一個法術,要麼是某一個法術抽取另一個法術。這兩者都有著一個完整的抽取邏輯。

當抽取開始時,會從牌庫頂端抽取出第一個法術,並「持有」它。它並不會立即置入手牌中,他會檢查法杖是否有足夠的法力來釋放它,或者是否還有剩餘施法數。如果因為這兩個原因法術無法施放,那麼就會直接把他置入棄牌堆,而不是手牌中。然後抽取下一個法術,重複上述過程。

當上述這個過程成功時,法術將會從法杖中扣除所需的藍量。法術被「調用」,「調用」一個咒語意味著執行該咒語的「函數(function) 」——就是它的效果。 (註:function是一個編程概念,一般翻譯成函數,也可譯成方法。函數由函數頭和函數體組成,這裡函數頭就是法術的名字,函數體裡面就是裝著法術的效果。)

法術的動作函數是一個重要的概念,一種理解它的方式是,它是法術本身所做的事情,而不是遊戲中其他法術或機制與該法術交互時做的事情。

例如,法術的法力消耗和剩餘使用次數都不是法術動作函數的一部分,因為法術本身不會消耗法力和剩餘次數——正如上面所說,是由抽取機制來查看法術的這些屬性並執行對應的操作,接著才會調用該法術,並執行其函數。

以下是法術效果函數的兩個例子:

傷害加成的函數是:「給施法狀態+10投射物傷害和+0.08s的施法延遲。」

黑洞的函數是:「給施法狀態增加一個黑洞投射物和+1.33s的施法演示」

這些函數都不包含法力消耗或者剩餘使用次數,這是因為這些值都是法術的「屬性」,它基本上指一個法術除了函數外的所有雜七雜八的信息,包括稀有程度、在哪幾層生成、法術的類型、法術是否被標記為「遞歸」(很快我們就會講到它),當然,也包括了法力消耗和剩餘使用次數。

這些屬性的共同之處在於,如果想要屬性發揮作用,就必須有遊戲中的另一種機制在起作用。正如我們之前在法力消耗上看到的,它們自己不會做任何事情。一個法術的屬性必須有另一個法術或法術的函數與它們相關聯才能使它們產生作用。

了解了這些,讓我們開始討論本章的核心內容:複製。

複製

最基本的複製法術是簡單的調用目標法術。它調用法術的函數,而不考慮屬性。例如:伽馬的函數是這樣的:

「施法狀態中的施放延遲+0.25s。查找牌庫中的最後一個法術,如果牌庫是空的,則查找手牌中的最後一個法術。調用那個法術。(為了簡單起見,省略了一行————我們很快就會介紹他。)」

請注意,在伽馬的函數中並沒有提及目標法術的法力消耗或者剩餘使用量————法術的函數是直接調用的,沒有抽取過程。這就是為什麼可以使用伽馬以30的藍耗施放一個黑洞。不過施放延遲是法術的函數的一部分,因此如果使用伽馬調用黑洞,您仍然需要考慮黑洞的施放延遲。

然而,有些法術的函數會把正常抽取過程中應當產生的調整補上。比如一分為N系列法術,在它的函數中,會檢查並扣除其目標法術的剩餘使用次數。法術複製沒有一套標準————它們中的大部分都有略有不同,本指南將著重介紹這裡。不過好消息是,它們都會調用目標法術以生成其函數,這是最基本的。

遞歸

在介紹每個法術的具體複製細節之前,我們需要了解什麼是遞歸限制。因為所有的法術複製都受其影響。

首先要知道的是,有些法術有著「遞歸」的標籤,一個法術是否遞歸是它的屬性之一,這個屬性決定了每個法術實例的遞歸級別如何計算。工作原理如下:

  • 正常抽取和施放法術時,遞歸等級為0。
  • 如果一個法術調用了一個非遞歸法術,被調用者的遞歸等級同調用者。
  • 如果一個法術調用了一個遞歸法術,被調用者的遞歸等級等於調用者+1。
  • 如果法術的遞歸等級大於遞歸等級限制,則無法施放。
  • 遞歸等級限制為2。


這是檢查遞歸的流程:獲取將要被調用的法術的遞歸等級,並判斷它是否超過限制。我們接下來討論的所有法術都是用這種邏輯來限制遞歸。

是時候舉例說明了!

例:陶

Wand 0821.png
亂序
法術數/施放
1

陶 Τ 的函數是記住牌庫中最上面的兩個法術,並檢查它們的遞歸級別,如果沒有超過就調用它們。

我們來解析一下:

  • 法杖會抽取陶,由於它是通過正常方式抽取的,所以遞歸等級為0。
  • Τ(rec = 0)記住牌庫中的前兩個法術: Τ 和火花彈
  • Τ(rec = 0)調用陶。第二個 Τ 的遞歸等級為0+1=1,因為 Τ 是一個遞歸法術。
    • Τ (rec = 1) 記住牌庫中前兩個法術:仍然是 Τ 和火花彈
    • Τ (rec = 1) 調用 Tau (rec = 2)
      • Τ (rec = 2) 記住牌庫中前兩個法術:Τ 和火花彈
      • Τ (rec = 2) 嘗試調用陶 (rec = 3), 但是失敗了,因為超出了遞歸限制,什麼也沒有發生。
      • Τ (rec = 2) 調用火花彈 (rec = 2), 成功
    • Τ (rec = 1) 調用火花彈 (rec = 1)
  • Τ (rec = 0) 調用火花彈 (rec = 0)

最後,產生三個火花彈。並添加了來自三個獨立 Τ 的施放延遲。當第一個 Τ 抽取結束後,牌庫中仍有第二個 τ 和火花彈。

例:歐米伽

Wand 0821.png
亂序
法術數/施放
1

歐米伽的函數是按順序施放所有的法術,首先是棄牌堆中,然後是手牌中所有的非遞歸法術,然後是牌庫中所有的法術。通常情況下,這種不使用遞歸函數的限制是為了不讓歐米伽施放歐米伽,但是當我們像上面那樣配杖時,就會變得不同了。此外,歐米伽有一個特殊情況,那就是它在任何情況下都不會調用魔杖刷新

你已經了解了歐米伽的基本原理了,快試試分析一下上面這個例子吧!

  • 伽馬 (rec = 0) 調用牌庫中的最後一個法術 (rec = 1)
    • 歐米伽 (rec = 1) 按順序調用棄牌堆中的所有法術,棄牌堆中沒有法術,所以什麼也不會發生。
    • 歐米伽 (rec = 1) 調用手牌中的所以法術,手牌中的法術是遞歸法術伽馬,所以什麼也沒有發生。
    • 歐米伽 (rec = 1) 調用牌庫中的所有法術,順序為:
      • 歐米伽 (rec = 1) 跳過魔杖刷新
      • 歐米伽 (rec = 1) 調用火花彈 (rec = 1)
      • 歐米伽 (rec = 1) 調用第一個歐米伽 (rec = 2)
        • 歐米伽 (rec = 2) 跳過伽馬和魔杖刷新
        • 歐米伽 (rec = 2) 調用火花彈 (rec = 2)
        • 歐米伽 (rec = 2) 跳過兩個歐米伽,因為它們的rec=3
      • 歐米伽 (rec = 1) 調用第二個歐米伽 (rec = 2)
        • 同上,這次的歐米伽也調用一個火花彈

所以,我們發現這樣會射擊三個火花彈的副本,非常高效(doge)

哪些法術是遞歸的?

如下表所示:

值得注意的是,一分為N系列法術不是遞歸的,因此,一分為N系列法術的遞歸等級與其調用者相同。

總結

希望您現在已經了解的遞歸的工作原理了!:) 如果你閱讀過關於抽取的攻略,那麼您就已經了解了法杖的原理了。剩下的知識學習每個法術的具體細節,在某些情況下,(如這裡的歐米伽)可能非常的不直觀。為此,請查看高級法術細節。最後,祝您在法杖探索之路上玩的開心!

Zoldort著 古峰譯 群友提供技術支援。