Merge branch 'master' into doc-fourisland
This commit is contained in:
-2528
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -3741,7 +3741,7 @@ _08056880: .4byte gFieldCallback
|
||||
_08056884: .4byte FieldCB_ReturnToFieldWirelessLink
|
||||
_08056888:
|
||||
ldr r1, _080568A0 @ =gFieldCallback
|
||||
ldr r0, _080568A4 @ =sub_807DDD0
|
||||
ldr r0, _080568A4 @ =FieldCB_ReturnToFieldWiredLink
|
||||
_0805688C:
|
||||
str r0, [r1]
|
||||
bl ScriptContext1_Init
|
||||
@@ -3751,7 +3751,7 @@ _0805688C:
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080568A0: .4byte gFieldCallback
|
||||
_080568A4: .4byte sub_807DDD0
|
||||
_080568A4: .4byte FieldCB_ReturnToFieldWiredLink
|
||||
thumb_func_end c2_8056854
|
||||
|
||||
thumb_func_start CB2_ReturnToFieldWithOpenMenu
|
||||
@@ -6809,7 +6809,7 @@ _080580F4: .4byte gUnknown_3000E80
|
||||
_080580F8: .4byte CableClub_EventScript_TooBusyToNotice
|
||||
_080580FC:
|
||||
adds r0, r2, 0
|
||||
bl sub_8081A34
|
||||
bl GetSeeingLinkPlayerCardMsg
|
||||
cmp r0, 0
|
||||
bne _08058110
|
||||
ldr r0, _0805810C @ =CableClub_EventScript_ReadTrainerCard
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
UnusedVarNeededToMatch
|
||||
@@ -1,15 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnknown_83C6AB0:: @ 83C6AB0
|
||||
.byte 0, 16, 11, 11, 2, 15
|
||||
.2byte 0x125
|
||||
|
||||
gUnknown_83C6AB8:: @ 83C6AB8
|
||||
.4byte gUnknown_841DF8B
|
||||
.4byte gUnknown_841DF92
|
||||
.4byte gUnknown_841DF99
|
||||
.4byte gUnknown_841DFA0
|
||||
+3
-3
@@ -38,12 +38,12 @@ gSpecials:: @ 815FD60
|
||||
def_special nullsub_75
|
||||
def_special TryBattleLinkup
|
||||
def_special TryTradeLinkup
|
||||
def_special sub_80810F4
|
||||
def_special TryRecordMixLinkup
|
||||
def_special CloseLink
|
||||
def_special EnterColosseumPlayerSpot
|
||||
def_special EnterTradeSeat
|
||||
def_special sub_80819B8
|
||||
def_special sub_808130C
|
||||
def_special Special_WiredCableClubTrade
|
||||
def_special Special_CableClub_AskSaveTheGame
|
||||
def_special nullsub_75
|
||||
def_special nullsub_75
|
||||
def_special nullsub_75
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
#define GUARD_BATTLE_RECORDS_H
|
||||
|
||||
void ClearPlayerLinkBattleRecords(void);
|
||||
void TryRecordLinkBattleOutcome(s32 battlerId);
|
||||
|
||||
#endif // GUARD_BATTLE_RECORDS_H
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
// Exported ROM declarations
|
||||
void sub_8081A90(u8 taskId);
|
||||
u8 sub_8081150(void);
|
||||
void sub_8081668(void);
|
||||
u8 CreateTask_ReestablishLinkInCableClubRoom(void);
|
||||
void CB2_ReturnFromCableClubBattle(void);
|
||||
|
||||
#endif //GUARD_CABLE_CLUB_H
|
||||
|
||||
@@ -1204,4 +1204,10 @@ extern const u8 EventScript_BagItemCanBeRegistered[];
|
||||
// fldeff_cut
|
||||
extern const u8 EventScript_FldEffCut[];
|
||||
|
||||
// cable_club
|
||||
extern const u8 CableClub_Text_WhenAllPlayersReadyAConfirmBCancel[];
|
||||
extern const u8 CableClub_Text_AwaitingLinkupBCancel[];
|
||||
extern const u8 CableClub_Text_StartLinkWithXPlayersAConfirmBCancel[];
|
||||
extern const u8 CableClub_Text_PleaseWaitBCancel[];
|
||||
|
||||
#endif //GUARD_EVENT_SCRIPTS_H
|
||||
|
||||
@@ -8,5 +8,6 @@ bool8 sub_8098238(const u8 *message);
|
||||
bool8 ShowFieldAutoScrollMessage(const u8 *message);
|
||||
void HideFieldMessageBox(void);
|
||||
bool8 IsFieldMessageBoxHidden(void);
|
||||
bool8 textbox_any_visible(void);
|
||||
|
||||
#endif // GUARD_FIELD_MESSAGE_BOX_H
|
||||
|
||||
+11
-1
@@ -77,6 +77,10 @@
|
||||
#define LINKTYPE_BATTLE_TOWER_50 0x2266
|
||||
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
|
||||
#define LINKTYPE_BATTLE_TOWER 0x2288
|
||||
#define LINKTYPE_0x3311 0x3311
|
||||
#define LINKTYPE_0x3322 0x3322
|
||||
#define LINKTYPE_0x4411 0x4411
|
||||
#define LINKTYPE_0x6601 0x6601
|
||||
|
||||
#define MASTER_HANDSHAKE 0x8FFF
|
||||
#define SLAVE_HANDSHAKE 0xB9A0
|
||||
@@ -199,6 +203,7 @@ extern u16 word_3002910[];
|
||||
extern bool8 gReceivedRemoteLinkPlayers;
|
||||
extern bool8 gLinkVSyncDisabled;
|
||||
extern u8 gWirelessCommType;
|
||||
extern struct LinkPlayer gLocalLinkPlayer;
|
||||
|
||||
extern u8 gShouldAdvanceLinkState;
|
||||
extern u16 gLinkPartnersHeldKeys[6];
|
||||
@@ -272,12 +277,17 @@ void ClearLinkCallback_2(void);
|
||||
void LinkRfu_SetRfuFuncToSend6600(void);
|
||||
void IntlConvertLinkPlayerName(struct LinkPlayer * linkPlayer);
|
||||
bool8 IsWirelessAdapterConnected(void);
|
||||
bool8 sub_800A474(u8 a0);
|
||||
bool8 sub_800A474(u8 blockRequestType);
|
||||
void LinkVSync(void);
|
||||
bool8 HandleLinkConnection(void);
|
||||
void PrepareLocalLinkPlayerBlock(void);
|
||||
void LinkPlayerFromBlock(u32 who);
|
||||
void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
|
||||
u8 sub_800A8D4(void);
|
||||
void sub_800AA24(void);
|
||||
void sub_800A900(u8 a0);
|
||||
u8 sub_800A8A4(void);
|
||||
void sub_800A9A4(void);
|
||||
void SetLocalLinkPlayerId(u8 playerId);
|
||||
|
||||
#endif // GUARD_LINK_H
|
||||
|
||||
@@ -177,6 +177,12 @@ void sub_805546C(u8 a0);
|
||||
bool32 sub_80582E0(void);
|
||||
bool32 sub_8058274(void);
|
||||
u8 GetCurrentMapBattleScene(void);
|
||||
void sub_8055DB8(void);
|
||||
void sub_8057F5C(void);
|
||||
void sub_8057F34(void);
|
||||
u32 sub_8057EC0(void);
|
||||
void sub_8057F70(void);
|
||||
void sub_8057F48(void);
|
||||
|
||||
extern u16 gHeldKeyCodeToSend;
|
||||
|
||||
|
||||
@@ -50,5 +50,6 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
|
||||
void sub_8110840(void *oldSave);
|
||||
void sub_8112F18(u8 windowId);
|
||||
bool8 sub_8111C2C(void);
|
||||
void Special_UpdateTrainerFansAfterLinkBattle(void);
|
||||
|
||||
#endif //GUARD_QUEST_LOG_H
|
||||
|
||||
@@ -1141,4 +1141,11 @@ extern const u8 gText_BestScore2[];
|
||||
extern const u8 gText_ExcellentsInARow[];
|
||||
extern const u8 gText_PkmnJumpRecords[];
|
||||
|
||||
// cable_club
|
||||
extern const u8 gUnknown_841DF82[];
|
||||
extern const u8 gUnknown_841DF8B[];
|
||||
extern const u8 gUnknown_841DF92[];
|
||||
extern const u8 gUnknown_841DF99[];
|
||||
extern const u8 gUnknown_841DFA0[];
|
||||
|
||||
#endif //GUARD_STRINGS_H
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "constants/trainer_card.h"
|
||||
|
||||
struct TrainerCard
|
||||
struct TrainerCardRSE
|
||||
{
|
||||
/*0x00*/ u8 gender;
|
||||
/*0x01*/ u8 stars;
|
||||
@@ -27,12 +27,17 @@ struct TrainerCard
|
||||
/*0x24*/ u32 money;
|
||||
/*0x28*/ u16 easyChatProfile[TRAINER_CARD_PROFILE_LENGTH];
|
||||
/*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
};
|
||||
|
||||
struct TrainerCard
|
||||
{
|
||||
/*0x00*/ struct TrainerCardRSE rse;
|
||||
/*0x38*/ u8 version;
|
||||
/*0x3A*/ bool16 hasAllFrontierSymbols;
|
||||
/*0x3C*/ u32 berryCrushPoints;
|
||||
/*0x40*/ u32 unionRoomNum;
|
||||
/*0x44*/ u32 berriesPicked;
|
||||
/*0x48*/ u32 jumpsInRow;
|
||||
/*0x48*/ u32 jumpsInRow;
|
||||
/*0x4C*/ bool8 shouldDrawStickers;
|
||||
/*0x4D*/ bool8 hasAllMons;
|
||||
/*0x4E*/ u8 monIconTint;
|
||||
|
||||
@@ -163,5 +163,6 @@ extern u16 gUnionRoomOfferedSpecies;
|
||||
extern u8 gUnionRoomRequestedMonType;
|
||||
|
||||
void StartUnionRoomBattle(u16 battleFlags);
|
||||
u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_H
|
||||
|
||||
+2
-2
@@ -120,7 +120,7 @@ SECTIONS {
|
||||
src/field_fadetransition.o(.text);
|
||||
src/field_screen_effect.o(.text);
|
||||
src/battle_setup.o(.text);
|
||||
asm/cable_club.o(.text);
|
||||
src/cable_club.o(.text);
|
||||
src/trainer_see.o(.text);
|
||||
src/wild_encounter.o(.text);
|
||||
asm/field_effect.o(.text);
|
||||
@@ -441,7 +441,7 @@ SECTIONS {
|
||||
data/field_weather.o(.rodata);
|
||||
src/field_screen_effect.o(.rodata);
|
||||
src/battle_setup.o(.rodata);
|
||||
data/cable_club.o(.rodata);
|
||||
src/cable_club.o(.rodata);
|
||||
src/trainer_see.o(.rodata);
|
||||
src/wild_encounter.o(.rodata);
|
||||
data/field_effect.o(.rodata);
|
||||
|
||||
@@ -419,7 +419,7 @@ void ClearPlayerLinkBattleRecords(void)
|
||||
|
||||
static void IncTrainerCardWinCount(s32 battlerId)
|
||||
{
|
||||
u16 *wins = &gTrainerCards[battlerId].linkBattleWins;
|
||||
u16 *wins = &gTrainerCards[battlerId].rse.linkBattleWins;
|
||||
(*wins)++;
|
||||
if (*wins > 9999)
|
||||
*wins = 9999;
|
||||
@@ -427,7 +427,7 @@ static void IncTrainerCardWinCount(s32 battlerId)
|
||||
|
||||
static void IncTrainerCardLossCount(s32 battlerId)
|
||||
{
|
||||
u16 *losses = &gTrainerCards[battlerId].linkBattleLosses;
|
||||
u16 *losses = &gTrainerCards[battlerId].rse.linkBattleLosses;
|
||||
(*losses)++;
|
||||
if (*losses > 9999)
|
||||
*losses = 9999;
|
||||
@@ -453,7 +453,7 @@ void TryRecordLinkBattleOutcome(s32 battlerId)
|
||||
if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(UNION_ROOM) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(UNION_ROOM))
|
||||
{
|
||||
UpdateBattleOutcomeOnTrainerCards(battlerId);
|
||||
AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].playerName, gTrainerCards[battlerId].trainerId, gBattleOutcome, gLinkPlayers[battlerId].language);
|
||||
AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].rse.playerName, gTrainerCards[battlerId].rse.trainerId, gBattleOutcome, gLinkPlayers[battlerId].language);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,964 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "battle.h"
|
||||
#include "battle_records.h"
|
||||
#include "cable_club.h"
|
||||
#include "event_data.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_message_box.h"
|
||||
#include "field_weather.h"
|
||||
#include "link.h"
|
||||
#include "load_save.h"
|
||||
#include "m4a.h"
|
||||
#include "mevent.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "overworld.h"
|
||||
#include "quest_log.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "start_menu.h"
|
||||
#include "strings.h"
|
||||
#include "task.h"
|
||||
#include "trade.h"
|
||||
#include "trainer_card.h"
|
||||
#include "union_room.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/cable_club.h"
|
||||
#include "constants/field_weather.h"
|
||||
|
||||
u32 UnusedVarNeededToMatch[8];
|
||||
|
||||
static void Task_Linkup0(u8 taskId);
|
||||
static void Task_Linkup1(u8 taskId);
|
||||
static void Task_LinkupMaster_2(u8 taskId);
|
||||
static void Task_LinkupMaster_3(u8 taskId);
|
||||
static void Task_LinkupMaster_4(u8 taskId);
|
||||
static void Task_LinkupMaster_5(u8 taskId);
|
||||
static void Task_LinkupSlave_2(u8 taskId);
|
||||
static void Task_LinkupMaster_6(u8 taskId);
|
||||
static void Task_Linkup_6a(u8 taskId);
|
||||
static void Task_Linkup_7(u8 taskId);
|
||||
static void Task_Linkup_Canceled(u8 taskId);
|
||||
static void Task_Linkup_ErroredOut(u8 taskId);
|
||||
static bool8 Task_Linkup_TimedOut(u8 taskId);
|
||||
static void Task_ReestablishLinkInCableClubRoom_0(u8 taskId);
|
||||
static void Task_ReestablishLinkInCableClubRoom_1(u8 taskId);
|
||||
static void Task_ReestablishLinkInCableClubRoom_Master(u8 taskId);
|
||||
static void Task_ReestablishLinkInCableClubRoom_2(u8 taskId);
|
||||
|
||||
static const struct WindowTemplate gUnknown_83C6AB0 = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 16,
|
||||
.tilemapTop = 11,
|
||||
.width = 11,
|
||||
.height = 2,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x125
|
||||
};
|
||||
|
||||
static const u8 *const sStarsMessagePtrs[] = {
|
||||
gUnknown_841DF8B,
|
||||
gUnknown_841DF92,
|
||||
gUnknown_841DF99,
|
||||
gUnknown_841DFA0
|
||||
};
|
||||
|
||||
static void CreateLinkupTask(u8 lower, u8 higher)
|
||||
{
|
||||
u8 taskId;
|
||||
if (FindTaskIdByFunc(Task_Linkup0) == 0xFF)
|
||||
{
|
||||
taskId = CreateTask(Task_Linkup0, 80);
|
||||
gTasks[taskId].data[1] = lower;
|
||||
gTasks[taskId].data[2] = higher;
|
||||
}
|
||||
}
|
||||
|
||||
static void PrintNewCountOnLinkPlayerCountDisplayWindow(u16 windowId, s32 num)
|
||||
{
|
||||
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEFT_ALIGN, 1);
|
||||
SetStdWindowBorderStyle(windowId, FALSE);
|
||||
StringExpandPlaceholders(gStringVar4, gUnknown_841DF82);
|
||||
AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 0, TEXT_SPEED_FF, NULL);
|
||||
CopyWindowToVram(windowId, 3);
|
||||
}
|
||||
|
||||
static void DestroyLinkPlayerCountDisplayWindow(u16 windowId)
|
||||
{
|
||||
ClearStdWindowAndFrame(windowId, FALSE);
|
||||
CopyWindowToVram(windowId, 3);
|
||||
}
|
||||
|
||||
static void UpdateLinkPlayerCountDisplay(u8 taskId, u8 num)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (num != data[3])
|
||||
{
|
||||
if (num < 2)
|
||||
DestroyLinkPlayerCountDisplayWindow(data[5]);
|
||||
else
|
||||
PrintNewCountOnLinkPlayerCountDisplayWindow(data[5], num);
|
||||
data[3] = num;
|
||||
}
|
||||
}
|
||||
|
||||
static u16 sub_8080844(u8 lower, u8 higher)
|
||||
{
|
||||
switch (GetLinkPlayerDataExchangeStatusTimed(lower, higher))
|
||||
{
|
||||
case EXCHANGE_COMPLETE:
|
||||
return 1;
|
||||
case EXCHANGE_IN_PROGRESS:
|
||||
return 3;
|
||||
case EXCHANGE_STAT_4:
|
||||
return 7;
|
||||
case EXCHANGE_STAT_5:
|
||||
return 9;
|
||||
case EXCHANGE_STAT_6:
|
||||
ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1);
|
||||
return 4;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 sub_80808BC(u8 taskId)
|
||||
{
|
||||
if (HasLinkErrorOccurred() == TRUE)
|
||||
{
|
||||
gTasks[taskId].func = Task_Linkup_ErroredOut;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 sub_80808F0(u8 taskId)
|
||||
{
|
||||
if (JOY_NEW(B_BUTTON) && !IsLinkConnectionEstablished())
|
||||
{
|
||||
gLinkType = 0;
|
||||
gTasks[taskId].func = Task_Linkup_Canceled;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 sub_808093C(u8 taskId)
|
||||
{
|
||||
if (IsLinkConnectionEstablished())
|
||||
{
|
||||
SetSuppressLinkErrorMessage(TRUE);
|
||||
}
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
gLinkType = 0;
|
||||
gTasks[taskId].func = Task_Linkup_Canceled;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 sub_8080990(u8 taskId)
|
||||
{
|
||||
if (GetSioMultiSI() == TRUE)
|
||||
{
|
||||
gTasks[taskId].func = Task_Linkup_ErroredOut;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80809C4(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
if (gTasks[taskId].data[0] == 10)
|
||||
{
|
||||
sub_800A474(2);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_Linkup0(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (data[0] == 0)
|
||||
{
|
||||
OpenLinkTimed();
|
||||
sub_800AA24();
|
||||
ResetLinkPlayers();
|
||||
data[5] = AddWindow(&gUnknown_83C6AB0);
|
||||
}
|
||||
else if (data[0] > 9)
|
||||
{
|
||||
gTasks[taskId].func = Task_Linkup1;
|
||||
}
|
||||
data[0]++;
|
||||
}
|
||||
|
||||
static void Task_Linkup1(u8 taskId)
|
||||
{
|
||||
u8 linkPlayerCount = GetLinkPlayerCount_2();
|
||||
if (sub_80808F0(taskId) != TRUE && sub_808093C(taskId) != TRUE && linkPlayerCount >= 2)
|
||||
{
|
||||
SetSuppressLinkErrorMessage(TRUE);
|
||||
gTasks[taskId].data[3] = 0;
|
||||
if (IsLinkMaster() == TRUE)
|
||||
{
|
||||
PlaySE(SE_PIN);
|
||||
ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel);
|
||||
gTasks[taskId].func = Task_LinkupMaster_2;
|
||||
}
|
||||
else
|
||||
{
|
||||
PlaySE(SE_BOO);
|
||||
ShowFieldAutoScrollMessage(CableClub_Text_AwaitingLinkupBCancel);
|
||||
gTasks[taskId].func = Task_LinkupSlave_2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkupMaster_2(u8 taskId)
|
||||
{
|
||||
if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible())
|
||||
{
|
||||
gTasks[taskId].data[3] = 0;
|
||||
gTasks[taskId].func = Task_LinkupMaster_3;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkupMaster_3(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s32 linkPlayerCount = GetLinkPlayerCount_2();
|
||||
if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE)
|
||||
{
|
||||
UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount);
|
||||
if (JOY_NEW(A_BUTTON) && linkPlayerCount >= data[1])
|
||||
{
|
||||
sub_800A900(linkPlayerCount);
|
||||
DestroyLinkPlayerCountDisplayWindow(data[5]);
|
||||
ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1);
|
||||
ShowFieldAutoScrollMessage(CableClub_Text_StartLinkWithXPlayersAConfirmBCancel);
|
||||
gTasks[taskId].func = Task_LinkupMaster_4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkupMaster_4(u8 taskId)
|
||||
{
|
||||
if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible())
|
||||
{
|
||||
if (GetSavedPlayerCount() != GetLinkPlayerCount_2())
|
||||
{
|
||||
ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel);
|
||||
gTasks[taskId].func = Task_LinkupMaster_2;
|
||||
}
|
||||
else if (JOY_HELD(B_BUTTON))
|
||||
{
|
||||
ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel);
|
||||
gTasks[taskId].func = Task_LinkupMaster_2;
|
||||
}
|
||||
else if (JOY_HELD(A_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
CheckShouldAdvanceLinkState();
|
||||
gTasks[taskId].func = Task_LinkupMaster_5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkupMaster_5(u8 taskId)
|
||||
{
|
||||
u8 lower = gTasks[taskId].data[1];
|
||||
u8 higher = gTasks[taskId].data[2];
|
||||
u16 *res;
|
||||
if (sub_80808BC(taskId) != TRUE && Task_Linkup_TimedOut(taskId) != TRUE)
|
||||
{
|
||||
if (GetLinkPlayerCount_2() != GetSavedPlayerCount())
|
||||
{
|
||||
gTasks[taskId].func = Task_Linkup_ErroredOut;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = &gSpecialVar_Result;
|
||||
*res = sub_8080844(lower, higher);
|
||||
if (*res)
|
||||
gTasks[taskId].func = Task_LinkupMaster_6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkupSlave_2(u8 taskId)
|
||||
{
|
||||
u8 lower = gTasks[taskId].data[1];
|
||||
u8 higher = gTasks[taskId].data[2];
|
||||
u16 *res;
|
||||
if (sub_80808F0(taskId) != TRUE && sub_80808BC(taskId) != TRUE)
|
||||
{
|
||||
res = &gSpecialVar_Result;
|
||||
*res = sub_8080844(lower, higher);
|
||||
if (*res)
|
||||
{
|
||||
if (*res == 3 || *res == 4)
|
||||
{
|
||||
Link_TryStartSend5FFF();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_Linkup_7;
|
||||
}
|
||||
else if (*res == 7 || *res == 9)
|
||||
{
|
||||
CloseLink();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_Linkup_7;
|
||||
}
|
||||
else
|
||||
{
|
||||
gFieldLinkPlayerCount = GetLinkPlayerCount_2();
|
||||
gLocalLinkPlayerId = GetMultiplayerId();
|
||||
sub_800A900(gFieldLinkPlayerCount);
|
||||
TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer);
|
||||
gTasks[taskId].func = Task_Linkup_6a;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 AnyConnectedPartnersPlayingRS(void)
|
||||
{
|
||||
int i;
|
||||
u16 version;
|
||||
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
version = gLinkPlayers[i].version & 0xFF;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void Task_LinkupMaster_6(u8 taskId)
|
||||
{
|
||||
if (sub_80808BC(taskId) != TRUE)
|
||||
{
|
||||
if (gSpecialVar_Result == 4)
|
||||
{
|
||||
if (AnyConnectedPartnersPlayingRS() == TRUE)
|
||||
CloseLink();
|
||||
else
|
||||
Link_TryStartSend5FFF();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_Linkup_7;
|
||||
}
|
||||
else if (gSpecialVar_Result == 3)
|
||||
{
|
||||
Link_TryStartSend5FFF();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_Linkup_7;
|
||||
}
|
||||
else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9)
|
||||
{
|
||||
CloseLink();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_Linkup_7;
|
||||
}
|
||||
else
|
||||
{
|
||||
gFieldLinkPlayerCount = GetLinkPlayerCount_2();
|
||||
gLocalLinkPlayerId = GetMultiplayerId();
|
||||
sub_800A900(gFieldLinkPlayerCount);
|
||||
TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer);
|
||||
gTasks[taskId].func = Task_Linkup_6a;
|
||||
sub_800A474(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_Linkup_6a(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
u16 version;
|
||||
u8 * dest;
|
||||
if (sub_80808BC(taskId) != TRUE && GetBlockReceivedStatus() == sub_800A8A4())
|
||||
{
|
||||
for(i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
version = gLinkPlayers[i].version & 0xFF;
|
||||
if (version != VERSION_FIRE_RED && version != VERSION_LEAF_GREEN)
|
||||
{
|
||||
const struct TrainerCardRSE * src = (const struct TrainerCardRSE *)gBlockRecvBuffer[i];
|
||||
gTrainerCards[i].rse = *src;
|
||||
gTrainerCards[i].version = gLinkPlayers[i].version;
|
||||
}
|
||||
else
|
||||
{
|
||||
const struct TrainerCard * src = (const struct TrainerCard *)gBlockRecvBuffer[i];
|
||||
gTrainerCards[i] = *src;
|
||||
}
|
||||
}
|
||||
SetSuppressLinkErrorMessage(FALSE);
|
||||
ResetBlockReceivedFlags();
|
||||
HideFieldMessageBox();
|
||||
if (gSpecialVar_Result == 1)
|
||||
{
|
||||
// Dumb trick required to match
|
||||
if (gLinkType == LINKTYPE_0x4411)
|
||||
*UnusedVarNeededToMatch += 0;
|
||||
DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]);
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
Link_TryStartSend5FFF();
|
||||
gTasks[taskId].func = Task_Linkup_7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_Linkup_7(u8 taskId)
|
||||
{
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]);
|
||||
EnableBothScriptContexts();
|
||||
RemoveWindow(gTasks[taskId].data[5]);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_Linkup_Canceled(u8 taskId)
|
||||
{
|
||||
gSpecialVar_Result = 5;
|
||||
DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]);
|
||||
HideFieldMessageBox();
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static void Task_Linkup_ErroredOut(u8 taskId)
|
||||
{
|
||||
gSpecialVar_Result = 6;
|
||||
DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]);
|
||||
HideFieldMessageBox();
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static bool8 Task_Linkup_TimedOut(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[4]++;
|
||||
if (gTasks[taskId].data[4] > 600)
|
||||
{
|
||||
gTasks[taskId].func = Task_Linkup_ErroredOut;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TryBattleLinkup(void)
|
||||
{
|
||||
u8 lower, higher;
|
||||
higher = lower = 2;
|
||||
switch (gSpecialVar_0x8004)
|
||||
{
|
||||
case USING_SINGLE_BATTLE:
|
||||
higher = lower = 2;
|
||||
gLinkType = LINKTYPE_SINGLE_BATTLE;
|
||||
break;
|
||||
case USING_DOUBLE_BATTLE:
|
||||
higher = lower = 2;
|
||||
gLinkType = LINKTYPE_DOUBLE_BATTLE;
|
||||
break;
|
||||
case USING_MULTI_BATTLE:
|
||||
higher = lower = 4;
|
||||
gLinkType = LINKTYPE_MULTI_BATTLE;
|
||||
break;
|
||||
}
|
||||
CreateLinkupTask(lower, higher);
|
||||
}
|
||||
|
||||
void TryTradeLinkup(void)
|
||||
{
|
||||
gLinkType = LINKTYPE_0x1133;
|
||||
gBattleTypeFlags = 0;
|
||||
CreateLinkupTask(2, 2);
|
||||
}
|
||||
|
||||
void TryRecordMixLinkup(void)
|
||||
{
|
||||
gSpecialVar_Result = 0;
|
||||
gLinkType = LINKTYPE_0x3311;
|
||||
gBattleTypeFlags = 0;
|
||||
CreateLinkupTask(2, 4);
|
||||
}
|
||||
|
||||
void sub_8081128(void)
|
||||
{
|
||||
gLinkType = LINKTYPE_0x6601;
|
||||
gBattleTypeFlags = 0;
|
||||
CreateLinkupTask(4, 4);
|
||||
}
|
||||
|
||||
u8 CreateTask_ReestablishLinkInCableClubRoom(void)
|
||||
{
|
||||
if (FuncIsActiveTask(Task_ReestablishLinkInCableClubRoom_0))
|
||||
return 0xFF;
|
||||
switch (gSpecialVar_0x8004)
|
||||
{
|
||||
case USING_SINGLE_BATTLE:
|
||||
gLinkType = LINKTYPE_SINGLE_BATTLE;
|
||||
break;
|
||||
case USING_DOUBLE_BATTLE:
|
||||
gLinkType = LINKTYPE_DOUBLE_BATTLE;
|
||||
break;
|
||||
case USING_MULTI_BATTLE:
|
||||
gLinkType = LINKTYPE_MULTI_BATTLE;
|
||||
break;
|
||||
case USING_TRADE_CENTER:
|
||||
gLinkType = LINKTYPE_0x1111;
|
||||
break;
|
||||
case USING_RECORD_CORNER:
|
||||
gLinkType = LINKTYPE_0x3322;
|
||||
break;
|
||||
}
|
||||
return CreateTask(Task_ReestablishLinkInCableClubRoom_0, 80);
|
||||
}
|
||||
|
||||
static void Task_ReestablishLinkInCableClubRoom_0(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (data[0] == 0)
|
||||
{
|
||||
OpenLink();
|
||||
ResetLinkPlayers();
|
||||
CreateTask(sub_8081A90, 80);
|
||||
}
|
||||
else if (data[0] > 9)
|
||||
gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_1;
|
||||
data[0]++;
|
||||
}
|
||||
|
||||
static void Task_ReestablishLinkInCableClubRoom_1(u8 taskId)
|
||||
{
|
||||
if (GetLinkPlayerCount_2() >= 2)
|
||||
{
|
||||
if (IsLinkMaster() == TRUE)
|
||||
{
|
||||
gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_Master;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ReestablishLinkInCableClubRoom_Master(u8 taskId)
|
||||
{
|
||||
if (GetSavedPlayerCount() == GetLinkPlayerCount_2())
|
||||
{
|
||||
CheckShouldAdvanceLinkState();
|
||||
gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_2;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ReestablishLinkInCableClubRoom_2(u8 taskId)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
|
||||
{
|
||||
sub_800A9A4();
|
||||
sub_8009FE8();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void Special_CableClub_AskSaveTheGame(void)
|
||||
{
|
||||
Field_AskSaveTheGame();
|
||||
}
|
||||
|
||||
static void Task_StartWiredCableClubBattle(u8 taskId)
|
||||
{
|
||||
struct Task * task = &gTasks[taskId];
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
gLinkType = LINKTYPE_BATTLE;
|
||||
ClearLinkCallback_2();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
if (!gPaletteFade.active)
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
task->data[1]++;
|
||||
if (task->data[1] > 20)
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 3:
|
||||
Link_TryStartSend5FFF();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 4:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 5:
|
||||
if (gLinkPlayers[0].trainerId & 1)
|
||||
PlayMapChosenOrBattleBGM(MUS_BATTLE32);
|
||||
else
|
||||
PlayMapChosenOrBattleBGM(MUS_BATTLE20);
|
||||
switch (gSpecialVar_0x8004)
|
||||
{
|
||||
case USING_SINGLE_BATTLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK;
|
||||
break;
|
||||
case USING_DOUBLE_BATTLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE;
|
||||
break;
|
||||
case USING_MULTI_BATTLE:
|
||||
ReducePlayerPartyToThree();
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI;
|
||||
break;
|
||||
}
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT;
|
||||
SetMainCallback2(CB2_InitBattle);
|
||||
gMain.savedCallback = CB2_ReturnFromCableClubBattle;
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_StartWirelessCableClubBattle(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
int i;
|
||||
switch (data[0])
|
||||
{
|
||||
case 0:
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
gLinkType = LINKTYPE_BATTLE;
|
||||
ClearLinkCallback_2();
|
||||
data[0] = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (!gPaletteFade.active)
|
||||
data[0] = 2;
|
||||
break;
|
||||
case 2:
|
||||
SendBlock(0, &gLocalLinkPlayer, sizeof(struct LinkPlayer));
|
||||
data[0] = 3;
|
||||
break;
|
||||
case 3:
|
||||
if (GetBlockReceivedStatus() == sub_800A8D4())
|
||||
{
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
gLinkPlayers[i] = *(struct LinkPlayer *)gBlockRecvBuffer[i];
|
||||
IntlConvertLinkPlayerName(&gLinkPlayers[i]);
|
||||
ResetBlockReceivedFlag(i);
|
||||
}
|
||||
data[0] = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
data[1]++;
|
||||
if (data[1] > 20)
|
||||
data[0] = 5;
|
||||
break;
|
||||
case 5:
|
||||
PrepareSendLinkCmd2FFE_or_RfuCmd6600();
|
||||
data[0] = 6;
|
||||
break;
|
||||
case 6:
|
||||
if (IsLinkTaskFinished())
|
||||
data[0] = 7;
|
||||
break;
|
||||
case 7:
|
||||
if (gLinkPlayers[0].trainerId & 1)
|
||||
PlayMapChosenOrBattleBGM(MUS_BATTLE32);
|
||||
else
|
||||
PlayMapChosenOrBattleBGM(MUS_BATTLE20);
|
||||
gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
|
||||
switch (gSpecialVar_0x8004)
|
||||
{
|
||||
case USING_SINGLE_BATTLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK;
|
||||
break;
|
||||
case USING_DOUBLE_BATTLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE;
|
||||
break;
|
||||
case USING_MULTI_BATTLE:
|
||||
ReducePlayerPartyToThree();
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI;
|
||||
break;
|
||||
}
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT;
|
||||
SetMainCallback2(CB2_InitBattle);
|
||||
gMain.savedCallback = CB2_ReturnFromCableClubBattle;
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8081624(void)
|
||||
{
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
Link_TryStartSend5FFF();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
if (IsLinkTaskFinished())
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CB2_ReturnFromCableClubBattle(void)
|
||||
{
|
||||
gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
|
||||
sub_8055DB8();
|
||||
LoadPlayerParty();
|
||||
SavePlayerBag();
|
||||
Special_UpdateTrainerFansAfterLinkBattle();
|
||||
if (gSpecialVar_0x8004 != USING_MULTI_BATTLE)
|
||||
{
|
||||
TryRecordLinkBattleOutcome(gLocalLinkPlayerId ^ 1);
|
||||
if (gWirelessCommType != 0)
|
||||
{
|
||||
switch (gBattleOutcome)
|
||||
{
|
||||
case B_OUTCOME_WON:
|
||||
MEvent_RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
break;
|
||||
case B_OUTCOME_LOST:
|
||||
MEvent_RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (InUnionRoom() == TRUE)
|
||||
{
|
||||
gMain.savedCallback = sub_8081624;
|
||||
}
|
||||
else
|
||||
{
|
||||
gMain.savedCallback = c2_8056854;
|
||||
}
|
||||
SetMainCallback2(CB2_SetUpSaveAfterLinkBattle);
|
||||
}
|
||||
|
||||
void CleanupLinkRoomState(void)
|
||||
{
|
||||
if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE || gSpecialVar_0x8004 == USING_MULTI_BATTLE)
|
||||
{
|
||||
LoadPlayerParty();
|
||||
SavePlayerBag();
|
||||
}
|
||||
copy_saved_warp2_bank_and_enter_x_to_warp1(127);
|
||||
}
|
||||
|
||||
void sub_8081770(void)
|
||||
{
|
||||
sub_8057F5C();
|
||||
}
|
||||
|
||||
static void Task_EnterCableClubSeat(u8 taskId)
|
||||
{
|
||||
struct Task * task = &gTasks[taskId];
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
ShowFieldMessage(CableClub_Text_PleaseWaitBCancel);
|
||||
task->data[0] = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (IsFieldMessageBoxHidden())
|
||||
{
|
||||
sub_8057F34();
|
||||
SetLocalLinkPlayerId(gSpecialVar_0x8005);
|
||||
task->data[0] = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
switch (sub_8057EC0())
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
HideFieldMessageBox();
|
||||
task->data[0] = 0;
|
||||
sub_8057F70();
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
case 2:
|
||||
task->data[0] = 3;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
sub_8057F48();
|
||||
sub_80F771C(TRUE);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateEnterCableClubSeatTaskWithFollowupFunc(TaskFunc followUpFunc)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_EnterCableClubSeat, 80);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followUpFunc);
|
||||
ScriptContext1_Stop();
|
||||
}
|
||||
|
||||
static void Task_StartWiredCableClubTrade(u8 taskId)
|
||||
{
|
||||
struct Task * task = &gTasks[taskId];
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
ScriptContext2_Enable();
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
ClearLinkCallback_2();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
if (!gPaletteFade.active)
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
gSelectedTradeMonPositions[0] = 0;
|
||||
gSelectedTradeMonPositions[1] = 0;
|
||||
m4aMPlayAllStop();
|
||||
Link_TryStartSend5FFF();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 3:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnFromLinkTrade);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_StartWirelessCableClubTrade(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
switch (data[0])
|
||||
{
|
||||
case 0:
|
||||
ScriptContext2_Enable();
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
Rfu_set_zero();
|
||||
data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
if (!gPaletteFade.active)
|
||||
data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
gSelectedTradeMonPositions[0] = 0;
|
||||
gSelectedTradeMonPositions[1] = 0;
|
||||
m4aMPlayAllStop();
|
||||
PrepareSendLinkCmd2FFE_or_RfuCmd6600();
|
||||
data[0]++;
|
||||
break;
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void EnterTradeSeat(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWirelessCableClubTrade);
|
||||
else
|
||||
CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWiredCableClubTrade);
|
||||
}
|
||||
|
||||
static void CreateTask_StartWiredCableClubTrade(void)
|
||||
{
|
||||
CreateTask(Task_StartWiredCableClubTrade, 80);
|
||||
}
|
||||
|
||||
void Special_WiredCableClubTrade(void)
|
||||
{
|
||||
CreateTask_StartWiredCableClubTrade();
|
||||
ScriptContext1_Stop();
|
||||
}
|
||||
|
||||
void EnterColosseumPlayerSpot(void)
|
||||
{
|
||||
gLinkType = LINKTYPE_BATTLE;
|
||||
if (gWirelessCommType)
|
||||
CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWirelessCableClubBattle);
|
||||
else
|
||||
CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWiredCableClubBattle);
|
||||
}
|
||||
|
||||
static void Debug_CreateTaskEnterCableClubSeat(void)
|
||||
{
|
||||
CreateTask(Task_EnterCableClubSeat, 80);
|
||||
ScriptContext1_Stop();
|
||||
}
|
||||
|
||||
void Script_ShowLinkTrainerCard(void)
|
||||
{
|
||||
ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
bool32 GetSeeingLinkPlayerCardMsg(u8 who)
|
||||
{
|
||||
u8 stars;
|
||||
gSpecialVar_0x8006 = who;
|
||||
StringCopy(gStringVar1, gLinkPlayers[who].name);
|
||||
stars = GetTrainerCardStars(who);
|
||||
if (stars == 0)
|
||||
return FALSE;
|
||||
StringCopy(gStringVar2, sStarsMessagePtrs[stars - 1]);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8081A90(u8 taskId)
|
||||
{
|
||||
struct Task * task = &gTasks[taskId];
|
||||
task->data[0]++;
|
||||
if (task->data[0] > 300)
|
||||
{
|
||||
CloseLink();
|
||||
SetMainCallback2(CB2_LinkError);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
static void sub_8081AE4(u8 taskId)
|
||||
{
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8081B08(u8 taskId)
|
||||
{
|
||||
Link_TryStartSend5FFF();
|
||||
gTasks[taskId].func = sub_8081AE4;
|
||||
}
|
||||
@@ -172,7 +172,7 @@ static void task_mpl_807DD60(u8 taskId)
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
task->data[1] = sub_8081150();
|
||||
task->data[1] = CreateTask_ReestablishLinkInCableClubRoom();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -192,7 +192,7 @@ static void task_mpl_807DD60(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807DDD0(void)
|
||||
void FieldCB_ReturnToFieldWiredLink(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
|
||||
+4
-4
@@ -796,7 +796,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
if (lower > cmpVal || cmpVal > upper)
|
||||
{
|
||||
sPlayerDataExchangeStatus = EXCHANGE_STAT_6;
|
||||
return 6;
|
||||
return EXCHANGE_STAT_6;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1006,15 +1006,15 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
|
||||
return InitBlockSend(src, size);
|
||||
}
|
||||
|
||||
bool8 sub_800A474(u8 a0)
|
||||
bool8 sub_800A474(u8 blockRequestType)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
return sub_80FA0F8(a0);
|
||||
return sub_80FA0F8(blockRequestType);
|
||||
}
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gBlockRequestType = a0;
|
||||
gBlockRequestType = blockRequestType;
|
||||
BuildSendCmd(LINKCMD_0xCCCC);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+126
-124
@@ -373,28 +373,30 @@ static const u8 sStarYOffsets[] = {7, 6, 0, 0};
|
||||
|
||||
static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 =
|
||||
{
|
||||
.gender = MALE,
|
||||
.stars = 4,
|
||||
.hasPokedex = TRUE,
|
||||
.caughtAllHoenn = TRUE,
|
||||
.hasAllPaintings = TRUE,
|
||||
.hofDebutHours = 999,
|
||||
.hofDebutMinutes = 59,
|
||||
.hofDebutSeconds = 59,
|
||||
.caughtMonsCount = 200,
|
||||
.trainerId = 0x6072,
|
||||
.playTimeHours = 999,
|
||||
.playTimeMinutes = 59,
|
||||
.linkBattleWins = 5535,
|
||||
.linkBattleLosses = 5535,
|
||||
.battleTowerWins = 5535,
|
||||
.battleTowerStraightWins = 5535,
|
||||
.contestsWithFriends = 55555,
|
||||
.pokeblocksWithFriends = 44444,
|
||||
.pokemonTrades = 33333,
|
||||
.money = 999999,
|
||||
.easyChatProfile = {0, 0, 0, 0},
|
||||
.playerName = _("あかみ どりお"),
|
||||
.rse = {
|
||||
.gender = MALE,
|
||||
.stars = 4,
|
||||
.hasPokedex = TRUE,
|
||||
.caughtAllHoenn = TRUE,
|
||||
.hasAllPaintings = TRUE,
|
||||
.hofDebutHours = 999,
|
||||
.hofDebutMinutes = 59,
|
||||
.hofDebutSeconds = 59,
|
||||
.caughtMonsCount = 200,
|
||||
.trainerId = 0x6072,
|
||||
.playTimeHours = 999,
|
||||
.playTimeMinutes = 59,
|
||||
.linkBattleWins = 5535,
|
||||
.linkBattleLosses = 5535,
|
||||
.battleTowerWins = 5535,
|
||||
.battleTowerStraightWins = 5535,
|
||||
.contestsWithFriends = 55555,
|
||||
.pokeblocksWithFriends = 44444,
|
||||
.pokemonTrades = 33333,
|
||||
.money = 999999,
|
||||
.easyChatProfile = {0, 0, 0, 0},
|
||||
.playerName = _("あかみ どりお")
|
||||
},
|
||||
.version = VERSION_FIRE_RED,
|
||||
.hasAllFrontierSymbols = FALSE,
|
||||
.berryCrushPoints = 5555,
|
||||
@@ -411,28 +413,30 @@ static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 =
|
||||
|
||||
static const struct TrainerCard sLinkPlayerTrainerCardTemplate2 =
|
||||
{
|
||||
.gender = FEMALE,
|
||||
.stars = 2,
|
||||
.hasPokedex = TRUE,
|
||||
.caughtAllHoenn = TRUE,
|
||||
.hasAllPaintings = TRUE,
|
||||
.hofDebutHours = 999,
|
||||
.hofDebutMinutes = 59,
|
||||
.hofDebutSeconds = 59,
|
||||
.caughtMonsCount = 200,
|
||||
.trainerId = 0x6072,
|
||||
.playTimeHours = 999,
|
||||
.playTimeMinutes = 59,
|
||||
.linkBattleWins = 5535,
|
||||
.linkBattleLosses = 5535,
|
||||
.battleTowerWins = 65535,
|
||||
.battleTowerStraightWins = 65535,
|
||||
.contestsWithFriends = 55555,
|
||||
.pokeblocksWithFriends = 44444,
|
||||
.pokemonTrades = 33333,
|
||||
.money = 999999,
|
||||
.easyChatProfile = {0, 0, 0, 0},
|
||||
.playerName = _("るびさふぁこ!"),
|
||||
.rse = {
|
||||
.gender = FEMALE,
|
||||
.stars = 2,
|
||||
.hasPokedex = TRUE,
|
||||
.caughtAllHoenn = TRUE,
|
||||
.hasAllPaintings = TRUE,
|
||||
.hofDebutHours = 999,
|
||||
.hofDebutMinutes = 59,
|
||||
.hofDebutSeconds = 59,
|
||||
.caughtMonsCount = 200,
|
||||
.trainerId = 0x6072,
|
||||
.playTimeHours = 999,
|
||||
.playTimeMinutes = 59,
|
||||
.linkBattleWins = 5535,
|
||||
.linkBattleLosses = 5535,
|
||||
.battleTowerWins = 65535,
|
||||
.battleTowerStraightWins = 65535,
|
||||
.contestsWithFriends = 55555,
|
||||
.pokeblocksWithFriends = 44444,
|
||||
.pokemonTrades = 33333,
|
||||
.money = 999999,
|
||||
.easyChatProfile = {0, 0, 0, 0},
|
||||
.playerName = _("るびさふぁこ!")
|
||||
},
|
||||
.version = 0,
|
||||
.hasAllFrontierSymbols = FALSE,
|
||||
.berryCrushPoints = 555,
|
||||
@@ -782,16 +786,16 @@ static u8 GetTrainerStarCount(struct TrainerCard *trainerCard)
|
||||
{
|
||||
u8 stars = 0;
|
||||
|
||||
if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)
|
||||
if (trainerCard->rse.hofDebutHours != 0 || trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0)
|
||||
stars++;
|
||||
|
||||
if (trainerCard->caughtAllHoenn)
|
||||
if (trainerCard->rse.caughtAllHoenn)
|
||||
stars++;
|
||||
|
||||
if (trainerCard->battleTowerStraightWins > 49)
|
||||
if (trainerCard->rse.battleTowerStraightWins > 49)
|
||||
stars++;
|
||||
|
||||
if (trainerCard->hasAllPaintings)
|
||||
if (trainerCard->rse.hasAllPaintings)
|
||||
stars++;
|
||||
|
||||
return stars;
|
||||
@@ -802,63 +806,63 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType)
|
||||
u32 playTime;
|
||||
u8 i;
|
||||
|
||||
trainerCard->gender = gSaveBlock2Ptr->playerGender;
|
||||
trainerCard->playTimeHours = gSaveBlock2Ptr->playTimeHours;
|
||||
trainerCard->playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes;
|
||||
trainerCard->rse.gender = gSaveBlock2Ptr->playerGender;
|
||||
trainerCard->rse.playTimeHours = gSaveBlock2Ptr->playTimeHours;
|
||||
trainerCard->rse.playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes;
|
||||
|
||||
playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME);
|
||||
if (!GetGameStat(GAME_STAT_ENTERED_HOF))
|
||||
playTime = 0;
|
||||
|
||||
trainerCard->hofDebutHours = playTime >> 16;
|
||||
trainerCard->hofDebutMinutes = (playTime >> 8) & 0xFF;
|
||||
trainerCard->hofDebutSeconds = playTime & 0xFF;
|
||||
trainerCard->rse.hofDebutHours = playTime >> 16;
|
||||
trainerCard->rse.hofDebutMinutes = (playTime >> 8) & 0xFF;
|
||||
trainerCard->rse.hofDebutSeconds = playTime & 0xFF;
|
||||
if ((playTime >> 16) > 999)
|
||||
{
|
||||
trainerCard->hofDebutHours = 999;
|
||||
trainerCard->hofDebutMinutes = 59;
|
||||
trainerCard->hofDebutSeconds = 59;
|
||||
trainerCard->rse.hofDebutHours = 999;
|
||||
trainerCard->rse.hofDebutMinutes = 59;
|
||||
trainerCard->rse.hofDebutSeconds = 59;
|
||||
}
|
||||
|
||||
trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET);
|
||||
trainerCard->caughtAllHoenn = HasAllHoennMons();
|
||||
trainerCard->caughtMonsCount = GetCaughtMonsCount();
|
||||
trainerCard->rse.hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET);
|
||||
trainerCard->rse.caughtAllHoenn = HasAllHoennMons();
|
||||
trainerCard->rse.caughtMonsCount = GetCaughtMonsCount();
|
||||
|
||||
trainerCard->trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0];
|
||||
trainerCard->rse.trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0];
|
||||
|
||||
trainerCard->linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999);
|
||||
trainerCard->linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999);
|
||||
trainerCard->pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF);
|
||||
trainerCard->rse.linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999);
|
||||
trainerCard->rse.linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999);
|
||||
trainerCard->rse.pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF);
|
||||
|
||||
trainerCard->battleTowerWins = 0;
|
||||
trainerCard->battleTowerStraightWins = 0;
|
||||
trainerCard->contestsWithFriends = 0;
|
||||
trainerCard->pokeblocksWithFriends = 0;
|
||||
trainerCard->rse.battleTowerWins = 0;
|
||||
trainerCard->rse.battleTowerStraightWins = 0;
|
||||
trainerCard->rse.contestsWithFriends = 0;
|
||||
trainerCard->rse.pokeblocksWithFriends = 0;
|
||||
|
||||
trainerCard->hasAllPaintings = FALSE;
|
||||
trainerCard->rse.hasAllPaintings = FALSE;
|
||||
|
||||
trainerCard->money = GetMoney(&gSaveBlock1Ptr->money);
|
||||
trainerCard->rse.money = GetMoney(&gSaveBlock1Ptr->money);
|
||||
|
||||
for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
|
||||
trainerCard->easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i];
|
||||
trainerCard->rse.easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i];
|
||||
|
||||
StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName);
|
||||
StringCopy(trainerCard->rse.playerName, gSaveBlock2Ptr->playerName);
|
||||
|
||||
if (cardType == CARD_TYPE_FRLG)
|
||||
{
|
||||
trainerCard->stars = GetTrainerStarCount(trainerCard);
|
||||
trainerCard->rse.stars = GetTrainerStarCount(trainerCard);
|
||||
}
|
||||
else if (cardType == CARD_TYPE_RSE)
|
||||
{
|
||||
trainerCard->stars = 0;
|
||||
if (trainerCard->hofDebutHours != 0 || (trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0))
|
||||
trainerCard->stars = cardType;
|
||||
trainerCard->rse.stars = 0;
|
||||
if (trainerCard->rse.hofDebutHours != 0 || (trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0))
|
||||
trainerCard->rse.stars = cardType;
|
||||
|
||||
if (HasAllKantoMons())
|
||||
trainerCard->stars++;
|
||||
trainerCard->rse.stars++;
|
||||
|
||||
if (HasAllMons())
|
||||
trainerCard->stars++;
|
||||
trainerCard->rse.stars++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -871,11 +875,11 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
|
||||
if (GetCardType() != CARD_TYPE_FRLG)
|
||||
return;
|
||||
|
||||
trainerCard->stars = id;
|
||||
if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)
|
||||
trainerCard->stars = 1;
|
||||
trainerCard->rse.stars = id;
|
||||
if (trainerCard->rse.hofDebutHours != 0 || trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0)
|
||||
trainerCard->rse.stars = 1;
|
||||
|
||||
trainerCard->caughtAllHoenn = HasAllKantoMons();
|
||||
trainerCard->rse.caughtAllHoenn = HasAllKantoMons();
|
||||
trainerCard->hasAllMons = HasAllMons();
|
||||
trainerCard->berriesPicked = gSaveBlock2Ptr->berryPick.berriesPicked;
|
||||
trainerCard->jumpsInRow = gSaveBlock2Ptr->pokeJump.jumpsInRow;
|
||||
@@ -884,17 +888,17 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
|
||||
trainerCard->unionRoomNum = GetCappedGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES, 0xFFFF);
|
||||
trainerCard->shouldDrawStickers = TRUE;
|
||||
|
||||
if (trainerCard->caughtAllHoenn)
|
||||
trainerCard->stars++;
|
||||
if (trainerCard->rse.caughtAllHoenn)
|
||||
trainerCard->rse.stars++;
|
||||
|
||||
if (trainerCard->hasAllMons)
|
||||
trainerCard->stars++;
|
||||
trainerCard->rse.stars++;
|
||||
|
||||
if (trainerCard->berriesPicked >= 200 && trainerCard->jumpsInRow >= 200)
|
||||
trainerCard->stars++;
|
||||
trainerCard->rse.stars++;
|
||||
|
||||
id = ((u16)trainerCard->trainerId) % NUM_LINK_TRAINER_CARD_CLASSES;
|
||||
if (trainerCard->gender == FEMALE)
|
||||
id = ((u16)trainerCard->rse.trainerId) % NUM_LINK_TRAINER_CARD_CLASSES;
|
||||
if (trainerCard->rse.gender == FEMALE)
|
||||
trainerCard->facilityClass = sLinkTrainerPicFacilityClasses[FEMALE][id];
|
||||
else
|
||||
trainerCard->facilityClass = sLinkTrainerPicFacilityClasses[MALE][id];
|
||||
@@ -927,18 +931,18 @@ static void SetDataFromTrainerCard(void)
|
||||
sTrainerCardDataPtr->hasTrades = FALSE;
|
||||
|
||||
memset(sTrainerCardDataPtr->hasBadge, FALSE, sizeof(sTrainerCardDataPtr->hasBadge));
|
||||
if (sTrainerCardDataPtr->trainerCard.hasPokedex)
|
||||
if (sTrainerCardDataPtr->trainerCard.rse.hasPokedex)
|
||||
sTrainerCardDataPtr->hasPokedex++;
|
||||
|
||||
if (sTrainerCardDataPtr->trainerCard.hofDebutHours != 0
|
||||
|| sTrainerCardDataPtr->trainerCard.hofDebutMinutes != 0
|
||||
|| sTrainerCardDataPtr->trainerCard.hofDebutSeconds != 0)
|
||||
if (sTrainerCardDataPtr->trainerCard.rse.hofDebutHours != 0
|
||||
|| sTrainerCardDataPtr->trainerCard.rse.hofDebutMinutes != 0
|
||||
|| sTrainerCardDataPtr->trainerCard.rse.hofDebutSeconds != 0)
|
||||
sTrainerCardDataPtr->hasHofResult++;
|
||||
|
||||
if (sTrainerCardDataPtr->trainerCard.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.linkBattleLosses != 0)
|
||||
if (sTrainerCardDataPtr->trainerCard.rse.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.rse.linkBattleLosses != 0)
|
||||
sTrainerCardDataPtr->hasLinkResults++;
|
||||
|
||||
if (sTrainerCardDataPtr->trainerCard.pokemonTrades != 0)
|
||||
if (sTrainerCardDataPtr->trainerCard.rse.pokemonTrades != 0)
|
||||
sTrainerCardDataPtr->hasTrades++;
|
||||
|
||||
for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++, i++)
|
||||
@@ -1133,7 +1137,7 @@ static void PrintNameOnCardFront(void)
|
||||
|
||||
txtPtr = StringCopy(buffer[0], gText_TrainerCardName);
|
||||
txtPtr = buffer[1];
|
||||
StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.playerName);
|
||||
StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.rse.playerName);
|
||||
ConvertInternationalString(txtPtr, sTrainerCardDataPtr->language);
|
||||
StringAppend(buffer[0], txtPtr);
|
||||
AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardFrontNameXPositions[sTrainerCardDataPtr->cardType], sTrainerCardFrontNameYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, buffer[0]);
|
||||
@@ -1145,7 +1149,7 @@ static void PrintIdOnCard(void)
|
||||
u8* txtPtr;
|
||||
|
||||
txtPtr = StringCopy(buffer, gText_TrainerCardIDNo);
|
||||
ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5);
|
||||
ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.rse.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5);
|
||||
AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardIdXPositions[sTrainerCardDataPtr->cardType], sTrainerCardIdYPositions[sTrainerCardDataPtr->cardType], sTrainerCardTextColors, TEXT_SPEED_FF, buffer);
|
||||
}
|
||||
|
||||
@@ -1156,7 +1160,7 @@ static void PrintMoneyOnCard(void)
|
||||
u8 x;
|
||||
|
||||
txtPtr = StringCopy(buffer, gText_TrainerCardYen);
|
||||
ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.rse.money, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE)
|
||||
{
|
||||
x = -122 - 6 * StringLength(buffer);
|
||||
@@ -1186,7 +1190,7 @@ static void PrintPokedexOnCard(void)
|
||||
|
||||
if (FlagGet(FLAG_SYS_POKEDEX_GET))
|
||||
{
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.caughtMonsCount, 0, 3);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.caughtMonsCount, 0, 3);
|
||||
if (sTrainerCardDataPtr->cardType != CARD_TYPE_RSE)
|
||||
{
|
||||
x = -120 - 6 * StringLength(buffer);
|
||||
@@ -1214,8 +1218,8 @@ static void PrintTimeOnCard(void)
|
||||
minutes = gSaveBlock2Ptr->playTimeMinutes;
|
||||
if (sTrainerCardDataPtr->isLink)
|
||||
{
|
||||
hours = sTrainerCardDataPtr->trainerCard.playTimeHours;
|
||||
minutes = sTrainerCardDataPtr->trainerCard.playTimeMinutes;
|
||||
hours = sTrainerCardDataPtr->trainerCard.rse.playTimeHours;
|
||||
minutes = sTrainerCardDataPtr->trainerCard.rse.playTimeMinutes;
|
||||
}
|
||||
|
||||
if (hours > 999)
|
||||
@@ -1260,7 +1264,7 @@ static void PrintProfilePhraseOnCard(void)
|
||||
|
||||
static void BufferNameForCardBack(void)
|
||||
{
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.playerName);
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.rse.playerName);
|
||||
ConvertInternationalString(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->language);
|
||||
if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE)
|
||||
{
|
||||
@@ -1293,13 +1297,13 @@ static void BufferHofDebutTime(void)
|
||||
|
||||
if (sTrainerCardDataPtr->hasHofResult)
|
||||
{
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
txtPtr = StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer);
|
||||
StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3);
|
||||
StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3);
|
||||
}
|
||||
}
|
||||
@@ -1321,9 +1325,9 @@ static void BufferLinkBattleResults(void)
|
||||
{
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD], sLinkTrainerCardRecordStrings[sTrainerCardDataPtr->cardType]);
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS], gText_WinLossRatio);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS], buffer);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES], buffer);
|
||||
}
|
||||
}
|
||||
@@ -1345,7 +1349,7 @@ static void BufferNumTrades(void)
|
||||
if (sTrainerCardDataPtr->hasTrades)
|
||||
{
|
||||
StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES], gText_PokemonTrades);
|
||||
ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
|
||||
ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.rse.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1486,9 +1490,9 @@ static bool8 SetTrainerCardBgsAndPals(void)
|
||||
break;
|
||||
case 2:
|
||||
if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE)
|
||||
LoadPalette(sHoennTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96);
|
||||
LoadPalette(sHoennTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.rse.stars], 0, 96);
|
||||
else
|
||||
LoadPalette(sKantoTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96);
|
||||
LoadPalette(sKantoTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.rse.stars], 0, 96);
|
||||
break;
|
||||
case 3:
|
||||
if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE)
|
||||
@@ -1497,9 +1501,9 @@ static bool8 SetTrainerCardBgsAndPals(void)
|
||||
LoadPalette(sKantoTrainerCardBadges_Pal, 48, 32);
|
||||
break;
|
||||
case 4:
|
||||
if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.gender != MALE)
|
||||
if (sTrainerCardDataPtr->cardType == CARD_TYPE_RSE && sTrainerCardDataPtr->trainerCard.rse.gender != MALE)
|
||||
LoadPalette(sHoennTrainerCardFemaleBackground_Pal, 16, 32);
|
||||
else if (sTrainerCardDataPtr->trainerCard.gender != MALE)
|
||||
else if (sTrainerCardDataPtr->trainerCard.rse.gender != MALE)
|
||||
LoadPalette(sKantoTrainerCardFemaleBackground_Pal, 16, 32);
|
||||
break;
|
||||
case 5:
|
||||
@@ -1564,7 +1568,7 @@ static void DrawStarsAndBadgesOnCard(void)
|
||||
u16 tileNum = 192;
|
||||
u8 palNum = 3;
|
||||
|
||||
FillBgTilemapBufferRect(3, 143, 15, sStarYOffsets[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.stars, 1, 4);
|
||||
FillBgTilemapBufferRect(3, 143, 15, sStarYOffsets[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.rse.stars, 1, 4);
|
||||
if (!sTrainerCardDataPtr->isLink)
|
||||
{
|
||||
x = 4;
|
||||
@@ -1629,7 +1633,7 @@ static void BlinkTimeColon(void)
|
||||
|
||||
u8 GetTrainerCardStars(u8 cardId)
|
||||
{
|
||||
return gTrainerCards[cardId].stars;
|
||||
return gTrainerCards[cardId].rse.stars;
|
||||
}
|
||||
|
||||
#define tFlipState data[0]
|
||||
@@ -1894,9 +1898,7 @@ static void InitTrainerCardData(void)
|
||||
sTrainerCardDataPtr->cardType = CARD_TYPE_FRLG;
|
||||
|
||||
for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
|
||||
{
|
||||
CopyEasyChatWord(sTrainerCardDataPtr->easyChatProfile[i], sTrainerCardDataPtr->trainerCard.easyChatProfile[i]);
|
||||
}
|
||||
CopyEasyChatWord(sTrainerCardDataPtr->easyChatProfile[i], sTrainerCardDataPtr->trainerCard.rse.easyChatProfile[i]);
|
||||
}
|
||||
|
||||
static u8 GetCardType(void)
|
||||
@@ -1919,26 +1921,26 @@ static u8 GetCardType(void)
|
||||
|
||||
static void CreateTrainerCardTrainerPic(void)
|
||||
{
|
||||
u8 facilityClass = sTrainerPicFacilityClasses[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender];
|
||||
u8 facilityClass = sTrainerPicFacilityClasses[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender];
|
||||
|
||||
if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1)
|
||||
{
|
||||
facilityClass = sTrainerCardDataPtr->trainerCard.facilityClass;
|
||||
CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(facilityClass), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0],
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2);
|
||||
CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(facilityClass), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0],
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sTrainerCardDataPtr->cardType != CARD_TYPE_FRLG)
|
||||
{
|
||||
CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(facilityClass), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0],
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2);
|
||||
CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(facilityClass), TRUE, sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0],
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateTrainerCardTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.gender, TRUE), TRUE,
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0],
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1],
|
||||
CreateTrainerCardTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.rse.gender, TRUE), TRUE,
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0],
|
||||
sTrainerPicOffsets[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1],
|
||||
8, 2);
|
||||
}
|
||||
}
|
||||
|
||||
+12
-12
@@ -1736,7 +1736,7 @@ static void Task_CallCB2ReturnFromLinkTrade(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
u8 UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(void)
|
||||
u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_CallCB2ReturnFromLinkTrade, 0);
|
||||
|
||||
@@ -1849,7 +1849,7 @@ void StartUnionRoomBattle(u16 battleFlags)
|
||||
gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
|
||||
gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId();
|
||||
gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1;
|
||||
gMain.savedCallback = sub_8081668;
|
||||
gMain.savedCallback = CB2_ReturnFromCableClubBattle;
|
||||
gBattleTypeFlags = battleFlags;
|
||||
PlayBattleBGM();
|
||||
}
|
||||
@@ -4693,23 +4693,23 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro
|
||||
StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]);
|
||||
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->rse.playerName);
|
||||
|
||||
StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->stars]);
|
||||
StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->rse.stars]);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->field_174);
|
||||
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]);
|
||||
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->rse.playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->rse.playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, uroom->trainerCardStrbufs[3]);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, uroom->trainerCardStrbufs[4]);
|
||||
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_84594C4);
|
||||
StringCopy(gStringVar4, uroom->field_1A4);
|
||||
|
||||
n = trainerCard->linkBattleWins;
|
||||
n = trainerCard->rse.linkBattleWins;
|
||||
if (n > 9999)
|
||||
{
|
||||
n = 9999;
|
||||
@@ -4717,7 +4717,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]);
|
||||
|
||||
n = trainerCard->linkBattleLosses;
|
||||
n = trainerCard->rse.linkBattleLosses;
|
||||
if (n > 9999)
|
||||
{
|
||||
n = 9999;
|
||||
@@ -4725,12 +4725,12 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrbufs[1]);
|
||||
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
|
||||
ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]);
|
||||
|
||||
for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
|
||||
{
|
||||
CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->easyChatProfile[i]);
|
||||
CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->rse.easyChatProfile[i]);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]);
|
||||
}
|
||||
|
||||
@@ -4744,7 +4744,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro
|
||||
}
|
||||
else if (parent_child == MODE_CHILD)
|
||||
{
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->gender]);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->rse.gender]);
|
||||
StringAppend(gStringVar4, uroom->field_1A4);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -73,9 +73,8 @@ gUnknown_3005078: @ 3005078
|
||||
.include "sound.o"
|
||||
.align 2
|
||||
.include "task.o"
|
||||
|
||||
@ what is this?
|
||||
.space 0x20
|
||||
.align 2
|
||||
.include "cable_club.o"
|
||||
.align 2
|
||||
.include "image_processing_effects.o"
|
||||
.align 2
|
||||
|
||||
Reference in New Issue
Block a user