Metlivi 部落格

NPC 是否該給每位玩家相同的回答?保持事實一致,而非字句相同

當玩家向同一個虛構的 NPC 提問時,回答應當維護共同的正史設定,但不需要使用完全相同的字句。一個實用的設計原則是比對每位玩家已發現的事物以及場景中正在發生的情況。NPC 隨後即可針對該狀態做出回應,同時保持既定事實、角色所知資訊與任務內容的前後連貫。

2026年9月30日7 分鐘閱讀閱讀、藝術與文化作者:Metlivi Editorial Team
第 1 節

將事實與表達方式分開

首先寫下回答的事實核心:世界中的客觀真實是什麼、NPC 知道什麼,以及 NPC 此時願意透露什麼。對於處於相同故事狀態的玩家,請讓這些要素保持穩定。接著,透過用字挑選、句子長度、語氣,或是簡短提及玩家已得知的情報,讓表達方式產生變化。

舉例來說,假設一位虛構的港口管理員知道東門在日落時關閉。一位尚未去過城門的玩家可能會聽到:「在日落前走東門;那之後就會上鎖了。」而剛看到守衛準備關門的玩家可能會聽到:「你看到他們在準備了。你在日落之前都還有時間。」這兩句話雖然不同,但時間點與警告是一致的。

這種劃分有助於避免兩個常見問題。逐字重複台詞,在玩家剛提供相關情境時會顯得心不在焉;隨意更改底層的答案,又可能使角色顯得不可靠,或讓任務變得更難追蹤。一項關於 NPC 對話生成的研究將此挑戰描述為:讓對話忠於世界觀設定、角色關係、任務架構以及向玩家揭露的細節。即使對話是手工撰寫的,這也是一個非常實用的設計標準。Weir et al., “Ontologically Faithful Generation of Non-Player Character Dialogues”

第 2 節

決定哪些玩家狀態的差異是重要的

利用可觀察的故事狀態來決定回答是否該改變。相關狀態可能包括玩家是否找到了文件、是否與其他角色交談過、是否開通了一條路徑,或是否在特定場景中抵達。這些都是可以在故事中呈現,並在選擇對話時進行檢查的具體事件。

不要從玩家的措辭去推測隱藏的身分或個人特質。對於這項設計任務,角色的回答可以對虛構世界中發生的事情做出反應:「你找到了帳本」,或者「市場已經關門了」。它不需要去猜測玩家是誰、是哪種人,或是他們為什麼提問。這樣能讓對話的調整始終與敘事連結,而非基於缺乏依據的個人側寫。

一個實用的檢驗方法是問:如果兩位玩家經歷了相同的相關事件且處於相同的場景,他們是否應該獲得相同的資訊?如果是,就將該資訊視為該狀態下的共享資訊。如果他們的發現不同,就合理調整 NPC 可以提及或透露的內容。如果場景改變了,則更新取決於時間或環境的細節,而無需重寫世界的歷史。

第 3 節

分別追蹤知識與場景狀態

一個簡潔的對話規劃可以為每個回答列出三件事:正史事實、NPC 的知識或透露狀態,以及當前的場景條件。將它們分開可以更容易看出哪些部分可以變動,哪些部分絕對不能變動。

對於港口管理員,筆記可能會寫成:

正史事實:東門在日落時關閉。

NPC 知識:管理員知道張貼的時刻表,並且看過守衛準備關門。

場景條件:日落前,城門是開的;日落後,城門上鎖。

尚未得知城門資訊的玩家會收到基本指引。已經看到守衛的玩家可以收到簡短的確認。日落後,管理員應描述城門已關閉,並且只提供既定故事所支援的替代方案。如果尚未確立任何替代方案,對話就不該只是為了顯得有幫助而憑空捏造一個。

這種分離也讓修改變得更安全。更改場景時間表應促使檢查每一個依賴它的回答。更改台詞的措辭不應意外改變任務線索。Ink 編程語言的文件說明了故事變數如何儲存遊戲狀態,以及條件選項如何控制出現的台詞。Twine 的文件同樣將變數描述為儲存的值,可以在支援的故事格式中跨段落存取。這些工具提供了實作明確狀態的方法;它們不會決定你的故事應該將哪些事實視為正史。Ink: “Writing with Ink”, Twine Cookbook: “Variables”

