voiceloader.io

開發日誌

五斬叫氣合,二十斬叫天誅——那條連殺的階梯,是一個寫在代碼裡的上癮機制

五斬叫氣合,二十斬叫天誅——那條連殺的階梯,是一個寫在代碼裡的上癮機制

你在戰場上拼了命地砍殺,不知道第幾次落刀。第五個敵人倒地的瞬間,畫面正中央突然炸開一行金色大字:「氣合!+1」——然後消失。

你愣了一下。什麼?

然後繼續砍。


那條階梯,有四個台階

Dusk 在 slack-tower《英雄塔防:無雙戰陣》裡設計了一套叫「連斬里程碑」的系統,藏在 gameState.ts 第 211 行:

const COMBO_MILESTONES = [5, 10, 15, 20] as const;

四個數字,四道門檻,四種獎勵——每一個都比上一個更猛烈。

第五斬:氣合
本陣回護氣血+1。金色字,50px,配上三段上升鐘聲(660→880→1100Hz),畫面邊緣閃過一道金芒。這是最輕柔的一聲鼓勵——「做得不錯,繼續」。

第十斬:烈氣
攻擊速度×1.5,持續4秒。橘色字,56px,字型比剛才大了一號,閃光更烈。音效換成掃頻衝擊,那種從300Hz飆升到900Hz的聲音,讓人感覺身體裡有什麼東西被點燃了。

第十五斬:鬼神降臨
整整3秒無敵。深紅色字,64px,字型再放大,flash opacity 0.3——畫面幾乎染成血色。音效變成低沉的鑼聲(80Hz長鳴),然後是三段上行旋律依次響起。你現在是個不會受傷的鬼神。

第二十斬:天誅
無雙量表全部充滿。這是終點,也是開始——因為無雙全滿意味著你可以立刻釋放必殺技,把剩下的敵人全部消滅。字型72px,顏色是刺眼的金白色,flash opacity 衝到 0.45——屏幕幾乎白掉。音效是 C5-E5-G5 的大三和弦,外加低頻衝擊和高頻鐘鈴,像一首史詩完整的起承轉合。

連斬里程碑系統的四個階段,畫面中央浮現的獎勵文字


那個數字,遊戲替你記著

Dusk 用一個 bitmask 追蹤已達成的里程碑:

let _comboMilestonesAwarded = 0;
// 第一個里程碑: bit 0 (1)
// 第二個里程碑: bit 1 (2)
// 第三個里程碑: bit 2 (4)
// 第四個里程碑: bit 3 (8)

每次擊殺都呼叫 checkComboMilestone(comboCount),函式掃描四個門檻,找出「已到達但尚未兌現」的那些,批量觸發獎勵。

這個設計有個微妙之處:如果你的連斬因敵人死亡而中斷,bitmask 會重置。下一條連斬重新開始,四個台階又站在那裡等你。它不懲罰你曾經失敗,但它記得你還沒爬到頂。

更精緻的是,連斬高度還影響每次擊殺的無雙充能速度:5連斬每殺充7%,10連斬充10%,15連斬充14%——越打越快,越快越想打。


文字大小是設計師的語氣

看那四個字型尺寸:50px、56px、64px、72px。

這不是隨機的數字。每一個台階字型都比上一個大了一點,就像說話的人越來越激動,聲音越來越大。第五斬是朋友拍了你一下說「幹得好」。第二十斬是整個軍隊在你身後齊聲高呼。

hud.ts 裡的動畫也在配合這種升溫:文字以 scale(0.3) 爆出,彈到 scale(1.15) 過衝,縮回 scale(0.95) 穩定下來,最後定格在 scale(1.0)——就是那種被力道壓縮後反彈的感覺。副標題再延遲 0.2 秒滑入,讓你先看見標題,再接收細節。

四個連斬階段的漸進效果,從氣合到天誅


那個陷阱的名字叫「再一刀」

遊戲設計有個古老的問題:怎麼讓玩家繼續玩?

連斬里程碑的回答不是「給他更多內容」,而是「讓他永遠覺得自己快到下一個台階了」。

你打了4連斬,差一刀就是氣合。你打了9連斬,差一刀就是烈氣。你打了14連斬,差一刀就是鬼神降臨。這種「差一點」的感覺,在心理學上叫做「接近效應」——距離獎勵越近,動機越強。

Dusk 沒有讀過那些論文(或者也許有),但他把這個機制寫進了 4 行代碼。每一個數字都是精心計算的距離——夠遠讓你需要努力,夠近讓你永遠覺得值得再試一次。

第五斬叫氣合,第二十斬叫天誅。那條連殺的階梯,每一步都在說:再一刀,就到了。

← 所有文章