Merge pull request #586 from GriffinRichards/sync-mevent
Sync mystery gift
This commit is contained in:
+22
-20
@@ -701,26 +701,28 @@
|
||||
#define FLAG_0x2A4 0x2A4
|
||||
#define FLAG_CAN_USE_ROCKET_HIDEOUT_LIFT 0x2A5
|
||||
#define FLAG_GOT_TEA 0x2A6
|
||||
#define FLAG_GOT_AURORA_TICKET 0x2A7
|
||||
#define FLAG_GOT_MYSTIC_TICKET 0x2A8
|
||||
#define FLAG_0x2A9 0x2A9
|
||||
#define FLAG_0x2AA 0x2AA
|
||||
#define FLAG_0x2AB 0x2AB
|
||||
#define FLAG_0x2AC 0x2AC
|
||||
#define FLAG_0x2AD 0x2AD
|
||||
#define FLAG_0x2AE 0x2AE
|
||||
#define FLAG_0x2AF 0x2AF
|
||||
#define FLAG_0x2B0 0x2B0
|
||||
#define FLAG_0x2B1 0x2B1
|
||||
#define FLAG_0x2B2 0x2B2
|
||||
#define FLAG_0x2B3 0x2B3
|
||||
#define FLAG_0x2B4 0x2B4
|
||||
#define FLAG_0x2B5 0x2B5
|
||||
#define FLAG_0x2B6 0x2B6
|
||||
#define FLAG_0x2B7 0x2B7
|
||||
#define FLAG_0x2B8 0x2B8
|
||||
#define FLAG_0x2B9 0x2B9
|
||||
#define FLAG_0x2BA 0x2BA
|
||||
#define FLAG_RECEIVED_AURORA_TICKET 0x2A7
|
||||
#define FLAG_RECEIVED_MYSTIC_TICKET 0x2A8
|
||||
#define FLAG_RECEIVED_OLD_SEA_MAP 0x2A9
|
||||
#define FLAG_WONDER_CARD_UNUSED_1 0x2AA
|
||||
#define FLAG_WONDER_CARD_UNUSED_2 0x2AB
|
||||
#define FLAG_WONDER_CARD_UNUSED_3 0x2AC
|
||||
#define FLAG_WONDER_CARD_UNUSED_4 0x2AD
|
||||
#define FLAG_WONDER_CARD_UNUSED_5 0x2AE
|
||||
#define FLAG_WONDER_CARD_UNUSED_6 0x2AF
|
||||
#define FLAG_WONDER_CARD_UNUSED_7 0x2B0
|
||||
#define FLAG_WONDER_CARD_UNUSED_8 0x2B1
|
||||
#define FLAG_WONDER_CARD_UNUSED_9 0x2B2
|
||||
#define FLAG_WONDER_CARD_UNUSED_10 0x2B3
|
||||
#define FLAG_WONDER_CARD_UNUSED_11 0x2B4
|
||||
#define FLAG_WONDER_CARD_UNUSED_12 0x2B5
|
||||
#define FLAG_WONDER_CARD_UNUSED_13 0x2B6
|
||||
#define FLAG_WONDER_CARD_UNUSED_14 0x2B7
|
||||
#define FLAG_WONDER_CARD_UNUSED_15 0x2B8
|
||||
#define FLAG_WONDER_CARD_UNUSED_16 0x2B9
|
||||
#define FLAG_WONDER_CARD_UNUSED_17 0x2BA
|
||||
#define NUM_WONDER_CARD_FLAGS (1 + FLAG_WONDER_CARD_UNUSED_17 - FLAG_RECEIVED_AURORA_TICKET)
|
||||
|
||||
#define FLAG_GOT_POWDER_JAR 0x2BB
|
||||
#define FLAG_FOUGHT_MEWTWO 0x2BC
|
||||
#define FLAG_FOUGHT_MOLTRES 0x2BD
|
||||
|
||||
@@ -44,4 +44,12 @@
|
||||
|
||||
#define WONDER_CARD_FLAG_OFFSET 1000
|
||||
|
||||
#define NEWS_REWARD_NONE 0
|
||||
#define NEWS_REWARD_RECV_SMALL 1
|
||||
#define NEWS_REWARD_RECV_BIG 2
|
||||
#define NEWS_REWARD_WAITING 3
|
||||
#define NEWS_REWARD_SENT_SMALL 4
|
||||
#define NEWS_REWARD_SENT_BIG 5
|
||||
#define NEWS_REWARD_AT_MAX 6
|
||||
|
||||
#endif //GUARD_CONSTANTS_MYSTERY_GIFT_H
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
// Bits 12-15 are the same for the player's party.
|
||||
// Used by Quest Log.
|
||||
#define VAR_QUEST_LOG_MON_COUNTS 0x4027
|
||||
#define VAR_MENEWS_JISAN_STEP_COUNTER 0x4028
|
||||
#define VAR_WONDER_NEWS_STEP_COUNTER 0x4028
|
||||
#define VAR_0x4029 0x4029
|
||||
#define VAR_0x402A 0x402A
|
||||
#define VAR_0x402B 0x402B
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ struct EasyChatWordsByLetter
|
||||
u8 *CopyEasyChatWord(u8 *dest, u16 word);
|
||||
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows);
|
||||
bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength);
|
||||
void EC_ResetMEventProfileMaybe(void);
|
||||
void InitQuestionnaireWords(void);
|
||||
void InitEasyChatPhrases(void);
|
||||
void EnableRareWord(u8);
|
||||
bool8 InitEasyChatSelection(void);
|
||||
|
||||
@@ -14,17 +14,20 @@ enum {
|
||||
#define EREADER_XFER_EXE 1
|
||||
#define EREADER_XFER_CHK 2
|
||||
#define EREADER_XFER_SHIFT 0
|
||||
#define EREADER_XFER_MASK 3
|
||||
#define EREADER_XFER_MASK ((EREADER_XFER_EXE | EREADER_XFER_CHK) << EREADER_XFER_SHIFT)
|
||||
|
||||
#define EREADER_CANCEL_TIMEOUT 1
|
||||
#define EREADER_CANCEL_KEY 2
|
||||
#define EREADER_CANCEL_MASK 0xC
|
||||
#define EREADER_CANCEL_SHIFT 2
|
||||
#define EREADER_CANCEL_TIMEOUT_MASK (EREADER_CANCEL_TIMEOUT << EREADER_CANCEL_SHIFT)
|
||||
#define EREADER_CANCEL_KEY_MASK (EREADER_CANCEL_KEY << EREADER_CANCEL_SHIFT)
|
||||
#define EREADER_CANCEL_MASK ((EREADER_CANCEL_TIMEOUT | EREADER_CANCEL_KEY) << EREADER_CANCEL_SHIFT)
|
||||
|
||||
#define EREADER_CHECKSUM_OK 1
|
||||
#define EREADER_CHECKSUM_ERR 2
|
||||
#define EREADER_CHECKSUM_MASK 0x30
|
||||
#define EREADER_CHECKSUM_SHIFT 4
|
||||
#define EREADER_CHECKSUM_OK_MASK (EREADER_CHECKSUM_OK << EREADER_CHECKSUM_SHIFT)
|
||||
#define EREADER_CHECKSUM_MASK ((EREADER_CHECKSUM_OK | EREADER_CHECKSUM_ERR) << EREADER_CHECKSUM_SHIFT)
|
||||
|
||||
void EReaderHelper_SerialCallback(void);
|
||||
void EReaderHelper_Timer3Callback(void);
|
||||
|
||||
@@ -49,8 +49,8 @@ bool8 FlagGet(u16 id);
|
||||
u16 * GetVarPointer(u16 id);
|
||||
bool32 IsMysteryGiftEnabled(void);
|
||||
void ResetSpecialVars(void);
|
||||
void ResetMysteryEventFlags(void);
|
||||
void ResetMysteryEventVars(void);
|
||||
void ClearMysteryGiftFlags(void);
|
||||
void ClearMysteryGiftVars(void);
|
||||
bool32 IsNationalPokedexEnabled(void);
|
||||
void EnableNationalPokedex_RSE(void);
|
||||
void ClearTempFieldEventData(void);
|
||||
|
||||
+4
-4
@@ -627,15 +627,15 @@ struct FameCheckerSaveData
|
||||
|
||||
struct WonderNewsMetadata
|
||||
{
|
||||
u8 unk_0_0:2;
|
||||
u8 unk_0_2:3;
|
||||
u8 unk_0_5:3;
|
||||
u8 newsType:2;
|
||||
u8 sentRewardCounter:3;
|
||||
u8 rewardCounter:3;
|
||||
u8 berry;
|
||||
};
|
||||
|
||||
struct WonderNews
|
||||
{
|
||||
u16 newsId;
|
||||
u16 id;
|
||||
u8 sendType; // SEND_TYPE_*
|
||||
u8 bgType;
|
||||
u8 titleText[WONDER_NEWS_TEXT_LENGTH];
|
||||
|
||||
+12
-6
@@ -85,12 +85,12 @@
|
||||
#define LINKCMD_PARTNER_CANCEL_TRADE 0xEECC
|
||||
#define LINKCMD_NONE 0xEFFF
|
||||
|
||||
#define LINKTYPE_TRADE 0x1111 // trade
|
||||
#define LINKTYPE_0x1122 0x1122 // trade
|
||||
#define LINKTYPE_TRADE 0x1111
|
||||
#define LINKTYPE_TRADE_CONNECTING 0x1122
|
||||
#define LINKTYPE_TRADE_SETUP 0x1133
|
||||
#define LINKTYPE_0x1144 0x1144 // trade
|
||||
#define LINKTYPE_TRADE_DISCONNECTED 0x1144
|
||||
#define LINKTYPE_BATTLE 0x2211
|
||||
#define LINKTYPE_0x2222 0x2222 // unused battle?
|
||||
#define LINKTYPE_UNUSED_BATTLE 0x2222 // Unused, inferred from gap
|
||||
#define LINKTYPE_SINGLE_BATTLE 0x2233
|
||||
#define LINKTYPE_DOUBLE_BATTLE 0x2244
|
||||
#define LINKTYPE_MULTI_BATTLE 0x2255
|
||||
@@ -100,7 +100,12 @@
|
||||
#define LINKTYPE_RECORD_MIX_BEFORE 0x3311
|
||||
#define LINKTYPE_RECORD_MIX_AFTER 0x3322
|
||||
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
|
||||
#define LINKTYPE_BERRY_BLENDER 0x4422
|
||||
#define LINKTYPE_MYSTERY_EVENT 0x5501
|
||||
#define LINKTYPE_EREADER_FRLG 0x5502
|
||||
#define LINKTYPE_EREADER_EM 0x5503
|
||||
#define LINKTYPE_CONTEST_GMODE 0x6601
|
||||
#define LINKTYPE_CONTEST_EMODE 0x6602
|
||||
|
||||
enum {
|
||||
BLOCK_REQ_SIZE_NONE, // Identical to 200
|
||||
@@ -110,8 +115,9 @@ enum {
|
||||
BLOCK_REQ_SIZE_40,
|
||||
};
|
||||
|
||||
#define MASTER_HANDSHAKE 0x8FFF
|
||||
#define SLAVE_HANDSHAKE 0xB9A0
|
||||
#define MASTER_HANDSHAKE 0x8FFF
|
||||
#define SLAVE_HANDSHAKE 0xB9A0
|
||||
#define EREADER_HANDSHAKE 0xCCD0
|
||||
|
||||
#define IsSendCmdComplete() (gSendCmd[0] == 0)
|
||||
|
||||
|
||||
+2
-4
@@ -233,8 +233,6 @@ extern struct RfuGameData gHostRfuGameData;
|
||||
extern u8 gHostRfuUsername[];
|
||||
extern struct RfuManager gRfu;
|
||||
|
||||
void AddTextPrinterToWindow1(const u8 *str);
|
||||
bool32 PrintMysteryGiftMenuMessage(u8 * cmdPtr, const u8 * src);
|
||||
void LinkRfu_FatalError(void);
|
||||
void MG_DrawCheckerboardPattern(void);
|
||||
void Rfu_SetCloseLinkCallback(void);
|
||||
@@ -324,7 +322,7 @@ void RfuSetNormalDisconnectMode(void);
|
||||
void SetUnionRoomChatPlayerData(u32 numPlayers);
|
||||
void ClearRecvCommands(void);
|
||||
|
||||
#include "mevent_server.h"
|
||||
extern const struct mevent_server_cmd gServerScript_ClientCanceledCard[];
|
||||
#include "mystery_gift_server.h"
|
||||
extern const struct MysteryGiftServerCmd gServerScript_ClientCanceledCard[];
|
||||
|
||||
#endif //GUARD_LINK_RFU_H
|
||||
|
||||
+2
-1
@@ -69,7 +69,8 @@ void StartTimer1(void);
|
||||
void SeedRngAndSetTrainerId(void);
|
||||
u16 GetGeneratedTrainerIdLower(void);
|
||||
|
||||
extern const char RomHeaderGameCode[4];
|
||||
#define GAME_CODE_LENGTH 4
|
||||
extern const char RomHeaderGameCode[GAME_CODE_LENGTH];
|
||||
extern const char RomHeaderSoftwareVersion;
|
||||
|
||||
extern u8 gLinkTransferringData;
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#ifndef GUARD_MENEWS_JISAN_H
|
||||
#define GUARD_MENEWS_JISAN_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
void MENewsJisan_SetRandomReward(u32 a0);
|
||||
void MENewsJisanReset(void);
|
||||
void MENewsJisanStepCounter(void);
|
||||
|
||||
#endif //GUARD_MENEWS_JISAN_H
|
||||
@@ -1,108 +0,0 @@
|
||||
#ifndef GUARD_MEVENT_H
|
||||
#define GUARD_MEVENT_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#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
|
||||
|
||||
enum {
|
||||
NEWS_INPUT_A,
|
||||
NEWS_INPUT_B,
|
||||
NEWS_INPUT_SCROLL_UP,
|
||||
NEWS_INPUT_SCROLL_DOWN,
|
||||
NEWS_INPUT_NONE = 0xFF
|
||||
};
|
||||
|
||||
struct MEventClientHeaderStruct
|
||||
{
|
||||
u32 unk_00;
|
||||
u16 unk_04;
|
||||
u32 unk_08;
|
||||
u16 unk_0C;
|
||||
u32 unk_10;
|
||||
u16 id;
|
||||
u16 unk_16[4];
|
||||
struct WonderCardMetadata unk_20;
|
||||
u8 maxDistributionMons;
|
||||
u8 playerName[7];
|
||||
u8 playerTrainerId[4];
|
||||
u16 easyChatProfile[6];
|
||||
u8 gameCode[4];
|
||||
u8 version;
|
||||
};
|
||||
|
||||
struct MEvent_Str_1
|
||||
{
|
||||
u16 status;
|
||||
size_t size;
|
||||
const void *data;
|
||||
};
|
||||
|
||||
struct MEvent_Str_2
|
||||
{
|
||||
u8 fill_00[0x40];
|
||||
};
|
||||
|
||||
struct WonderGraphics
|
||||
{
|
||||
u8 titleTextPal:4;
|
||||
u8 bodyTextPal:4;
|
||||
u8 footerTextPal:4;
|
||||
u8 stampShadowPal: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 WonderNews * GetSavedWonderNews(void);
|
||||
struct WonderCard * GetSavedWonderCard(void);
|
||||
struct WonderCardMetadata * sav1_get_mevent_buffer_2(void);
|
||||
struct WonderNewsMetadata * GetMENewsJisanStructPtr(void);
|
||||
bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct WonderNews * src);
|
||||
bool32 ValidateReceivedWonderNews(void);
|
||||
bool32 ValidateReceivedWonderCard(void);
|
||||
bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src);
|
||||
bool32 OverwriteSavedWonderCardWithReceivedCard(const struct WonderCard * data);
|
||||
void MEvent_WonderCardResetUnk08_6(struct WonderCard * 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 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 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata);
|
||||
bool32 WonderNews_Init(const struct WonderNews * news);
|
||||
s32 WonderCard_Enter(void);
|
||||
s32 WonderNews_Enter(void);
|
||||
void DestroyWonderCard(void);
|
||||
void DestroyWonderNews(void);
|
||||
void WonderCard_Destroy(void);
|
||||
void WonderNews_Destroy(void);
|
||||
s32 WonderCard_Exit(bool32 flag);
|
||||
s32 WonderNews_Exit(bool32 flag);
|
||||
bool32 CheckReceivedGiftFromWonderCard(void);
|
||||
void WonderNews_AddScrollIndicatorArrowPair(void);
|
||||
void WonderNews_RemoveScrollIndicatorArrowPair(void);
|
||||
bool32 WonderNews_Test_Unk_02(void);
|
||||
bool32 WonderCard_Test_Unk_08_6(void);
|
||||
u32 WonderNews_GetInput(u16 input);
|
||||
void InitMEventData(void);
|
||||
u16 MEvent_GetBattleCardCount(u32 command);
|
||||
void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId);
|
||||
u16 *GetMEventProfileECWordsMaybe(void);
|
||||
void MysteryGift_DisableStats(void);
|
||||
bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId);
|
||||
u16 GetWonderCardFlagId(void);
|
||||
|
||||
#endif //GUARD_MEVENT_H
|
||||
@@ -1,129 +0,0 @@
|
||||
#ifndef GUARD_MEVENT_SERVER_H
|
||||
#define GUARD_MEVENT_SERVER_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define ME_SEND_BUF_SIZE 0x400
|
||||
|
||||
struct mevent_srv_sub
|
||||
{
|
||||
s32 seqno;
|
||||
u8 sendPlayerNo;
|
||||
u8 recvPlayerNo;
|
||||
u16 recvIdent;
|
||||
u16 recvCounter;
|
||||
u16 recvCRC;
|
||||
u16 recvSize;
|
||||
u16 sendIdent;
|
||||
u16 sendCounter;
|
||||
u16 sendCRC;
|
||||
u16 sendSize;
|
||||
void *recvBfr;
|
||||
const void *sendBfr;
|
||||
u32 (*recvFunc)(struct mevent_srv_sub *);
|
||||
u32 (*sendFunc)(struct mevent_srv_sub *);
|
||||
};
|
||||
|
||||
struct send_recv_header
|
||||
{
|
||||
u16 ident;
|
||||
u16 crc;
|
||||
u16 size;
|
||||
};
|
||||
|
||||
struct mevent_client_cmd
|
||||
{
|
||||
u32 instr;
|
||||
u32 parameter;
|
||||
};
|
||||
|
||||
// Client commands
|
||||
#define CLI_RETURN(x) {.instr = 1, .parameter = x}
|
||||
#define CLI_RECEIVE(x) {.instr = 2, .parameter = x}
|
||||
#define CLI_WAITSND {.instr = 3, .parameter = 0}
|
||||
#define CLI_JUMPBUF {.instr = 4, .parameter = 0}
|
||||
#define CLI_SNDHEAD {.instr = 8, .parameter = 0}
|
||||
#define CLI_VLDNEWS {.instr = 9, .parameter = 0}
|
||||
#define CLI_RECVSAV {.instr = 10, .parameter = 0}
|
||||
#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}
|
||||
|
||||
struct mevent_client
|
||||
{
|
||||
u32 unk_00;
|
||||
u32 param;
|
||||
u32 mainseqno;
|
||||
u32 flag;
|
||||
u32 cmdidx;
|
||||
void *sendBuffer;
|
||||
void *recvBuffer;
|
||||
struct mevent_client_cmd * cmdBuffer;
|
||||
void *buffer;
|
||||
struct mevent_srv_sub manager;
|
||||
};
|
||||
|
||||
struct mevent_server_cmd
|
||||
{
|
||||
u32 instr;
|
||||
bool32 flag;
|
||||
void *parameter;
|
||||
};
|
||||
|
||||
// Server commands
|
||||
#define SRV_RETURN(x) {.instr = 0, .flag = x}
|
||||
#define SRV_WAITSND {.instr = 1}
|
||||
#define SRV_RECV(x) {.instr = 2, .flag = x}
|
||||
#define SRV_BRANCH(y) {.instr = 3, .parameter = (void *)y}
|
||||
#define SRV_BRANCHIF(x, y) {.instr = 4, .flag = x, .parameter = (void *)y}
|
||||
#define SRV_READ_1442CC {.instr = 5}
|
||||
#define SRV_VALID_1442CC {.instr = 6}
|
||||
#define SRV_CHECK_1442CC_14 {.instr = 7}
|
||||
#define SRV_READWORD {.instr = 8}
|
||||
#define SRV_SEND_CARD {.instr = 13}
|
||||
#define SRV_SEND_NEWS {.instr = 14}
|
||||
#define SRV_BUFFER_SEND {.instr = 15}
|
||||
#define SRV_SEND(x, y) {.instr = 18, .flag = x, .parameter = (void *)y}
|
||||
#define SRV_SENDSTR(x, y) {.instr = 20, .flag = x, .parameter = (void *)y}
|
||||
#define SRV_BUFFER_CARD {.instr = 26}
|
||||
#define SRV_BUFFER_NEWS {.instr = 27}
|
||||
#define SRV_RAM_SCRIPT_IF_VALID {.instr = 28}
|
||||
|
||||
struct mevent_srv_common
|
||||
{
|
||||
u32 unk_00;
|
||||
u32 param;
|
||||
u32 mainseqno;
|
||||
u32 cmdidx;
|
||||
const struct mevent_server_cmd * cmdBuffer;
|
||||
void *recvBuffer;
|
||||
struct WonderCard * card;
|
||||
struct WonderNews * news;
|
||||
struct MEventClientHeaderStruct * mevent_unk1442cc;
|
||||
void *sendBuffer1;
|
||||
u32 sendBuffer1Size;
|
||||
void *sendBuffer2;
|
||||
u32 sendBuffer2Size;
|
||||
u32 sendWord;
|
||||
struct mevent_srv_sub manager;
|
||||
};
|
||||
|
||||
u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr);
|
||||
u32 mevent_srv_sub_send(struct mevent_srv_sub * svr);
|
||||
void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo);
|
||||
void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void *src, u32 size);
|
||||
void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void *dest);
|
||||
|
||||
void mevent_client_do_init(void);
|
||||
u32 mevent_client_do_exec(u16 * a0);
|
||||
void mevent_client_inc_flag(void);
|
||||
void *mevent_client_get_buffer(void);
|
||||
void mevent_client_set_param(u32 a0);
|
||||
void mevent_srv_init_wnews(void);
|
||||
void mevent_srv_new_wcard(void);
|
||||
u32 mevent_srv_common_do_exec(u16 * a0);
|
||||
|
||||
#endif //GUARD_MEVENT_SERVER_H
|
||||
@@ -0,0 +1,98 @@
|
||||
#ifndef GUARD_MYSTERY_GIFT_H
|
||||
#define GUARD_MYSTERY_GIFT_H
|
||||
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "constants/mystery_gift.h"
|
||||
|
||||
#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
|
||||
|
||||
enum {
|
||||
NEWS_INPUT_A,
|
||||
NEWS_INPUT_B,
|
||||
NEWS_INPUT_SCROLL_UP,
|
||||
NEWS_INPUT_SCROLL_DOWN,
|
||||
NEWS_INPUT_NONE = 0xFF
|
||||
};
|
||||
|
||||
struct MysteryGiftLinkGameData
|
||||
{
|
||||
u32 unk_00;
|
||||
u16 unk_04;
|
||||
u32 unk_08;
|
||||
u16 unk_0C;
|
||||
u32 unk_10;
|
||||
u16 flagId;
|
||||
u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
|
||||
struct WonderCardMetadata cardMetadata;
|
||||
u8 maxStamps;
|
||||
u8 playerName[PLAYER_NAME_LENGTH];
|
||||
u8 playerTrainerId[TRAINER_ID_LENGTH];
|
||||
u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||
u8 gameCode[GAME_CODE_LENGTH];
|
||||
u8 version;
|
||||
};
|
||||
|
||||
struct WonderGraphics
|
||||
{
|
||||
u8 titleTextPal:4;
|
||||
u8 bodyTextPal:4;
|
||||
u8 footerTextPal:4;
|
||||
u8 stampShadowPal: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 WonderNews * GetSavedWonderNews(void);
|
||||
struct WonderCard * GetSavedWonderCard(void);
|
||||
struct WonderCardMetadata * GetSavedWonderCardMetadata(void);
|
||||
struct WonderNewsMetadata * GetSavedWonderNewsMetadata(void);
|
||||
bool32 SaveWonderNews(const struct WonderNews * news);
|
||||
bool32 ValidateSavedWonderNews(void);
|
||||
bool32 ValidateSavedWonderCard(void);
|
||||
bool32 IsWonderNewsSameAsSaved(const u8 * news);
|
||||
bool32 SaveWonderCard(const struct WonderCard * card);
|
||||
void DisableWonderCardSending(struct WonderCard * card);
|
||||
bool32 MysteryGift_TrySaveStamp(const u16 * stamp);
|
||||
void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData * data);
|
||||
bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData * data);
|
||||
u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, const void *unused);
|
||||
u32 MysteryGift_CheckStamps(const u16 * stamp, 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);
|
||||
bool32 WonderCard_Init(struct WonderCard * card, struct WonderCardMetadata * metadata);
|
||||
bool32 WonderNews_Init(const struct WonderNews * news);
|
||||
s32 WonderCard_Enter(void);
|
||||
s32 WonderNews_Enter(void);
|
||||
void ClearSavedWonderCardAndRelated(void);
|
||||
void ClearSavedWonderNewsAndRelated(void);
|
||||
void WonderCard_Destroy(void);
|
||||
void WonderNews_Destroy(void);
|
||||
s32 WonderCard_Exit(bool32 flag);
|
||||
s32 WonderNews_Exit(bool32 flag);
|
||||
bool32 IsSavedWonderCardGiftNotReceived(void);
|
||||
void WonderNews_AddScrollIndicatorArrowPair(void);
|
||||
void WonderNews_RemoveScrollIndicatorArrowPair(void);
|
||||
bool32 IsSendingSavedWonderNewsAllowed(void);
|
||||
bool32 IsSendingSavedWonderCardAllowed(void);
|
||||
u32 WonderNews_GetInput(u16 input);
|
||||
void ClearMysteryGift(void);
|
||||
u16 MysteryGift_GetCardStat(u32 stat);
|
||||
void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId);
|
||||
u16 *GetQuestionnaireWordsPtr(void);
|
||||
void MysteryGift_DisableStats(void);
|
||||
bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId);
|
||||
u16 GetWonderCardFlagId(void);
|
||||
|
||||
#endif // GUARD_MYSTERY_GIFT_H
|
||||
@@ -0,0 +1,91 @@
|
||||
#ifndef GUARD_MYSTERY_GIFT_CLIENT_H
|
||||
#define GUARD_MYSTERY_GIFT_CLIENT_H
|
||||
|
||||
#include "mystery_gift_link.h"
|
||||
|
||||
// Return values for client functions called by MysteryGiftClient_Run
|
||||
enum {
|
||||
CLI_RET_INIT,
|
||||
CLI_RET_ACTIVE,
|
||||
CLI_RET_YES_NO,
|
||||
CLI_RET_PRINT_MSG,
|
||||
CLI_RET_ASK_TOSS,
|
||||
CLI_RET_COPY_MSG,
|
||||
CLI_RET_END,
|
||||
};
|
||||
|
||||
// IDs for client script instructions
|
||||
enum {
|
||||
CLI_NONE,
|
||||
CLI_RETURN,
|
||||
CLI_RECV,
|
||||
CLI_SEND_LOADED,
|
||||
CLI_COPY_RECV,
|
||||
CLI_YES_NO,
|
||||
CLI_COPY_RECV_IF_N,
|
||||
CLI_COPY_RECV_IF,
|
||||
CLI_LOAD_GAME_DATA,
|
||||
CLI_SAVE_NEWS,
|
||||
CLI_SAVE_CARD,
|
||||
CLI_PRINT_MSG,
|
||||
CLI_COPY_MSG,
|
||||
CLI_ASK_TOSS,
|
||||
CLI_LOAD_TOSS_RESPONSE,
|
||||
CLI_RUN_MEVENT_SCRIPT,
|
||||
CLI_SAVE_STAMP,
|
||||
CLI_SAVE_RAM_SCRIPT,
|
||||
CLI_RECV_EREADER_TRAINER,
|
||||
CLI_SEND_STAT,
|
||||
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;
|
||||
u32 parameter;
|
||||
};
|
||||
|
||||
struct MysteryGiftClient
|
||||
{
|
||||
u32 unused;
|
||||
u32 param;
|
||||
u32 funcId;
|
||||
u32 funcState;
|
||||
u32 cmdidx;
|
||||
void *sendBuffer;
|
||||
void *recvBuffer;
|
||||
struct MysteryGiftClientCmd * script;
|
||||
void *msg;
|
||||
struct MysteryGiftLink link;
|
||||
};
|
||||
|
||||
void MysteryGiftClient_Create(void);
|
||||
u32 MysteryGiftClient_Run(u16 * endVal);
|
||||
void MysteryGiftClient_AdvanceState(void);
|
||||
void * MysteryGiftClient_GetMsg(void);
|
||||
void MysteryGiftClient_SetParam(u32 value);
|
||||
|
||||
#endif //GUARD_MYSTERY_GIFT_CLIENT_H
|
||||
@@ -0,0 +1,49 @@
|
||||
#ifndef GUARD_MYSTERY_GIFT_LINK_H
|
||||
#define GUARD_MYSTERY_GIFT_LINK_H
|
||||
|
||||
#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 state;
|
||||
u8 sendPlayerId;
|
||||
u8 recvPlayerId;
|
||||
u16 recvIdent;
|
||||
u16 recvCounter;
|
||||
u16 recvCRC;
|
||||
u16 recvSize;
|
||||
u16 sendIdent;
|
||||
u16 sendCounter;
|
||||
u16 sendCRC;
|
||||
u16 sendSize;
|
||||
void * recvBuffer;
|
||||
const void * sendBuffer;
|
||||
u32 (*recvFunc)(struct MysteryGiftLink *);
|
||||
u32 (*sendFunc)(struct MysteryGiftLink *);
|
||||
};
|
||||
|
||||
void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId);
|
||||
void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void * src, u32 size);
|
||||
bool32 MysteryGiftLink_Recv(struct MysteryGiftLink * link);
|
||||
bool32 MysteryGiftLink_Send(struct MysteryGiftLink * link);
|
||||
void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void * dest);
|
||||
|
||||
#endif //GUARD_MYSTERY_GIFT_LINK_H
|
||||
@@ -3,9 +3,11 @@
|
||||
|
||||
extern bool8 gGiftIsFromEReader;
|
||||
|
||||
bool32 PrintMysteryGiftMenuMessage(u8 * cmdPtr, const u8 * src);
|
||||
void AddTextPrinterToWindow1(const u8 *str);
|
||||
void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void);
|
||||
void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32);
|
||||
void c2_mystery_gift(void);
|
||||
void CB2_InitMysteryGift(void);
|
||||
void CB2_MysteryGiftEReader(void);
|
||||
s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str);
|
||||
void MG_DrawTextBorder(u8 windowId);
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
#ifndef GUARD_MYSTERY_GIFT_SERVER_H
|
||||
#define GUARD_MYSTERY_GIFT_SERVER_H
|
||||
|
||||
#include "global.h"
|
||||
#include "mystery_gift_link.h"
|
||||
|
||||
// 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, // In Emerald, this was separated into SVR_CHECK_GAME_DATA_CARD and SVR_CHECK_GAME_DATA_NEWS
|
||||
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,
|
||||
};
|
||||
|
||||
// Create arguments for SVR_LOAD_CLIENT_SCRIPT or SVR_LOAD_MSG
|
||||
// (a script/text size and pointer to send to the client)
|
||||
#define PTR_ARG(pointer) .param = sizeof(pointer), .ptr = pointer
|
||||
|
||||
// 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 param;
|
||||
const void *ptr;
|
||||
};
|
||||
|
||||
struct MysteryGiftServer
|
||||
{
|
||||
u32 unused;
|
||||
u32 param;
|
||||
u32 funcId;
|
||||
u32 cmdidx;
|
||||
const struct MysteryGiftServerCmd * script;
|
||||
void *recvBuffer;
|
||||
struct WonderCard * card;
|
||||
struct WonderNews * news;
|
||||
struct MysteryGiftLinkGameData * linkGameData;
|
||||
const void *ramScript;
|
||||
u32 ramScriptSize;
|
||||
const void *clientScript;
|
||||
u32 clientScriptSize;
|
||||
u32 stamp;
|
||||
struct MysteryGiftLink manager;
|
||||
};
|
||||
|
||||
void MysterGiftServer_CreateForNews(void);
|
||||
void MysterGiftServer_CreateForCard(void);
|
||||
u32 MysterGiftServer_Run(u16 * endVal);
|
||||
|
||||
#endif //GUARD_MYSTERY_GIFT_SERVER_H
|
||||
+1
-1
@@ -1141,7 +1141,7 @@ extern const u8 gText_PeopleBattling[];
|
||||
extern const u8 gText_PeopleInUnionRoom[];
|
||||
extern const u8 gText_PeopleCommunicating[];
|
||||
|
||||
// mevent
|
||||
// mystery_gift
|
||||
extern const u8 gJPText_ReceiveMysteryGiftWithEReader[];
|
||||
extern const u8 gJPText_SelectConnectFromEReaderMenu[];
|
||||
extern const u8 gJPText_SelectConnectWithGBA[];
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef GUARD_WONDER_NEWS_H
|
||||
#define GUARD_WONDER_NEWS_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
enum {
|
||||
WONDER_NEWS_NONE,
|
||||
WONDER_NEWS_RECV_FRIEND,
|
||||
WONDER_NEWS_RECV_WIRELESS,
|
||||
WONDER_NEWS_SENT,
|
||||
};
|
||||
|
||||
void WonderNews_SetReward(u32 newsType);
|
||||
void WonderNews_Reset(void);
|
||||
void WonderNews_IncrementStepCounter(void);
|
||||
|
||||
#endif //GUARD_WONDER_NEWS_H
|
||||
Reference in New Issue
Block a user