某島

… : "…アッカリ~ン . .. . " .. .
May 19, 2020

【海之歌開發日誌】搜刮屍體

搜刮屍體是很多 RPG 遊戲都有的功能,之所以這裡把這個模塊單獨拎出來說,是因為要很好的實現這個功能,需要對代碼進行一些必要的重構。
所以這裡停頓一下。

Nethack 里屍體(Corpse)甚至有一個專門的條目:https://nethackwiki.com/wiki/Corpse,交互也非常複雜。

不過印象中最深刻的還是最近玩的《奧秘》,在《奧秘》中,搜刮屍體就非常出色的推動了劇情的發展,不用說開場的時候,主角就是在空難的現場,一堆死人堆中活了下來。

遇到的第一個敵人擊敗他之後可以從他的裝備上搜刮出和死去的半獸人飛行員相同的護符,不禁令人浮想聯翩。

再者例如《霹靂奇俠傳》,主人翁秦假仙的設定就是江湖上幫人收屍的,在遊戲中這個技能確實給玩家提供了很大的幫助。

再看看神界,則是類似和箱子的交互。

暗黑破壞神中的設定就比較簡單了,因為怪物身上的裝備會直接爆出來丟在地上。
不過這些屍體還是會留下可交互的對象,例如死靈法師可以從屍體中召喚出骷髏,而野蠻人則可以從屍體中榨取藥水和裝備(?)。

之前的代碼中,屍體死亡後,依然會存在於 agents 中參與動作,只是每次輪到屍體行動就被跳過了,這樣顯然屍體太多時會增加很多不必要的循環。

所以我們第一件事是把死亡的單位從 agents 隊列中刪除。

        let agents = game.map.agents;
        let idx = agents.findIndex((e) => e == this);
        agents.splice(idx, 1);                        

這樣做後,死亡的單位會直接從遊戲中消失。
第二步則是將死亡的單位放在地圖圖層中,不參與 agents 事件,但是依然可以交互。