PKHeX项目中的Gen4 HGSS狩猎地带与口袋计步器合法性检查问题解析
2025-06-16 15:25:39作者:昌雅子Ethen
背景介绍
在Pokémon游戏数据管理工具PKHeX中,近期发现了一个关于第四世代《心金/魂银》(HGSS)版本中狩猎地带(Safari Zone)和口袋计步器(Pokewalker)获取的宝可梦合法性检查存在误判的问题。这个问题主要影响了通过特定RNG(随机数生成)操作获得的宝可梦的合法性验证。
问题现象
用户报告了三种被错误标记为不合法的宝可梦案例:
- 狩猎地带获取的Rhydon:通过RNG操作在具有可爱魅力特性(Cute Charm Glitch)的存档中获得,被错误标记为非法
- 口袋计步器获取的Magby和Cleffa:同样通过RNG操作获得,被错误标记为非法
- 随机从口袋计步器获取的Magby:非RNG操作获得,但仍被错误标记为非法
技术分析
狩猎地带问题
PKHeX的数据库中缺少Rhydon在狩猎地带第5槽位的遭遇记录,只有Rhyhorn的记录。这导致当游戏实际生成Rhydon时,合法性检查无法找到匹配的遭遇记录而误判为非法。
口袋计步器问题
PKHeX对口袋计步器宝可梦的合法性检查存在多个问题:
-
初始种子生成逻辑:代码中描述的初始种子生成条件与实际游戏逻辑相反。正确的逻辑应该是:
- 当玩家开始漫步(stroll)时,基于当天经过的秒数(<86400)生成初始种子
- 否则,基于启动时的日期和时间生成初始种子(类似于Gen4的初始种子生成方式)
-
漫步相关RNG机制:
- 开始漫步后,游戏会生成3只宝可梦供遇见,这些结果与关联性无关
- 漫步会导致3次RNG推进,初始种子[漫步]可以推进3+(2n)次,或[非漫步]推进0+(2n)次
-
遭遇槽位顺序:PKHeX中存储的口袋计步器遭遇槽位顺序与游戏实际使用的顺序相反。游戏代码使用
rand() & 1 == 0来选择索引,导致实际顺序与ROM/PKHeX中的顺序相反。 -
合法性检查过度严格:代码不必要地检查了漫步生成的槽位是否匹配,而实际上这种检查对于合法性验证是不必要的。
解决方案
开发者对PKHeX进行了以下修正:
- 移除不必要的遭遇槽位检查:不再检查漫步生成的宝可梦是否匹配特定槽位
- 修正初始种子生成逻辑:确保与游戏实际行为一致
- 改进RNG种子显示:现在会显示IVs的RNG种子以及种子类型和之前需要捕获的宝可梦数量
技术细节补充
口袋计步器宝可梦的生成涉及复杂的RNG机制:
-
种子生成:
- 漫步种子:3600 * 小时 + 60 * 分钟 + 秒
- 非漫步种子:(((月*日 + 分钟 + 秒) & 0xff) << 24) | (小时 << 16) | (年)
-
RNG推进:
- 漫步种子在奇数次推进时使用(3,5,7,9,...)
- 非漫步种子在偶数次推进时使用
-
IV生成:游戏通过调用rand()两次来生成每只宝可梦的IVs
区域限制说明
值得注意的是,口袋计步器课程本身可能有区域限制,但宝可梦的接收没有区域限制。玩家可以从不同区域的游戏链接的口袋计步器接收宝可梦,这使得区域检查在合法性验证中不必要。
结论
通过对PKHeX中Gen4 HGSS狩猎地带和口袋计步器合法性检查逻辑的修正,现在能够正确识别通过RNG操作合法获得的宝可梦。这一改进不仅解决了误报问题,还通过显示更多RNG相关信息提高了工具的透明度和实用性。
登录后查看全文
热门项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0191
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0117
Step-3.7-FlashStep-3.7-Flash是一个拥有 1980 亿参数的稀疏混合专家(MoE)视觉语言模型,由 1960 亿参数的语言主干网络和 18 亿参数的视觉编码器组合而成,具备原生图像理解能力。Python00
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
omega-aiOmega-AI:基于java打造的深度学习框架,帮助你快速搭建神经网络,实现模型推理与训练,引擎支持自动求导,多线程与GPU运算,GPU支持CUDA,CUDNN。Java04
llm-universe本项目是一个面向小白开发者的大模型应用开发教程,在线阅读地址:https://datawhalechina.github.io/llm-universe/Jupyter Notebook09
项目优选
收起
暂无描述
Dockerfile
764
4.97 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
857
1.92 K
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
680
1.33 K
Ascend Extension for PyTorch
Python
719
875
deepin linux kernel
C
32
16
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
456
438
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.08 K
1.1 K
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
150
252
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
303
117
昇腾LLM分布式训练框架
Python
178
220