1 个不稳定版本
0.1.0 | 2024 年 4 月 17 日 |
---|
在 游戏 中排名 #212
27KB
633 行
masuda 
Masuda Junichi 是一位日本电子游戏作曲家、导演、设计师、制作人、歌手、程序员和低音号手,因其在宝可梦系列中的工作而闻名。他是 Game Freak 董事会成员,自 1989 年他与 Satoshi Tajiri 和 Ken Sugimori 一起创立公司以来一直在该公司工作。
概述
在宝可梦游戏中,许多游戏交互都是由伪随机数生成器(pRNG)的输出决定的。例如,当玩家遇到宝可梦时,其状态由 pRNG 的状态决定。
在第三代游戏(R/S/E/Fr/Lg)中,游戏大约每秒显示 60 帧,pRNG 的状态据说每帧都会“进步”。这意味着如果玩家知道
- 传递给 pRNG 的初始种子
- pRNG 如何进步的机制
- 由 pRNG 输出的数字如何转换为宝可梦状态
那么用户可以找到一个会产生期望宝可梦的帧,等待期望帧出现之前的时间,然后遇到期望的宝可梦。
masuda 是一个用 Rust 编写的库,实现了宝可梦游戏中使用的随机数生成器的行为。具体来说,它提供了一个线性同余生成器的实现,该生成器产生伪随机数的序列。
使用
尝试运行示例以查看其效果
cargo run --example ten_frames
生成 10 帧,并显示这些帧上生成的宝可梦
cargo run --example is_shiny
对于给定的 tid/sid,在第一 100000 帧中查找闪亮帧并显示它们
此库的大多数使用方式可能如下所示
// create an searcher instance with game, method, and max frames
let mut searcher = Searcher::new(Game::Emerald, Method::One, 1000000);
// create a profile with a tid and an sid
let profile = Profile::new(10101, 12345);
// create a filter for the attributes you care about
// in this example, let's look for a 31/31/x/x/x/31 Jolly spread
let filter = Filter::new(&profile)
.with_stat(StatFilter::HP(StatComparison::EqualTo(31)))
.with_stat(StatFilter::Attack(StatComparison::EqualTo(31)))
.with_stat(StatFilter::Speed(StatComparison::EqualTo(31)))
.with_nature(Nature::Jolly);
for result in searcher.search(Some(Filter)) {
println("{:?}", result);
}