mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
Some checks failed
CI / build (push) Has been cancelled
* checkpoint * checkpoint 2 * checkpoint 3 * checkpoint 4 * checkpoint 5 * carve 86aa4a8, aa20c, aa208 * carve through ACCA0 * through 086ADA6E
2437 lines
81 KiB
C
2437 lines
81 KiB
C
#include "global.h"
|
|
#include "functions.h"
|
|
#include "link.h"
|
|
#include "m4a.h"
|
|
#include "main.h"
|
|
#include "types.h"
|
|
#include "variables.h"
|
|
#include "constants/bg_music.h"
|
|
#include "constants/characters.h"
|
|
|
|
#define DEX_NUM_DIGITS 3
|
|
#define SCROLL_WAIT_FRAMES 9
|
|
#define ENTRIES_SHOWN_COUNT 5
|
|
|
|
enum PokedexStates
|
|
{
|
|
POKEDEX_STATE_LOAD_GRAPHICS,
|
|
POKEDEX_STATE_HANDLE_LIST_INPUT,
|
|
POKEDEX_STATE_2,
|
|
POKEDEX_STATE_3,
|
|
POKEDEX_STATE_4,
|
|
POKEDEX_STATE_5,
|
|
POKEDEX_STATE_LINK_SETUP,
|
|
POKEDEX_STATE_7,
|
|
POKEDEX_STATE_8,
|
|
POKEDEX_STATE_9,
|
|
POKEDEX_STATE_10,
|
|
POKEDEX_STATE_DELETE_CONFIRMATION,
|
|
POKEDEX_STATE_RETURN_TO_TITLE,
|
|
};
|
|
|
|
void sub_5174(void);
|
|
static void PokedexListScrollUp(void);
|
|
static void PokedexListScrollDown(void);
|
|
static void PokedexListScrollUpFast(void);
|
|
static void PokedexListScrollDownFast(void);
|
|
void Pokedex_CheckDeleteKeyComboPressed(void);
|
|
void sub_5064(void);
|
|
void sub_51CC(void);
|
|
static s16 sub_5EA4(void);
|
|
s16 sub_5EC8(void);
|
|
void sub_70E0(s16, u32);
|
|
void sub_88E4(void);
|
|
void sub_51FC(void);
|
|
static void RenderLinkGraphics(void);
|
|
static void sub_5E60(void);
|
|
int sub_639C(void);
|
|
static int sub_5EEC(void);
|
|
static int sub_6144(void);
|
|
static int sub_65DC(void);
|
|
static void PrintSelectedMonDexNum(s16);
|
|
static void PrintSeenOwnedTotals(s16, s16);
|
|
void sub_71DC(int, int, int);
|
|
void PrintDexNumbersFromListPosition(s16);
|
|
static void PrintCaughtBallFromListPosition(s16);
|
|
void sub_6F78(s16);
|
|
|
|
extern u8 *gUnknown_086B15B4[];
|
|
extern u8 *gUnknown_086BB6F4[];
|
|
|
|
extern u16 gUnknown_0201C180;
|
|
extern u16 gUnknown_0202C5B4;
|
|
extern s8 gUnknown_0201C1BC;
|
|
extern s8 gUnknown_0202C544;
|
|
extern s8 gUnknown_0202BECC;
|
|
extern u16 gUnknown_0202BE30[];
|
|
extern u16 gUnknown_0201B130[];
|
|
|
|
extern const struct SpriteSet *const gUnknown_086A6148[];
|
|
extern u16 gUnknown_0202BF08;
|
|
extern const u16 gUnknown_086A5DDA[][4];
|
|
extern const u16 gUnknown_086A5DF2[][20];
|
|
extern const s16 gUnknown_086A6356[];
|
|
extern const u16 gUnknown_086A5EE2[][51];
|
|
extern const s16 gUnknown_086A6014[][51];
|
|
extern const u16 gUnknown_086A5E12[][4];
|
|
extern s16 gUnknown_086A64F0[];
|
|
|
|
enum PokedexPopupType {
|
|
POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT = 0,
|
|
POKEDEX_POPUP_TRANSMITTING_ACTIVE = 1,
|
|
POKEDEX_POPUP_TRANSMISSION_ERROR = 2,
|
|
POKEDEX_POPUP_TRANSMISSION_COMPLETE = 3,
|
|
POKEDEX_POPUP_DELETE_CONFIRMATION_PROMPT = 4
|
|
};
|
|
|
|
// The japanese and english text glyphs are sourced from the same blob of tile graphics, and
|
|
// each glyph is two tiles high.
|
|
#define ENGLISH_GLYPHS_START 0x2820
|
|
extern const u8 gPokedexTextGlyphs_Gfx[];
|
|
|
|
struct PokedexEntry
|
|
{
|
|
/*0x00*/ u16 dexNum[DEX_NUM_DIGITS];
|
|
/*0x06*/ u16 heightWeight[POKEMON_HEIGHT_WEIGHT_TEXT_LENGTH];
|
|
/*0x18*/ s16 name[POKEMON_NAME_LENGTH];
|
|
/*0x2C*/ s16 category[POKEMON_CATEGORY_NAME_LENGTH];
|
|
// The dex description has 2 pages with 3 lines each. Each line
|
|
// is 42 characters long.
|
|
/*0x42*/ s16 description[2 * 3 * POKEMON_DEX_LINE_LENGTH];
|
|
}; /* size=0x23C */
|
|
|
|
extern const struct PokedexEntry gPokedexEntries[];
|
|
|
|
void PokedexMain(void)
|
|
{
|
|
gPokedexStateFuncs[gMain.subState]();
|
|
}
|
|
|
|
void LoadPokedexGraphics(void)
|
|
{
|
|
ResetSomeGraphicsRelatedStuff();
|
|
|
|
REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_FORCED_BLANK | DISPCNT_OBJ_ON;
|
|
REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(0) | BGCNT_TXT256x256;
|
|
REG_DISPCNT |= DISPCNT_BG1_ON;
|
|
REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(1) | BGCNT_TXT256x256;
|
|
REG_DISPCNT |= DISPCNT_BG2_ON;
|
|
REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(2) | BGCNT_TXT256x256;
|
|
REG_DISPCNT |= DISPCNT_BG3_ON;
|
|
|
|
gMain.dispcntBackup = REG_DISPCNT;
|
|
|
|
DmaCopy16(3, gPokedexBgText_Gfx, (void *)BG_CHAR_ADDR(1), 0x4400);
|
|
DmaCopy16(3, gPokedexBg_Gfx, (void *)BG_CHAR_ADDR(3), 0x1400);
|
|
DmaCopy16(3, gPokedexBackground_Pals, (void *)BG_PLTT, BG_PLTT_SIZE);
|
|
DmaCopy16(3, gPokedexBg1_Tilemap, gUnknown_03005C00, BG_SCREEN_SIZE);
|
|
DmaCopy16(3, gPokedexBg2_Tilemap, gUnknown_02019C40, BG_SCREEN_SIZE);
|
|
DmaCopy16(3, gPokedexBg3_Tilemap, (void *)BG_SCREEN_ADDR(2), BG_SCREEN_SIZE);
|
|
DmaCopy16(3, gPokedexSprites_Pals, (void *)OBJ_PLTT, OBJ_PLTT_SIZE);
|
|
DmaCopy16(3, gPokedexSprites_Gfx, (void *)OBJ_VRAM0, 0x6C20);
|
|
|
|
sub_3FAC();
|
|
PrintSeenOwnedTotals(gPokedexNumSeen, gPokedexNumOwned);
|
|
PrintSelectedMonDexNum(gPokedexSelectedMon);
|
|
PrintDexNumbersFromListPosition(gPokedexListPosition);
|
|
PrintCaughtBallFromListPosition(gPokedexListPosition);
|
|
sub_6F78(gPokedexSelectedMon);
|
|
sub_8974(gPokedexSelectedMon);
|
|
sub_8A78(gPokedexSelectedMon);
|
|
|
|
gUnknown_02019C40[0x134] = 0x59;
|
|
|
|
DmaCopy16(3, gUnknown_03005C00, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
|
|
DmaCopy16(3, gUnknown_02019C40, (void *)BG_SCREEN_ADDR(1), BG_SCREEN_SIZE);
|
|
|
|
sub_51FC();
|
|
sub_0CBC();
|
|
sub_024C();
|
|
|
|
gMain.subState = POKEDEX_STATE_HANDLE_LIST_INPUT;
|
|
|
|
m4aSongNumStart(MUS_POKEDEX);
|
|
}
|
|
|
|
void sub_3FAC(void)
|
|
{
|
|
s32 i;
|
|
|
|
gPokedexSelectedMon = 0;
|
|
gPokedexListPosition = 0;
|
|
gUnknown_0201A448 = 0;
|
|
gUnknown_0202BF00 = 0;
|
|
gUnknown_0202A57C = 0;
|
|
gUnknown_0201A4F0 = 0;
|
|
gUnknown_0202BE20 = 0;
|
|
gPokedexScrollWaitFrames = 0;
|
|
gUnknown_02019C24 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202C5E8 = 0;
|
|
gUnknown_0202BEF4 = 0;
|
|
gUnknown_0202A588 = 1;
|
|
gUnknown_0202A55C = 1;
|
|
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
|
|
gUnknown_0202BF14 = 0;
|
|
gUnknown_0202A558 = 0;
|
|
gUnknown_0202BEE0 = 0;
|
|
gUnknown_0202BF04 = 1;
|
|
|
|
sub_88E4();
|
|
if (sub_FD20() == 1)
|
|
{
|
|
gUnknown_0202C590 = 1;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202C590 = 0;
|
|
}
|
|
|
|
gUnknown_0202BEC4 = 0;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0201B120 = 0;
|
|
gPokedex_EraseSaveDataAccessCounter = 0;
|
|
gPokedex_EraseSaveDataAccessStep = 0;
|
|
gUnknown_0202C794 = 0;
|
|
gUnknown_0201C1B4 = 0;
|
|
gUnknown_0202C5AC = 0;
|
|
gUnknown_02019C28 = 0;
|
|
|
|
for (i = 0; i < 0xE1; i++)
|
|
{
|
|
gPokedexFlagExchangeBuffer[i] = gPokedexFlags[i];
|
|
}
|
|
|
|
if (gPokedexFlags[SPECIES_AERODACTYL])
|
|
gPokedexListEntryCount = SPECIES_AERODACTYL + 1;
|
|
else if (gPokedexFlags[SPECIES_TOTODILE])
|
|
gPokedexListEntryCount = SPECIES_TOTODILE + 1;
|
|
else if (gPokedexFlags[SPECIES_CYNDAQUIL])
|
|
gPokedexListEntryCount = SPECIES_CYNDAQUIL + 1;
|
|
else if (gPokedexFlags[SPECIES_CHIKORITA])
|
|
gPokedexListEntryCount = SPECIES_CHIKORITA + 1;
|
|
else if (gPokedexFlags[SPECIES_JIRACHI])
|
|
gPokedexListEntryCount = SPECIES_JIRACHI + 1;
|
|
else
|
|
gPokedexListEntryCount = SPECIES_RAYQUAZA + 1;
|
|
}
|
|
|
|
void Pokedex_HandleListInput(void)
|
|
{
|
|
if (JOY_HELD(SELECT_BUTTON))
|
|
{
|
|
gUnknown_0202BF04 = 0;
|
|
|
|
if (JOY_HELD(DPAD_UP))
|
|
{
|
|
PokedexListScrollUp();
|
|
sub_5064();
|
|
sub_51CC();
|
|
gMain.subState = POKEDEX_STATE_2;
|
|
}
|
|
else if (JOY_HELD(DPAD_DOWN))
|
|
{
|
|
PokedexListScrollDown();
|
|
sub_5064();
|
|
sub_51CC();
|
|
gMain.subState = POKEDEX_STATE_2;
|
|
}
|
|
else if (JOY_HELD(DPAD_LEFT))
|
|
{
|
|
PokedexListScrollUpFast();
|
|
sub_5064();
|
|
sub_51CC();
|
|
gMain.subState = POKEDEX_STATE_2;
|
|
}
|
|
else if (JOY_HELD(DPAD_RIGHT))
|
|
{
|
|
PokedexListScrollDownFast();
|
|
sub_5064();
|
|
sub_51CC();
|
|
gMain.subState = POKEDEX_STATE_2;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_02019C24 = 0;
|
|
sub_5064();
|
|
}
|
|
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
gUnknown_0202C5E8 = 0;
|
|
|
|
if (gPokedexFlags[gPokedexSelectedMon] >= 2)
|
|
{
|
|
gUnknown_0202BF04 = 0;
|
|
DmaCopy16(3, 0x6000280, (void *)gUnknown_0202A590, 0x200);
|
|
gMain.subState = POKEDEX_STATE_3;
|
|
}
|
|
else
|
|
{
|
|
m4aSongNumStart(SE_FAILURE);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202BF04 = 1;
|
|
|
|
if (JOY_HELD(DPAD_UP))
|
|
{
|
|
PokedexListScrollUp();
|
|
sub_5174();
|
|
}
|
|
else if (JOY_HELD(DPAD_DOWN))
|
|
{
|
|
PokedexListScrollDown();
|
|
sub_5174();
|
|
}
|
|
else if (JOY_HELD(DPAD_LEFT))
|
|
{
|
|
PokedexListScrollUpFast();
|
|
sub_5174();
|
|
}
|
|
else if (JOY_HELD(DPAD_RIGHT))
|
|
{
|
|
PokedexListScrollDownFast();
|
|
sub_5174();
|
|
}
|
|
else
|
|
{
|
|
gUnknown_02019C24 = 0;
|
|
}
|
|
|
|
if (sub_8A78(gPokedexSelectedMon) == 1)
|
|
gUnknown_0202A588 = 1;
|
|
else
|
|
gUnknown_0202A588 = 0;
|
|
|
|
gUnknown_0202A55C = 1;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
gUnknown_0202C5E8 = 0;
|
|
|
|
if (gPokedexFlags[gPokedexSelectedMon] >= SPECIES_SHARED)
|
|
{
|
|
gUnknown_0202BF04 = 0;
|
|
DmaCopy16(3, 0x6000280, (void *)gUnknown_0202A590, 0x200);
|
|
gMain.subState = POKEDEX_STATE_3;
|
|
}
|
|
else
|
|
{
|
|
m4aSongNumStart(SE_FAILURE);
|
|
}
|
|
}
|
|
else if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_MENU_CANCEL);
|
|
gMain.subState = POKEDEX_STATE_RETURN_TO_TITLE;
|
|
}
|
|
else if (JOY_NEW(START_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_MENU_POPUP_OPEN);
|
|
gUnknown_0202BEC4 = 1;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0202BF04 = 0;
|
|
gUnknown_0202A588 = 0;
|
|
gMain.subState = POKEDEX_STATE_LINK_SETUP;
|
|
}
|
|
|
|
Pokedex_CheckDeleteKeyComboPressed();
|
|
}
|
|
|
|
if (gPokedexScrollWaitFrames > 0)
|
|
gPokedexScrollWaitFrames--;
|
|
|
|
sub_51FC();
|
|
DmaCopy16(3, gUnknown_03005C00, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
|
|
}
|
|
|
|
void Pokedex_State2_43D4(void)
|
|
{
|
|
sub_5174();
|
|
gUnknown_0202A588 = 0;
|
|
|
|
if (gPokedexScrollWaitFrames > 0)
|
|
gPokedexScrollWaitFrames--;
|
|
|
|
sub_51FC();
|
|
DmaCopy16(3, gUnknown_03005C00, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
|
|
gMain.subState = POKEDEX_STATE_HANDLE_LIST_INPUT;
|
|
}
|
|
|
|
void Pokedex_State3_4428(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < 0x20; i++)
|
|
{
|
|
gUnknown_03005C00[0x20*(gUnknown_0202A558 + 10) + i] = gDexInfoWindowEmptyTextRowTiles[i];
|
|
gUnknown_02019C40[0x20*(gUnknown_0202A558 + 9) + i] = gDexInfoWindowMiddleRowTiles[i];
|
|
gUnknown_02019C40[0x20*(gUnknown_0202A558 + 10) + i] = gDexInfoWindowBottomRowTiles[i];
|
|
}
|
|
|
|
gUnknown_0202A558++;
|
|
gUnknown_02019C40[0x134] = 0x59;
|
|
DmaCopy16(3, gUnknown_03005C00, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
|
|
DmaCopy16(3, gUnknown_02019C40, (void *)BG_SCREEN_ADDR(1), BG_SCREEN_SIZE);
|
|
|
|
if (gUnknown_0202A558 > 7)
|
|
{
|
|
gUnknown_0202A558 = 0;
|
|
gUnknown_0202C5E8 = 0;
|
|
gUnknown_0202BEF4 = 0;
|
|
gUnknown_02019C28 = 0;
|
|
gUnknown_0202C5AC = 0;
|
|
|
|
if (gPokedexSelectedMon < BONUS_SPECIES_START)
|
|
gUnknown_0201C1B4 = 1;
|
|
|
|
DmaCopy16(3, gUnknown_08086B40, (void *)0x6000280, 2*0xE0);
|
|
sub_70E0(gPokedexSelectedMon, gUnknown_0202C794);
|
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x40);
|
|
PlayCry_NormalNoDucking(gSpeciesInfo[gPokedexSelectedMon].mainSeriesIndexNumber, 0, 127, 10);
|
|
gMain.subState = POKEDEX_STATE_5;
|
|
}
|
|
|
|
}
|
|
|
|
void Pokedex_State5_45A4(void)
|
|
{
|
|
u16 var0;
|
|
|
|
if (gUnknown_0202C5E8 < 0x51)
|
|
{
|
|
gUnknown_0202C5E8++;
|
|
if (gUnknown_0202C5E8 == 0x50)
|
|
{
|
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100);
|
|
}
|
|
}
|
|
gUnknown_0202BEF4++;
|
|
if (0x1e < gUnknown_0202BEF4)
|
|
{
|
|
gUnknown_0202BEF4 = 0;
|
|
gUnknown_0202C5AC = 1 - gUnknown_0202C5AC;
|
|
}
|
|
gUnknown_0202BE20 = 0;
|
|
|
|
if (JOY_NEW(DPAD_UP))
|
|
{
|
|
if ((gPokedexSelectedMon < BONUS_SPECIES_START) && (gUnknown_0202C794 == 1))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x6D);
|
|
gUnknown_0202C794 = 0;
|
|
sub_70E0(gPokedexSelectedMon, 0);
|
|
gUnknown_02019C28 = gUnknown_0202C794;
|
|
}
|
|
}
|
|
else if (JOY_NEW(DPAD_DOWN))
|
|
{
|
|
if ((gPokedexSelectedMon < BONUS_SPECIES_START) && (gUnknown_0202C794 == 0))
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x6D);
|
|
gUnknown_0202C794 = 1;
|
|
sub_70E0(gPokedexSelectedMon, 1);
|
|
gUnknown_02019C28 = gUnknown_0202C794;
|
|
}
|
|
}
|
|
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
if (gPokedexSelectedMon < BONUS_SPECIES_START)
|
|
{
|
|
if (!gUnknown_0202C794)
|
|
{
|
|
m4aSongNumStart(SE_UNKNOWN_0x6D);
|
|
gUnknown_0202C794 = 1 - gUnknown_0202C794;
|
|
sub_70E0(gPokedexSelectedMon, gUnknown_0202C794);
|
|
gUnknown_02019C28 = gUnknown_0202C794;
|
|
}
|
|
else
|
|
{
|
|
m4aSongNumStart(SE_MENU_POPUP_CLOSE);
|
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100);
|
|
gUnknown_0202C794 = 0;
|
|
gUnknown_0202C5E8 = 0;
|
|
gUnknown_0202BEF4 = gUnknown_0202C5E8;
|
|
gUnknown_0201C1B4 = 0;
|
|
gMain.subState = POKEDEX_STATE_4;
|
|
}
|
|
}
|
|
}
|
|
else if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_MENU_POPUP_CLOSE);
|
|
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100);
|
|
gUnknown_0202C794 = 0;
|
|
gUnknown_0202C5E8 = 0;
|
|
gUnknown_0202BEF4 = gUnknown_0202C5E8;
|
|
gUnknown_0201C1B4 = 0;
|
|
gMain.subState = POKEDEX_STATE_4;
|
|
}
|
|
|
|
if (JOY_HELD(SELECT_BUTTON))
|
|
{
|
|
if (gPokedexFlags[gPokedexSelectedMon] == SPECIES_CAUGHT)
|
|
{
|
|
if (gDexAnimationIx[gPokedexSelectedMon] == -1)
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 1;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
}
|
|
else
|
|
{
|
|
if (gDexAnimationIx[gPokedexSelectedMon] < 100)
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 0;
|
|
gUnknown_0202A568[0] = 1;
|
|
gUnknown_0202A568[1] = 0;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 0;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 1;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 1;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (sub_8A78(gPokedexSelectedMon) == 1)
|
|
gUnknown_0202A588 = 1;
|
|
else
|
|
gUnknown_0202A588 = 0;
|
|
|
|
gUnknown_0202A55C = 1;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
}
|
|
|
|
sub_51FC();
|
|
}
|
|
|
|
void Pokedex_State4_4860(void)
|
|
{
|
|
s32 i;
|
|
|
|
for (i = 0; i < 0x20; i++)
|
|
{
|
|
gUnknown_02019C40[0x20 * (0x11 - gUnknown_0202A558) + i] = gDexInfoWindowBottomRowTiles[i];
|
|
gUnknown_02019C40[0x20 * (0x12 - gUnknown_0202A558) + i] = gDexInfoWindowEmptyRowTiles[i];
|
|
}
|
|
|
|
if (gUnknown_0202A558 < 8)
|
|
{
|
|
for (i = 0; i < 0x20; i++)
|
|
{
|
|
gUnknown_03005C00[0x20 * (0x11 - gUnknown_0202A558) + i] = gUnknown_0202A590[0x20 * (0x7 - gUnknown_0202A558) + i];
|
|
}
|
|
}
|
|
gUnknown_0202A558++;
|
|
|
|
gUnknown_02019C40[0x134] = 0x59;
|
|
DmaCopy16(3, gUnknown_02019C40, (void *)BG_SCREEN_ADDR(1), BG_SCREEN_SIZE);
|
|
DmaCopy16(3, gUnknown_03005C00, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
|
|
|
|
if (gUnknown_0202A558 > 8)
|
|
{
|
|
gUnknown_0202A558 = 0;
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202BF04 = 1;
|
|
|
|
DmaFill16(3, 0, (void *)gUnknown_03000000, 0x1800);
|
|
DmaFill16(3, 0, (void *)0x6005C00, 0x1800);
|
|
gMain.subState = POKEDEX_STATE_HANDLE_LIST_INPUT;
|
|
}
|
|
}
|
|
|
|
void Pokedex_LinkSetup(void)
|
|
{
|
|
sub_19B4();
|
|
sub_5E60();
|
|
gUnknown_0201B124 = 0;
|
|
RenderLinkGraphics();
|
|
gMain.subState = POKEDEX_STATE_7;
|
|
}
|
|
|
|
void Pokedex_State7_49D0(void)
|
|
{
|
|
s16 var0;
|
|
|
|
RenderLinkGraphics();
|
|
|
|
if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_MENU_CANCEL);
|
|
gUnknown_0202BEC4 = 0;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0202BF04 = 1;
|
|
gUnknown_0202A588 = 1;
|
|
sub_2568();
|
|
gMain.subState = POKEDEX_STATE_HANDLE_LIST_INPUT;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202ADD0 = LinkMain1(&gUnknown_0202BEC8, gUnknown_0202C5F0, gUnknown_0201A4D0);
|
|
gUnknown_0202BDF0 = gUnknown_0202ADD0 & 3;
|
|
gUnknown_0201C1AC = (gUnknown_0202ADD0 & 0x1C) >> 2;
|
|
gUnknown_0202ADDC = (gUnknown_0202ADD0 & 0xe00) >> 9;
|
|
|
|
if ((gUnknown_0202ADD0 & 0x40) && (gUnknown_0202BDF0 < 2))
|
|
{
|
|
sub_5EC8();
|
|
|
|
if (!(gUnknown_0202ADD0 & 0x100))
|
|
{
|
|
var0 = sub_5EA4();
|
|
if (var0 == -1)
|
|
{
|
|
gMain.subState = POKEDEX_STATE_9;
|
|
}
|
|
else if (var0 == 1)
|
|
{
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_ERROR;
|
|
gMain.subState = POKEDEX_STATE_8;
|
|
m4aSongNumStart(SE_FAILURE);
|
|
}
|
|
}
|
|
|
|
gUnknown_0201A510++;
|
|
|
|
if ((gUnknown_0202ADD0 & 0x7f0000) && gUnknown_0201B128 == -1)
|
|
{
|
|
gUnknown_0201A444++;
|
|
if (0xB4 < gUnknown_0201A444)
|
|
{
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_ERROR;
|
|
gMain.subState = POKEDEX_STATE_8;
|
|
m4aSongNumStart(SE_FAILURE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void Pokedex_State10_4B10(void)
|
|
{
|
|
gUnknown_0201A444++;
|
|
|
|
if (2 < gUnknown_0201A444) {
|
|
gUnknown_0201A444 = 0;
|
|
gMain.subState = POKEDEX_STATE_LINK_SETUP;
|
|
}
|
|
}
|
|
|
|
void Pokedex_State8_4B34(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
RenderLinkGraphics();
|
|
gUnknown_0201B120++;
|
|
|
|
if (0x5A < gUnknown_0201B120)
|
|
{
|
|
gUnknown_0201B120 = 0;
|
|
gUnknown_0202BEC4 = 0;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0202BF04 = 1;
|
|
gUnknown_0202A588 = 1;
|
|
|
|
sub_2568();
|
|
DisableSerial();
|
|
|
|
for(iVar1 = 0; iVar1 < 0xE1; iVar1++)
|
|
{
|
|
gPokedexFlagExchangeBuffer[iVar1] = gPokedexFlags[iVar1];
|
|
}
|
|
|
|
sub_02B4();
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
gMain.subState = POKEDEX_STATE_LOAD_GRAPHICS;
|
|
}
|
|
}
|
|
|
|
void Pokedex_State9_4BB4(void)
|
|
{
|
|
s32 index;
|
|
|
|
RenderLinkGraphics();
|
|
switch(gUnknown_0201B120)
|
|
{
|
|
case 0x4:
|
|
sub_2568();
|
|
DisableSerial();
|
|
break;
|
|
case 0x82:
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_COMPLETE;
|
|
m4aSongNumStart(SE_MENU_SELECT);
|
|
break;
|
|
case 0xFA:
|
|
gUnknown_0201B120 = 0;
|
|
gUnknown_0202BEC4 = 0;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0202BF04 = 1;
|
|
gUnknown_0202A588 = 1;
|
|
for(index = 0; index < 0xE1; index++)
|
|
{
|
|
gPokedexFlags[index] = gPokedexFlagExchangeBuffer[index];
|
|
}
|
|
for(index = 0; index < NUM_SPECIES; index++)
|
|
{
|
|
gMain_saveData.pokedexFlags[index] = gPokedexFlags[index];
|
|
}
|
|
SaveFile_WriteToSram();
|
|
sub_02B4();
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
gMain.subState = POKEDEX_STATE_LOAD_GRAPHICS;
|
|
break;
|
|
}
|
|
gUnknown_0201B120++;
|
|
}
|
|
|
|
void Pokedex_DeleteConfirmation(void)
|
|
{
|
|
s32 i;
|
|
|
|
sub_51FC();
|
|
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_MENU_SELECT);
|
|
for (i = 0; i < 0xE1; i++)
|
|
{
|
|
gPokedexFlagExchangeBuffer[i] = 0;
|
|
gPokedexFlags[i] = 0;
|
|
}
|
|
for (i = 0; i < NUM_SPECIES; i++)
|
|
{
|
|
gMain_saveData.pokedexFlags[i] = gPokedexFlags[i];
|
|
}
|
|
|
|
gUnknown_0202BEC4 = 0;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0202BF04 = 1;
|
|
gUnknown_0202A588 = 1;
|
|
|
|
SaveFile_WriteToSram();
|
|
sub_02B4();
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
gMain.subState = POKEDEX_STATE_LOAD_GRAPHICS;
|
|
}
|
|
else if (JOY_NEW(B_BUTTON))
|
|
{
|
|
m4aSongNumStart(SE_MENU_CANCEL);
|
|
gUnknown_0202BEC4 = 0;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT;
|
|
gUnknown_0202BF04 = 1;
|
|
gUnknown_0202A588 = 1;
|
|
gMain.subState = POKEDEX_STATE_HANDLE_LIST_INPUT;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
void Pokedex_ReturnToTitle(void)
|
|
{
|
|
sub_02B4();
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
|
|
gAutoDisplayTitlescreenMenu = TRUE;
|
|
SetMainGameState(STATE_TITLE);
|
|
}
|
|
|
|
static void PokedexListScrollUp(void)
|
|
{
|
|
if (gPokedexScrollWaitFrames != 0)
|
|
return;
|
|
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
|
|
if (gUnknown_0202A57C == 0)
|
|
{
|
|
if (gPokedexListPosition == 0)
|
|
{
|
|
if (gUnknown_02019C24 == 0)
|
|
{
|
|
gPokedexListPosition = gPokedexListEntryCount - NUM_BONUS_SPECIES - 1;
|
|
gPokedexSelectedMon = gPokedexListEntryCount - 1;
|
|
gUnknown_0202A57C = 4;
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gPokedexListPosition--;
|
|
gPokedexSelectedMon--;
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
}
|
|
|
|
gPokedexScrollWaitFrames = SCROLL_WAIT_FRAMES;
|
|
}
|
|
else
|
|
{
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
gUnknown_0202A57C--;
|
|
gPokedexSelectedMon--;
|
|
|
|
gPokedexScrollWaitFrames = SCROLL_WAIT_FRAMES;
|
|
}
|
|
|
|
gUnknown_02019C24 = 1;
|
|
}
|
|
|
|
static void PokedexListScrollDown(void)
|
|
{
|
|
if (gPokedexScrollWaitFrames != 0)
|
|
return;
|
|
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
if (gUnknown_0202A57C == 4)
|
|
{
|
|
if (gPokedexListPosition == gPokedexListEntryCount - NUM_BONUS_SPECIES - 1)
|
|
{
|
|
if (gUnknown_02019C24 == 0)
|
|
{
|
|
gPokedexListPosition = 0;
|
|
gPokedexSelectedMon = 0;
|
|
gUnknown_0202A57C = 0;
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gPokedexListPosition++;
|
|
gPokedexSelectedMon++;
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
}
|
|
|
|
gPokedexScrollWaitFrames = SCROLL_WAIT_FRAMES;
|
|
}
|
|
else
|
|
{
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
gUnknown_0202A57C++;
|
|
gPokedexSelectedMon++;
|
|
gPokedexScrollWaitFrames = SCROLL_WAIT_FRAMES;
|
|
}
|
|
|
|
gUnknown_02019C24 = 1;
|
|
}
|
|
|
|
static void PokedexListScrollUpFast(void)
|
|
{
|
|
if (gPokedexScrollWaitFrames != 0)
|
|
return;
|
|
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
if (gPokedexListPosition == 0)
|
|
return;
|
|
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
gPokedexListPosition -= ENTRIES_SHOWN_COUNT;
|
|
if (gPokedexListPosition < 0)
|
|
gPokedexListPosition = 0;
|
|
|
|
gPokedexSelectedMon = gPokedexListPosition + gUnknown_0202A57C;
|
|
gPokedexScrollWaitFrames = SCROLL_WAIT_FRAMES;
|
|
}
|
|
|
|
static void PokedexListScrollDownFast(void)
|
|
{
|
|
if (gPokedexScrollWaitFrames != 0)
|
|
return;
|
|
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
if (gPokedexListPosition == gPokedexListEntryCount - NUM_BONUS_SPECIES - 1)
|
|
return;
|
|
|
|
m4aSongNumStart(SE_MENU_MOVE);
|
|
gPokedexListPosition += ENTRIES_SHOWN_COUNT;
|
|
if (gPokedexListPosition > gPokedexListEntryCount - NUM_BONUS_SPECIES - 1)
|
|
gPokedexListPosition = gPokedexListEntryCount - NUM_BONUS_SPECIES - 1;
|
|
|
|
gPokedexSelectedMon = gPokedexListPosition + gUnknown_0202A57C;
|
|
gPokedexScrollWaitFrames = SCROLL_WAIT_FRAMES;
|
|
}
|
|
|
|
void Pokedex_CheckDeleteKeyComboPressed(void)
|
|
{
|
|
// To delete save file, press R_BUTTON 3 times while holding L_BUTTON And DPAD_LEFT.
|
|
if (JOY_HELD(L_BUTTON | DPAD_LEFT) == (L_BUTTON | DPAD_LEFT) && JOY_NEW(R_BUTTON))
|
|
{
|
|
gPokedex_EraseSaveDataAccessCounter = 40;
|
|
if (++gPokedex_EraseSaveDataAccessStep == 3)
|
|
{
|
|
gPokedex_EraseSaveDataAccessStep = 0;
|
|
gPokedex_EraseSaveDataAccessCounter = 0;
|
|
m4aSongNumStart(SE_MENU_POPUP_OPEN);
|
|
gUnknown_0202BEC4 = 1;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_DELETE_CONFIRMATION_PROMPT;
|
|
gUnknown_0202BF04 = 0;
|
|
gUnknown_0202A588 = 0;
|
|
gMain.subState = POKEDEX_STATE_DELETE_CONFIRMATION;
|
|
}
|
|
}
|
|
|
|
if (gPokedex_EraseSaveDataAccessCounter > 0)
|
|
{
|
|
if (--gPokedex_EraseSaveDataAccessCounter <= 0)
|
|
{
|
|
gPokedex_EraseSaveDataAccessCounter = 0;
|
|
gPokedex_EraseSaveDataAccessStep = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_5064(void)
|
|
{
|
|
if (gPokedexFlags[gPokedexSelectedMon] == SPECIES_CAUGHT)
|
|
{
|
|
if (gDexAnimationIx[gPokedexSelectedMon] == -1)
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 1;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
gUnknown_0201A440 = 0;
|
|
gUnknown_0202BF0C = 0;
|
|
}
|
|
else if (gDexAnimationIx[gPokedexSelectedMon] < 100)
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 0;
|
|
gUnknown_0202A568[0] = 1;
|
|
gUnknown_0202A568[1] = 0;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 0;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202A588 = 0;
|
|
gUnknown_0202A55C = 1;
|
|
gUnknown_0202A568[0] = 0;
|
|
gUnknown_0202A568[1] = 0;
|
|
}
|
|
}
|
|
|
|
u8 sub_5134(void)
|
|
{
|
|
if (gPokedexFlags[gPokedexSelectedMon] == SPECIES_CAUGHT && gDexAnimationIx[gPokedexSelectedMon] != -1)
|
|
{
|
|
if (gDexAnimationIx[gPokedexSelectedMon] < 100)
|
|
return 1;
|
|
|
|
return 2;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void sub_5174(void)
|
|
{
|
|
PrintDexNumbersFromListPosition(gPokedexListPosition);
|
|
PrintCaughtBallFromListPosition(gPokedexListPosition);
|
|
PrintSelectedMonDexNum(gPokedexSelectedMon);
|
|
sub_6F78(gPokedexSelectedMon);
|
|
sub_8974(gPokedexSelectedMon);
|
|
sub_8A78(gPokedexSelectedMon);
|
|
gUnknown_0202BF00 = 0;
|
|
gUnknown_0201A448 = 0;
|
|
}
|
|
|
|
void sub_51CC(void)
|
|
{
|
|
if (sub_5134() == 0)
|
|
sub_6F78(gPokedexSelectedMon);
|
|
else
|
|
sub_8974(gPokedexSelectedMon);
|
|
}
|
|
|
|
void sub_51FC(void)
|
|
{
|
|
int i;
|
|
struct SpriteGroup *group0;
|
|
struct SpriteGroup *group1;
|
|
struct SpriteGroup *group2;
|
|
struct SpriteGroup *group3;
|
|
struct SpriteGroup *group4;
|
|
struct SpriteGroup *group5;
|
|
struct SpriteGroup *group6;
|
|
struct SpriteGroup *group7;
|
|
struct SpriteGroup *group8;
|
|
struct SpriteGroup *group9;
|
|
struct OamDataSimple *groupOam;
|
|
const struct SpriteSet *spriteSet;
|
|
int var0, var1;
|
|
|
|
group0 = &gMain_spriteGroups[0];
|
|
group1 = &gMain_spriteGroups[1];
|
|
group2 = &gMain_spriteGroups[2];
|
|
group3 = &gMain_spriteGroups[3];
|
|
group4 = &gMain_spriteGroups[4];
|
|
group5 = &gMain_spriteGroups[5 + gUnknown_0201A448];
|
|
group6 = &gMain_spriteGroups[17 + Pokedex_PopupTypeIx];
|
|
group7 = &gMain_spriteGroups[22 + gUnknown_0202BEE0];
|
|
group8 = &gMain_spriteGroups[24];
|
|
group9 = &gMain_spriteGroups[25 + gUnknown_02019C28 * 2 + gUnknown_0202C5AC];
|
|
|
|
group0->available = TRUE;
|
|
group1->available = TRUE;
|
|
group2->available = gUnknown_0202A55C;
|
|
group3->available = gUnknown_0202A568[0];
|
|
group4->available = gUnknown_0202A568[1];
|
|
group5->available = gUnknown_0202A588;
|
|
group6->available = gUnknown_0202BEC4;
|
|
group7->available = gUnknown_0202BF04;
|
|
group8->available = gUnknown_0202C590;
|
|
group9->available = gUnknown_0201C1B4;
|
|
LoadSpriteSets(gUnknown_086A6148, 29, group0);
|
|
|
|
group0->baseX = 20 + gUnknown_0201A4F0;
|
|
group0->baseY = 84 + gUnknown_0202A57C * 16;
|
|
groupOam = &group0->oam[0];
|
|
gOamBuffer[groupOam->oamId].priority = 3;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group0->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group0->baseY;
|
|
|
|
if (gPokedexSelectedMon < 200)
|
|
gUnknown_0202BF08 = 86 + gPokedexSelectedMon / 3;
|
|
else
|
|
gUnknown_0202BF08 = 152;
|
|
|
|
group1->baseX = 13;
|
|
group1->baseY = gUnknown_0202BF08;
|
|
groupOam = &group1->oam[0];
|
|
gOamBuffer[groupOam->oamId].priority = 3;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group1->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group1->baseY;
|
|
|
|
if (group2->available == 1)
|
|
{
|
|
group2->baseX = 36;
|
|
group2->baseY = 36;
|
|
for (i = 0; i < 6; i++)
|
|
{
|
|
groupOam = &group2->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 1;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group2->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group2->baseY;
|
|
}
|
|
}
|
|
|
|
if (group3->available == 1)
|
|
{
|
|
group3->baseX = 36;
|
|
group3->baseY = 28;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
groupOam = &group3->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 1;
|
|
gOamBuffer[groupOam->oamId].tileNum = gUnknown_086A5DDA[gUnknown_0202BF14][i] +
|
|
gUnknown_086A5DF2[gUnknown_0202BF14][gUnknown_0202BF0C];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group3->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group3->baseY;
|
|
}
|
|
|
|
if (++gUnknown_0201A440 > 14)
|
|
{
|
|
gUnknown_0201A440 = 0;
|
|
if (++gUnknown_0202BF0C > 8)
|
|
gUnknown_0202BF0C = 0;
|
|
}
|
|
}
|
|
|
|
if (group4->available == 1)
|
|
{
|
|
if (gUnknown_086A6356[gPokedexSelectedMon] == -1)
|
|
{
|
|
var0 = 1;
|
|
var1 = 36;
|
|
}
|
|
else
|
|
{
|
|
var0 = 2;
|
|
var1 = 48;
|
|
}
|
|
|
|
group4->baseX = 48;
|
|
group4->baseY = 40;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
groupOam = &group4->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 1;
|
|
gOamBuffer[groupOam->oamId].tileNum = gUnknown_086A5DDA[var0][i] + gUnknown_086A5EE2[var0][gUnknown_0202BF0C];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group4->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group4->baseY;
|
|
}
|
|
|
|
if (++gUnknown_0201A440 > gUnknown_086A6014[var0][gUnknown_0202BF0C])
|
|
{
|
|
gUnknown_0201A440 = 0;
|
|
if (++gUnknown_0202BF0C > var1)
|
|
gUnknown_0202BF0C = 0;
|
|
}
|
|
}
|
|
|
|
if (group5->available == 1)
|
|
{
|
|
group5->baseX = 36;
|
|
group5->baseY = 64;
|
|
spriteSet = gUnknown_086A6148[5 + gUnknown_0201A448];
|
|
for (i = 0; i < spriteSet->count; i++)
|
|
{
|
|
groupOam = &group5->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 1;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group5->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group5->baseY;
|
|
}
|
|
|
|
if (++gUnknown_0202BF00 > 8)
|
|
{
|
|
gUnknown_0202BF00 = 0;
|
|
if (++gUnknown_0201A448 > 11)
|
|
gUnknown_0201A448 = 0;
|
|
}
|
|
}
|
|
|
|
if (group6->available == 1)
|
|
{
|
|
if (Pokedex_PopupTypeIx == POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT ||
|
|
Pokedex_PopupTypeIx == POKEDEX_POPUP_DELETE_CONFIRMATION_PROMPT)
|
|
{
|
|
group6->baseX = 120;
|
|
group6->baseY = 100;
|
|
}
|
|
else
|
|
{
|
|
group6->baseX = 120;
|
|
group6->baseY = 80;
|
|
}
|
|
|
|
spriteSet = gUnknown_086A6148[17 + Pokedex_PopupTypeIx];
|
|
for (i = 0; i < spriteSet->count; i++)
|
|
{
|
|
groupOam = &group6->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 0;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group6->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group6->baseY;
|
|
}
|
|
}
|
|
|
|
if (group7->available == 1)
|
|
{
|
|
group7->baseX = 158;
|
|
group7->baseY = 148;
|
|
spriteSet = gUnknown_086A6148[22 + gUnknown_0202BEE0];
|
|
for (i = 0; i < spriteSet->count; i++)
|
|
{
|
|
groupOam = &group7->oam[i];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group7->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group7->baseY;
|
|
}
|
|
}
|
|
|
|
if (group8->available == 1)
|
|
{
|
|
group8->baseX = 168;
|
|
group8->baseY = 84;
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
groupOam = &group8->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 3;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group8->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group8->baseY;
|
|
}
|
|
}
|
|
|
|
if (group9->available == 1)
|
|
{
|
|
group9->baseX = 120;
|
|
group9->baseY = 132;
|
|
groupOam = &group9->oam[0];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group9->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group9->baseY;
|
|
}
|
|
|
|
if (++gUnknown_0202BE20 > 12)
|
|
{
|
|
gUnknown_0202BE20 = 0;
|
|
gUnknown_0201A4F0 = 1 - gUnknown_0201A4F0;
|
|
gUnknown_0202BEE0 = 1 - gUnknown_0202BEE0;
|
|
}
|
|
|
|
group5->available = FALSE;
|
|
group6->available = FALSE;
|
|
group7->available = FALSE;
|
|
group9->available = FALSE;
|
|
}
|
|
|
|
static void RenderLinkGraphics(void)
|
|
{
|
|
int i;
|
|
struct SpriteGroup *group0;
|
|
struct SpriteGroup *group1;
|
|
struct SpriteGroup *group2;
|
|
struct SpriteGroup *group3;
|
|
struct SpriteGroup *group4;
|
|
struct SpriteGroup *group5;
|
|
struct SpriteGroup *group6;
|
|
struct SpriteGroup *group7;
|
|
struct OamDataSimple *groupOam;
|
|
const struct SpriteSet *spriteSet;
|
|
|
|
group0 = &gMain_spriteGroups[0];
|
|
group1 = &gMain_spriteGroups[1];
|
|
group2 = &gMain_spriteGroups[2];
|
|
group3 = &gMain_spriteGroups[3];
|
|
group4 = &gMain_spriteGroups[4];
|
|
group6 = &gMain_spriteGroups[5 + gUnknown_0201A448];
|
|
group7 = &gMain_spriteGroups[17 + Pokedex_PopupTypeIx];
|
|
group5 = &gMain_spriteGroups[24];
|
|
|
|
group0->available = TRUE;
|
|
group1->available = TRUE;
|
|
group2->available = gUnknown_0202A55C;
|
|
group3->available = gUnknown_0202A568[0];
|
|
group4->available = gUnknown_0202A568[1];
|
|
group6->available = FALSE;
|
|
group7->available = gUnknown_0202BEC4;
|
|
group5->available = gUnknown_0202C590;
|
|
sub_2414(gUnknown_086A6148, 29, group0);
|
|
|
|
group0->baseX = 20 + gUnknown_0201A4F0;
|
|
group0->baseY = 84 + gUnknown_0202A57C * 16;
|
|
groupOam = &group0->oam[0];
|
|
gOamBuffer[groupOam->oamId].priority = 2;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group0->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group0->baseY;
|
|
|
|
gUnknown_0202BF08 = 86 + gPokedexSelectedMon / 3;
|
|
group1->baseX = 13;
|
|
group1->baseY = gUnknown_0202BF08;
|
|
groupOam = &group1->oam[0];
|
|
gOamBuffer[groupOam->oamId].priority = 2;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group1->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group1->baseY;
|
|
|
|
if (group2->available == 1)
|
|
{
|
|
group2->baseX = 36;
|
|
group2->baseY = 36;
|
|
for (i = 0; i < 6; i++)
|
|
{
|
|
groupOam = &group2->oam[i];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group2->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group2->baseY;
|
|
}
|
|
}
|
|
|
|
if (group3->available == 1)
|
|
{
|
|
group3->baseX = 36;
|
|
group3->baseY = 28;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
groupOam = &group3->oam[i];
|
|
gOamBuffer[groupOam->oamId].tileNum = gUnknown_086A5DDA[gUnknown_0202BF14][i] +
|
|
gUnknown_086A5DF2[gUnknown_0202BF14][gUnknown_0202BF0C];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group3->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group3->baseY;
|
|
}
|
|
}
|
|
|
|
if (group4->available == 1)
|
|
{
|
|
group4->baseX = 48;
|
|
group4->baseY = 40;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
groupOam = &group4->oam[i];
|
|
gOamBuffer[groupOam->oamId].tileNum = gUnknown_086A5DDA[1][i] +
|
|
gUnknown_086A5E12[1][gUnknown_0202BF0C];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group4->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group4->baseY;
|
|
}
|
|
}
|
|
|
|
if (group6->available == 1)
|
|
{
|
|
group6->baseX = 36;
|
|
group6->baseY = 64;
|
|
spriteSet = gUnknown_086A6148[5 + gUnknown_0201A448];
|
|
for (i = 0; i < spriteSet->count; i++)
|
|
{
|
|
groupOam = &group6->oam[i];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group6->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group6->baseY;
|
|
}
|
|
}
|
|
|
|
if (group7->available == 1)
|
|
{
|
|
if (Pokedex_PopupTypeIx == POKEDEX_POPUP_TRANSMISSION_CONNECT_PROMPT ||
|
|
Pokedex_PopupTypeIx == POKEDEX_POPUP_DELETE_CONFIRMATION_PROMPT)
|
|
{
|
|
group7->baseX = 120;
|
|
group7->baseY = 100;
|
|
}
|
|
else
|
|
{
|
|
group7->baseX = 120;
|
|
group7->baseY = 80;
|
|
}
|
|
|
|
spriteSet = gUnknown_086A6148[17 + Pokedex_PopupTypeIx];
|
|
for (i = 0; i < spriteSet->count; i++)
|
|
{
|
|
groupOam = &group7->oam[i];
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group7->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group7->baseY;
|
|
}
|
|
}
|
|
|
|
if (group5->available == 1)
|
|
{
|
|
group5->baseX = 168;
|
|
group5->baseY = 84;
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
groupOam = &group5->oam[i];
|
|
gOamBuffer[groupOam->oamId].priority = 3;
|
|
gOamBuffer[groupOam->oamId].x = groupOam->xOffset + group5->baseX;
|
|
gOamBuffer[groupOam->oamId].y = groupOam->yOffset + group5->baseY;
|
|
}
|
|
}
|
|
|
|
group7->available = FALSE;
|
|
}
|
|
|
|
static void sub_5E60(void)
|
|
{
|
|
gUnknown_0202C5F0[0] = 0xDDDD;
|
|
gUnknown_0202C5B4 = 1;
|
|
gUnknown_0201C180 = 1;
|
|
gUnknown_0201B128 = 0;
|
|
gUnknown_0201C1BC = 0;
|
|
gUnknown_0202C544 = 0;
|
|
gUnknown_0202BECC = 0;
|
|
}
|
|
|
|
static s16 sub_5EA4(void)
|
|
{
|
|
s16 result;
|
|
|
|
if (gLink.isMaster)
|
|
result = sub_639C();
|
|
else
|
|
result = sub_65DC();
|
|
|
|
return result;
|
|
}
|
|
|
|
s16 sub_5EC8(void)
|
|
{
|
|
s16 result;
|
|
|
|
if (gLink.isMaster)
|
|
result = sub_5EEC();
|
|
else
|
|
result = sub_6144();
|
|
|
|
return result;
|
|
}
|
|
|
|
static int sub_5EEC(void)
|
|
{
|
|
int i;
|
|
u16 var0;
|
|
|
|
if (gUnknown_0201B128 == 0)
|
|
{
|
|
switch (gUnknown_0201C1BC)
|
|
{
|
|
case 0:
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
gUnknown_0202C5F0[0] = 0xFEFE;
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 8; i++)
|
|
gUnknown_0202C5F0[i] = 0;
|
|
}
|
|
return 0;
|
|
case 1:
|
|
gUnknown_0202C5F0[0] = 0xECEC;
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
else if (gUnknown_0201C180 < 8)
|
|
{
|
|
for (i = 0; i < 8; i++)
|
|
gUnknown_0202C5F0[i] = 0xDDDD;
|
|
}
|
|
else if (gUnknown_0201C180 < 16)
|
|
{
|
|
var0 = (gUnknown_0201C180 - 8) * 28;
|
|
gUnknown_0202C5F0[0] = gUnknown_0201C180;
|
|
gUnknown_0202C5F0[1] = gPokedexFlags[var0] |
|
|
(gPokedexFlags[var0 + 1] << 4) |
|
|
(gPokedexFlags[var0 + 2] << 8) |
|
|
(gPokedexFlags[var0 + 3] << 12);
|
|
gUnknown_0202C5F0[2] = gPokedexFlags[var0 + 4] |
|
|
(gPokedexFlags[var0 + 5] << 4) |
|
|
(gPokedexFlags[var0 + 6] << 8) |
|
|
(gPokedexFlags[var0 + 7] << 12);
|
|
gUnknown_0202C5F0[3] = gPokedexFlags[var0 + 8] |
|
|
(gPokedexFlags[var0 + 9] << 4) |
|
|
(gPokedexFlags[var0 + 10] << 8) |
|
|
(gPokedexFlags[var0 + 11] << 12);
|
|
gUnknown_0202C5F0[4] = gPokedexFlags[var0 + 12] |
|
|
(gPokedexFlags[var0 + 13] << 4) |
|
|
(gPokedexFlags[var0 + 14] << 8) |
|
|
(gPokedexFlags[var0 + 15] << 12);
|
|
gUnknown_0202C5F0[5] = gPokedexFlags[var0 + 16] |
|
|
(gPokedexFlags[var0 + 17] << 4) |
|
|
(gPokedexFlags[var0 + 18] << 8) |
|
|
(gPokedexFlags[var0 + 19] << 12);
|
|
gUnknown_0202C5F0[6] = gPokedexFlags[var0 + 20] |
|
|
(gPokedexFlags[var0 + 21] << 4) |
|
|
(gPokedexFlags[var0 + 22] << 8) |
|
|
(gPokedexFlags[var0 + 23] << 12);
|
|
gUnknown_0202C5F0[7] = gPokedexFlags[var0 + 24] |
|
|
(gPokedexFlags[var0 + 25] << 4) |
|
|
(gPokedexFlags[var0 + 26] << 8) |
|
|
(gPokedexFlags[var0 + 27] << 12);
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 8; i++)
|
|
gUnknown_0202C5F0[i] = 0;
|
|
}
|
|
|
|
gUnknown_0201C180++;
|
|
return 0;
|
|
}
|
|
|
|
static int sub_6144(void)
|
|
{
|
|
int i;
|
|
u16 var0;
|
|
|
|
if (gUnknown_0201B128 == 0)
|
|
{
|
|
switch (gUnknown_0202C544)
|
|
{
|
|
case 0:
|
|
if (JOY_NEW(A_BUTTON))
|
|
{
|
|
gUnknown_0202C5F0[0] = 0xFEFE;
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 8; i++)
|
|
gUnknown_0202C5F0[i] = 0;
|
|
}
|
|
return 0;
|
|
case 1:
|
|
gUnknown_0202C5F0[0] = 0xECEC;
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
else if (gUnknown_0201C180 < 8)
|
|
{
|
|
for (i = 0; i < 8; i++)
|
|
gUnknown_0202C5F0[i] = 0xDDDD;
|
|
}
|
|
else if (gUnknown_0201C180 < 16)
|
|
{
|
|
var0 = (gUnknown_0201C180 - 8) * 28;
|
|
gUnknown_0202C5F0[0] = gUnknown_0201C180;
|
|
gUnknown_0202C5F0[1] = gPokedexFlags[var0] |
|
|
(gPokedexFlags[var0 + 1] << 4) |
|
|
(gPokedexFlags[var0 + 2] << 8) |
|
|
(gPokedexFlags[var0 + 3] << 12);
|
|
gUnknown_0202C5F0[2] = gPokedexFlags[var0 + 4] |
|
|
(gPokedexFlags[var0 + 5] << 4) |
|
|
(gPokedexFlags[var0 + 6] << 8) |
|
|
(gPokedexFlags[var0 + 7] << 12);
|
|
gUnknown_0202C5F0[3] = gPokedexFlags[var0 + 8] |
|
|
(gPokedexFlags[var0 + 9] << 4) |
|
|
(gPokedexFlags[var0 + 10] << 8) |
|
|
(gPokedexFlags[var0 + 11] << 12);
|
|
gUnknown_0202C5F0[4] = gPokedexFlags[var0 + 12] |
|
|
(gPokedexFlags[var0 + 13] << 4) |
|
|
(gPokedexFlags[var0 + 14] << 8) |
|
|
(gPokedexFlags[var0 + 15] << 12);
|
|
gUnknown_0202C5F0[5] = gPokedexFlags[var0 + 16] |
|
|
(gPokedexFlags[var0 + 17] << 4) |
|
|
(gPokedexFlags[var0 + 18] << 8) |
|
|
(gPokedexFlags[var0 + 19] << 12);
|
|
gUnknown_0202C5F0[6] = gPokedexFlags[var0 + 20] |
|
|
(gPokedexFlags[var0 + 21] << 4) |
|
|
(gPokedexFlags[var0 + 22] << 8) |
|
|
(gPokedexFlags[var0 + 23] << 12);
|
|
gUnknown_0202C5F0[7] = gPokedexFlags[var0 + 24] |
|
|
(gPokedexFlags[var0 + 25] << 4) |
|
|
(gPokedexFlags[var0 + 26] << 8) |
|
|
(gPokedexFlags[var0 + 27] << 12);
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 8; i++)
|
|
gUnknown_0202C5F0[i] = 0;
|
|
}
|
|
|
|
gUnknown_0201C180++;
|
|
return 0;
|
|
}
|
|
|
|
//Link transfer as host (See sub_65DC for client)
|
|
int sub_639C(void)
|
|
{
|
|
int i, j;
|
|
u16 var0;
|
|
u16 arr0[28];
|
|
|
|
if (gUnknown_0201B128 == 0)
|
|
{
|
|
switch (gUnknown_0201C1BC)
|
|
{
|
|
case 0:
|
|
if (gUnknown_0201A4D0[0][0] == 0xFEFE || gUnknown_0201A4D0[0][1] == 0xFEFE)
|
|
{
|
|
gUnknown_0201C1BC = 1;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (gUnknown_0201A4D0[0][0] == 0xECEC && gUnknown_0201A4D0[0][1] == 0xECEC)
|
|
{
|
|
gUnknown_0201B128 = -1;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMITTING_ACTIVE;
|
|
gUnknown_0201C180 = 1;
|
|
}
|
|
else if (++gUnknown_0202BECC > 10)
|
|
{
|
|
return 1;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
u16 var1 = gUnknown_0201A4D0[0][1] - 8;
|
|
if (var1 > 7)
|
|
return 0;
|
|
|
|
gUnknown_0202C5B4 = gUnknown_0201A4D0[0][1];
|
|
arr0[0] = gUnknown_0201A4D0[0][3] & 0xF;
|
|
arr0[1] = (gUnknown_0201A4D0[0][3] & 0xF0) >> 4;
|
|
arr0[2] = (gUnknown_0201A4D0[0][3] & 0xF00) >> 8;
|
|
arr0[3] = (gUnknown_0201A4D0[0][3] & 0xF000) >> 12;
|
|
arr0[4] = gUnknown_0201A4D0[0][5] & 0xF;
|
|
arr0[5] = (gUnknown_0201A4D0[0][5] & 0xF0) >> 4;
|
|
arr0[6] = (gUnknown_0201A4D0[0][5] & 0xF00) >> 8;
|
|
arr0[7] = (gUnknown_0201A4D0[0][5] & 0xF000) >> 12;
|
|
arr0[8] = gUnknown_0201A4D0[0][7] & 0xF;
|
|
arr0[9] = (gUnknown_0201A4D0[0][7] & 0xF0) >> 4;
|
|
arr0[10] = (gUnknown_0201A4D0[0][7] & 0xF00) >> 8;
|
|
arr0[11] = (gUnknown_0201A4D0[0][7] & 0xF000) >> 12;
|
|
arr0[12] = gUnknown_0201A4D0[0][9] & 0xF;
|
|
arr0[13] = (gUnknown_0201A4D0[0][9] & 0xF0) >> 4;
|
|
arr0[14] = (gUnknown_0201A4D0[0][9] & 0xF00) >> 8;
|
|
arr0[15] = (gUnknown_0201A4D0[0][9] & 0xF000) >> 12;
|
|
arr0[16] = gUnknown_0201A4D0[0][11] & 0xF;
|
|
arr0[17] = (gUnknown_0201A4D0[0][11] & 0xF0) >> 4;
|
|
arr0[18] = (gUnknown_0201A4D0[0][11] & 0xF00) >> 8;
|
|
arr0[19] = (gUnknown_0201A4D0[0][11] & 0xF000) >> 12;
|
|
arr0[20] = gUnknown_0201A4D0[0][13] & 0xF;
|
|
arr0[21] = (gUnknown_0201A4D0[0][13] & 0xF0) >> 4;
|
|
arr0[22] = (gUnknown_0201A4D0[0][13] & 0xF00) >> 8;
|
|
arr0[23] = (gUnknown_0201A4D0[0][13] & 0xF000) >> 12;
|
|
arr0[24] = gUnknown_0201A4D0[0][15] & 0xF;
|
|
arr0[25] = (gUnknown_0201A4D0[0][15] & 0xF0) >> 4;
|
|
arr0[26] = (gUnknown_0201A4D0[0][15] & 0xF00) >> 8;
|
|
arr0[27] = (gUnknown_0201A4D0[0][15] & 0xF000) >> 12;
|
|
|
|
for (i = 0; i < 28; i++)
|
|
{
|
|
var0 = (gUnknown_0202C5B4 - 8) * 28 + i;
|
|
if (gPokedexFlags[var0] == SPECIES_UNSEEN && arr0[i] == 4)
|
|
gPokedexFlagExchangeBuffer[var0] = SPECIES_SHARED;
|
|
else if (gPokedexFlags[var0] == SPECIES_SEEN && arr0[i] == 4)
|
|
gPokedexFlagExchangeBuffer[var0] = SPECIES_SHARED_AND_SEEN;
|
|
}
|
|
|
|
if (gUnknown_0202C5B4 == 15)
|
|
return -1;
|
|
}
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
for (j = 0; j < 2; j++)
|
|
gUnknown_0201A4D0[i][j] = 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Link transfer as client (See sub_639C for host)
|
|
static int sub_65DC(void)
|
|
{
|
|
int i, j;
|
|
u16 var0;
|
|
u16 arr0[28];
|
|
|
|
if (gUnknown_0201B128 == 0)
|
|
{
|
|
switch (gUnknown_0202C544)
|
|
{
|
|
case 0:
|
|
if (gUnknown_0201A4D0[0][0] == 0xFEFE || gUnknown_0201A4D0[0][1] == 0xFEFE)
|
|
{
|
|
gUnknown_0202C544 = 1;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (gUnknown_0201A4D0[0][0] == 0xECEC && gUnknown_0201A4D0[0][1] == 0xECEC)
|
|
{
|
|
gUnknown_0201B128 = -1;
|
|
Pokedex_PopupTypeIx = POKEDEX_POPUP_TRANSMITTING_ACTIVE;
|
|
gUnknown_0201C180 = 1;
|
|
}
|
|
else if (++gUnknown_0202BECC > 10)
|
|
{
|
|
return 1;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
u16 var1 = gUnknown_0201A4D0[0][0] - 8;
|
|
if (var1 > 7)
|
|
return 0;
|
|
|
|
gUnknown_0202C5B4 = gUnknown_0201A4D0[0][0];
|
|
arr0[0] = gUnknown_0201A4D0[0][2] & 0xF;
|
|
arr0[1] = (gUnknown_0201A4D0[0][2] & 0xF0) >> 4;
|
|
arr0[2] = (gUnknown_0201A4D0[0][2] & 0xF00) >> 8;
|
|
arr0[3] = (gUnknown_0201A4D0[0][2] & 0xF000) >> 12;
|
|
arr0[4] = gUnknown_0201A4D0[0][4] & 0xF;
|
|
arr0[5] = (gUnknown_0201A4D0[0][4] & 0xF0) >> 4;
|
|
arr0[6] = (gUnknown_0201A4D0[0][4] & 0xF00) >> 8;
|
|
arr0[7] = (gUnknown_0201A4D0[0][4] & 0xF000) >> 12;
|
|
arr0[8] = gUnknown_0201A4D0[0][6] & 0xF;
|
|
arr0[9] = (gUnknown_0201A4D0[0][6] & 0xF0) >> 4;
|
|
arr0[10] = (gUnknown_0201A4D0[0][6] & 0xF00) >> 8;
|
|
arr0[11] = (gUnknown_0201A4D0[0][6] & 0xF000) >> 12;
|
|
arr0[12] = gUnknown_0201A4D0[0][8] & 0xF;
|
|
arr0[13] = (gUnknown_0201A4D0[0][8] & 0xF0) >> 4;
|
|
arr0[14] = (gUnknown_0201A4D0[0][8] & 0xF00) >> 8;
|
|
arr0[15] = (gUnknown_0201A4D0[0][8] & 0xF000) >> 12;
|
|
arr0[16] = gUnknown_0201A4D0[0][10] & 0xF;
|
|
arr0[17] = (gUnknown_0201A4D0[0][10] & 0xF0) >> 4;
|
|
arr0[18] = (gUnknown_0201A4D0[0][10] & 0xF00) >> 8;
|
|
arr0[19] = (gUnknown_0201A4D0[0][10] & 0xF000) >> 12;
|
|
arr0[20] = gUnknown_0201A4D0[0][12] & 0xF;
|
|
arr0[21] = (gUnknown_0201A4D0[0][12] & 0xF0) >> 4;
|
|
arr0[22] = (gUnknown_0201A4D0[0][12] & 0xF00) >> 8;
|
|
arr0[23] = (gUnknown_0201A4D0[0][12] & 0xF000) >> 12;
|
|
arr0[24] = gUnknown_0201A4D0[0][14] & 0xF;
|
|
arr0[25] = (gUnknown_0201A4D0[0][14] & 0xF0) >> 4;
|
|
arr0[26] = (gUnknown_0201A4D0[0][14] & 0xF00) >> 8;
|
|
arr0[27] = (gUnknown_0201A4D0[0][14] & 0xF000) >> 12;
|
|
|
|
for (i = 0; i < 28; i++)
|
|
{
|
|
var0 = (gUnknown_0202C5B4 - 8) * 28 + i;
|
|
if (gPokedexFlags[var0] == SPECIES_UNSEEN && arr0[i] == 4)
|
|
gPokedexFlagExchangeBuffer[var0] = SPECIES_SHARED;
|
|
else if (gPokedexFlags[var0] == SPECIES_SEEN && arr0[i] == 4)
|
|
gPokedexFlagExchangeBuffer[var0] = SPECIES_SHARED_AND_SEEN;
|
|
}
|
|
|
|
if (gUnknown_0202C5B4 == 15)
|
|
return -1;
|
|
}
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
for (j = 0; j < 2; j++)
|
|
gUnknown_0201A4D0[i][j] = 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void PrintSelectedMonDexNum(s16 species)
|
|
{
|
|
int i;
|
|
int var0;
|
|
u16 var1;
|
|
u16 var2;
|
|
|
|
DmaFill16(3, 0, gUnknown_03000000, 0x800);
|
|
var0 = 0;
|
|
if (species == SPECIES_JIRACHI)
|
|
{
|
|
if (gPokedexFlags[SPECIES_JIRACHI] != SPECIES_UNSEEN)
|
|
{
|
|
PrintString(CHAR_2_FONT_1, 1, 5, 2, 1, 2);
|
|
PrintString(CHAR_0_FONT_1, 1, 6, 2, 1, 2);
|
|
PrintString(CHAR_1_FONT_1, 1, 7, 2, 1, 2);
|
|
}
|
|
else
|
|
{
|
|
PrintString(CHAR_SPACE_FONT_1, 1, 5, 2, 1, 2);
|
|
PrintString(CHAR_SPACE_FONT_1, 1, 6, 2, 1, 2);
|
|
PrintString(CHAR_SPACE_FONT_1, 1, 7, 2, 1, 2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Dex number of the selected species
|
|
for (i = 0; i < DEX_NUM_DIGITS; i++)
|
|
PrintString(gPokedexEntries[species].dexNum[i] + 32, 1, i + 5, 2, 1, 2);
|
|
}
|
|
|
|
if (gPokedexFlags[species] > SPECIES_UNSEEN)
|
|
{
|
|
for (i = 0; i < POKEMON_NAME_LENGTH; i++)
|
|
{
|
|
var1 = gPokedexEntries[species].name[i] & ~0xF;
|
|
var2 = gPokedexEntries[species].name[i] & 0xF;
|
|
if (var2 == 0)
|
|
var2 = 4;
|
|
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[var1], gUnknown_0202BE30, 0x20);
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[var1 + 0x400], gUnknown_0201B130, 0x20);
|
|
sub_71DC(var2, var0, 0);
|
|
var0 += var2;
|
|
}
|
|
|
|
CopyBgTilesRect(gUnknown_03000000, (void *)0x06004C00, 8, 2);
|
|
DmaFill16(3, 0, gUnknown_03000000, 0x800);
|
|
var0 = 0;
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 10; i++)
|
|
CopyBgTilesRect((void *)&gPokedexTextGlyphs_Gfx[ENGLISH_GLYPHS_START], (void *)0x06004C00 + i * 0x20, 1, 2);
|
|
}
|
|
|
|
if (gPokedexFlags[species] == SPECIES_SEEN || gPokedexFlags[species] > SPECIES_SHARED)
|
|
{
|
|
for (i = 0; i < POKEMON_CATEGORY_NAME_LENGTH; i++)
|
|
{
|
|
var1 = gPokedexEntries[species].category[i] & ~0xF;
|
|
var2 = gPokedexEntries[species].category[i] & 0xF;
|
|
if (var2 == 0)
|
|
var2 = 6;
|
|
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[var1], gUnknown_0202BE30, 0x20);
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[0x400 + var1], gUnknown_0201B130, 0x20);
|
|
sub_71DC(var2, var0, 0);
|
|
var0 += var2;
|
|
}
|
|
|
|
CopyBgTilesRect(gUnknown_03000000, (void *)0x06004D00, 9, 2);
|
|
DmaFill16(3, 0, gUnknown_03000000, 0x800);
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 9; i++)
|
|
CopyBgTilesRect((void *)&gPokedexTextGlyphs_Gfx[ENGLISH_GLYPHS_START], (void *)0x06004D00 + i * 0x20, 1, 2);
|
|
}
|
|
|
|
if (gPokedexFlags[species] == SPECIES_CAUGHT)
|
|
{
|
|
PrintString(gPokedexEntries[species].heightWeight[0] + 32, 1, 16, 6, 1, 2);
|
|
PrintString(gPokedexEntries[species].heightWeight[1] + 32, 1, 17, 6, 1, 2);
|
|
PrintString(gPokedexEntries[species].heightWeight[2] + 32, 1, 19, 6, 1, 2);
|
|
PrintString(gPokedexEntries[species].heightWeight[3] + 32, 1, 20, 6, 1, 2);
|
|
for (i = 0; i < POKEMON_HEIGHT_WEIGHT_TEXT_LENGTH - 4; i++)
|
|
PrintString(gPokedexEntries[species].heightWeight[4 + i], 1, i + 16, 8, 1, 1);
|
|
}
|
|
else
|
|
{
|
|
PrintString(CHAR_DASH_FONT_1, 1, 16, 6, 1, 2);
|
|
PrintString(CHAR_DASH_FONT_1, 1, 17, 6, 1, 2);
|
|
PrintString(CHAR_DASH_FONT_1, 1, 19, 6, 1, 2);
|
|
PrintString(CHAR_DASH_FONT_1, 1, 20, 6, 1, 2);
|
|
for (i = 0; i < POKEMON_HEIGHT_WEIGHT_TEXT_LENGTH - 4; i++)
|
|
PrintString(CHAR_DASH_FONT_0, 1, i + 16, 8, 1, 1);
|
|
}
|
|
}
|
|
|
|
static void PrintSeenOwnedTotals(s16 seen, s16 owned)
|
|
{
|
|
int i;
|
|
int temp;
|
|
int seenDigits[DEX_NUM_DIGITS];
|
|
int ownedDigits[DEX_NUM_DIGITS];
|
|
|
|
temp = seen;
|
|
seenDigits[0] = temp / 100;
|
|
temp %= 100;
|
|
seenDigits[1] = temp / 10;
|
|
seenDigits[2] = temp % 10;
|
|
|
|
temp = owned;
|
|
ownedDigits[0] = temp / 100;
|
|
temp %= 100;
|
|
ownedDigits[1] = temp / 10;
|
|
ownedDigits[2] = temp % 10;
|
|
|
|
for (i = 0; i < DEX_NUM_DIGITS; i++)
|
|
{
|
|
PrintString(seenDigits[i], 2, i + 25, 15, 1, 1);
|
|
PrintString(ownedDigits[i] + 32, 2, i + 25, 16, 1, 2);
|
|
}
|
|
}
|
|
|
|
void PrintDexNumbersFromListPosition(s16 listPosition)
|
|
{
|
|
int i, j;
|
|
int var0;
|
|
u16 var1;
|
|
u16 var2;
|
|
|
|
DmaFill16(3, 0, gUnknown_03000000, 0x800);
|
|
var0 = 0;
|
|
for (i = 0; i < ENTRIES_SHOWN_COUNT; i++)
|
|
{
|
|
if (listPosition + i == SPECIES_JIRACHI)
|
|
{
|
|
if (gPokedexFlags[SPECIES_JIRACHI] != SPECIES_UNSEEN)
|
|
{
|
|
PrintString(CHAR_2_FONT_1, 2, 8, i * 2 + 10, 1, 2);
|
|
PrintString(CHAR_0_FONT_1, 2, 9, i * 2 + 10, 1, 2);
|
|
PrintString(CHAR_1_FONT_1, 2, 10, i * 2 + 10, 1, 2);
|
|
}
|
|
else
|
|
{
|
|
PrintString(CHAR_SPACE_FONT_1, 2, 8, i * 2 + 10, 1, 2);
|
|
PrintString(CHAR_SPACE_FONT_1, 2, 9, i * 2 + 10, 1, 2);
|
|
PrintString(CHAR_SPACE_FONT_1, 2, 10, i * 2 + 10, 1, 2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Doesn't use listPosition for some reason, despite being the only value passed
|
|
for (j = 0; j < DEX_NUM_DIGITS; j++)
|
|
PrintString(gPokedexEntries[gPokedexListPosition + i].dexNum[j] + 32, 2, j + 8, i * 2 + 10, 1, 2);
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < ENTRIES_SHOWN_COUNT; i++)
|
|
{
|
|
if (gPokedexFlags[listPosition + i] > SPECIES_UNSEEN)
|
|
{
|
|
//This manually builds the tiles needed, for kerning reasons.
|
|
//First 3 bytes point to a tile glyph pair (with an upper and lower half) and
|
|
//the 4th byte is the width needed for that glyph, with the 'space between' included.
|
|
//The 'space' character is 4 px wide.
|
|
for (j = 0; j < POKEMON_NAME_LENGTH; j++)
|
|
{
|
|
// These don't use listPosition for some reason, despite being the only value passed
|
|
var1 = gPokedexEntries[gPokedexListPosition + i].name[j] & ~0xF;
|
|
var2 = gPokedexEntries[gPokedexListPosition + i].name[j] & 0xF;
|
|
if (var2 == 0)
|
|
var2 = 4;
|
|
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[var1], gUnknown_0202BE30, 0x20);
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[0x400 + var1], gUnknown_0201B130, 0x20);
|
|
sub_71DC(var2, var0, 0);
|
|
var0 += var2;
|
|
}
|
|
|
|
CopyBgTilesRect(gUnknown_03000000, (void *)0x06000000 + gUnknown_086A64F0[i], 8, 2);
|
|
DmaFill16(3, 0, gUnknown_03000000, 0x800);
|
|
var0 = 0;
|
|
}
|
|
else
|
|
{
|
|
for (j = 0; j < 7; j++)
|
|
CopyBgTilesRect((void *)&gPokedexTextGlyphs_Gfx[ENGLISH_GLYPHS_START], (void *)0x06000000 + gUnknown_086A64F0[i] + j * 0x20, 1, 2);
|
|
|
|
CopyBgTilesRect((void *)gPokedexTextGlyphs_Gfx, (void *)0x06000000 + gUnknown_086A64F0[i] + j * 0x20, 1, 2);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void PrintCaughtBallFromListPosition(s16 position)
|
|
{
|
|
int i;
|
|
int var0;
|
|
|
|
for (i = 0; i < ENTRIES_SHOWN_COUNT; i++)
|
|
{
|
|
var0 = gPokedexFlags[position + i] == SPECIES_CAUGHT ? CHAR_BALL_CAUGHT : CHAR_BALL_NOT_CAUGHT;
|
|
PrintString(var0, 1, 4, 10 + i * 2, 2, 2);
|
|
}
|
|
}
|
|
|
|
void sub_6F78(s16 species)
|
|
{
|
|
s16 state = gPokedexFlags[gPokedexSelectedMon];
|
|
s16 var1 = species / 15;
|
|
s16 var2 = species % 15;
|
|
switch (state)
|
|
{
|
|
case SPECIES_UNSEEN:
|
|
CopyBgTilesRect(gPokedexSprites_Gfx + 0x5C00, (void *)0x06013400, 24, 1);
|
|
DmaCopy16(3, gPokedexSprites_Pals, (void *)OBJ_PLTT + 0x20, 0x20);
|
|
break;
|
|
case SPECIES_SEEN:
|
|
CopyBgTilesRect(gMonPortraitGroupGfx[var1] + var2 * 0x300, (void *)0x06013400, 24, 1);
|
|
DmaCopy16(3, gMonPortraitGroupPals[0] + 0x1E0, (void *)OBJ_PLTT + 0x20, 0x20);
|
|
break;
|
|
case SPECIES_SHARED:
|
|
case SPECIES_SHARED_AND_SEEN:
|
|
CopyBgTilesRect(gMonPortraitGroupGfx[var1] + var2 * 0x300, (void *)0x06013400, 24, 1);
|
|
sub_10170(gMonPortraitGroupPals[var1] + var2 * 0x20, (void *)OBJ_PLTT + 0x20, 0x20, 0xE);
|
|
break;
|
|
case SPECIES_CAUGHT:
|
|
CopyBgTilesRect(gMonPortraitGroupGfx[var1] + var2 * 0x300, (void *)0x06013400, 24, 1);
|
|
DmaCopy16(3, gMonPortraitGroupPals[var1] + var2 * 0x20, (void *)OBJ_PLTT + 0x20, 0x20);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sub_70E0(s16 species, u32 page)
|
|
{
|
|
int i, j;
|
|
int var0;
|
|
u16 var1;
|
|
u16 var2;
|
|
|
|
var0 = 0;
|
|
DmaFill16(3, 0, gUnknown_03000000, 0x1800);
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
for (j = 0; j < 42; j++)
|
|
{
|
|
var1 = gPokedexEntries[species].description[page * 126 + i * 42 + j] & ~0xF;
|
|
var2 = gPokedexEntries[species].description[page * 126 + i * 42 + j] & 0xF;
|
|
if (var2 == 0)
|
|
var2 = 4;
|
|
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[var1], gUnknown_0202BE30, 0x20);
|
|
DmaCopy16(3, &gPokedexTextGlyphs_Gfx[0x400 + var1], gUnknown_0201B130, 0x20);
|
|
sub_71DC(var2, var0, i);
|
|
var0 += var2;
|
|
}
|
|
|
|
var0 = 0;
|
|
}
|
|
|
|
DmaCopy16(3, gUnknown_03000000, (void *)VRAM + 0x5C00, 0x1800);
|
|
}
|
|
|
|
void sub_71DC(s32 arg0, s32 arg1, s32 arg2) {
|
|
int i;
|
|
s32 temp_r2;
|
|
|
|
temp_r2 = ((arg1 / 8) * 0x10) + (arg2 * 0x400);
|
|
|
|
switch (arg0) {
|
|
case 6:
|
|
switch (arg1 % 8) {
|
|
case 0:
|
|
for(i = 0; i < 8; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= gUnknown_0202BE30[i * 2];
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= gUnknown_0202BE30[i * 2 + 1] & 0xFF;
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2];
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2 + 1] & 0xFF;
|
|
}
|
|
return;
|
|
case 1:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0202BE30[i * 2 + 1] & 0xFF) << 4);
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0201B130[i * 2 + 1] & 0xFF) << 4);
|
|
}
|
|
return;
|
|
case 2:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFF00) >> 8) | (gUnknown_0202BE30[i * 2 + 1] & 0xFF) << 8;
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFF00) >> 8) | (gUnknown_0201B130[i * 2 + 1] & 0xFF) << 8;
|
|
}
|
|
return;
|
|
case 3:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFFF0) >> 0x4) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 0xC);
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2 + 1] & 0xF0) >> 0x4;
|
|
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFFF0) >> 0x4) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 0xC);
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2 + 1] & 0xF0) >> 0x4;
|
|
}
|
|
return;
|
|
case 4:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= gUnknown_0202BE30[i * 2];
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= gUnknown_0202BE30[i * 2 + 1] & 0xFF;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2];
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2 + 1] & 0xFF;
|
|
}
|
|
return;
|
|
case 5:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0202BE30[i * 2 + 1] & 0xFF) << 4);
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0201B130[i * 2 + 1] & 0xFF) << 4);
|
|
|
|
}
|
|
return;
|
|
case 6:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFF00) >> 0x8) | ((gUnknown_0202BE30[i * 2 + 1] & 0xFF) << 8);
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFF00) >> 0x8) | ((gUnknown_0201B130[i * 2 + 1] & 0xFF) << 8);
|
|
}
|
|
return;
|
|
case 7:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFFF0) >> 0x4) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 0xC);
|
|
gUnknown_03000000[(i * 2 + 0x11) + temp_r2] |= (gUnknown_0202BE30[i * 2 + 1] & 0xF0) >> 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFFF0) >> 0x4) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 0xC);
|
|
gUnknown_03000000[(i * 2 + 0x11) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2 + 1] & 0xF0) >> 4;
|
|
|
|
}
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
break;
|
|
case 5:
|
|
switch (arg1 % 8) {
|
|
case 0:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= gUnknown_0202BE30[i * 2];
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= gUnknown_0202BE30[i * 2 + 1] & 0xF;
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2];
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2 + 1] & 0xF;
|
|
|
|
}
|
|
return;
|
|
case 1:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 4);
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 4);
|
|
|
|
}
|
|
return;
|
|
case 2:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFF00) >> 0x8) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 8);
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFF00) >> 0x8) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 8);
|
|
|
|
}
|
|
return;
|
|
case 3:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFFF0) >> 0x4) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 0xC);
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFFF0) >> 0x4) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 0xC);
|
|
|
|
}
|
|
return;
|
|
case 4:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= gUnknown_0202BE30[i * 2];
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= gUnknown_0202BE30[i * 2 + 1] & 0xF;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2];
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2 + 1] & 0xF;
|
|
|
|
}
|
|
return;
|
|
case 5:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 4);
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xF000) >> 0xC) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 4);
|
|
|
|
}
|
|
return;
|
|
case 6:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFF00) >> 8) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 8);
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFF00) >> 0x8) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 8);
|
|
|
|
}
|
|
return;
|
|
case 7:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= ((gUnknown_0202BE30[i * 2] & 0xFFF0) >> 4) | ((gUnknown_0202BE30[i * 2 + 1] & 0xF) << 0xC);
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= ((gUnknown_0201B130[i * 2] & 0xFFF0) >> 4) | ((gUnknown_0201B130[i * 2 + 1] & 0xF) << 0xC);
|
|
|
|
}
|
|
return;
|
|
}
|
|
break;
|
|
case 4:
|
|
switch (arg1 % 8) {
|
|
case 0:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= gUnknown_0202BE30[i * 2];
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2];
|
|
}
|
|
return;
|
|
case 1:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF000) >> 0xC;
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF000) >> 0xC;
|
|
}
|
|
return;
|
|
case 2:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF00) >> 8;
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF00) >> 8;
|
|
}
|
|
return;
|
|
case 3:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF0) >> 4;
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF0) >> 4;
|
|
}
|
|
return;
|
|
case 4:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= gUnknown_0202BE30[i * 2];
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= gUnknown_0201B130[i * 2];
|
|
}
|
|
return;
|
|
case 5:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF000) >> 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF000) >> 0xC;
|
|
}
|
|
return;
|
|
case 6:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF00) >> 8;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF00) >> 8;
|
|
}
|
|
return;
|
|
case 7:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF0) >> 4;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF0) >> 4;
|
|
}
|
|
return;
|
|
}
|
|
break;
|
|
case 3:
|
|
switch (arg1 % 8) {
|
|
case 0:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF);
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF);
|
|
}
|
|
return;
|
|
case 1:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
}
|
|
return;
|
|
case 2:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF00) >> 8;
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF00) >> 8;
|
|
}
|
|
return;
|
|
case 3:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF0) >> 4;
|
|
gUnknown_03000000[(i * 2) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF0) >> 4;
|
|
}
|
|
return;
|
|
case 4:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF);
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF);
|
|
}
|
|
return;
|
|
case 5:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFFF) << 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFFF) << 4;
|
|
}
|
|
return;
|
|
case 6:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF00) >> 8;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF00) >> 8;
|
|
}
|
|
return;
|
|
case 7:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF0) >> 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF0) >> 4;
|
|
}
|
|
return;
|
|
}
|
|
break;
|
|
case 2:
|
|
switch (arg1 % 8) {
|
|
case 0:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF);
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF);
|
|
}
|
|
return;
|
|
case 1:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 4;
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 4;
|
|
}
|
|
return;
|
|
case 2:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 8;
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 8;
|
|
}
|
|
return;
|
|
case 3:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[i * 2 + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF0) >> 4;
|
|
gUnknown_03000000[i * 2 + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF0) >> 4;
|
|
}
|
|
return;
|
|
case 4:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF);
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF);
|
|
}
|
|
return;
|
|
case 5:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 0x4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 0x4;
|
|
}
|
|
return;
|
|
case 6:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xFF) << 0x8;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xFF) << 0x8;
|
|
}
|
|
return;
|
|
case 7:
|
|
for(i = 0; i <=7; i++)
|
|
{
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2] |= (gUnknown_0202BE30[i * 2] & 0xF0) >> 4;
|
|
gUnknown_03000000[(i * 2 + 1) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF) << 0xC;
|
|
gUnknown_03000000[(i * 2 + 0x10) + temp_r2 + 0x200] |= (gUnknown_0201B130[i * 2] & 0xF0) >> 4;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void sub_88E4(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < NUM_SPECIES; i++)
|
|
gPokedexFlags[i] = gMain_saveData.pokedexFlags[i];
|
|
|
|
// It's unclear what these trailing 20 entries are...
|
|
for (i = NUM_SPECIES; i < NUM_SPECIES + 20; i++)
|
|
gPokedexFlags[i] = 0;
|
|
|
|
gPokedexNumOwned = 0;
|
|
gPokedexNumSeen = 0;
|
|
for (i = 0; i < NUM_SPECIES; i++)
|
|
{
|
|
switch (gPokedexFlags[i])
|
|
{
|
|
case SPECIES_CAUGHT:
|
|
gPokedexNumOwned++;
|
|
case SPECIES_SEEN:
|
|
case SPECIES_SHARED_AND_SEEN:
|
|
gPokedexNumSeen++;
|
|
break;
|
|
case SPECIES_UNSEEN:
|
|
case SPECIES_SHARED:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_8974(s16 species)
|
|
{
|
|
int var0;
|
|
s16 quotient;
|
|
s16 remainder;
|
|
s16 var1;
|
|
|
|
var0 = gDexAnimationIx[species];
|
|
if (var0 == -1)
|
|
return;
|
|
|
|
if (var0 < 100)
|
|
{
|
|
gUnknown_0202BF14 = 0;
|
|
quotient = var0 / 5;
|
|
remainder = var0 % 5;
|
|
|
|
CopyBgTilesRect(gUnknown_086BB6F4[quotient] + remainder * 0xD80, (void *)(OBJ_VRAM0 + 0x3800), 108, 1);
|
|
DmaCopy16(3, gUnknown_086B15B4[quotient] + remainder * 0x20, (void *)OBJ_PLTT + 0x40, 0x20);
|
|
}
|
|
else
|
|
{
|
|
gUnknown_0202BF14 = 1;
|
|
quotient = (var0 - 100) / 6;
|
|
remainder = (var0 - 100) % 6;
|
|
|
|
CopyBgTilesRect(gMonHatchSpriteGroupGfx[quotient][remainder], (void *)(OBJ_VRAM0 + 0x4800), 135, 1);
|
|
DmaCopy16(3, gMonHatchSpriteGroupPals[quotient][remainder], (void *)OBJ_PLTT + 0x60, 0x20);
|
|
}
|
|
}
|
|
|
|
s16 sub_8A78(s16 species)
|
|
{
|
|
if (gPokedexFlags[species] == 4 && gDexAnimationIx[species] != -1)
|
|
gUnknown_0202A588 = 1;
|
|
else
|
|
gUnknown_0202A588 = 0;
|
|
|
|
return gUnknown_0202A588;
|
|
}
|
|
|
|
void ResetPokedex(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < NUM_SPECIES; i++)
|
|
gMain_saveData.pokedexFlags[i] = SPECIES_UNSEEN;
|
|
}
|