PrismatiXEngine
故事與素材

撰寫第一個故事

寫對話和旁白,加入兩個選項,再把分支接回共同結尾。

English

先完成 prismatix create my-game。這章沿用範本的 guide 角色、smile 表情和背景圖片,只修改 Story/main.pxstory

完整範例:第一道光

備份原本的故事檔,再用下面的內容替換整份 Story/main.pxstory

; First Light — 保留範本素材與角色註冊
*start
[bg asset=10000000-0000-4000-8000-000000000001]
[show guide expression=smile position=center scale=0.8]

[id main.welcome]
@guide
歡迎!這是我們一起寫下的第一段故事。
[id main.question]
今晚,你想先做什麼?

[id main.choice.stars]
[choice text="到窗邊看看星星" goto=stars]
[id main.choice.story]
[choice text="留下來聽個故事" goto=story]
[choice.wait]

*stars
[id main.stars.narration]
窗外的天色漸漸暗了下來。
[id main.stars.dialogue]
@guide
看,第一顆星出現了。
[jump target=finish]

*story
[id main.story.narration]
桌上的書翻到了嶄新的一頁。
[id main.story.dialogue]
@guide
從前,有個人決定把腦中的故事做成遊戲。
[jump target=finish]

*finish
[id main.finish]
@guide
而這,就是那個故事的開始。

[hide guide]
[end]

執行 prismatix validate my-game,再用 prismatix dev my-game 試玩。已經開著 dev 時,存檔後等它更新即可。兩個選項會進入不同段落,最後都回到 finish

對話與旁白

@guide 指定接下來說話的角色。後續每一行都是一句台詞,空白行會結束這個說話者設定

@guide
這是小光說的第一句話。
這句仍然是小光說的。

這一行是旁白。

guide 是角色別名,畫面顯示的「小光」則來自角色檔的 displayName。要顯示立繪,另外使用 [show ...];指定說話者不會自動放上圖片。

選項與分支

*stars 宣告標籤。[choice ...]text 是選項文字,goto 指向同一份故事裡的標籤。[jump target=finish] 則直接跳到 finish

同一組選項要連續排列,後面接 [choice.wait]。目前 choice.wait 不會另外產生執行操作,runtime 會在處理連續選項時等待玩家選擇,所以選項中間不要插入旁白或其他執行指令。

標籤只標記位置,不會停止劇情。少了分支末尾的 jump,程式就會繼續往下,連另一條分支也一起播放。

保留故事 ID

[id main.welcome] 固定下一個故事操作的 ID。它可以放在 @guide 前,仍會對應下一句台詞;但標籤本身也算操作,所以放在 *start 前就會綁到標籤。

修改同一句台詞時保留 ID,新增台詞則換一個新 ID。複製段落時尤其要檢查,避免重複。沒有明確 ID 的內容會依文字和位置產生 ID,移動或改寫後可能改變,影響舊存檔定位。

ID 之外,場景識別碼、操作類型和資料版本也會影響讀檔,詳見存檔與更新

共用段落:call 與 return

需要播完一段共用內容再回來時,用 call

*start
[call target=greeting]
[id after.greeting]
我們繼續出發。
[end]

*greeting
[id greeting.shared]
@guide
早安!

[return]

流程是 startgreetingreturn →「我們繼續出發」。主流程的 [end] 避免故事接著往下播到共用段落。calljump 目前都指向同一份文件的標籤,不接受任意跨檔跳轉。

試玩檢查

從新遊戲分別測試兩條分支,確認不會連續播完兩個結局。也可以暫時把 goto 改成不存在的標籤,看看錯誤訊息指出哪一行,再改回來。所有 [id ...] 都應唯一,且後面接著一個操作。

接著加入變數與條件,或查閱 Story 指令表

實作參考:Story 編譯器故事範例

On this page