撰寫第一個故事
寫對話和旁白,加入兩個選項,再把分支接回共同結尾。
先完成 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]流程是 start → greeting → return →「我們繼續出發」。主流程的 [end] 避免故事接著往下播到共用段落。call 與 jump 目前都指向同一份文件的標籤,不接受任意跨檔跳轉。
試玩檢查
從新遊戲分別測試兩條分支,確認不會連續播完兩個結局。也可以暫時把 goto 改成不存在的標籤,看看錯誤訊息指出哪一行,再改回來。所有 [id ...] 都應唯一,且後面接著一個操作。