|
本帖最后由 jiangzhengwenjz 于 2015-9-22 07:24 编辑
这个修改只负责从精灵菜单中进入"攀岩",对话型请自行设计脚本
这个修改能够自行判定走的格子数量,也能够判断玩家朝向。
1. 首先需要扩建TM盒子,并分配一块内存给他:(感谢Ta之境界完成此源码)
在0x99E6A跳转:- 01 48 00 47 00 00 FF FF FF 08
复制代码 其中FF FF FF 08是下面源码的指针(thumb模式+1):- .text
- .align 2
- .thumb
- .thumb_func
- .global tm_slots_hack
- main:
- ldr r0, ram
- str r0, [r1, #0x18]
- mov r0, #0x3B
- strb r0, [r1, #0x1c]
- ldr r0, return
- bx r0
- .align
- ram:.word 0x0203c000
- return:.word 0x08099e74+1
复制代码 其中0x203c000是内存空位、请注意不要和其他东西冲突,比如精灵扩建等。
2. 运用JPAN的saveblock hack以正常保存。
补丁:
JPAN save_block_recycle.zip
(448 Bytes, 下载次数: 316)
3. 重定向0x45A76E的特殊技能编号表格,并用攀岩技能编号(反写)替换0C 00,注意0C 00是标识结尾的,放在扩增的技能编号后,否则死循环。
重定向0x45A80C的技能机器表格,直接添加编号扩增。
重定向0x45A37C的文本指针表格,同样需要扩增一条文本,就是攀岩地图效果的说明,务必简短,参考前面的文本。
重定向0x45A618的名称_程序表格,并在最后加入[文本指针] A5 45 12 08。
在0x3D4D6C写入在0x3DEBCC写入- C2 C7 A1 AA FF 00 00 00 00 00 00 00 00 00 5B 01 00 00 00 00 E5 75 48 08 01 00 04 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
复制代码 注意修改上面数据中的文本指针和名称文本【我用的英文
修改0x252BC8的技能习得表格,以使正确的精灵能够习得攀岩。修改方法是将数据转换为2进制修改。
重定向0x45A788的程序表格,并在表格末尾增加XX XX XX 08 0D 00 00 00。
其中XX XX XX 08是下面程序的指针:(thumb模式+1)- .thumb
- .align 2
- push {r4, lr}
- sub sp, sp, #4
- mov r4, sp
- add r4, #2
- mov r0, sp
- mov r1, r4
- ldr r3, =0x0805C4F5
- bl call_via_r3
- mov r0, sp
- mov r1, #0
- ldrsh r0, [r0, r1]
- mov r2, #0
- ldrsh r1, [r4, r2]
- ldr r2, =0x08058F79
- bl call_via_r2
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x80 @behavior_byte
- bne back
- ldr r1, =0x03005024
- ldr r0, =0x081248B1
- str r0, [r1]
- ldr r1, =0x0203B0C4
- ldr r0, =0x08CCCCCC
- str r0, [r1]
- mov r0, #1
- b real_back
- back:
- mov r0, #0
- real_back:
- add sp, sp, #4
- pop {r4}
- pop {r1}
- bx r1
- call_via_r3:
- bx r3
- call_via_r2:
- bx r2
复制代码 这个源码中的0x8CCCCCC改为下面源码写入地址+1:- .thumb
- .align 2
- run_scr:
- push {lr}
- ldr r0, =0x0203B0A0
- ldrb r0, [r0, #9]
- ldr r1, =0x020386E0
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [r1]
- ldr r0, =0x08DDDDDD
- ldr r1, =0x08069AE5
- bl call_via_r1
- pop {r0}
- bx r0
- call_via_r1:
- bx r1
复制代码 这个源码中的0x8DDDDDD改为下面的脚本地址:- #dynamic 0x90008c
- #org @start
- lockall
- doanimation 0x25
- waitstate
- callasm 0x88fff91 //改为下面的源码1地址+1
- compare 0x800c 1
- if1 1 @down
- compare 0x800c 2
- if1 1 @up
- compare 0x800c 3
- if1 1 @left
- goto @right
- #org @down
- applymovement 0xff @movedown
- waitmovement 0xff
- callasm 0x88fffb1 //改为下面的源码2地址+1
- compare 0x8004 0
- if1 1 @downeventual
- goto @down
- #org @up
- applymovement 0xff @moveup
- waitmovement 0xff
- callasm 0x88fffb1
- compare 0x8004 0
- if1 1 @upeventual
- goto @up
- #org @left
- applymovement 0xff @moveleft
- waitmovement 0xff
- callasm 0x88fffb1
- compare 0x8004 0
- if1 1 @lefteventual
- goto @left
- #org @right
- applymovement 0xff @moveright
- waitmovement 0xff
- callasm 0x88fffb1
- compare 0x8004 0
- if1 1 @righteventual
- goto @right
- #org @downeventual
- applymovement 0xff @movedown
- waitmovement 0xff
- releaseall
- end
- #org @upeventual
- applymovement 0xff @moveup
- waitmovement 0xff
- releaseall
- end
- #org @lefteventual
- applymovement 0xff @moveleft
- waitmovement 0xff
- releaseall
- end
- #org @righteventual
- applymovement 0xff @moveright
- waitmovement 0xff
- releaseall
- end
- #org @movedown
- #raw 0x1D 0xfe
- #org @moveup
- #raw 0x1e 0xfe
- #org @moveleft
- #raw 0x1f 0xfe
- #org @moveright
- #raw 0x20 0xfe
复制代码 源码1:- .thumb
- .align 2
- push {lr}
- ldr r0, =0x0805C6C5
- bl linker
- ldr r1, =0x020370D4
- strh r0, [r1]
- pop {pc}
- linker:
- bx r0
复制代码 源码2:- .thumb
- .align 2
- push {r4, lr}
- sub sp, sp, #4
- mov r4, sp
- add r4, #2
- mov r0, sp
- mov r1, r4
- ldr r3, =0x0805C4F5
- bl call_via_r3
- mov r0, sp
- mov r1, #0
- ldrsh r0, [r0, r1]
- mov r2, #0
- ldrsh r1, [r4, r2]
- ldr r2, =0x08058F79
- bl call_via_r2
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- ldr r1, =0x020370C0
- cmp r0, #0x80 @behavior_byte
- bne back
- mov r0, #1
- b realback
- back:
- mov r0, #0
- realback:
- strh r0, [r1]
- add sp, sp, #4
- pop {r4, pc}
- call_via_r2:
- bx r2
- call_via_r3:
- bx r3
复制代码 然后将源码2和XX XX XX 08指向的源码(在很上面)中的0x80(均作了注释)改为你给攀岩的地图块分配的行为字节。如果玩家面对的地图块行为字节不正确,那会提示这里不能使用。
4. 修复徽章检查程序以使HM09受到8号徽章的限制: (未测试)
在0x12461C写入:MM MM MM 08是下面程序指针(thumb模式+1):- .thumb
- .align 2
- add r0, r4, #0
- cmp r4, #7
- blt checkbadge
- mov r0, #7
- cmp r4, #0xc
- beq checkbadge
- ldr r1, =0x8124627
- add r1, #0x32
- bx r1
- checkbadge:
- mov r1, #0x82
- lsl r1, r1, #0x4
- add r0, r0, r1
- ldr r1, =0x8124627
- bx r1
复制代码 这样,整个修改就全部完成了。(技能名称、说明文本都是乱填的,不要在意)
5. 成品:
补充获取全部TM、HM的脚本,因为MH不会起作用了- #org @start
- lock
- faceplayer
- setvar 0x8004 0x121
- goto @snippet2
- //---------------
- #org @snippet1
- release
- end
- //---------------
- #org @snippet2
- additem 0x8004 0x1
- addvar 0x8004 0x1
- compare 0x8004 0x15C
- if 0x1 goto @snippet1
- goto @snippet2
复制代码 |
|