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

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

【讨论】绿宝石解限721教程系列

[复制链接]

46

帖子

273

现金

0

勋章券

繁华都市的喧闹

Rank: 5Rank: 5Rank: 5

积分
182

时光印记Lv.1

发表于 2015-10-3 22:00:13 | 显示全部楼层 |阅读模式
本帖最后由 jiangzhengwenjz 于 2019-6-21 11:58 编辑

首先前言,解限可能会给你的rom带来无数的bug,甚至死机。还请提前备份

2019修正:by 口袋妖怪制作者

好的,依旧前言。解限确实是个很大的突破,在第三代平台上让精灵的数量不再是411只,但是随着解限,bug也造成的越多,所以要花更多的时间去修复,完善。这些下面会一一分析。当然,其实第三代的精灵并不止411,而是439,分别为386原精灵+25空位+27未知图腾+1蛋。25空位相信大家已经非常熟悉了,就不多做解释。而这27个未知图腾,为386中未知图腾 A形态以外的剩余27个,除了图片不同以外,其他完全相同,包括精灵编号。但是奇葩的是,老任放着25个原未知图腾的位置不用,反而去再建立一个空间来放这些是为什么我也不知道。在未知图腾的后面,还有一个彩蛋的图片。名字则是———这样的,作用未知(楼主懒得测)这没有什么用,保留就是。
而解限的突破,应该算是有很长一段时间了,貌似雷电在2013年就解限了龙鳞之怒,国外的,也是由原作者doesntknowhowtoplay
在火红上解限,随后才由Chaos Rush移植到了绿宝石之上,而最近老外论坛更新了一次sky high的分析帖

好了,废话完了,进入主题,这个教程首先需要基础如下
1:会winhex
2:至少有一段时间的改版时间
3:会点数据。
4:会编译asm(这个不是很重要,最后有段asm,我会把编译后的也贴上)

恩,差不多就这样,接下来工具

1:一个绿宝石ROM(最好是完全没改过的美版,或者纯汉化版,因为改动过大的rom可能会有些数据不同造成bug)
2:一个VBA模拟器
3:一个十六进制编辑器(推荐winhex)
4:程序型计算器
5:thumb编译工具(这个随便)
6:解限之后的乱七八糟的工具我就不说了,什么unlz、rv啥的


Step1:首先,我们在任意一处空位插入以下这段数据

  1. FF 23 1B 01 5B 18 98 88 00 28 09 D0 04 28
  2. 0A D0 0D 28 0C D0 0D 2D 1C DD 01 20 08 BC 98 46
  3. F0 BD C4 21 08 4A 06 E0 8E 21 89 00 07 4A 02 E0
  4. BA 21 09 01 06 4A 04 3B 18 68 10 60 04 3A 04 39
  5. 00 29 F8 D1 E7 E7 C0 46 C0 D8 03 02 F8 DA 03 02
  6. 98 E6 03 02 00 48 00 47 2D 2E 15 08 FF FF FF FF
  7. FF 27 3F 01 CF 19 F8 80 BE 88 00 2E 08 D0 04 2E
  8. 09 D0 0D 2E 0B D0 00 00 00 48 00 47 53 28 15 08
  9. C4 23 08 4A 06 E0 8E 23 9B 00 07 4A 02 E0 BA 23
  10. 1B 01 06 4A 04 3F 10 68 38 60 04 3A 04 3B 00 2B
  11. F8 D1 E9 E7 C0 D8 03 02 F8 DA 03 02 98 E6 03 02
复制代码
这是一段已经编译过的ASM源码。根据老外的资料,我个人的理解是,新建一个表。让捕捉/遇见的精灵寄存在这个表之中。也就是图鉴的作用。

接下来,我们让这串数据在游戏中发挥它的用途
0x152E98:00 48 00 47 [XX+1 XX XX 08]
0x15284E:38 47
0x15288C:[YY+61 YY YY 08]
0x0D9CC6:38 47
0x0D9D04:[YY YY YY 08]
0x0DA284:00 48 00 47 [XX XX XX 08]


