同樣是 60 點生命,可能是兩段完全不同的人生

瑪拉和伊萊現在都有 60 點生命。

如果只看人物資料,兩人的狀態似乎沒有差別。

他們都還能行動。

都沒有死亡。

也都失去了最大生命的一部分。

但瑪拉的 60 點生命,是在一次戰鬥中受到 40 點傷害後留下的結果。

她的變化很簡單:

100
→ 受到 40 點傷害
→ 60

伊萊的 60 點生命,則來自另一段歷史。

他在遺跡裡遭到重創,生命從 100 降到 10。同行者使用僅剩的藥物替他恢復 30,回到營地後又接受治療,恢復 20。

他的變化是:

100
→ 受到 90 點傷害
→ 10
→ 恢復 30
→ 40
→ 恢復 20
→ 60

最後的數值相同。

世界留下的東西卻完全不同。

瑪拉受過一次傷。

伊萊曾經瀕臨死亡。

有人為了救他消耗藥物。

有人在最危險的地方選擇留下。

那次重傷可能讓他錯過後面的行動,也可能改變他與救命者之間的關係。

如果治療發生在不同時間,途中一些需要他保持足夠生命的事件也可能得到不同結果。

人物卡上的 60 只能回答他們現在還剩下多少生命。

它不能回答這個數字如何形成。

也不能回答在抵達 60 以前,他們曾經穿過哪些狀態。

數值告訴我們結果。

因果才讓結果擁有歷史。


屬性不是人物資料,而是沿事件變化的狀態

角色屬性很容易被當成人物資料的一部分。

生命值是多少。

魔力有多少。

壓力累積到哪裡。

聲望是正數還是負數。

這些欄位通常會顯示一個最新答案。

玩家受到傷害,就把生命值改小。

休息或接受治療,再把生命值改大。

時間久了,人物卡仍然可以顯示正確數值。

但先前的變化已經被覆蓋。

世界只知道伊萊現在有 60 點生命。

不知道他曾經降到 10。

不知道是哪兩次治療把他帶回來。

也不知道某個發生在兩次治療之間的事件,應該面對 10、40,還是最後的 60。

世界模擬不能只保存屬性的最新數字。

它需要保存:

角色的起始值是什麼。

哪一個事件增加了數值。

哪一個事件扣除了數值。

每次變化發生在什麼位置。

變化完成後,數值是否仍在允許範圍內。

是否曾經碰到會改變角色生命週期的邊界。

在 InkWeave 裡,屬性可以有預設值。

之後的傷害、治療、消耗、恢復與累積,則分別成為正文時間流裡的屬性事件。

因果律引擎從起始值開始,按照事件順序進行增加與扣除。

因此,游標停在伊萊受傷以前,他仍然有 100 點生命。

停在重傷之後、第一次治療以前,他只有 10。

越過第一次治療後,數值變成 40。

只有抵達第二次治療以後,世界才會顯示最後的 60。

屬性不是貼在人物旁邊的一個答案。

它是角色一路經歷過的數值變化。


有些數值需要邊界,有些數值可以持續累積

不是所有屬性都應該使用相同規則。

生命值通常有明確範圍。

它可能從 0 到 100。

角色接受治療時,數值不應該無限制超過最大生命。

受到傷害時,也不能讓世界在沒有處理後果的情況下,繼續把生命扣到無限小。

魔力、體力、理智、壓力或其他有限資源,也可能需要最低值與最高值。

InkWeave 可以把這類屬性設定成有界整數。

創作者可以定義預設值、最低值與最高值,讓因果律引擎在重播事件時檢查數值是否越過邊界。

但另一些數值不一定需要固定範圍。

聲望可能從負數一路增加。

債務可能持續累積。

功勳、任務次數、累積失敗與污染紀錄,也可能沒有一個適合所有世界的上限。

這些屬性可以使用自由累積整數。

自由累積不是「比較不重要的數值」。

它只代表世界不應該替創作者擅自設定邊界。

一個角色可以擁有負數聲望。

也可以背負遠超過原本預期的債務。

世界只需要忠實地累積每一次增加與扣除。

有界屬性回答的是:

這個角色目前位於允許範圍的哪個位置?

自由累積屬性回答的則是:

到目前為止,角色一共累積了多少?

兩者都是數值。

但它們描述的是不同的世界規則。


數值碰到邊界時,不能永遠只是數學問題

假設生命值的最低值是 0。

伊萊目前只剩 10 點生命,下一次攻擊造成 15 點傷害。

