summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/link_rfu_3.s2
-rw-r--r--asm/mystery_gift_menu.s403
-rw-r--r--data/data_83FECCC.s4
-rw-r--r--data/mystery_gift_menu.s22
-rw-r--r--data/specials.inc2
-rw-r--r--include/mevent.h11
-rw-r--r--src/menews_jisan.c2
-rw-r--r--src/mevent.c24
-rw-r--r--src/mevent_8145654.c8
-rw-r--r--src/mevent_server.c4
-rw-r--r--src/mystery_gift_menu.c211
-rw-r--r--src/script.c4
12 files changed, 258 insertions, 439 deletions
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index b112e2ac3..f78d77079 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -4169,7 +4169,7 @@ _08117C12:
adds r1, 0x14
ldr r3, _08117C38 @ =gStringVar4
movs r2, 0
- bl sub_81427A0
+ bl mevent_message_print_and_prompt_yes_no
lsls r0, 24
asrs r4, r0, 24
cmp r4, 0
diff --git a/asm/mystery_gift_menu.s b/asm/mystery_gift_menu.s
index 1a86b6797..7a2fc20b1 100644
--- a/asm/mystery_gift_menu.s
+++ b/asm/mystery_gift_menu.s
@@ -5,389 +5,6 @@
.text
- thumb_func_start sub_81427A0
-sub_81427A0: @ 81427A0
- push {r4-r6,lr}
- sub sp, 0x1C
- adds r5, r0, 0
- adds r4, r1, 0
- adds r1, r3, 0
- lsls r2, 24
- lsrs r6, r2, 24
- ldrb r0, [r5]
- cmp r0, 0x1
- beq _08142834
- cmp r0, 0x1
- bgt _081427BE
- cmp r0, 0
- beq _081427CA
- b _081428E6
-_081427BE:
- cmp r0, 0x2
- beq _0814288C
- cmp r0, 0xFF
- bne _081427C8
- b _081428C2
-_081427C8:
- b _081428E6
-_081427CA:
- ldr r0, _081427D8 @ =gStringVar4
- bl StringExpandPlaceholders
- cmp r6, 0
- bne _081427E0
- ldr r0, _081427DC @ =gUnknown_8466D90
- b _081427E2
- .align 2, 0
-_081427D8: .4byte gStringVar4
-_081427DC: .4byte gUnknown_8466D90
-_081427E0:
- ldr r0, _08142828 @ =gUnknown_8466D98
-_081427E2:
- bl AddWindow
- strh r0, [r4]
- ldrb r0, [r4]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r4]
- movs r2, 0
- str r2, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- ldr r1, _0814282C @ =sMG_Ereader_TextColor_2
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r1, _08142830 @ =gStringVar4
- str r1, [sp, 0x10]
- movs r1, 0x2
- movs r3, 0x2
- bl AddTextPrinterParametrized2
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0xF
- bl DrawTextBorderOuter
- ldrb r0, [r4]
- movs r1, 0x2
- bl CopyWindowToVram
- ldrb r0, [r4]
- bl PutWindowTilemap
- b _0814287E
- .align 2, 0
-_08142828: .4byte gUnknown_8466D98
-_0814282C: .4byte sMG_Ereader_TextColor_2
-_08142830: .4byte gStringVar4
-_08142834:
- ldr r0, _08142850 @ =gUnknown_8466DB0
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x14]
- str r1, [sp, 0x18]
- cmp r6, 0
- bne _08142858
- ldr r0, _08142854 @ =0xff00ffff
- ldr r1, [sp, 0x14]
- ands r1, r0
- movs r0, 0x90
- lsls r0, 12
- b _08142862
- .align 2, 0
-_08142850: .4byte gUnknown_8466DB0
-_08142854: .4byte 0xff00ffff
-_08142858:
- ldr r0, _08142888 @ =0xff00ffff
- ldr r1, [sp, 0x14]
- ands r1, r0
- movs r0, 0xF0
- lsls r0, 12
-_08142862:
- orrs r1, r0
- str r1, [sp, 0x14]
- movs r0, 0xA
- str r0, [sp]
- movs r0, 0xE
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- add r0, sp, 0x14
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl sub_810FF60
-_0814287E:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _081428E6
- .align 2, 0
-_08142888: .4byte 0xff00ffff
-_0814288C:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r6, r0, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x2
- bhi _081428E6
- movs r0, 0
- strb r0, [r5]
- ldrb r0, [r4]
- bl rbox_fill_rectangle
- ldrb r0, [r4]
- bl ClearWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x1
- bl CopyWindowToVram
- ldrb r0, [r4]
- bl RemoveWindow
- adds r0, r6, 0
- b _081428EA
-_081428C2:
- movs r0, 0
- strb r0, [r5]
- ldrb r0, [r4]
- bl rbox_fill_rectangle
- ldrb r0, [r4]
- bl ClearWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x1
- bl CopyWindowToVram
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0x1
- negs r0, r0
- b _081428EA
-_081428E6:
- movs r0, 0x2
- negs r0, r0
-_081428EA:
- add sp, 0x1C
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_81427A0
-
- thumb_func_start sub_81428F4
-sub_81428F4: @ 81428F4
- push {r4-r6,lr}
- sub sp, 0x14
- adds r6, r0, 0
- adds r5, r1, 0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08142994
- cmp r0, 0x1
- bgt _0814290C
- cmp r0, 0
- beq _08142914
- b _08142A38
-_0814290C:
- cmp r0, 0xFF
- bne _08142912
- b _08142A14
-_08142912:
- b _08142A38
-_08142914:
- cmp r2, 0
- bne _0814292C
- ldr r0, _08142924 @ =gStringVar4
- ldr r1, _08142928 @ =gUnknown_841EA86
- bl StringExpandPlaceholders
- b _08142934
- .align 2, 0
-_08142924: .4byte gStringVar4
-_08142928: .4byte gUnknown_841EA86
-_0814292C:
- ldr r0, _08142984 @ =gStringVar4
- ldr r1, _08142988 @ =gUnknown_841EAB7
- bl StringExpandPlaceholders
-_08142934:
- ldr r0, _0814298C @ =gUnknown_8466DA0
- bl AddWindow
- strh r0, [r5]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r5]
- movs r2, 0
- str r2, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- ldr r1, _08142990 @ =sMG_Ereader_TextColor_2
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r1, _08142984 @ =gStringVar4
- str r1, [sp, 0x10]
- movs r1, 0x2
- movs r3, 0x2
- bl AddTextPrinterParametrized2
- ldrb r0, [r5]
- movs r1, 0x1
- movs r2, 0xF
- bl DrawTextBorderOuter
- ldrb r0, [r5]
- movs r1, 0x2
- bl CopyWindowToVram
- ldrb r0, [r5]
- bl PutWindowTilemap
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- b _08142A38
- .align 2, 0
-_08142984: .4byte gStringVar4
-_08142988: .4byte gUnknown_841EAB7
-_0814298C: .4byte gUnknown_8466DA0
-_08142990: .4byte sMG_Ereader_TextColor_2
-_08142994:
- cmp r3, 0
- beq _081429BC
- cmp r2, 0
- bne _081429AC
- ldr r0, _081429A4 @ =gUnknown_8466DC0
- ldr r1, _081429A8 @ =gUnknown_8466E90
- b _081429D4
- .align 2, 0
-_081429A4: .4byte gUnknown_8466DC0
-_081429A8: .4byte gUnknown_8466E90
-_081429AC:
- ldr r0, _081429B4 @ =gUnknown_8466DC8
- ldr r1, _081429B8 @ =gUnknown_8466EC0
- b _081429D4
- .align 2, 0
-_081429B4: .4byte gUnknown_8466DC8
-_081429B8: .4byte gUnknown_8466EC0
-_081429BC:
- cmp r2, 0
- bne _081429D0
- ldr r0, _081429C8 @ =gUnknown_8466DB8
- ldr r1, _081429CC @ =gUnknown_8466E78
- b _081429D4
- .align 2, 0
-_081429C8: .4byte gUnknown_8466DB8
-_081429CC: .4byte gUnknown_8466E78
-_081429D0:
- ldr r0, _08142A0C @ =gUnknown_8466DC0
- ldr r1, _08142A10 @ =gUnknown_8466EA8
-_081429D4:
- movs r2, 0xE0
- str r2, [sp]
- movs r2, 0x1
- movs r3, 0xA
- bl DoMysteryGiftListMenu
- adds r4, r0, 0
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _08142A38
- movs r0, 0
- strb r0, [r6]
- ldrb r0, [r5]
- bl rbox_fill_rectangle
- ldrb r0, [r5]
- bl ClearWindowTilemap
- ldrb r0, [r5]
- movs r1, 0x1
- bl CopyWindowToVram
- ldrb r0, [r5]
- bl RemoveWindow
- adds r0, r4, 0
- b _08142A3C
- .align 2, 0
-_08142A0C: .4byte gUnknown_8466DC0
-_08142A10: .4byte gUnknown_8466EA8
-_08142A14:
- movs r0, 0
- strb r0, [r6]
- ldrb r0, [r5]
- bl rbox_fill_rectangle
- ldrb r0, [r5]
- bl ClearWindowTilemap
- ldrb r0, [r5]
- movs r1, 0x1
- bl CopyWindowToVram
- ldrb r0, [r5]
- bl RemoveWindow
- movs r0, 0x2
- negs r0, r0
- b _08142A3C
-_08142A38:
- movs r0, 0x1
- negs r0, r0
-_08142A3C:
- add sp, 0x14
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_81428F4
-
- thumb_func_start sub_8142A44
-sub_8142A44: @ 8142A44
- push {lr}
- cmp r0, 0
- beq _08142A50
- bl sub_8143E1C
- b _08142A54
-_08142A50:
- bl sub_8143FC8
-_08142A54:
- pop {r1}
- bx r1
- thumb_func_end sub_8142A44
-
- thumb_func_start sub_8142A58
-sub_8142A58: @ 8142A58
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrb r0, [r5]
- cmp r0, 0
- beq _08142A68
- cmp r0, 0x1
- beq _08142A90
- b _08142AAC
-_08142A68:
- cmp r1, 0
- bne _08142A80
- bl sav1_get_mevent_buffer_1
- adds r4, r0, 0
- bl sav1_get_mevent_buffer_2
- adds r1, r0, 0
- adds r0, r4, 0
- bl sub_8145654
- b _08142A88
-_08142A80:
- bl sub_8143D58
- bl sub_8146288
-_08142A88:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _08142AAC
-_08142A90:
- cmp r1, 0
- bne _08142A9E
- bl sub_814571C
-_08142A98:
- cmp r0, 0
- bne _08142AA4
- b _08142AAC
-_08142A9E:
- bl sub_8146318
- b _08142A98
-_08142AA4:
- movs r0, 0
- strb r0, [r5]
- movs r0, 0x1
- b _08142AAE
-_08142AAC:
- movs r0, 0
-_08142AAE:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8142A58
-
thumb_func_start sub_8142AB4
sub_8142AB4: @ 8142AB4
push {lr}
@@ -444,7 +61,7 @@ _08142B0C:
ldr r3, _08142B1C @ =gUnknown_841EC99
_08142B0E:
movs r2, 0x1
- bl sub_81427A0
+ bl mevent_message_print_and_prompt_yes_no
lsls r0, 24
asrs r0, 24
pop {r1}
@@ -1012,11 +629,11 @@ _08142F6A:
_08142F8A:
movs r0, 0
strb r0, [r5, 0xC]
- bl sub_8143FC8
+ bl ValidateReceivedWonderNews
b _08142F9A
_08142F94:
strb r1, [r5, 0xC]
- bl sub_8143E1C
+ bl ValidateReceivedWonderCard
_08142F9A:
cmp r0, 0x1
bne _08142FA0
@@ -1107,7 +724,7 @@ _08143036:
_08143042:
bl ClearTextWindow
ldrb r0, [r5, 0xC]
- bl sub_8142A44
+ bl ValidateCardOrNews
cmp r0, 0
beq _08143052
b _081434C4
@@ -1259,7 +876,7 @@ _08143174:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0
- bl sub_81427A0
+ bl mevent_message_print_and_prompt_yes_no
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0x1
@@ -1286,7 +903,7 @@ _081431B0:
ldr r3, _081431D8 @ =gUnknown_841E7F2
adds r1, r5, 0
movs r2, 0
- bl sub_81427A0
+ bl mevent_message_print_and_prompt_yes_no
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0x1
@@ -1310,7 +927,7 @@ _081431E0:
ldr r3, _08143204 @ =gUnknown_841E823
adds r1, r5, 0
movs r2, 0
- bl sub_81427A0
+ bl mevent_message_print_and_prompt_yes_no
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0x1
@@ -1430,7 +1047,7 @@ _081432CC:
adds r0, r5, 0
adds r0, 0x9
ldrb r1, [r5, 0xC]
- bl sub_8142A58
+ bl HandleLoadWonderCardOrNews
cmp r0, 0
bne _081432DC
b _081435C6
@@ -1507,7 +1124,7 @@ _0814335A:
adds r1, r5, 0
movs r3, 0x1
_08143364:
- bl sub_81428F4
+ bl HandleMysteryGiftListMenu
adds r1, r0, 0
cmp r1, 0x1
beq _08143386
@@ -1571,7 +1188,7 @@ _081433D2:
ldr r3, _081433F8 @ =gUnknown_841ECF9
adds r1, r5, 0
movs r2, 0x1
- bl sub_81427A0
+ bl mevent_message_print_and_prompt_yes_no
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0x1
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index 8fb1d4533..dae35f9b3 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -2516,10 +2516,10 @@ gUnknown_841EA3F:: @ 841EA3F
gUnknown_841EA6F:: @ 841EA6F
.incbin "baserom.gba", 0x41EA6F, 0x17
-gUnknown_841EA86:: @ 841EA86
+gText_WhatToDoWithCards:: @ 841EA86
.incbin "baserom.gba", 0x41EA86, 0x31
-gUnknown_841EAB7:: @ 841EAB7
+gText_WhatToDoWithNews:: @ 841EAB7
.incbin "baserom.gba", 0x41EAB7, 0x30
gUnknown_841EAE7:: @ 841EAE7
diff --git a/data/mystery_gift_menu.s b/data/mystery_gift_menu.s
index 0b7046eb1..7f891e2e5 100644
--- a/data/mystery_gift_menu.s
+++ b/data/mystery_gift_menu.s
@@ -2,28 +2,28 @@
.align 2
-gUnknown_8466D90:: @ 8466D90
+sWindowTemplate_PromptYesOrNo_Width28:: @ 8466D90
.incbin "baserom.gba", 0x466D90, 0x8
-gUnknown_8466D98:: @ 8466D98
+sWindowTemplate_PromptYesOrNo_Width20:: @ 8466D98
.incbin "baserom.gba", 0x466D98, 0x8
-gUnknown_8466DA0:: @ 8466DA0
+sMysteryGiftMenuWindowTemplate:: @ 8466DA0
.incbin "baserom.gba", 0x466DA0, 0x8
sWindowTemplate_ThreeOptions:: @ 8466DA8
.incbin "baserom.gba", 0x466DA8, 0x8
-gUnknown_8466DB0:: @ 8466DB0
+sWindowTemplate_YesNoBox:: @ 8466DB0
.incbin "baserom.gba", 0x466DB0, 0x8
-gUnknown_8466DB8:: @ 8466DB8
+sWindowTemplate_7by8:: @ 8466DB8
.incbin "baserom.gba", 0x466DB8, 0x8
-gUnknown_8466DC0:: @ 8466DC0
+sWindowTemplate_7by6:: @ 8466DC0
.incbin "baserom.gba", 0x466DC0, 0x8
-gUnknown_8466DC8:: @ 8466DC8
+sWindowTemplate_7by4:: @ 8466DC8
.incbin "baserom.gba", 0x466DC8, 0x8
sListMenuItems_CardsOrNews:: @ 8466DD0
@@ -35,16 +35,16 @@ sListMenuItems_WirelessOrFriend:: @ 8466DE8
sListMenuTemplate_ThreeOptions:: @ 8466E00
.incbin "baserom.gba", 0x466E00, 0x78
-gUnknown_8466E78:: @ 8466E78
+sListMenu_ReceiveSendToss:: @ 8466E78
.incbin "baserom.gba", 0x466E78, 0x18
-gUnknown_8466E90:: @ 8466E90
+sListMenu_ReceiveToss:: @ 8466E90
.incbin "baserom.gba", 0x466E90, 0x18
-gUnknown_8466EA8:: @ 8466EA8
+sListMenu_ReceiveSend:: @ 8466EA8
.incbin "baserom.gba", 0x466EA8, 0x18
-gUnknown_8466EC0:: @ 8466EC0
+sListMenu_Receive:: @ 8466EC0
.incbin "baserom.gba", 0x466EC0, 0x28
sMG_Ereader_TextColor_1:: @ 8466EE8
diff --git a/data/specials.inc b/data/specials.inc
index f3c71d1bd..cb39cae1e 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -393,7 +393,7 @@ gSpecials:: @ 815FD60
def_special sub_812B220
def_special sub_812B234
def_special sub_812B248
- def_special sub_8143FC8
+ def_special ValidateReceivedWonderNews
def_special sub_810B810
def_special sub_811999C
def_special sp182_move_string
diff --git a/include/mevent.h b/include/mevent.h
index d940b212c..7f5206359 100644
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -33,12 +33,13 @@ struct MEvent_Str_2
u8 fill_00[0x40];
};
-struct MEventBuffer_3120_Sub * sub_8143D58(void);
-struct MEventBuffer_32E0_Sub * sav1_get_mevent_buffer_1(void);
+struct MEventBuffer_3120_Sub * GetSavedWonderNews(void);
+struct MEventBuffer_32E0_Sub * GetSavedWonderCard(void);
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void);
struct MysteryEventStruct * sub_8143D94(void);
bool32 sub_8143DC8(const struct MEventBuffer_3120_Sub * src);
-bool32 sub_8143E1C(void);
+bool32 ValidateReceivedWonderCard(void);
+bool32 ValidateReceivedWonderNews(void);
bool32 sub_8143EF4(const u8 * src);
bool32 sub_8143F68(const struct MEventBuffer_32E0_Sub * data);
void sub_814410C(struct MEventBuffer_32E0_Sub * buffer);
@@ -49,5 +50,9 @@ u32 sub_8144418(const u16 * a0, const struct MEventStruct_Unk1442CC * a1, void *
u32 sub_8144434(const u16 * a0, const struct MEventStruct_Unk1442CC * a1, void * unused);
bool32 sub_8144474(const struct MEventStruct_Unk1442CC * a0, const u16 * a1);
u16 sub_81444B0(const struct MEventStruct_Unk1442CC * a0, u32 command);
+bool32 InitWonderCardResources(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6);
+bool32 InitWonderNewsResources(const struct MEventBuffer_3120_Sub * a0);
+s32 FadeToWonderCardMenu(void);
+s32 FadeToWonderNewsMenu(void);
#endif //GUARD_MEVENT_H
diff --git a/src/menews_jisan.c b/src/menews_jisan.c
index 530762990..c6413b7b2 100644
--- a/src/menews_jisan.c
+++ b/src/menews_jisan.c
@@ -59,7 +59,7 @@ u16 sub_8146CE8(void)
struct MysteryEventStruct *r4 = sub_8143D94();
u16 r5;
- if (!sub_806E2BC() || !sub_8143E1C())
+ if (!sub_806E2BC() || !ValidateReceivedWonderCard())
return 0;
r5 = sub_8146E0C(r4);
diff --git a/src/mevent.c b/src/mevent.c
index 9ea4714ee..9d110616f 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -490,12 +490,12 @@ void sub_8143D24(void)
sub_80BDE28();
}
-struct MEventBuffer_3120_Sub * sub_8143D58(void)
+struct MEventBuffer_3120_Sub * GetSavedWonderNews(void)
{
return &gSaveBlock1Ptr->unk_3120.buffer_000.data;
}
-struct MEventBuffer_32E0_Sub * sav1_get_mevent_buffer_1(void)
+struct MEventBuffer_32E0_Sub * GetSavedWonderCard(void)
{
return &gSaveBlock1Ptr->unk_3120.buffer_1c0.data;
}
@@ -530,7 +530,7 @@ bool32 sub_8143DC8(const struct MEventBuffer_3120_Sub * src)
return TRUE;
}
-bool32 sub_8143E1C(void)
+bool32 ValidateReceivedWonderCard(void)
{
if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_3120.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_3120.buffer_000.crc)
return FALSE;
@@ -556,7 +556,7 @@ bool32 sub_8143E78(void)
void sub_8143E9C(void)
{
- CpuFill32(0, sub_8143D58(), sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data));
+ CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data));
gSaveBlock1Ptr->unk_3120.buffer_000.crc = 0;
}
@@ -570,7 +570,7 @@ bool32 sub_8143EF4(const u8 * src)
{
const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->unk_3120.buffer_000.data;
u32 i;
- if (!sub_8143E1C())
+ if (!ValidateReceivedWonderCard())
return FALSE;
for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++)
{
@@ -606,7 +606,7 @@ bool32 sub_8143F68(const struct MEventBuffer_32E0_Sub * data)
return TRUE;
}
-bool32 sub_8143FC8(void)
+bool32 ValidateReceivedWonderNews(void)
{
if (gSaveBlock1Ptr->unk_3120.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_3120.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)))
return FALSE;
@@ -654,7 +654,7 @@ void sub_81440B4(void)
u16 sub_81440E8(void)
{
- if (sub_8143FC8())
+ if (ValidateReceivedWonderNews())
return gSaveBlock1Ptr->unk_3120.buffer_1c0.data.unk_00;
return 0;
}
@@ -721,7 +721,7 @@ bool32 sub_81441F0(const u16 * data)
s32 sub_8144218(void)
{
struct MEventBuffer_32E0_Sub * data;
- if (!sub_8143FC8())
+ if (!ValidateReceivedWonderNews())
return 0;
data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data;
if (data->unk_08_0 != 1)
@@ -759,11 +759,11 @@ void sub_81442CC(struct MEventStruct_Unk1442CC * data)
data->unk_08 = 1;
data->unk_0C = 1;
data->unk_10 = 1;
- if (sub_8143FC8())
+ if (ValidateReceivedWonderNews())
{
- data->unk_14 = sav1_get_mevent_buffer_1()->unk_00;
+ data->unk_14 = GetSavedWonderCard()->unk_00;
data->unk_20 = *sav1_get_mevent_buffer_2();
- data->unk_44 = sav1_get_mevent_buffer_1()->unk_09;
+ data->unk_44 = GetSavedWonderCard()->unk_09;
}
else
data->unk_14 = 0;
@@ -945,7 +945,7 @@ bool32 sub_81446D0(u16 a0)
gUnknown_203F3BC = FALSE;
if (a0 == 0)
return FALSE;
- if (!sub_8143FC8())
+ if (!ValidateReceivedWonderNews())
return FALSE;
if (gSaveBlock1Ptr->unk_3120.buffer_1c0.data.unk_00 != a0)
return FALSE;
diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c
index 7d5cc8897..e17eda2c4 100644
--- a/src/mevent_8145654.c
+++ b/src/mevent_8145654.c
@@ -126,7 +126,7 @@ const struct UnkStruct_8467FB8 gUnknown_8467FB8[8] = {
{1, 0, 0, 7, gUnknown_8467A7C, gUnknown_8467CAC, gUnknown_846716C}
};
-bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6)
+bool32 InitWonderCardResources(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6)
{
if (r5 == NULL || r6 == NULL)
return FALSE;
@@ -155,7 +155,7 @@ void sub_81456F0(void)
}
}
-s32 sub_814571C(void)
+s32 FadeToWonderCardMenu(void)
{
if (gUnknown_203F3C8 == NULL)
return -1;
@@ -508,7 +508,7 @@ const struct UnkStruct_8467FB8 gUnknown_8468720[] = {
{1, 0, 0, 0, gUnknown_84685B4, gUnknown_8468644, gUnknown_84680A0}
};
-bool32 sub_8146288(const struct MEventBuffer_3120_Sub * a0)
+bool32 InitWonderNewsResources(const struct MEventBuffer_3120_Sub * a0)
{
if (a0 == NULL)
return FALSE;
@@ -533,7 +533,7 @@ void sub_81462EC(void)
}
}
-s32 sub_8146318(void)
+s32 FadeToWonderNewsMenu(void)
{
if (gUnknown_203F3CC == NULL)
return -1;
diff --git a/src/mevent_server.c b/src/mevent_server.c
index 5e384ae0b..1443e7007 100644
--- a/src/mevent_server.c
+++ b/src/mevent_server.c
@@ -526,12 +526,12 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
break;
case 26:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 506);
- memcpy(svr->mevent_32e0, sav1_get_mevent_buffer_1(), 332);
+ memcpy(svr->mevent_32e0, GetSavedWonderCard(), 332);
sub_814410C(svr->mevent_32e0);
break;
case 27:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 512);
- memcpy(svr->mevent_3120, sub_8143D58(), 444);
+ memcpy(svr->mevent_3120, GetSavedWonderNews(), 444);
break;
case 28:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 517);
diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c
index b0d00035c..f7bf7a207 100644
--- a/src/mystery_gift_menu.c
+++ b/src/mystery_gift_menu.c
@@ -17,15 +17,9 @@
#include "list_menu.h"
#include "link_rfu.h"
#include "string_util.h"
+#include "mevent.h"
#include "constants/songs.h"
-extern const struct WindowTemplate sWindowTemplate_ThreeOptions;
-extern const struct ListMenuItem sListMenuItems_CardsOrNews[];
-extern const struct ListMenuItem sListMenuItems_WirelessOrFriend[];
-extern const struct ListMenuTemplate sListMenuTemplate_ThreeOptions;
-extern const struct TextColor sMG_Ereader_TextColor_1;
-extern const struct TextColor sMG_Ereader_TextColor_2;
-
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
EWRAM_DATA bool8 gGiftIsFromEReader = FALSE;
@@ -117,6 +111,24 @@ static const struct WindowTemplate sMainWindows[] = {
}
};
+extern const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width28;
+extern const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width20;
+extern const struct WindowTemplate sMysteryGiftMenuWindowTemplate;
+extern const struct WindowTemplate sWindowTemplate_ThreeOptions;
+extern const struct WindowTemplate sWindowTemplate_YesNoBox;
+extern const struct WindowTemplate sWindowTemplate_7by8;
+extern const struct WindowTemplate sWindowTemplate_7by6;
+extern const struct WindowTemplate sWindowTemplate_7by4;
+extern const struct ListMenuItem sListMenuItems_CardsOrNews[];
+extern const struct ListMenuItem sListMenuItems_WirelessOrFriend[];
+extern const struct ListMenuTemplate sListMenuTemplate_ThreeOptions;
+extern const struct ListMenuTemplate sListMenu_ReceiveSendToss;
+extern const struct ListMenuTemplate sListMenu_ReceiveToss;
+extern const struct ListMenuTemplate sListMenu_ReceiveSend;
+extern const struct ListMenuTemplate sListMenu_Receive;
+extern const struct TextColor sMG_Ereader_TextColor_1;
+extern const struct TextColor sMG_Ereader_TextColor_2;
+
void vblankcb_mystery_gift_e_reader_run(void)
{
ProcessSpriteCopyRequests();
@@ -236,6 +248,8 @@ extern const u8 gUnknown_841EDCA[];
extern const u8 gUnknown_841EDBD[];
extern const u8 gUnknown_841DE50[];
extern const u8 gUnknown_841DE51[];
+extern const u8 gText_WhatToDoWithCards[];
+extern const u8 gText_WhatToDoWithNews[];
void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCancel)
{
@@ -426,5 +440,188 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu)
return response;
}
+s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str)
+{
+ struct WindowTemplate windowTemplate;
+ s8 input;
+
+ switch (*textState)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, str);
+ if (yesNoBoxPlacement == 0)
+ {
+ *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width28);
+ }
+ else
+ {
+ *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width20);
+ }
+ FillWindowPixelBuffer(*windowId, 0x11);
+ AddTextPrinterParametrized2(*windowId, 2, 0, 2, 0, 2, &sMG_Ereader_TextColor_2, 0, gStringVar4);
+ DrawTextBorderOuter(*windowId, 0x001, 0x0F);
+ CopyWindowToVram(*windowId, 2);
+ PutWindowTilemap(*windowId);
+ (*textState)++;
+ break;
+ case 1:
+ windowTemplate = sWindowTemplate_YesNoBox;
+ if (yesNoBoxPlacement == 0)
+ {
+ windowTemplate.tilemapTop = 9;
+ }
+ else
+ {
+ windowTemplate.tilemapTop = 15;
+ }
+ sub_810FF60(&windowTemplate, 2, 0, 2, 10, 14, 0);
+ (*textState)++;
+ break;
+ case 2:
+ input = ProcessMenuInputNoWrap_();
+ if (input == -1 || input == 0 || input == 1)
+ {
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return input;
+ }
+ break;
+ case 0xFF:
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return -1;
+ }
+
+ return -2;
+}
+
+s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend)
+{
+ struct WindowTemplate windowTemplate;
+ s32 input;
+
+ switch (*textState)
+ {
+ case 0:
+ if (cannotToss == 0)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews);
+ }
+ *windowId = AddWindow(&sMysteryGiftMenuWindowTemplate);
+ FillWindowPixelBuffer(*windowId, 0x11);
+ AddTextPrinterParametrized2(*windowId, 2, 0, 2, 0, 2, &sMG_Ereader_TextColor_2, 0, gStringVar4);
+ DrawTextBorderOuter(*windowId, 0x001, 0x0F);
+ CopyWindowToVram(*windowId, 2);
+ PutWindowTilemap(*windowId);
+ (*textState)++;
+ break;
+ case 1:
+ windowTemplate = sWindowTemplate_YesNoBox;
+ if (cannotSend)
+ {
+ if (cannotToss == 0)
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveToss, 1, 0x00A, 0xE0);
+ }
+ else
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by4, &sListMenu_Receive, 1, 0x00A, 0xE0);
+ }
+ }
+ else
+ {
+ if (cannotToss == 0)
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by8, &sListMenu_ReceiveSendToss, 1, 0x00A, 0xE0);
+ }
+ else
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveSend, 1, 0x00A, 0xE0);
+ }
+ }
+ if (input != -1)
+ {
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return input;
+ }
+ break;
+ case 0xFF:
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return -2;
+ }
+
+ return -1;
+}
+
+bool32 ValidateCardOrNews(bool32 cardOrNews)
+{
+ if (cardOrNews == 0)
+ {
+ return ValidateReceivedWonderNews();
+ }
+ else
+ {
+ return ValidateReceivedWonderCard();
+ }
+}
+
+bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews)
+{
+ s32 v0;
+
+ switch (*state)
+ {
+ case 0:
+ if (cardOrNews == 0)
+ {
+ InitWonderCardResources(GetSavedWonderCard(), sav1_get_mevent_buffer_2());
+ }
+ else
+ {
+ InitWonderNewsResources(GetSavedWonderNews());
+ }
+ (*state)++;
+ break;
+ case 1:
+ if (cardOrNews == 0)
+ {
+ v0 = FadeToWonderCardMenu();
+ check:
+ if (v0 != 0)
+ {
+ goto done;
+ }
+ break;
+ }
+ else
+ {
+ v0 = FadeToWonderNewsMenu();
+ goto check;
+ }
+ done:
+ *state = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/src/script.c b/src/script.c
index d7246752c..c9e2d2c9d 100644
--- a/src/script.c
+++ b/src/script.c
@@ -9,7 +9,7 @@ extern u8 gUnknown_203ADFA;
extern void sub_80CBDE8(void); // field_specials
extern u16 CalcCRC16WithTable(u8 *data, int length); // util
-extern bool32 sub_8143FC8(void); // mevent
+extern bool32 ValidateReceivedWonderNews(void); // mevent
enum
{
@@ -525,7 +525,7 @@ bool32 sub_8069DFC(void)
u8 *sub_8069E48(void)
{
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
- if (!sub_8143FC8())
+ if (!ValidateReceivedWonderNews())
return NULL;
if (scriptData->magic != RAM_SCRIPT_MAGIC)
return NULL;