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

 找回密码
 加入口袋中心
搜索

ASM杂项集合【802/绿宝石】

[复制链接]

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-8 12:05:36 | 显示全部楼层
仅适用于绿宝石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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-8 15:42:25 | 显示全部楼层
本帖最后由 本站第一萌新 于 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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-9 15:53:36 | 显示全部楼层
本帖最后由 本站第一萌新 于 2021-7-23 10:00 编辑

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

ChineseInput.txt

43.36 KB, 下载次数: 305

中文输入

业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-10 09:12:14 | 显示全部楼层
修改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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-13 13:09:02 | 显示全部楼层
简易个体努力查看器
之前做过的东西。这个肯定是不如版主早期那个作品美观的,不过还是发出来做个记录
一样的和初始村蓝胖对话查看效果,如果想自己更改示例脚本也已经给出了
  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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

226

帖子

3342

现金

1

勋章券

摆脱困境的长叹

Rank: 8Rank: 8Rank: 8Rank: 8

积分
693

时光印记Lv.1水中王者勋章Lv1

发表于 2020-5-15 11:30:04 | 显示全部楼层
666
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-15 22:45:43 来自手机 | 显示全部楼层
整理控 发表于 2020-5-15 11:30
666

谬赞了,这些都是入门级的东西。主要是考虑到论坛和编程有关的东西要不是过于基础要不是过于复杂才发这个帖子的。(虽然说现在有了老外的工程用ASM确实没多大意义了:()
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-16 09:04:54 | 显示全部楼层
扩充等级上限到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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-16 21:39:13 | 显示全部楼层
适用于绿宝石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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-16 21:55:19 | 显示全部楼层
本帖最后由 本站第一萌新 于 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, 下载次数: 151

重命名为.bin

业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-16 22:03:08 | 显示全部楼层
适用于绿宝石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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-17 10:10:46 | 显示全部楼层
前阵子全随机模式比较火啊,于是我就随便搞了一个。我不清楚那个全随机到底是什么东西,因为我没玩过,不过我搞的这是真正的全随机,不管是草丛里遇到的,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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-17 10:44:52 | 显示全部楼层
不遇敌,一样与初始村蓝胖对话查看效果
  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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-23 20:09:11 | 显示全部楼层
本帖最后由 本站第一萌新 于 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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

118

帖子

1221

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-24 13:54:47 | 显示全部楼层
本帖最后由 本站第一萌新 于 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
业余改版爱好者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2023-1-29 13:51 , Processed in 0.126261 second(s), 37 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表