#pokemon #numbers #generator #frame #stats #interaction #programmers

bin+lib masuda

使用 Rust 编写的 Pokemon 随机数生成功能

1 个不稳定版本

0.1.0 2024 年 4 月 17 日

游戏 中排名 #212

MIT 许可证

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);
}

无运行时依赖