注释 这里的XX+1 XX XX 08为地址偏移+1后的指针,例如01 00 00 00,+1后的指针则是01 00 00 09,+61则是 61 00 00 09



修改从0x5CDC00地址开始的数据为以下:

  1. 00 00 2C 0F 00 00 F0 0F F0 0F F0 0F E0 1F F0 0F D0 2F B8
  2. 0D 00 00 F0 0F F0 0F F0 0F E0 1F F0 0F D0 2F F0 0F C0 3F F0 0F B0 4F F0 0F
  3. A0 5F F0 0F 90 6F F0 0F 80 7F 50 04
复制代码
Step2:得到自由的flag,重定义flag,扩容图鉴


这一步就到了重点了,恩,重点,首先确定宠物数量,把它除以8,得到xx,换成十六进制数据,比如721除以8就是90,再换成16进制就是5A,这里需要用到程序员计算器
然后,你要知道0203D800这个内存它是完全没有用过的,然后把它+你的宠物数量,比如0203D800+5A=0203D85A


得到了两个地址:
遭遇flag内存:0203D800
捕捉flag内存:0203D85A
反写:
00 D8 03 02
5A D8 03 02

记住这个数值,接下来该修改数据了




C06EC: 遭遇flag
C06AC: 00 00
C06AE: 00 00
C0744: 捕捉flag
C06FE: 00 00
C0700: 00 00
C0702: 00 00
C0710: 15 E0
C0720: 0D E0
C07C8: 遭遇flag
C079E: 00 00
C07A0: 00 00
C07AC: 1C E0
C07F0: 捕捉flag
C07DA: 00 00
C07DC: 00 00


然后,我们需要计算一个新的地址,把捕捉flag地址再加一次,比如5A再加一次5A得到新的地址0203D8B4
反写得到:B4 D8 03 02
记住这个数值
843BC:新的flag
8439A:20 1C 00 00
843A0:XX 22XX为你的宠物数量/8
843A6:20 1C
843A8:YY 30 。这里不需要改,YY跟XX有可能是相同的,但是它没有。所以这里可以无视。不过我还是把他列出来了。
843AC:XX 22XX为你的宠物数量/8

Step的作用  让图鉴的原内存更换成新的,确保遭遇/捕捉时不会造成bug。将确切的精灵数量除以8之后转换为十六进制,这是老外的一个算法,但是经过测试之后,该算法最终的精灵数量有差距,不可能完美,当然,这并不影响游戏。我们可以用老任的数据设定来让显示的数量截止在你想要的数量内,例如493、649、721、或者其他更多的数量







Step3:重定义精灵数据


这里表格居多,还请有心理准备


宠物种族数据表:3203CC
2D10字节
每1C字节为一只精灵,至于编程方式,我就不说了,自己摸索摸索很快会知道。

蛋组:3203DD
有两个指针指向这儿,为了确保解限之后的精灵能够获得正确的蛋组,我们需要改变这两个指针,具体修改方法:在重定向种族数据表之后的第18(十进制)个字节就是新的位置,转换成指针之后,替换原指针。


升级技能表:32937C
670字节
这里为指针形式,重定向之后跟着改就好了,具体方法参照技能修改。




解限:
6B944:00 00 00 00 00 00


宠物正面图:30A18C DC0字节
宠物背面图:3028B8 DC0字节
这是宠物图片,指针形式。如果不会,回家自行狂补基础。

解限:
346D6:07 E0
34AC2:07 E0
34BFE:07 E0



普通色板:303678 DC0字节
闪光色板:304438 DC0字节
这是宠物图片的色板,如上

解限:
6E750:04 E0


宠物Y轴(我方):3021D8,6E0字节
宠物Y轴(敌方):300D38,6E0字节
高度:305DCC 19C字节

Y轴是什么呢,有的精灵素材可能会造成在战斗场地上不上很协调的那种例如这样图片的位置不对时,可以利用Y轴来调整,每只精灵4字节

Y轴

Y轴

至于高度就是这东西了

高度

