Finish mystery_gift_menu.c

This commit is contained in:
PikalaxALT
2019-04-26 12:49:08 -04:00
parent 7b4e2ec05b
commit 274151836b
23 changed files with 869 additions and 1289 deletions
+1 -1
View File
@@ -1645,7 +1645,7 @@ _08010B2A:
ldrb r0, [r0]
cmp r0, 0
beq _08010B64
bl sub_80FA4F8
bl IsNoOneConnected
lsls r0, 24
cmp r0, 0
beq _08010B82
+3 -3
View File
@@ -765,7 +765,7 @@ _08080D3C:
cmp r2, 0x9
bne _08080D54
_08080D44:
bl sub_80098B8
bl CloseLink
bl HideFieldMessageBox
ldr r0, _08080D50 @ =sub_8080F78
b _08080D72
@@ -860,7 +860,7 @@ _08080DF6:
cmp r0, 0x9
bne _08080E20
_08080DFE:
bl sub_80098B8
bl CloseLink
_08080E02:
bl HideFieldMessageBox
ldr r0, _08080E18 @ =gTasks
@@ -2459,7 +2459,7 @@ sub_8081A90: @ 8081A90
lsls r0, 17
cmp r1, r0
ble _08081AC2
bl sub_80098B8
bl CloseLink
ldr r0, _08081ADC @ =c2_800ACD4
bl SetMainCallback2
adds r0, r4, 0
+1 -1
View File
@@ -3691,7 +3691,7 @@ _080CFDBA:
ldrb r0, [r0]
cmp r0, 0
beq _080CFDC6
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
_080CFDC6:
movs r0, 0x3
bl GetBgTilemapBuffer
+9 -9
View File
@@ -29,7 +29,7 @@ _08009498:
cmp r0, r1
beq _080094C4
bl sub_800B210
bl sub_80098B8
bl CloseLink
bl RestoreSerialTimer3IntrHandlers
movs r0, 0
b _080094CE
@@ -507,8 +507,8 @@ _080098B0: .4byte gUnknown_3003F30
_080098B4: .4byte gUnknown_3003F2C
thumb_func_end sub_8009804
thumb_func_start sub_80098B8
sub_80098B8: @ 80098B8
thumb_func_start CloseLink
CloseLink: @ 80098B8
push {r4,lr}
ldr r0, _080098DC @ =gReceivedRemoteLinkPlayers
movs r4, 0
@@ -529,7 +529,7 @@ _080098CC:
_080098DC: .4byte gReceivedRemoteLinkPlayers
_080098E0: .4byte gWirelessCommType
_080098E4: .4byte gLinkOpen
thumb_func_end sub_80098B8
thumb_func_end CloseLink
thumb_func_start TestBlockTransfer
TestBlockTransfer: @ 80098E8
@@ -1596,7 +1596,7 @@ _0800A100:
bne _0800A112
ldr r0, _0800A11C @ =gUnknown_3003EAC
strb r4, [r0]
bl sub_80098B8
bl CloseLink
_0800A112:
movs r6, 0
ldr r4, _0800A120 @ =gLinkPlayers
@@ -2122,7 +2122,7 @@ sub_800A4BC: @ 800A4BC
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A4D4
bl sub_80FA4F8
bl IsNoOneConnected
lsls r0, 24
lsrs r0, 24
b _0800A4E2
@@ -2833,7 +2833,7 @@ _0800A9E6:
ldr r1, _0800AA1C @ =gUnknown_3003EAC
movs r0, 0x1
strb r0, [r1]
bl sub_80098B8
bl CloseLink
ldr r0, _0800AA20 @ =c2_800ACD4
bl SetMainCallback2
_0800A9F6:
@@ -3045,7 +3045,7 @@ _0800AB5C:
ldr r0, _0800AB90 @ =gLinkVSyncDisabled
movs r4, 0x1
strb r4, [r0]
bl sub_80098B8
bl CloseLink
ldr r1, _0800AB94 @ =gUnknown_3003F80
movs r0, 0
str r0, [r1]
@@ -3198,7 +3198,7 @@ _0800AC8E:
ldr r1, _0800ACB8 @ =gUnknown_3003EAC
movs r0, 0x1
strb r0, [r1]
bl sub_80098B8
bl CloseLink
_0800AC98:
pop {r0}
bx r0
+8 -8
View File
@@ -4012,8 +4012,8 @@ sub_80FA4EC: @ 80FA4EC
_080FA4F4: .4byte gUnknown_3005450
thumb_func_end sub_80FA4EC
thumb_func_start sub_80FA4F8
sub_80FA4F8: @ 80FA4F8
thumb_func_start IsNoOneConnected
IsNoOneConnected: @ 80FA4F8
push {lr}
movs r1, 0
ldr r0, _080FA50C @ =gUnknown_3005450
@@ -4027,7 +4027,7 @@ _080FA506:
bx r1
.align 2, 0
_080FA50C: .4byte gUnknown_3005450
thumb_func_end sub_80FA4F8
thumb_func_end IsNoOneConnected
thumb_func_start sub_80FA510
sub_80FA510: @ 80FA510
@@ -5193,7 +5193,7 @@ _080FADF8:
ldrb r0, [r7]
movs r0, 0x2
strb r0, [r7]
bl sub_80098B8
bl CloseLink
b _080FAE62
.align 2, 0
_080FAE10: .4byte gUnknown_3005450
@@ -9466,8 +9466,8 @@ _080FCE3C: .4byte 0x00001234
_080FCE40: .4byte gUnknown_843F274
thumb_func_end sub_80FCD74
thumb_func_start sub_80FCE44
sub_80FCE44: @ 80FCE44
thumb_func_start DestroyWirelessStatusIndicatorSprite
DestroyWirelessStatusIndicatorSprite: @ 80FCE44
push {r4,lr}
ldr r4, _080FCE90 @ =gSprites
ldr r3, _080FCE94 @ =gUnknown_203ACE4
@@ -9512,7 +9512,7 @@ _080FCE98: .4byte 0x00001234
_080FCE9C: .4byte gMain
_080FCEA0: .4byte gDummyOamData
_080FCEA4: .4byte 0x070003e8
thumb_func_end sub_80FCE44
thumb_func_end DestroyWirelessStatusIndicatorSprite
thumb_func_start sub_80FCEA8
sub_80FCEA8: @ 80FCEA8
@@ -9830,7 +9830,7 @@ _080FD072:
lsrs r0, 24
cmp r0, 0x1
bne _080FD106
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
_080FD106:
pop {r3}
mov r8, r3
+21 -21
View File
@@ -1071,7 +1071,7 @@ _0811615C:
.align 2, 0
_08116164: .4byte gUnknown_8457610
_08116168:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
bl sub_80F8DC0
adds r0, r5, 0
bl sub_81161E4
@@ -2347,7 +2347,7 @@ _08116C10:
strb r0, [r6, 0x8]
b _08116D06
_08116C68:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
adds r5, r6, 0
adds r5, 0x9
ldr r4, _08116C90 @ =gUnknown_8457754
@@ -2368,14 +2368,14 @@ _08116C68:
_08116C90: .4byte gUnknown_8457754
_08116C94: .4byte gSpecialVar_Result
_08116C98:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
ldr r0, _08116CA4 @ =gSpecialVar_Result
movs r1, 0x5
b _08116CDC
.align 2, 0
_08116CA4: .4byte gSpecialVar_Result
_08116CA8:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
adds r5, r6, 0
adds r5, 0x9
ldr r4, _08116CC4 @ =gUnknown_8457754
@@ -3911,8 +3911,8 @@ _081179C4: .4byte sub_81175BC
_081179C8: .4byte gTasks
thumb_func_end sub_81179A4
thumb_func_start sub_81179CC
sub_81179CC: @ 81179CC
thumb_func_start MEvent_CreateTask_Leader
MEvent_CreateTask_Leader: @ 81179CC
push {r4,lr}
adds r4, r0, 0
ldr r0, _081179FC @ =sub_8117A0C
@@ -3941,7 +3941,7 @@ _081179FC: .4byte sub_8117A0C
_08117A00: .4byte gUnknown_203B05C
_08117A04: .4byte gTasks+0x8
_08117A08: .4byte gSpecialVar_Result
thumb_func_end sub_81179CC
thumb_func_end MEvent_CreateTask_Leader
thumb_func_start sub_8117A0C
sub_8117A0C: @ 8117A0C
@@ -4056,7 +4056,7 @@ _08117AB8:
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
bl sub_81435D4
bl GetMysteryGiftBaseBlock
lsls r0, 16
ldr r2, _08117B70 @ =0x0000ffff
ldr r1, [sp, 0x4]
@@ -4134,7 +4134,7 @@ _08117BBC:
_08117BD4:
movs r0, 0xD
strb r0, [r5, 0xC]
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
b _08117ECA
.align 2, 0
_08117BE0: .4byte gMain
@@ -4393,7 +4393,7 @@ _08117DE8:
strb r0, [r5, 0xC]
b _08117ECA
_08117DEE:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
bl sub_80F8DC0
ldrb r0, [r5, 0x12]
movs r1, 0
@@ -4490,8 +4490,8 @@ _08117ECA:
bx r0
thumb_func_end sub_8117A0C
thumb_func_start sub_8117ED4
sub_8117ED4: @ 8117ED4
thumb_func_start MEvent_CreateTask_CardOrNewsWithFriend
MEvent_CreateTask_CardOrNewsWithFriend: @ 8117ED4
push {r4,lr}
adds r4, r0, 0
ldr r0, _08117F0C @ =sub_8117F20
@@ -4524,7 +4524,7 @@ _08117F10: .4byte gUnknown_203B05C
_08117F14: .4byte gTasks+0x8
_08117F18: .4byte gUnknown_3002028
_08117F1C: .4byte gSpecialVar_Result
thumb_func_end sub_8117ED4
thumb_func_end MEvent_CreateTask_CardOrNewsWithFriend
thumb_func_start sub_8117F20
sub_8117F20: @ 8117F20
@@ -4609,7 +4609,7 @@ _08117FC0:
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
bl sub_81435D4
bl GetMysteryGiftBaseBlock
lsls r0, 16
ldr r2, _08118060 @ =0x0000ffff
ldr r1, [sp, 0x4]
@@ -4871,12 +4871,12 @@ _08118222:
bl MG_PrintTextOnWindow1AndWaitButton
cmp r0, 0
beq _08118288
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
b _08118252
.align 2, 0
_08118244: .4byte gUnknown_8457838
_08118248:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
ldr r0, _08118264 @ =gUnknown_84571B8
bl AddTextPrinterToWindow1
_08118252:
@@ -4910,8 +4910,8 @@ _08118288:
bx r0
thumb_func_end sub_8117F20
thumb_func_start sub_8118290
sub_8118290: @ 8118290
thumb_func_start MEvent_CreateTask_CardOrNewsOverWireless
MEvent_CreateTask_CardOrNewsOverWireless: @ 8118290
push {r4,lr}
adds r4, r0, 0
ldr r0, _081182C8 @ =sub_81182DC
@@ -4944,7 +4944,7 @@ _081182CC: .4byte gUnknown_203B05C
_081182D0: .4byte gTasks+0x8
_081182D4: .4byte gUnknown_3002028
_081182D8: .4byte gSpecialVar_Result
thumb_func_end sub_8118290
thumb_func_end MEvent_CreateTask_CardOrNewsOverWireless
thumb_func_start sub_81182DC
sub_81182DC: @ 81182DC
@@ -5030,7 +5030,7 @@ _08118380:
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
bl sub_81435D4
bl GetMysteryGiftBaseBlock
lsls r0, 16
ldr r2, _081183FC @ =0x0000ffff
ldr r1, [sp, 0x4]
@@ -5284,7 +5284,7 @@ _081185C2:
bl MG_PrintTextOnWindow1AndWaitButton
cmp r0, 0
beq _08118604
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
adds r0, r4, 0
bl DestroyTask
bl sub_80F8DC0
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -3890,7 +3890,7 @@ sub_80569BC: @ 80569BC
lsrs r0, 24
cmp r0, 0x1
bne _080569CE
bl sub_80098B8
bl CloseLink
_080569CE:
ldr r0, _080569E4 @ =gWirelessCommType
ldrb r0, [r0]
+8 -8
View File
@@ -422,7 +422,7 @@ _0804C9B0:
ldrb r0, [r0]
cmp r0, 0
beq _0804C9E8
bl sub_80FA4F8
bl IsNoOneConnected
lsls r0, 24
cmp r0, 0
bne _0804C9C4
@@ -1832,7 +1832,7 @@ sub_804D5A4: @ 804D5A4
ldrb r0, [r0]
cmp r0, 0
beq _0804D5FC
bl sub_80FA4F8
bl IsNoOneConnected
lsls r0, 24
cmp r0, 0
beq _0804D620
@@ -1845,7 +1845,7 @@ sub_804D5A4: @ 804D5A4
bl Free
movs r0, 0
str r0, [r5]
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
ldr r0, _0804D5F8 @ =sub_8050138
bl SetMainCallback2
b _0804D620
@@ -4296,7 +4296,7 @@ sub_804E944: @ 804E944
ldr r0, [r0]
bl Free
bl FreeAllWindowBuffers
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
ldr r0, _0804E984 @ =c2_8056854
bl SetMainCallback2
b _0804E9AA
@@ -7178,7 +7178,7 @@ _0804FF7A:
lsls r0, 1
cmp r1, r0
bls _0804FFAC
bl sub_80098B8
bl CloseLink
ldr r0, _0804FFC0 @ =c2_800ACD4
bl SetMainCallback2
ldr r1, [r4]
@@ -7432,7 +7432,7 @@ _08050194:
ldr r2, _08050230 @ =0x00001144
adds r0, r2, 0
strh r0, [r1]
bl sub_80098B8
bl CloseLink
_080501A8:
ldr r4, _08050234 @ =gUnknown_2031DAC
movs r0, 0x88
@@ -14745,7 +14745,7 @@ _0805434C:
ldr r0, _08054378 @ =sub_804C718
cmp r1, r0
bne _08054384
bl sub_80FA4F8
bl IsNoOneConnected
lsls r0, 24
cmp r0, 0
beq _08054396
@@ -14819,7 +14819,7 @@ sub_80543C4: @ 80543C4
ldrb r0, [r0]
cmp r0, 0
beq _08054412
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
_08054412:
ldr r0, _0805443C @ =gMain
ldr r0, [r0, 0x8]
+1 -1
View File
@@ -424,7 +424,7 @@ _0814D962:
bl ClearGpuRegBits
b _0814D9BA
_0814D9A2:
bl sub_80FCE44
bl DestroyWirelessStatusIndicatorSprite
adds r0, r5, 0
bl sub_814EF10
bl sub_815C9F4
+20 -20
View File
@@ -2446,22 +2446,22 @@ gText_ReadNewsThatArrived:: @ 841E669
gText_ReturnToTitle:: @ 841E685
.string "Return to the title screen.$"
gUnknown_841E6A1:: @ 841E6A1
gText_DontHaveCardNewOneInput:: @ 841E6A1
.incbin "baserom.gba", 0x41E6A1, 0x3B
gUnknown_841E6DC:: @ 841E6DC
gText_DontHaveNewsNewOneInput:: @ 841E6DC
.incbin "baserom.gba", 0x41E6DC, 0x3B
gUnknown_841E717:: @ 841E717
gText_WhereShouldCardBeAccessed:: @ 841E717
.incbin "baserom.gba", 0x41E717, 0x2A
gUnknown_841E741:: @ 841E741
gText_WhereShouldNewsBeAccessed:: @ 841E741
.incbin "baserom.gba", 0x41E741, 0x53
gUnknown_841E794:: @ 841E794
gText_Communicating:: @ 841E794
.incbin "baserom.gba", 0x41E794, 0xF
gUnknown_841E7A3:: @ 841E7A3
gText_CommunicationCompleted:: @ 841E7A3
.incbin "baserom.gba", 0x41E7A3, 0x19
gText_CommunicationError:: @ 841E7BC
@@ -2470,10 +2470,10 @@ gText_CommunicationError:: @ 841E7BC
gText_CommunicationCanceled:: @ 841E7D1
.incbin "baserom.gba", 0x41E7D1, 0x21
gUnknown_841E7F2:: @ 841E7F2
gText_ThrowAwayWonderCard:: @ 841E7F2
.incbin "baserom.gba", 0x41E7F2, 0x31
gUnknown_841E823:: @ 841E823
gText_HaventReceivedCardsGift:: @ 841E823
.incbin "baserom.gba", 0x41E823, 0x43
gText_WonderCardReceivedFrom:: @ 841E866
@@ -2524,37 +2524,37 @@ gText_WhatToDoWithCards:: @ 841EA86
gText_WhatToDoWithNews:: @ 841EAB7
.incbin "baserom.gba", 0x41EAB7, 0x30
gUnknown_841EAE7:: @ 841EAE7
gText_SendingWonderCard:: @ 841EAE7
.incbin "baserom.gba", 0x41EAE7, 0x1A
gUnknown_841EB01:: @ 841EB01
gText_SendingWonderNews:: @ 841EB01
.incbin "baserom.gba", 0x41EB01, 0x1F
gUnknown_841EB20:: @ 841EB20
gText_WonderCardSentTo:: @ 841EB20
.incbin "baserom.gba", 0x41EB20, 0x26
gUnknown_841EB46:: @ 841EB46
gText_WonderNewsSentTo:: @ 841EB46
.incbin "baserom.gba", 0x41EB46, 0x2B
gUnknown_841EB71:: @ 841EB71
gText_StampSentTo:: @ 841EB71
.incbin "baserom.gba", 0x41EB71, 0x1D
gUnknown_841EB8E:: @ 841EB8E
gText_GiftSentTo:: @ 841EB8E
.incbin "baserom.gba", 0x41EB8E, 0x1C
gUnknown_841EBAA:: @ 841EBAA
gText_OtherTrainerHasCard:: @ 841EBAA
.incbin "baserom.gba", 0x41EBAA, 0x34
gUnknown_841EBDE:: @ 841EBDE
gText_OtherTrainerHasNews:: @ 841EBDE
.incbin "baserom.gba", 0x41EBDE, 0x34
gUnknown_841EC12:: @ 841EC12
gText_OtherTrainerHasStamp:: @ 841EC12
.incbin "baserom.gba", 0x41EC12, 0x2E
gUnknown_841EC40:: @ 841EC40
gText_OtherTrainerCanceled:: @ 841EC40
.incbin "baserom.gba", 0x41EC40, 0x2A
gUnknown_841EC6A:: @ 841EC6A
gText_CantSendGiftToTrainer:: @ 841EC6A
.incbin "baserom.gba", 0x41EC6A, 0x2F
gText_IfThrowAwayCardEventWontHappen:: @ 841EC99
@@ -2563,7 +2563,7 @@ gText_IfThrowAwayCardEventWontHappen:: @ 841EC99
gText_OkayToDiscardNews:: @ 841ECD3
.incbin "baserom.gba", 0x41ECD3, 0x26
gUnknown_841ECF9:: @ 841ECF9
gText_HaventReceivedGiftOkayToDiscard:: @ 841ECF9
.incbin "baserom.gba", 0x41ECF9, 0x36
gText_DataWillBeSaved:: @ 841ED2F
+1 -1
View File
@@ -40,7 +40,7 @@ gSpecials:: @ 815FD60
def_special sub_8081064
def_special sub_80810CC
def_special sub_80810F4
def_special sub_80098B8
def_special CloseLink
def_special sub_80819C8
def_special sub_8081978
def_special sub_80819B8
+1 -1
View File
@@ -204,7 +204,7 @@ bool8 sub_800AA48(void);
void sub_800A5BC(void);
void sub_800AA80(u8);
void sub_80098D8(void);
void sub_80098B8(void);
void CloseLink(void);
bool8 sub_800A4BC(void);
#endif // GUARD_LINK_H
+6
View File
@@ -5,5 +5,11 @@ void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void sub_80FA190(void);
void MG_DrawCheckerboardPattern(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
bool8 IsNoOneConnected(void);
void DestroyWirelessStatusIndicatorSprite(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u8);
void MEvent_CreateTask_CardOrNewsOverWireless(u8);
void MEvent_CreateTask_Leader(u8);
#endif //GUARD_LINK_RFU_H
+1 -1
View File
@@ -3,7 +3,7 @@
#include "global.h"
void sub_8146C30(u32 a0);
void GenerateRandomNews(u32 a0);
void sub_8146C88(void);
void sub_8146CA4(void);
+6
View File
@@ -60,5 +60,11 @@ void DestroyWonderCardResources(void);
void DestroyWonderNewsResources(void);
s32 FadeOutFromWonderCard(bool32 flag);
s32 FadeOutFromWonderNews(bool32 flag);
bool32 CheckReceivedGiftFromWonderCard(void);
void MENews_AddScrollIndicatorArrowPair(void);
void MENews_RemoveScrollIndicatorArrowPair(void);
bool32 WonderNews_Test_Unk_02(void);
bool32 WonderCard_Test_Unk_08_6(void);
u32 MENews_GetInput(u16 input);
#endif //GUARD_MEVENT_H
+9 -9
View File
@@ -37,7 +37,7 @@ struct mevent_cmd_ish
u32 parameter;
};
struct mevent_srv_ish
struct mevent_client
{
u32 unk_00;
u32 param;
@@ -83,13 +83,13 @@ void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recv
void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void * src, u32 size);
void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void * dest);
void mevent_srv_ish_do_init(void);
u32 mevent_srv_ish_do_exec(u16 * a0);
void mevent_srv_ish_inc_flag(void);
void * mevent_srv_ish_get_buffer(void);
void mevent_srv_ish_set_param(u32 a0);
void mevent_srv_common_do_init_1(void);
void mevent_srv_common_do_init_2(void);
u32 mevent_srv_init_do_exec(u16 * a0);
void mevent_client_do_init(void);
u32 mevent_client_do_exec(u16 * a0);
void mevent_client_inc_flag(void);
void * mevent_client_get_buffer(void);
void mevent_client_set_param(u32 a0);
void mevent_srv_init_wnews(void);
void mevent_srv_new_wcard(void);
u32 mevent_srv_common_do_exec(u16 * a0);
#endif //GUARD_MEVENT_SERVER_H
-1
View File
@@ -242,7 +242,6 @@ SECTIONS {
asm/slot_machine.o(.text);
src/roamer.o(.text);
src/mystery_gift_menu.o(.text);
asm/mystery_gift_menu.o(.text);
src/mevent.o(.text);
src/mevent_server_helpers.o(.text);
src/mevent_server.o(.text);
+1 -1
View File
@@ -10,7 +10,7 @@ static u32 sub_8146E0C(struct MysteryEventStruct *);
static void sub_8146DA0(struct MysteryEventStruct *);
static void sub_8146D94(struct MysteryEventStruct *);
void sub_8146C30(u32 a0)
void GenerateRandomNews(u32 a0)
{
struct MysteryEventStruct *r5 = sub_8143D94();
+12 -12
View File
@@ -294,7 +294,7 @@ void sub_8143910(u8 taskId)
case 3:
if (!sub_814374C())
{
sub_80098B8();
CloseLink();
data->t08 = 4;
}
else
@@ -325,26 +325,26 @@ void sub_8143910(u8 taskId)
if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
sub_80098B8();
CloseLink();
sub_81438E8(&data->t00);
data->t08 = 23;
}
else if (GetLinkPlayerCount_2() > 1)
{
sub_81438E8(&data->t00);
sub_80098B8();
CloseLink();
data->t08 = 7;
}
else if (sub_81436EC())
{
PlaySE(SE_SELECT);
sub_80098B8();
CloseLink();
sub_81438E8(&data->t00);
data->t08 = 8;
}
else if (sub_81438F0(&data->t00, 10))
{
sub_80098B8();
CloseLink();
sub_81436BC();
sub_81438E8(&data->t00);
}
@@ -396,16 +396,16 @@ void sub_8143910(u8 taskId)
break;
case 1:
PlaySE(SE_SELECT);
sub_80098B8();
CloseLink();
data->t08 = 23;
break;
case 5:
sub_80098B8();
CloseLink();
data->t08 = 21;
break;
case 3:
case 4:
sub_80098B8();
CloseLink();
data->t08 = 20;
break;
}
@@ -413,7 +413,7 @@ void sub_8143910(u8 taskId)
case 14:
if (HasLinkErrorOccurred())
{
sub_80098B8();
CloseLink();
data->t08 = 20;
}
else if (GetBlockReceivedStatus())
@@ -546,7 +546,7 @@ bool32 sub_8143E64(const struct MEventBuffer_3120_Sub * data)
return TRUE;
}
bool32 sub_8143E78(void)
bool32 WonderNews_Test_Unk_02(void)
{
const struct MEventBuffer_3120_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_000.data;
if (data->unk_02 == 0)
@@ -632,7 +632,7 @@ bool32 sub_8144018(const struct MEventBuffer_32E0_Sub * data)
return TRUE;
}
bool32 sub_8144054(void)
bool32 WonderCard_Test_Unk_08_6(void)
{
const struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data;
if (data->unk_08_6 == 0)
@@ -672,7 +672,7 @@ bool32 sub_8144124(u16 a0)
return FALSE;
}
bool32 sub_8144144(void)
bool32 CheckReceivedGiftFromWonderCard(void)
{
u16 value = sub_81440E8();
if (!sub_8144124(value))
+3 -3
View File
@@ -671,7 +671,7 @@ s32 FadeOutFromWonderNews(bool32 flag)
return 0;
}
void sub_81467EC(void)
void MENews_RemoveScrollIndicatorArrowPair(void)
{
if (!gUnknown_203F3CC->unk_01C0_0 && gUnknown_203F3CC->unk_01C1 != 0xFF)
{
@@ -682,7 +682,7 @@ void sub_81467EC(void)
}
void sub_8146834(void)
void MENews_AddScrollIndicatorArrowPair(void)
{
if (gUnknown_203F3CC->unk_01C0_0)
{
@@ -691,7 +691,7 @@ void sub_8146834(void)
}
}
u8 sub_8146884(u16 input)
u32 MENews_GetInput(u16 input)
{
if (gUnknown_203F3CC->unk_01C2_0)
{
+44 -44
View File
@@ -11,12 +11,12 @@
#include "mevent.h"
#include "mevent_server.h"
EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL;
EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL;
EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL;
static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32);
static u32 mevent_srv_ish_exec(struct mevent_srv_ish *);
static void mevent_srv_ish_free_resources(struct mevent_srv_ish *);
static void mevent_client_init(struct mevent_client *, u32, u32);
static u32 mevent_client_exec(struct mevent_client *);
static void mevent_client_free_resources(struct mevent_client *);
static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32);
static void mevent_srv_free_resources(struct mevent_srv_common *);
static u32 mevent_srv_exec_common(struct mevent_srv_common *);
@@ -25,44 +25,44 @@ extern const u8 gUnknown_84687E0[];
extern const struct mevent_cmd gUnknown_8468B6C[];
extern const struct mevent_cmd gUnknown_8468BCC[];
void mevent_srv_ish_do_init(void)
void mevent_client_do_init(void)
{
s_mevent_srv_ish_ptr = AllocZeroed(sizeof(struct mevent_srv_ish));
mevent_srv_ish_init(s_mevent_srv_ish_ptr, 1, 0);
s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client));
mevent_client_init(s_mevent_client_ptr, 1, 0);
}
u32 mevent_srv_ish_do_exec(u16 * a0)
u32 mevent_client_do_exec(u16 * a0)
{
u32 result;
if (s_mevent_srv_ish_ptr == NULL)
if (s_mevent_client_ptr == NULL)
return 6;
result = mevent_srv_ish_exec(s_mevent_srv_ish_ptr);
result = mevent_client_exec(s_mevent_client_ptr);
if (result == 6)
{
*a0 = s_mevent_srv_ish_ptr->param;
mevent_srv_ish_free_resources(s_mevent_srv_ish_ptr);
Free(s_mevent_srv_ish_ptr);
s_mevent_srv_ish_ptr = NULL;
*a0 = s_mevent_client_ptr->param;
mevent_client_free_resources(s_mevent_client_ptr);
Free(s_mevent_client_ptr);
s_mevent_client_ptr = NULL;
}
return result;
}
void mevent_srv_ish_inc_flag(void)
void mevent_client_inc_flag(void)
{
s_mevent_srv_ish_ptr->flag++;
s_mevent_client_ptr->flag++;
}
void * mevent_srv_ish_get_buffer(void)
void * mevent_client_get_buffer(void)
{
return s_mevent_srv_ish_ptr->buffer;
return s_mevent_client_ptr->buffer;
}
void mevent_srv_ish_set_param(u32 a0)
void mevent_client_set_param(u32 a0)
{
s_mevent_srv_ish_ptr->param = a0;
s_mevent_client_ptr->param = a0;
}
static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u32 recvPlayerNo)
static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo)
{
svr->unk_00 = 0;
svr->mainseqno = 0;
@@ -74,7 +74,7 @@ static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u
mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo);
}
static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr)
static void mevent_client_free_resources(struct mevent_client * svr)
{
Free(svr->sendBuffer);
Free(svr->recvBuffer);
@@ -82,20 +82,20 @@ static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr)
Free(svr->buffer);
}
static void mevent_srv_ish_jmp_buffer(struct mevent_srv_ish * svr)
static void mevent_client_jmp_buffer(struct mevent_client * svr)
{
memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
svr->cmdidx = 0;
}
static void mevent_srv_ish_send_word(struct mevent_srv_ish * svr, u32 ident, u32 word)
static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word)
{
CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE);
*(u32 *)svr->sendBuffer = word;
mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32));
}
static u32 ish_mainseq_0(struct mevent_srv_ish * svr)
static u32 ish_mainseq_0(struct mevent_client * svr)
{
// init
memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE);
@@ -105,13 +105,13 @@ static u32 ish_mainseq_0(struct mevent_srv_ish * svr)
return 0;
}
static u32 ish_mainseq_1(struct mevent_srv_ish * svr)
static u32 ish_mainseq_1(struct mevent_client * svr)
{
// done
return 6;
}
static u32 ish_mainseq_2(struct mevent_srv_ish * svr)
static u32 ish_mainseq_2(struct mevent_client * svr)
{
// do recv
if (mevent_srv_sub_recv(&svr->manager))
@@ -122,7 +122,7 @@ static u32 ish_mainseq_2(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_3(struct mevent_srv_ish * svr)
static u32 ish_mainseq_3(struct mevent_client * svr)
{
// do send
if (mevent_srv_sub_send(&svr->manager))
@@ -133,7 +133,7 @@ static u32 ish_mainseq_3(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
static u32 ish_mainseq_4(struct mevent_client * svr)
{
// process command
struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx];
@@ -162,20 +162,20 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
svr->flag = 0;
break;
case 19:
mevent_srv_ish_send_word(svr, 0x12, GetGameStat(cmd->parameter));
mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter));
svr->mainseqno = 3;
svr->flag = 0;
break;
case 6:
if (svr->param == 0)
mevent_srv_ish_jmp_buffer(svr);
mevent_client_jmp_buffer(svr);
break;
case 7:
if (svr->param == 1)
mevent_srv_ish_jmp_buffer(svr);
mevent_client_jmp_buffer(svr);
break;
case 4:
mevent_srv_ish_jmp_buffer(svr);
mevent_client_jmp_buffer(svr);
break;
case 5:
memcpy(svr->buffer, svr->recvBuffer, 0x40);
@@ -201,7 +201,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC));
break;
case 14:
mevent_srv_ish_send_word(svr, 0x13, svr->param);
mevent_client_send_word(svr, 0x13, svr->param);
break;
case 10:
sub_8143F68(svr->recvBuffer);
@@ -210,10 +210,10 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
if (!sub_8143EF4(svr->recvBuffer))
{
sub_8143DC8(svr->recvBuffer);
mevent_srv_ish_send_word(svr, 0x13, 0);
mevent_client_send_word(svr, 0x13, 0);
}
else
mevent_srv_ish_send_word(svr, 0x13, 1);
mevent_client_send_word(svr, 0x13, 1);
break;
case 15:
svr->mainseqno = 6;
@@ -239,7 +239,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_5(struct mevent_srv_ish * svr)
static u32 ish_mainseq_5(struct mevent_client * svr)
{
// wait flag
if (svr->flag)
@@ -250,7 +250,7 @@ static u32 ish_mainseq_5(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_6(struct mevent_srv_ish * svr)
static u32 ish_mainseq_6(struct mevent_client * svr)
{
// ???
switch (svr->flag)
@@ -270,7 +270,7 @@ static u32 ish_mainseq_6(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_7(struct mevent_srv_ish * svr)
static u32 ish_mainseq_7(struct mevent_client * svr)
{
// exec arbitrary code
u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
@@ -282,9 +282,9 @@ static u32 ish_mainseq_7(struct mevent_srv_ish * svr)
return 1;
}
static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr)
static u32 mevent_client_exec(struct mevent_client * svr)
{
u32 (*funcs[])(struct mevent_srv_ish *) = {
u32 (*funcs[])(struct mevent_client *) = {
ish_mainseq_0,
ish_mainseq_1,
ish_mainseq_2,
@@ -297,19 +297,19 @@ static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr)
return funcs[svr->mainseqno](svr);
}
void mevent_srv_common_do_init_1(void)
void mevent_srv_init_wnews(void)
{
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
mevent_srv_init_common(s_mevent_srv_common_ptr, gUnknown_8468B6C, 0, 1);
}
void mevent_srv_common_do_init_2(void)
void mevent_srv_new_wcard(void)
{
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
mevent_srv_init_common(s_mevent_srv_common_ptr, gUnknown_8468BCC, 0, 1);
}
u32 mevent_srv_init_do_exec(u16 * a0)
u32 mevent_srv_common_do_exec(u16 * a0)
{
u32 result;
if (s_mevent_srv_common_ptr == NULL)
+712
View File
@@ -19,12 +19,18 @@
#include "string_util.h"
#include "mevent.h"
#include "save.h"
#include "link.h"
#include "event_data.h"
#include "mevent_server.h"
#include "menews_jisan.h"
#include "help_system.h"
#include "constants/songs.h"
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
EWRAM_DATA bool8 gGiftIsFromEReader = FALSE;
void task_add_00_mystery_gift(void);
void task00_mystery_gift(u8 taskId);
void task_add_00_ereader(void);
extern const u8 gText_PickOKExit[];
@@ -69,6 +75,26 @@ extern const u8 gText_CantAcceptCardFromTrainer[];
extern const u8 gText_CantAcceptNewsFromTrainer[];
extern const u8 gText_CommunicationError[];
extern const u8 gText_NewTrainerReceived[];
extern const u8 gText_WonderCardSentTo[];
extern const u8 gText_WonderNewsSentTo[];
extern const u8 gText_StampSentTo[];
extern const u8 gText_OtherTrainerHasCard[];
extern const u8 gText_OtherTrainerHasStamp[];
extern const u8 gText_OtherTrainerHasNews[];
extern const u8 gText_OtherTrainerCanceled[];
extern const u8 gText_GiftSentTo[];
extern const u8 gText_CantSendGiftToTrainer[];
extern const u8 gText_DontHaveCardNewOneInput[];
extern const u8 gText_DontHaveNewsNewOneInput[];
extern const u8 gText_WhereShouldCardBeAccessed[];
extern const u8 gText_WhereShouldNewsBeAccessed[];
extern const u8 gText_Communicating[];
extern const u8 gText_ThrowAwayWonderCard[];
extern const u8 gText_HaventReceivedCardsGift[];
extern const u8 gText_CommunicationCompleted[];
extern const u8 gText_HaventReceivedGiftOkayToDiscard[];
extern const u8 gText_SendingWonderCard[];
extern const u8 gText_SendingWonderNews[];
const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal");
const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz");
@@ -1042,3 +1068,689 @@ const u8 * mevent_message(u32 * flag_p, u8 cardOrNews, u8 cardOrNewsSource, u32
return msg;
}
bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2)
{
switch (*state)
{
case 0:
if (arg1 != NULL)
{
AddTextPrinterToWindow1(arg1);
}
PlayFanfare(MUS_FANFA4);
*arg2 = 0;
(*state)++;
break;
case 1:
if (++(*arg2) > 0xF0)
{
(*state)++;
}
break;
case 2:
if (IsFanfareTaskInactive())
{
*state = 0;
ClearTextWindow();
return TRUE;
}
break;
}
return FALSE;
}
const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 msgId)
{
const u8 * result = gText_CommunicationError;
*a0 = 0;
switch (msgId)
{
case 0:
result = gText_NothingSentOver;
break;
case 1:
result = gText_RecordUploadedViaWireless;
break;
case 2:
result = gText_WonderCardSentTo;
*a0 = 1;
break;
case 3:
result = gText_WonderNewsSentTo;
*a0 = 1;
break;
case 4:
result = gText_StampSentTo;
break;
case 5:
result = gText_OtherTrainerHasCard;
break;
case 6:
result = gText_OtherTrainerHasStamp;
break;
case 7:
result = gText_OtherTrainerHasNews;
break;
case 8:
result = gText_NoMoreRoomForStamps;
break;
case 9:
result = gText_OtherTrainerCanceled;
break;
case 10:
result = gText_CantSendGiftToTrainer;
break;
case 11:
result = gText_CommunicationError;
break;
case 12:
result = gText_GiftSentTo;
break;
case 13:
result = gText_GiftSentTo;
break;
case 14:
result = gText_CantSendGiftToTrainer;
break;
}
return result;
}
bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId)
{
u32 flag;
const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, msgId);
if (flag)
{
return PrintMGSuccessMessage(state, str, arg1);
}
else
{
return MG_PrintTextOnWindow1AndWaitButton(state, str);
}
}
void task_add_00_mystery_gift(void)
{
u8 taskId = CreateTask(task00_mystery_gift, 0);
struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data;
data->state = 0;
data->textState = 0;
data->unkA = 0;
data->unkB = 0;
data->IsCardOrNews = 0;
data->source = 0;
data->curPromptWindowId = 0;
data->unk2 = 0;
data->unk4 = 0;
data->unk6 = 0;
data->prevPromptWindowId = 0;
data->buffer = AllocZeroed(0x40);
}
void task00_mystery_gift(u8 taskId)
{
struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data;
u32 sp0;
const u8 * r1;
switch (data->state)
{
case 0:
data->state = 1;
break;
case 1:
switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, FALSE))
{
case 0:
data->IsCardOrNews = 0;
if (ValidateReceivedWonderCard() == TRUE)
{
data->state = 18;
}
else
{
data->state = 2;
}
break;
case 1:
data->IsCardOrNews = 1;
if (ValidateReceivedWonderNews() == TRUE)
{
data->state = 18;
}
else
{
data->state = 2;
}
break;
case -2u:
data->state = 37;
break;
}
break;
case 2:
{
if (data->IsCardOrNews == 0)
{
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveCardNewOneInput))
{
data->state = 3;
PrintMysteryGiftOrEReaderTopMenu(0, 1);
}
}
else
{
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveNewsNewOneInput))
{
data->state = 3;
PrintMysteryGiftOrEReaderTopMenu(0, 1);
}
}
break;
}
case 3:
if (data->IsCardOrNews == 0)
{
AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed);
}
else
{
AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed);
}
data->state = 4;
break;
case 4:
switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, TRUE))
{
case 0:
ClearTextWindow();
data->state = 5;
data->source = 0;
break;
case 1:
ClearTextWindow();
data->state = 5;
data->source = 1;
break;
case -2u:
ClearTextWindow();
if (ValidateCardOrNews(data->IsCardOrNews))
{
data->state = 18;
}
else
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
}
break;
case 5:
{
register u8 eos asm("r1");
gStringVar1[0] = (eos = EOS);
gStringVar2[0] = eos;
gStringVar3[0] = eos;
}
switch (data->IsCardOrNews)
{
case 0:
if (data->source == 1)
{
MEvent_CreateTask_CardOrNewsWithFriend(0x15);
}
else if (data->source == 0)
{
MEvent_CreateTask_CardOrNewsOverWireless(0x15);
}
break;
case 1:
if (data->source == 1)
{
MEvent_CreateTask_CardOrNewsWithFriend(0x16);
}
else if (data->source == 0)
{
MEvent_CreateTask_CardOrNewsOverWireless(0x16);
}
break;
}
data->state = 6;
break;
case 6:
if (gReceivedRemoteLinkPlayers != 0)
{
ClearScreenInBg0(TRUE);
data->state = 7;
mevent_client_do_init();
}
else if (gSpecialVar_Result == 5)
{
ClearScreenInBg0(TRUE);
data->state = 3;
}
break;
case 7:
AddTextPrinterToWindow1(gText_Communicating);
data->state = 8;
break;
case 8:
switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6:
task_add_05_task_del_08FA224_when_no_RfuFunc();
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 13;
break;
case 5:
memcpy(data->buffer, mevent_client_get_buffer(), 0x40);
mevent_client_inc_flag();
break;
case 3:
data->state = 10;
break;
case 2:
data->state = 9;
break;
case 4:
data->state = 11;
StringCopy(gStringVar1, gLinkPlayers[0].name);
break;
}
break;
case 9:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()))
{
case 0:
mevent_client_set_param(0);
mevent_client_inc_flag();
data->state = 7;
break;
case 1:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 10:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer()))
{
mevent_client_inc_flag();
data->state = 7;
}
break;
case 11:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard))
{
case 0:
if (CheckReceivedGiftFromWonderCard() == TRUE)
{
data->state = 12;
}
else
{
mevent_client_set_param(0);
mevent_client_inc_flag();
data->state = 7;
}
break;
case 1:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 12:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift))
{
case 0:
mevent_client_set_param(0);
mevent_client_inc_flag();
data->state = 7;
break;
case 1:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 13:
if (IsNoOneConnected())
{
DestroyWirelessStatusIndicatorSprite();
data->state = 14;
}
break;
case 14:
if (PrintStringAndWait2Seconds(&data->textState, gText_CommunicationCompleted))
{
if (data->source == 1)
{
StringCopy(gStringVar1, gLinkPlayers[0].name);
}
data->state = 15;
}
break;
case 15:
{
register bool32 flag asm("r1");
r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId);
if (r1 == NULL)
{
r1 = data->buffer;
}
if (sp0)
{
flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId);
}
else
{
flag = MG_PrintTextOnWindow1AndWaitButton(&data->textState, r1);
}
if (flag)
{
if (data->prevPromptWindowId == 3)
{
if (data->source == 1)
{
GenerateRandomNews(1);
}
else
{
GenerateRandomNews(2);
}
}
if (sp0 == 0)
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
else
{
data->state = 17;
}
}
break;
}
case 16:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 17:
if (mevent_save_game(&data->textState))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 18:
if (HandleLoadWonderCardOrNews(&data->textState, data->IsCardOrNews))
{
data->state = 20;
}
break;
case 20:
if (data->IsCardOrNews == 0)
{
if (JOY_NEW(A_BUTTON))
{
data->state = 21;
}
if (JOY_NEW(B_BUTTON))
{
data->state = 27;
}
}
else
{
switch (MENews_GetInput(gMain.newKeys))
{
case 0:
MENews_RemoveScrollIndicatorArrowPair();
data->state = 21;
break;
case 1:
data->state = 27;
break;
}
}
break;
case 21:
{
u32 result;
if (data->IsCardOrNews == 0)
{
if (WonderCard_Test_Unk_08_6())
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE);
}
else
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE);
}
}
else
{
if (WonderNews_Test_Unk_02())
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE);
}
else
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE);
}
}
switch (result)
{
case 0:
data->state = 28;
break;
case 1:
data->state = 29;
break;
case 2:
data->state = 22;
break;
case -2u:
if (data->IsCardOrNews == 1)
{
MENews_AddScrollIndicatorArrowPair();
}
data->state = 20;
break;
}
break;
}
case 22:
switch (mevent_message_prompt_discard(&data->textState, &data->curPromptWindowId, data->IsCardOrNews))
{
case 0:
if (data->IsCardOrNews == 0 && CheckReceivedGiftFromWonderCard() == TRUE)
{
data->state = 23;
}
else
{
data->state = 24;
}
break;
case 1:
data->state = 21;
break;
case -1:
data->state = 21;
break;
}
break;
case 23:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard))
{
case 0:
data->state = 24;
break;
case 1:
data->state = 21;
break;
case -1u:
data->state = 21;
break;
}
break;
case 24:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1))
{
DestroyNewsOrCard(data->IsCardOrNews);
data->state = 25;
}
break;
case 25:
if (mevent_save_game(&data->textState))
{
data->state = 26;
}
break;
case 26:
if (mevent_message_was_thrown_away(&data->textState, data->IsCardOrNews))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 27:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 0))
{
data->state = 0;
}
break;
case 28:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1))
{
data->state = 3;
}
break;
case 29:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1))
{
switch (data->IsCardOrNews)
{
case 0:
MEvent_CreateTask_Leader(21);
break;
case 1:
MEvent_CreateTask_Leader(22);
break;
}
data->source = 1;
data->state = 30;
}
break;
case 30:
if (gReceivedRemoteLinkPlayers != 0)
{
ClearScreenInBg0(1);
data->state = 31;
}
else if (gSpecialVar_Result == 5)
{
ClearScreenInBg0(1);
data->state = 18;
}
break;
case 31:
{
register u8 eos asm("r1");
gStringVar1[0] = (eos = EOS);
gStringVar2[0] = eos;
gStringVar3[0] = eos;
}
if (data->IsCardOrNews == 0)
{
AddTextPrinterToWindow1(gText_SendingWonderCard);
mevent_srv_new_wcard();
}
else
{
AddTextPrinterToWindow1(gText_SendingWonderNews);
mevent_srv_init_wnews();
}
data->state = 32;
break;
case 32:
if (mevent_srv_common_do_exec(&data->curPromptWindowId) == 3)
{
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 33;
}
break;
case 33:
task_add_05_task_del_08FA224_when_no_RfuFunc();
StringCopy(gStringVar1, gLinkPlayers[1].name);
data->state = 34;
break;
case 34:
if (IsNoOneConnected())
{
DestroyWirelessStatusIndicatorSprite();
data->state = 35;
}
break;
case 35:
if (PrintMGSendStatus(&data->textState, &data->curPromptWindowId, data->source, data->prevPromptWindowId))
{
if (data->source == 1 && data->prevPromptWindowId == 3)
{
GenerateRandomNews(3);
data->state = 17;
}
else
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
}
break;
case 36:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 37:
CloseLink();
sub_812B484();
Free(data->buffer);
DestroyTask(taskId);
SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen);
break;
}
}
u16 GetMysteryGiftBaseBlock(void)
{
return 0x19B;
}