成就中心 DouJin Terraria! 社区服务 统计排行 帮助
  • 37467阅读
  • 29回复

[紅/EoSD][技术向] 东方红魔乡 PlayRank 增减分析

发帖
103
信仰
6
蓝点
462
符卡
0
— 本帖被 Kag 执行加亮操作(2015-01-01) —
注:本文的分析对象是未打任何第三方补丁的 东方红魔乡 1.02h 日文版。应该不适用于 东方红魔乡 渔场汉化版 。

首先简单介绍一下 PlayRank 是神马:
引用

    还不 MISS?那就让子弹密一点快一点(增加PlayRank),看你还不死。        
    咦,MISS了?真是的,那…那就让弹幕简单点吧。别…别搞错了啊,人家才不是为了让你容易过才放水的呢/// 只是…人家一激烈你就吃不消了,这有什么意思嘛///        
    PS: MISS 不是影响 PlayRank 增减的唯一条件。
    PS2: 除红魔乡外,其他的一些东方作品中也有采用 PlayRank 系统(已确定妖妖梦和永夜抄也有)。


利用最近几天蛋疼的时间分析了一下,发现有这么一些东西是和 PlayRank 相关的(已转成C代码):

有一个全局结构体存在于进程内存 0x69D710 处:
  1. struct PLAYRANK {
  2.     int integer; // 整数部分
  3.     int max; // 整数部分上限值
  4.     int min; // 整数部分下限值
  5.     int decimal; // 小数部分
  6. }PlayRank;


通过简单地给 PlayRank.decimal 下断,可以看到增减 PlayRank 的 2 个主要函数。

增加 PlayRank:(0x41c57e)
  1. void IncPlayRank(int increment) {
  2.     PlayRank.decimal += increment;
  3.     while (PlayRank.decimal >= 100) {
  4.         PlayRank.integer++;
  5.         PlayRank.decimal -= 100;
  6.     }
  7.     if (PlayRank.integer > PlayRank.max)
  8.         PlayRank.integer = PlayRank.max;
  9. }


减少 PlayRank(0x41c5fa):
  1. void DecPlayRank(int decrement) {
  2.     PlayRank.decimal -= decrement;
  3.     while (PlayRank.decimal < 0) {
  4.         PlayRank.integer--;
  5.         PlayRank.decimal += 100;
  6.     }
  7.     if (PlayRank.integer < PlayRank.min)
  8.         PlayRank.integer = PlayRank.min;
  9. }


通过以上代码可以得出:
1. PlayRank 有小数部分。
2. 小数部分范围在 [0,99] 。
3. PlayRank 的整数部分有上限和下限。
4. 每次增加 PlayRank 后,会检查 PlayRank 的整数部分是否超过上限,超过则修正为上限(小数部分不作修正)。
5. 每次减少 PlayRank 后,会检查 PlayRank 整数部分是否小于下限,是则修正为下限(同样小数部分不作修正)。
另外,小数部分不会保存在录像文件中,因为每一关开始时必定被清零。

--------------------------------- 我是那啥的分割线 -----------------------------------

好了,那么我们来看看在游戏中有哪些要素会改变 PlayRank 吧。

注:以下提到的 PlayRank,都是包括小数部分的。
注2:所有难度正常的 PlayRank 初始值都是 16 (包括 practice start)。而最大值和最小值根据难度的不同而不同,具体参看本文末尾。

增加 PlayRank 的条件如下:
引用

帧数满足一定条件*+1
擦弹**+0.06
1UP+2
吃B道具+0.05
吃蓝点最大值+0.3
吃蓝点非最大值+0.03
吃小P***+0.01

注解:
*这里的“帧数”是一个计数器,每关开始时清零 。除 暂停、对话、BOSS战、以及 3、6、EX 关的 中BOSS战 外,每处理一帧都会自动加 1。加 1 后的程序代码中有这么一段(0x41156e,已简化):
  1.     if (f % (2400-p*240) == 0)
  2.         IncPlayRank(100);
  3.     // 其中f为帧数,p为残机数。

    比如说当前残机数为2(p=2),那么 2400-p*240 就是 1920,接着就是判断 f 除以 1920 的余数是否等于 0,也就是判断 f 是否是 1920 的倍数。如果是,立刻 PlayRank+1 。
    很容易看出,自机残机越多,PlayRank 升得也越快。

** 包括BOMB状态时的擦弹(不加 Graze)。

*** 吃 大P 貌似不加。


减少条件如下:
引用
道具掉出屏幕*-0.03
放 Bomb-2
Miss**-16


注解:
*包括所有能掉出屏幕的道具,与道具类型无关。

**不包括决死。决死B 与 普通B 一样都 -2 。


差不多就是这样吧……有什么问题可以跟帖讨论。    

另外,还做了一个在 HiScore 处显示 PlayRank 及之前所提到的“帧数”的补丁:
http://bbs.doujinstg.cn/read.php?tid=1610

最后,本人能力有限,文中错误之处在所难免,而且可能还有其他影响 PlayRank 的条件未被发现。欢迎各位 破解触、反汇编触 批评指正。        

PS:HMX 各难度 PlayRank 初始值、最大值、最小值。
引用