高度
0没有影子,0以上都有影子,只限对手方,配合Y轴调整可完美调整



解限:
A5F82:03 E0
A5EB6:03 E0



小图标:57BCA8,6E0字节
图标色板:57C388,1B8字节
小图标,指针形式,每一只为1024字节,每一只有两帧。图标色板每只占用1字节。有0、1、2三种,代码分别为00、01、02,其他的会造成bug。修改时如果色板0不行就换1,1不行就换2,如果都不行,抱歉你的素材有问题。

解限:
D2E3A:01 E0
D2D20:00 00 00 00






Step4:图鉴




编号表:31DC82,336字节
两个字节一编号。反写 例:00 01编号为妙蛙种子,写入时应该为01 00 这样


图鉴信息:56B5B0,3060字节
每只精灵24字节(十六进制)原版只完善到第386只的信息,后面的要靠自己来了,详情可以看这贴http://tieba.baidu.com/p/3915771323



Step5:图鉴字节更改


C06FC: 11 48
C06AA: 10 48
C06BE: 3E E0
C07D8: 05 49
C079C: 0A 49
BB6AC: 00 20
6D42C: 00 00



如果你的宠物超过510
BC91A: 5D 21 C9 00


如果你的宠物没超过510
BC91A: XX 21 C9 00 XX为你的宠物数量/2


BB42C: 12 01
BD87C: 09 01
BD54C: 12 01
BD4B0: 09 01


BD5B8: 2D 01
BD082: 12 01
BD57E: 1B 01
BCF9E: 09 01


BCFBA: 09 01
BCFDC: 1B 01
BCFFE: 12 01
BD01A: 12 01
BB456: 12 01
BD3B8: 12 01


BD826: 09 01
BD844: 1B 01


BD02A: 12 01
BD044: 09 01
BD05E: 09 01


BBD8C: 12 01
BBDBA: 1B 01


BC42E: 1B 01


BB8CA: 09 01
BBABE: 12 01
BBBA8: 24 01
BBBD4: 12 01
BBF96: 09 01
BC140: 09 01
BC288: 1B 01
BC2B4: 12 01
BE892: 09 01


BC4CE: 1B 01
C1808: 12 01
C23F2: 1B 01





这里我跳过了老外的砍双帧,会单独列一楼讨论,我也没弄清楚



这段数据的作用,我不是很清楚,应该是修复了图鉴显示的问题,可直接修改。






Step6:字节大量更改


从偏移量0x00000000开始
搜索81 01 00 00替换E7 02 00 00
搜索9B 01 00 00替换0D 03 00 00


选块BB6AC-C5000


搜索06 00 00替换0D 00 00

另一种方法

  1. start = 0xBB6AC
  2. end = 0xC5000
  3. rom_path = "insert file path to GBA ROM here"
  4. search = "\x06\x00\x00"
  5. replace = "\x0D\x00\x00"
  6. with open(rom_path, "r+b") as rom:
  7.     rom.seek(start)
  8.     read = rom.read(end-start)
  9.     write = ""
  10.     start_search = 0
  11.     while True:
  12.         find = read.find(search, start_search)
  13.         if find == -1:
  14.             write += read[start_search:]
  15.             break
  16.         else:
  17.             write += read[start_search:find]+replace
  18.             start_search = (3+find)
  19.             print start_search, "|", find
  20.     rom.seek(start)
  21. rom.write(write)

复制代码
这里的作用,修改的图鉴显示的数量、精灵数量等等。



Step7:修复一些错误的字节


42730: 81 01
5DF10: 81 01
6F100: 81 01
A5EA4: 81 01


A35A2: 01 1C 11 E0


34A16: 07 E0


以下几处为个人找出的字节,不是非常确定


31E2EC: 9B 01
304354: 9B 01
304284:81 01
2D2CA1:81 01(修复了火焰拳重启的bug)

作用不解释,修复了前面的错误部分


Step8:修复BUG


