最近在開發 Ashfall 的時候,我刻意組了一個極度危險的 build——高傷害、低血量,外加一個帶來致命副作用的機制。
我原本只是想做一個「Fallout + roguelite like」的遊戲。照理說,按下攻擊的瞬間,不是整排敵人被一波帶走,就是我自己當場暴斃。那種在按下去之前,會因為不知道接下來會發生什麼而稍微屏住呼吸的不確定性,才是我想要的體驗。但第一回合開火,數字跳出來。
乾淨,平穩,毫無波瀾。
傷害被放大了,但沒有失控;血量確實下降,但還在安全範圍內。敵人掉了一半血,我也穩穩地站著。
我又打了一輪。
還是一樣。
沒有暴擊、沒有失誤。連風險都存在得剛剛好——你看得到它,但永遠不會真的踩到。
我開始有點不甘心,把效果再往上疊,刻意把 build 推向更極端的方向。
但它沒有邊界。
那些本來應該互相放大的效果,在進入計算之前就被收斂了。倍率被柔化,疊加被限制,所有可能失控的地方,都像被一隻看不見的手提前按了下來。
我切到旁邊看 runtime log。
一切正常。沒有異常值,沒有 warning,甚至連一個需要我注意的地方都沒有。從工程角度來看,這是一場幾乎完美的執行。
我再切回遊戲畫面。
敵人的血量穩定下降,我的角色穩定地活著。滑鼠還在動,但我已經沒有在思考了。沒有需要賭的選擇,也沒有需要承擔的風險。每一步都只是把一個已經確定的結果往前推。
那一刻,我腦中只剩下一個很直接的念頭:
這玩起來,好無聊。
不是因為它做得不好,而是因為它做得太對了。
後來我才慢慢看懂,那場「完美」的戰鬥,是怎麼被做出來的。
因為在這個系統的底層,其實有一整套我親手寫的保護機制,正在悄悄運作。
那個我一開始很得意的 Gameplay Drift Detection,本來是用來防止數值崩壞的。但實際上,它更像一個過度焦慮的保母——一旦偵測到數值準備失控,它就會在事情發生之前,把一切修正掉。
當那些效果開始疊加、準備往極端方向衝的時候,它沒有讓它發生。
倍率被柔化,傷害被壓平,所有異常都被處理成「合理的變化」。
原本應該是一個可能失控的瞬間,被改寫成一個剛剛好的結果。
不只如此。
為了讓整個系統可以被追蹤、被驗證,我把所有 Perk、裝備、事件的效果都收斂進同一套 modifier system。
這套系統非常優雅。
優雅到連「混亂」都被整理掉了。
那些本來應該互相放大的組合,被重新分配成安全的倍率;那些可能讓你一夜翻盤或直接崩潰的事件,被壓進一個可接受的區間。連風險都變成一種被精算過的變數,而不是一種真正需要承擔的後果。
於是 build 很快就被解出來了。
你不需要試錯,也不需要賭,只需要選擇最穩定的組合。
甚至連 Fallout 那種「壞掉但很好玩」的 build,也消失了。
那些原本可能讓整場遊戲失控的組合,在還沒發生之前,就被系統修正掉。
整個遊戲沒有壞掉。
只是被整理得太乾淨了。
乾淨到沒有任何意外。
我後來做了一個決定。
我沒有拔掉這套系統,但我打開了底層設定,調整了它的容忍閥值(threshold)。
我告訴它:
只要遊戲不崩潰、數值沒有真的失控到讓程式掛掉——
其他的,全部放行。
第二天下午,我重新測了同一個 build。
同樣的高傷害、同樣的低血量。
這一次,倍率沒有被柔化。
我扣下攻擊的瞬間,傷害數值直接衝破了原本 UI 設計的範圍,整排敵人瞬間蒸發。畫面上只剩下一堆誇張到有點荒謬的數字。
然後下一個瞬間,我的血條也直接見底。
副作用沒有被壓制。
我差一點當場死掉,只剩下一點血在閃。
那一刻,我甚至不知道自己是贏了,還是只是比較晚死而已。
我盯著畫面看了一秒,然後忍不住笑出來。
這才是我一開始想做的東西。
不是平衡,而是風險。
不是穩定,而是可能失控。
後來我才真正理解,問題不是我做錯了什麼。
而是我同時在追兩個本質上衝突的目標。
一邊是 Fallout 和 roguelite,那些讓人記住的體驗來自不確定性、極端和意外;
另一邊是 AI Governance,它追求穩定、可預測和可控制。
當我把後者做到極致時,前者自然就被壓扁了。
所以我沒有放棄這套 framework。
我只是重新定義它的角色。
它不再負責「讓系統完美」,而是負責「不要讓系統壞掉」。
剩下的那一部分——
風險、混亂、甚至一點點不合理——
我選擇留下來。
這次最大的學習其實很簡單,但也很反直覺:
身為工程師,我們習慣把所有異常都消除。
但在遊戲裡,有趣的東西,往往正是那些異常。
AI 可以幫你把系統變得無懈可擊。
但如果它把所有不確定性都優化掉,
玩家失去的,可能不只是 bug,
而是那種站在邊緣、卻意外活下來的瞬間。
而那個瞬間,
才是他們打開遊戲的理由。












