某岛

… : "…アッカリ~ン . .. . " .. .
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 事件,但是依然可以交互。