一句话介绍:黑红配色的火柴人横版射击游戏,地图是三层平台结构,目标是把每一关的敌人全部清光。
武器目前有六种:手枪、冲锋枪、霰弹枪、步枪、激光枪,还有一把可以格挡子弹的战术刀。打死拿枪的杂兵,会掉它手里的那把枪,走过去按 F 捡起来就能换武器,所以理论上你打到最后可能揣着一把从敌人手里抢来的霰弹枪。
后来越玩越觉得激光枪(BOSS 掉的)太强,直接替换主武器会让其他枪没存在感,于是把它改成了独立的"备用武器":捡到激光枪不会替换你手上的枪,而是进副武器槽,按 Q 随时切换。代价是激光枪的弹药不可回复——弹药包、过关补弹都对它无效,打光就只能等下一把激光枪掉落。算是一种"高伤但稀缺"的取舍。
敌人也不止一种:来回巡逻的杂兵、正面举盾挡子弹的盾兵、老远就架枪扫射的机枪兵、贴身喷火的喷火兵,以及每 5 关出现一次的小 BOSS——它会在顶层放环形弹幕,还会朝你冲锋,冲锋途中能直接把掩体撞碎、把地板踩塌。
为什么做成三层
最初的想法其实很简单:横版射击游戏大多是一条路走到头,我想试试"纵向"的玩法。三层平台之间留了缺口,你要靠跳跃在楼层之间移动,每层都有敌人把守。
这个设计带来的第一个问题是:敌人分布不好做。如果敌人全挤在一层,玩家只要站在另一层往下打就能白嫖;如果每层都堆满,又太密。后来我干脆规定:敌人均匀撒在三层,玩家必须每一层都清干净才能过关,想靠"躲"过关是不可能的。
第二个问题是跳层手感。最早层间距设得比较窄,玩家在跳层时容易撞头、卡在平台边缘,而且一层的敌人能看到二层的玩家。后来我把层距拉宽,并给敌人加上了视野检测:只有同一层、没有遮挡物挡着、且距离够近时,敌人才会追你。这样每层就成了一块相对独立的小战场,玩家可以在楼层之间周旋。
踩过的几个坑
开发过程里修过不少自己挖的坑,挑几个印象深的:
敌人掉下去不算死,关卡就卡死了。 游戏里子弹可以打穿地板,在敌人脚下挖个洞它就会掉下去。一开始"掉落"只是把敌人标记成死亡,但它还留在敌人数组里,而过关条件是"敌人数量为 0"。结果就是敌人明明掉下去了,关卡永远清不完。这个 bug 修了两轮才根治:先是让坠落直接计入击杀,后来发现敌人会自己傻乎乎地走进洞里,又加了一段"脚前没有地板就掉头"的逻辑。现在敌人会在洞边停下来,只有你主动打穿它脚下的地板才能坑到它。
BOSS 死了,掉落物却捡不到。 BOSS 在顶层,掉落物也生成在顶层,玩家人在底层,根本来不及爬上去,奖励界面就已经弹出来了。解决方法是加了"清场宽限期":全灭敌人后游戏不立刻结算,给你几秒钟自由移动和拾取,倒计时结束才弹出奖励。后来干脆把 BOSS 的掉落直接生成在玩家面前,省得爬楼。
地刺的位置。 最早地刺是随机撒的,有一次我发现地刺刷在了层间缺口的正上方,玩家跳上去的瞬间就被扎死,毫无预兆。后来把地刺的生成范围改成远离缺口的中段,又让敌人巡逻时主动避开地刺,才解决这个"出生点陷阱"。
子弹没有宽高。 有一版代码子弹的宽高是 NaN,子弹和敌人的碰撞判定全失效,打出去怎么都不掉血。这种 bug 找起来最痛苦,因为画面看起来一切正常。
现在能做到的破坏
这个游戏玩到后期的一个乐趣是"拆地形":
- 掩体是木箱,3 枪打碎,打碎的瞬间物理、视线、子弹阻挡全部失效;
- 地板可以打穿,命中点会挖出一个洞,站在洞上的人会掉下去——包括敌人自己;
- 爆炸桶可以打爆,范围伤害能一次炸死一片;
- BOSS 冲锋能一路撞碎掩体、踩塌地板,从顶层一路拆到下层。
玩家和敌人的子弹都能破坏地形,所以有时候敌人会不小心把自己脚下的地板打穿,掉下去摔死,也算一种"物理过关"。
关于发布
其实一开始我准备发 itch.io,但国内访问那个网站实在太不稳定,我自己都连不上几次,最后还是决定在 indienova 发布。游戏是纯网页的,两个文件,打开浏览器就能玩,手机上也行,存档存在浏览器本地。
上面几张都是游戏内实机截图:战斗、跳跃和激光枪的穿透光束(一枪能打穿一整排敌人)。
下一步想做的
目前想到的几个方向,还没定优先级:
- 更多敌人类型,比如会飞行的、会扔手雷的;
- BOSS 不止一种,每 5 关换一个打法;
- 关卡里加隐藏房间或者收集要素;
- 音效和 BGM 目前是程序生成的,以后想换更讲究的版本。
如果你玩了,觉得哪里不对,或者想要什么功能,欢迎告诉我。独立开发最缺的就是反馈。


暂无关于此日志的评论。