diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-05-19 20:48:11 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-05-19 20:48:11 -0400 |
commit | ded31ee11b7c6f4aed68bca2a53a4372ea713492 (patch) | |
tree | 25a260630c73d35007200760eaeb584857213d3c | |
parent | e0636bd748fa018ef03398a95a6ee1b66710e4ad (diff) |
Decomp ListMenuInit
-rw-r--r-- | arm9/arm9.lsf | 1 | ||||
-rw-r--r-- | arm9/asm/unk_020010A8.s | 170 | ||||
-rw-r--r-- | arm9/asm/unk_020625EC.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_020653EC.s | 4 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/modules/05/asm/mod05_021E1AD8.s | 2 | ||||
-rw-r--r-- | arm9/modules/05/asm/module_05.s | 2 | ||||
-rw-r--r-- | arm9/modules/06/asm/module_06.s | 12 | ||||
-rw-r--r-- | arm9/modules/18/asm/module_18.s | 22 | ||||
-rw-r--r-- | arm9/modules/55/asm/module_55.s | 2 | ||||
-rw-r--r-- | arm9/modules/56/asm/module_56.s | 8 | ||||
-rw-r--r-- | arm9/modules/59/asm/mod59_021D74E0_asm.s | 2 | ||||
-rw-r--r-- | arm9/modules/65/asm/module_65.s | 4 | ||||
-rw-r--r-- | arm9/modules/71/asm/module_71.s | 2 | ||||
-rw-r--r-- | arm9/modules/75/asm/module_75.s | 2 | ||||
-rw-r--r-- | arm9/modules/76/asm/module_76.s | 2 | ||||
-rw-r--r-- | arm9/modules/77/asm/module_77.s | 4 | ||||
-rw-r--r-- | arm9/modules/80/asm/module_80.s | 8 | ||||
-rw-r--r-- | arm9/modules/83/asm/module_83.s | 4 | ||||
-rw-r--r-- | arm9/src/list_menu.c | 49 | ||||
-rw-r--r-- | include/list_menu.h | 56 |
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 |