开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 9284|回复: 22
收起左侧

[闲聊] FPS的后坐力研究探讨,荒野行动中实践。

[复制链接]

结帖率:96% (87/91)
发表于 2018-1-23 11:09:07 | 显示全部楼层 |阅读模式   广东省深圳市
本帖最后由 花老板 于 2018-1-23 11:12 编辑


发贴前我特意问过某超版,只做技术讨论,不发布软件,就不违规。

本贴全手打,部分学习借鉴的,部分自己领悟的,旨在学习讨论,请勿用于非法用途。

1:FPS游戏中后坐力,FOV视野的范围和变化
FOV即第1人称视角范围场,FPS中常见的是90度。
在空间系中,坐标是三维的,我们学习过坐标分xy,这是二维坐标。
但在三维空间中,坐标是xyz,即空间中的高横向,纵向。高度。

在CS中,后坐力最开始是没有的,后来为了仿真,各种演化版的游戏都有后坐力。
比如某鹅,为了赚钱,表现枪械的好坏,鼓励大家买好枪,在这方面做的额外明显。

2:开枪后视角的变化(后坐力影响了什么?)
所谓枪法,对枪械了解,一定要知道后坐力的范围。

假设你拿棍子打了版主,棍子会跳一下,弹一下,这也是后坐力(反正我不敢打版主)。
可是FPS中,后坐力不仅会影响枪械的标准位置,甚至还会影响视野,还会影响瞄准点的变化。
(不然火麒麟怎么卖钱?)
所以如果你用易语言开发游戏,想赚钱一定要搞后坐力,再卖个888的龙麒麟步枪,这样才行啊!

那么,开始说正事。
目前荒野行动中,后坐力分4大部分。通用大部分FPS,但不绝对。
1:开枪后,瞄准位置会变化(普通开枪和开镜开枪不一样)。
2:开枪后,视野会重置,固定下移(狙)。固定上移(步枪)。
3:开镜后,FOV会变化,和最初的FOV(视野角度)值不同。
4:开枪后,视野回弹,枪械瞄准位置回弹,这里一般是固定范围+随机值。
虽然听起来很绕,我实践中也很绕。但还是有区别的。
技术在进步,FPS中如果少了一个环节,就无法实现后坐力了。

3:如何定位后坐力call,如何找到指针及内存指令。
最常见的是根据FOV值定位,然后看FOV变化,根据访问代码,跟踪到指令。
以某游戏为例:(基址是别人找的,大家请自行百度,本贴只做学习研究)
1.jpg
假设我们要提高初始视野高度值,定位到三维空间系中的Z轴,即相机竖向高度。
科普下,FPS中的相机是什么:假设你的眼睛就是个相机,如果你站高点,相机高度就提高了。
在CE中,我们得知,movss(单精度数,在易语言中是小数,在CE中是浮点数)赋值给xmm0,地址为 ebp-38

按照传统的办法,我们需要找到ebp,并且修改他的值,然后他就会返回这个值给xmm0。
但前面讲了,技术在进步。这里我给大家讲一个简单粗暴的易语言实现。字节操作。
比如我们要汇编其代码,改为  mov [ebp-38], (float)5.0  意思 是 将ebp-38的值定义为 浮点数5.0 即float型。
那么,就实现了效果,相机提高了5个单位,每个单位是1米(常见FPS中浮点值 1=1米)。

2:禁用后坐力回弹

根找到的基指,我们可以看到内存中,有2个值。xmm2,xmm1

这里开始讲重点!  用易语言实现改他的汇编指令。
我们用一种简单粗暴的办法!  nop填充,让他什么值都没有!
从228741-228747  给他全部填充nop会发生什么?

3.jpg
嘿嘿,大家自己去测试下,不过地址要失效了。
注释:nop汇编指令16进制是90,转10进制是144,直接写字节集。长度为1。

那么,怎么恢复原值呢?
我们将这个地址,变为字节数组,得出的原始值
复制转为汇编指令,转为易语言中用的字节集,10进制
4.jpg
这里回弹功能也做了恢复,如果禁止回弹,那么还是简单粗暴的办法,填充nop。


总结:
本次文字教程,旨在学习,如果讲的不好,你来打我啊?
这里面只讲了实现无后坐的2个功能实现,还有2个没搞定
等4个齐全了,就可以解决子弹打的不固定+后坐力问题。
我喜欢讲原理,虽然我理解的也不深。
不要问我怎么找的这个基址,自己去尝试搜索,老是拿成品不好。
在此,感谢某位基佬的指点。






2.jpg

评分

参与人数 2好评 +2 精币 +3 收起 理由
缺1份矜持ゝ + 1 + 3 感谢分享,很给力!~
EExiaolin + 1 此处应该有鼓励~

查看全部评分

结帖率:0% (0/2)
发表于 2023-5-19 22:40:12 | 显示全部楼层   山东省烟台市
坐力研究探讨,荒
高级模式
回复 支持 反对

使用道具 举报

发表于 2021-1-10 00:16:49 | 显示全部楼层   河北省邯郸市
6666666666666666666
回复 支持 反对

使用道具 举报

结帖率:94% (34/36)
发表于 2019-3-24 15:00:07 | 显示全部楼层   广西壮族自治区贵港市
看不懂!但是好厉害
回复 支持 反对

使用道具 举报

发表于 2018-3-17 10:11:19 | 显示全部楼层   山东省威海市
楼主,现在的fov变化好像成了 movss  [esi+什么玩意],xmm0
修改 mov [esi+什么玩意],(float)5.0,确实可以调高镜头,而且设为固定值后上下镜头确实不移动,但是也是真的不移动。并不是因为打枪引起的fov不移动,
导致人不能上下看。。
第二个禁用后座力回弹的地址没找到到,而且没明白为什么。。
方便交流么
回复 支持 反对

使用道具 举报

发表于 2018-3-7 16:36:08 | 显示全部楼层   河南省商丘市
小白表示蒙蔽了
回复 支持 反对

使用道具 举报

结帖率:25% (1/4)
发表于 2018-3-4 22:35:34 | 显示全部楼层   广东省深圳市
老哥没后文了啊
回复 支持 反对

使用道具 举报

结帖率:67% (4/6)
发表于 2018-2-14 00:19:56 | 显示全部楼层   江苏省镇江市
假设你拿棍子打了版主,版主会反手打你,这也是后坐力(反正我不敢打版主)。
回复 支持 反对

使用道具 举报

发表于 2018-2-2 20:56:28 | 显示全部楼层   山东省滨州市
https://docs.unrealengine.com/latest/CHN/Resources/SampleGames/ShooterGame/index.html


你看完这些应该会有别的想法!!!
回复 支持 反对

使用道具 举报

发表于 2018-1-25 15:45:30 | 显示全部楼层   广东省揭阳市
假设你拿棍子打了版主,棍子会跳一下,弹一下,这也是后坐力(反正我不敢打版主)。
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2018-1-25 04:11:00 | 显示全部楼层   重庆市重庆市
花老板又来教坏我们了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表