Sync union room
This commit is contained in:
@@ -29,7 +29,7 @@ UnionRoom_OnResume::
|
||||
removeobject LOCALID_UNION_ROOM_PLAYER_6
|
||||
removeobject LOCALID_UNION_ROOM_PLAYER_7
|
||||
removeobject LOCALID_UNION_ROOM_PLAYER_8
|
||||
special UnionRoomSpecial
|
||||
special RunUnionRoom
|
||||
end
|
||||
|
||||
UnionRoom_OnTransition::
|
||||
|
||||
@@ -796,7 +796,7 @@ CableClub_EventScript_EnterUnionRoom::
|
||||
special SetCableClubWarp
|
||||
warpspinenter MAP_UNION_ROOM, 7, 11
|
||||
waitstate
|
||||
special UnionRoomSpecial
|
||||
special RunUnionRoom
|
||||
waitstate
|
||||
end
|
||||
|
||||
|
||||
+1
-1
@@ -373,7 +373,7 @@ gSpecials::
|
||||
def_special IsWirelessAdapterConnected
|
||||
def_special TryBecomeLinkLeader
|
||||
def_special TryJoinLinkGroup
|
||||
def_special UnionRoomSpecial
|
||||
def_special RunUnionRoom
|
||||
def_special ShowWirelessCommunicationScreen
|
||||
def_special EnableNationalPokedex
|
||||
def_special SetWalkingIntoSignVars
|
||||
|
||||
@@ -1,47 +1,51 @@
|
||||
#ifndef GUARD_CONSTANTS_UNION_ROOM_H
|
||||
#define GUARD_CONSTANTS_UNION_ROOM_H
|
||||
|
||||
// The number of possible group leaders visible in the Union Room.
|
||||
// Note that this is different than the number of people actively
|
||||
// connected as children via the Wireless Adapter, which cannot
|
||||
// exceed RFU_CHILD_MAX (4), for a total of 5 including the player.
|
||||
#define MAX_UNION_ROOM_LEADERS 8
|
||||
|
||||
#define UNION_ROOM_SPAWN_NONE 0
|
||||
#define UNION_ROOM_SPAWN_IN 1
|
||||
#define UNION_ROOM_SPAWN_OUT 2
|
||||
|
||||
#define ACTIVITY_NONE 0
|
||||
#define ACTIVITY_BATTLE 1
|
||||
#define ACTIVITY_DBLBATTLE 2
|
||||
#define ACTIVITY_MLTBATTLE 3
|
||||
#define ACTIVITY_TRADE 4
|
||||
#define ACTIVITY_CHAT 5
|
||||
#define ACTIVITY_WCARD 6
|
||||
#define ACTIVITY_WNEWS 7
|
||||
#define ACTIVITY_CARD 8
|
||||
#define ACTIVITY_PJUMP 9
|
||||
#define ACTIVITY_BCRUSH 10
|
||||
#define ACTIVITY_BPICK 11
|
||||
#define ACTIVITY_SEARCH 12
|
||||
#define ACTIVITY_SPINTRADE 13
|
||||
#define ACTIVITY_ITEMTRADE 14
|
||||
#define UNION_ROOM_MAX_LEVEL 30
|
||||
|
||||
// The number of possible trainer classes for a trainer of a given gender in the Union Room.
|
||||
// This value is necessarily a power of 2 because of the way it's treated in GetUnionRoomTrainerPic / GetUnionRoomTrainerClass
|
||||
#define NUM_UNION_ROOM_CLASSES (1 << 3) // 8
|
||||
|
||||
#define ACTIVITY_NONE 0
|
||||
#define ACTIVITY_BATTLE_SINGLE 1
|
||||
#define ACTIVITY_BATTLE_DOUBLE 2
|
||||
#define ACTIVITY_BATTLE_MULTI 3
|
||||
#define ACTIVITY_TRADE 4
|
||||
#define ACTIVITY_CHAT 5
|
||||
#define ACTIVITY_WONDER_CARD_DUP 6 // Duplicates of later WONDER constants
|
||||
#define ACTIVITY_WONDER_NEWS_DUP 7 //
|
||||
#define ACTIVITY_CARD 8
|
||||
#define ACTIVITY_POKEMON_JUMP 9
|
||||
#define ACTIVITY_BERRY_CRUSH 10
|
||||
#define ACTIVITY_BERRY_PICK 11
|
||||
#define ACTIVITY_SEARCH 12
|
||||
#define ACTIVITY_SPIN_TRADE 13
|
||||
#define ACTIVITY_ITEM_TRADE 14 // Replaced with ACTIVITY_BATTLE_TOWER_OPEN in Emerald
|
||||
#define ACTIVITY_RECORD_CORNER 15
|
||||
#define ACTIVITY_BERRY_BLENDER 16
|
||||
|
||||
// Player response
|
||||
#define ACTIVITY_ACCEPT 17
|
||||
#define ACTIVITY_DECLINE 18
|
||||
#define ACTIVITY_ACCEPT 17
|
||||
#define ACTIVITY_DECLINE 18
|
||||
|
||||
#define ACTIVITY_NPCTALK 19
|
||||
#define ACTIVITY_PLYRTALK 20
|
||||
#define ACTIVITY_NPCTALK 19
|
||||
#define ACTIVITY_PLYRTALK 20
|
||||
|
||||
// Duplicate IDs?
|
||||
#define ACTIVITY_WCARD2 21
|
||||
#define ACTIVITY_WNEWS2 22
|
||||
#define ACTIVITY_WONDER_CARD 21
|
||||
#define ACTIVITY_WONDER_NEWS 22
|
||||
|
||||
#define IN_UNION_ROOM 0x40
|
||||
|
||||
// Used in UR_AddTextPrinterParameterized
|
||||
#define UR_COLOR_DKE_WHT_LTE 0
|
||||
#define UR_COLOR_RED_WHT_LTR 1
|
||||
#define UR_COLOR_GRN_WHT_LTG 2
|
||||
#define UR_COLOR_WHT_WHT_LTE 3
|
||||
#define UR_COLOR_WHT_DKE_LTE 4
|
||||
#define UR_COLOR_GRN_DN6_LTB 5
|
||||
#define UR_COLOR_DN5_DN6_LTB 6
|
||||
#define IN_UNION_ROOM (1 << 6)
|
||||
|
||||
#define LINK_GROUP_SINGLE_BATTLE 0
|
||||
#define LINK_GROUP_DOUBLE_BATTLE 1
|
||||
@@ -52,9 +56,30 @@
|
||||
#define LINK_GROUP_BERRY_PICKING 6
|
||||
#define LINK_GROUP_WONDER_CARD 7
|
||||
#define LINK_GROUP_WONDER_NEWS 8
|
||||
#define NUM_LINK_GROUP_TYPES 9
|
||||
|
||||
#define LINK_GROUP_UNION_ROOM_RESUME 9
|
||||
#define LINK_GROUP_UNION_ROOM_INIT 10
|
||||
#define LINK_GROUP_UNK_11 11
|
||||
#define LINK_GROUP_UNK_12 12
|
||||
#define NUM_LINK_GROUP_TYPES 13
|
||||
|
||||
#define UR_TRADE_MATCH 0
|
||||
#define UR_TRADE_NOTYPE 1
|
||||
#define UR_TRADE_NOEGG 2
|
||||
|
||||
#define UR_TRADE_READY 0
|
||||
#define UR_TRADE_PLAYER_NOT_READY 1
|
||||
#define UR_TRADE_PARTNER_NOT_READY 2
|
||||
|
||||
#define UR_INTERACT_PLAYER_1 1
|
||||
#define UR_INTERACT_PLAYER_2 2
|
||||
#define UR_INTERACT_PLAYER_3 3
|
||||
#define UR_INTERACT_PLAYER_4 4
|
||||
#define UR_INTERACT_PLAYER_5 5
|
||||
#define UR_INTERACT_PLAYER_6 6
|
||||
#define UR_INTERACT_PLAYER_7 7
|
||||
#define UR_INTERACT_PLAYER_8 8
|
||||
#define UR_INTERACT_ATTENDANT 9
|
||||
#define UR_INTERACT_UNUSED 10
|
||||
#define UR_INTERACT_START_MENU 11
|
||||
|
||||
#endif //GUARD_CONSTANTS_UNION_ROOM_H
|
||||
|
||||
+5
-6
@@ -233,17 +233,16 @@ extern struct RfuGameData gHostRfuGameData;
|
||||
extern u8 gHostRfuUsername[];
|
||||
extern struct RfuManager gRfu;
|
||||
|
||||
// GameFreak signatures
|
||||
void AddTextPrinterToWindow1(const u8 *str);
|
||||
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
|
||||
bool32 PrintMysteryGiftMenuMessage(u8 * cmdPtr, const u8 * src);
|
||||
void LinkRfu_FatalError(void);
|
||||
void MG_DrawCheckerboardPattern(void);
|
||||
void Rfu_SetCloseLinkCallback(void);
|
||||
bool8 IsLinkRfuTaskFinished(void);
|
||||
void DestroyWirelessStatusIndicatorSprite(void);
|
||||
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
|
||||
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
|
||||
void MEvent_CreateTask_Leader(u32 arg0);
|
||||
void CreateTask_LinkMysteryGiftWithFriend(u32 arg0);
|
||||
void CreateTask_LinkMysteryGiftOverWireless(u32 arg0);
|
||||
void CreateTask_SendMysteryGift(u32 activity);
|
||||
void Rfu_SendPacket(void *data);
|
||||
u8 CreateTask_ListenToWireless(void);
|
||||
void DestroyTask_RfuIdle(void);
|
||||
@@ -268,7 +267,7 @@ u32 GetRfuRecvQueueLength(void);
|
||||
void LinkRfu_Shutdown(void);
|
||||
void CreateTask_RfuIdle(void);
|
||||
bool8 Rfu_SetLinkRecovery(bool32 enable);
|
||||
void var_800D_set_xB(void);
|
||||
void SetUsingUnionRoomStartMenu(void);
|
||||
struct RfuGameData *GetHostRfuGameData(void);
|
||||
void UpdateWirelessStatusIndicatorSprite(void);
|
||||
void InitRFU(void);
|
||||
|
||||
+2
-2
@@ -101,8 +101,8 @@ void InitMEventData(void);
|
||||
u16 MEvent_GetBattleCardCount(u32 command);
|
||||
void MysteryGift_TryIncrementStat(u32 eventId, u32 trainerId);
|
||||
u16 *GetMEventProfileECWordsMaybe(void);
|
||||
void ResetReceivedWonderCardFlag(void);
|
||||
bool32 MEventHandleReceivedWonderCard(u16 flagId);
|
||||
void MysteryGift_DisableStats(void);
|
||||
bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId);
|
||||
u16 GetWonderCardFlagId(void);
|
||||
|
||||
#endif //GUARD_MEVENT_H
|
||||
|
||||
@@ -7,7 +7,7 @@ void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void);
|
||||
void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32);
|
||||
void c2_mystery_gift(void);
|
||||
void CB2_MysteryGiftEReader(void);
|
||||
s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str);
|
||||
s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str);
|
||||
void MG_DrawTextBorder(u8 windowId);
|
||||
u16 GetMysteryGiftBaseBlock(void);
|
||||
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
|
||||
#include "union_room.h"
|
||||
|
||||
u8 ZeroUnionObjWork(struct UnionObj * ptr);
|
||||
void DeleteUnionObjWorkAndStopTask(void);
|
||||
u8 ZeroUnionObjWork(struct UnionRoomObject * ptr);
|
||||
void DestroyUnionRoomPlayerObjects(void);
|
||||
void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group);
|
||||
void DestroyGroupMemberObjects(u8 *spriteIds);
|
||||
void MakeGroupAssemblyAreasPassable(void);
|
||||
void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
|
||||
void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
|
||||
bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds);
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p);
|
||||
void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p);
|
||||
void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p);
|
||||
bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds);
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct RfuPlayerList *main0_p);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ extern const u8 gText_FemaleSymbol4[];
|
||||
extern const u8 gText_GenderlessSymbol[];
|
||||
|
||||
extern const u16 gTradeOrHatchMonShadowTilemap[];
|
||||
void CB2_ReturnFromLinkTrade(void);
|
||||
void CB2_StartCreateTradeMenu(void);
|
||||
s32 Trade_CalcLinkPlayerCompatibilityParam(void);
|
||||
s32 CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData rfuPlayer, u16 species2, u16 species, u8 isEventLegal);
|
||||
s32 GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData rfuPlayer, struct RfuGameCompatibilityData rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_TRADE_SCENE_H
|
||||
#define GUARD_TRADE_SCENE_H
|
||||
|
||||
void CB2_InitTradeAnim_LinkTrade(void);
|
||||
void CB2_LinkTrade(void);
|
||||
void CreateInGameTradePokemon(void);
|
||||
void DoInGameTradeScene(void);
|
||||
void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed);
|
||||
|
||||
+85
-97
@@ -3,58 +3,60 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "link_rfu.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
// Return value of IsRequestedTypeAndSpeciesInPlayerParty
|
||||
#define UR_TRADE_MATCH 0
|
||||
#define UR_TRADE_NOTYPE 1
|
||||
#define UR_TRADE_NOEGG 2
|
||||
// In the Union Room the player is only ever connected to ≤ 4 other players.
|
||||
// However, there can be up to MAX_UNION_ROOM_LEADERS (8) object events to
|
||||
// represent leaders of recently discovered link groups, and each of those groups
|
||||
// may have up to MAX_RFU_PLAYERS (5) players in it including the leader.
|
||||
// These players are represented on-screen by NPC sprites drawn around the leader.
|
||||
// Thus there can be 40 sprites of other players on-screen, in 8 groups of 5.
|
||||
#define NUM_UNION_ROOM_SPRITES (MAX_UNION_ROOM_LEADERS * MAX_RFU_PLAYERS)
|
||||
|
||||
#define UROOM_MAX_GROUP_COUNT 8
|
||||
#define UROOM_MAX_PARTY_SIZE 5
|
||||
// The maximum number of recently connected players that can be tracked.
|
||||
// Note that this is significantly less than NUM_UNION_ROOM_SPRITES, i.e. not
|
||||
// every player that can be shown in the Union Room can be tracked at once.
|
||||
// Information such as a group member's gender can instead be read from partnerInfo
|
||||
// of the leader's RfuGameData by tracking at least all of the group leaders.
|
||||
#define MAX_RFU_PLAYER_LIST_SIZE 16
|
||||
|
||||
struct UnionGnameUnamePair
|
||||
struct RfuPlayerData
|
||||
{
|
||||
struct RfuGameData gname;
|
||||
u8 ALIGNED(4) uname[PLAYER_NAME_LENGTH + 1];
|
||||
struct RfuGameData data;
|
||||
u8 ALIGNED(4) name[RFU_USER_NAME_LENGTH];
|
||||
};
|
||||
|
||||
struct UnkStruct_x1C
|
||||
struct RfuPlayer
|
||||
{
|
||||
struct UnionGnameUnamePair gname_uname;
|
||||
struct RfuPlayerData rfu;
|
||||
u16 timeoutCounter;
|
||||
u8 groupScheduledAnim:2;
|
||||
bool8 useRedText:1; // Never set
|
||||
u8 newPlayerCountdown;
|
||||
u8 unused;
|
||||
};
|
||||
|
||||
struct RfuPlayerList
|
||||
{
|
||||
struct RfuPlayer players[0]; // TODO: Should be size MAX_RFU_PLAYER_LIST_SIZE
|
||||
};
|
||||
|
||||
struct RfuIncomingPlayer
|
||||
{
|
||||
struct RfuPlayerData rfu;
|
||||
u8 active:1;
|
||||
};
|
||||
|
||||
struct UnkStruct_x20
|
||||
struct RfuIncomingPlayerList
|
||||
{
|
||||
struct UnionGnameUnamePair gname_uname;
|
||||
u16 field_18;
|
||||
u8 groupScheduledAnim:2;
|
||||
bool8 field_1A_1:1;
|
||||
u8 field_1B;
|
||||
u32 field_1C; // unused
|
||||
struct RfuIncomingPlayer players[0]; // TODO: Should be size MAX_RFU_PLAYERS
|
||||
};
|
||||
|
||||
// These arrays are dynamically allocated but must be
|
||||
// represented as structs to match.
|
||||
// Don't ask me why.
|
||||
|
||||
// FIXME: Find a way around this.
|
||||
|
||||
struct UnkStruct_Main0
|
||||
struct WirelessLink_Leader
|
||||
{
|
||||
struct UnkStruct_x20 arr[0];
|
||||
};
|
||||
|
||||
struct UnkStruct_Main4
|
||||
{
|
||||
struct UnkStruct_x1C arr[0];
|
||||
};
|
||||
|
||||
struct UnkStruct_Leader
|
||||
{
|
||||
struct UnkStruct_Main0 * field_0;
|
||||
struct UnkStruct_Main4 * field_4;
|
||||
struct UnkStruct_Main0 * field_8;
|
||||
struct RfuPlayerList * playerList;
|
||||
struct RfuIncomingPlayerList * incomingPlayerList;
|
||||
struct RfuPlayerList * playerListBackup;
|
||||
u8 state;
|
||||
u8 textState;
|
||||
u8 delayTimerAfterOk;
|
||||
@@ -63,36 +65,35 @@ struct UnkStruct_Leader
|
||||
u8 nPlayerModeWindowId;
|
||||
u8 listTaskId;
|
||||
u8 playerCount;
|
||||
u8 messageWindowId;
|
||||
u8 field_15;
|
||||
u8 field_16;
|
||||
u16 yesNoWindowId;
|
||||
u8 unused;
|
||||
u8 listenTaskId;
|
||||
u8 activity;
|
||||
u8 field_19;
|
||||
u16 field_1A;
|
||||
u8 joinRequestAnswer;
|
||||
u16 memberConfirmTimeout;
|
||||
};
|
||||
|
||||
struct UnkStruct_Group
|
||||
struct WirelessLink_Group
|
||||
{
|
||||
struct UnkStruct_Main0 * field_0;
|
||||
struct UnkStruct_Main4 * field_4;
|
||||
struct RfuPlayerList * playerList;
|
||||
struct RfuIncomingPlayerList * incomingPlayerList;
|
||||
u8 state;
|
||||
u8 textState;
|
||||
u8 field_A; // unused
|
||||
u8 delayTimerAfterOk; // unused
|
||||
u8 listWindowId;
|
||||
u8 bButtonCancelWindowId;
|
||||
u8 playerNameAndIdWindowId;
|
||||
u8 listTaskId;
|
||||
u8 leaderId;
|
||||
u8 field_10;
|
||||
u8 unused;
|
||||
u8 listenTaskId;
|
||||
u8 cardOrNews;
|
||||
u8 field_13; // referenced but never set
|
||||
bool8 isWonderNews;
|
||||
bool8 showListMenu; // referenced but never set
|
||||
u8 refreshTimer;
|
||||
u8 delayBeforePrint;
|
||||
};
|
||||
|
||||
struct UnionObj
|
||||
struct UnionRoomObject
|
||||
{
|
||||
u8 state;
|
||||
u8 gfxId;
|
||||
@@ -100,69 +101,56 @@ struct UnionObj
|
||||
u8 schedAnim;
|
||||
};
|
||||
|
||||
struct UnkStruct_URoom
|
||||
struct WirelessLink_URoom
|
||||
{
|
||||
/* 0x000 */ struct UnkStruct_Main0 * field_0;
|
||||
/* 0x004 */ struct UnkStruct_Main4 * field_4;
|
||||
/* 0x008 */ struct UnkStruct_Main0 * field_8;
|
||||
/* 0x00C */ struct UnkStruct_Main4 * field_C;
|
||||
/* 0x010 */ u16 field_10;
|
||||
/* 0x012 */ u16 field_12;
|
||||
/* 0x014 */ u8 state;
|
||||
/* 0x015 */ u8 stateAfterPrint;
|
||||
/* 0x016 */ u8 textState;
|
||||
/* 0x017 */ u8 field_17;
|
||||
/* 0x018 */ u8 field_18;
|
||||
/* 0x019 */ u8 field_19;
|
||||
/* 0x01A */ u8 field_1A;
|
||||
/* 0x01B */ u8 topListMenuWindowId;
|
||||
/* 0x01C */ u8 topListMenuListMenuId;
|
||||
/* 0x01D */ u8 tradeBoardSelectWindowId;
|
||||
/* 0x01E */ u8 tradeBoardDetailsWindowId;
|
||||
/* 0x01F */ u8 field_1F;
|
||||
/* 0x020 */ u8 field_20;
|
||||
/* 0x021 */ u8 spriteIds[40];
|
||||
/* 0x049 */ u8 field_49;
|
||||
/* 0x04A */ u8 tradeBoardListMenuId;
|
||||
|
||||
// For communication with potential link partners
|
||||
/* 0x04C */ u16 playerSendBuffer[6];
|
||||
/* 0x058 */ u8 activityRequestStrbufs[4][11];
|
||||
/* 0x084 */ u16 partnerYesNoResponse;
|
||||
/* 0x086 */ u16 recvActivityRequest[3]; // activity[, species, level]
|
||||
/* 0x08C */ struct UnionObj unionObjs[8];
|
||||
/* 0x0AC */ u8 trainerCardStrbufs[12][15];
|
||||
/* 0x160 */ u8 field_174[48];
|
||||
/* 0x190 */ u8 field_1A4[200];
|
||||
};
|
||||
|
||||
union UnkUnion_Main
|
||||
{
|
||||
struct UnkStruct_Leader * leader;
|
||||
struct UnkStruct_Group * group;
|
||||
struct UnkStruct_URoom * uRoom;
|
||||
struct RfuPlayerList * playerList;
|
||||
struct RfuIncomingPlayerList * incomingChildList;
|
||||
struct RfuPlayerList * spawnPlayer;
|
||||
struct RfuIncomingPlayerList * incomingParentList;
|
||||
u16 unknown; // Never read
|
||||
u16 unreadPlayerId;
|
||||
u8 state;
|
||||
u8 stateAfterPrint;
|
||||
u8 textState;
|
||||
u8 filler[4];
|
||||
u8 topListMenuWindowId;
|
||||
u8 topListMenuId;
|
||||
u8 tradeBoardMainWindowId;
|
||||
u8 tradeBoardHeaderWindowId;
|
||||
u8 unused1;
|
||||
u8 searchTaskId;
|
||||
u8 spriteIds[NUM_UNION_ROOM_SPRITES];
|
||||
u8 unused2;
|
||||
u8 tradeBoardListMenuId;
|
||||
// For communication with potential link partners
|
||||
u16 playerSendBuffer[6];
|
||||
u8 activityRequestStrbufs[4][11];
|
||||
u16 partnerYesNoResponse;
|
||||
u16 recvActivityRequest[3]; // activity[, species, level]
|
||||
struct UnionRoomObject objects[MAX_UNION_ROOM_LEADERS];
|
||||
u8 trainerCardStrBuffer[12][15];
|
||||
u8 trainerCardColorStrBuffer[48];
|
||||
u8 trainerCardMsgStrBuffer[200];
|
||||
};
|
||||
|
||||
struct UnionRoomTrade
|
||||
{
|
||||
u16 field_0;
|
||||
u16 state;
|
||||
u16 type;
|
||||
u32 playerPersonality;
|
||||
u8 field_8;
|
||||
u8 field_9;
|
||||
u8 offerPlayerId;
|
||||
u16 playerSpecies;
|
||||
u16 playerLevel;
|
||||
u16 species;
|
||||
u16 level;
|
||||
u16 field_12;
|
||||
u32 personality;
|
||||
};
|
||||
|
||||
extern struct RfuGameCompatibilityData gPartnerTgtGnameSub;
|
||||
extern struct RfuGameCompatibilityData gRfuPartnerCompatibilityData;
|
||||
extern u16 gUnionRoomOfferedSpecies;
|
||||
extern u8 gUnionRoomRequestedMonType;
|
||||
|
||||
void StartUnionRoomBattle(u16 battleFlags);
|
||||
u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void);
|
||||
u8 CreateTask_CreateTradeMenu(void);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_H
|
||||
|
||||
+2
-2
@@ -897,7 +897,7 @@ static void Task_StartWiredTrade(u8 taskId)
|
||||
case 3:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnFromLinkTrade);
|
||||
SetMainCallback2(CB2_StartCreateTradeMenu);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
@@ -929,7 +929,7 @@ static void Task_StartWirelessTrade(u8 taskId)
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade();
|
||||
CreateTask_CreateTradeMenu();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,470 @@
|
||||
static const u8 *const sLinkGroupActivityNameTexts[] = {
|
||||
[ACTIVITY_NONE] = gText_UR_EmptyString,
|
||||
[ACTIVITY_BATTLE_SINGLE] = gText_UR_SingleBattle,
|
||||
[ACTIVITY_BATTLE_DOUBLE] = gText_UR_DoubleBattle,
|
||||
[ACTIVITY_BATTLE_MULTI] = gText_UR_MultiBattle,
|
||||
[ACTIVITY_TRADE] = gText_UR_PokemonTrades,
|
||||
[ACTIVITY_CHAT] = gText_UR_Chat,
|
||||
[ACTIVITY_WONDER_CARD_DUP] = gText_UR_WonderCards,
|
||||
[ACTIVITY_WONDER_NEWS_DUP] = gText_UR_WonderNews,
|
||||
[ACTIVITY_CARD] = gText_UR_Cards,
|
||||
[ACTIVITY_POKEMON_JUMP] = gText_UR_PokemonJump,
|
||||
[ACTIVITY_BERRY_CRUSH] = gText_UR_BerryCrush,
|
||||
[ACTIVITY_BERRY_PICK] = gText_UR_BerryPicking,
|
||||
[ACTIVITY_SEARCH] = gText_UR_Search,
|
||||
[ACTIVITY_SPIN_TRADE] = gText_UR_SpinTrade,
|
||||
[ACTIVITY_ITEM_TRADE] = gText_UR_ItemTrade,
|
||||
[ACTIVITY_RECORD_CORNER] = gText_UR_EmptyString,
|
||||
[ACTIVITY_BERRY_BLENDER] = gText_UR_EmptyString,
|
||||
[ACTIVITY_ACCEPT] = gText_UR_EmptyString,
|
||||
[ACTIVITY_DECLINE] = gText_UR_EmptyString,
|
||||
[ACTIVITY_NPCTALK] = gText_UR_EmptyString,
|
||||
[ACTIVITY_PLYRTALK] = gText_UR_EmptyString,
|
||||
[ACTIVITY_WONDER_CARD] = gText_UR_WonderCards,
|
||||
[ACTIVITY_WONDER_NEWS] = gText_UR_WonderNews
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 0,
|
||||
.tilemapTop = 0,
|
||||
.width = 30,
|
||||
.height = 2,
|
||||
.paletteNum = 0xF,
|
||||
.baseBlock = 0x008
|
||||
};
|
||||
|
||||
// Minimum and maximum number of players for a link group
|
||||
// A minimum of 0 means the min and max are equal
|
||||
#define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8))
|
||||
#define GROUP_MAX(capacity)(capacity & 0x0F)
|
||||
#define GROUP_MIN(capacity)(capacity >> 4)
|
||||
#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match
|
||||
|
||||
static const u32 sLinkGroupToActivityAndCapacity[] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4),
|
||||
[LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5),
|
||||
[LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5),
|
||||
[LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5),
|
||||
[LINK_GROUP_WONDER_CARD] = ACTIVITY_SPIN_TRADE | LINK_GROUP_CAPACITY(3, 5),
|
||||
[LINK_GROUP_WONDER_NEWS] = ACTIVITY_ITEM_TRADE | LINK_GROUP_CAPACITY(3, 5)
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_List_PossibleGroupMembers = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 3,
|
||||
.width = 13,
|
||||
.height = 10,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x044
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 16,
|
||||
.tilemapTop = 3,
|
||||
.width = 7,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x0C6
|
||||
};
|
||||
|
||||
const struct ListMenuItem sListMenuItems_PossibleGroupMembers[] = {
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
|
||||
.items = sListMenuItems_PossibleGroupMembers,
|
||||
.moveCursorFunc = NULL,
|
||||
.itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_PossibleGroupMembers),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 1,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 2,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 1
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_GroupList = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 3,
|
||||
.width = 17,
|
||||
.height = 10,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x044
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_PlayerNameAndId = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 20,
|
||||
.tilemapTop = 3,
|
||||
.width = 7,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x0EE
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_UnionRoomGroups[] = {
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4},
|
||||
{gText_UR_EmptyString, 5},
|
||||
{gText_UR_EmptyString, 6},
|
||||
{gText_UR_EmptyString, 7},
|
||||
{gText_UR_EmptyString, 8},
|
||||
{gText_UR_EmptyString, 9},
|
||||
{gText_UR_EmptyString, 10},
|
||||
{gText_UR_EmptyString, 11},
|
||||
{gText_UR_EmptyString, 12},
|
||||
{gText_UR_EmptyString, 13},
|
||||
{gText_UR_EmptyString, 14},
|
||||
{gText_UR_EmptyString, 15}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
|
||||
.items = sListMenuItems_UnionRoomGroups,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_UnionRoomGroups),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 2,
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 20,
|
||||
.tilemapTop = 6,
|
||||
.width = 8,
|
||||
.height = 7,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_InviteToActivity[] = {
|
||||
{gText_UR_Greetings, ACTIVITY_CARD | LINK_GROUP_CAPACITY(0, 2)},
|
||||
{gText_UR_Battle, ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)},
|
||||
{gText_UR_Chat2, ACTIVITY_CHAT | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)},
|
||||
{gText_UR_Exit, ACTIVITY_NONE | IN_UNION_ROOM }
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
|
||||
.items = sListMenuItems_InviteToActivity,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_InviteToActivity),
|
||||
.maxShowed = 4,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 18,
|
||||
.tilemapTop = 8,
|
||||
.width = 11,
|
||||
.height = 5,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_RegisterForTrade[] = {
|
||||
{gText_Register, 1},
|
||||
{gText_UR_Info, 2},
|
||||
{gText_UR_Exit, 3}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
|
||||
.items = sListMenuItems_RegisterForTrade,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_RegisterForTrade),
|
||||
.maxShowed = 3,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TypeNames = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 20,
|
||||
.tilemapTop = 2,
|
||||
.width = 9,
|
||||
.height = 11,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_TypeNames[NUMBER_OF_MON_TYPES] = {
|
||||
{ gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
|
||||
{ gTypeNames[TYPE_FIRE], TYPE_FIRE },
|
||||
{ gTypeNames[TYPE_WATER], TYPE_WATER },
|
||||
{ gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC },
|
||||
{ gTypeNames[TYPE_GRASS], TYPE_GRASS },
|
||||
{ gTypeNames[TYPE_ICE], TYPE_ICE },
|
||||
{ gTypeNames[TYPE_GROUND], TYPE_GROUND },
|
||||
{ gTypeNames[TYPE_ROCK], TYPE_ROCK },
|
||||
{ gTypeNames[TYPE_FLYING], TYPE_FLYING },
|
||||
{ gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC },
|
||||
{ gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING },
|
||||
{ gTypeNames[TYPE_POISON], TYPE_POISON },
|
||||
{ gTypeNames[TYPE_BUG], TYPE_BUG },
|
||||
{ gTypeNames[TYPE_GHOST], TYPE_GHOST },
|
||||
{ gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
|
||||
{ gTypeNames[TYPE_STEEL], TYPE_STEEL },
|
||||
{ gTypeNames[TYPE_DARK], TYPE_DARK },
|
||||
{ gText_UR_Exit, NUMBER_OF_MON_TYPES }
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_TypeNames = {
|
||||
.items = sListMenuItems_TypeNames,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = NUMBER_OF_MON_TYPES,
|
||||
.maxShowed = 6,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 2,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoardHeader = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 28,
|
||||
.height = 2,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoardMain = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 5,
|
||||
.width = 28,
|
||||
.height = 10,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x039
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_TradeBoard[] = {
|
||||
{gText_UR_EmptyString, -3},
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4},
|
||||
{gText_UR_EmptyString, 5},
|
||||
{gText_UR_EmptyString, 6},
|
||||
{gText_UR_EmptyString, 7},
|
||||
{gText_UR_Exit2, 8}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_TradeBoard = {
|
||||
.items = sListMenuItems_TradeBoard,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = TradeBoardListMenuItemPrintFunc,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_TradeBoard),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 12,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 2,
|
||||
.cursorPal = 14,
|
||||
.fillValue = 15,
|
||||
.cursorShadowPal = 13,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 1,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_Unused = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 5,
|
||||
.width = 28,
|
||||
.height = 10,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x039
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_Unused[] = {
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4},
|
||||
{gText_UR_EmptyString, 5},
|
||||
{gText_UR_EmptyString, 6},
|
||||
{gText_UR_EmptyString, 7},
|
||||
{gText_UR_EmptyString, 8},
|
||||
{gText_UR_EmptyString, 9},
|
||||
{gText_UR_EmptyString, 10},
|
||||
{gText_UR_EmptyString, 11},
|
||||
{gText_UR_EmptyString, 12},
|
||||
{gText_UR_EmptyString, 13},
|
||||
{gText_UR_EmptyString, 14},
|
||||
{gText_UR_EmptyString, 15}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_Unused = {
|
||||
.items = sListMenuItems_Unused,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = ItemPrintFunc_Unused,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_Unused),
|
||||
.maxShowed = 4,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 1,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct RfuPlayerData sRfuPlayerData_Dummy = {};
|
||||
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Resume[] = {
|
||||
IN_UNION_ROOM | ACTIVITY_NONE,
|
||||
IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE,
|
||||
IN_UNION_ROOM | ACTIVITY_TRADE,
|
||||
IN_UNION_ROOM | ACTIVITY_CHAT,
|
||||
IN_UNION_ROOM | ACTIVITY_CARD,
|
||||
IN_UNION_ROOM | ACTIVITY_ACCEPT,
|
||||
IN_UNION_ROOM | ACTIVITY_DECLINE,
|
||||
IN_UNION_ROOM | ACTIVITY_NPCTALK,
|
||||
IN_UNION_ROOM | ACTIVITY_PLYRTALK,
|
||||
0xFF
|
||||
};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Unk11[] = {
|
||||
ACTIVITY_BATTLE_SINGLE,
|
||||
ACTIVITY_BATTLE_DOUBLE,
|
||||
ACTIVITY_BATTLE_MULTI,
|
||||
ACTIVITY_TRADE,
|
||||
ACTIVITY_POKEMON_JUMP,
|
||||
ACTIVITY_BERRY_CRUSH,
|
||||
ACTIVITY_BERRY_PICK,
|
||||
ACTIVITY_WONDER_CARD,
|
||||
ACTIVITY_WONDER_NEWS,
|
||||
ACTIVITY_SPIN_TRADE,
|
||||
0xFF
|
||||
};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Unk12[] = {
|
||||
ACTIVITY_BATTLE_SINGLE,
|
||||
ACTIVITY_BATTLE_DOUBLE,
|
||||
ACTIVITY_BATTLE_MULTI,
|
||||
ACTIVITY_TRADE,
|
||||
ACTIVITY_BERRY_CRUSH,
|
||||
0xFF
|
||||
};
|
||||
|
||||
static const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle,
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle,
|
||||
[LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle,
|
||||
[LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade,
|
||||
[LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump,
|
||||
[LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush,
|
||||
[LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking,
|
||||
[LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard,
|
||||
[LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews,
|
||||
[LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume,
|
||||
[LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init,
|
||||
[LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11,
|
||||
[LINK_GROUP_UNK_12] = sAcceptedActivityIds_Unk12,
|
||||
};
|
||||
|
||||
static const u8 sLinkGroupToURoomActivity[] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE,
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE,
|
||||
[LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI,
|
||||
[LINK_GROUP_TRADE] = ACTIVITY_TRADE,
|
||||
[LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP,
|
||||
[LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH,
|
||||
[LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK,
|
||||
[LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD,
|
||||
[LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS
|
||||
};
|
||||
|
||||
static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}");
|
||||
+2
-2
@@ -2752,8 +2752,8 @@ static void Task_RfuReconnectWithParent(u8 taskId)
|
||||
if (TryReconnectParent())
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else if (GetHostRfuGameData()->activity == ACTIVITY_WCARD2
|
||||
|| GetHostRfuGameData()->activity == ACTIVITY_WNEWS2)
|
||||
else if (GetHostRfuGameData()->activity == ACTIVITY_WONDER_CARD
|
||||
|| GetHostRfuGameData()->activity == ACTIVITY_WONDER_NEWS)
|
||||
{
|
||||
tTime++;
|
||||
}
|
||||
|
||||
+9
-9
@@ -263,7 +263,7 @@ static void Task_EReaderComm(u8 taskId)
|
||||
switch (data->state)
|
||||
{
|
||||
case 0:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader))
|
||||
data->state = 1;
|
||||
break;
|
||||
case 1:
|
||||
@@ -285,7 +285,7 @@ static void Task_EReaderComm(u8 taskId)
|
||||
data->state = 13;
|
||||
break;
|
||||
case 4:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu))
|
||||
{
|
||||
AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA);
|
||||
ResetDelayTimer(&data->stateAdvanceDelay);
|
||||
@@ -334,7 +334,7 @@ static void Task_EReaderComm(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_LinkIsIncorrect))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_LinkIsIncorrect))
|
||||
data->state = 4;
|
||||
break;
|
||||
case 8:
|
||||
@@ -451,19 +451,19 @@ static void Task_EReaderComm(u8 taskId)
|
||||
data->state = 26;
|
||||
break;
|
||||
case 23:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted))
|
||||
data->state = 26;
|
||||
break;
|
||||
case 20:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink))
|
||||
data->state = 0;
|
||||
break;
|
||||
case 21:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain))
|
||||
data->state = 0;
|
||||
break;
|
||||
case 22:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData))
|
||||
data->state = 0;
|
||||
break;
|
||||
case 26:
|
||||
@@ -943,12 +943,12 @@ u16 MEvent_GetBattleCardCount(u32 command)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ResetReceivedWonderCardFlag(void)
|
||||
void MysteryGift_DisableStats(void)
|
||||
{
|
||||
sReceivedWonderCardIsValid = FALSE;
|
||||
}
|
||||
|
||||
bool32 MEventHandleReceivedWonderCard(u16 flagId)
|
||||
bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId)
|
||||
{
|
||||
sReceivedWonderCardIsValid = FALSE;
|
||||
if (flagId == 0)
|
||||
|
||||
+24
-45
@@ -540,7 +540,7 @@ void ClearTextWindow(void)
|
||||
CopyWindowToVram(1, COPYWIN_MAP);
|
||||
}
|
||||
|
||||
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str)
|
||||
bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str)
|
||||
{
|
||||
switch (*textState)
|
||||
{
|
||||
@@ -650,7 +650,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu)
|
||||
return response;
|
||||
}
|
||||
|
||||
s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str)
|
||||
s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str)
|
||||
{
|
||||
struct WindowTemplate windowTemplate;
|
||||
s8 input;
|
||||
@@ -878,25 +878,17 @@ bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1)
|
||||
s32 mevent_message_prompt_discard(u8 * textState, u16 * windowId, bool32 cardOrNews)
|
||||
{
|
||||
if (cardOrNews == 0)
|
||||
{
|
||||
return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen);
|
||||
}
|
||||
return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen);
|
||||
else
|
||||
{
|
||||
return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_OkayToDiscardNews);
|
||||
}
|
||||
return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_OkayToDiscardNews);
|
||||
}
|
||||
|
||||
bool32 mevent_message_was_thrown_away(u8 * textState, bool32 cardOrNews)
|
||||
{
|
||||
if (cardOrNews == 0)
|
||||
{
|
||||
return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderCardThrownAway);
|
||||
}
|
||||
return PrintMysteryGiftMenuMessage(textState, gText_WonderCardThrownAway);
|
||||
else
|
||||
{
|
||||
return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderNewsThrownAway);
|
||||
}
|
||||
return PrintMysteryGiftMenuMessage(textState, gText_WonderNewsThrownAway);
|
||||
}
|
||||
|
||||
bool32 mevent_save_game(u8 * state)
|
||||
@@ -1098,7 +1090,7 @@ static bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId)
|
||||
}
|
||||
else
|
||||
{
|
||||
return MG_PrintTextOnWindow1AndWaitButton(state, str);
|
||||
return PrintMysteryGiftMenuMessage(state, str);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1165,7 +1157,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
{
|
||||
if (data->IsCardOrNews == 0)
|
||||
{
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveCardNewOneInput))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveCardNewOneInput))
|
||||
{
|
||||
data->state = 3;
|
||||
PrintMysteryGiftOrEReaderTopMenu(0, 1);
|
||||
@@ -1173,7 +1165,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveNewsNewOneInput))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveNewsNewOneInput))
|
||||
{
|
||||
data->state = 3;
|
||||
PrintMysteryGiftOrEReaderTopMenu(0, 1);
|
||||
@@ -1228,23 +1220,15 @@ void task00_mystery_gift(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
if (data->source == 1)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WCARD2);
|
||||
}
|
||||
CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_CARD);
|
||||
else if (data->source == 0)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WCARD2);
|
||||
}
|
||||
CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_CARD);
|
||||
break;
|
||||
case 1:
|
||||
if (data->source == 1)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WNEWS2);
|
||||
}
|
||||
CreateTask_LinkMysteryGiftWithFriend(ACTIVITY_WONDER_NEWS);
|
||||
else if (data->source == 0)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WNEWS2);
|
||||
}
|
||||
CreateTask_LinkMysteryGiftOverWireless(ACTIVITY_WONDER_NEWS);
|
||||
break;
|
||||
}
|
||||
data->state = 6;
|
||||
@@ -1291,7 +1275,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer());
|
||||
flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer());
|
||||
switch (flag)
|
||||
{
|
||||
case 0:
|
||||
@@ -1312,14 +1296,14 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer()))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, mevent_client_get_buffer()))
|
||||
{
|
||||
mevent_client_inc_flag();
|
||||
data->state = 7;
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard);
|
||||
flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard);
|
||||
switch (flag)
|
||||
{
|
||||
case 0:
|
||||
@@ -1347,7 +1331,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift);
|
||||
flag = DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift);
|
||||
switch (flag)
|
||||
{
|
||||
case 0:
|
||||
@@ -1387,17 +1371,12 @@ void task00_mystery_gift(u8 taskId)
|
||||
case 15:
|
||||
r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId);
|
||||
if (r1 == NULL)
|
||||
{
|
||||
r1 = data->buffer;
|
||||
}
|
||||
if (sp0)
|
||||
{
|
||||
flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId);
|
||||
}
|
||||
else
|
||||
{
|
||||
flag = MG_PrintTextOnWindow1AndWaitButton(&data->textState, r1);
|
||||
}
|
||||
flag = PrintMysteryGiftMenuMessage(&data->textState, r1);
|
||||
|
||||
if (flag)
|
||||
{
|
||||
if (data->prevPromptWindowId == 3)
|
||||
@@ -1423,7 +1402,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError))
|
||||
{
|
||||
data->state = 0;
|
||||
PrintMysteryGiftOrEReaderTopMenu(0, 0);
|
||||
@@ -1536,7 +1515,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 23:
|
||||
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard))
|
||||
switch ((u32)DoMysteryGiftYesNo(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard))
|
||||
{
|
||||
case 0:
|
||||
data->state = 24;
|
||||
@@ -1587,10 +1566,10 @@ void task00_mystery_gift(u8 taskId)
|
||||
switch (data->IsCardOrNews)
|
||||
{
|
||||
case 0:
|
||||
MEvent_CreateTask_Leader(ACTIVITY_WCARD2);
|
||||
CreateTask_SendMysteryGift(ACTIVITY_WONDER_CARD);
|
||||
break;
|
||||
case 1:
|
||||
MEvent_CreateTask_Leader(ACTIVITY_WNEWS2);
|
||||
CreateTask_SendMysteryGift(ACTIVITY_WONDER_NEWS);
|
||||
break;
|
||||
}
|
||||
data->source = 1;
|
||||
@@ -1660,7 +1639,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 36:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError))
|
||||
{
|
||||
data->state = 0;
|
||||
PrintMysteryGiftOrEReaderTopMenu(0, 0);
|
||||
|
||||
+1
-1
@@ -3877,7 +3877,7 @@ static void CursorCB_Trade1(u8 taskId)
|
||||
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL);
|
||||
u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal);
|
||||
u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal);
|
||||
|
||||
if (stringId != UR_TRADE_MSG_NONE)
|
||||
{
|
||||
|
||||
+20
-20
@@ -10,7 +10,7 @@
|
||||
#include "constants/union_room.h"
|
||||
#include "constants/event_objects.h"
|
||||
|
||||
static EWRAM_DATA struct UnionObj * UnionObjWork = NULL;
|
||||
static EWRAM_DATA struct UnionRoomObject * UnionObjWork = NULL;
|
||||
static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
|
||||
|
||||
static u8 StartUnionObjAnimTask(void);
|
||||
@@ -212,7 +212,7 @@ static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u8 ZeroUnionObjWork(struct UnionObj * ptr)
|
||||
u8 ZeroUnionObjWork(struct UnionRoomObject * ptr)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -234,7 +234,7 @@ static const u8 sMovement_UnionPlayerExit[2] = {
|
||||
MOVEMENT_ACTION_STEP_END
|
||||
};
|
||||
|
||||
static bool32 AnimateUnionRoomPlayerDespawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr)
|
||||
static bool32 AnimateUnionRoomPlayerDespawn(s8 * a0, u32 playerIdx, struct UnionRoomObject * ptr)
|
||||
{
|
||||
switch (*a0)
|
||||
{
|
||||
@@ -263,7 +263,7 @@ static const u8 sMovement_UnionPlayerEnter[2] = {
|
||||
MOVEMENT_ACTION_STEP_END
|
||||
};
|
||||
|
||||
static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionObj * ptr)
|
||||
static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionRoomObject * ptr)
|
||||
{
|
||||
s16 x, y;
|
||||
|
||||
@@ -308,7 +308,7 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct Un
|
||||
|
||||
static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256)
|
||||
{
|
||||
struct UnionObj * ptr = &UnionObjWork[playerIdx];
|
||||
struct UnionRoomObject * ptr = &UnionObjWork[playerIdx];
|
||||
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561)
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_IN;
|
||||
ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256);
|
||||
@@ -324,7 +324,7 @@ static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256)
|
||||
|
||||
static bool32 DespawnGroupLeader(u32 playerIdx)
|
||||
{
|
||||
struct UnionObj * ptr = &UnionObjWork[playerIdx];
|
||||
struct UnionRoomObject * ptr = &UnionObjWork[playerIdx];
|
||||
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577)
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
|
||||
if (ptr->state == 1)
|
||||
@@ -337,7 +337,7 @@ static bool32 DespawnGroupLeader(u32 playerIdx)
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
|
||||
static void AnimateUnionObj(u32 playerIdx, struct UnionRoomObject * ptr)
|
||||
{
|
||||
switch (ptr->state)
|
||||
{
|
||||
@@ -418,7 +418,7 @@ static void DestroyAnimateUnionObjsTask(void)
|
||||
}
|
||||
}
|
||||
|
||||
void DeleteUnionObjWorkAndStopTask(void)
|
||||
void DestroyUnionRoomPlayerObjects(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 8; i++)
|
||||
@@ -577,30 +577,30 @@ static void DespawnGroupLeaderAndMembers(u32 group, struct RfuGameData * gname)
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom * groups)
|
||||
static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom * groups)
|
||||
{
|
||||
s32 i;
|
||||
struct UnkStruct_x20 * x20_p;
|
||||
struct RfuPlayer * x20_p;
|
||||
sUnionObjRefreshTimer = 0;
|
||||
for (i = 0, x20_p = groups->field_0->arr; i < 8; i++)
|
||||
for (i = 0, x20_p = groups->playerList->players; i < 8; i++)
|
||||
{
|
||||
if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
|
||||
{
|
||||
SpawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
|
||||
SpawnGroupLeaderAndMembers(i, &x20_p[i].rfu.data);
|
||||
}
|
||||
else if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
|
||||
{
|
||||
DespawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
|
||||
DespawnGroupLeaderAndMembers(i, &x20_p[i].rfu.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
|
||||
void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p)
|
||||
{
|
||||
sUnionObjRefreshTimer = 300;
|
||||
}
|
||||
|
||||
void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
|
||||
void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom_p)
|
||||
{
|
||||
if (++sUnionObjRefreshTimer > 300)
|
||||
{
|
||||
@@ -608,17 +608,17 @@ void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds)
|
||||
bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds)
|
||||
{
|
||||
s16 x, y;
|
||||
s32 i, j;
|
||||
struct UnkStruct_x20 * x20_p;
|
||||
struct RfuPlayer * x20_p;
|
||||
if (!is_walking_or_running())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
|
||||
for (i = 0, x20_p = main0_p->arr; i < 8; i++)
|
||||
for (i = 0, x20_p = main0_p->players; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
@@ -657,7 +657,7 @@ static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction)
|
||||
TurnVirtualObject(5 * group - 0x38 + member, direction);
|
||||
}
|
||||
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p)
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct RfuPlayerList *main0_p)
|
||||
{
|
||||
return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->arr[group].gname_uname.gname));
|
||||
return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->players[group].rfu.data));
|
||||
}
|
||||
|
||||
+1
-1
@@ -374,7 +374,7 @@ void Task_StartMenuHandleInput(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
if (InUnionRoom() == TRUE)
|
||||
var_800D_set_xB();
|
||||
SetUsingUnionRoomStartMenu();
|
||||
sStartMenuCallback = StartCB_HandleInput;
|
||||
data[0]++;
|
||||
break;
|
||||
|
||||
+4
-4
@@ -711,7 +711,7 @@ static void InitTradeMenuResources(void)
|
||||
}
|
||||
}
|
||||
|
||||
void CB2_ReturnFromLinkTrade(void)
|
||||
void CB2_StartCreateTradeMenu(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnFromLinkTrade2);
|
||||
}
|
||||
@@ -1208,7 +1208,7 @@ static void TradeMenuCB_10(void)
|
||||
|
||||
static void TradeMenuCB_13(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromLinkTrade;
|
||||
gMain.savedCallback = CB2_StartCreateTradeMenu;
|
||||
if (gWirelessCommType != 0)
|
||||
{
|
||||
if (IsLinkRfuTaskFinished())
|
||||
@@ -1218,7 +1218,7 @@ static void TradeMenuCB_13(void)
|
||||
Free(sTradeMenuResourcesPtr);
|
||||
gMain.callback1 = NULL;
|
||||
DestroyWirelessStatusIndicatorSprite();
|
||||
SetMainCallback2(CB2_InitTradeAnim_LinkTrade);
|
||||
SetMainCallback2(CB2_LinkTrade);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1229,7 +1229,7 @@ static void TradeMenuCB_13(void)
|
||||
FreeAllWindowBuffers();
|
||||
Free(sTradeMenuResourcesPtr);
|
||||
gMain.callback1 = NULL;
|
||||
SetMainCallback2(CB2_InitTradeAnim_LinkTrade);
|
||||
SetMainCallback2(CB2_LinkTrade);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -773,7 +773,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 action)
|
||||
}
|
||||
}
|
||||
|
||||
void CB2_InitTradeAnim_LinkTrade(void)
|
||||
void CB2_LinkTrade(void)
|
||||
{
|
||||
switch (gMain.state)
|
||||
{
|
||||
@@ -2668,7 +2668,7 @@ static void CB2_HandleTradeEnded(void)
|
||||
case 8:
|
||||
if (IsBGMStopped() == TRUE)
|
||||
{
|
||||
if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade)
|
||||
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
|
||||
{
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
@@ -2680,7 +2680,7 @@ static void CB2_HandleTradeEnded(void)
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade)
|
||||
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
|
||||
{
|
||||
if (IsLinkRfuTaskFinished())
|
||||
{
|
||||
|
||||
+1528
-1928
File diff suppressed because it is too large
Load Diff
@@ -121,29 +121,29 @@ static const u8 sCountParams[][3] = {
|
||||
// activity, count idx, by
|
||||
// by=0 means count all
|
||||
// UB: no check for count idx == -1
|
||||
{ACTIVITY_BATTLE, 1, 2},
|
||||
{ACTIVITY_DBLBATTLE, 1, 2},
|
||||
{ACTIVITY_MLTBATTLE, 1, 4},
|
||||
{ACTIVITY_TRADE, 0, 2},
|
||||
{ACTIVITY_WCARD2, 3, 2},
|
||||
{ACTIVITY_WNEWS2, 3, 2},
|
||||
{ACTIVITY_PJUMP, 4, 0},
|
||||
{ACTIVITY_BCRUSH, 4, 0},
|
||||
{ACTIVITY_BPICK, 4, 0},
|
||||
{ACTIVITY_SEARCH, -1, 0},
|
||||
{ACTIVITY_SPINTRADE, 0, 0},
|
||||
{ACTIVITY_ITEMTRADE, -1, 0},
|
||||
{0x0f, 4, 0},
|
||||
{0x10, -1, 0},
|
||||
{0x40, 2, 1},
|
||||
{ACTIVITY_BATTLE | 0x40, 2, 2},
|
||||
{ACTIVITY_TRADE | 0x40, 2, 2},
|
||||
{ACTIVITY_CHAT | 0x40, 2, 0},
|
||||
{ACTIVITY_CARD | 0x40, 2, 2},
|
||||
{20 | 0x40, 2, 1},
|
||||
{19 | 0x40, 2, 2},
|
||||
{ACTIVITY_ACCEPT | 0x40, 2, 1},
|
||||
{ACTIVITY_DECLINE | 0x40, 2, 1}
|
||||
{ACTIVITY_BATTLE_SINGLE, 1, 2},
|
||||
{ACTIVITY_BATTLE_DOUBLE, 1, 2},
|
||||
{ACTIVITY_BATTLE_MULTI, 1, 4},
|
||||
{ACTIVITY_TRADE, 0, 2},
|
||||
{ACTIVITY_WONDER_CARD, 3, 2},
|
||||
{ACTIVITY_WONDER_NEWS, 3, 2},
|
||||
{ACTIVITY_POKEMON_JUMP, 4, 0},
|
||||
{ACTIVITY_BERRY_CRUSH, 4, 0},
|
||||
{ACTIVITY_BERRY_PICK, 4, 0},
|
||||
{ACTIVITY_SEARCH, -1, 0},
|
||||
{ACTIVITY_SPIN_TRADE, 0, 0},
|
||||
{ACTIVITY_ITEM_TRADE, -1, 0},
|
||||
{ACTIVITY_RECORD_CORNER, 4, 0},
|
||||
{ACTIVITY_BERRY_BLENDER, -1, 0},
|
||||
{ACTIVITY_NONE | IN_UNION_ROOM, 2, 1},
|
||||
{ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, 2, 2},
|
||||
{ACTIVITY_TRADE | IN_UNION_ROOM, 2, 2},
|
||||
{ACTIVITY_CHAT | IN_UNION_ROOM, 2, 0},
|
||||
{ACTIVITY_CARD | IN_UNION_ROOM, 2, 2},
|
||||
{ACTIVITY_PLYRTALK | IN_UNION_ROOM, 2, 1},
|
||||
{ACTIVITY_NPCTALK | IN_UNION_ROOM, 2, 2},
|
||||
{ACTIVITY_ACCEPT | IN_UNION_ROOM, 2, 1},
|
||||
{ACTIVITY_DECLINE | IN_UNION_ROOM, 2, 1}
|
||||
};
|
||||
|
||||
static void CB2_RunWirelessCommunicationScreen(void)
|
||||
@@ -352,9 +352,9 @@ static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *
|
||||
AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, -1, str);
|
||||
}
|
||||
|
||||
static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts)
|
||||
static u32 CountMembersInGroup(struct RfuPlayer * unk20, u32 * counts)
|
||||
{
|
||||
u32 activity = unk20->gname_uname.gname.activity;
|
||||
u32 activity = unk20->rfu.data.activity;
|
||||
s32 i, j, k;
|
||||
|
||||
for (i = 0; i < NELEMS(sCountParams); i++)
|
||||
@@ -366,7 +366,7 @@ static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts)
|
||||
k = 0;
|
||||
for (j = 0; j < RFU_CHILD_MAX; j++)
|
||||
{
|
||||
if (unk20->gname_uname.gname.partnerInfo[j] != 0) k++;
|
||||
if (unk20->rfu.data.partnerInfo[j] != 0) k++;
|
||||
}
|
||||
k++;
|
||||
counts[sCountParams[i][1]] += k;
|
||||
@@ -398,12 +398,12 @@ static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * ac
|
||||
{
|
||||
bool32 activitiesUpdated = FALSE;
|
||||
u32 buffer[4] = {0, 0, 0, 0};
|
||||
struct UnkStruct_Group * group = (void *)gTasks[taskId].data;
|
||||
struct WirelessLink_Group * group = (void *)gTasks[taskId].data;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
u32 activity = CountMembersInGroup(&group->field_0->arr[i], buffer);
|
||||
u32 activity = CountMembersInGroup(&group->playerList->players[i], buffer);
|
||||
if (activity != activities[i])
|
||||
{
|
||||
activities[i] = activity;
|
||||
|
||||
Reference in New Issue
Block a user