Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

标题: 绿宝石随机经验源码 [打印本页]

作者: 744865306    时间: 2021-5-3 07:01
标题: 绿宝石随机经验源码

仅可给非802及其改版的非反编译绿宝石版本使用,请用ARMIPS编译源码,使用前请先修改版本,写入地址等信息

.gba
.thumb
.create "test.gba",0x8000000
.close
.open "绿宝石.gba","test.gba",0x8000000

.org 0x08E3CF68
.func randomexp
        ldr r0,=(0x0806F5CC|1)
        bl call_bx
        lsl r0,r0,#0x10
        cmp r6,#0x0
        beq goto
        ldr r2,=(change|1)
        bx r2
.endfunc
.pool

.func goto
        ldr r2,=(0x0804A4FC|1)
        bx r2
.endfunc
.pool

.func call_bx
        bx r0
.endfunc
.pool

.org 0x0804A4AA
        mul r0,r2
        mov r2,r0
        ldr r0,=(randomexp|1)
        bx r0
change:
        mov r2,#0x0
.pool

.close
作者: jiangzhengwenjz    时间: 2021-5-3 23:30
change:
        mov r2,#0x0
.pool

真的大丈夫?
作者: 744865306    时间: 2021-5-4 15:12
jiangzhengwenjz 发表于 2021-5-3 23:30
change:
        mov r2,#0x0
.pool

没看懂大佬意思,不过我貌似写错了个地方,那个lsl应该改成mov r1,r0
作者: 744865306    时间: 2021-5-4 20:55
744865306 发表于 2021-5-4 15:12
没看懂大佬意思,不过我貌似写错了个地方,那个lsl应该改成mov r1,r0

啊,应该这样

.gba
.thumb
.create "test.gba",0x8000000
.close
.open "绿宝石.gba","test.gba",0x8000000

.org 0x08F80000
.func randomexp
        ldr r0,=(0x0806F5CC|1)
        bl call_bx
        mov r1,r0
        ldr r2,=(change|1)
        bx r2
.endfunc
.pool

.func call_bx
        bx r0
.endfunc
.pool

.org 0x0804A4AA
        mul r0,r2
        mov r2,r0
        ldr r0,=(randomexp|1)
        bx r0
change:
        mov r0,r1
.pool

.close
作者: jiangzhengwenjz    时间: 2021-5-5 09:15
744865306 发表于 2021-5-4 20:55
啊,应该这样

.gba

我不是说你的mov有问题,我也根本没看你的程序,只是想说,你指望mov r0, r1后面运行哪条指令呢?
作者: 744865306    时间: 2021-5-5 12:16
jiangzhengwenjz 发表于 2021-5-5 09:15
我不是说你的mov有问题,我也根本没看你的程序,只是想说,你指望mov r0, r1后面运行哪条指令呢?

我只是把mov r1,r0给恢复回来啊,跳转的时候不是会覆盖掉r0嘛?(萌新不懂,大概弄错了)
作者: jiangzhengwenjz    时间: 2021-5-5 13:33
744865306 发表于 2021-5-5 12:16
我只是把mov r1,r0给恢复回来啊,跳转的时候不是会覆盖掉r0嘛?(萌新不懂,大概弄错了)

我建议你仔细调试你的程序,随便看了看,就感觉有很多问题
1) mov r0, r1,后面直接.pool(等价于写入.long randomexp|1),根本没法正常运行的
2) mov r1, r0 和 mov r0, r1,引入r1的意义何在?
3) 从随机exp原理角度说(这个属于我瞎猜因为没看原本代码),生成exp数量的期望也未免太不合理了?不考虑是什么怪兽,平均都有个几万经验(?),那就没有实际意义
4) mov r2, r0,ROM里的函数都是遵循标准的calling convention的,也就是调用一个函数前后应该默认r0, r1, r2, r3, r12会被当作临时寄存器使用(值会发生变化),那你把数值存在r2里的意义是什么呢?(如果只是随便塞入无用的指令那当我没说)
作者: 喵1喵    时间: 2021-6-21 16:06
路过回复看,好奇
作者: kodaiwanjia    时间: 2021-8-20 07:09
有人知道全随机怎么做吗?




欢迎光临 Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论 (http://162.218.49.243/) Powered by Discuz! X3