summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/constants/flags.h68
-rw-r--r--include/constants/mevent.h40
-rw-r--r--include/constants/vars.h16
-rw-r--r--include/event_data.h4
-rw-r--r--include/global.h45
-rw-r--r--include/main.h3
-rwxr-xr-xinclude/mevent.h56
-rw-r--r--include/mevent2.h6
-rw-r--r--include/mevent_client.h62
-rwxr-xr-xinclude/mevent_news.h4
-rw-r--r--include/mevent_server.h102
-rw-r--r--include/mevent_server_helpers.h33
-rw-r--r--include/mystery_gift.h2
-rw-r--r--include/wonder_transfer.h2
14 files changed, 283 insertions, 160 deletions
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 880d227aa..793fe1135 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -338,24 +338,24 @@
#define FLAG_RECEIVED_AURORA_TICKET 0x13A
#define FLAG_RECEIVED_MYSTIC_TICKET 0x13B
#define FLAG_RECEIVED_OLD_SEA_MAP 0x13C
-#define FLAG_MYSTERY_GIFT_UNUSED_1 0x13D // These mystery gift flags are referenced but never set
-#define FLAG_MYSTERY_GIFT_UNUSED_2 0x13E
-#define FLAG_MYSTERY_GIFT_UNUSED_3 0x13F
-#define FLAG_MYSTERY_GIFT_UNUSED_4 0x140
-#define FLAG_MYSTERY_GIFT_UNUSED_5 0x141
-#define FLAG_MYSTERY_GIFT_UNUSED_6 0x142
-#define FLAG_MYSTERY_GIFT_UNUSED_7 0x143
-#define FLAG_MYSTERY_GIFT_UNUSED_8 0x144
-#define FLAG_MYSTERY_GIFT_UNUSED_9 0x145
-#define FLAG_MYSTERY_GIFT_UNUSED_10 0x146
-#define FLAG_MYSTERY_GIFT_UNUSED_11 0x147
-#define FLAG_MYSTERY_GIFT_UNUSED_12 0x148
-#define FLAG_MYSTERY_GIFT_UNUSED_13 0x149
-#define FLAG_MYSTERY_GIFT_UNUSED_14 0x14A
-#define FLAG_MYSTERY_GIFT_UNUSED_15 0x14B
-#define FLAG_MYSTERY_GIFT_UNUSED_16 0x14C
-#define FLAG_MYSTERY_GIFT_UNUSED_17 0x14D
-#define NUM_MYSTERY_GIFT_FLAGS (1 + FLAG_MYSTERY_GIFT_UNUSED_17 - FLAG_RECEIVED_AURORA_TICKET)
+#define FLAG_WONDER_CARD_UNUSED_1 0x13D // These Wonder Card flags are referenced but never set
+#define FLAG_WONDER_CARD_UNUSED_2 0x13E
+#define FLAG_WONDER_CARD_UNUSED_3 0x13F
+#define FLAG_WONDER_CARD_UNUSED_4 0x140
+#define FLAG_WONDER_CARD_UNUSED_5 0x141
+#define FLAG_WONDER_CARD_UNUSED_6 0x142
+#define FLAG_WONDER_CARD_UNUSED_7 0x143
+#define FLAG_WONDER_CARD_UNUSED_8 0x144
+#define FLAG_WONDER_CARD_UNUSED_9 0x145
+#define FLAG_WONDER_CARD_UNUSED_10 0x146
+#define FLAG_WONDER_CARD_UNUSED_11 0x147
+#define FLAG_WONDER_CARD_UNUSED_12 0x148
+#define FLAG_WONDER_CARD_UNUSED_13 0x149
+#define FLAG_WONDER_CARD_UNUSED_14 0x14A
+#define FLAG_WONDER_CARD_UNUSED_15 0x14B
+#define FLAG_WONDER_CARD_UNUSED_16 0x14C
+#define FLAG_WONDER_CARD_UNUSED_17 0x14D
+#define NUM_WONDER_CARD_FLAGS (1 + FLAG_WONDER_CARD_UNUSED_17 - FLAG_RECEIVED_AURORA_TICKET)
#define FLAG_MIRAGE_TOWER_VISIBLE 0x14E
#define FLAG_CHOSE_ROOT_FOSSIL 0x14F
@@ -519,22 +519,22 @@
#define FLAG_UNUSED_0x1E3 0x1E3 // Unused Flag
// Mystery Gift Flags (Unknown)
-#define FLAG_MYSTERY_EVENT_DONE 0x1E4
-#define FLAG_MYSTERY_EVENT_1 0x1E5
-#define FLAG_MYSTERY_EVENT_2 0x1E6
-#define FLAG_MYSTERY_EVENT_3 0x1E7
-#define FLAG_MYSTERY_EVENT_4 0x1E8
-#define FLAG_MYSTERY_EVENT_5 0x1E9
-#define FLAG_MYSTERY_EVENT_6 0x1EA
-#define FLAG_MYSTERY_EVENT_7 0x1EB
-#define FLAG_MYSTERY_EVENT_8 0x1EC
-#define FLAG_MYSTERY_EVENT_9 0x1ED
-#define FLAG_MYSTERY_EVENT_10 0x1EE
-#define FLAG_MYSTERY_EVENT_11 0x1EF
-#define FLAG_MYSTERY_EVENT_12 0x1F0
-#define FLAG_MYSTERY_EVENT_13 0x1F1
-#define FLAG_MYSTERY_EVENT_14 0x1F2
-#define FLAG_MYSTERY_EVENT_15 0x1F3
+#define FLAG_MYSTERY_GIFT_DONE 0x1E4
+#define FLAG_MYSTERY_GIFT_1 0x1E5
+#define FLAG_MYSTERY_GIFT_2 0x1E6
+#define FLAG_MYSTERY_GIFT_3 0x1E7
+#define FLAG_MYSTERY_GIFT_4 0x1E8
+#define FLAG_MYSTERY_GIFT_5 0x1E9
+#define FLAG_MYSTERY_GIFT_6 0x1EA
+#define FLAG_MYSTERY_GIFT_7 0x1EB
+#define FLAG_MYSTERY_GIFT_8 0x1EC
+#define FLAG_MYSTERY_GIFT_9 0x1ED
+#define FLAG_MYSTERY_GIFT_10 0x1EE
+#define FLAG_MYSTERY_GIFT_11 0x1EF
+#define FLAG_MYSTERY_GIFT_12 0x1F0
+#define FLAG_MYSTERY_GIFT_13 0x1F1
+#define FLAG_MYSTERY_GIFT_14 0x1F2
+#define FLAG_MYSTERY_GIFT_15 0x1F3
// Hidden Items
#define FLAG_HIDDEN_ITEMS_START 0x1F4
diff --git a/include/constants/mevent.h b/include/constants/mevent.h
index 3478816fd..d659ffb14 100644
--- a/include/constants/mevent.h
+++ b/include/constants/mevent.h
@@ -1,18 +1,46 @@
#ifndef GUARD_CONSTANTS_MEVENT_H
#define GUARD_CONSTANTS_MEVENT_H
-// mevent2.c
-#define GET_NUM_STAMPS 0
-#define GET_MAX_STAMPS 1
+#define GET_NUM_STAMPS 0
+#define GET_MAX_STAMPS 1
#define GET_CARD_BATTLES_WON 2
+#define GET_CARD_BATTLE_LOST 3
+#define GET_CARD_NUM_TRADES 4
-#define GET_NUM_STAMPS_INTERNAL 3
-#define GET_MAX_STAMPS_INTERNAL 4
-#define GET_CARD_BATTLES_WON_INTERNAL 0
+#define CARD_STAT_BATTLES_WON 0
+#define CARD_STAT_BATTLES_LOST 1
+#define CARD_STAT_NUM_TRADES 2
+#define CARD_STAT_NUM_STAMPS 3
+#define CARD_STAT_MAX_STAMPS 4
+
+#define CARD_TYPE_GIFT 0
+#define CARD_TYPE_STAMP 1 // "Stamp Card"
+#define CARD_TYPE_LINK_STAT 2 // Referred to as the "Battle Card", shows battle and trade stats
+#define CARD_TYPE_COUNT 3
+
+#define SEND_TYPE_DISALLOWED 0
+#define SEND_TYPE_ALLOWED 1
+#define SEND_TYPE_ALLOWED_ALWAYS 2
+
+// Return values for MysteryGift_CompareCardFlags, handled by gMysteryGiftServerScript_SendWonderCard
+#define HAS_NO_CARD 0
+#define HAS_SAME_CARD 1
+#define HAS_DIFF_CARD 2
#define REQUIRED_CARD_BATTLES 3
+#define MAX_CARD_STAMPS 7
+
+// Stamps are 32 bits. The first 16 bits are the species
+// and the second 16 bits are a number (presumably an ID of some kind)
+#define STAMP_SPECIES 0
+#define STAMP_ID 1
+
// Number of different types/colors of Wonder Card and News backgrounds
#define NUM_WONDER_BGS 8
+#define MAX_WONDER_CARD_STAT 999
+
+#define WONDER_CARD_FLAG_OFFSET 1000
+
#endif //GUARD_MEVENT_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 2cbe3e9b8..e57b02185 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -237,14 +237,14 @@
#define VAR_REGISTER_BIRCH_STATE 0x40DA
#define VAR_UNUSED_0x40DB 0x40DB // Unused Var
#define VAR_UNUSED_0x40DC 0x40DC // Unused Var
-#define VAR_EVENT_PICHU_SLOT 0x40DD
-#define VAR_NEVER_READ_0x40DE 0x40DE // Var is written to, but never read
-#define VAR_NEVER_READ_0x40DF 0x40DF // Var is written to, but never read
-#define VAR_NEVER_READ_0x40E0 0x40E0 // Var is written to, but never read
-#define VAR_NEVER_READ_0x40E1 0x40E1 // Var is written to, but never read
-#define VAR_NEVER_READ_0x40E2 0x40E2 // Var is written to, but never read
-#define VAR_NEVER_READ_0x40E3 0x40E3 // Var is written to, but never read
-#define VAR_NEVER_READ_0x40E4 0x40E4 // var is written to, but never read
+#define VAR_GIFT_PICHU_SLOT 0x40DD
+#define VAR_GIFT_UNUSED_1 0x40DE // Var is written to, but never read
+#define VAR_GIFT_UNUSED_2 0x40DF // Var is written to, but never read
+#define VAR_GIFT_UNUSED_3 0x40E0 // Var is written to, but never read
+#define VAR_GIFT_UNUSED_4 0x40E1 // Var is written to, but never read
+#define VAR_GIFT_UNUSED_5 0x40E2 // Var is written to, but never read
+#define VAR_GIFT_UNUSED_6 0x40E3 // Var is written to, but never read
+#define VAR_GIFT_UNUSED_7 0x40E4 // var is written to, but never read
#define VAR_UNUSED_0x40E5 0x40E5 // Unused Var
#define VAR_DAILY_SLOTS 0x40E6
#define VAR_DAILY_WILDS 0x40E7
diff --git a/include/event_data.h b/include/event_data.h
index 8b4510e39..b1fa69460 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -13,8 +13,8 @@ bool32 IsMysteryEventEnabled(void);
void DisableMysteryGift(void);
void EnableMysteryGift(void);
bool32 IsMysteryGiftEnabled(void);
-void ClearMysteryEventFlags(void);
-void ClearMysteryEventVars(void);
+void ClearMysteryGiftFlags(void);
+void ClearMysteryGiftVars(void);
void DisableResetRTC(void);
void EnableResetRTC(void);
bool32 CanResetRTC(void);
diff --git a/include/global.h b/include/global.h
index c737be7b8..a6071b2cd 100644
--- a/include/global.h
+++ b/include/global.h
@@ -837,7 +837,7 @@ struct SaveTrainerHill
/*0x3D6E*/ u16 tag:2;
};
-struct MysteryEventStruct
+struct WonderNewsMetadata
{
u8 unk_0_0:2;
u8 unk_0_2:3;
@@ -845,24 +845,24 @@ struct MysteryEventStruct
u8 unk_1;
};
- struct WonderNews
+struct WonderNews
{
u16 unk_00;
- u8 unk_02;
+ u8 sendType; // SEND_TYPE_*
u8 bgType;
u8 unk_04[WONDER_NEWS_TEXT_LENGTH];
u8 unk_2C[10][WONDER_NEWS_TEXT_LENGTH];
};
- struct WonderCard
+struct WonderCard
{
u16 flagId;
- u16 unk_02;
+ u16 iconSpecies;
u32 unk_04;
- u8 unk_08_0:2;
+ u8 type:2; // CARD_TYPE_*
u8 bgType:4;
- u8 unk_08_6:2;
- u8 unk_09;
+ u8 sendType:2; // SEND_TYPE_*
+ u8 maxStamps;
u8 unk_0A[WONDER_CARD_TEXT_LENGTH];
u8 unk_32[WONDER_CARD_TEXT_LENGTH];
u8 unk_5A[4][WONDER_CARD_TEXT_LENGTH];
@@ -870,26 +870,26 @@ struct MysteryEventStruct
u8 unk_122[WONDER_CARD_TEXT_LENGTH];
};
- struct MEventBuffer_3430
+struct WonderCardMetadata
{
- u16 unk_00;
- u16 unk_02;
- u16 unk_04;
- u16 unk_06;
- u16 unk_08[2][7];
+ u16 battlesWon;
+ u16 battlesLost;
+ u16 numTrades;
+ u16 iconSpecies;
+ u16 stampData[2][7];
};
- struct MysteryGiftSave
+struct MysteryGiftSave
{
u32 newsCrc;
struct WonderNews news;
u32 cardCrc;
struct WonderCard card;
- u32 unkCrc;
- struct MEventBuffer_3430 unk_3430;
+ u32 cardMetadataCrc;
+ struct WonderCardMetadata cardMetadata;
u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
- struct MysteryEventStruct unk_340;
- u32 unk_344[2][5];
+ struct WonderNewsMetadata newsMetadata;
+ u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades
}; // 0x36C 0x3598
// For external event data storage. The majority of these may have never been used.
@@ -966,7 +966,7 @@ struct SaveBlock1
/*0x848*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT];
/*0x988*/ u8 seen1[DEX_FLAGS_NO];
/*0x9BC*/ u16 berryBlenderRecords[3];
- /*0x9C2*/ u8 field_9C2[6];
+ /*0x9C2*/ u8 unused_9C2[6];
/*0x9C8*/ u16 trainerRematchStepCounter;
/*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES];
/*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT];
@@ -986,7 +986,6 @@ struct SaveBlock1
/*0x278E*/ u8 decorationPosters[10];
/*0x2798*/ u8 decorationDolls[40];
/*0x27C0*/ u8 decorationCushions[10];
- /*0x27CA*/ u8 padding_27CA[2];
/*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
/*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];
/*0x2B90*/ u16 outbreakPokemonSpecies;
@@ -1017,7 +1016,7 @@ struct SaveBlock1
/*0x31DC*/ struct Roamer roamer;
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
/*0x322C*/ struct MysteryGiftSave mysteryGift;
- /*0x3598*/ u8 field_3598[0x180];
+ /*0x3598*/ u8 unused_3598[0x180];
/*0x3718*/ u32 trainerHillTimes[4];
/*0x3728*/ struct RamScript ramScript;
/*0x3B14*/ struct RecordMixingGift recordMixingGift;
@@ -1025,7 +1024,7 @@ struct SaveBlock1
/*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
- /*0x3D5A*/ u8 filler3D5A[0xA];
+ /*0x3D5A*/ u8 unused_3D5A[10];
/*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
// sizeof: 0x3D88
diff --git a/include/main.h b/include/main.h
index cad5c0ef9..79d56d31f 100644
--- a/include/main.h
+++ b/include/main.h
@@ -40,9 +40,10 @@ struct Main
/*0x439*/ u8 anyLinkBattlerHasFrontierPass:1;
};
+#define GAME_CODE_LENGTH 4
extern const u8 gGameVersion;
extern const u8 gGameLanguage;
-extern const u8 RomHeaderGameCode[4];
+extern const u8 RomHeaderGameCode[GAME_CODE_LENGTH];
extern const u8 RomHeaderSoftwareVersion;
extern u16 gKeyRepeatStartDelay;
diff --git a/include/mevent.h b/include/mevent.h
index 4fda47fbd..1297b4291 100755
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -1,6 +1,9 @@
#ifndef GUARD_MEVENT_H
#define GUARD_MEVENT_H
+#include "main.h"
+#include "constants/mevent.h"
+
struct MEvent_Str_1
{
u16 unk_000;
@@ -13,51 +16,52 @@ struct MEvent_Str_2
u8 fill_00[0x40];
};
-struct MEventStruct_Unk1442CC
+struct MysteryGiftLinkGameData
{
u32 unk_00;
u16 unk_04;
u32 unk_08;
u16 unk_0C;
u32 unk_10;
- u16 unk_14;
+ u16 flagId;
u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
- struct MEventBuffer_3430 unk_20;
- u8 unk_44;
+ struct WonderCardMetadata cardMetadata;
+ u8 maxStamps;
u8 playerName[PLAYER_NAME_LENGTH];
u8 playerTrainerId[TRAINER_ID_LENGTH];
u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT];
- u8 romHeaderGameCode[4];
+ u8 romHeaderGameCode[GAME_CODE_LENGTH];
u8 romHeaderSoftwareVersion;
};
-void sub_801AFD8(void);
+void ClearMysteryGift(void);
struct WonderNews *GetSavedWonderNews(void);
struct WonderCard *GetSavedWonderCard(void);
-struct MEventBuffer_3430 *sav1_get_mevent_buffer_2(void);
-struct MysteryEventStruct *sub_801B044(void);
+struct WonderCardMetadata *GetSavedWonderCardMetadata(void);
+struct WonderNewsMetadata *GetSavedWonderNewsMetadata(void);
u16 *GetQuestionnaireWordsPtr(void);
-void ClearSavedWonderNews(void);
+void ClearSavedWonderNewsAndRelated(void);
+void ClearSavedWonderCardAndRelated(void);
bool32 SaveWonderNews(const struct WonderNews *news);
-bool32 ValidateSavedWonderNews(void);
-bool32 WonderNews_Test_Unk_02(void);
-bool32 sub_801B1A4(const u8 *src);
-void ClearSavedWonderCard(void);
bool32 SaveWonderCard(const struct WonderCard *card);
+bool32 ValidateSavedWonderNews(void);
bool32 ValidateSavedWonderCard(void);
-bool32 WonderCard_Test_Unk_08_6(void);
+bool32 IsWonderNewsSameAsSaved(const u8 *src);
+bool32 IsSendingSavedWonderNewsAllowed(void);
+bool32 IsSendingSavedWonderCardAllowed(void);
u16 GetWonderCardFlagID(void);
-void WonderCard_ResetInternalReceivedFlag(struct WonderCard *buffer);
-bool32 CheckReceivedGiftFromWonderCard(void);
-bool32 sub_801B508(const u16 *data);
-void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1);
-bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1);
-u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused);
-u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused);
-bool32 MysteryGift_DoesQuestionnaireMatch(const struct MEventStruct_Unk1442CC *data, const u16 *words);
-u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command);
-u16 mevent_081445C0(u32 command);
-void ResetReceivedWonderCardFlag(void);
-bool32 MEventHandleReceivedWonderCard(u16 a0);
+void DisableWonderCardSending(struct WonderCard *card);
+bool32 IsSavedWonderCardGiftNotReceived(void);
+bool32 MysteryGift_TrySaveStamp(const u16 *stamp);
+void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData *data, bool32 a1);
+bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData *data, bool32 a1);
+u32 MysteryGift_CompareCardFlags(const u16 *a0, const struct MysteryGiftLinkGameData *data, const void *unused);
+u32 MysteryGift_CheckStamps(const u16 *a0, const struct MysteryGiftLinkGameData *data, const void *unused);
+bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData *data, const u16 *words);
+u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData *data, u32 stat);
+u16 MysteryGift_GetCardStat(u32 stat);
+void MysteryGift_DisableStats(void);
+bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId);
+void TryIncrementMysteryGiftStat(u32 stat, u32 trainerId);
#endif //GUARD_MEVENT_H
diff --git a/include/mevent2.h b/include/mevent2.h
deleted file mode 100644
index 316a9e6de..000000000
--- a/include/mevent2.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef GUARD_MEVENT2_H
-#define GUARD_MEVENT2_H
-
-void RecordIdOfWonderCardSenderByEventType(u32, u32);
-
-#endif //GUARD_MEVENT2_H
diff --git a/include/mevent_client.h b/include/mevent_client.h
index f68bb7592..cc189ccc9 100644
--- a/include/mevent_client.h
+++ b/include/mevent_client.h
@@ -6,11 +6,11 @@
// Return values for client functions called by MysteryGiftClient_Run
enum {
CLI_RET_INIT,
- CLI_RET_1,
- CLI_RET_2,
- CLI_RET_3,
+ CLI_RET_ACTIVE,
+ CLI_RET_YES_NO,
+ CLI_RET_PRINT_MSG,
CLI_RET_ASK_TOSS,
- CLI_RET_5,
+ CLI_RET_COPY_MSG,
CLI_RET_END,
};
@@ -21,25 +21,47 @@ enum {
CLI_RECV,
CLI_SEND_LOADED,
CLI_COPY_RECV,
- CLI_5,
+ CLI_YES_NO,
CLI_COPY_RECV_IF_N,
CLI_COPY_RECV_IF,
- CLI_8,
- CLI_9,
- CLI_10,
- CLI_11,
- CLI_12,
+ CLI_LOAD_GAME_DATA,
+ CLI_SAVE_NEWS,
+ CLI_SAVE_CARD,
+ CLI_PRINT_MSG,
+ CLI_COPY_MSG,
CLI_ASK_TOSS,
CLI_LOAD_TOSS_RESPONSE,
- CLI_15,
- CLI_16,
- CLI_17,
+ CLI_RUN_GIFT_SCRIPT,
+ CLI_SAVE_STAMP,
+ CLI_SAVE_RAM_SCRIPT,
CLI_RECV_EREADER_TRAINER,
CLI_SEND_STAT,
- CLI_20,
- CLI_21,
+ CLI_SEND_READY_END,
+ CLI_RUN_BUFFER_SCRIPT,
};
+// IDs for client messages when ending a script.
+// Given as the parameter to CLI_RETURN, and resolved to text in GetClientResultMessage
+enum {
+ CLI_MSG_NOTHING_SENT,
+ CLI_MSG_RECORD_UPLOADED,
+ CLI_MSG_CARD_RECEIVED,
+ CLI_MSG_NEWS_RECEIVED,
+ CLI_MSG_STAMP_RECEIVED,
+ CLI_MSG_HAD_CARD,
+ CLI_MSG_HAD_STAMP,
+ CLI_MSG_HAD_NEWS,
+ CLI_MSG_NO_ROOM_STAMPS,
+ CLI_MSG_COMM_CANCELED,
+ CLI_MSG_CANT_ACCEPT,
+ CLI_MSG_COMM_ERROR,
+ CLI_MSG_TRAINER_RECEIVED,
+ CLI_MSG_BUFFER_SUCCESS,
+ CLI_MSG_BUFFER_FAILURE,
+};
+
+#define CLIENT_MAX_MSG_SIZE 64
+
struct MysteryGiftClientCmd
{
u32 instr;
@@ -48,23 +70,23 @@ struct MysteryGiftClientCmd
struct MysteryGiftClient
{
- u32 unk_00;
+ u32 unused;
u32 param;
u32 funcId;
u32 funcState;
u32 cmdidx;
void * sendBuffer;
void * recvBuffer;
- struct MysteryGiftClientCmd * cmdBuffer;
- void * buffer;
+ struct MysteryGiftClientCmd * script;
+ void * msg;
struct MysteryGiftLink link;
bool32 isWonderNews;
};
void MysteryGiftClient_Create(bool32 isWonderNews);
-u32 MysteryGiftClient_Run(u16 * param);
+u32 MysteryGiftClient_Run(u16 * endVal);
void MysteryGiftClient_AdvanceState(void);
-void * mevent_client_get_buffer(void);
+void * MysteryGiftClient_GetMsg(void);
void MysteryGiftClient_SetParam(u32 value);
#endif //GUARD_MEVENT_CLIENT_H
diff --git a/include/mevent_news.h b/include/mevent_news.h
index 5fa009499..7b4657e14 100755
--- a/include/mevent_news.h
+++ b/include/mevent_news.h
@@ -1,7 +1,7 @@
#ifndef GUARD_MEVENT_NEWS_H
#define GUARD_MEVENT_NEWS_H
-void sub_801DBC0(void);
-void GenerateRandomNews(u32 a0);
+void InitSavedWonderNews(void);
+void GenerateRandomWonderNews(u32 a0);
#endif //GUARD_MEVENT_NEWS_H
diff --git a/include/mevent_server.h b/include/mevent_server.h
index 3152280d3..98cb03f6a 100644
--- a/include/mevent_server.h
+++ b/include/mevent_server.h
@@ -3,34 +3,98 @@
#include "mevent_server_helpers.h"
-struct mevent_cmd
+// Return values for Server_* functions.
+// Other than SVR_RET_END, effectively useless (not checked for).
+enum {
+ SVR_RET_INIT,
+ SVR_RET_ACTIVE,
+ SVR_RET_UNUSED,
+ SVR_RET_END
+};
+
+// IDs for server script instructions
+enum {
+ SVR_RETURN,
+ SVR_SEND,
+ SVR_RECV,
+ SVR_GOTO,
+ SVR_GOTO_IF_EQ,
+ SVR_COPY_GAME_DATA,
+ SVR_CHECK_GAME_DATA_CARD,
+ SVR_CHECK_EXISTING_CARD,
+ SVR_READ_RESPONSE,
+ SVR_CHECK_EXISTING_STAMPS,
+ SVR_GET_CARD_STAT,
+ SVR_CHECK_QUESTIONNAIRE,
+ SVR_COMPARE,
+ SVR_LOAD_CARD,
+ SVR_LOAD_NEWS,
+ SVR_LOAD_RAM_SCRIPT,
+ SVR_LOAD_STAMP,
+ SVR_LOAD_UNK_2,
+ SVR_LOAD_CLIENT_SCRIPT,
+ SVR_LOAD_EREADER_TRAINER,
+ SVR_LOAD_MSG,
+ SVR_COPY_STAMP,
+ SVR_COPY_CARD,
+ SVR_COPY_NEWS,
+ SVR_SET_RAM_SCRIPT,
+ SVR_SET_CLIENT_SCRIPT,
+ SVR_COPY_SAVED_CARD,
+ SVR_COPY_SAVED_NEWS,
+ SVR_COPY_SAVED_RAM_SCRIPT,
+ SVR_LOAD_UNK_1,
+ SVR_CHECK_GAME_DATA_NEWS,
+};
+
+// IDs for server messages when ending a script.
+// Given as the parameter to SVR_RETURN, and resolved to text in GetServerResultMessage
+enum {
+ SVR_MSG_NOTHING_SENT,
+ SVR_MSG_RECORD_UPLOADED,
+ SVR_MSG_CARD_SENT,
+ SVR_MSG_NEWS_SENT,
+ SVR_MSG_STAMP_SENT,
+ SVR_MSG_HAS_CARD,
+ SVR_MSG_HAS_STAMP,
+ SVR_MSG_HAS_NEWS,
+ SVR_MSG_NO_ROOM_STAMPS,
+ SVR_MSG_CLIENT_CANCELED,
+ SVR_MSG_CANT_SEND_GIFT_1,
+ SVR_MSG_COMM_ERROR,
+ SVR_MSG_GIFT_SENT_1,
+ SVR_MSG_GIFT_SENT_2,
+ SVR_MSG_CANT_SEND_GIFT_2,
+};
+
+struct MysteryGiftServerCmd
{
u32 instr;
- bool32 flag;
- const void * parameter;
+ u32 parameter;
+ const void * ptr;
};
-struct mevent_srv_common
+struct MysteryGiftServer
{
- u32 unk_00;
+ u32 unused;
u32 param;
- u32 mainseqno;
+ u32 funcId;
u32 cmdidx;
- const struct mevent_cmd * cmdBuffer;
+ const struct MysteryGiftServerCmd * script;
void * recvBuffer;
- struct WonderCard * wonder_card;
- struct WonderNews * wonder_news;
- struct MEventStruct_Unk1442CC * mevent_unk1442cc;
- const void * sendBuffer1;
- u32 sendBuffer1Size;
- const void * sendBuffer2;
- u32 sendBuffer2Size;
- u32 sendWord;
- struct MysteryGiftLink manager;
+ struct WonderCard * card;
+ struct WonderNews * news;
+ struct MysteryGiftLinkGameData * linkGameData;
+ const void * ramScript;
+ u32 ramScriptSize;
+ const void * clientScript;
+ u32 clientScriptSize;
+ u32 stamp;
+ struct MysteryGiftLink link;
};
-void mevent_srv_new_wcard();
-void mevent_srv_init_wnews();
-u32 mevent_srv_common_do_exec(u16 * a0);
+void MysterGiftServer_CreateForCard();
+void MysterGiftServer_CreateForNews();
+u32 MysterGiftServer_Run(u16 * endVal);
#endif //GUARD_MEVENT_SERVER_H
diff --git a/include/mevent_server_helpers.h b/include/mevent_server_helpers.h
index d2f292a0b..77d966447 100644
--- a/include/mevent_server_helpers.h
+++ b/include/mevent_server_helpers.h
@@ -1,13 +1,31 @@
#ifndef GUARD_MEVENT_SERVER_HELPERS_H
#define GUARD_MEVENT_SERVER_HELPERS_H
-#define ME_SEND_BUF_SIZE 0x400
+#define MG_LINK_BUFFER_SIZE 0x400
+
+// Send/receive ids for the Client/Server to make sure
+// they're sending/receiving the same thing
+enum {
+ MG_LINKID_CLIENT_SCRIPT = 16,
+ MG_LINKID_GAME_DATA,
+ MG_LINKID_GAME_STAT,
+ MG_LINKID_RESPONSE,
+ MG_LINKID_READY_END,
+ MG_LINKID_DYNAMIC_MSG,
+ MG_LINKID_CARD,
+ MG_LINKID_NEWS,
+ MG_LINKID_STAMP,
+ MG_LINKID_RAM_SCRIPT,
+ MG_LINKID_EREADER_TRAINER,
+ MG_LINKID_UNK_1,
+ MG_LINKID_UNK_2,
+};
struct MysteryGiftLink
{
- s32 seqno;
- u8 sendPlayerNo;
- u8 recvPlayerNo;
+ s32 state;
+ u8 sendPlayerId;
+ u8 recvPlayerId;
u16 recvIdent;
u16 recvCounter;
u16 recvCRC;
@@ -22,13 +40,6 @@ struct MysteryGiftLink
u32 (*sendFunc)(struct MysteryGiftLink *);
};
-struct send_recv_header
-{
- u16 ident;
- u16 crc;
- u16 size;
-};
-
void MysteryGiftLink_Init(struct MysteryGiftLink *, u32, u32);
void MysteryGiftLink_InitSend(struct MysteryGiftLink * manager, u32 ident, const void * src, u32 size);
bool32 MysteryGiftLink_Recv(struct MysteryGiftLink * manager);
diff --git a/include/mystery_gift.h b/include/mystery_gift.h
index 42c7f47ba..73d3b93ea 100644
--- a/include/mystery_gift.h
+++ b/include/mystery_gift.h
@@ -8,7 +8,7 @@ void CB2_MysteryGiftEReader(void);
void PrintMysteryGiftOrEReaderTopMenu(bool8 isJapanese, bool32 usePickOkCancel);
void MG_DrawCheckerboardPattern(u32 bg);
void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void);
-bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str);
+bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str);
void AddTextPrinterToWindow1(const u8 *src);
void CB2_InitEReader(void);
void CB2_InitMysteryGift(void);
diff --git a/include/wonder_transfer.h b/include/wonder_transfer.h
index 7532d6b3c..398a2b37b 100644
--- a/include/wonder_transfer.h
+++ b/include/wonder_transfer.h
@@ -9,7 +9,7 @@ enum {
NEWS_INPUT_NONE = 0xFF
};
-bool32 WonderCard_Init(struct WonderCard * card, struct MEventBuffer_3430 * r6);
+bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * r6);
bool32 WonderNews_Init(const struct WonderNews * news);
s32 WonderCard_Enter(void);
s32 WonderNews_Enter(void);