summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-05-21 09:08:28 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-05-21 09:08:28 -0400
commit80231d12b10043197be4d01222346fe7f0b72900 (patch)
treea51ed90a28d1489ea0d1b8f982fda185c6012839
parent150597d495383f09a4ee733d24b3e770c57494eb (diff)
ListMenuGetSetTemplateField
-rw-r--r--arm9/asm/unk_020010A8.s288
-rw-r--r--arm9/asm/unk_020625EC.s4
-rw-r--r--arm9/asm/unk_020653EC.s6
-rw-r--r--arm9/global.inc4
-rw-r--r--arm9/modules/06/asm/module_06.s14
-rw-r--r--arm9/modules/18/asm/module_18.s50
-rw-r--r--arm9/modules/56/asm/module_56.s8
-rw-r--r--arm9/modules/65/asm/module_65.s6
-rw-r--r--arm9/modules/75/asm/module_75.s4
-rw-r--r--arm9/modules/76/asm/module_76.s2
-rw-r--r--arm9/src/list_menu.c115
-rw-r--r--include/list_menu.h12
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