Build cecf7c5

《绿宝石》野生生成方式中的队首影响

Last updated: 2026-03-18 UTC
核心要点: 解释为何队首影响会触发不同类型的野生生成方式

前置条件

确认已经阅读过 生成方式1-4VBlanks

遭遇野生宝可梦(简略版)

以下是遭遇野生宝可梦时所执行代码的简化实例:
步骤周期总周期
1- 更新音频&画面+ 50K50K
2- 杂项更新+ 5K55K
3- 准备遭遇野生宝可梦+ 15K-115K70K-170K
4- 生成有效 PID+ 10K80K-180K
5- 生成无个体值的宝可梦+ 115K195K-295K
6- 生成防御、攻击、HP的个体值+ 1K196K-296K
7- 赋值防御、攻击、HP的个体值+ 39K235K-335K
8- 生成特防、特攻、速度的个体值+ 1K236K-336K
9- 赋值特防、特攻、速度的个体值+ 39K275K-375K
注意:当周期数到达280K时,会触发一次VBlank。如果VBlank发生在步骤"5- 生成无个体值的宝可梦"的总周期内,会触发Wild-2生成方式。VBlank发生在步骤"7- 赋值防御、攻击、HP的个体值"的总周期内,会触发Wild-4生成方式。VBlank发生在这之后或没有触发VBlank,则会触发Wild-1生成方式。 在步骤"3- 准备遭遇野生宝可梦"的过程中,代码会多次读取队首宝可梦的特性, 这一过程所消耗的周期数会随队首宝可梦的不同而变化。 因此通过挑选特定队首宝可梦,我们可以控制最终触发哪一种野生生成方式。
步骤最快队首
Wild-1
较快的队首
Wild-4
较慢的队首
Wild-2
1- 更新音频&画面50K50K50K
2- 杂项更新55K55K100K
3- 准备遭遇野生宝可梦70K (最快)120K (较快)170K (较慢)
4- 生成有效 PID80K130K180K
5- 生成无个体值的宝可梦195K245K295K (VBlank)
6- 生成防御、攻击、HP的个体值196K246K...
7- 赋值防御、攻击、HP的个体值235K285K (VBlank)...
8- 赋值特防、特攻、速度的个体值236K .........

判断队首宝可梦是慢速型还是快速型

有两个因素决定队首宝可梦是快速型还是慢速型:
  • 是否是一颗蛋
  • 宝可梦的PID
如果队首是蛋,游戏会跳过大量宝可梦的生成逻辑,从而节省大量周期。且蛋的PID不会产生任何影响。 如果队首不是蛋,代码会对其PID执行取模运算来获取它的特性。该取模运算所消耗的周期数取决于PID的数值。
  • 当队首宝可梦的PID小于25时,取模运算最快,仅需18个周期。
  • 最慢则需要900个周期(如:PID为59999995时)。
  • 平均消耗为775个周期。
一次普通的野生遭遇战会触发80次取模运算。
  • 最快与最慢的队首PID之间,总周期差约为71K周期。
  • 蛋与最慢的队首PID之间,总周期差约为100K周期。
正是这种巨大的周期差,让我们可以通过队首宝可梦来控制触发哪一种野生生成方式。
队首PID速度计算器

遭遇野生宝可梦(完整版)

是实际中,野生遭遇战的逻辑比上面的简化版更复杂,因为大部分步骤消耗的周期数都不固定。 好在大多数情况下,每一步所消耗的周期数都是可与计算的。
步骤周期类型取决于
1- 更新音频&画面45K-65K无法预测音频帧数
2- 杂项更新5K可预计算-
3- 准备遭遇野生宝可梦15K-115K可控队首
4- 生成有效 PID1K-1000K可预计算RNG状态 (# roll PID的次数)
5- 生成无个体值的宝可梦36K-125K可预计算生成的宝可梦PID
6- 生成防御、攻击、HP的个体值1K可预计算-
7- 赋值防御、攻击、HP的个体值11K-43K可预计算生成的宝可梦PID
8- 赋值特防、特攻、速度的个体值1K可预计算-
9- 赋值特防、特攻、速度的个体值无关紧要
波动最大的步骤是"4- 生成有效 PID"。在该步骤中,游戏会先生成一个随机性格,然后不断生成PID,直到其匹配所需性格。某些情况下,这会需要大量多次重新生成PID。如果队首宝可梦是迷人之躯特性,那么生成的PID还必须匹配所需性别,会导致重新生成PID的次数进一步增加。 如果该步骤消耗过多周期(如:150K周期),那么即便使用最快的队首宝可梦,也可能无法触发Wild-1。使用快速型队首宝可梦只会提高触发Wild-1的概率。同理,如果该步骤过快(如:1K周期),那么即便用最慢的队首宝可梦,也可能无法触发Wild-2。 步骤"1- 更新音频&画面"所消耗的周期取决于音频帧数,而音频帧数又取决于存档文件的加载帧以及其他因素。在实机上无法预测,且每次乱数操作尝试的结果都会不同。

当VBlank生成有效PID时

若在步骤"4- 生成有效 PID"期间触发VBlank,将会触发Wild-3或Wild-5生成方式。这些生成方式将在下一篇文章中讲解。

特别鸣谢

  • RainingChain for the article.
  • mGBA team for providing the emulator for cycle research.
  • pret team for providing the decompil projects.
  • El Terapagos Mexicano for the Spanish translation.
  • 中文翻译:白希洛/Hakuhiro