ASM汇编 绿宝石形态转换代码及脚本

霹雳雷霆帅的掉渣的绿毛猴

啥也不会的废物
元老
2022-08-05
65
1
56
1,008
24
Hello大家好,欢迎收看本帖,话不多说直入主题。
本期的教程是绿宝石里的形态转换,原帖请看B站的懒得想名字的帖子,下面链接:https://tieba.baidu.com/p/7445011167

因为原本的代码并不能直接打入ROM,并且还有一些小问题,所以我请教了懒懒,修复了这些问题,下面是修复过的代码。
代码:
.gba
.thumb
.create "3.0.gba",0x8000000
.close
.open "test.gba","3.0.gba",0x8000000

.org 0x8 【搜空位填上去】
push {r4,lr}
ldr r4, =0x020244EC
ldr r1, =0x020375E0
ldrh r1, [r1]
mov r2, #0x64
mul r1, r2
add r4, r1
mov r0, r4
get_species:
mov r1, #0xb
bl decrypt
ldr r1, =0x020375E0
ldrh r1, [r1,#0x2]
cmp r0, r1
bne exit
change_species:
mov r0, r4
mov r1, #0xb
ldr r2,=0x020375E0
add r2, #0x4
bl encrypt
mov r0, r4
bl statrecalc
exit:
pop {r4,pc}
encrypt:
ldr r3, =0x0806ACAD
bx r3
decrypt:
ldr r3, =0x0806A519
bx r3
statrecalc:
ldr r3, =0x08068D0D
bx r3

.pool
.close
这个代码已经多次测试,可以直接打入ROM,只需要把上面的地址换成你的改版的空位即可,这个地址也是asm的地址。

根据原帖教程,这样就行了,接下来就是脚本,原帖的脚本还是有点问题的,你并不能一次性转换成功,后来经过多次实验,脚本最终可以一次转换成功,下面是脚本代码:
代码:
#freespace 0x00
#dynamic 0x1000000
#org @1
msgbox @a 0x2
special 0xA2
setvar 0x8005 0xA4【转换前精灵编号】
setvar 0x8006 0x6【转换后精灵编号】
waitstate
msgbox @b 0x2
release
callasm 0x8【asm地址+1】
releaseall
end

#org @a
= 我来帮你用汉堡\n转喷火龙吧

#org @b
= 已经完成了

当然,这里脚本也不是最完美的,后面懒懒说,可能是setvar没结束的原因,大家可以把脚本这样写:
代码:
#freespace 0x00
#dynamic 0x1000000
#org @1
msgbox @a 0x2
special 0xA2
setvar 0x8005 0xA4
setvar 0x8006 0x6
waitstate
callasm 0x8EC9D61
msgbox @b 0x2
releaseall
end

#org @a
= 我来帮你用汉堡\n转喷火龙吧

#org @b
= 已经完成了

虽然我没试过,但是应该也是没问题的,只要让var成功运行就行。

本次教程到此结束,感谢各位的观看,另外感谢金毛虫和懒得想名字对修改代码时的帮助。
 

霹雳雷霆帅的掉渣的绿毛猴

啥也不会的废物
元老
2022-08-05
65
1
56
1,008
24
如果不会打入代码,也可以找个空位,把下面这里的数据写进去,记好起始地址就行
代码:
10B50F4C0F490988642251436418201C0B2100F010F80B494988884208D1201C0B21084A043200F004F8201C00F005F810BD054B1847054B1847054B18470000EC440202E0750302ADAC060819A506080D8D0608
 

在线成员

现在没有会员在线。

论坛统计

主题
341
消息
1,563
会员
2,319
最新会员
ab123

关于我们

  • 宝可梦以及其他相关名称是任天堂的商标,版权归宝可梦公司所有。宝可饭堂是一个同人游戏中文社区,不隶属于宝可梦公司。在宝可饭堂上的粉丝游戏亦未获得其授权,请支持正版游戏。
© 2022- pokefans.cn
点此延长宝可饭堂生命