| 
 | 
 
 本帖最后由 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, 下载次数: 506)
 
 
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
 
  复制代码 |   
 
 
 
 |