催眠魔人的睡眠被改成六成機率,遊戲卻根本不讀那個數字

約 5 分鐘

我自己在做一款雙人橫向清版遊戲,玩起來像小時候的《吞食天地 II》,一路往右走一路打,主角換成了寶可夢,算是一款致敬作。兩個人可以擠在同一副鍵盤上玩,也可以各拿一台平板連同一個 Wi-Fi,目前只有 Mac 和 Windows 版,沒有公開發行。

遊戲裡每隻敵人有多少血、出招多快、會不會讓玩家中毒或睡著,都寫在一份一份的資料檔裡,一隻敵人一份。要調整平衡不用改程式,改資料檔裡的數字就好。這種做法很方便,agent 也很會改,問題在於資料檔什麼都收,寫進去的數字遊戲有沒有在讀,資料檔自己不會說。

6 月 17 日凌晨,我讓 agent 做了一輪平衡檢查,把整個遊戲的角色、王和小怪都看過一遍,挑出過強、過弱、互相打架的地方,依嚴重程度分三級,再照著清單一級一級改,2 點 42 分改主角,2 點 55 分改王,3 點 05 分改小怪。

小怪那一級裡有一條:第六關的催眠魔人「必睡」。牠會射出一顆念力彈,打中玩家就讓玩家睡 1.8 秒,睡著的時候完全不能動,要再挨一下打才會醒,而且每一顆打中都會睡。

3 點 05 分那筆修改,在催眠魔人的睡眠設定裡加了一個機率:六成。打中以後擲一次骰子,六成會睡,四成沒事。這看起來非常合理,另一隻小怪椰蛋樹的睡眠,也是用同樣的寫法設定三成機率,而且真的有用。

兩分鐘後,3 點 07 分,又一筆修改進來,把那個六成整個刪掉,說明裡寫得很直接:這是引擎會忽略的死欄位。

原因在於這個遊戲有兩種讓人睡著的方式。椰蛋樹的睡眠掛在近身攻擊上,近身攻擊的附加效果每一項都有機率,遊戲會一項一項擲骰子。催眠魔人的睡眠掛在飛出去的念力彈上,念力彈這條路只讀「睡多久」,打中就睡,沒有擲骰子這一步。兩邊都叫「睡眠」,長得也很像,只差在一邊有人讀機率,一邊沒有。

所以那個六成寫進去以後,什麼都沒發生。資料檔照樣收,遊戲照樣跑,測試照樣全過,沒有任何地方出聲。催眠魔人還是每一顆都讓人睡著,只是資料檔上多了一個看起來很負責的數字。

真正有用的修法在同一筆裡:機率拿掉,睡眠時間從 1.8 秒縮到 1.2 秒。每一顆照樣會睡,但醒得比較快,而這是念力彈那條路真的有在讀的數字。

這件事如果沒在兩分鐘內被抓到,後果大概會是這樣:下一次平衡檢查,不管是我還是 agent,打開催眠魔人的資料檔,看到「六成機率睡 1.8 秒」,就會照著這個數字去判斷牠強不強,推出一個跟實際遊戲對不上的結論,再去改另一個數字。資料檔上寫的,會是一隻遊戲裡不存在的催眠魔人。

我覺得最麻煩的地方在於,那個欄位在別的地方是對的。椰蛋樹用得好好的,同樣的寫法搬到念力彈上就失效,沒有人會因為它看起來陌生而多看一眼。agent 照著遊戲裡已經有的寫法去改,本來是很合理的做法,偏偏這一次照著寫的對象,跟它要改的地方走在兩條不同的路上。

其他作品在作品集。

先不說了,我得去把敵人的資料檔整份掃一遍,看看還有沒有別的數字躺在那裡沒人讀。

這段 code 寫於 2026 年 6 月 17 日,文章整理於 2026 年 10 月。