More mevent documentation
This commit is contained in:
+3
-3
@@ -58,8 +58,8 @@ _0814B74C: .4byte 0x0000012f
|
||||
_0814B750: .4byte sub_8056534
|
||||
thumb_func_end sub_814B6FC
|
||||
|
||||
thumb_func_start sub_814B754
|
||||
sub_814B754: @ 814B754
|
||||
thumb_func_start StartBerryCrush
|
||||
StartBerryCrush: @ 814B754
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
@@ -183,7 +183,7 @@ _0814B84C:
|
||||
.align 2, 0
|
||||
_0814B858: .4byte sub_814BA80
|
||||
_0814B85C: .4byte sub_814BA98
|
||||
thumb_func_end sub_814B754
|
||||
thumb_func_end StartBerryCrush
|
||||
|
||||
thumb_func_start sub_814B860
|
||||
sub_814B860: @ 814B860
|
||||
|
||||
+1
-1
@@ -3323,7 +3323,7 @@ _0814D488:
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0814D4BE
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _0814D4B8
|
||||
_0814D498:
|
||||
ldr r0, _0814D4B4 @ =gReceivedRemoteLinkPlayers
|
||||
|
||||
+12
-10
@@ -751,7 +751,7 @@ sub_8080CDC: @ 8080CDC
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x1
|
||||
bhi _08080D3C
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
bl HideFieldMessageBox
|
||||
ldr r0, _08080D38 @ =sub_8080F78
|
||||
b _08080D72
|
||||
@@ -845,14 +845,14 @@ sub_8080DC0: @ 8080DC0
|
||||
bl sub_8080D8C
|
||||
cmp r0, 0x1
|
||||
beq _08080DFE
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _08080E02
|
||||
.align 2, 0
|
||||
_08080DE8: .4byte gSpecialVar_Result
|
||||
_08080DEC:
|
||||
cmp r0, 0x3
|
||||
bne _08080DF6
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _08080E02
|
||||
_08080DF6:
|
||||
cmp r0, 0x7
|
||||
@@ -1010,7 +1010,7 @@ _08080F48: .4byte gLinkType
|
||||
_08080F4C: .4byte 0x00004411
|
||||
_08080F50: .4byte gTasks
|
||||
_08080F54:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
ldr r0, _08080F70 @ =gTasks
|
||||
mov r2, r8
|
||||
adds r1, r2, r7
|
||||
@@ -1564,7 +1564,7 @@ _0808138C:
|
||||
ble _0808143A
|
||||
b _080813AA
|
||||
_0808139C:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _080813AA
|
||||
_080813A2:
|
||||
ldr r0, _080813B4 @ =gReceivedRemoteLinkPlayers
|
||||
@@ -1895,7 +1895,7 @@ sub_8081624: @ 8081624
|
||||
.align 2, 0
|
||||
_0808163C: .4byte gMain
|
||||
_08081640:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
ldrb r0, [r4]
|
||||
adds r0, 0x1
|
||||
strb r0, [r4]
|
||||
@@ -1942,9 +1942,9 @@ sub_8081668: @ 8081668
|
||||
beq _0808170A
|
||||
ldr r0, _080816C4 @ =gBattleOutcome
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
cmp r0, 0x1 @ B_OUTCOME_WON
|
||||
beq _080816C8
|
||||
cmp r0, 0x2
|
||||
cmp r0, 0x2 @ B_OUTCOME_LOST
|
||||
beq _080816EC
|
||||
b _0808170A
|
||||
.align 2, 0
|
||||
@@ -1955,6 +1955,7 @@ _080816BC: .4byte gLocalLinkPlayerId
|
||||
_080816C0: .4byte gWirelessCommType
|
||||
_080816C4: .4byte gBattleOutcome
|
||||
_080816C8:
|
||||
@ sub_8144714(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
ldr r4, _080816E8 @ =gLinkPlayers
|
||||
bl GetMultiplayerId
|
||||
eors r0, r5
|
||||
@@ -1972,6 +1973,7 @@ _080816C8:
|
||||
.align 2, 0
|
||||
_080816E8: .4byte gLinkPlayers
|
||||
_080816EC:
|
||||
@ sub_8144714(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
ldr r4, _08081718 @ =gLinkPlayers
|
||||
bl GetMultiplayerId
|
||||
eors r0, r5
|
||||
@@ -2198,7 +2200,7 @@ _080818A8:
|
||||
strb r0, [r1]
|
||||
strb r0, [r1, 0x1]
|
||||
bl m4aMPlayAllStop
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
_080818B8:
|
||||
ldrh r0, [r4, 0x8]
|
||||
adds r0, 0x1
|
||||
@@ -2507,7 +2509,7 @@ sub_8081B08: @ 8081B08
|
||||
adds r4, r0, 0
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
ldr r1, _08081B28 @ =gTasks
|
||||
lsls r0, r4, 2
|
||||
adds r0, r4
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_81507FC
|
||||
sub_81507FC: @ 81507FC
|
||||
thumb_func_start StartDodrioBerryPicking
|
||||
StartDodrioBerryPicking: @ 81507FC
|
||||
push {r4-r6,lr}
|
||||
adds r5, r1, 0
|
||||
lsls r0, 16
|
||||
@@ -97,7 +97,7 @@ _081508D2:
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_81507FC
|
||||
thumb_func_end StartDodrioBerryPicking
|
||||
|
||||
thumb_func_start sub_81508D8
|
||||
sub_81508D8: @ 81508D8
|
||||
@@ -1611,7 +1611,7 @@ _081514A4:
|
||||
beq _081514C0
|
||||
b _081514D6
|
||||
_081514AA:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
movs r0, 0x7
|
||||
bl sub_81549D4
|
||||
b _081514CC
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8147AA8
|
||||
sub_8147AA8: @ 8147AA8
|
||||
thumb_func_start StartPokemonJump
|
||||
StartPokemonJump: @ 8147AA8
|
||||
push {r4-r7,lr}
|
||||
adds r6, r1, 0
|
||||
lsls r0, 16
|
||||
@@ -73,7 +73,7 @@ _08147B42:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8147AA8
|
||||
thumb_func_end StartPokemonJump
|
||||
|
||||
thumb_func_start sub_8147B48
|
||||
sub_8147B48: @ 8147B48
|
||||
@@ -2535,7 +2535,7 @@ _08148DEA:
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _08148E20
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
_08148DFA:
|
||||
ldr r0, _08148E0C @ =gUnknown_203F3D4
|
||||
ldr r1, [r0]
|
||||
|
||||
@@ -10,11 +10,11 @@ gFiller_3003EC0
|
||||
gLinkHeldKeys
|
||||
gRecvCmds
|
||||
gLinkStatus
|
||||
gUnknown_3003F24
|
||||
gLinkAllAcked5FFF
|
||||
gUnknown_3003F28
|
||||
gUnknown_3003F2C
|
||||
gUnknown_3003F30
|
||||
gUnknown_3003F34
|
||||
gLinkCommand2FFEAck
|
||||
gLinkCommand5FFFAck
|
||||
gLinkCmd5FFFparam
|
||||
gSuppressLinkErrorMessage
|
||||
gWirelessCommType
|
||||
gSavedLinkPlayerCount
|
||||
|
||||
@@ -1 +1 @@
|
||||
gUnknown_3005ED0
|
||||
sMEventSendToEReaderManager
|
||||
|
||||
+15
-15
@@ -4230,51 +4230,51 @@ gJPText_MysteryGift:: @ 841DE50
|
||||
gJPText_DecideStop:: @ 841DE51
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE52:: @ 841DE52
|
||||
gJPText_ReceiveMysteryGiftWithEReader:: @ 841DE52
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE53:: @ 841DE53
|
||||
gJPText_SelectConnectFromEReaderMenu:: @ 841DE53
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE54:: @ 841DE54
|
||||
gJPText_SelectConnectWithGBA:: @ 841DE54
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE55:: @ 841DE55
|
||||
gJPText_SelectConnectAndPressA:: @ 841DE55
|
||||
.string "カ-ドeリ-ダ-{PLUS}の ‘つうしん'を\n"
|
||||
.string "えらんで Aボタンを おしてください$"
|
||||
|
||||
gUnknown_841DE7C:: @ 841DE7C
|
||||
gJPText_LinkIsIncorrect:: @ 841DE7C
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE7D:: @ 841DE7D
|
||||
gJPText_CardReadingHasBeenHalted:: @ 841DE7D
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE7E:: @ 841DE7E
|
||||
gJPText_UnableConnectWithEReader:: @ 841DE7E
|
||||
.string "カ-ドeリ-ダ-{PLUS}と\n"
|
||||
.string "つうしん できません$"
|
||||
|
||||
gUnknown_841DE95:: @ 841DE95
|
||||
gJPText_Connecting:: @ 841DE95
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE96:: @ 841DE96
|
||||
gJPText_ConnectionErrorCheckLink:: @ 841DE96
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE97:: @ 841DE97
|
||||
gJPText_ConnectionErrorTryAgain:: @ 841DE97
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE98:: @ 841DE98
|
||||
gJPText_AllowEReaderToLoadCard:: @ 841DE98
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE99:: @ 841DE99
|
||||
gJPText_ConnectionComplete:: @ 841DE99
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE9A:: @ 841DE9A
|
||||
gJPText_NewTrainerHasComeToSevii:: @ 841DE9A
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE9B:: @ 841DE9B
|
||||
gJPText_PleaseWaitAMoment:: @ 841DE9B
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE9C:: @ 841DE9C
|
||||
gJPText_WriteErrorUnableToSaveData:: @ 841DE9C
|
||||
.string "$"
|
||||
|
||||
gText_CommErrorCheckConnections:: @ 841DE9D
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef GUARD_BERRY_CRUSH_H
|
||||
#define GUARD_BERRY_CRUSH_H
|
||||
|
||||
void sub_814B754(MainCallback callback);
|
||||
void StartBerryCrush(MainCallback callback);
|
||||
|
||||
#endif //GUARD_BERRY_CRUSH_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef GUARD_DODRIO_BERRY_PICKING_H
|
||||
#define GUARD_DODRIO_BERRY_PICKING_H
|
||||
|
||||
void sub_81507FC(u16 species, MainCallback callback);
|
||||
void StartDodrioBerryPicking(u16 species, MainCallback callback);
|
||||
|
||||
#endif //GUARD_DODRIO_BERRY_PICKING_H
|
||||
|
||||
@@ -54,8 +54,8 @@ bool8 FlagGet(u16 id);
|
||||
u16 * GetVarPointer(u16 id);
|
||||
bool32 IsMysteryGiftEnabled(void);
|
||||
void ResetSpecialVars(void);
|
||||
void sub_806E2D0(void);
|
||||
void sub_806E370(void);
|
||||
void ResetMysteryEventFlags(void);
|
||||
void ResetMysteryEventVars(void);
|
||||
bool32 IsNationalPokedexEnabled(void);
|
||||
void sub_806E190(void);
|
||||
|
||||
|
||||
+10
-9
@@ -658,8 +658,8 @@ struct FameCheckerSaveData
|
||||
|
||||
struct MEWonderNewsData
|
||||
{
|
||||
u16 unk_00;
|
||||
u8 unk_02;
|
||||
u16 newsId;
|
||||
u8 shareState;
|
||||
u8 unk_03;
|
||||
u8 unk_04[40];
|
||||
u8 unk_2C[10][40];
|
||||
@@ -673,13 +673,13 @@ struct MEWonderNewsStruct
|
||||
|
||||
struct MEWonderCardData
|
||||
{
|
||||
u16 unk_00;
|
||||
u16 cardId;
|
||||
u16 unk_02;
|
||||
u32 unk_04;
|
||||
u8 unk_08_0:2;
|
||||
u8 unk_08_2:4;
|
||||
u8 unk_08_6:2;
|
||||
u8 unk_09;
|
||||
u8 shareState:2;
|
||||
u8 recvMonCapacity;
|
||||
u8 unk_0A[40];
|
||||
u8 unk_32[40];
|
||||
u8 unk_5A[4][40];
|
||||
@@ -695,11 +695,12 @@ struct MEWonderCardStruct
|
||||
|
||||
struct MEventBuffer_3430_Sub
|
||||
{
|
||||
u16 unk_00;
|
||||
u16 unk_02;
|
||||
u16 unk_04;
|
||||
u16 linkWins;
|
||||
u16 linkLosses;
|
||||
u16 linkTrades;
|
||||
u16 unk_06;
|
||||
u16 unk_08[2][7];
|
||||
u16 distributedMons[2][7]; // [0][x] = species
|
||||
// [1][x] = ???
|
||||
};
|
||||
|
||||
struct MEventBuffer_3430
|
||||
|
||||
+2
-2
@@ -253,11 +253,11 @@ void sub_800A620(void);
|
||||
void sub_80FBB4C(void);
|
||||
u8 sub_800ABAC(void);
|
||||
u8 sub_800ABBC(void);
|
||||
void sub_800AAC0(void);
|
||||
void Link_TryStartSend5FFF(void);
|
||||
void OpenLink(void);
|
||||
bool8 IsLinkMaster(void);
|
||||
void CheckShouldAdvanceLinkState(void);
|
||||
void sub_800AA80(u16 a0);
|
||||
void Link_StartSend5FFFwithParam(u16 a0);
|
||||
void sub_80098D8(void);
|
||||
void CloseLink(void);
|
||||
bool8 IsLinkTaskFinished(void);
|
||||
|
||||
+3
-3
@@ -295,7 +295,7 @@ typedef struct UnkRfuStruct_2
|
||||
/* 0x068 */ u8 filler_68[4];
|
||||
/* 0x06c */ struct RfuBlockSend cmd_8800_sendbuf;
|
||||
/* 0x080 */ struct RfuBlockSend cmd_8800_recvbuf[5];
|
||||
/* 0x0e4 */ u8 unk_e4[5];
|
||||
/* 0x0e4 */ u8 cmd5f00Ack[5];
|
||||
/* 0x0e9 */ u8 unk_e9[5];
|
||||
/* 0x0ee */ vu8 errorState;
|
||||
/* 0x0ef */ u8 unk_ef;
|
||||
@@ -365,7 +365,7 @@ void AddTextPrinterToWindow1(const u8 *str);
|
||||
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
|
||||
void LinkRfu_FatalError(void);
|
||||
void MG_DrawCheckerboardPattern(void);
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
|
||||
void Rfu_BeginBuildAndSendCommand5F(void);
|
||||
bool8 IsLinkRfuTaskFinished(void);
|
||||
void DestroyWirelessStatusIndicatorSprite(void);
|
||||
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
|
||||
@@ -413,7 +413,7 @@ void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
|
||||
bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
|
||||
void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3);
|
||||
void sub_80FAFE0(u8 a0);
|
||||
void sub_80FAFE0(bool8 unk_0a_7);
|
||||
bool32 RfuSerialNumberIsValid(u32 a0);
|
||||
bool8 sub_80FC1B0(void);
|
||||
bool8 sub_80F8F40(void);
|
||||
|
||||
+26
-9
@@ -13,7 +13,7 @@ struct MEventClientHeaderStruct
|
||||
u16 id;
|
||||
u16 unk_16[4];
|
||||
struct MEventBuffer_3430_Sub unk_20;
|
||||
u8 unk_44;
|
||||
u8 maxDistributionMons;
|
||||
u8 playerName[7];
|
||||
u8 playerTrainerId[4];
|
||||
u16 easyChatProfile[6];
|
||||
@@ -33,21 +33,38 @@ struct MEvent_Str_2
|
||||
u8 fill_00[0x40];
|
||||
};
|
||||
|
||||
struct UnkStruct_8467FB8
|
||||
{
|
||||
u8 textPal1:4;
|
||||
u8 textPal2:4;
|
||||
u8 textPal3:4;
|
||||
u8 index:4;
|
||||
const u8 * tiles;
|
||||
const u8 * map;
|
||||
const u16 * pal;
|
||||
};
|
||||
|
||||
extern const u16 gCard1Pal[];
|
||||
extern const u16 gCard2Pal[];
|
||||
extern const u16 gCard3Pal[];
|
||||
extern const u16 gCard4Pal[];
|
||||
extern const u16 gCard5Pal[];
|
||||
|
||||
struct MEWonderNewsData * GetSavedWonderNews(void);
|
||||
struct MEWonderCardData * GetSavedWonderCard(void);
|
||||
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void);
|
||||
struct MENewsJisanStruct * GetMENewsJisanStructPtr(void);
|
||||
bool32 sub_8143DC8(const struct MEWonderNewsData * src);
|
||||
bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src);
|
||||
bool32 ValidateReceivedWonderNews(void);
|
||||
bool32 ValidateReceivedWonderCard(void);
|
||||
bool32 sub_8143EF4(const u8 * src);
|
||||
bool32 sub_8143F68(const struct MEWonderCardData * data);
|
||||
void sub_814410C(struct MEWonderCardData * buffer);
|
||||
bool32 sub_8144254(const u16 * data);
|
||||
bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src);
|
||||
bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data);
|
||||
void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer);
|
||||
bool32 MEvent_ReceiveDistributionMon(const u16 * data);
|
||||
void BuildMEventClientHeader(struct MEventClientHeaderStruct * data);
|
||||
bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data);
|
||||
u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
|
||||
u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
|
||||
u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
|
||||
bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1);
|
||||
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command);
|
||||
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6);
|
||||
@@ -66,8 +83,8 @@ void MENews_RemoveScrollIndicatorArrowPair(void);
|
||||
bool32 WonderNews_Test_Unk_02(void);
|
||||
bool32 WonderCard_Test_Unk_08_6(void);
|
||||
u32 MENews_GetInput(u16 input);
|
||||
void sub_8143D24(void);
|
||||
u16 sub_81445C0(u32 command);
|
||||
void InitMEventData(void);
|
||||
u16 MEvent_GetBattleCardCount(u32 command);
|
||||
void sub_8144714(u32 a0, u32 a1);
|
||||
u16 *GetMEventProfileECWordsMaybe(void);
|
||||
void sub_81446C4(void);
|
||||
|
||||
@@ -48,6 +48,7 @@ struct mevent_client_cmd
|
||||
#define CLI_RECVBUF {.instr = 12, .parameter = 0}
|
||||
#define CLI_REQWORD {.instr = 13, .parameter = 0}
|
||||
#define CLI_SNDWORD {.instr = 14, .parameter = 0}
|
||||
#define CLI_RECVMON {.instr = 16, .parameter = 0}
|
||||
#define CLI_RECVRAM {.instr = 17, .parameter = 0}
|
||||
#define CLI_SENDALL {.instr = 20, .parameter = 0}
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
|
||||
void ResetPokeJumpResults(void);
|
||||
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
|
||||
void sub_8147AA8(u16 species, MainCallback callback);
|
||||
void StartPokemonJump(u16 species, MainCallback callback);
|
||||
|
||||
#endif // GUARD_POKEMON_JUMP_H
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ u8 *GetRamScript(u8 objectId, u8 *script);
|
||||
bool32 sub_80991F8(void);
|
||||
u8 *sub_8099244(void);
|
||||
void sub_80992A0(u8 *script, u16 scriptSize);
|
||||
bool32 sub_8069DFC(void);
|
||||
bool32 ValidateRamScript(void);
|
||||
void MEventSetRamScript(u8 * script, u16 scriptSize);
|
||||
u8 * sub_8069E48(void);
|
||||
void sub_8069998(u8 var);
|
||||
|
||||
@@ -1111,4 +1111,19 @@ extern const u8 gText_PeopleBattling[];
|
||||
extern const u8 gText_PeopleInUnionRoom[];
|
||||
extern const u8 gText_PeopleCommunicating[];
|
||||
|
||||
// mevent
|
||||
extern const u8 gJPText_ReceiveMysteryGiftWithEReader[];
|
||||
extern const u8 gJPText_SelectConnectFromEReaderMenu[];
|
||||
extern const u8 gJPText_SelectConnectWithGBA[];
|
||||
extern const u8 gJPText_LinkIsIncorrect[];
|
||||
extern const u8 gJPText_CardReadingHasBeenHalted[];
|
||||
extern const u8 gJPText_Connecting[];
|
||||
extern const u8 gJPText_ConnectionErrorCheckLink[];
|
||||
extern const u8 gJPText_ConnectionErrorTryAgain[];
|
||||
extern const u8 gJPText_AllowEReaderToLoadCard[];
|
||||
extern const u8 gJPText_ConnectionComplete[];
|
||||
extern const u8 gJPText_NewTrainerHasComeToSevii[];
|
||||
extern const u8 gJPText_PleaseWaitAMoment[];
|
||||
extern const u8 gJPText_WriteErrorUnableToSaveData[];
|
||||
|
||||
#endif //GUARD_STRINGS_H
|
||||
|
||||
+4
-2
@@ -270,7 +270,8 @@ SECTIONS {
|
||||
src/mevent_server_helpers.o(.text);
|
||||
src/mevent_client.o(.text);
|
||||
src/mevent_server.o(.text);
|
||||
src/mevent_8145654.o(.text);
|
||||
src/mevent_show_card.o(.text);
|
||||
src/mevent_show_news.o(.text);
|
||||
src/menews_jisan.o(.text);
|
||||
src/seagallop.o(.text);
|
||||
asm/pokemon_jump.o(.text);
|
||||
@@ -558,7 +559,8 @@ SECTIONS {
|
||||
src/mevent_server_helpers.o(.rodata);
|
||||
src/mevent_client.o(.rodata);
|
||||
src/mevent_server.o(.rodata);
|
||||
src/mevent_8145654.o(.rodata);
|
||||
src/mevent_show_card.o(.rodata);
|
||||
src/mevent_show_news.o(.rodata);
|
||||
src/mevent_scripts.o(.rodata);
|
||||
src/menews_jisan.o(.rodata);
|
||||
src/menews_jisan.o(.rodata.str1.4);
|
||||
|
||||
@@ -831,7 +831,7 @@ void sub_802F6A8(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (gWirelessCommType == 0)
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
else
|
||||
sub_800AB9C();
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_802F610;
|
||||
|
||||
+1
-1
@@ -1154,7 +1154,7 @@ static void CB2_PreInitMultiBattle(void)
|
||||
if (gWirelessCommType)
|
||||
sub_800AB9C();
|
||||
else
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
||||
+2
-2
@@ -118,7 +118,7 @@ bool32 IsMysteryGiftEnabled(void)
|
||||
return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLED);
|
||||
}
|
||||
|
||||
void sub_806E2D0(void)
|
||||
void ResetMysteryEventFlags(void)
|
||||
{
|
||||
FlagClear(FLAG_MYSTERY_EVENT_DONE);
|
||||
FlagClear(FLAG_0x3D9);
|
||||
@@ -138,7 +138,7 @@ void sub_806E2D0(void)
|
||||
FlagClear(FLAG_0x3E7);
|
||||
}
|
||||
|
||||
void sub_806E370(void)
|
||||
void ResetMysteryEventVars(void)
|
||||
{
|
||||
VarSet(VAR_EVENT_PICHU_SLOT, 0);
|
||||
VarSet(VAR_0x40B6, 0);
|
||||
|
||||
@@ -662,7 +662,7 @@ static void sub_807E678(u8 taskId)
|
||||
case 1:
|
||||
if (!sub_807E40C() && BGMusicStopped())
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
data[0]++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1920,15 +1920,15 @@ u16 Special_BattleCardAction(void)
|
||||
switch (gSpecialVar_Result)
|
||||
{
|
||||
case 0:
|
||||
return sub_81445C0(3);
|
||||
return MEvent_GetBattleCardCount(3);
|
||||
case 1:
|
||||
return sub_81445C0(4);
|
||||
return MEvent_GetBattleCardCount(4);
|
||||
case 2:
|
||||
return sub_81445C0(0);
|
||||
return MEvent_GetBattleCardCount(0);
|
||||
case 3:
|
||||
return sub_81445C0(1);
|
||||
return MEvent_GetBattleCardCount(1);
|
||||
case 4:
|
||||
return sub_81445C0(2);
|
||||
return MEvent_GetBattleCardCount(2);
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
|
||||
return 0;
|
||||
|
||||
+38
-38
@@ -82,11 +82,11 @@ u32 gFiller_3003EC0;
|
||||
u16 gLinkHeldKeys;
|
||||
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
||||
u32 gLinkStatus;
|
||||
bool8 gUnknown_3003F24;
|
||||
bool8 gLinkAllAcked5FFF;
|
||||
bool8 gUnknown_3003F28;
|
||||
bool8 gUnknown_3003F2C[MAX_LINK_PLAYERS];
|
||||
bool8 gUnknown_3003F30[MAX_LINK_PLAYERS];
|
||||
u16 gUnknown_3003F34;
|
||||
bool8 gLinkCommand2FFEAck[MAX_LINK_PLAYERS];
|
||||
bool8 gLinkCommand5FFFAck[MAX_LINK_PLAYERS];
|
||||
u16 gLinkCmd5FFFparam;
|
||||
u8 gSuppressLinkErrorMessage;
|
||||
bool8 gWirelessCommType;
|
||||
bool8 gSavedLinkPlayerCount;
|
||||
@@ -123,8 +123,8 @@ EWRAM_DATA struct {
|
||||
u8 lastSendQueueCount;
|
||||
u8 unk_06;
|
||||
} sLinkErrorBuffer = {};
|
||||
EWRAM_DATA u16 gUnknown_202285C = 0;
|
||||
EWRAM_DATA void *gUnknown_2022860 = NULL;
|
||||
static EWRAM_DATA u16 sStartSend5FFFfailures = 0;
|
||||
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
|
||||
|
||||
static void InitLocalLinkPlayer(void);
|
||||
static void sub_800978C(void);
|
||||
@@ -142,8 +142,8 @@ static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
||||
static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||
static void LinkCB_RequestPlayerDataExchange(void);
|
||||
static void Task_PrintTestData(u8 taskId);
|
||||
static void sub_800AB0C(void);
|
||||
static void sub_800AB38(void);
|
||||
static void LinkCB_BuildCommand5FFF(void);
|
||||
static void LinkCB_WaitAckCommand5FFF(void);
|
||||
static void sub_800ABD4(void);
|
||||
static void sub_800AC00(void);
|
||||
static void CheckErrorStatus(void);
|
||||
@@ -379,8 +379,8 @@ void OpenLink(void)
|
||||
ResetBlockSend();
|
||||
gUnknown_3000E4C = 0;
|
||||
gUnknown_3003F28 = FALSE;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = 0;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
gLinkCmd5FFFparam = 0;
|
||||
CreateTask(Task_TriggerHandshake, 2);
|
||||
}
|
||||
else
|
||||
@@ -391,8 +391,8 @@ void OpenLink(void)
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gRemoteLinkPlayersNotReceived[i] = TRUE;
|
||||
gUnknown_3003F30[i] = FALSE;
|
||||
gUnknown_3003F2C[i] = FALSE;
|
||||
gLinkCommand5FFFAck[i] = FALSE;
|
||||
gLinkCommand2FFEAck[i] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -468,7 +468,7 @@ void LinkTestProcessKeyInput(void)
|
||||
}
|
||||
if (JOY_NEW(SELECT_BUTTON))
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
}
|
||||
if (gLinkTestDebugValuesEnabled)
|
||||
{
|
||||
@@ -632,10 +632,10 @@ void ProcessRecvCmds(u8 unused)
|
||||
}
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gUnknown_3003F30[i] = TRUE;
|
||||
gLinkCommand5FFFAck[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0x2FFE:
|
||||
gUnknown_3003F2C[i] = TRUE;
|
||||
gLinkCommand2FFEAck[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0xAAAA:
|
||||
sub_800A3CC();
|
||||
@@ -701,7 +701,7 @@ void BuildSendCmd(u16 command)
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gSendCmd[0] = LINKCMD_0x5FFF;
|
||||
gSendCmd[1] = gUnknown_3003F34;
|
||||
gSendCmd[1] = gLinkCmd5FFFparam;
|
||||
break;
|
||||
case LINKCMD_0x5566:
|
||||
gSendCmd[0] = LINKCMD_0x5566;
|
||||
@@ -1312,54 +1312,54 @@ u8 sub_800AA74(void)
|
||||
return gUnknown_3000E50;
|
||||
}
|
||||
|
||||
void sub_800AA80(u16 a0)
|
||||
void Link_StartSend5FFFwithParam(u16 a0)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AB0C;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = a0;
|
||||
gLinkCallback = LinkCB_BuildCommand5FFF;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
gLinkCmd5FFFparam = a0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AAC0(void)
|
||||
void Link_TryStartSend5FFF(void)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
gUnknown_202285C++;
|
||||
sStartSend5FFFfailures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AB0C;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = 0;
|
||||
gLinkCallback = LinkCB_BuildCommand5FFF;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
gLinkCmd5FFFparam = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AB0C(void)
|
||||
static void LinkCB_BuildCommand5FFF(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x5FFF);
|
||||
gLinkCallback = sub_800AB38;
|
||||
gLinkCallback = LinkCB_WaitAckCommand5FFF;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AB38(void)
|
||||
static void LinkCB_WaitAckCommand5FFF(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
@@ -1369,7 +1369,7 @@ static void sub_800AB38(void)
|
||||
count = 0;
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (gUnknown_3003F30[i])
|
||||
if (gLinkCommand5FFFAck[i])
|
||||
{
|
||||
count++;
|
||||
}
|
||||
@@ -1380,7 +1380,7 @@ static void sub_800AB38(void)
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
gLinkCallback = NULL;
|
||||
gUnknown_3003F24 = TRUE;
|
||||
gLinkAllAcked5FFF = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1396,7 +1396,7 @@ void sub_800AB9C(void)
|
||||
{
|
||||
gLinkCallback = sub_800ABD4;
|
||||
}
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1417,7 +1417,7 @@ static void sub_800AC00(void)
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (!gUnknown_3003F2C[i])
|
||||
if (!gLinkCommand2FFEAck[i])
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -1426,7 +1426,7 @@ static void sub_800AC00(void)
|
||||
{
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gUnknown_3003F2C[i] = FALSE;
|
||||
gLinkCommand2FFEAck[i] = FALSE;
|
||||
}
|
||||
gLinkCallback = NULL;
|
||||
}
|
||||
@@ -1482,7 +1482,7 @@ void CB2_LinkError(void)
|
||||
SetVBlankCallback(sub_800978C);
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, sLinkErrorBgTemplates, 2);
|
||||
gUnknown_2022860 = tilemapBuffer = malloc(0x800);
|
||||
sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
|
||||
SetBgTilemapBuffer(1, tilemapBuffer);
|
||||
if (InitWindows(sLinkErrorWindowTemplates))
|
||||
{
|
||||
@@ -1603,12 +1603,12 @@ static void CB2_PrintErrorMessage(void)
|
||||
|
||||
bool8 GetSioMultiSI(void)
|
||||
{
|
||||
return (REG_SIOCNT & 0x04) != 0;
|
||||
return (REG_SIOCNT & SIO_MULTI_SI) != 0;
|
||||
}
|
||||
|
||||
static bool8 IsSioMultiMaster(void)
|
||||
{
|
||||
return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04);
|
||||
return (REG_SIOCNT & SIO_MULTI_SD) && !(REG_SIOCNT & SIO_MULTI_SI);
|
||||
}
|
||||
|
||||
bool8 IsLinkConnectionEstablished(void)
|
||||
|
||||
+20
-20
@@ -1027,7 +1027,7 @@ static void RfuHandleReceiveCommand(u8 unused)
|
||||
Rfu_InitBlockSend(gUnknown_843EC64[gRecvCmds[i][1]].buffer, (u16)gUnknown_843EC64[gRecvCmds[i][1]].size);
|
||||
break;
|
||||
case RFU_COMMAND_0x5f00:
|
||||
Rfu.unk_e4[i] = 1;
|
||||
Rfu.cmd5f00Ack[i] = 1;
|
||||
break;
|
||||
case RFU_COMMAND_0x6600:
|
||||
if (Rfu.unk_100 == gRecvCmds[i][1])
|
||||
@@ -1280,7 +1280,7 @@ bool8 sub_80FA0F8(u8 a0)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_80FA114(void)
|
||||
static void RfuFunc_End5F00_PowerDownRfu(void)
|
||||
{
|
||||
rfu_clearAllSlot();
|
||||
rfu_LMAN_powerDownRFU();
|
||||
@@ -1289,14 +1289,14 @@ static void sub_80FA114(void)
|
||||
Rfu.RfuFunc = NULL;
|
||||
}
|
||||
|
||||
static void sub_80FA140(void)
|
||||
static void RfuFunc_End5F00_ParentDisconnect(void)
|
||||
{
|
||||
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
|
||||
rfu_waitREQComplete();
|
||||
sub_80FA114();
|
||||
RfuFunc_End5F00_PowerDownRfu();
|
||||
}
|
||||
|
||||
static void sub_80FA160(void)
|
||||
static void RfuFunc_End5F00(void)
|
||||
{
|
||||
if (Rfu.parent_child == MODE_CHILD)
|
||||
{
|
||||
@@ -1304,7 +1304,7 @@ static void sub_80FA160(void)
|
||||
Rfu.unk_ce4 = 2;
|
||||
}
|
||||
else
|
||||
Rfu.RfuFunc = sub_80FA140;
|
||||
Rfu.RfuFunc = RfuFunc_End5F00_ParentDisconnect;
|
||||
}
|
||||
|
||||
void LinkRfu_FatalError(void)
|
||||
@@ -1314,7 +1314,7 @@ void LinkRfu_FatalError(void)
|
||||
Rfu.bm_DisconnectSlot = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
|
||||
}
|
||||
|
||||
static void sub_80FA1C4(void)
|
||||
static void RfuFunc_WaitAck5F00(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 playerCount = Rfu.playerCount;
|
||||
@@ -1322,45 +1322,45 @@ static void sub_80FA1C4(void)
|
||||
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
{
|
||||
if (Rfu.unk_e4[i])
|
||||
if (Rfu.cmd5f00Ack[i])
|
||||
count++;
|
||||
}
|
||||
if (count == playerCount)
|
||||
{
|
||||
gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
|
||||
gBattleTypeFlags &= ~(BATTLE_TYPE_20 | 0xFFFF0000);
|
||||
if (Rfu.parent_child == MODE_CHILD)
|
||||
{
|
||||
Rfu.errorState = 3;
|
||||
sub_80FA160();
|
||||
RfuFunc_End5F00();
|
||||
}
|
||||
else
|
||||
Rfu.RfuFunc = sub_80FA160;
|
||||
Rfu.RfuFunc = RfuFunc_End5F00;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80FA224(void)
|
||||
static void RfuFunc_BuildCommand5F00(void)
|
||||
{
|
||||
if (gSendCmd[0] == 0 && !Rfu.unk_ce8)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x5f00);
|
||||
Rfu.RfuFunc = sub_80FA1C4;
|
||||
Rfu.RfuFunc = RfuFunc_WaitAck5F00;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80FA25C(u8 taskId)
|
||||
static void Task_WaitRfuFuncAndSetBuildCmd5F00(u8 taskId)
|
||||
{
|
||||
if (Rfu.RfuFunc == NULL)
|
||||
{
|
||||
Rfu.unk_cd9 = 1;
|
||||
Rfu.RfuFunc = sub_80FA224;
|
||||
Rfu.RfuFunc = RfuFunc_BuildCommand5F00;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
|
||||
void Rfu_BeginBuildAndSendCommand5F(void)
|
||||
{
|
||||
if (!FuncIsActiveTask(sub_80FA25C))
|
||||
CreateTask(sub_80FA25C, 5);
|
||||
if (!FuncIsActiveTask(Task_WaitRfuFuncAndSetBuildCmd5F00))
|
||||
CreateTask(Task_WaitRfuFuncAndSetBuildCmd5F00, 5);
|
||||
}
|
||||
|
||||
static void sub_80FA2B0(void)
|
||||
@@ -1938,9 +1938,9 @@ void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level)
|
||||
gHostRFUtgtGnameBuffer.level = level;
|
||||
}
|
||||
|
||||
void sub_80FAFE0(u8 a0)
|
||||
void sub_80FAFE0(bool8 unk_0a_7)
|
||||
{
|
||||
gHostRFUtgtGnameBuffer.unk_0a_7 = a0;
|
||||
gHostRFUtgtGnameBuffer.unk_0a_7 = unk_0a_7;
|
||||
rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
|
||||
}
|
||||
|
||||
|
||||
+216
-213
@@ -21,77 +21,65 @@
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "help_system.h"
|
||||
#include "mevent.h"
|
||||
#include "strings.h"
|
||||
|
||||
struct MEventTaskData1
|
||||
{
|
||||
u16 t00;
|
||||
u16 stateAdvanceDelay;
|
||||
u16 t02;
|
||||
u16 t04;
|
||||
u16 t06;
|
||||
u8 state;
|
||||
u8 t09;
|
||||
u8 textOrReceiveState;
|
||||
u8 t0A;
|
||||
u8 t0B;
|
||||
u8 t0C;
|
||||
u8 t0D;
|
||||
u8 t0E;
|
||||
u8 initialSendResult;
|
||||
struct MEvent_Str_2 *t10;
|
||||
};
|
||||
|
||||
void sub_8143910(u8 taskId);
|
||||
bool32 sub_8143E64(const struct MEWonderNewsData * src);
|
||||
void sub_8143E9C(void);
|
||||
void sub_8143ED0(void);
|
||||
bool32 sub_8144018(const struct MEWonderCardData * src);
|
||||
void BlankSavedWonderCard(void);
|
||||
void BlankMEventBuffer2(void);
|
||||
void sub_8144824(u32, u32, u32 *, s32);
|
||||
void sub_8144790(void);
|
||||
static void Task_EReaderComm(u8 taskId);
|
||||
static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * src);
|
||||
static void BlankWonderNews(void);
|
||||
static void BlankMENewsJisan(void);
|
||||
static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * src);
|
||||
static void BlankSavedWonderCard(void);
|
||||
static void BlankMEventBuffer2(void);
|
||||
static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 *idsList, s32 count);
|
||||
static void BlankBuffer344(void);
|
||||
|
||||
extern const u8 gUnknown_841DE52[];
|
||||
extern const u8 gUnknown_841DE53[];
|
||||
extern const u8 gUnknown_841DE54[];
|
||||
extern const u8 gUnknown_841DE7C[];
|
||||
extern const u8 gUnknown_841DE7D[];
|
||||
extern const u8 gUnknown_841DE95[];
|
||||
extern const u8 gUnknown_841DE96[];
|
||||
extern const u8 gUnknown_841DE97[];
|
||||
extern const u8 gUnknown_841DE98[];
|
||||
extern const u8 gUnknown_841DE99[];
|
||||
extern const u8 gUnknown_841DE9A[];
|
||||
extern const u8 gUnknown_841DE9B[];
|
||||
extern const u8 gUnknown_841DE9C[];
|
||||
extern const u8 gUnknownSerialData_Start[];
|
||||
extern const u8 gUnknownSerialData_End[];
|
||||
|
||||
const u16 gUnknown_8466F00[] = {
|
||||
0x02a7,
|
||||
0x02a8,
|
||||
0x02a9,
|
||||
0x02aa,
|
||||
0x02ab,
|
||||
0x02ac,
|
||||
0x02ad,
|
||||
0x02ae,
|
||||
0x02af,
|
||||
0x02b0,
|
||||
0x02b1,
|
||||
0x02b2,
|
||||
0x02b3,
|
||||
0x02b4,
|
||||
0x02b5,
|
||||
0x02b6,
|
||||
0x02b7,
|
||||
0x02b8,
|
||||
0x02b9,
|
||||
0x02ba
|
||||
static const u16 sGiftItemFlagIds[] = {
|
||||
FLAG_GOT_AURORA_TICKET,
|
||||
FLAG_GOT_MYSTIC_TICKET,
|
||||
FLAG_0x2A9,
|
||||
FLAG_0x2AA,
|
||||
FLAG_0x2AB,
|
||||
FLAG_0x2AC,
|
||||
FLAG_0x2AD,
|
||||
FLAG_0x2AE,
|
||||
FLAG_0x2AF,
|
||||
FLAG_0x2B0,
|
||||
FLAG_0x2B1,
|
||||
FLAG_0x2B2,
|
||||
FLAG_0x2B3,
|
||||
FLAG_0x2B4,
|
||||
FLAG_0x2B5,
|
||||
FLAG_0x2B6,
|
||||
FLAG_0x2B7,
|
||||
FLAG_0x2B8,
|
||||
FLAG_0x2B9,
|
||||
FLAG_0x2BA
|
||||
};
|
||||
|
||||
struct MEvent_Str_1 gUnknown_3005ED0;
|
||||
struct MEvent_Str_1 sMEventSendToEReaderManager;
|
||||
|
||||
static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE;
|
||||
static EWRAM_DATA bool32 sReceivedWonderCardIsValid = FALSE;
|
||||
|
||||
void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data)
|
||||
void SendUnknownSerialData_Init(struct MEvent_Str_1 *mgr, size_t size, const void * data)
|
||||
{
|
||||
vu16 imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
@@ -106,7 +94,7 @@ void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data)
|
||||
mgr->data = data;
|
||||
}
|
||||
|
||||
void sub_8143644(struct MEvent_Str_1 *unused)
|
||||
void SendUnknownSerialData_Teardown(struct MEvent_Str_1 *unused)
|
||||
{
|
||||
vu16 imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
@@ -116,7 +104,7 @@ void sub_8143644(struct MEvent_Str_1 *unused)
|
||||
REG_IME = imeBak;
|
||||
}
|
||||
|
||||
u8 sub_8143674(struct MEvent_Str_1 *mgr)
|
||||
u8 SendUnknownSerialData_Run(struct MEvent_Str_1 *mgr)
|
||||
{
|
||||
u8 resp = 0;
|
||||
mgr->status = EReaderHandleTransfer(1, mgr->size, mgr->data, 0);
|
||||
@@ -161,32 +149,32 @@ static bool32 IsEReaderConnectionSane(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 sub_8143770(u8 * r4, u16 * r5)
|
||||
static u32 EReaderReceive(u8 * state_p, u16 * receiveDelay)
|
||||
{
|
||||
if ((*r4 == 3 || *r4 == 4 || *r4 == 5) && HasLinkErrorOccurred())
|
||||
if ((*state_p == 3 || *state_p == 4 || *state_p == 5) && HasLinkErrorOccurred())
|
||||
{
|
||||
*r4 = 0;
|
||||
*state_p = 0;
|
||||
return 3;
|
||||
}
|
||||
switch (*r4)
|
||||
switch (*state_p)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkMaster() && GetLinkPlayerCount_2() > 1)
|
||||
{
|
||||
*r4 = 1;
|
||||
*state_p = 1;
|
||||
;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
*r4 = 0;
|
||||
*state_p = 0;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (++(*r5) > 5)
|
||||
if (++(*receiveDelay) > 5)
|
||||
{
|
||||
*r5 = 0;
|
||||
*r4 = 2;
|
||||
*receiveDelay = 0;
|
||||
*state_p = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -194,19 +182,19 @@ u32 sub_8143770(u8 * r4, u16 * r5)
|
||||
{
|
||||
PlaySE(SE_PINPON);
|
||||
CheckShouldAdvanceLinkState();
|
||||
*r5 = 0;
|
||||
*r4 = 3;
|
||||
*receiveDelay = 0;
|
||||
*state_p = 3;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
*r4 = 0;
|
||||
*state_p = 0;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (++(*r5) > 30)
|
||||
if (++(*receiveDelay) > 30)
|
||||
{
|
||||
*r4 = 0;
|
||||
*state_p = 0;
|
||||
return 5;
|
||||
}
|
||||
else if (IsLinkConnectionEstablished())
|
||||
@@ -215,24 +203,24 @@ u32 sub_8143770(u8 * r4, u16 * r5)
|
||||
{
|
||||
if (IsLinkPlayerDataExchangeComplete())
|
||||
{
|
||||
*r4 = 0;
|
||||
*state_p = 0;
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
*r4 = 4;
|
||||
*state_p = 4;
|
||||
}
|
||||
else
|
||||
*r4 = 3;
|
||||
*state_p = 3;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
sub_800AA80(0);
|
||||
*r4 = 5;
|
||||
Link_StartSend5FFFwithParam(0);
|
||||
*state_p = 5;
|
||||
break;
|
||||
case 5:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
*r4 = 0;
|
||||
*state_p = 0;
|
||||
return 4;
|
||||
}
|
||||
break;
|
||||
@@ -242,19 +230,19 @@ u32 sub_8143770(u8 * r4, u16 * r5)
|
||||
|
||||
void task_add_00_ereader(void)
|
||||
{
|
||||
u8 taskId = CreateTask(sub_8143910, 0);
|
||||
u8 taskId = CreateTask(Task_EReaderComm, 0);
|
||||
struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data;
|
||||
data->state = 0;
|
||||
data->t09 = 0;
|
||||
data->textOrReceiveState = 0;
|
||||
data->t0A = 0;
|
||||
data->t0B = 0;
|
||||
data->t0C = 0;
|
||||
data->t0D = 0;
|
||||
data->t00 = 0;
|
||||
data->stateAdvanceDelay = 0;
|
||||
data->t02 = 0;
|
||||
data->t04 = 0;
|
||||
data->t06 = 0;
|
||||
data->t0E = 0;
|
||||
data->initialSendResult = 0;
|
||||
data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2));
|
||||
}
|
||||
|
||||
@@ -273,22 +261,22 @@ static bool32 AdvanceDelayTimerCheckTimeout(u16 * a0, u16 a1)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8143910(u8 taskId)
|
||||
static void Task_EReaderComm(u8 taskId)
|
||||
{
|
||||
struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data;
|
||||
switch (data->state)
|
||||
{
|
||||
case 0:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE52))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader))
|
||||
data->state = 1;
|
||||
break;
|
||||
case 1:
|
||||
ResetTTDataBuffer();
|
||||
ResetDelayTimer(&data->t00);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
data->state = 2;
|
||||
break;
|
||||
case 2:
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->t00, 10))
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10))
|
||||
data->state = 3;
|
||||
break;
|
||||
case 3:
|
||||
@@ -301,22 +289,22 @@ void sub_8143910(u8 taskId)
|
||||
data->state = 13;
|
||||
break;
|
||||
case 4:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE53))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu))
|
||||
{
|
||||
AddTextPrinterToWindow1(gUnknown_841DE54);
|
||||
ResetDelayTimer(&data->t00);
|
||||
AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
data->state = 5;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->t00, 90))
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 90))
|
||||
{
|
||||
ResetTTDataBuffer();
|
||||
data->state = 6;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
ResetDelayTimer(&data->t00);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
PlaySE(SE_SELECT);
|
||||
data->state = 23;
|
||||
}
|
||||
@@ -326,12 +314,12 @@ void sub_8143910(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
CloseLink();
|
||||
ResetDelayTimer(&data->t00);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
data->state = 23;
|
||||
}
|
||||
else if (GetLinkPlayerCount_2() > 1)
|
||||
{
|
||||
ResetDelayTimer(&data->t00);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
CloseLink();
|
||||
data->state = 7;
|
||||
}
|
||||
@@ -339,72 +327,80 @@ void sub_8143910(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
CloseLink();
|
||||
ResetDelayTimer(&data->t00);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
data->state = 8;
|
||||
}
|
||||
else if (AdvanceDelayTimerCheckTimeout(&data->t00, 10))
|
||||
else if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10))
|
||||
{
|
||||
CloseLink();
|
||||
ResetTTDataBuffer();
|
||||
ResetDelayTimer(&data->t00);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7C))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_LinkIsIncorrect))
|
||||
data->state = 4;
|
||||
break;
|
||||
case 8:
|
||||
AddTextPrinterToWindow1(gUnknown_841DE95);
|
||||
sub_81435DC(&gUnknown_3005ED0, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start);
|
||||
AddTextPrinterToWindow1(gJPText_Connecting);
|
||||
SendUnknownSerialData_Init(&sMEventSendToEReaderManager, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start);
|
||||
data->state = 9;
|
||||
break;
|
||||
case 9:
|
||||
data->t0E = sub_8143674(&gUnknown_3005ED0);
|
||||
if (data->t0E != 0)
|
||||
data->initialSendResult = SendUnknownSerialData_Run(&sMEventSendToEReaderManager);
|
||||
if (data->initialSendResult != 0)
|
||||
data->state = 10;
|
||||
break;
|
||||
case 10:
|
||||
sub_8143644(&gUnknown_3005ED0);
|
||||
if (data->t0E == 3)
|
||||
SendUnknownSerialData_Teardown(&sMEventSendToEReaderManager);
|
||||
if (data->initialSendResult == 3)
|
||||
// Error
|
||||
data->state = 20;
|
||||
else if (data->t0E == 1)
|
||||
else if (data->initialSendResult == 1)
|
||||
{
|
||||
ResetDelayTimer(&data->t00);
|
||||
AddTextPrinterToWindow1(gUnknown_841DE9B);
|
||||
// OK
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment);
|
||||
data->state = 11;
|
||||
}
|
||||
else
|
||||
// Try again
|
||||
data->state = 0;
|
||||
break;
|
||||
case 11:
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->t00, 840))
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 840))
|
||||
data->state = 12;
|
||||
break;
|
||||
case 12:
|
||||
ResetTTDataBuffer();
|
||||
AddTextPrinterToWindow1(gUnknown_841DE98);
|
||||
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
|
||||
data->state = 13;
|
||||
break;
|
||||
case 13:
|
||||
switch (sub_8143770(&data->t09, &data->t00))
|
||||
switch (EReaderReceive(&data->textOrReceiveState, &data->stateAdvanceDelay))
|
||||
{
|
||||
case 0:
|
||||
// Running
|
||||
break;
|
||||
case 2:
|
||||
AddTextPrinterToWindow1(gUnknown_841DE95);
|
||||
// Done
|
||||
AddTextPrinterToWindow1(gJPText_Connecting);
|
||||
data->state = 14;
|
||||
break;
|
||||
case 1:
|
||||
// Cancelled
|
||||
PlaySE(SE_SELECT);
|
||||
CloseLink();
|
||||
data->state = 23;
|
||||
break;
|
||||
case 5:
|
||||
// Error Try Again
|
||||
CloseLink();
|
||||
data->state = 21;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
// Error CheckLink
|
||||
CloseLink();
|
||||
data->state = 20;
|
||||
break;
|
||||
@@ -423,14 +419,14 @@ void sub_8143910(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
data->t0E = ValidateTrainerTowerData((struct EReaderTrainerHillSet *)gDecompressionBuffer);
|
||||
sub_800AA80(data->t0E);
|
||||
data->initialSendResult = ValidateTrainerTowerData((struct EReaderTrainerHillSet *)gDecompressionBuffer);
|
||||
Link_StartSend5FFFwithParam(data->initialSendResult);
|
||||
data->state = 16;
|
||||
break;
|
||||
case 16:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
if (data->t0E == 1)
|
||||
if (data->initialSendResult == 1)
|
||||
data->state = 17;
|
||||
else
|
||||
data->state = 20;
|
||||
@@ -439,39 +435,39 @@ void sub_8143910(u8 taskId)
|
||||
case 17:
|
||||
if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerHillSet *)gDecompressionBuffer))
|
||||
{
|
||||
AddTextPrinterToWindow1(gUnknown_841DE99);
|
||||
ResetDelayTimer(&data->t00);
|
||||
AddTextPrinterToWindow1(gJPText_ConnectionComplete);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
data->state = 18;
|
||||
}
|
||||
else
|
||||
data->state = 22;
|
||||
break;
|
||||
case 18:
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->t00, 120))
|
||||
if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 120))
|
||||
{
|
||||
AddTextPrinterToWindow1(gUnknown_841DE9A);
|
||||
PlayFanfare(258);
|
||||
AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToSevii);
|
||||
PlayFanfare(MUS_FANFA4);
|
||||
data->state = 19;
|
||||
}
|
||||
break;
|
||||
case 19:
|
||||
if (IsFanfareTaskInactive() &&JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
if (IsFanfareTaskInactive() && JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
data->state = 26;
|
||||
break;
|
||||
case 23:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7D))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted))
|
||||
data->state = 26;
|
||||
break;
|
||||
case 20:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE96))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink))
|
||||
data->state = 0;
|
||||
break;
|
||||
case 21:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE97))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain))
|
||||
data->state = 0;
|
||||
break;
|
||||
case 22:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE9C))
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData))
|
||||
data->state = 0;
|
||||
break;
|
||||
case 26:
|
||||
@@ -483,10 +479,10 @@ void sub_8143910(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8143D24(void)
|
||||
void InitMEventData(void)
|
||||
{
|
||||
CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers, sizeof(gSaveBlock1Ptr->mysteryEventBuffers));
|
||||
sub_8143ED0();
|
||||
BlankMENewsJisan();
|
||||
EC_ResetMEventProfileMaybe();
|
||||
}
|
||||
|
||||
@@ -517,14 +513,14 @@ u16 * GetMEventProfileECWordsMaybe(void)
|
||||
|
||||
void DestroyWonderNews(void)
|
||||
{
|
||||
sub_8143E9C();
|
||||
BlankWonderNews();
|
||||
}
|
||||
|
||||
bool32 sub_8143DC8(const struct MEWonderNewsData * src)
|
||||
bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src)
|
||||
{
|
||||
if (!sub_8143E64(src))
|
||||
if (!IsReceivedWonderNewsHeaderValid(src))
|
||||
return FALSE;
|
||||
sub_8143E9C();
|
||||
BlankWonderNews();
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.menews.data = *src;
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData));
|
||||
return TRUE;
|
||||
@@ -534,14 +530,14 @@ bool32 ValidateReceivedWonderNews(void)
|
||||
{
|
||||
if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData)) != gSaveBlock1Ptr->mysteryEventBuffers.menews.crc)
|
||||
return FALSE;
|
||||
if (!sub_8143E64(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data))
|
||||
if (!IsReceivedWonderNewsHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 sub_8143E64(const struct MEWonderNewsData * data)
|
||||
static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * data)
|
||||
{
|
||||
if (data->unk_00 == 0)
|
||||
if (data->newsId == 0)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -549,24 +545,24 @@ bool32 sub_8143E64(const struct MEWonderNewsData * data)
|
||||
bool32 WonderNews_Test_Unk_02(void)
|
||||
{
|
||||
const struct MEWonderNewsData * data = &gSaveBlock1Ptr->mysteryEventBuffers.menews.data;
|
||||
if (data->unk_02 == 0)
|
||||
if (data->shareState == 0)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8143E9C(void)
|
||||
static void BlankWonderNews(void)
|
||||
{
|
||||
CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryEventBuffers.menews.data));
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = 0;
|
||||
}
|
||||
|
||||
void sub_8143ED0(void)
|
||||
static void BlankMENewsJisan(void)
|
||||
{
|
||||
CpuFill32(0, GetMENewsJisanStructPtr(), sizeof(struct MENewsJisanStruct));
|
||||
MENewsJisanReset();
|
||||
}
|
||||
|
||||
bool32 sub_8143EF4(const u8 * src)
|
||||
bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src)
|
||||
{
|
||||
const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data;
|
||||
u32 i;
|
||||
@@ -584,22 +580,23 @@ void DestroyWonderCard(void)
|
||||
{
|
||||
BlankSavedWonderCard();
|
||||
BlankMEventBuffer2();
|
||||
sub_8144790();
|
||||
BlankBuffer344();
|
||||
ClearRamScript();
|
||||
sub_806E2D0();
|
||||
sub_806E370();
|
||||
ResetMysteryEventFlags();
|
||||
ResetMysteryEventVars();
|
||||
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
|
||||
}
|
||||
|
||||
bool32 sub_8143F68(const struct MEWonderCardData * data)
|
||||
bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data)
|
||||
{
|
||||
struct MEventBuffer_3430_Sub * r2;
|
||||
struct MEWonderCardData * r1;
|
||||
if (!sub_8144018(data))
|
||||
if (!IsReceivedWonderCardHeaderValid(data))
|
||||
return FALSE;
|
||||
DestroyWonderCard();
|
||||
memcpy(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, data, sizeof(struct MEWonderCardData));
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData));
|
||||
// Annoying hack to match
|
||||
r2 = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
|
||||
r1 = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
r2->unk_06 = r1->unk_02;
|
||||
@@ -610,24 +607,24 @@ bool32 ValidateReceivedWonderCard(void)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData)))
|
||||
return FALSE;
|
||||
if (!sub_8144018(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data))
|
||||
if (!IsReceivedWonderCardHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data))
|
||||
return FALSE;
|
||||
if (!sub_8069DFC())
|
||||
if (!ValidateRamScript())
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 sub_8144018(const struct MEWonderCardData * data)
|
||||
static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * data)
|
||||
{
|
||||
if (data->unk_00 == 0)
|
||||
if (data->cardId == 0)
|
||||
return FALSE;
|
||||
if (data->unk_08_0 > 2)
|
||||
return FALSE;
|
||||
if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2))
|
||||
if (!(data->shareState == 0 || data->shareState == 1 || data->shareState == 2))
|
||||
return FALSE;
|
||||
if (data->unk_08_2 > 7)
|
||||
return FALSE;
|
||||
if (data->unk_09 > 7)
|
||||
if (data->recvMonCapacity > 7)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -635,18 +632,18 @@ bool32 sub_8144018(const struct MEWonderCardData * data)
|
||||
bool32 WonderCard_Test_Unk_08_6(void)
|
||||
{
|
||||
const struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
if (data->unk_08_6 == 0)
|
||||
if (data->shareState == 0)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void BlankSavedWonderCard(void)
|
||||
static void BlankSavedWonderCard(void)
|
||||
{
|
||||
CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData));
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = 0;
|
||||
}
|
||||
|
||||
void BlankMEventBuffer2(void)
|
||||
static void BlankMEventBuffer2(void)
|
||||
{
|
||||
CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16));
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.crc = 0;
|
||||
@@ -655,17 +652,17 @@ void BlankMEventBuffer2(void)
|
||||
u16 GetWonderCardFlagId(void)
|
||||
{
|
||||
if (ValidateReceivedWonderCard())
|
||||
return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00;
|
||||
return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_814410C(struct MEWonderCardData * buffer)
|
||||
void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer)
|
||||
{
|
||||
if (buffer->unk_08_6 == 1)
|
||||
buffer->unk_08_6 = 0;
|
||||
if (buffer->shareState == 1)
|
||||
buffer->shareState = 0;
|
||||
}
|
||||
|
||||
bool32 sub_8144124(u16 a0)
|
||||
static bool32 IsCardIdInValidRange(u16 a0)
|
||||
{
|
||||
if (a0 >= 1000 && a0 < 1020)
|
||||
return TRUE;
|
||||
@@ -675,33 +672,33 @@ bool32 sub_8144124(u16 a0)
|
||||
bool32 CheckReceivedGiftFromWonderCard(void)
|
||||
{
|
||||
u16 value = GetWonderCardFlagId();
|
||||
if (!sub_8144124(value))
|
||||
if (!IsCardIdInValidRange(value))
|
||||
return FALSE;
|
||||
if (FlagGet(gUnknown_8466F00[value - 1000]) == TRUE)
|
||||
if (FlagGet(sGiftItemFlagIds[value - 1000]) == TRUE)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
s32 sub_8144184(const struct MEventBuffer_3430_Sub * data, s32 size)
|
||||
static s32 CountReceivedDistributionMons(const struct MEventBuffer_3430_Sub * data, s32 size)
|
||||
{
|
||||
s32 r3 = 0;
|
||||
s32 i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (data->unk_08[1][i] && data->unk_08[0][i])
|
||||
if (data->distributedMons[1][i] && data->distributedMons[0][i])
|
||||
r3++;
|
||||
}
|
||||
return r3;
|
||||
}
|
||||
|
||||
bool32 sub_81441AC(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size)
|
||||
static bool32 HasPlayerAlreadyReceivedDistributedMon(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (data1->unk_08[1][i] == data2[1])
|
||||
if (data1->distributedMons[1][i] == data2[1])
|
||||
return TRUE;
|
||||
if (data1->unk_08[0][i] == data2[0])
|
||||
if (data1->distributedMons[0][i] == data2[0])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@@ -718,7 +715,7 @@ static bool32 IsWonderCardSpeciesValid(const u16 * data)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
s32 sub_8144218(void)
|
||||
static s32 ValidateCardAndCountMonsReceived(void)
|
||||
{
|
||||
struct MEWonderCardData * data;
|
||||
if (!ValidateReceivedWonderCard())
|
||||
@@ -726,24 +723,24 @@ s32 sub_8144218(void)
|
||||
data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
if (data->unk_08_0 != 1)
|
||||
return 0;
|
||||
return sub_8144184(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->unk_09);
|
||||
return CountReceivedDistributionMons(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->recvMonCapacity);
|
||||
}
|
||||
|
||||
bool32 sub_8144254(const u16 * data)
|
||||
bool32 MEvent_ReceiveDistributionMon(const u16 * data)
|
||||
{
|
||||
struct MEWonderCardData * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
s32 size = buffer->unk_09;
|
||||
s32 capacity = buffer->recvMonCapacity;
|
||||
s32 i;
|
||||
if (!IsWonderCardSpeciesValid(data))
|
||||
return FALSE;
|
||||
if (sub_81441AC(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, size))
|
||||
if (HasPlayerAlreadyReceivedDistributedMon(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, capacity))
|
||||
return FALSE;
|
||||
for (i = 0; i < size; i++)
|
||||
for (i = 0; i < capacity; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[0][i] == 0)
|
||||
if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] == 0)
|
||||
{
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[1][i] = data[1];
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[0][i] = data[0];
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] = data[1];
|
||||
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] = data[0];
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -771,9 +768,9 @@ void BuildMEventClientHeader(struct MEventClientHeaderStruct * data)
|
||||
if (ValidateReceivedWonderCard())
|
||||
{
|
||||
// Populate fields
|
||||
data->id = GetSavedWonderCard()->unk_00;
|
||||
data->id = GetSavedWonderCard()->cardId;
|
||||
data->unk_20 = *sav1_get_mevent_buffer_2();
|
||||
data->unk_44 = GetSavedWonderCard()->unk_09;
|
||||
data->maxDistributionMons = GetSavedWonderCard()->recvMonCapacity;
|
||||
}
|
||||
else
|
||||
data->id = 0;
|
||||
@@ -815,14 +812,14 @@ u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void
|
||||
return 2;
|
||||
}
|
||||
|
||||
u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused)
|
||||
u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused)
|
||||
{
|
||||
s32 r4 = a1->unk_44 - sub_8144184(&a1->unk_20, a1->unk_44);
|
||||
if (r4 == 0)
|
||||
s32 numSpaces = a1->maxDistributionMons - CountReceivedDistributionMons(&a1->unk_20, a1->maxDistributionMons);
|
||||
if (numSpaces == 0)
|
||||
return 1;
|
||||
if (sub_81441AC(&a1->unk_20, a0, a1->unk_44))
|
||||
if (HasPlayerAlreadyReceivedDistributedMon(&a1->unk_20, a0, a1->maxDistributionMons))
|
||||
return 3;
|
||||
if (r4 == 1)
|
||||
if (numSpaces == 1)
|
||||
return 4;
|
||||
return 2;
|
||||
}
|
||||
@@ -838,9 +835,9 @@ bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
s32 sub_814449C(const struct MEventClientHeaderStruct * a0)
|
||||
static s32 GetNumReceivedDistributionMons(const struct MEventClientHeaderStruct * a0)
|
||||
{
|
||||
return sub_8144184(&a0->unk_20, a0->unk_44);
|
||||
return CountReceivedDistributionMons(&a0->unk_20, a0->maxDistributionMons);
|
||||
}
|
||||
|
||||
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
|
||||
@@ -848,22 +845,23 @@ u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
|
||||
switch (command)
|
||||
{
|
||||
case 0:
|
||||
return a0->unk_20.unk_00;
|
||||
return a0->unk_20.linkWins;
|
||||
case 1:
|
||||
return a0->unk_20.unk_02;
|
||||
return a0->unk_20.linkLosses;
|
||||
case 2:
|
||||
return a0->unk_20.unk_04;
|
||||
return a0->unk_20.linkTrades;
|
||||
case 3:
|
||||
return sub_814449C(a0);
|
||||
return GetNumReceivedDistributionMons(a0);
|
||||
case 4:
|
||||
return a0->unk_44;
|
||||
return a0->maxDistributionMons;
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_814451C(u32 command)
|
||||
// Increments an interaction count in the save block
|
||||
static void IncrementBattleCardCount(u32 command)
|
||||
{
|
||||
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
if (data->unk_08_0 == 2)
|
||||
@@ -872,13 +870,13 @@ void sub_814451C(u32 command)
|
||||
switch (command)
|
||||
{
|
||||
case 0:
|
||||
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_00;
|
||||
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkWins;
|
||||
break;
|
||||
case 1:
|
||||
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_02;
|
||||
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkLosses;
|
||||
break;
|
||||
case 2:
|
||||
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_04;
|
||||
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkTrades;
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
@@ -896,7 +894,7 @@ void sub_814451C(u32 command)
|
||||
}
|
||||
}
|
||||
|
||||
u16 sub_81445C0(u32 command)
|
||||
u16 MEvent_GetBattleCardCount(u32 command)
|
||||
{
|
||||
switch (command)
|
||||
{
|
||||
@@ -906,7 +904,7 @@ u16 sub_81445C0(u32 command)
|
||||
if (data->unk_08_0 == 2)
|
||||
{
|
||||
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
|
||||
return buffer->unk_00;
|
||||
return buffer->linkWins;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -916,7 +914,7 @@ u16 sub_81445C0(u32 command)
|
||||
if (data->unk_08_0 == 2)
|
||||
{
|
||||
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
|
||||
return buffer->unk_02;
|
||||
return buffer->linkLosses;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -926,7 +924,7 @@ u16 sub_81445C0(u32 command)
|
||||
if (data->unk_08_0 == 2)
|
||||
{
|
||||
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
|
||||
return buffer->unk_04;
|
||||
return buffer->linkTrades;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -934,14 +932,14 @@ u16 sub_81445C0(u32 command)
|
||||
{
|
||||
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
if (data->unk_08_0 == 1)
|
||||
return sub_8144218();
|
||||
return ValidateCardAndCountMonsReceived();
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
|
||||
if (data->unk_08_0 == 1)
|
||||
return data->unk_09;
|
||||
return data->recvMonCapacity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -951,36 +949,36 @@ u16 sub_81445C0(u32 command)
|
||||
|
||||
void sub_81446C4(void)
|
||||
{
|
||||
gUnknown_203F3BC = FALSE;
|
||||
sReceivedWonderCardIsValid = FALSE;
|
||||
}
|
||||
|
||||
bool32 sub_81446D0(u16 a0)
|
||||
bool32 sub_81446D0(u16 cardId)
|
||||
{
|
||||
gUnknown_203F3BC = FALSE;
|
||||
if (a0 == 0)
|
||||
sReceivedWonderCardIsValid = FALSE;
|
||||
if (cardId == 0)
|
||||
return FALSE;
|
||||
if (!ValidateReceivedWonderCard())
|
||||
return FALSE;
|
||||
if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00 != a0)
|
||||
if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId != cardId)
|
||||
return FALSE;
|
||||
gUnknown_203F3BC = TRUE;
|
||||
sReceivedWonderCardIsValid = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8144714(u32 a0, u32 a1)
|
||||
void sub_8144714(u32 eventId, u32 trainerId)
|
||||
{
|
||||
if (gUnknown_203F3BC)
|
||||
if (sReceivedWonderCardIsValid)
|
||||
{
|
||||
switch (a0)
|
||||
switch (eventId)
|
||||
{
|
||||
case 2:
|
||||
sub_8144824(2, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5);
|
||||
RecordIdOfWonderCardSender(2, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5);
|
||||
break;
|
||||
case 0:
|
||||
sub_8144824(0, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
|
||||
RecordIdOfWonderCardSender(0, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
|
||||
break;
|
||||
case 1:
|
||||
sub_8144824(1, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
|
||||
RecordIdOfWonderCardSender(1, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
|
||||
break;
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988);
|
||||
@@ -988,43 +986,48 @@ void sub_8144714(u32 a0, u32 a1)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8144790(void)
|
||||
static void BlankBuffer344(void)
|
||||
{
|
||||
CpuFill32(0, gSaveBlock1Ptr->mysteryEventBuffers.unk_344, sizeof(gSaveBlock1Ptr->mysteryEventBuffers.unk_344));
|
||||
}
|
||||
|
||||
bool32 sub_81447BC(u32 a0, u32 * a1, s32 size)
|
||||
// Looks up trainerId in an array idsList with count elements.
|
||||
// If trainerId is found, rearranges idsList to put it in the front.
|
||||
// Otherwise, drops the last element of the list and inserts
|
||||
// trainerId at the front.
|
||||
// Returns TRUE in the latter case.
|
||||
static bool32 PlaceTrainerIdAtFrontOfList(u32 trainerId, u32 * idsList, s32 count)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (a1[i] == a0)
|
||||
if (idsList[i] == trainerId)
|
||||
break;
|
||||
}
|
||||
if (i == size)
|
||||
if (i == count)
|
||||
{
|
||||
for (j = size - 1; j > 0; j--)
|
||||
for (j = count - 1; j > 0; j--)
|
||||
{
|
||||
a1[j] = a1[j - 1];
|
||||
idsList[j] = idsList[j - 1];
|
||||
}
|
||||
a1[0] = a0;
|
||||
idsList[0] = trainerId;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (j = i; j > 0; j--)
|
||||
{
|
||||
a1[j] = a1[j - 1];
|
||||
idsList[j] = idsList[j - 1];
|
||||
}
|
||||
a1[0] = a0;
|
||||
idsList[0] = trainerId;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8144824(u32 a0, u32 a1, u32 * a2, s32 a3)
|
||||
static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 * idsList, s32 count)
|
||||
{
|
||||
if (sub_81447BC(a1, a2, a3))
|
||||
sub_814451C(a0);
|
||||
if (PlaceTrainerIdAtFrontOfList(trainerId, idsList, count))
|
||||
IncrementBattleCardCount(eventId);
|
||||
}
|
||||
|
||||
@@ -1,793 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "constants/species.h"
|
||||
#include "bg.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "palette.h"
|
||||
#include "decompress.h"
|
||||
#include "malloc.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "string_util.h"
|
||||
#include "link_rfu.h"
|
||||
#include "mevent.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
struct UnkStruct_8467FB8
|
||||
{
|
||||
u8 textPal1:4;
|
||||
u8 textPal2:4;
|
||||
u8 textPal3:4;
|
||||
u8 textPal4:4;
|
||||
const u8 * tiles;
|
||||
const u8 * map;
|
||||
const u16 * pal;
|
||||
};
|
||||
|
||||
struct UnkStruct_203F3C8_02DC
|
||||
{
|
||||
u8 unk_00;
|
||||
u8 unk_01[41];
|
||||
u8 unk_42[4];
|
||||
};
|
||||
|
||||
struct UnkStruct_203F3C8
|
||||
{
|
||||
/*0000*/ struct MEWonderCardData unk_0000;
|
||||
/*014c*/ struct MEventBuffer_3430_Sub unk_014C;
|
||||
/*0170*/ const struct UnkStruct_8467FB8 * unk_0170;
|
||||
/*0174*/ u8 unk_0174;
|
||||
/*0175*/ u8 unk_0175;
|
||||
/*0176*/ u16 unk_0176[3];
|
||||
/*017C*/ u8 unk_017C;
|
||||
/*017D*/ u8 unk_017D[7][2];
|
||||
/*018B*/ u8 unk_018B[41];
|
||||
/*01B4*/ u8 unk_01B4[41];
|
||||
/*01DD*/ u8 unk_01DD[7];
|
||||
/*01E4*/ u8 unk_01E4[4][41];
|
||||
/*0288*/ u8 unk_0288[41];
|
||||
/*02B1*/ u8 unk_02B1[41];
|
||||
/*02DC*/ struct UnkStruct_203F3C8_02DC unk_02DC[8];
|
||||
/*045C*/ u8 buffer_045C[0x1000];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL;
|
||||
|
||||
void sub_8145A98(void);
|
||||
void sub_8145D18(u8 whichWindow);
|
||||
void sub_8146060(void);
|
||||
void sub_81461D8(void);
|
||||
|
||||
const u8 gUnknown_8467068[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
const u8 ALIGNED(4) gUnknown_8467070[3] = {7, 4, 7};
|
||||
const struct WindowTemplate gUnknown_8467074[] = {
|
||||
{0x01, 0x01, 0x01, 0x19, 0x04, 0x0f, 0x029c},
|
||||
{0x01, 0x01, 0x06, 0x1c, 0x08, 0x0f, 0x01bc},
|
||||
{0x01, 0x01, 0x0e, 0x1c, 0x05, 0x0f, 0x0130}
|
||||
};
|
||||
|
||||
const u16 gUnknown_846708C[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal");
|
||||
const u16 gUnknown_84670AC[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal");
|
||||
const u16 gUnknown_84670CC[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal");
|
||||
const u16 gUnknown_84670EC[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal");
|
||||
const u16 gUnknown_846710C[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal");
|
||||
const u16 gUnknown_846712C[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal");
|
||||
const u16 gUnknown_846714C[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal");
|
||||
const u16 gUnknown_846716C[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal");
|
||||
const u8 gUnknown_846718C[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz");
|
||||
const u8 gUnknown_8467288[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz");
|
||||
const u8 gUnknown_846737C[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz");
|
||||
const u8 gUnknown_8467470[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz");
|
||||
const u8 gUnknown_8467558[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz");
|
||||
const u8 gUnknown_846762C[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz");
|
||||
const u8 gUnknown_8467700[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz");
|
||||
const u8 gUnknown_8467934[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz");
|
||||
const u8 gUnknown_8467A7C[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz");
|
||||
const u8 gUnknown_8467CAC[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz");
|
||||
const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal");
|
||||
const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal");
|
||||
const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal");
|
||||
const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal");
|
||||
const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal");
|
||||
const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal");
|
||||
const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal");
|
||||
const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal");
|
||||
const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz");
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_8467F58 = {
|
||||
gUnknown_8467EF4, 0x100, 0x8000
|
||||
};
|
||||
const struct SpritePalette gUnknown_8467F60[] = {
|
||||
{gUnknown_8467DF4, 0x8000},
|
||||
{gUnknown_8467E14, 0x8000},
|
||||
{gUnknown_8467E34, 0x8000},
|
||||
{gUnknown_8467E54, 0x8000},
|
||||
{gUnknown_8467E74, 0x8000},
|
||||
{gUnknown_8467E94, 0x8000},
|
||||
{gUnknown_8467EB4, 0x8000},
|
||||
{gUnknown_8467ED4, 0x8000}
|
||||
};
|
||||
const struct SpriteTemplate gUnknown_8467FA0 = {
|
||||
0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
};
|
||||
const struct UnkStruct_8467FB8 gUnknown_8467FB8[8] = {
|
||||
{1, 0, 0, 0, gUnknown_846718C, gUnknown_8467288, gUnknown_846708C},
|
||||
{1, 0, 0, 1, gUnknown_846737C, gUnknown_8467470, gUnknown_84670AC},
|
||||
{1, 0, 0, 2, gUnknown_8467558, gUnknown_846762C, gUnknown_84670CC},
|
||||
{1, 0, 0, 3, gUnknown_8467558, gUnknown_846762C, gUnknown_84670EC},
|
||||
{1, 0, 0, 4, gUnknown_8467558, gUnknown_846762C, gUnknown_846710C},
|
||||
{1, 0, 0, 5, gUnknown_8467558, gUnknown_846762C, gUnknown_846712C},
|
||||
{1, 0, 0, 6, gUnknown_8467700, gUnknown_8467934, gUnknown_846714C},
|
||||
{1, 0, 0, 7, gUnknown_8467A7C, gUnknown_8467CAC, gUnknown_846716C}
|
||||
};
|
||||
|
||||
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6)
|
||||
{
|
||||
if (r5 == NULL || r6 == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3C8 = AllocZeroed(sizeof(struct UnkStruct_203F3C8));
|
||||
if (gUnknown_203F3C8 == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3C8->unk_0000 = *r5;
|
||||
gUnknown_203F3C8->unk_014C = *r6;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_08_2 >= NELEMS(gUnknown_8467FB8))
|
||||
gUnknown_203F3C8->unk_0000.unk_08_2 = 0;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_08_0 >= NELEMS(gUnknown_8467070))
|
||||
gUnknown_203F3C8->unk_0000.unk_08_0 = 0;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_09 > NELEMS(gUnknown_203F3C8->unk_017D))
|
||||
gUnknown_203F3C8->unk_0000.unk_09 = 0;
|
||||
gUnknown_203F3C8->unk_0170 = &gUnknown_8467FB8[gUnknown_203F3C8->unk_0000.unk_08_2];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderCardResources(void)
|
||||
{
|
||||
if (gUnknown_203F3C8 != NULL)
|
||||
{
|
||||
*gUnknown_203F3C8 = (struct UnkStruct_203F3C8){};
|
||||
Free(gUnknown_203F3C8);
|
||||
gUnknown_203F3C8 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderCardMenu(void)
|
||||
{
|
||||
if (gUnknown_203F3C8 == NULL)
|
||||
return -1;
|
||||
switch(gUnknown_203F3C8->unk_0174)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
DecompressAndCopyTileDataToVram(2, gUnknown_203F3C8->unk_0170->tiles, 0, 0x008, 0);
|
||||
gUnknown_203F3C8->unk_0176[0] = AddWindow(&gUnknown_8467074[0]);
|
||||
gUnknown_203F3C8->unk_0176[1] = AddWindow(&gUnknown_8467074[1]);
|
||||
gUnknown_203F3C8->unk_0176[2] = AddWindow(&gUnknown_8467074[2]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(gUnknown_203F3C8->unk_0170->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(gUnknown_203F3C8->unk_0170->map, gUnknown_203F3C8->buffer_045C);
|
||||
CopyRectToBgTilemapBufferRect(2, gUnknown_203F3C8->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 4:
|
||||
sub_8145A98();
|
||||
break;
|
||||
case 5:
|
||||
sub_8145D18(0);
|
||||
sub_8145D18(1);
|
||||
sub_8145D18(2);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
break;
|
||||
case 6:
|
||||
LoadMonIconPalettes();
|
||||
break;
|
||||
case 7:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
sub_8146060();
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3C8->unk_0174 = 0;
|
||||
return 1;
|
||||
}
|
||||
++gUnknown_203F3C8->unk_0174;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderCard(bool32 flag)
|
||||
{
|
||||
if (gUnknown_203F3C8 == NULL)
|
||||
return -1;
|
||||
switch (gUnknown_203F3C8->unk_0174)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(gUnknown_203F3C8->unk_0176[2]);
|
||||
RemoveWindow(gUnknown_203F3C8->unk_0176[1]);
|
||||
RemoveWindow(gUnknown_203F3C8->unk_0176[0]);
|
||||
break;
|
||||
case 4:
|
||||
sub_81461D8();
|
||||
FreeMonIconPalettes();
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3C8->unk_0174 = 0;
|
||||
return 1;
|
||||
}
|
||||
++gUnknown_203F3C8->unk_0174;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_8145A98(void)
|
||||
{
|
||||
u16 i = 0;
|
||||
u16 r6;
|
||||
u16 sp0[3] = {0, 0, 0};
|
||||
|
||||
memcpy(gUnknown_203F3C8->unk_018B, gUnknown_203F3C8->unk_0000.unk_0A, 40);
|
||||
gUnknown_203F3C8->unk_018B[40] = EOS;
|
||||
memcpy(gUnknown_203F3C8->unk_01B4, gUnknown_203F3C8->unk_0000.unk_32, 40);
|
||||
gUnknown_203F3C8->unk_01B4[40] = EOS;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_04 > 999999)
|
||||
gUnknown_203F3C8->unk_0000.unk_04 = 999999;
|
||||
ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_01DD, gUnknown_203F3C8->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
memcpy(gUnknown_203F3C8->unk_01E4[i], gUnknown_203F3C8->unk_0000.unk_5A[i], 40);
|
||||
gUnknown_203F3C8->unk_01E4[i][40] = EOS;
|
||||
}
|
||||
memcpy(gUnknown_203F3C8->unk_0288, gUnknown_203F3C8->unk_0000.unk_FA, 40);
|
||||
gUnknown_203F3C8->unk_0288[40] = EOS;
|
||||
switch (gUnknown_203F3C8->unk_0000.unk_08_0)
|
||||
{
|
||||
case 0:
|
||||
memcpy(gUnknown_203F3C8->unk_02B1, gUnknown_203F3C8->unk_0000.unk_122, 40);
|
||||
gUnknown_203F3C8->unk_02B1[40] = EOS;
|
||||
break;
|
||||
case 1:
|
||||
gUnknown_203F3C8->unk_02B1[00] = EOS;
|
||||
break;
|
||||
case 2:
|
||||
gUnknown_203F3C8->unk_02B1[00] = EOS;
|
||||
sp0[0] = gUnknown_203F3C8->unk_014C.unk_00 < 999 ? gUnknown_203F3C8->unk_014C.unk_00 : 999;
|
||||
sp0[1] = gUnknown_203F3C8->unk_014C.unk_02 < 999 ? gUnknown_203F3C8->unk_014C.unk_02 : 999;
|
||||
sp0[2] = gUnknown_203F3C8->unk_014C.unk_04 < 999 ? gUnknown_203F3C8->unk_014C.unk_04 : 999;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
memset(gUnknown_203F3C8->unk_02DC[i].unk_42, EOS, 4);
|
||||
memset(gUnknown_203F3C8->unk_02DC[i].unk_01, EOS, 41);
|
||||
}
|
||||
for (i = 0, r6 = 0; i < 40; i++)
|
||||
{
|
||||
if (gUnknown_203F3C8->unk_0000.unk_122[i] != 0xF7)
|
||||
{
|
||||
gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_01[r6] = gUnknown_203F3C8->unk_0000.unk_122[i];
|
||||
r6++;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 r3 = gUnknown_203F3C8->unk_0000.unk_122[i + 1];
|
||||
if (r3 > 2)
|
||||
{
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_00 = gUnknown_203F3C8->unk_0000.unk_122[i + 2];
|
||||
gUnknown_203F3C8->unk_0175++;
|
||||
if (gUnknown_203F3C8->unk_0175 > 7)
|
||||
break;
|
||||
r6 = 0;
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8145D18(u8 whichWindow)
|
||||
{
|
||||
s8 sp0C = 0;
|
||||
s32 windowId = gUnknown_203F3C8->unk_0176[whichWindow];
|
||||
PutWindowTilemap(windowId);
|
||||
FillWindowPixelBuffer(windowId, 0);
|
||||
switch (whichWindow)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
s32 x;
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_018B);
|
||||
x = 160 - GetStringWidth(3, gUnknown_203F3C8->unk_01B4, GetFontAttribute(3, 2));
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01B4);
|
||||
if (gUnknown_203F3C8->unk_0000.unk_04 != 0)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01DD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
for (; sp0C < 4; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal2], 0, gUnknown_203F3C8->unk_01E4[sp0C]);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_0288);
|
||||
if (gUnknown_203F3C8->unk_0000.unk_08_0 != 2)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02B1);
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 x = 0;
|
||||
s32 y = gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0] + 16;
|
||||
s32 spacing = GetFontAttribute(3, 2);
|
||||
for (; sp0C < gUnknown_203F3C8->unk_0175; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_01);
|
||||
if (gUnknown_203F3C8->unk_02DC[sp0C].unk_42[0] != EOS)
|
||||
{
|
||||
x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_01, spacing);
|
||||
AddTextPrinterParameterized3(windowId, 2, x, y, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_42);
|
||||
x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_42, spacing) + gUnknown_203F3C8->unk_02DC[sp0C].unk_00;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
CopyWindowToVram(windowId, 3);
|
||||
}
|
||||
|
||||
void sub_8146060(void)
|
||||
{
|
||||
u8 r7 = 0;
|
||||
gUnknown_203F3C8->unk_017C = 0xFF;
|
||||
if (gUnknown_203F3C8->unk_014C.unk_06 != SPECIES_NONE)
|
||||
{
|
||||
gUnknown_203F3C8->unk_017C = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
|
||||
gSprites[gUnknown_203F3C8->unk_017C].oam.priority = 2;
|
||||
}
|
||||
if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&gUnknown_8467F58);
|
||||
LoadSpritePalette(&gUnknown_8467F60[gUnknown_203F3C8->unk_0170->textPal4]);
|
||||
for (; r7 < gUnknown_203F3C8->unk_0000.unk_09; r7++)
|
||||
{
|
||||
gUnknown_203F3C8->unk_017D[r7][0] = 0xFF;
|
||||
gUnknown_203F3C8->unk_017D[r7][1] = 0xFF;
|
||||
gUnknown_203F3C8->unk_017D[r7][0] = CreateSprite(&gUnknown_8467FA0, 0xd8 - 32 * r7, 0x90, 8);
|
||||
if (gUnknown_203F3C8->unk_014C.unk_08[0][r7] != 0)
|
||||
{
|
||||
gUnknown_203F3C8->unk_017D[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
|
||||
gSprites[gUnknown_203F3C8->unk_017D[r7][1]].oam.priority = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81461D8(void)
|
||||
{
|
||||
u8 r6 = 0;
|
||||
if (gUnknown_203F3C8->unk_017C != 0xFF)
|
||||
DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017C]);
|
||||
if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
|
||||
{
|
||||
for (; r6 < gUnknown_203F3C8->unk_0000.unk_09; r6++)
|
||||
{
|
||||
if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
|
||||
{
|
||||
DestroySprite(&gSprites[gUnknown_203F3C8->unk_017D[r6][0]]);
|
||||
// This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior.
|
||||
// if (gUnknown_203F3C8->unk_017D[r6][1] != 0xFF)
|
||||
if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
|
||||
{
|
||||
DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017D[r6][1]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
FreeSpriteTilesByTag(0x8000);
|
||||
FreeSpritePaletteByTag(0x8000);
|
||||
}
|
||||
}
|
||||
|
||||
struct UnkStruct_203F3CC
|
||||
{
|
||||
/*0000*/ struct MEWonderNewsData unk_0000;
|
||||
/*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC;
|
||||
/*01c0*/ u8 unk_01C0_0:1;
|
||||
u8 unk_01C0_1:7;
|
||||
/*01c1*/ u8 unk_01C1;
|
||||
/*01c2*/ u8 unk_01C2_0:1;
|
||||
u8 unk_01C2_1:7;
|
||||
/*01c3*/ u8 unk_01C3_0:1;
|
||||
u8 unk_01C3_1:7;
|
||||
/*01c4*/ u16 unk_01C4;
|
||||
/*01c6*/ u16 unk_01C6;
|
||||
/*01c8*/ u16 unk_01C8[2];
|
||||
/*01cc*/ u8 filler_01CC[2];
|
||||
/*01ce*/ u8 unk_01CE[41];
|
||||
/*01f7*/ u8 unk_01F7[10][41];
|
||||
/*0394*/ struct ScrollArrowsTemplate unk_0394;
|
||||
/*03a4*/ u8 buffer_03A4[0x1000];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL;
|
||||
|
||||
void sub_8146980(void);
|
||||
void sub_8146A30(void);
|
||||
void sub_8146B58(void);
|
||||
|
||||
const u8 gUnknown_8468038[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
const struct WindowTemplate gUnknown_8468040[] = {
|
||||
{0, 1, 0, 28, 3, 15, 0x000},
|
||||
{2, 1, 3, 28, 20, 15, 0x000}
|
||||
};
|
||||
const struct ScrollArrowsTemplate gUnknown_8468050 = {
|
||||
0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98,
|
||||
0x0000, 0x0002, 0x1000, 0x1000, 0x0,
|
||||
};
|
||||
|
||||
const u16 gUnknown_8468060[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal");
|
||||
const u16 gUnknown_8468080[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal");
|
||||
const u16 gUnknown_84680A0[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal");
|
||||
const u8 gUnknown_84680C0[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz");
|
||||
const u8 gUnknown_8468140[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz");
|
||||
const u8 gUnknown_846821C[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz");
|
||||
const u8 gUnknown_846824C[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz");
|
||||
const u8 gUnknown_846830C[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz");
|
||||
const u8 gUnknown_846837C[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz");
|
||||
const u8 gUnknown_8468448[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz");
|
||||
const u8 gUnknown_84684D8[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz");
|
||||
const u8 gUnknown_84685B4[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz");
|
||||
const u8 gUnknown_8468644[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz");
|
||||
|
||||
const struct UnkStruct_8467FB8 gUnknown_8468720[] = {
|
||||
{1, 0, 0, 0, gUnknown_84680C0, gUnknown_8468140, gUnknown_8468060},
|
||||
{1, 0, 0, 0, gUnknown_846821C, gUnknown_846824C, gUnknown_84670AC},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670CC},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670EC},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846710C},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846712C},
|
||||
{1, 0, 0, 0, gUnknown_8468448, gUnknown_84684D8, gUnknown_8468080},
|
||||
{1, 0, 0, 0, gUnknown_84685B4, gUnknown_8468644, gUnknown_84680A0}
|
||||
};
|
||||
|
||||
bool32 InitWonderNewsResources(const struct MEWonderNewsData * a0)
|
||||
{
|
||||
if (a0 == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3CC = AllocZeroed(sizeof(struct UnkStruct_203F3CC));
|
||||
if (gUnknown_203F3CC == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3CC->unk_0000 = *a0;
|
||||
if (gUnknown_203F3CC->unk_0000.unk_03 >= NELEMS(gUnknown_8468720))
|
||||
gUnknown_203F3CC->unk_0000.unk_03 = 0;
|
||||
gUnknown_203F3CC->unk_01BC = &gUnknown_8468720[gUnknown_203F3CC->unk_0000.unk_03];
|
||||
gUnknown_203F3CC->unk_01C1 = 0xFF;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderNewsResources(void)
|
||||
{
|
||||
if (gUnknown_203F3CC != NULL)
|
||||
{
|
||||
*gUnknown_203F3CC = (struct UnkStruct_203F3CC){};
|
||||
Free(gUnknown_203F3CC);
|
||||
gUnknown_203F3CC = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderNewsMenu(void)
|
||||
{
|
||||
if (gUnknown_203F3CC == NULL)
|
||||
return -1;
|
||||
|
||||
switch (gUnknown_203F3CC->unk_01C0_1)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0x1A98);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x1F);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x1B);
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
DecompressAndCopyTileDataToVram(3, gUnknown_203F3CC->unk_01BC->tiles, 0, 8, 0);
|
||||
gUnknown_203F3CC->unk_01C8[0] = AddWindow(&gUnknown_8468040[0]);
|
||||
gUnknown_203F3CC->unk_01C8[1] = AddWindow(&gUnknown_8468040[1]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(gUnknown_203F3CC->unk_01BC->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(gUnknown_203F3CC->unk_01BC->map, gUnknown_203F3CC->buffer_03A4);
|
||||
CopyRectToBgTilemapBufferRect(1, gUnknown_203F3CC->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0);
|
||||
CopyRectToBgTilemapBufferRect(3, gUnknown_203F3CC->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 4:
|
||||
sub_8146980();
|
||||
break;
|
||||
case 5:
|
||||
sub_8146A30();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 6:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
ShowBg(3);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3CC->unk_01C0_1 = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
++gUnknown_203F3CC->unk_01C0_1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderNews(bool32 flag)
|
||||
{
|
||||
if (gUnknown_203F3CC == NULL)
|
||||
return -1;
|
||||
switch (gUnknown_203F3CC->unk_01C0_1)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(2, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(gUnknown_203F3CC->unk_01C8[1]);
|
||||
RemoveWindow(gUnknown_203F3CC->unk_01C8[0]);
|
||||
break;
|
||||
case 4:
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
if (gUnknown_203F3CC->unk_01C1 != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1);
|
||||
gUnknown_203F3CC->unk_01C1 = 0xFF;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
MG_DrawCheckerboardPattern();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3CC->unk_01C0_1 = 0;
|
||||
return 1;
|
||||
}
|
||||
++gUnknown_203F3CC->unk_01C0_1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MENews_RemoveScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (!gUnknown_203F3CC->unk_01C0_0 && gUnknown_203F3CC->unk_01C1 != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1);
|
||||
gUnknown_203F3CC->unk_01C1 = 0xFF;
|
||||
gUnknown_203F3CC->unk_01C0_0 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MENews_AddScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (gUnknown_203F3CC->unk_01C0_0)
|
||||
{
|
||||
gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6);
|
||||
gUnknown_203F3CC->unk_01C0_0 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 MENews_GetInput(u16 input)
|
||||
{
|
||||
if (gUnknown_203F3CC->unk_01C2_0)
|
||||
{
|
||||
sub_8146B58();
|
||||
return 0xFF;
|
||||
}
|
||||
switch (input)
|
||||
{
|
||||
case A_BUTTON:
|
||||
return 0;
|
||||
case B_BUTTON:
|
||||
return 1;
|
||||
case DPAD_UP:
|
||||
if (gUnknown_203F3CC->unk_01C6 == 0)
|
||||
return 0xFF;
|
||||
if (gUnknown_203F3CC->unk_01C0_0)
|
||||
return 0xFF;
|
||||
gUnknown_203F3CC->unk_01C3_0 = FALSE;
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
if (gUnknown_203F3CC->unk_01C6 == gUnknown_203F3CC->unk_01C4)
|
||||
return 0xFF;
|
||||
if (gUnknown_203F3CC->unk_01C0_0)
|
||||
return 0xFF;
|
||||
gUnknown_203F3CC->unk_01C3_0 = TRUE;
|
||||
break;
|
||||
default:
|
||||
return 0xFF;
|
||||
}
|
||||
gUnknown_203F3CC->unk_01C2_0 = TRUE;
|
||||
gUnknown_203F3CC->unk_01C2_1 = 2;
|
||||
gUnknown_203F3CC->unk_01C3_1 = 0;
|
||||
if (gUnknown_203F3CC->unk_01C3_0 == FALSE)
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
void sub_8146980(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
memcpy(gUnknown_203F3CC->unk_01CE, gUnknown_203F3CC->unk_0000.unk_04, 40);
|
||||
gUnknown_203F3CC->unk_01CE[40] = EOS;
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
memcpy(gUnknown_203F3CC->unk_01F7[i], gUnknown_203F3CC->unk_0000.unk_2C[i], 40);
|
||||
gUnknown_203F3CC->unk_01F7[i][40] = EOS;
|
||||
if (i > 7 && gUnknown_203F3CC->unk_01F7[i][0] != EOS)
|
||||
++gUnknown_203F3CC->unk_01C4;
|
||||
}
|
||||
gUnknown_203F3CC->unk_0394 = gUnknown_8468050;
|
||||
gUnknown_203F3CC->unk_0394.fullyDownThreshold = gUnknown_203F3CC->unk_01C4;
|
||||
}
|
||||
|
||||
void sub_8146A30(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
s32 x;
|
||||
PutWindowTilemap(gUnknown_203F3CC->unk_01C8[0]);
|
||||
PutWindowTilemap(gUnknown_203F3CC->unk_01C8[1]);
|
||||
FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[0], 0);
|
||||
FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[1], 0);
|
||||
x = (0xe0 - GetStringWidth(3, gUnknown_203F3CC->unk_01CE, GetFontAttribute(3, 2))) / 2;
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(gUnknown_203F3CC->unk_01C8[0], 3, x, 6, gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal1], 0, gUnknown_203F3CC->unk_01CE);
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
AddTextPrinterParameterized3(gUnknown_203F3CC->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal2], 0, gUnknown_203F3CC->unk_01F7[i]);
|
||||
}
|
||||
CopyWindowToVram(gUnknown_203F3CC->unk_01C8[0], 3);
|
||||
CopyWindowToVram(gUnknown_203F3CC->unk_01C8[1], 3);
|
||||
}
|
||||
|
||||
void sub_8146B58(void)
|
||||
{
|
||||
u16 r4 = gUnknown_203F3CC->unk_01C2_1;
|
||||
r4 <<= 8;
|
||||
if (gUnknown_203F3CC->unk_01C3_0)
|
||||
{
|
||||
ChangeBgY(2, r4, 1);
|
||||
ChangeBgY(3, r4, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeBgY(2, r4, 2);
|
||||
ChangeBgY(3, r4, 2);
|
||||
}
|
||||
gUnknown_203F3CC->unk_01C3_1 += gUnknown_203F3CC->unk_01C2_1;
|
||||
if (gUnknown_203F3CC->unk_01C3_1 > 15)
|
||||
{
|
||||
if (gUnknown_203F3CC->unk_01C3_0)
|
||||
++gUnknown_203F3CC->unk_01C6;
|
||||
else
|
||||
--gUnknown_203F3CC->unk_01C6;
|
||||
gUnknown_203F3CC->unk_01C2_0 = FALSE;
|
||||
gUnknown_203F3CC->unk_01C3_1 = 0;
|
||||
}
|
||||
}
|
||||
+5
-4
@@ -195,15 +195,16 @@ static u32 client_mainseq_4(struct mevent_client * svr)
|
||||
mevent_client_send_word(svr, 0x13, svr->param);
|
||||
break;
|
||||
case 10:
|
||||
sub_8143F68(svr->recvBuffer);
|
||||
OverwriteSavedWonderCardWithReceivedCard(svr->recvBuffer);
|
||||
break;
|
||||
case 9:
|
||||
if (!sub_8143EF4(svr->recvBuffer))
|
||||
if (!MEvent_HaveAlreadyReceivedWonderNews(svr->recvBuffer))
|
||||
{
|
||||
sub_8143DC8(svr->recvBuffer);
|
||||
OverwriteSavedWonderNewsWithReceivedNews(svr->recvBuffer);
|
||||
mevent_client_send_word(svr, 0x13, 0);
|
||||
}
|
||||
else
|
||||
// Other trainer already has news
|
||||
mevent_client_send_word(svr, 0x13, 1);
|
||||
break;
|
||||
case 15:
|
||||
@@ -211,7 +212,7 @@ static u32 client_mainseq_4(struct mevent_client * svr)
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 16:
|
||||
sub_8144254(svr->recvBuffer);
|
||||
MEvent_ReceiveDistributionMon(svr->recvBuffer);
|
||||
break;
|
||||
case 17:
|
||||
MEventSetRamScript(svr->recvBuffer, 1000);
|
||||
|
||||
+2
-2
@@ -176,7 +176,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
|
||||
case 9:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408);
|
||||
ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord);
|
||||
svr->param = sub_8144434(ptr, svr->mevent_unk1442cc, ptr);
|
||||
svr->param = MEvent_CanPlayerReceiveDistributionMon(ptr, svr->mevent_unk1442cc, ptr);
|
||||
break;
|
||||
case 10:
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415);
|
||||
@@ -247,7 +247,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
|
||||
case 26:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506);
|
||||
memcpy(svr->card, GetSavedWonderCard(), 332);
|
||||
sub_814410C(svr->card);
|
||||
MEvent_WonderCardResetUnk08_6(svr->card);
|
||||
break;
|
||||
case 27:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512);
|
||||
|
||||
@@ -0,0 +1,454 @@
|
||||
#include "global.h"
|
||||
#include "constants/species.h"
|
||||
#include "bg.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "palette.h"
|
||||
#include "decompress.h"
|
||||
#include "malloc.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "string_util.h"
|
||||
#include "link_rfu.h"
|
||||
#include "mevent.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
struct MEventScreenMgr_02DC
|
||||
{
|
||||
u8 nDigits;
|
||||
u8 nameTxt[41];
|
||||
u8 numberTxt[4];
|
||||
};
|
||||
|
||||
struct MEventScreenMgr
|
||||
{
|
||||
/*0000*/ struct MEWonderCardData wonderCard;
|
||||
/*014c*/ struct MEventBuffer_3430_Sub buff3430Sub;
|
||||
/*0170*/ const struct UnkStruct_8467FB8 * bgSpec;
|
||||
/*0174*/ u8 state;
|
||||
/*0175*/ u8 recordIdx;
|
||||
/*0176*/ u16 windowIds[3];
|
||||
/*017C*/ u8 monIconId;
|
||||
/*017D*/ u8 cardIconAndShadowSprites[7][2];
|
||||
/*018B*/ u8 title[41];
|
||||
/*01B4*/ u8 subtitle[41];
|
||||
/*01DD*/ u8 unk_01DD[7];
|
||||
/*01E4*/ u8 mainMessageLines[4][41];
|
||||
/*0288*/ u8 instructionsLine1[41];
|
||||
/*02B1*/ u8 instructionsLine2[41];
|
||||
/*02DC*/ struct MEventScreenMgr_02DC recordStrings[8];
|
||||
/*045C*/ u8 buffer_045C[0x1000];
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct MEventScreenMgr * sMEventScreenData = NULL;
|
||||
|
||||
void sub_8145A98(void);
|
||||
void sub_8145D18(u8 whichWindow);
|
||||
void sub_8146060(void);
|
||||
void sub_81461D8(void);
|
||||
|
||||
const u8 gUnknown_8467068[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
const u8 ALIGNED(4) sTextYCoords[3] = {7, 4, 7};
|
||||
const struct WindowTemplate sWindowTemplates[] = {
|
||||
{
|
||||
.bg = 1,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 25,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x29c},
|
||||
{
|
||||
.bg = 1,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 6,
|
||||
.width = 28,
|
||||
.height = 8,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x1bc},
|
||||
{
|
||||
.bg = 1,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 14,
|
||||
.width = 28,
|
||||
.height = 5,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x130}
|
||||
};
|
||||
|
||||
const u16 gCard0Pal[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal");
|
||||
const u16 gCard1Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal");
|
||||
const u16 gCard2Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal");
|
||||
const u16 gCard3Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal");
|
||||
const u16 gCard4Pal[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal");
|
||||
const u16 gCard5Pal[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal");
|
||||
const u16 gCard6Pal[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal");
|
||||
const u16 gCard7Pal[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal");
|
||||
const u8 sCard0Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz");
|
||||
const u8 sCard0Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz");
|
||||
const u8 sCard1Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz");
|
||||
const u8 sCard1Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz");
|
||||
const u8 sCard2Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz");
|
||||
const u8 sCard2Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz");
|
||||
const u8 sCard6Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz");
|
||||
const u8 sCard6Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz");
|
||||
const u8 sCard7Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz");
|
||||
const u8 sCard7Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz");
|
||||
const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal");
|
||||
const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal");
|
||||
const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal");
|
||||
const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal");
|
||||
const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal");
|
||||
const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal");
|
||||
const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal");
|
||||
const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal");
|
||||
const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz");
|
||||
|
||||
const struct CompressedSpriteSheet sShadowSpriteSheet = {
|
||||
gUnknown_8467EF4, 0x100, 0x8000
|
||||
};
|
||||
const struct SpritePalette sShadowSpritePalettes[] = {
|
||||
{gUnknown_8467DF4, 0x8000},
|
||||
{gUnknown_8467E14, 0x8000},
|
||||
{gUnknown_8467E34, 0x8000},
|
||||
{gUnknown_8467E54, 0x8000},
|
||||
{gUnknown_8467E74, 0x8000},
|
||||
{gUnknown_8467E94, 0x8000},
|
||||
{gUnknown_8467EB4, 0x8000},
|
||||
{gUnknown_8467ED4, 0x8000}
|
||||
};
|
||||
const struct SpriteTemplate sShadowSpriteTemplate = {
|
||||
0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
};
|
||||
const struct UnkStruct_8467FB8 sCardGfxPtrs[8] = {
|
||||
{1, 0, 0, 0, sCard0Gfx, sCard0Map, gCard0Pal},
|
||||
{1, 0, 0, 1, sCard1Gfx, sCard1Map, gCard1Pal},
|
||||
{1, 0, 0, 2, sCard2Gfx, sCard2Map, gCard2Pal},
|
||||
{1, 0, 0, 3, sCard2Gfx, sCard2Map, gCard3Pal},
|
||||
{1, 0, 0, 4, sCard2Gfx, sCard2Map, gCard4Pal},
|
||||
{1, 0, 0, 5, sCard2Gfx, sCard2Map, gCard5Pal},
|
||||
{1, 0, 0, 6, sCard6Gfx, sCard6Map, gCard6Pal},
|
||||
{1, 0, 0, 7, sCard7Gfx, sCard7Map, gCard7Pal}
|
||||
};
|
||||
|
||||
bool32 InitWonderCardResources(struct MEWonderCardData * card, struct MEventBuffer_3430_Sub * b3430sub)
|
||||
{
|
||||
if (card == NULL || b3430sub == NULL)
|
||||
return FALSE;
|
||||
sMEventScreenData = AllocZeroed(sizeof(struct MEventScreenMgr));
|
||||
if (sMEventScreenData == NULL)
|
||||
return FALSE;
|
||||
sMEventScreenData->wonderCard = *card;
|
||||
sMEventScreenData->buff3430Sub = *b3430sub;
|
||||
if (sMEventScreenData->wonderCard.unk_08_2 >= NELEMS(sCardGfxPtrs))
|
||||
sMEventScreenData->wonderCard.unk_08_2 = 0;
|
||||
if (sMEventScreenData->wonderCard.unk_08_0 >= NELEMS(sTextYCoords))
|
||||
sMEventScreenData->wonderCard.unk_08_0 = 0;
|
||||
if (sMEventScreenData->wonderCard.recvMonCapacity > NELEMS(sMEventScreenData->cardIconAndShadowSprites))
|
||||
sMEventScreenData->wonderCard.recvMonCapacity = 0;
|
||||
sMEventScreenData->bgSpec = &sCardGfxPtrs[sMEventScreenData->wonderCard.unk_08_2];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderCardResources(void)
|
||||
{
|
||||
if (sMEventScreenData != NULL)
|
||||
{
|
||||
*sMEventScreenData = (struct MEventScreenMgr){};
|
||||
Free(sMEventScreenData);
|
||||
sMEventScreenData = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderCardMenu(void)
|
||||
{
|
||||
if (sMEventScreenData == NULL)
|
||||
return -1;
|
||||
switch(sMEventScreenData->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
DecompressAndCopyTileDataToVram(2, sMEventScreenData->bgSpec->tiles, 0, 0x008, 0);
|
||||
sMEventScreenData->windowIds[0] = AddWindow(&sWindowTemplates[0]);
|
||||
sMEventScreenData->windowIds[1] = AddWindow(&sWindowTemplates[1]);
|
||||
sMEventScreenData->windowIds[2] = AddWindow(&sWindowTemplates[2]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(sMEventScreenData->bgSpec->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(sMEventScreenData->bgSpec->map, sMEventScreenData->buffer_045C);
|
||||
CopyRectToBgTilemapBufferRect(2, sMEventScreenData->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 4:
|
||||
sub_8145A98();
|
||||
break;
|
||||
case 5:
|
||||
sub_8145D18(0);
|
||||
sub_8145D18(1);
|
||||
sub_8145D18(2);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
break;
|
||||
case 6:
|
||||
LoadMonIconPalettes();
|
||||
break;
|
||||
case 7:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
sub_8146060();
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sMEventScreenData->state = 0;
|
||||
return 1;
|
||||
}
|
||||
++sMEventScreenData->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderCard(bool32 flag)
|
||||
{
|
||||
if (sMEventScreenData == NULL)
|
||||
return -1;
|
||||
switch (sMEventScreenData->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(sMEventScreenData->windowIds[2]);
|
||||
RemoveWindow(sMEventScreenData->windowIds[1]);
|
||||
RemoveWindow(sMEventScreenData->windowIds[0]);
|
||||
break;
|
||||
case 4:
|
||||
sub_81461D8();
|
||||
FreeMonIconPalettes();
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sMEventScreenData->state = 0;
|
||||
return 1;
|
||||
}
|
||||
++sMEventScreenData->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_8145A98(void)
|
||||
{
|
||||
u16 i = 0;
|
||||
u16 r6;
|
||||
u16 sp0[3] = {0, 0, 0};
|
||||
|
||||
memcpy(sMEventScreenData->title, sMEventScreenData->wonderCard.unk_0A, 40);
|
||||
sMEventScreenData->title[40] = EOS;
|
||||
memcpy(sMEventScreenData->subtitle, sMEventScreenData->wonderCard.unk_32, 40);
|
||||
sMEventScreenData->subtitle[40] = EOS;
|
||||
if (sMEventScreenData->wonderCard.unk_04 > 999999)
|
||||
sMEventScreenData->wonderCard.unk_04 = 999999;
|
||||
ConvertIntToDecimalStringN(sMEventScreenData->unk_01DD, sMEventScreenData->wonderCard.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
memcpy(sMEventScreenData->mainMessageLines[i], sMEventScreenData->wonderCard.unk_5A[i], 40);
|
||||
sMEventScreenData->mainMessageLines[i][40] = EOS;
|
||||
}
|
||||
memcpy(sMEventScreenData->instructionsLine1, sMEventScreenData->wonderCard.unk_FA, 40);
|
||||
sMEventScreenData->instructionsLine1[40] = EOS;
|
||||
switch (sMEventScreenData->wonderCard.unk_08_0)
|
||||
{
|
||||
case 0:
|
||||
memcpy(sMEventScreenData->instructionsLine2, sMEventScreenData->wonderCard.unk_122, 40);
|
||||
sMEventScreenData->instructionsLine2[40] = EOS;
|
||||
break;
|
||||
case 1:
|
||||
sMEventScreenData->instructionsLine2[00] = EOS;
|
||||
break;
|
||||
case 2:
|
||||
sMEventScreenData->instructionsLine2[00] = EOS;
|
||||
sp0[0] = sMEventScreenData->buff3430Sub.linkWins < 999 ? sMEventScreenData->buff3430Sub.linkWins : 999;
|
||||
sp0[1] = sMEventScreenData->buff3430Sub.linkLosses < 999 ? sMEventScreenData->buff3430Sub.linkLosses : 999;
|
||||
sp0[2] = sMEventScreenData->buff3430Sub.linkTrades < 999 ? sMEventScreenData->buff3430Sub.linkTrades : 999;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
memset(sMEventScreenData->recordStrings[i].numberTxt, EOS, 4);
|
||||
memset(sMEventScreenData->recordStrings[i].nameTxt, EOS, 41);
|
||||
}
|
||||
for (i = 0, r6 = 0; i < 40; i++)
|
||||
{
|
||||
if (sMEventScreenData->wonderCard.unk_122[i] != CHAR_SPECIAL_F7)
|
||||
{
|
||||
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.unk_122[i];
|
||||
r6++;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 r3 = sMEventScreenData->wonderCard.unk_122[i + 1];
|
||||
if (r3 > 2)
|
||||
{
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertIntToDecimalStringN(sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].numberTxt, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nDigits = sMEventScreenData->wonderCard.unk_122[i + 2];
|
||||
sMEventScreenData->recordIdx++;
|
||||
if (sMEventScreenData->recordIdx > 7)
|
||||
break;
|
||||
r6 = 0;
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8145D18(u8 whichWindow)
|
||||
{
|
||||
s8 sp0C = 0;
|
||||
s32 windowId = sMEventScreenData->windowIds[whichWindow];
|
||||
PutWindowTilemap(windowId);
|
||||
FillWindowPixelBuffer(windowId, 0);
|
||||
switch (whichWindow)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
s32 x;
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->title);
|
||||
x = 160 - GetStringWidth(3, sMEventScreenData->subtitle, GetFontAttribute(3, 2));
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->subtitle);
|
||||
if (sMEventScreenData->wonderCard.unk_04 != 0)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->unk_01DD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
for (; sp0C < 4; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_8467068[sMEventScreenData->bgSpec->textPal2], 0, sMEventScreenData->mainMessageLines[sp0C]);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine1);
|
||||
if (sMEventScreenData->wonderCard.unk_08_0 != 2)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 + sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine2);
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 x = 0;
|
||||
s32 y = sTextYCoords[sMEventScreenData->wonderCard.unk_08_0] + 16;
|
||||
s32 spacing = GetFontAttribute(3, 2);
|
||||
for (; sp0C < sMEventScreenData->recordIdx; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].nameTxt);
|
||||
if (sMEventScreenData->recordStrings[sp0C].numberTxt[0] != EOS)
|
||||
{
|
||||
x += GetStringWidth(3, sMEventScreenData->recordStrings[sp0C].nameTxt, spacing);
|
||||
AddTextPrinterParameterized3(windowId, 2, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].numberTxt);
|
||||
x += GetStringWidth(3, sMEventScreenData->recordStrings[sp0C].numberTxt, spacing) + sMEventScreenData->recordStrings[sp0C].nDigits;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
CopyWindowToVram(windowId, 3);
|
||||
}
|
||||
|
||||
void sub_8146060(void)
|
||||
{
|
||||
u8 r7 = 0;
|
||||
sMEventScreenData->monIconId = 0xFF;
|
||||
if (sMEventScreenData->buff3430Sub.unk_06 != SPECIES_NONE)
|
||||
{
|
||||
sMEventScreenData->monIconId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
|
||||
gSprites[sMEventScreenData->monIconId].oam.priority = 2;
|
||||
}
|
||||
if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&sShadowSpriteSheet);
|
||||
LoadSpritePalette(&sShadowSpritePalettes[sMEventScreenData->bgSpec->index]);
|
||||
for (; r7 < sMEventScreenData->wonderCard.recvMonCapacity; r7++)
|
||||
{
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][0] = 0xFF;
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][1] = 0xFF;
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][0] = CreateSprite(&sShadowSpriteTemplate, 0xd8 - 32 * r7, 0x90, 8);
|
||||
if (sMEventScreenData->buff3430Sub.distributedMons[0][r7] != 0)
|
||||
{
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.distributedMons[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
|
||||
gSprites[sMEventScreenData->cardIconAndShadowSprites[r7][1]].oam.priority = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81461D8(void)
|
||||
{
|
||||
u8 r6 = 0;
|
||||
if (sMEventScreenData->monIconId != 0xFF)
|
||||
DestroyMonIcon(&gSprites[sMEventScreenData->monIconId]);
|
||||
if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1)
|
||||
{
|
||||
for (; r6 < sMEventScreenData->wonderCard.recvMonCapacity; r6++)
|
||||
{
|
||||
if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
|
||||
{
|
||||
DestroySprite(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][0]]);
|
||||
// This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior.
|
||||
// if (sMEventScreenData->cardIconAndShadowSprites[r6][1] != 0xFF)
|
||||
if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
|
||||
{
|
||||
DestroyMonIcon(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][1]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
FreeSpriteTilesByTag(0x8000);
|
||||
FreeSpritePaletteByTag(0x8000);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,357 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu.h"
|
||||
#include "link_rfu.h"
|
||||
|
||||
struct UnkStruct_203F3CC
|
||||
{
|
||||
/*0000*/ struct MEWonderNewsData wonderNews;
|
||||
/*01bc*/ const struct UnkStruct_8467FB8 * bgSpec;
|
||||
/*01c0*/ u8 verticalScrollDisabled:1;
|
||||
u8 state:7;
|
||||
/*01c1*/ u8 menuIndicatorsId;
|
||||
/*01c2*/ u8 unk_01C2_0:1;
|
||||
u8 unk_01C2_1:7;
|
||||
/*01c3*/ u8 scrollDirection:1;
|
||||
u8 unk_01C3_1:7;
|
||||
/*01c4*/ u16 numMails;
|
||||
/*01c6*/ u16 scrollOffset;
|
||||
/*01c8*/ u16 windowIds[2];
|
||||
/*01cc*/ u8 filler_01CC[2];
|
||||
/*01ce*/ u8 title[41];
|
||||
/*01f7*/ u8 messages[10][41];
|
||||
/*0394*/ struct ScrollArrowsTemplate scrollArrowsTemplate;
|
||||
/*03a4*/ u8 buffer_03A4[0x1000];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_203F3CC * sWork = NULL;
|
||||
|
||||
void sub_8146980(void);
|
||||
void sub_8146A30(void);
|
||||
void sub_8146B58(void);
|
||||
|
||||
const u8 sTextPals[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
const struct WindowTemplate gUnknown_8468040[] = {
|
||||
{0, 1, 0, 28, 3, 15, 0x000},
|
||||
{2, 1, 3, 28, 20, 15, 0x000}
|
||||
};
|
||||
const struct ScrollArrowsTemplate sScrollArrowsTemplate = {
|
||||
0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98,
|
||||
0x0000, 0x0002, 0x1000, 0x1000, 0x0,
|
||||
};
|
||||
|
||||
const u16 sNews1Pal[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal");
|
||||
const u16 sNews6Pal[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal");
|
||||
const u16 sNews7Pal[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal");
|
||||
const u8 sNews0Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz");
|
||||
const u8 sNews0Map[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz");
|
||||
const u8 sNews1Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz");
|
||||
const u8 sNews1Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz");
|
||||
const u8 sNews2Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz");
|
||||
const u8 sNews2Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz");
|
||||
const u8 sNews6Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz");
|
||||
const u8 sNews6Map[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz");
|
||||
const u8 sNews7Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz");
|
||||
const u8 sNews7Map[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz");
|
||||
|
||||
const struct UnkStruct_8467FB8 sBgSpecs[] = {
|
||||
{1, 0, 0, 0, sNews0Gfx, sNews0Map, sNews1Pal},
|
||||
{1, 0, 0, 0, sNews1Gfx, sNews1Map, gCard1Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard2Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard3Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard4Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard5Pal},
|
||||
{1, 0, 0, 0, sNews6Gfx, sNews6Map, sNews6Pal},
|
||||
{1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal}
|
||||
};
|
||||
|
||||
bool32 InitWonderNewsResources(const struct MEWonderNewsData * news)
|
||||
{
|
||||
if (news == NULL)
|
||||
return FALSE;
|
||||
sWork = AllocZeroed(sizeof(struct UnkStruct_203F3CC));
|
||||
if (sWork == NULL)
|
||||
return FALSE;
|
||||
sWork->wonderNews = *news;
|
||||
if (sWork->wonderNews.unk_03 >= NELEMS(sBgSpecs))
|
||||
sWork->wonderNews.unk_03 = 0;
|
||||
sWork->bgSpec = &sBgSpecs[sWork->wonderNews.unk_03];
|
||||
sWork->menuIndicatorsId = 0xFF;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderNewsResources(void)
|
||||
{
|
||||
if (sWork != NULL)
|
||||
{
|
||||
*sWork = (struct UnkStruct_203F3CC){};
|
||||
Free(sWork);
|
||||
sWork = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderNewsMenu(void)
|
||||
{
|
||||
if (sWork == NULL)
|
||||
return -1;
|
||||
|
||||
switch (sWork->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0x1A98);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x1F);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x1B);
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
DecompressAndCopyTileDataToVram(3, sWork->bgSpec->tiles, 0, 8, 0);
|
||||
sWork->windowIds[0] = AddWindow(&gUnknown_8468040[0]);
|
||||
sWork->windowIds[1] = AddWindow(&gUnknown_8468040[1]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(sWork->bgSpec->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(sWork->bgSpec->map, sWork->buffer_03A4);
|
||||
CopyRectToBgTilemapBufferRect(1, sWork->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0);
|
||||
CopyRectToBgTilemapBufferRect(3, sWork->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 4:
|
||||
sub_8146980();
|
||||
break;
|
||||
case 5:
|
||||
sub_8146A30();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 6:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
ShowBg(3);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sWork->state = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
++sWork->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderNews(bool32 flag)
|
||||
{
|
||||
if (sWork == NULL)
|
||||
return -1;
|
||||
switch (sWork->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(2, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(sWork->windowIds[1]);
|
||||
RemoveWindow(sWork->windowIds[0]);
|
||||
break;
|
||||
case 4:
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
if (sWork->menuIndicatorsId != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId);
|
||||
sWork->menuIndicatorsId = 0xFF;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
MG_DrawCheckerboardPattern();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sWork->state = 0;
|
||||
return 1;
|
||||
}
|
||||
++sWork->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MENews_RemoveScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (!sWork->verticalScrollDisabled && sWork->menuIndicatorsId != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId);
|
||||
sWork->menuIndicatorsId = 0xFF;
|
||||
sWork->verticalScrollDisabled = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MENews_AddScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (sWork->verticalScrollDisabled)
|
||||
{
|
||||
sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset);
|
||||
sWork->verticalScrollDisabled = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 MENews_GetInput(u16 input)
|
||||
{
|
||||
if (sWork->unk_01C2_0)
|
||||
{
|
||||
sub_8146B58();
|
||||
return 0xFF;
|
||||
}
|
||||
switch (input)
|
||||
{
|
||||
case A_BUTTON:
|
||||
return 0;
|
||||
case B_BUTTON:
|
||||
return 1;
|
||||
case DPAD_UP:
|
||||
if (sWork->scrollOffset == 0)
|
||||
return 0xFF;
|
||||
if (sWork->verticalScrollDisabled)
|
||||
return 0xFF;
|
||||
sWork->scrollDirection = FALSE;
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
if (sWork->scrollOffset == sWork->numMails)
|
||||
return 0xFF;
|
||||
if (sWork->verticalScrollDisabled)
|
||||
return 0xFF;
|
||||
sWork->scrollDirection = TRUE;
|
||||
break;
|
||||
default:
|
||||
return 0xFF;
|
||||
}
|
||||
sWork->unk_01C2_0 = TRUE;
|
||||
sWork->unk_01C2_1 = 2;
|
||||
sWork->unk_01C3_1 = 0;
|
||||
if (sWork->scrollDirection == FALSE)
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
void sub_8146980(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
memcpy(sWork->title, sWork->wonderNews.unk_04, 40);
|
||||
sWork->title[40] = EOS;
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
memcpy(sWork->messages[i], sWork->wonderNews.unk_2C[i], 40);
|
||||
sWork->messages[i][40] = EOS;
|
||||
if (i > 7 && sWork->messages[i][0] != EOS)
|
||||
++sWork->numMails;
|
||||
}
|
||||
sWork->scrollArrowsTemplate = sScrollArrowsTemplate;
|
||||
sWork->scrollArrowsTemplate.fullyDownThreshold = sWork->numMails;
|
||||
}
|
||||
|
||||
void sub_8146A30(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
s32 x;
|
||||
PutWindowTilemap(sWork->windowIds[0]);
|
||||
PutWindowTilemap(sWork->windowIds[1]);
|
||||
FillWindowPixelBuffer(sWork->windowIds[0], 0);
|
||||
FillWindowPixelBuffer(sWork->windowIds[1], 0);
|
||||
x = (0xe0 - GetStringWidth(3, sWork->title, GetFontAttribute(3, 2))) / 2;
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(sWork->windowIds[0], 3, x, 6, sTextPals[sWork->bgSpec->textPal1], 0, sWork->title);
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
AddTextPrinterParameterized3(sWork->windowIds[1], 3, 0, 16 * i + 2, sTextPals[sWork->bgSpec->textPal2], 0, sWork->messages[i]);
|
||||
}
|
||||
CopyWindowToVram(sWork->windowIds[0], 3);
|
||||
CopyWindowToVram(sWork->windowIds[1], 3);
|
||||
}
|
||||
|
||||
void sub_8146B58(void)
|
||||
{
|
||||
u16 r4 = sWork->unk_01C2_1;
|
||||
r4 <<= 8;
|
||||
if (sWork->scrollDirection)
|
||||
{
|
||||
ChangeBgY(2, r4, 1);
|
||||
ChangeBgY(3, r4, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeBgY(2, r4, 2);
|
||||
ChangeBgY(3, r4, 2);
|
||||
}
|
||||
sWork->unk_01C3_1 += sWork->unk_01C2_1;
|
||||
if (sWork->unk_01C3_1 > 15)
|
||||
{
|
||||
if (sWork->scrollDirection)
|
||||
++sWork->scrollOffset;
|
||||
else
|
||||
--sWork->scrollOffset;
|
||||
sWork->unk_01C2_0 = FALSE;
|
||||
sWork->unk_01C3_1 = 0;
|
||||
}
|
||||
}
|
||||
@@ -1279,7 +1279,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
switch (mevent_client_do_exec(&data->curPromptWindowId))
|
||||
{
|
||||
case 6: // done
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
data->prevPromptWindowId = data->curPromptWindowId;
|
||||
data->state = 13;
|
||||
break;
|
||||
@@ -1645,7 +1645,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 33:
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
StringCopy(gStringVar1, gLinkPlayers[1].name);
|
||||
data->state = 34;
|
||||
break;
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ void NewGameInitData(void)
|
||||
ResetTrainerFanClub();
|
||||
UnionRoomChat_InitializeRegisteredTexts();
|
||||
ResetMiniGamesResults();
|
||||
sub_8143D24();
|
||||
InitMEventData();
|
||||
SetAllRenewableItemFlags();
|
||||
WarpToPlayersRoom();
|
||||
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
|
||||
|
||||
+1
-1
@@ -506,7 +506,7 @@ u8 *GetRamScript(u8 objectId, u8 *script)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_8069DFC(void)
|
||||
bool32 ValidateRamScript(void)
|
||||
{
|
||||
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
|
||||
if (scriptData->magic != RAM_SCRIPT_MAGIC)
|
||||
|
||||
+2
-2
@@ -1213,7 +1213,7 @@ static void sub_804D548(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AA80(32);
|
||||
Link_StartSend5FFFwithParam(32);
|
||||
sTradeMenuResourcesPtr->unk_6F = 13;
|
||||
}
|
||||
}
|
||||
@@ -2008,7 +2008,7 @@ static void sub_804E908(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AA80(12);
|
||||
Link_StartSend5FFFwithParam(12);
|
||||
}
|
||||
|
||||
sTradeMenuResourcesPtr->unk_6F = 12;
|
||||
|
||||
+1
-1
@@ -2686,7 +2686,7 @@ static void sub_8053E8C(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
}
|
||||
gMain.state++;
|
||||
}
|
||||
|
||||
+1
-1
@@ -590,7 +590,7 @@ static void Task_TrainerCard(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
DrawDialogueFrame(0, 1);
|
||||
AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0);
|
||||
CopyWindowToVram(0, 3);
|
||||
|
||||
+147
-140
@@ -74,8 +74,8 @@ static void sub_8116D60(struct UnkStruct_Group * group, s32 id);
|
||||
static void Task_ListenToWireless(u8 taskId);
|
||||
static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 itemId, u8 y);
|
||||
static u8 GetNewLeaderCandidate(void);
|
||||
static void sub_8117990(void);
|
||||
static void sub_81179A4(void);
|
||||
static void CreateTask_sub_8117900(void);
|
||||
static void CreateTask_sub_81175BC(void);
|
||||
static void Task_MEvent_Leader(u8 taskId);
|
||||
static void Task_CardOrNewsWithFriend(u8 taskId);
|
||||
static void Task_CardOrNewsOverWireless(u8 taskId);
|
||||
@@ -301,9 +301,9 @@ static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_InviteToActivity[] = {
|
||||
{gUnknown_8459354, _8456CD8( ACTIVITY_CARD, 2)},
|
||||
{gUnknown_8459344, _8456CD8(ACTIVITY_BATTLE | 0x40, 2)},
|
||||
{gUnknown_845934C, _8456CD8(ACTIVITY_CHAT | 0x40, 2)},
|
||||
{gUnknown_8459360, _8456CD8(ACTIVITY_NONE | 0x40, 0)}
|
||||
{gUnknown_8459344, _8456CD8(ACTIVITY_BATTLE | IN_UNION_ROOM, 2)},
|
||||
{gUnknown_845934C, _8456CD8(ACTIVITY_CHAT | IN_UNION_ROOM, 2)},
|
||||
{gUnknown_8459360, _8456CD8(ACTIVITY_NONE | IN_UNION_ROOM, 0)}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
|
||||
@@ -570,15 +570,15 @@ ALIGNED(4) static const u8 gUnknown_845706C[] = {
|
||||
};
|
||||
|
||||
ALIGNED(4) static const u8 gUnknown_8457070[] = {
|
||||
ACTIVITY_NONE | 0x40,
|
||||
ACTIVITY_BATTLE | 0x40,
|
||||
ACTIVITY_TRADE | 0x40,
|
||||
ACTIVITY_CHAT | 0x40,
|
||||
ACTIVITY_CARD | 0x40,
|
||||
ACTIVITY_ACCEPT | 0x40,
|
||||
ACTIVITY_DECLINE | 0x40,
|
||||
0x13 | 0x40,
|
||||
0x14 | 0x40,
|
||||
ACTIVITY_NONE | IN_UNION_ROOM,
|
||||
ACTIVITY_BATTLE | IN_UNION_ROOM,
|
||||
ACTIVITY_TRADE | IN_UNION_ROOM,
|
||||
ACTIVITY_CHAT | IN_UNION_ROOM,
|
||||
ACTIVITY_CARD | IN_UNION_ROOM,
|
||||
ACTIVITY_ACCEPT | IN_UNION_ROOM,
|
||||
ACTIVITY_DECLINE | IN_UNION_ROOM,
|
||||
0x13 | IN_UNION_ROOM,
|
||||
0x14 | IN_UNION_ROOM,
|
||||
0xFF
|
||||
};
|
||||
|
||||
@@ -1023,8 +1023,8 @@ static void Task_TryBecomeLinkLeader(u8 taskId)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
sub_80FAFE0(1);
|
||||
sub_8117990();
|
||||
sub_80FAFE0(TRUE);
|
||||
CreateTask_sub_8117900();
|
||||
sub_81161E4(data);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
@@ -1512,7 +1512,7 @@ static void Task_TryJoinLinkGroup(u8 taskId)
|
||||
LinkRfu_Shutdown();
|
||||
break;
|
||||
case 21:
|
||||
sub_8117990();
|
||||
CreateTask_sub_8117900();
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -1768,7 +1768,7 @@ static void sub_8117130(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8117280(u8 taskId)
|
||||
static void Task_ExchangeCards(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
@@ -1792,7 +1792,7 @@ static void sub_8117280(u8 taskId)
|
||||
if (GetLinkPlayerCount() == 2)
|
||||
{
|
||||
recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1];
|
||||
sub_81446D0(recvBuff[48]);
|
||||
sub_81446D0(recvBuff[sizeof(struct TrainerCard) / 2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1806,16 +1806,16 @@ static void sub_8117280(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8117354(void)
|
||||
static void CB2_ShowCard(void)
|
||||
{
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
CreateTask(sub_8117280, 5);
|
||||
CreateTask(Task_ExchangeCards, 5);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
if (!FuncIsActiveTask(sub_8117280))
|
||||
if (!FuncIsActiveTask(Task_ExchangeCards))
|
||||
ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField);
|
||||
break;
|
||||
}
|
||||
@@ -1839,7 +1839,7 @@ void sub_81173C0(u16 battleFlags)
|
||||
PlayBattleBGM();
|
||||
}
|
||||
|
||||
static void sub_8117440(u16 linkService, u16 x, u16 y)
|
||||
static void SetCableClubStateAndWarpCurrentMap(u16 linkService, u16 x, u16 y)
|
||||
{
|
||||
VarSet(VAR_CABLE_CLUB_STATE, linkService);
|
||||
SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
|
||||
@@ -1847,7 +1847,7 @@ static void sub_8117440(u16 linkService, u16 x, u16 y)
|
||||
WarpIntoMap();
|
||||
}
|
||||
|
||||
static void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
|
||||
static void SetCableClubStateAndWarpToNewMap(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
|
||||
{
|
||||
gSpecialVar_0x8004 = linkService;
|
||||
VarSet(VAR_CABLE_CLUB_STATE, linkService);
|
||||
@@ -1863,11 +1863,11 @@ static void sub_8117534(void)
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
CreateTask(sub_8117280, 5);
|
||||
CreateTask(Task_ExchangeCards, 5);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
if (!FuncIsActiveTask(sub_8117280))
|
||||
if (!FuncIsActiveTask(Task_ExchangeCards))
|
||||
SetMainCallback2(sub_8056788);
|
||||
break;
|
||||
}
|
||||
@@ -1878,74 +1878,79 @@ static void sub_8117534(void)
|
||||
BuildOamBuffer();
|
||||
}
|
||||
|
||||
static void sub_8117594(void *arg0, bool32 arg1)
|
||||
static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard)
|
||||
{
|
||||
TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )arg0);
|
||||
if (arg1)
|
||||
*((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagId();
|
||||
TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )dest);
|
||||
if (setWonderCard)
|
||||
*((u16 *)(dest + sizeof(struct TrainerCard))) = GetWonderCardFlagId();
|
||||
else
|
||||
*((u16 *)(arg0 + sizeof(struct TrainerCard))) = 0;
|
||||
*((u16 *)(dest + sizeof(struct TrainerCard))) = 0;
|
||||
}
|
||||
|
||||
static void sub_81175BC(u8 taskId)
|
||||
static void Task_sub_81175BC(u8 taskId)
|
||||
{
|
||||
sub_81446C4();
|
||||
switch (sPlayerCurrActivity)
|
||||
{
|
||||
case 1 ... 4:
|
||||
case 9 ... 11:
|
||||
case 13:
|
||||
case 14:
|
||||
case ACTIVITY_BATTLE:
|
||||
case ACTIVITY_DBLBATTLE:
|
||||
case ACTIVITY_MLTBATTLE:
|
||||
case ACTIVITY_TRADE:
|
||||
case ACTIVITY_PJUMP:
|
||||
case ACTIVITY_BCRUSH:
|
||||
case ACTIVITY_BPICK:
|
||||
case ACTIVITY_SPINTRADE:
|
||||
case ACTIVITY_ITEMTRADE:
|
||||
RecordMixTrainerNames();
|
||||
break;
|
||||
}
|
||||
|
||||
switch (sPlayerCurrActivity)
|
||||
{
|
||||
case 65:
|
||||
case 81:
|
||||
case ACTIVITY_BATTLE | IN_UNION_ROOM:
|
||||
case ACTIVITY_ACCEPT | IN_UNION_ROOM:
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
gMain.savedCallback = CB2_UnionRoomBattle;
|
||||
InitChooseHalfPartyForBattle(2);
|
||||
break;
|
||||
case 1:
|
||||
case ACTIVITY_BATTLE:
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
sub_8117594(gBlockSendBuffer, TRUE);
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
|
||||
HealPlayerParty();
|
||||
SavePlayerParty();
|
||||
LoadPlayerBag();
|
||||
sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
|
||||
SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
|
||||
SetMainCallback2(sub_8117534);
|
||||
break;
|
||||
case 2:
|
||||
case ACTIVITY_DBLBATTLE:
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
HealPlayerParty();
|
||||
SavePlayerParty();
|
||||
LoadPlayerBag();
|
||||
sub_8117594(gBlockSendBuffer, TRUE);
|
||||
sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
|
||||
SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
|
||||
SetMainCallback2(sub_8117534);
|
||||
break;
|
||||
case 3:
|
||||
case ACTIVITY_MLTBATTLE:
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
HealPlayerParty();
|
||||
SavePlayerParty();
|
||||
LoadPlayerBag();
|
||||
sub_8117594(gBlockSendBuffer, TRUE);
|
||||
sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE);
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
|
||||
SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE);
|
||||
SetMainCallback2(sub_8117534);
|
||||
break;
|
||||
case 4:
|
||||
sub_8117594(gBlockSendBuffer, TRUE);
|
||||
case ACTIVITY_TRADE:
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
sub_81174B4(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
|
||||
SetCableClubStateAndWarpToNewMap(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
|
||||
SetMainCallback2(sub_8117534);
|
||||
break;
|
||||
case 68:
|
||||
case ACTIVITY_TRADE | IN_UNION_ROOM:
|
||||
CreateTask(sub_8117130, 0);
|
||||
break;
|
||||
case 5:
|
||||
case 69:
|
||||
case ACTIVITY_CHAT:
|
||||
case ACTIVITY_CHAT | IN_UNION_ROOM:
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
sub_80F8CFC();
|
||||
@@ -1953,26 +1958,26 @@ static void sub_81175BC(u8 taskId)
|
||||
else
|
||||
{
|
||||
sub_80F8D14();
|
||||
SetHostRFUtgtGname(ACTIVITY_CHAT | 0x40, 0, 1);
|
||||
SetHostRFUtgtGname(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1);
|
||||
}
|
||||
EnterUnionRoomChat();
|
||||
break;
|
||||
case 8:
|
||||
case 72:
|
||||
sub_8117594(gBlockSendBuffer, FALSE);
|
||||
SetMainCallback2(sub_8117354);
|
||||
case ACTIVITY_CARD:
|
||||
case ACTIVITY_CARD | IN_UNION_ROOM:
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, FALSE);
|
||||
SetMainCallback2(CB2_ShowCard);
|
||||
break;
|
||||
case 9:
|
||||
sub_8117440(USING_MINIGAME, 5, 1);
|
||||
sub_8147AA8(GetCursorSelectionMonId(), CB2_LoadMap);
|
||||
case ACTIVITY_PJUMP:
|
||||
SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1);
|
||||
StartPokemonJump(GetCursorSelectionMonId(), CB2_LoadMap);
|
||||
break;
|
||||
case 10:
|
||||
sub_8117440(USING_BERRY_CRUSH, 9, 1);
|
||||
sub_814B754(CB2_LoadMap);
|
||||
case ACTIVITY_BCRUSH:
|
||||
SetCableClubStateAndWarpCurrentMap(USING_BERRY_CRUSH, 9, 1);
|
||||
StartBerryCrush(CB2_LoadMap);
|
||||
break;
|
||||
case 11:
|
||||
sub_8117440(USING_MINIGAME, 5, 1);
|
||||
sub_81507FC(GetCursorSelectionMonId(), CB2_LoadMap);
|
||||
case ACTIVITY_BPICK:
|
||||
SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1);
|
||||
StartDodrioBerryPicking(GetCursorSelectionMonId(), CB2_LoadMap);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1981,7 +1986,7 @@ static void sub_81175BC(u8 taskId)
|
||||
ScriptContext2_Disable();
|
||||
}
|
||||
|
||||
static void sub_8117900(u8 taskId)
|
||||
static void Task_sub_8117900(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
u16 *sendBuff = (u16*)(gBlockSendBuffer);
|
||||
@@ -2011,20 +2016,20 @@ static void sub_8117900(u8 taskId)
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
sub_81179A4();
|
||||
CreateTask_sub_81175BC();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8117990(void)
|
||||
static void CreateTask_sub_8117900(void)
|
||||
{
|
||||
CreateTask(sub_8117900, 0);
|
||||
CreateTask(Task_sub_8117900, 0);
|
||||
}
|
||||
|
||||
static void sub_81179A4(void)
|
||||
static void CreateTask_sub_81175BC(void)
|
||||
{
|
||||
u8 taskId = CreateTask(sub_81175BC, 0);
|
||||
u8 taskId = CreateTask(Task_sub_81175BC, 0);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
}
|
||||
|
||||
@@ -2103,6 +2108,7 @@ static void Task_MEvent_Leader(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
// The link with your friend has been dropped...
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577F8))
|
||||
{
|
||||
data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
|
||||
@@ -2200,6 +2206,7 @@ static void Task_MEvent_Leader(u8 taskId)
|
||||
data->state++;
|
||||
break;
|
||||
case 14:
|
||||
// Please start over from the beginning.
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84571B8))
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
@@ -2213,7 +2220,7 @@ static void Task_MEvent_Leader(u8 taskId)
|
||||
}
|
||||
else if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
sub_80FAFE0(1);
|
||||
sub_80FAFE0(TRUE);
|
||||
data->state++;
|
||||
}
|
||||
break;
|
||||
@@ -2653,7 +2660,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
data->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20));
|
||||
data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
|
||||
BlankUnkStruct_x20Array(data->field_0->arr, 8);
|
||||
sPlayerCurrActivity = 0x40;
|
||||
sPlayerCurrActivity = IN_UNION_ROOM;
|
||||
data->field_20 = sub_8119E84(data->field_C, data->field_4, 9);
|
||||
ZeroUnionObjWork(data->unionObjs);
|
||||
MakeGroupAssemblyAreasPassable();
|
||||
@@ -2665,7 +2672,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
data->state = 2;
|
||||
break;
|
||||
case 2:
|
||||
SetHostRFUtgtGname(0x40, 0, 0);
|
||||
SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0);
|
||||
RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
|
||||
sub_800B1F4();
|
||||
OpenLink();
|
||||
@@ -2685,7 +2692,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
switch (sUnionRoomTrade.field_0)
|
||||
{
|
||||
case 1:
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
if (id >= PARTY_SIZE)
|
||||
{
|
||||
ResetUnionRoomTrade(&sUnionRoomTrade);
|
||||
@@ -2710,8 +2717,8 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sPlayerCurrActivity = ACTIVITY_TRADE | 0x40;
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM;
|
||||
RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade);
|
||||
data->state = 51;
|
||||
}
|
||||
@@ -2729,7 +2736,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
{
|
||||
if (gSpecialVar_Result == 9)
|
||||
{
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
PlaySE(SE_PC_LOGIN);
|
||||
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
|
||||
data->state = 42;
|
||||
@@ -2737,7 +2744,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
else if (gSpecialVar_Result == 11)
|
||||
{
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
data->state = 23;
|
||||
gSpecialVar_Result = 0;
|
||||
}
|
||||
@@ -2762,7 +2769,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
else if (PlayerIsTalkingToUnionRoomAide())
|
||||
{
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
PlaySE(SE_PC_LOGIN);
|
||||
sub_811B298();
|
||||
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
|
||||
@@ -2782,7 +2789,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
data->state = 11;
|
||||
sub_811B298();
|
||||
RfuUpdatePlayerGnameStateAndSend(0, 0, 0);
|
||||
sub_80FB008(0x13 | 0x40, sub_811B2D8(data), 0);
|
||||
sub_80FB008(0x13 | IN_UNION_ROOM, sub_811B2D8(data), 0);
|
||||
break;
|
||||
}
|
||||
HandleUnionRoomPlayerRefresh(data);
|
||||
@@ -2791,14 +2798,14 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
case 23:
|
||||
if (!FuncIsActiveTask(Task_StartMenuHandleInput))
|
||||
{
|
||||
sub_80FB008(0x40, 0, 0);
|
||||
sub_80FB008(IN_UNION_ROOM, 0, 0);
|
||||
data->state = 4;
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
UR_RunTextPrinters_CheckPrinter0Active();
|
||||
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
switch (sub_811AA5C(data->field_0, taskData[0], taskData[1], playerGender))
|
||||
{
|
||||
case 0:
|
||||
@@ -2829,21 +2836,21 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
else
|
||||
UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_8457F90);
|
||||
|
||||
sPlayerCurrActivity = 0x40;
|
||||
sPlayerCurrActivity = IN_UNION_ROOM;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
sub_8117594(gBlockSendBuffer, TRUE);
|
||||
CreateTask(sub_8117280, 5);
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
|
||||
CreateTask(Task_ExchangeCards, 5);
|
||||
data->state = 38;
|
||||
}
|
||||
break;
|
||||
case 38:
|
||||
if (!FuncIsActiveTask(sub_8117280))
|
||||
if (!FuncIsActiveTask(Task_ExchangeCards))
|
||||
{
|
||||
if (sPlayerCurrActivity == (ACTIVITY_TRADE | 0x40))
|
||||
if (sPlayerCurrActivity == (ACTIVITY_TRADE | IN_UNION_ROOM))
|
||||
UnionRoom_ScheduleFieldMessageWithFollowupState(31, gUnknown_84578BC);
|
||||
else
|
||||
data->state = 5;
|
||||
@@ -2874,9 +2881,9 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
{
|
||||
data->partnerYesNoResponse = 0;
|
||||
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
|
||||
if (var5 == -2 || var5 == 0x40)
|
||||
if (var5 == -2 || var5 == IN_UNION_ROOM)
|
||||
{
|
||||
data->playerSendBuffer[0] = 0x40;
|
||||
data->playerSendBuffer[0] = IN_UNION_ROOM;
|
||||
sub_80F9E2C(data->playerSendBuffer);
|
||||
StringCopy(gStringVar4, gUnknown_845842C[gLinkPlayers[0].gender]);
|
||||
data->state = 32;
|
||||
@@ -2885,13 +2892,13 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
{
|
||||
sPlayerCurrActivity = var5;
|
||||
sPlayerActivityGroupSize = (u32)(var5) >> 8;
|
||||
if (sPlayerCurrActivity == (ACTIVITY_BATTLE | 0x40) && !HasAtLeastTwoMonsOfLevel30OrLower())
|
||||
if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower())
|
||||
{
|
||||
UnionRoom_ScheduleFieldMessageWithFollowupState(5, gUnknown_845847C);
|
||||
}
|
||||
else
|
||||
{
|
||||
data->playerSendBuffer[0] = sPlayerCurrActivity | 0x40;
|
||||
data->playerSendBuffer[0] = sPlayerCurrActivity | IN_UNION_ROOM;
|
||||
sub_80F9E2C(data->playerSendBuffer);
|
||||
data->state = 27;
|
||||
}
|
||||
@@ -2914,11 +2921,11 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
data->state = 36;
|
||||
break;
|
||||
case 31:
|
||||
data->playerSendBuffer[0] = ACTIVITY_TRADE | 0x40;
|
||||
data->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM;
|
||||
data->playerSendBuffer[1] = sUnionRoomTrade.species;
|
||||
data->playerSendBuffer[2] = sUnionRoomTrade.level;
|
||||
sub_80F9E2C(data->playerSendBuffer);
|
||||
@@ -2933,7 +2940,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
else
|
||||
{
|
||||
PollPartnerYesNoResponse(data);
|
||||
if (data->partnerYesNoResponse == (ACTIVITY_ACCEPT | 0x40))
|
||||
if (data->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
|
||||
{
|
||||
if (sPlayerCurrActivity == ACTIVITY_CARD)
|
||||
{
|
||||
@@ -2945,10 +2952,10 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
data->state = 13;
|
||||
}
|
||||
}
|
||||
else if (data->partnerYesNoResponse == (ACTIVITY_DECLINE | 0x40))
|
||||
else if (data->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM))
|
||||
{
|
||||
data->state = 32;
|
||||
GetURoomActivityRejectMsg(gStringVar4, sPlayerCurrActivity | 0x40, gLinkPlayers[0].gender);
|
||||
GetURoomActivityRejectMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM, gLinkPlayers[0].gender);
|
||||
sPlayerCurrActivity = 0;
|
||||
}
|
||||
}
|
||||
@@ -2989,8 +2996,8 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
sPlayerCurrActivity = ACTIVITY_CHAT | 0x40;
|
||||
sub_80FB008(ACTIVITY_CHAT | 0x40, 0, 1);
|
||||
sPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM;
|
||||
sub_80FB008(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1);
|
||||
sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity);
|
||||
data->field_12 = taskData[1];
|
||||
data->state = 20;
|
||||
@@ -3020,7 +3027,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
case 1:
|
||||
case 2:
|
||||
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
if (sub_80FBB0C() == TRUE)
|
||||
sub_811868C(gUnknown_84585E8[playerGender]);
|
||||
else
|
||||
@@ -3036,7 +3043,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
if (RfuIsErrorStatus1or2())
|
||||
{
|
||||
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
|
||||
sub_80FB008(0x14 | 0x40, 0, 1);
|
||||
sub_80FB008(0x14 | IN_UNION_ROOM, 0, 1);
|
||||
if (sub_80FBB0C() == TRUE)
|
||||
sub_811868C(gUnknown_84585E8[playerGender]);
|
||||
else
|
||||
@@ -3059,14 +3066,14 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
else if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
sub_8117594(gBlockSendBuffer, TRUE);
|
||||
CreateTask(sub_8117280, 5);
|
||||
CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
|
||||
CreateTask(Task_ExchangeCards, 5);
|
||||
data->state = 39;
|
||||
}
|
||||
break;
|
||||
case 39:
|
||||
ReceiveUnionRoomActivityPacket(data);
|
||||
if (!FuncIsActiveTask(sub_8117280))
|
||||
if (!FuncIsActiveTask(Task_ExchangeCards))
|
||||
{
|
||||
data->state = 33;
|
||||
StringCopy(gStringVar1, gLinkPlayers[1].name);
|
||||
@@ -3095,19 +3102,19 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
switch (sub_811A14C(&data->textState, FALSE))
|
||||
{
|
||||
case 0:
|
||||
data->playerSendBuffer[0] = ACTIVITY_ACCEPT | 0x40;
|
||||
if (sPlayerCurrActivity == (ACTIVITY_CHAT | 0x40))
|
||||
sub_80FB008(sPlayerCurrActivity | 0x40, sub_811B2A8(1), 0);
|
||||
data->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM;
|
||||
if (sPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM))
|
||||
sub_80FB008(sPlayerCurrActivity | IN_UNION_ROOM, sub_811B2A8(1), 0);
|
||||
else
|
||||
sub_80FB008(sPlayerCurrActivity | 0x40, sub_811B2A8(1), 1);
|
||||
sub_80FB008(sPlayerCurrActivity | IN_UNION_ROOM, sub_811B2A8(1), 1);
|
||||
|
||||
data->field_8->arr[0].field_1B = 0;
|
||||
taskData[3] = 0;
|
||||
if (sPlayerCurrActivity == (ACTIVITY_BATTLE | 0x40))
|
||||
if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM))
|
||||
{
|
||||
if (!HasAtLeastTwoMonsOfLevel30OrLower())
|
||||
{
|
||||
data->playerSendBuffer[0] = ACTIVITY_DECLINE | 0x40;
|
||||
data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
|
||||
sub_80F9E2C(data->playerSendBuffer);
|
||||
data->state = 10;
|
||||
StringCopy(gStringVar4, gUnknown_84584C0);
|
||||
@@ -3118,7 +3125,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
data->state = 13;
|
||||
}
|
||||
}
|
||||
else if (sPlayerCurrActivity == (ACTIVITY_CARD | 0x40))
|
||||
else if (sPlayerCurrActivity == (ACTIVITY_CARD | IN_UNION_ROOM))
|
||||
{
|
||||
sub_80F9E2C(data->playerSendBuffer);
|
||||
ViewURoomPartnerTrainerCard(gStringVar4, data, 1);
|
||||
@@ -3132,7 +3139,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
break;
|
||||
case 1:
|
||||
case -1:
|
||||
data->playerSendBuffer[0] = ACTIVITY_DECLINE | 0x40;
|
||||
data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
|
||||
sub_80F9E2C(data->playerSendBuffer);
|
||||
data->state = 10;
|
||||
sub_81162E0(gStringVar4, sPlayerCurrActivity);
|
||||
@@ -3140,13 +3147,13 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
data->state = 36;
|
||||
break;
|
||||
case 36:
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
sPlayerCurrActivity = 0x40;
|
||||
sPlayerCurrActivity = IN_UNION_ROOM;
|
||||
UnionRoom_ScheduleFieldMessageWithFollowupState(37, gStringVar4);
|
||||
memset(data->playerSendBuffer, 0, sizeof(data->playerSendBuffer));
|
||||
data->recvActivityRequest[0] = 0;
|
||||
@@ -3158,7 +3165,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
sub_811B258(FALSE);
|
||||
break;
|
||||
case 13:
|
||||
GetURoomActivityStartMsg(gStringVar4, sPlayerCurrActivity | 0x40);
|
||||
GetURoomActivityStartMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM);
|
||||
UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4);
|
||||
break;
|
||||
case 14:
|
||||
@@ -3188,7 +3195,7 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
DeleteUnionObjWorkAndStopTask();
|
||||
DestroyTask(taskId);
|
||||
Free(sUnionRoomMain.uRoom);
|
||||
sub_81179A4();
|
||||
CreateTask_sub_81175BC();
|
||||
}
|
||||
break;
|
||||
case 42:
|
||||
@@ -3366,8 +3373,8 @@ static void Task_ResumeUnionRoom(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 51:
|
||||
sPlayerCurrActivity = ACTIVITY_TRADE | 0x40;
|
||||
sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | 0x40);
|
||||
sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM;
|
||||
sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | IN_UNION_ROOM);
|
||||
IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]);
|
||||
UR_PrintFieldMessage(gURText_PleaseWaitMsgs[2]);
|
||||
data->state = 25;
|
||||
@@ -3398,7 +3405,7 @@ static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * arg0)
|
||||
if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00)
|
||||
{
|
||||
arg0->recvActivityRequest[0] = gRecvCmds[1][1];
|
||||
if (gRecvCmds[1][1] == (ACTIVITY_TRADE | 0x40))
|
||||
if (gRecvCmds[1][1] == (ACTIVITY_TRADE | IN_UNION_ROOM))
|
||||
{
|
||||
arg0->recvActivityRequest[1] = gRecvCmds[1][2];
|
||||
arg0->recvActivityRequest[2] = gRecvCmds[1][3];
|
||||
@@ -3424,7 +3431,7 @@ static bool32 sub_8119944(struct UnkStruct_URoom * arg0)
|
||||
else if (var == 2)
|
||||
{
|
||||
arg0->state = 36;
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -4227,7 +4234,7 @@ static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 play
|
||||
{
|
||||
IntlConvPartnerUname(gStringVar1, *r5);
|
||||
r2 = PlayerHasMetTrainerBefore(ReadAsU16(r5->gname_uname.gname.unk_00.playerTrainerId), gStringVar1);
|
||||
if (r5->gname_uname.gname.activity == (ACTIVITY_CHAT | 0x40))
|
||||
if (r5->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[r2][playerGender]);
|
||||
return 2;
|
||||
@@ -4391,16 +4398,16 @@ static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender)
|
||||
{
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE | 0x40:
|
||||
case ACTIVITY_BATTLE | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_8458314[playerGender]);
|
||||
break;
|
||||
case ACTIVITY_CHAT | 0x40:
|
||||
case ACTIVITY_CHAT | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_84585E8[playerGender]);
|
||||
break;
|
||||
case ACTIVITY_TRADE | 0x40:
|
||||
case ACTIVITY_TRADE | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_8458F9C);
|
||||
break;
|
||||
case ACTIVITY_CARD | 0x40:
|
||||
case ACTIVITY_CARD | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_84583B4[playerGender]);
|
||||
break;
|
||||
}
|
||||
@@ -4413,13 +4420,13 @@ static void GetURoomActivityStartMsg(u8 *dst, u8 activity)
|
||||
|
||||
switch (activity)
|
||||
{
|
||||
case ACTIVITY_BATTLE | 0x40:
|
||||
case ACTIVITY_BATTLE | IN_UNION_ROOM:
|
||||
StringCopy(dst, gUnknown_8458230[mpId][gender][0]);
|
||||
break;
|
||||
case ACTIVITY_TRADE | 0x40:
|
||||
case ACTIVITY_TRADE | IN_UNION_ROOM:
|
||||
StringCopy(dst, gUnknown_8458230[mpId][gender][2]);
|
||||
break;
|
||||
case ACTIVITY_CHAT | 0x40:
|
||||
case ACTIVITY_CHAT | IN_UNION_ROOM:
|
||||
StringCopy(dst, gUnknown_8458230[mpId][gender][1]);
|
||||
break;
|
||||
}
|
||||
@@ -4433,15 +4440,15 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_
|
||||
|
||||
switch (activity_p[0])
|
||||
{
|
||||
case ACTIVITY_BATTLE | 0x40:
|
||||
case ACTIVITY_BATTLE | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_8457CA4);
|
||||
result = 1;
|
||||
break;
|
||||
case ACTIVITY_CHAT | 0x40:
|
||||
case ACTIVITY_CHAT | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_8457CF8);
|
||||
result = 1;
|
||||
break;
|
||||
case ACTIVITY_TRADE | 0x40:
|
||||
case ACTIVITY_TRADE | IN_UNION_ROOM:
|
||||
ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringCopy(arg3->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]);
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
@@ -4468,11 +4475,11 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_
|
||||
}
|
||||
result = 1;
|
||||
break;
|
||||
case ACTIVITY_CARD | 0x40:
|
||||
case ACTIVITY_CARD | IN_UNION_ROOM:
|
||||
StringExpandPlaceholders(dst, gUnknown_8457C48);
|
||||
result = 1;
|
||||
break;
|
||||
case 0x40:
|
||||
case IN_UNION_ROOM:
|
||||
// Chat dropped
|
||||
StringExpandPlaceholders(dst, gUnknown_8457E0C);
|
||||
result = 2;
|
||||
@@ -4486,14 +4493,14 @@ static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * arg0)
|
||||
{
|
||||
if (gRecvCmds[0][1] != 0)
|
||||
{
|
||||
if (gRecvCmds[0][1] == (ACTIVITY_ACCEPT | 0x40))
|
||||
if (gRecvCmds[0][1] == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
|
||||
{
|
||||
arg0->partnerYesNoResponse = ACTIVITY_ACCEPT | 0x40;
|
||||
arg0->partnerYesNoResponse = ACTIVITY_ACCEPT | IN_UNION_ROOM;
|
||||
return TRUE;
|
||||
}
|
||||
else if (gRecvCmds[0][1] == (ACTIVITY_DECLINE | 0x40))
|
||||
else if (gRecvCmds[0][1] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
|
||||
{
|
||||
arg0->partnerYesNoResponse = ACTIVITY_DECLINE | 0x40;
|
||||
arg0->partnerYesNoResponse = ACTIVITY_DECLINE | IN_UNION_ROOM;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -4612,7 +4619,7 @@ static void sub_811B258(bool32 arg0)
|
||||
if (arg0)
|
||||
{
|
||||
RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
|
||||
sub_80FB008(0x40, 0, 0);
|
||||
sub_80FB008(IN_UNION_ROOM, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ void CB2_UnionRoomBattle(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40))
|
||||
{
|
||||
gMain.state = 6;
|
||||
|
||||
@@ -587,7 +587,7 @@ static void ChatEntryRoutine_ExitChat(void)
|
||||
case 5:
|
||||
if (IsLinkTaskFinished() && !GetRfuUnkCE8())
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
sWork->exitDelayTimer = 0;
|
||||
sWork->routineState++;
|
||||
}
|
||||
@@ -622,7 +622,7 @@ static void ChatEntryRoutine_Drop(void)
|
||||
case 1:
|
||||
if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8())
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
sWork->exitDelayTimer = 0;
|
||||
sWork->routineState++;
|
||||
}
|
||||
@@ -668,7 +668,7 @@ static void ChatEntryRoutine_Disbanded(void)
|
||||
case 2:
|
||||
if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8())
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
sWork->exitDelayTimer = 0;
|
||||
sWork->routineState++;
|
||||
}
|
||||
|
||||
+3
-1
@@ -443,7 +443,9 @@ gUnknown_203B170: @ 203B170
|
||||
.align 2
|
||||
.include "src/mevent_server.o"
|
||||
.align 2
|
||||
.include "src/mevent_8145654.o"
|
||||
.include "src/mevent_show_card.o"
|
||||
.align 2
|
||||
.include "src/mevent_show_news.o"
|
||||
.align 2
|
||||
.include "src/seagallop.o"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user