link.c through InitLocalLinkPlayer
This commit is contained in:
+153
@@ -0,0 +1,153 @@
|
||||
#include "global.h"
|
||||
#include "palette.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "link.h"
|
||||
#include "quest_log.h"
|
||||
#include "link_rfu.h"
|
||||
#include "librfu.h"
|
||||
#include "random.h"
|
||||
#include "task.h"
|
||||
#include "event_data.h"
|
||||
#include "string_util.h"
|
||||
|
||||
struct BlockTransfer
|
||||
{
|
||||
u16 pos;
|
||||
u16 size;
|
||||
const u8 *src;
|
||||
bool8 active;
|
||||
u8 multiplayerId;
|
||||
};
|
||||
|
||||
struct LinkTestBGInfo
|
||||
{
|
||||
u32 screenBaseBlock;
|
||||
u32 paletteNum;
|
||||
u32 dummy_8;
|
||||
u32 dummy_C;
|
||||
};
|
||||
|
||||
u32 gUnknown_3000E58;
|
||||
|
||||
struct LinkTestBGInfo gLinkTestBGInfo;
|
||||
|
||||
EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {};
|
||||
|
||||
void sub_800B210(void);
|
||||
void InitLocalLinkPlayer(void);
|
||||
void sub_800978C(void);
|
||||
void ResetBlockSend(void);
|
||||
void task00_link_test(u8 taskId);
|
||||
void CB2_LinkTest(void);
|
||||
|
||||
extern const u16 gLinkTestDigitsPal[0x20];
|
||||
extern const u16 gLinkTestDigitsGfx[0x1000];
|
||||
extern const u8 gBGControlRegOffsets[];
|
||||
|
||||
bool8 IsWirelessAdapterConnected(void)
|
||||
{
|
||||
if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
|
||||
return FALSE;
|
||||
|
||||
sub_800B1F4();
|
||||
sub_80F86F4();
|
||||
sub_80FB128(1);
|
||||
if (sub_80FD3A4() == 0x8001)
|
||||
{
|
||||
rfu_REQ_stopMode();
|
||||
rfu_waitREQComplete();
|
||||
return TRUE;
|
||||
}
|
||||
sub_800B210();
|
||||
CloseLink();
|
||||
RestoreSerialTimer3IntrHandlers();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Task_DestroySelf(u8 taskId)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
|
||||
{
|
||||
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
|
||||
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx);
|
||||
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
|
||||
gLinkTestBGInfo.paletteNum = paletteNum;
|
||||
gLinkTestBGInfo.dummy_8 = a4;
|
||||
switch (bgNum)
|
||||
{
|
||||
case 1:
|
||||
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock));
|
||||
break;
|
||||
case 2:
|
||||
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock));
|
||||
break;
|
||||
case 3:
|
||||
SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock));
|
||||
break;
|
||||
}
|
||||
SetGpuReg(REG_OFFSET_BG0HOFS + bgNum * 4, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS + bgNum * 4, 0);
|
||||
}
|
||||
|
||||
void sub_80095BC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock)
|
||||
{
|
||||
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
|
||||
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx);
|
||||
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
|
||||
gLinkTestBGInfo.paletteNum = paletteNum;
|
||||
gLinkTestBGInfo.dummy_8 = 0;
|
||||
SetGpuReg(gBGControlRegOffsets[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock));
|
||||
}
|
||||
|
||||
void LinkTestScreen(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
ResetTasks();
|
||||
SetVBlankCallback(sub_800978C);
|
||||
ResetBlockSend();
|
||||
gLinkType = 0x1111;
|
||||
OpenLink();
|
||||
SeedRng(gMain.vblankCounter2);
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256;
|
||||
}
|
||||
InitLinkTestBG(0, 2, 4, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON);
|
||||
CreateTask(Task_DestroySelf, 0);
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
gUnknown_3000E58 = 0;
|
||||
InitLocalLinkPlayer();
|
||||
CreateTask(task00_link_test, 0);
|
||||
SetMainCallback2(CB2_LinkTest);
|
||||
}
|
||||
|
||||
void SetLocalLinkPlayerId(u8 playerId)
|
||||
{
|
||||
gLocalLinkPlayer.id = playerId;
|
||||
}
|
||||
|
||||
void InitLocalLinkPlayer(void)
|
||||
{
|
||||
gLocalLinkPlayer.trainerId = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
StringCopy(gLocalLinkPlayer.name, gSaveBlock2Ptr->playerName);
|
||||
gLocalLinkPlayer.gender = gSaveBlock2Ptr->playerGender;
|
||||
gLocalLinkPlayer.linkType = gLinkType;
|
||||
gLocalLinkPlayer.language = gGameLanguage;
|
||||
gLocalLinkPlayer.version = gGameVersion + 0x4000;
|
||||
gLocalLinkPlayer.lp_field_2 = 0x8000;
|
||||
gLocalLinkPlayer.name[8] = IsNationalPokedexEnabled();
|
||||
if (FlagGet(FLAG_0x844))
|
||||
{
|
||||
gLocalLinkPlayer.name[8] |= 0x10;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user