pokepinballrs/src/pokedex.c
Retnuhytnuob c555ddb059
Some checks failed
CI / build (push) Has been cancelled
Misc dump in Rom_2 (#205)
* checkpoint

* checkpoint 2

* checkpoint 3

* checkpoint 4

* checkpoint 5

* carve 86aa4a8, aa20c, aa208

* carve through ACCA0

* through 086ADA6E
2026-03-07 19:05:44 -06:00

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;
}