把这段thumb源码编译到足够大的空位

  1. .text
  2. .align 2
  3. .thumb
  4. .thumb_func
  5. .global positionfix


  6. main:
  7. push {r0-r3}
  8. ldr r0, .FirstCheck
  9. ldrb r0, [r0]
  10. mov r1, #0xFF
  11. cmp r0, r1 /*compares .FirstCheck value to FF. If not, you're outside*/
  12. bne Outside
  13. b Inside


  14. Inside:
  15. ldr r0, .Counter1Inside
  16. ldrb r0, [r0]
  17. ldr r1, .Counter2Inside
  18. ldrb r1, [r1]
  19. cmp r0, r1
  20. bne next1
  21. b End


  22. next1:
  23. mov r2, #0x0
  24. ldr r3, .FinalPosInside
  25. strh r2, [r3]
  26. b End


  27. Outside:
  28. ldr r0, .Counter1Outside
  29. ldrb r0, [r0]
  30. ldr r1, .Counter2Outside
  31. ldrb r1, [r1]
  32. cmp r0, r1
  33. bne next2
  34. b End


  35. next2:
  36. mov r2, #0x0
  37. ldr r3, .FinalPosOutside
  38. strh r2, [r3]
  39. b End


  40. End:
  41. pop {r0-r3}
  42. ldr r0, .NextRoutine
  43. str r0, [r6]
  44. pop {r4-r7}
  45. pop {r0}
  46. bx r0




  47. .align
  48. .FirstCheck: .word 0x02000D1C
  49. .Counter1Inside: .word 0x02000F9E
  50. .Counter2Inside: .word 0x02000FA0
  51. .FinalPosInside: .word 0x02000F9A


  52. .Counter1Outside: .word 0x02000D22
  53. .Counter2Outside: .word 0x02000D24
  54. .FinalPosOutside: .word 0x02000D1E


  55. .NextRoutine: .word 0x080C1D39

复制代码
接着修改以下部分




BBD94: 0E 4A
BBDD0: 9C 0F 00 02
C1808: 12 01
C1814: 00 48 00 47
C1818: XX XX XX 08 (ASM地址+1)


编译后的源码
  1. 0F B4 11 48 00 78 FF 21 88 42 0B D1 FF E7 0F 48
  2. 00 78 0F 49 09 78 88 42 00 D1 0E E0 00 22 0D 4B
  3. 1A 80 0A E0 0C 48 00 78 0C 49 09 78 88 42 00 D1
  4. 03 E0 00 22 0A 4B 1A 80 FF E7 0F BC 09 48 30 60
  5. F0 BC 01 BC 00 47 C0 46 1C 0D 00 02 9E 0F 00 02
  6. A0 0F 00 02 9A 0F 00 02 22 0D 00 02 24 0D 00 02
  7. 1E 0D 00 02 39 1D 0C 08
复制代码
由于ASM领域我暂未接触,也不知道这段源码的作用。



至此,教程结束,以下几张为测试图

测试

测试

测试

测试

测试

测试




By:EVE
数据提供:Chaos Rush
特别鸣谢:Chaos Rush、doesntknowhowtoplay



附带几个表格

  1. 绿宝石精灵数据表

  2. 名字表:3185C8 11B4字节  

  3. 宠物种族数据表:3203CC 2D10字节

  4. 蛋组指针:3203DD  

  5. 升级技能表:32937C  670字节  

  6. 进化表:32531C

  7. 宠物正面图:30A18C  DC0字节  

  8. 宠物背面:3028B8  DC0字节

  9. 普通色板:303678  DC0字节

  10. 闪光色板:304438  DC0字节

  11. 宠物坐标(我方):3021D8,6E0字节

  12. 宠物坐标(敌方):300D38,6E0字节

  13. 高度:305DCC  19C字节

  14. 小图标:57BCA8,6E0字节

  15. 图标色板:57C388,1B8字节

  16. 叫声主表:69DCF4

  17. 叫声主表2:69EF24

  18. 叫声副表:31F61C

  19. 脚印表: 56E694

  20. 定点技能教学相性表:615048

  21. 正面动画表:3299EC

  22. 背面动画表:60A8C8

  23. 编号表:31DC82,336字节  

  24. 图鉴信息:56B5B0,3060字节  

  25. 控制精灵动作:309AAC-30A18B  4字节一只  308CBC 8字节一只  3299EC  60A8C8
