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

 找回密码
 加入口袋中心
搜索
查看: 3851|回复: 50
打印 上一主题 下一主题

求助,我写的特性未能达成想要的效果:

[复制链接]

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

跳转到指定楼层
1#
发表于 2021-7-25 20:39:44 来自手机 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
.gba
.thumb
.create "test.gba",0x8000000
.close
.open "绿宝石.gba","test.gba",0x8000000

.org 0x08F00000
.func new
        lsl r0,r0,#4
        and r4,r0
        cmp r4,#0
        bne NoPPReduce
        mov r1,#0x58
        ldr r0,=0x0202420B
        ldrb r0,[r0]
        mul r0,r1
        ldr r1,=0x020240A4
        add r0,r1
        ldrb r0,[r0]
        cmp r0, #79 ;"饱了又饿"特性编号
        beq yes1
end:
        ldr r3,=(0x08046B04|1)
        bx r3
yes1:
        ldr r0,=0x02024084
        ldrh r0,[r0]
        cmp r0,#1 ;空腹花纹编号
        bne changenull
        mov r1,#2 ;满腹花纹编号
keep:
        strh r1,[r0]
        b end
changenull:
        mov r1,#1 ;空腹花纹编号
NoPPReduce:
        ldr r3,=(0x08046BDC|1)
        bx r3
.endfunc
.pool

.org 0x08046AFC
        ldr r3,=(new|1)
        bx r3
.pool

.close
回复

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

推荐
发表于 2021-7-26 17:15:35 | 只看该作者
744865306 发表于 2021-7-26 16:00
emmm,找不到特性代码,而且技能效果是用BS脚本的吧

战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂
业余改版爱好者
回复 支持 1 反对 0

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

51#
 楼主| 发表于 2021-7-29 21:03:25 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 20:35
我比较忙,抽不出具体时间帮你分析,只能用零碎时间给你提点建议。
你用nogba看看哪里卡死的,是不是在 ...

崩溃,那应该是函数有问题了
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

50#
发表于 2021-7-29 20:35:13 | 只看该作者
744865306 发表于 2021-7-29 19:27
大佬,我这样写,结果精灵转变成了妙蛙草且卡死,能看看是什么原因嘛?

.gba

我比较忙,抽不出具体时间帮你分析,只能用零碎时间给你提点建议。
你用nogba看看哪里卡死的,是不是在你函数内部卡死的。
还有卡死是哪种卡死?是nogba崩溃了还是卡在战斗界面但无法操作?如果是第一种估计是你的函数有问题,第二种估计是战斗脚本有问题。不过既然都能变化形态说明函数估计也没有什么大问题,就是要看看为什么变得不是你想要的精灵。
另外,之前就说了,这个函数的参数里自带bank,不要
  1. ldr r5,=0x0202420B
  2. ldrb r5,[r5]
  3. ......
  4. ldrh r5,[r2]
复制代码
用他的bank
业余改版爱好者
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

49#
 楼主| 发表于 2021-7-29 19:27:39 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 15:38
写出来没用啊,得存到对应的地方才行

大佬,我这样写,结果精灵转变成了妙蛙草且卡死,能看看是什么原因嘛?

.gba
.thumb
.include "编译工具/ArmipsBSMacros.asm"
.create "test.gba",0x8000000
.close
.open "永暗.gba","test.gba",0x8000000

.org 0x08F2EB24
.func new
        ldr r5,=0x0202420B
        ldrb r5,[r5]
        mov r2,#0x58
        mul r5,r2
        ldr r2,=0x02024084
        add r5,r2
        add r5,#0x20
        ldrb r5,[r5]
        cmp r5,#0xE9 ;"饱了又饿"特性编号
        beq yes
