首页
/ PKHeX项目中的Gen4 HGSS狩猎地带与口袋计步器合法性检查问题解析

PKHeX项目中的Gen4 HGSS狩猎地带与口袋计步器合法性检查问题解析

2025-06-16 19:11:12作者:昌雅子Ethen

背景介绍

在Pokémon游戏数据管理工具PKHeX中,近期发现了一个关于第四世代《心金/魂银》(HGSS)版本中狩猎地带(Safari Zone)和口袋计步器(Pokewalker)获取的宝可梦合法性检查存在误判的问题。这个问题主要影响了通过特定RNG(随机数生成)操作获得的宝可梦的合法性验证。

问题现象

用户报告了三种被错误标记为不合法的宝可梦案例:

  1. 狩猎地带获取的Rhydon:通过RNG操作在具有可爱魅力特性(Cute Charm Glitch)的存档中获得,被错误标记为非法
  2. 口袋计步器获取的Magby和Cleffa:同样通过RNG操作获得,被错误标记为非法
  3. 随机从口袋计步器获取的Magby:非RNG操作获得,但仍被错误标记为非法

技术分析

狩猎地带问题

PKHeX的数据库中缺少Rhydon在狩猎地带第5槽位的遭遇记录,只有Rhyhorn的记录。这导致当游戏实际生成Rhydon时,合法性检查无法找到匹配的遭遇记录而误判为非法。

口袋计步器问题

PKHeX对口袋计步器宝可梦的合法性检查存在多个问题:

  1. 初始种子生成逻辑:代码中描述的初始种子生成条件与实际游戏逻辑相反。正确的逻辑应该是:

    • 当玩家开始漫步(stroll)时,基于当天经过的秒数(<86400)生成初始种子
    • 否则,基于启动时的日期和时间生成初始种子(类似于Gen4的初始种子生成方式)
  2. 漫步相关RNG机制

    • 开始漫步后,游戏会生成3只宝可梦供遇见,这些结果与关联性无关
    • 漫步会导致3次RNG推进,初始种子[漫步]可以推进3+(2n)次,或[非漫步]推进0+(2n)次
  3. 遭遇槽位顺序:PKHeX中存储的口袋计步器遭遇槽位顺序与游戏实际使用的顺序相反。游戏代码使用rand() & 1 == 0来选择索引,导致实际顺序与ROM/PKHeX中的顺序相反。

  4. 合法性检查过度严格:代码不必要地检查了漫步生成的槽位是否匹配,而实际上这种检查对于合法性验证是不必要的。

解决方案

开发者对PKHeX进行了以下修正:

  1. 移除不必要的遭遇槽位检查:不再检查漫步生成的宝可梦是否匹配特定槽位
  2. 修正初始种子生成逻辑:确保与游戏实际行为一致
  3. 改进RNG种子显示:现在会显示IVs的RNG种子以及种子类型和之前需要捕获的宝可梦数量

技术细节补充

口袋计步器宝可梦的生成涉及复杂的RNG机制:

  1. 种子生成

    • 漫步种子:3600 * 小时 + 60 * 分钟 + 秒
    • 非漫步种子:(((月*日 + 分钟 + 秒) & 0xff) << 24) | (小时 << 16) | (年)
  2. RNG推进

    • 漫步种子在奇数次推进时使用(3,5,7,9,...)
    • 非漫步种子在偶数次推进时使用
  3. IV生成:游戏通过调用rand()两次来生成每只宝可梦的IVs

区域限制说明

值得注意的是,口袋计步器课程本身可能有区域限制,但宝可梦的接收没有区域限制。玩家可以从不同区域的游戏链接的口袋计步器接收宝可梦,这使得区域检查在合法性验证中不必要。

结论

通过对PKHeX中Gen4 HGSS狩猎地带和口袋计步器合法性检查逻辑的修正,现在能够正确识别通过RNG操作合法获得的宝可梦。这一改进不仅解决了误报问题,还通过显示更多RNG相关信息提高了工具的透明度和实用性。

登录后查看全文
热门项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
165
2.05 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
954
563
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
60
16
apintoapinto
基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
Go
22
0
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
17
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
408
387
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
77
71
rainbondrainbond
无需学习 Kubernetes 的容器平台,在 Kubernetes 上构建、部署、组装和管理应用,无需 K8s 专业知识,全流程图形化管理
Go
14
1