diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-05-21 09:08:28 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-05-21 09:08:28 -0400 |
commit | 80231d12b10043197be4d01222346fe7f0b72900 (patch) | |
tree | a51ed90a28d1489ea0d1b8f982fda185c6012839 | |
parent | 150597d495383f09a4ee733d24b3e770c57494eb (diff) |
ListMenuGetSetTemplateField
-rw-r--r-- | arm9/asm/unk_020010A8.s | 288 | ||||
-rw-r--r-- | arm9/asm/unk_020625EC.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_020653EC.s | 6 | ||||
-rw-r--r-- | arm9/global.inc | 4 | ||||
-rw-r--r-- | arm9/modules/06/asm/module_06.s | 14 | ||||
-rw-r--r-- | arm9/modules/18/asm/module_18.s | 50 | ||||
-rw-r--r-- | arm9/modules/56/asm/module_56.s | 8 | ||||
-rw-r--r-- | arm9/modules/65/asm/module_65.s | 6 | ||||
-rw-r--r-- | arm9/modules/75/asm/module_75.s | 4 | ||||
-rw-r--r-- | arm9/modules/76/asm/module_76.s | 2 | ||||
-rw-r--r-- | arm9/src/list_menu.c | 115 | ||||
-rw-r--r-- | include/list_menu.h | 12 |
12 files changed, 173 insertions, 340 deletions
diff --git a/arm9/asm/unk_020010A8.s b/arm9/asm/unk_020010A8.s index 14603d3e..534ca98b 100644 --- a/arm9/asm/unk_020010A8.s +++ b/arm9/asm/unk_020010A8.s @@ -5,294 +5,6 @@ .text - thumb_func_start FUN_02001470 -FUN_02001470: ; 0x02001470 - push {r4, lr} - add r4, r0, #0x0 - cmp r1, #0x13 - bhi _02001532 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02001484: ; jump table (using 16-bit offset) - .short _020014AC - _02001484 - 2; case 0 - .short _020014B0 - _02001484 - 2; case 1 - .short _020014B4 - _02001484 - 2; case 2 - .short _020014B8 - _02001484 - 2; case 3 - .short _02001532 - _02001484 - 2; case 4 - .short _020014BC - _02001484 - 2; case 5 - .short _020014C0 - _02001484 - 2; case 6 - .short _020014C4 - _02001484 - 2; case 7 - .short _020014C8 - _02001484 - 2; case 8 - .short _020014D0 - _02001484 - 2; case 9 - .short _020014EA - _02001484 - 2; case 10 - .short _020014F2 - _02001484 - 2; case 11 - .short _020014FA - _02001484 - 2; case 12 - .short _02001502 - _02001484 - 2; case 13 - .short _0200150A - _02001484 - 2; case 14 - .short _02001512 - _02001484 - 2; case 15 - .short _0200151A - _02001484 - 2; case 16 - .short _02001522 - _02001484 - 2; case 17 - .short _0200152A - _02001484 - 2; case 18 - .short _0200152E - _02001484 - 2; case 19 -_020014AC: - ldr r0, [r4, #0x4] - pop {r4, pc} -_020014B0: - ldr r0, [r4, #0x8] - pop {r4, pc} -_020014B4: - ldrh r0, [r4, #0x10] - pop {r4, pc} -_020014B8: - ldrh r0, [r4, #0x12] - pop {r4, pc} -_020014BC: - ldrb r0, [r4, #0x14] - pop {r4, pc} -_020014C0: - ldrb r0, [r4, #0x15] - pop {r4, pc} -_020014C4: - ldrb r0, [r4, #0x16] - pop {r4, pc} -_020014C8: - ldrb r0, [r4, #0x17] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1c - pop {r4, pc} -_020014D0: - ldrh r0, [r4, #0x1a] - mov r1, #0x1 - lsl r0, r0, #0x11 - lsr r0, r0, #0x1a - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_02002E4C - ldrh r1, [r4, #0x1a] - lsl r1, r1, #0x19 - lsr r1, r1, #0x1c - add r0, r1, r0 - pop {r4, pc} -_020014EA: - ldrb r0, [r4, #0x17] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1c - pop {r4, pc} -_020014F2: - ldrb r0, [r4, #0x18] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1c - pop {r4, pc} -_020014FA: - ldrb r0, [r4, #0x18] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1c - pop {r4, pc} -_02001502: - ldrh r0, [r4, #0x1a] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1d - pop {r4, pc} -_0200150A: - ldrh r0, [r4, #0x1a] - lsl r0, r0, #0x19 - lsr r0, r0, #0x1c - pop {r4, pc} -_02001512: - ldrh r0, [r4, #0x1a] - lsl r0, r0, #0x17 - lsr r0, r0, #0x1e - pop {r4, pc} -_0200151A: - ldrh r0, [r4, #0x1a] - lsl r0, r0, #0x11 - lsr r0, r0, #0x1a - pop {r4, pc} -_02001522: - ldrh r0, [r4, #0x1a] - lsl r0, r0, #0x10 - lsr r0, r0, #0x1f - pop {r4, pc} -_0200152A: - ldr r0, [r4, #0xc] - pop {r4, pc} -_0200152E: - ldr r0, [r4, #0x1c] - pop {r4, pc} -_02001532: - mov r0, #0x0 - mvn r0, r0 - pop {r4, pc} - - thumb_func_start FUN_02001538 -FUN_02001538: ; 0x02001538 - cmp r1, #0x13 - bls _0200153E - b _02001648 -_0200153E: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_0200154A: ; jump table (using 16-bit offset) - .short _02001572 - _0200154A - 2; case 0 - .short _02001576 - _0200154A - 2; case 1 - .short _0200157A - _0200154A - 2; case 2 - .short _0200157E - _0200154A - 2; case 3 - .short _02001648 - _0200154A - 2; case 4 - .short _02001582 - _0200154A - 2; case 5 - .short _02001586 - _0200154A - 2; case 6 - .short _0200158A - _0200154A - 2; case 7 - .short _0200158E - _0200154A - 2; case 8 - .short _02001648 - _0200154A - 2; case 9 - .short _020015A2 - _0200154A - 2; case 10 - .short _020015B6 - _0200154A - 2; case 11 - .short _020015CA - _0200154A - 2; case 12 - .short _020015DE - _0200154A - 2; case 13 - .short _020015F2 - _0200154A - 2; case 14 - .short _02001606 - _0200154A - 2; case 15 - .short _0200161A - _0200154A - 2; case 16 - .short _0200162E - _0200154A - 2; case 17 - .short _02001642 - _0200154A - 2; case 18 - .short _02001646 - _0200154A - 2; case 19 -_02001572: - str r2, [r0, #0x4] - bx lr -_02001576: - str r2, [r0, #0x8] - bx lr -_0200157A: - strh r2, [r0, #0x10] - bx lr -_0200157E: - strh r2, [r0, #0x12] - bx lr -_02001582: - strb r2, [r0, #0x14] - bx lr -_02001586: - strb r2, [r0, #0x15] - bx lr -_0200158A: - strb r2, [r0, #0x16] - bx lr -_0200158E: - ldrb r3, [r0, #0x17] - mov r1, #0xf - bic r3, r1 - lsl r1, r2, #0x18 - lsr r2, r1, #0x18 - mov r1, #0xf - and r1, r2 - orr r1, r3 - strb r1, [r0, #0x17] - bx lr -_020015A2: - ldrb r3, [r0, #0x17] - mov r1, #0xf0 - bic r3, r1 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1c - lsr r1, r1, #0x18 - orr r1, r3 - strb r1, [r0, #0x17] - bx lr -_020015B6: - ldrb r3, [r0, #0x18] - mov r1, #0xf - bic r3, r1 - lsl r1, r2, #0x18 - lsr r2, r1, #0x18 - mov r1, #0xf - and r1, r2 - orr r1, r3 - strb r1, [r0, #0x18] - bx lr -_020015CA: - ldrb r3, [r0, #0x18] - mov r1, #0xf0 - bic r3, r1 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1c - lsr r1, r1, #0x18 - orr r1, r3 - strb r1, [r0, #0x18] - bx lr -_020015DE: - ldrh r3, [r0, #0x1a] - mov r1, #0x7 - bic r3, r1 - lsl r1, r2, #0x18 - lsr r2, r1, #0x18 - mov r1, #0x7 - and r1, r2 - orr r1, r3 - strh r1, [r0, #0x1a] - bx lr -_020015F2: - ldrh r3, [r0, #0x1a] - mov r1, #0x78 - bic r3, r1 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1c - lsr r1, r1, #0x19 - orr r1, r3 - strh r1, [r0, #0x1a] - bx lr -_02001606: - ldrh r3, [r0, #0x1a] - ldr r1, _0200164C ; =0xFFFFFE7F - and r3, r1 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1e - lsr r1, r1, #0x17 - orr r1, r3 - strh r1, [r0, #0x1a] - bx lr -_0200161A: - ldrh r3, [r0, #0x1a] - ldr r1, _02001650 ; =0xFFFF81FF - and r3, r1 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1a - lsr r1, r1, #0x11 - orr r1, r3 - strh r1, [r0, #0x1a] - bx lr -_0200162E: - ldrh r3, [r0, #0x1a] - ldr r1, _02001654 ; =0xFFFF7FFF - and r3, r1 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1f - lsr r1, r1, #0x10 - orr r1, r3 - strh r1, [r0, #0x1a] - bx lr -_02001642: - str r2, [r0, #0xc] - bx lr -_02001646: - str r2, [r0, #0x1c] -_02001648: - bx lr - nop -_0200164C: .word 0xFFFFFE7F -_02001650: .word 0xFFFF81FF -_02001654: .word 0xFFFF7FFF - thumb_func_start FUN_02001658 FUN_02001658: ; 0x02001658 str r1, [r0, #0x0] diff --git a/arm9/asm/unk_020625EC.s b/arm9/asm/unk_020625EC.s index bf248464..5147f099 100644 --- a/arm9/asm/unk_020625EC.s +++ b/arm9/asm/unk_020625EC.s @@ -1546,7 +1546,7 @@ FUN_020631C8: ; 0x020631C8 push {r3-r5, lr} mov r1, #0x13 add r5, r0, #0x0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0x0 add r4, r0, #0x0 add r0, r5, #0x0 @@ -1555,7 +1555,7 @@ FUN_020631C8: ; 0x020631C8 bl FUN_02001448 add r0, r5, #0x0 mov r1, #0x2 - bl FUN_02001470 + bl ListMenuGetTemplateField add r2, sp, #0x0 ldrh r3, [r2, #0x0] ldrh r2, [r2, #0x2] diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s index 50cb5318..5e09d0a6 100644 --- a/arm9/asm/unk_020653EC.s +++ b/arm9/asm/unk_020653EC.s @@ -1169,7 +1169,7 @@ FUN_02065CFC: ; 0x02065CFC add r4, r1, #0x0 mov r1, #0x13 add r5, r0, #0x0 - bl FUN_02001470 + bl ListMenuGetTemplateField ldr r1, _02065D48 ; =0x0000FFFF cmp r4, r1 bne _02065D1C @@ -1210,7 +1210,7 @@ FUN_02065D4C: ; 0x02065D4C mov r1, #0x13 add r4, r0, #0x0 add r6, r2, #0x0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0x0 add r5, r0, #0x0 add r0, r4, #0x0 @@ -1219,7 +1219,7 @@ FUN_02065D4C: ; 0x02065D4C bl FUN_02001448 add r0, r4, #0x0 mov r1, #0x2 - bl FUN_02001470 + bl ListMenuGetTemplateField lsl r0, r0, #0x10 lsr r4, r0, #0x10 cmp r6, #0x0 diff --git a/arm9/global.inc b/arm9/global.inc index 59d2d3da..dddc91cb 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -199,8 +199,8 @@ .extern FUN_02001448 .extern FUN_0200145C .extern FUN_02001464 -.extern FUN_02001470 -.extern FUN_02001538 +.extern ListMenuGetTemplateField +.extern ListMenuSetTemplateField .extern FUN_02001658 .extern FUN_02001B80 .extern FUN_02001B8C diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 9336c826..fbe98b2b 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -9236,7 +9236,7 @@ MOD06_0223DCF0: ; 0x0223DCF0 mov r1, #0x13 str r0, [sp, #0x10] add r6, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 cmp r6, #1 beq _0223DD0C @@ -9348,7 +9348,7 @@ _0223DDE4: _0223DDF0: ldr r0, [sp, #0x10] mov r1, #2 - bl FUN_02001470 + bl ListMenuGetTemplateField cmp r0, #7 bls _0223DE16 add r1, sp, #0x14 @@ -9383,7 +9383,7 @@ MOD06_0223DE34: ; 0x0223DE34 add r4, r1, #0 mov r1, #0x13 add r7, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r1, #1 mvn r1, r1 add r5, r0, #0 @@ -11619,7 +11619,7 @@ MOD06_0223F0C8: ; 0x0223F0C8 mov r1, #3 add r5, r0, #0 mov r4, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField cmp r0, #0 bls _0223F0F6 add r6, r4, #0 @@ -11633,7 +11633,7 @@ _0223F0DC: add r0, r5, #0 add r1, r7, #0 add r4, r4, #1 - bl FUN_02001470 + bl ListMenuGetTemplateField cmp r4, r0 blo _0223F0DC _0223F0F6: @@ -12972,7 +12972,7 @@ _0223FBDA: ldr r0, [r0] mov r5, #0 ldr r0, [r0, #0x5c] - bl FUN_02001470 + bl ListMenuGetTemplateField cmp r0, #0 bls _0223FC32 ldr r4, _0223FCF0 ; =0x02252420 @@ -12989,7 +12989,7 @@ _0223FC14: add r1, r7, #0 ldr r0, [r0, #0x5c] add r5, r5, #1 - bl FUN_02001470 + bl ListMenuGetTemplateField cmp r5, r0 blo _0223FC14 _0223FC32: diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 99b0d4ca..96ff03e2 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -22099,7 +22099,7 @@ MOD18_022440C4: ; 0x022440C4 lsr r6, r0, #0x10 ldr r0, [r4, #0xc] mov r1, #3 - bl FUN_02001470 + bl ListMenuGetTemplateField lsl r0, r0, #0x10 lsr r1, r0, #0x10 ldrh r0, [r4, #0x18] @@ -22118,23 +22118,23 @@ _022440F0: bhi _0224413A ldr r0, [r4, #0xc] mov r1, #7 - bl FUN_02001470 + bl ListMenuGetTemplateField str r0, [sp] ldr r0, [r4, #0xc] mov r1, #9 - bl FUN_02001470 + bl ListMenuGetTemplateField lsl r0, r0, #0x18 lsr r7, r0, #0x18 ldr r0, [r4, #0xc] mov r1, #8 - bl FUN_02001470 + bl ListMenuGetTemplateField str r0, [sp, #4] sub r0, r6, r5 add r5, r7, #0 mul r5, r0 ldr r0, [r4, #0xc] mov r1, #0x12 - bl FUN_02001470 + bl ListMenuGetTemplateField ldr r3, [sp, #4] add r1, r0, #0 ldr r0, [r4, #0x10] @@ -22159,7 +22159,7 @@ MOD18_02244140: ; 0x02244140 beq _0224418A ldr r0, [sp, #4] mov r1, #2 - bl FUN_02001470 + bl ListMenuGetTemplateField add r7, r0, #0 add r1, sp, #0xc ldr r0, [sp, #4] @@ -33623,7 +33623,7 @@ MOD18_02249AF4: ; 0x02249AF4 push {r4, lr} add r4, r1, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r2, #0x81 add r1, r0, #0 lsl r2, r2, #2 @@ -33862,7 +33862,7 @@ MOD18_02249CC8: ; 0x02249CC8 ldr r0, [r5, #0x4c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0 add r2, r0, #0 ldrh r1, [r1, #2] @@ -34077,7 +34077,7 @@ MOD18_02249EBC: ; 0x02249EBC push {r4, lr} add r4, r1, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r2, #0x81 add r1, r0, #0 lsl r2, r2, #2 @@ -34352,7 +34352,7 @@ MOD18_0224A0EC: ; 0x0224A0EC ldr r0, [r5, #0x4c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0 add r2, r0, #0 ldrh r1, [r1, #2] @@ -34542,7 +34542,7 @@ MOD18_0224A2B4: ; 0x0224A2B4 push {r4, lr} add r4, r1, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r2, #0x81 add r1, r0, #0 lsl r2, r2, #2 @@ -34776,7 +34776,7 @@ MOD18_0224A47C: ; 0x0224A47C ldr r0, [r5, #0x4c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0 add r2, r0, #0 ldrh r1, [r1, #2] @@ -35399,7 +35399,7 @@ MOD18_0224A9B4: ; 0x0224A9B4 push {r4, lr} add r4, r1, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r2, #0x81 add r1, r0, #0 lsl r2, r2, #2 @@ -35431,7 +35431,7 @@ MOD18_0224A9EC: ; 0x0224A9EC add r4, r1, #0 mov r1, #0x13 add r5, r0, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField ldr r0, [r0, #0xc] bl ScriptEnvironment_GetSav2Ptr bl FUN_02026CC4 @@ -35715,7 +35715,7 @@ MOD18_0224AC24: ; 0x0224AC24 ldr r0, [r5, #0x4c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0 add r2, r0, #0 ldrh r1, [r1, #2] @@ -36444,7 +36444,7 @@ MOD18_0224B204: ; 0x0224B204 push {r4, lr} add r4, r1, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r0, #1 mvn r0, r0 cmp r4, r0 @@ -36464,7 +36464,7 @@ MOD18_0224B228: ; 0x0224B228 push {r4, lr} add r4, r1, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField mov r0, #1 mvn r0, r0 cmp r4, r0 @@ -36973,7 +36973,7 @@ MOD18_0224B614: ; 0x0224B614 ldr r0, [r5, #0x4c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0 add r2, r0, #0 ldrh r1, [r1, #2] @@ -37066,7 +37066,7 @@ MOD18_0224B6E0: ; 0x0224B6E0 ldr r0, [r5, #0x4c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r1, sp, #0 add r2, r0, #0 ldrh r1, [r1, #2] @@ -38632,7 +38632,7 @@ MOD18_0224C418: ; 0x0224C418 mov r1, #0x13 add r7, r0, #0 add r6, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 cmp r6, #0 beq _0224C434 @@ -38746,7 +38746,7 @@ MOD18_0224C510: ; 0x0224C510 mov r1, #0x13 str r0, [sp, #0xc] str r2, [sp, #0x10] - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 ldr r0, [r4, #0xc] bl ScriptEnvironment_GetSav2Ptr @@ -42643,12 +42643,12 @@ _0224E384: ldr r0, [r5, #0x2c] mov r1, #2 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r7, r0, #0 ldr r0, [r5, #0x2c] mov r1, #3 ldr r0, [r0, #0xc] - bl FUN_02001470 + bl ListMenuGetTemplateField add r3, r0, #0 add r1, sp, #0 lsl r2, r7, #0x10 @@ -42692,11 +42692,11 @@ MOD18_0224E3F0: ; 0x0224E3F0 add r4, r1, #0 add r5, r0, #0 mov r1, #0x13 - bl FUN_02001470 + bl ListMenuGetTemplateField add r6, r0, #0 add r0, r5, #0 mov r1, #2 - bl FUN_02001470 + bl ListMenuGetTemplateField lsr r1, r4, #1 sub r0, r0, #1 cmp r1, r0 diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index ba3275fa..2d066c8d 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -3021,7 +3021,7 @@ MOD56_02213624: ; 0x02213624 add r5, r1, #0 mov r1, #0x13 add r7, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 ldr r6, _02213750 ; =0x00010200 cmp r5, #0x20 @@ -3814,7 +3814,7 @@ _02213C24: ldr r0, [r0] mov r1, #2 add r2, r4, #2 - bl FUN_02001538 + bl ListMenuSetTemplateField cmp r4, #3 ble _02213C50 add r0, r5, #0 @@ -3822,7 +3822,7 @@ _02213C24: ldr r0, [r0] mov r1, #3 mov r2, #5 - bl FUN_02001538 + bl ListMenuSetTemplateField b _02213C5E _02213C50: add r0, r5, #0 @@ -3830,7 +3830,7 @@ _02213C50: ldr r0, [r0] mov r1, #3 add r2, r4, #2 - bl FUN_02001538 + bl ListMenuSetTemplateField _02213C5E: add r0, r5, #0 bl MOD56_02213938 diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s index c8d4ac1a..44e0d1a2 100644 --- a/arm9/modules/65/asm/module_65.s +++ b/arm9/modules/65/asm/module_65.s @@ -2057,11 +2057,11 @@ _021D84E0: .word 0x00000001 thumb_func_start MOD65_021D84E4 MOD65_021D84E4: ; 0x021D84E4 - ldr r3, _021D84EC ; =FUN_02001470 + ldr r3, _021D84EC ; =ListMenuGetTemplateField mov r1, #0x13 bx r3 nop -_021D84EC: .word FUN_02001470 +_021D84EC: .word ListMenuGetTemplateField thumb_func_end MOD65_021D84E4 thumb_func_start MOD65_021D84F0 @@ -2072,7 +2072,7 @@ MOD65_021D84F0: ; 0x021D84F0 mov r1, #0x13 add r7, r0, #0 add r6, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 cmp r6, #0 bne _021D850C diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s index 8ecfcb91..32ceb777 100644 --- a/arm9/modules/75/asm/module_75.s +++ b/arm9/modules/75/asm/module_75.s @@ -1624,7 +1624,7 @@ MOD75_021E7870: ; 0x021E7870 add r7, r1, #0 mov r1, #0x13 add r4, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r5, r0, #0 cmp r4, #1 beq _021E78F8 @@ -1751,7 +1751,7 @@ MOD75_021E797C: ; 0x021E797C mov r1, #0x13 str r0, [sp] add r7, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 add r0, #0xc4 ldr r0, [r0] diff --git a/arm9/modules/76/asm/module_76.s b/arm9/modules/76/asm/module_76.s index 9f7f7745..ddc3bcd3 100644 --- a/arm9/modules/76/asm/module_76.s +++ b/arm9/modules/76/asm/module_76.s @@ -1380,7 +1380,7 @@ MOD76_021D7FD0: ; 0x021D7FD0 add r5, r1, #0 mov r1, #0x13 add r6, r2, #0 - bl FUN_02001470 + bl ListMenuGetTemplateField add r4, r0, #0 cmp r6, #1 beq _021D7FE8 diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c index 1a46c4e2..db0328ef 100644 --- a/arm9/src/list_menu.c +++ b/arm9/src/list_menu.c @@ -12,6 +12,7 @@ void ListMenuDrawCursor(struct ListMenu *); BOOL ListMenuChangeSelection(struct ListMenu *, u8, u8, s32); void ListMenuCallSelectionChangedCallback(struct ListMenu *, BOOL); extern void CopyWindowToVram(struct Window *); +extern s32 FUN_02002E4C(u8 fontId, s32 attr); THUMB_FUNC struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id) { @@ -188,3 +189,117 @@ s32 FUN_02001464(struct ListMenu * list, s32 index) { return list->template.items[index].index; } + +s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr) +{ + switch (attr) + { + case 0: + return (s32)list->template.moveCursorFunc; + case 1: + return (s32)list->template.itemPrintFunc; + case 2: + return (s32)list->template.totalItems; + case 3: + return (s32)list->template.maxShowed; + case 4: + break; + case 5: + return (s32)list->template.header_X; + case 6: + return (s32)list->template.item_X; + case 7: + return (s32)list->template.cursor_X; + case 8: + return (s32)list->template.upText_Y; + case 9: + return FUN_02002E4C(list->template.fontId, 1) + list->template.itemVerticalPadding; + case 10: + return (s32)list->template.cursorPal; + case 11: + return (s32)list->template.fillValue; + case 12: + return (s32)list->template.cursorShadowPal; + case 13: + return (s32)list->template.lettersSpacing; + case 14: + return (s32)list->template.itemVerticalPadding; + case 15: + return (s32)list->template.scrollMultiple; + case 16: + return (s32)list->template.fontId; + case 17: + return (s32)list->template.unk_1B_7; + case 18: + return (s32)list->template.window; + case 19: + return (s32)list->template.unk_1C; + } + + return -1; +} + +void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value) +{ + switch (attr) + { + case 0: + list->template.moveCursorFunc = (LM_MOVECURSORFUNC)value; + break; + case 1: + list->template.itemPrintFunc = (LM_ITEMPRINTFUNC)value; + break; + case 2: + list->template.totalItems = (u16)value; + break; + case 3: + list->template.maxShowed = (u16)value; + break; + case 4: + break; + case 5: + list->template.header_X = (u8)value; + break; + case 6: + list->template.item_X = (u8)value; + break; + case 7: + list->template.cursor_X = (u8)value; + break; + case 8: + list->template.upText_Y = (u8)value; + break; + case 9: + break; + case 10: + list->template.cursorPal = (u8)value; + break; + case 11: + list->template.fillValue = (u8)value; + break; + case 12: + list->template.cursorShadowPal = (u8)value; + break; + case 13: + list->template.lettersSpacing = (u8)value; + break; + case 14: + list->template.itemVerticalPadding = (u8)value; + break; + case 15: + list->template.scrollMultiple = (u8)value; + break; + case 16: + list->template.fontId = (u8)value; + break; + case 17: + list->template.unk_1B_7 = (u8)value; + break; + case 18: + list->template.window = (struct Window *)value; + break; + case 19: + list->template.unk_1C = (u32)value; + break; + } +} diff --git a/include/list_menu.h b/include/list_menu.h index 67b73893..5f8e6944 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -32,10 +32,15 @@ struct ListMenuItem // TODO: Document remaining fields. // A lot of these are named based on similar fields in gen 3. + +typedef void (*LM_MOVECURSORFUNC)(s32, u8, struct ListMenu *); +typedef void (*LM_ITEMPRINTFUNC)(struct Window *, s32, u8); + struct ListMenuTemplate { - struct ListMenuItem * items; - u8 filler_04[8]; + /*0x00*/ struct ListMenuItem * items; + /*0x04*/ LM_MOVECURSORFUNC moveCursorFunc; + /*0x08*/ LM_ITEMPRINTFUNC itemPrintFunc; /*0x0C*/ struct Window * window; /*0x10*/ u16 totalItems; /*0x12*/ u16 maxShowed; @@ -50,7 +55,8 @@ struct ListMenuTemplate u16 itemVerticalPadding:4; u16 scrollMultiple:2; u16 fontId:6; - /*0x1C*/ u8 filler_1C[4]; + u16 unk_1B_7:1; + /*0x1C*/ u32 unk_1C; }; struct ListMenu |