求助,我写的特性未能达成想要的效果:
.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 744865306 发表于 2021-7-26 16:00
emmm,找不到特性代码,而且技能效果是用BS脚本的吧
战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂 重新修改了下,不过还是没成功,话说果然只有电脑端能回复这么多行呢
.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 战斗中变更种族不是这么直接改的...不记得绿宝石里有没有了,反正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:26
战斗中变更种族不是这么直接改的...不记得绿宝石里有没有了,反正802里面是有一个函数专门完成这个操作,逻 ...
……emmm,看不太懂 744865306 发表于 2021-7-26 09:54
……emmm,看不太懂
你仿照绿宝石战斗系统完全升级里面小陨星那个特性或者古老之歌,流星冲闪这些做就行了。 本站第一萌新 发表于 2021-7-26 10:53
你仿照绿宝石战斗系统完全升级里面小陨星那个特性或者古老之歌,流星冲闪这些做就行了。
emmm,找不到特性代码,而且技能效果是用BS脚本的吧 本站第一萌新 发表于 2021-7-26 17:15
战斗系统完全升级工程里面搜索ABILITY_SHIELDS_DOWN然后看相关逻辑 说实话用hook实现的话确实有点复杂
好的,谢谢大佬 本站第一萌新 发表于 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脚本我并没有找到代码 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里面 本站第一萌新 发表于 2021-7-27 14:33
为什么要写入1,因为后面有这些代码另外这个bs_execute就是我之前说的执行战斗脚本的函数 位于0x08E073E4 ...
感谢大佬,话说大佬之前说的那个用了ASM杂项集合代码没说的人可能是我,真的非常抱歉 744865306 发表于 2021-7-27 15:35
感谢大佬,话说大佬之前说的那个用了ASM杂项集合代码没说的人可能是我,真的非常抱歉
没事,下次用之前记得说一下就行 本站第一萌新 发表于 2021-7-27 15:57
没事,下次用之前记得说一下就行
好的,谢谢大佬 本站第一萌新 发表于 2021-7-27 15:57
没事,下次用之前记得说一下就行
那个……这个特性应该在哪跳转