Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

标题: ASM杂项集合【802/绿宝石】 [打印本页]

作者: 本站第一萌新    时间: 2020-5-2 21:06
标题: ASM杂项集合【802/绿宝石】
本帖最后由 本站第一萌新 于 2021-7-27 15:59 编辑

来这个论坛已经有不少时间了,一直也没什么好分享的,随便改一点以前写过的ASM代码给入门者参考一下吧。(虽然现在用ASM意义不大了:()
前排提示:本人也是新手,编程方面完全是业余水平,故逻辑可能不是特别清楚。如有错误欢迎大佬指正。
蓝本:绿宝石802 3.0版本 理论上绿宝石原版也可以,如果遇到只适用于802 3.0版本的我会标注。本人主要使用绿宝石802作为蓝本,固可能有不少只适用于802的例程
工具:armips
文中需要的文件以及放在下方
注意:绿宝石802的精灵数据没有加密,而原版绿宝石是有加密的。所以有的例程我虽然没有标出仅适用于802,但可能并不适用于原版绿宝石!如果想要解决此问题,请使用下面的《解除原版绿宝石精灵加密检测》!
欢迎各位改版者用于改版,但请使用前至少留个言!
目录:
内置内存锁
滚动式多选框
洗髓丹
恢复之石
穿墙术
多初始宠
禁止购买作弊
std0显示道具图片
64X64头像
精灵献祭
火箭队扭蛋机
恐惧黑802
觉醒石
脚本执行器
所有野生精灵闪光
显示觉醒力量属性,威力
昼夜不同调色板
随机对战
王者状态
能力值界面查看精灵个体,努力
死亡模式
精灵可使用对应属性的野外技能
命名界面支持中文输入
随机商店
简易个体努力查看器
修改等级上限
802大师球修复
梦特系统
战斗条款
全随机
不遇敌
火箭队模式
明雷
解除原版绿宝石精灵加密检测
调高闪光率

ArmipsMacros.txt

29.16 KB, 下载次数: 306

脚本的宏。重命名为.asm。

CharTable.txt

68.53 KB, 下载次数: 381

字符表。

ArmipsBSMacros.txt

23.7 KB, 下载次数: 296

战斗脚本的宏


作者: 本站第一萌新    时间: 2020-5-2 21:07
本帖最后由 本站第一萌新 于 2020-5-6 07:32 编辑

搭建内置金手指(内存锁)系统
本系统并不是实现了真正的锁住内存,而是不停往指定内存里写数据
此系统根据输入数据的大小来判断应该用什么指令储存,但事实上有时我们要求将某一区域的值全部写0。有兴趣者可以自行更改程序
和初始村中蓝色胖子对话查看效果
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func GoldfingerPutIn
  10.         push {r4-r5, lr}
  11.         ldr r0, =0x020375E0
  12.         ldrh r0, [r0]
  13.         lsl r0, #3
  14.         ldr r2, =0x0203F000
  15.         add r0, r2
  16.         mov r1, r2
  17.         add r1, #40
  18.         ldr r2, [r0]
  19.         str r2, [r1]
  20.         ldr r2, [r0, #4]
  21.         str r2, [r1, #4]
  22.         ldr r0, =(Task_GfProcessInput|1)
  23.         mov r1, #0
  24.         ldr r3, =(0x080A8FB0|1)
  25.         bl call_bx
  26.         ldr r5, =0x03005E00
  27.         mov r1, #40
  28.         mul r0, r1
  29.         add r5, r0
  30.         mov r0, #0 ;X
  31.         mov r1, #0 ;Y
  32.         mov r2, #18 ;W
  33.         mov r3, #2 ;H
  34.         ldr r4, =(0x080E2A1C|1)
  35.         bl call_bx2
  36.         strh r0, [r5, #8] ;twindowId
  37.         mov r1, #0
  38.         strh r1, [r5, #10] ;tstate
  39.         mov r1, #3
  40.         strh r1, [r5, #12] ;tslot
  41.         mov r1, #0
  42.         ldr r3, =(0x08197854|1)
  43.         bl call_bx
  44.         mov r0, #0
  45.         ldr r3, =(0x081999BC|1)
  46.         bl call_bx
  47.         pop {r4-r5, pc}
  48. .endfunc
  49. .pool

  50. .func Task_GfProcessInput
  51.         push {r4-r6, lr}
  52.         mov r4, r0
  53.         ldr r6, =0x03005E00
  54.         mov r1, #40
  55.         mul r0, r1
  56.         add r6, r0
  57.         ldrh r5, [r6, #8] ;twindowId
  58.         ldrh r0, [r6, #10] ;tstate
  59.         cmp r0, #0
  60.         beq ShowGoldfinger
  61.         ldr r0, =0x030022C0
  62.         ldrh r0, [r0, #0x2E]
  63.         cmp r0, #1
  64.         beq A_Pressed
  65.         cmp r0, #2
  66.         beq B_Pressed
  67.         cmp r0, #0x10
  68.         beq Right_Pressed
  69.         cmp r0, #0x20
  70.         beq Left_Pressed
  71.         cmp r0, #0x40
  72.         beq Up_Pressed
  73.         cmp r0, #0x80
  74.         beq Down_Pressed
  75.         b InputEnd
  76. A_Pressed:
  77.         ldr r0, =0x020375E0
  78.         ldrh r0, [r0]
  79.         lsl r0, #3
  80.         ldr r2, =0x0203F000
  81.         add r0, r2
  82.         mov r1, r2
  83.         add r1, #40
  84.         ldr r2, [r1]
  85.         str r2, [r0]
  86.         ldr r2, [r1, #4]
  87.         str r2, [r0, #4]
  88.         mov r2, #0
  89.         str r2, [r1]
  90.         str r2, [r1, #4]
  91.         ldr r0, =0x020375E0
  92.         mov r1, #1
  93.         strh r1, [r0, #0x10]
  94.         b DeleteTaskAndFreeWindow
  95. B_Pressed:
  96.         mov r2, #0
  97.         str r2, [r1]
  98.         str r2, [r1, #4]
  99.         ldr r0, =0x020375E0
  100.         mov r1, #0
  101.         strh r1, [r0, #0x10]
  102. DeleteTaskAndFreeWindow:
  103.         mov r0, r4
  104.         ldr r3, =(0x080A909C|1)
  105.         bl call_bx
  106.         mov r0, r5
  107.         ldr r3, =(0x080E2A78|1)
  108.         bl call_bx
  109.         b InputEnd
  110. Right_Pressed:
  111.         ldrb r0, [r6, #12]
  112.         cmp r0, #4
  113.         beq InputEnd
  114.         cmp r0, #0
  115.         beq ChangeSide1
  116.         sub r0, #1
  117.         b UpdateNumber1
  118. ChangeSide1:
  119.         mov r0, #7
  120. UpdateNumber1:
  121.         strb r0, [r6, #12]
  122.         mov r1, r5
  123.         bl UpdateGoldfinger
  124.         b InputEnd
  125. Left_Pressed:
  126.         ldrb r0, [r6, #12]
  127.         cmp r0, #3
  128.         beq InputEnd
  129.         cmp r0, #7
  130.         beq ChangeSide2
  131.         add r0, #1
  132.         b UpdateNumber2
  133. ChangeSide2:
  134.         mov r0, #0
  135. UpdateNumber2:
  136.         strb r0, [r6, #12]
  137.         mov r1, r5
  138.         bl UpdateGoldfinger
  139.         b InputEnd
  140. Up_Pressed:
  141.         ldrb r0, [r6, #12]
  142.         ldr r1, =0x0203F000
  143.         add r1, #40
  144.         ldrb r2, [r0, r1]
  145.         cmp r2, #0xFF
  146.         bge InputEnd
  147.         add r2, #1
  148.         strb r2, [r0, r1]
  149.         mov r1, r5
  150.         bl UpdateGoldfinger
  151.         b InputEnd
  152. Down_Pressed:
  153.         ldrb r0, [r6, #12]
  154.         ldr r1, =0x0203F000
  155.         add r1, #40
  156.         ldrb r2, [r0, r1]
  157.         cmp r2, #0
  158.         ble InputEnd
  159.         sub r2, #1
  160.         strb r2, [r0, r1]
  161.         mov r1, r5
  162.         bl UpdateGoldfinger
  163.         b InputEnd
  164. ShowGoldfinger:
  165.         mov r0, #3
  166.         mov r1, r5
  167.         bl UpdateGoldfinger
  168.         mov r0, #1
  169.         strh r0, [r6, #10]
  170. InputEnd:
  171.         pop {r4-r6, pc}
  172. .endfunc
  173. .pool

  174. .func UpdateGoldfinger
  175.         push {r4-r7, lr}
  176.         add sp, #-8
  177.         mov r7, r0
  178.         mov r5, r1
  179.         mov r0, r1
  180.         mov r1, #17
  181.         ldr r3, =(0x08003C48|1)
  182.         bl call_bx
  183.         mov r6, #0
  184. PrintPointerLoop:
  185.         cmp r6, #4
  186.         bge PrintColon
  187.         mov r0, r6
  188.         mov r1, r7
  189.         mov r2, r5
  190.         bl PrintNumberWithClour
  191.         add r6, #1
  192.         b PrintPointerLoop
  193. PrintColon:
  194.         mov r0, #0
  195.         str r0, [sp]
  196.         str r0, [sp, #4]
  197.         mov r0, r5
  198.         ldr r1, =gText_Colon
  199.         mov r2, #65
  200.         mov r3, #1
  201.         ldr r4, =(0x080E04A4|1)
  202.         bl call_bx2
  203. PrintInputLoop:
  204.         cmp r6, #8
  205.         bge PrintEnd
  206.         mov r0, r6
  207.         mov r1, r7
  208.         mov r2, r5
  209.         bl PrintNumberWithClour
  210.         add r6, #1
  211.         b PrintInputLoop
  212. PrintEnd:
  213.         add sp, #8
  214.         pop {r4-r7, pc}
  215. .endfunc
  216. .pool

  217. .func PrintNumberWithClour
  218.         push {r4-r7, lr}
  219.         add sp, #-8
  220.         mov r5, r0
  221.         mov r6, r1
  222.         mov r7, r2
  223.         ldr r0, =0x02021FC4
  224.         ldr r1, =0x0203F000
  225.         add r1, #40
  226.         ldrb r1, [r1, r5]
  227.         mov r2, #2
  228.         mov r3, #2
  229.         ldr r4, =(0x08008E20|1)
  230.         bl call_bx2
  231.         cmp r5, r6
  232.         bne NotHighLight
  233.         ldr r0, =0x02021EC4
  234.         ldr r1, =gText_HignLight
  235.         ldr r3, =(0x08008EE0|1)
  236.         bl call_bx
  237.         ldr r0, =0x02021EC4
  238.         ldr r1, =0x02021FC4
  239.         ldr r3, =(0x08008BC0|1)
  240.         bl call_bx
  241.         mov r0, #0
  242.         str r0, [sp]
  243.         str r0, [sp, #4]
  244.         mov r0, r7
  245.         ldr r1, =0x02021EC4
  246.         ldr r2, =poi
  247.         ldr r2, [r2, r5]
  248.         mov r3, #1
  249.         ldr r4, =(0x080E04A4|1)
  250.         bl call_bx2
  251.         b PrintWithColourEnd
  252. NotHighLight:
  253.         mov r0, #0
  254.         str r0, [sp]
  255.         str r0, [sp, #4]
  256.         mov r0, r7
  257.         ldr r1, =0x02021FC4
  258.         ldr r2, =poi
  259.         ldr r2, [r2, r5]
  260.         mov r3, #1
  261.         ldr r4, =(0x080E04A4|1)
  262.         bl call_bx2
  263. PrintWithColourEnd:
  264.         add sp, #8
  265.         pop {r4-r7, pc}
  266. .endfunc
  267. .pool

  268. .func GoldfingerRun
  269.         mov r4, #0
  270. RunGfLoop:
  271.         cmp r4, #6
  272.         bge LoopEnd
  273.         ldr r0, =0x4012
  274.         add r0, r4
  275.         ldr r3, =(0x0809D790|1)
  276.         bl call_bx
  277.         cmp r0, #0
  278.         beq PrepareForNext
  279.         ldr r0, =0x0203F000
  280.         lsl r1, r4, #3
  281.         add r1, r0
  282.         ldr r0, [r1]
  283.         ldr r1, [r1, #4]
  284.         mov r2, #1
  285.         neg r2, r2 ;0xFFFFFFFF
  286.         lsr r3, r2, #24 ;0xFF
  287.         cmp r1, r3
  288.         bls OneByte
  289.         lsr r3, r2, #16 ;0xFFFF
  290.         cmp r1, r3
  291.         bls TwoByte
  292.         str r1, [r0]
  293.         b PrepareForNext
  294. OneByte:
  295.         strb r1, [r0]
  296.         b PrepareForNext
  297. TwoByte:
  298.         strh r1, [r0]
  299. PrepareForNext:
  300.         add r4, #1
  301.         b RunGfLoop
  302. LoopEnd:
  303.         ldrb r0, [r5]
  304.         lsl r4, r0, #0x1F
  305.         lsr r4, r4, #0x1F
  306.         mov r1, #1
  307.         ldr r3, =(0x08006A28|1)
  308.         bx r3
  309. .endfunc
  310. .pool

  311. .func DeleteGoldfinger
  312.         ldr r0, =0x020375E0
  313.         ldrh r0, [r0]
  314.         lsl r0, #3
  315.         ldr r1, =0x0203F000
  316.         add r0, r1
  317.         mov r1, #0
  318.         str r1, [r0]
  319.         str r1, [r0, #4]
  320.         bx lr
  321. .endfunc
  322. .pool

  323. .func OpenGoldfinger
  324.         push {lr}
  325.         ldr r0, =0x020375E0
  326.         ldrh r0, [r0]
  327.         ldr r1, =0x4012
  328.         add r0, r1
  329.         ldr r3, =(0x0809D740|1)
  330.         bl call_bx
  331.         pop {pc}
  332. .endfunc
  333. .pool

  334. .func CloseGoldfinger
  335.         push {lr}
  336.         ldr r0, =0x020375E0
  337.         ldrh r0, [r0]
  338.         ldr r1, =0x4012
  339.         add r0, r1
  340.         ldr r3, =(0x0809D768|1)
  341.         bl call_bx
  342.         pop {pc}
  343. .endfunc
  344. .pool

  345. .func call_bx
  346.         bx r3
  347. .endfunc
  348. .pool

  349. .func call_bx2
  350.         bx r4
  351. .endfunc
  352. .pool

  353. poi:
  354. .byte 49, 33, 17, 1, 129, 113, 97, 80

  355. gText_Colon:
  356. .string ":"

  357. gText_HignLight:
  358. .string "[文本色_红]"

  359. Script_BiGoldfinger:
  360.         lock
  361.         faceplayer
  362.         msgbox gText_Weclome, 0x6
  363. Script_ChooseGf:
  364.         preparemsg gText_ChooseGf
  365.         waitmsg
  366.         multichoice 0x0, 0x0, 0x74, 0x00 ;如果你打算手动扩充或者修改了下面写入的地址,把0x74改成你的多选框Id
  367.         compare 0x800D, 0x7F
  368.         if1 0x1, Script_End
  369.         copyvar 0x8004, 0x800D
  370. Script_ChooseOperate:
  371.         preparemsg gText_ChooseOperate
  372.         waitmsg
  373.         multichoice 0x0, 0x0, 0x75, 0x00 ;如果你打算手动扩充或者修改了下面写入的地址,把0x75改成你的多选框Id
  374.         compare 0x800D, 0x7F
  375.         if1 0x1, Script_ChooseGf
  376.         compare 0x800D, 0x0
  377.         if1 0x1, Script_OpenGf
  378.         compare 0x800D, 0x1
  379.         if1 0x1, Script_CloseGf
  380.         compare 0x800D, 0x2
  381.         if1 0x1, Script_AddGf
  382.         callasm (DeleteGoldfinger|1)
  383.         msgbox gText_DeleteSuccess, 0x6
  384.         goto Script_ChooseOperate
  385. Script_OpenGf:
  386.         callasm (OpenGoldfinger|1)
  387.         msgbox gText_OpenSuccess, 0x6
  388.         goto Script_ChooseOperate
  389. Script_CloseGf:
  390.         callasm (CloseGoldfinger|1)
  391.         msgbox gText_CloseSuccess, 0x6
  392.         goto Script_ChooseOperate
  393. Script_AddGf:
  394.         preparemsg gText_PleaseAddGf
  395.         waitmsg ;这个waitmsg非常重要,因为文本框也是用的第四个buffer,必须等待文本输出完毕
  396.         callasm (GoldfingerPutIn|1)
  397.         waitkeypress
  398.         compare 0x800D, 0x0
  399.         if1 0x1, Script_AddCancel
  400.         msgbox gText_AddSuccess, 0x6
  401.         goto Script_ChooseOperate
  402. Script_AddCancel:
  403.         msgbox gText_AddCancel, 0x6
  404.         goto Script_ChooseOperate
  405. Script_End:
  406.         release
  407.         end

  408. .align 4
  409. Mult_ChooseSlot:
  410. .word gText_Goldfinger1
  411. .word 0x0
  412. .word gText_Goldfinger2
  413. .word 0x0
  414. .word gText_Goldfinger3
  415. .word 0x0
  416. .word gText_Goldfinger4
  417. .word 0x0
  418. .word gText_Goldfinger5
  419. .word 0x0
  420. Mult_Operate:
  421. .word gText_OpenGf
  422. .word 0x0
  423. .word gText_CloseGf
  424. .word 0x0
  425. .word gText_AddGf
  426. .word 0x0
  427. .word gText_DeleteGf
  428. .word 0x0

  429. gText_Goldfinger1:
  430. .string "金手指一"

  431. gText_Goldfinger2:
  432. .string "金手指二"

  433. gText_Goldfinger3:
  434. .string "金手指三"

  435. gText_Goldfinger4:
  436. .string "金手指四"

  437. gText_Goldfinger5:
  438. .string "金手指五"

  439. gText_OpenGf:
  440. .string "开启金手指"

  441. gText_CloseGf:
  442. .string "关闭金手指"

  443. gText_AddGf:
  444. .string "添加金手指"

  445. gText_DeleteGf:
  446. .string "删除金手指"

  447. gText_Weclome:
  448. .string "欢迎使用内置金手指!"

  449. gText_ChooseGf:
  450. .string "请选择金手指槽:"

  451. gText_ChooseOperate:
  452. .string "请选择操作:"

  453. gText_DeleteSuccess:
  454. .string "成功删除金手指!"

  455. gText_OpenSuccess:
  456. .string "成功开启金手指!"

  457. gText_CloseSuccess:
  458. .string "成功关闭金手指!"

  459. gText_PleaseAddGf:
  460. .string "请输入金手指!"

  461. gText_AddSuccess:
  462. .string "成功添加金手指!"

  463. gText_AddCancel:
  464. .string "取消添加金手指!"

  465. .org 0x08006A20 ;选择一个被调用及其频繁的地方
  466.         ldr r3, =(GoldfingerRun|1)
  467.         bx r3
  468. .pool

  469. .org 0x097003A0 ;这里是扩充多选框,注意此处是绿宝石802版本的。如果你用的是绿宝石原版请自行更改此地址(需要重定向)
  470. .align 4
  471. .word Mult_ChooseSlot
  472. .word 0x05
  473. .word Mult_Operate
  474. .word 0x04

  475. .org 0x089C0DFC
  476. .word Script_BiGoldfinger

  477. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-2 21:14
本帖最后由 本站第一萌新 于 2020-5-6 07:30 编辑

模仿jzw聚聚早期做的一个滚动式多选框(虽说是模仿其实我根本没看他的是怎么实现的,也没看效果,只是觉得创意不错就顺手写了一个)
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func RollingMul
  8.         push {r4-r7, lr}
  9.         ldr r0, =(Task_MulProcessInput|1)
  10.         mov r1, #0
  11.         ldr r4, =(0x080A8FB0|1)
  12.         bl call_bx
  13.         ldr r5, =0x03005E00
  14.         mov r1, #40
  15.         mul r0, r1
  16.         add r5, r0
  17.         mov r6, #0
  18.         mov r7, #0
  19. GetLengthLoop:
  20.         ldr r0, =0x09700000 ;如果你用的绿宝石原版,这个改成绿宝石的多选框地址
  21.         ldr r1, =0x020375E0
  22.         ldrh r1, [r1] ;var8004 储存多选Id
  23.         lsl r1, #3
  24.         add r0, r1
  25.         ldrb r1, [r0, #4]
  26.         cmp r6, r1
  27.         bge LoopEnd
  28.         ldr r1, [r0]
  29.         lsl r0, r6, #3
  30.         ldr r0, [r1, r0]
  31.         mov r1, r7
  32.         ldr r4, =(0x080E2D2C|1)
  33.         bl call_bx
  34.         mov r7, r0
  35.         add r6, #1
  36.         b GetLengthLoop
  37. LoopEnd:       
  38.         mov r0, r7
  39.         ldr r4, =(0x080E2D40|1)
  40.         bl call_bx
  41.         mov r2, r0
  42.         ldr r1, =0x020375E0
  43.         ldrh r0, [r1, #2] ;var8005 储存X坐标
  44.         ldrh r1, [r1, #4] ;var8006 储存Y坐标
  45.         mov r3, #10
  46.         ldr r4, =(0x080E2A1C|1)
  47.         bl call_bx
  48.         strh r0, [r5, #8] ;twindowId
  49.         mov r1, #0
  50.         strh r1, [r5, #10] ;tchoice
  51.         strh r1, [r5, #12] ;tstate
  52.         mov r5, r0
  53.         mov r1, #0
  54.         ldr r4, =(0x08197854|1)
  55.         bl call_bx
  56.         mov r0, #0
  57.         ldr r4, =(0x081999BC|1)
  58.         bl call_bx
  59.         mov r0, r5
  60.         mov r1, #0
  61.         bl UpdateChoices
  62.         pop {r4-r7, pc}
  63. .endfunc
  64. .pool

  65. .func Task_MulProcessInput ;r0 = taskId
  66.         push {r4-r7, lr}
  67.         mov r5, r0
  68.         ldr r2, =0x03005E00
  69.         mov r1, #40
  70.         mul r0, r1
  71.         add r2, r0
  72.         ldrh r6, [r2, #8]
  73.         mov r7, r2
  74.         ldrh r0, [r7, #12]
  75.         cmp r0, #0
  76.         beq InputEnd
  77.         ldr r0, =0x030022C0
  78.         ldrh r0, [r0, #0x2E]
  79.         cmp r0, #1
  80.         beq A_Pressed
  81.         cmp r0, #2
  82.         beq B_Pressed
  83.         cmp r0, #0x40
  84.         beq Up_Pressed
  85.         cmp r0, #0x80
  86.         beq Down_Pressed
  87.         b InputEnd
  88. A_Pressed:
  89.         ldr r0, =0x020375E0
  90.         ldrh r7, [r7, #10]
  91.         strh r7, [r0, #0x10]
  92.         b DeleteTaskAndFreeWindow
  93. B_Pressed:
  94.         ldr r0, =0x020375E0
  95.         mov r1, #0x7F
  96.         strh r1, [r0, #0x10]
  97.         b DeleteTaskAndFreeWindow
  98. Up_Pressed:
  99.         ldrh r1, [r7, #10]
  100.         cmp r1, #0
  101.         ble InputEnd
  102.         sub r1, #1
  103.         strh r1, [r7, #10]
  104.         mov r0, r6
  105.         bl UpdateChoices
  106.         b InputEnd
  107. Down_Pressed:
  108.         ldr r0, =0x09700000 ;如果你用的绿宝石原版,这个改成绿宝石的多选框地址
  109.         ldr r1, =0x020375E0
  110.         ldrh r1, [r1]
  111.         lsl r1, #3
  112.         add r0, r1
  113.         ldrb r0, [r0, #4]
  114.         sub r0, #1
  115.         ldrh r1, [r7, #10]
  116.         cmp r1, r0
  117.         bge InputEnd
  118.         add r1, #1
  119.         strh r1, [r7, #10]
  120.         mov r0, r6
  121.         bl UpdateChoices
  122.         b InputEnd
  123. DeleteTaskAndFreeWindow:
  124.         mov r0, r5
  125.         ldr r4, =(0x080A909C|1)
  126.         bl call_bx
  127.         mov r0, r6
  128.         ldr r4, =(0x080E2A78|1)
  129.         bl call_bx
  130. InputEnd:
  131.         mov r0, #1
  132.         strh r0, [r7, #12]
  133.         pop {r4-r7, pc}
  134. .endfunc
  135. .pool

  136. .func UpdateChoices ;r0 = windowId r1 = 选中选项
  137.         push {r4-r7, lr}
  138.         mov r4, r8
  139.         push {r4}
  140.         add sp, #-8
  141.         mov r8, r0
  142.         mov r6, r1
  143.         mov r1, #17
  144.         ldr r4, =(0x08003C48|1)
  145.         bl call_bx
  146.         mov r7, #0
  147.         sub r5, r6, #2
  148. PrintChoiceLoop:
  149.         cmp r7, #5
  150.         bge PrintEnd
  151.         mov r0, #2
  152.         sub r0, r7
  153.         cmp r6, r0
  154.         blt Skip
  155.         ldr r0, =0x09700000 ;如果你用的绿宝石原版,这个改成绿宝石的多选框地址
  156.         ldr r1, =0x020375E0
  157.         ldrh r1, [r1]
  158.         lsl r1, #3
  159.         add r0, r1
  160.         ldrb r1, [r0, #4]
  161.         cmp r5, r1
  162.         bge Skip
  163.         mov r1, #0
  164.         str r1, [sp]
  165.         str r1, [sp, #4]
  166.         ldr r0, [r0]
  167.         lsl r1, r5, #3
  168.         ldr r1, [r0, r1]
  169.         lsl r3, r7, #4
  170.         add r3, #1
  171.         mov r0, r8
  172.         mov r2, #8
  173.         ldr r4, =(0x080E04A4|1)
  174.         bl call_bx
  175. Skip:
  176.         add r7, #1
  177.         add r5, #1
  178.         b PrintChoiceLoop
  179. PrintEnd:       
  180.         mov r0, r8
  181.         ldr r1, =gText_Arrow
  182.         mov r2, #0
  183.         mov r3, #0x21
  184.         ldr r4, =(0x080E04A4|1)
  185.         bl call_bx
  186.         add sp, #8
  187.         pop {r4}
  188.         mov r8, r4
  189.         pop {r4-r7, pc}
  190. .endfunc
  191. .pool

  192. .func call_bx
  193.         bx r4
  194. .endfunc
  195. .pool

  196. gText_Arrow:
  197. .byte 0xEF, 0xFF

  198. .close
复制代码
示例脚本:
lock
faceplayer
preparemsg 0x和多选框同时出现的文本地址
setvar 0x8004 多选Id
setvar 0x8005 X坐标
setvar 0x8006 Y坐标
callasm 0xF80001 //显示多选框
waitkeypress //需使用 waitkeypress 辅助
msgbox 0x选完后的文本地址 0x6
release
end

作者: 本站第一萌新    时间: 2020-5-2 21:18
本帖最后由 本站第一萌新 于 2020-5-2 21:19 编辑

前面发的可能不适于纯新手。今天最后发个入门级别的。明天再更新吧。不然貌似违反版规了。
使得指定位置的精灵变成6V
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func ChangePMTo6V
  8.         push {r4-r5, lr}
  9.         add sp, #-4
  10.         ldr r0, =0x020375E0 ;var8004中储存所选PM在队伍中的位置 [0-5]
  11.         ldrh r0, [r0]
  12.         mov r1, #0x64
  13.         mul r0,r1
  14.         ldr r4, =0x020244EC
  15.         add r4, r0
  16.         mov r5, #0
  17. ChangeLoop:
  18.         mov r1, #0x27
  19.         add r1, r5
  20.         mov r0, #0x1F
  21.         str r0, [sp]
  22.         mov r2, sp
  23.         mov r0, r4
  24.         ldr r3, =(0x0806ACAC|1)
  25.         bl call_bx
  26.         add r5, #1
  27.         cmp r5, #5
  28.         bls ChangeLoop
  29. LoopEnd:
  30.         mov r0, r4
  31.         ldr r3, =(0x08068D0C|1)
  32.         bl call_bx
  33.         add sp, #4
  34.         pop {r4-r5, pc}
  35. .endfunc
  36. .pool
  37.        
  38. .func call_bx
  39.         bx r3
  40. .endfunc
  41. .pool

  42. .close
复制代码
示例脚本:
lock
faceplayer
msgbox 文本 6
special 0xA2
waitstate
callasm 插入位置 //记得加一
msgbox 文本 6
end
作者: jiangzhengwenjz    时间: 2020-5-2 22:34
本站第一萌新 发表于 2020-5-2 21:18
前面发的可能不适于纯新手。今天最后发个入门级别的。明天再更新吧。不然貌似违反版规了。
使得指定位置的 ...

It's OK.
每条回复有独立内容,你想连发多少都可以
作者: 本站第一萌新    时间: 2020-5-3 08:24
jiangzhengwenjz 发表于 2020-5-2 22:34
It's OK.
每条回复有独立内容,你想连发多少都可以

好的
作者: 本站第一萌新    时间: 2020-5-3 08:28
走一步恢复全队精灵10点血量
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func RcoverStone
  8.         push {lr}
  9.         lsl r0, r0, #24
  10.         lsr r1, r0, #24
  11.         push {r1, r4-r6}
  12.         add sp, #-4
  13.         mov r4, #0
  14. RcoverLoop:
  15.         ldr r0, =0x020244E9
  16.         ldrb r0, [r0]
  17.         cmp r4, r0
  18.         bge LoopEnd
  19.         ldr r5, =0x020244EC
  20.         mov r0, #100
  21.         mul r0, r4
  22.         add r5, r0
  23.         mov r0, r5
  24.         mov r1, #0x3A
  25.         mov r2, #0
  26.         ldr r3, =(0x0806A518|1)
  27.         bl call_bx
  28.         mov r6, r0
  29.         mov r0, r5
  30.         mov r1, #0x39
  31.         mov r2, #0
  32.         ldr r3, =(0x0806A518|1)
  33.         bl call_bx
  34.         add r0, #10
  35.         cmp r0, r6
  36.         bge MoreThanMax
  37.         mov r6, r0
  38. MoreThanMax:
  39.         mov r0, r6
  40.         str r0, [sp]
  41.         mov r2, sp
  42.         mov r0, r5
  43.         mov r1, #0x39
  44.         ldr r3, =(0x0806ACAC|1)
  45.         bl call_bx
  46.         add r4, #1
  47.         b RcoverLoop
  48. LoopEnd:
  49.         add sp, #4
  50.         pop {r1, r4-r6}
  51.         cmp r1, #0x33
  52.         ldr r3, =(0x080846FE|1)
  53.         bx r3
  54. .endfunc
  55. .pool

  56. .func call_bx
  57.         bx r3
  58. .endfunc
  59. .pool

  60. .org 0x080847F8
  61.         ldr r3, =(RcoverStone|1)
  62.         bx r3
  63. .pool

  64. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-3 08:32
根据flag0x4012的值判断是否开启穿墙
和初始村蓝胖对话查看效果
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func AcrossWall
  10.         push {r4}
  11.         mov r8, r0
  12.         ldr r0, =0x4012
  13.         ldr r3, =(0x0809D790|1)
  14.         bl call_bx
  15.         cmp r0, #0
  16.         bne CanAcrossWall
  17.         mov r0, r8
  18.         mov r1, r5
  19.         mov r2, r4
  20.         mov r3, r6
  21.         ldr r4, =(0x08092BC8|1)
  22.         bl call_bx2
  23.         b Back
  24. CanAcrossWall:
  25.         mov r0, #0
  26. Back:
  27.         pop {r4}
  28.         ldr r3, =(0x0808B0C8|1)
  29.         bx r3
  30. .endfunc
  31. .pool

  32. .func call_bx
  33.         bx r3
  34. .endfunc
  35. .pool

  36. .func call_bx2
  37.         bx r4
  38. .endfunc
  39. .pool

  40. Script_AcrossWall:
  41.         lock
  42.         faceplayer
  43.         checkflag 0x4012
  44.         if1 0x0, Script_Open
  45.         clearflag 0x4012
  46.         msgbox gText_Close, 0x6
  47.         release
  48.         end
  49. Script_Open:
  50.         setflag 0x4012
  51.         msgbox gText_Open, 0x6
  52.         release
  53.         end
  54.        
  55. gText_Close:
  56. .string "关闭穿墙术!"

  57. gText_Open:
  58. .string "打开穿墙术!"

  59. .org 0x0808B0C0
  60.         ldr r3, =(AcrossWall|1)
  61.         bx r3
  62. .pool

  63. .org 0x089C0DFC
  64. .word Script_AcrossWall

  65. .close
复制代码
这个解法可能不是最优的。貌似可以不用hook实现穿墙。
作者: 本站第一萌新    时间: 2020-5-3 08:43
本帖最后由 本站第一萌新 于 2020-5-29 17:36 编辑

很久以前写的了类似究极绿宝石那样的初始宠物系统,可以选择1-7代所有初始宠物。不过我看了一下这个应该和究极绿的实现方式不同。
注意1:此代码未经试验,因为我当时并没有研究主角选择的宠物对劲敌所选宠物的影响。所以此系统可以可能造成各种各样的BUG,请谨慎使用!
注意2:此代码仅适用于绿宝石802,当然,如果你的ROM也支持802只精灵且顺序和正版一样的话那也没有问题
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func SaveStarterMonHack
  8.         ldr r0, =0x020375F0
  9.         ldrh r0, [r0]
  10.         str r0, [sp]
  11.         mov r1, #3
  12.         ldr r3, =(0x082E7650|1)
  13.         bl call_bx
  14.         ldr r1, =0x02026DE2
  15.         strh r0, [r1]
  16.         ldr r0, [sp]
  17.         ldr r3, =(0x080B116A|1)
  18.         bx r3
  19. .endfunc
  20. .pool

  21. .func call_bx
  22.         bx r3
  23. .endfunc
  24. .pool

  25. .align 2
  26. NewsPokeballCoords:
  27. .byte 0x3C, 0x40
  28. .byte 0x78, 0x58
  29. .byte 0xB4, 0x40
  30. .byte 0x3C, 0x40
  31. .byte 0x78, 0x58
  32. .byte 0xB4, 0x40
  33. .byte 0x3C, 0x40
  34. .byte 0x78, 0x58
  35. .byte 0xB4, 0x40
  36. .byte 0x3C, 0x40
  37. .byte 0x78, 0x58
  38. .byte 0xB4, 0x40
  39. .byte 0x3C, 0x40
  40. .byte 0x78, 0x58
  41. .byte 0xB4, 0x40
  42. .byte 0x3C, 0x40
  43. .byte 0x78, 0x58
  44. .byte 0xB4, 0x40
  45. .byte 0x3C, 0x40
  46. .byte 0x78, 0x58
  47. .byte 0xB4, 0x40
  48. NewLabelCoords:
  49. .byte 0x00, 0x09
  50. .byte 0x10, 0x0A
  51. .byte 0x08, 0x04
  52. .byte 0x00, 0x09
  53. .byte 0x10, 0x0A
  54. .byte 0x08, 0x04
  55. .byte 0x00, 0x09
  56. .byte 0x10, 0x0A
  57. .byte 0x08, 0x04
  58. .byte 0x00, 0x09
  59. .byte 0x10, 0x0A
  60. .byte 0x08, 0x04
  61. .byte 0x00, 0x09
  62. .byte 0x10, 0x0A
  63. .byte 0x08, 0x04
  64. .byte 0x00, 0x09
  65. .byte 0x10, 0x0A
  66. .byte 0x08, 0x04
  67. .byte 0x00, 0x09
  68. .byte 0x10, 0x0A
  69. .byte 0x08, 0x04
  70. NewHandsPosition:
  71. .byte 0x3C, 0x20
  72. .byte 0x78, 0x38
  73. .byte 0xB4, 0x20
  74. .byte 0x3C, 0x20
  75. .byte 0x78, 0x38
  76. .byte 0xB4, 0x20
  77. .byte 0x3C, 0x20
  78. .byte 0x78, 0x38
  79. .byte 0xB4, 0x20
  80. .byte 0x3C, 0x20
  81. .byte 0x78, 0x38
  82. .byte 0xB4, 0x20
  83. .byte 0x3C, 0x20
  84. .byte 0x78, 0x38
  85. .byte 0xB4, 0x20
  86. .byte 0x3C, 0x20
  87. .byte 0x78, 0x38
  88. .byte 0xB4, 0x20
  89. .byte 0x3C, 0x20
  90. .byte 0x78, 0x38
  91. .byte 0xB4, 0x20
  92. NewsStarterMon:
  93. .halfword 0x1, 0x4, 0x7
  94. .halfword 0x98, 0x9B, 0x9E
  95. .halfword 0x115, 0x118, 0x11B
  96. .halfword 0x1B8, 0x1BB, 0x1BE
  97. .halfword 0x224, 0x227, 0x22A
  98. .halfword 0x2BF, 0x2C2, 0x2C5
  99. .halfword 0x307, 0x30A, 0x30D

  100. .org 0x0813431E
  101.         cmp r4, #19
  102. .pool

  103. .org 0x08133EE2
  104.         cmp r1, #21
  105. .pool

  106. .org 0x081341D8
  107. .word NewsPokeballCoords

  108. .org 0x081342E4
  109. .word NewsPokeballCoords

  110. .org 0x081345F0
  111. .word NewLabelCoords

  112. .org 0x08133EF4
  113. .word NewsStarterMon

  114. .org 0x08134734
  115. .word NewHandsPosition

  116. .org 0x080B115C
  117.         ldr r3, =(SaveStarterMonHack|1)
  118.         bx r3
  119. .pool

  120. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-3 09:14
一个对于积极禁金的人来说可能较有用的代码
在确认支付时会检查现在在购买的商品是否在商店列表中,如果不是则提示请不要作弊
注意1:此代码仅能防住03005E12 XXXX这类金手指,并不能防住直接更改商店商品的金手指
注意2:请打开CharTable.txt,在末尾输入FC09=[按键] 当然如果你懒的搞直接用十六进制写进去也行
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .create "3.0.gba",0x8000000
  5. .close
  6. .open "test.gba","3.0.gba", 0x8000000

  7. .org 0x08F80000
  8. .func AntiBuyCheat
  9.         ldr r3, =0x02039F68
  10.         ldr r3, [r3]
  11. Check:
  12.         ldrh r2, [r3]
  13.         cmp r0, r2
  14.         beq DontCheat
  15.         cmp r2, #0x0
  16.         beq HasCheat
  17.         add r3, #0x2
  18.         b Check
  19. DontCheat:
  20.         ldr r3, =(0x080D6928|1)
  21.         bl call_bx
  22.         ldr r3, =(0x080E0F08|1)
  23.         bx r3
  24. HasCheat:
  25.         ldr r1, =gText_DontCheat
  26.         ldr r3, =(0x080E0F32|1)
  27.         bx r3
  28. .endfunc
  29. .pool

  30. .func call_bx
  31.         bx r3
  32. .endfunc
  33. .pool

  34. gText_DontCheat:
  35. .string "请不要作弊![按键]"

  36. .org 0x080E0F00
  37.         ldr r3, =(AntiBuyCheat|1)
  38.         bx r3
  39. .pool

  40. .close
  41.        
复制代码

作者: 本站第一萌新    时间: 2020-5-3 09:21
修改std0, 使得NPC给道具的时候可以显示出道具图片
我这里是使用OBJ实现的,貌似std1使用的不是这种方法
  1. .gba
  2. .thumb
  3. .include "header/ArmipsMacros.asm"
  4. .create "3.0.gba",0x8000000
  5. .close
  6. .open "test.gba","3.0.gba", 0x8000000

  7. .org 0x08F80000
  8. .func ShowItemSprite
  9.         push {r4-r5, lr}
  10.         add sp, #-24
  11.         ldr r0, =0x200
  12.         ldr r4, =(0x08000B4C|1)
  13.         bl call_bx
  14.         str r0, [sp]
  15.         ldr r0, =0x120 ;24X24
  16.         bl call_bx
  17.         str r0, [sp, #4] ;buffer4x4
  18.         ldr r0, =0x020375D8
  19.         ldrh r0, [r0]
  20.         lsl r0, #3
  21.         ldr r5, =0x08FCBFF4 ;这个地方是绿宝石802的道具图片结构体(不知道怎么解释)数据地址,如果你用的绿宝石原版请自行搜索对应数据更改
  22.         add r5, r0
  23.         ldr r0, [r5]
  24.         ldr r1, [sp, #4]
  25.         swi #0x11
  26.         ldr r0, [sp, #4]
  27.         ldr r1, [sp]
  28.         ldr r4, =(0x081AFE44|1)
  29.         bl call_bx
  30.         ldr r0, [sp]
  31.         mov r1, sp
  32.         str r0, [r1, #8]
  33.         ldr r0, =0x200
  34.         strh r0, [r1, #12]
  35.         ldr r0, =0x1300
  36.         strh r0, [r1, #14]
  37.         add r0, sp, #8
  38.         ldr r4, =(0x080084F8|1)
  39.         bl call_bx
  40.         ldr r0, [r5, #4]
  41.         mov r1, sp
  42.         str r0, [r1, #16]
  43.         ldr r0, =0x1300
  44.         strh r0, [r1, #20]
  45.         add r0, sp, #16
  46.         ldr r4, =(0x0803458C|1)
  47.         bl call_bx
  48.         ldr r0, =SpriteTemplate
  49.         mov r1, #0xDA
  50.         mov r2, #0x88
  51.         mov r3, #0
  52.         ldr r4, =(0x08006DF4|1)
  53.         bl call_bx
  54.         ldr r1, =0x020375D8
  55.         strb r0, [r1, #4]
  56.         ldr r0, [sp, #4]
  57.         ldr r4, =(0x08000B60|1)
  58.         bl call_bx
  59.         ldr r0, [sp]
  60.         bl call_bx
  61.         add sp, #24
  62.         pop {r4-r5, pc}
  63. .endfunc
  64. .pool

  65. .func DeleteItemSprite
  66.         push {r4, lr}
  67.         ldr r0, =0x020375D8
  68.         ldrb r0, [r0, #4]
  69.         mov r1, #0x44
  70.         mul r0, r1
  71.         ldr r2, =0x02020630
  72.         add r0, r2
  73.         ldr r4, =(0x08007620|1)
  74.         bl call_bx
  75.         pop {r4, pc}
  76. .endfunc
  77. .pool

  78. .func call_bx
  79.         bx r4
  80. .endfunc
  81. .pool

  82. .align 4
  83. OamData:
  84. .halfword 0x0 ;方形
  85. .halfword 0x8000 ;32X32
  86. .halfword 0x0

  87. .align 4       
  88. SpriteTemplate:
  89. .halfword 0x1300
  90. .halfword 0x1300
  91. .word OamData
  92. .word 0x08614FF0
  93. .word 0x0
  94. .word 0x082EC6A8
  95. .word (0x08007428|1)

  96. ScriptGiveItem:
  97.         callasm (ShowItemSprite|1)
  98.         additem 0x8000, 0x8001
  99.         copyvar 0x8007, LASTRESULT
  100.         call 0x8271AE3
  101.         callasm (DeleteItemSprite|1)
  102.         return

  103. .org 0x081DC2A0
  104. .word ScriptGiveItem

  105. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-3 09:25
本帖最后由 本站第一萌新 于 2020-5-3 09:29 编辑

显示隐藏64X64头像,应该比贴吧早期翻译的那个老外的要更安全
不过由于是随手写的,所以并没有翻转等各种功能,有兴趣可以自行实现
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func ShowMugshots
  8.         push {r4, lr}
  9.         add sp, #-16
  10.         ldr r0, =0x08F85000 ;头像表 [图片1][色盘1] [图片2][色盘2] [图片3][色盘3] ... 可以自行更改位置
  11.         ldr r1, =0x020375E0
  12.         ldrh r1, [r1]
  13.         lsl r1, #3
  14.         add r4, r0, r1
  15.         mov r1, sp
  16.         ldr r0, [r4]
  17.         str r0, [r1]
  18.         mov r0, #1
  19.         lsl r0, #11 ;0x800
  20.         strh r0, [r1, #4]
  21.         ldr r0, =0x1300
  22.         strh r0, [r1, #6]
  23.         mov r0, r1
  24.         ldr r3, =(0x08034530|1)
  25.         bl call_bx
  26.         add r1, sp, #8
  27.         ldr r0, [r4, #4]
  28.         str r0, [r1]
  29.         ldr r0, =0x1300
  30.         strh r0, [r1, #4]
  31.         mov r0, r1
  32.         ldr r3, =(0x0803458C|1)
  33.         bl call_bx
  34.         ldr r0, =SpriteTemplate
  35.         mov r1, #0x25
  36.         mov r2, #0x55
  37.         mov r3, #0
  38.         ldr r4, =(0x08006DF4|1)
  39.         bl call_bx2
  40.         ldr r1, =0x020375E0
  41.         strb r0, [r1]
  42.         add sp, #16
  43.         pop {r4, pc}
  44. .endfunc
  45. .pool
  46.        
  47. .func DeleteMugshots
  48.         push {lr}
  49.         ldr r0, =0x020375E0
  50.         ldrb r0, [r0]
  51.         mov r1, #0x44
  52.         mul r0, r1
  53.         ldr r2, =0x02020630
  54.         add r0, r2
  55.         ldr r3, =(0x08007620|1)
  56.         bl call_bx
  57.         pop {pc}
  58. .endfunc
  59. .pool

  60. .func call_bx
  61.         bx r3
  62. .endfunc
  63. .pool

  64. .func call_bx2
  65.         bx r4
  66. .endfunc
  67. .pool

  68. .align 4
  69. OamData:
  70. .halfword 0x0 ;方形
  71. .halfword 0xC000 ;64X64
  72. .halfword 0x0

  73. .align 4       
  74. SpriteTemplate:
  75. .halfword 0x1300
  76. .halfword 0x1300
  77. .word OamData
  78. .word 0x08614FF0
  79. .word 0x0
  80. .word 0x082EC6A8
  81. .word (0x08007428|1)
  82.        
  83. .close
复制代码
var8004里面储存头像在头像表ID
作者: 本站第一萌新    时间: 2020-5-3 14:54
一个简单的源码,删除首位精灵,将其个体值复制给后面一只精灵,并将后面所有精灵向前移动一位
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func Sacrifice
  8.         push {r4, lr}
  9.         add sp, #-4
  10.         ldr r0, =0x020244E9
  11.         ldrb r0, [r0]
  12.         cmp r0, #2
  13.         blt Wrong
  14.         mov r4, #0
  15. SacrificeLoop:
  16.         cmp r4, #6
  17.         bge DeletePoke
  18.         ldr r0, =0x020244EC
  19.         mov r1, #0x27
  20.         add r1, r4
  21.         mov r2, #0
  22.         ldr r3, =(0x0806A518|1)
  23.         bl call_bx
  24.         str r0, [sp]
  25.         mov r2, sp
  26.         ldr r0, =0x020244EC
  27.         add r0, #100
  28.         mov r1, #0x27 ;HP_IV
  29.         add r1, r4
  30.         ldr r3, =(0x0806ACAC|1)
  31.         bl call_bx
  32.         add r4, #1
  33.         b SacrificeLoop
  34. DeletePoke:
  35.         mov r4, #0
  36. DeletePokeLoop:
  37.         ldr r0, =0x020244E9
  38.         ldrb r0, [r0]
  39.         sub r0, #1
  40.         cmp r4, r0
  41.         bge LoopEnd
  42.         ldr r0, =0x020244EC
  43.         mov r1, #100
  44.         mul r1, r4
  45.         add r0, r1 ;精灵地址
  46.         mov r1, r0
  47.         add r1, #100
  48.         mov r2, #100
  49.         ldr r3, =(0x0806B408|1)
  50.         bl call_bx
  51.         add r4, #1
  52.         b DeletePokeLoop
  53. LoopEnd:
  54.         ldr r0, =0x020244E9
  55.         ldrb r0, [r0]
  56.         sub r0, #1
  57.         mov r1, #100
  58.         mul r0, r1
  59.         ldr r1, =0x020244EC
  60.         add r0, r1
  61.         ldr r3, =(0x08067A8C|1)
  62.         bl call_bx
  63.         ldr r0, =0x020244EC
  64.         ldr r3, =(0x08068D0C|1)
  65.         bl call_bx
  66.         mov r1, #1
  67.         b Back
  68. Wrong:
  69.         mov r1, #0
  70. Back:
  71.         ldr r0, =0x020375F0
  72.         strh r1, [r0]
  73.         add sp, #4
  74.         pop {r4, pc}
  75. .endfunc
  76. .pool

  77. .func call_bx
  78.         bx r3
  79. .endfunc
  80. .pool

  81. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-3 14:57
一个简单的源码,实现剑盾动漫中火箭队的扭蛋机 消耗一只喵喵 随机获得1-2只精灵
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func REggMachine
  10.         push {r4-r5, lr}
  11.         mov r4, #0
  12. CheckMeowthLoop:
  13.         cmp r4, #6
  14.         bge NoMeowth
  15.         ldr r0, =0x020244EC
  16.         mov r1, #100
  17.         mul r1, r4
  18.         add r0, r1
  19.         mov r1, #0xB
  20.         mov r2, #0
  21.         ldr r3, =(0x0806A518|1)
  22.         bl call_bx
  23.         cmp r0, #0x34 ;喵喵
  24.         beq HasMeowth
  25.         add r4, #1
  26.         b CheckMeowthLoop
  27. NoMeowth:
  28.         mov r0, #0
  29.         ldr r1, =0x020375F0
  30.         strh r0, [r1]
  31.         b Back
  32. HasMeowth:
  33.         ldr r0, =0x020244EC
  34.         mov r1, #100
  35.         mul r1, r4
  36.         add r0, r1
  37.         ldr r3, =(0x08067A8C|1)
  38.         bl call_bx
  39.         ldr r3, =(0x0806F5CC|1)
  40.         bl call_bx
  41.         mov r1, #1
  42.         and r0, r1
  43.         add r0, #1
  44.         ldr r1, =0x020375F0
  45.         strh r0, [r1]
  46.         mov r4, r0
  47. GivePokeLoop:
  48.         cmp r4, #0
  49.         ble Back
  50.         ldr r3, =(0x0806F5CC|1)
  51.         bl call_bx
  52.         mov r1, #16
  53.         lsl r1, #6
  54.         add r1, #45 ;0x42D 绿宝石802有0x42D只精灵,如果你用的绿宝石改成绿宝石的精灵数
  55.         ldr r3, =(0x082E7650|1)
  56.         bl call_bx
  57.         add r5, r0, #1
  58.         mov r1, #2
  59.         sub r0, r1, r4
  60.         mov r1, #0xFF
  61.         add r1, #1 ;0x100
  62.         mul r0, r1
  63.         ldr r1, =0x02021CC4
  64.         add r0, r1
  65.         ldr r1, =0x08F2B790
  66.         mov r2, #11
  67.         mul r2, r5
  68.         add r1, r2
  69.         ldr r3, =(0x08008B10|1)
  70.         bl call_bx
  71.         ldr r3, =(0x0806F5CC|1)
  72.         bl call_bx
  73.         mov r1, #100
  74.         ldr r3, =(0x082E7650|1)
  75.         bl call_bx
  76.         add r1, r0, #1
  77.         mov r0, r5
  78.         mov r2, #0
  79.         ldr r3, =(0x080F9244|1)
  80.         bl call_bx
  81.         sub r4, #1
  82.         b GivePokeLoop
  83. Back:
  84.         pop {r4-r5, pc}
  85. .endfunc
  86. .pool

  87. .func call_bx
  88.         bx r3
  89. .endfunc
  90. .pool

  91. Script_REggMachine:
  92.         lock
  93.         faceplayer
  94.         msgbox gText_UseOrNot, 0x5
  95.         compare 0x800D, 0x0
  96.         if1 0x1, Script_End
  97.         callasm (REggMachine|1)
  98.         compare 0x800D, 0x1
  99.         if1 0x0, Script_NoMeowth
  100.         if1 0x1, Script_GetOnePoke
  101.         msgbox gText_GetTwoPoke, 0x6
  102. Script_End:       
  103.         release
  104.         end
  105. Script_NoMeowth:
  106.         msgbox gText_NoMeowth, 0x6
  107.         release
  108.         end
  109. Script_GetOnePoke:
  110.         msgbox gText_GetOnePoke, 0x6
  111.         release
  112.         end
  113.        
  114. gText_UseOrNot:
  115. .string "是否使用秘密武器?"
  116.        
  117. gText_NoMeowth:
  118. .string "队伍中没有喵喵!"

  119. gText_GetOnePoke:
  120. .string "获得了[buffer2]!"

  121. gText_GetTwoPoke:
  122. .string "获得了[buffer1]和[buffer2]!"

  123. .org 0x089C0DFC
  124. .word Script_REggMachine

  125. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-3 15:09
绿宝石802 3.0专享:
由于802重写了伤害计算函数,此代码无法作用于绿宝石原版

制造恐惧黑中的ghost
专属技能:诅咒 无视一切秒杀,且不消耗PP
专属特性:恐惧 敌方会因为恐惧而无法行动
在选择初始宠物的时候会把ghost放到你的背包里
至于被击败的训练师变成墓碑没搞,有兴趣的可以自己去尝试实现
这个是好久以前搞得东西了,又因为是自娱自乐之作且有版本限制应该没人会要。故我也懒得去改写了,直接发出来供大家参考
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "picture.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. DmgHack:
  8.         ldr r3, [r2]
  9.         add r3, #1
  10.         str r3, [r2]
  11.         ldr r0, =0x020241EA
  12.         ldrh r0, [r0]
  13.         mov r1, #180
  14.         lsl r1, #2 ;诅咒技能代码:0x2D0
  15.         cmp r0, r1
  16.         bne DmgHackBack
  17.         ldr r0, =0x020241F0
  18.         mov r1, #1
  19.         neg r1, r1
  20.         strh r1, [r0]
  21.         ldr r3, =0x0202427C
  22.         mov r0, #0x10
  23.         strb r0, [r3]
  24.         ldr r3, =(0x08E1AB28|1)
  25.         bx r3
  26. DmgHackBack:
  27.         mov r3, #0x58
  28.         ldr r0, =(0x08E1A930|1)
  29.         bx r0
  30. CannotAttackHack:
  31.         mov r2, #0
  32.         ldr r0, =(0x02024084 + 32)
  33.         mov r3, r0
  34. CannotAttackHackLoop:
  35.         ldrb r1, [r0]
  36.         cmp r1, #0xE9 ;恐惧特性代码:0xE9
  37.         beq CheckItSelfAbility
  38.         add r0, #0x58
  39.         add r2, #1
  40.         cmp r2, #4
  41.         blt CannotAttackHackLoop
  42. CannotAttackHackBack:
  43.         mov r2, #0x58
  44.         mov r1, #8
  45.         mul r2, r5
  46.         ldr r3, =0x02024084
  47.         ldr r0, =(0x08E0EB00|1)
  48.         bx r0
  49. CheckItSelfAbility:
  50.         mov r0, #0x58
  51.         mul r0, r5
  52.         add r0, r3
  53.         ldrb r0, [r0]
  54.         cmp r0, #0xE9
  55.         beq CannotAttackHackBack
  56.         ldr r1, =(0x08E0EB10|1)
  57.         bx r1
  58. PPReduceHack:
  59.         lsl r0, r0, #4
  60.         and r4, r0
  61.         cmp r4, #0
  62.         bne NoPPReduce
  63.         ldr r0, =0x020241EA
  64.         ldrh r0, [r0]
  65.         mov r1, #180
  66.         lsl r1, #2
  67.         cmp r0, r1
  68.         beq NoPPReduce
  69.         ldr r3, =(0x08046B04|1)
  70.         bx r3
  71. NoPPReduce:
  72.         ldr r3, =(0x08046BDC|1)
  73.         bx r3
  74. GiveGhostToPlayer:
  75.         mov r1, #5
  76.         mov r2, #0
  77.         ldr r3, =(0x080F9244|1)
  78.         bl call_bx
  79.         mov r0, #133
  80.         lsl r0, #3
  81.         add r0, #6 ;Ghost编号:0x42E
  82.         mov r1, #1
  83.         mov r2, #0
  84.         ldr r3, =(0x080F9244|1)
  85.         bl call_bx
  86.         ldr r3, =(0x080B1182|1)
  87. call_bx:
  88.         bx r3
  89. .pool
  90. STR_CURSE:
  91. .byte 0x0C, 0x12, 0x03, 0xC8, 0x0D, 0xA4, 0x07, 0x51, 0x03, 0x0B, 0x11, 0x1F, 0x10, 0xB5, 0x10, 0x7F, 0x08, 0x79, 0xB8, 0xFE, 0x0B, 0xF5, 0x03, 0x17, 0x03, 0xC0, 0x07, 0x5B, 0x08, 0xBC, 0x01, 0xB1, 0x0C, 0x63, 0xAD, 0xFF
  92. STR_FRIGHTEN:
  93. .byte 0x0B, 0xF5, 0x03, 0x17, 0x0F, 0x42, 0x07, 0xE4, 0x07, 0x95, 0x03, 0x9D, 0x03, 0x54, 0x02, 0xED, 0x01, 0xD6, 0x03, 0x0A, 0xFF
  94. MOVES_TO_LEARN:
  95. .halfword 0x2D0, 0x01, 0x00, 0xFF

  96. .org 0x08E2D98A
  97. .byte 0x9 ;属性:Egg

  98. .org 0x08E2D98C
  99. .byte 0x1 ;PP:1

  100. .org 0x08E2D992
  101. .byte 0x1 ;类型:特殊攻击

  102. .org 0x08DFAFB0
  103. .byte 0x11, 0x1F, 0x10, 0xB5, 0xFF ;技能名称:诅咒

  104. .org 0x08DF593C
  105. .word STR_CURSE

  106. .org 0x08DEBC40
  107. .word 0x082D3BFB ;使用鬼系诅咒的动画

  108. .org 0x08DE5D05
  109. .byte 0x07, 0xE4, 0x07, 0x95 ,0xFF ;特性名称:恐惧

  110. .org 0x08DE44A4
  111. .word STR_FRIGHTEN

  112. .org 0x08F2E58A
  113. .byte 0xC1, 0xDC, 0xE3, 0xE7, 0xE8, 0xFF ;精灵名称:Ghost

  114. .org 0x08F22B90 ;精灵图象,自己导入和更换地址
  115. .word 0x08F80110

  116. .org 0x08F27690
  117. .word 0x08F80530

  118. .org 0x08F25110
  119. .word 0x08F80558

  120. .org 0x08F29C10
  121. .word 0x08F80970

  122. .org 0x08F2B0D8 ;使用 鬼斯通 的小图标以及 耿鬼 的图鉴(模仿究极绿的)
  123. .word 0x08C6FBC4

  124. .org 0x08F2B70E
  125. .byte 0x02

  126. .org 0x08F50BCA
  127. .halfword 0x5E

  128. .org 0x08F1FBE8 ;基本能力
  129. .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  130. .byte 0x09, 0x09
  131. .byte 0xFF
  132. .byte 0x00
  133. .halfword 0x00
  134. .halfword 0x00
  135. .halfword 0x00
  136. .byte 0xFF
  137. .byte 0xFF
  138. .byte 0xFF
  139. .byte 0x05
  140. .byte 0x0F, 0x0F
  141. .byte 0xE9, 0xE9
  142. .byte 0x00
  143. .byte 0x04
  144. .halfword 0x00

  145. .org 0x08E21174
  146. .word MOVES_TO_LEARN

  147. .org 0x08E1A928
  148.         ldr r3, =(DmgHack|1)
  149.         bx r3
  150. .pool

  151. .org 0x08E0EAF8
  152.         ldr r3, =(CannotAttackHack|1)
  153.         bx r3
  154. .pool

  155. .org 0x08046AFC
  156.         ldr r3, =(PPReduceHack|1)
  157.         bx r3
  158. .pool

  159. .org 0x080B1178
  160.         ldr r3, =(GiveGhostToPlayer|1)
  161.         bx r3
  162. .pool

  163. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-3 15:12
本帖最后由 本站第一萌新 于 2020-5-3 15:19 编辑

绿宝石802专享:
这个源码使用了802的三属性框架,当然现在回头看这并不是最优的方法

制作觉醒石系统,携带对应属性觉醒石的精灵可以在战斗中获得额外属性
也是好久前写的代码了,和上面一样,不修改了
  1. .gba
  2. .thumb
  3. .include "header/ArmipsBSMacros.asm"
  4. .create "3.0.gba",0x8000000
  5. .close
  6. .open "test.gba","3.0.gba", 0x8000000

  7. .org 0x08F80000
  8. CheckHasAwakeningStone:
  9.         mov r0, #0x58
  10.         mul r0, r4
  11.         ldr r1, =(0x02024084 + 0x2E)
  12.         add r0, r1
  13.         ldrh r0, [r0]
  14.         mov r1, #80
  15.         lsl r1, #3
  16.         add r1, #18
  17.         cmp r0, r1        ;0x292
  18.         bgt HasNoAwakeningStone
  19.         sub r1, #17
  20.         cmp r0, r1        ;0x281
  21.         blt HasNoAwakeningStone
  22.         push {r5}
  23.         sub r5, r0, r1
  24.         ldr r1, =(0x08FC2C7C + 0x28)
  25.         mov r2, #0x2C
  26.         mul r0, r2
  27.         ldrb r0, [r0, r1]
  28.         ldr r3, =0x02024218
  29.         ldr r3, [r3]
  30.         mov r2, #0x24
  31.         mul r2, r4
  32.         add r1, r3, r2
  33.         add r1, #6
  34.         strb r0, [r1]
  35.         add r3, #0x9F
  36.         strb r4, [r3]
  37.         ldr r0, =(0x02024332 + 0x05)
  38.         strb r5, [r0]
  39.         pop {r5}
  40.         ldr r0, =BS_HASSTONE
  41.         ldr r3, =(0x08E073E4|1)
  42.         bl call_bx
  43.         ldr r3, =(0x08E19B64|1)
  44.         bx r3
  45. HasNoAwakeningStone:       
  46.         cmp r5, #0x95
  47.         beq GotoSub8E19B6A
  48.         bhi GotoSub8E19AEE
  49.         cmp r5, #0x20
  50.         ldr r3, =(0x08E19AD4|1)
  51.         bx r3
  52. GotoSub8E19B6A:
  53.         ldr r3, =(0x08E19B6A|1)
  54.         bx r3
  55. GotoSub8E19AEE:
  56.         ldr r3, =(0x08E19AEE|1)
  57.         bx r3
  58. .pool

  59. MoreBattlestring:
  60.         mov r3, #147
  61.         lsl r3, #2
  62.         add r1 ,r3, #1
  63.         cmp r0, r3
  64.         bgt More
  65.         mov r3, #0x7C
  66.         add r3, #0xFF
  67.         cmp r0, r3
  68.         bls GotoSub8E06654
  69.         ldr r3, =(0x08E0664C|1)
  70.         bx r3
  71. More:
  72.         ldr r3, =NewBattleStringsTable
  73.         sub r0, r1
  74.         ldr r1, =(0x08E06658|1)
  75.         bx r1
  76. GotoSub8E06654:
  77.         ldr r3, =(0x08E06654|1)
  78.         bx r3
  79. .pool

  80. call_bx:
  81.         bx r3
  82. .pool

  83. BS_HASSTONE:
  84.         printfromtable AwakeningStoneType
  85.         waitmessage 0x40
  86.         end3

  87. STR_SUMMARY_NORMAL:
  88. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x0F, 0x0B, 0x01, 0x42, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  89. STR_SUMMARY_FIGHT:
  90. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x04, 0x5B, 0x03, 0x5C, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  91. STR_SUMMARY_FLYING:
  92. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x03, 0xCC, 0x0E, 0x5B, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  93. STR_SUMMARY_POISON:
  94. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x03, 0x63, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  95. STR_SUMMARY_GROUND:
  96. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x03, 0x1F, 0x09, 0x7E, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  97. STR_SUMMARY_ROCK:
  98. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x0E, 0xBB, 0x0B, 0xEB, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  99. STR_SUMMARY_BUG:
  100. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x02, 0x68, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  101. STR_SUMMARY_GHOST:
  102. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x04, 0xB5, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  103. STR_SUMMARY_STEEL:
  104. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x04, 0x40, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  105. STR_SUMMARY_FIRE:
  106. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x05, 0x7D, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  107. STR_SUMMARY_WATER:
  108. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x0C, 0x51, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  109. STR_SUMMARY_GRASS:
  110. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x02, 0x01, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  111. STR_SUMMARY_ELECTRIC:
  112. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x03, 0x2E, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  113. STR_SUMMARY_PSYCHIC:
  114. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x02, 0x2E, 0x09, 0xD2, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  115. STR_SUMMARY_ICE:
  116. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x01, 0xB6, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  117. STR_SUMMARY_DRAGON:
  118. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0xCD, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  119. STR_SUMMARY_DARK:
  120. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x03, 0x96, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  121. STR_SUMMARY_FAIRY:
  122. .byte 0x09, 0xD2, 0x04, 0x83, 0x0B, 0x43, 0x01, 0x63, 0x07, 0xD7, 0x09, 0x66, 0x0F, 0xE6, 0x10, 0x30, 0xFE, 0x03, 0x5C, 0x10, 0xA1, 0x07, 0xA5, 0x0E, 0x5C, 0x0E, 0xE6, 0x07, 0x5B, 0x0C, 0x39, 0x0E, 0x5F, 0xFE, 0x03, 0x0B, 0x0B, 0xCF, 0x0A, 0xA1, 0x03, 0x07, 0x07, 0x8F, 0xAD, 0xFF

  123. STR_USE_NORMAL:
  124. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x0F, 0x0B, 0x01, 0x42, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  125. STR_USE_FIGHT:
  126. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x04, 0x5B, 0x03, 0x5C, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  127. STR_USE_FLYING:
  128. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x03, 0xCC, 0x0E, 0x5B, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  129. STR_USE_POISON:
  130. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x03, 0x63, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  131. STR_USE_GROUND:
  132. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x03, 0x1F, 0x09, 0x7E, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  133. STR_USE_ROCK:
  134. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x0E, 0xBB, 0x0B, 0xEB, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  135. STR_USE_BUG:
  136. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x02, 0x68, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  137. STR_USE_GHOST:
  138. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x04, 0xB5, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  139. STR_USE_STEEL:
  140. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x04, 0x40, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  141. STR_USE_FIRE:
  142. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x05, 0x7D, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  143. STR_USE_WATER:
  144. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x0C, 0x51, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  145. STR_USE_GRASS:
  146. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x02, 0x01, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  147. STR_USE_ELECTRIC:
  148. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x03, 0x2E, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  149. STR_USE_PSYCHIC:
  150. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x02, 0x2E, 0x09, 0xD2, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  151. STR_USE_ICE:
  152. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x01, 0xB6, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  153. STR_USE_DRAGON:
  154. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x08, 0xCD, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  155. STR_USE_DARK:
  156. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x03, 0x96, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  157. STR_USE_FAIRY:
  158. .byte 0xFD, 0x12, 0x07, 0xA5, 0x0E, 0x5C, 0x08, 0x9E, 0x0E, 0xE6, 0x07, 0x5B, 0x0C, 0x39, 0x0E, 0x5F, 0xAB, 0xFF

  159. .align 4
  160. NewBattleStringsTable:
  161. .word STR_USE_NORMAL
  162. .word STR_USE_FIGHT
  163. .word STR_USE_FLYING
  164. .word STR_USE_POISON
  165. .word STR_USE_GROUND
  166. .word STR_USE_ROCK
  167. .word STR_USE_BUG
  168. .word STR_USE_GHOST
  169. .word STR_USE_STEEL
  170. .word STR_USE_FIRE
  171. .word STR_USE_WATER
  172. .word STR_USE_GRASS
  173. .word STR_USE_ELECTRIC
  174. .word STR_USE_PSYCHIC
  175. .word STR_USE_ICE
  176. .word STR_USE_DRAGON
  177. .word STR_USE_DARK
  178. .word STR_USE_FAIRY
  179. .word 0x00

  180. AwakeningStoneType:
  181. .halfword 0x24D, 0x24E, 0x24F, 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, 0x258, 0x259, 0x25A, 0x25B, 0x25C, 0x25D, 0x25E

  182. .align 4
  183. StonePic:
  184. .word 0x00012010, 0xF0000036, 0xC0078001, 0x0F0013F0, 0x00CC04CC, 0x00BBBBCC, 0xD4BBBB02, 0x07701DF0
  185. .word 0xBC12300C, 0x88C00330, 0x0003B090, 0xBB03108C, 0x00BBABAB, 0xBBBA8BBB, 0xBB88AB8B, 0xA88A8A00
  186. .word 0x88A8A8B8, 0x888800A8, 0x8A88B88A, 0x8805B888, 0xCBB8A888, 0x009B5600, 0x00BB765A, 0x1003904C
  187. .word 0xA3F0C817, 0x0F8801E0, 0xCC888888, 0xB3100200, 0xA3601EF0, 0x4001F0C0, 0x00000001

  188. .align 4
  189. StonePal:
  190. .word 0x00002010, 0xFF7FFF00, 0x1F7C1F03, 0x7FE00000, 0x7C0003E0, 0xFF000000, 0x1A1B7E3F, 0x302B9F1B
  191. .word 0x190022B9, 0x00000100

  192. .org 0x08E19ACC
  193.         ldr r3, =(CheckHasAwakeningStone|1)
  194.         bx r3
  195. .pool

  196. .org 0x08E06644
  197.         ldr r3, =(MoreBattlestring|1)
  198.         bx r3
  199. .pool

  200. .org (0x08FC9AA8 + 0x2C * 0x00)
  201. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x0F, 0x0B, 0x01, 0x42, 0xFF, 0x00, 0x00

  202. .org (0x08FC9ABC + 0x2C * 0x00)
  203. .word STR_SUMMARY_NORMAL

  204. .org (0x08FC9AD0 + 0x2C * 0x00)
  205. .byte 0x00

  206. .org (0x08FCD3FC + 0x08 * 0x00)
  207. .word StonePic
  208. .word StonePal

  209. .org (0x08FC9AA8 + 0x2C * 0x01)
  210. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x04, 0x5B, 0x03, 0x5C, 0xFF, 0x00, 0x00

  211. .org (0x08FC9ABC + 0x2C * 0x01)
  212. .word STR_SUMMARY_FIGHT

  213. .org (0x08FC9AD0 + 0x2C * 0x01)
  214. .byte 0x01

  215. .org (0x08FCD3FC + 0x08 * 0x01)
  216. .word StonePic
  217. .word StonePal

  218. .org (0x08FC9AA8 + 0x2C * 0x02)
  219. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x03, 0xCC, 0x0E, 0x5B, 0xFF, 0x00, 0x00

  220. .org (0x08FC9ABC + 0x2C * 0x02)
  221. .word STR_SUMMARY_FLYING

  222. .org (0x08FC9AD0 + 0x2C * 0x02)
  223. .byte 0x02

  224. .org (0x08FCD3FC + 0x08 * 0x02)
  225. .word StonePic
  226. .word StonePal

  227. .org (0x08FC9AA8 + 0x2C * 0x03)
  228. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x03, 0x63, 0xFF, 0x00, 0x00, 0x00, 0x00

  229. .org (0x08FC9ABC + 0x2C * 0x03)
  230. .word STR_SUMMARY_POISON

  231. .org (0x08FC9AD0 + 0x2C * 0x03)
  232. .byte 0x03

  233. .org (0x08FCD3FC + 0x08 * 0x03)
  234. .word StonePic
  235. .word StonePal

  236. .org (0x08FC9AA8 + 0x2C * 0x04)
  237. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x03, 0x1F, 0x09, 0x7E, 0xFF, 0x00, 0x00

  238. .org (0x08FC9ABC + 0x2C * 0x04)
  239. .word STR_SUMMARY_GROUND

  240. .org (0x08FC9AD0 + 0x2C * 0x04)
  241. .byte 0x04

  242. .org (0x08FCD3FC + 0x08 * 0x04)
  243. .word StonePic
  244. .word StonePal

  245. .org (0x08FC9AA8 + 0x2C * 0x05)
  246. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x0E, 0xBB, 0x0B, 0xEB, 0xFF, 0x00, 0x00

  247. .org (0x08FC9ABC + 0x2C * 0x05)
  248. .word STR_SUMMARY_ROCK

  249. .org (0x08FC9AD0 + 0x2C * 0x05)
  250. .byte 0x05

  251. .org (0x08FCD3FC + 0x08 * 0x05)
  252. .word StonePic
  253. .word StonePal

  254. .org (0x08FC9AA8 + 0x2C * 0x06)
  255. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x02, 0x68, 0xFF, 0x00, 0x00, 0x00, 0x00

  256. .org (0x08FC9ABC + 0x2C * 0x06)
  257. .word STR_SUMMARY_BUG

  258. .org (0x08FC9AD0 + 0x2C * 0x06)
  259. .byte 0x06

  260. .org (0x08FCD3FC + 0x08 * 0x06)
  261. .word StonePic
  262. .word StonePal

  263. .org (0x08FC9AA8 + 0x2C * 0x07)
  264. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x04, 0xB5, 0xFF, 0x00, 0x00, 0x00, 0x00

  265. .org (0x08FC9ABC + 0x2C * 0x07)
  266. .word STR_SUMMARY_GHOST

  267. .org (0x08FC9AD0 + 0x2C * 0x07)
  268. .byte 0x07

  269. .org (0x08FCD3FC + 0x08 * 0x07)
  270. .word StonePic
  271. .word StonePal

  272. .org (0x08FC9AA8 + 0x2C * 0x08)
  273. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x04, 0x40, 0xFF, 0x00, 0x00, 0x00, 0x00

  274. .org (0x08FC9ABC + 0x2C * 0x08)
  275. .word STR_SUMMARY_STEEL

  276. .org (0x08FC9AD0 + 0x2C * 0x08)
  277. .byte 0x08

  278. .org (0x08FCD3FC + 0x08 * 0x08)
  279. .word StonePic
  280. .word StonePal

  281. .org (0x08FC9AA8 + 0x2C * 0x09)
  282. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x05, 0x7D, 0xFF, 0x00, 0x00, 0x00, 0x00

  283. .org (0x08FC9ABC + 0x2C * 0x09)
  284. .word STR_SUMMARY_FIRE

  285. .org (0x08FC9AD0 + 0x2C * 0x09)
  286. .byte 0x0A

  287. .org (0x08FCD3FC + 0x08 * 0x09)
  288. .word StonePic
  289. .word StonePal

  290. .org (0x08FC9AA8 + 0x2C * 0x0A)
  291. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x0C, 0x51, 0xFF, 0x00, 0x00, 0x00, 0x00

  292. .org (0x08FC9ABC + 0x2C * 0x0A)
  293. .word STR_SUMMARY_WATER

  294. .org (0x08FC9AD0 + 0x2C * 0x0A)
  295. .byte 0x0B

  296. .org (0x08FCD3FC + 0x08 * 0x0A)
  297. .word StonePic
  298. .word StonePal

  299. .org (0x08FC9AA8 + 0x2C * 0x0B)
  300. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x02, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00

  301. .org (0x08FC9ABC + 0x2C * 0x0B)
  302. .word STR_SUMMARY_GRASS

  303. .org (0x08FC9AD0 + 0x2C * 0x0B)
  304. .byte 0x0C

  305. .org (0x08FCD3FC + 0x08 * 0x0B)
  306. .word StonePic
  307. .word StonePal

  308. .org (0x08FC9AA8 + 0x2C * 0x0C)
  309. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x03, 0x2E, 0xFF, 0x00, 0x00, 0x00, 0x00

  310. .org (0x08FC9ABC + 0x2C * 0x0C)
  311. .word STR_SUMMARY_ELECTRIC

  312. .org (0x08FC9AD0 + 0x2C * 0x0C)
  313. .byte 0x0D

  314. .org (0x08FCD3FC + 0x08 * 0x0C)
  315. .word StonePic
  316. .word StonePal

  317. .org (0x08FC9AA8 + 0x2C * 0x0D)
  318. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x02, 0x2E, 0x09, 0xD2, 0xFF, 0x00, 0x00

  319. .org (0x08FC9ABC + 0x2C * 0x0D)
  320. .word STR_SUMMARY_PSYCHIC

  321. .org (0x08FC9AD0 + 0x2C * 0x0D)
  322. .byte 0x0E

  323. .org (0x08FCD3FC + 0x08 * 0x0D)
  324. .word StonePic
  325. .word StonePal

  326. .org (0x08FC9AA8 + 0x2C * 0x0E)
  327. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x01, 0xB6, 0xFF, 0x00, 0x00, 0x00, 0x00

  328. .org (0x08FC9ABC + 0x2C * 0x0E)
  329. .word STR_SUMMARY_ICE

  330. .org (0x08FC9AD0 + 0x2C * 0x0E)
  331. .byte 0x0F

  332. .org (0x08FCD3FC + 0x08 * 0x0E)
  333. .word StonePic
  334. .word StonePal

  335. .org (0x08FC9AA8 + 0x2C * 0x0F)
  336. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x08, 0xCD, 0xFF, 0x00, 0x00, 0x00, 0x00

  337. .org (0x08FC9ABC + 0x2C * 0x0F)
  338. .word STR_SUMMARY_DRAGON

  339. .org (0x08FC9AD0 + 0x2C * 0x0F)
  340. .byte 0x010

  341. .org (0x08FCD3FC + 0x08 * 0x0F)
  342. .word StonePic
  343. .word StonePal

  344. .org (0x08FC9AA8 + 0x2C * 0x10)
  345. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x03, 0x96, 0xFF, 0x00, 0x00, 0x00, 0x00

  346. .org (0x08FC9ABC + 0x2C * 0x10)
  347. .word STR_SUMMARY_DARK

  348. .org (0x08FC9AD0 + 0x2C * 0x10)
  349. .byte 0x11

  350. .org (0x08FCD3FC + 0x08 * 0x10)
  351. .word StonePic
  352. .word StonePal

  353. .org (0x08FC9AA8 + 0x2C * 0x11)
  354. .byte 0x07, 0xA5, 0x0E, 0x5C, 0x0B, 0xEB, 0x00, 0x0E, 0xE6, 0x07, 0x5B, 0xFF, 0x00, 0x00

  355. .org (0x08FC9ABC + 0x2C * 0x11)
  356. .word STR_SUMMARY_FAIRY

  357. .org (0x08FC9AD0 + 0x2C * 0x11)
  358. .byte 0x17

  359. .org (0x08FCD3FC + 0x08 * 0x11)
  360. .word StonePic
  361. .word StonePal

  362. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-4 15:01
本帖最后由 本站第一萌新 于 2020-5-4 15:06 编辑

输入脚本地址,执行脚本
也是和初始村蓝胖对话查看效果
顺便说一下,我是因为偷懒才这么搞得。如果你想作用于其他NPC,请删掉
  1. .org 0x089C0DFC
  2. .word Script_ScriptRunner
复制代码
并将Script_ScriptRunner给你想要的NPC
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func ScriptRunner
  10.         push {r4-r5, lr}
  11.         ldr r0, =(Task_SRProcessInput|1)
  12.         mov r1, #0
  13.         ldr r4, =(0x080A8FB0|1)
  14.         bl call_bx
  15.         ldr r5, =0x03005E00
  16.         mov r1, #40
  17.         mul r0, r1
  18.         add r5, r0
  19.         mov r0, #0 ;X
  20.         mov r1, #0 ;Y
  21.         mov r2, #8 ;W
  22.         mov r3, #2 ;H
  23.         ldr r4, =(0x080E2A1C|1)
  24.         bl call_bx
  25.         strh r0, [r5, #8] ;twindowId
  26.         mov r1, #0
  27.         strh r1, [r5, #10] ;tstate
  28.         str r1, [r5, #12] ;tpointer
  29.         strh r1, [r5, #16] ;tslot
  30.         mov r1, #0
  31.         ldr r4, =(0x08197854|1)
  32.         bl call_bx
  33.         mov r0, #0
  34.         ldr r4, =(0x081999BC|1)
  35.         bl call_bx
  36.         pop {r4-r5, pc}
  37. .endfunc
  38. .pool

  39. .func Task_SRProcessInput
  40.         push {r4-r7, lr}
  41.         mov r5, r0
  42.         ldr r7, =0x03005E00
  43.         mov r1, #40
  44.         mul r0, r1
  45.         add r7, r0
  46.         ldrh r6, [r7, #8] ;twindowId
  47.         ldrh r0, [r7, #10] ;tstate
  48.         cmp r0, #0
  49.         beq ShowScriptRunner
  50.         ldr r0, =0x030022C0
  51.         ldrh r0, [r0, #0x2E]
  52.         cmp r0, #1
  53.         beq A_Pressed
  54.         cmp r0, #2
  55.         beq B_Pressed
  56.         cmp r0, #0x10
  57.         beq Right_Pressed
  58.         cmp r0, #0x20
  59.         beq Left_Pressed
  60.         cmp r0, #0x40
  61.         beq Up_Pressed
  62.         cmp r0, #0x80
  63.         beq Down_Pressed
  64.         b InputEnd
  65. A_Pressed:
  66.         ldr r0, =0x020375E0
  67.         strh r5, [r0]
  68.         mov r1, #1
  69.         strh r1, [r0, #0x10]
  70.         b InputEnd ;理论上这里应该先把window free了,但是懒得改了
  71. B_Pressed:
  72.         mov r0, r5
  73.         mov r1, r6
  74.         bl DeleteTaskAndFreeWindow
  75.         ldr r0, =0x020375E0
  76.         mov r1, #0
  77.         strh r1, [r0, #0x10]
  78.         b InputEnd
  79. Right_Pressed:
  80.         ldrh r0, [r7, #16]
  81.         cmp r0, #3
  82.         bge InputEnd
  83.         add r0, #1
  84.         strh r0, [r7, #16]
  85.         mov r2, r0
  86.         ldr r0, [r7, #12]
  87.         mov r1, r6
  88.         bl ShowPointer
  89.         b InputEnd
  90. Left_Pressed:
  91.         ldrh r0, [r7, #16]
  92.         cmp r0, #0
  93.         ble InputEnd
  94.         sub r0, #1
  95.         strh r0, [r7, #16]
  96.         mov r2, r0
  97.         ldr r0, [r7, #12]
  98.         mov r1, r6
  99.         bl ShowPointer
  100.         b InputEnd
  101. Up_Pressed:
  102.         ldrh r0, [r7, #16]
  103.         mov r1, #3
  104.         sub r1, r0
  105.         mov r2, r7
  106.         add r2, #12
  107.         ldrb r0, [r2, r1]
  108.         cmp r0, #0xFF
  109.         bge InputEnd
  110.         add r0, #1
  111.         strb r0, [r2, r1]
  112.         ldr r0, [r7, #12]
  113.         mov r1, r6
  114.         ldrh r2, [r7, #16]
  115.         bl ShowPointer
  116.         b InputEnd
  117. Down_Pressed:
  118.         ldrh r0, [r7, #16]
  119.         mov r1, #3
  120.         sub r1, r0
  121.         mov r2, r7
  122.         add r2, #12
  123.         ldrb r0, [r2, r1]
  124.         cmp r0, #0
  125.         ble InputEnd
  126.         sub r0, #1
  127.         strb r0, [r2, r1]
  128.         ldr r0, [r7, #12]
  129.         mov r1, r6
  130.         ldrh r2, [r7, #16]
  131.         bl ShowPointer
  132.         b InputEnd
  133. ShowScriptRunner:
  134.         ldr r0, [r7, #12] ;tpointer
  135.         mov r1, r6 ;twindowId
  136.         ldrh r2, [r7, #16] ;tslot
  137.         bl ShowPointer
  138.         mov r0, #1
  139.         strh r0, [r7, #10]
  140. InputEnd:
  141.         pop {r4-r7, pc}
  142. .endfunc
  143. .pool

  144. .func ShowPointer
  145.         push {r4-r7, lr}
  146.         mov r4, r8
  147.         push {r4}
  148.         add sp, #-8
  149.         mov r5, r0
  150.         mov r8, r1
  151.         mov r6, r2
  152.         mov r0, r1
  153.         mov r1, #17
  154.         ldr r4, =(0x08003C48|1)
  155.         bl call_bx
  156.         mov r7, #0
  157. PrintPointerLoop:
  158.         cmp r7, #4
  159.         bge LoopEnd
  160.         mov r0, #0xFF
  161.         mov r1, #8
  162.         mov r2, #3
  163.         sub r2, r7
  164.         mul r1, r2
  165.         lsl r0, r1
  166.         and r0, r5
  167.         lsr r0, r1
  168.         mov r1, r0
  169.         ldr r0, =0x02021FC4
  170.         mov r2, #2
  171.         mov r3, #2
  172.         ldr r4, =(0x08008E20|1)
  173.         bl call_bx
  174.         cmp r7, r6
  175.         bne NotHighLight
  176.         ldr r0, =0x02021EC4
  177.         ldr r1, =gText_HignLight
  178.         ldr r4, =(0x08008EE0|1)
  179.         bl call_bx
  180.         ldr r0, =0x02021EC4
  181.         ldr r1, =0x02021FC4
  182.         ldr r4, =(0x08008BC0|1)
  183.         bl call_bx
  184.         mov r0, #0
  185.         str r0, [sp]
  186.         str r0, [sp, #4]
  187.         mov r0, r8
  188.         ldr r1, =0x02021EC4
  189.         mov r2, #16
  190.         mul r2, r7
  191.         add r2, #1
  192.         mov r3, #1
  193.         ldr r4, =(0x080E04A4|1)
  194.         bl call_bx
  195.         b PrepareToNext
  196. NotHighLight:
  197.         mov r0, #0
  198.         str r0, [sp]
  199.         str r0, [sp, #4]
  200.         mov r0, r8
  201.         ldr r1, =0x02021FC4
  202.         mov r2, #16
  203.         mul r2, r7
  204.         add r2, #1
  205.         mov r3, #1
  206.         ldr r4, =(0x080E04A4|1)
  207.         bl call_bx
  208. PrepareToNext:
  209.         add r7, #1
  210.         b PrintPointerLoop
  211. LoopEnd:
  212.         add sp, #8
  213.         pop {r4}
  214.         mov r8, r4
  215.         pop {r4-r7, pc}
  216. .endfunc
  217. .pool

  218. .func RunScript
  219.         push {r4-r5, lr}
  220.         ldr r0, =0x020375E0
  221.         ldrh r0, [r0] ;taskId
  222.         ldr r2, =0x03005E00
  223.         mov r1, #40
  224.         mul r1, r0
  225.         add r2, r1
  226.         ldrh r1, [r2, #8]
  227.         ldr r5, [r2, #12]
  228.         bl DeleteTaskAndFreeWindow
  229.         mov r0, r5
  230.         ldr r4, =(0x08098EF8|1)
  231.         bl call_bx
  232.         pop {r4-r5, pc}
  233. .endfunc
  234. .pool

  235. .func DeleteTaskAndFreeWindow
  236.         push {r4-r5, lr}
  237.         mov r5, r1
  238.         ldr r4, =(0x080A909C|1)
  239.         bl call_bx
  240.         mov r0, r5
  241.         ldr r4, =(0x080E2A78|1)
  242.         bl call_bx
  243.         pop {r4-r5, pc}
  244. .endfunc
  245. .pool

  246. .func call_bx
  247.         bx r4
  248. .endfunc
  249. .pool

  250. gText_HignLight:
  251. .string "[文本色_红]"

  252. Script_ScriptRunner:
  253.         lock
  254.         faceplayer
  255.         preparemsg gText_PleaseInput
  256.         waitmsg
  257.         callasm (ScriptRunner|1)
  258.         waitkeypress
  259.         compare 0x800D, 1
  260.         if1 0x1, Script_RunScript
  261.         msgbox gText_Cancel, 0x6
  262.         release
  263.         end
  264. Script_RunScript:
  265.         release
  266.         callasm (RunScript|1)

  267. .org 0x089C0DFC
  268. .word Script_ScriptRunner

  269. gText_PleaseInput:
  270. .string "欢迎使用脚本执行器,\n请输入脚本地址:"

  271. gText_Cancel:
  272. .string "输入取消!"

  273. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-4 20:26
入门时候写的,使得所有野生精灵(包括赠送精灵)变成闪光
不过指定PID的精灵好像不会有效果,不过我也懒得去改了
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func ShinyHack
  8.         push {r4-r6}
  9.         ldr r3, =(0x0806F5CC|1)
  10.         bl call_bx
  11.         mov r4, r0
  12.         ldr r3, =(0x0806F5CC|1)
  13.         bl call_bx       
  14.         mov r5, #7
  15.         and r5, r0
  16.         ldr r3, =(0x080F0020|1)
  17.         bl call_bx
  18.         lsl r6, r0, #16
  19.         lsr r6, #16       
  20.         lsr r0, #16       
  21.         eor r0, r6
  22.         eor r0, r4
  23.         eor r0, r5
  24.         lsl r0, #16
  25.         orr r0, r4
  26.         mov r1, r0
  27.         pop {r4-r6}
  28.         ldr r3, =(0x0806AF8C|1)
  29.         bx r3
  30. .endfunc
  31. .pool

  32. .func call_bx
  33.         bx r3
  34. .endfunc
  35. .pool

  36. .org 0x0806AF84
  37.         ldr r3, =(ShinyHack|1)
  38.         bx r3
  39. .pool

  40. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-5 20:26
显示觉醒力量属性(包括战斗中选择技能页面),威力
这一段代码还有很大的优化空间
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func SetMoveTypeIconsHack
  8.         cmp r0, #237
  9.         bne NotHiddenPower1
  10.         mov r0, #0
  11.         bl GetType
  12.         ldr r3, =(0x081C4448|1)
  13.         bx r3
  14. NotHiddenPower1:
  15.         mov r1, r0
  16.         lsl r0, r1, #1
  17.         add r0, r1
  18.         lsl r0, #2
  19.         ldr r3, =(0x081C4444|1)
  20.         bx r3
  21. .endfunc
  22. .pool
  23.        
  24. .func MoveSelectionDisplayMoveTypeHack
  25.         cmp r2, #237
  26.         bne NotHiddenPower2
  27.         mov r4, r0
  28.         mov r0, #1
  29.         bl GetType
  30.         mov r2, r0
  31.         mov r0, r4
  32.         b Back
  33. NotHiddenPower2:
  34.         lsl r1, r2, #1
  35.         add r1, r2
  36.         lsl r1, #2
  37.         add r1, r3
  38.         ldrb r2, [r1, #2]
  39. Back:       
  40.         ldr r3, =(0x08059BF2|1)
  41.         bx r3
  42. .endfunc
  43. .pool

  44. .func PrintMovePowerHack
  45.         cmp r4, #237
  46.         bne NotHiddenPower3
  47.         bl GetPower
  48.         mov r1, r0
  49.         ldr r4, =0x02021CC4
  50.         ldr r3, =(0x081C3CA0|1)
  51.         bx r3
  52. NotHiddenPower3:
  53.         add r2, r0, r2
  54.         ldrb r0, [r2, #1]
  55.         mov r6, r1
  56.         cmp r0, #1       
  57.         ldr r3, =(0x081C3C8C|1)       
  58.         bx r3
  59. .endfunc
  60. .pool

  61. .func GetType ;r0 = isinbattle
  62.         push {r4-r5, lr}
  63.         add sp, #-12
  64.         cmp r0, #1
  65.         bne SummaryScreen
  66.         ldr r0, =0x02024064
  67.         ldrb r0, [r0]
  68.         ldr r3, =(0x08E1833C|1)
  69.         bl call_bx
  70.         b GetIvs1
  71. SummaryScreen:
  72.         ldr r0, =0x0203CF1C
  73.         ldr r0, [r0]
  74.         add r0, #0xC
  75. GetIvs1:
  76.         mov r1, sp
  77.         bl GetIvs
  78.         mov r4, #0
  79.         mov r5, #0
  80. GetTypeLoop:
  81.         cmp r4, #6
  82.         bge GetTypeLoopEnd
  83.         mov r0, #1
  84.         lsl r1, r4, #1
  85.         mov r2, sp
  86.         ldrh r1, [r2, r1]
  87.         and r0, r1
  88.         lsl r0, r4
  89.         orr r5, r0
  90.         add r4, #1
  91.         b GetTypeLoop
  92. GetTypeLoopEnd:
  93.         mov r0, #15
  94.         mul r0, r5
  95.         mov r1, #63
  96.         ldr r3, =(0x082E7B68|1)
  97.         bl call_bx
  98.         add r0, #1
  99.         cmp r0, #9
  100.         blt LessThanMy
  101.         add r0, #1
  102. LessThanMy:       
  103.         add sp, #12
  104.         pop {r4-r5, pc}
  105. .endfunc
  106. .pool

  107. .func GetPower
  108.         push {r4-r5, lr}
  109.         add sp, #-12
  110.         ldr r0, =0x0203CF1C
  111.         ldr r0, [r0]
  112.         add r0, #0xC
  113.         mov r1, sp
  114.         bl GetIvs
  115.         mov r0, sp
  116.         ldrh r0, [r0]
  117.         mov r1, #2
  118.         and r0, r1
  119.         lsr r5, r0, #1
  120.         mov r4, #1
  121. GetPowerLoop:
  122.         cmp r4, #6
  123.         bge GetPowerLoopEnd
  124.         mov r0, #2
  125.         lsl r1, r4, #1
  126.         mov r2, sp
  127.         ldrh r1, [r2, r1]
  128.         and r0, r1
  129.         sub r1, r4, #1
  130.         lsl r0, r1
  131.         orr r5, r0
  132.         add r4, #1
  133.         b GetPowerLoop
  134. GetPowerLoopEnd:
  135.         mov r0, #40
  136.         mul r0, r5
  137.         mov r1, #63
  138.         ldr r3, =(0x082E7B68|1)
  139.         bl call_bx
  140.         add r0, #30
  141.         add sp, #12
  142.         pop {r4-r5, pc}
  143. .endfunc
  144. .pool


  145. .func GetIvs
  146.         push {r4-r6, lr}
  147.         mov r5, r0
  148.         mov r6, r1
  149.         mov r4, #0
  150. GetIvsLoop:
  151.         cmp r4, #6
  152.         bge GetIvsLoopEnd
  153.         mov r0, r5
  154.         mov r1, #0x27
  155.         add r1, r4
  156.         mov r2, #0
  157.         ldr r3, =(0x0806A518|1)
  158.         bl call_bx
  159.         lsl r1, r4, #1
  160.         strh r0, [r1, r6]
  161.         add r4, #1
  162.         b GetIvsLoop
  163. GetIvsLoopEnd:
  164.         pop {r4-r6, pc}
  165. .endfunc
  166. .pool

  167. .func call_bx
  168.         bx r3
  169. .endfunc
  170. .pool

  171. .org 0x081C443C
  172.         ldr r3, =(SetMoveTypeIconsHack|1)
  173.         bx r3
  174. .pool       

  175. .org 0x081C3C84
  176.         ldr r3, =(PrintMovePowerHack|1)
  177.         bx r3
  178. .pool

  179. .org 0x08059BE8
  180.         ldr r1, =(MoveSelectionDisplayMoveTypeHack|1)
  181.         bx r1
  182. .pool

  183. .close
复制代码

作者: 1696774136    时间: 2020-5-6 00:11
本站第一萌新 发表于 2020-5-2 21:14
模仿jzw聚聚早期做的一个滚动式多选框(虽说是模仿其实我根本没看他的是怎么实现的,也没看效果,只是觉得 ...

请问,原版绿宝石多选对话框在哪里呢
作者: 本站第一萌新    时间: 2020-5-6 07:26
1696774136 发表于 2020-5-6 00:11
请问,原版绿宝石多选对话框在哪里呢

0x0858B760
作者: 本站第一萌新    时间: 2020-5-6 14:43
本帖最后由 本站第一萌新 于 2020-5-6 14:47 编辑

昼夜使用不同调色板
注意:本代码仅为研究,我看了下和某绿的实现方式不同(那个暂且不懂,只是大概看了下是每帧都在判断),安全性和实用性暂且未知,只是发出来做个记录
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func DayNight
  8.         ldr r0, =0x083DF704
  9.         cmp r0, r4
  10.         bne Normal
  11.         ldr r0, =0x03005CF8
  12.         ldrb r0, [r0, #2]
  13.         cmp r0, #6
  14.         bge Normal
  15. UseNightPal:
  16.         ldr r0, =(NightPal + 2)
  17.         b Back
  18. Normal:
  19.         cmp r0, #18 ;6-18点使用原调色板(白天),其余使用自定义调色板(夜晚)
  20.         bge UseNightPal
  21.         ldr r0, [r4, #8]
  22.         add r0, #2
  23. Back:
  24.         add r5, #1
  25.         ldr r3, =(0x08088CFE|1)
  26.         bx r3
  27. .endfunc
  28. .pool

  29. .align 2
  30. NightPal:
  31.         ;请在此处书写你的调色板 请仿照08DD4E10写至少5个(多了不会用到,但原版有不止5个)

  32. .org 0x08088CF4
  33.         ldr r3, =(DayNight|1)
  34.         bx r3
  35. .pool

  36. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-6 17:21
本帖最后由 本站第一萌新 于 2020-5-7 15:56 编辑

之前做过的一个比较有意思的程序,随机在自定义的精灵库中抽取精灵构成双方队伍来进行对战。并且在战斗中禁用背包。之前是用C写的,我用ASM重写了一遍并删去了一些功能
以使其方便新手使用
此代码存在很大的修改空间,如可用r8储存目前的精灵数据地址。我由于是随便抽了一点时间写的所以没有进行修改。有兴趣的可以自己改进一下。
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .macro RandomPoke, species, helditem, move1, move2, move3, move4, nature, abilityNum
  7. .halfword species
  8. .halfword helditem
  9. .byte HPIV, attIV, defIV, speIV, spaIV, spdIV
  10. .byte HPEV, attEV, defEV, speEV, spaEV, spdEV
  11. .halfword move1, move2, move3, move4
  12. .byte nature
  13. .byte abilityNum
  14. .endmacro

  15. .macro RandomPokeEnd
  16. .halfword 0x0
  17. .halfword 0x0
  18. .byte 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
  19. .byte 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
  20. .halfword 0x0, 0x0, 0x0, 0x0
  21. .byte 0x0
  22. .byte 0x0
  23. .endmacro

  24. .org 0x08F80000
  25. .func CheckIsRandom
  26.         ldr r3, =(0x0806EA68|1)
  27.         bl call_bx
  28.         mov r0, #128
  29.         lsl r0, #7
  30.         add r0, #18        ;0x4012
  31.         ldr r3, =(0x0809D790|1)
  32.         bl call_bx
  33.         cmp r0, #0
  34.         beq CheckEnd
  35.         bl LoadParties
  36. CheckEnd:
  37.         ldr r1, =0x030022C0
  38.         mov r2, #33
  39.         lsl r2, #5
  40.         add r2, #25        ;0x439
  41.         ldr r3, =(0x080369EC|1)
  42.         bx r3
  43. .endfunc
  44. .pool

  45. .func LoadParties
  46.         push {lr}
  47.         ldr r3, =(0x08067B0C|1)
  48.         bl call_bx
  49.         ldr r3, =(0x08067B2C|1)
  50.         bl call_bx
  51.         ldr r0, =0x020244EC
  52.         bl LoadParty
  53.         ldr r0, =0x02024744
  54.         bl LoadParty
  55.         pop {pc}
  56. .endfunc
  57. .pool

  58. .func LoadParty
  59.         push {r4-r7, lr}
  60.         add sp, #-4
  61.         mov r4, r0
  62.         mov r5, #0
  63.         b GetMaxIdLoop
  64. GetSpecieLoopEnd: ;out of range
  65.         add sp, #4
  66.         pop {r4-r7, pc}       
  67. GetMaxIdLoop:
  68.         ldr r0, =gRandomPokes
  69.         mov r1, #26
  70.         mul r1, r5
  71.         add r0, r1
  72.         ldrh r0, [r0]
  73.         cmp r0, #0
  74.         beq GetMaxIdLoopEnd
  75.         add r5, #1
  76.         b GetMaxIdLoop
  77. GetMaxIdLoopEnd:
  78.         mov r6, #0
  79. GetSpecieLoop:
  80.         cmp r6, #6
  81.         bge GetSpecieLoopEnd
  82. GetRandomSpecie:
  83.         ldr r3, =(0x0806F5CC|1)
  84.         bl call_bx
  85.         mov r1, r5
  86.         ldr r3, =(0x082E7BE0|1)
  87.         bl call_bx
  88.         add r1, r0, #1
  89.         mov r7, #0
  90. CheckRepeatLoop:
  91.         cmp r7, r6
  92.         bge CheckRepeatLoopEnd
  93.         mov r3, #100
  94.         mul r3, r7
  95.         add r3, r4
  96.         ldrh r2, [r3, #30]
  97.         cmp r1, r2
  98.         beq CheckRepeatLoopEnd
  99.         add r7, #1
  100.         b CheckRepeatLoop
  101. CheckRepeatLoopEnd:
  102.         cmp r6, r7
  103.         bne GetRandomSpecie
  104.         mov r7, r0
  105.         ldr r1, =gRandomPokes
  106.         mov r2, #26
  107.         mul r0, r2
  108.         add r0, r1
  109.         ldrb r1, [r0, #24]
  110.         str r1, [sp]
  111.         ldrh r1, [r0]
  112.         mov r0, #100
  113.         mul r0, r6
  114.         add r0, r4
  115.         mov r2, #100
  116.         mov r3, #0
  117.         mov r5, r4
  118.         ldr r4, =(0x08067E90|1)
  119.         bl call_bx2
  120.         mov r4, r5
  121.         add r0, r7, #1
  122.         mov r3, #100
  123.         mul r3, r6
  124.         add r3, r4
  125.         strh r0, [r3, #30]
  126.         mov r0, #0xFF
  127.         str r0, [sp]
  128.         mov r0, #100
  129.         mul r0, r6
  130.         add r0, r4
  131.         mov r1, #0x15
  132.         mov r2, sp
  133.         ldr r3, =(0x0806ACAC|1)
  134.         bl call_bx
  135.         mov r0, #100
  136.         mul r0, r6
  137.         add r0, r4
  138.         mov r1, #0x20
  139.         mov r2, sp
  140.         ldr r3, =(0x0806ACAC|1)
  141.         bl call_bx
  142.         ldr r2, =gRandomPokes
  143.         add r2, #2
  144.         mov r0, #26
  145.         mul r0, r7
  146.         add r2, r0
  147.         mov r1, #0xC
  148.         mov r0, #100
  149.         mul r0, r6
  150.         add r0, r4
  151.         ldr r3, =(0x0806ACAC|1)
  152.         bl call_bx
  153.         mov r5, #0
  154. SetMoveLoop:
  155.         cmp r5, #4
  156.         bge SetMoveLoopEnd
  157.         ldr r2, =gRandomPokes
  158.         add r2, #16
  159.         mov r0, #26
  160.         mul r0, r7
  161.         add r2, r0
  162.         lsl r0, r5, #1
  163.         add r2, r0
  164.         mov r1, #0xD
  165.         add r1, r5
  166.         mov r0, #100
  167.         mul r0, r6
  168.         add r0, r4
  169.         ldr r3, =(0x0806ACAC|1)
  170.         bl call_bx
  171.         ldr r2, =gRandomPokes
  172.         add r2, #16
  173.         mov r0, #26
  174.         mul r0, r7
  175.         add r2, r0
  176.         lsl r1, r5, #1
  177.         ldrh r0, [r2, r1]
  178.         mov r1, #0xFF
  179.         mov r2, r5
  180.         ldr r3, =(0x0806B960|1)
  181.         bl call_bx
  182.         str r0, [sp]
  183.         mov r2, sp
  184.         mov r0, #100
  185.         mul r0, r6
  186.         add r0, r4
  187.         mov r1, #0x11
  188.         add r1, r5
  189.         ldr r3, =(0x0806ACAC|1)
  190.         bl call_bx
  191.         add r5, #1
  192.         b SetMoveLoop
  193. SetMoveLoopEnd:
  194.         mov r5, #0
  195. SetIVEVLoop:
  196.         cmp r5, #6
  197.         bge SetIVEVLoopEnd
  198.         mov r1, #0x27
  199.         add r1, r5
  200.         ldr r2, =gRandomPokes
  201.         add r2, #4
  202.         mov r0, #26
  203.         mul r0, r7
  204.         add r2, r0
  205.         add r2, r5
  206.         mov r0, #100
  207.         mul r0, r6
  208.         add r0, r4
  209.         ldr r3, =(0x0806ACAC|1)
  210.         bl call_bx
  211.         mov r1, #0x1A
  212.         add r1, r5
  213.         ldr r2, =gRandomPokes
  214.         add r2, #10
  215.         mov r0, #26
  216.         mul r0, r7
  217.         add r2, r0
  218.         add r2, r5
  219.         mov r0, #100
  220.         mul r0, r6
  221.         add r0, r4
  222.         ldr r3, =(0x0806ACAC|1)
  223.         bl call_bx
  224.         add r5, #1
  225.         b SetIVEVLoop
  226. SetIVEVLoopEnd:
  227.         ldr r2, =gRandomPokes
  228.         add r2, #25
  229.         mov r0, #26
  230.         mul r0, r7
  231.         add r2, r0
  232.         mov r1, #0x2E
  233.         mov r0, #100
  234.         mul r0, r6
  235.         add r0, r4
  236.         ldr r3, =(0x0806ACAC|1)
  237.         bl call_bx
  238.         mov r0, #100
  239.         mul r0, r6
  240.         add r0, r4
  241.         ldr r3, =(0x08068D0C|1)
  242.         bl call_bx
  243.         add r6, #1
  244.         b GetSpecieLoop
  245. .endfunc
  246. .pool

  247. .func CantUseBagHack
  248.         ldr r1, =0x021F0902
  249.         and r0, r1
  250.         cmp r0, #0
  251.         bne CantUseBag
  252.         mov r0, #128
  253.         lsl r0, #7
  254.         add r0, #18        ;0x4012
  255.         ldr r3, =(0x0809D790|1)
  256.         bl call_bx
  257.         cmp r0, #0
  258.         bne CantUseBag
  259.         ldr r3, =(0x0803C48C|1)
  260.         bx r3
  261. CantUseBag:
  262.         ldr r3, =(0x0803C23E|1)
  263.         bx r3
  264. .endfunc
  265. .pool
  266.        
  267. .func call_bx
  268.         bx r3
  269. .endfunc
  270. .pool
  271.        
  272. .func call_bx2
  273.         bx r4
  274. .endfunc
  275. .pool

  276. .align 2
  277. gRandomPokes:
  278. RandomPoke 0x71, 0x22C, 0x1F, 0x0, 0x1F, 0x1F, 0x0, 0x1F, 0xFC, 0x0, 0x4, 0x0, 0x0, 0xFC, 0x45, 0x5C, 0x87, 0x138, 0x14, 0x0
  279. RandomPoke 0x321, 0x220, 0x1F, 0x0, 0x1F, 0x1F, 0x1F, 0x1F, 0xFC, 0x0, 0x4, 0x0, 0x0, 0xFC, 0x1F7, 0x186, 0x69, 0x72, 0x14, 0x1
  280. RandomPoke 0x142, 0x149, 0x1F, 0x1F, 0x1F, 0x1F, 0x0, 0x1F, 0xFC, 0x0, 0xFC, 0x0, 0x0, 0x4, 0x11A, 0x105, 0x69, 0xB6, 0x8, 0x1
  281. RandomPoke 0xE3, 0x22E, 0x1F, 0x1F, 0x1F, 0x1F, 0x0, 0x1F, 0xFC, 0x0, 0xFC, 0x0, 0x0, 0x4, 0x19D, 0x1BE, 0x1B0, 0x163, 0x8, 0x1
  282. RandomPoke 0x28B, 0xC8, 0x1F, 0x1F, 0x1F, 0x0, 0x0, 0x1F, 0xFC, 0x0, 0xFC, 0x0, 0x0, 0x4, 0x168, 0x1B6, 0x49, 0xB6, 0x7, 0x0
  283. RandomPoke 0x278, 0xC8, 0x1F, 0x0, 0x1F, 0x1F, 0x1F, 0x1F, 0xFC, 0x0, 0xFC, 0x0, 0x0, 0x4, 0x1D9, 0x19B, 0x15B, 0x69, 0x14, 0x1
  284. RandomPokeEnd

  285. .org 0x080369E4
  286.         ldr r3, =(CheckIsRandom|1)
  287.         bx r3
  288. .pool

  289. .org 0x0803C234
  290.         ldr r3, =(CantUseBagHack|1)
  291.         bx r3
  292. .pool

  293. .close
复制代码
如果你要新增精灵,请在gRandomPokes的末尾(RandomPokeEnd之前)以
  1. RandomPoke 种类, 道具, HPIV, attIV, defIV, speIV, spaIV, spdIV,  HPEV, attEV, defEV, speEV, spaEV, spdEV, 技能1, 技能2, 技能3, 技能4, 性格, 特性ID
复制代码
的方式书写。(性格可以去看金手指找,特性ID就是精灵种族对应的两种特性)
我已经添加了6只精灵,不过这是适用于绿宝石802的。如果你用的是绿宝石原版或者不想保留我的设定,删掉他们,但请保证至少有6只精灵
示例脚本:
#freespace 0xFF
#dynamic 0xF85000
#org @RandomBattle
setflag 0x273                        //开启允许战败
setflag 0x4012                        //开启随机对战
special 0x28                        //储存队伍
trainerbattle 1 [训练师ID] 0 @msg1 @msg2 @ScriptAfterBattle
end

#org @ScriptAfterBattle
msgbox @msg3 2
settrainerflag [训练师ID]         //设置训练师可再次对战
special 0x29                        //恢复队伍
clearflag 0x4012                        //禁用随机对战
clearflag 0x273                        //禁用允许战败
end

#org @msg1
= ...

#org @msg2
= ...

#org @msg3
= ...
0x273这个flag在802中用于控制是否能够战败,不过我不确定绿宝石原版有没有这个flag。如果没有的话你可以自己研究或者找我,我有时间的话会帮你看看
作者: 本站第一萌新    时间: 2020-5-7 08:28
新增一个王者状态,拥有此状态的精灵的能力值将比同类多出1/4
在精灵页面和队伍中将会显示状态图标。当有其他状态存在时,将会显示其他状态的图标
战斗中遇到王者精灵将会有提示
这个也是很久前写的了,而且用的是蛇皮写法。所以逻辑性可能较差,勉强看看吧
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsBSMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func CalculateMonStatsHack1
  10.         push {r2, lr}
  11.         ldr r3, =(0x0806D8D4|1)
  12.         bl call_bx
  13. CalculateMonStatsHack2:
  14.         ldrh r1, [r5, #30]
  15.         cmp r1, #0
  16.         beq Back
  17.         mov r1, #5
  18.         mul r0, r1
  19.         lsr r0, #2
  20. Back:
  21.         pop {r2, pc}
  22. .endfunc
  23. .pool       
  24.        
  25. .func HackType1
  26.         bl CalculateMonStatsHack1
  27.         mov r3, #70
  28.         mul r2, r3
  29.         ldr r3, =(0x08068E42|1)
  30.         add r3, r2
  31.         bx r3
  32. .endfunc
  33. .pool       
  34.        
  35. .func HackType2
  36.         bl CalculateMonStatsHack1
  37.         lsl r1, r2, #2
  38.         add r1, #4
  39.         add r1, sp
  40.         str r0, [r1]
  41.         mov r3, #70
  42.         mul r2, r3
  43.         ldr r3, =(0x08068E42|1)
  44.         add r3, #2
  45.         add r3, r2
  46.         bx r3
  47. .endfunc
  48. .pool       
  49.        
  50. .func HackHP
  51.         ldr r3, =(0x082E7540|1)
  52.         bl call_bx
  53.         add r0, r4
  54.         add r0, #0xA
  55.         mov r1, pc        ;蛇皮操作,请勿学习
  56.         add r1, #9
  57.         push {r1}
  58.         push {r2}
  59.         bl CalculateMonStatsHack2
  60.         ldr r3, =(0x08068E24|1)
  61.         bx r3
  62. .endfunc
  63. .pool

  64. .func RandomToBeKing
  65.         mov r1, #0x38
  66.         mov r2, sp
  67.         add r2, #10
  68.         ldr r3, =(0x0806ACAC|1)
  69.         bl call_bx
  70.         ldr r3, =(0x0806F5CC|1)
  71.         bl call_bx
  72.         ldr r1, =6666 ;概率分之一,最大0xFFFF
  73.         ldr r3, =(0x082E7BE0|1)
  74.         bl call_bx
  75.         cmp r0, #0
  76.         bne RandomEnd
  77.         mov r0, #1
  78.         mov r1, r8
  79.         strb r0, [r1, #30]
  80. RandomEnd:       
  81.         ldr r3, =(0x08067B9C|1)
  82.         bx r3
  83. .endfunc
  84. .pool

  85. .func DoKingBS
  86.         mov r0, r7
  87.         ldr r3, =(0x08E1833C|1)
  88.         bl call_bx
  89.         ldrb r0, [r0, #30]
  90.         cmp r0, #0
  91.         beq BSCheckEnd
  92.         ldr r0, =0x0202420B
  93.         strb r7, [r0]
  94.         ldr r0, =BS_KINGSTATU
  95.         ldr r3, =(0x08E073E4|1)
  96.         bl call_bx
  97.         mov r4, #1
  98. BSCheckEnd:
  99.         ldr r2, [sp, #0x10]
  100.         lsl r3, r7, #2
  101.         add r3, r2, r3
  102.         mov r2, #0x7F
  103.         ldr r0, =(0x08E051D4|1)
  104.         bx r0
  105. .endfunc
  106. .pool

  107. .func MoreBattlestring
  108.         mov r3, #147
  109.         lsl r3, #2
  110.         add r1 ,r3, #1
  111.         cmp r0, r3
  112.         bgt More
  113.         mov r3, #0x7C
  114.         add r3, #0xFF
  115.         cmp r0, r3
  116.         bls Normal
  117.         ldr r3, =(0x08E0664C|1)
  118.         bx r3
  119. Normal:
  120.         ldr r3, =(0x08E06654|1)
  121.         bx r3
  122. More:
  123.         ldr r3, =NewBattleStringsTable
  124.         sub r0, r1
  125.         ldr r1, =(0x08E06658|1)
  126.         bx r1
  127. .endfunc
  128. .pool

  129. .func CheckSpriteHack
  130.         ldr r3, =(0x081B2014|1)
  131.         bl call_bx
  132.         cmp r0, #0
  133.         bne CheckBack
  134.         ldrb r0, [r4, #30]
  135.         cmp r0, #0
  136.         beq CheckBack
  137.         mov r0, #8
  138. CheckBack:
  139.         cmp r0, #0
  140.         ldr r3, =(0x081B2080|1)
  141.         bx r3
  142. .endfunc
  143. .pool

  144. .func call_bx
  145.         bx r3
  146. .endfunc
  147. .pool

  148. BS_KingStatu:
  149.         printstring 0x24D
  150.         waitmessage 0x40
  151.         end3

  152. .align 4
  153. NewBattleStringsTable:
  154. .word gText_KingStatu

  155. gText_KingStatu:
  156. .string "王者的威压从", 0xFD, 0x0F, "身上溢出!"

  157. .align 2
  158. NewStatuIcons:
  159. .word 0x00040010, 0x0000000A, 0x45030050, 0xC1440700, 0x131003C0, 0x44244450, 0x01031044, 0x42222222
  160. .word 0x20442442, 0x0B10F203, 0x1B501750, 0x24222340, 0xD7221F30, 0x33002A20, 0x54600005, 0x13205CF0
  161. .word 0x00AB1B10, 0x8300707F, 0x66870067, 0x131003C0, 0x26662004, 0x7B006666, 0x62206262, 0x22074062
  162. .word 0x22226266, 0x11106650, 0x66130066, 0x4F666266, 0x26781026, 0x40010026, 0x000E1007, 0x0062571C
  163. .word 0xE0000704, 0x205CF076, 0xD61B1013, 0x03016310, 0x28070129, 0x131003C0, 0x28220090, 0x88288822
  164. .word 0x00848882, 0x282882FF, 0x22074028, 0x00226888, 0x82140013, 0x82220100, 0x28823A82, 0x0F500740
  165. .word 0x10821700, 0x09572820, 0x01986001, 0x03C08864, 0x1B101310, 0xAB7F40AA, 0x80AA8701, 0x97012A03
  166. .word 0x9B01802B, 0xAA2AAAB0, 0xA42AA2AA, 0x00220200, 0x00A22204, 0x63AA2A03, 0x000F002A, 0x22AAA217
  167. .word 0x0A101B00, 0x109C01D7, 0x18002A09, 0x200C002A, 0x570C001C, 0x0B2C00A2, 0xC0BAE001, 0x1068105C
  168. .word 0x1B10D513, 0x02D0FF01, 0x0702CD03, 0x5203402C, 0x2D0340CC, 0xCCC27F11, 0x06220100, 0xCC22C222
  169. .word 0x10070022, 0xC2452C0D, 0x2C2C0F10, 0x2C09002C, 0x00A41E00, 0x1D02CC11, 0x0F10CC2C, 0x2C722CCC
  170. .word 0x1D100A10, 0x0D222220, 0xFADC6002, 0x5C505480, 0x1B101310, 0x02507B32, 0x10B3407B, 0x07702403
  171. .word 0x25001310, 0x86027B62, 0x228342E7, 0x2460128B, 0xF2160042, 0xCF7FA27F, 0x84027B22, 0x03C00444
  172. .word 0x97129802, 0xEF56FF41, 0x032E0703, 0x0340EE0B, 0x802F0B10, 0xEE2E7F12, 0x222EE222, 0x10EE402E
  173. .word 0xE2222207, 0x2F2E22E2, 0x0200E2E2, 0x101110E2, 0x10731008, 0x2300B31D, 0x0001002E, 0x00EE2E1F
  174. .word 0x2B031018, 0x1500222E, 0xFE60030F, 0x60505880, 0x101310F7, 0xA2FFF21B, 0xE00270FF, 0xFF12E602
  175. .word 0x2266261F, 0x03100C03, 0x1300D822, 0x10FD1B10, 0x430D031F, 0x2003200E, 0x2227032C, 0xF2C03B10
  176. .word 0x00FFB2FF

  177. .align 4
  178. NewAnimCmdTable:
  179. .incbin "test.gba", 0x61D0DC, 0x1C
  180. .word NewAnim

  181. .align 4
  182. NewAnim:
  183. .halfword 28, 0, 0xFFFF, 0

  184. .org 0x08068E80
  185.         ldr r3, =(HackType1|1)
  186.         bx r3
  187. .pool

  188. .org 0x08068EC6
  189.         ldr r3, =(HackType2|1)
  190.         bx r3
  191. .pool       

  192. .org 0x08068F0C
  193.         ldr r3, =(HackType1|1)
  194.         bx r3
  195. .pool

  196. .org 0x08068F52
  197.         ldr r3, =(HackType2|1)
  198.         bx r3
  199. .pool       

  200. .org 0x08068F98
  201.         ldr r3, =(HackType1|1)
  202.         bx r3
  203. .pool

  204. .org 0x08068E1C
  205.         ldr r3, =(HackHP|1)
  206.         bx r3
  207. .pool

  208. .org 0x08067B94
  209.         ldr r3, =(RandomToBeKing|1)
  210.         bx r3
  211. .pool

  212. .org 0x08E051CC
  213.         ldr r3, =(DoKingBS|1)
  214.         bx r3
  215. .pool

  216. .org 0x08E06644
  217.         ldr r3, =(MoreBattlestring|1)
  218.         bx r3
  219. .pool

  220. .org 0x081B2076
  221.         ldr r3, =(CheckSpriteHack|1)
  222.         bx r3
  223. .pool

  224. .org 0x08615FF8
  225. .word NewStatuIcons

  226. .org 0x0861D0F8
  227. .word NewStatuIcons
  228. .halfword 0x400

  229. .org 0x0861D110
  230. .word NewAnimCmdTable

  231. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-7 20:46
本帖最后由 本站第一萌新 于 2020-5-26 22:13 编辑

在宝可梦能力界面点击A可以依次查看精灵个体,努力,再按一次回到能力。个体和努力都根据大小分为三个阶层,每个阶层用不同的颜色显示(色板里居然没有绿色,只能用蓝色代替了
有的地方逻辑可以修改以最大限度的节省空间和效率,比如r9那个地方,还有switch可以换成pc(之前写错了)和地址的差跳转。我一样懒得搞了
(话说这个论坛好冷啊,连发了20条左右也只有两个人回复  )
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .create "3.0.gba",0x8000000
  5. .close
  6. .open "test.gba","3.0.gba", 0x8000000

  7. .org 0x08F80000
  8. .func CheckIsAPressedHack
  9.         mov r1, #129
  10.         lsl r1, #7
  11.         add r1, #64        ;0x40C0
  12.         ldrb r0, [r0, r1]
  13.         cmp r0, #1
  14.         bne CheckIsAPressedBack
  15.         bl ShowStates
  16.         pop {r4-r5, pc}
  17. CheckIsAPressedBack:
  18.         ldr r3, =(0x081C05BA|1)
  19.         bx r3
  20. .endfunc
  21. .pool

  22. .func ClearStatuWhenChangePage
  23.         ldr r3, =0x0203F000 ;现在看来用一个变量应该会更好?但懒得改了
  24.         mov r2, #0
  25.         strb r2, [r3]
  26.         push {r4-r7, lr}
  27.         mov r7, r10
  28.         mov r6, r9
  29.         mov r5, r8
  30.         ldr r3, =(0x081C0A94|1)
  31.         bx r3
  32. .endfunc
  33. .pool
  34.        
  35. .func ClearStatuWhenChangeMon
  36.         ldr r3, =0x0203F000
  37.         mov r2, #0
  38.         strb r2, [r3]
  39.         push {r4-r7, lr}
  40.         mov r7, r0
  41.         mov r5, r1
  42.         ldr r3, =(0x081C060E|1)
  43.         bx r3       
  44. .endfunc
  45. .pool

  46. .func ShowStates
  47.         push {lr}
  48.         ldr r0, =0x0203F000
  49.         ldrb r1, [r0]
  50.         add r1, #1
  51.         strb r1, [r0]
  52.         ldr r0, =(Task_ShowStates|1)
  53.         ldr r3, =(0x080A8FB0|1)
  54.         bl call_bx
  55.         ldr r1, =0x03005E00
  56.         mov r2, #40
  57.         mul r0, r2
  58.         add r0, r1
  59.         mov r1, #0
  60.         strh r1, [r0, #8] ;tstate
  61.         pop {pc}
  62. .endfunc
  63. .pool

  64. .func Task_ShowStates
  65.         push {r4-r7, lr}
  66.         mov r4, r0
  67.         ldr r5, =0x03005E00
  68.         mov r2, #40
  69.         mul r0, r2
  70.         add r5, r0
  71.         ldrh r0, [r5, #8] ;tstate
  72.         ldr r6, =0x0203F000
  73.         ldrb r7, [r6]
  74.         ldr r1, =Switch
  75.         lsl r0, #1
  76.         ldrh r0, [r0, r1]
  77.         ldr r1, =(Task_ShowStates|1)
  78.         add r0, r1
  79.         bx r0
  80. ClearPageWindowTilemaps:
  81.         mov r0, #1
  82.         ldr r3, =(0x081C2C38|1)
  83.         bl call_bx
  84.         b AddState
  85. PrintHeldItemName:
  86.         ldr r3, =(0x081C35E4|1)
  87.         bl call_bx
  88.         b AddState
  89. PrintRibbonCount:
  90.         ldr r3, =(0x081C3690|1)
  91.         bl call_bx
  92.         b AddState
  93. BufferLeftStatsIVsEVs:
  94.         cmp r7, #0
  95.         beq BufferLeftStats
  96.         mov r0, #1
  97.         bl BufferIVsAndEVs
  98.         b AddState
  99. BufferLeftStats:
  100.         ldr r3, =(0x081C3710|1)
  101.         bl call_bx
  102.         b AddState
  103. PrintLeftStatsIVsEVs:
  104.         cmp r7, #0
  105.         beq PrintLeftStats
  106.         mov r0, #1
  107.         bl PrintIVsAndEVs
  108.         b AddState
  109. PrintLeftStats:
  110.         ldr r3, =(0x081C37D8|1)
  111.         bl call_bx
  112.         b AddState
  113. BufferRightStatsIVsEVs:
  114.         cmp r7, #0
  115.         beq BufferRightStats
  116.         mov r0, #0
  117.         bl BufferIVsAndEVs
  118.         b AddState
  119. BufferRightStats:
  120.         ldr r3, =(0x081C3808|1)
  121.         bl call_bx
  122.         b AddState
  123. PrintRightStatsIVsEVs:
  124.         cmp r7, #0
  125.         beq PrintRightStats
  126.         mov r0, #0
  127.         bl PrintIVsAndEVs
  128.         b AddState
  129. PrintRightStats:
  130.         ldr r3, =(0x081C3890|1)
  131.         bl call_bx
  132.         b AddState
  133. PrintExpPointsNextLevel:
  134.         ldr r3, =(0x081C38C0|1)
  135.         bl call_bx
  136.         b AddState
  137. CreatePageWindowTilemaps:
  138.         mov r0, #1
  139.         ldr r3, =(0x081C2AFC|1)
  140.         bl call_bx
  141.         b AddState
  142. DestroyTask:
  143.         cmp r7, #2
  144.         bne Destroy
  145.         mov r7, #0xFF
  146.         strb r7, [r6]
  147. Destroy:
  148.         mov r0, r4
  149.         ldr r3, =(0x080A909C|1)
  150.         bl call_bx
  151. AddState:
  152.         ldrh r0, [r5, #8]
  153.         add r0, #1
  154.         strh r0, [r5, #8]
  155.         pop {r4-r7, pc}
  156. .endfunc
  157. .pool

  158. .func BufferIVsAndEVs
  159.         push {r4-r7, lr}
  160.         mov r4, r8
  161.         mov r5, r9
  162.         mov r6, r10
  163.         push {r4-r6}
  164.         mov r10, r0
  165.         ldr r1, =0x0203F000
  166.         ldrb r1, [r1]
  167.         cmp r0, #0
  168.         bne BufferRight
  169.         mov r0, #7
  170.         mov r9, r0
  171.         cmp r1, #1
  172.         beq HPIV
  173.         mov r4, #0x1A
  174.         b IntToString
  175. HPIV:
  176.         mov r4, #0x27
  177.         b IntToString
  178. BufferRight:
  179.         mov r0, #3
  180.         mov r9, r0
  181.         cmp r1, #1
  182.         beq SpeIV
  183.         mov r4, #0x1D
  184.         b IntToString
  185. SpeIV:
  186.         mov r4, #0x2A
  187. IntToString:
  188.         mov r5, #0
  189.         ldr r6, =0x02021CC4
  190.         ldr r7, =0x0203CF1C
  191.         ldr r7, [r7]
  192.         add r7, #0xC
  193. IntToStringLoop:
  194.         cmp r5, #3
  195.         bge IntToStringLoopEnd
  196.         mov r0, r7
  197.         add r1, r4, r5
  198.         mov r2, #0
  199.         ldr r3, =(0x0806A518|1)
  200.         bl call_bx
  201.         mov r8, r0
  202.         bl GetLevelColour
  203.         mov r1, r0
  204.         mov r0, #0xFF
  205.         add r0, #1 ;0x100
  206.         mul r0, r5
  207.         add r0, r6
  208.         ldr r3, =(0x08008EE0|1)
  209.         bl call_bx
  210.         mov r0, #24
  211.         lsl r0, #5 ;0x300
  212.         add r0, r6
  213.         mov r1, r8
  214.         mov r2, #1
  215.         mov r3, r9
  216.         mov r8, r4
  217.         ldr r4, =(0x08008CC0|1)
  218.         bl call_bx2
  219.         mov r4, r8
  220.         mov r0, #0xFF
  221.         add r0, #1 ;0x100
  222.         mul r0, r5
  223.         add r0, r6
  224.         mov r1, #24
  225.         lsl r1, #5 ;0x300
  226.         add r1, r6
  227.         ldr r3, =(0x08008BC0|1)
  228.         bl call_bx
  229.         add r5, #1
  230.         b IntToStringLoop
  231. IntToStringLoopEnd:
  232.         ldr r3, =(0x081AFBF0|1)
  233.         bl call_bx
  234.         mov r5, #0
  235. SetPlaceholderPtrLoop:
  236.         cmp r5, #3
  237.         bge SetPlaceholderPtrLoopEnd
  238.         mov r1, #0xFF
  239.         add r1, #1 ;0x100
  240.         mul r1, r5
  241.         add r1, r6
  242.         mov r0, r5
  243.         ldr r3, =(0x081AFC0C|1)
  244.         bl call_bx
  245.         add r5, #1
  246.         b SetPlaceholderPtrLoop
  247. SetPlaceholderPtrLoopEnd:
  248.         mov r0, r10
  249.         cmp r0, #0
  250.         bne LayoutRight
  251.         ldr r1, =gText_LayoutRight
  252.         b ExpandPlaceholders
  253. LayoutRight:
  254.         ldr r1, =gText_LayoutLeft
  255. ExpandPlaceholders:
  256.         mov r0, #24
  257.         lsl r0, #5 ;0x300
  258.         add r0, r6
  259.         ldr r3, =(0x081AFC28|1)
  260.         bl call_bx
  261.         pop {r4-r6}
  262.         mov r8, r4
  263.         mov r9, r5
  264.         mov r10, r6
  265.         pop {r4-r7, pc}
  266. .endfunc
  267. .pool

  268. .func PrintIVsAndEVs
  269.         push {r4-r5, lr}
  270.         add sp, #-8
  271.         cmp r0, #0
  272.         bne PrintRight
  273.         mov r4, #4
  274.         mov r5, #2
  275.         b AddWindow
  276. PrintRight:
  277.         mov r4, #2
  278.         mov r5, #3
  279. AddWindow:
  280.         ldr r0, =0x0861CCEC
  281.         mov r1, r5
  282.         ldr r3, =(0x081C2D2C|1)
  283.         bl call_bx
  284.         mov r2, r4
  285.         ldr r1, =0x02021CC4
  286.         mov r3, #24
  287.         lsl r3, #5 ;0x300
  288.         add r1, r3
  289.         mov r3, #0
  290.         str r3, [sp]
  291.         str r3, [sp, #4]
  292.         mov r3, #1
  293.         ldr r4, =(0x081C25A4|1)
  294.         bl call_bx2
  295.         add sp, #8
  296.         pop {r4-r5, pc}
  297. .endfunc
  298. .pool

  299. .func GetLevelColour
  300.         push {lr}
  301.         ldr r1, =0x0203F000
  302.         ldrb r1, [r1]
  303.         cmp r1, #1
  304.         bne IsEV
  305.         cmp r0, #10
  306.         ble BadColour
  307.         cmp r0, #20
  308.         ble NormalColour
  309.         b GoodColour
  310. IsEV:
  311.         cmp r0, #85
  312.         ble BadColour
  313.         cmp r0, #170
  314.         ble NormalColour
  315. GoodColour:
  316.         ldr r0, =gText_GoodColour
  317.         b GetLevelColourBack
  318. BadColour:
  319.         ldr r0, =gText_BadColour
  320.         b GetLevelColourBack
  321. NormalColour:
  322.         ldr r0, =gText_NormalColour
  323. GetLevelColourBack:
  324.         pop {pc}
  325. .endfunc
  326. .pool

  327. .func call_bx
  328.         bx r3
  329. .endfunc
  330. .pool

  331. .func call_bx2
  332.         bx r4
  333. .endfunc
  334. .pool

  335. .align 2
  336. Switch:
  337. .halfword (ClearPageWindowTilemaps - Task_ShowStates)
  338. .halfword (PrintHeldItemName - Task_ShowStates)
  339. .halfword (PrintRibbonCount - Task_ShowStates)
  340. .halfword (BufferLeftStatsIVsEVs - Task_ShowStates)
  341. .halfword (PrintLeftStatsIVsEVs - Task_ShowStates)
  342. .halfword (BufferRightStatsIVsEVs - Task_ShowStates)
  343. .halfword (PrintRightStatsIVsEVs - Task_ShowStates)
  344. .halfword (PrintExpPointsNextLevel - Task_ShowStates)
  345. .halfword (CreatePageWindowTilemaps - Task_ShowStates)
  346. .halfword (DestroyTask - Task_ShowStates)

  347. gText_LayoutRight:
  348. .string 0xF7, 0x00, "\n", 0xF7, 0x01, "\n", 0xF7, 0x02

  349. gText_LayoutLeft:
  350. .string 0xF7, 0x01, "\n", 0xF7, 0x02, "\n", 0xF7, 0x00

  351. gText_BadColour:
  352. .string 0xFC, 0x01, 0x05

  353. gText_NormalColour:
  354. .string 0xFC, 0x01, 0x06

  355. gText_GoodColour:
  356. .string 0xFC, 0x01, 0x07

  357. .org 0x081C05B0
  358.         ldr r3, =(CheckIsAPressedHack|1)
  359.         bx r3
  360. .pool

  361. .org 0x081C0A8C
  362.         ldr r3, =(ClearStatuWhenChangePage|1)
  363.         bx r3
  364. .pool

  365. .org 0x081C0604
  366.         ldr r3, =(ClearStatuWhenChangeMon|1)
  367.         bx r3
  368. .pool

  369. .close
复制代码

作者: jiangzhengwenjz    时间: 2020-5-8 06:24
本站第一萌新 发表于 2020-5-7 20:46
在宝可梦能力界面点击A可以依次查看精灵个体,努力,再按一次回到能力。个体和努力都根据大小分为三个阶层 ...


在这里不设回复可见的话基本是不会有人回帖的

而且考虑到pokeemerald的存在,现在用ASM意义真的不大
作者: 本站第一萌新    时间: 2020-5-8 07:56
jiangzhengwenjz 发表于 2020-5-8 06:24
在这里不设回复可见的话基本是不会有人回帖的

而且考虑到pokeemerald的存在,现在用ASM意义真的不大

确实是。看到pokeemerald工程的那一刻我就感觉hook大限将至了
发这个帖子主要是考虑到论坛低端教程和高端教程之间没什么过渡,所以发一些稍微复杂一点。不过现在看起来也就是在自娱自乐了
但是感觉没有编程经验的新手凭借个人努力是很难完全搞懂pokeemerald的,不可能要求每个改版者都是专业程序员吧,就像我当初入门C的时候看聚聚发的那个个体努力显示器差点没看自闭了各种系统完全搞不懂(其实现在也不是很懂,毕竟我是个闭门造车的典范,平时也就自己或和朋友一起瞎捉摸)(虽然说抄抄补补也能写出一些东西)
不过话说在国内我还没看到过几个用pokeemerald工程的改版,可能国内还是hook用的多一点吧
作者: jiangzhengwenjz    时间: 2020-5-8 11:33
本帖最后由 jiangzhengwenjz 于 2020-5-8 11:39 编辑
本站第一萌新 发表于 2020-5-8 07:56
确实是。看到pokeemerald工程的那一刻我就感觉hook大限将至了
发这个帖子主要是考虑到论坛低 ...


额,pokeemerald只有更简单吧,因为只是用它改版你也并不需要懂他的build system,不需要懂怎么反编译,改改改就完事了,还有Egg现成的蓝本可以用,还可以用gdb调试

至于国内改版界,你如果不发这个贴我都要以为国内没人改版了(除了究绿那些人我算是知道),以前一起改版的人基本也都退了

我现在也不怎么搞改版,业余时间都在搞各种反编译项目,偶尔别人要帮忙的时候才写一下汇编
主要是现在那些函数和数据在pokeemerald/pokefirered里都命名得差不多了,再写功能就不会有太多感觉

以前,反编译还没出来,自己水平也不行,在那里调调调反而还挺有意思的
作者: 本站第一萌新    时间: 2020-5-8 12:00
jiangzhengwenjz 发表于 2020-5-8 11:33
额,pokeemerald只有更简单吧,因为只是用它改版你也并不需要懂他的build system,不需要懂怎么反编译, ...

确实感觉国内都没什么人研究GBA改版了。不过绿宝石802(应该会被最近国人在做的绿宝石890替代,毕竟有Z石梦特8代精灵等)这个蓝本已经足够满足大部分改版者的需求了,剩下的也就是写写脚本,剧情,导入素材的事了
作者: 本站第一萌新    时间: 2020-5-8 12:05
仅适用于绿宝石802
删除战死的精灵,并且如果主角战败则重置游戏(理论上能够抹除存档?但是这对模拟器而言并没有意义)
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsBSMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func DeleteFaintMon
  10.         push {lr}
  11.         bl 0x08E1833C
  12.         ldr r3, =(0x08067A8C|1)
  13.         bl call_bx
  14.         pop {pc}
  15. .endfunc
  16. .pool

  17. .func DeleteAttacker
  18.         push {lr}
  19.         ldr r0, =0x0202420B
  20.         ldrb r0, [r0]
  21.         bl DeleteFaintMon
  22.         pop {pc}
  23. .endfunc
  24. .pool

  25. .func DeleteTarget
  26.         push {lr}
  27.         ldr r0, =0x0202420B
  28.         ldrb r0, [r0, #1]
  29.         bl DeleteFaintMon
  30.         pop {pc}
  31. .endfunc
  32. .pool

  33. .func CallasmHack
  34.         str r1, [r0]
  35.         ldr r1, =0x08E1FDFC
  36.         cmp r3, #166
  37.         blt CallasmHackBack
  38.         ldr r1, =(NewCallasmTable - 0x28)
  39.         sub r3, #166
  40. CallasmHackBack:
  41.         lsl r2, r3, #2
  42.         add r3, r1, r2
  43.         ldr r1, =(0x08E193AC|1)
  44.         bx r1
  45. .endfunc
  46. .pool

  47. .func call_bx
  48.         bx r3
  49. .endfunc
  50. .pool

  51. BS_FaintAttacker:
  52.         playfaintingcry bank_attacker
  53.         pause_cmd 0x40
  54.         cmd1a bank_attacker
  55.         cmd1b bank_attacker
  56.         printstring 28
  57.         callasm_cmd 23
  58.         callasm_cmd 142
  59.         callasm_cmd 166
  60.         return_cmd

  61. BS_FaintTarget:
  62.         playfaintingcry bank_target
  63.         pause_cmd 0x40
  64.         cmd1a bank_target
  65.         cmd1b bank_target
  66.         printstring 28
  67.         callasm_cmd 23
  68.         callasm_cmd 142
  69.         callasm_cmd 167
  70.         return_cmd
  71.        
  72. BS_CompactParty:
  73.         callasm_cmd 168
  74.         end2
  75.        
  76. BS_GotoCompactParty:
  77.         jumpifword 4, 0x02022FEC, 1, BS_CompactParty
  78.         goto_cmd BS_CompactParty

  79. .align 4       
  80. NewCallasmTable:
  81. .word (DeleteAttacker|1)       
  82. .word (DeleteTarget|1)       
  83. .word (0x080CE90C|1)

  84. .org 0x08085F58
  85.         swi 0x0
  86. .pool

  87. .org 0x08E193A4
  88.         ldr r2, =(CallasmHack|1)
  89.         bx r2
  90. .pool

  91. .org 0x08049C04
  92. .word BS_FaintAttacker

  93. .org 0x08049C8C
  94. .word BS_FaintTarget

  95. .org 0x082DA7D9
  96. .word BS_CompactParty

  97. .org 0x082DA80F
  98. .word BS_CompactParty

  99. .org 0x082DA818
  100. .word BS_CompactParty

  101. .org 0x082DA8F0
  102. .word BS_CompactParty

  103. .org 0x082DA8E6
  104.         goto_cmd BS_GotoCompactParty

  105. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-8 15:42
本帖最后由 本站第一萌新 于 2020-6-8 13:07 编辑

使得精灵可以使用对应属性的野外技能(一下想不起名字了,理解就好)如杰尼龟可以使用潜水,鱼跃龙门,冲浪。
这个创意最初是来自于老外FBI的,但他的实现我没有去看。不过想来也应该大同小异吧
注意:有点小bug 普通属性精灵无法换位
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func AddFieldMoveToList
  8.         ldr r5, =0x08615D7E
  9.         mov r0, #100
  10.         mov r1, r10
  11.         mul r0, r1
  12.         mov r1, r9
  13.         add r0, r1
  14.         mov r1, #0xB
  15.         mov r2, #0
  16.         ldr r3, =(0x0806A518|1)
  17.         bl call_bx
  18.         ldr r1, =0x08F186E0
  19.         mov r2, #0x1C
  20.         mul r0, r2
  21.         add r0, r1
  22.         ldrb r7, [r0, #6]
  23.         ldrb r1, [r0, #7]
  24.         mov r8, r1
  25.         ldr r4, =0x08E2B7C8
  26.         mov r6, #0
  27. AddFieldMoveLoop:
  28.         lsl r0, r6, #1
  29.         ldrh r0, [r0, r5]
  30.         cmp r0, #0xE
  31.         beq AddFieldMoveLoopEnd
  32.         mov r1, #0xC
  33.         mul r1, r0
  34.         add r1, r4
  35.         ldrb r1, [r1, #2]
  36.         cmp r1, r7
  37.         beq AddToList
  38.         mov r2, r8
  39.         cmp r1, r2
  40.         beq AddToList
  41.         b PrepareNext
  42. AddToList:
  43.         mov r2, #19
  44.         add r2, r6
  45.         ldr r0, =0x0203CEC4
  46.         ldr r0, [r0]
  47.         mov r1, r0
  48.         add r0, #0xF
  49.         add r1, #0x17
  50.         ldr r3, =(0x080A0944|1)
  51.         bl call_bx
  52. PrepareNext:
  53.         add r6, #1
  54.         b AddFieldMoveLoop
  55. AddFieldMoveLoopEnd:
  56.         ldr r3, =(0x081B34AA|1)
  57.         bx r3
  58. .endfunc
  59. .pool

  60. .func call_bx
  61.         bx r3
  62. .endfunc
  63. .pool

  64. .org 0x081B3440
  65.         ldr r3, =(AddFieldMoveToList|1)
  66.         bx r3
  67. .pool

  68. .org 0x081B54F6
  69.         mov r0, #1 ;使得徽章检查失去作用。删去这块如果你不想要这个效果
  70. .pool

  71. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-9 15:53
本帖最后由 本站第一萌新 于 2021-7-23 10:00 编辑

命名界面支持中文输入
这个是花了一上午搞得。还有些bug,所以最好不要用或者请自行稍作修改
1.输入中文的时候好像没有检测是否超出最大字符数
2.输入的时候字符无法对其下划线。这个是因为它输出不是一连串输出而是一个一个字符输出的,我实在懒得新建一个全局变量用来记录什么地方是中文字符什么地方不是
3.中文字符删除不能一次删完,而是会变成一个其他字符,原理同上
由于代码过于庞大,所以上传为文件,请自行重命名为.asm文件
不过现在想来貌似用一个循环就能实现了,实在没有必要浪费这么多空间:(
修复版下载地址:https://share.weiyun.com/PIwjima3 PS:解决了上述bug。但由于时间原因,该版本代码仍存在较大优化空间

ChineseInput.txt

43.36 KB, 下载次数: 307

中文输入


作者: 本站第一萌新    时间: 2020-5-10 09:12
修改pokemart脚本对应的函数,使得商店地址为0时随机生成商品(不会出现重要道具)
本例没有处理重复的问题,有兴趣的可以自行修改程序
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func NewSetItem
  8.         push {r4, lr}
  9.         ldr r1, =0x02039F60
  10.         mov r2, #0
  11.         strb r2, [r1, #0xC]
  12.         ldr r2, [r1, #8]
  13.         ldr r3, =0x0203F000
  14.         mov r1, #0
  15.         cmp r2, r3
  16.         bne CheckIsRandom
  17.         mov r1, #0
  18. ClearItemLoop:
  19.         lsl r2, r1, #1
  20.         add r4, r2, r3
  21.         ldrh r2, [r4]
  22.         cmp r2, #0
  23.         beq CheckIsRandom
  24.         mov r2, #0
  25.         strh r2, [r4]
  26.         add r1, #1
  27.         b ClearItemLoop
  28. CheckIsRandom:
  29.         cmp r0, #0
  30.         bne LoadItemToList
  31.         ldr r3, =(0x0806F5CC|1)
  32.         bl call_bx
  33.         mov r1, #10
  34.         ldr r3, =(0x082E7650|1)
  35.         bl call_bx
  36.         add r4, r0, #1
  37.         ldr r1, =0x02039F60
  38.         strb r4, [r1, #0xC]
  39.         mov r5, #0
  40. GetRandomItemLoop:
  41.         cmp r5, r4
  42.         bge GetRandomItemLoopEnd
  43. GetAgain:
  44.         ldr r3, =(0x0806F5CC|1)
  45.         bl call_bx
  46.         mov r1, #10
  47.         lsl r1, #6 ;0x280 改成你的版本的道具数
  48.         ldr r3, =(0x082E7650|1)
  49.         bl call_bx
  50.         add r0, #1
  51.         mov r6, r0
  52.         ldr r3, =(0x080D6C68|1)
  53.         bl call_bx
  54.         cmp r0, #5
  55.         beq GetAgain
  56.         ldr r1, =0x0203F000
  57.         lsl r2, r5, #1
  58.         strh r6, [r1, r2]
  59.         add r5, #1
  60.         b GetRandomItemLoop
  61. GetRandomItemLoopEnd:
  62.         mov r0, #0
  63.         lsl r2, r5, #1
  64.         strh r0, [r1, r2]
  65.         mov r0, r1
  66.         mov r1, #1
  67. LoadItemToList:
  68.         ldr r2, =0x02039F60
  69.         str r0, [r2, #8]
  70.         cmp r0, #0
  71.         bne NewSetItemBack
  72.         mov r1, #0
  73. GetCountLoop:
  74.         lsl r0, r1, #1
  75.         ldrh r0, [r0, r2]
  76.         cmp r0, #0
  77.         beq GetCountLoopEnd
  78.         add r1, #1
  79.         b GetCountLoop
  80. GetCountLoopEnd:
  81.         strb r1, [r2, #0xC]
  82. NewSetItemBack:
  83.         pop {r4, pc}
  84. .endfunc
  85. .pool

  86. .func call_bx
  87.         bx r3
  88. .endfunc
  89. .pool

  90. .org 0x080DFB58
  91.         ldr r3, =(NewSetItem|1)
  92.         bx r3
  93. .pool

  94. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-13 13:09
简易个体努力查看器
之前做过的东西。这个肯定是不如版主早期那个作品美观的,不过还是发出来做个记录
一样的和初始村蓝胖对话查看效果,如果想自己更改示例脚本也已经给出了
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .macro WindowTemplate, bg, tilemapLeft, tilemapTop, width, height, paletteNum, baseBlock
  9. .align 2
  10. .byte bg
  11. .byte tilemapLeft
  12. .byte tilemapTop
  13. .byte width
  14. .byte height
  15. .byte paletteNum
  16. .halfword baseBlock
  17. .endmacro

  18. .macro BgTemplate, bg, charBaseIndex, mapBaseIndex, screenSize, paletteMode, priority, baseTile
  19. .align 4
  20. .word (bg) | (charBaseIndex << 2) | (mapBaseIndex << 4) | (screenSize << 9) | (paletteMode << 11) | (priority << 12) | (baseTile << 14)
  21. .endmacro

  22. .macro FillBgTilemapBufferRect, bg, tileNum, x, y, width, height, pal
  23.         mov r0, width
  24.         str r0, [sp]
  25.         mov r0, height
  26.         str r0, [sp, #4]
  27.         mov r0, pal
  28.         str r0, [sp, #8]
  29.         mov r0, bg
  30.         ldr r1, =0x1A2
  31.         add r1, (tileNum - 0x1A2)
  32.         mov r2, x
  33.         mov r3, y
  34.         ldr r4, =(0x08002804|1)
  35.         bl call_bx2
  36. .endmacro

  37. .org 0x08F80000
  38. .func MainFunc
  39.         push {lr}
  40.         ldr r0, =(CB2_Main|1)
  41.         ldr r3, =(0x08000540|1)
  42.         bl call_bx
  43.         ldr r3, =(0x08098E54|1)
  44.         bl call_bx
  45.         pop {pc}
  46. .endfunc
  47. .pool

  48. .func CB2_Main
  49.         push {lr}
  50.         ldr r1, =0x030022C0
  51.         mov r2, #0x87
  52.         lsl r2, #3
  53.         add r1, r2
  54.         mov r0, #0
  55.         strb r0, [r1] ;gMain.state
  56.         ldr r3, =(0x080AC378|1)
  57.         bl call_bx
  58.         ldr r3, =(0x08085D34|1)
  59.         bl call_bx
  60.         ldr r0, =(CB2_ShowIVEV|1)
  61.         ldr r3, =(0x08000540|1)
  62.         bl call_bx
  63.         ldr r1, =0x030022C0
  64.         ldr r0, =(0x080861CC|1)
  65.         str r0, [r1, #8]
  66.         pop {pc}
  67.        
  68. .func CB2_ShowIVEV
  69.         push {r4-r7, lr}
  70.         mov r4, r8
  71.         push {r4}
  72.         add sp, #-12
  73.         ldr r1, =0x030022C0
  74.         mov r2, #0x87
  75.         lsl r2, #3
  76.         add r1, r2
  77.         ldrb r0, [r1] ;gMain.state
  78.         ldr r1, =Switch
  79.         lsl r0, #1
  80.         ldrh r0, [r0, r1]
  81.         add r0, pc
  82.         bx r0
  83. SetVBlankCallback:
  84.         mov r0, #0
  85.         ldr r3, =(0x080006F0|1)
  86.         bl call_bx
  87.         b AddState
  88. InitBgsAndWindows:
  89.         mov r3, #0xC0
  90.         ldr r2, =0x06017000
  91.         lsl r3, #19
  92. ClearLoop:
  93.         mov r1, #0x80
  94.         lsl r1, #5
  95.         mov r12, r1
  96.         add r3, r12
  97.         cmp r3, r2
  98.         bne ClearLoop
  99.         mov r3, sp
  100.         add r2, r3, #6
  101.         ldr r3, =0x040000D4
  102.         str r2, [r3]
  103.         mov r2, #0xA0
  104.         lsl r2, #19
  105.         str r2, [r3, #4]
  106.         ldr r2, =0x81000200
  107.         str r2, [r3, #8]
  108.         mov r0, #0
  109.         ldr r3, =(0x080017BC|1)
  110.         bl call_bx
  111.         mov r0, #0
  112.         ldr r1, =sShowEVIVBgTemplates
  113.         mov r2, #2
  114.         ldr r3, =(0x080017E8|1)
  115.         bl call_bx
  116.         mov r0, #0
  117.         mov r1, #0
  118.         mov r2, #0
  119.         ldr r3, =(0x08001D04|1)
  120.         bl call_bx
  121.         mov r0, #0
  122.         mov r1, #0
  123.         mov r2, #0
  124.         ldr r3, =(0x08001E7C|1)
  125.         mov r0, #1
  126.         mov r1, #0
  127.         mov r2, #0
  128.         ldr r3, =(0x08001D04|1)
  129.         bl call_bx
  130.         mov r0, #1
  131.         mov r1, #0
  132.         mov r2, #0
  133.         ldr r3, =(0x08001E7C|1)
  134.         bl call_bx
  135.         ldr r0, =sShowEVIVWinTemplates
  136.         ldr r3, =(0x080031C0|1)
  137.         bl call_bx
  138.         ldr r3, =(0x080045B0|1)
  139.         bl call_bx
  140.         mov r0, #0
  141.         mov r1, #12
  142.         lsl r1, #10
  143.         add r1, #0x40
  144.         ldr r3, =(0x080010B4|1)
  145.         bl call_bx
  146.         mov r0, #0
  147.         ldr r3, =(0x08001B30|1)
  148.         bl call_bx
  149.         mov r0, #1
  150.         ldr r3, =(0x08001B30|1)
  151.         bl call_bx
  152.         b AddState
  153. ResetData:
  154.         ldr r3, =(0x080A1A74|1)
  155.         bl call_bx
  156.         ldr r3, =(0x080B9FB8|1)
  157.         bl call_bx
  158.         ldr r3, =(0x080A8F50|1)
  159.         bl call_bx
  160.         ldr r3, =(0x08006974|1)
  161.         bl call_bx
  162.         b AddState
  163. LoadBoxTiles:
  164.         ldr r0, =0x03005D90
  165.         ldr r0, [r0]
  166.         ldrb r0, [r0, #0x14]
  167.         lsr r0, #3
  168.         ldr r3, =(0x08098758|1)
  169.         bl call_bx
  170.         ldr r1, [r0]
  171.         mov r2, #0x90
  172.         lsl r2, #1
  173.         ldr r3, =0x1A2
  174.         mov r0, #1
  175.         ldr r4, =(0x08001944|1)
  176.         bl call_bx2
  177.         b AddState
  178. LoadWindowPalette:
  179.         ldr r0, =0x0855C6A0
  180.         mov r1, #0
  181.         mov r2, #2
  182.         ldr r3, =(0x080A1938|1)
  183.         bl call_bx
  184.         ldr r0, =0x03005D90
  185.         ldr r0, [r0]
  186.         ldrb r0, [r0, #0x14]
  187.         lsr r0, #3
  188.         ldr r3, =(0x08098758|1)
  189.         bl call_bx
  190.         ldr r0, [r0, #4]
  191.         mov r1, #0x70
  192.         mov r2, #0x20
  193.         ldr r3, =(0x080A1938|1)
  194.         bl call_bx
  195.         b AddState
  196. LoadTextPalette:
  197.         ldr r0, =0x0855C604
  198.         mov r1, #0x10
  199.         mov r2, #0x20
  200.         ldr r3, =(0x080A1938|1)
  201.         bl call_bx
  202.         b AddState
  203. DrawAndPutControl:
  204.         mov r0, #1
  205.         ldr r3, =(0x0800378C|1)
  206.         bl call_bx
  207.         bl DrawTextControl
  208.         b AddState
  209. WaitState:
  210.         b AddState
  211. DrawAndPutMonIVEV:
  212.         mov r0, #0
  213.         ldr r3, =(0x0800378C|1)
  214.         bl call_bx
  215.         mov r0, #0
  216.         bl DrawMonIVEV
  217.         b AddState
  218. FillBgTilemapBufferRects:
  219.         bl FillBgTilemap
  220.         b AddState
  221. CreateSpritesAndTask:
  222.         ldr r0, =(Task_ShowIVEVFadeIn|1)
  223.         ldr r3, =(0x080A8FB0|1)
  224.         bl call_bx
  225.         mov r5, r0
  226.         ldr r2, =0x03005E00
  227.         mov r1, #40
  228.         mul r0, r1
  229.         add r2, r0
  230.         mov r0, #1
  231.         strh r0, [r2, #8] ;tMonId
  232.         ldr r0, =0x020244E9
  233.         ldrb r6, [r0]
  234.         ldr r0, =0x020244EC
  235.         mov r8, r0
  236.         mov r7, #0
  237. CreateSpritesLoop:
  238.         cmp r7, r6
  239.         bge CreateSpritesLoopEnd
  240.         mov r0, r8
  241.         mov r1, #100
  242.         mul r1, r7
  243.         add r0, r1
  244.         mov r1, #0
  245.         mov r2, #0
  246.         ldr r3, =(0x0806A518|1)
  247.         bl call_bx
  248.         str r0, [sp, #4]
  249.         mov r0, #1
  250.         str r0, [sp, #8]
  251.         str r0, [sp]
  252.         mov r0, r8
  253.         mov r1, #100
  254.         mul r1, r7
  255.         add r0, r1
  256.         mov r1, #0xB
  257.         mov r2, #0
  258.         ldr r3, =(0x0806A518|1)
  259.         bl call_bx
  260.         mov r4, r0
  261.         ldr r3, =(0x080D2F68|1)
  262.         bl call_bx
  263.         mov r0, r4
  264.         ldr r2, =PoiX
  265.         ldrb r2, [r2, r7]
  266.         ldr r1, =(0x08007428|1)
  267.         mov r3, #0x10
  268.         ldr r4, =(0x080D2CC4|1)
  269.         bl call_bx2
  270.         ldr r1, =0x02020630
  271.         mov r2, #0x44
  272.         mul r2, r0
  273.         add r1, r2
  274.         ldrh r2, [r1, #4]
  275.         ldr r3, =0xF3FF
  276.         and r2, r3
  277.         strh r2, [r1, #4]
  278.         mov r1, r5
  279.         ldr r3, =0x03005E00
  280.         mov r2, #40
  281.         mul r1, r2
  282.         add r3, r1
  283.         add r3, #9
  284.         strb r0, [r3, r7]
  285.         add r7, #1
  286.         b CreateSpritesLoop
  287. CreateSpritesLoopEnd:
  288.         ldrb r0, [r3]
  289.         ldr r1, =0x02020630
  290.         mov r2, #0x44
  291.         mul r2, r0
  292.         add r1, r2
  293.         ldr r0, =(0x080D3014|1)
  294.         str r0, [r1, #0x1C]
  295.         b AddState
  296. FadeAndChangeCallBack:
  297.         mov r0, #0
  298.         str r0, [sp]
  299.         neg r0, r0
  300.         mov r1, #0
  301.         mov r2, #0x10
  302.         mov r3, #0
  303.         ldr r4, =(0x080A1AD4|1)
  304.         bl call_bx2
  305.         ldr r0, =(0x080BA4C8|1)
  306.         ldr r3, =(0x080006F0|1)
  307.         bl call_bx
  308.         ldr r0, =(0x080BA4B0|1)
  309.         ldr r3, =(0x08000540|1)
  310.         bl call_bx
  311. AddState:
  312.         ldr r1, =0x030022C0
  313.         mov r0, #0x87
  314.         lsl r0, #3
  315.         add r1, r0
  316.         ldrb r0, [r1]
  317.         add r0, #1
  318.         strb r0, [r1]
  319.         add sp, #12
  320.         pop {r4}
  321.         mov r8, r4
  322.         pop {r4-r7, pc}
  323. .endfunc
  324. .pool

  325. .func DrawTextControl
  326.         push {r4, lr}
  327.         add sp, #-12
  328.         mov r0, #1
  329.         mov r1, #17
  330.         ldr r3, =(0x08003C48|1)
  331.         bl call_bx
  332.         mov r0, #1
  333.         str r0, [sp]
  334.         mov r0, #0xFF
  335.         str r0, [sp, #4]
  336.         mov r0, #0
  337.         str r0, [sp, #8]
  338.         mov r0, #1
  339.         mov r1, #1
  340.         ldr r2, =gText_Control
  341.         mov r3, #8
  342.         ldr r4, =(0x080045D0|1)
  343.         bl call_bx2
  344.         mov r0, #1
  345.         mov r1, #3
  346.         ldr r3, =(0x08003658|1)
  347.         bl call_bx
  348.         add sp, #12
  349.         pop {r4, pc}
  350. .endfunc
  351. .pool

  352. .func DrawMonIVEV
  353.         push {r4-r6, lr}
  354.         add sp, #-16
  355.         mov r5, r0
  356.         mov r0, #0
  357.         mov r1, #17
  358.         ldr r3, =(0x08003C48|1)
  359.         bl call_bx
  360.         mov r0, #32
  361.         str r0, [sp]
  362.         mov r0, #0xFF
  363.         str r0, [sp, #4]
  364.         mov r0, #0
  365.         str r0, [sp, #8]
  366.         mov r0, #0
  367.         mov r1, #1
  368.         ldr r2, =gText_Frame
  369.         mov r3, #8
  370.         ldr r4, =(0x080045D0|1)
  371.         bl call_bx2
  372.         ldr r0, =0x02021FC4
  373.         mov r1, #0xFF
  374.         strb r1, [r0]
  375.         ldr r0, =0x020244EC
  376.         mov r1, #100
  377.         mul r1, r5
  378.         add r5, r1, r0
  379.         mov r6, #0
  380. BufferIVLoop:
  381.         cmp r6, #6
  382.         bge BufferIVLoopEnd
  383.         mov r0, r5
  384.         mov r1, #0x27
  385.         add r1, r6
  386.         mov r2, #0
  387.         ldr r3, =(0x0806A518|1)
  388.         bl call_bx
  389.         mov r1, r0
  390.         add r0, sp, #12
  391.         mov r2, #2
  392.         mov r3, #3
  393.         ldr r4, =(0x08008CC0|1)
  394.         bl call_bx2
  395.         ldr r0, =0x02021FC4
  396.         add r1, sp, #12
  397.         ldr r3, =(0x08008BC0|1)
  398.         bl call_bx
  399.         ldr r0, =0x02021FC4
  400.         ldr r1, =gText_Blank
  401.         ldr r3, =(0x08008BC0|1)
  402.         bl call_bx
  403.         add r6, #1
  404.         b BufferIVLoop
  405. BufferIVLoopEnd:
  406.         ldr r0, =0x02021FC4
  407.         ldr r1, =gText_LineFeed
  408.         ldr r3, =(0x08008BC0|1)
  409.         bl call_bx
  410.         mov r6, #0
  411. BufferEVLoop:
  412.         cmp r6, #6
  413.         bge BufferEVLoopEnd
  414.         mov r0, r5
  415.         mov r1, #0x1A
  416.         add r1, r6
  417.         mov r2, #0
  418.         ldr r3, =(0x0806A518|1)
  419.         bl call_bx
  420.         mov r1, r0
  421.         add r0, sp, #12
  422.         mov r2, #2
  423.         mov r3, #3
  424.         ldr r4, =(0x08008CC0|1)
  425.         bl call_bx2
  426.         ldr r0, =0x02021FC4
  427.         add r1, sp, #12
  428.         ldr r3, =(0x08008BC0|1)
  429.         bl call_bx
  430.         ldr r0, =0x02021FC4
  431.         ldr r1, =gText_Blank
  432.         ldr r3, =(0x08008BC0|1)
  433.         bl call_bx
  434.         add r6, #1
  435.         b BufferEVLoop
  436. BufferEVLoopEnd:
  437.         mov r0, #48
  438.         str r0, [sp]
  439.         mov r0, #0xFF
  440.         str r0, [sp, #4]
  441.         mov r0, #0
  442.         str r0, [sp, #8]
  443.         mov r0, #0
  444.         mov r1, #1
  445.         ldr r2, =0x02021FC4
  446.         mov r3, #35
  447.         ldr r4, =(0x080045D0|1)
  448.         bl call_bx2
  449.         mov r0, #0
  450.         mov r1, #3
  451.         ldr r3, =(0x08003658|1)
  452.         bl call_bx
  453.         add sp, #16
  454.         pop {r4-r6, pc}
  455. .endfunc
  456. .pool

  457. .func FillBgTilemap
  458.         push {r4, lr}
  459.         add sp, #-12
  460.         FillBgTilemapBufferRect 1, 0x1A2, 1, 0, 1, 1, 7
  461.         FillBgTilemapBufferRect 1, 0x1A3, 2, 0, 26, 1, 7
  462.         FillBgTilemapBufferRect 1, 0x1A4, 28, 0, 1, 1, 7
  463.         FillBgTilemapBufferRect 1, 0x1A5, 1, 1, 1, 14, 7
  464.         FillBgTilemapBufferRect 1, 0x1A7, 28, 1, 1, 14, 7
  465.         FillBgTilemapBufferRect 1, 0x1A8, 1, 15, 1, 1, 7
  466.         FillBgTilemapBufferRect 1, 0x1A9, 2, 15, 26, 1, 7
  467.         FillBgTilemapBufferRect 1, 0x1AA, 28, 15, 1, 1, 7
  468.         FillBgTilemapBufferRect 1, 0x1A2, 1, 16, 1, 1, 7
  469.         FillBgTilemapBufferRect 1, 0x1A3, 2, 16, 26, 1, 7
  470.         FillBgTilemapBufferRect 1, 0x1A4, 28, 16, 1, 1, 7
  471.         FillBgTilemapBufferRect 1, 0x1A5, 1, 17, 1, 2, 7
  472.         FillBgTilemapBufferRect 1, 0x1A7, 28, 17, 1, 2, 7
  473.         FillBgTilemapBufferRect 1, 0x1A8, 1, 19, 1, 1, 7
  474.         FillBgTilemapBufferRect 1, 0x1A9, 2, 19, 26, 1, 7
  475.         FillBgTilemapBufferRect 1, 0x1AA, 28, 19, 1, 1, 7
  476.         mov r0, #1
  477.         ldr r3, =(0x0800236C|1)
  478.         bl call_bx
  479.         add sp, #12
  480.         pop {r4, pc}
  481. .endfunc
  482. .pool

  483. .func Task_ShowIVEVFadeIn
  484.         ldr r1, =0x02037FD4
  485.         ldrb r1, [r1, #7]
  486.         mov r2, #0x80
  487.         and r1, r2
  488.         cmp r1, #0
  489.         bne FadeInBack
  490.         ldr r1, =0x03005E00
  491.         mov r2, #40
  492.         mul r0, r2
  493.         add r0, r1
  494.         ldr r1, =(Task_ShowIVEVProcessInput|1)
  495.         str r1, [r0]
  496. FadeInBack:
  497.         bx lr
  498. .endfunc
  499. .pool

  500. .func Task_ShowIVEVProcessInput
  501.         push {r4-r5, lr}
  502.         add sp, #-4
  503.         ldr r1, =0x03005E00
  504.         mov r2, #40
  505.         mul r0, r2
  506.         add r5, r0, r1
  507.         ldr r0, =0x030022C0
  508.         ldrh r0, [r0, #0x2E]
  509.         cmp r0, #2
  510.         beq B_Pressed
  511.         cmp r0, #0x10
  512.         beq Right_Pressed
  513.         cmp r0, #0x20
  514.         beq Left_Pressed
  515.         b InputEnd
  516. B_Pressed:
  517.         mov r0, #0
  518.         str r0, [sp]
  519.         neg r0, r0
  520.         mov r1, #0
  521.         mov r2, #0
  522.         mov r3, #0x10
  523.         ldr r4, =(0x080A1AD4|1)
  524.         bl call_bx2
  525.         ldr r0, =(Task_ShowIVEVFadeOut|1)
  526.         str r0, [r5]
  527.         b InputEnd
  528. Right_Pressed:
  529.         ldrb r3, [r5, #8]
  530.         mov r1, r5
  531.         add r1, #8
  532.         ldrb r0, [r3, r1]
  533.         ldr r1, =0x02020630
  534.         mov r2, #0x44
  535.         mul r2, r0
  536.         add r1, r2
  537.         ldr r2, =(0x08007428|1)
  538.         str r2, [r1, #0x1C]
  539.         ldr r1, =0x020244E9
  540.         ldrb r1, [r1]
  541.         cmp r3, r1
  542.         bge BackToOne
  543.         add r3, #1
  544.         b RightNext
  545. BackToOne:
  546.         mov r3, #1
  547. RightNext:
  548.         strb r3, [r5, #8]
  549.         mov r1, r5
  550.         add r1, #8
  551.         ldrb r0, [r3, r1]
  552.         ldr r1, =0x02020630
  553.         mov r2, #0x44
  554.         mul r2, r0
  555.         add r1, r2
  556.         ldr r2, =(0x080D3014|1)
  557.         str r2, [r1, #0x1C]
  558.         sub r0, r3, #1
  559.         bl DrawMonIVEV
  560.         b InputEnd
  561. Left_Pressed:
  562.         ldrb r3, [r5, #8]
  563.         mov r1, r5
  564.         add r1, #8
  565.         ldrb r0, [r3, r1]
  566.         ldr r1, =0x02020630
  567.         mov r2, #0x44
  568.         mul r2, r0
  569.         add r1, r2
  570.         ldr r2, =(0x08007428|1)
  571.         str r2, [r1, #0x1C]
  572.         mov r1, #1
  573.         cmp r3, r1
  574.         ble BackToMax
  575.         sub r3, #1
  576.         b LeftNext
  577. BackToMax:
  578.         ldr r3, =0x020244E9
  579.         ldrb r3, [r3]
  580. LeftNext:
  581.         strb r3, [r5, #8]
  582.         mov r1, r5
  583.         add r1, #8
  584.         ldrb r0, [r3, r1]
  585.         ldr r1, =0x02020630
  586.         mov r2, #0x44
  587.         mul r2, r0
  588.         add r1, r2
  589.         ldr r2, =(0x080D3014|1)
  590.         str r2, [r1, #0x1C]
  591.         sub r0, r3, #1
  592.         bl DrawMonIVEV
  593. InputEnd:
  594.         add sp, #4
  595.         pop {r4-r5, pc}
  596. .endfunc
  597. .pool

  598. .func Task_ShowIVEVFadeOut
  599.         push {lr}
  600.         ldr r1, =0x02037FD4
  601.         ldrb r1, [r1, #7]
  602.         mov r2, #0x80
  603.         and r1, r2
  604.         cmp r1, #0
  605.         bne FadeOutBack
  606.         ldr r3, =(0x080A909C|1)
  607.         bl call_bx
  608.         ldr r3, =(0x08003604|1)
  609.         bl call_bx
  610.         ldr r0, =0x030022C0
  611.         ldr r0, [r0, #8]
  612.         ldr r3, =(0x08000540|1)
  613.         bl call_bx
  614. FadeOutBack:       
  615.         pop {pc}
  616. .endfunc
  617. .pool

  618. .func call_bx
  619.         bx r3
  620. .endfunc
  621. .pool

  622. .func call_bx2
  623.         bx r4
  624. .endfunc
  625. .pool

  626. Switch:
  627. .halfword (SetVBlankCallback - SetVBlankCallback + 1)
  628. .halfword (InitBgsAndWindows - SetVBlankCallback + 1)
  629. .halfword (ResetData - SetVBlankCallback + 1)
  630. .halfword (LoadBoxTiles - SetVBlankCallback + 1)
  631. .halfword (LoadWindowPalette - SetVBlankCallback + 1)
  632. .halfword (LoadTextPalette - SetVBlankCallback + 1)
  633. .halfword (DrawAndPutControl - SetVBlankCallback + 1)
  634. .halfword (WaitState - SetVBlankCallback + 1)
  635. .halfword (DrawAndPutMonIVEV - SetVBlankCallback + 1)
  636. .halfword (FillBgTilemapBufferRects - SetVBlankCallback + 1)
  637. .halfword (CreateSpritesAndTask - SetVBlankCallback + 1)
  638. .halfword (FadeAndChangeCallBack - SetVBlankCallback + 1)

  639. sShowEVIVBgTemplates:
  640. BgTemplate 1, 1, 30, 0, 0, 0, 0
  641. BgTemplate 0, 1, 31, 0, 0, 1, 0

  642. sShowEVIVWinTemplates:
  643. WindowTemplate 1, 2, 1, 26, 14, 1, 2
  644. WindowTemplate 0, 2, 17, 26, 2, 1, 0x16E
  645. WindowTemplate 0xFF, 0, 0, 0, 0, 0, 0

  646. PoiX:
  647. .byte 0x25, 0x45, 0x65, 0x85, 0xA5, 0xC5

  648. gText_Control:
  649. .string 0xF8, 0x08, 0xF8, 0x09, "选择精灵" , 0x00, 0xF8, 0x01, "退出"

  650. gText_Frame:
  651. .string 0xFC, 0x11, 0x1B, "HP", 0xFC, 0x11, 0x0E, "ATT   DEF   SPE   SPA   SPD\nIV\nEV"

  652. gText_Blank:
  653. .string "   "

  654. gText_LineFeed:
  655. .string "\n"

  656. Script_ShowEVIV:
  657.         lock
  658.         faceplayer
  659.         callasm (MainFunc|1)
  660.         waitstate
  661.         release
  662.         end
  663.        
  664. .org 0x089C0DFC
  665. .word Script_ShowEVIV

  666. .close
复制代码

作者: 整理控    时间: 2020-5-15 11:30
666
作者: 本站第一萌新    时间: 2020-5-15 22:45
整理控 发表于 2020-5-15 11:30
666

谬赞了,这些都是入门级的东西。主要是考虑到论坛和编程有关的东西要不是过于基础要不是过于复杂才发这个帖子的。(虽然说现在有了老外的工程用ASM确实没多大意义了:()
作者: 本站第一萌新    时间: 2020-5-16 09:04
扩充等级上限到150级(至于为什么不是200级或者更上是因为第二种经验类型的计算公式不支持高于160级,我也懒得自己去修改了。不过即使是只有150级也可能会有bug,如果发现的话请自行改写计算公式)
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .macro EXP_MEDIUM_FAST, level
  7. .word level * level * level
  8. .endmacro

  9. .macro EXP_ERRATIC, level
  10. .word (level <= 50) ? ((100 - level) * level * level * level /  50) : (level <= 68) ? ((150 - level) * level * level * level / 100) : (level <= 98) ? (((1911 - 10 * level) / 3) * level * level * level / 500) : ((160 - level) * level * level * level / 100)
  11. .endmacro

  12. .macro EXP_FLUCTUATING, level
  13. .word (level <= 15) ? (((level + 1) / 3 + 24) * level * level * level / 50) : (level <= 36) ? ((level + 14) * level * level * level / 50) : (((level / 2) + 32) * level * level * level / 50)
  14. .endmacro

  15. .macro EXP_MEDIUM_SLOW, level
  16. .word (6 * level * level * level) / 5 - (15 * level * level) + (100 * level) - 140
  17. .endmacro

  18. .macro EXP_FAST, level
  19. .word 4 * (level * level * level) / 5
  20. .endmacro

  21. .macro EXP_SLOW, level
  22. .word 5 * (level * level * level) / 4
  23. .endmacro

  24. .org 0x08F80000
  25. .align 4
  26. NewExpTable:
  27. .incbin "test.gba", 0x31F72C, 0x194
  28. EXP_MEDIUM_FAST 101
  29. EXP_MEDIUM_FAST 102
  30. EXP_MEDIUM_FAST 103
  31. EXP_MEDIUM_FAST 104
  32. EXP_MEDIUM_FAST 105
  33. EXP_MEDIUM_FAST 106
  34. EXP_MEDIUM_FAST 107
  35. EXP_MEDIUM_FAST 108
  36. EXP_MEDIUM_FAST 109
  37. EXP_MEDIUM_FAST 110
  38. EXP_MEDIUM_FAST 111
  39. EXP_MEDIUM_FAST 112
  40. EXP_MEDIUM_FAST 113
  41. EXP_MEDIUM_FAST 114
  42. EXP_MEDIUM_FAST 115
  43. EXP_MEDIUM_FAST 116
  44. EXP_MEDIUM_FAST 117
  45. EXP_MEDIUM_FAST 118
  46. EXP_MEDIUM_FAST 119
  47. EXP_MEDIUM_FAST 120
  48. EXP_MEDIUM_FAST 121
  49. EXP_MEDIUM_FAST 122
  50. EXP_MEDIUM_FAST 123
  51. EXP_MEDIUM_FAST 124
  52. EXP_MEDIUM_FAST 125
  53. EXP_MEDIUM_FAST 126
  54. EXP_MEDIUM_FAST 127
  55. EXP_MEDIUM_FAST 128
  56. EXP_MEDIUM_FAST 129
  57. EXP_MEDIUM_FAST 130
  58. EXP_MEDIUM_FAST 131
  59. EXP_MEDIUM_FAST 132
  60. EXP_MEDIUM_FAST 133
  61. EXP_MEDIUM_FAST 134
  62. EXP_MEDIUM_FAST 135
  63. EXP_MEDIUM_FAST 136
  64. EXP_MEDIUM_FAST 137
  65. EXP_MEDIUM_FAST 138
  66. EXP_MEDIUM_FAST 139
  67. EXP_MEDIUM_FAST 140
  68. EXP_MEDIUM_FAST 141
  69. EXP_MEDIUM_FAST 142
  70. EXP_MEDIUM_FAST 143
  71. EXP_MEDIUM_FAST 144
  72. EXP_MEDIUM_FAST 145
  73. EXP_MEDIUM_FAST 146
  74. EXP_MEDIUM_FAST 147
  75. EXP_MEDIUM_FAST 148
  76. EXP_MEDIUM_FAST 149
  77. EXP_MEDIUM_FAST 150
  78. .incbin "test.gba", 0x31F8C0, 0x194
  79. EXP_ERRATIC 101
  80. EXP_ERRATIC 102
  81. EXP_ERRATIC 103
  82. EXP_ERRATIC 104
  83. EXP_ERRATIC 105
  84. EXP_ERRATIC 106
  85. EXP_ERRATIC 107
  86. EXP_ERRATIC 108
  87. EXP_ERRATIC 109
  88. EXP_ERRATIC 110
  89. EXP_ERRATIC 111
  90. EXP_ERRATIC 112
  91. EXP_ERRATIC 113
  92. EXP_ERRATIC 114
  93. EXP_ERRATIC 115
  94. EXP_ERRATIC 116
  95. EXP_ERRATIC 117
  96. EXP_ERRATIC 118
  97. EXP_ERRATIC 119
  98. EXP_ERRATIC 120
  99. EXP_ERRATIC 121
  100. EXP_ERRATIC 122
  101. EXP_ERRATIC 123
  102. EXP_ERRATIC 124
  103. EXP_ERRATIC 125
  104. EXP_ERRATIC 126
  105. EXP_ERRATIC 127
  106. EXP_ERRATIC 128
  107. EXP_ERRATIC 129
  108. EXP_ERRATIC 130
  109. EXP_ERRATIC 131
  110. EXP_ERRATIC 132
  111. EXP_ERRATIC 133
  112. EXP_ERRATIC 134
  113. EXP_ERRATIC 135
  114. EXP_ERRATIC 136
  115. EXP_ERRATIC 137
  116. EXP_ERRATIC 138
  117. EXP_ERRATIC 139
  118. EXP_ERRATIC 140
  119. EXP_ERRATIC 141
  120. EXP_ERRATIC 142
  121. EXP_ERRATIC 143
  122. EXP_ERRATIC 144
  123. EXP_ERRATIC 145
  124. EXP_ERRATIC 146
  125. EXP_ERRATIC 147
  126. EXP_ERRATIC 148
  127. EXP_ERRATIC 149
  128. EXP_ERRATIC 150
  129. .incbin "test.gba", 0x31FA54, 0x194
  130. EXP_FLUCTUATING 101
  131. EXP_FLUCTUATING 102
  132. EXP_FLUCTUATING 103
  133. EXP_FLUCTUATING 104
  134. EXP_FLUCTUATING 105
  135. EXP_FLUCTUATING 106
  136. EXP_FLUCTUATING 107
  137. EXP_FLUCTUATING 108
  138. EXP_FLUCTUATING 109
  139. EXP_FLUCTUATING 110
  140. EXP_FLUCTUATING 111
  141. EXP_FLUCTUATING 112
  142. EXP_FLUCTUATING 113
  143. EXP_FLUCTUATING 114
  144. EXP_FLUCTUATING 115
  145. EXP_FLUCTUATING 116
  146. EXP_FLUCTUATING 117
  147. EXP_FLUCTUATING 118
  148. EXP_FLUCTUATING 119
  149. EXP_FLUCTUATING 120
  150. EXP_FLUCTUATING 121
  151. EXP_FLUCTUATING 122
  152. EXP_FLUCTUATING 123
  153. EXP_FLUCTUATING 124
  154. EXP_FLUCTUATING 125
  155. EXP_FLUCTUATING 126
  156. EXP_FLUCTUATING 127
  157. EXP_FLUCTUATING 128
  158. EXP_FLUCTUATING 129
  159. EXP_FLUCTUATING 130
  160. EXP_FLUCTUATING 131
  161. EXP_FLUCTUATING 132
  162. EXP_FLUCTUATING 133
  163. EXP_FLUCTUATING 134
  164. EXP_FLUCTUATING 135
  165. EXP_FLUCTUATING 136
  166. EXP_FLUCTUATING 137
  167. EXP_FLUCTUATING 138
  168. EXP_FLUCTUATING 139
  169. EXP_FLUCTUATING 140
  170. EXP_FLUCTUATING 141
  171. EXP_FLUCTUATING 142
  172. EXP_FLUCTUATING 143
  173. EXP_FLUCTUATING 144
  174. EXP_FLUCTUATING 145
  175. EXP_FLUCTUATING 146
  176. EXP_FLUCTUATING 147
  177. EXP_FLUCTUATING 148
  178. EXP_FLUCTUATING 149
  179. EXP_FLUCTUATING 150
  180. .incbin "test.gba", 0x31FBE8, 0x194
  181. EXP_MEDIUM_SLOW 101
  182. EXP_MEDIUM_SLOW 102
  183. EXP_MEDIUM_SLOW 103
  184. EXP_MEDIUM_SLOW 104
  185. EXP_MEDIUM_SLOW 105
  186. EXP_MEDIUM_SLOW 106
  187. EXP_MEDIUM_SLOW 107
  188. EXP_MEDIUM_SLOW 108
  189. EXP_MEDIUM_SLOW 109
  190. EXP_MEDIUM_SLOW 110
  191. EXP_MEDIUM_SLOW 111
  192. EXP_MEDIUM_SLOW 112
  193. EXP_MEDIUM_SLOW 113
  194. EXP_MEDIUM_SLOW 114
  195. EXP_MEDIUM_SLOW 115
  196. EXP_MEDIUM_SLOW 116
  197. EXP_MEDIUM_SLOW 117
  198. EXP_MEDIUM_SLOW 118
  199. EXP_MEDIUM_SLOW 119
  200. EXP_MEDIUM_SLOW 120
  201. EXP_MEDIUM_SLOW 121
  202. EXP_MEDIUM_SLOW 122
  203. EXP_MEDIUM_SLOW 123
  204. EXP_MEDIUM_SLOW 124
  205. EXP_MEDIUM_SLOW 125
  206. EXP_MEDIUM_SLOW 126
  207. EXP_MEDIUM_SLOW 127
  208. EXP_MEDIUM_SLOW 128
  209. EXP_MEDIUM_SLOW 129
  210. EXP_MEDIUM_SLOW 130
  211. EXP_MEDIUM_SLOW 131
  212. EXP_MEDIUM_SLOW 132
  213. EXP_MEDIUM_SLOW 133
  214. EXP_MEDIUM_SLOW 134
  215. EXP_MEDIUM_SLOW 135
  216. EXP_MEDIUM_SLOW 136
  217. EXP_MEDIUM_SLOW 137
  218. EXP_MEDIUM_SLOW 138
  219. EXP_MEDIUM_SLOW 139
  220. EXP_MEDIUM_SLOW 140
  221. EXP_MEDIUM_SLOW 141
  222. EXP_MEDIUM_SLOW 142
  223. EXP_MEDIUM_SLOW 143
  224. EXP_MEDIUM_SLOW 144
  225. EXP_MEDIUM_SLOW 145
  226. EXP_MEDIUM_SLOW 146
  227. EXP_MEDIUM_SLOW 147
  228. EXP_MEDIUM_SLOW 148
  229. EXP_MEDIUM_SLOW 149
  230. EXP_MEDIUM_SLOW 150
  231. .incbin "test.gba", 0x31FD7C, 0x194
  232. EXP_FAST 101
  233. EXP_FAST 102
  234. EXP_FAST 103
  235. EXP_FAST 104
  236. EXP_FAST 105
  237. EXP_FAST 106
  238. EXP_FAST 107
  239. EXP_FAST 108
  240. EXP_FAST 109
  241. EXP_FAST 110
  242. EXP_FAST 111
  243. EXP_FAST 112
  244. EXP_FAST 113
  245. EXP_FAST 114
  246. EXP_FAST 115
  247. EXP_FAST 116
  248. EXP_FAST 117
  249. EXP_FAST 118
  250. EXP_FAST 119
  251. EXP_FAST 120
  252. EXP_FAST 121
  253. EXP_FAST 122
  254. EXP_FAST 123
  255. EXP_FAST 124
  256. EXP_FAST 125
  257. EXP_FAST 126
  258. EXP_FAST 127
  259. EXP_FAST 128
  260. EXP_FAST 129
  261. EXP_FAST 130
  262. EXP_FAST 131
  263. EXP_FAST 132
  264. EXP_FAST 133
  265. EXP_FAST 134
  266. EXP_FAST 135
  267. EXP_FAST 136
  268. EXP_FAST 137
  269. EXP_FAST 138
  270. EXP_FAST 139
  271. EXP_FAST 140
  272. EXP_FAST 141
  273. EXP_FAST 142
  274. EXP_FAST 143
  275. EXP_FAST 144
  276. EXP_FAST 145
  277. EXP_FAST 146
  278. EXP_FAST 147
  279. EXP_FAST 148
  280. EXP_FAST 149
  281. EXP_FAST 150
  282. .incbin "test.gba", 0x31FF10, 0x194
  283. EXP_SLOW 101
  284. EXP_SLOW 102
  285. EXP_SLOW 103
  286. EXP_SLOW 104
  287. EXP_SLOW 105
  288. EXP_SLOW 106
  289. EXP_SLOW 107
  290. EXP_SLOW 108
  291. EXP_SLOW 109
  292. EXP_SLOW 110
  293. EXP_SLOW 111
  294. EXP_SLOW 112
  295. EXP_SLOW 113
  296. EXP_SLOW 114
  297. EXP_SLOW 115
  298. EXP_SLOW 116
  299. EXP_SLOW 117
  300. EXP_SLOW 118
  301. EXP_SLOW 119
  302. EXP_SLOW 120
  303. EXP_SLOW 121
  304. EXP_SLOW 122
  305. EXP_SLOW 123
  306. EXP_SLOW 124
  307. EXP_SLOW 125
  308. EXP_SLOW 126
  309. EXP_SLOW 127
  310. EXP_SLOW 128
  311. EXP_SLOW 129
  312. EXP_SLOW 130
  313. EXP_SLOW 131
  314. EXP_SLOW 132
  315. EXP_SLOW 133
  316. EXP_SLOW 134
  317. EXP_SLOW 135
  318. EXP_SLOW 136
  319. EXP_SLOW 137
  320. EXP_SLOW 138
  321. EXP_SLOW 139
  322. EXP_SLOW 140
  323. EXP_SLOW 141
  324. EXP_SLOW 142
  325. EXP_SLOW 143
  326. EXP_SLOW 144
  327. EXP_SLOW 145
  328. EXP_SLOW 146
  329. EXP_SLOW 147
  330. EXP_SLOW 148
  331. EXP_SLOW 149
  332. EXP_SLOW 150
  333. .incbin "test.gba", 0x31F72C, 0x194 ;不知道有什么用,但原版就是这样的
  334. EXP_MEDIUM_FAST 101
  335. EXP_MEDIUM_FAST 102
  336. EXP_MEDIUM_FAST 103
  337. EXP_MEDIUM_FAST 104
  338. EXP_MEDIUM_FAST 105
  339. EXP_MEDIUM_FAST 106
  340. EXP_MEDIUM_FAST 107
  341. EXP_MEDIUM_FAST 108
  342. EXP_MEDIUM_FAST 109
  343. EXP_MEDIUM_FAST 110
  344. EXP_MEDIUM_FAST 111
  345. EXP_MEDIUM_FAST 112
  346. EXP_MEDIUM_FAST 113
  347. EXP_MEDIUM_FAST 114
  348. EXP_MEDIUM_FAST 115
  349. EXP_MEDIUM_FAST 116
  350. EXP_MEDIUM_FAST 117
  351. EXP_MEDIUM_FAST 118
  352. EXP_MEDIUM_FAST 119
  353. EXP_MEDIUM_FAST 120
  354. EXP_MEDIUM_FAST 121
  355. EXP_MEDIUM_FAST 122
  356. EXP_MEDIUM_FAST 123
  357. EXP_MEDIUM_FAST 124
  358. EXP_MEDIUM_FAST 125
  359. EXP_MEDIUM_FAST 126
  360. EXP_MEDIUM_FAST 127
  361. EXP_MEDIUM_FAST 128
  362. EXP_MEDIUM_FAST 129
  363. EXP_MEDIUM_FAST 130
  364. EXP_MEDIUM_FAST 131
  365. EXP_MEDIUM_FAST 132
  366. EXP_MEDIUM_FAST 133
  367. EXP_MEDIUM_FAST 134
  368. EXP_MEDIUM_FAST 135
  369. EXP_MEDIUM_FAST 136
  370. EXP_MEDIUM_FAST 137
  371. EXP_MEDIUM_FAST 138
  372. EXP_MEDIUM_FAST 139
  373. EXP_MEDIUM_FAST 140
  374. EXP_MEDIUM_FAST 141
  375. EXP_MEDIUM_FAST 142
  376. EXP_MEDIUM_FAST 143
  377. EXP_MEDIUM_FAST 144
  378. EXP_MEDIUM_FAST 145
  379. EXP_MEDIUM_FAST 146
  380. EXP_MEDIUM_FAST 147
  381. EXP_MEDIUM_FAST 148
  382. EXP_MEDIUM_FAST 149
  383. EXP_MEDIUM_FAST 150
  384. .incbin "test.gba", 0x31F72C, 0x194
  385. EXP_MEDIUM_FAST 101
  386. EXP_MEDIUM_FAST 102
  387. EXP_MEDIUM_FAST 103
  388. EXP_MEDIUM_FAST 104
  389. EXP_MEDIUM_FAST 105
  390. EXP_MEDIUM_FAST 106
  391. EXP_MEDIUM_FAST 107
  392. EXP_MEDIUM_FAST 108
  393. EXP_MEDIUM_FAST 109
  394. EXP_MEDIUM_FAST 110
  395. EXP_MEDIUM_FAST 111
  396. EXP_MEDIUM_FAST 112
  397. EXP_MEDIUM_FAST 113
  398. EXP_MEDIUM_FAST 114
  399. EXP_MEDIUM_FAST 115
  400. EXP_MEDIUM_FAST 116
  401. EXP_MEDIUM_FAST 117
  402. EXP_MEDIUM_FAST 118
  403. EXP_MEDIUM_FAST 119
  404. EXP_MEDIUM_FAST 120
  405. EXP_MEDIUM_FAST 121
  406. EXP_MEDIUM_FAST 122
  407. EXP_MEDIUM_FAST 123
  408. EXP_MEDIUM_FAST 124
  409. EXP_MEDIUM_FAST 125
  410. EXP_MEDIUM_FAST 126
  411. EXP_MEDIUM_FAST 127
  412. EXP_MEDIUM_FAST 128
  413. EXP_MEDIUM_FAST 129
  414. EXP_MEDIUM_FAST 130
  415. EXP_MEDIUM_FAST 131
  416. EXP_MEDIUM_FAST 132
  417. EXP_MEDIUM_FAST 133
  418. EXP_MEDIUM_FAST 134
  419. EXP_MEDIUM_FAST 135
  420. EXP_MEDIUM_FAST 136
  421. EXP_MEDIUM_FAST 137
  422. EXP_MEDIUM_FAST 138
  423. EXP_MEDIUM_FAST 139
  424. EXP_MEDIUM_FAST 140
  425. EXP_MEDIUM_FAST 141
  426. EXP_MEDIUM_FAST 142
  427. EXP_MEDIUM_FAST 143
  428. EXP_MEDIUM_FAST 144
  429. EXP_MEDIUM_FAST 145
  430. EXP_MEDIUM_FAST 146
  431. EXP_MEDIUM_FAST 147
  432. EXP_MEDIUM_FAST 148
  433. EXP_MEDIUM_FAST 149
  434. EXP_MEDIUM_FAST 150

  435. .org 0x08067CF0
  436.         mov r0, #151
  437.         lsl r0, #2
  438.        
  439. .org 0x08069082
  440.         mov r5, #151
  441.         lsl r5, #2
  442.        
  443. .org 0x080690EE
  444.         mov r5, #151
  445.         lsl r5, #2
  446.        
  447. .org 0x0806C1A8
  448.         mov r0, #151
  449.         lsl r0, #2
  450.        
  451. .org 0x0806DFB2
  452.         mov r1, #151
  453.         lsl r1, #2
  454.        
  455. .org 0x0806DFBA
  456.         mov r2, #150
  457.         lsl r2, #2
  458.        
  459. .org 0x08059240
  460.         mov r1, #151
  461.         lsl r1, #2
  462.        
  463. .org 0x080593A0
  464.         mov r0, #151
  465.         lsl r0, #2
  466.        
  467. .org 0x080594A8
  468.         mov r0, #151
  469.         lsl r0, #2

  470. .org 0x081BB324
  471.         mov r1, #151
  472.         lsl r1, #2
  473.        
  474. .org 0x081BB484
  475.         mov r0, #151
  476.         lsl r0, #2
  477.        
  478. .org 0x081BB58C
  479.         mov r0, #151
  480.         lsl r0, #2
  481.        
  482. .org 0x0807499C
  483.         mov r0, #151
  484.         lsl r0, #2
  485.        
  486. .org 0x081A7C70
  487.         mov r1, #151
  488.         lsl r1, #2
  489.        
  490. .org 0x081A9D10
  491.         mov r0, #151
  492.         lsl r0, #2

  493. .org 0x081661CA
  494.         mov r0, #151
  495.         lsl r0, #2
  496.        
  497. .org 0x081C22FC
  498.         mov r0, #151
  499.         lsl r0, #2

  500. .org 0x081C3922
  501.         mov r0, #151
  502.         lsl r0, #2
  503.        
  504. .org 0x081D6458
  505.         mov r0, #151
  506.         lsl r0, #2
  507.        
  508. .org 0x081C3908
  509.         cmp r0, #149
  510.        
  511. .org 0x081C22E2
  512.         cmp r1, #149
  513.        
  514. .org 0x08069096
  515.         cmp r2, #150
  516.        
  517. .org 0x08069102
  518.         cmp r2, #150
  519.        
  520. .org 0x0806C17C
  521.         cmp r0, #150
  522.        
  523. .org 0x0806DFD8
  524.         cmp r0, #150

  525. .org 0x0805C54A
  526.         cmp r0, #149
  527.        
  528. .org 0x081BDD22
  529.         cmp r0, #149
  530.        
  531. .org 0x08074CDE
  532.         cmp r0, #149
  533.        
  534. .org 0x08E103E0 ;如果是绿宝石802,使用这一条
  535.         cmp r0, #149
  536.        
  537. ;        .org 0x0804A5BE ;如果是原版绿宝石,使用这两条(未经测试,如果发现bug请告知于我)
  538. ;                cmp r0, #150
  539. ;
  540. ;        .org 0x0804A88E
  541. ;                cmp r0, #150
  542.        
  543. .org 0x0806FD20
  544.         cmp r0, #150
  545.        
  546. .org 0x0806FCE4
  547.         cmp r5, #149
  548.        
  549. .org 0x081B743A
  550.         cmp r0, #150

  551. .org 0x080592C4
  552. .word NewExpTable

  553. .org 0x080593F0
  554. .word NewExpTable

  555. .org 0x08059500
  556. .word NewExpTable

  557. .org 0x08067DC0
  558. .word NewExpTable

  559. .org 0x080690B8
  560. .word NewExpTable

  561. .org 0x08069124
  562. .word NewExpTable

  563. .org 0x0806C2E4
  564. .word NewExpTable

  565. .org 0x0806DFF0
  566. .word NewExpTable

  567. .org 0x08074A10
  568. .word NewExpTable

  569. .org 0x081661FC
  570. .word NewExpTable

  571. .org 0x081A7CFC
  572. .word NewExpTable

  573. .org 0x081A9D48
  574. .word NewExpTable

  575. .org 0x081BB3A8
  576. .word NewExpTable

  577. .org 0x081BB4D4
  578. .word NewExpTable

  579. .org 0x081BB5E4
  580. .word NewExpTable

  581. .org 0x081C2338
  582. .word NewExpTable

  583. .org 0x081C3940
  584. .word NewExpTable

  585. .org 0x081D6488
  586. .word NewExpTable

  587. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-16 21:39
适用于绿宝石802 3.0版本
没啥东西想整了,做点小修复吧。修复802大师球必定抓捕
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func FixMasterBall
  8.         cmp r0, #4
  9.         bne Normal
  10.         mov r0, #1
  11.         neg r0, r0
  12.         bx lr
  13. Normal:
  14.         ldr r3, =0x080001BC
  15.         push {r0-r2, r4-r7, lr}
  16.         ldr r2, [r3]
  17.         mov r3, #0x1C
  18.         ldr r5, =(0x08E14028|1)
  19.         bx r5
  20. .endfunc
  21. .pool

  22. .org 0x08E14020
  23.         ldr r3, =(FixMasterBall|1)
  24.         bx r3
  25. .pool

  26. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-16 21:55
本帖最后由 本站第一萌新 于 2020-5-16 21:56 编辑

适用于绿宝石802 3.0版本
添加梦特性系统。这是从我之前的工程里挖出来的代码了。现在看来有更好的实现方式(比如究极绿的实现方式就十分巧妙和高效),不过也懒得改了(没错,就是这么懒)。想研究的自己去分析吧
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func PrintAbilityHack
  8.         add r1, #0x78
  9.         ldr r2, =0x0203CF1C
  10.         ldr r2, [r2]
  11.         add r2, #0xC
  12.         bl CheckIsDreamAbility
  13.         cmp r2, #0
  14.         bne PrintAbilityHackBack
  15.         ldrb r1, [r1]
  16.         ldr r3, =(0x0806B694|1)
  17.         bl call_bx
  18. PrintAbilityHackBack:
  19.         mov r4, r0
  20.         ldr r3, =(0x081C2FEE|1)
  21.         bx r3
  22. .endfunc
  23. .pool
  24.        
  25. .func PrintDescriptionHack
  26.         ldrh r0, [r0]
  27.         add r1, #0x78
  28.         ldr r2, =0x0203CF1C
  29.         ldr r2, [r2]
  30.         add r2, #0xC
  31.         bl CheckIsDreamAbility
  32.         cmp r2, #0
  33.         bne PrintDescriptionHackBack
  34.         ldrb r1, [r1]
  35.         ldr r3, =(0x0806B694|1)
  36.         bl call_bx
  37. PrintDescriptionHackBack:       
  38.         ldr r3, =(0x081C3042|1)
  39.         bx r3
  40. .endfunc
  41. .pool
  42.        
  43. .func LoadAbilityHack1
  44.         bl LoadAbilityHack
  45.         ldr r3, =(0x0803AD6C|1)
  46.         bx r3
  47. .endfunc
  48. .pool
  49.        
  50. .func LoadAbilityHack2
  51.         bl LoadAbilityHack
  52.         ldrb r1, [r6]
  53.         ldr r3, =(0x0804C9A0|1)
  54.         bx r3
  55. .endfunc
  56. .pool
  57.        
  58. .func LoadAbilityHack
  59.         ldrb r1, [r1, #0x17]
  60.         lsr r1, r1, #7
  61.         push {r4-r5, lr}
  62.         mov r4, r0
  63.         mov r5, r1
  64.         ldr r0, =0x02024064
  65.         ldrb r0, [r0]
  66.         ldr r3, =(0x08E1833C|1)
  67.         bl call_bx
  68.         mov r2, r0
  69.         mov r0, r4
  70.         bl CheckIsDreamAbility
  71.         cmp r2, #0
  72.         bne LoadAbilityHackBack
  73.         mov r0, r4
  74.         mov r1, r5
  75.         ldr r3, =(0x0806B694|1)
  76.         bl call_bx
  77. LoadAbilityHackBack:       
  78.         pop {r4-r5, pc}
  79. .endfunc
  80. .pool
  81.        
  82. .func CheckIsDreamAbility
  83.         add r2, #0x13
  84.         ldrb r2, [r2]
  85.         mov r3, #8
  86.         and r2, r3
  87.         cmp r2, #0
  88.         beq CheckIsDreamAbilityBack
  89.         ldr r1, =(0x08F186E0 + 0x1A)
  90.         mov r2, #0x1C
  91.         mul r0, r2
  92.         add r0, r1
  93.         ldrb r0, [r0]
  94. CheckIsDreamAbilityBack:       
  95.         bx lr
  96. .endfunc
  97. .pool
  98.        
  99. .func RandomToHaveDreamAbility
  100.         mov r4, r0
  101.         ldr r3, =(0x08069270|1)
  102.         bl call_bx
  103.         ldr r3, =(0x0806F5CC|1)
  104.         bl call_bx
  105.         mov r1, #3
  106.         ldr r3, =(0x082E7BE0|1)
  107.         bl call_bx
  108.         cmp r0, #0
  109.         bne RandomToHaveDreamAbilityBack
  110.         add r4, #0x13
  111.         ldrb r0, [r4]
  112.         mov r1, #8
  113.         orr r0, r1
  114.         strb r0, [r4]
  115. RandomToHaveDreamAbilityBack:
  116.         add sp, #0x20
  117.         pop {r3-r5}
  118.         mov r8, r3
  119.         ldr r3, =(0x08067E82|1)
  120.         bx r3
  121. .endfunc
  122. .pool
  123.        
  124. .func call_bx
  125.         bx r3       
  126. .endfunc
  127. .pool

  128. .org 0x081C2FE6
  129.         ldr r3, =(PrintAbilityHack|1)
  130.         bx r3
  131. .pool

  132. .org 0x081C3038
  133.         ldr r3, =(PrintDescriptionHack|1)
  134.         bx r3
  135. .pool

  136. .org 0x0803AD64
  137.         ldr r3, =(LoadAbilityHack1|1)
  138.         bx r3
  139. .pool

  140. .org 0x0804C996
  141.         ldr r3, =(LoadAbilityHack2|1)
  142.         bx r3
  143. .pool

  144. .org 0x08067E78
  145.         ldr r3, =(RandomToHaveDreamAbility|1)
  146.         bx r3
  147. .pool

  148. .org 0x08F186E0        ;导入梦特性,貌似还会导入几只新精灵(当然是没图的,仅仅是数据而已)。不过影响不大。如果你实在不想让这一现象发生的话,请自行更改0x75B0
  149. .incbin "files/files.bin", 0x320, 0x75B0

  150. .close
复制代码
files这个文件是我当时为了把数据和源码绑在一起创建的一个文件,里面有新精灵图片,梦特数据等等各种乱七八糟的东西。

files.txt

75.17 KB, 下载次数: 158

重命名为.bin


作者: 本站第一萌新    时间: 2020-5-16 22:03
适用于绿宝石802 3.0版本
一样从之前的工程里挖出来的代码,添加睡眠条款和冰冻条款
这个几乎未经测试,如果发现bug请通知于我,我有时间可能会尝试修复
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func SleepClause
  8.         push {r0-r2, r4-r7, lr}
  9.         mov r4, r0
  10.         mov r5, r1
  11.         mov r1, #3
  12.         bl CheckClause
  13.         cmp r0, #0
  14.         bne CantGetSleep
  15.         mov r1, r5
  16.         mov r0, r4
  17.         mov r4, #0x58
  18.         mul r4, r0
  19.         ldr r3, =0x02024084
  20.         ldr r2, =(0x08E07BAC|1)
  21.         bx r2
  22. CantGetSleep:
  23.         mov r0, #3
  24.         pop {r1-r7, pc}
  25. .endfunc
  26. .pool
  27.        
  28. .func FreezeClause
  29.         push {r3-r7, lr}
  30.         mov r4, r0
  31.         mov r5, r1
  32.         mov r1, #4
  33.         bl CheckClause
  34.         cmp r0, #0
  35.         bne CantGetFreeze
  36.         mov r1, r5
  37.         mov r0, r4
  38.         mov r3, #0x58
  39.         mul r3, r0
  40.         ldr r4, =0x02024084
  41.         ldr r3, =(0x08E07E04|1)
  42.         bx r3
  43. CantGetFreeze:
  44.         mov r0, #3
  45.         pop {r3-r7, pc}
  46. .endfunc
  47. .pool
  48.        
  49. .func CheckClause
  50.         push {r4-r6,lr}
  51.         mov r5, #0
  52.         mov r6, r1
  53.         ldr r3, =(0x08E0736C|1)
  54.         bl call_bx
  55.         ldr r4, =0x020244EC
  56.         cmp r0, #1
  57.         bne CheckClauseLoop
  58.         ldr r4, =0x02024744
  59. CheckClauseLoop:
  60.         mov r0, r4
  61.         mov r1, #100
  62.         mul r1, r5
  63.         add r0, r1
  64.         ldr r3, =(0x081B205C|1)
  65.         bl call_bx
  66.         cmp r0, r6
  67.         beq CheckClauseLoopEnd
  68.         add r5, #1
  69.         cmp r5, #6
  70.         blt CheckClauseLoop
  71. CheckClauseLoopEnd:
  72.         mov r0, #0
  73.         cmp r5, #6
  74.         beq CantGetStatu
  75.         mov r0, #1
  76. CantGetStatu:       
  77.         pop {r4-r6, pc}
  78. .endfunc
  79. .pool
  80.        
  81. .func call_bx
  82.         bx r3
  83. .endfunc
  84. .pool

  85. .org 0x08E07BA4
  86.         ldr r3, =(SleepClause|1)
  87.         bx r3
  88. .pool

  89. .org 0x08E07DFC
  90.         ldr r3, =(FreezeClause|1)
  91.         bx r3
  92. .pool

  93. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-17 10:10
前阵子全随机模式比较火啊,于是我就随便搞了一个。我不清楚那个全随机到底是什么东西,因为我没玩过,不过我搞的这是真正的全随机,不管是草丛里遇到的,NPC给的,甚至是对战训练师的精灵也是随机的。
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. .org 0x08F80000
  7. .func GetRandomPoke
  8.         add r6, sp, #0x10
  9.         strb r2, [r6]
  10.         push {r0, r3}
  11.         ldr r3, =(0x0806F5CC|1)
  12.         bl call_bx
  13.         ldr r1, =0x42D ;改成你版本精灵数减一
  14.         ldr r3, =(0x082E7650|1)
  15.         bl call_bx
  16.         add r1, r0, #1
  17.         pop {r0, r3}
  18.         add r5, sp
  19.         strh r1, [r5]
  20.         ldr r5, =(0x08067BD8|1)
  21.         bx r5
  22. .endfunc
  23. .pool

  24. .func call_bx
  25.         bx r3
  26. .endfunc
  27. .pool
  28.        
  29. .org 0x08067BD0
  30.         ldr r6, =(GetRandomPoke|1)
  31.         bx r6
  32. .pool
  33.        
  34. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-17 10:44
不遇敌,一样与初始村蓝胖对话查看效果
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func NoEnemies
  10.         push {r4-r6, lr}
  11.         lsl r0, r0, #0x18
  12.         lsr r6, r0, #0x18
  13.         ldr r0, =0x4012
  14.         ldr r3, =(0x0809D790|1)
  15.         bl call_bx
  16.         cmp r0, #0
  17.         beq CheckNext
  18.         mov r0, #0
  19.         pop {r4-r6, pc}
  20. CheckNext:
  21.         ldr r0, =0x4021
  22.         ldr r3, =(0x080B58D4|1)
  23.         bx r3
  24. .endfunc
  25. .pool

  26. .func call_bx
  27.         bx r3
  28. .endfunc
  29. .pool

  30. Script_NoEnemies:
  31.     lock
  32.     faceplayer
  33.     checkflag 0x4012
  34.     if1 0x0, Script_Open
  35.     clearflag 0x4012
  36.     msgbox gText_Close, 0x6
  37.     release
  38.     end
  39. Script_Open:
  40.     setflag 0x4012
  41.     msgbox gText_Open, 0x6
  42.     release
  43.     end
  44.       
  45. gText_Close:
  46. .string "关闭不遇敌!"

  47. gText_Open:
  48. .string "打开不遇敌!"

  49. .org 0x080B58CC
  50.         ldr r3, =(NoEnemies|1)
  51.         bx r3
  52. .pool

  53. .org 0x089C0DFC
  54. .word Script_NoEnemies

  55. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-23 20:09
本帖最后由 本站第一萌新 于 2020-5-24 08:19 编辑

久违的更新
最近在贴吧看到个火箭队改版,打败训练师之后可以抢夺的一只精灵。觉得挺有意思就模仿了一个。不过他那个是用的多选框实现的,感觉太low了。我这个使用队伍界面实现。
注意:这个例程只能抢普通训练师的精灵,抢不了带脚本训练师的精灵(我只试验了新手档小遥)。如果想要实现抢这些训练师的精灵请自行去修改。不过我感觉作为一个反派只会欺凌弱小没啥问题(其实就是懒得搞
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func InitRobPartyMenu
  10.         push {r4, lr}
  11.         add sp, #-12
  12.         ldr r3, =(0x08076D8C|1)
  13.         bl call_bx
  14.         ldr r0, =0x020244EC
  15.         ldr r1, =0x02024744
  16.         mov r2, #150
  17.         lsl r2, #2
  18.         ldr r3, =(0x0806B408|1)
  19.         bl call_bx
  20.         mov r0, #0
  21.         str r0, [sp]
  22.         ldr r1, =(0x081B1370|1)
  23.         str r1, [sp, #4]
  24.         ldr r1, =(0x080861CC|1)
  25.         str r1, [sp, #8]
  26.         mov r1, #0
  27.         mov r2, #14
  28.         mov r3, #0
  29.         ldr r4, =(0x081B0038|1)
  30.         bl call_bx2
  31.         add sp, #12
  32.         pop {r4, pc}
  33. .endfunc
  34. .pool

  35. .func CaseRob
  36.         mov r0, #5
  37.         ldr r3, =(0x080A37A4|1)
  38.         bl call_bx
  39.         mov r0, r5
  40.         bl CreateWinAndFunc
  41.         pop {r4-r5, pc}
  42. .endfunc
  43. .pool

  44. .func CreateWinAndFunc
  45.         push {lr}
  46.         ldr r2, =0x03005E00
  47.         mov r1, #40
  48.         mul r1, r0
  49.         add r1, r2
  50.         mov r0, #0xFF
  51.         strh r0, [r1, #8]
  52.         ldr r0, =(0x081B3730|1)
  53.         str r0, [r1]
  54.         bl CreateWindow
  55.         pop {pc}
  56. .endfunc
  57. .pool

  58. .func CreateWindow
  59.         push {lr}
  60.         ldr r0, =0x0203CEC4
  61.         ldr r0, [r0]
  62.         add r0, #13
  63.         ldr r3, =(0x081B302C|1)
  64.         bl call_bx
  65.         ldr r0, =0x020244EC
  66.         ldr r1, =0x0203CEC8
  67.         ldrb r1, [r1, #9]
  68.         mov r2, #14
  69.         ldr r3, =(0x081B33B4|1)
  70.         bl call_bx
  71.         mov r0, #0
  72.         ldr r3, =(0x081B31B0|1)
  73.         bl call_bx
  74.         mov r0, #21
  75.         ldr r3, =(0x081B3054|1)
  76.         bl call_bx
  77.         pop {pc}
  78. .endfunc
  79. .pool

  80. .func CursorCb_Rob
  81.         push {r4-r5, lr}
  82.         mov r4, r0
  83.         ldr r3, =(0x08076DD4|1)
  84.         bl call_bx
  85.         ldr r0, =0x0203CEC8
  86.         ldrb r0, [r0, #9]
  87.         ldr r1, =0x02024744
  88.         mov r2, #100
  89.         mul r0, r2
  90.         add r0, r1
  91.         mov r5, r0
  92.         ldr r3, =(0x0806B414|1)
  93.         bl call_bx
  94.         mov r0, r5
  95.         mov r1, #2
  96.         ldr r2, =0x02021CC4
  97.         ldr r3, =(0x0806A518|1)
  98.         bl call_bx
  99.         mov r0, r4
  100.         ldr r3, =(0x081B12C0|1)
  101.         bl call_bx
  102.         pop {r4-r5, pc}
  103. .endfunc
  104. .pool

  105. .func CheckIsRob
  106.         mov r1, #21
  107.         str r1, [sp]
  108.         cmp r2, #14
  109.         beq IsRob
  110.         ldr r1, =(0x081B36FC|1)
  111.         b CheckBack
  112. IsRob:
  113.         ldr r1, =(CreateWinAndFunc|1)
  114. CheckBack:
  115.         str r1, [sp, #4]
  116.         ldr r1, [r3]
  117.         ldr r3, =(0x081B38BC|1)
  118.         bx r3
  119. .endfunc
  120. .pool

  121. .func CheckCanExit
  122.         ldr r0, =0x0203CEC8
  123.         ldrb r0, [r0, #11]
  124.         cmp r0, #8
  125.         beq GotoSub81B1602
  126.         cmp r0, #14
  127.         beq CantExit
  128.         ldr r3, =(0x081B15E0|1)
  129.         bx r3
  130. GotoSub81B1602:
  131.         ldr r3, =(0x081B1602|1)
  132.         bx r3
  133. CantExit:
  134.         ldr r3, =(0x081B15FB|1)
  135.         bx r3
  136. .endfunc
  137. .pool

  138. .func call_bx
  139.         bx r3
  140. .endfunc
  141. .pool

  142. .func call_bx2
  143.         bx r4
  144. .endfunc
  145. .pool

  146. .align 4
  147. NewSwitchTable:
  148. .incbin "test.gba", 0x1B144C, 0x2C
  149. .word (CaseRob|1)

  150. .align 4
  151. NewActionTable:
  152. .incbin "test.gba", 0x615D38, 0x38
  153. .word ActionRob

  154. NewListSizeTable:
  155. .incbin "test.gba", 0x615D70, 0x0E
  156. .byte 0x03

  157. .align 4
  158. NewCursorOptions:
  159. .incbin "test.gba", 0x615C08, 0x108
  160. .word gText_Rob
  161. .word (CursorCb_Rob|1)

  162. ActionRob:
  163. .byte 0, 33, 2

  164. Script_EndTrainerBattle:
  165.         callasm (InitRobPartyMenu|1)
  166.         waitstate
  167.         msgbox gText_RobPoke, 6
  168.         endtrainerbattle2
  169.         releaseall
  170.         end

  171. gText_Rob:
  172. .string 0xFC, 0x01, 0x04, "抢夺"

  173. gText_RobPoke:
  174. .string "[文本色_红]抢到了[buffer1]!"

  175. .org 0x08271461
  176. .word Script_EndTrainerBattle

  177. .org 0x0827146C
  178. .word Script_EndTrainerBattle

  179. .org 0x08271477
  180. .word Script_EndTrainerBattle

  181. .org 0x08271482
  182. .word Script_EndTrainerBattle

  183. .org 0x0827148D
  184. .word Script_EndTrainerBattle

  185. .org 0x081B1432
  186.         cmp r0, #11
  187.        
  188. .org 0x081B1448
  189. .word NewSwitchTable

  190. .org 0x081B340C
  191. .word NewListSizeTable
  192. .word NewActionTable

  193. .org 0x081B32F8
  194. .word NewCursorOptions

  195. .org 0x081B37C8
  196. .word NewCursorOptions

  197. .org 0x081B37F8
  198. .word NewCursorOptions

  199. .org 0x081B38B4
  200.         ldr r1, =(CheckIsRob|1)
  201.         bx r1
  202. .pool

  203. .org 0x081B15D8
  204.         ldr r3, =(CheckCanExit|1)
  205.         bx r3
  206. .pool       
  207.        
  208. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-24 13:54
本帖最后由 本站第一萌新 于 2020-5-24 14:09 编辑

看最近老外的不少改版都添加了明雷系统,我就也搞了一个。本质就是定点加行走图加取消草丛遇怪,不过我添加了浮动等级和随机携带道具(定义在精灵数据里的道具)。至于行走图自行添加。我不知道老外是不是这样的,不过想来估计也是大同小异吧
  1. .gba
  2. .thumb
  3. .loadtable "header/CharTable.txt"
  4. .include "header/ArmipsMacros.asm"
  5. .create "3.0.gba",0x8000000
  6. .close
  7. .open "test.gba","3.0.gba", 0x8000000

  8. .org 0x08F80000
  9. .func BrightRay
  10.         push {r4, lr}
  11.         ldr r3, =(0x0806F5CC|1)
  12.         bl call_bx
  13.         ldr r2, =0x020375E0
  14.         ldrb r1, [r2, #2]
  15.         ldrb r4, [r2, #3]
  16.         sub r1, r4
  17.         add r1, #1
  18.         ldr r3, =(0x082E7650|1)
  19.         bl call_bx
  20.         add r4, r0
  21.         ldr r3, =(0x0806F5CC|1)
  22.         bl call_bx
  23.         mov r1, #1
  24.         and r0, r1
  25.         lsl r0, #1
  26.         add r0, #12
  27.         ldr r1, =0x020375E0
  28.         ldrh r1, [r1]
  29.         ldr r2, =0x08F186E0 ;802 3.0版本不改。原版绿宝石将此处改成0x1BC下的地址
  30.         mov r3, #0x1C
  31.         mul r3, r1
  32.         add r3, r2
  33.         ldrh r2, [r0, r3]
  34.         mov r0, r1
  35.         mov r1, r4
  36.         ldr r3, =(0x080F93A0|1)
  37.         bl call_bx
  38.         ldr r3, =(0x080B08A8|1)
  39.         bl call_bx
  40.         ldr r3, =(0x08098F30|1)
  41.         bl call_bx
  42.         pop {r4, pc}
  43. .endfunc
  44. .pool

  45. .func call_bx
  46.         bx r3
  47. .endfunc
  48. .pool

  49. Script_BrightRay:
  50.         lock
  51.         faceplayer
  52.         msgbox gText_BrightRay, 6
  53.         callasm (BrightRay|1)
  54.         waitstate
  55.         hidesprite 0x800F
  56.         fadescreen 1
  57.         fadescreen 0
  58.         msgbox gText_PokeEscape, 6
  59.         release
  60.         return
  61.        
  62. gText_BrightRay:
  63. .string "...?"

  64. gText_PokeEscape:
  65. .string "精灵消失不见。"

  66. .org 0x080B58CC
  67.         mov r0, #0
  68.         bx lr

  69. .close
复制代码
示例脚本:
setvar 0x8004 1 //精灵种类,如此处我用的妙蛙种子
setvar 0x8005 0x305 //最低等级和最高等级的拼接,如此处我用的3-5级
call 0xF80080
end
作者: 本站第一萌新    时间: 2020-5-28 12:49
本帖最后由 本站第一萌新 于 2020-5-30 10:39 编辑

去除原版绿宝石精灵加密和合法性检测
  1. .gba
  2. .thumb
  3. .create "绿宝石.gba",0x8000000
  4. .close
  5. .open "BPEE.gba","绿宝石.gba", 0x8000000

  6. .org 0x0806A236
  7.         nop

  8. .org 0x0806A23C
  9.         nop

  10. .org 0x0806A25A
  11.         nop

  12. .org 0x0806A260
  13.         nop
  14.        
  15. .org 0x0806ADFE
  16.         b 0x0806AE1C

  17. .org 0x0806A6DA
  18.         b 0x0806A6F2

  19. .org 0x0806A27C
  20.         mov r0, #0
  21.         nop
  22.         nop

  23. .close
复制代码

作者: 本站第一萌新    时间: 2020-5-28 22:08
一个非常简单的例程,调高出闪率
  1. .gba
  2. .thumb
  3. .create "3.0.gba",0x8000000
  4. .close
  5. .open "test.gba","3.0.gba", 0x8000000

  6. CHANCE equ 0xFF ;修改这里以改变概率,原版为7,最大为0xFF

  7. .org 0x08172F46
  8.         cmp r0, CHANCE

  9. .org 0x08067C56
  10.         cmp r1, CHANCE

  11. .org 0x0806E76C
  12.         cmp r0, CHANCE

  13. .org 0x0806E7E2
  14.         cmp r0, CHANCE

  15. .org 0x0806EBE4
  16.         cmp r2, CHANCE

  17. .close
复制代码

作者: 皮卡大师    时间: 2020-5-30 14:59
是XSE用的吗
作者: 本站第一萌新    时间: 2020-5-30 22:29
皮卡大师 发表于 2020-5-30 14:59
是XSE用的吗

不是。。。
工具我不是标明了吗,armips
如果不懂建议先去学下thumb语法,本站置顶帖内就有基础教程,不过他那个应该用的hackmew的thumb工具而不是armips
作者: 皮卡大师    时间: 2020-6-1 07:58
本站第一萌新 发表于 2020-5-30 22:29
不是。。。
工具我不是标明了吗,armips
如果不懂建议先去学下thumb语法,本站置顶帖内就有基础教程, ...

好的,谢谢
作者: 本站第一萌新    时间: 2020-6-1 12:55
皮卡大师 发表于 2020-6-1 07:58
好的,谢谢

不谢,加油吧,很久没看到有研究高端技术(虽然这并不算高端而且已经过时了)的国人了
作者: salver06182    时间: 2020-6-18 17:19
您好,这边有个疑问。
我发现代码中很多地方都是先BL再BX,而不是直接使用BLX,这是为什么呢?
作者: 本站第一萌新    时间: 2020-6-24 17:56
salver06182 发表于 2020-6-18 17:19
您好,这边有个疑问。
我发现代码中很多地方都是先BL再BX,而不是直接使用BLX,这是为什么呢?

因为这是thumb模式
作者: 宴愧    时间: 2020-12-16 15:20
你管这叫萌新?我干脆自废脑子算了
作者: 744865306    时间: 2021-2-7 11:29
走一步恢复精灵10点HP那个有bug:会导致训练师卡片背面那些东西显示错误
作者: MASTERPOPY    时间: 2021-6-14 22:58
你咋这么牛呢
作者: 744865306    时间: 2021-7-9 16:40
本站第一萌新 发表于 2020-5-8 15:42
使得精灵可以使用对应属性的野外技能(一下想不起名字了,理解就好)如杰尼龟可以使用潜水,鱼跃龙门,冲浪 ...

这个源码并没有你说的那种bug,相反,它使精灵秘传技不显示且无效
作者: 744865306    时间: 2021-7-9 16:43
本站第一萌新 发表于 2020-5-10 09:12
修改pokemart脚本对应的函数,使得商店地址为0时随机生成商品(不会出现重要道具)
本例没有处理重复的问 ...

这个代码有着很多的bug,比如说你没有考虑到装饰品的问题,此外,写入代码后,商店地址非0则无商品,原因或许是因为你开局就把地址弄成了一处空RAM?此外,还有着空位道具,以及你所说的重复问题
作者: 744865306    时间: 2021-7-9 16:46
本站第一萌新 发表于 2020-5-17 10:10
前阵子全随机模式比较火啊,于是我就随便搞了一个。我不清楚那个全随机到底是什么东西,因为我没玩过,不过 ...

我将你的这一代码进行了改进,如下:

.gba
.thumb
.create "3.0.gba",0x8000000
.close
.open "test.gba","3.0.gba", 0x8000000

.org 0x08F80000
.func GetRandomPoke
        add r6,sp,#0x10
        strb r2,[r6]
        push {r0,r3}
randagain:
        ldr r3,=(0x0806F5CC|1)
        bl call_bx
        ldr r1,=0x42C
        ldr r3,=(0x082E7650|1)
        bl call_bx
        add r1,r0,#0x1
        mov r2,#0xFC
        cmp r1,r2
        bge cmpagain
end:
        pop {r0,r3}
        add r5,sp
        strh r1,[r5]
        ldr r5,=(0x08067BD8|1)
        bx r5
.endfunc
.pool

.func cmpagain
        mov r2,#0x17
        mov r3,#0xC
        mul r2,r3
        cmp r1,r2
        ble randagain
        b end
.endfunc
.pool

.func call_bx
        bx r3
.endfunc
.pool

.org 0x08067BD0
        ldr r6,=(GetRandomPoke|1)
        bx r6
.pool

.close
作者: 本站第一萌新    时间: 2021-7-19 22:12
744865306 发表于 2021-7-9 16:40
这个源码并没有你说的那种bug,相反,它使精灵秘传技不显示且无效

我以前测试的时候没有任何问题啊。这个可能是因为我以绿宝石802为蓝本吧。我记得802好像重定向了某些地址,和绿宝石有所不同
作者: 本站第一萌新    时间: 2021-7-19 22:15
744865306 发表于 2021-7-9 16:43
这个代码有着很多的bug,比如说你没有考虑到装饰品的问题,此外,写入代码后,商店地址非0则无商品,原因 ...

这个确实 包括下面的随机对战 因为我其实再很久之前就开始主要使用C语言开始改版了,我已经用C语言写了相对更加完善的商店系统,随机对战系统以及支持存储常用字的中文输入系统,懒得用ASM进行这么复杂的操作了。
作者: 本站第一萌新    时间: 2021-7-19 22:21
744865306 发表于 2021-7-9 16:46
我将你的这一代码进行了改进,如下:

.gba

很厉害。但是我那个代码的重点实现在自定义的精灵库里抽取特定配置的精灵
作者: 本站第一萌新    时间: 2021-7-19 22:26
744865306 发表于 2021-7-9 16:46
我将你的这一代码进行了改进,如下:

.gba

退坑好几个月了,很多东西都忘了,如果有讲错的敬请见谅
作者: 本站第一萌新    时间: 2021-7-19 22:31
744865306 发表于 2021-2-7 11:29
走一步恢复精灵10点HP那个有bug:会导致训练师卡片背面那些东西显示错误

这个不知道是哪来的bug了。插入的那个函数是我唯一找到的走一步运行一次的函数了。(所以说还是用反编译工程方便,可以避免这些奇奇怪怪的bug。)
作者: qq644348224    时间: 2021-7-23 00:53
学习了 感谢分享 千万别删帖 对改版作者帮助蛮大的
作者: 744865306    时间: 2021-7-23 07:56
本站第一萌新 发表于 2021-7-19 22:21
很厉害。但是我那个代码的重点实现在自定义的精灵库里抽取特定配置的精灵

唔……是的,不过空位精灵确实去除了更好,话说我感觉我之前发的那个还可以改进,或许可以靠lsl直接1个寄存器搞出那边mul出的东西
作者: 744865306    时间: 2021-7-23 07:59
本站第一萌新 发表于 2021-7-19 22:15
这个确实 包括下面的随机对战 因为我其实再很久之前就开始主要使用C语言开始改版了,我已经用C语言写了相 ...

这样嘛……商店和中文输入能给我看下嘛?我之前尝试用ASM改进你的这两个源码,但都以失败告终
作者: 本站第一萌新    时间: 2021-7-23 09:04
qq644348224 发表于 2021-7-23 00:53
学习了 感谢分享 千万别删帖 对改版作者帮助蛮大的

不会删的
作者: 本站第一萌新    时间: 2021-7-23 09:31
本帖最后由 本站第一萌新 于 2021-7-23 10:02 编辑
744865306 发表于 2021-7-23 07:59
这样嘛……商店和中文输入能给我看下嘛?我之前尝试用ASM改进你的这两个源码,但都以失败告终


商店的源码当时是写着玩的,我找不到工程了2333 不过其实我也没有考虑装饰品的事情,只是移除了空道具和重复物品。可以给你几个思路解决这两个问题:
移除空道具有两种思路:第一种是通过检测id,第二种是通过对比道具的首个字符是否为0xC8(即?)。我个人推荐第二种方法。因为如果使用第一种方法,若你日后将空道具替换成可用道具,就必须重新修改程序,显然十分麻烦,而第二种方法就能很好的避免这个问题。
移除重复物品的话,你只要在每次添加新物品的时候都对比一下之前有没有出现过这个物品,如果有就重新生成随机物品就行了。
中文输入是帮一个坛友写的,和其他的一些源码混杂在一个工程。而且我当时由于忙于备考所以采用了效率极低的方法避免杂字,这个还是有待改进。你想要的话可以把无关代码移除然后发给你,不过不一定能保证编译通过(毕竟一年没碰改版了)
中文输入下载链接已放入对应楼层 至于为什么我不用github,因为密码忘了
作者: 744865306    时间: 2021-7-28 14:13
我可以将"恐惧"特性的发到口袋改版资源吧嘛?会注明是你的源码的
作者: 本站第一萌新    时间: 2021-7-28 14:37
744865306 发表于 2021-7-28 14:13
我可以将"恐惧"特性的发到口袋改版资源吧嘛?会注明是你的源码的


好(十个字数限制)
作者: 744865306    时间: 2021-8-2 15:46
怎么用ASM判定flag
作者: 本站第一萌新    时间: 2021-8-2 18:30
744865306 发表于 2021-8-2 15:46
怎么用ASM判定flag

0809d790 r0 =flagid
作者: 744865306    时间: 2021-8-2 20:08
本站第一萌新 发表于 2021-8-2 18:30
0809d790 r0 =flagid

好的,谢谢大佬
作者: 744865306    时间: 2021-8-3 13:16
本站第一萌新 发表于 2021-8-2 18:30
0809d790 r0 =flagid

怎么用ASM输出一段话呢?
作者: 本站第一萌新    时间: 2021-8-3 14:26
744865306 发表于 2021-8-3 13:16
怎么用ASM输出一段话呢?

较复杂 建议用脚本
作者: 744865306    时间: 2021-8-3 14:38
本站第一萌新 发表于 2021-8-3 14:26
较复杂 建议用脚本

啊这,大佬就告诉我吧
作者: 本站第一萌新    时间: 2021-8-3 16:21
744865306 发表于 2021-8-3 14:38
啊这,大佬就告诉我吧

你非要用的话建议你去看看位于0809abd4的函数ScrCmd_message,这个是脚本里说话的函数
但是事实上直接用脚本能起到同样的效果而且简单太多了,08098ef8这个函数接受脚本地址作为参数,可以用来设置脚本
作者: 林书竹    时间: 2021-12-24 12:57
大佬,工具在哪下载,置顶的工具库没找到
作者: EMMET    时间: 2022-7-2 19:27
谢谢,刚开始学习ASM,有实例可以参考学习真是太好了




欢迎光临 Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论 (http://162.218.49.243/) Powered by Discuz! X3