《舰艇游戏中的DEMON如何计算目标航速》
熟悉舰艇游戏的朋友们相信对DEMON并不会陌生。DEMON是舰艇中的重要设备,它是Demodulated Noise的缩写。通过该设备你可以获取目标的航速和目标推进器的螺旋桨叶片数,这些数据都是十分重要的。下面的这张图便是游戏《688(I) Hunter-Killer》中的DEMON设备。其中有三个重要的数据:CURSOR FREQUENCY,TPK(TURNS PRE KNOT)和SPEED,DEMON通过前两个数据计算出目标的航速,关于如何应用DEMON,我在这里就不再赘述了,详见其附带手册或在网上搜索相关知识。本文所要探讨的问题是:DEMON通过前两个数据是如何计算出目标航速的?肯定会有个公式,那公式是什么?带着这些问题我便深入到了游戏程序的内部,准备一探究竟!
我首先用金山游侠找到了TPK数值在内存中的位置,即:00562864(注:我使用的游戏版本为1.07),然后根据这个位置很顺利得就找到了得到SPEED数值的关键程序代码:
0187:00486490 FLD REAL8 PTR [00562868] //频率数值加载到ST0
0187:00486496 FMUL REAL8 PTR [0050C510] //与60相乘并保存到ST0
0187:0048649C FIDIV DWORD PTR [00562864] //除以TPK值并保存到ST0
0187:004864A2 CALL 00412DEC //SPEED(ST0)数值取整
其中:
[00562868]--->FREQ=0.683760683760683774
[0050C510]--->60(注:在《Sub Command》(v1.08)中此值为:15。)
[00562864]--->TPK=8
即:0.683760683760683774・60/8=5.128205128205128638
通过上面的程序代码及相应的注释,FREQ,TPK和SPEED之间的关系一目了然:
FREQ・60/TPK=SPEED
原来DEMON就是这样计算目标航速的,但上面所得到的计算方法究竟又有什么物理意义呢?
还是让我们先弄清已知的数据吧:
FREQ--->转动的次数/单位时间
TPK(TURNS PRE KNOT)--->转动次数/节(节=哩/时)
SPEED--->节
可以看到,上面唯一一个未知的数据便是FREQ的单位时间,但是我们还有一个线索:那就是我们通过上述程序分析得到的那个计算方法。其中有个数值60!“单位时间”,数值“60”以及最终的结果“节(哩/时)”,通过这些已知条件,我第一个想到的那就是:单位时间=分!你和我想得一样吗?
现在我们代入物理数值(已简化)再看一下:
SPEED=FREQ・60/TPK
=(0.7次/分)・(60分)/(8次/节)
=(42次/时)/(8次/哩/时)
=5.25节
从程序中得到的那个计算方法现在已经成为了一个具有物理意义的计算公式――
FREQ(次/分)・60(分)/TPK(次/节)=SPEED(节)
舰艇游戏中的DEMON是如何计算目标航速这一问题已不再神秘!至于《Sub Command》中为什么会乘以15而不60的问题,我想其FREQ的单位可能是(次/4分)。
自打学会了这款游戏,我一直纳闷儿DEMON是怎么计算出目标航速的,觉得她很神秘。我上网询问过网友,也在GOOGLE中寻找了很长一段时间,但还是一无所获,可能玩此类游戏的玩家并不多,尤其是玩模拟潜艇的玩家,因为这类游戏相对于其他类型的游戏来说太过专业化并且十分枯燥……所以我就自己试着研究了一下。上述公式或许并不正确,因为我对此类专业很不在行,也就是个普通的游戏玩家,甚至连家都谈不上。但我还是要将这些并不成熟的“成果”与大家“分享”,目的:抛砖引玉。现实舰艇中的DEMON与游戏中的DEMON到底有多少相似之处我不得而知,但像这样仿真度很高的军事题材游戏自《Sub Command》开始已经禁止对华销售了……
我的个人主页:
http://timw.yeah.net
http://timw.126.com
23:32 2004-10-22
18:05 2004-10-23---修
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)