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

 找回密码
 加入口袋中心
搜索
楼主: 744865306
打印 上一主题 下一主题

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

[复制链接]

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

22#
 楼主| 发表于 2021-7-28 17:33:01 | 只看该作者
本站第一萌新 发表于 2021-7-27 20:41
这个函数在绿宝石工程里面搜索看逻辑 位于08042828
现在有反编译工程看逻辑,这些操作可以说变得太容易 ...

大佬,我又重新修改了一下,但是拥有特性的精灵开始战斗会卡死,没这个特性的精灵没事,经过测试,我发现删除bl 0x08E073E4就不会卡死,但又不会改变形态,可以帮忙看下嘛?
  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.         sub 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,#1
  29.         bne cmp
  30.         mov r2,#2
  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 r2,=BS_Script
  38.         ldr r4,=0x02024214
  39.         ldr r4,[r4]
  40.         str r2,[r4]
  41.         bl 0x08E073E4
  42.         b end
  43. cmp:
  44.         ; 经过计算将"满腹花纹"编号存入r2
  45.         cmp r5,#2
  46.         bne end
  47.         mov r2,#1
  48.         b keep
  49. .endfunc
  50. .pool

  51. BS_Script:
  52. .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

  53. .org 0x08E03682
  54.         ldr r2,=new
  55.         mov pc,r2
  56. .pool

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

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

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

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

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

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

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

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

19#
 楼主| 发表于 2021-7-27 20:15:43 | 只看该作者
本站第一萌新 发表于 2021-7-27 19:38
是说你看我教你搜索的特性(就是界限盾壳)是在什么函数里面的什么位置跳转的。当然802直接重写了这整个函 ...

见到了两段代码,emmm,看不懂,hook的话应该在哪呢?我找不太来地址:
  1. static bool check_leafguard_shieldsdown(u8 ability, u8 bank)
  2. {
  3.     if ((ability == ABILITY_SHIELDS_DOWN && battle_participants[bank].species == POKE_MINIOR_METEOR) || (ability == ABILITY_LEAF_GUARD && weather_abilities_effect() && (SUN_WEATHER)))
  4.         return 1;
  5.     return 0;
  6. }


  7. case POKE_MINIOR_CORE:
  8.                                 if((battle_participants[bank].current_hp >= (battle_participants[bank].max_hp / 2)) && check_ability(bank,ABILITY_SHIELDS_DOWN))
  9.                                 {
  10.                                     effect = 1;
  11.                                     new_battlestruct->various.var1 = POKE_MINIOR_METEOR;
  12.                                     new_battlestruct->various.var2 = 0x242;
  13.                                     battle_scripting.active_bank=bank;
  14.                                     call_bc_move_exec(BS_STAT_ONLY_FORMCHANGE_END2);
  15.                                 }
  16.                                 break;
复制代码
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

18#
发表于 2021-7-27 19:38:17 | 只看该作者
744865306 发表于 2021-7-27 18:13
我找不到它在哪跳转……

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

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

17#
 楼主| 发表于 2021-7-27 18:13:31 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-27 17:50
界限盾壳在哪里跳转,你就在哪里跳转

我找不到它在哪跳转……
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

16#
发表于 2021-7-27 17:50:17 | 只看该作者
744865306 发表于 2021-7-27 17:46
那个……这个特性应该在哪跳转

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

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

15#
 楼主| 发表于 2021-7-27 17:46:49 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-27 15:57
没事,下次用之前记得说一下就行

那个……这个特性应该在哪跳转
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

14#
 楼主| 发表于 2021-7-27 16:08:21 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-27 15:57
没事,下次用之前记得说一下就行

好的,谢谢大佬
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

13#
发表于 2021-7-27 15:57:42 | 只看该作者
744865306 发表于 2021-7-27 15:35
感谢大佬,话说大佬之前说的那个用了ASM杂项集合代码没说的人可能是我,真的非常抱歉

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

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

12#
 楼主| 发表于 2021-7-27 15:35:45 | 只看该作者
本站第一萌新 发表于 2021-7-27 14:33
为什么要写入1,因为后面有这些代码另外这个bs_execute就是我之前说的执行战斗脚本的函数 位于0x08E073E4 ...

感谢大佬,话说大佬之前说的那个用了ASM杂项集合代码没说的人可能是我,真的非常抱歉
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

11#
发表于 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里面
业余改版爱好者
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

10#
 楼主| 发表于 2021-7-27 11:48:46 | 只看该作者
本站第一萌新 发表于 2021-7-26 17:15
战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂

大佬,我之前去看了一下,找到了如下代码:
  1. case ABILITY_SHIELDS_DOWN:
  2.                 if(battle_participants[bank].species==POKE_MINIOR_CORE && (battle_participants[bank].current_hp >= (battle_participants[bank].max_hp >> 1)) && !battle_participants[bank].status2.transformed)
  3.                 {
  4.                     common_effect = 1;
  5.                     new_battlestruct->various.var1 = POKE_MINIOR_METEOR;
  6.                     new_battlestruct->various.var2 = 0x242;
  7.                     script_ptr = BS_STAT_ONLY_FORMCHANGE_END3;
  8.                 }
  9.                 break;
复制代码
但我还是有些地方不太理解,为什么common_effect要写入1,还有后面那个为什么要写入0x242,以及后面的BS脚本我并没有找到代码
回复 支持 反对

使用道具 举报

104

帖子

650

现金

0

勋章券

手举徽章的兴奋

Rank: 6Rank: 6

积分
347

时光印记Lv.1

9#
 楼主| 发表于 2021-7-26 21:31:13 来自手机 | 只看该作者
本站第一萌新 发表于 2021-7-26 17:15
战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂

好的,谢谢大佬
回复 支持 反对

使用道具 举报

118

帖子

1186

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
454

时光印记Lv.1

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

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

使用道具 举报

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

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-6-3 23:53 , Processed in 0.062329 second(s), 26 queries , Eaccelerator On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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