口袋改版资源吧 关注:189,648贴子:1,307,814

【教程】绿宝石密码脚本

只看楼主收藏回复

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


我没玩过釉色,也不知道脚本在哪里,我用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里
字的十六进制数据可以在文本大师里看


测试图


教程结束


IP属地:广西1楼2017-09-07 18:04回复


    IP属地:广西来自Android客户端2楼2017-09-07 18:04
    回复
      补充,
      0号精灵性别比例
      3203DC:FF
      3E号字符的字体大小
      654323:5A
      0号精灵的名字
      3185C8:09 74 09 25 0C 0C 3E 3F FF


      IP属地:广西来自Android客户端3楼2017-09-07 18:08
      收起回复
        不懂帮顶
        顺便摩拜悠然聚聚


        IP属地:江苏来自Android客户端4楼2017-09-07 18:11
        收起回复
          火红呢?


          IP属地:北京来自Android客户端5楼2017-09-07 18:18
          回复
            顶顶


            IP属地:安徽来自Android客户端6楼2017-09-07 18:46
            回复
              用循环不是更好吗
              稍微改了一下,首先找一个空位写入设置的密码,然后把源码中的08000000改成这个地址(记得密码以FF结尾)
              push {r0-r4, lr}
              ldr r0, =0x08000000
              ldr r1, =0x02021DC3
              mov r2, #0x0

              loop:
              add r3, r0, r2
              ldrb r3, [r3]
              add r4, r1, r2
              ldrb r4, [r4]
              cmp r3, r4
              bne end
              cmp r4, #0xFF
              beq end1
              add r2, #0x1
              cmp r2, #0xA
              beq end1
              b loop

              end1:
              mov r1, #0x1
              b back

              end:
              mov r1, #0x0

              back:
              ldr r0, =0x020375E2
              strh r1, [r0]
              pop {r0-r4, pc}
              如果输入正确,返回8005的值为1,不正确为0
              没有测试过,另外不确定你的源码里用ldrb读取8005的值是否正确,8005是两个字节,一般都是ldrh,不过既然你没出问题那就无视


              IP属地:湖南来自Android客户端11楼2017-09-07 19:15
              收起回复
                不懂帮顶


                IP属地:广东12楼2017-09-07 19:26
                回复
                  悠然聚聚好厉害 以前想过这个但是不会。。


                  IP属地:甘肃来自Android客户端13楼2017-09-07 20:01
                  回复
                    楼上好多大佬


                    IP属地:上海来自Android客户端15楼2017-09-07 20:32
                    回复
                      噫 话说 这个查找金手指的功能怎么做到的・_・?


                      IP属地:甘肃来自Android客户端16楼2017-09-07 20:35
                      回复
                        想把它应用于火红。。


                        IP属地:甘肃来自Android客户端17楼2017-09-07 20:36
                        回复
                          问题很多
                          首先永远不用push和pop r0-r3,你这种代码不用push和pop任何寄存器,最后bx lr就可以
                          其次ROM里本身就有内置的字符串比较函数,没有必要设计,无脑调用即可
                          然后push前面那一大堆都不用写
                          模板:
                          .equ f_strcmp,0x8008E28 /*这是火红版的地址,绿宝石搜对应数据*/
                          push {lr}
                          ldr r0, =字符串1地址
                          ldr r1, =字符串2地址
                          ldr r2, =f_strcmp+1
                          bl bx_r2
                          ldr r1, =变量的地址
                          strh r0, [r1] /*相同字符串时返回0*/
                          pop {pc}
                          .ltorg
                          bx_r2: bx r2


                          IP属地:美国19楼2017-09-07 20:51
                          收起回复
                            膜拜聚聚


                            IP属地:广东来自iPhone客户端20楼2017-09-07 21:08
                            回复
                              不懂帮顶


                              IP属地:北京来自Android客户端21楼2017-09-07 21:55
                              回复