第 4 節

以細微且清晰可辨的方式調整回應

一個好的變化通常是確認一個相關的差異,然後回答問題。它可能會提及已發現的線索、略過玩家已經收到的提醒,或是反映當前的場景。避免一次更改多個要素,除非故事狀態足以支援每項改變。

例如,一位尚未找到帳本的玩家可能會問:「誰資助了新碼頭?」管理員可能會說:「我聽說是港口委員會出資的。」在玩家找到寫有該委員會名稱的帳本記錄後,管理員可以說:「帳本證實了我聽到的消息:是委員會出的錢。」如果記錄顯示的是不同的出資者,NPC 就不該繼續將舊謠言當成事實重複;對話應當區分管理員原先的認知與新確立的證據。

該範例使用虛構的細節來說明方法,而非針對特定遊戲的論斷。關鍵在於清楚標記知識的變化。角色可以犯錯、迴避或不知情,但文字寫作應確保這種狀態是刻意設計的。否則,玩家可能會將改變後的答案解讀為設定矛盾的連貫性錯誤。

第 5 節

比對線索獲取途徑,而非精確語句

在檢視跨玩家或跨分支的對話時,請比對每條路線所提供的資訊。在故事預期玩家採取行動的時間點之前,每位玩家是否都獲得了相同的核心線索?是否有一條分支在沒有故事事件解釋的情況下,暗示了不同的地點、期限、關係或原因?NPC 是否提到了玩家尚未發現的事物?比起檢查每句台詞是否都使用相同的措辭,這些問題能發現更多有意義的矛盾之處。

一個簡單的檢視表會很有幫助:

檢查項目:正史;比對內容:名稱、日期、地點、原因及其他既定事實

檢查項目:知識;比對內容:NPC 在此狀態下知道、相信或被告知了什麼

檢查項目:取得途徑;比對內容:玩家收到了哪些線索或指示,以及是在何時收到的

檢查項目:場景;比對內容:隨時間、地點或事件而改變的細節

檢查項目:措辭;比對內容:變化後的語句是否仍傳達了預期的答案

Twine 段落以及 Ink 的節點(knots)、選項(choices)、變數與條件流程,都是敘事專案用來組織分支與狀態的範例。不同工具和故事格式的架構各有不同,因此實作時請遵循相關說明文件。編審原則與軟體本身無關:明確定義狀態差異,然後檢查每句台詞是否依然與之一致。Twine: “Linking Passages”, Ink: “Writing with Ink”

第 6 節

了解何時回答應當保持完全相同

有些回答本就應該保持穩定:重複的密碼、張貼的營業時間,或是玩家需要記住的簡短指示。如果措辭本身包含線索,或者必須與其他地方的銘文一致,請精確保留它,或者讓變化版本明確等價。重新改寫謎語、密碼或引用的文件可能會改變解題任務,即使作者認為意思並未改變。

同樣地,如果玩家狀態不影響 NPC 的知識、場景或可透露的內容,可能就沒有理由撰寫不同的回答。當變化能傳達真實的敘事差異時,它是有益的;但當它暗示了並不存在的差異時,就會變成干擾雜訊。

第 7 節

保持 NPC 回答一致的簡潔工作流程

針對每個問題,用一句話寫下正史答案。列出可以改變 NPC 所知內容或玩家已發現內容的故事事件。記下影響回答的場景條件,例如大門開著或會議已結束。僅針對這些條件草擬替代措辭,並確保每個版本都保留相同的事實,除非故事狀態明確確立了變化。

接著透過提問來檢視各個分支:處於相同狀態的玩家是否獲得了相同的證據?是否有任何台詞預設了未被發現的事件?以及場景細節是否相符?目標是創造出能夠自然回應、同時又屬於同一個連貫世界的角色:共同的事實保持可靠,而對話則反映出故事中實際發生的一切。

相關閱讀

繼續探索這個主題