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

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

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

[复制链接]

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

1#
发表于 2021-7-25 21:26:45 | 显示全部楼层
战斗中变更种族不是这么直接改的...不记得绿宝石里有没有了,反正802里面是有一个函数专门完成这个操作,逻辑如下:
  1. static void species_change(u8 bank, u16 new_species)
  2. {
  3.     battle_participants[bank].species = new_species;
  4.     active_bank = bank;
  5.     bb2_setattributes_in_battle(0, 1, 0, 2, &battle_participants[bank].species); //0x08033900|1
  6.     mark_buffer_bank_for_execution(bank); //0x0803F800|1
  7. }
复制代码
如果绿宝石石里没有你可以自己写一个。然后在战斗脚本的callasm库里面加一个函数即可
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

2#
发表于 2021-7-25 21:28:52 | 显示全部楼层
另外,建议你把代码用代码框框起来 看着好看点。全部选中点击上面的<>就行了
  1. 就像这样
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

3#
发表于 2021-7-26 10:53:38 | 显示全部楼层
744865306 发表于 2021-7-26 09:54
……emmm,看不太懂

你仿照绿宝石战斗系统完全升级里面小陨星那个特性或者古老之歌,流星冲闪这些做就行了。
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

4#
发表于 2021-7-26 17:15:35 | 显示全部楼层
744865306 发表于 2021-7-26 16:00
emmm,找不到特性代码,而且技能效果是用BS脚本的吧

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

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

5#
发表于 2021-7-27 14:33:12 | 显示全部楼层
744865306 发表于 2021-7-27 11:48
大佬,我之前去看了一下,找到了如下代码:但我还是有些地方不太理解,为什么common_effect要写入1,还有 ...

为什么要写入1,因为后面有这些代码
  1. if (common_effect)
  2. {
  3.     effect = true;
  4.     battle_scripting.active_bank = bank;
  5.     bs_execute(script_ptr);
  6. }
复制代码
另外这个bs_execute就是我之前说的执行战斗脚本的函数 位于0x08E073E4(802 3.0版本)
至于BS脚本你也是直接搜索就行,在battlescritps.s里面
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

6#
发表于 2021-7-27 15:57:42 | 显示全部楼层
744865306 发表于 2021-7-27 15:35
感谢大佬,话说大佬之前说的那个用了ASM杂项集合代码没说的人可能是我,真的非常抱歉

没事,下次用之前记得说一下就行
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

7#
发表于 2021-7-27 17:50:17 | 显示全部楼层
744865306 发表于 2021-7-27 17:46
那个……这个特性应该在哪跳转

界限盾壳在哪里跳转,你就在哪里跳转
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

8#
发表于 2021-7-27 19:38:17 | 显示全部楼层
744865306 发表于 2021-7-27 18:13
我找不到它在哪跳转……

是说你看我教你搜索的特性(就是界限盾壳)是在什么函数里面的什么位置跳转的。当然802直接重写了这整个函数,你不需要这样做,只需要用hook就行了
解释的有点抽象 可能很难理解 但我也不知道该怎么解释比较好
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

9#
发表于 2021-7-27 20:39:43 | 显示全部楼层
744865306 发表于 2021-7-27 20:15
见到了两段代码,emmm,看不懂,hook的话应该在哪呢?我找不太来地址:

简单的实现回合结束换种族的话不用管这两个,照着十楼的代码写就行了
hook位置: AbilityBattleEffects函数 case ABILITYEFFECT_ENDTURN: // 1 下
再结合nogba跑一下
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

10#
发表于 2021-7-27 20:41:23 | 显示全部楼层
本站第一萌新 发表于 2021-7-27 20:39
简单的实现回合结束换种族的话不用管这两个,照着十楼的代码写就行了
hook位置: AbilityBattleEffects ...

这个函数在绿宝石工程里面搜索看逻辑 位于08042828
现在有反编译工程看逻辑,这些操作可以说变得太容易不过了。以前没有反编译工程的话,分析会难十倍
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

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


你蓝本是不是802啊,那个函数是802独有的,给你的地址又是802下的3.0版本独有的
没有的话要自己写一个 包括战斗脚本中如果又callasm的话也是802独有的,因为他重写了整个callasm table
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

12#
发表于 2021-7-28 21:36:13 | 显示全部楼层
744865306 发表于 2021-7-28 20:37
是802没错,所以为什么会这样呢?

你结合nogba跑一下看看是哪里卡死了
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

13#
发表于 2021-7-28 21:37:46 | 显示全部楼层
744865306 发表于 2021-7-28 21:18
唔……感觉是callasm和802的不一样,这样就写不来战斗脚本了的说

你看看界限盾壳他们的战斗脚本是怎么写的就知道了
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

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

还有,千万不要用sub sp, XXX,用add sp, -XXX
这估计是armips的bug,每次用sub写入的时候都会莫名其妙变成其他的数
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

15#
发表于 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跑一下就知道了
业余改版爱好者
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-5-22 11:17 , Processed in 0.253096 second(s), 24 queries , Eaccelerator On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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