More mevent documentation

This commit is contained in:
PikalaxALT
2020-02-04 14:16:45 -05:00
parent d991f1b2c9
commit 4770fac9eb
43 changed files with 1375 additions and 1306 deletions
+3 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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
+4 -4
View File
@@ -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
+4 -4
View File
@@ -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]
+4 -4
View File
@@ -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
View File
@@ -1 +1 @@
gUnknown_3005ED0
sMEventSendToEReaderManager
+15 -15
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+1
View File
@@ -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}
+1 -1
View File
@@ -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
View File
@@ -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);
+15
View File
@@ -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
View File
@@ -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);
+1 -1
View File
@@ -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
View File
@@ -1154,7 +1154,7 @@ static void CB2_PreInitMultiBattle(void)
if (gWirelessCommType)
sub_800AB9C();
else
sub_800AAC0();
Link_TryStartSend5FFF();
}
break;
case 3:
+2 -2
View File
@@ -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);
+1 -1
View File
@@ -662,7 +662,7 @@ static void sub_807E678(u8 taskId)
case 1:
if (!sub_807E40C() && BGMusicStopped())
{
sub_800AAC0();
Link_TryStartSend5FFF();
data[0]++;
}
break;
+5 -5
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
-793
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+454
View File
@@ -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);
}
}
+357
View File
@@ -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;
}
}
+2 -2
View File
@@ -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
View File
@@ -145,7 +145,7 @@ void NewGameInitData(void)
ResetTrainerFanClub();
UnionRoomChat_InitializeRegisteredTexts();
ResetMiniGamesResults();
sub_8143D24();
InitMEventData();
SetAllRenewableItemFlags();
WarpToPlayersRoom();
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -2686,7 +2686,7 @@ static void sub_8053E8C(void)
}
else
{
sub_800AAC0();
Link_TryStartSend5FFF();
}
gMain.state++;
}
+1 -1
View File
@@ -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
View File
@@ -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);
}
}
+1 -1
View File
@@ -167,7 +167,7 @@ void CB2_UnionRoomBattle(void)
}
else
{
sub_800AAC0();
Link_TryStartSend5FFF();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40))
{
gMain.state = 6;
+3 -3
View File
@@ -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
View File
@@ -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"