口袋改版资源吧 关注:192,758贴子:1,323,025
  • 7回复贴,共1

【教程】绿宝石密码脚本

取消只看楼主收藏回复

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


我没玩过釉色,也不知道脚本在哪里,我用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客户端23楼2017-09-07 22:56
        回复
          火红的打开改精灵名字输入界面是
          special 0x9E
          变量8005的地址是020370C2
          输入的字存储的地址是
          02021CF0(这个地址我那个源码里面要减去1,因为我用变量8005的值加上这个地址上的值)
          这个地址我是通过VBA的金手指查找的功能找到的


          至于界面的美化
          0号精灵的名字和性别比例容易改,但是我找控制3F号字符的大小的数据,找了好久找不到,所以“的昵称是?”这几个字没法顶到屏幕外面,要消去的话可能只能永久的删掉(用文本大师搜索删掉就可以了)


          IP属地:广西26楼2017-09-07 23:59
          回复
            找到火红控制3F号字符字体大小的地址了
            可以把“的昵称是?”这几个字顶到屏幕外面去了


            254794:FF
            1FB13F:5A
            245EE0:09 74 09 25 0C 0C 3E 3F FF


            IP属地:广西27楼2017-09-08 01:12
            回复
              根据jzw聚聚的源码,写脚本方便多了,脚本是可以直接写英文和数字我文本的,所以可以直接不用文本大师
              ASM:
              .text
              .align 2
              .thumb
              .thumb_func

              main:
              .equ f_strcmp,0x8008E28
              push {lr}
              ldr r0, char
              ldr r1, char2
              ldr r2, =f_strcmp+1
              bl bx_r2
              ldr r1, var_8005
              strh r0, [r1] /*相同字符串时返回0*/
              pop {pc}

              .ltorg
              bx_r2: bx r2

              .align 2
              char: .word 0x02021CF0
              char2: .word 0x08F90030 /*密码地址*/
              var_8005: .word 0x020370C2

              脚本:
              //asm我写在0xF90000
              #dynamic 0xA00000
              #org @1
              setvar 0x8004 0x6
              special 0x9E
              pause 0x8

              callasm 0x8F90001
              pause 0x8
              compare 0x8005 0x0
              if 0x5 goto @2
              msgbox @yes 0x2
              end

              #org @2
              msgbox @no 0x2
              release
              end

              #org @yes
              = Right!

              #org @no
              = Wrong!

              //密码
              #org 0xF90030
              = 0123456789(最多写10个字符)


              IP属地:广西来自Android客户端34楼2017-09-08 08:57
              收起回复
                这是绿宝石的:
                .text
                .align 2
                .thumb
                .thumb_func


                main:
                .equ f_strcmp,0x8008C44
                push {lr}
                ldr r0, char
                ldr r1, char2
                ldr r2, =f_strcmp+1
                bl bx_r2
                ldr r1, var_8005
                strh r0, [r1] /*相同字符串时返回0*/
                pop {pc}

                .ltorg
                bx_r2: bx r2


                .align 2
                char: .word 0x02021DC4
                char2: .word 0x08F90030 /*密码地址*/
                var_8005: .word 0x020375E2
                脚本:
                //asm我写在0xF90000
                #dynamic 0xE00000
                #org @1
                setvar 0x8004 0x6
                special 0xA1
                pause 0x8


                callasm 0x8F90001
                pause 0x8
                compare 0x8005 0x0
                if 0x5 goto @2
                msgbox @yes 0x2
                end


                #org @2
                msgbox @no 0x2
                release
                end


                #org @yes
                = Right!


                #org @no
                = Wrong!


                //密码
                #org 0xF90030
                = 0123456789(最多写10个字符)


                再次感谢jzw聚聚帮我找到绿宝石的equf_strcmp的地址(@jiangzhengwen0


                IP属地:广西35楼2017-09-08 12:41
                回复