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

 找回密码
 加入口袋中心
搜索
楼主: 744865306

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

[复制链接]

115

回帖

1374

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 2021-7-29 09:19:34 | 显示全部楼层
744865306 发表于 2021-7-28 17:33
大佬,我又重新修改了一下,但是拥有特性的精灵开始战斗会卡死,没这个特性的精灵没事,经过测试,我发现 ...

看了一下逻辑
  1. keep:
  2.         mov r5,r0
  3.         mov r0,r2
  4.         mov r1,#0xFF
  5.         add r1,#0x22
  6.         lsl r1,r1,#1
  7.         ldr r2,=BS_Script
  8.         ldr r4,=0x02024214
  9.         ldr r4,[r4]
  10.         str r2,[r4]
  11.         bl 0x08E073E4 ;这是什么鬼?
  12.         b end
复制代码
这个函数是接受战斗脚本作为参数的,你正确的写法是
  1. ....
  2. ;ldr r2, =BS_Script 删掉注释的代码!
  3. ;ldr r4, =0x02024214
  4. ;ldr r4, [r4]
  5. ;str r2, [r4]
  6. ldr r0, =BS_Script
  7. bl 0x08E073E4
  8. ....
复制代码
另外
  1. ldr r4, =0x02024214
  2. ldr r4, [r4]
复制代码
这是什么意思?如果你想要将不用函数设置战斗脚本的话,去掉ldr r4, [r4],具体为什么你结合nogba跑一下就知道了
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1374

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 2021-7-29 09:21:12 | 显示全部楼层
744865306 发表于 2021-7-29 06:57
我直接抄的战斗脚本

脚本应该是正确的,具体问题看上一楼的回复
业余改版爱好者
回复 支持 反对

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

 楼主| 发表于 2021-7-29 11:29:10 来自手机 | 显示全部楼层
本站第一萌新 发表于 2021-7-29 09:21
脚本应该是正确的,具体问题看上一楼的回复

我的新精灵编号是放在了r0,这样不会盖掉嘛?
回复 支持 反对

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

 楼主| 发表于 2021-7-29 11:50:09 | 显示全部楼层
本站第一萌新 发表于 2021-7-29 09:21
脚本应该是正确的,具体问题看上一楼的回复

经过一番修改后,我发现变成了0号精灵,代码如下:
  1. .gba
  2. .thumb
  3. .create "test.gba",0x8000000
  4. .close
  5. .open "永暗.gba","test.gba",0x8000000

  6. .org 0x08F2EB24
  7. .func new
  8.         ldr r5,=0x0202420B
  9.         ldrb r5,[r5]
  10.         mov r2,#0x58
  11.         mul r5,r2
  12.         ldr r2,=0x02024084
  13.         add r5,r2
  14.         add r5,#0x20
  15.         ldrb r5,[r5]
  16.         cmp r5,#0xE9 ;"饱了又饿"特性编号
  17.         beq yes
  18. end:
  19.         lsl r6,r2,#0
  20.         mov r2,#0x9B
  21.         add sp,#-0x2C
  22.         str r3,[sp,#12]
  23.         ldr r1,=0x08E0368A
  24.         mov pc,r1
  25. yes:
  26.         ldrh r5,[r2]
  27.         ; 经过计算将"空腹花纹"编号存入r2
  28.         cmp r5,#4
  29.         bne cmp
  30.         mov r2,#5
  31. keep:
  32.         mov r5,r0
  33.         mov r0,r2
  34.         mov r1,#0xFF
  35.         add r1,#0x22
  36.         lsl r1,r1,#1
  37.         ldr r0,=BS_Script
  38.         bl 0x08E073E4
  39.         mov r0,r5
  40.         b end
  41. cmp:
  42.         ; 经过计算将"满腹花纹"编号存入r2
  43.         cmp r5,#5
  44.         bne end
  45.         mov r2,#4
  46.         b keep
  47. .endfunc
  48. .pool

  49. BS_Script:
  50. .byte 0x10,0x30,0x1,0x83,0x77,0x0,0x45,0xA,0x21,0x0,0x0,0x0,0x0,0x3A,0x83,0x7A,0x0,0x12,0x40,0x0,0x83,0x73,0x0,0x3F

  51. .org 0x08E03682
  52.         ldr r2,=new
  53.         mov pc,r2
  54. .pool

  55. .close
复制代码
回复 支持 反对

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

 楼主| 发表于 2021-7-29 11:51:32 来自手机 | 显示全部楼层
本站第一萌新 发表于 2021-7-29 09:21
脚本应该是正确的,具体问题看上一楼的回复

为什么会变成0号精灵呢?大佬帮我看看吧(话说还是用不来论坛的功能啊,我本来以为那个键是字体颜色,结果是字体背景颜色)
回复 支持 反对

使用道具 举报

115

回帖

1374

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 2021-7-29 14:09:25 | 显示全部楼层
744865306 发表于 2021-7-29 11:29
我的新精灵编号是放在了r0,这样不会盖掉嘛?

那你把他放到其他寄存器或者栈里保护起来不就行了
业余改版爱好者
回复 支持 反对

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

 楼主| 发表于 2021-7-29 14:30:36 来自手机 | 显示全部楼层
本站第一萌新 发表于 2021-7-29 14:09
那你把他放到其他寄存器或者栈里保护起来不就行了

唔……可是不管哪个寄存器都会出现我说的这个bug唉
回复 支持 反对

使用道具 举报

115

回帖

1374

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 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才怪了。
总而言之,还是老话:按照界限盾壳的写法写就可以了
业余改版爱好者
回复 支持 反对

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

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

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

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

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

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

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

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

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

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

 楼主| 发表于 2021-7-29 14:58:57 来自手机 | 显示全部楼层
744865306 发表于 2021-7-29 14:57
啊,不是转换不了,是我上次改了点东西没换回来

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

使用道具 举报

115

回帖

1374

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 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; //不知道是啥,应该照抄
复制代码
这个你有写吗?
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1374

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 2021-7-29 15:07:10 | 显示全部楼层
744865306 发表于 2021-7-29 14:56
r1没有那些数据的话根本就转换不了,回合末的地址的话我找不到……

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

使用道具 举报

94

回帖

645

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
344

时光印记Lv.1

 楼主| 发表于 2021-7-29 15:29:48 来自手机 | 显示全部楼层
本站第一萌新 发表于 2021-7-29 15:05
这个你有写吗?

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

使用道具 举报

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

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-4-18 09:19 , Processed in 0.105239 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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