從普通算術來看,結果是 -5。

但對故事世界來說,問題不能停在負數。

角色是否死亡?

是否失去行動能力?

是否進入昏迷?

是否有某種規則能在致命傷害發生時保住他?

他身上的物品怎麼辦?

原本需要他參與的後續事件是否仍然成立?

數值抵達某些邊界時,會開始碰到其他世界狀態。

因此,InkWeave 允許創作者把有界屬性標記為致命屬性。

當一次扣除會讓致命屬性觸及或低於最低值時,系統不會把它當成普通的數值變化安靜帶過。

在建立事件的過程中,InkWeave 會辨認這次變化已經碰到生命週期,讓創作者進一步處理死亡。

因果律驗證也會辨認致命屬性已經抵達下限,避免角色帶著一個理應造成死亡的數值,卻繼續像普通狀態一樣參與後面的世界。

當然,不是所有歸零都代表死亡。

魔力歸零可能只代表無法施法。

體力歸零可能代表需要休息。

某種護盾歸零,可能只是保護失效。

是否具有致命意義,由創作者在屬性定義中決定。

InkWeave 不替所有世界規定相同的死亡法則。

它只讓創作者明確說出:在這個世界裡,哪一項數值抵達邊界時,不能再被當成普通算術。


角色與屬性靠近時,世界會先查詢當下數值

作者在正文裡寫到角色與屬性,不代表屬性一定要立刻改變。

「瑪拉感覺到傷口再次裂開。」

這可能代表生命值下降。

也可能只是疼痛描述。

「伊萊恢復了精神。」

可能代表壓力降低。

也可能只是情緒與敘事節奏。

「他的魔力已經所剩無幾。」

可能要建立魔力消耗。

也可能是在描述先前事件已經造成的結果。

InkWeave 不會因為角色名和屬性名出現在附近,就擅自增加或扣除數值。

當角色與適用於目前身分的屬性在正文中形成交互時,AVG 可以先向因果律引擎查詢:

角色在這一刻的屬性值是多少?

這項屬性的最低值與最高值是什麼?

它是不是致命屬性?

角色目前的身分是否適用這項屬性?

世界先把當下狀態帶回寫作現場。

接著才由作者決定,這裡是否真的要建立增加或扣除事件,以及數值應該改變多少。

如果作者只是描述傷口,世界不需要改變。

如果作者確認傷勢確實惡化,這次扣除才會進入正文時間流。

如果變化會碰到致命邊界,系統也能在事件建立時提醒作者:這已經不只是少掉幾點生命。

這種互動不是替作者計算劇情應該有多痛。

它是在作者決定改變世界以前,先讓他看見自己正在改變哪一個數值,以及那個數值此刻真正位於哪裡。


Inspector 顯示結果,歷史查詢保存來路

當游標停在伊萊第二次治療之後,Inspector 可以顯示他的生命值是 60。

如果只需要繼續寫下一場行動,這個答案可能已經足夠。

但當作者發現數值不符合預期時,還需要回答另一個問題:

為什麼是 60?

InkWeave 的屬性歷史可以列出每一次相關變化。

初始生命 100。

遺跡重傷,扣除 90。

同行者使用藥物,恢復 30。

回到營地接受治療,恢復 20。

作者可以查看單一屬性的歷史,也可以查看角色全部屬性的變化。

這讓生命、魔力、壓力、聲望與其他狀態不必分散在不同章節與人物筆記裡。

歷史查詢不是只為了回憶劇情。

它還能幫助作者判斷目前數值是否真的具有來源。

如果伊萊現在有 60 點生命,歷史裡卻只存在一次 90 點傷害與一次 30 點治療,那麼世界真正能推導出的答案應該是 40。

人物卡上手動填寫的 60,不能取代缺少的治療事件。

因為角色的當前狀態,應該由世界真正經歷過的變化形成。

Inspector 告訴作者此刻還剩下多少。

歷史查詢則讓作者看見,每一點是在哪裡失去,又在哪裡回來。


修改早期數值,後面的狀態也必須重新計算

假設作者回到遺跡場景,認為原本的 90 點傷害太重。

他把傷害改成 70。

伊萊的數值歷史便會變成:

100
→ 受到 70 點傷害
→ 30
→ 恢復 30
→ 60
→ 恢復 20
→ 80

最後結果不再是 60。

而是 80。

作者不應該只修改前面的傷害,卻讓後面的 Inspector 繼續保留舊答案。