end:
        lsl r6,r2,#0
        mov r2,#0x9B
        add sp,#-0x2C
        str r3,[sp,#12]
        ldr r1,=0x08E0368A
        mov pc,r1
yes:
        ldrh r5,[r2]
        ; 经过计算将"空腹花纹"编号存入r2
        cmp r5,r2
        bne cmp
        mov r2,#5 ;满腹花纹编号
keep:
        mov r5,r0
        mov r0,r2
        push {r3}
        ldr r1,=0x02024218
        strh r0,[r1]
        mov r0,#0xFF
        add r0,#0x22
        lsl r0,r0,#1
        ldr r1,=0x02024218
        add r1,#2
        strh r0,[r1]
        ldr r0,=BS_Script
        bl 0x08E073E4
        pop {r3}
        mov r0,r5
        b end
cmp:
        ; 经过计算将"满腹花纹"编号存入r2
        cmp r5,r2
        bne end
        mov r2,#4 ;空腹花纹编号
        b keep
.endfunc
.pool

BS_Script:
printstring 0x130
callasm_cmd 119
playanimation 0xA 0x21 0x0
waitstate
callasm_cmd 122
waitmessage 0x40
callasm_cmd 115
end3

.org 0x08E03682
        ldr r2,=new
        mov pc,r2
.pool

.close
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

48#
 楼主| 发表于 2021-7-29 17:54:01 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 15:36
那你把他们存起来了吗 我没有在你的代码里看到new_battlestruct的指针0x02024218

啊,原来要存到那里面,我都没看出这个词是什么,谢谢大佬
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

47#
发表于 2021-7-29 15:38:37 | 只看该作者
744865306 发表于 2021-7-29 15:29
有啊,那俩数据我存在了r0和r1
  1. mov r0,r2
  2. mov r1,#0xFF
  3. add r1,#0x22
  4. lsl r1,r1,#1
复制代码
写出来没用啊,得存到对应的地方才行
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

46#
发表于 2021-7-29 15:36:49 | 只看该作者
744865306 发表于 2021-7-29 15:29
有啊,那俩数据我存在了r0和r1

那你把他们存起来了吗 我没有在你的代码里看到new_battlestruct的指针0x02024218
业余改版爱好者
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

45#
 楼主| 发表于 2021-7-29 15:29:48 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 15:05
这个你有写吗?

有啊,那俩数据我存在了r0和r1
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

44#
发表于 2021-7-29 15:07:10 | 只看该作者
744865306 发表于 2021-7-29 14:56
r1没有那些数据的话根本就转换不了,回合末的地址的话我找不到……

你用nogba走一下就知道回合末在哪了
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

43#
发表于 2021-7-29 15:05:05 | 只看该作者
744865306 发表于 2021-7-29 14:50
界限盾壳不是这样写的嘛?(懵)
  1. new_battlestruct->various.var1 = POKE_MINIOR_METEOR; //应该是变化后的种族吧
  2. new_battlestruct->various.var2 = 0x242; //不知道是啥,应该照抄
复制代码
这个你有写吗?
业余改版爱好者
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

42#
 楼主| 发表于 2021-7-29 14:58:57 来自手机 | 只看该作者
744865306 发表于 2021-7-29 14:57
啊,不是转换不了,是我上次改了点东西没换回来

唔……这个r1貌似确实是没用
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

41#
 楼主| 发表于 2021-7-29 14:57:43 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 14:36
首先你hook的位置问题就很大 你应该在下hook,因为如果我没记错的话饱了又饿特性是回合末发动的。
其次 ...

啊,不是转换不了,是我上次改了点东西没换回来
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

40#
 楼主| 发表于 2021-7-29 14:56:26 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 14:36
首先你hook的位置问题就很大 你应该在下hook,因为如果我没记错的话饱了又饿特性是回合末发动的。
其次 ...

r1没有那些数据的话根本就转换不了,回合末的地址的话我找不到……
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

39#
 楼主| 发表于 2021-7-29 14:50:29 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-29 14:36
首先你hook的位置问题就很大 你应该在下hook,因为如果我没记错的话饱了又饿特性是回合末发动的。
其次 ...

界限盾壳不是这样写的嘛?(懵)
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

38#
发表于 2021-7-29 14:36:46 | 只看该作者
744865306 发表于 2021-7-29 11:50
经过一番修改后,我发现变成了0号精灵,代码如下:

首先你hook的位置问题就很大 你应该在
  1. case 1: //end turn abilities
复制代码
下hook,因为如果我没记错的话饱了又饿特性是回合末发动的。
其次,这个函数的参数本来就有bank,而且并不一定是attacker,你写的这些操作
  1. ldr r5,=0x0202420B
  2. ldrb r5,[r5]
  3. .......
  4. ldrh r5,[r2]
  5.         ; 经过计算将"空腹花纹"编号存入r2
复制代码
是错误而且毫无意义的,建议你好好再看一下这个函数的逻辑
然后,
  1. mov r0,r2
  2. mov r1,#0xFF
  3. add r1,#0x22
  4. lsl r1,r1,#1
复制代码
这些是干什么的?不管是干什么的,他都起不到作用,因为后面调用了函数,重设了r0-r3的值
最后,你把需要变更的精灵的种族放在了r0,然后就没有操作了?直接执行变更的脚本,不出bug才怪了。
总而言之,还是老话:按照界限盾壳的写法写就可以了
业余改版爱好者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-5-18 16:09 , Processed in 0.106052 second(s), 30 queries , Eaccelerator On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表