ENHLEX
初始1616161616
最大2032323218
最小1010101014
查看更多 本帖最近评分记录: 23 条评分 蓝点 +119 隐藏
m9xuan 蓝点 +10 2011-08-28 NB呀。。技术帝求交往
villarreal 蓝点 +2 2011-08-27 -
源之壬环 蓝点 +2 2011-08-27 技术流
loading 蓝点 +2 2011-08-27 碉堡
LMAX 蓝点 +3 2011-08-01 -
玉米龙 蓝点 +2 2011-07-29 难怪NOMISSNOB压力那么大
雪夜 蓝点 +1 2011-07-29 老师乃又威武了...
shana1224 蓝点 +3 2011-07-26 这帖有潜力成为同人嘉年华怪谈
风雨中的FXR 蓝点 +2 2011-07-25 这个必须...
slice 蓝点 +10 2011-07-24 这帖有潜力成为同人嘉年华怪谈
发帖
103
信仰
6
蓝点
462
符卡
0
只看该作者 29楼 发表于: 2013-10-10
引用
引用第28楼Kag于2013-10-05 18:59发表的  :
想来确认一下妖这个RANK增长机理是不是可以认为和你这篇对红分析的所涉及到的十分接近?


以前研究时的一些笔记:
------------------------------------------------------------------------------

增加:
条件和红魔乡一样,但是有些细节还是不一样的:
随时间增加:本作同样有一个计数器,每关开始时清零,随着游戏进程每过1帧画面该计数器自动加1。该计数器会影响 rank 的增加。
    但是和红魔乡不同的是,红魔乡在角色对话、3、6、EX 面的中BOSS 战以及所有关卡的 BOSS 战中该计数器会暂停增加;而妖妖梦中该计数器无论如何也不会暂停,即使是打完 BOSS 后(当然按ESC暂停游戏时除外)。
    除此之外,妖妖梦中该计数器影响 rank 增加的代码也和红魔乡类似,但稍有不同:
    如果计数器的值是 (2400-残机数*240) 的倍数,并且自机处于战斗状态中,rank  加 1 。
    前面算法部分是一样的,而后面又多了一个判断条件:必需是战斗状态中。战斗状态就是可以按Z攻击的状态。那么什么时候不能按Z攻击呢?大概就是角色对话和BOSS战结束(显示过关奖励画面)。也就是说当自机处于非战斗状态时如果计数器滚到了 (2400-残机数*240) 的某一个倍数, playrank 就不会增加(当然之后也不会补加)。

吃蓝点:稍有不同。吃最大值 +0.1(红魔乡 +0.3),吃非最大值 和红魔乡一样 +0.03 。
吃樱道具不影响rank,尽管吃吧。
开森罗姐姐也不影响,尽管开吧。

减少:
貌似和 红魔乡 完全一样。Miss -16, Bomb -2, 漏道具 -0.03 。
关于森罗姐姐,既然开不影响,自然破也不影响,包括按X主动破。
------------------------------------------------------------------------------

如果想观察变化细节的话,去问问那个写通用辅助工具的 linsk 肯不肯给妖妖梦也写一个右下角显示 rank 的功能吧。妖的 rank 地址是 0x62f8a4,一个结构体,和红魔乡一样 。帧计数器的地址是 0x62f898 。

本帖最近评分记录: 1 条评分 蓝点 +5 隐藏
Kag 蓝点 +5 2013-10-11 -
Kag
发帖
784
信仰
2
蓝点
395
符卡
0
只看该作者 28楼 发表于: 2013-10-05
最后这几个弱智回复怎么都是我233


引用
紅魔郷とは逆で、 ランクが高い方が弾数が多い 場合がほとんど。
ランク変動要素は非常に多く、
Ex霊符開幕2ボムのようなパターンは、ランク調整が必須技術になる。




翻某资料站时看到这么句话。
想来确认一下妖这个RANK增长机理是不是可以认为和你这篇对红分析的所涉及到的十分接近?








[ 此帖被Kag在2013-10-05 23:47重新编辑 ]
Kag
发帖
784
信仰
2
蓝点
395
符卡
0
只看该作者 27楼 发表于: 2011-08-28
回 27楼(wz520) 的帖子
因为不会想到能改playrank
...这个求不求呢?

还是直接在全关里练习吧.就算能改.我始终觉得心理因素影响比RANK更大.不过RANK更容易使自己心慌
发帖
103
信仰
6
蓝点
462
符卡
0
只看该作者 26楼 发表于: 2011-08-28
引用
引用第22楼Kag于2011-08-26 21:13发表的  :
对了想起VP有个功能是加弹速(FPS)的.
playrank=32时弹速比=16的时候快多少?
__也就是在VP ini文件里的GameFPS 这项在playrank=32时该增加多少?

想在单关练习中用VP实现对实战的一个方面的模拟.
.......


为什么要这么拐弯抹角?直接改 PlayRank 不是更好么?
发帖
40
信仰
0
蓝点
10
符卡
0
只看该作者 25楼 发表于: 2011-08-27
回 25楼(loading) 的帖子
当然没有
发帖
81
信仰
0
蓝点
35
符卡
0
只看该作者 24楼 发表于: 2011-08-27
rank对难度的影响没有一开始选择的难度的大吧?
人生励志第一……
Kag
发帖
784
信仰
2
蓝点
395
符卡
0
只看该作者 23楼 发表于: 2011-08-27
回 23楼(幻の上帝) 的帖子
我竟然忘了
发帖
68
信仰
2
蓝点
65
符卡
0
只看该作者 22楼 发表于: 2011-08-27
回 22楼(Kag) 的帖子
不考虑自机移动速度么。。
Kag
发帖
784
信仰
2
蓝点
395
符卡
0
只看该作者 21楼 发表于: 2011-08-26
对了想起VP有个功能是加弹速(FPS)的.
playrank=32时弹速比=16的时候快多少?
__也就是在VP ini文件里的GameFPS 这项在playrank=32时该增加多少?

想在单关练习中用VP实现对实战的一个方面的模拟.



虽然密度倒还是无法模仿

描述
快速回复

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码: