做你自己的遊戲
moood 是一個由程式碼繪製的活場景,加上一個讓你的程式碼在場景之上執行的頁面——它會變成什麼,由你決定。這裡說明哪些東西是公開的、工作室能幫上什麼忙,以及怎麼進來。
moood 的核心有兩樣東西。一是由程式碼繪製的活場景:一個有光、有天氣、有人、有音樂的地方。二是一個頁面,你的遊戲程式碼就在這個場景之上執行。其餘的——這會是一款什麼樣的遊戲——由作者決定。
我們的遊戲最後成了帶選擇的故事:一章接一章,有配音的台詞,有小遊戲。但這只是其中一種做法。場景可以只是一個你想待上一會兒的地方。遊戲可以是謎題、玩具、漫無目的的散步、一場對話——只要寫得進程式碼,什麼都行。這裡要說的,是為此準備了什麼,以及怎麼用。
moood 上的世界是一組場景。每個場景都是一個地方:黎明的碼頭、廚房、積雪的草原。由程式碼繪製——光、水、霧、風、倒影——而人就生活在其中:走路、坐下、轉身。鏡頭會自己拍下場景正看著的那個人。每個場景都有自己的音樂。
場景自己也在活著。它的狀態——黎明還是深夜、下雨還是放晴、誰站在哪裡——靠鍵來改變,同一個場景一分鐘之內就能從黃昏走到天黑。場景也可以不帶任何遊戲,只當作一幅活的畫來展示:moood.me 上也有這樣的小草圖。
遊戲是你自己寫的程式碼,寫多少也由你決定。頁面會把場景,以及場景裡一切能改變的東西交給它:顯示另一個場景、改變天氣、帶著一個人走去某處、讓他用自己的聲音說一句台詞、播放聲音、存檔、暫停。其餘的,照你的構想來。
你可以像我們一樣寫章節和選擇。這方面有現成的幫手:遊玩地圖、重玩,還有小遊戲的語言——不用文字說明,玩家也看得懂的手勢、標記和回應。你也可以一樣都不用:只留一個場景,讓人在裡面做點什麼。你可以把遊戲放在自己的網站上,讓它的程式碼去跟任何你想要的東西對話——甚至是一個扮演角色的語言模型。
一開始,每款遊戲的小遊戲都各是各的,玩家每次都得重新猜這裡該按什麼。後來,從抱怨和期望裡長出了一套共通的語言:物件上的標記、手的手勢、場景的回應、上方的提示板——還有一個告訴你成功與否的聲音。詳情請見文章[〈小遊戲的語言〉](/stories/minigame-language)。不一定要用它,但能省下不少力氣。
從一個資料夾開始。世界、遊戲和文章,都只是 git 儲存庫裡的資料夾:你的儲存庫,在你的 GitHub 上,有你的共同作者、分支和歷史。一個儲存庫裡想放多少都可以。
和 AI 代理一起寫最方便——Claude Code、ChatGPT、Gemini,哪個都行。為此有一個公開的儲存庫 [moood](https://github.com/moood-me/moood):引擎、場景頁面和遊戲頁面、小遊戲的語言、檢查,還有一個在自己機器上玩的小播放器。我們放東西只遵守一條規則:做遊戲、玩遊戲需要的,都在裡面。還有文件,寫成讓代理能照著工作的樣子:場景裡什麼重要、什麼事絕對不能做,光和人怎麼擺,遊戲怎麼組成,需要劇本時怎麼寫。
為了讓代理有東西可以參考,我們也公開了自己的作品——[works](https://github.com/moood-me?q=works) 儲存庫。裡面有 moood.me 的世界和遊戲,附上場景的程式碼和製作過程的記錄;有一個小遊戲的遊樂場,每個手勢都能單獨試玩;也有早期的小世界——試探場景可以是什麼模樣。有用的就拿去吧。
任何東西——世界、場景、遊戲、文章——都用一行來命名:`你的儲存庫@分支:資料夾`。分支的位置也可以換成一個 commit。在工作室裡開啟、從別的遊戲引用、交給代理,都是這樣。遊戲也可以建立在別人的世界之上——同樣用這樣的位址。
一開始比這複雜:每個世界,針對它發布到的每個網站,都有各自的輔助分支。代理們習慣了。Pavel 看了之後說:「這在腦子裡有點複雜吧)… 沒有分支不行嗎?)」——並請我們不要想怎麼修補,而是想怎麼把它變簡單。結果發現,除了 git 什麼都不需要:你的分支,就是你的草稿。
在自己的機器上,用 moood 的播放器:它在你的資料夾上執行,只要一存檔,頁面就會自己重新載入,遊戲從原來的地方繼續。或是在工作室:任何分支,push 之後馬上就能看到,電腦和手機上都行。玩的時候改了什麼?工作室會問你要不要用新版本接著玩,不必從頭來過。
有些事在自己的電腦上做不了:需要顯示卡,也需要會說話、會作曲、會讓人動起來的模型。工作室就是為此而設。你可以全部用,可以只取其中一樣,也可以完全不用。
**看見。** 工作室用顯示卡繪製場景:一張圖、一張按秒排列的影格表、一段影片。這不只是為了你。代理會用圖片看自己的成果,並自己修正,讓你去忙別的事。它只需要連上工作室一次:你在一個用平實的話寫明它能做什麼的頁面上允許它,往後它就以你的名義工作。
**讓人動起來。** 人的動作用文字描述:「慢慢向前走」、「坐下,望著水面」。由一個用真實動作紀錄訓練出來的模型做出動作,在它進入場景之前,工作室會把它套在不同的人身上給你看。
**賦予聲音。** 任何一行字都能配音:每個角色有自己的聲音和說話方式,單獨一句台詞也可以有自己的語氣——「帶著羨慕和讚嘆,而不是嘲笑」。遊戲所有的台詞都集中在一處,可以逐句聆聽。
**賦予音樂。** 你用文字描述場景的音樂,再依權重把這些描述混合:「黃昏裡安靜的鋼琴」大聲一點,「雨落在樹葉上」小聲一點。不用先存檔,馬上就能聽。做過一次的東西會留著:同一句台詞、同一段音樂,不會做第二次。
**不寫程式碼也能開始。** 工作室裡有一位畫家——一個你可以直接對它寫話的 AI:「讓它變成傍晚,把碼頭上的燈籠點亮」。它自己修改場景,每次改動馬上就看得到。有它在,是為了讓人直接在瀏覽器裡就能開始一個世界,不需要編輯器,也不需要自己的代理。就算只是出於好奇:做兩個場景,看看會變成什麼樣。
**不卡頓。** 活的場景,在效能不高的筆電和手機上也該流暢地跑。工作室會在不同的機器上量測,並指出哪裡跑不動。這件事為什麼對我們這麼重要——請見文章〈[為什麼會卡](/stories/why-it-was-slow)〉。
**說每一種語言。** moood 上的遊戲會說十二種語言,你的也可以。檢查會找出還沒翻譯的地方、通往空處的連結、組不起來的場景,並顯示缺少哪些聲音、音樂和圖片。缺的東西,按一個鍵就能做出來。檢查很快:只有在你要求時,才會用顯示卡重畫場景——畢竟檢查是想常常做的事。
做好的遊戲可以申請在 moood.me 發布。展示之前會先過目,然後它就會和其他遊戲一起上架——附帶場景的圖片、聲音和音樂。
也可以不經過我們。任何網站或應用程式,只要能回應 moood 頁面那幾個簡單的請求,就能展示它們。你也可以拿引擎,在上面做出完全屬於自己的東西。
我們盡量讓工作室成為一個不容易迷路的地方。它像一個入口網站:左邊是各項服務——儲存庫、世界、遊戲、文章,還有工坊:渲染、量測、語音、音樂、動作、畫家、檢查、發布。上方有一個同時搜尋所有東西的搜尋框:輸入「燈籠」,遊戲、文章和場景就都出來了。需要的東西可以加星號。有深色主題,也有手機版,工作室本身也說同樣的十二種語言。
小地方也抓了出來。按下一個選單項目,沒有任何回應——到底按到了沒有?現在項目會立刻亮起來,如果頁面載入超過一瞬間,就會出現「載入中…」。如果更快,就什麼都不會閃。
另有一個代理,扮演好幾個虛構的人,把整個工作室走了一遍:一位有經驗的作者、一位新手、一個剛進來的人。每個頁面它都用兩種語言、淺色和深色主題、電腦和手機各開一次,並記下哪裡絆了一跤。
有好笑的發現,也有讓人懊惱的。作者按下「量測」,卻跑到「找不到」:自己的量測竟然打不開。英文的遊戲在俄文的工作室裡,顯示時沒有標題,也沒有「開始遊玩」的按鈕。新手撞上了死路:進來了——然後什麼都沒有。這一切,都在工作室開放之前修好了。
工作室的使用權由 Pavel 給。請在 [Telegram](https://t.me/pavel_zhur) 或寄信到 [[email protected]](mailto:[email protected]) 跟他說——他會直接讓你進來。如果你想幫助 moood 本身——引擎、頁面、文件——他會很高興:[moood](https://github.com/moood-me/moood) 的 issue 和 pull request 對所有人開放。