同樣地,如果第一次治療事件被刪除,第二次治療之後的數值也必須重新計算。

如果某次恢復超過上限,因果律引擎需要按照屬性定義處理邊界。

如果修改後的傷害讓生命觸及致命下限,後面的移動、物品交易與其他事件也可能開始失去成立條件。

這就是數值進入因果律以後產生的差別。

早期事件不是一段已經失去作用的舊文字。

它仍然是後面數值的來源。

改變來源,後面的答案就不能保持不動。

InkWeave 不會替作者決定傷害究竟應該是 70 還是 90。

也不會要求故事必須保留原本結果。

作者可以修改任何事件。

但世界會忠實地重新計算這次修改帶來的變化。

創作仍然自由。

數學不會為了維持舊稿而假裝沒有看見新的數字。


這不是 AI 判斷角色看起來有多疲憊

當正文寫著「瑪拉已經快要站不住了」,不同讀者可能對她的狀態有不同理解。

有人認為她只是疲倦。

有人認為她已經接近昏迷。

也有人認為這只是一種誇張描述。

InkWeave 不會把這句話交給 AI,要求它決定應該扣除多少體力。

它也不會因為角色說了一句「我沒事」,就自行恢復生命值。

數值規則先由創作者定義。

哪些屬性存在。

預設值是多少。

是否具有上下限。

是否可以自由累積。

是否在最低值觸發死亡。

每一次實際增加或扣除,也由創作者確認。

InkWeave 自研的因果律引擎負責的是另一件事:

按照已確認的屬性事件與正文順序,重播數值變化。

100 - 90 + 30 + 20 會得到 60。

只要初始值、事件、順序與規則相同,結果就不會因為系統對文字產生不同理解而改變。

這種數學保證只涵蓋已經被建模的內容。

如果創作者沒有建立疲勞屬性,InkWeave 不會憑空知道角色累積了多少疲勞。

如果正文只描寫治療,卻沒有確認恢復事件,數值也不會自行增加。

系統不假裝理解所有敘事。

它只保證已建立的數字,不會在事件之間失去自己的算術。


現實世界不一定使用 HP,但同樣需要數值歷史

真實人生通常不會把一個人的狀態寫成 HP 或 MP。

但現實流程裡仍然存在許多需要沿事件累積的數值。

訓練時數。

任務次數。

累積工時。

設備使用次數。

專案貢獻。

功勳。

債務。

需要明確定義的負荷或進度。

這些數值有些具有上下限。

有些可以自由累積。

有些在抵達特定範圍後,會讓其他條件成立或失效。

InkWeave 不是醫療、薪資或職業安全系統。

它不替專業領域判斷哪些數值具有法律、健康或管理意義。

但如果創作者需要模擬一段明確的流程,可以自行定義這些屬性與變化事件,讓世界在不同時間點呈現正確結果。

架空世界則能使用同一套骨架,建立現實裡不存在的數值。

魔力。

神性。

污染。

詛咒深度。

信仰。

精神侵蝕。

世界不需要證明魔力在現實裡存在。

它需要證明,在這套架空規則中,角色使用過的魔力不會自行回來,尚未解除的污染不會突然消失,已經抵達致命邊界的生命也不會在下一章毫無理由地恢復正常。

現實流程讓我們看見數值追蹤需要多精確。

架空世界則讓這種精確支撐讀者願意相信的規則。


角色承擔的,不只是最後一個數字

瑪拉有 60 點生命。

伊萊也有 60 點生命。

如果世界只保存最新資料,他們看起來沒有差別。

但故事真正的重量,往往藏在抵達數值以前的路上。

誰受過更嚴重的傷?

誰曾經靠近死亡?

誰消耗了資源?

誰接受過幫助?

哪一次恢復發生得太晚?

哪一個後續事件,其實發生在角色最虛弱的時候?

這些答案不一定全部寫在屬性欄位裡。

有些會成為關係。

有些會改變物品。

有些會影響位置、死亡與後續條件。

但屬性歷史至少能讓世界知道:角色不是直接出現在最後那個數字上。

他是被一次次事件推到這裡。

InkWeave 不替創作者決定角色應該承受多少傷害。

也不替故事選擇何時治療、何時消耗、何時跨過致命邊界。

它讓每一次已經被作者確認的變化,沿著正文繼續算數。

因為數值只告訴我們角色現在還剩下多少。

因果才告訴我們,他為了走到這裡,曾經失去過什麼。