复制代码

评分

参与人数 3积分 +40 现金 +85 收起 理由
xhzx6340 + 10 + 20 这种帖子就该加分!
海のLUGIA + 20 + 50 姿瓷~
jiangzhengwenjz + 10 + 15 支持转载翻译

查看全部评分

回复

使用道具 举报

46

帖子

273

现金

0

勋章券

繁华都市的喧闹

Rank: 5Rank: 5Rank: 5

积分
182

时光印记Lv.1

 楼主| 发表于 2015-10-3 22:07:56 | 显示全部楼层
本帖最后由 jiangzhengwenjz 于 2015-10-3 22:18 编辑

关于单帧的一楼


首先,我们要知道精灵素材的格式以及大小,格式通用都为
PNG格式,大小设定,火红、叶绿、红宝石蓝宝石均为64*64的单帧素材,而绿宝石确是64*128的双帧。这次的教程呢,可以说是为了解限之后的双帧设定而来的,但是个人不推荐修改这个系统设定。


好了,我们来教程吧
需要工具:winhex绿宝石ROM、unlz
同时你还需要基础经验。


ok,准备完毕,我们直接修改数据


18080C:10 B5 02 48 E0 61 10 BC 01 BC 00 47 15 07 18 08
选块3299EC-329B87填充为 00
308CC0:38 F5 2F 08
选块309AAC-30A11B填充为 BC 8C 30 08
06EE38:00 00
06ECC4:01
选块60A8C8-60AA63填充为00
选块60ACE4-60AD2E填充为00


至此,修改完成。这是一个单帧系统的rom了,接下来测试rom运行情况




好了,系统测试完毕,接下来我们测试素材的导入,素材来自小a~



测试通过,单帧可用。

-----------------------------END-----------------------------
By:EVE
数据来自:Chaos Rush
原作者:Chaos Rush




回复 支持 反对

使用道具 举报

3840

帖子

-4万

现金

390

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
19102
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

发表于 2015-10-3 23:17:38 | 显示全部楼层
前排支持 欢迎转载翻译国外教程
回复 支持 反对

使用道具 举报

272

帖子

3197

现金

15

勋章券

碧蓝大海飞溅的水滴

Rank: 9

积分
773

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

发表于 2015-10-4 09:07:55 | 显示全部楼层
不喜欢单真。而且想问721、其他的精灵在哪里替换和制作?

点评

重定向数据后导入数据  发表于 2015-10-4 19:24
回复 支持 反对

使用道具 举报

49

帖子

11

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
74
发表于 2015-10-4 10:05:07 | 显示全部楼层

有没有这个改版,就算是测试的 就发给我吧

点评

还在制作  发表于 2015-10-4 19:25
回复 支持 反对

使用道具 举报

46

帖子

273

现金

0

勋章券

繁华都市的喧闹

Rank: 5Rank: 5Rank: 5

积分
182

时光印记Lv.1

 楼主| 发表于 2015-10-5 18:46:54 | 显示全部楼层
jiangzhengwenjz 发表于 2015-10-3 23:17
前排支持 欢迎转载翻译国外教程

My English is very poor
回复 支持 反对

使用道具 举报

49

帖子

11

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
74
发表于 2015-10-24 13:52:23 | 显示全部楼层
嘿嘿,问一下你的改版要什么时候发布啊?
我就是问问
回复 支持 反对

使用道具 举报

7

帖子

60

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
16
发表于 2015-11-20 09:36:48 | 显示全部楼层
不明觉厉
回复 支持 反对

使用道具 举报

3840

帖子

-4万

现金

390

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
19102
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

发表于 2019-6-21 12:09:19 | 显示全部楼层
顶一下,修正bug
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2019-9-23 17:33 , Processed in 0.052865 second(s), 45 queries , Eaccelerator On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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