744865306 发表于 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,
      mul r0,r1
      ldr r1,=0x020240A4
      add r0,r1
      ldrb r0,
      cmp r0, #79 ;"饱了又饿"特性编号
      beq yes1
end:
      ldr r3,=(0x08046B04|1)
      bx r3
yes1:
      ldr r0,=0x02024084
      ldrh r0,
      cmp r0,#1 ;空腹花纹编号
      bne changenull
      mov r1,#2 ;满腹花纹编号
keep:
      strh r1,
      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

本站第一萌新 发表于 2021-7-26 17:15:35

744865306 发表于 2021-7-26 16:00
emmm,找不到特性代码,而且技能效果是用BS脚本的吧

战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂

744865306 发表于 2021-7-25 21:26:08

重新修改了下,不过还是没成功,话说果然只有电脑端能回复这么多行呢

.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,
      mul r0,r1
      ldr r1,=0x02024084
      add r0,r1
      add r0,#0x20
      ldrb r0,
      cmp r0, #79 ;"饱了又饿"特性编号
      beq yes1
end:
      ldr r3,=(0x08046B04|1)
      bx r3
yes1:
      ldr r3,=0x0202420B
      ldrb r3,
      mov r0,#0x58
      mul r3,r0
      add r1,r3
      ldrh r1,
      cmp r1,#1 ;空腹花纹编号
      bne changenull
      mov r0,#2 ;满腹花纹编号
keep:
      strh r0,
      b end
changenull:
      mov r0,#1 ;空腹花纹编号
NoPPReduce:
      ldr r3,=(0x08046BDC|1)
      bx r3
.endfunc
.pool

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

.close

本站第一萌新 发表于 2021-7-25 21:26:45

战斗中变更种族不是这么直接改的...不记得绿宝石里有没有了,反正802里面是有一个函数专门完成这个操作,逻辑如下:static void species_change(u8 bank, u16 new_species)
{
    battle_participants.species = new_species;
    active_bank = bank;
    bb2_setattributes_in_battle(0, 1, 0, 2, &battle_participants.species); //0x08033900|1
    mark_buffer_bank_for_execution(bank); //0x0803F800|1
}如果绿宝石石里没有你可以自己写一个。然后在战斗脚本的callasm库里面加一个函数即可

本站第一萌新 发表于 2021-7-25 21:28:52

另外,建议你把代码用代码框框起来 看着好看点。全部选中点击上面的<>就行了就像这样

744865306 发表于 2021-7-26 09:54:40

本站第一萌新 发表于 2021-7-25 21:26
战斗中变更种族不是这么直接改的...不记得绿宝石里有没有了,反正802里面是有一个函数专门完成这个操作,逻 ...

……emmm,看不太懂

本站第一萌新 发表于 2021-7-26 10:53:38

744865306 发表于 2021-7-26 09:54
……emmm,看不太懂

你仿照绿宝石战斗系统完全升级里面小陨星那个特性或者古老之歌,流星冲闪这些做就行了。

744865306 发表于 2021-7-26 16:00:07

本站第一萌新 发表于 2021-7-26 10:53
你仿照绿宝石战斗系统完全升级里面小陨星那个特性或者古老之歌,流星冲闪这些做就行了。

emmm,找不到特性代码,而且技能效果是用BS脚本的吧

744865306 发表于 2021-7-26 21:31:13

本站第一萌新 发表于 2021-7-26 17:15
战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂

好的,谢谢大佬

744865306 发表于 2021-7-27 11:48:46

本站第一萌新 发表于 2021-7-26 17:15
战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂

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

本站第一萌新 发表于 2021-7-27 14:33:12

744865306 发表于 2021-7-27 11:48
大佬,我之前去看了一下,找到了如下代码:但我还是有些地方不太理解,为什么common_effect要写入1,还有 ...

为什么要写入1,因为后面有这些代码if (common_effect)
{
    effect = true;
    battle_scripting.active_bank = bank;
    bs_execute(script_ptr);
}另外这个bs_execute就是我之前说的执行战斗脚本的函数 位于0x08E073E4(802 3.0版本)
至于BS脚本你也是直接搜索就行,在battlescritps.s里面

744865306 发表于 2021-7-27 15:35:45

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

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

本站第一萌新 发表于 2021-7-27 15:57:42

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

没事,下次用之前记得说一下就行

744865306 发表于 2021-7-27 16:08:21

本站第一萌新 发表于 2021-7-27 15:57
没事,下次用之前记得说一下就行

好的,谢谢大佬

744865306 发表于 2021-7-27 17:46:49

本站第一萌新 发表于 2021-7-27 15:57
没事,下次用之前记得说一下就行

那个……这个特性应该在哪跳转
页: [1] 2 3 4
查看完整版本: 求助,我写的特性未能达成想要的效果: