Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

 找回密码
 加入口袋中心
搜索
查看: 345|回复: 5

【GBA自制软件】宝可梦跨代传宠工具《Pokémover for gba》发布

[复制链接]

13

回帖

338

现金

3

勋章券

繁华都市的喧闹

Rank: 5Rank: 5Rank: 5

积分
187
发表于 6 天前 | 显示全部楼层 |阅读模式
本帖最后由 卧看微尘 于 2024-6-8 12:29 编辑

主logo.png
前言:
本工具是第二世代到第三世代的跨代传宠用GBA自制软件。
众所周知,宝可梦在第三世代断代了,
但近几年国外社区已有一些解决方案,可以实现跨代传宠。
本工具的开发也是受到国外已有成果的启发,
他们实现了类似第二世代跟第一世代互相交换的时光胶囊的效果,
能够让第二世代跟第三世代的宝可梦进行双向交换,
但因为第二世代跟第三世代的数据结构有很大的差异,
这样的双向交换会使得第三世代的宝可梦的数据大量丢失,
而且这种方法不能直接传盒子中的宝可梦。

为了解决这个问题,我们采用了不一样的技术路线开发了《Pokémover for gba》,
实现了单向传输,并且能够对整个盒子的宝可梦进行操作,使用体验上更接近官方软件。
另外,因为三代的数据结构与二代有很大的差异,我们在想办法转换这些数据的同时,
也尽可能确保传过来的宝可梦在三代游戏中的合法性。
最终,经过我们的努力,可以确保传过来的宝可梦能够通过pkhex的检测,
具体做了哪些方面的处理,后文会详细解释。


大致原理:
本工具的原理是使用一台gba主机读取gba宝可梦系列的存档,
然后通过gb(c)连接线连接另外一台作为副机的gb/gbc/gba,
利用连接线发送传输工具至副机,
在副机上读取金银水晶的存档,然后将盒子中的宝可梦传到主机中。
注意,GBA连接线不可用,请使用如图所示右侧的gb(c)连接线
如连接线使用错误,则本程序所有连接均无法正常运行。
gb-gba link new.jpg
为了顺利发送传输工具,
副机为gba时,利用了multiboot,以及切换至gb模式的隐藏特性,
副机为gb/gbc时,利用漏洞实现了远程代码执行,然后再发送传输工具
(其中水晶版利用了速通社区发现的漏洞,原定在儿童节前后发布的v1.0,只包括了水晶版的漏洞利用,
但在v1.0发布前夕我们发现了金银中新的漏洞利用方式,故而推迟了发布)


兼容性:
主机:gba/gbasp/ngc的gbplayer
副机:gba/gbasp/gbc/gb/sfc的sgb2(其中gb/sgb2未测试,理论可行)
软件:gba宝可梦正作(含所有官方语言以及群星sp汉化的火叶绿宝石)
gb(c)的宝可梦金银水晶(含所有官方语言、Tom_C基于韩版汉化的金银以及CKN/DMG/口袋群星SP联合汉化的水晶版)
另外,本工具除了支持gba官方的Flash 1M存档外,还能识别非官方的SRAM 1M存档。

我们还测试了Analogue Pocket的兼容性,
由于ap既可以支持卡带模式运行(等同于一台gba实机),
也可以通过openfpga模式第三方内核读取sd卡内的rom运行,故分为两种情况进行介绍。
卡带模式:
在ap作为主机,另一台gba/gbc作为副机的情况下,本工具能正常使用。
在gba作为主机,ap作为副机的情况下,multiboot法无效,漏洞法可以使用。
openfpga模式:
在ap作为主机,另一台gba/gbc作为副机的情况下,本工具无法使用,
这是由于openfpga模式的第三方内核目前不支持读取ap卡槽内的3代卡带导致。(本程序集成在3代汉化中的情况时,
可以正常使用,可直接读取对应3代存档)。
在gba作为主机,ap作为副机的情况下,multiboot法无效,漏洞法可以使用
(截止至本工具v1.1发布,openfpga模式现有第三方gb/gbc内核中,Spiritualized v1.3.0可以较为稳定使用漏洞法,而budude2 v1.2.1对漏洞法的支持极不稳定。故建议使用Spiritualized内核进行连接。)。
兼容性.png
发送传输工具的方法有2种
1.multiboot法:
此法适用于2台gba之间进行连接的情况,gba上所谓的单卡联机也是靠multiboot实现的
2台GBA之间同样也可以使用下文提到的漏洞法,我们也更建议使用漏洞法
2.漏洞法:
此法适用于1台gba跟1台gb/gbc进行连接的情况
漏洞法支持大部分语言版本的金银,以及全部语言版本的水晶版不受支持的是D商汉化的金银
基于韩语版汉化的金银,在工具内选择语言的时候请选择韩语版
水晶版汉化请注意区分原始版本是日语版还是国际版,
如果用联合汉化的水晶汉化版来触发漏洞,请选择国际版
如果要用D商汉化的水晶版来触发漏洞,因为D商汉化的水晶基于日版制作,
请在工具内选择日语版,sss888修正过的D商汉化版也是同理。
(但是本工具不支持d商汉化的汉字编码,建议仅作触发漏洞用)
具体的操作步骤在工具内会有详细的说明,请在工具内查看。
【具体传送的操作演示,可见视频:https://www.bilibili.com/video/BV1jS411N7Kh/


