昨天,晨曦聚聚说到釉色里有输入密码的脚本,

我没玩过釉色,也不知道脚本在哪里,我用AM打开釉色的ROM,发现打不开
所以我就自己研究研究,那个输入界面,在给精灵取名时也会出来,所以我去看看改名老爷爷的脚本
找到了相应的脚本指令(special 0xA1),但是这是精灵改名的界面,所以会显示“精灵名字+的昵称?”
然后我通过修改精灵名字(0号精灵的名字)和修改字体大小,把“的昵称?”顶到屏幕外面去,0号精灵默认是全雄性的,所以我改成无性别
然后就把界面做好了

接下来就是找输入的值了,我输入AA(十六进制数据是BBBB),然后我在VBA里利用查找金手指的功能,
找到了地址02021DC4,
找到了地址就可以写asm了,
然后我写了个读取02021DC4地址的数值然后把数值写到8006变量的程序
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r1, lr}
ldr r0, char
ldr r1, var_8005
ldrb r1, [r1]
add r0, r1
ldrb r0, [r0]
ldr r1, var_8005
strh r0, [r1,#0x2]
pop {r0-r1, pc}
.align 2
char: .word 0x02021DC3
var_8005: .word 0x020375E2
并写上对应的脚本
//asm我写在0xF90000
#dynamic 0xE00000
#org @1
setvar 0x8004 0x6
special 0xA1
pause 0x8
//
setvar 0x8005 0x1 //设置第1个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xC7 //第1个字的十六进制数据
if 0x5 goto @2
//
setvar 0x8005 0x2 //设置第2个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xA8 //第2个字的十六进制数据
if 0x5 goto @2
//
setvar 0x8005 0x3 //设置第3个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xA9 //第3个字的十六进制数据
if 0x5 goto @2
//
setvar 0x8005 0x4 //设置第4个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xFF //第4个字的十六进制数据(最后一个字都要成FF,如果不这样,如果设置密码是123,则密码123和密码1234都会判断成正确的,最多能输入10(0xA)个字,如果最后一个字是第10个,不用写成FF也可以)
if 0x5 goto @2
//
msgbox @yes 0x2
end
//
#org @2
msgbox @no 0x2
release
end
#org @yes
= Right!
#org @no
= Wrong!
“//”表示注释,不会写入到ROM里
字的十六进制数据可以在文本大师里看

测试图

教程结束

我没玩过釉色,也不知道脚本在哪里,我用AM打开釉色的ROM,发现打不开
所以我就自己研究研究,那个输入界面,在给精灵取名时也会出来,所以我去看看改名老爷爷的脚本
找到了相应的脚本指令(special 0xA1),但是这是精灵改名的界面,所以会显示“精灵名字+的昵称?”
然后我通过修改精灵名字(0号精灵的名字)和修改字体大小,把“的昵称?”顶到屏幕外面去,0号精灵默认是全雄性的,所以我改成无性别
然后就把界面做好了

接下来就是找输入的值了,我输入AA(十六进制数据是BBBB),然后我在VBA里利用查找金手指的功能,
找到了地址02021DC4,
找到了地址就可以写asm了,
然后我写了个读取02021DC4地址的数值然后把数值写到8006变量的程序
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r1, lr}
ldr r0, char
ldr r1, var_8005
ldrb r1, [r1]
add r0, r1
ldrb r0, [r0]
ldr r1, var_8005
strh r0, [r1,#0x2]
pop {r0-r1, pc}
.align 2
char: .word 0x02021DC3
var_8005: .word 0x020375E2
并写上对应的脚本
//asm我写在0xF90000
#dynamic 0xE00000
#org @1
setvar 0x8004 0x6
special 0xA1
pause 0x8
//
setvar 0x8005 0x1 //设置第1个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xC7 //第1个字的十六进制数据
if 0x5 goto @2
//
setvar 0x8005 0x2 //设置第2个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xA8 //第2个字的十六进制数据
if 0x5 goto @2
//
setvar 0x8005 0x3 //设置第3个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xA9 //第3个字的十六进制数据
if 0x5 goto @2
//
setvar 0x8005 0x4 //设置第4个字
callasm 0x8F90001
pause 0x8
compare 0x8006 0xFF //第4个字的十六进制数据(最后一个字都要成FF,如果不这样,如果设置密码是123,则密码123和密码1234都会判断成正确的,最多能输入10(0xA)个字,如果最后一个字是第10个,不用写成FF也可以)
if 0x5 goto @2
//
msgbox @yes 0x2
end
//
#org @2
msgbox @no 0x2
release
end
#org @yes
= Right!
#org @no
= Wrong!
“//”表示注释,不会写入到ROM里
字的十六进制数据可以在文本大师里看

测试图

教程结束