無敵幀
無敵幀(Immunity frames,也叫 invincibility frames,常簡稱 iframes 或 i-frames)是泰拉瑞亞的核心機制:在一小段時間內,玩家或 NPC 不會受到某一種或所有來源的傷害。
原版和災厄都有很多物品跟無敵幀有特殊的互動:有的飾品讓玩家被打中時多得到一些無敵幀(例如神性護身符),有的武器能用遠超過正常的速度連續命中 NPC(例如死陽之風)。
「幀」是遊戲更新的時間單位:泰拉瑞亞每秒更新 60 幀,所以 1 幀是 1/60 秒。
玩家的無敵幀
延長玩家無敵幀的方式有好幾種。另外,在復仇模式中,玩家的無敵幀上限是 150 幀,也就是 2.5 秒。
繼承十字項鍊的效果
飾品十字項鍊會讓玩家的無敵幀加倍。這個加倍效果不能跟自己疊加,所以已經裝備十字項鍊時,再取得同樣的效果也沒有額外好處。
增加無敵幀
有幾種事件和效果不是用乘的,而是直接設定或增加玩家的 immuneTime。「增加」無敵幀的效果,可以跟十字項鍊或其他繼承它效果的飾品疊加。此外,「增加」無敵幀的效果會影響 cooldownSlot 為 0 或 1 的攻擊所給的無敵幀;直接「設定」無敵幀的效果則對這類攻擊沒有作用。
使用這段程式的所有物品和對應的 immuneTime 數值,請看官方 Wiki 的 Added Immunity Frame Items 頁面(還沒翻譯)。
cooldownSlot
這一節主要說明的是原版泰拉瑞亞的行為。
玩家受到任何傷害時,會得到三種無敵幀的其中一種,取決於傷害來源把 cooldownSlot 這個變數設成多少。所有傷害來源預設是 -1,用的是標準的 immuneTime,會受所有影響無敵幀的物品影響。但如果 cooldownSlot 是 0 或 1,玩家得到的是另一種無敵幀,只能擋住 cooldownSlot 相同的來源。舉例來說,玩家被變數為 1 的投射物打中之後,馬上還是會被預設值 -1 的另一發投射物打傷,但不會馬上再被另一發變數為 1 的投射物打傷。能影響 cooldownSlot 0 或 1 的無敵幀的,只有十字項鍊、繼承它效果的飾品,以及任何「增加」受擊無敵幀的效果;其他物品都沒有作用。
災厄裡 cooldownSlot 設成 0 或 1 的所有敵人和投射物,請看官方 Wiki 的 CooldownSlot Non-defaults 頁面(還沒翻譯)。
無視 NPC 的無敵幀
泰拉瑞亞提供三種機制,讓投射物可以無視、繞過或縮短 NPC 的無敵幀。
usesLocalNPCImmunity
這一節主要說明的是原版泰拉瑞亞的行為。
投射物把 usesLocalNPCImmunity 設成 true 之後,它跟無敵幀的互動方式會徹底改變。它打中 NPC 時不會去設定 NPC 的 npc.immune,而是在投射物自己身上啟動一個計時器,讓這一發投射物在若干幀之內不能再打中那個 NPC。計時結束後,這發投射物才能再次打中它。
計時器的長度由變數 localNPCHitCooldown 決定。泰拉瑞亞每秒 60 幀,所以 localNPCHitCooldown 設成 60 的話,這發投射物每秒只能打中一次。但計時器只對啟動它的那一發投射物有效;計時期間,其他投射物(包括穿透型的)還是打得中那個 NPC,這就是為什麼看起來像是「無視無敵幀」。
localNPCHitCooldown 還有兩個特殊值:-2 和 -1。這兩種情況都不會啟動計時器,而是被打中的 NPC 會對這一發投射物永久免疫。也就是說,不管投射物存在多久,localNPCHitCooldown 為負值的投射物只能打中同一個 NPC 一次。設成 -1 時,投射物命中時會把 npc.immune 歸零,確保一定打得中——這也是名副其實的「無視無敵幀」,因為投射物真的完全不理會被打中的 NPC 的無敵幀。
localNPCHitCooldown 各數值的行為整理如下:
- -2:投射物不影響 NPC 的無敵幀。NPC 有無敵幀時打不中;沒有的話會打中,而且 NPC 不會得到任何無敵幀。這發投射物之後再也不會打中這個 NPC。
- -1:投射物接觸時會直接移除 NPC 的無敵幀,所以一定打得中。這發投射物之後再也不會打中這個 NPC。例子是夜明彈。
- 0:行為基本上跟 -2 相同,只是下一幀就能再次打中同一個 NPC。NPC 被打中不會得到無敵幀,但如果 NPC 本來就有無敵幀,投射物也不會移除它。
- 1:跟 0 幾乎相同。差別是 NPC 的
npc.immune會被設成 1,所以這一幀其他基本的穿透型投射物、或localNPCHitCooldown為 -2 的投射物都打不中它。 - 2 以上:這發投射物每隔這麼多幀才能打中同一個 NPC 一次。每個 NPC 的冷卻各自計算。
使用這段程式的所有物品和對應的 localNPCHitCooldown 數值,請看官方 Wiki 的 LocalNPCImmunity Items 頁面(還沒翻譯)。
- 另外,混沌河豚產生的爆炸也把
usesLocalNPCImmunity設成 true,localNPCHitCooldown是 1。
usesIDStaticNPCImmunity
這一節主要說明的是原版泰拉瑞亞的行為。
投射物把 usesIDStaticNPCImmunity 設成 true,並替 idStaticNPCHitCooldown 設一個值之後,它跟無敵幀的互動方式也會徹底改變。跟 usesLocalNPCImmunity 很像,打中 NPC 時會啟動計時器;但這種計時器擋的是同一位玩家所有同類型的投射物。也就是說,任何一發這類投射物打中敵人之後,在一段時間內,那個 NPC 對打中牠的那位玩家的所有同類型投射物都免疫。所有使用 usesIDStaticNPCImmunity 的投射物,都會像 localNPCHitCooldown 設成 -1 的投射物一樣,直接移除被打中 NPC 的無敵幀。
使用這段程式的所有物品和對應的 idStaticNPCHitCooldown 數值,請看官方 Wiki 的 IDStaticNPCImmunity Items 頁面(還沒翻譯)。
npc.immune
打中 NPC 時把 npc.immune 設成某個值的投射物,只是改變 NPC 得到的無敵幀數。跟一般的穿透型投射物一樣,NPC 在那麼多幀之內不會再被任何穿透型投射物打中。一般的穿透型投射物把 npc.immune 設成 10,所以會改這個行為的投射物,通常是設成比較低的值,例如 4。這種行為常被叫做「部分無視無敵幀」,因為它移除或無視了 NPC 的一部分無敵幀,但不是全部。
使用這段程式的所有物品和對應的 npc.immune 數值,請看官方 Wiki 的 Npc.immune Items 頁面(還沒翻譯)。
參見
- 泰拉瑞亞 Wiki 的無敵幀頁面