合法性:
为了确保数据的合法性,我们做了如下方面的处理,经过了如下处理之后,能够通过pkhex等工具的合法性验证
名字的处理:
昵称跟初训家名字中只能使用gen3中可用的取名字符
像部分gen2中可用的括号等字符,在gen3的取名中不可用,这种字符就会被转换。
同时支持转码汉化版的汉字字符,受支持的汉化版为Tom_C基于韩版制作的新金银汉化,
以及联合汉化的新水晶版汉化,但除了本工具,只有口袋群星sp的火叶绿宝石汉化版
才能正常查看汉字字符(金银汉化有部分非gb2312汉字视情况转换成近似汉字或转为问号)
注意,韩文原版金银会被当作汉化版处理,
韩文字符编码也会被强制当作中文编码处理

并且韩文原版以及汉化能够使用10个字节的玩家名字,而非三代的7个字节,
所以传输完成后,初训家名字长度超过7个字节的话,将被截断。
比如4个汉字占8个字节,会截断为3个汉字,也就是6个字节。
对于梦幻,因为只有日版绿宝石存在可能的合法入手渠道,
所以还会将名字进一步调整到符合日版的格式(长度最长为5个字节,
5个日语版可用取名字符,汉字在内的双字节字符会转为问号)
对于时拉比,只有日版圆形竞技场特典光盘里的那只是合法的,
昵称、初训家名字以及id会完全改成这只的,
并且由于不能是闪光的,本工具无法传输闪光时拉比

初训家id:
除时拉比外,表id直接继承,因为gen2没有里id,传过来之后里id在大多数情况下设为0

相遇:
蛋生宝可梦都将以从蛋中孵化作为相遇的方式,相遇地点则是当前记录保存的地点
对于百变怪、未知图腾、神兽等非蛋生宝可梦,
为了确保合法性,捕捉地点也会调整到三代游戏中相应的地点。
炎帝、雷公、水君因为火叶的bug,个体值好几项为0,
因此相遇地点放在了圆形竞技场中

pid:
pid跟性格、性别、闪光、未知图腾形态等相关,
除此之外,非蛋生宝可梦的个体值也跟生成pid的随机数有关。
本工具会根据性格、是否闪光、性别(如果存在性别差异)、
未知图腾形态(如果有)生成pid,实现了2套pid算法,
一套gba一套圆形竞技场,视情况选择
对于闪光宝可梦,因为要生成同时满足性格、性别、闪光要求的pid
要更久的时间,平均每只多花大概1秒的时间(30只闪光可能要多花30秒),请耐心等待。

对于闪光未知图腾,为了减少pid的计算量,会专门修改里id,其余情况里id均为0
非蛋生宝可梦的个体值也由生成pid相关的随机数决定

等级:
由于蛋生宝可梦的相遇方式都设成了从蛋中孵化,
因此某些低于进化等级的宝可梦的等级将会被提升
如金银15级的臭臭花,在传过来之后,会提升到21级。
对于非蛋生的宝可梦,也会提升到最低的可能相遇等级,
比如40级的凤王会一下子升到70级(肚脐岩那只凤王的等级)

个体值:
蛋生宝可梦的个体值=原始个体值x2,
然后再根据觉醒力量的属性,再决定是否+1,
如果觉醒力量为恶属性,则全部在x2的基础上+1,
非蛋生宝可梦,个体值来自与pid相关的随机数

努力值:
因为gen3的努力值有累计上限,故全部清空

性格:
由经验值除以25的余数决定,然后pid会生成符合条件的

特性:
官方软件会统一使用梦特,但gen3没有梦特,所以特性由pid的奇偶随机决定

招式的处理:
所学招式必须是三代能合法习得的招式,对于三代中无法合法习得的招式,会被删除掉。
蛋招式方面,因为xy之前只能从父方遗传招式,某些蛋招式不可能共存,
本工具会判断能否共存,对于不能共存的组合,将删除掉不能共存的招式(这点比当前的pkhex还严格)
此外,对于只能通过升级才能学会的招式,会判断它在gen3的学习等级,
比如洛奇亚的气旋攻击在gen3中的学习等级与金银水晶不同,
要到77级才能学会,传来的洛奇亚如果低于该等级,将遗忘掉这个招式。

无法传输的宝可梦:
携带道具的宝可梦

闪光时拉比
掌握了秘传学习器招式的宝可梦


