【口袋妖怪改版教程】增加羊皮外衣,多重鳞片
1、首先,新建一个ASM文本文件,具体方法如下:
右键,新建文本文件,然后右键那个新文件,将.txt改成.asm,注意文件名字不可以为汉字。
2、粘贴下列源码,注意选择你需要的版本
3、火红版本
.text
.align 2
.thumb
.thumb_func
.global multiscaleandfurcoat
Main:
ldr r2, [sp, #0x28]
ldrb r0, [r2]
cmp r0, #0x3F
bne Multiscale
ldr r0, .Return
bx r0
Multiscale:
cmp r0, #0xNN(多重鳞片编号)
bne FurCoat
CheckHP:
ldr r1, [sp, #0x4]
ldrh r0, [r1, #0x28]
ldrh r1, [r1, #0x2C]
cmp r1, r0
bne Return
HalveDamage:
lsr r7, r7, #0x1
mov r0, r8
lsr r0, r0, #0x1
mov r8, r0
FurCoat:
cmp r0, #0xNN(羊皮外衣编号)
bne Return
DefenseBoost:
ldr r1, [sp, #0x14]
mov r0, r1
add r1, r0, r0
str r1, [sp, #0x14]
Return:
ldr r2, .Return2
bx r2
.align 2
.Return: .word 0x0803F0E9
.Return2: .word 0x0803F103
4、宝石版本
.text
.align 2
.thumb
.thumb_func
.global multiscaleandfurcoat
Main:
ldrb r0, [r2]
cmp r0, #0x3F
bne Multiscale
ldr r3, [sp, #0x4]
ldr r0, .Return
bx r0
Multiscale:
cmp r0, #0xNN(多重鳞片编号)
bne Furcoat
CheckHP:
ldr r1, [sp, #0x4]
ldrh r0, [r1, #0x28]
ldrh r1, [r1, #0x2C]
cmp r1, r0
bne Return
HalveDamage:
lsr r7, r7, #0x1
mov r0, r8
lsr r0, r0, #0x1
mov r8, r0
FurCoat:
cmp r0, #0xNN(羊皮外衣编号)
bne Return
DefenseBoost:
ldr r1, [sp, #0x18]
mov r0, r1
add r1, r0, r0
str r1, [sp, #0x18]
Return:
ldr r2, .Return2
bx r2
.align 2
.Return: .word 0x08069921
.Return2: .word 0x08069939
5、接着,把源码里的NN改成你需要的编号,保存用thumb编译
6、编译好后将数据贴入你的rom内,记住粘贴的空位地址
7、将下列地址数据进行更改:
宝石版本:00 48 00 47 xx xx xx 08 写到069918上
火红版本:00 48 00 47 xx xx xx 08 写到03F0E0上
xx xx xx 08是你的源码空位地址+1
8、代码解析:
宝石版本
.text
.align 2
.thumb
.thumb_func
.global multiscaleandfurcoat
Main:
ldrb r0, [r2]
cmp r0, #0x3F
bne Multiscale//这里r0储存了特性编号,如果不是3F则跳转判断多重鳞片处,是则按照跳转前的程序进行
ldr r3, [sp, #0x4]
ldr r0, .Return
bx r0//返回
Multiscale:
cmp r0, #0xNN(多重鳞片编号)
bne Furcoat//判断多重鳞片,不是则去判断羊皮外衣(真麻烦。。)
CheckHP:
ldr r1, [sp, #0x4]
ldrh r0, [r1, #0x28]
ldrh r1, [r1, #0x2C]
cmp r1, r0//对比目前宠物最大的HP和现在的HP,如果不相同则跳走结束程序
bne Return
HalveDamage:
lsr r7, r7, #0x1
mov r0, r8
lsr r0, r0, #0x1
mov r8, r0//将伤害降低
FurCoat:
cmp r0, #0xNN(羊皮外衣编号)
bne Return//羊皮外衣判断,不是则结束
DefenseBoost:
ldr r1, [sp, #0x18]
mov r0, r1//r0r1都是目前的防御力
add r1, r0, r0
str r1, [sp, #0x18]/+防御相加写入内存
Return:
ldr r2, .Return2
bx r2
.align 2
.Return: .word 0x08069921
.Return2: .word 0x08069939
9、最后保存测试