summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokenav.s108
-rw-r--r--src/pokenav.c555
2 files changed, 342 insertions, 321 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 68dd35542..d1edebd3f 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -946,7 +946,7 @@ sub_81C9958: @ 81C9958
strb r0, [r4, 0xC]
ldr r0, =sub_81C9A10
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81C99FC
str r0, [r4]
@@ -970,7 +970,7 @@ sub_81C9990: @ 81C9990
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5, 0x4]
ldr r0, =sub_81C99FC
str r0, [r5]
@@ -1015,7 +1015,7 @@ sub_81C99FC: @ 81C99FC
movs r0, 0x2
bl GetSubstructPtr
ldr r0, [r0, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81C99FC
@@ -3145,7 +3145,7 @@ sub_81CAAE8: @ 81CAAE8
str r0, [r4, 0x10]
ldr r0, =sub_81CAD20
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x14]
movs r0, 0x1
b _081CAB1E
@@ -3224,7 +3224,7 @@ _081CAB84:
ldr r0, =sub_81CAC04
str r0, [r4, 0x18]
strh r2, [r4]
- bl sub_81C875C
+ bl GetSelectedMatchCall
lsls r0, 2
adds r1, r4, r0
ldrb r0, [r1, 0x1C]
@@ -4097,7 +4097,7 @@ sub_81CB1D0: @ 81CB1D0
movs r0, 0x5
bl GetSubstructPtr
adds r4, r0, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
adds r1, r0, 0
lsls r0, r1, 2
adds r4, r0
@@ -4169,7 +4169,7 @@ sub_81CB260: @ 81CB260
strb r0, [r4, 0x19]
ldr r0, =sub_81CB324
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81CB310
str r0, [r4]
@@ -4196,7 +4196,7 @@ sub_81CB29C: @ 81CB29C
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5, 0x4]
ldr r0, =sub_81CB310
str r0, [r5]
@@ -4244,7 +4244,7 @@ sub_81CB310: @ 81CB310
movs r0, 0x6
bl GetSubstructPtr
ldr r0, [r0, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81CB310
@@ -4471,7 +4471,7 @@ _081CB52A:
beq _081CB572
b _081CB580
_081CB534:
- bl sub_81C868C
+ bl MatchCall_MoveCursorDown
cmp r0, 0x1
beq _081CB54C
cmp r0, 0x1
@@ -4540,7 +4540,7 @@ _081CB5A2:
beq _081CB5EA
b _081CB5F8
_081CB5AC:
- bl sub_81C8658
+ bl MatchCall_MoveCursorUp
cmp r0, 0x1
beq _081CB5C4
cmp r0, 0x1
@@ -4609,7 +4609,7 @@ _081CB61A:
beq _081CB662
b _081CB670
_081CB624:
- bl sub_81C870C
+ bl MatchCall_PageDown
cmp r0, 0x1
beq _081CB63C
cmp r0, 0x1
@@ -4678,7 +4678,7 @@ _081CB692:
beq _081CB6DA
b _081CB6E8
_081CB69C:
- bl sub_81C86CC
+ bl MatchCall_PageUp
cmp r0, 0x1
beq _081CB6B4
cmp r0, 0x1
@@ -5118,7 +5118,7 @@ _081CB9E8:
.4byte _081CBA40
.4byte _081CBA4A
_081CB9FC:
- bl sub_81C8770
+ bl GetMatchCallListTopIndex
bl sub_81CB0E4
adds r5, r0, 0
cmp r5, 0
@@ -5250,7 +5250,7 @@ _081CBAF4:
.4byte _081CBB4C
.4byte _081CBB56
_081CBB08:
- bl sub_81C8770
+ bl GetMatchCallListTopIndex
bl sub_81CB128
adds r5, r0, 0
cmp r5, 0
@@ -5744,7 +5744,7 @@ sub_81CBEF8: @ 81CBEF8
sub sp, 0x2C
adds r5, r0, 0
adds r4, r1, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
adds r0, r4
bl sub_81CAEA4
lsls r0, 16
@@ -6058,7 +6058,7 @@ sub_81CC158: @ 81CC158
push {r4,r5,lr}
sub sp, 0xC
adds r4, r0, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
adds r1, r4, 0
adds r1, 0xF
bl sub_81CAF78
@@ -6344,7 +6344,7 @@ sub_81CC370: @ 81CC370
sub_81CC39C: @ 81CC39C
push {r4-r7,lr}
adds r7, r0, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
bl sub_81CAF04
cmp r0, 0
blt _081CC400
@@ -6666,7 +6666,7 @@ sub_81CC5F4: @ 81CC5F4
beq _081CC624
ldr r0, =sub_81CC6F4
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81CC6BC
str r0, [r4]
@@ -6693,7 +6693,7 @@ sub_81CC62C: @ 81CC62C
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5, 0x4]
ldr r0, =sub_81CC6BC
str r0, [r5]
@@ -6753,7 +6753,7 @@ sub_81CC6BC: @ 81CC6BC
movs r0, 0x4
bl GetSubstructPtr
ldr r0, [r0, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81CC6BC
@@ -7518,7 +7518,7 @@ sub_81CCD10: @ 81CCD10
push {lr}
ldr r0, =sub_81CCD34
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
pop {r0}
bx r0
.pool
@@ -7528,7 +7528,7 @@ sub_81CCD10: @ 81CCD10
sub_81CCD24: @ 81CCD24
push {lr}
ldr r0, =sub_81CCD34
- bl sub_81C7124
+ bl FuncIsActiveLoopedTask
pop {r1}
bx r1
.pool
@@ -9642,7 +9642,7 @@ sub_81CDDD4: @ 81CDDD4
strb r0, [r1]
ldr r0, =sub_81CDE94
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4]
ldr r0, =0x00001810
adds r1, r4, r0
@@ -9675,7 +9675,7 @@ sub_81CDE2C: @ 81CDE2C
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5]
ldr r0, =0x00001810
adds r5, r0
@@ -9707,7 +9707,7 @@ sub_81CDE80: @ 81CDE80
movs r0, 0xC
bl GetSubstructPtr
ldr r0, [r0]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81CDE80
@@ -11639,7 +11639,7 @@ sub_81CEF3C: @ 81CEF3C
str r0, [r4]
ldr r0, =sub_81CF11C
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
movs r0, 0
str r0, [r4, 0x18]
@@ -11726,7 +11726,7 @@ sub_81CF010: @ 81CF010
push {r4,lr}
adds r4, r0, 0
ldr r0, [r4, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
cmp r0, 0
bne _081CF022
ldr r0, =sub_81CF030
@@ -11796,7 +11796,7 @@ _081CF088:
movs r0, 0
b _081CF0A6
_081CF096:
- bl sub_81C875C
+ bl GetSelectedMatchCall
ldr r1, [r4, 0x20]
strh r0, [r1, 0x2]
str r5, [r4, 0x1C]
@@ -11862,7 +11862,7 @@ sub_81CF0F0: @ 81CF0F0
movs r0, 0x7
bl GetSubstructPtr
adds r4, r0, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
ldr r1, [r4, 0x20]
lsls r0, 2
adds r1, r0
@@ -12177,7 +12177,7 @@ sub_81CF330: @ 81CF330
beq _081CF360
ldr r0, =sub_81CF418
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81CF3E4
str r0, [r4]
@@ -12206,7 +12206,7 @@ sub_81CF368: @ 81CF368
beq _081CF398
ldr r0, =sub_81CF418
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81CF3E4
str r0, [r4]
@@ -12234,7 +12234,7 @@ sub_81CF3A0: @ 81CF3A0
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5, 0x4]
ldr r0, =sub_81CF3E4
str r0, [r5]
@@ -12261,7 +12261,7 @@ sub_81CF3E4: @ 81CF3E4
movs r0, 0x8
bl GetSubstructPtr
ldr r0, [r0, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81CF3E4
@@ -12451,7 +12451,7 @@ _081CF592:
beq _081CF5D8
b _081CF5E6
_081CF59C:
- bl sub_81C8658
+ bl MatchCall_MoveCursorUp
cmp r0, 0x1
beq _081CF5B4
cmp r0, 0x1
@@ -12519,7 +12519,7 @@ _081CF60A:
beq _081CF650
b _081CF65E
_081CF614:
- bl sub_81C868C
+ bl MatchCall_MoveCursorDown
cmp r0, 0x1
beq _081CF62C
cmp r0, 0x1
@@ -12587,7 +12587,7 @@ _081CF682:
beq _081CF6C8
b _081CF6D6
_081CF68C:
- bl sub_81C86CC
+ bl MatchCall_PageUp
cmp r0, 0x1
beq _081CF6A4
cmp r0, 0x1
@@ -12655,7 +12655,7 @@ _081CF6FA:
beq _081CF740
b _081CF74E
_081CF704:
- bl sub_81C870C
+ bl MatchCall_PageDown
cmp r0, 0x1
beq _081CF71C
cmp r0, 0x1
@@ -13008,7 +13008,7 @@ sub_81CF9BC: @ 81CF9BC
str r0, [r4]
ldr r0, =sub_81CFB74
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
movs r0, 0
str r0, [r4, 0x14]
@@ -13082,7 +13082,7 @@ sub_81CFA68: @ 81CFA68
push {r4,lr}
adds r4, r0, 0
ldr r0, [r4, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
cmp r0, 0
bne _081CFA7A
ldr r0, =sub_81CFA88
@@ -13152,7 +13152,7 @@ _081CFAE0:
movs r0, 0
b _081CFAFE
_081CFAEE:
- bl sub_81C875C
+ bl GetSelectedMatchCall
ldr r1, [r4, 0x1C]
strh r0, [r1, 0x2]
str r5, [r4, 0x18]
@@ -13218,7 +13218,7 @@ sub_81CFB48: @ 81CFB48
movs r0, 0x9
bl GetSubstructPtr
adds r4, r0, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
ldr r1, [r4, 0x1C]
lsls r0, 2
adds r1, r0
@@ -13563,7 +13563,7 @@ sub_81CFDD0: @ 81CFDD0
beq _081CFE00
ldr r0, =sub_81CFEB8
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81CFE84
str r0, [r4]
@@ -13592,7 +13592,7 @@ sub_81CFE08: @ 81CFE08
beq _081CFE38
ldr r0, =sub_81CFEB8
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81CFE84
str r0, [r4]
@@ -13620,7 +13620,7 @@ sub_81CFE40: @ 81CFE40
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5, 0x4]
ldr r0, =sub_81CFE84
str r0, [r5]
@@ -13647,7 +13647,7 @@ sub_81CFE84: @ 81CFE84
movs r0, 0xA
bl GetSubstructPtr
ldr r0, [r0, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81CFE84
@@ -13825,7 +13825,7 @@ _081D0016:
beq _081D005C
b _081D006A
_081D0020:
- bl sub_81C8658
+ bl MatchCall_MoveCursorUp
cmp r0, 0x1
beq _081D0038
cmp r0, 0x1
@@ -13893,7 +13893,7 @@ _081D008E:
beq _081D00D4
b _081D00E2
_081D0098:
- bl sub_81C868C
+ bl MatchCall_MoveCursorDown
cmp r0, 0x1
beq _081D00B0
cmp r0, 0x1
@@ -13961,7 +13961,7 @@ _081D0106:
beq _081D014C
b _081D015A
_081D0110:
- bl sub_81C86CC
+ bl MatchCall_PageUp
cmp r0, 0x1
beq _081D0128
cmp r0, 0x1
@@ -14029,7 +14029,7 @@ _081D017E:
beq _081D01C4
b _081D01D2
_081D0188:
- bl sub_81C870C
+ bl MatchCall_PageDown
cmp r0, 0x1
beq _081D01A0
cmp r0, 0x1
@@ -14169,7 +14169,7 @@ sub_81D024C: @ 81D024C
sub_81D0288: @ 81D0288
push {r4,r5,lr}
adds r5, r0, 0
- bl sub_81C875C
+ bl GetSelectedMatchCall
adds r4, r0, 0
bl sub_81CFB38
adds r2, r0, 0
@@ -15103,7 +15103,7 @@ sub_81D0978: @ 81D0978
beq _081D09A8
ldr r0, =sub_81D0A6C
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r4, 0x4]
ldr r0, =sub_81D0A58
str r0, [r4]
@@ -15130,7 +15130,7 @@ sub_81D09B0: @ 81D09B0
adds r4, r0
ldr r0, [r4]
movs r1, 0x1
- bl sub_81C7078
+ bl CreateLoopedTask
str r0, [r5, 0x4]
ldr r0, =sub_81D0A58
str r0, [r5]
@@ -15196,7 +15196,7 @@ sub_81D0A58: @ 81D0A58
movs r0, 0xE
bl GetSubstructPtr
ldr r0, [r0, 0x4]
- bl sub_81C70D8
+ bl IsLoopedTaskActive
pop {r1}
bx r1
thumb_func_end sub_81D0A58
diff --git a/src/pokenav.c b/src/pokenav.c
index cde8646bc..403218178 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -26,8 +26,24 @@ enum
MODE_FORCE_CALL_2, // Set after making a call, has to exit Pokenav.
};
+// Return values of LoopedTask functions.
+#define LT_INC_AND_STOP 0
+#define LT_INC_AND_CONTINUE 1
+#define LT_STOP 2
+#define LT_CONTINUE 3
+#define LT_FINISH 4
+#define LT_SET_STATE(newState) (newState + 5)
+
+#define LOOPED_TASK_DECODE_STATE(action) (action - 5)
+
+#define LOOPED_TASK_ID(primary, secondary) (((secondary) << 16) |(primary))
+#define LOOPED_TASK_PRIMARY_ID(taskId) (taskId & 0xFFFF)
+#define LOOPED_TASK_SECONDARY_ID(taskId) (taskId >> 16)
+
#define UNKNOWN_OFFSET 100000
+typedef u32 (*LoopedTask)(s32 state);
+
struct UnknownSubSubStruct_0203CF40 {
u8 bg;
u8 unk1;
@@ -42,12 +58,14 @@ struct UnknownSubSubStruct_0203CF40 {
u16 unkE;
};
-struct UnknownSubSubStruct_81C81D4 {
- u16 unk0;
- u16 unk2;
+struct MatchCallWindowState {
+ // The index of the element at the top of the window.
+ u16 windowTopIndex;
+ u16 listLength;
u16 unk4;
- u16 unk6;
- u16 unk8;
+ // The index of the cursor, relative to the top of the window.
+ u16 selectedIndexOffset;
+ u16 visibleEntries;
u16 unkA;
u32 unkC;
u32 unk10;
@@ -59,7 +77,7 @@ struct UnknownSubStruct_0203CF40
void (*unk0)(u32);
u32 (*unk4)(void);
u32 unk8;
- u32 unkC;
+ u32 currentTaskId;
u32 unk10;
u32 unk14;
struct Sprite *unk18;
@@ -93,14 +111,14 @@ struct UnknownSubStruct_81C81D4
{
struct UnknownInnerStruct_81C81D4 unk0;
u8 tilemapBuffer[0x800];
- struct UnknownSubSubStruct_81C81D4 unk888;
+ struct MatchCallWindowState unk888;
u32 unk89C;
u32 unk8A0;
};
#define SUBSTRUCT_COUNT 19
-struct UnknownStruct_0203CF40
+struct PokenavResources
{
u32 (*field0)(void);
u32 field4;
@@ -117,7 +135,7 @@ struct CompressedSpritePalette_
u32 tag;
};
-struct UnknownStruct_81C9160
+struct MatchCallListTemplate
{
u32 unk0;
u16 unk4;
@@ -200,33 +218,33 @@ extern void sub_81CBD48(u16 windowId, u32 a1);
extern u8 *sub_81CAFD8(u16 a0, u32 a1);
extern void sub_81DB620(u32 windowId, u32 a1, u32 a2, u32 a3, u32 a4);
-u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *a1, struct UnknownStruct_81C9160 *a2, s32 a3);
-void sub_81C9160(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownStruct_81C9160 *a1);
+u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3);
+void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *a1);
void SpriteCB_MatchCallUpArrow(struct Sprite *sprite);
void SpriteCB_MatchCallDownArrow(struct Sprite *sprite);
void SpriteCB_MatchCallRightArrow(struct Sprite *sprite);
void ToggleMatchCallArrows(struct UnknownInnerStruct_81C81D4 *a0, u32 a1);
void sub_81C8FE0(struct UnknownInnerStruct_81C81D4 *a0);
-void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1);
+void sub_81C8EF8(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1);
void sub_81C8ED0(void);
-void sub_81C8E54(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1, u32 a2);
+void sub_81C8E54(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1, u32 a2);
void PrintMatchCallFieldNames(struct UnknownInnerStruct_81C81D4 *a0, u32 a1);
-void sub_81C8D4C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1);
-void sub_81C8CB4(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1);
+void sub_81C8D4C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1);
+void sub_81C8CB4(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1);
void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1, u32 a2);
-u32 sub_81C8A28(s32 a0);
-u32 sub_81C8958(s32 a0);
-u32 sub_81C8870(s32 a0);
-u32 sub_81C85A0(s32 a0);
+u32 LoopedTask_sub_81C8A28(s32 a0);
+u32 LoopedTask_sub_81C8958(s32 a0);
+u32 LoopedTask_sub_81C8870(s32 a0);
+u32 LoopedTask_sub_81C85A0(s32 a0);
void sub_81C8568(s32 a0, struct UnknownInnerStruct_81C81D4 *a1);
-u32 sub_81C83F0(s32 a0);
+u32 LoopedTask_sub_81C83F0(s32 a0);
bool32 sub_81C83E0(void);
void sub_81C83AC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, struct UnknownInnerStruct_81C81D4 *a5);
-void sub_81C837C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1);
+void sub_81C837C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1);
void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0);
void sub_81C82E4(struct UnknownSubStruct_81C81D4 *a0);
-u32 sub_81C8254(s32 a0);
-u32 sub_81C791C(s32 a0);
+u32 LoopedTask_sub_81C8254(s32 a0);
+u32 LoopedTask_sub_81C791C(s32 a0);
bool32 sub_81C756C(u32 a0);
bool32 sub_81C76C4(void);
static bool32 AnyMonHasRibbon(void);
@@ -234,22 +252,22 @@ u32 sub_81C75E0(void);
u32 sub_81C75D4(void);
u32 sub_81C76FC(void);
u32 sub_81C786C(void);
-u32 sub_81C7764(s32 a0);
-u32 sub_81C78D4(s32 a0);
+u32 LoopedTask_sub_81C7764(s32 a0);
+u32 LoopedTask_sub_81C78D4(s32 a0);
bool32 sub_81C7738(void);
void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 a1, u32 a2);
void sub_81C7834(void *func1, void *func2);
-static void InitMainStruct(struct UnknownStruct_0203CF40 *a0);
+static void InitMainStruct(struct PokenavResources *a0);
void FreeSubstruct(u32 index);
void sub_81C7850(u32 a0);
void sub_81C7BF8(u32 a0);
-void sub_81C71E4(u8 a0);
-void sub_81C7170(u8 taskId);
+void Task_RunLoopedTask_LinkMode(u8 a0);
+void Task_RunLoopedTask(u8 taskId);
void sub_81C742C(u8 taskId);
void sub_81C7710(void);
static void InitKeys_(void);
static void FreeVars(void);
-static void VblankCb_Pokenav(void);
+static void VBlankCB_Pokenav(void);
static void CB2_Pokenav(void);
void sub_81C7C28(void);
void sub_81C72BC(void);
@@ -750,127 +768,131 @@ static const struct SpriteTemplate sMatchCallUpDownArrowSprite =
.callback = SpriteCallbackDummy
};
-EWRAM_DATA u8 gUnknown_0203CF3C = 0;
-EWRAM_DATA struct UnknownStruct_0203CF40 *gUnknown_0203CF40 = NULL;
+EWRAM_DATA u8 gNextLoopedTaskId = 0;
+EWRAM_DATA struct PokenavResources *gPokenavResources = NULL;
EWRAM_DATA u32 gUnknown_0203CF44 = 0;
// code
-u32 sub_81C7078(u32 (*func)(s32), u32 priority)
+u32 CreateLoopedTask(LoopedTask loopedTask, u32 priority)
{
u16 taskId;
if (!IsUpdateLinkStateCBActive())
- taskId = CreateTask(sub_81C7170, priority);
+ taskId = CreateTask(Task_RunLoopedTask, priority);
else
- taskId = CreateTask(sub_81C71E4, priority);
+ taskId = CreateTask(Task_RunLoopedTask_LinkMode, priority);
- SetWordTaskArg(taskId, 1, (u32)func);
+ SetWordTaskArg(taskId, 1, (u32)loopedTask);
- gTasks[taskId].data[3] = gUnknown_0203CF3C;
- return ((gUnknown_0203CF3C++) << 16) | taskId;
+ gTasks[taskId].data[3] = gNextLoopedTaskId;
+ return LOOPED_TASK_ID(taskId, gNextLoopedTaskId++);
}
-bool32 sub_81C70D8(u32 a0)
+bool32 IsLoopedTaskActive(u32 taskId)
{
- u32 taskId = a0 & 0xFFFF;
- u32 v2 = a0 >> 16;
+ u32 primaryId = LOOPED_TASK_PRIMARY_ID(taskId);
+ u32 secondaryId = LOOPED_TASK_SECONDARY_ID(taskId);
- if (gTasks[taskId].isActive
- && (gTasks[taskId].func == sub_81C7170 || gTasks[taskId].func == sub_81C71E4)
- && gTasks[taskId].data[3] == v2)
+ if (gTasks[primaryId].isActive
+ && (gTasks[primaryId].func == Task_RunLoopedTask || gTasks[primaryId].func == Task_RunLoopedTask_LinkMode)
+ && gTasks[primaryId].data[3] == secondaryId)
return TRUE;
else
return FALSE;
}
-bool32 sub_81C7124(u32 (*a0)(s32))
+bool32 FuncIsActiveLoopedTask(LoopedTask func)
{
s32 i;
for (i = 0; i < NUM_TASKS; i++)
{
if (gTasks[i].isActive
- && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)
- && (void *)GetWordTaskArg(i, 1) == a0)
+ && (gTasks[i].func == Task_RunLoopedTask || gTasks[i].func == Task_RunLoopedTask_LinkMode)
+ && (LoopedTask)GetWordTaskArg(i, 1) == func)
return TRUE;
}
return FALSE;
}
-void sub_81C7170(u8 taskId)
+void Task_RunLoopedTask(u8 taskId)
{
- u32 (*func)(s32) = (void *)GetWordTaskArg(taskId, 1);
- s16 *data = gTasks[taskId].data;
+ LoopedTask loopedTask = (LoopedTask)GetWordTaskArg(taskId, 1);
+ s16 *state = &gTasks[taskId].data[0];
bool32 exitLoop = FALSE;
while (!exitLoop)
{
- u32 var = func(data[0]);
- switch (var)
+ u32 action = loopedTask(*state);
+ switch (action)
{
- case 1:
- data[0] = data[0] + 1;
+ case LT_INC_AND_CONTINUE:
+ (*state)++;
break;
- case 0:
- data[0]++;
+ case LT_INC_AND_STOP:
+ (*state)++;
return;
- case 4:
+ case LT_FINISH:
DestroyTask(taskId);
return;
+ // case LT_SET_STATE:
default:
- data[0] = var - 5;
+ *state = LOOPED_TASK_DECODE_STATE(action);
break;
- case 3:
+ case LT_CONTINUE:
break;
- case 2:
+ case LT_STOP:
return;
}
}
}
-void sub_81C71E4(u8 taskId)
+// Every "Continue" action stops instead.
+void Task_RunLoopedTask_LinkMode(u8 taskId)
{
- u32 (*func)(u32);
- s16 *data;
- u32 v1;
+ LoopedTask task;
+ s16 *state;
+ u32 action;
if (sub_8087598())
return;
- func = (u32 (*)(u32))GetWordTaskArg(taskId, 1);
- data = gTasks[taskId].data;
- v1 = func(data[0]);
- switch (v1)
- {
- case 0:
- case 1:
- data[0]++;
+
+ task = (LoopedTask)GetWordTaskArg(taskId, 1);
+ state = &gTasks[taskId].data[0];
+ action = task(*state);
+ switch (action)
+ {
+ case LT_INC_AND_STOP:
+ case LT_INC_AND_CONTINUE:
+ (*state)++;
break;
- case 4:
+ case LT_FINISH:
DestroyTask(taskId);
break;
+ // case: LT_SET_STATE:
default:
- data[0] = v1 - 5;
+ *state = LOOPED_TASK_DECODE_STATE(action);
break;
- case 2:
- case 3:
+ case LT_STOP:
+ case LT_CONTINUE:
break;
}
}
void CB2_InitPokeNav(void)
{
- gUnknown_0203CF40 = Alloc(sizeof(*gUnknown_0203CF40));
- if (gUnknown_0203CF40 == NULL)
+ gPokenavResources = Alloc(sizeof(*gPokenavResources));
+ if (gPokenavResources == NULL)
{
SetMainCallback2(CB2_ReturnToFieldWithOpenMenu);
}
else
{
- InitMainStruct(gUnknown_0203CF40);
+ InitMainStruct(gPokenavResources);
ResetTasks();
SetVBlankCallback(NULL);
CreateTask(sub_81C742C, 0);
SetMainCallback2(CB2_Pokenav);
- SetVBlankCallback(VblankCb_Pokenav);
+ SetVBlankCallback(VBlankCB_Pokenav);
}
}
@@ -886,22 +908,22 @@ void sub_81C72BC(void)
if (gPaletteFade.active)
return;
- gUnknown_0203CF40 = Alloc(sizeof(*gUnknown_0203CF40));
- if (gUnknown_0203CF40 == NULL)
+ gPokenavResources = Alloc(sizeof(*gPokenavResources));
+ if (gPokenavResources == NULL)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
else
{
- InitMainStruct(gUnknown_0203CF40);
- gUnknown_0203CF40->mode = MODE_FORCE_CALL_1;
+ InitMainStruct(gPokenavResources);
+ gPokenavResources->mode = MODE_FORCE_CALL_1;
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
SetVBlankCallback(NULL);
CreateTask(sub_81C742C, 0);
SetMainCallback2(CB2_Pokenav);
- SetVBlankCallback(VblankCb_Pokenav);
+ SetVBlankCallback(VBlankCB_Pokenav);
}
}
@@ -912,12 +934,12 @@ static void FreeVars(void)
for (i = 0; i < SUBSTRUCT_COUNT; i++)
FreeSubstruct(i);
- FREE_AND_SET_NULL(gUnknown_0203CF40);
+ FREE_AND_SET_NULL(gPokenavResources);
InitKeys();
}
-// Clears UnknownStruct_0203CF40
-static void InitMainStruct(struct UnknownStruct_0203CF40 *a0)
+// Clears PokenavResources
+static void InitMainStruct(struct PokenavResources *a0)
{
s32 i;
@@ -967,7 +989,7 @@ static void CB2_Pokenav(void)
UpdatePaletteFade();
}
-static void VblankCb_Pokenav(void)
+static void VBlankCB_Pokenav(void)
{
TransferPlttBuffer();
LoadOam();
@@ -1004,8 +1026,8 @@ void sub_81C742C(u8 taskId)
}
else if (v1 >= UNKNOWN_OFFSET)
{
- gUnknown_0861F3EC[gUnknown_0203CF40->field4][6]();
- gUnknown_0861F3EC[gUnknown_0203CF40->field4][5]();
+ gUnknown_0861F3EC[gPokenavResources->field4][6]();
+ gUnknown_0861F3EC[gPokenavResources->field4][5]();
if (sub_81C756C(v1))
{
data[0] = 4;
@@ -1030,7 +1052,7 @@ void sub_81C742C(u8 taskId)
case 5:
if (!sub_81C7738())
{
- bool32 calledFromScript = (gUnknown_0203CF40->mode != MODE_NORMAL);
+ bool32 calledFromScript = (gPokenavResources->mode != MODE_NORMAL);
sub_81C9430();
FreeVars();
@@ -1054,8 +1076,8 @@ bool32 sub_81C756C(u32 a0)
return FALSE;
sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]);
- gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1];
- gUnknown_0203CF40->field4 = index;
+ gPokenavResources->field0 = gUnknown_0861F3EC[index][1];
+ gPokenavResources->field4 = index;
return TRUE;
}
@@ -1066,7 +1088,7 @@ u32 sub_81C75D4(void)
u32 sub_81C75E0(void)
{
- return gUnknown_0203CF40->field0();
+ return gPokenavResources->field0();
}
static void InitKeys_(void)
@@ -1081,33 +1103,33 @@ void SetVBlankCallback_(IntrCallback callback)
void SetPokenavVBlankCallback(void)
{
- SetVBlankCallback(VblankCb_Pokenav);
+ SetVBlankCallback(VBlankCB_Pokenav);
}
void *AllocSubstruct(u32 index, u32 size)
{
- return gUnknown_0203CF40->field10[index] = Alloc(size);
+ return gPokenavResources->field10[index] = Alloc(size);
}
void *GetSubstructPtr(u32 index)
{
- return gUnknown_0203CF40->field10[index];
+ return gPokenavResources->field10[index];
}
void FreeSubstruct(u32 index)
{
- if (gUnknown_0203CF40->field10[index] != NULL)
- FREE_AND_SET_NULL(gUnknown_0203CF40->field10[index]);
+ if (gPokenavResources->field10[index] != NULL)
+ FREE_AND_SET_NULL(gPokenavResources->field10[index]);
}
u16 GetPokenavMode(void)
{
- return gUnknown_0203CF40->mode;
+ return gPokenavResources->mode;
}
void SetPokenavMode(u16 mode)
{
- gUnknown_0203CF40->mode = mode;
+ gPokenavResources->mode = mode;
}
void sub_81C7694(u32 a0)
@@ -1116,17 +1138,17 @@ void sub_81C7694(u32 a0)
if (value > 4)
value = 0;
- gUnknown_0203CF40->fieldA = value;
+ gPokenavResources->fieldA = value;
}
u16 sub_81C76AC(void)
{
- return gUnknown_0203CF40->fieldA;
+ return gPokenavResources->fieldA;
}
bool32 CanViewRibbonsMenu(void)
{
- return gUnknown_0203CF40->hasAnyRibbons;
+ return gPokenavResources->hasAnyRibbons;
}
bool32 sub_81C76C4(void)
@@ -1139,14 +1161,14 @@ bool32 sub_81C76C4(void)
ResetSpriteData();
FreeAllSpritePalettes();
- structPtr->unkC = sub_81C7078(sub_81C7764, 1);
+ structPtr->currentTaskId = CreateLoopedTask(LoopedTask_sub_81C7764, 1);
return TRUE;
}
u32 sub_81C76FC(void)
{
struct UnknownSubStruct_0203CF40 *structPtr = GetSubstructPtr(0);
- return sub_81C70D8(structPtr->unkC);
+ return IsLoopedTaskActive(structPtr->currentTaskId);
}
void sub_81C7710(void)
@@ -1169,7 +1191,7 @@ bool32 sub_81C7738(void)
return TRUE;
}
-u32 sub_81C7764(s32 a0)
+u32 LoopedTask_sub_81C7764(s32 a0)
{
struct UnknownSubStruct_0203CF40 *structPtr;
@@ -1234,22 +1256,22 @@ u32 sub_81C786C(void)
void sub_81C7880(void)
{
struct UnknownSubStruct_0203CF40 *structPtr = GetSubstructPtr(0);
- structPtr->unkC = sub_81C7078(sub_81C78D4, 4);
+ structPtr->currentTaskId = CreateLoopedTask(LoopedTask_sub_81C78D4, 4);
}
void sub_81C78A0(void)
{
struct UnknownSubStruct_0203CF40 *structPtr = GetSubstructPtr(0);
- structPtr->unkC = sub_81C7078(sub_81C791C, 4);
+ structPtr->currentTaskId = CreateLoopedTask(LoopedTask_sub_81C791C, 4);
}
bool32 sub_81C78C0(void)
{
struct UnknownSubStruct_0203CF40 *structPtr = GetSubstructPtr(0);
- return sub_81C70D8(structPtr->unkC);
+ return IsLoopedTaskActive(structPtr->currentTaskId);
}
-u32 sub_81C78D4(s32 a0)
+u32 LoopedTask_sub_81C78D4(s32 a0)
{
switch (a0)
{
@@ -1270,7 +1292,7 @@ u32 sub_81C78D4(s32 a0)
}
}
-u32 sub_81C791C(s32 a0)
+u32 LoopedTask_sub_81C791C(s32 a0)
{
if (ChangeBgY(0, 384, 2) <= 0)
{
@@ -1782,7 +1804,7 @@ void sub_81C817C(struct Sprite *sprite)
}
}
-bool32 sub_81C81D4(const struct BgTemplate *arg0, struct UnknownStruct_81C9160 *arg1, s32 arg2)
+bool32 sub_81C81D4(const struct BgTemplate *arg0, struct MatchCallListTemplate *arg1, s32 arg2)
{
u32 v1;
struct UnknownSubStruct_81C81D4 *structPtr;
@@ -1798,13 +1820,13 @@ bool32 sub_81C81D4(const struct BgTemplate *arg0, struct UnknownStruct_81C9160 *
if (v1 == 0)
return FALSE;
- sub_81C7078(sub_81C8254, 6);
+ CreateLoopedTask(LoopedTask_sub_81C8254, 6);
return TRUE;
}
bool32 sub_81C8224(void)
{
- return sub_81C7124(sub_81C8254);
+ return FuncIsActiveLoopedTask(LoopedTask_sub_81C8254);
}
void sub_81C8234(void)
@@ -1817,7 +1839,7 @@ void sub_81C8234(void)
FreeSubstruct(0x11);
}
-u32 sub_81C8254(s32 a0)
+u32 LoopedTask_sub_81C8254(s32 a0)
{
struct UnknownSubStruct_81C81D4 *structPtr;
@@ -1877,17 +1899,17 @@ void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0)
CopyWindowToVram(a0->windowId, 1);
}
-void sub_81C837C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1)
+void sub_81C837C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1)
{
s32 v1;
s32 v2;
// TODO: Clean this up.
- v1 = a0->unk2 - a0->unk0;
- v2 = a0->unk8;
- if (v1 > a0->unk8)
+ v1 = a0->listLength - a0->windowTopIndex;
+ v2 = a0->visibleEntries;
+ if (v1 > a0->visibleEntries)
v1 = v2;
- sub_81C83AC(a0->unk10, a0->unk0, v1, a0->unkC, 0, a1);
+ sub_81C83AC(a0->unk10, a0->windowTopIndex, v1, a0->unkC, 0, a1);
}
void sub_81C83AC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, struct UnknownInnerStruct_81C81D4 *a5)
@@ -1901,15 +1923,15 @@ void sub_81C83AC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, struct UnknownInnerStru
a5->unk0.unkE = a2;
a5->unk14 = a1;
a5->unk10 = a4;
- sub_81C7078(sub_81C83F0, 5);
+ CreateLoopedTask(LoopedTask_sub_81C83F0, 5);
}
bool32 sub_81C83E0(void)
{
- return sub_81C7124(sub_81C83F0);
+ return FuncIsActiveLoopedTask(LoopedTask_sub_81C83F0);
}
-u32 sub_81C83F0(s32 a0)
+u32 LoopedTask_sub_81C83F0(s32 a0)
{
struct UnknownInnerStruct_81C81D4 *structPtr;
u32 v1;
@@ -1951,24 +1973,24 @@ u32 sub_81C83F0(s32 a0)
}
}
-bool32 sub_81C84A4(void)
+bool32 ShouldShowUpArrow(void)
{
u16 v1;
s32 v2;
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
- return structPtr->unk888.unk0 != 0;
+ return structPtr->unk888.windowTopIndex != 0;
}
-bool32 sub_81C84C0(void)
+bool32 ShouldShowDownArrow(void)
{
- struct UnknownSubSubStruct_81C81D4 *subPtr;
+ struct MatchCallWindowState *subPtr;
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
subPtr = &structPtr->unk888;
- return subPtr->unk0 + subPtr->unk8 < subPtr->unk2;
+ return subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength;
}
@@ -1976,37 +1998,37 @@ bool32 sub_81C84C0(void)
// This has some register renaming issues (r4, r5, and r6 are all switched around), and
// for some reason it's creating two copies of subPtr->unk0.
// TODO: Now I know why it's making two copies - one of them is UnknownInnerStruct_81C81D4.
-void sub_81C84E8(s32 a0, s32 a1)
+void MatchCall_MoveWindow(s32 a0, bool32 a1)
{
s32 v1;
- struct UnknownSubSubStruct_81C81D4 *subPtr;
+ struct MatchCallWindowState *subPtr;
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
subPtr = &structPtr->unk888;
if (a0 < 0)
{
- // This is where the issue is. subPtr->unk0 is being stored in r1 and then copied to
+ // This is where the issue is. subPtr->windowTopIndex is being stored in r1 and then copied to
// r2... and then r2 is read for the if statement, r1 is read for the function call,
// and then both are clobbered as expected. Between those two uses, no writes to r1/r2
// happen; it doesn't need to be duplicated/moved at all.
- if (subPtr->unk0 + a0 < 0)
- v1 = -1 * subPtr->unk0;
+ if (subPtr->windowTopIndex + a0 < 0)
+ v1 = -1 * subPtr->windowTopIndex;
else
v1 = a0;
- if (a1 != 0)
- sub_81C83AC(subPtr->unk10, subPtr->unk0 + v1, v1 * -1, subPtr->unkC, v1, structPtr);
+ if (a1)
+ sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + v1, v1 * -1, subPtr->unkC, v1, structPtr);
}
- else if (a1 != 0)
+ else if (a1)
{
- gUnknown_0203CF44 = subPtr->unk0 + subPtr->unk8;
- if ((s32)(gUnknown_0203CF44) + a0 >= (s32)subPtr->unk2)
- v1 = subPtr->unk2 - gUnknown_0203CF44;
+ gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries;
+ if ((s32)(gUnknown_0203CF44) + a0 >= (s32)subPtr->listLength)
+ v1 = subPtr->listLength - gUnknown_0203CF44;
else
v1 = a0;
- sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, v1, subPtr->unkC, subPtr->unk8, structPtr);
+ sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, v1, subPtr->unkC, subPtr->visibleEntries, structPtr);
// Needed to prevent GCC from combining the two sub_81C83AC calls.
asm("");
}
@@ -2016,11 +2038,11 @@ void sub_81C84E8(s32 a0, s32 a1)
}
sub_81C8568(v1, structPtr);
- subPtr->unk0++;
+ subPtr->windowTopIndex++;
}
#else
NAKED
-void sub_81C84E8(s32 a0, s32 a1)
+void MatchCall_MoveWindow(s32 a0, bool32 a1)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -2098,10 +2120,10 @@ void sub_81C8568(s32 a0, struct UnknownInnerStruct_81C81D4 *a1)
else
a1->unk30 = 2;
a1->unk2C = a0;
- a1->unk28 = sub_81C7078(sub_81C85A0, 6);
+ a1->unk28 = CreateLoopedTask(LoopedTask_sub_81C85A0, 6);
}
-u32 sub_81C85A0(s32 a0)
+u32 LoopedTask_sub_81C85A0(s32 a0)
{
s32 y;
s32 v1;
@@ -2153,32 +2175,31 @@ bool32 sub_81C8630(void)
{
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
- return sub_81C70D8(structPtr->unk0.unk28);
+ return IsLoopedTaskActive(structPtr->unk0.unk28);
}
-struct UnknownSubSubStruct_81C81D4 *sub_81C8644(void)
+struct MatchCallWindowState *GetMatchCallWindowStruct(void)
{
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
return &structPtr->unk888;
}
-u32 sub_81C8658(void)
+u32 MatchCall_MoveCursorUp(void)
{
- struct UnknownSubSubStruct_81C81D4 *structPtr;
- structPtr = sub_81C8644();
+ struct MatchCallWindowState *structPtr;
+ structPtr = GetMatchCallWindowStruct();
- // Using unk6 as a timer.
- if (structPtr->unk6 != 0)
+ if (structPtr->selectedIndexOffset != 0)
{
- structPtr->unk6--;
+ structPtr->selectedIndexOffset--;
return 1;
}
else
{
- if (sub_81C84A4())
+ if (ShouldShowUpArrow())
{
- sub_81C84E8(-1, 1);
+ MatchCall_MoveWindow(-1, TRUE);
return 2;
}
else
@@ -2188,19 +2209,19 @@ u32 sub_81C8658(void)
}
}
-u32 sub_81C868C(void)
+u32 MatchCall_MoveCursorDown(void)
{
- struct UnknownSubSubStruct_81C81D4 *structPtr;
- structPtr = sub_81C8644();
+ struct MatchCallWindowState *structPtr;
+ structPtr = GetMatchCallWindowStruct();
- if (structPtr->unk0 + structPtr->unk6 < structPtr->unk2 - 1)
+ if (structPtr->windowTopIndex + structPtr->selectedIndexOffset < structPtr->listLength - 1)
{
- if (structPtr->unk6 < structPtr->unk8 - 1)
+ if (structPtr->selectedIndexOffset < structPtr->visibleEntries - 1)
{
- structPtr->unk6++;
+ structPtr->selectedIndexOffset++;
return 1;
}
- else if (!sub_81C84C0())
+ else if (!ShouldShowDownArrow())
{
return 0;
}
@@ -2209,28 +2230,28 @@ u32 sub_81C868C(void)
{
return 0;
}
- sub_81C84E8(1, 1);
+ MatchCall_MoveWindow(1, TRUE);
return 2;
}
-u32 sub_81C86CC(void)
+u32 MatchCall_PageUp(void)
{
- struct UnknownSubSubStruct_81C81D4 *structPtr;
- s32 v1;
+ struct MatchCallWindowState *structPtr;
+ s32 scroll;
- structPtr = sub_81C8644();
- if (sub_81C84A4())
+ structPtr = GetMatchCallWindowStruct();
+ if (ShouldShowUpArrow())
{
- if (structPtr->unk0 >= structPtr->unk8)
- v1 = structPtr->unk8;
+ if (structPtr->windowTopIndex >= structPtr->visibleEntries)
+ scroll = structPtr->visibleEntries;
else
- v1 = structPtr->unk0;
- sub_81C84E8(v1 * -1, 1);
+ scroll = structPtr->windowTopIndex;
+ MatchCall_MoveWindow(scroll * -1, TRUE);
return 2;
}
- else if (structPtr->unk6 != 0)
+ else if (structPtr->selectedIndexOffset != 0)
{
- structPtr->unk6 = 0;
+ structPtr->selectedIndexOffset = 0;
return 1;
}
else
@@ -2239,64 +2260,64 @@ u32 sub_81C86CC(void)
}
}
-u32 sub_81C870C(void)
+u32 MatchCall_PageDown(void)
{
- struct UnknownSubSubStruct_81C81D4 *structPtr;
- structPtr = sub_81C8644();
+ struct MatchCallWindowState *structPtr;
+ structPtr = GetMatchCallWindowStruct();
- if (sub_81C84C0())
+ if (ShouldShowDownArrow())
{
- s32 v1;
- s32 v2;
+ s32 scroll;
+ s32 windowBottomIndex;
s32 v3;
- v2 = structPtr->unk0 + structPtr->unk8;
- v1 = structPtr->unk4 - structPtr->unk0;
- if (v2 <= structPtr->unk4)
- v1 = structPtr->unk8;
- sub_81C84E8(v1, 1);
+ windowBottomIndex = structPtr->windowTopIndex + structPtr->visibleEntries;
+ scroll = structPtr->unk4 - structPtr->windowTopIndex;
+ if (windowBottomIndex <= structPtr->unk4)
+ scroll = structPtr->visibleEntries;
+ MatchCall_MoveWindow(scroll, TRUE);
return 2;
}
else
{
- s32 v1;
- s32 v2;
- if (structPtr->unk2 >= structPtr->unk8)
+ s32 cursor;
+ s32 lastVisibleIndex;
+ if (structPtr->listLength >= structPtr->visibleEntries)
{
- v1 = structPtr->unk6;
- v2 = structPtr->unk8;
+ cursor = structPtr->selectedIndexOffset;
+ lastVisibleIndex = structPtr->visibleEntries;
}
else
{
- v1 = structPtr->unk6;
- v2 = structPtr->unk2;
+ cursor = structPtr->selectedIndexOffset;
+ lastVisibleIndex = structPtr->listLength;
}
- v2 -= 1;
- if (v1 >= v2)
+ lastVisibleIndex -= 1;
+ if (cursor >= lastVisibleIndex)
{
return 0;
}
else
{
- structPtr->unk6 = v2;
+ structPtr->selectedIndexOffset = lastVisibleIndex;
return 1;
}
}
}
-u32 sub_81C875C(void)
+u32 GetSelectedMatchCall(void)
{
- struct UnknownSubSubStruct_81C81D4 *structPtr;
- structPtr = sub_81C8644();
+ struct MatchCallWindowState *structPtr;
+ structPtr = GetMatchCallWindowStruct();
- return structPtr->unk0 + structPtr->unk6;
+ return structPtr->windowTopIndex + structPtr->selectedIndexOffset;
}
-u32 sub_81C8770(void)
+u32 GetMatchCallListTopIndex(void)
{
- struct UnknownSubSubStruct_81C81D4 *structPtr;
- structPtr = sub_81C8644();
+ struct MatchCallWindowState *structPtr;
+ structPtr = GetMatchCallWindowStruct();
- return structPtr->unk0;
+ return structPtr->windowTopIndex;
}
void sub_81C877C(void)
@@ -2304,7 +2325,7 @@ void sub_81C877C(void)
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
structPtr->unk89C = 0;
- structPtr->unk8A0 = sub_81C7078(sub_81C8870, 6);
+ structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8870, 6);
}
void sub_81C87AC(u16 a0)
@@ -2312,11 +2333,11 @@ void sub_81C87AC(u16 a0)
u16 temp;
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
- temp = structPtr->unk888.unk0;
+ temp = structPtr->unk888.windowTopIndex;
temp += a0;
- structPtr->unk888.unk0 = temp;
+ structPtr->unk888.windowTopIndex = temp;
structPtr->unk89C = 0;
- structPtr->unk8A0 = sub_81C7078(sub_81C8958, 6);
+ structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8958, 6);
}
void sub_81C87F0(void)
@@ -2324,27 +2345,27 @@ void sub_81C87F0(void)
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
structPtr->unk89C = 0;
- structPtr->unk8A0 = sub_81C7078(sub_81C8A28, 6);
+ structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8A28, 6);
}
bool32 sub_81C8820(void)
{
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
- return sub_81C70D8(structPtr->unk8A0);
+ return IsLoopedTaskActive(structPtr->unk8A0);
}
void sub_81C8838(void)
{
struct UnknownSubStruct_81C81D4 *structPtr;
- struct UnknownSubSubStruct_81C81D4 *subStr;
+ struct MatchCallWindowState *subStr;
structPtr = GetSubstructPtr(0x11);
subStr = &structPtr->unk888;
- structPtr->unk0.unk38(structPtr->unk0.unk0.windowId, subStr->unk0 + subStr->unk6, (structPtr->unk0.unk0.unkA + subStr->unk6) & 0xF);
+ structPtr->unk0.unk38(structPtr->unk0.unk0.windowId, subStr->windowTopIndex + subStr->selectedIndexOffset, (structPtr->unk0.unk0.unkA + subStr->selectedIndexOffset) & 0xF);
CopyWindowToVram(structPtr->unk0.unk0.windowId, 1);
}
-u32 sub_81C8870(s32 a0)
+u32 LoopedTask_sub_81C8870(s32 a0)
{
struct UnknownSubStruct_81C81D4 *structPtr;
u16 v1;
@@ -2360,7 +2381,7 @@ u32 sub_81C8870(s32 a0)
ToggleMatchCallArrows(&structPtr->unk0, 1);
// fall-through
case 1:
- if (structPtr->unk89C != structPtr->unk888.unk6)
+ if (structPtr->unk89C != structPtr->unk888.selectedIndexOffset)
sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, 1);
structPtr->unk89C++;
@@ -2369,36 +2390,36 @@ u32 sub_81C8870(s32 a0)
if (IsDma3ManagerBusyWithBgCopy())
return 2;
- if (structPtr->unk89C != structPtr->unk888.unk8)
+ if (structPtr->unk89C != structPtr->unk888.visibleEntries)
return 6;
- if (structPtr->unk888.unk6 != 0)
- sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, structPtr->unk888.unk6);
+ if (structPtr->unk888.selectedIndexOffset != 0)
+ sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, structPtr->unk888.selectedIndexOffset);
return 0;
case 3:
if (IsDma3ManagerBusyWithBgCopy())
return 2;
- temp = &structPtr->unk888.unk6;
+ temp = &structPtr->unk888.selectedIndexOffset;
v1 = *temp;
if (v1 == 0)
return 4;
- sub_81C84E8(v1, 0);
+ MatchCall_MoveWindow(v1, FALSE);
return 0;
case 4:
v2 = sub_81C8630();
if (v2)
return 2;
- structPtr->unk888.unk6 = v2;
+ structPtr->unk888.selectedIndexOffset = v2;
return 4;
default:
return 4;
}
}
-u32 sub_81C8958(s32 a0)
+u32 LoopedTask_sub_81C8958(s32 a0)
{
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
@@ -2437,10 +2458,10 @@ u32 sub_81C8958(s32 a0)
return 0;
}
-u32 sub_81C8A28(s32 a0)
+u32 LoopedTask_sub_81C8A28(s32 a0)
{
struct UnknownSubStruct_81C81D4 *structPtr;
- struct UnknownSubSubStruct_81C81D4 *subPtr888;
+ struct MatchCallWindowState *subPtr888;
register struct UnknownInnerStruct_81C81D4 *subPtr0 asm("r2");
s32 v4;
@@ -2470,17 +2491,17 @@ u32 sub_81C8A28(s32 a0)
v3 = &structPtr->unk89C;
v1 = *v3 + 1;
*v3 = v1;
- if (v1 < structPtr->unk888.unk8)
+ if (v1 < structPtr->unk888.visibleEntries)
{
sub_81C8B70(&subPtr0->unk0, v1, 1);
return 2;
}
*v3 = 0;
- if (subPtr888->unk2 <= subPtr888->unk8)
+ if (subPtr888->listLength <= subPtr888->visibleEntries)
{
register u32 temp asm("r0");
- temp = subPtr888->unk0;
+ temp = subPtr888->windowTopIndex;
if (temp == 0)
return 9;
v2 = temp;
@@ -2488,20 +2509,20 @@ u32 sub_81C8A28(s32 a0)
else
{
register s32 temp asm("r1");
- v2 = subPtr888->unk0 + subPtr888->unk8;
- temp = (s32)subPtr888->unk2;
+ v2 = subPtr888->windowTopIndex + subPtr888->visibleEntries;
+ temp = (s32)subPtr888->listLength;
if (v2 <= temp)
return 9;
v2 -= temp;
}
v4 = v2 * -1;
sub_81C8B70(&subPtr0->unk0, v4, v2);
- subPtr888->unk6 = v2;
+ subPtr888->selectedIndexOffset = v2;
*v3 = v4;
return 0;
}
case 2:
- sub_81C84E8(structPtr->unk89C, 0);
+ MatchCall_MoveWindow(structPtr->unk89C, FALSE);
return 0;
case 3:
if (sub_81C8630())
@@ -2510,14 +2531,14 @@ u32 sub_81C8A28(s32 a0)
structPtr->unk89C = 0;
return 1;
case 4:
- sub_81C83AC(subPtr888->unk10, subPtr888->unk0 + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->unk0);
+ sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->unk0);
return 0;
case 5:
if (sub_81C83E0())
return 2;
v4 = ++structPtr->unk89C;
- if (v4 >= subPtr888->unk2 || v4 >= subPtr888->unk8)
+ if (v4 >= subPtr888->listLength || v4 >= subPtr888->visibleEntries)
return 1;
return 9;
case 6:
@@ -2593,24 +2614,24 @@ void sub_81C8C64(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1)
}
}
-void sub_81C8CB4(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1)
+void sub_81C8CB4(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1)
{
u8 colors[3];
memcpy(colors, sPokenavColors_0861FBE4, ARRAY_COUNT(sPokenavColors_0861FBE4));
- a1->unk34(a0->unk10 + a0->unkC * a0->unk0, a1->unkTextBuffer);
- a1->unk38(a1->unk0.windowId, a0->unk0, a1->unk0.unkA);
+ a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer);
+ a1->unk38(a1->unk0.windowId, a0->windowTopIndex, a1->unk0.unkA);
FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(4), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16);
AddTextPrinterParameterized3(a1->unk0.windowId, a1->unk0.fontId, 8, (a1->unk0.unkA * 16) + 1, colors, TEXT_SPEED_FF, a1->unkTextBuffer);
sub_81C8C64(&a1->unk0, 1);
CopyWindowRectToVram(a1->unk0.windowId, 3, 0, a1->unk0.unkA * 2, a1->unk0.unk4, 2);
}
-void sub_81C8D4C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1)
+void sub_81C8D4C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1)
{
- a1->unk34(a0->unk10 + a0->unkC * a0->unk0, a1->unkTextBuffer);
+ a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer);
FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(1), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16);
AddTextPrinterParameterized(a1->unk0.windowId, a1->unk0.fontId, a1->unkTextBuffer, 8, a1->unk0.unkA * 16 + 1, TEXT_SPEED_FF, NULL);
sub_81C8C64(&a1->unk0, 0);
@@ -2643,14 +2664,14 @@ void PrintMatchCallFieldNames(struct UnknownInnerStruct_81C81D4 *a0, u32 fieldId
CopyWindowRectToVram(a0->unk0.windowId, 2, 0, r4 << 1, a0->unk0.unk4, 2);
}
-void sub_81C8E54(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1, u32 a2)
+void sub_81C8E54(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1, u32 a2)
{
const u8 *str;
u32 r6;
r6 = (a1->unk0.unkA + sUnknown_0861FBF7[a2]) & 0xF;
- str = sub_81CAFD8(a0->unk0, a2);
+ str = sub_81CAFD8(a0->windowTopIndex, a2);
if (str != NULL) {
sub_81DB620(a1->unk0.windowId, 1, r6 * 2, a1->unk0.unk4 - 1, 2);
AddTextPrinterParameterized(a1->unk0.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL);
@@ -2670,7 +2691,7 @@ void sub_81C8ED0(void)
sub_81C795C(sMatchcallArrowPalette);
}
-void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStruct_81C81D4 *a1)
+void sub_81C8EF8(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1)
{
register u32 spriteId asm("r3");
s16 temp;
@@ -2679,7 +2700,7 @@ void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownInnerStru
a1->rightArrow = &gSprites[spriteId];
temp = a1->unk0.unk2 * 8 + (a1->unk0.unk4 - 1) * 4;
- spriteId = (u8)CreateSprite(&sMatchCallUpDownArrowSprite, temp, a1->unk0.unk3 * 8 + a0->unk8 * 16, 7);
+ spriteId = (u8)CreateSprite(&sMatchCallUpDownArrowSprite, temp, a1->unk0.unk3 * 8 + a0->visibleEntries * 16, 7);
a1->downArrow = &gSprites[spriteId];
a1->downArrow->oam.tileNum += 2;
a1->downArrow->callback = SpriteCB_MatchCallDownArrow;
@@ -2722,12 +2743,12 @@ void SpriteCB_MatchCallRightArrow(struct Sprite *sprite)
{
struct UnknownSubStruct_81C81D4 *structPtr;
structPtr = GetSubstructPtr(0x11);
- sprite->pos2.y = structPtr->unk888.unk6 << 4;
+ sprite->pos2.y = structPtr->unk888.selectedIndexOffset << 4;
}
void SpriteCB_MatchCallDownArrow(struct Sprite *sprite)
{
- if (sprite->data[7] == 0 && sub_81C84C0())
+ if (sprite->data[7] == 0 && ShouldShowDownArrow())
sprite->invisible = FALSE;
else
sprite->invisible = TRUE;
@@ -2745,7 +2766,7 @@ void SpriteCB_MatchCallDownArrow(struct Sprite *sprite)
void SpriteCB_MatchCallUpArrow(struct Sprite *sprite)
{
- if (sprite->data[7] == 0 && sub_81C84A4())
+ if (sprite->data[7] == 0 && ShouldShowUpArrow())
sprite->invisible = FALSE;
else
sprite->invisible = TRUE;
@@ -2769,44 +2790,44 @@ void ToggleMatchCallVerticalArrows(bool32 shouldHide)
structPtr->unk0.downArrow->data[7] = shouldHide;
}
-void sub_81C9160(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownStruct_81C9160 *a1)
+void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *a1)
{
u32 unused1 = a0->unk10 = a1->unk0;
u32 v0 = a1->unk6;
u32 zero = 0;
- u32 unused2 = a0->unk0 = v0;
- u32 v1 = a0->unk2 = a1->unk4;
+ u32 unused2 = a0->windowTopIndex = v0;
+ u32 v1 = a0->listLength = a1->unk4;
a0->unkC = a1->unk8;
- a0->unk8 = a1->unkC;
- if (a0->unk8 >= (u16)v1)
+ a0->visibleEntries = a1->unkC;
+ if (a0->visibleEntries >= (u16)v1)
{
- a0->unk0 = 0;
+ a0->windowTopIndex = 0;
a0->unk4 = 0;
- a0->unk6 = v0;
+ a0->selectedIndexOffset = v0;
}
else
{
s32 v2;
- a0->unk4 = a0->unk2 - a0->unk8;
- v2 = a0->unk0 + a0->unk8;
- if (v2 > a0->unk2) {
- a0->unk6 = v2 - a0->unk2;
- a0->unk0 = v0 - a0->unk6;
+ a0->unk4 = a0->listLength - a0->visibleEntries;
+ v2 = a0->windowTopIndex + a0->visibleEntries;
+ if (v2 > a0->listLength) {
+ a0->selectedIndexOffset = v2 - a0->listLength;
+ a0->windowTopIndex = v0 - a0->selectedIndexOffset;
}
else
{
- a0->unk6 = 0;
+ a0->selectedIndexOffset = 0;
}
}
}
-u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *a1, struct UnknownStruct_81C9160 *a2, s32 a3)
+u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3)
{
register u32 raw_bg asm("r4") = ((a1->bg) << 30);
u8 bg = raw_bg >> 30;
u32 unknown = 0;
- struct WindowTemplate template;
+ struct WindowTemplate window;
u8 bg_again;
a0->unk0.bg = bg;
@@ -2819,15 +2840,15 @@ u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *
a0->unk0.unk4 = a2->unkA;
a0->unk0.fontId = a2->unkE;
- template.bg = raw_bg >> 30;
- template.tilemapLeft = a2->unk9;
- template.tilemapTop = 0;
- template.width = a2->unkA;
- template.height = 32;
- template.paletteNum = a2->unkD;
- template.baseBlock = a3 + 2;
-
- a0->unk0.windowId = AddWindow(&template);
+ window.bg = raw_bg >> 30;
+ window.tilemapLeft = a2->unk9;
+ window.tilemapTop = 0;
+ window.width = a2->unkA;
+ window.height = 32;
+ window.paletteNum = a2->unkD;
+ window.baseBlock = a3 + 2;
+
+ a0->unk0.windowId = AddWindow(&window);
if (a0->unk0.windowId == 0xFF)
{
return 0;