技能机无限
本帖最后由 jiangzhengwenjz 于 2016-11-24 12:20 编辑限于火红版,这个其实是之前所做的事了,虽然老外做过了但自己试一下也不坏。
制作之前先要明确目的:
1. 不显示数量(伪HM)
2. 使用后不删除
3. 【易忽略】不能携带
1. 数量较难断,于是对HM图标的数据下断(通过内存数据得到位置)或是直接搜索0xe99118的指针得到读取HM图标的源码位置是x1335b0
反追踪一次得到调用位置是x131efa,注意到在x131eac获取了技能机的数量,后面的程序进行转码和写入内存,因此我们只需跳过这段代码。
也就是HM:不读取数量,读取图标。TM:不读取数量,也不读取图标。这里给出这个程序的源码:ROM:08131E68 PUSH {R4-R7,LR}
ROM:08131E6A MOV R7, R9
ROM:08131E6C MOV R6, R8
ROM:08131E6E PUSH {R6,R7}
ROM:08131E70 SUB SP, SP, #0x14
ROM:08131E72 LSLS R0, R0, #0x18
ROM:08131E74 LSRS R0, R0, #0x18
ROM:08131E76 MOV R9, R0
ROM:08131E78 MOV R7, R9
ROM:08131E7A LSLS R2, R2, #0x18
ROM:08131E7C LSRS R2, R2, #0x18
ROM:08131E7E MOV R8, R2
ROM:08131E80 MOV R4, R8
ROM:08131E82 MOVS R0, #2
ROM:08131E84 NEGS R0, R0
ROM:08131E86 CMP R1, R0
ROM:08131E88 BEQ loc_8131EFE
ROM:08131E8A LSLS R0, R1, #0x10
ROM:08131E8C LSRS R6, R0, #0x10
ROM:08131E8E MOVS R0, #4
ROM:08131E90 MOVS R1, R6
ROM:08131E92 BL sub_809A798 @获得道具id
ROM:08131E96 LSLS R0, R0, #0x10
ROM:08131E98 LSRS R0, R0, #0x10
ROM:08131E9A BL sub_809A990 @检测
ROM:08131E9E LSLS R0, R0, #0x18
ROM:08131EA0 LSRS R5, R0, #0x18
ROM:08131EA2 CMP R5, #0
ROM:08131EA4 BNE loc_8131EF4 @是HM,不读取数量而去读取图标
ROM:08131EA6 LDR R4, =0x2021CD0
ROM:08131EA8 MOVS R0, #4
ROM:08131EAA MOVS R1, R6
ROM:08131EAC BL sub_809A7B4 @获取数量
ROM:08131EB0 MOVS R1, R0
ROM:08131EB2 LSLS R1, R1, #0x10
ROM:08131EB4 LSRS R1, R1, #0x10
ROM:08131EB6 MOVS R0, R4
ROM:08131EB8 MOVS R2, #1
ROM:08131EBA MOVS R3, #3
ROM:08131EBC BL sub_8008E78 @转换代码&写入内存
ROM:08131EC0 LDR R4, =0x2021D18
ROM:08131EC2 LDR R1, =0x84162B9
ROM:08131EC4 MOVS R0, R4
ROM:08131EC6 BL sub_8008FCC @加上乘号,写入另一个内存,如B900A6A1就是× 50
ROM:08131ECA MOV R0, R8
ROM:08131ECC STR R0,
ROM:08131ECE STR R5,
ROM:08131ED0 STR R5,
ROM:08131ED2 MOVS R0, #0xFF
ROM:08131ED4 STR R0,
ROM:08131ED6 MOVS R0, #1
ROM:08131ED8 STR R0,
ROM:08131EDA MOV R0, R9
ROM:08131EDC MOVS R1, #0
ROM:08131EDE MOVS R2, R4
ROM:08131EE0 MOVS R3, #0x7E
ROM:08131EE2 BL sub_81332EC
ROM:08131EE6 B loc_8131EFE @跳过读取图标的部分
ROM:08131EE6 ; ---------------------------------------------------------------------------
ROM:08131EE8 dword_8131EE8 DCD 0x2021CD0 ; DATA XREF: ROM:08131EA6r
ROM:08131EEC dword_8131EEC DCD 0x2021D18 ; DATA XREF: ROM:08131EC0r
ROM:08131EF0 dword_8131EF0 DCD 0x84162B9 ; DATA XREF: ROM:08131EC2r
ROM:08131EF4 ; ---------------------------------------------------------------------------
ROM:08131EF4
ROM:08131EF4 loc_8131EF4 ; CODE XREF: ROM:08131EA4j
ROM:08131EF4 MOVS R0, R7
ROM:08131EF6 MOVS R1, #8
ROM:08131EF8 MOVS R2, R4
ROM:08131EFA BL sub_81335B0 @正式读取图标
ROM:08131EFE
ROM:08131EFE loc_8131EFE ; CODE XREF: ROM:08131E88j
ROM:08131EFE ; ROM:08131EE6j
ROM:08131EFE ADD SP, SP, #0x14
ROM:08131F00 POP {R3,R4}
ROM:08131F02 MOV R8, R3
ROM:08131F04 MOV R9, R4
ROM:08131F06 POP {R4-R7}
ROM:08131F08 POP {R0}
ROM:08131F0A BX R0那么,如何改造也就很清楚了,我的方法是将x131ea6的指令改去b 0x8131efe,也就是写入2A E0。测试也通过(不过老外的似乎有些不同)
2. 这个非常直观,但暗桩较多。首先获得删除道具程序的位置,从脚本命令中,道具中都可(好吧其实这个程序哪都有),随后下断
会发现有3个程序都调用了这个,分别是:玩家看完动画后删除,玩家按b退出动画后删除,给少于4个技能的精灵学习后删除【这个略坑,看了老外的才发现
将这些位置调用程序的代码都去掉即可,即将x124f78,x125c80,x124eac的数据都改去00 00 00 00。
3. 这个很容易漏掉,不改的话会发生携带了之后背包里还有这个道具的情况。
首先注意到HM是不能进行携带的,故可猜测某处会判断HM和TM。但这个程序的地址我们真的不知道吗?在之前x131e9a的源码处我们知道是判定是否为HM,故而这个程序一定会断
直接下断,会断2次,一次是小框中的读取图标判定,另一次则是我们所需要的位置了(按下give时)。ROM:081326B8 CMP R0, #0
ROM:081326BA BNE loc_81326EC只需让它都以为是HM即可,这里的代码改去00 00 17 E0,强行跳转即可,那么整个的修改就完成了。
当然,还需要让技能机器不能被卖掉,这个老外没有给出方法。
我简单研究了一下,改动应该是0x132924 - 00 00 00 00这个方法理论上是很优的,但并没有经过测试。
对于购买时的数量显示,若要直接阉割:0x9bcc2 - 00 00 00 00若要保留则要对源码稍事修改了:0x9BCB0 - 00 49 08 47 XX XX XX XX其中XX XX XX XX是下面源码的指针(thumb模式+1).thumb
.align 2
add r5, r5, r0
ldrh r0,
mov r1, #9
lsl r1, r1, #5
add r1, r1, #1
cmp r0, r1
blt notm
add r1, #0x31
cmp r0, r1
bgt notm
ldr r1, =0x809a7dd
bl call_viar1
cmp r0, #0
bgt adjust
b return
notm:
ldr r1, =0x809a7dd
bl call_viar1
return:
ldr r1, =0x809bcb9
call_viar1:
bx r1
adjust:
mov r0, #1
b return那么最后来汇总一下需要修改的代码:0x1326BA - 17 E0
0x124F78 - 00 00 00 00
0x125C80 - 00 00 00 00
0x124EAC - 00 00 00 00
0x131EA6 - 2A E0
0x132924 - 00 00 00 00
以下二选一:
阉割:
0x9BCC2 - 00 00 00 00
保留:
0x9BCB0 - 00 49 08 47 GH+1 EF CD AB
0xABCDEFGH - 2D 18 68 89 09 21 49 01 01 31 88 42 08 DB 31 31 88 42 05 DC 06 49 00 F0 07 F8 00 28 05 DC 02 E0 03 49 00 F0 01 F8 03 49 08 47 01 20 FB E7 00 00 DD A7 09 08 B9 BC 09 08C语言编的懒人程序:
2016.11.24更新:0x13288D - E0 题外话,Bsp是Jambo51的工具吧? 然而又是火红,来个绿宝石可好 钢之波导 发表于 2015-8-10 13:54
然而又是火红,来个绿宝石可好
我几乎没改过绿宝石。。不知道机理是不是差不多,如果一样的话按这个办法也能搞出来 要是能在第四代中实现技能机器无限就好了 郭碌仁 发表于 2015-8-10 22:27
要是能在第四代中实现技能机器无限就好了
然而并不会改第四代 jiangzhengwenjz 发表于 2015-8-10 22:31
然而并不会改第四代
我只会用ROM修改器改ROM文件可惜我不会外语不然就可以好好研究了 我最喜欢第四代了
请问写在哪里呢? 本帖最后由 xxxm 于 2018-6-9 16:06 编辑
请问删除数据时是怎样得知删除道具程序的位置的?不久前接触改版,很多基础知识都不齐全 jiangzhengwenjz 发表于 2015-8-10 14:06
我几乎没改过绿宝石。。不知道机理是不是差不多,如果一样的话按这个办法也能搞出来
貌似是差不多的,只是一堆不一样的地址 路过回复一下,谢谢
页:
[1]