【口袋妖怪改版教程】用ASM添加新的皮肤特性
1、新建一个ASM文件粘贴代码
2、代码如下:
.text
.thumb_func
.global pm
main:
lsl r0, r1, #0x1
add r0, r1
lsl r0, #0x2
add r0, r2
ldrb r0, [r0, #0x2]
push {r4}
mov r4, r0
bl get_ability
cmp r0, #NN(天空皮肤)
bne no_aerilate
cmp r4, #0x0
bne return
mov r0, #0x2
b return
no_aerilate:
cmp r0, #NN(普通皮肤)
bne no_normalize
mov r0, #0x0
b return
no_normalize:
cmp r0, #NN(冰冻皮肤)
bne no_refrigerate
cmp r4, #0x0
bne return
mov r0, #0xf
b return
no_refrigerate:
cmp r0, #0xNN(妖精皮肤)
bne return
cmp r4, #0x0
bne return
mov r0, #0x仙属性编号
b return
return:
pop {r4}
mov r8, r0
ldr r0, exit
bx r0
get_ability:
ldr r0, battle_participants
mov r1, #0x58
ldr r2, battle_attacker
ldrb r2, [r2]
mul r1, r2
mov r2, #0x20
add r1, r2
add r0, r1
ldrb r0, [r0]
.align 2
exit: .word 0x08047079
battle_participants: .word 0x02024084
battle_attacker: .word 0x0202420B
3、把里面的NN改成你要的新特性编号,保存编译。
4、把弄好的bin文件粘贴到rom里
5、将 0804706C处改成00 48 00 47 xx xx xx 08,xx xx xx 08是你的数据地址+1
6、代码解析:
代码如下:
.text
.thumb_func
.global pm
main:
lsl r0, r1, #0x1
add r0, r1
lsl r0, #0x2
add r0, r2
ldrb r0, [r0, #0x2]
push {r4}
mov r4, r0//前面基本无视
bl get_ability//跳转到取得战斗中宠物的特性编号,并存入寄存器r0返回
cmp r0, #NN(天空皮肤)//对比
bne no_aerilate//不是则跳转下一个特性判断
cmp r4, #0x0//r4=使用技能的属性,判断是否为普通系
bne return //不是则跳走
mov r0, #0x2//属性改变
b return
//下同
no_aerilate:
cmp r0, #NN(普通皮肤)
bne no_normalize
mov r0, #0x0
b return
no_normalize:
cmp r0, #NN(冰冻皮肤)
bne no_refrigerate
cmp r4, #0x0
bne return
mov r0, #0xf
b return
no_refrigerate:
cmp r0, #0xNN(妖精皮肤)
bne return
cmp r4, #0x0
bne return
mov r0, #0x仙属性编号
b return
return:
pop {r4}
mov r8, r0
ldr r0, exit
bx r0
get_ability:
ldr r0, battle_participants
mov r1, #0x58
ldr r2, battle_attacker
ldrb r2, [r2]
mul r1, r2
mov r2, #0x20
add r1, r2
add r0, r1
ldrb r0, [r0]
.align 2
exit: .word 0x08047079
battle_participants: .word 0x02024084
battle_attacker: .word 0x0202420B