口袋吧互动社区

 找回密码
 注册加入口袋吧

QQ登录

只需一步,快速开始

扫一扫,访问微社区

通关攻略
ORAS图文攻略一周目/ 二周目
XY图文攻略一周目/ 二周目
黑2白2图文攻略一周目/ 二周目
黑白图文攻略一周目/ 二周目
心金魂银图文攻略一周目/ 二周目
白金图文攻略一周目/ 二周目/ 珍珠钻石图文攻略
绿宝石流程攻略/ 火红叶绿通关攻略/ 红蓝宝石剧情攻略
时暗探险队完美攻略/ 赤青救助攻略
游戏ROM火热下载:
口袋妖怪黑2中文版/ 口袋妖怪白2中文版
口袋妖怪黑(中文)/ 口袋妖怪白(中文)
心金(中文)/ 魂银(中文) /白金(中文)
绿宝石386中文版/ 火红完美中文版
NDS模拟器/ GBA模拟器中文版
游戏精华资料库
OR/AS
X/Y
黑白2/ 黑白
心金魂银/ 白金/ 珍珠钻石
绿宝石/ 红蓝宝石/ 火红叶绿/ 金银水晶
口袋×信长/ 护林员/ 玛古纳之门/ 空时暗探险队/ 赤青救助队
PBO战报/ 战术研究文
口袋图鉴手机版:www.koudai8.com/pmdex/m
查看: 5358|回复: 1

[火红叶绿] [备忘note] FR/LG initial seed 生成机制探究

[复制链接]
发表于 2017-3-30 01:21 | 显示全部楼层 |阅读模式
本帖最后由 shankenew 于 2017-3-30 01:27 编辑

FR/LG的seed的不可控性,已经成为了基本共识。我零零碎碎搜集到一点资料,在bbs上留个备忘录,也可供需要的人参考。

1. FR/LG的initial seed具有时钟相关性,也就是和玩家在标题画面操作的按键时机有关。

2. 目前看来,1并不是完全决定性的,我发现存档情况(有无存档,乃至不同游戏进度的存档),都对seed的产生有影响,不过这个影响相对细微,经试验一般在正负5以内波动
    我的试验方法是,读档,在游戏内走一步(或遇敌),存档,再测量,seed的结果都有10以内的微小偏差。

3. seed的数值的决定方式已经完全被我确认——内存0x04000104是在第一次按下A之后开始启动的一个随时间流逝均匀增长的计数器(超过4位的部分自动被截去),计数器的初始值和游戏版本相关,游戏内每经过一帧,该计数器增加 约 0x4940
    (经过一定量的试验,发现增量在 0x4940波动,误差非常小,经常只有正负1),当第二次在标题画面按下start的时候,时钟停止,该值减去 0x0037 作为 initial seed。

计数初始值,游戏版本相关性:
0x7CAC LF (u)/ FR (j)
0x7CBD FR (u) / LF(j)
* 相当奇怪,看来美版的ROM是基于日版的相对版本改的。这一结论相当可靠,我拿FR的汉化验证性的测试了一遍,发现初始值是0x7CAC,和我已知的汉化是由日版改过来的信息吻合。

暂时的结论和留待未来讨论测试的:

1.FR/LG的seed,现在虽然还做不到完全精确的控制,但是看来模糊的控制,一定误差范围内的控制,是相当靠谱的。
   可以根据每帧的增量估计得到目标seed需要等待的时间,虽然结果可能有些许偏差,但是有概率可以通过在游戏内走动遇敌再存档的手段进行微调。
2.GBA的帧率不是准确的60,据相关资料记载是59.7275
3.增量的浮动可能和帧率和最小时间单位的不完全重合有关,所以可能导致1帧消费的增量有稍微的偏差。不确定这点模拟器和GBA有没有区别,也确实没什么验证的手段。
4.存档影响seed的机制留待讨论。暂时猜测为存档的细微差别影响了读档时候的载入时间,进而影响了计时器的结果。目前看来影响也的确是细微的,应该不是那种蝴蝶效应模式的影响。

附:试验环境

模拟器版本:
VBA-rr-v24m-svn480-LRC3A

用来在精准的特定时机按键的lua脚本:
lua_script

希望感兴趣的读者换个模拟器做做试验,如果有什么新的发现,也可以在楼里回复。

回复

使用道具 举报

 楼主| 发表于 2017-3-30 14:53 | 显示全部楼层
最新进展:

1.计数器的初始值并非固定,看来是由delay1决定的,每次都需要测定。

2.坏消息,计数器的增长速度和CPU主频同数量级,大概每秒增长十万多,而模拟器即使借助脚本,可控的最小单位也只是单帧,这会导致计数器的浮动可以高达2000上下。的确计数器在绝大部分时间段都是均匀增长的(主要是因为模拟器的每一帧时间都是几乎绝对稳定),唯一的例外是,计时器停下的最后一帧,由于按键时机的细微差别,会导致计时器出现最多可达2000(十进制下)的偏差,这个偏差目前不可控制,因为lua script我还没有找到把按键时机控制到毫秒级别的函数(甚至毫秒级别也不够用,也会出现10数量级的偏差)。

3.本来如果seed可控的话,FR/LG将成为乱数的不二选择,但是目前看来只能做到在十进制2000左右误差的一个控制,遗憾。

3.所以比较终极的结论是,这个seed想要完全控制,几乎是不可能的,但是先测量一次,再通过复现的办法是百分之百可以预测的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册加入口袋吧

本版积分规则

QQ|小黑屋|手机版|Archiver|口袋吧 ( 京ICP备05002314|京公网安备11010602010112 )

GMT+8, 2021-4-18 20:04

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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