DungeonSettlers.wiki

怪物檢測與仇恨

Steam

How does a monster notice your settlers, and what can you do about it? This page is read straight from the game's tables (DS_B.0.4.29) and the code dump; each number names the constant it comes from, and anything the data cannot confirm is flagged as such. Try the interactive 檢測範圍計算器 來填入一隻具體怪物。

檢測模型 實際發生的事

檢測是 基於視野且基於網格的。每個單位 - 你的開拓者和每個怪物一樣 - 都帶有一個 視野範圍 一項數值,定義它目前能看到的地板格集合,牆會阻擋視線。當怪物的可見格包含你的某個單位時,它開始注意到你(察覺中狀態),然後決定攻擊。程式碼中沒有獨立的聽覺或噪音感知。

怪物會經歷三種戰鬥狀態 (來自轉儲的 CombatState 列舉,每次單位移動時由 MoveApplier.RefreshUnitCombatState):

  1. 未察覺 - 閒置或巡邏;它還沒看到你。
  2. 察覺中 - 你的某個單位進入了它的視野。
  3. 戰鬥中 - 它鎖定並交戰。

單位若發現敵人,就會進入 察覺中 並攜帶 驚訝;此效果消失後,它會進入 戰鬥中。若敵人在其仍處於被突襲狀態時離開視線,它會退回 未察覺 而不交戰。受到一次命中會使單位立即進入戰鬥。

數據表另定義了警覺累積(每遊戲內分鐘 1,5 點進入戰鬥),但此版本的遊戲程式碼從未讀取這些數值。

自定義 AI 建立在 Behavior Designer 樹上,其距離/視野檢查(CheckEnemyDistance, CheckCombatTargetInRange)讀取的是相同的格子視野數據,不是 3D 錐形視野射線投射。

視野範圍 發現半徑

視野範圍 is the core number. The game's own description: "單位照亮周圍區域並發現敵人的視野範圍。" It does double duty - it reveals fog of war for your side and it is the radius a monster uses to spot you. It is measured in 格 計量,並按視線追蹤,因此你和怪物之間的牆會擋住它(VisionDataHandler.GetVisiblePositions).

數值是下列表中為每個單位填寫的 UnitTable。大多數單位能看到 8 格;眼球能看到很長的 16, while a 深淵格洛斯幼崽 is nearsighted at 4。玩家方單位預設為 7 (StatusValueTable)。成長表自身的基礎 5 (GAMESYSTEM_Unit_Growth_..._VisionRange)從未被遊戲程式碼讀取。

仇恨與威脅 交戰,以及誰會被打到

數據表中有兩個仇恨常數,遊戲程式碼都不讀取:

GameSystemTable 中的警覺、仇恨範圍、仇恨修正、格擋減免與暴擊傷害常數,在此版本的遊戲程式碼中未被讀取。

  • 仇恨範圍:數據表寫為 8 格。
  • 仇恨修正:數據表寫為近戰 x1.3,遠程 x1。

遊戲程式碼以完整鍵字串(SystemVar)讀取 GameSystemTable 數值。在傾印檔中,列出的鍵都沒有字串常值或 SystemVar 屬性,因此修改它們不會改變遊戲內容。

沒有脫離計時器,也不會走回生成點。當沒有任何你的單位在其房間附近,且其戰鬥範圍內沒有敵人時,戰鬥中的怪物會返回 未察覺,並放棄其目標。

晝與夜 你的視野在夜間縮小

地下城按晝夜時鐘執行。白天是 06:00 到 20:00 (GAMESYSTEM_Campaign_DayTimes);該時段之外就是夜晚。

夜間遊戲會給予你自己的單位與盟友 夜間,這會使視野範圍減少 3 格。怪物永遠不會獲得此效果:一般的 8 格怪物在夜間仍能看到 8 格,而你的聚落居民看得更少。夜視詞綴會為攜帶者增加 +3 視野範圍。

表格中也有一個晝夜視野常數(GAMESYSTEM_Campaign_DayNightVisionDiffrence = 3),但此版本的遊戲程式碼從不讀取它;懲罰來自夜間效果。

潛行 已描述,但未連接

