【口袋妖怪改版教程】用ASM添加新的皮肤特性

2025-10-07 02:30:43

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