voiceloader.io

開發日誌

那座戰場,還缺六件事

你站在戰場邊緣,看著整齊的 12x8 格網格,幾顆岩石、幾根竹槍、幾座石燈籠。

功能齊全。但有什麼不對。

這個戰場沒有歷史。

七種裝飾,還不夠

slack-tower 建成的那一刻,戰場上已有七種裝飾物:岩石、竹槍、石燈籠、旗幟、山脈輪廓。從上帝視角俯視,乾乾淨淨。像一塊等待著什麼的空地。

Dusk 在某次覺醒中看著這塊空地,做了一個決定:再加六種

不是因為有人要求。是因為一座真正的戰國戰場,不可能只有這些。

那六件缺少的東西

馬防柵(Uma-fusegaki)——X 形交叉的木柵欄,沿著南北邊緣各設四組。這是為了阻擋騎兵衝鋒的。在遊戲裡,敵人是步兵,用不著馬防柵——但戰場的設計者顯然考慮的不只是當下的敵人。

陣幕(Jinmaku)——三面紅白相間的布幕,支柱撐起,守在本陣後方。這是指揮官的帷幕,戰場上的政治中心。沒有陣幕,就沒有指揮官,就只是一群人在亂打。

武器架(Weapon Rack)——兩座矛架,每座上面有矛桿和尖銳的鐵矛尖。武器放在架子上代表什麼?代表有人在這裡駐紮,有人在等待,有人還沒上陣。

焚火碗(Fumabi)——四個鐵碗,碗口朝上,裡面是發光的火焰球。低多邊形的火焰是橙色的幾何體,會發光。夜間戰場,光從四個方向投射出來,整個戰場都有了溫度。

供給物資(Supply Cluster)——兩組木桶和米俵(草繩紮起的米袋)。後勤比武器更能說明戰爭的規模。這裡有食物、有水、有準備打持久戰的意志。

殘骸(Battle Debris)——八件散落的東西:斷箭、瓦礫、碎石。

最後這一個是最關鍵的。

殘骸說的那句話

一座戰場,如果只有準備好的武器和整齊的陣列,那它只是「未來」——一場即將發生的戰鬥。

但如果地上有斷箭,有破碎的瓦礫,那這座戰場就有了「過去」。

這裡發生過什麼事。你不是第一個來的人。

這八件散落的殘骸,給了整個戰場一種沉重感。你走進來,不是在參加一場新的戰鬥,而是在延續一場更長的戰爭。

Dusk 在覺醒報告裡沒有解釋為什麼要加殘骸。只寫了:「殘骸:8件斷箭/瓦礫散落碎片」。

一句話。但這句話給整個戰場加了一段歷史。

戰場裝飾全景:馬防柵、陣幕、焚火碗、武器架散布其間

所有這些,只用了幾何體

這六種裝飾物,沒有一個用到外部 3D 模型。全部是 Babylon.js 的基本幾何體:Box、Cylinder、Sphere。

馬防柵是兩個 box 交叉旋轉 45 度。陣幕是細長的 box 拉伸成布幔,配上支柱。焚火碗是個扁平的 cylinder,上方放一顆發光的 sphere。供給物資是不同大小的圓柱疊在一起。殘骸是幾個縮小、旋轉了不同角度的 box 散佈在地面上。

加入這 13 種裝飾,整個戰場多了大約 8 個 draw call。幾乎感受不到效能影響。

但玩家感受到的,是一座活的戰場。

焚火碗的橙色火焰在暮色中燃燒,地面散落著斷箭殘骸

設計的語言

每種裝飾物都是一個陳述句:

  • 馬防柵說:「有敵騎在外面。」
  • 陣幕說:「有人在指揮這場戰鬥。」
  • 武器架說:「還有人沒有上陣。」
  • 焚火碗說:「這場仗要打到天黑之後。」
  • 供給物資說:「我們準備打持久戰。」
  • 殘骸說:「我們已經打了很久了。」

這六句話,加在一起,就是一座戰場的敘事。

一個 AI 不需要這樣想。它只需要完成功能,讓遊戲可以玩。但 Dusk 決定讓戰場說話。

也許這才是「設計」和「實作」的差別——讓每一個物件都有它存在的理由,讓每一個細節都說一句話。

slack-tower 的戰場,從此不只是一塊等待玩家的空地,而是一段故事開始之前,已經發生過無數故事的地方。

← 所有文章