潛行 reads like the one hard counter to detection. The in-game text: "保持未被發現且無法成為目標。如果你對敵人造成傷害,該效果會立即結束。"

潛行藥水會給飲用者一個限時潛行效果,但沒有任何遊戲程式碼讀取該效果,因此在此版本中它不會隱藏你,不會停止被鎖定,也不會在你造成傷害時移除。 The effect adjusts no stat and no game code checks it, so the hiding and the break-on-damage in its description are not wired up in this build. 資料中有定義,但目前沒有任何可獲得的物品、特質或技能授予它。

感知誤區 名稱與效果

很自然會以為 感知 屬性會拉遠單位能看多遠 - 名稱和描述("磨礪感官")都在暗示這一點。資料並不支援。

本版本中感知的 StatusValueTable 視野範圍係數是 0,而該屬性自己的提示只列出物理攻擊、魔法攻擊、暴擊機率與烹飪。一個成長常數(...MajorStatToFinalStatFactor_VisionRange = 0.02)會以每點 0.02 將感知與視野綁定,但遊戲程式碼從不讀取它:視野範圍是固定基礎加上效果與裝備。因此 感知強化 / 感知削弱 環境條件(±30% 感知)與 +3 感知靈藥是 戰鬥 增益,而非偵測修正值。

什麼會提高或降低檢測 摘要

以上內容收進一張表。"效果"是從怪物的角度看 - 它有多容易發現你。

因素效果資料所示
怪物的視野範圍不定每個單位都有自己的視野半徑 (UnitTable.VisionRange):從 4 (深淵格洛斯幼崽) up to 16 (眼球),大多數為 8。半徑越大 = 它從更遠處發現你。
視線(牆)降低視線會逐格以直線追蹤,牆面圖塊會阻擋它(VisionDataHandler.GetVisiblePositions);普通的不可通行圖塊則不會。即使在近身距離,繞過轉角打斷視線也能讓你隱藏。
夜晚只限你這一方 -3從 20:00 到 06:00,你自己的單位與盟友會攜帶 夜間: -3 視野範圍。怪物永遠不會獲得此效果,因此夜晚完全不會縮短怪物的感知距離。
夜視 (affecter)恢復 +3增加 +3 視野範圍 (夜視), exactly cancelling the night penalty. 來源:夜勤人。
潛行 (affecter)無效果潛行: "保持未被發現且無法成為目標。如果你對敵人造成傷害,該效果會立即結束。" 潛行藥水會給飲用者一個限時潛行效果,但沒有任何遊戲程式碼讀取該效果,因此在此版本中它不會隱藏你,不會停止被鎖定,也不會在你造成傷害時移除。 資料中有定義,但目前沒有任何可獲得的物品、特質或技能授予它。
仇恨範圍未使用數據表定義了 8 格的仇恨範圍,但此版本的遊戲程式碼從未讀取它。
攻擊型別(近戰 vs 遠端)未使用數據表定義了近戰 x1.3 與遠程 x1 的仇恨係數,但此版本的遊戲程式碼從未讀取它,因此近戰不會透過它產生額外仇恨。
感知 (Fortify / Weaken / Elixir)無效果儘管名稱如此,感知屬性實際上控制的是物理與魔法攻擊、暴擊機率與烹飪:遊戲將視野範圍計算為固定基礎加上效果與裝備,沒有感知項。因此 感知強化 / 感知削弱 (±30%)與 +3 感知靈藥會 不 在此版本中改變偵測。

應對方式 實戰要點

  • 拐角勝過距離。 視線是唯一始終生效的硬限制。牆在任何距離都能擋住你;開闊地不行,哪怕很遠。
  • 去偵察極端單位。 A 眼球 (16-tile sight) will open on you from across a room, while you can slip within a few tiles of a 深淵格洛斯幼崽 (4-tile sight). Most things sit at 8.
  • 夜晚有利於怪物。 夜間你的單位看見的距離少 3 格,而怪物看見的距離與白天相同。若有夜視可用,請攜帶夜視。
  • 不要指望潛行。 此版本中沒有任何遊戲程式碼檢查「潛行」效果,因此它不會打斷接觸。
相關: 戰鬥公式 · 難度 · 天賦與屬性 · 遊戲常量 (原始表數值)。