Hyper Demon拆解
Posted Scatter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hyper Demon拆解相关的知识,希望对你有一定的参考价值。
Hyper Demons拆解
简述:Hyper Demons是一个快节奏、高强度、复古的第一人称射击游戏,继承了前作Devil Dagger的机制,对Devil Dagger进行了游戏性优化。
一句话评价:教科书级别的FPS。
欲品一滴不死者之血,必先轮回于死亡千年之久
-Hyper Demon宣传片
机制简要介绍
玩家在一个圆形竞技场中央开始游戏,不断击杀新生成的敌人以获得时间奖励,玩家碰到任何敌人会立刻死亡。时间可以持续减到负数,最终结果仅记为0秒。
游玩奖励循环
前作Devil Dagger的排行榜仅参考玩家的存活时长,尽管由于游戏设计本身玩家难以进行保守的打法,但仍然会出现玩家持续回避战斗以延长生存时间的问题。
该流程并不能持续鼓励玩家进行战斗,甚至可能引导玩家逐渐走向更保守的打法。
而在Hyper Demons中,该流程被完全改变:
通过以时间为奖励,击杀敌人成为获得“分数”的主要手段,而“分数”即时间。玩家如若不主动击杀敌人,那么最终时间将会很低或直接为零。最终时间将会计入排行榜,也以此来鼓励玩家获得更高时间。
排行榜
因此游戏构筑了非常坚实的游戏循环,并以此引导玩家按照开发者所想的方式来游玩。
进攻方式
Hyper Demon中仅有两种主动攻击模式以及两种特殊攻击模式。
持续开火
长按鼠标左键以进行攻击,持续开火能以恒定速度射出匕首,拥有持续的开火能力以及稳定的伤害。定位相当于FPS中的rifle。于远处对付一些高速移动单位将会十分好用。由于有小量散布,玩家无需非常准确的瞄准敌人,从而降低了瞄准门槛,或者说,几乎没有瞄准门槛。
霰弹爆发
单击鼠标按键以触发,会瞬间喷射大量匕首,但会有更大范围的扩散。定位相当于FPS中的shotgun。在近处时能产生大量爆发伤害。完全没有瞄准门槛的攻击方式。
水晶
在玩家停止攻击的时候,水晶会被玩家拉过来并吸收,吸收后可以在原本的攻击上额外增加一些紫色的匕首,会因为攻击而逐渐消耗。玩家则需要在下述“激光攻击”以及增加火力之间进行取舍。
激光攻击
击杀特定敌人后按住右键可以直接吸收掉落的水晶,转化为激光。激光击中地面后会自动瞄准周围敌人。在吸收升级后会发射自动跟踪的匕首。
作为一种更高级的攻击手段,激光可以快速清除场内的敌人,瞬间爆发的伤害可以给玩家带来很大的优势。同时,击杀敌人所获得的水晶可以迅速转化成下一步有效的攻击。
Buff升级
表现为蓝色水晶,给予玩家一小段时间的慢动作效果,并且强化特殊攻击。每隔固定一段时间就会刷新,发出圣咏的音效提示玩家已刷新。
爆炸物
由其中一个敌人所产出的物体,如果不处理则会变成大量的敌人,但其本身在被投掷或被击中时会引发爆炸,如果有Buff升级则爆炸效果全面增强(半径及伤害都会增加)。
移动机制
优化了前作Devil Dagger的移动机制后,Hyper Demon为玩家提供了非常全面的机动机制。除了常规的前后左右和跳跃,Hyper Demon提供了完全的机动可能。而所有的高级移动操作都仅需要一个空格键完成。
连跳
在落地瞬间轻按空格,就如同Quake中的连跳能保持速度一样,Hyper Demon允许玩家进行连跳。当连跳成功时会有相关提示音表示玩家正在连跳。
冲刺
在空中时,按住移动键,并轻按空格,即可完成一次冲刺,但需要注意冲刺没有无敌帧,仅作为机动手段。有三个敌人可以使用冲刺来削弱或击杀(后文会提及)。
下砸
在空中时,松开所有移动键,仅轻按空格键即可开始下砸。下砸会对其中一个敌人造成硬直(后文会提及)。
闪避
在敌人发动攻击前的一瞬间,敌人会发出明亮的提示音,并发出耀眼的闪光以提示玩家闪避时机。闪避成功后会进入一小段子弹时间,音效上会使用低通滤波器来提示玩家已成功闪避。
霰弹跳
霰弹具有后坐力,而这个后坐力可以被用于跳跃。在起跳后,朝自己下方使用霰弹开火即可通过后坐力来提升自身高度,可以和冲刺以及兔子跳结合来达到极高的机动性。
通过以上机制组合,已经能给玩家提供非常丰富的机动选择,可见为何Hyper Demon可以被评价为FPS教科书。
敌人(所有敌人都没有官方命名,仅有Enemy代称)
Enemy1
发出沉闷的轰鸣声,频段占据为250Hz~800Hz。缓慢的飘动,释放大量的骷髅头,骷髅头会持续追踪玩家位置,给玩家形成严重压迫。
作为一个无限刷怪的源泉存在,可以给玩家形成严重的走位问题,玩家因此也不得不迅速规划行走路线。但本身会产出水晶,且骷髅头的路线是可预测以及可控制的,高端玩家通常会选择保留这些鱿鱼塔,以方便后期需要水晶时迅速获得水晶(技巧名:Farming)
弱点为其中央的水晶,使用激光击中水晶可一击必杀,或冲刺到水晶上也可一击必杀。
尽管游戏本身场景没有任何障碍物,但缓慢浮动的敌人也会成为玩家的障碍物之一,因此也形成了一种动态的地图调整。
Enemy2
发出如同人在远方的惨叫声以及呜咽声,频率占据约为800~1500Hz,在空中飞行,当玩家靠近时会发动冲刺攻击,玩家可进行闪避。当承受一定伤害时会坠落到地面,此时玩家对其进行冲刺即可瞬间击杀,同时玩家会获得额外向前的动量。如果在坠落地面一段时间没能完成击杀,那么会立刻返场,此时如果玩家在附近,那么会立刻发动攻击。
作为一个骚扰玩家空中走位的单位存在,使得玩家即使在空中也需要规划路线。然而在空中被击落瞬间玩家也可以借助其当做一次性跳板使用,因此有效利用这个敌人可以在整个战斗中为自己提供非常有效的位移手段。也成为了地图的一部分。
Enemy3
发出如同人尖锐哈气的声音,并伴随着粘液流动声,频率占据越1000Hz~4000Hz,于地面蠕动,其可攻击部位仅限头部,受到攻击时会反复盘旋以规避伤害。盘旋短时间后会开始向玩家冲刺,对其头部附近进行下砸可导致该敌人被震晕,便可进行迅速击杀。同时,如果场上出现了Buff水晶,它会立刻在水晶周围盘旋,导致玩家不能直接水平走过去获得水晶,只能通过垂直方向下砸获取Buff水晶。
通过完全限制玩家的走位,这个敌人在地图上相当于一道软锁,通常会锁死地面部分空间,控制了玩家的行动方向及策略。
Enemy4
发出粘液般的吱吱声,以及发出节肢动物踩在砂石上的拟声,频率占据约为1500~5000Hz以及12000~15000Hz,受到伤害时会潜入地面,并发出低沉的轰鸣声,然后在随机位置再次浮现。该声音通过Downsample效果器以获得特别的中高频,在混乱环境中也可以很清晰的辨别。当玩家处于其脚边,或冲刺经过其下方时就会使其坠落至地上,并始终以有水晶的一面面对玩家,此时持续攻击即可防止其潜入地面。攻击手段则为吸收玩家场上坠落的水晶,并吐出一绿色球,绿色球如若不处理则会变成大量的小蜘蛛。射击绿色球可引发爆炸,玩家免疫该爆炸伤害。
由于会抢夺玩家打出的水晶,加上其可以生成大量敌人的特点,玩家经常会将其作为优先级较高的对象直接处理。作为控制玩家资源获取的一种手段。
敌人方向预警机制
由于Hyper Demon战斗场面尤为混乱,加上其闪烁的画风,导致十分难以识别场上情况,玩家也无法有效照顾背后(前作Devil Dagger的问题)本作引入了全新的机制以补全该问题。
当玩家背后一定距离存在敌人时,屏幕会出现敌人的红色半透明闪影,如同后视镜一半的存在。这种方式给玩家补全了后方视野盲区,也不至于严重遮挡前方视野。
敌人刷新机制
为了排行榜的有效性,场上敌人配置的刷新顺序其实是固定的,仅仅只是刷新地点随机(前作Devil Dagger的机制),不同于前作的是,在下一波敌人刷新前,场上会存在玻璃般透明的敌人位置提示,通过该提示玩家也可以规划自己后续的路线以及击杀顺序。
由于大部分竞技场生存类游戏敌人配置刷新都是随机的,而玩家无法预测下一波的配置,从而导致只能规划当前波次的策略,无法顾及下一波的可能性。而该机制则允许玩家进行更长远的规划,从而达到更高的击杀效率。
把选择权交给玩家,而不是逼迫玩家选择
音效设计
非常合理的给每个声音分配了对应频段(详见敌人分析部分每个敌人资料的开头),防止音频与音频之间相互频率重叠导致玩家无法有效区分音频。通过动态调整音频音量大小以完成音频优先级(即进行了侧链压缩)。在游玩过程中,大部分敌人音效集中在100~4000Hz(轰鸣声和嘶吼声),而Buff水晶音效频率集中在4000~8000Hz(圣咏声),Buff水晶一但出现则会动态的压缩敌人的音量,也让玩家通过声像快速分辨水晶位置。敌人音效也存在优先级顺序,优先级高的敌人音效音量会压制优先级低的敌人音效音量,实现动态的电平平衡,从而实现声音上的层次感。
教科书级别的,甚至是超越了大厂的音效设计理念,基本是基于电子音乐人对于音效理解之上进行的。
守护进程demon.c
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <errno.h> 4 #include <time.h> 5 #include <stdlib.h> 6 7 int main() 8 { 9 pid_t pid; 10 pid = fork(); 11 if (pid <0) 12 { 13 perror("fail to fork"); 14 exit(1); 15 } 16 if (pid == 0) 17 { 18 setsid();//在子进程中创建新会话 19 chdir("/tmp");//改变目录 20 umask(0);//重设文件权限掩码 21 int i; 22 for (i = 0;i<getdtablesize();i++) 23 { 24 close(i);//关闭所有打开的文件描述符 25 } 26 FILE *fp_w; 27 time_t t; 28 fp_w = fopen("time.log","a"); 29 if (fp_w == NULL) 30 { 31 perror("fail to fopen fp_w"); 32 exit(1);
33 }
34
35 while (1) 36 { 37 time(&t);//获取系统时间的秒数 38 fprintf(fp_w,"%s\\n",ctime(&t));//将秒数转化为字符 39 sleep(1); 40 fflush(fp_w);//刷新 41 } 42 } 43 else 44 { 45 exit(0); 46 } 47 return 0; 48 }
gcc编译之后 用ps ajx命令查看一下进程
以上是关于Hyper Demon拆解的主要内容,如果未能解决你的问题,请参考以下文章