开发团队:
程序:enler
协力、测试:卧看微尘
美术:crossztc
测试存档提供:海のLUGIA、Tom_C

以下是开发过程中参考的来自海外社区的成果
Goppier:基于自制连接线转接器实现了世界首个跨世代交换方案(硬件解决方案)
Lorenzooone:基于通信协议模拟实现的纯软件跨世代交换工具Gen3-to-Gen-X的开发者(通信协议模拟方案)
AntonioND:gba的gb模式的相关研究
pret:宝可梦游戏反编译工程
pkhex:知名的宝可梦存档修改器
pokefinder:宝可梦乱数工具
luckytyphlosion:宝可梦水晶版任意代码执行漏洞的发现者
(漏洞也被用于水晶版邪道速通,老实说这个漏洞也是我们在查阅速通的资料中了解到的)


下载地址:
链接:https://pan.baidu.com/s/1Hdn-K06jueJXKNmVBlta2Q
提取码:MOVE
其中附上了我们开发过程中修改过的mGBA模拟器,可以进行测试

评分

参与人数 1积分 +50 现金 +100 收起 理由
jiangzhengwenjz + 50 + 100

查看全部评分

回复

使用道具 举报

2万

回帖

13万

现金

348

勋章券

管理员

起源の钻角犀兽

Rank: 27Rank: 27Rank: 27

积分
51670

Missingno论坛十周年纪念物挥金如土勋章Lv3水中王者勋章Lv3时光印记Lv.3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章

发表于 6 天前 | 显示全部楼层
膜拜卧老师
啊咧咧,又挖坑不填哎╮(╯▽╰)╭

告别真新镇后不知经过多久,擦伤,砍伤,朋友的数目,让我有点自豪,那时候因为流行而跑去买的,这双轻便的运动鞋,现在成了,找遍全世界也找不到的,最棒的破鞋子……
口袋中心·绿宝石·改(更新1.6.4版)
【口袋中心出品】魂银·壹式改点壹(全493)    【科普向】魂银中少有人注意到的洛奇亚传说故事
宝可梦卡牌 / 限定精灵图示    好吧,这是官方微博-_-    好吧,这是我的微博-_-
我的B站号    美术作品之我的宝可梦人设画    个人制作的FC魂斗罗2代hack版
回复 支持 反对

使用道具 举报

13

回帖

338

现金

3

勋章券

繁华都市的喧闹

Rank: 5Rank: 5Rank: 5

积分
187
 楼主| 发表于 6 天前 | 显示全部楼层

还得是enler大佬才是真神
回复 支持 反对

使用道具 举报

3

回帖

1302

现金

66

勋章券

新伙伴的欢笑

Rank: 3

积分
87
发表于 6 天前 | 显示全部楼层
说一点技术细节,所有能复用的资源尽量用rom里的了,比如pm图标、箱子壁纸啥的
整个程序有一半的数据都是中文字库,包括了gen3汉化用的全部6000多个汉字字符
multiboot法利用了gba的gb模式,这个模式很特殊,极度缺乏资料,很多东西都是我们一点点试出来的,比如插入卡带前WRAM是不能用的,
代码只能跑在VRAM跟仅有128字节的HRAM上,而且GB的VRAM在LCD启用的情况下,存在访问限制,无法让CPU一直执行代码,
所以在插入卡带前,核心逻辑主要跑在HRAM上
引入漏洞法是因为gb跟gbc这种古早机器没有multiboot、download play这种机制,我只能想办法用漏洞黑进去
我平常有看各种速通的习惯,所以一开始就在速通社区里寻找有没有合适的漏洞,
水晶版有个5分钟的邪道速通引起了我的注意,然后搜索发现有人利用这个漏洞实现了远程代码执行,只不过是用于恶作剧,见此处(https://www.youtube.com/watch?v=exbS3yO45k0
从最后的效果来看,漏洞法整个的感觉就像:主角进入了联机房间、打开了联机机器、卡住然后失去了意识、最后盒子里的宝可梦都去另外的世界了

评分

参与人数 2积分 +81 勋章券 +66 现金 +96 收起 理由
海のLUGIA + 66 + 66 + 66
jiangzhengwenjz + 15 + 30

查看全部评分

回复 支持 反对

使用道具 举报

282

回帖

1870

现金

62

勋章券

碧蓝大海飞溅的水滴

Rank: 9

积分
825
QQ

时光印记Lv.1水中王者勋章Lv1


大剑鬼 Lv:36
发表于 3 天前 | 显示全部楼层
卧槽2024年我看到了什么东西?
有事找我请微博联系(如果没被夹的话)
名字跟论坛一致
Ps. 不必关注微博
回复 支持 反对

使用道具 举报

1

回帖

4

现金

0

勋章券

踏往他乡的期盼

Rank: 1

积分
2
发表于 3 天前 | 显示全部楼层
可以和插了gba卡带的nds传输吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-6-14 03:46 , Processed in 0.116672 second(s), 56 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表