summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-05-19 20:48:11 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-05-19 20:48:11 -0400
commitded31ee11b7c6f4aed68bca2a53a4372ea713492 (patch)
tree25a260630c73d35007200760eaeb584857213d3c
parente0636bd748fa018ef03398a95a6ee1b66710e4ad (diff)
Decomp ListMenuInit
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/unk_020010A8.s170
-rw-r--r--arm9/asm/unk_020625EC.s2
-rw-r--r--arm9/asm/unk_020653EC.s4
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/05/asm/mod05_021E1AD8.s2
-rw-r--r--arm9/modules/05/asm/module_05.s2
-rw-r--r--arm9/modules/06/asm/module_06.s12
-rw-r--r--arm9/modules/18/asm/module_18.s22
-rw-r--r--arm9/modules/55/asm/module_55.s2
-rw-r--r--arm9/modules/56/asm/module_56.s8
-rw-r--r--arm9/modules/59/asm/mod59_021D74E0_asm.s2
-rw-r--r--arm9/modules/65/asm/module_65.s4
-rw-r--r--arm9/modules/71/asm/module_71.s2
-rw-r--r--arm9/modules/75/asm/module_75.s2
-rw-r--r--arm9/modules/76/asm/module_76.s2
-rw-r--r--arm9/modules/77/asm/module_77.s4
-rw-r--r--arm9/modules/80/asm/module_80.s8
-rw-r--r--arm9/modules/83/asm/module_83.s4
-rw-r--r--arm9/src/list_menu.c49
-rw-r--r--include/list_menu.h56
21 files changed, 148 insertions, 212 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 898904d3..18ed6d18 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -6,6 +6,7 @@ Static arm9
{
Address 0x02000000
Object main.o
+ Object list_menu.o
Object unk_020010A8.o
Object unk_02001B80.o
Object string_util.o
diff --git a/arm9/asm/unk_020010A8.s b/arm9/asm/unk_020010A8.s
index 440ba8e2..7c6c1aa7 100644
--- a/arm9/asm/unk_020010A8.s
+++ b/arm9/asm/unk_020010A8.s
@@ -5,176 +5,6 @@
.text
- thumb_func_start FUN_020010A8
-FUN_020010A8: ; 0x020010A8
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r0, r3, #0x0
- mov r1, #0x38
- add r7, r2, #0x0
- str r3, [sp, #0x0]
- bl AllocFromHeap
- add r4, r0, #0x0
- add r3, r5, #0x0
- add r2, r4, #0x0
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldr r0, [sp, #0x0]
- bl FUN_02013690
- str r0, [r4, #0x28]
- strh r6, [r4, #0x2c]
- add r1, r4, #0x0
- strh r7, [r4, #0x2e]
- mov r0, #0x0
- add r1, #0x30
- strb r0, [r1, #0x0]
- add r1, r4, #0x0
- add r1, #0x31
- strb r0, [r1, #0x0]
- add r1, r4, #0x0
- mov r2, #0xff
- add r1, #0x32
- strb r2, [r1, #0x0]
- add r1, r4, #0x0
- add r1, #0x33
- strb r0, [r1, #0x0]
- add r1, r4, #0x0
- ldr r0, [sp, #0x0]
- add r1, #0x34
- strb r0, [r1, #0x0]
- add r0, r4, #0x0
- ldrb r1, [r4, #0x17]
- add r0, #0x20
- ldrb r2, [r0, #0x0]
- lsl r1, r1, #0x18
- mov r0, #0xf
- lsr r3, r1, #0x1c
- mov r1, #0xf
- bic r2, r0
- and r3, r1
- orr r3, r2
- add r2, r4, #0x0
- add r2, #0x20
- strb r3, [r2, #0x0]
- add r2, r4, #0x0
- add r2, #0x20
- ldrb r2, [r2, #0x0]
- mov r3, #0xf0
- bic r2, r3
- ldrb r3, [r4, #0x18]
- lsl r3, r3, #0x1c
- lsr r3, r3, #0x1c
- lsl r3, r3, #0x1c
- lsr r3, r3, #0x18
- orr r3, r2
- add r2, r4, #0x0
- add r2, #0x20
- strb r3, [r2, #0x0]
- add r2, r4, #0x0
- add r2, #0x21
- ldrb r2, [r2, #0x0]
- bic r2, r0
- ldrb r0, [r4, #0x18]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1c
- and r0, r1
- add r1, r2, #0x0
- orr r1, r0
- add r0, r4, #0x0
- add r0, #0x21
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x22
- ldrb r0, [r0, #0x0]
- mov r1, #0x3f
- bic r0, r1
- ldrh r1, [r4, #0x1a]
- lsl r1, r1, #0x1d
- lsr r1, r1, #0x1d
- lsl r1, r1, #0x18
- lsr r2, r1, #0x18
- mov r1, #0x3f
- and r1, r2
- orr r1, r0
- add r0, r4, #0x0
- add r0, #0x22
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x24
- ldrb r0, [r0, #0x0]
- mov r1, #0x7f
- bic r0, r1
- ldrh r1, [r4, #0x1a]
- lsl r1, r1, #0x11
- lsr r1, r1, #0x1a
- lsl r1, r1, #0x18
- lsr r2, r1, #0x18
- mov r1, #0x7f
- and r1, r2
- orr r1, r0
- add r0, r4, #0x0
- add r0, #0x24
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x24
- ldrb r1, [r0, #0x0]
- mov r0, #0x80
- bic r1, r0
- add r0, r4, #0x0
- add r0, #0x24
- strb r1, [r0, #0x0]
- ldrh r1, [r4, #0x10]
- ldrh r0, [r4, #0x12]
- cmp r1, r0
- bhs _020011AC
- strh r1, [r4, #0x12]
-_020011AC:
- ldrb r2, [r4, #0x18]
- ldr r0, [r4, #0x28]
- lsl r1, r2, #0x1c
- lsr r1, r1, #0x1c
- lsl r1, r1, #0x18
- lsr r3, r1, #0x18
- ldrb r1, [r4, #0x17]
- lsl r2, r2, #0x18
- lsr r2, r2, #0x1c
- lsl r1, r1, #0x18
- lsr r1, r1, #0x1c
- lsl r1, r1, #0x18
- lsl r2, r2, #0x18
- lsr r1, r1, #0x8
- lsr r2, r2, #0x10
- orr r1, r2
- orr r1, r3
- bl FUN_020136E0
- ldrb r1, [r4, #0x18]
- ldr r0, [r4, #0xc]
- lsl r1, r1, #0x1c
- lsr r1, r1, #0x1c
- bl FUN_02019620
- ldrh r1, [r4, #0x2c]
- ldrh r3, [r4, #0x12]
- add r0, r4, #0x0
- mov r2, #0x0
- bl FUN_02001714
- add r0, r4, #0x0
- bl FUN_020017AC
- add r0, r4, #0x0
- mov r1, #0x1
- bl FUN_02001B64
- ldr r0, [r5, #0xc]
- bl CopyWindowToVram
- add r0, r4, #0x0
- pop {r3-r7, pc}
- .balign 4
-
thumb_func_start FUN_02001204
FUN_02001204: ; 0x02001204
push {r4-r6, lr}
diff --git a/arm9/asm/unk_020625EC.s b/arm9/asm/unk_020625EC.s
index 2ec122fa..8c5ffee8 100644
--- a/arm9/asm/unk_020625EC.s
+++ b/arm9/asm/unk_020625EC.s
@@ -1455,7 +1455,7 @@ _02063094:
ldr r2, [sp, #0x18]
add r0, #0xa0
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
add r1, r5, #0x0
add r1, #0xc0
str r0, [r1, #0x0]
diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s
index 3d43d136..e238bee0 100644
--- a/arm9/asm/unk_020653EC.s
+++ b/arm9/asm/unk_020653EC.s
@@ -1110,7 +1110,7 @@ _02065C64:
lsl r3, r3, #0x18
ldrh r2, [r5, r2]
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
mov r1, #0x16
lsl r1, r1, #0x4
str r0, [r5, r1]
@@ -1362,7 +1362,7 @@ _02065E14:
ldr r2, [sp, #0x4]
add r0, r5, r0
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
mov r1, #0x16
lsl r1, r1, #0x4
str r0, [r5, r1]
diff --git a/arm9/global.inc b/arm9/global.inc
index 4ed9aa74..fb6a2322 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -188,7 +188,7 @@
.extern FUN_02000EE8
.extern FUN_02000F18
.extern HandleDSLidAction
-.extern FUN_020010A8
+.extern ListMenuInit
.extern FUN_02001204
.extern FUN_02001300
.extern FUN_02001328
diff --git a/arm9/modules/05/asm/mod05_021E1AD8.s b/arm9/modules/05/asm/mod05_021E1AD8.s
index 0b72da2a..74e58b66 100644
--- a/arm9/modules/05/asm/mod05_021E1AD8.s
+++ b/arm9/modules/05/asm/mod05_021E1AD8.s
@@ -738,7 +738,7 @@ _021E2032:
add r0, r4, r0
mov r1, #0
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
mov r1, #0x6d
lsl r1, r1, #2
str r0, [r4, r1]
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index fe346300..7289aee2 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -15277,7 +15277,7 @@ _021EFF54:
add r0, r2, #0
add r2, r1, #0
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #4]
add r0, r5, #0
add r0, #0x20
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index d46e003b..7c6a92f1 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -9220,7 +9220,7 @@ _0223DC8E:
add r0, r2, #0
add r2, r1, #0
str r5, [sp, #0x20]
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x78]
add sp, #0x24
pop {r4, r5, r6, r7, pc}
@@ -11388,7 +11388,7 @@ _0223EEB8:
mov r1, #0
add r0, r2, #0
add r2, r1, #0
- bl FUN_020010A8
+ bl ListMenuInit
ldr r1, _0223EF10 ; =0x02252420
ldr r2, [r1]
str r0, [r2, #0x5c]
@@ -14666,7 +14666,7 @@ _022409D2:
add r2, #0x78
ldrh r2, [r2]
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5]
add r5, #0x34
add r0, r5, #0
@@ -14855,7 +14855,7 @@ _02240B4A:
add r2, #0x7a
ldrh r2, [r2]
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #4]
add r5, #0x44
add r0, r5, #0
@@ -19028,7 +19028,7 @@ MOD06_02242CDC: ; 0x02242CDC
mov r1, #0
add r2, r5, #0
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
add r4, #0x88
str r0, [r4]
add sp, #0x14
@@ -42332,7 +42332,7 @@ _0224E084:
mov r1, #0
ldr r0, _0224E16C ; =MOD6_022523A0
add r2, r1, #0
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #8]
ldr r0, [r5, #4]
mov r1, #0
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index d0f6db33..b90914e2 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -22075,7 +22075,7 @@ _0224409E:
ldr r2, [sp, #4]
ldr r3, [sp, #8]
add r0, r5, #0
- bl FUN_020010A8
+ bl ListMenuInit
ldr r1, [sp, #0xc]
str r0, [r1, #0xc]
add r0, r1, #0
@@ -29593,7 +29593,7 @@ _02247AFA:
strh r1, [r5, #0x3a]
add r0, sp, #0x14
add r2, r1, #0
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x20]
add r5, #0xc
add r0, r5, #0
@@ -29745,7 +29745,7 @@ _02247C40:
strh r1, [r5, #0x3a]
add r2, r1, #0
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x20]
add r5, #0xc
add r0, r5, #0
@@ -29898,7 +29898,7 @@ _02247D6C:
strh r1, [r5, #0x3a]
add r2, r1, #0
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x20]
add r5, #0xc
add r0, r5, #0
@@ -31278,7 +31278,7 @@ _02248870:
strh r1, [r5, #0x36]
add r2, r1, #0
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x1c]
add r5, #8
add r0, r5, #0
@@ -33530,7 +33530,7 @@ _02249A0E:
add r2, r1, #0
mov r3, #4
str r5, [sp, #0x3c]
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x50]
add sp, #0x40
pop {r3, r4, r5, r6, r7, pc}
@@ -36727,7 +36727,7 @@ _0224B42C:
lsr r1, r1, #0x10
lsr r2, r2, #0x10
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x48]
add sp, #0x40
pop {r3, r4, r5, r6, r7, pc}
@@ -36848,7 +36848,7 @@ _0224B528:
lsr r1, r1, #0x10
lsr r2, r2, #0x10
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x48]
add sp, #0x40
pop {r3, r4, r5, r6, r7, pc}
@@ -38606,7 +38606,7 @@ _0224C396:
lsr r1, r1, #0x10
lsr r2, r2, #0x10
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x48]
mov r0, #0x8b
lsl r0, r0, #2
@@ -39228,7 +39228,7 @@ _0224C87C:
lsr r1, r1, #0x10
lsr r2, r2, #0x10
mov r3, #4
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x48]
add r5, #0x10
add r0, r5, #0
@@ -42402,7 +42402,7 @@ _0224E186:
ldr r2, [r5, #0x34]
ldrh r1, [r1]
ldrh r2, [r2]
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x28]
add r0, r5, #4
bl CopyWindowToVram
diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s
index 0d96ce13..fec8672e 100644
--- a/arm9/modules/55/asm/module_55.s
+++ b/arm9/modules/55/asm/module_55.s
@@ -3306,7 +3306,7 @@ _021D8F1A:
add r0, sp, #0x1c
add r2, r1, #0
mov r3, #0x34
- bl FUN_020010A8
+ bl ListMenuInit
mov r1, #0xea
lsl r1, r1, #2
str r0, [r5, r1]
diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s
index d1046c7b..fa8325c2 100644
--- a/arm9/modules/56/asm/module_56.s
+++ b/arm9/modules/56/asm/module_56.s
@@ -3567,7 +3567,7 @@ _022139D0:
add r2, r1, #0
mov r3, #0x36
str r5, [sp, #0x30]
- bl FUN_020010A8
+ bl ListMenuInit
add r5, #0xb4
str r0, [r5]
add sp, #0x34
@@ -5134,7 +5134,7 @@ _02214642:
add r0, sp, #0x14
mov r1, #0
mov r3, #0x36
- bl FUN_020010A8
+ bl ListMenuInit
add r1, r5, #0
add r1, #0xbc
str r0, [r1]
@@ -5425,7 +5425,7 @@ _0221488C:
ldrh r2, [r2, r3]
mov r1, #0
mov r3, #0x36
- bl FUN_020010A8
+ bl ListMenuInit
add r1, r5, #0
add r1, #0xbc
str r0, [r1]
@@ -5717,7 +5717,7 @@ _02214ADC:
add r0, sp, #0x2c
add r2, r1, #0
mov r3, #0x36
- bl FUN_020010A8
+ bl ListMenuInit
add r1, r5, #0
add r1, #0xbc
str r0, [r1]
diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s
index c86d2c94..cc593cac 100644
--- a/arm9/modules/59/asm/mod59_021D74E0_asm.s
+++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s
@@ -1096,7 +1096,7 @@ _021D7DF2:
lsl r3, r3, #0x18
add r2, r1, #0
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r5, #0x40]
ldr r0, [sp, #0x10]
ldr r2, _021D7EC4 ; =0x000003D9
diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s
index 229a9214..a772b2c8 100644
--- a/arm9/modules/65/asm/module_65.s
+++ b/arm9/modules/65/asm/module_65.s
@@ -1684,7 +1684,7 @@ _021D81C0:
ldrh r2, [r2]
add r0, #0x84
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
add r1, r5, #0
add r1, #0xc4
str r0, [r1]
@@ -2276,7 +2276,7 @@ _021D8648:
add r0, #0xa4
add r2, r1, #0
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
add r5, #0xc8
str r0, [r5]
pop {r3, r4, r5, pc}
diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s
index ac2559a6..637a4530 100644
--- a/arm9/modules/71/asm/module_71.s
+++ b/arm9/modules/71/asm/module_71.s
@@ -7127,7 +7127,7 @@ MOD71_02231018: ; 0x02231018
mov r3, #0x1a
str r5, [sp, #0x14]
str r4, [sp, #0x20]
- bl FUN_020010A8
+ bl ListMenuInit
add sp, #0x34
pop {r4, r5, r6, r7, pc}
nop
diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s
index 1a9861c9..707b3e92 100644
--- a/arm9/modules/75/asm/module_75.s
+++ b/arm9/modules/75/asm/module_75.s
@@ -1606,7 +1606,7 @@ _021E784E:
add r1, r3, #0
add r0, sp, #0
mov r3, #6
- bl FUN_020010A8
+ bl ListMenuInit
mov r1, #0x57
lsl r1, r1, #2
str r0, [r4, r1]
diff --git a/arm9/modules/76/asm/module_76.s b/arm9/modules/76/asm/module_76.s
index 13ddf00c..11317efb 100644
--- a/arm9/modules/76/asm/module_76.s
+++ b/arm9/modules/76/asm/module_76.s
@@ -1340,7 +1340,7 @@ _021D7F50:
ldrh r1, [r3, #0x12]
ldrh r2, [r3, #0x10]
mov r3, #0x43
- bl FUN_020010A8
+ bl ListMenuInit
mov r1, #0x41
lsl r1, r1, #2
str r0, [r5, r1]
diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s
index a5eaa94b..786457f7 100644
--- a/arm9/modules/77/asm/module_77.s
+++ b/arm9/modules/77/asm/module_77.s
@@ -1812,7 +1812,7 @@ _021D83B2:
lsl r3, r3, #0x18
add r2, r1, #0
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
ldr r1, _021D8410 ; =0x0000C054
ldr r2, _021D8414 ; =0x000001D9
str r0, [r5, r1]
@@ -1902,7 +1902,7 @@ _021D8462:
lsl r3, r3, #0x18
add r2, r1, #0
lsr r3, r3, #0x18
- bl FUN_020010A8
+ bl ListMenuInit
ldr r1, _021D84D0 ; =0x0000C054
ldr r2, _021D84D4 ; =0x000001D9
str r0, [r5, r1]
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index f0b34ee0..8de13d8d 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -13718,7 +13718,7 @@ _02234388:
ldrh r1, [r2, #6]
ldrh r2, [r2, #4]
mov r3, #0x3e
- bl FUN_020010A8
+ bl ListMenuInit
add sp, #0x24
pop {r4, r5, r6, r7, pc}
.align 2, 0
@@ -13912,7 +13912,7 @@ MOD80_022344DC: ; 0x022344DC
ldrh r2, [r3, r2]
add r0, sp, #0x18
mov r3, #0x3e
- bl FUN_020010A8
+ bl ListMenuInit
add sp, #0x38
pop {r3, r4, r5, r6, r7, pc}
nop
@@ -13968,7 +13968,7 @@ _02234578:
add r0, sp, #4
add r2, r1, #0
mov r3, #0x3e
- bl FUN_020010A8
+ bl ListMenuInit
add sp, #0x24
pop {r4, r5, r6, r7, pc}
.align 2, 0
@@ -14024,7 +14024,7 @@ _022345E8:
add r0, sp, #4
add r2, r1, #0
mov r3, #0x3e
- bl FUN_020010A8
+ bl ListMenuInit
add sp, #0x24
pop {r4, r5, r6, r7, pc}
.align 2, 0
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index 8b006bca..88803eb8 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -5869,7 +5869,7 @@ _02230436:
add r0, sp, #8
add r2, r1, #0
mov r3, #0x56
- bl FUN_020010A8
+ bl ListMenuInit
str r0, [r4, #0x78]
mov r0, #0
ldr r2, [sp, #0x40]
@@ -8205,7 +8205,7 @@ _02231752:
str r0, [sp, #0x10]
add r0, r2, #0
add r2, r1, #0
- bl FUN_020010A8
+ bl ListMenuInit
ldr r1, _02231798 ; =0x00002B68
str r0, [r5, r1]
add sp, #0x24
diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c
new file mode 100644
index 00000000..98136562
--- /dev/null
+++ b/arm9/src/list_menu.c
@@ -0,0 +1,49 @@
+#pragma thumb on
+
+#include "global.h"
+#include "heap.h"
+#include "list_menu.h"
+
+extern void * FUN_02013690(u32 heap_id);
+extern void FUN_020136E0(void *, u32);
+extern void FUN_02019620(struct Window *, u32);
+void FUN_02001714(struct ListMenu *, u16, u16, u16);
+void FUN_020017AC(struct ListMenu *);
+void FUN_02001B64(struct ListMenu *, BOOL);
+extern void CopyWindowToVram(struct Window *);
+
+struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u32 heap_id)
+{
+ struct ListMenu * list = AllocFromHeap(heap_id, sizeof(struct ListMenu));
+ list->template = *template;
+ list->unk_28 = FUN_02013690(heap_id);
+ list->cursorPos = cursorPos;
+ list->itemsAbove = itemsAbove;
+ list->unk_30 = 0;
+ list->unk_31 = 0;
+ list->taskId = 0xFF;
+ list->unk_33 = 0;
+ list->heap_id = (u8)heap_id;
+ list->cursorPal = list->template.cursorPal;
+ list->fillValue = list->template.fillValue;
+ list->cursorShadowPal = list->template.cursorShadowPal;
+ list->lettersSpacing = list->template.lettersSpacing;
+ list->fontId = list->template.fontId;
+ list->enabled = 0;
+ if (list->template.totalItems < list->template.maxShowed)
+ list->template.maxShowed = list->template.totalItems;
+ FUN_020136E0(
+ list->unk_28,
+ (u32)(
+ ((u32)(list->template.cursorPal << 24) >> 8)
+ | ((u32)(list->template.cursorShadowPal << 24) >> 16)
+ | ((u32)(list->template.fillValue << 24) >> 24)
+ )
+ );
+ FUN_02019620(list->template.window, list->template.fillValue);
+ FUN_02001714(list, list->cursorPos, 0, list->template.maxShowed);
+ FUN_020017AC(list);
+ FUN_02001B64(list, 1);
+ CopyWindowToVram(template->window);
+ return list;
+}
diff --git a/include/list_menu.h b/include/list_menu.h
new file mode 100644
index 00000000..befbf051
--- /dev/null
+++ b/include/list_menu.h
@@ -0,0 +1,56 @@
+#ifndef POKEDIAMOND_LIST_MENU_H
+#define POKEDIAMOND_LIST_MENU_H
+
+struct ListMenu;
+
+// TODO: Move to its own header, and fill it out
+struct Window
+{
+ u8 * unk_00;
+ u8 unk_04;
+};
+
+// TODO: Document remaining fields.
+// A lot of these are named based on similar fields in gen 3.
+struct ListMenuTemplate
+{
+ u8 filler_00[12];
+ /*0x0C*/ struct Window * window;
+ /*0x10*/ u16 totalItems;
+ /*0x12*/ u16 maxShowed;
+ /*0x14*/ u8 header_X;
+ /*0x15*/ u8 item_X;
+ /*0x16*/ u8 cursor_X;
+ /*0x17*/ u8 upText_Y:4;
+ u8 cursorPal:4;
+ /*0x18*/ u8 fillValue:4;
+ u8 cursorShadowPal:4;
+ /*0x1A*/ u16 lettersSpacing:3;
+ u16 unk_1a_3:6;
+ u16 fontId:6;
+ /*0x1C*/ u8 filler_1C[4];
+};
+
+struct ListMenu
+{
+ /*0x00*/ struct ListMenuTemplate template;
+ // ListMenuOverride from gen 3
+ /*0x20*/ u8 cursorPal:4;
+ u8 fillValue:4;
+ /*0x21*/ u8 cursorShadowPal:4;
+ u8 unk_21_4:4;
+ /*0x22*/ u8 lettersSpacing:6;
+ /*0x23*/ u8 unk_23;
+ /*0x24*/ u8 fontId:7;
+ u8 enabled:1;
+ /*0x28*/ void * unk_28;
+ /*0x2c*/ u16 cursorPos;
+ /*0x2e*/ u16 itemsAbove;
+ /*0x30*/ u8 unk_30;
+ /*0x31*/ u8 unk_31;
+ /*0x32*/ u8 taskId;
+ /*0x33*/ u8 unk_33;
+ /*0x34*/ u8 heap_id;
+};
+
+#endif // POKEDIAMOND_LIST_MENU_H