jiangzhengwenjz 发表于 2016-5-12 22:23:44

[小发现]多重showpokepic的关闭

Andrea的showpokepic limit editor 1.3.0.0(可在本区置顶工具库内下载)可以解除红宝石,火红,绿宝石的showpokepic数量限制,但是却没有给出相应的关闭方法,若直接使用hidepokepic又会导致死机。不过由于一些机缘巧合我发现火红中的一个special有这种功能。
对于红宝石,hidebox并非是空命令,据说直接使用这个就能关闭,不做讨论。

如何解除限制:(来自andrea的工具,本质上就是强制使游戏无法检查到是否已经用过一次showpokepic(无法搜索到函数指针))火红: 写入00于0x9D31E
绿宝石: 写入00于0xE2916然后火红在0xCADDE写入00 00 00 00防止和其他框冲突,可用于测试的脚本:#org @start
lock
faceplayer
showpokepic 1 1 1
showpokepic 2 15 1
msgbox @thisisastring 6
special 0x15A//调用2次,因为2个框
special 0x15A
release
end
#org @thisisastring
= Hello World.http://i869.photobucket.com/albums/ab256/jiangzhengwenjz/q_zpszjiq7xwz.gif

绿宝石里没有这个special,所以写个源码搞定它:.code 16
push {r4, r5, lr}
ldr r0, =0x80E2899
ldr r3, =0x80A921D
bl bx_r3
lsl r0, r0, #0x18
lsr r5, r0, #0x18
cmp r5, #0xFF
beq back
lsl r0, r5, #2
add r0, r0, r5
lsl r0, r0, #3
ldr r1, =0x3005E00
add r4, r0, r1
mov r1, #8
ldrsh r0,
cmp r0, #0
blt back
cmp r0, #2
ble loc1
cmp r0, #3
beq loc2
b back

loc1:
mov r0, #0xC
ldrsh r1,
lsl r0, r1, #4
add r0, r0, r1
lsl r0, r0, #2
ldr r1, =0x2020630
add r0, r0, r1
ldrb r1,
ldr r3, =0x80B6071
bl bx_r3
ldrb r0,
bl sub_new
mov r0, r5
ldr r3, =0x80A909D
bl bx_r3
b back

loc2:
ldrb r0,
bl sub_new
mov r0, r5
ldr r3, =0x80A909D
bl bx_r3

back:
pop {r4, r5, pc}
.ltorg

sub_new:
push {r4, lr}
mov r4, r0
lsl r4, r4, #0x18
lsr r4, r4, #0x18
mov r0, r4
ldr r3, =0x80038A5
bl bx_r3
mov r0, r4
mov r1, #1
ldr r3, =0x8197DF9
bl bx_r3
mov r0, r4
ldr r3, =0x8003575
pop {r4, pc}
.ltorg

bx_r3: bx r3编译好的:30 B5 18 48 18 4B 00 F0 4F F8 00 06 05 0E FF 2D 27 D0 A8 00 40 19 C0 00 14 49 44 18 08 21 60 5E 00 28 1E DB 02 28 02 DD 03 28 13 D0 19 E0 0C 20 21 5E 08 01 40 18 80 00 0D 49 40 18 21 7B 0D 4B 00 F0 32 F8 A0 7C 00 F0 19 F8 28 1C 0A 4B 00 F0 2B F8 06 E0 A0 7C 00 F0 11 F8 28 1C 06 4B 00 F0 23 F8 30 BD 99 28 0E 08 1D 92 0A 08 00 5E 00 03 30 06 02 02 71 60 0B 08 9D 90 0A 08 10 B5 04 1C 24 06 24 0E 20 1C 05 4B 00 F0 0E F8 20 1C 01 21 03 4B 00 F0 09 F8 20 1C 02 4B 10 BD A5 38 00 08 F9 7D 19 08 75 35 00 08 18 47测试脚本:#org 0xF10000
lock
showpokepic 0x1 0x1 0x1
showpokepic 0x4 0xF 0x1
msgbox 0x81E8ACF 0x6 //一个原游戏中的文本,不改了
callasm 0x8XXXXXX+1//上面的函数地址+1
callasm 0x8XXXXXX+1
release
end
页: [1]
查看完整版本: [小发现]多重showpokepic的关闭