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,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).
| 視野範圍 | 選取單位 | 示例 |
|---|---|---|
| 4 | 2 | 深淵格洛斯幼崽, 格洛斯幼崽 近視 |
| 5 | 7 | 火龍爪戰士, 刺蝟, 稻草人 |
| 8 | 97 | 深淵酸性昆蟲, 深淵酸性斯洛格爾, 深淵蜜蜂 標準 |
| 12 | 2 | 深淵阿爾法酸性斯洛格爾, 阿爾法酸性斯洛格爾 |
| 16 | 1 | 眼球 最遠視野 |
數值是下列表中為每個單位填寫的
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. 資料中有定義,但目前沒有任何可獲得的物品、特質或技能授予它。
感知誤區 名稱與效果
很自然會以為 感知 屬性會拉遠單位能看多遠 - 名稱和描述("磨礪感官")都在暗示這一點。資料並不支援。
什麼會提高或降低檢測 摘要
以上內容收進一張表。"效果"是從怪物的角度看 - 它有多容易發現你。
| 因素 | 效果 | 資料所示 |
|---|---|---|
| 怪物的視野範圍 | 不定 | 每個單位都有自己的視野半徑 (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 格,而怪物看見的距離與白天相同。若有夜視可用,請攜帶夜視。
- 不要指望潛行。 此版本中沒有任何遊戲程式碼檢查「潛行」效果,因此它不會打斷接觸。