大儺MUD客戶端
之前文章一直是從開發者和設計者的視角介紹“大儺世界”遊戲,本文試圖從玩家的視角,介紹一個基於Nodejs的大儺MUD實驗客戶端,代碼詳見
項目開源地址。這個客戶端本身很簡單,主要是通過一個taiyi-js庫來和太乙網絡節點交互。
由於太乙網絡沒有定義客戶端的形態,僅僅規定了連接的協議,所以原理上可以做出任何形態的客戶端來遊玩大儺世界。出於實驗和演示的目的,這裡僅僅是使用TypeScript寫出一個MUD形態的Node客戶端。
這個客戶端默認連接太乙網絡的測試節點,因此是和太乙測試網絡交互,當然,也可以修改設置接入正式大儺世界的太乙網絡(現在還沒有😭)。
玩家體驗初試
我們從創建一個新的賬號開始來實際截屏,通過截屏來演示這個客戶端的使用。演示中包含了賬號的創建、角色的創建過程,也包括一些操作法寶的方式,涉及到一種遊戲中開發遊戲的新體驗。
啟動程序後,我們通過signup命令創建一個新的賬號,賬號名為dage

創建新賬號
- 需要說明的是,為了方便測試,signup命令直接通過賬號名和新密碼的方式從一個微服務創建新的測試賬號。這個“賬號創建微服務”實際上也是一個taiyi-js庫的開發示例,可以在taiyi-js的項目代碼中看到,它本身是一個利用taiyi-js庫開發的很簡單nodejs應用。
- 在正式環境中,你的密碼只能由你自己保留。可以在本地生成滿足太乙網絡協議的賬號私鑰,然後直接連接太乙網絡,用公鑰創建賬號。你是不需要把密碼或者私鑰傳輸到任何服務器上來完成這個賬號創建過程的。有很多開源的工具和方法可以本地來做這件事情,例如太乙網絡項目的xuanpin(玄牝)程序,就是一個基於C++語言編寫的連接工具,這個工具有很多直接的命令來和太乙網絡的白玉京api交互;另外,taiyi-js庫本身也實現了各種密碼學的方法以及和白玉京api交互的方法,可以開發基於JS/TS的各種工具和網站,上面說的“測試賬號創建微服務”就是一個例子。在未來,可能還有python的庫來提供python程序的支持。
- signup這個命令中,微服務拿到你申請的賬號名和密碼後,直接生成太乙網絡格式的私鑰和公鑰(由於根據賬號名和密碼按特定規則可以生成相同的私鑰,所以微服務不緩存你的任何密碼和私鑰,以後要使用時就直接生成即可,參考客戶端
測試賬號創建成功後,就可以使用login命令登錄了

“登錄”
- 技術上,這裡的“登錄”,不是傳統網絡遊戲那種連接上服務器並且握手驗證密碼成功的意思。這裡密碼只有你本地才有,這裡的登錄也僅僅是按規則在本地根據賬號密碼生成私鑰,緩存在本地供後面使用而已,這個過程無需和網絡做任何交互。
- 實驗客戶端代碼中,這一步對節點服務器上多做了一次“查詢”,幫你確保一下你的密碼生成的公鑰是匹配你這個賬號的。
創建一個名叫“大哥”的角色

新建角色“大哥”
- “登錄”完成後,就可以憑藉太乙網絡的協議來和大儺世界交互了。然而從遊戲的角度來說,我們這個客戶端面對的是“玩家”,因此需要有大儺世界的“角色”來操作。
- new命令來創建角色,第一個參數是姓氏,第二個參數是名諱。角色在太乙網絡僅僅是一個實體的概念(NFA),這裡創建的新角色默認並沒有任何有意思的操作方法和邏輯,甚至都沒有出生,因此我們需要一個特殊的系列操作來先把這個角色做成一個“凡人”的樣子。
扮演一個實體——衍童石,在遊戲中開發遊戲。

對於玩傳統遊戲的玩家來說,這一步很奇怪很特殊。然而,這種操作在太乙網絡裡面是比較普遍的,也是一種特色。
- 根據太乙宇宙觀,賬號,對應的就是元神,是沒有具體形態的。無論是司命、凡人還是修真者,甚至普通花草樹木又或者地點城市和法寶,他們自身雖然含有天道邏輯,但都需要元神來操作。
- 換句話說,賬號可以接入到大儺世界的任何角色或者任何實體,能接入的範圍之大,從法寶本身,一直到司命。這也是某種意義上的“角色扮演”,一旦賬號接入這個“角色”,你就是在扮演它,你可以操作它對應的命令來運轉它的天道(SGS腳本)。
- 從這個角度出發,整個大儺世界,並非像傳統遊戲一樣,先開發好代碼,再把內容建設好,之後玩家才能來玩,玩家也只是玩一個成品,遊戲的內容開發、世界的重大歷史進展、人物物品的所有權,都和玩家無關。這裡不是,這裡從一開始,整個世界只有一些基本的規則(因果規則這些),世界是沒有“內容”的,維護因果天道的司命也好,天道邏輯腳本開發人員也好,還是普通的玩家、凡人和修真者,都是從一開始就可以進入這個世界,從一開始就一邊通過操作不同實體來建設這個世界,這個世界也在越來越多的天道支撐下進行豐富複雜的運轉和演化。所以說,所有接入的賬號,既是在玩遊戲,也是開發遊戲,也是在建設遊戲世界。
直接操作“衍童石”來讓“大哥”出生並注入人類的天道邏輯

操作衍童石,稍微參與一下“開發”
- 未來的遊戲中,玩家遇到這些原始操作的情況會越來越少,因為世界已經被我們初期進來的接入者建設得很完善了。
- 這裡先操作“衍童石”的命令設置“牛心村”為其駐地,然後用它的born_actor命令來出生“大哥”這個角色,後面的參數是這個角色的性別性取向什麼的,還有各種初始屬性值,這個客戶端目前很簡單,都是直接敲複雜命令,未來的一些客戶端特別是圖形化客戶端,會方便這些操作(甚至可能是自動化的)。
- 其後一個命令是upgrade_actor,這個命令是“衍童石”本身的一個特殊功能,就是將指定角色內稟的天道邏輯,升級到我們實踐項目中實驗的“凡人”邏輯。我們實驗的“凡人”,就是一個具有基本的能看(look)、能走(go)、能感受(hp、resource、inventory、map)、能探索(exploit)和能修真(cultivation)的普通人。
- 運行衍童石的這兩個命令,都會對世界造成因果影響,因此需要天道司命的確認,命令發出後的響應時間需要等待至少一息(約為三秒鐘)。而且,由於要推動因果天道運轉,造成因果影響的任何命令,都需要消耗一定的真氣。如果你真氣不足,則不會成功,這也是“測試賬號生成服務”為啥會給你贈送一些初始真氣便於體驗的原因了。
讓我們奪舍“大哥”吧

開始扮演“大哥”
- 這就比較像MUD遊戲了對吧,play命令參數填入角色名稱,你就開始以這個角色的視角來進行扮演了。
- 可以看到我們在角色身上使用了一個叫deposit_qi命令,這個命令很簡單,主要是把元神(賬號)中的真氣轉存一些到“大哥”體內,否則“大哥”生出來體內沒有什麼真氣,做不了什麼事情。未來會有像衍童石一樣的法寶來專門從事元神和實體之間的交流,這個命令就不會在角色中出現了,這裡純粹是方便快速演示。
讓我“看一看”

look
- 按照傳統,MUD遊戲一般都有look指令的,就是看一下四周,或者看一下某人,或者查看一個事物。
- look命令對太乙世界沒有任何影響,用技術的話說,就是隻讀的,這個操作可以通過任何太乙網絡節點完成。你自己甚至可以從太乙網絡項目編譯taiyin(太陰)程序,本地來啟動一個天道節點,然後從這個節點同步大儺世界完成訪問。從太乙宇宙世界觀來講,這類操作是不產生因果的,因此不需要通過司命的網絡,響應速度就會非常快。由於這類命令不會消耗真氣,所以可以重複執行也沒有什麼問題。
看下地圖

map
- 之前操作衍童石的時候,最開始有個set_zone,參數是7,7是當前測試網絡上牛心村的區域NFA序號,因此你這個衍童石就是被設定到了牛心村,從它生出來的人,就都是在牛心村。
走一走

試試走南闖北
- 寫這篇文章的時候,測試網絡由其他元神創建了“牛心村”和“大梁”兩個區域並將它們連通了,雖然這些區域具體沒有什麼內容,但是可以根據地圖往南或者往北走走看。
- 往南走的話,就到達大梁城,觸發了大梁城的天道邏輯。作為初期實驗,設置了一個發放“路引”(早期實驗NFA)的邏輯。注意,未來大梁城的情況隨著建設,會變化很大。
- 往北走的話,又回到牛心村,觸發的邏輯會給你敘述牛心村的介紹以及當前村裡的一些情況,可以看到有兩位普通人在,那兩個實體是之前北風創建並持續建設的角色。注意,未來牛心村的情況隨著建設,會變化很大。
……待續