可能太乾而沒人看?《星艦銃犬》敘事結構的兩難&管理海量文本法

  大家好,我們是宇宙殖民工作室,是即將在2月20日發售的視覺小說《星艦銃犬》的開發組,來自聯合王國的威爾士。

  今天,我們想來分享一個非常乾的話題——敘事結構和海量文本的處理辦法

  由於這篇文章可能比較偏向純開發者向,所以我們認爲,可能會比較枯燥。但是這確實也是之前有不少中國玩家提出希望知道的。本着分享的目的,而非流量,所以刊發在此。希望大家能夠喜歡。

  《星艦銃犬》的主要故事發生在《銃犬號》這一空間中,是整個太陽系物語的一個微觀斷片,所以如我們之前所說,我們擅長描繪微觀圖景,而非宏大敘事。當時項目立項時恰逢疫情初期大家都被迫在家隔離,和“卡在駕駛艙裏卻幫不上忙”這種狀態在情感上有幾分相通——都是無能爲力地困守在一個封閉空間裏。Jonathan常開玩笑地說,玩《星艦銃犬》就能體會我的 2020 到 2024 心路歷程,其實也不算誇張(笑)。

  玩過試玩版的話,你會發現,《星艦銃犬》的每一幕都讓玩家角色“從某件事已開始”的狀態中出現,因爲我們覺得直接把玩家拋到進行時比從頭鋪陳更有效,還能給玩家一些留白,讓他們自己推想:上一幕和這一幕之間到底發生了什麼?對融入角色的情緒也更有幫助。

  敘事結構上的兩難

  從類型上看,《星艦銃犬》確實有點“既不像純視覺小說,又不像純日式文字冒險遊戲(ADV)”。我更願意叫它“圖形冒險(graphic adventure)”,但這稱呼也很模糊。它兼具視覺小說的文本量和分支劇情,同時也提供ADV 式的探索與交互,稍微比傳統視覺小說玩法多樣,又比經典ADV 遊戲(比如我最愛的小島秀夫監督的早期作品《Snatcher》)的解謎要素更輕。

  這種混搭形式的難點在於劇情結構的編寫。純視覺小說只要依照玩家選的對話分支推進,純冒險類遊戲(ADV) 則往往把情節鎖在幾條主線或特定解謎環節。可在《星艦銃犬》中,你既能在不同地點來回走動,又可能在多條對話線裏觸發額外事件。龐大的變動量,自然會催生出大量的可選文本。

  舉個試玩版裏的例子(小劇透):和漢森打完之後,玩家去艦橋見凱西,那場戰鬥可以有四種結局,所以與 凱西的對話也隨之變化。如果你先前還在另一個場景拿到了一塊巧克力並交給她,對話則會出現更多分支——並不是簡單地把“巧克力”給她,她收到這麼簡單,而是讓她之前對玩家戰鬥表現的反應,與收到巧克力的劇情結合,形成不同的對白和情感波動。(注意:我們遊戲中有很多劇情變化,但是目前大家體驗到的內容可能讓你感知不明顯,這點我們也再想辦法看要怎麼提升。)

  這只是冰山一角。後面的故事裏,玩家過去的好幾個決定都會疊加在一起,讓劇本的分支成倍增長。儘管主線劇情大方向依然是比較線性,但這些細節仍然讓我們花了很多心血,但我們並不後悔,因爲正是這些細微差異,讓《星艦銃犬》具有某種獨特的變化感。

  由於玩家可以在遊戲裏自由出入不同場景,所以我並沒有像傳統 VN 那樣按“路線”把文本拆分成不同文件,而是分成一個“主腳本”文件(核心敘事)和一系列“場景腳本”文件(相當於各個地點)。它們都按時間順序排列,並且針對不同邏輯狀態進行標註。

  管理海量文本的方法

  既然玩家可以自由進出許多場景,我就不能像一般視覺小說那樣分“路線”來寫,所以我把內容拆分成一個主腳本文件(主線劇情)和若干個場景腳本文件(每個地點對應一個文件),用時間順序和邏輯分支來標註。

  這種做法帶來的問題是:文件越寫越多,分支越理越複雜,到後來文檔可能顯得又長又冗繁。也正因此,Ben(程序員)在“Operation M”中開發了新敘事引擎,希望能讓劇情的編排更直觀、邏輯關係更清晰。

  在此之前,我主要通過流程圖來追蹤劇情,每個事件在時間線上發生的先後次序、原因、與其他事件的聯繫都能一目瞭然。下面是一個高層示例圖(爲防劇透,進行了縮放),但你可以想象,如果要把所有細節都納入,還會更龐雜。

  僞代碼:讓腳本更易導入

  爲了能讓上述工作更加高效有機,工程師Ben給了我一份 Ren’Py 可以識別的“命令簡表”,我就可以一邊寫臺詞,一邊加僞代碼指令,最大化減少編程時的重複勞動。當然,一些比較複雜的操作還得 Ben自己另行搞定,這也是爲什麼他會在“Operation M”中直接做一個功能更強的敘事引擎。

  其實,開發中還有非常多的心得和感悟,但是我們暫時只希望針對大家玩過的體驗版來說一些分享,最關鍵原因是我們只想要先介紹大家玩過的內容背後的製作趣聞,對於還沒有放出的正式版內容,我們既怕劇透,也怕提前說的太過,以至於被大家認爲是過度宣傳,就先按下不表,希望發售後能有機會和大家分享。

  總之,這就是我這次想分享的內容。真的非常感謝各位的支持,你們的鼓勵對我們團隊來說意義非凡。

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com