Clean up mystery gift sync, document wonder news
This commit is contained in:
@@ -36,6 +36,7 @@
|
|||||||
#include "constants/easy_chat.h"
|
#include "constants/easy_chat.h"
|
||||||
#include "constants/trainer_card.h"
|
#include "constants/trainer_card.h"
|
||||||
#include "constants/help_system.h"
|
#include "constants/help_system.h"
|
||||||
|
#include "constants/mystery_gift.h"
|
||||||
.include "asm/macros.inc"
|
.include "asm/macros.inc"
|
||||||
.include "asm/macros/event.inc"
|
.include "asm/macros/event.inc"
|
||||||
.set FALSE, 0
|
.set FALSE, 0
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
.set LOCALID_WONDER_NEWS_BERRY_MAN, 1
|
.set LOCALID_WONDER_NEWS_BERRY_MAN, 1
|
||||||
|
|
||||||
|
.set REWARD_TYPE, VAR_0x8004
|
||||||
|
.set REWARD_ITEM, VAR_0x8008
|
||||||
|
|
||||||
CeruleanCity_House4_MapScripts::
|
CeruleanCity_House4_MapScripts::
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
@@ -7,62 +10,69 @@ CeruleanCity_House4_EventScript_WonderNewsBerryMan::
|
|||||||
goto_if_questlog EventScript_ReleaseEnd
|
goto_if_questlog EventScript_ReleaseEnd
|
||||||
special QuestLog_CutRecording
|
special QuestLog_CutRecording
|
||||||
lock
|
lock
|
||||||
specialvar VAR_0x8004, GetMENewsJisanItemAndState
|
specialvar REWARD_TYPE, WonderNews_GetRewardInfo
|
||||||
copyvar VAR_0x8008, VAR_RESULT
|
copyvar REWARD_ITEM, VAR_RESULT
|
||||||
goto_if_eq VAR_0x8004, 0, CeruleanCity_House4_EventScript_NoNews
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_NONE, CeruleanCity_House4_EventScript_NoNews
|
||||||
goto_if_eq VAR_0x8004, 1, CeruleanCity_House4_EventScript_News1
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_RECV_SMALL, CeruleanCity_House4_EventScript_Reward_RecvSmall
|
||||||
goto_if_eq VAR_0x8004, 2, CeruleanCity_House4_EventScript_News2
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_RECV_BIG, CeruleanCity_House4_EventScript_Reward_RecvBig
|
||||||
goto_if_eq VAR_0x8004, 3, CeruleanCity_House4_EventScript_NewsNotSpread
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_WAITING, CeruleanCity_House4_EventScript_Waiting
|
||||||
goto_if_eq VAR_0x8004, 4, CeruleanCity_House4_EventScript_NewsSpread1
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_SENT_SMALL, CeruleanCity_House4_EventScript_Reward_SentSmall
|
||||||
goto_if_eq VAR_0x8004, 5, CeruleanCity_House4_EventScript_NewsSpread2
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_SENT_BIG, CeruleanCity_House4_EventScript_Reward_SentBig
|
||||||
goto_if_eq VAR_0x8004, 6, CeruleanCity_House4_EventScript_NewsDone
|
goto_if_eq REWARD_TYPE, NEWS_REWARD_AT_MAX, CeruleanCity_House4_EventScript_AtMax
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ Mystery Gift is not enabled, or the player has no saved Wonder News
|
||||||
CeruleanCity_House4_EventScript_NoNews::
|
CeruleanCity_House4_EventScript_NoNews::
|
||||||
msgbox CeruleanCity_House4_Text_NothingEntertaining
|
msgbox CeruleanCity_House4_Text_NothingEntertaining
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
CeruleanCity_House4_EventScript_News1::
|
@ Small reward for receiving Wonder News from friend
|
||||||
|
CeruleanCity_House4_EventScript_Reward_RecvSmall::
|
||||||
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
||||||
msgbox CeruleanCity_House4_Text_NewNewsInformativeHaveThis
|
msgbox CeruleanCity_House4_Text_NewNewsInformativeHaveThis
|
||||||
giveitem VAR_0x8008
|
giveitem REWARD_ITEM
|
||||||
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
CeruleanCity_House4_EventScript_News2::
|
@ Big reward for receiving Wonder News from non-friend source
|
||||||
|
CeruleanCity_House4_EventScript_Reward_RecvBig::
|
||||||
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
||||||
msgbox CeruleanCity_House4_Text_IncredibleNewsHaveBerries
|
msgbox CeruleanCity_House4_Text_IncredibleNewsHaveBerries
|
||||||
giveitem VAR_0x8008, 4
|
giveitem REWARD_ITEM, 4
|
||||||
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
CeruleanCity_House4_EventScript_NewsNotSpread::
|
@ Player has not recently sent Wonder News
|
||||||
|
CeruleanCity_House4_EventScript_Waiting::
|
||||||
applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer
|
applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer
|
||||||
waitmovement 0
|
waitmovement 0
|
||||||
msgbox CeruleanCity_House4_Text_WishCouldShareNewsWithOthers
|
msgbox CeruleanCity_House4_Text_WishCouldShareNewsWithOthers
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
CeruleanCity_House4_EventScript_NewsSpread1::
|
@ Small reward for sending Wonder News every 1-3 times
|
||||||
|
CeruleanCity_House4_EventScript_Reward_SentSmall::
|
||||||
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
||||||
msgbox CeruleanCity_House4_Text_ThanksForSpreadingNewsTakeThis
|
msgbox CeruleanCity_House4_Text_ThanksForSpreadingNewsTakeThis
|
||||||
giveitem VAR_0x8008
|
giveitem REWARD_ITEM
|
||||||
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
CeruleanCity_House4_EventScript_NewsSpread2::
|
@ Big reward for sending Wonder News every 4th time
|
||||||
|
CeruleanCity_House4_EventScript_Reward_SentBig::
|
||||||
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
call CeruleanCity_House4_EventScript_MovementReactionToNews
|
||||||
msgbox CeruleanCity_House4_Text_MagnificentNewsSpreadHaveBerries
|
msgbox CeruleanCity_House4_Text_MagnificentNewsSpreadHaveBerries
|
||||||
giveitem VAR_0x8008, 4
|
giveitem REWARD_ITEM, 4
|
||||||
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
CeruleanCity_House4_EventScript_NewsDone::
|
@ Player has hit reward limit and must wait to receive new rewards
|
||||||
|
CeruleanCity_House4_EventScript_AtMax::
|
||||||
applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer
|
applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer
|
||||||
waitmovement 0
|
waitmovement 0
|
||||||
msgbox CeruleanCity_House4_Text_EnjoyingMyselfWithAllSortsOfNews
|
msgbox CeruleanCity_House4_Text_EnjoyingMyselfWithAllSortsOfNews
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
MysteryEventScript_StampCard::
|
MysteryEventScript_StampCard::
|
||||||
setvaddress MysteryEventScript_StampCard
|
setvaddress MysteryEventScript_StampCard
|
||||||
setorcopyvar VAR_RESULT, 1
|
setorcopyvar VAR_RESULT, 1
|
||||||
specialvar VAR_0x8008, BattleCardAction
|
specialvar VAR_0x8008, GetMysteryGiftCardStat
|
||||||
setorcopyvar VAR_RESULT, 0
|
setorcopyvar VAR_RESULT, 0
|
||||||
specialvar VAR_0x8009, BattleCardAction
|
specialvar VAR_0x8009, GetMysteryGiftCardStat
|
||||||
subvar VAR_0x8008, VAR_0x8009
|
subvar VAR_0x8008, VAR_0x8009
|
||||||
buffernumberstring STR_VAR_1, VAR_0x8008
|
buffernumberstring STR_VAR_1, VAR_0x8008
|
||||||
lock
|
lock
|
||||||
@@ -162,7 +162,7 @@ MysteryEventScript_BattleCard::
|
|||||||
setvaddress MysteryEventScript_BattleCard
|
setvaddress MysteryEventScript_BattleCard
|
||||||
vgoto_if_set FLAG_MYSTERY_GIFT_DONE, MysteryEventScript_BattleCardInfo
|
vgoto_if_set FLAG_MYSTERY_GIFT_DONE, MysteryEventScript_BattleCardInfo
|
||||||
setorcopyvar VAR_RESULT, 2
|
setorcopyvar VAR_RESULT, 2
|
||||||
specialvar VAR_0x8008, BattleCardAction
|
specialvar VAR_0x8008, GetMysteryGiftCardStat
|
||||||
vgoto_if_ne VAR_0x8008, 3, MysteryEventScript_BattleCardInfo
|
vgoto_if_ne VAR_0x8008, 3, MysteryEventScript_BattleCardInfo
|
||||||
lock
|
lock
|
||||||
faceplayer
|
faceplayer
|
||||||
|
|||||||
+2
-2
@@ -398,10 +398,10 @@ gSpecials::
|
|||||||
def_special BufferUnionRoomPlayerName
|
def_special BufferUnionRoomPlayerName
|
||||||
def_special QuestLog_StartRecordingInputsAfterDeferredEvent
|
def_special QuestLog_StartRecordingInputsAfterDeferredEvent
|
||||||
def_special GetMartClerkObjectId
|
def_special GetMartClerkObjectId
|
||||||
def_special BattleCardAction
|
def_special GetMysteryGiftCardStat
|
||||||
def_special GetQuestLogState
|
def_special GetQuestLogState
|
||||||
def_special QuestLog_CutRecording
|
def_special QuestLog_CutRecording
|
||||||
def_special GetMENewsJisanItemAndState
|
def_special WonderNews_GetRewardInfo
|
||||||
def_special GetPCBoxToSendMon
|
def_special GetPCBoxToSendMon
|
||||||
def_special OpenMuseumFossilPic
|
def_special OpenMuseumFossilPic
|
||||||
def_special CloseMuseumFossilPic
|
def_special CloseMuseumFossilPic
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 141 B After Width: | Height: | Size: 141 B |
@@ -44,4 +44,12 @@
|
|||||||
|
|
||||||
#define WONDER_CARD_FLAG_OFFSET 1000
|
#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
|
#endif //GUARD_CONSTANTS_MYSTERY_GIFT_H
|
||||||
|
|||||||
+2
-2
@@ -628,8 +628,8 @@ struct FameCheckerSaveData
|
|||||||
struct WonderNewsMetadata
|
struct WonderNewsMetadata
|
||||||
{
|
{
|
||||||
u8 newsType:2;
|
u8 newsType:2;
|
||||||
u8 unk_0_2:3;
|
u8 sentRewardCounter:3;
|
||||||
u8 unk_0_5:3;
|
u8 rewardCounter:3;
|
||||||
u8 berry;
|
u8 berry;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
#define GUARD_MYSTERY_GIFT_LINK_H
|
#define GUARD_MYSTERY_GIFT_LINK_H
|
||||||
|
|
||||||
#define MG_LINK_BUFFER_SIZE 0x400
|
#define MG_LINK_BUFFER_SIZE 0x400
|
||||||
#define ME_SEND_BUF_SIZE MG_LINK_BUFFER_SIZE
|
|
||||||
|
|
||||||
// Send/receive ids for the Client/Server to make sure
|
// Send/receive ids for the Client/Server to make sure
|
||||||
// they're sending/receiving the same thing
|
// they're sending/receiving the same thing
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ enum {
|
|||||||
|
|
||||||
// Create arguments for SVR_LOAD_CLIENT_SCRIPT or SVR_LOAD_MSG
|
// Create arguments for SVR_LOAD_CLIENT_SCRIPT or SVR_LOAD_MSG
|
||||||
// (a script/text size and pointer to send to the client)
|
// (a script/text size and pointer to send to the client)
|
||||||
#define PTR_ARG(pointer) .flag = sizeof(pointer), .parameter = pointer
|
#define PTR_ARG(pointer) .param = sizeof(pointer), .ptr = pointer
|
||||||
|
|
||||||
// IDs for server messages when ending a script.
|
// IDs for server messages when ending a script.
|
||||||
// Given as the parameter to SVR_RETURN, and resolved to text in GetServerResultMessage
|
// Given as the parameter to SVR_RETURN, and resolved to text in GetServerResultMessage
|
||||||
@@ -74,8 +74,8 @@ enum {
|
|||||||
struct MysteryGiftServerCmd
|
struct MysteryGiftServerCmd
|
||||||
{
|
{
|
||||||
u32 instr;
|
u32 instr;
|
||||||
bool32 flag;
|
bool32 param;
|
||||||
const void *parameter;
|
const void *ptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MysteryGiftServer
|
struct MysteryGiftServer
|
||||||
|
|||||||
+1
-1
@@ -476,7 +476,7 @@ void InitQuestionnaireWords(void)
|
|||||||
{
|
{
|
||||||
s32 i;
|
s32 i;
|
||||||
u16 *ptr = GetQuestionnaireWordsPtr();
|
u16 *ptr = GetQuestionnaireWordsPtr();
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
|
||||||
ptr[i] = EC_WORD_UNDEFINED;
|
ptr[i] = EC_WORD_UNDEFINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-11
@@ -1950,20 +1950,20 @@ void QuestLog_TryRecordDepartedLocation(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 BattleCardAction(void)
|
u16 GetMysteryGiftCardStat(void)
|
||||||
{
|
{
|
||||||
switch (gSpecialVar_Result)
|
switch (gSpecialVar_Result)
|
||||||
{
|
{
|
||||||
case 0:
|
case GET_NUM_STAMPS:
|
||||||
return MysteryGift_GetCardStat(3);
|
return MysteryGift_GetCardStat(CARD_STAT_NUM_STAMPS);
|
||||||
case 1:
|
case GET_MAX_STAMPS:
|
||||||
return MysteryGift_GetCardStat(4);
|
return MysteryGift_GetCardStat(CARD_STAT_MAX_STAMPS);
|
||||||
case 2:
|
case GET_CARD_BATTLES_WON:
|
||||||
return MysteryGift_GetCardStat(0);
|
return MysteryGift_GetCardStat(CARD_STAT_BATTLES_WON);
|
||||||
case 3:
|
case GET_CARD_BATTLES_LOST:
|
||||||
return MysteryGift_GetCardStat(1);
|
return MysteryGift_GetCardStat(CARD_STAT_BATTLES_LOST);
|
||||||
case 4:
|
case GET_CARD_NUM_TRADES:
|
||||||
return MysteryGift_GetCardStat(2);
|
return MysteryGift_GetCardStat(CARD_STAT_NUM_TRADES);
|
||||||
default:
|
default:
|
||||||
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
|
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ static void MysteryGiftClient_InitSendWord(struct MysteryGiftClient * client, u3
|
|||||||
|
|
||||||
static u32 Client_Init(struct MysteryGiftClient * client)
|
static u32 Client_Init(struct MysteryGiftClient * client)
|
||||||
{
|
{
|
||||||
// init
|
|
||||||
memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE);
|
memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE);
|
||||||
client->cmdidx = 0;
|
client->cmdidx = 0;
|
||||||
client->funcId = FUNC_RUN;
|
client->funcId = FUNC_RUN;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const vo
|
|||||||
if (size != 0)
|
if (size != 0)
|
||||||
link->sendSize = size;
|
link->sendSize = size;
|
||||||
else
|
else
|
||||||
link->sendSize = ME_SEND_BUF_SIZE;
|
link->sendSize = MG_LINK_BUFFER_SIZE;
|
||||||
link->sendBuffer = src;
|
link->sendBuffer = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ static bool32 MGL_Receive(struct MysteryGiftLink * link)
|
|||||||
MGL_ReceiveBlock(link->recvPlayerId, &header, sizeof(header));
|
MGL_ReceiveBlock(link->recvPlayerId, &header, sizeof(header));
|
||||||
link->recvSize = header.size;
|
link->recvSize = header.size;
|
||||||
link->recvCRC = header.crc;
|
link->recvCRC = header.crc;
|
||||||
if (link->recvSize > ME_SEND_BUF_SIZE)
|
if (link->recvSize > MG_LINK_BUFFER_SIZE)
|
||||||
{
|
{
|
||||||
LinkRfu_FatalError();
|
LinkRfu_FatalError();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -167,7 +167,7 @@ static bool32 MGL_Send(struct MysteryGiftLink * link)
|
|||||||
link->sendCRC = header.crc;
|
link->sendCRC = header.crc;
|
||||||
link->sendCounter = 0;
|
link->sendCounter = 0;
|
||||||
SendBlock(0, &header, sizeof(header));
|
SendBlock(0, &header, sizeof(header));
|
||||||
++link->state;
|
link->state++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ static void CreateMysteryGiftTask(void);
|
|||||||
static void Task_MysteryGift(u8 taskId);
|
static void Task_MysteryGift(u8 taskId);
|
||||||
extern void CreateEReaderTask(void);
|
extern void CreateEReaderTask(void);
|
||||||
|
|
||||||
static const u16 sTextboxBorder_Pal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal");
|
static const u16 sTextboxBorder_Pal[] = INCBIN_U16("graphics/interface/mystery_gift_textbox_border.gbapal");
|
||||||
static const u32 sTextboxBorder_Gfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz");
|
static const u32 sTextboxBorder_Gfx[] = INCBIN_U32("graphics/interface/mystery_gift_textbox_border.4bpp.lz");
|
||||||
|
|
||||||
struct MysteryGiftTaskData
|
struct MysteryGiftTaskData
|
||||||
{
|
{
|
||||||
@@ -344,7 +344,7 @@ static const u8 *const sUnusedMenuTexts[] = {
|
|||||||
|
|
||||||
ALIGNED(4) static const u8 sTextColors_TopMenu[3] = { 0, 1, 2 };
|
ALIGNED(4) static const u8 sTextColors_TopMenu[3] = { 0, 1, 2 };
|
||||||
ALIGNED(4) static const u8 sTextColors_TopMenu_Copy[3] = { 0, 1, 2 };
|
ALIGNED(4) static const u8 sTextColors_TopMenu_Copy[3] = { 0, 1, 2 };
|
||||||
ALIGNED(4) static const u8 sMG_Ereader_TextColor_2[3] = { 1, 2, 3 };
|
ALIGNED(4) static const u8 sMG_Ereader_TextColor_2[3] = { 1, 2, 3 };
|
||||||
|
|
||||||
static const u8 sText_Test[] = _("テスト");
|
static const u8 sText_Test[] = _("テスト");
|
||||||
static const u8 sText_EonTicket[] = _("むげんのチケット");
|
static const u8 sText_EonTicket[] = _("むげんのチケット");
|
||||||
|
|||||||
@@ -153,8 +153,8 @@ static const struct MysteryGiftServerCmd sServerScript_TossPrompt[] = {
|
|||||||
{SVR_SEND},
|
{SVR_SEND},
|
||||||
{SVR_RECV, MG_LINKID_RESPONSE},
|
{SVR_RECV, MG_LINKID_RESPONSE},
|
||||||
{SVR_READ_RESPONSE},
|
{SVR_READ_RESPONSE},
|
||||||
{SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one
|
{SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one
|
||||||
{SVR_GOTO, .parameter = gServerScript_ClientCanceledCard} // Kept old card, cancel new one
|
{SVR_GOTO, .ptr = gServerScript_ClientCanceledCard} // Kept old card, cancel new one
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct MysteryGiftServerCmd sServerScript_HasCard[] = {
|
static const struct MysteryGiftServerCmd sServerScript_HasCard[] = {
|
||||||
@@ -179,7 +179,7 @@ const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[] = {
|
|||||||
{SVR_COPY_GAME_DATA},
|
{SVR_COPY_GAME_DATA},
|
||||||
{SVR_CHECK_GAME_DATA},
|
{SVR_CHECK_GAME_DATA},
|
||||||
{SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend},
|
{SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend},
|
||||||
{SVR_GOTO, .parameter = sServerScript_SendNews},
|
{SVR_GOTO, .ptr = sServerScript_SendNews},
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = {
|
const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = {
|
||||||
@@ -194,5 +194,5 @@ const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = {
|
|||||||
{SVR_CHECK_EXISTING_CARD},
|
{SVR_CHECK_EXISTING_CARD},
|
||||||
{SVR_GOTO_IF_EQ, HAS_DIFF_CARD, sServerScript_TossPrompt},
|
{SVR_GOTO_IF_EQ, HAS_DIFF_CARD, sServerScript_TossPrompt},
|
||||||
{SVR_GOTO_IF_EQ, HAS_NO_CARD, sServerScript_SendCard},
|
{SVR_GOTO_IF_EQ, HAS_NO_CARD, sServerScript_SendCard},
|
||||||
{SVR_GOTO, .parameter = sServerScript_HasCard} // HAS_SAME_CARD
|
{SVR_GOTO, .ptr = sServerScript_HasCard} // HAS_SAME_CARD
|
||||||
};
|
};
|
||||||
|
|||||||
+74
-61
@@ -4,6 +4,24 @@
|
|||||||
#include "mystery_gift.h"
|
#include "mystery_gift.h"
|
||||||
#include "mystery_gift_server.h"
|
#include "mystery_gift_server.h"
|
||||||
|
|
||||||
|
// Assert statements use the original GF names, which are defined below.
|
||||||
|
// Note that their name "flag" is especially misleading,
|
||||||
|
// as it's not a boolean (for example it can contain a size argument).
|
||||||
|
// 'parameter' is shortened to param explicitly to avoid a collision with
|
||||||
|
// the original name for a different field.
|
||||||
|
#define mainseqno funcId
|
||||||
|
#define func_tbl sFuncTable
|
||||||
|
#define parameter ptr
|
||||||
|
#define flag param
|
||||||
|
#define ME_SEND_BUF_SIZE MG_LINK_BUFFER_SIZE
|
||||||
|
#define FILE ABSPATH("mevent_server.c")
|
||||||
|
|
||||||
|
#define ASSERT_PTR_EMPTY(lineNum) AGB_ASSERT_EX(cmd->parameter == NULL, FILE, (lineNum));
|
||||||
|
#define ASSERT_PARAM_EMPTY(lineNum) AGB_ASSERT_EX(cmd->flag == FALSE, FILE, (lineNum));
|
||||||
|
#define ASSERT_PTR_PARAM_EMPTY(lineNum) AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, FILE, (lineNum));
|
||||||
|
#define ASSERT_VALID_FUNC(lineNum) AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), FILE, (lineNum));
|
||||||
|
#define ASSERT_SIZE_OK(lineNum) AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, FILE, (lineNum));
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
FUNC_INIT,
|
FUNC_INIT,
|
||||||
FUNC_DONE,
|
FUNC_DONE,
|
||||||
@@ -54,7 +72,7 @@ static void MysteryGiftServer_Init(struct MysteryGiftServer * svr, const void *s
|
|||||||
svr->funcId = FUNC_INIT;
|
svr->funcId = FUNC_INIT;
|
||||||
svr->card = AllocZeroed(sizeof(*svr->card));
|
svr->card = AllocZeroed(sizeof(*svr->card));
|
||||||
svr->news = AllocZeroed(sizeof(*svr->news));
|
svr->news = AllocZeroed(sizeof(*svr->news));
|
||||||
svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
|
svr->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE);
|
||||||
svr->linkGameData = AllocZeroed(sizeof(*svr->linkGameData));
|
svr->linkGameData = AllocZeroed(sizeof(*svr->linkGameData));
|
||||||
svr->script = script;
|
svr->script = script;
|
||||||
svr->cmdidx = 0;
|
svr->cmdidx = 0;
|
||||||
@@ -71,7 +89,7 @@ static void MysteryGiftServer_Free(struct MysteryGiftServer * svr)
|
|||||||
|
|
||||||
static void MysteryGiftServer_InitSend(struct MysteryGiftServer * svr, u32 ident, const void *src, u32 size)
|
static void MysteryGiftServer_InitSend(struct MysteryGiftServer * svr, u32 ident, const void *src, u32 size)
|
||||||
{
|
{
|
||||||
AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257);
|
ASSERT_SIZE_OK(257);
|
||||||
MysteryGiftLink_InitSend(&svr->manager, ident, src, size);
|
MysteryGiftLink_InitSend(&svr->manager, ident, src, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,136 +148,136 @@ static u32 Server_Run(struct MysteryGiftServer * svr)
|
|||||||
switch (cmd->instr)
|
switch (cmd->instr)
|
||||||
{
|
{
|
||||||
case SVR_RETURN:
|
case SVR_RETURN:
|
||||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 354);
|
ASSERT_PTR_EMPTY(354);
|
||||||
svr->funcId = FUNC_DONE;
|
svr->funcId = FUNC_DONE;
|
||||||
svr->param = cmd->flag; // Set for endVal in MysteryGiftServer_Run
|
svr->param = cmd->param; // Set for endVal in MysteryGiftServer_Run
|
||||||
break;
|
break;
|
||||||
case SVR_SEND:
|
case SVR_SEND:
|
||||||
svr->funcId = FUNC_SEND;
|
svr->funcId = FUNC_SEND;
|
||||||
break;
|
break;
|
||||||
case SVR_RECV:
|
case SVR_RECV:
|
||||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364);
|
ASSERT_PTR_EMPTY(364);
|
||||||
MysteryGiftLink_InitRecv(&svr->manager, cmd->flag, svr->recvBuffer);
|
MysteryGiftLink_InitRecv(&svr->manager, cmd->param, svr->recvBuffer);
|
||||||
svr->funcId = FUNC_RECV;
|
svr->funcId = FUNC_RECV;
|
||||||
break;
|
break;
|
||||||
case SVR_GOTO:
|
case SVR_GOTO:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 370);
|
ASSERT_PARAM_EMPTY(370);
|
||||||
svr->cmdidx = 0;
|
svr->cmdidx = 0;
|
||||||
svr->script = cmd->parameter;
|
svr->script = cmd->ptr;
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_GAME_DATA:
|
case SVR_COPY_GAME_DATA:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376);
|
ASSERT_PARAM_EMPTY(376);
|
||||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377);
|
ASSERT_PTR_EMPTY(377);
|
||||||
memcpy(svr->linkGameData, svr->recvBuffer, sizeof(*svr->linkGameData));
|
memcpy(svr->linkGameData, svr->recvBuffer, sizeof(*svr->linkGameData));
|
||||||
break;
|
break;
|
||||||
case SVR_CHECK_GAME_DATA:
|
case SVR_CHECK_GAME_DATA:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382);
|
ASSERT_PARAM_EMPTY(382);
|
||||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383);
|
ASSERT_PTR_EMPTY(383);
|
||||||
svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData);
|
svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData);
|
||||||
break;
|
break;
|
||||||
case SVR_GOTO_IF_EQ:
|
case SVR_GOTO_IF_EQ:
|
||||||
if (svr->param == cmd->flag)
|
if (svr->param == cmd->param)
|
||||||
{
|
{
|
||||||
svr->cmdidx = 0;
|
svr->cmdidx = 0;
|
||||||
svr->script = cmd->parameter;
|
svr->script = cmd->ptr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SVR_CHECK_EXISTING_CARD:
|
case SVR_CHECK_EXISTING_CARD:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396);
|
ASSERT_PARAM_EMPTY(396);
|
||||||
ptr = MysteryGiftServer_GetSendData(cmd->parameter, svr->card);
|
ptr = MysteryGiftServer_GetSendData(cmd->ptr, svr->card);
|
||||||
svr->param = MysteryGift_CompareCardFlags(ptr, svr->linkGameData, ptr);
|
svr->param = MysteryGift_CompareCardFlags(ptr, svr->linkGameData, ptr);
|
||||||
break;
|
break;
|
||||||
case SVR_READ_RESPONSE:
|
case SVR_READ_RESPONSE:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402);
|
ASSERT_PARAM_EMPTY(402);
|
||||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 403);
|
ASSERT_PTR_EMPTY(403);
|
||||||
svr->param = *(u32 *)svr->recvBuffer;
|
svr->param = *(u32 *)svr->recvBuffer;
|
||||||
break;
|
break;
|
||||||
case SVR_CHECK_EXISTING_STAMPS:
|
case SVR_CHECK_EXISTING_STAMPS:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408);
|
ASSERT_PARAM_EMPTY(408);
|
||||||
ptr = MysteryGiftServer_GetSendData(cmd->parameter, &svr->stamp);
|
ptr = MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp);
|
||||||
svr->param = MysteryGift_CheckStamps(ptr, svr->linkGameData, ptr);
|
svr->param = MysteryGift_CheckStamps(ptr, svr->linkGameData, ptr);
|
||||||
break;
|
break;
|
||||||
case SVR_GET_CARD_STAT:
|
case SVR_GET_CARD_STAT:
|
||||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415);
|
ASSERT_PTR_EMPTY(415);
|
||||||
svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->flag);
|
svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->param);
|
||||||
break;
|
break;
|
||||||
case SVR_CHECK_QUESTIONNAIRE:
|
case SVR_CHECK_QUESTIONNAIRE:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420);
|
ASSERT_PARAM_EMPTY(420);
|
||||||
svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->parameter);
|
svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->ptr);
|
||||||
break;
|
break;
|
||||||
case SVR_COMPARE:
|
case SVR_COMPARE:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426);
|
ASSERT_PARAM_EMPTY(426);
|
||||||
svr->param = MysteryGiftServer_Compare(cmd->parameter, *(void **)svr->recvBuffer);
|
svr->param = MysteryGiftServer_Compare(cmd->ptr, *(void **)svr->recvBuffer);
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_NEWS:
|
case SVR_LOAD_NEWS:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432);
|
ASSERT_PARAM_EMPTY(432);
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->parameter, svr->news), sizeof(struct WonderNews));
|
MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->ptr, svr->news), sizeof(struct WonderNews));
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_CARD:
|
case SVR_LOAD_CARD:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438);
|
ASSERT_PARAM_EMPTY(438);
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->parameter, svr->card), sizeof(struct WonderCard));
|
MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->ptr, svr->card), sizeof(struct WonderCard));
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_STAMP:
|
case SVR_LOAD_STAMP:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444);
|
ASSERT_PARAM_EMPTY(444);
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->parameter, &svr->stamp), sizeof(svr->stamp));
|
MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp), sizeof(svr->stamp));
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_RAM_SCRIPT:
|
case SVR_LOAD_RAM_SCRIPT:
|
||||||
if (cmd->parameter == NULL)
|
if (cmd->ptr == NULL)
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, svr->ramScript, svr->ramScriptSize);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, svr->ramScript, svr->ramScriptSize);
|
||||||
else
|
else
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->parameter, cmd->flag);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->ptr, cmd->param);
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_CLIENT_SCRIPT:
|
case SVR_LOAD_CLIENT_SCRIPT:
|
||||||
if (cmd->parameter == NULL)
|
if (cmd->ptr == NULL)
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, svr->clientScript, svr->clientScriptSize);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, svr->clientScript, svr->clientScriptSize);
|
||||||
else
|
else
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->parameter, cmd->flag);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->ptr, cmd->param);
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_EREADER_TRAINER:
|
case SVR_LOAD_EREADER_TRAINER:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 466);
|
ASSERT_PARAM_EMPTY(466);
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->parameter, 188);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->ptr, sizeof(struct BattleTowerEReaderTrainer));
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_MSG:
|
case SVR_LOAD_MSG:
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->parameter, cmd->flag);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->ptr, cmd->param);
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_UNK_2:
|
case SVR_LOAD_UNK_2:
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->parameter, cmd->flag);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->ptr, cmd->param);
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_CARD:
|
case SVR_COPY_CARD:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 481);
|
ASSERT_PARAM_EMPTY(481);
|
||||||
memcpy(svr->card, cmd->parameter, sizeof(*svr->card));
|
memcpy(svr->card, cmd->ptr, sizeof(*svr->card));
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_NEWS:
|
case SVR_COPY_NEWS:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 486);
|
ASSERT_PARAM_EMPTY(486);
|
||||||
memcpy(svr->news, cmd->parameter, sizeof(*svr->news));
|
memcpy(svr->news, cmd->ptr, sizeof(*svr->news));
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_STAMP:
|
case SVR_COPY_STAMP:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 491);
|
ASSERT_PARAM_EMPTY(491);
|
||||||
svr->stamp = *(u32 *)cmd->parameter;
|
svr->stamp = *(u32 *)cmd->ptr;
|
||||||
break;
|
break;
|
||||||
case SVR_SET_RAM_SCRIPT:
|
case SVR_SET_RAM_SCRIPT:
|
||||||
svr->ramScript = cmd->parameter;
|
svr->ramScript = cmd->ptr;
|
||||||
svr->ramScriptSize = cmd->flag;
|
svr->ramScriptSize = cmd->param;
|
||||||
break;
|
break;
|
||||||
case SVR_SET_CLIENT_SCRIPT:
|
case SVR_SET_CLIENT_SCRIPT:
|
||||||
svr->clientScript = cmd->parameter;
|
svr->clientScript = cmd->ptr;
|
||||||
svr->clientScriptSize = cmd->flag;
|
svr->clientScriptSize = cmd->param;
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_SAVED_CARD:
|
case SVR_COPY_SAVED_CARD:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506);
|
ASSERT_PTR_PARAM_EMPTY(506);
|
||||||
memcpy(svr->card, GetSavedWonderCard(), sizeof(*svr->card));
|
memcpy(svr->card, GetSavedWonderCard(), sizeof(*svr->card));
|
||||||
DisableWonderCardSending(svr->card);
|
DisableWonderCardSending(svr->card);
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_SAVED_NEWS:
|
case SVR_COPY_SAVED_NEWS:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512);
|
ASSERT_PTR_PARAM_EMPTY(512);
|
||||||
memcpy(svr->news, GetSavedWonderNews(), sizeof(*svr->news));
|
memcpy(svr->news, GetSavedWonderNews(), sizeof(*svr->news));
|
||||||
break;
|
break;
|
||||||
case SVR_COPY_SAVED_RAM_SCRIPT:
|
case SVR_COPY_SAVED_RAM_SCRIPT:
|
||||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 517);
|
ASSERT_PTR_PARAM_EMPTY(517);
|
||||||
svr->ramScript = GetSavedRamScriptIfValid();
|
svr->ramScript = GetSavedRamScriptIfValid();
|
||||||
break;
|
break;
|
||||||
case SVR_LOAD_UNK_1:
|
case SVR_LOAD_UNK_1:
|
||||||
MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->parameter, cmd->flag);
|
MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->ptr, cmd->param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,14 +294,9 @@ static u32 (*const sFuncTable[])(struct MysteryGiftServer *) = {
|
|||||||
|
|
||||||
static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer * svr)
|
static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer * svr)
|
||||||
{
|
{
|
||||||
// Original GF names
|
|
||||||
#define mainseqno funcId
|
|
||||||
#define func_tbl sFuncTable
|
|
||||||
u32 response;
|
u32 response;
|
||||||
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 546);
|
ASSERT_VALID_FUNC(546)
|
||||||
response = sFuncTable[svr->funcId](svr);
|
response = sFuncTable[svr->funcId](svr);
|
||||||
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 548);
|
ASSERT_VALID_FUNC(548)
|
||||||
return response;
|
return response;
|
||||||
#undef mainseqno
|
|
||||||
#undef func_tbl
|
|
||||||
}
|
}
|
||||||
|
|||||||
+68
-75
@@ -5,27 +5,18 @@
|
|||||||
#include "wonder_news.h"
|
#include "wonder_news.h"
|
||||||
#include "constants/items.h"
|
#include "constants/items.h"
|
||||||
|
|
||||||
/*
|
// Every 4th reward for sending Wonder News to a link partner is a "big" reward.
|
||||||
Wonder News related functions.
|
#define MAX_SENT_REWARD 4
|
||||||
Because this feature is largely unused, the names in here are
|
|
||||||
mostly nebulous and without a real indication of purpose.
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum {
|
// Only up to 5 rewards can be received in a short period. After this the player
|
||||||
NEWS_VAL_INVALID,
|
// must take 500 steps before any more rewards can be received.
|
||||||
NEWS_VAL_RECV_FRIEND,
|
#define MAX_REWARD 5
|
||||||
NEWS_VAL_RECV_WIRELESS,
|
|
||||||
NEWS_VAL_NONE,
|
|
||||||
NEWS_VAL_SENT,
|
|
||||||
NEWS_VAL_SENT_MAX,
|
|
||||||
NEWS_VAL_GET_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *);
|
static u32 GetRewardItem(struct WonderNewsMetadata *);
|
||||||
static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *);
|
static u32 GetRewardType(struct WonderNewsMetadata *);
|
||||||
static u32 GetMENewsJisanState(struct WonderNewsMetadata *);
|
static void IncrementRewardCounter(struct WonderNewsMetadata *);
|
||||||
static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *);
|
static void IncrementSentRewardCounter(struct WonderNewsMetadata *);
|
||||||
static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *);
|
static void ResetSentRewardCounter(struct WonderNewsMetadata *);
|
||||||
|
|
||||||
void WonderNews_SetReward(u32 newsType)
|
void WonderNews_SetReward(u32 newsType)
|
||||||
{
|
{
|
||||||
@@ -38,9 +29,11 @@ void WonderNews_SetReward(u32 newsType)
|
|||||||
break;
|
break;
|
||||||
case WONDER_NEWS_RECV_FRIEND:
|
case WONDER_NEWS_RECV_FRIEND:
|
||||||
case WONDER_NEWS_RECV_WIRELESS:
|
case WONDER_NEWS_RECV_WIRELESS:
|
||||||
|
// Random berry between ITEM_RAZZ_BERRY and ITEM_NOMEL_BERRY
|
||||||
data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY);
|
data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY);
|
||||||
break;
|
break;
|
||||||
case WONDER_NEWS_SENT:
|
case WONDER_NEWS_SENT:
|
||||||
|
// Random berry between ITEM_CHERI_BERRY and ITEM_IAPAPA_BERRY
|
||||||
data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY);
|
data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -48,12 +41,12 @@ void WonderNews_SetReward(u32 newsType)
|
|||||||
|
|
||||||
void WonderNews_Reset(void)
|
void WonderNews_Reset(void)
|
||||||
{
|
{
|
||||||
struct WonderNewsMetadata *r5 = GetSavedWonderNewsMetadata();
|
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
|
||||||
|
|
||||||
r5->newsType = 0;
|
data->newsType = WONDER_NEWS_NONE;
|
||||||
r5->unk_0_2 = 0;
|
data->sentRewardCounter = 0;
|
||||||
r5->unk_0_5 = 0;
|
data->rewardCounter = 0;
|
||||||
r5->berry = 0;
|
data->berry = 0;
|
||||||
VarSet(VAR_WONDER_NEWS_STEP_COUNTER, 0);
|
VarSet(VAR_WONDER_NEWS_STEP_COUNTER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,100 +55,100 @@ void WonderNews_IncrementStepCounter(void)
|
|||||||
u16 *stepCounter = GetVarPointer(VAR_WONDER_NEWS_STEP_COUNTER);
|
u16 *stepCounter = GetVarPointer(VAR_WONDER_NEWS_STEP_COUNTER);
|
||||||
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
|
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
|
||||||
|
|
||||||
if (data->unk_0_5 > 4 && ++(*stepCounter) >= 500)
|
// If the player has reached the reward limit, start counting steps.
|
||||||
|
// When they reach 500 steps reset the reward counter to allow them to
|
||||||
|
// receive rewards again.
|
||||||
|
if (data->rewardCounter >= MAX_REWARD && ++(*stepCounter) >= 500)
|
||||||
{
|
{
|
||||||
data->unk_0_5 = 0;
|
data->rewardCounter = 0;
|
||||||
*stepCounter = 0;
|
*stepCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 GetMENewsJisanItemAndState(void)
|
u16 WonderNews_GetRewardInfo(void)
|
||||||
{
|
{
|
||||||
u16 *result = &gSpecialVar_Result;
|
u16 *result = &gSpecialVar_Result;
|
||||||
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
|
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
|
||||||
u16 r5;
|
u16 rewardType;
|
||||||
|
|
||||||
if (!IsMysteryGiftEnabled() || !ValidateSavedWonderNews())
|
if (!IsMysteryGiftEnabled() || !ValidateSavedWonderNews())
|
||||||
return 0;
|
return NEWS_REWARD_NONE;
|
||||||
|
|
||||||
r5 = GetMENewsJisanState(data);
|
rewardType = GetRewardType(data);
|
||||||
|
|
||||||
switch (r5)
|
switch (rewardType)
|
||||||
{
|
{
|
||||||
case 0:
|
case NEWS_REWARD_RECV_SMALL:
|
||||||
|
case NEWS_REWARD_RECV_BIG:
|
||||||
|
*result = GetRewardItem(data);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case NEWS_REWARD_SENT_SMALL:
|
||||||
*result = GetMENewsJisanRewardItem(data);
|
*result = GetRewardItem(data);
|
||||||
|
IncrementSentRewardCounter(data);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case NEWS_REWARD_SENT_BIG:
|
||||||
*result = GetMENewsJisanRewardItem(data);
|
*result = GetRewardItem(data);
|
||||||
|
ResetSentRewardCounter(data);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case NEWS_REWARD_NONE:
|
||||||
break;
|
case NEWS_REWARD_WAITING:
|
||||||
case 4:
|
case NEWS_REWARD_AT_MAX:
|
||||||
*result = GetMENewsJisanRewardItem(data);
|
|
||||||
MENewsJisanIncrementCounterUnk0_2(data);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
*result = GetMENewsJisanRewardItem(data);
|
|
||||||
MENewsJisanResetCounterUnk0_2(data);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return r5;
|
return rewardType;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *a0)
|
static u32 GetRewardItem(struct WonderNewsMetadata *data)
|
||||||
{
|
{
|
||||||
u32 r4;
|
u32 itemId;
|
||||||
|
|
||||||
a0->newsType = 0;
|
data->newsType = WONDER_NEWS_NONE;
|
||||||
r4 = a0->berry + FIRST_BERRY_INDEX - 1;
|
itemId = data->berry + FIRST_BERRY_INDEX - 1;
|
||||||
a0->berry = 0;
|
data->berry = 0;
|
||||||
MENewsJisanIncrementCounterUnk0_5(a0);
|
IncrementRewardCounter(data);
|
||||||
return r4;
|
return itemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *a0)
|
static void ResetSentRewardCounter(struct WonderNewsMetadata *data)
|
||||||
{
|
{
|
||||||
a0->unk_0_2 = 0;
|
data->sentRewardCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *a0)
|
// Track number of times a reward was received (or attmepted to receive) for sending Wonder News to a link partner.
|
||||||
|
static void IncrementSentRewardCounter(struct WonderNewsMetadata *data)
|
||||||
{
|
{
|
||||||
a0->unk_0_2++;
|
data->sentRewardCounter++;
|
||||||
if ((u8)a0->unk_0_2 > 4)
|
if (data->sentRewardCounter > MAX_SENT_REWARD)
|
||||||
a0->unk_0_2 = 4;
|
data->sentRewardCounter = MAX_SENT_REWARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *a0)
|
static void IncrementRewardCounter(struct WonderNewsMetadata *data)
|
||||||
{
|
{
|
||||||
a0->unk_0_5++;
|
data->rewardCounter++;
|
||||||
if ((u8)a0->unk_0_5 > 5)
|
if (data->rewardCounter > MAX_REWARD)
|
||||||
a0->unk_0_5 = 5;
|
data->rewardCounter = MAX_REWARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 GetMENewsJisanState(struct WonderNewsMetadata *data)
|
static u32 GetRewardType(struct WonderNewsMetadata *data)
|
||||||
{
|
{
|
||||||
if (data->unk_0_5 == 5)
|
if (data->rewardCounter == MAX_REWARD)
|
||||||
return 6;
|
return NEWS_REWARD_AT_MAX;
|
||||||
|
|
||||||
switch (data->newsType)
|
switch (data->newsType)
|
||||||
{
|
{
|
||||||
case WONDER_NEWS_NONE:
|
case WONDER_NEWS_NONE:
|
||||||
return 3;
|
return NEWS_REWARD_WAITING;
|
||||||
case WONDER_NEWS_RECV_FRIEND:
|
case WONDER_NEWS_RECV_FRIEND:
|
||||||
return 1;
|
return NEWS_REWARD_RECV_SMALL;
|
||||||
case WONDER_NEWS_RECV_WIRELESS:
|
case WONDER_NEWS_RECV_WIRELESS:
|
||||||
return 2;
|
return NEWS_REWARD_RECV_BIG;
|
||||||
case WONDER_NEWS_SENT:
|
case WONDER_NEWS_SENT:
|
||||||
if (data->unk_0_2 < 3)
|
if (data->sentRewardCounter < MAX_SENT_REWARD - 1)
|
||||||
return 4;
|
return NEWS_REWARD_SENT_SMALL;
|
||||||
return 5;
|
return NEWS_REWARD_SENT_BIG;
|
||||||
default:
|
default:
|
||||||
AGB_ASSERT_EX(0, ABSPATH("menews_jisan.c"), 383);
|
AGB_ASSERT_EX(0, ABSPATH("menews_jisan.c"), 383);
|
||||||
return 0;
|
return NEWS_REWARD_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user