link.c through InitLocalLinkPlayer

This commit is contained in:
PikalaxALT
2019-10-05 15:49:05 -04:00
parent b4b509f684
commit b01da1a592
26 changed files with 332 additions and 412 deletions
+153
View File
@@ -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;
}
}
+2 -2
View File
@@ -4961,7 +4961,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
if (gEvolutionTable[species][i].param == heldItem)
{
targetSpecies = gEvolutionTable[species][i].targetSpecies;
if (sub_806E25C() || targetSpecies <= 151)
if (IsNationalPokedexEnabled() || targetSpecies <= 151)
{
heldItem = 0;
SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem);
@@ -5629,7 +5629,7 @@ u16 sub_8043F90(u16 species)
{
species = SpeciesToNationalPokedexNum(species);
if (!sub_806E25C() && species > 151)
if (!IsNationalPokedexEnabled() && species > 151)
return 0xFFFF;
return species;
}
+1 -1
View File
@@ -33,7 +33,7 @@ u16 Special_GetPokedexCount(void)
gSpecialVar_0x8005 = GetNationalPokedexCount(0);
gSpecialVar_0x8006 = GetNationalPokedexCount(1);
}
return sub_806E25C();
return IsNationalPokedexEnabled();
}
const u8 * sub_80CA424(u16 count)