這裡是 狗見了英語都搖頭 ,這是我第一次參加GameJam活動,因為其他GameJam大多都2-7天,想法沒時間落地非常憋屈,一週時間對我來說太短了,但這次Booom有三週時長,導師又對我的論文水平判了死刑讓我有了大量空閒時間,自己掂量了一下時間應該可以趕完,大不了國慶通幾次宵,遂決定參加。
因為以前其他比賽的組隊經歷並沒有給我帶來良好體驗的緣故,再加上我之前主要是在學校做VR相關的開發,學校的開發嘛懂的都懂。害怕組隊會給真正的佬拖後腿,我又會一點美術,大不了搞像素風格,所以這次決定Solo完成比賽,如果有好結果能夠轉為長期項目再組建小隊。
為什麼Solo還有時間寫半程紀錄
我以前就有寫開發日誌的習慣,寫這篇的時候正是中秋節深夜我在失眠,加上功能推進比較順利,所以想換換腦子。
讀題與初步策劃
9月20日題目揭曉。說實話我看見這個題目的時候愣了一下,這不是GMTK2022的題目嗎。但我琢磨一下覺得骰子其實是一個題乾的包裝,題眼是隨機性,還必須是不公正的隨機性。既然是在隨機上做文章:我第一反應就是我不做數值隨機因為我討厭這種隨機,我要做策略隨機,第二反應是我隨機絕對不碰乘除法,我打遊戲一碰到×和÷就豬腦過載直接放棄計算,第三反應是數值要儘量壓縮小,易計算,就像陷陣之志那樣,儘量把數據壓到10以內。
因為是Solo,所以有幾點定位很清晰:
1. 肯定不可能從0造輪子,寫的代碼的起點儘量是我之前寫過的,輕車熟路。
2. 音效要麼來自cc0,要麼自己用庫樂隊錄幾個簡單音節手搓
3. 能用插件就用插件
4. 解耦什麼意思一下得了,一切面相功能實現而不是擴展性
5. 因為我幹過三維美術,深知3D流程有多麻煩,這次100%是純2D
我回顧了一下之前寫過的能用的輪子,一個基於網格的A星尋路,一個跟某某學院寫下來的象棋AI(現在看來這倆已經改得面目全非幾乎重寫)。框架則選我最順手的Qframework,它裡面自帶了GridKit和很多幫我完成不熟悉流程的內置輪子可以幫我快速開發。從這些有限的條件我的Booom遊戲關鍵詞已經呼之欲出了:策略隨機,象棋,基於網格,小數值。
得出這些內容後我迅速想到了兩款遊戲:陷陣之志和霰彈國王,我陷入了短暫的我這算不算抄襲這似乎和GameJam精神不太一致的掙扎,但我很快不往這方面想了,一方面這事在學術論文圈子根本不叫事,只要你做出差異化或者改進就有可取之處,另一方面我21天能做完就了不起要燒高香了,不管別人怎麼說我做得爽就行。
於是兩款遊戲我各自又開了一把,一些輕車熟路的苦痛記憶湧上心頭:黑棋國王AB都能走,但是我提示機會用完了沒算到會被吃,三法杖局被主教終結,沒刀鋒你面前的卒都不能殺,在保護機甲保護駕駛員和建築之間苦苦思索最後選擇放棄時間線重開一盤……
我決定了這次GameJam的方向:
1. 一款基於象棋的戰棋遊戲。
2. 玩家的操作單位<=3(因為我很討厭戰棋一個人控制一車麵包人的設定,選擇太多就是沒有選擇,只剩下選擇內耗)
3. 局內戰鬥不涉及任何隨機性,隨機性在場外決策中
4. 操作單位要有極大的差異性,且不能一次失誤就全盤皆輸
5. 題材向科幻和AI方面靠,因為我喜歡
6. 系統性設計(硬掰也要把象棋怎麼跟AI科幻聯繫在一起說清楚了)
7. 肉鴿!!!!!!!(但是大概率沒時間完成)
確定這些大方向之後我開始寫中二設定,但在確定玩家目的上犯了難,在20號當天我放下設定的思考先去畫美術素材了。直到22號CEO的動態用嘴做遊戲——《幾率因子》裡提到了坍縮,CEO提議的那個數值隨機我看著就頭疼,但是坍縮這個詞啟發了我怎麼圓設定。
- 背景是什麼?
按我的理解生成式人工智能需要人工標記信息源形成一個極高維度的特徵軸空間作為自己的數據庫,所以設定在未來某個有意識的AI藉助某一契機實體化了,它為了擴張自己必然四處收集信息去擴充自己的特徵軸空間讓自己更聰明更瞭解世界。為了反制AI人們產生了新職業——特徵數據摧毀工人,每個人都有各自清理的特徵軸,定期清理AI新生的特徵軸,拖慢AI自我進化的速度。
- 那為什麼會顯示出象棋?
這是軟件根據AI行為規律模擬出來方便人理解的顯示方法,這樣也能解釋通後來可能會出現的象棋中不可能出現的走法和特殊情況。真正的特徵數據摧毀工人不需要這個,他們每天見到的內容以一堆代碼。“象棋”是政府開發出來號召並吸引普通民眾一同參與到清理工作中來的圖像化數據編譯軟件M。主角出於某種原因困在某地,AI如果繼續在附近以實體化的形態收集信息會讓他死亡(靠近會有類似於輻射病之類的設定)。所以他要用M清理靠近的特徵數據(每天靠近的特徵數據是不同的,解釋了肉鴿為什麼不同,也解釋了為什麼主角要一直去清理,而特徵軸可以很方便的納入各種題材,擴展性很強)
- 玩家操控的單位是什麼?
一個在數據海洋裡由人操控的程序,它分主機Host和子機Slave,他們的關係就像潛水員和潛水鐘,或者宇航員和氧氣倉(但為了容錯率,只有主機死亡才是遊戲結束,子機死亡可由主機復活,所以前面兩個比喻都不合適,最終妥協了不想了,直接主機就是服務器的樣子,子機就是宇航員的樣子,為什麼不是潛水員因為宇航員聽起來比潛水員酷)。
- 隨機機制是什麼?
1. AI數據空間是變換的:關卡內容變化,涉及內容和可以展開的設計太多了時間不夠,Booom期間不做,如果轉為長期項目就做。
2. 信息的傳遞是變化的:你可以在每局戰鬥開始前獲取隨機支援,但AI空間因你的破壞行為帶來的變化導致你不能隨心所欲的獲得想要的內容,警戒值越低隨機到的支援效果越偏向保守,警戒值越高隨機到的則偏向激進。我找了量子力學裡的,同時也用在隨機地圖生成算法中的名詞波函數觀測來指代這種隨機性。
3. 策略的變化:AI不可能看著你刪除數據無動於衷,每局下來都會提高警戒值,而你在每局戰鬥清理數據後會獲得冗餘數據,且滿3次後,玩家會對決最終的也是最核心需要刪除的數據。警戒值不僅會影響信息的傳遞,還會影響你加工冗餘數據的內容(說白了一種商店)。
這是目前的策劃案子,玩法的話我傾向於邊做邊改,用語言描述也比較困難,總之這個策劃除開坍縮部分,其餘都在20號傍晚敲定了。我就正式開始轉入開發。
開發流水賬
第1天(9.20)
a) 上午+下午寫基礎策劃考慮玩法 b) 晚上畫主機子機和棋盤棋子素材
第2天(9.21)
a) 上午:完成棋盤系統的搭建 b) 下午:處理鼠標點擊功能,配置主機子機,實現瞬移 c) 晚上:為了搭配棋盤出現動畫重畫棋盤素材
第3天(9.22)
a) 上午接入以前寫好的A*尋路,去網上找了個範圍顯示寫法教程,配合網格系統做處理接入項目(教程在這裡,需要的可以拿去https://www.bilibili.com/video/BV1jg411d7A8/?spm_id_from=333.999.0.0&vd_source=42adcf39eb4e4d28795c0022a66ea630) b) 嘗試接入以前寫好的象棋走法AI,寫的什麼鬼玩意兒,改AI改了一天 c) 晚上:看到CEO的主意,修改設定和策劃
第4天(9.23)
a) 上午完成箭頭指向系統和攻擊瞄準系統 b) 下午完成粒子系統打擊感和霰彈槍音效,完成初步敵人扣血機制 c) 晚上上課
第5天(9.24)
a) 上午,整理血條和死亡邏輯和特效。整理有效射程傷害和基礎射程傷害,整理tag和layer關係。b)下午:昨天下午寫了句bug導致血條失效,花了兩小時才找到,要死了。以前只用過UE裡的連連看,第一次打開Unity的Shadergraph想通過材質實現fx,找了好久找不到怎麼實現enum,發現keyword有enum,實驗半天發現只有在編譯的時候才有效,很煩。最後用GPT寫了個custom funcation解決問題,發現顏色無法正確顯示顏色非常的淡,因為時間不夠就沒有深究。 c) 晚上,修改AI規則,規劃遊戲小流程回合切換
第6天(9.25)
a) 上午,修正射線碰撞導致的全部打在Player_Slave身上的bug。修改棋子Sprite像素化死亡的拉伸問題,並賦予音效。修正甩槍會丟失傷害目標的Bug。b) 下午,修改棋子會重疊的問題(在行走前一步重新執行了判斷,但後面又重新出現了,煩得不行)。創建敵人行動預示系統,完成Player狀態UI的拼接,完成攻擊瞄準過程中Player的轉身。c) 晚上:完成Player狀態數據和狀態UI的互通,敵人消失規則(碰到Slave,Slave消失,碰到Host,Enemy消失
第七天(9.26)
a) 上午:修正EnemyAI在Enemy死亡後還會繼續運算的bug,修正Enemy非攻擊狀態斜走碰到Player誤觸掉血。b) 晚上:下午:修改EnemyAI規則,當移動的位置一步就能吃子就馬上修改修改目標方向。並同步更新ActiveTips的顯示。c) 晚上:回退EnemyAI規則,不然太簡單也太蠢了,棋類因為場地要求的範圍有限且被威脅物體都能移動所以Into the breach類似的規則沒法成立。最後決定AI從先執行再思考變成先思考再移動,但是角色移動的同時如果就在一步吃子的路上就會顯示QuicklyTip。
第8天(9.27)
a) 上午+下午:完成新AI和快速反應提示系統的創建,修改因移動關閉碰撞導致isunitGird無法更新的bug,修改防斜走bug判定條件,修改AI預測條件。找了我8個小時我真的罵出來了,恨我自己,想抽自己大耳巴子。b) 晚上:運行順序顯示,修改回合切換按鈕與對應回合的可交互性,嘗試打包,修打包bug。
第9天(9.28)
a) 上午:開始完善回合交替,完成遊戲開始登錄模式,修改修改Grid更新模式中TheUnitTransformInGrid不更新的bug。b) 下午:每個回合恢復行動點和移動距離,同步ActionUI狀態,重新同步Status狀態更新,讓自己人也可被攻擊,且會顯示輪廓。c) 晚上:如果鼠標移動到原地會被攻擊也會產生預示,字體更換為鳳凰點陣體
第10天(9.29)
a) 上午:拼插件UI(好吧其實就是一種卡牌),卡牌擺放位置邏輯+插槽邏輯+加牌/減牌邏輯完成,實現卡牌系統。聽說導師現在改論文都是開一對一小會,而我不寫小論文了所以這倆月都沒找我,蕪湖,爽死。b) 下午:將卡片規則分離成單個腳本。修改炮會把障礙物當炮架子的bug。修改第一回合不行動點跳過回合沒用的bug。建立資源點收集系統,資源點不夠卡牌拖不出來。取消“撤銷”按鈕的功能,因為要寫攔截命令,之前沒寫過,問了一下GPT在胡謅,時間可能來不及就放棄了。 c) 晚上:中秋節晚上,出去吃燒烤,放鬆一下。
核心遊玩功能實現後的樣子
寫到這兒判斷了一下還有警戒系統,商店系統,準備系統都沒寫,音效和交互還沒優化,跟別提Bug,國慶肯定得熬夜通宵了,就寫到這兒吧,祝我按時交遊戲捏o(^▽^)o!