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

 找回密码
 加入口袋中心
搜索
查看: 20403|回复: 78

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

[复制链接]

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

发表于 2020-5-2 21:06:30 | 显示全部楼层 |阅读模式
本帖最后由 本站第一萌新 于 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, 下载次数: 446

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

CharTable.txt

68.53 KB, 下载次数: 522

字符表。

ArmipsBSMacros.txt

23.7 KB, 下载次数: 427

战斗脚本的宏

评分

参与人数 1积分 +50 现金 +100 收起 理由
jiangzhengwenjz + 50 + 100

查看全部评分

业余改版爱好者
回复

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

3370

回帖

513

现金

485

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
22150
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

发表于 2020-5-2 22:34:57 | 显示全部楼层
本站第一萌新 发表于 2020-5-2 21:18
前面发的可能不适于纯新手。今天最后发个入门级别的。明天再更新吧。不然貌似违反版规了。
使得指定位置的 ...

It's OK.
每条回复有独立内容,你想连发多少都可以
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-3 08:24:11 | 显示全部楼层
jiangzhengwenjz 发表于 2020-5-2 22:34
It's OK.
每条回复有独立内容,你想连发多少都可以

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

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-3 08:28:10 | 显示全部楼层
走一步恢复全队精灵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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-3 08:32:49 | 显示全部楼层
根据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实现穿墙。
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-3 09:14:18 | 显示全部楼层
一个对于积极禁金的人来说可能较有用的代码
在确认支付时会检查现在在购买的商品是否在商店列表中,如果不是则提示请不要作弊
注意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.        
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-3 14:54:52 | 显示全部楼层
一个简单的源码,删除首位精灵,将其个体值复制给后面一只精灵,并将后面所有精灵向前移动一位
  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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

 楼主| 发表于 2020-5-3 14:57:50 | 显示全部楼层
一个简单的源码,实现剑盾动漫中火箭队的扭蛋机 消耗一只喵喵 随机获得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
复制代码
业余改版爱好者
回复 支持 反对

使用道具 举报

115

回帖

1440

现金

0

勋章券

与恶势力的交锋

Rank: 7Rank: 7Rank: 7

积分
457

时光印记Lv.1

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

使用道具 举报

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

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-12-4 01:23 , Processed in 0.147946 second(s), 48 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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