口袋改版资源吧 关注:242,431贴子:1,538,403

【伪教程】技能机器扩充

只看楼主收藏回复

很大的一个工程,过程有些复杂,新手不建议做。
之后提醒一下如果你是个RV党,不懂操作数据,那么这个伪教程就暂且不适合你。
也别问怎么重点指针,怎么转换asm,这里我只提供地址和一些必要的资料源码。
警告:未经大幅度测试,改前备份,后果自负
流程:
1.扩充道具
2.添加技能机器道具
3.重点技能机器表
4.破解背包技能机器持有限制
5.修复技能机器读取程序
6.修复技能机器编号程序
7.修改技能机器判断习得程序
8.去除学习技能机器动画
======================================================================
1.道具扩充
i.操作限制器
打开ROM转去以下地址更改字节
道具数据:0809a8ae = 00 00 00 00
道具图片色板:08098998 = 道具数量[记得把字节反过来:如1FF(511个道具)= FF 01,或者放FFFF如果你懒得算]
ii.重点道具数据
转到以下地址
道具数据地址:3DB028
每个道具数据长度:0x2c
道具数量:0x177
总长度:0x4074
选择后复制去空位,在尾端加上新的道具数据。
然后重点所有指针去新的数据地址
iii.重点道具图片色板指针
道具图片色板地址:3D4294
格式:[图片指针][色板指针]。。。。。。
总长度0xBC0,复制去空位,同上在尾端加上新的道具数据
然后重点所有指针去新的图片色板地址。
ps:有预感这里就会有人阵亡了。。。
===========================================================================
2.添加技能机器道具
参考原版道具参数,不解释,这里建议从0x177开始添加(为了比较靠近原版的技能机器)[如果是汇编渣强烈建议从这里开始],而且一添加就要添加到底,不可以断掉,否则后果你懂的。
===========================================================================
3.重点技能机器表
技能机器的表在45A80C,复制0x74(=58*2)个字节去新空位,然后添加50个新的技能。然后重点所有指针去新的地址。
===========================================================================
4.破解背包技能机器持有限制(原理请参考我在贴吧的帖子《【讨论帖】关于背包的道具限制研究》)
在99E6A跳转:
源码:
.text
.align 2
.thumb
.thumb_func
.global branch
main:
ldr r0, out
bx r0
lsl r0, r0, #0x0
.align
out:.word 0x08FFFFFF+1
或 01 48 00 47 00 00 FF FF FF 08, FF FF FF 08 = 空位地址+1指针模式
然后在那个空位地址写入这个ASM
源码:
.text
.align 2
.thumb
.thumb_func
.global tm_slots_hack
main:
ldr r0, ram
str r0, [r1, #0x18]
mov r0, #0x6C
strb r0, [r1, #0x1c]
ldr r0, return
bx r0
.align
ram:.word 0x0203c000
return:.word 0x08099e74+1
笔记:
#0x203c000是空位内存位置,可以自由更改,注意这里要用jpan save block hack才能保存。
#0x6c是108个技能机器,你可以自由更改这里的数值
======================================================================
5.修复技能机器读取程序
在125A78输入 00 49 08 47 FF FF FF 08, FF FF FF 08 = 空位地址+1指针模式
.text
.align 2
.thumb
.thumb_func
.global TM_index
main:
mov r1, #0xBB
lsl r1, r1, #0x1
cmp r0, r1
bhi newtm
mov r1, #0x90
lsl r1, r1, #0x1
add r1, r1, #0x1
sub r0, r0 ,r1
lsl r0, r0, #0x1
b exit
newtm:
add r1, r1, #0x1
sub r0, r0, r1
lsl r0, r0, #0x1
add r0, r0, #0x74
exit:
ldr r1, tm_table
add r0, r0, r1
ldrh r0, [r0]
bx lr
.align
tm_table:.word 0x08EEEEEE
笔记:
table是你在步骤3创建的技能机器表的地址
#0xBB是新道具编号开始前一个数值除以二(如果除以二无法获得整数就用那个数值,然后判断用bge),如果不懂怎么改就照抄吧,只是开始技能机器要从0x177开始。。。
原版技能读取方程式:(道具编号*0x10000+0xFEDF0000)/0x8000,总之我把这个方程式改成懒人版的了。
======================================================================
6.修复技能机器编号程序
同上一个源码在131D5A 输入 01 48 00 47 00 00 FF FF FF 08, FF FF FF 08 = 空位地址+1指针模式
然后在那个空位地址写入这个ASM
源码:
.text
.align 2
.thumb
.thumb_func
.global tm_name
main:
mov r0, #0xBB
lsl r0, r0, #0x1
cmp r6, r0
bhi new_tm
mov r0, #0xA9
lsl r0, r0, #0x1
cmp r6, r0
bls old_tm
ldr r1, temp
ldr r0, return1
bx r0
new_tm:
ldr r1, text_no
mov r0, r5
bl refresh
ldr r4, ram
ldr r0, value
ldr r1, return3
bx r1
old_tm:
ldr r1, return2
bx r1
refresh:
ldr r2, routine
bx r2
.align
text_no:.word 0x08416226
routine:.word 0x08008DA5
temp:.word 0x08463178
return1:.word 0x08131D65
return2:.word 0x08131DA5
ram:.word 0x02021CD0
value:.word 0xFFFFFEBC
return3:.word 0x08131DB1
笔记:
这个源码是根据Jambo51的649记录抄出来的,所以在这里向这位大神致敬。
#0xBB是新道具编号开始前一个数值除以二(如果除以二无法获得整数就用那个数值,然后判断用bge),如果不懂怎么改就照抄吧,只是开始技能机器要从0x177开始。。。

======================================================================
7.修改技能机器判断习得程序
终于到这一步了。。。
在43C40输入 00 48 00 47 FF FF FF 08, FF FF FF 08 = 空位地址+1指针模式
然后在那个空位地址写入这个ASM
源码:
.text
.align 2
.thumb
.thumb_func
.global tm_compact_hack
main:
mov r3, r1
cmp r4, #0x56
bge newtm
check:
cmp r4, #0x1f
bls first_32
cmp r4, #0x3f
bls first_64
cmp r4, #0x5f
bls first_96
after_96:
mov r0, r4
sub r0, #0x60
mov r2, #0x1
lsl r2, r0
ldr r0, table
lsl r1, r1, #0x4
add r0, #0xC
get_offset:
add r1, r1, r0
ldr r0, [r1]
and r0, r2
b exit
newtm:
sub r4, #0x1C
b check
first_64:
mov r0, r4
sub r0, #0x20
mov r2, #0x1
lsl r2, r0
ldr r0, table
lsl r1, r1, #0x4
add r0, #0x4
b get_offset
first_96:
mov r0, r4
sub r0, #0x40
mov r2, #0x1
lsl r2, r0
ldr r0, table
lsl r1, r1, #0x4
add r0, #0x8
b get_offset
first_32:
mov r1, #0x1
lsl r1, r5
ldr r2, table
lsl r0, r3, #0x4
add r0, r0, r2
ldr r0, [r0]
and r0, r1
exit:
pop {r4-r5}
pop {r1}
bx r1
.align
table:.word 0x08DDDDDD
笔记:
#0x56是从0x177-0x121, #0x1C则是最后一个HM后一个道具算起到新技能机器之间相差的数量,不懂怎么改就老样子照抄,只是开始技能机器要从0x177开始。。。
table是新的精灵技能机器学习表。

======================================================================
8.去除学习技能机器动画
修改这些...
11CE6E:00 00
11CA2C:00 F0 0E FA
11CD9E:00 00 00 00 00 00 00 00 00 00 00 00 44 E0

======================================================================
如果你是完全照抄无误我的做法的话,那么恭喜你,你已经成功扩充了技能机器。
还没完.....接下来就是格式了,
其实和原版读取方式一样,我做的只是额外添加读取多两行数据的指令。
原版的表格从252BC8开始,原本是8个字节来算的,所以新的要重点
新格式则是16个字节,要把每4个字节拆开。
新格式如下:
16位:[00 00 00 00] [00 00 00 00] [00 00 00 00] [00 00 00 00]
2位:
1-32:00000000000000000000000000000000
33-64:00000000000000000000000000000000
65-96:00000000000000000000000000000000
97-128:00000000000000000000000000000000
注意16位的时候,每段数据的读法类似指针,需要反转
如:
在ROM里:AA BB CC DD
读取的时候是 DD CC BB AA,
转换2进位则是11011101110011001011101110101010
接下来比较麻烦的是,这个表的读法是从右边开始。
如:技能机器13及31
01000000000000000001000000000000
之后直接转换16位。
40 00 10 00
写入那个位置就行了。
另外,HM算在51-58的位置那里,所以技能机器51开始都要+8
======================================================================
后记:
个人认为整个研究最为困难的是技能机器持有限制及技能机器判断习得程序了,不过运气不错能快速找到这几个程序的位置。
不过中间遇上一些小麻烦,破解持有限制之后存档直接废了,
而且动画那些事真心坑死人,索性阉掉。
总之前前后后反复了N百次才弄好→_→。。。也算值了。
排序问题我觉得问题不大就不特地去研究了→_→好吧其实我懒。。。


1楼2015-01-17 21:09回复
    沙发 看到T大立马按进来


    IP属地:中国台湾2楼2015-01-17 21:12
    回复
      2025-08-07 14:01:01
      广告
      不感兴趣
      开通SVIP免广告
      顶起聚聚


      IP属地:福建3楼2015-01-17 21:12
      回复
        占二楼更新修复


        4楼2015-01-17 21:13
        收起回复
          顶Ta聚……
          等会收藏实验……


          5楼2015-01-17 21:16
          收起回复
            混〜( ̄▽ ̄〜)前排


            IP属地:广东来自Android客户端6楼2015-01-17 21:20
            回复
              后排顶个
              话说2,3楼抢楼也太快了


              IP属地:中国香港7楼2015-01-17 21:23
              回复
                最近的教程贴好多!感谢聚聚们(可惜的是我们也看不懂啊啊啊啊!)


                IP属地:广东来自手机贴吧8楼2015-01-17 21:42
                回复
                  2025-08-07 13:55:01
                  广告
                  不感兴趣
                  开通SVIP免广告
                  支持


                  IP属地:广东9楼2015-01-17 22:07
                  回复
                    终于也个这样的帖子了,新技能有望了


                    IP属地:广东来自iPhone客户端10楼2015-01-17 22:29
                    回复

                         -- ★The brightest star in the night sky.


                      IP属地:浙江来自Android客户端11楼2015-01-17 23:02
                      回复
                        支持


                        IP属地:广东来自Android客户端13楼2015-01-17 23:30
                        回复
                          伪前排,顶


                          IP属地:陕西来自Android客户端14楼2015-01-17 23:58
                          回复
                            手机上不知道这算不算前排


                            来自Android客户端15楼2015-01-18 08:24
                            回复
                              2025-08-07 13:49:01
                              广告
                              不感兴趣
                              开通SVIP免广告

                              ———— ✎﹏๓₯㎕ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้
                              每段青春都会苍老、
                                    但我希望记忆里的你一直都好


                              IP属地:陕西来自Android客户端16楼2015-01-18 08:37
                              回复