summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/battle_2.c2567
-rw-r--r--src/battle/battle_4.c16
-rw-r--r--src/battle/battle_util.c16
-rw-r--r--src/contest_painting.c6
-rw-r--r--src/contest_painting_effects.c791
-rw-r--r--src/data/battle_tower/level_100_mons.h2
-rw-r--r--src/data/graphics.c4
-rw-r--r--src/data/pokemon/base_stats.h861
-rw-r--r--src/data/region_map/region_map_entries.h175
-rw-r--r--src/data/region_map/region_map_entries_de.h175
-rw-r--r--src/data/region_map_layout.h42
-rw-r--r--src/data/region_map_names_de.h79
-rw-r--r--src/data/region_map_names_en.h79
-rw-r--r--src/landmark.c6
-rw-r--r--src/libs/m4a.c1779
-rw-r--r--src/libs/m4a_2.c912
-rw-r--r--src/libs/m4a_4.c545
-rw-r--r--src/pokedex_area_screen.c14
-rw-r--r--src/pokenav.c6466
-rw-r--r--src/pokenav_after.c35
-rw-r--r--src/pokenav_before.c6190
-rw-r--r--src/region_map.c156
-rw-r--r--src/trainers_eye.c263
-rw-r--r--src/use_pokeblock.c48
24 files changed, 10582 insertions, 10645 deletions
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index 5a71733b8..b372413de 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -64,12 +64,6 @@ struct UnknownStruct8
u8 unk1A;
};
-struct UnknownStruct12
-{
- u32 unk0;
- u8 filler4[0x54];
-};
-
extern void sub_802BBD4();
extern struct SpriteTemplate gUnknown_02024E8C;
@@ -90,7 +84,6 @@ extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[];
extern u8 gCurrentActionFuncId;
extern u8 gBanksByTurnOrder[];
-extern struct UnknownStruct12 gUnknown_02024AD0[];
extern u8 gBankSpriteIds[];
extern u16 gCurrentMove; // This is mis-named. It is a species, not a move ID.
extern u8 gLastUsedAbility;
@@ -1374,7 +1367,7 @@ void debug_sub_8012D10(u8);
u32 debug_sub_8013294(u8, void *, u32);
void debug_sub_80132C8(u8, void *, u32);
-extern s16 gUnknown_Debug_2023A76[][0x23];
+extern s16 gUnknown_Debug_2023A76[][35];
extern s16 gUnknown_Debug_2023B02[][6][4];
extern u8 gUnknown_Debug_03004360;
extern struct Window gUnknown_Debug_03004370;
@@ -1548,12 +1541,6 @@ void debug_sub_8010B80(u8 a)
= r12 * 10 + r7;
}
-// For some unexplainable reason, code in various functions will cause SetActionsAndBanksTurnOrder,
-// a completely separate and unrelated function, to use different registers. I have
-// absolutely no clue as to why this phenomenon occurs. For example,
-// I have to make debug_sub_8010CAC access gUnknown_Debug_2023A76 as a 3D array.
-// If I use a 2D array, SetActionsAndBanksTurnOrder will no longer match.
-#ifdef NONMATCHING
void debug_sub_8010CAC(void)
{
s32 r5;
@@ -1851,309 +1838,6 @@ void debug_sub_8010CAC(void)
AnimateSprites();
BuildOamBuffer();
}
-#else
-
-// 3D array
-extern s16 gUnknown_Debug_2023A76_[][7][5];
-
-void debug_sub_8010CAC(void)
-{
- s32 r5;
-
- if (gMain.heldKeysRaw == (L_BUTTON | SELECT_BUTTON))
- DoSoftReset();
- if (gMain.newKeysRaw == SELECT_BUTTON)
- {
- if (gUnknown_Debug_030043A4 < 6)
- {
- gUnknown_Debug_030043A8 = 0;
- debug_sub_8012628();
- SetMainCallback2(debug_sub_8011498);
- }
- if (gUnknown_Debug_030043A0 == 0 && gUnknown_Debug_030043A4 == 6)
- {
- gMain.savedCallback = debug_sub_80108B8;
- CreateMon(
- &gPlayerParty[0],
- gUnknown_Debug_2023A76_[0][0][0],
- gUnknown_Debug_2023A76_[0][0][1],
- 32,
- 0, 0, 0, 0);
- for (r5 = 0; r5 < 4; r5++)
- {
- SetMonData(&gPlayerParty[0], MON_DATA_MOVE1 + r5, &gUnknown_Debug_2023B02[0][0][r5]);
- SetMonData(&gPlayerParty[0], MON_DATA_PP1 + r5, &gBattleMoves[gUnknown_Debug_2023B02[0][0][r5]].pp);
- }
- switch (gUnknown_Debug_2023A76_[0][6][0])
- {
- case 1:
- gCB2_AfterEvolution = debug_sub_80108B8;
- EvolutionScene(&gPlayerParty[0], gUnknown_Debug_2023A76_[0][1][0], 1, 0);
- break;
- case 2:
- debug_sub_8012688();
- break;
- }
- }
- if (gUnknown_Debug_030043A0 == 1 && gUnknown_Debug_030043A4 == 6)
- {
- // This is really weird
- r5 = (gSaveBlock2.optionsBattleSceneOff | (gSaveBlock2.optionsSound << 1));
- r5++;
- if (r5 == 4)
- r5 = 0;
- gSaveBlock2.optionsBattleSceneOff = (r5 & 1);
- gSaveBlock2.optionsSound = (r5 & 2) >> 1;
- SetPokemonCryStereo(gSaveBlock2.optionsSound);
- debug_nullsub_3();
- }
- }
- if (gMain.newKeysRaw == START_BUTTON)
- debug_sub_801174C();
- if (gMain.newKeysRaw == DPAD_UP)
- {
- debug_sub_80125E4();
- if (gUnknown_Debug_030043A4 != 0)
- gUnknown_Debug_030043A4--;
- else
- gUnknown_Debug_030043A4 = 6;
- debug_sub_8011E74();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- debug_sub_80125A0();
- }
- if (gMain.newKeysRaw == DPAD_DOWN)
- {
- debug_sub_80125E4();
- if (gUnknown_Debug_030043A4 == 6)
- gUnknown_Debug_030043A4 = 0;
- else
- gUnknown_Debug_030043A4++;
- debug_sub_8011E74();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- debug_sub_80125A0();
- }
- if (gMain.newKeysRaw == DPAD_LEFT)
- {
- debug_sub_80125E4();
- if (gUnknown_Debug_030043A0 != 0)
- {
- gUnknown_Debug_030043A0--;
- }
- else
- {
- if (gUnknown_Debug_03004360 != 0)
- {
- gUnknown_Debug_03004360 = 0;
- gUnknown_Debug_030043A0 = 4;
- gBattle_BG1_X = 0;
- debug_sub_8011E5C();
- debug_sub_8011E74();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- }
- }
- debug_sub_80125A0();
- }
- if (gMain.newKeysRaw == DPAD_RIGHT)
- {
- debug_sub_80125E4();
- if (gUnknown_Debug_030043A0 != 4)
- {
- gUnknown_Debug_030043A0++;
- }
- else
- {
- if (gUnknown_Debug_03004360 == 0)
- {
- gUnknown_Debug_03004360 = 1;
- gUnknown_Debug_030043A0 = 0;
- gBattle_BG1_X = 0x100;
- debug_sub_8011E5C();
- debug_sub_8011E74();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- }
- }
- debug_sub_80125A0();
- }
- if (gMain.newAndRepeatedKeys & B_BUTTON)
- {
- switch (gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5)
- {
- case 31:
- debug_sub_8010818();
- debug_sub_8011E5C();
- debug_sub_8011E74();
- debug_sub_8012540();
- debug_nullsub_3();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- break;
- case 32:
- debug_sub_80132C8(31, gUnknown_Debug_2023A76, 0xEC);
- debug_sub_8011E5C();
- debug_sub_8011E74();
- debug_sub_8012540();
- debug_nullsub_3();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- break;
- case 33:
- debug_sub_8013294(31, gUnknown_Debug_2023A76, 0xEC);
- break;
- case 34:
- if (gUnknown_Debug_2023A76_[0][6][4] != 0)
- {
- gUnknown_Debug_2023A76_[0][6][4]--;
- gUnknown_Debug_2023A76_[1][6][4]--;
- }
- else
- {
- gUnknown_Debug_2023A76_[0][6][4] = 8;
- gUnknown_Debug_2023A76_[1][6][4] = 8;
- }
- debug_sub_8012540();
- break;
- case 30:
- debug_sub_8010B80(0);
- debug_sub_8011EA0(gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5);
- break;
- default:
- if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6)
- {
- debug_sub_8010AAC(1);
- }
- else
- {
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5]--;
- if (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] < gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][4])
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] = gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3];
- }
- if (gUnknown_Debug_030043A0 == 0)
- {
- debug_sub_8010AAC(0);
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4);
- }
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0);
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- break;
- }
- }
- if (gMain.newAndRepeatedKeys & A_BUTTON)
- {
- switch (gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5)
- {
- case 31:
- debug_sub_8010818();
- debug_sub_8011E5C();
- debug_sub_8011E74();
- debug_sub_8012540();
- debug_nullsub_3();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- break;
- case 32:
- debug_sub_80132C8(31, gUnknown_Debug_2023A76, 0xEC);
- debug_sub_8011E5C();
- debug_sub_8011E74();
- debug_sub_8012540();
- debug_nullsub_3();
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- break;
- case 33:
- debug_sub_8013294(31, gUnknown_Debug_2023A76, 0xEC);
- break;
- case 34:
- if (gUnknown_Debug_2023A76_[0][6][4] < 8)
- {
- gUnknown_Debug_2023A76_[0][6][4]++;
- gUnknown_Debug_2023A76_[1][6][4]++;
- }
- else
- {
- gUnknown_Debug_2023A76_[0][6][4] = 0;
- gUnknown_Debug_2023A76_[1][6][4] = 0;
- }
- debug_sub_8012540();
- break;
- case 30:
- debug_sub_8010B80(1);
- debug_sub_8011EA0(gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5);
- break;
- default:
- if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6)
- {
- debug_sub_8010AAC(1);
- }
- else
- {
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5]++;
- if (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] > gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3])
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] = gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][4];
- }
- if (gUnknown_Debug_030043A0 == 0)
- {
- debug_sub_8010AAC(0);
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4);
- }
- debug_sub_8011EA0(gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5);
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- break;
- }
- }
- if (gMain.newAndRepeatedKeys & L_BUTTON)
- {
- if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6)
- {
- debug_sub_8010AAC(1);
- }
- else
- {
- if (gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0 == 30)
- {
- debug_sub_8010B80(2);
- }
- else
- {
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] -= 10;
- while (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] < gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][4])
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] += gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3];
- }
- }
- if (gUnknown_Debug_030043A0 == 0)
- {
- debug_sub_8010AAC(0);
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4);
- }
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0);
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- }
- if (gMain.newAndRepeatedKeys & R_BUTTON)
- {
- if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6)
- {
- debug_sub_8010AAC(1);
- }
- else
- {
- if (gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0 == 30)
- {
- debug_sub_8010B80(3);
- }
- else
- {
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] += 10;
- while (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] > gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3])
- gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] -= gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3];
- }
- }
- if (gUnknown_Debug_030043A0 == 0)
- {
- debug_sub_8010AAC(0);
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4);
- }
- debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0);
- debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
- }
- AnimateSprites();
- BuildOamBuffer();
-}
-#endif
extern u16 gUnknown_Debug_821F564[][5];
@@ -3725,10 +3409,8 @@ void SwitchInClearSetData(void)
gBattleMons[gActiveBattler].statStages[i] = 6;
for (i = 0; i < gBattlersCount; i++)
{
- struct UnknownStruct12 *sp20 = &gUnknown_02024AD0[i];
-
- if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].bankPreventingEscape == gActiveBattler)
- sp20->unk0 &= ~0x04000000;
+ if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].bankPreventingEscape == gActiveBattler)
+ gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION;
if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].bankWithSureHit == gActiveBattler)
{
gStatuses3[i] &= ~STATUS3_ALWAYS_HITS;
@@ -3760,10 +3442,10 @@ void SwitchInClearSetData(void)
for (i = 0; i < gBattlersCount; i++)
{
- if (gUnknown_02024AD0[i].unk0 & (gBitTable[gActiveBattler] << 16))
- gUnknown_02024AD0[i].unk0 &= ~(gBitTable[gActiveBattler] << 16);
- if ((gUnknown_02024AD0[i].unk0 & 0xE000) && ewram16020arr(i) == gActiveBattler)
- gUnknown_02024AD0[i].unk0 &= ~0xE000;
+ if (gBattleMons[i].status2 & (gBitTable[gActiveBattler] << 16))
+ gBattleMons[i].status2 &= ~(gBitTable[gActiveBattler] << 16);
+ if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && ewram16020arr(i) == gActiveBattler)
+ gBattleMons[i].status2 &= ~STATUS2_WRAPPED;
}
gActionSelectionCursor[gActiveBattler] = 0;
@@ -4408,1536 +4090,366 @@ void sub_8012258(u8 a)
}
}
-/*
+enum
+{
+ STATE_BEFORE_ACTION_CHOSEN,
+ STATE_WAIT_ACTION_CHOSEN,
+ STATE_WAIT_ACTION_CASE_CHOSEN,
+ STATE_WAIT_ACTION_CONFIRMED_STANDBY,
+ STATE_WAIT_ACTION_CONFIRMED,
+ STATE_SELECTION_SCRIPT,
+ STATE_WAIT_SET_BEFORE_ACTION,
+ STATE_SELECTION_SCRIPT_MAY_RUN
+};
+
+extern u8 * gSelectionBattleScripts[];
+extern u8 BattleScript_ActionSelectionItemsCantBeUsed[];
+extern u8 BattleScript_PrintFullBox[];
+extern u8 BattleScript_PrintCantRunFromTrainer[];
+extern u8 BattleScript_PrintCantEscapeFromBattle[];
+
void sub_8012324(void)
{
- u8 r5;
+ u8 position;
+ s32 i;
gBattleCommunication[4] = 0;
// inverted loop
//_0801234C
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
- r5 = GetBattlerPosition(gActiveBattler);
+ position = GetBattlerPosition(gActiveBattler);
switch (gBattleCommunication[gActiveBattler])
{
- case 0:
- ewram16068arr(gActiveBattler) = 6;
- if (!(gBattleTypeFlags & 0x40)
- && (r5 & 2)
- && !(ewram160A6 & gBitTable[GetBattlerAtPosition(r5 ^ 2)])
- && gBattleCommunication[GetBattlerAtPosition(r5)] != 4)
+ case STATE_BEFORE_ACTION_CHOSEN:
+ ewram16068arr(gActiveBattler) = 6;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ && (position & BIT_FLANK) != B_FLANK_LEFT
+ && !(ewram160A6 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))])
+ && gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] != STATE_WAIT_ACTION_CONFIRMED)
+ break;
+ //_080123F8
+ if (ewram160A6 & gBitTable[gActiveBattler])
+ {
+ gActionForBanks[gActiveBattler] = 13;
+ if (!(gBattleTypeFlags & 0x40))
+ gBattleCommunication[gActiveBattler] = 4;
+ //_08012454
+ else
+ gBattleCommunication[gActiveBattler] = 3;
+ break;
+ }
+ //_08012468
+ if ((gBattleMons[gActiveBattler].status2 & 0x1000)
+ || (gBattleMons[gActiveBattler].status2 & 0x400000))
+ {
+ gActionForBanks[gActiveBattler] = 0;
+ gBattleCommunication[gActiveBattler] = 3;
+ }
+ else
+ {
+ Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
+ MarkBufferBankForExecution(gActiveBattler);
+ gBattleCommunication[gActiveBattler]++;
+ }
break;
- //_080123F8
- if (ewram160A6 & gBitTable[gActiveBattler])
- {
- gActionForBanks[gActiveBattler] = 13;
- if (!(gBattleTypeFlags & 0x40))
- gBattleCommunication[gActiveBattler] = 4;
- //_08012454
+ case STATE_WAIT_ACTION_CHOSEN:
+ if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ {
+ gActionForBanks[gActiveBattler] = gBattleBufferB[gActiveBattler][1];
+ switch (gBattleBufferB[gActiveBattler][1])
+ {
+ case B_ACTION_USE_MOVE:
+ if (AreAllMovesUnusable())
+ {
+ gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
+ ewram16060(gActiveBattler) = FALSE;
+ ewram16094arr(gActiveBattler) = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
+ ewram16010arr(gActiveBattler) = gBattleBufferB[gActiveBattler][3];
+ return;
+ }
+ else if (gDisableStructs[gActiveBattler].encoredMove != 0)
+ {
+ gChosenMovesByBanks[gActiveBattler] = gDisableStructs[gActiveBattler].encoredMove;
+ gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
+ return;
+ }
+ else
+ {
+ struct ChooseMoveStruct {
+ u16 moves[4];
+ u8 currentPp[4];
+ u8 maxPp[4];
+ u16 species;
+ u8 monType1;
+ u8 monType2;
+ } moveInfo;
+
+ moveInfo.species = gBattleMons[gActiveBattler].species;
+ moveInfo.monType1 = gBattleMons[gActiveBattler].type1;
+ moveInfo.monType2 = gBattleMons[gActiveBattler].type2;
+
+ for (i = 0; i < 4; i++)
+ {
+ moveInfo.moves[i] = gBattleMons[gActiveBattler].moves[i];
+ moveInfo.currentPp[i] = gBattleMons[gActiveBattler].pp[i];
+ moveInfo.maxPp[i] = CalculatePPWithBonus(
+ gBattleMons[gActiveBattler].moves[i],
+ gBattleMons[gActiveBattler].ppBonuses,
+ i);
+ }
+
+ Emitcmd20(0, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, (u8 *)&moveInfo);
+ MarkBufferBankForExecution(gActiveBattler);
+ }
+ break;
+ case B_ACTION_USE_ITEM:
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_EREADER_TRAINER))
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_ActionSelectionItemsCantBeUsed;
+ gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
+ ewram16060(gActiveBattler) = FALSE;
+ ewram16094arr(gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN;
+ return;
+ }
+ else
+ {
+ EmitOpenBag(0, &ewram1606Carr(0, gActiveBattler));
+ MarkBufferBankForExecution(gActiveBattler);
+ }
+ break;
+ case B_ACTION_SWITCH:
+ ewram16064arr(gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
+ if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)
+ || gStatuses3[gActiveBattler] & STATUS3_ROOTED)
+ {
+ EmitChoosePokemon(0, 2, 6, ABILITY_NONE, &ewram1606Carr(0, gActiveBattler));
+ }
+ else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
+ || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP))
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
+ && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
+ || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
+ && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
+ {
+ EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, &ewram1606Carr(0, gActiveBattler));
+ }
+ else
+ {
+ if (gActiveBattler == 2 && gActionForBanks[0] == B_ACTION_SWITCH)
+ EmitChoosePokemon(0, PARTY_CHOOSE_MON, ewram16068arr(0), ABILITY_NONE, &ewram1606Carr(0, gActiveBattler));
+ else if (gActiveBattler == 3 && gActionForBanks[1] == B_ACTION_SWITCH)
+ EmitChoosePokemon(0, PARTY_CHOOSE_MON, ewram16068arr(1), ABILITY_NONE, &ewram1606Carr(0, gActiveBattler));
+ else
+ EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, &ewram1606Carr(0, gActiveBattler));
+ }
+ MarkBufferBankForExecution(gActiveBattler);
+ break;
+ case B_ACTION_SAFARI_BALL:
+ if (PlayerPartyAndPokemonStorageFull())
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintFullBox;
+ gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
+ ewram16060(gActiveBattler) = FALSE;
+ ewram16094arr(gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN;
+ return;
+ }
+ break;
+ case B_ACTION_SAFARI_POKEBLOCK:
+ EmitOpenBag(0, &ewram1606Carr(0, gActiveBattler));
+ MarkBufferBankForExecution(gActiveBattler);
+ break;
+ case B_ACTION_CANCEL_PARTNER:
+ gBattleCommunication[gActiveBattler] = STATE_WAIT_SET_BEFORE_ACTION;
+ gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))] = STATE_BEFORE_ACTION_CHOSEN;
+ Emitcmd50(0);
+ MarkBufferBankForExecution(gActiveBattler);
+ return;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER
+ && !(gBattleTypeFlags & (BATTLE_TYPE_LINK))
+ && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
+ {
+ BattleScriptExecute(BattleScript_PrintCantRunFromTrainer);
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ }
+ else if (CanRunFromBattle()
+ && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintCantEscapeFromBattle;
+ gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
+ ewram16060(gActiveBattler) = FALSE;
+ ewram16094arr(gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN;
+ return;
+ }
+ else
+ {
+ gBattleCommunication[gActiveBattler]++;
+ }
+ }
+ break;
+ case STATE_WAIT_ACTION_CASE_CHOSEN:
+ if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ {
+ switch (gActionForBanks[gActiveBattler])
+ {
+ case B_ACTION_USE_MOVE:
+ switch (gBattleBufferB[gActiveBattler][1])
+ {
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ gActionForBanks[gActiveBattler] = gBattleBufferB[gActiveBattler][1];
+ return;
+ default:
+ if ((gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)) == 0xFFFF)
+ {
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ }
+ else if (TrySetCantSelectMoveBattleScript())
+ {
+ gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
+ ewram16060(gActiveBattler) = FALSE;
+ gBattleBufferB[gActiveBattler][1] = 0;
+ ewram16094arr(gActiveBattler) = STATE_WAIT_ACTION_CHOSEN;
+ return;
+ }
+ else
+ {
+ ewram1608Carr(gActiveBattler) = gBattleBufferB[gActiveBattler][2];
+ gChosenMovesByBanks[gActiveBattler] = gBattleMons[gActiveBattler].moves[ewram1608Carr(gActiveBattler)];
+ ewram16010arr(gActiveBattler) = gBattleBufferB[gActiveBattler][3];
+ gBattleCommunication[gActiveBattler]++;
+ }
+ break;
+ }
+ break;
+ case B_ACTION_USE_ITEM:
+ if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) == 0)
+ {
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ }
+ else
+ {
+ gLastUsedItem = (gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8));
+ gBattleCommunication[gActiveBattler]++;
+ }
+ break;
+ case B_ACTION_SWITCH:
+ if (gBattleBufferB[gActiveBattler][1] == PARTY_SIZE)
+ {
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ }
+ else
+ {
+ ewram16068arr(gActiveBattler) = gBattleBufferB[gActiveBattler][1];
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ ewram1606Carr(0, gActiveBattler) &= 0xF;
+ ewram1606Carr(0, gActiveBattler) |= (gBattleBufferB[gActiveBattler][2] & 0xF0);
+ ewram1606Carr(1, gActiveBattler) = gBattleBufferB[gActiveBattler][3];
+
+ ewram1606Carr(0, (gActiveBattler ^ BIT_FLANK)) &= (0xF0);
+ ewram1606Carr(0, (gActiveBattler ^ BIT_FLANK)) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4;
+ ewram1606Carr(2, (gActiveBattler ^ BIT_FLANK)) = gBattleBufferB[gActiveBattler][3];
+ }
+ gBattleCommunication[gActiveBattler]++;
+ }
+ break;
+ case B_ACTION_RUN:
+ gHitMarker |= HITMARKER_RUN;
+ gBattleCommunication[gActiveBattler]++;
+ break;
+ case B_ACTION_SAFARI_WATCH_CAREFULLY:
+ gBattleCommunication[gActiveBattler]++;
+ break;
+ case B_ACTION_SAFARI_BALL:
+ gBattleCommunication[gActiveBattler]++;
+ break;
+ case B_ACTION_SAFARI_POKEBLOCK:
+ if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) != 0)
+ {
+ gBattleCommunication[gActiveBattler]++;
+ }
+ else
+ {
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ }
+ break;
+ case B_ACTION_SAFARI_GO_NEAR:
+ gBattleCommunication[gActiveBattler]++;
+ break;
+ case B_ACTION_SAFARI_RUN:
+ gHitMarker |= HITMARKER_RUN;
+ gBattleCommunication[gActiveBattler]++;
+ break;
+ case B_ACTION_WALLY_THROW:
+ gBattleCommunication[gActiveBattler]++;
+ break;
+ }
+ }
+ break;
+ case STATE_WAIT_ACTION_CONFIRMED_STANDBY:
+ if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ {
+ if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE)
+ || (position & BIT_FLANK) != B_FLANK_LEFT
+ || (ewram160A6 & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)]))
+ {
+ EmitLinkStandbyMsg(0, 0);
+ }
+ else
+ {
+ EmitLinkStandbyMsg(0, 1);
+ }
+ MarkBufferBankForExecution(gActiveBattler);
+ gBattleCommunication[gActiveBattler]++;
+ }
+ break;
+ case STATE_WAIT_ACTION_CONFIRMED:
+ if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ {
+ gBattleCommunication[ACTIONS_CONFIRMED_COUNT]++;
+ }
+ break;
+ case STATE_SELECTION_SCRIPT:
+ if (ewram16060(gActiveBattler))
+ {
+ gBattleCommunication[gActiveBattler] = ewram16094arr(gActiveBattler);
+ }
else
- gBattleCommunication[gActiveBattler] = 3;
+ {
+ gBankAttacker = gActiveBattler;
+ gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBattler];
+ if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ {
+ gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
+ }
+ gSelectionBattleScripts[gActiveBattler] = gBattlescriptCurrInstr;
+ }
+ break;
+ case STATE_WAIT_SET_BEFORE_ACTION:
+ if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ {
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ }
break;
- }
- //_08012468
- if ((gBattleMons[gActiveBattler].status2 & 0x1000)
- || (gBattleMons[gActiveBattler].status2 & 0x10000000))
- {
- gActionForBanks[gActiveBattler] = 0;
- gBattleCommunication[gActiveBattler] = 3;
- }
- else
- {
- Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
- MarkBufferBankForExecution(gActiveBattler);
- gBattleCommunication[gActiveBattler]++;
- }
- break;
- case 1:
}
}
-}
-*/
-NAKED
-void sub_8012324(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x1C\n\
- ldr r0, _08012340 @ =gBattleCommunication\n\
- movs r1, 0\n\
- strb r1, [r0, 0x4]\n\
- ldr r0, _08012344 @ =gActiveBattler\n\
- strb r1, [r0]\n\
- ldr r0, _08012348 @ =gBattlersCount\n\
- bl _08012F74\n\
- .align 2, 0\n\
-_08012340: .4byte gBattleCommunication\n\
-_08012344: .4byte gActiveBattler\n\
-_08012348: .4byte gBattlersCount\n\
-_0801234C:\n\
- ldr r4, _08012374 @ =gActiveBattler\n\
- ldrb r0, [r4]\n\
- bl GetBattlerPosition\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r1, _08012378 @ =gBattleCommunication\n\
- ldrb r0, [r4]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x6\n\
- bls _08012368\n\
- bl _08012F66\n\
-_08012368:\n\
- lsls r0, 2\n\
- ldr r1, _0801237C @ =_08012380\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08012374: .4byte gActiveBattler\n\
-_08012378: .4byte gBattleCommunication\n\
-_0801237C: .4byte _08012380\n\
- .align 2, 0\n\
-_08012380:\n\
- .4byte _0801239C\n\
- .4byte _080124C8\n\
- .4byte _08012A28\n\
- .4byte _08012DA8\n\
- .4byte _08012E50\n\
- .4byte _08012E94\n\
- .4byte _08012F38\n\
-_0801239C:\n\
- ldr r4, _08012434 @ =gSharedMem\n\
- ldr r0, _08012438 @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- ldr r1, _0801243C @ =0x00016068\n\
- adds r0, r1\n\
- adds r0, r4\n\
- movs r1, 0x6\n\
- strb r1, [r0]\n\
- ldr r0, _08012440 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080123F8\n\
- movs r1, 0x2\n\
- movs r0, 0x2\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- beq _080123F8\n\
- eors r5, r1\n\
- adds r0, r5, 0\n\
- bl GetBattlerAtPosition\n\
- ldr r2, _08012444 @ =0x000160a6\n\
- adds r1, r4, r2\n\
- ldrb r1, [r1]\n\
- ldr r2, _08012448 @ =gBitTable\n\
- lsls r0, 24\n\
- lsrs r0, 22\n\
- adds r0, r2\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _080123F8\n\
- ldr r4, _0801244C @ =gBattleCommunication\n\
- adds r0, r5, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r0, r4\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x4\n\
- beq _080123F8\n\
- bl _08012F66\n\
-_080123F8:\n\
- ldr r0, _08012434 @ =gSharedMem\n\
- ldr r3, _08012444 @ =0x000160a6\n\
- adds r0, r3\n\
- ldrb r3, [r0]\n\
- ldr r1, _08012448 @ =gBitTable\n\
- ldr r4, _08012438 @ =gActiveBattler\n\
- ldrb r2, [r4]\n\
- lsls r0, r2, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- ands r3, r0\n\
- cmp r3, 0\n\
- beq _08012468\n\
- ldr r0, _08012450 @ =gActionForBanks\n\
- adds r0, r2, r0\n\
- movs r1, 0xD\n\
- strb r1, [r0]\n\
- ldr r0, _08012440 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08012454\n\
- ldr r0, _0801244C @ =gBattleCommunication\n\
- ldrb r1, [r4]\n\
- adds r1, r0\n\
- movs r0, 0x4\n\
- strb r0, [r1]\n\
- bl _08012F66\n\
- .align 2, 0\n\
-_08012434: .4byte gSharedMem\n\
-_08012438: .4byte gActiveBattler\n\
-_0801243C: .4byte 0x00016068\n\
-_08012440: .4byte gBattleTypeFlags\n\
-_08012444: .4byte 0x000160a6\n\
-_08012448: .4byte gBitTable\n\
-_0801244C: .4byte gBattleCommunication\n\
-_08012450: .4byte gActionForBanks\n\
-_08012454:\n\
- ldr r0, _08012464 @ =gBattleCommunication\n\
- ldrb r1, [r4]\n\
- adds r1, r0\n\
- movs r0, 0x3\n\
- strb r0, [r1]\n\
- bl _08012F66\n\
- .align 2, 0\n\
-_08012464: .4byte gBattleCommunication\n\
-_08012468:\n\
- ldr r1, _0801249C @ =gBattleMons\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08012488\n\
- movs r0, 0x80\n\
- lsls r0, 15\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _080124A8\n\
-_08012488:\n\
- ldr r0, _080124A0 @ =gActionForBanks\n\
- adds r0, r2, r0\n\
- strb r3, [r0]\n\
- ldr r1, _080124A4 @ =gBattleCommunication\n\
- ldrb r0, [r4]\n\
- adds r0, r1\n\
- movs r1, 0x3\n\
- strb r1, [r0]\n\
- bl _08012F66\n\
- .align 2, 0\n\
-_0801249C: .4byte gBattleMons\n\
-_080124A0: .4byte gActionForBanks\n\
-_080124A4: .4byte gBattleCommunication\n\
-_080124A8:\n\
- ldr r0, _080124C0 @ =gActionForBanks\n\
- ldrb r1, [r0]\n\
- ldr r0, _080124C4 @ =gBattleBufferB\n\
- ldrb r2, [r0, 0x1]\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 8\n\
- orrs r2, r0\n\
- movs r0, 0\n\
- bl Emitcmd18\n\
- bl _08012E32\n\
- .align 2, 0\n\
-_080124C0: .4byte gActionForBanks\n\
-_080124C4: .4byte gBattleBufferB\n\
-_080124C8:\n\
- ldr r4, _08012520 @ =gBattleExecBuffer\n\
- ldr r1, _08012524 @ =gBitTable\n\
- ldr r3, _08012528 @ =gActiveBattler\n\
- ldrb r5, [r3]\n\
- lsls r0, r5, 2\n\
- adds r0, r1\n\
- ldr r2, [r0]\n\
- lsls r0, r2, 4\n\
- movs r1, 0xF0\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- orrs r0, r2\n\
- lsls r1, r2, 8\n\
- orrs r0, r1\n\
- lsls r2, 12\n\
- orrs r0, r2\n\
- ldr r1, [r4]\n\
- ands r1, r0\n\
- mov r8, r3\n\
- cmp r1, 0\n\
- beq _080124F6\n\
- bl _08012F66\n\
-_080124F6:\n\
- ldr r2, _0801252C @ =gActionForBanks\n\
- adds r2, r5, r2\n\
- ldr r1, _08012530 @ =gBattleBufferB\n\
- lsls r0, r5, 9\n\
- adds r1, 0x1\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- strb r0, [r2]\n\
- ldrb r0, [r3]\n\
- lsls r0, 9\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xC\n\
- bls _08012514\n\
- b _08012968\n\
-_08012514:\n\
- lsls r0, 2\n\
- ldr r1, _08012534 @ =_08012538\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08012520: .4byte gBattleExecBuffer\n\
-_08012524: .4byte gBitTable\n\
-_08012528: .4byte gActiveBattler\n\
-_0801252C: .4byte gActionForBanks\n\
-_08012530: .4byte gBattleBufferB\n\
-_08012534: .4byte _08012538\n\
- .align 2, 0\n\
-_08012538:\n\
- .4byte _0801256C\n\
- .4byte _080126B4\n\
- .4byte _080126E0\n\
- .4byte _08012968\n\
- .4byte _08012968\n\
- .4byte _080128B0\n\
- .4byte _08012908\n\
- .4byte _08012968\n\
- .4byte _08012968\n\
- .4byte _08012968\n\
- .4byte _08012968\n\
- .4byte _08012968\n\
- .4byte _0801292C\n\
-_0801256C:\n\
- bl AreAllMovesUnusable\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080125D0\n\
- ldr r0, _080125B4 @ =gBattleCommunication\n\
- ldr r2, _080125B8 @ =gActiveBattler\n\
- ldrb r1, [r2]\n\
- adds r1, r0\n\
- movs r4, 0\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- ldr r3, _080125BC @ =gSharedMem\n\
- ldrb r0, [r2]\n\
- ldr r1, _080125C0 @ =0x00016060\n\
- adds r0, r1\n\
- adds r0, r3\n\
- strb r4, [r0]\n\
- ldrb r0, [r2]\n\
- ldr r4, _080125C4 @ =0x00016094\n\
- adds r0, r4\n\
- adds r0, r3\n\
- movs r1, 0x3\n\
- strb r1, [r0]\n\
- ldrb r1, [r2]\n\
- ldr r0, _080125C8 @ =0x00016010\n\
- adds r2, r1, r0\n\
- adds r2, r3\n\
- ldr r0, _080125CC @ =gBattleBufferB\n\
- lsls r1, 9\n\
- adds r0, 0x3\n\
- adds r1, r0\n\
- ldrb r0, [r1]\n\
- strb r0, [r2]\n\
- bl _08012F90\n\
- .align 2, 0\n\
-_080125B4: .4byte gBattleCommunication\n\
-_080125B8: .4byte gActiveBattler\n\
-_080125BC: .4byte gSharedMem\n\
-_080125C0: .4byte 0x00016060\n\
-_080125C4: .4byte 0x00016094\n\
-_080125C8: .4byte 0x00016010\n\
-_080125CC: .4byte gBattleBufferB\n\
-_080125D0:\n\
- ldr r1, _080125FC @ =gDisableStructs\n\
- ldr r5, _08012600 @ =gActiveBattler\n\
- ldrb r4, [r5]\n\
- lsls r0, r4, 3\n\
- subs r0, r4\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrh r2, [r0, 0x6]\n\
- cmp r2, 0\n\
- beq _0801260C\n\
- ldr r1, _08012604 @ =gChosenMovesByBanks\n\
- lsls r0, r4, 1\n\
- adds r0, r1\n\
- strh r2, [r0]\n\
- ldr r1, _08012608 @ =gBattleCommunication\n\
- ldrb r0, [r5]\n\
- adds r0, r1\n\
- movs r1, 0x3\n\
- strb r1, [r0]\n\
- bl _08012F90\n\
- .align 2, 0\n\
-_080125FC: .4byte gDisableStructs\n\
-_08012600: .4byte gActiveBattler\n\
-_08012604: .4byte gChosenMovesByBanks\n\
-_08012608: .4byte gBattleCommunication\n\
-_0801260C:\n\
- add r2, sp, 0x4\n\
- ldr r3, _080126AC @ =gBattleMons\n\
- movs r1, 0x58\n\
- adds r0, r4, 0\n\
- muls r0, r1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- strh r0, [r2, 0x10]\n\
- ldrb r0, [r5]\n\
- muls r0, r1\n\
- adds r0, r3\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- strb r0, [r2, 0x12]\n\
- ldrb r0, [r5]\n\
- muls r0, r1\n\
- adds r0, r3\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- strb r0, [r2, 0x13]\n\
- movs r4, 0\n\
- mov r1, sp\n\
- adds r1, 0xC\n\
- str r1, [sp, 0x18]\n\
- add r2, sp, 0x10\n\
- mov r10, r2\n\
- mov r8, r3\n\
- adds r7, r5, 0\n\
- movs r6, 0x58\n\
- movs r3, 0xC\n\
- add r3, r8\n\
- mov r9, r3\n\
- add r5, sp, 0x4\n\
-_0801264E:\n\
- lsls r2, r4, 1\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r2, r0\n\
- add r0, r9\n\
- ldrh r0, [r0]\n\
- strh r0, [r5]\n\
- ldr r0, [sp, 0x18]\n\
- adds r3, r0, r4\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r4, r0\n\
- mov r1, r8\n\
- adds r1, 0x24\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- strb r0, [r3]\n\
- ldrb r0, [r7]\n\
- adds r1, r0, 0\n\
- muls r1, r6\n\
- adds r2, r1\n\
- add r2, r9\n\
- ldrh r0, [r2]\n\
- add r1, r8\n\
- adds r1, 0x3B\n\
- ldrb r1, [r1]\n\
- lsls r2, r4, 24\n\
- lsrs r2, 24\n\
- bl CalculatePPWithBonus\n\
- mov r2, r10\n\
- adds r1, r2, r4\n\
- strb r0, [r1]\n\
- adds r5, 0x2\n\
- adds r4, 0x1\n\
- cmp r4, 0x3\n\
- ble _0801264E\n\
- ldr r0, _080126B0 @ =gBattleTypeFlags\n\
- ldrb r0, [r0]\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- movs r0, 0\n\
- movs r2, 0\n\
- add r3, sp, 0x4\n\
- bl Emitcmd20\n\
- b _0801289E\n\
- .align 2, 0\n\
-_080126AC: .4byte gBattleMons\n\
-_080126B0: .4byte gBattleTypeFlags\n\
-_080126B4:\n\
- ldr r0, _080126D0 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _080126D4 @ =0x00000902\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080126C2\n\
- b _08012908\n\
-_080126C2:\n\
- ldr r1, _080126D8 @ =gUnknown_02024C1C\n\
- mov r3, r8\n\
- ldrb r0, [r3]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r1, _080126DC @ =BattleScript_ActionSelectionItemsCantBeUsed\n\
- b _080129CC\n\
- .align 2, 0\n\
-_080126D0: .4byte gBattleTypeFlags\n\
-_080126D4: .4byte 0x00000902\n\
-_080126D8: .4byte gUnknown_02024C1C\n\
-_080126DC: .4byte BattleScript_ActionSelectionItemsCantBeUsed\n\
-_080126E0:\n\
- ldr r3, _08012738 @ =gSharedMem\n\
- ldr r5, _0801273C @ =gActiveBattler\n\
- ldrb r0, [r5]\n\
- ldr r4, _08012740 @ =0x00016064\n\
- adds r1, r0, r4\n\
- adds r1, r3\n\
- ldr r2, _08012744 @ =gBattlerPartyIndexes\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r7, _08012748 @ =gBattleMons\n\
- ldrb r2, [r5]\n\
- movs r6, 0x58\n\
- adds r0, r2, 0\n\
- muls r0, r6\n\
- adds r1, r7, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- ldr r1, _0801274C @ =0x0400e000\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08012722\n\
- ldr r0, _08012750 @ =gStatuses3\n\
- lsls r1, r2, 2\n\
- adds r1, r0\n\
- ldr r1, [r1]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _08012758\n\
-_08012722:\n\
- lsls r0, r2, 1\n\
- adds r0, r2\n\
- ldr r2, _08012754 @ =0x0001606c\n\
- adds r1, r3, r2\n\
- adds r0, r1\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r1, 0x2\n\
- movs r2, 0x6\n\
- b _0801286C\n\
- .align 2, 0\n\
-_08012738: .4byte gSharedMem\n\
-_0801273C: .4byte gActiveBattler\n\
-_08012740: .4byte 0x00016064\n\
-_08012744: .4byte gBattlerPartyIndexes\n\
-_08012748: .4byte gBattleMons\n\
-_0801274C: .4byte 0x0400e000\n\
-_08012750: .4byte gStatuses3\n\
-_08012754: .4byte 0x0001606c\n\
-_08012758:\n\
- str r1, [sp]\n\
- movs r0, 0xC\n\
- adds r1, r2, 0\n\
- movs r2, 0x17\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- bne _080127E0\n\
- ldrb r1, [r5]\n\
- str r4, [sp]\n\
- movs r0, 0xC\n\
- movs r2, 0x47\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- beq _080127A8\n\
- ldrb r0, [r5]\n\
- muls r0, r6\n\
- adds r1, r0, r7\n\
- adds r0, r1, 0\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x2\n\
- beq _080127A8\n\
- adds r0, r1, 0\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x2\n\
- beq _080127A8\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1A\n\
- bne _080127E0\n\
-_080127A8:\n\
- ldr r5, _08012808 @ =gActiveBattler\n\
- ldrb r1, [r5]\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0xF\n\
- movs r2, 0x2A\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- beq _08012818\n\
- ldr r2, _0801280C @ =gBattleMons\n\
- ldrb r1, [r5]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r1, r0, r2\n\
- adds r0, r1, 0\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x8\n\
- beq _080127E0\n\
- adds r0, r1, 0\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x8\n\
- bne _08012818\n\
-_080127E0:\n\
- subs r1, r4, 0x1\n\
- lsls r1, 4\n\
- movs r0, 0x4\n\
- orrs r1, r0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- ldr r0, _08012810 @ =gLastUsedAbility\n\
- ldrb r3, [r0]\n\
- ldr r0, _08012808 @ =gActiveBattler\n\
- ldrb r2, [r0]\n\
- lsls r0, r2, 1\n\
- adds r0, r2\n\
- ldr r2, _08012814 @ =gSharedMem + 0x1606C\n\
- adds r0, r2\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r2, 0x6\n\
- bl EmitChoosePokemon\n\
- b _0801289E\n\
- .align 2, 0\n\
-_08012808: .4byte gActiveBattler\n\
-_0801280C: .4byte gBattleMons\n\
-_08012810: .4byte gLastUsedAbility\n\
-_08012814: .4byte gSharedMem + 0x1606C\n\
-_08012818:\n\
- ldr r0, _08012830 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- mov r8, r0\n\
- cmp r1, 0x2\n\
- bne _08012840\n\
- ldr r0, _08012834 @ =gActionForBanks\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x2\n\
- bne _08012840\n\
- ldr r3, _08012838 @ =gSharedMem\n\
- ldr r4, _0801283C @ =0x00016068\n\
- b _08012854\n\
- .align 2, 0\n\
-_08012830: .4byte gActiveBattler\n\
-_08012834: .4byte gActionForBanks\n\
-_08012838: .4byte gSharedMem\n\
-_0801283C: .4byte 0x00016068\n\
-_08012840:\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- cmp r0, 0x3\n\
- bne _08012884\n\
- ldr r0, _08012874 @ =gActionForBanks\n\
- ldrb r0, [r0, 0x1]\n\
- cmp r0, 0x2\n\
- bne _08012884\n\
- ldr r3, _08012878 @ =gSharedMem\n\
- ldr r4, _0801287C @ =0x00016069\n\
-_08012854:\n\
- adds r0, r3, r4\n\
- ldrb r2, [r0]\n\
- mov r0, r8\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- ldr r1, _08012880 @ =0x0001606c\n\
- adds r3, r1\n\
- adds r0, r3\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r1, 0\n\
-_0801286C:\n\
- movs r3, 0\n\
- bl EmitChoosePokemon\n\
- b _0801289E\n\
- .align 2, 0\n\
-_08012874: .4byte gActionForBanks\n\
-_08012878: .4byte gSharedMem\n\
-_0801287C: .4byte 0x00016069\n\
-_08012880: .4byte 0x0001606c\n\
-_08012884:\n\
- ldr r0, _080128A8 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- ldr r1, _080128AC @ =gSharedMem + 0x1606C\n\
- adds r0, r1\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r1, 0\n\
- movs r2, 0x6\n\
- movs r3, 0\n\
- bl EmitChoosePokemon\n\
-_0801289E:\n\
- ldr r0, _080128A8 @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- bl MarkBufferBankForExecution\n\
- b _08012968\n\
- .align 2, 0\n\
-_080128A8: .4byte gActiveBattler\n\
-_080128AC: .4byte gSharedMem + 0x1606C\n\
-_080128B0:\n\
- bl PlayerPartyAndPokemonStorageFull\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08012968\n\
- ldr r1, _080128EC @ =gUnknown_02024C1C\n\
- ldr r2, _080128F0 @ =gActiveBattler\n\
- ldrb r0, [r2]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r1, _080128F4 @ =BattleScript_PrintFullBox\n\
- str r1, [r0]\n\
- ldr r0, _080128F8 @ =gBattleCommunication\n\
- ldrb r1, [r2]\n\
- adds r1, r0\n\
- movs r3, 0\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- ldr r1, _080128FC @ =gSharedMem\n\
- ldrb r0, [r2]\n\
- ldr r4, _08012900 @ =0x00016060\n\
- adds r0, r4\n\
- adds r0, r1\n\
- strb r3, [r0]\n\
- ldrb r0, [r2]\n\
- ldr r2, _08012904 @ =0x00016094\n\
- adds r0, r2\n\
- adds r0, r1\n\
- strb r3, [r0]\n\
- b _08012F90\n\
- .align 2, 0\n\
-_080128EC: .4byte gUnknown_02024C1C\n\
-_080128F0: .4byte gActiveBattler\n\
-_080128F4: .4byte BattleScript_PrintFullBox\n\
-_080128F8: .4byte gBattleCommunication\n\
-_080128FC: .4byte gSharedMem\n\
-_08012900: .4byte 0x00016060\n\
-_08012904: .4byte 0x00016094\n\
-_08012908:\n\
- ldr r4, _08012924 @ =gActiveBattler\n\
- ldrb r0, [r4]\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- ldr r0, _08012928 @ =gSharedMem + 0x1606C\n\
- adds r1, r0\n\
- movs r0, 0\n\
- bl EmitOpenBag\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- b _08012968\n\
- .align 2, 0\n\
-_08012924: .4byte gActiveBattler\n\
-_08012928: .4byte gSharedMem + 0x1606C\n\
-_0801292C:\n\
- ldr r4, _08012964 @ =gBattleCommunication\n\
- mov r3, r8\n\
- ldrb r1, [r3]\n\
- adds r1, r4\n\
- movs r5, 0\n\
- movs r0, 0x6\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- bl GetBattlerPosition\n\
- movs r1, 0x2\n\
- eors r0, r1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r0, r4\n\
- strb r5, [r0]\n\
- movs r0, 0\n\
- bl Emitcmd50\n\
- mov r4, r8\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- b _08012F90\n\
- .align 2, 0\n\
-_08012964: .4byte gBattleCommunication\n\
-_08012968:\n\
- ldr r0, _08012994 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0xA\n\
- ands r0, r1\n\
- cmp r0, 0x8\n\
- bne _080129A8\n\
- ldr r0, _08012998 @ =gBattleBufferB\n\
- ldr r4, _0801299C @ =gActiveBattler\n\
- ldrb r1, [r4]\n\
- lsls r1, 9\n\
- adds r0, 0x1\n\
- adds r1, r0\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x3\n\
- bne _080129A8\n\
- ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer\n\
- bl BattleScriptExecute\n\
- ldr r1, _080129A4 @ =gBattleCommunication\n\
- ldrb r0, [r4]\n\
- adds r0, r1\n\
- b _08012BFE\n\
- .align 2, 0\n\
-_08012994: .4byte gBattleTypeFlags\n\
-_08012998: .4byte gBattleBufferB\n\
-_0801299C: .4byte gActiveBattler\n\
-_080129A0: .4byte BattleScript_PrintCantRunFromTrainer\n\
-_080129A4: .4byte gBattleCommunication\n\
-_080129A8:\n\
- bl CanRunFromBattle\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08012A14\n\
- ldr r0, _080129F4 @ =gBattleBufferB\n\
- ldr r3, _080129F8 @ =gActiveBattler\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 9\n\
- adds r0, 0x1\n\
- adds r1, r0\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x3\n\
- bne _08012A14\n\
- ldr r1, _080129FC @ =gUnknown_02024C1C\n\
- lsls r0, r2, 2\n\
- adds r0, r1\n\
- ldr r1, _08012A00 @ =BattleScript_PrintCantEscapeFromBattle\n\
-_080129CC:\n\
- str r1, [r0]\n\
- ldr r0, _08012A04 @ =gBattleCommunication\n\
- ldrb r1, [r3]\n\
- adds r1, r0\n\
- movs r2, 0\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- ldr r1, _08012A08 @ =gSharedMem\n\
- ldrb r0, [r3]\n\
- ldr r4, _08012A0C @ =0x00016060\n\
- adds r0, r4\n\
- adds r0, r1\n\
- strb r2, [r0]\n\
- ldrb r0, [r3]\n\
- ldr r3, _08012A10 @ =0x00016094\n\
- adds r0, r3\n\
- adds r0, r1\n\
- strb r2, [r0]\n\
- b _08012F90\n\
- .align 2, 0\n\
-_080129F4: .4byte gBattleBufferB\n\
-_080129F8: .4byte gActiveBattler\n\
-_080129FC: .4byte gUnknown_02024C1C\n\
-_08012A00: .4byte BattleScript_PrintCantEscapeFromBattle\n\
-_08012A04: .4byte gBattleCommunication\n\
-_08012A08: .4byte gSharedMem\n\
-_08012A0C: .4byte 0x00016060\n\
-_08012A10: .4byte 0x00016094\n\
-_08012A14:\n\
- ldr r2, _08012A20 @ =gBattleCommunication\n\
- ldr r0, _08012A24 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012A20: .4byte gBattleCommunication\n\
-_08012A24: .4byte gActiveBattler\n\
-_08012A28:\n\
- ldr r4, _08012A6C @ =gBattleExecBuffer\n\
- ldr r1, _08012A70 @ =gBitTable\n\
- ldr r3, _08012A74 @ =gActiveBattler\n\
- ldrb r5, [r3]\n\
- lsls r0, r5, 2\n\
- adds r0, r1\n\
- ldr r2, [r0]\n\
- lsls r0, r2, 4\n\
- movs r1, 0xF0\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- orrs r0, r2\n\
- lsls r1, r2, 8\n\
- orrs r0, r1\n\
- lsls r2, 12\n\
- orrs r0, r2\n\
- ldr r1, [r4]\n\
- ands r1, r0\n\
- mov r8, r3\n\
- cmp r1, 0\n\
- beq _08012A54\n\
- b _08012F66\n\
-_08012A54:\n\
- ldr r1, _08012A78 @ =gActionForBanks\n\
- adds r0, r5, r1\n\
- ldrb r0, [r0]\n\
- adds r3, r1, 0\n\
- cmp r0, 0x9\n\
- bls _08012A62\n\
- b _08012F66\n\
-_08012A62:\n\
- lsls r0, 2\n\
- ldr r1, _08012A7C @ =_08012A80\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08012A6C: .4byte gBattleExecBuffer\n\
-_08012A70: .4byte gBitTable\n\
-_08012A74: .4byte gActiveBattler\n\
-_08012A78: .4byte gActionForBanks\n\
-_08012A7C: .4byte _08012A80\n\
- .align 2, 0\n\
-_08012A80:\n\
- .4byte _08012AA8\n\
- .4byte _08012BB0\n\
- .4byte _08012BE8\n\
- .4byte _08012CE0\n\
- .4byte _08012D04\n\
- .4byte _08012D18\n\
- .4byte _08012D2C\n\
- .4byte _08012D5C\n\
- .4byte _08012D70\n\
- .4byte _08012D94\n\
-_08012AA8:\n\
- ldr r0, _08012AC8 @ =gBattleBufferB\n\
- mov r1, r8\n\
- ldrb r4, [r1]\n\
- lsls r1, r4, 9\n\
- adds r2, r0, 0x1\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- adds r6, r0, 0\n\
- cmp r1, 0x9\n\
- bgt _08012ACC\n\
- cmp r1, 0x3\n\
- blt _08012ACC\n\
- adds r0, r4, r3\n\
- strb r1, [r0]\n\
- b _08012F90\n\
- .align 2, 0\n\
-_08012AC8: .4byte gBattleBufferB\n\
-_08012ACC:\n\
- adds r3, r6, 0\n\
- mov r5, r8\n\
- ldrb r4, [r5]\n\
- lsls r1, r4, 9\n\
- adds r7, r3, 0x2\n\
- adds r0, r1, r7\n\
- ldrb r2, [r0]\n\
- adds r3, 0x3\n\
- mov r9, r3\n\
- add r1, r9\n\
- ldrb r0, [r1]\n\
- lsls r0, 8\n\
- orrs r2, r0\n\
- ldr r0, _08012AF4 @ =0x0000ffff\n\
- cmp r2, r0\n\
- bne _08012AFC\n\
- ldr r0, _08012AF8 @ =gBattleCommunication\n\
- adds r0, r4, r0\n\
- b _08012BFE\n\
- .align 2, 0\n\
-_08012AF4: .4byte 0x0000ffff\n\
-_08012AF8: .4byte gBattleCommunication\n\
-_08012AFC:\n\
- bl TrySetCantSelectMoveBattleScript\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08012B48\n\
- ldr r0, _08012B38 @ =gBattleCommunication\n\
- ldrb r1, [r5]\n\
- adds r1, r0\n\
- movs r2, 0\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- ldr r3, _08012B3C @ =gSharedMem\n\
- ldrb r0, [r5]\n\
- ldr r4, _08012B40 @ =0x00016060\n\
- adds r0, r4\n\
- adds r0, r3\n\
- strb r2, [r0]\n\
- ldrb r0, [r5]\n\
- lsls r0, 9\n\
- adds r1, r6, 0x1\n\
- adds r0, r1\n\
- strb r2, [r0]\n\
- ldrb r0, [r5]\n\
- ldr r1, _08012B44 @ =0x00016094\n\
- adds r0, r1\n\
- adds r0, r3\n\
- movs r1, 0x1\n\
- strb r1, [r0]\n\
- b _08012F90\n\
- .align 2, 0\n\
-_08012B38: .4byte gBattleCommunication\n\
-_08012B3C: .4byte gSharedMem\n\
-_08012B40: .4byte 0x00016060\n\
-_08012B44: .4byte 0x00016094\n\
-_08012B48:\n\
- ldr r6, _08012B98 @ =gSharedMem\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- ldr r2, _08012B9C @ =0x0001608c\n\
- adds r1, r0, r2\n\
- adds r1, r6\n\
- lsls r0, 9\n\
- adds r0, r7\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _08012BA0 @ =gChosenMovesByBanks\n\
- mov r4, r8\n\
- ldrb r3, [r4]\n\
- lsls r5, r3, 1\n\
- adds r5, r0\n\
- ldr r4, _08012BA4 @ =gBattleMons\n\
- adds r2, r3, r2\n\
- adds r2, r6\n\
- ldrb r0, [r2]\n\
- lsls r0, 1\n\
- movs r1, 0x58\n\
- muls r1, r3\n\
- adds r0, r1\n\
- adds r4, 0xC\n\
- adds r0, r4\n\
- ldrh r0, [r0]\n\
- strh r0, [r5]\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- ldr r2, _08012BA8 @ =0x00016010\n\
- adds r1, r0, r2\n\
- adds r1, r6\n\
- lsls r0, 9\n\
- add r0, r9\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _08012BAC @ =gBattleCommunication\n\
- mov r3, r8\n\
- ldrb r1, [r3]\n\
- b _08012E3C\n\
- .align 2, 0\n\
-_08012B98: .4byte gSharedMem\n\
-_08012B9C: .4byte 0x0001608c\n\
-_08012BA0: .4byte gChosenMovesByBanks\n\
-_08012BA4: .4byte gBattleMons\n\
-_08012BA8: .4byte 0x00016010\n\
-_08012BAC: .4byte gBattleCommunication\n\
-_08012BB0:\n\
- ldr r2, _08012BD8 @ =gBattleBufferB\n\
- ldr r5, _08012BDC @ =gActiveBattler\n\
- ldrb r4, [r5]\n\
- lsls r1, r4, 9\n\
- adds r0, r2, 0x1\n\
- adds r0, r1, r0\n\
- ldrb r3, [r0]\n\
- adds r2, 0x2\n\
- adds r1, r2\n\
- ldrb r0, [r1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- cmp r3, 0\n\
- bne _08012BCE\n\
- b _08012F60\n\
-_08012BCE:\n\
- ldr r0, _08012BE0 @ =gLastUsedItem\n\
- strh r3, [r0]\n\
- ldr r0, _08012BE4 @ =gBattleCommunication\n\
- ldrb r1, [r5]\n\
- b _08012E3C\n\
- .align 2, 0\n\
-_08012BD8: .4byte gBattleBufferB\n\
-_08012BDC: .4byte gActiveBattler\n\
-_08012BE0: .4byte gLastUsedItem\n\
-_08012BE4: .4byte gBattleCommunication\n\
-_08012BE8:\n\
- ldr r4, _08012C04 @ =gBattleBufferB\n\
- ldr r7, _08012C08 @ =gActiveBattler\n\
- ldrb r2, [r7]\n\
- lsls r0, r2, 9\n\
- adds r1, r4, 0x1\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- cmp r1, 0x6\n\
- bne _08012C10\n\
- ldr r0, _08012C0C @ =gBattleCommunication\n\
- adds r0, r2, r0\n\
-_08012BFE:\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- b _08012F66\n\
- .align 2, 0\n\
-_08012C04: .4byte gBattleBufferB\n\
-_08012C08: .4byte gActiveBattler\n\
-_08012C0C: .4byte gBattleCommunication\n\
-_08012C10:\n\
- ldr r0, _08012CC4 @ =gSharedMem\n\
- mov r12, r0\n\
- ldr r3, _08012CC8 @ =0x00016068\n\
- adds r0, r2, r3\n\
- add r0, r12\n\
- strb r1, [r0]\n\
- ldr r0, _08012CCC @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08012CBE\n\
- ldrb r0, [r7]\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- ldr r5, _08012CD0 @ =0x0001606c\n\
- adds r1, r5\n\
- add r1, r12\n\
- ldrb r2, [r1]\n\
- movs r0, 0xF\n\
- ands r0, r2\n\
- strb r0, [r1]\n\
- ldrb r0, [r7]\n\
- lsls r2, r0, 1\n\
- adds r2, r0\n\
- adds r2, r5\n\
- add r2, r12\n\
- lsls r0, 9\n\
- adds r6, r4, 0x2\n\
- adds r0, r6\n\
- ldrb r1, [r0]\n\
- movs r3, 0xF0\n\
- adds r0, r3, 0\n\
- ands r0, r1\n\
- ldrb r1, [r2]\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldrb r0, [r7]\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- ldr r2, _08012CD4 @ =0x0001606d\n\
- adds r1, r2\n\
- add r1, r12\n\
- lsls r0, 9\n\
- adds r4, 0x3\n\
- mov r8, r4\n\
- add r0, r8\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldrb r0, [r7]\n\
- movs r4, 0x2\n\
- eors r0, r4\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- adds r1, r5\n\
- add r1, r12\n\
- ldrb r2, [r1]\n\
- adds r0, r3, 0\n\
- ands r0, r2\n\
- strb r0, [r1]\n\
- ldrb r0, [r7]\n\
- eors r0, r4\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- adds r1, r5\n\
- add r1, r12\n\
- ldrb r0, [r7]\n\
- lsls r0, 9\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- ands r3, r0\n\
- lsrs r3, 4\n\
- ldrb r0, [r1]\n\
- orrs r3, r0\n\
- strb r3, [r1]\n\
- ldrb r0, [r7]\n\
- eors r4, r0\n\
- lsls r1, r4, 1\n\
- adds r1, r4\n\
- ldr r3, _08012CD8 @ =0x0001606e\n\
- adds r1, r3\n\
- add r1, r12\n\
- ldrb r0, [r7]\n\
- lsls r0, 9\n\
- add r0, r8\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
-_08012CBE:\n\
- ldr r0, _08012CDC @ =gBattleCommunication\n\
- ldrb r1, [r7]\n\
- b _08012E3C\n\
- .align 2, 0\n\
-_08012CC4: .4byte gSharedMem\n\
-_08012CC8: .4byte 0x00016068\n\
-_08012CCC: .4byte gBattleTypeFlags\n\
-_08012CD0: .4byte 0x0001606c\n\
-_08012CD4: .4byte 0x0001606d\n\
-_08012CD8: .4byte 0x0001606e\n\
-_08012CDC: .4byte gBattleCommunication\n\
-_08012CE0:\n\
- ldr r2, _08012CF8 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 8\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- ldr r2, _08012CFC @ =gBattleCommunication\n\
- ldr r0, _08012D00 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012CF8: .4byte gHitMarker\n\
-_08012CFC: .4byte gBattleCommunication\n\
-_08012D00: .4byte gActiveBattler\n\
-_08012D04:\n\
- ldr r2, _08012D10 @ =gBattleCommunication\n\
- ldr r0, _08012D14 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012D10: .4byte gBattleCommunication\n\
-_08012D14: .4byte gActiveBattler\n\
-_08012D18:\n\
- ldr r2, _08012D24 @ =gBattleCommunication\n\
- ldr r0, _08012D28 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012D24: .4byte gBattleCommunication\n\
-_08012D28: .4byte gActiveBattler\n\
-_08012D2C:\n\
- ldr r2, _08012D50 @ =gBattleBufferB\n\
- ldr r0, _08012D54 @ =gActiveBattler\n\
- ldrb r4, [r0]\n\
- lsls r1, r4, 9\n\
- adds r0, r2, 0x1\n\
- adds r0, r1, r0\n\
- ldrb r3, [r0]\n\
- adds r2, 0x2\n\
- adds r1, r2\n\
- ldrb r0, [r1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- cmp r3, 0\n\
- bne _08012D4A\n\
- b _08012F60\n\
-_08012D4A:\n\
- ldr r1, _08012D58 @ =gBattleCommunication\n\
- adds r1, r4, r1\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012D50: .4byte gBattleBufferB\n\
-_08012D54: .4byte gActiveBattler\n\
-_08012D58: .4byte gBattleCommunication\n\
-_08012D5C:\n\
- ldr r2, _08012D68 @ =gBattleCommunication\n\
- ldr r0, _08012D6C @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012D68: .4byte gBattleCommunication\n\
-_08012D6C: .4byte gActiveBattler\n\
-_08012D70:\n\
- ldr r2, _08012D88 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 8\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- ldr r2, _08012D8C @ =gBattleCommunication\n\
- ldr r0, _08012D90 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012D88: .4byte gHitMarker\n\
-_08012D8C: .4byte gBattleCommunication\n\
-_08012D90: .4byte gActiveBattler\n\
-_08012D94:\n\
- ldr r2, _08012DA0 @ =gBattleCommunication\n\
- ldr r0, _08012DA4 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, r2\n\
- b _08012E3E\n\
- .align 2, 0\n\
-_08012DA0: .4byte gBattleCommunication\n\
-_08012DA4: .4byte gActiveBattler\n\
-_08012DA8:\n\
- ldr r3, _08012E10 @ =gBattleExecBuffer\n\
- ldr r4, _08012E14 @ =gBitTable\n\
- ldr r0, _08012E18 @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldr r2, [r0]\n\
- lsls r1, r2, 4\n\
- movs r0, 0xF0\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- orrs r1, r2\n\
- lsls r0, r2, 8\n\
- orrs r1, r0\n\
- lsls r2, 12\n\
- orrs r1, r2\n\
- ldr r0, [r3]\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08012DD2\n\
- b _08012F66\n\
-_08012DD2:\n\
- ldr r0, _08012E1C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x41\n\
- ands r0, r1\n\
- cmp r0, 0x1\n\
- bne _08012E06\n\
- movs r1, 0x2\n\
- movs r0, 0x2\n\
- ands r0, r5\n\
- cmp r0, 0\n\
- bne _08012E06\n\
- adds r0, r5, 0\n\
- eors r0, r1\n\
- bl GetBattlerAtPosition\n\
- ldr r1, _08012E20 @ =gSharedMem\n\
- ldr r2, _08012E24 @ =0x000160a6\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- lsls r0, 24\n\
- lsrs r0, 22\n\
- adds r0, r4\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _08012E28\n\
-_08012E06:\n\
- movs r0, 0\n\
- movs r1, 0\n\
- bl EmitLinkStandbyMsg\n\
- b _08012E30\n\
- .align 2, 0\n\
-_08012E10: .4byte gBattleExecBuffer\n\
-_08012E14: .4byte gBitTable\n\
-_08012E18: .4byte gActiveBattler\n\
-_08012E1C: .4byte gBattleTypeFlags\n\
-_08012E20: .4byte gSharedMem\n\
-_08012E24: .4byte 0x000160a6\n\
-_08012E28:\n\
- movs r0, 0\n\
- movs r1, 0x1\n\
- bl EmitLinkStandbyMsg\n\
-_08012E30:\n\
- ldr r4, _08012E48 @ =gActiveBattler\n\
-_08012E32:\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- ldr r0, _08012E4C @ =gBattleCommunication\n\
- ldrb r1, [r4]\n\
-_08012E3C:\n\
- adds r1, r0\n\
-_08012E3E:\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- b _08012F66\n\
- .align 2, 0\n\
-_08012E48: .4byte gActiveBattler\n\
-_08012E4C: .4byte gBattleCommunication\n\
-_08012E50:\n\
- ldr r3, _08012E84 @ =gBattleExecBuffer\n\
- ldr r1, _08012E88 @ =gBitTable\n\
- ldr r0, _08012E8C @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r2, [r0]\n\
- lsls r1, r2, 4\n\
- movs r0, 0xF0\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- orrs r1, r2\n\
- lsls r0, r2, 8\n\
- orrs r1, r0\n\
- lsls r2, 12\n\
- orrs r1, r2\n\
- ldr r0, [r3]\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08012F66\n\
- ldr r1, _08012E90 @ =gBattleCommunication\n\
- ldrb r0, [r1, 0x4]\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x4]\n\
- b _08012F66\n\
- .align 2, 0\n\
-_08012E84: .4byte gBattleExecBuffer\n\
-_08012E88: .4byte gBitTable\n\
-_08012E8C: .4byte gActiveBattler\n\
-_08012E90: .4byte gBattleCommunication\n\
-_08012E94:\n\
- ldr r2, _08012EB8 @ =gSharedMem\n\
- ldr r5, _08012EBC @ =gActiveBattler\n\
- ldrb r1, [r5]\n\
- ldr r3, _08012EC0 @ =0x00016060\n\
- adds r0, r1, r3\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08012ECC\n\
- ldr r0, _08012EC4 @ =gBattleCommunication\n\
- adds r0, r1, r0\n\
- ldr r4, _08012EC8 @ =0x00016094\n\
- adds r1, r4\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- strb r1, [r0]\n\
- b _08012F66\n\
- .align 2, 0\n\
-_08012EB8: .4byte gSharedMem\n\
-_08012EBC: .4byte gActiveBattler\n\
-_08012EC0: .4byte 0x00016060\n\
-_08012EC4: .4byte gBattleCommunication\n\
-_08012EC8: .4byte 0x00016094\n\
-_08012ECC:\n\
- ldr r0, _08012F20 @ =gBankAttacker\n\
- strb r1, [r0]\n\
- ldr r7, _08012F24 @ =gBattlescriptCurrInstr\n\
- ldr r6, _08012F28 @ =gUnknown_02024C1C\n\
- ldrb r0, [r5]\n\
- lsls r0, 2\n\
- adds r0, r6\n\
- ldr r4, [r0]\n\
- str r4, [r7]\n\
- ldr r3, _08012F2C @ =gBattleExecBuffer\n\
- ldr r1, _08012F30 @ =gBitTable\n\
- ldrb r0, [r5]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r2, [r0]\n\
- lsls r1, r2, 4\n\
- movs r0, 0xF0\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- orrs r1, r2\n\
- lsls r0, r2, 8\n\
- orrs r1, r0\n\
- lsls r2, 12\n\
- orrs r1, r2\n\
- ldr r0, [r3]\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08012F12\n\
- ldr r0, _08012F34 @ =gBattleScriptingCommandsTable\n\
- ldrb r1, [r4]\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldr r0, [r1]\n\
- bl _call_via_r0\n\
-_08012F12:\n\
- ldrb r0, [r5]\n\
- lsls r0, 2\n\
- adds r0, r6\n\
- ldr r1, [r7]\n\
- str r1, [r0]\n\
- b _08012F66\n\
- .align 2, 0\n\
-_08012F20: .4byte gBankAttacker\n\
-_08012F24: .4byte gBattlescriptCurrInstr\n\
-_08012F28: .4byte gUnknown_02024C1C\n\
-_08012F2C: .4byte gBattleExecBuffer\n\
-_08012F30: .4byte gBitTable\n\
-_08012F34: .4byte gBattleScriptingCommandsTable\n\
-_08012F38:\n\
- ldr r3, _08012FA0 @ =gBattleExecBuffer\n\
- ldr r1, _08012FA4 @ =gBitTable\n\
- ldr r0, _08012FA8 @ =gActiveBattler\n\
- ldrb r4, [r0]\n\
- lsls r0, r4, 2\n\
- adds r0, r1\n\
- ldr r2, [r0]\n\
- lsls r0, r2, 4\n\
- movs r1, 0xF0\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- orrs r0, r2\n\
- lsls r1, r2, 8\n\
- orrs r0, r1\n\
- lsls r2, 12\n\
- orrs r0, r2\n\
- ldr r3, [r3]\n\
- ands r3, r0\n\
- cmp r3, 0\n\
- bne _08012F66\n\
-_08012F60:\n\
- ldr r0, _08012FAC @ =gBattleCommunication\n\
- adds r0, r4, r0\n\
- strb r3, [r0]\n\
-_08012F66:\n\
- ldr r0, _08012FA8 @ =gActiveBattler\n\
- ldrb r1, [r0]\n\
- adds r1, 0x1\n\
- strb r1, [r0]\n\
- ldr r0, _08012FB0 @ =gBattlersCount\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
-_08012F74:\n\
- adds r2, r0, 0\n\
- ldrb r0, [r2]\n\
- cmp r1, r0\n\
- bcs _08012F80\n\
- bl _0801234C\n\
-_08012F80:\n\
- ldr r0, _08012FAC @ =gBattleCommunication\n\
- ldrb r0, [r0, 0x4]\n\
- ldrb r2, [r2]\n\
- cmp r0, r2\n\
- bne _08012F90\n\
- ldr r1, _08012FB4 @ =gBattleMainFunc\n\
- ldr r0, _08012FB8 @ =SetActionsAndBanksTurnOrder\n\
- str r0, [r1]\n\
-_08012F90:\n\
- add sp, 0x1C\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08012FA0: .4byte gBattleExecBuffer\n\
-_08012FA4: .4byte gBitTable\n\
-_08012FA8: .4byte gActiveBattler\n\
-_08012FAC: .4byte gBattleCommunication\n\
-_08012FB0: .4byte gBattlersCount\n\
-_08012FB4: .4byte gBattleMainFunc\n\
-_08012FB8: .4byte SetActionsAndBanksTurnOrder\n\
- .syntax divided\n");
+
+ // Check if everyone chose actions.
+ if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount)
+ {
+ gBattleMainFunc = SetActionsAndBanksTurnOrder;
+ }
}
void SwapTurnOrder(u8 a, u8 b)
@@ -6748,7 +5260,6 @@ void HandleAction_Switch(void)
gBattleResults.unk2++;
}
-#ifdef NONMATCHING
void HandleAction_UseItem(void)
{
gBankAttacker = gBankTarget = gBanksByTurnOrder[gCurrentTurnActionNumber];
@@ -6788,7 +5299,7 @@ void HandleAction_UseItem(void)
{
while (!(ewram160DA(gBankAttacker) & 1))
{
- ewram160DA(gBankAttacker) /= 2;
+ ewram160DA(gBankAttacker) >>= 1;
gBattleCommunication[MULTISTRING_CHOOSER]++;
}
}
@@ -6806,7 +5317,7 @@ void HandleAction_UseItem(void)
while (!(ewram160DA(gBankAttacker) & 1))
{
- ewram160DA(gBankAttacker) /= 2;
+ ewram160DA(gBankAttacker) >>= 1;
gBattleTextBuff1[2]++;
}
@@ -6826,376 +5337,6 @@ void HandleAction_UseItem(void)
}
gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT;
}
-#else
-NAKED
-void HandleAction_UseItem(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- ldr r4, _08014804 @ =gBankAttacker\n\
- ldr r2, _08014808 @ =gBankTarget\n\
- ldr r1, _0801480C @ =gBanksByTurnOrder\n\
- ldr r0, _08014810 @ =gCurrentTurnActionNumber\n\
- ldrb r0, [r0]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- strb r0, [r2]\n\
- strb r0, [r4]\n\
- ldr r0, _08014814 @ =gBattle_BG0_X\n\
- movs r2, 0\n\
- strh r2, [r0]\n\
- ldr r0, _08014818 @ =gBattle_BG0_Y\n\
- strh r2, [r0]\n\
- ldr r3, _0801481C @ =gDisableStructs\n\
- ldrb r1, [r4]\n\
- lsls r0, r1, 3\n\
- subs r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- strb r2, [r0, 0x10]\n\
- ldr r5, _08014820 @ =gLastUsedItem\n\
- ldr r2, _08014824 @ =gBattleBufferB\n\
- ldrb r1, [r4]\n\
- lsls r1, 9\n\
- adds r0, r2, 0x1\n\
- adds r0, r1, r0\n\
- ldrb r3, [r0]\n\
- adds r2, 0x2\n\
- adds r1, r2\n\
- ldrb r0, [r1]\n\
- lsls r0, 8\n\
- orrs r3, r0\n\
- strh r3, [r5]\n\
- cmp r3, 0xC\n\
- bhi _08014830\n\
- ldr r2, _08014828 @ =gBattlescriptCurrInstr\n\
- ldr r1, _0801482C @ =gBattlescriptsForBallThrow\n\
- ldrh r0, [r5]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- str r0, [r2]\n\
- b _08014A8C\n\
- .align 2, 0\n\
-_08014804: .4byte gBankAttacker\n\
-_08014808: .4byte gBankTarget\n\
-_0801480C: .4byte gBanksByTurnOrder\n\
-_08014810: .4byte gCurrentTurnActionNumber\n\
-_08014814: .4byte gBattle_BG0_X\n\
-_08014818: .4byte gBattle_BG0_Y\n\
-_0801481C: .4byte gDisableStructs\n\
-_08014820: .4byte gLastUsedItem\n\
-_08014824: .4byte gBattleBufferB\n\
-_08014828: .4byte gBattlescriptCurrInstr\n\
-_0801482C: .4byte gBattlescriptsForBallThrow\n\
-_08014830:\n\
- adds r0, r3, 0\n\
- subs r0, 0x50\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _0801484C\n\
- ldr r0, _08014844 @ =gBattlescriptCurrInstr\n\
- ldr r1, _08014848 @ =gBattlescriptsForRunningByItem\n\
- b _0801485C\n\
- .align 2, 0\n\
-_08014844: .4byte gBattlescriptCurrInstr\n\
-_08014848: .4byte gBattlescriptsForRunningByItem\n\
-_0801484C:\n\
- ldrb r0, [r4]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0801486C\n\
- ldr r0, _08014864 @ =gBattlescriptCurrInstr\n\
- ldr r1, _08014868 @ =gBattlescriptsForUsingItem\n\
-_0801485C:\n\
- ldr r1, [r1]\n\
- str r1, [r0]\n\
- b _08014A8C\n\
- .align 2, 0\n\
-_08014864: .4byte gBattlescriptCurrInstr\n\
-_08014868: .4byte gBattlescriptsForUsingItem\n\
-_0801486C:\n\
- ldr r2, _080148A0 @ =gSharedMem\n\
- ldrb r0, [r4]\n\
- ldr r3, _080148A4 @ =0x00016003\n\
- adds r1, r2, r3\n\
- strb r0, [r1]\n\
- lsls r0, 24\n\
- lsrs r0, 25\n\
- ldr r1, _080148A8 @ =0x000160d8\n\
- adds r0, r1\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- subs r0, 0x1\n\
- mov r8, r4\n\
- ldr r3, _080148AC @ =gBattlescriptCurrInstr\n\
- mov r9, r3\n\
- ldr r1, _080148B0 @ =gBattlescriptsForUsingItem\n\
- mov r10, r1\n\
- adds r7, r2, 0\n\
- cmp r0, 0x4\n\
- bls _08014896\n\
- b _08014A74\n\
-_08014896:\n\
- lsls r0, 2\n\
- ldr r1, _080148B4 @ =_080148B8\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_080148A0: .4byte gSharedMem\n\
-_080148A4: .4byte 0x00016003\n\
-_080148A8: .4byte 0x000160d8\n\
-_080148AC: .4byte gBattlescriptCurrInstr\n\
-_080148B0: .4byte gBattlescriptsForUsingItem\n\
-_080148B4: .4byte _080148B8\n\
- .align 2, 0\n\
-_080148B8:\n\
- .4byte _08014A74\n\
- .4byte _08014A74\n\
- .4byte _080148CC\n\
- .4byte _08014958\n\
- .4byte _08014A30\n\
-_080148CC:\n\
- ldr r2, _08014904 @ =gBattleCommunication\n\
- movs r0, 0\n\
- strb r0, [r2, 0x5]\n\
- ldr r1, _08014908 @ =gBankAttacker\n\
- ldrb r0, [r1]\n\
- lsrs r0, 1\n\
- ldr r6, _0801490C @ =0x000160da\n\
- adds r0, r6\n\
- adds r0, r7\n\
- ldrb r3, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- mov r8, r1\n\
- cmp r0, 0\n\
- beq _08014918\n\
- movs r0, 0x3E\n\
- ands r0, r3\n\
- ldr r3, _08014910 @ =gBattlescriptCurrInstr\n\
- mov r9, r3\n\
- ldr r1, _08014914 @ =gBattlescriptsForUsingItem\n\
- mov r10, r1\n\
- cmp r0, 0\n\
- bne _080148FC\n\
- b _08014A74\n\
-_080148FC:\n\
- movs r0, 0x5\n\
- strb r0, [r2, 0x5]\n\
- b _08014A74\n\
- .align 2, 0\n\
-_08014904: .4byte gBattleCommunication\n\
-_08014908: .4byte gBankAttacker\n\
-_0801490C: .4byte 0x000160da\n\
-_08014910: .4byte gBattlescriptCurrInstr\n\
-_08014914: .4byte gBattlescriptsForUsingItem\n\
-_08014918:\n\
- ldr r3, _08014950 @ =gBattlescriptCurrInstr\n\
- mov r9, r3\n\
- ldr r0, _08014954 @ =gBattlescriptsForUsingItem\n\
- mov r10, r0\n\
- adds r5, r7, 0\n\
- mov r4, r8\n\
- adds r3, r6, 0\n\
-_08014926:\n\
- ldrb r0, [r4]\n\
- lsrs r0, 1\n\
- adds r0, r3\n\
- adds r0, r5\n\
- ldrb r1, [r0]\n\
- lsrs r1, 1\n\
- strb r1, [r0]\n\
- ldrb r0, [r2, 0x5]\n\
- adds r0, 0x1\n\
- strb r0, [r2, 0x5]\n\
- ldrb r0, [r4]\n\
- lsrs r0, 1\n\
- adds r0, r3\n\
- adds r0, r5\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08014926\n\
- b _08014A74\n\
- .align 2, 0\n\
-_08014950: .4byte gBattlescriptCurrInstr\n\
-_08014954: .4byte gBattlescriptsForUsingItem\n\
-_08014958:\n\
- ldr r3, _0801498C @ =gBattleCommunication\n\
- movs r0, 0x4\n\
- strb r0, [r3, 0x5]\n\
- ldr r2, _08014990 @ =gBankAttacker\n\
- ldrb r0, [r2]\n\
- lsrs r0, 1\n\
- ldr r1, _08014994 @ =0x000160da\n\
- mov r12, r1\n\
- add r0, r12\n\
- adds r6, r0, r7\n\
- ldrb r1, [r6]\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- mov r8, r2\n\
- cmp r5, 0\n\
- beq _080149A0\n\
- movs r0, 0x5\n\
- strb r0, [r3, 0x5]\n\
- ldr r2, _08014998 @ =gBattlescriptCurrInstr\n\
- mov r9, r2\n\
- ldr r3, _0801499C @ =gBattlescriptsForUsingItem\n\
- mov r10, r3\n\
- b _08014A74\n\
- .align 2, 0\n\
-_0801498C: .4byte gBattleCommunication\n\
-_08014990: .4byte gBankAttacker\n\
-_08014994: .4byte 0x000160da\n\
-_08014998: .4byte gBattlescriptCurrInstr\n\
-_0801499C: .4byte gBattlescriptsForUsingItem\n\
-_080149A0:\n\
- ldr r3, _08014A18 @ =gBattleTextBuff1\n\
- movs r4, 0xFD\n\
- strb r4, [r3]\n\
- movs r0, 0x5\n\
- strb r0, [r3, 0x1]\n\
- movs r2, 0x1\n\
- strb r2, [r3, 0x2]\n\
- movs r0, 0xFF\n\
- strb r0, [r3, 0x3]\n\
- ldr r1, _08014A1C @ =gBattleTextBuff2\n\
- strb r4, [r1]\n\
- strb r5, [r1, 0x1]\n\
- movs r0, 0xD2\n\
- strb r0, [r1, 0x2]\n\
- strb r5, [r1, 0x3]\n\
- subs r0, 0xD3\n\
- strb r0, [r1, 0x4]\n\
- ldrb r0, [r6]\n\
- ands r2, r0\n\
- ldr r0, _08014A20 @ =gBattlescriptCurrInstr\n\
- mov r9, r0\n\
- ldr r1, _08014A24 @ =gBattlescriptsForUsingItem\n\
- mov r10, r1\n\
- adds r6, r3, 0\n\
- cmp r2, 0\n\
- bne _08014A02\n\
- adds r3, r7, 0\n\
- mov r5, r8\n\
- mov r4, r12\n\
- adds r2, r6, 0\n\
-_080149DC:\n\
- ldrb r0, [r5]\n\
- lsrs r0, 1\n\
- adds r0, r4\n\
- adds r0, r3\n\
- ldrb r1, [r0]\n\
- lsrs r1, 1\n\
- strb r1, [r0]\n\
- ldrb r0, [r2, 0x2]\n\
- adds r0, 0x1\n\
- strb r0, [r2, 0x2]\n\
- ldrb r0, [r5]\n\
- lsrs r0, 1\n\
- adds r0, r4\n\
- adds r0, r3\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080149DC\n\
-_08014A02:\n\
- ldrb r0, [r6, 0x2]\n\
- adds r0, 0xE\n\
- ldr r2, _08014A28 @ =0x000160a4\n\
- adds r1, r7, r2\n\
- movs r2, 0\n\
- strb r0, [r1]\n\
- ldr r3, _08014A2C @ =0x000160a5\n\
- adds r0, r7, r3\n\
- strb r2, [r0]\n\
- b _08014A74\n\
- .align 2, 0\n\
-_08014A18: .4byte gBattleTextBuff1\n\
-_08014A1C: .4byte gBattleTextBuff2\n\
-_08014A20: .4byte gBattlescriptCurrInstr\n\
-_08014A24: .4byte gBattlescriptsForUsingItem\n\
-_08014A28: .4byte 0x000160a4\n\
-_08014A2C: .4byte 0x000160a5\n\
-_08014A30:\n\
- ldr r0, _08014A50 @ =gBattleTypeFlags\n\
- ldrh r0, [r0]\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _08014A64\n\
- ldr r1, _08014A54 @ =gBattleCommunication\n\
- movs r0, 0x2\n\
- strb r0, [r1, 0x5]\n\
- ldr r0, _08014A58 @ =gBankAttacker\n\
- mov r8, r0\n\
- ldr r1, _08014A5C @ =gBattlescriptCurrInstr\n\
- mov r9, r1\n\
- ldr r2, _08014A60 @ =gBattlescriptsForUsingItem\n\
- mov r10, r2\n\
- b _08014A74\n\
- .align 2, 0\n\
-_08014A50: .4byte gBattleTypeFlags\n\
-_08014A54: .4byte gBattleCommunication\n\
-_08014A58: .4byte gBankAttacker\n\
-_08014A5C: .4byte gBattlescriptCurrInstr\n\
-_08014A60: .4byte gBattlescriptsForUsingItem\n\
-_08014A64:\n\
- ldr r0, _08014AA0 @ =gBattleCommunication\n\
- strb r1, [r0, 0x5]\n\
- ldr r3, _08014AA4 @ =gBankAttacker\n\
- mov r8, r3\n\
- ldr r0, _08014AA8 @ =gBattlescriptCurrInstr\n\
- mov r9, r0\n\
- ldr r1, _08014AAC @ =gBattlescriptsForUsingItem\n\
- mov r10, r1\n\
-_08014A74:\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- lsrs r0, 1\n\
- ldr r3, _08014AB0 @ =0x000160d8\n\
- adds r0, r3\n\
- adds r0, r7\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- add r0, r10\n\
- ldr r0, [r0]\n\
- mov r1, r9\n\
- str r0, [r1]\n\
-_08014A8C:\n\
- movs r0, 0xA\n\
- ldr r2, _08014AB4 @ =gCurrentActionFuncId\n\
- strb r0, [r2]\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08014AA0: .4byte gBattleCommunication\n\
-_08014AA4: .4byte gBankAttacker\n\
-_08014AA8: .4byte gBattlescriptCurrInstr\n\
-_08014AAC: .4byte gBattlescriptsForUsingItem\n\
-_08014AB0: .4byte 0x000160d8\n\
-_08014AB4: .4byte gCurrentActionFuncId\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
bool8 TryRunFromBattle(u8 bank)
{
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index 39ba0318b..c2e7d47a0 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -3714,7 +3714,7 @@ _0801EA84:\n\
ldrb r1, [r1]\n\
movs r0, 0x58\n\
muls r0, r1\n\
- ldr r1, _0801EAEC @ =gUnknown_02024ACC\n\
+ ldr r1, _0801EAEC @ =gBattleMons+0x4C @ gBattleMons.status1\n\
adds r0, r1\n\
str r0, [sp]\n\
movs r0, 0\n\
@@ -3744,7 +3744,7 @@ _0801EADC: .4byte gBattlescriptCurrInstr\n\
_0801EAE0: .4byte gMoveEffectBS_Ptrs\n\
_0801EAE4: .4byte gBattleCommunication\n\
_0801EAE8: .4byte gActiveBattler\n\
-_0801EAEC: .4byte gUnknown_02024ACC\n\
+_0801EAEC: .4byte gBattleMons+0x4C @ gBattleMons.status1\n\
_0801EAF0: .4byte gHitMarker\n\
_0801EAF4: .4byte 0xffffdfff\n\
_0801EAF8:\n\
@@ -6523,7 +6523,7 @@ _0802163C:\n\
beq _080216E4\n\
movs r0, 0x1\n\
mov r10, r0\n\
- ldr r0, _08021678 @ =gUnknown_02024A98\n\
+ ldr r0, _08021678 @ =gBattleMons+0x18 @ gBattleMons.statStages\n\
mov r9, r0\n\
lsls r5, r1, 16\n\
_0802164A:\n\
@@ -6548,7 +6548,7 @@ _0802164A:\n\
.align 2, 0\n\
_08021670: .4byte gBattlescriptCurrInstr\n\
_08021674: .4byte gActiveBattler\n\
-_08021678: .4byte gUnknown_02024A98\n\
+_08021678: .4byte gBattleMons+0x18 @ gBattleMons.statStages\n\
_0802167C:\n\
ldr r6, _08021700 @ =gActiveBattler\n\
ldrb r0, [r6]\n\
@@ -6636,7 +6636,7 @@ _0802171C:\n\
mov r9, r5\n\
cmp r4, 0\n\
beq _08021758\n\
- ldr r6, _0802178C @ =gUnknown_02024A98\n\
+ ldr r6, _0802178C @ =gBattleMons+0x18 @ gBattleMons.statStages\n\
adds r5, r2, 0\n\
lsls r2, r1, 16\n\
_08021728:\n\
@@ -6694,7 +6694,7 @@ _08021772:\n\
mov r1, r9\n\
b _080217E6\n\
.align 2, 0\n\
-_0802178C: .4byte gUnknown_02024A98\n\
+_0802178C: .4byte gBattleMons+0x18 @ gBattleMons.statStages\n\
_08021790:\n\
cmp r3, 0\n\
beq _080217E0\n\
@@ -7644,7 +7644,7 @@ _08021E3C:\n\
ldr r2, _08021E64 @ =gDisableStructs\n\
ldr r5, _08021E68 @ =0xfeffffff\n\
adds r3, r0, 0\n\
- ldr r1, _08021E6C @ =gUnknown_02024AD0\n\
+ ldr r1, _08021E6C @ =gBattleMons+0x50\n\
_08021E44:\n\
ldrb r0, [r2, 0xA]\n\
cmp r0, 0\n\
@@ -7664,7 +7664,7 @@ _08021E50:\n\
_08021E60: .4byte gBattlersCount\n\
_08021E64: .4byte gDisableStructs\n\
_08021E68: .4byte 0xfeffffff\n\
-_08021E6C: .4byte gUnknown_02024AD0\n\
+_08021E6C: .4byte gBattleMons+0x50\n\
_08021E70:\n\
ldr r1, _08021F2C @ =gHitMarker\n\
ldr r3, [r1]\n\
diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c
index 7cb39acb7..3d1770239 100644
--- a/src/battle/battle_util.c
+++ b/src/battle/battle_util.c
@@ -27,7 +27,7 @@ extern u8 gUnknown_02023A14_50;
extern const u8* gBattlescriptCurrInstr;
extern u8 gActiveBattler;
extern u8 gBattleBufferB[4][0x200];
-extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to
+extern u8* gSelectionBattleScripts[4]; //battlescript location when you try to choose a move you're not allowed to
extern u16 gLastUsedMove[4];
extern struct BattlePokemon gBattleMons[4];
extern struct BattleEnigmaBerry gEnigmaBerries[4];
@@ -481,25 +481,25 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move
{
gBattleStruct->scriptingActive = gActiveBattler;
gCurrentMove = move;
- gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionDisabledMove;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionDisabledMove;
limitations++;
}
if (move == gLastUsedMove[gActiveBattler] && move != MOVE_STRUGGLE && gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT)
{
CancelMultiTurnMoves(gActiveBattler);
- gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionTormented;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionTormented;
limitations++;
}
if (gDisableStructs[gActiveBattler].tauntTimer1 && gBattleMoves[move].power == 0)
{
gCurrentMove = move;
- gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionTaunted;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionTaunted;
limitations++;
}
if (IsImprisoned(gActiveBattler, move))
{
gCurrentMove = move;
- gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionImprisoned;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionImprisoned;
limitations++;
}
if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY)
@@ -511,12 +511,12 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move
{
gCurrentMove = *choicedMove;
gLastUsedItem = gBattleMons[gActiveBattler].item;
- gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionChoiceBanded;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionChoiceBanded;
limitations++;
}
if (gBattleMons[gActiveBattler].pp[gBattleBufferB[gActiveBattler][2]] == 0)
{
- gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionNoPP;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionNoPP;
limitations++;
}
return limitations;
@@ -568,7 +568,7 @@ bool8 AreAllMovesUnusable(void)
if (unusable == 0xF) //all moves are unusable
{
gProtectStructs[gActiveBattler].onlyStruggle = 1;
- gUnknown_02024C1C[gActiveBattler] = BattleScript_NoMovesLeft;
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
gBattleBufferB[gActiveBattler][3] = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) ^ 1) | (Random() & 2));
else
diff --git a/src/contest_painting.c b/src/contest_painting.c
index d61632a8e..0c5cdcd49 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -23,7 +23,7 @@ u16 (*gUnknown_03005E10)[][32];
struct Unk03005E20 gUnknown_03005E20;
u8 gUnknown_03005E40[0x4C];
struct ContestEntry *gUnknown_03005E8C;
-u16 (*gUnknown_03005E90)[];
+u16 *gUnknown_03005E90;
static const u16 gPictureFramePalettes[][16] =
{
@@ -634,7 +634,7 @@ static u8 sub_8106EE0(u8 arg0)
static void sub_8106F4C(void)
{
- gUnknown_03005E90 = &ewram15E00.unk2017e00;
+ gUnknown_03005E90 = ewram15E00.unk2017e00;
gUnknown_03005E10 = &ewram15E00.unk2015e00;
}
@@ -667,7 +667,7 @@ static void sub_8106F6C(u8 arg0)
gUnknown_03005E20.var_16 = 2;
gUnknown_03005E20.var_0 = arg0;
- gUnknown_03005E20.var_10 = 0x6010000;
+ gUnknown_03005E20.var_10 = OBJ_VRAM0;
sub_80FC7A0(&gUnknown_03005E20);
sub_80FDA18(&gUnknown_03005E20);
diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c
index ae89df88e..57706aea7 100644
--- a/src/contest_painting_effects.c
+++ b/src/contest_painting_effects.c
@@ -4,14 +4,15 @@
extern u16 (*gUnknown_03005DEC)[][32];
extern u8 gUnknown_083E7A50[][3];
-extern u8 gUnknown_03005E00;
+extern u8 gUnknown_03005DE8;
+extern u8 gUnknown_03005DF0;
extern u8 gUnknown_03005DFC;
extern u8 gUnknown_03005DF8;
-extern u8 gUnknown_03005DF0;
-extern u8 gUnknown_03005E04;
extern u8 gUnknown_03005DF4;
-
-extern u8 gUnknown_03005DE8;
+extern u8 gUnknown_03005E00;
+extern u8 gUnknown_03005E04;
+extern u16 * gUnknown_03005E08;
+extern u16 gUnknown_03005E0C;
// this file's functions
void sub_80FCAA4(void);
@@ -36,6 +37,19 @@ u16 InvertColor(u16*);
u16 sub_80FD7AC(u16*, u16*, u16*);
u16 sub_80FD568(u16*, u16*);
u16 GetCoolColorFromPersonality(u8);
+void sub_80FDC18(bool8);
+void sub_80FDAE4(void);
+void sub_80FDF88(void);
+void sub_80FDBE4(void);
+void sub_80FDED8(void);
+void sub_80FDBA8(void);
+void sub_80FDE28(void);
+void sub_80FDB8C(void);
+void sub_80FDD70(void);
+u16 sub_80FE038(u16 *);
+u16 sub_80FE17C(u16 *);
+u16 sub_80FE1B0(u16 *);
+u16 sub_80FE0AC(u16 *);
void sub_80FC7A0(struct Unk03005E20* info)
{
@@ -751,3 +765,770 @@ u16 InvertColor(u16 *color)
return RGB2(red, green, blue);
}
+
+u16 sub_80FD568(u16 *a0, u16 *a1)
+{
+ u16 sp0[2][3];
+ u16 spC[3];
+ u8 r4;
+ u16 r2;
+ u16 r, g, b;
+
+ if (*a0 == *a1)
+ return *a1;
+
+ sp0[0][0] = (*a0 >> 0) & 0x1F;
+ sp0[0][1] = (*a0 >> 5) & 0x1F;
+ sp0[0][2] = (*a0 >> 10) & 0x1F;
+ sp0[1][0] = (*a1 >> 0) & 0x1F;
+ sp0[1][1] = (*a1 >> 5) & 0x1F;
+ sp0[1][2] = (*a1 >> 10) & 0x1F;
+
+ if (sp0[0][0] > 25 && sp0[0][1] > 25 && sp0[0][2] > 25)
+ return *a1;
+ if (sp0[1][0] > 25 && sp0[1][1] > 25 && sp0[1][2] > 25)
+ return *a1;
+
+ for (r4 = 0; r4 < 3; r4++)
+ {
+ if (sp0[0][r4] > sp0[1][r4])
+ spC[r4] = sp0[0][r4] - sp0[1][r4];
+ else
+ spC[r4] = sp0[1][r4] - sp0[0][r4];
+ }
+
+ if (spC[0] >= spC[1])
+ {
+ if (spC[0] >= spC[2])
+ r2 = spC[0];
+ else if (spC[1] >= spC[2])
+ r2 = spC[1];
+ else
+ r2 = spC[2];
+ }
+ else
+ {
+ if (spC[1] >= spC[2])
+ r2 = spC[1];
+ else if (spC[2] >= spC[0])
+ r2 = spC[2];
+ else
+ r2 = spC[0];
+ }
+
+ r = (sp0[1][0] * (31 - r2 / 2)) / 31;
+ g = (sp0[1][1] * (31 - r2 / 2)) / 31;
+ b = (sp0[1][2] * (31 - r2 / 2)) / 31;
+ return RGB2(r, g, b);
+}
+
+u16 sub_80FD68C(u16 * a0, u16 * a1, u16 * a2)
+{
+ u16 red, green, blue;
+ u16 avg0, avg1, avg2;
+ u16 diff1, diff2;
+ u32 minimum;
+ u16 factor;
+
+ if (*a0 == *a1 && *a2 == *a1)
+ return *a1;
+
+ red = (*a1 >> 0) & 0x1F;
+ green = (*a1 >> 5) & 0x1F;
+ blue = (*a1 >> 10) & 0x1F;
+
+ avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
+ avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
+ avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
+
+ if (avg0 == avg1 && avg2 == avg1)
+ return *a1;
+
+ if (avg0 > avg1)
+ diff1 = avg0 - avg1;
+ else
+ diff1 = avg1 - avg0;
+
+ if (avg2 > avg1)
+ diff2 = avg2 - avg1;
+ else
+ diff2 = avg1 - avg2;
+
+ if (diff1 >= diff2)
+ minimum = diff1;
+ else
+ minimum = diff2;
+
+ factor = 31 - minimum / 2;
+ red = red * factor / 31;
+ green = green * factor / 31;
+ blue = blue * factor / 31;
+ return RGB2(red, green, blue);
+}
+
+u16 sub_80FD7AC(u16 *a0, u16 *a1, u16 *a2)
+{
+ u16 red, green, blue;
+ u16 avg0, avg1, avg2;
+ u16 diff1, diff2;
+ u32 minimum;
+ u16 factor;
+
+ if (*a0 == *a1 && *a2 == *a1)
+ return *a1;
+
+ red = (*a1 >> 0) & 0x1F;
+ green = (*a1 >> 5) & 0x1F;
+ blue = (*a1 >> 10) & 0x1F;
+
+ avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
+ avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
+ avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
+
+ if (avg0 == avg1 && avg2 == avg1)
+ return *a1;
+
+ if (avg0 > avg1)
+ diff1 = avg0 - avg1;
+ else
+ diff1 = avg1 - avg0;
+
+ if (avg2 > avg1)
+ diff2 = avg2 - avg1;
+ else
+ diff2 = avg1 - avg2;
+
+ if (diff1 >= diff2)
+ minimum = diff1;
+ else
+ minimum = diff2;
+
+ factor = 31 - minimum;
+ red = red * factor / 31;
+ green = green * factor / 31;
+ blue = blue * factor / 31;
+ return RGB2(red, green, blue);
+}
+
+/*
+void sub_80FD8CC(struct Unk03005E20 * a0)
+{
+ u16 i, j, k;
+ u8 r5 = a0->var_1D >> 3;
+ u8 sp08 = a0->var_1E >> 3;
+ u16 * sp00 = (u16 *)a0->var_4;
+ u16 * sp04 = (u16 *)a0->var_10;
+ if (a0->var_16 == 2)
+ {
+ for (i = 0; i < sp08; i++)
+ {
+ for (j = 0; j < r5; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ u16 * r3 = &sp04[i * r5 * 32 + 4 * k];
+ u16 * r2 = &sp00[j * 8 + (i * 8 + k) * 8 * r5];
+ r3[0] = r2[0] | (r2[1] << 8);
+ r3[1] = r2[2] | (r2[3] << 8);
+ r3[2] = r2[4] | (r2[5] << 8);
+ r3[3] = r2[6] | (r2[7] << 8);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < sp08; i++)
+ {
+ for (j = 0; j < r5; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ u16 * r3 = &sp04[i * r5 * 16 + 2 * k];
+ u16 * r2 = &sp00[j * 8 + (i * 8 + k) * 8 * r5];
+ r3[0] = r2[0] | (r2[1] << 4) | (r2[2] << 8) | (r2[3] << 12);
+ r3[1] = r2[4] | (r2[5] << 4) | (r2[6] << 8) | (r2[7] << 12);
+ }
+ }
+ }
+ }
+}
+*/
+
+NAKED
+void sub_80FD8CC(struct Unk03005E20 * a0)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0xC\n"
+ "\tldrb r1, [r0, 0x1D]\n"
+ "\tlsrs r5, r1, 3\n"
+ "\tldrb r1, [r0, 0x1E]\n"
+ "\tlsrs r1, 3\n"
+ "\tstr r1, [sp, 0x8]\n"
+ "\tldr r1, [r0, 0x4]\n"
+ "\tstr r1, [sp]\n"
+ "\tldr r2, [r0, 0x10]\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tldrh r0, [r0, 0x16]\n"
+ "\tcmp r0, 0x2\n"
+ "\tbne _080FD97C\n"
+ "\tmovs r1, 0\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tcmp r1, r0\n"
+ "\tbcc _080FD8FA\n"
+ "\tb _080FDA08\n"
+ "_080FD8FA:\n"
+ "\tmovs r0, 0\n"
+ "\tadds r2, r1, 0x1\n"
+ "\tmov r10, r2\n"
+ "\tcmp r0, r5\n"
+ "\tbcs _080FD96E\n"
+ "\tadds r2, r1, 0\n"
+ "\tmuls r2, r5\n"
+ "\tmov r9, r2\n"
+ "\tlsls r1, 3\n"
+ "\tmov r8, r1\n"
+ "_080FD90E:\n"
+ "\tmovs r4, 0\n"
+ "\tlsls r6, r0, 4\n"
+ "\tadds r7, r0, 0x1\n"
+ "\tadd r0, r9\n"
+ "\tlsls r0, 6\n"
+ "\tldr r1, [sp, 0x4]\n"
+ "\tadds r1, r0\n"
+ "\tmov r12, r1\n"
+ "_080FD91E:\n"
+ "\tlsls r0, r4, 3\n"
+ "\tmov r2, r12\n"
+ "\tadds r3, r2, r0\n"
+ "\tmov r1, r8\n"
+ "\tadds r0, r1, r4\n"
+ "\tlsls r0, 3\n"
+ "\tmuls r0, r5\n"
+ "\tlsls r0, 1\n"
+ "\tldr r2, [sp]\n"
+ "\tadds r0, r2, r0\n"
+ "\tadds r2, r0, r6\n"
+ "\tldrh r0, [r2, 0x2]\n"
+ "\tlsls r0, 8\n"
+ "\tldrh r1, [r2]\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r3]\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 8\n"
+ "\tldrh r1, [r2, 0x4]\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r3, 0x2]\n"
+ "\tldrh r0, [r2, 0xA]\n"
+ "\tlsls r0, 8\n"
+ "\tldrh r1, [r2, 0x8]\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r3, 0x4]\n"
+ "\tldrh r0, [r2, 0xE]\n"
+ "\tlsls r0, 8\n"
+ "\tldrh r1, [r2, 0xC]\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r3, 0x6]\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tcmp r4, 0x7\n"
+ "\tbls _080FD91E\n"
+ "\tlsls r0, r7, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, r5\n"
+ "\tbcc _080FD90E\n"
+ "_080FD96E:\n"
+ "\tmov r1, r10\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r1, r0, 16\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r1, r2\n"
+ "\tbcc _080FD8FA\n"
+ "\tb _080FDA08\n"
+ "_080FD97C:\n"
+ "\tmovs r1, 0\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tcmp r1, r0\n"
+ "\tbcs _080FDA08\n"
+ "_080FD984:\n"
+ "\tmovs r0, 0\n"
+ "\tadds r2, r1, 0x1\n"
+ "\tmov r10, r2\n"
+ "\tcmp r0, r5\n"
+ "\tbcs _080FD9FC\n"
+ "\tadds r2, r1, 0\n"
+ "\tmuls r2, r5\n"
+ "\tmov r9, r2\n"
+ "\tlsls r1, 3\n"
+ "\tmov r8, r1\n"
+ "_080FD998:\n"
+ "\tmovs r4, 0\n"
+ "\tlsls r6, r0, 4\n"
+ "\tadds r7, r0, 0x1\n"
+ "\tadd r0, r9\n"
+ "\tlsls r0, 5\n"
+ "\tldr r1, [sp, 0x4]\n"
+ "\tadds r1, r0\n"
+ "\tmov r12, r1\n"
+ "_080FD9A8:\n"
+ "\tlsls r0, r4, 2\n"
+ "\tmov r2, r12\n"
+ "\tadds r3, r2, r0\n"
+ "\tmov r1, r8\n"
+ "\tadds r0, r1, r4\n"
+ "\tlsls r0, 3\n"
+ "\tmuls r0, r5\n"
+ "\tlsls r0, 1\n"
+ "\tldr r2, [sp]\n"
+ "\tadds r0, r2, r0\n"
+ "\tadds r2, r0, r6\n"
+ "\tldrh r1, [r2, 0x2]\n"
+ "\tlsls r1, 4\n"
+ "\tldrh r0, [r2]\n"
+ "\torrs r1, r0\n"
+ "\tldrh r0, [r2, 0x4]\n"
+ "\tlsls r0, 8\n"
+ "\torrs r1, r0\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 12\n"
+ "\torrs r1, r0\n"
+ "\tstrh r1, [r3]\n"
+ "\tldrh r1, [r2, 0xA]\n"
+ "\tlsls r1, 4\n"
+ "\tldrh r0, [r2, 0x8]\n"
+ "\torrs r1, r0\n"
+ "\tldrh r0, [r2, 0xC]\n"
+ "\tlsls r0, 8\n"
+ "\torrs r1, r0\n"
+ "\tldrh r0, [r2, 0xE]\n"
+ "\tlsls r0, 12\n"
+ "\torrs r1, r0\n"
+ "\tstrh r1, [r3, 0x2]\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tcmp r4, 0x7\n"
+ "\tbls _080FD9A8\n"
+ "\tlsls r0, r7, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, r5\n"
+ "\tbcc _080FD998\n"
+ "_080FD9FC:\n"
+ "\tmov r1, r10\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r1, r0, 16\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r1, r2\n"
+ "\tbcc _080FD984\n"
+ "_080FDA08:\n"
+ "\tadd sp, 0xC\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+
+void sub_80FDA18(struct Unk03005E20 *arg0)
+{
+ gUnknown_03005E0C = arg0->var_18 * 16;
+ gUnknown_03005E08 = &arg0->var_8[gUnknown_03005E0C];
+ gUnknown_03005DEC = arg0->var_4;
+ gUnknown_03005DE8 = arg0->var_19;
+ gUnknown_03005DFC = arg0->var_1A;
+ gUnknown_03005DF8 = arg0->var_1B;
+ gUnknown_03005DF0 = arg0->var_1C;
+ gUnknown_03005E04 = arg0->var_1D;
+ gUnknown_03005DF4 = arg0->var_1E;
+
+ switch (arg0->var_14)
+ {
+ case 0:
+ sub_80FDC18(FALSE);
+ break;
+ case 1:
+ sub_80FDC18(TRUE);
+ break;
+ case 2:
+ sub_80FDAE4();
+ sub_80FDF88();
+ break;
+ case 3:
+ sub_80FDBE4();
+ sub_80FDED8();
+ break;
+ case 4:
+ sub_80FDBA8();
+ sub_80FDE28();
+ break;
+ case 5:
+ sub_80FDB8C();
+ sub_80FDD70();
+ break;
+ }
+}
+
+void sub_80FDAE4(void)
+{
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ gUnknown_03005E08[1] = RGB2(6, 6, 6);
+ gUnknown_03005E08[2] = RGB2(29, 29, 29);
+ gUnknown_03005E08[3] = RGB2(11, 11, 11);
+ gUnknown_03005E08[4] = RGB2(29, 6, 6);
+ gUnknown_03005E08[5] = RGB2(6, 29, 6);
+ gUnknown_03005E08[6] = RGB2(6, 6, 29);
+ gUnknown_03005E08[7] = RGB2(29, 29, 6);
+ gUnknown_03005E08[8] = RGB2(29, 6, 29);
+ gUnknown_03005E08[9] = RGB2(6, 29, 29);
+ gUnknown_03005E08[10] = RGB2(29, 11, 6);
+ gUnknown_03005E08[11] = RGB2(11, 29, 6);
+ gUnknown_03005E08[12] = RGB2(6, 11, 29);
+ gUnknown_03005E08[13] = RGB2(29, 6, 11);
+ gUnknown_03005E08[14] = RGB2(6, 29, 11);
+ gUnknown_03005E08[15] = RGB2(11, 6, 29);
+}
+
+void sub_80FDB8C(void)
+{
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ gUnknown_03005E08[1] = RGB2(0, 0, 0);
+ gUnknown_03005E08[2] = RGB2(31, 31, 31);
+}
+
+void sub_80FDBA8(void)
+{
+ u8 i;
+
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ gUnknown_03005E08[1] = RGB2(0, 0, 0);
+ for (i = 0; i < 14; i++)
+ gUnknown_03005E08[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2));
+}
+
+void sub_80FDBE4(void)
+{
+ u8 i;
+
+ gUnknown_03005E08[0] = RGB2(0, 0, 0);
+ for (i = 0; i < 32; i++)
+ gUnknown_03005E08[i + 1] = RGB2(i, i, i);
+}
+
+void sub_80FDC18(bool8 arg0)
+{
+ u8 i, j;
+ u16 maxIndex;
+
+ maxIndex = 0xDF;
+ if (!arg0)
+ maxIndex = 0xFF;
+
+ for (j = 0; j < maxIndex; j++)
+ gUnknown_03005E08[j] = 0;
+
+ gUnknown_03005E08[maxIndex] = RGB2(15, 15, 15);
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ {
+ *pal = gUnknown_03005E0C;
+ }
+ else
+ {
+ u16 color = sub_80FE038(pal);
+ u8 curIndex = 1;
+ if (curIndex < maxIndex)
+ {
+ if (gUnknown_03005E08[curIndex] == RGB_BLACK)
+ {
+ gUnknown_03005E08[curIndex] = color;
+ *pal = gUnknown_03005E0C + curIndex;
+ }
+ else
+ {
+ while (curIndex < maxIndex)
+ {
+ if (gUnknown_03005E08[curIndex] == RGB_BLACK)
+ {
+ gUnknown_03005E08[curIndex] = color;
+ *pal = gUnknown_03005E0C + curIndex;
+ break;
+ }
+
+ if (gUnknown_03005E08[curIndex] == color)
+ {
+ *pal = gUnknown_03005E0C + curIndex;
+ break;
+ }
+
+ curIndex++;
+ }
+ }
+ }
+
+ if (curIndex == maxIndex)
+ {
+ curIndex = maxIndex;
+ *pal = curIndex;
+ }
+ }
+ }
+ }
+}
+
+void sub_80FDD70(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ {
+ *pal = gUnknown_03005E0C;
+ }
+ else
+ {
+ if (ConvertToBlackOrWhite(pal) == RGB_BLACK)
+ *pal = gUnknown_03005E0C + 1;
+ else
+ *pal = gUnknown_03005E0C + 2;
+ }
+ }
+ }
+}
+
+void sub_80FDE28(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ *pal = gUnknown_03005E0C;
+ else
+ *pal = sub_80FE17C(pal) + gUnknown_03005E0C;
+ }
+ }
+}
+
+void sub_80FDED8(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ *pal = gUnknown_03005E0C;
+ else
+ *pal = sub_80FE1B0(pal) + gUnknown_03005E0C;
+ }
+ }
+}
+
+void sub_80FDF88(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (*pal & 0x8000)
+ *pal = gUnknown_03005E0C;
+ else
+ *pal = sub_80FE0AC(pal) + gUnknown_03005E0C;
+ }
+ }
+}
+
+u16 sub_80FE038(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red & 3)
+ red = (red & 0x1C) + 4;
+ if (green & 3)
+ green = (green & 0x1C) + 4;
+ if (blue & 3)
+ blue = (blue & 0x1C) + 4;
+
+ if (red < 6)
+ red = 6;
+ if (red > 30)
+ red = 30;
+
+ if (green < 6)
+ green = 6;
+ if (green > 30)
+ green = 30;
+
+ if (blue < 6)
+ blue = 6;
+ if (blue > 30)
+ blue = 30;
+
+ return RGB2(red, green, blue);
+}
+
+u16 sub_80FE0AC(u16* color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 12 && green < 11 && blue < 11)
+ return 1;
+
+ if (red > 19 && green > 19 && blue > 19)
+ return 2;
+
+ if (red > 19)
+ {
+ if (green > 19)
+ {
+ if (blue > 14)
+ return 2;
+ else
+ return 7;
+ }
+ else if (blue > 19)
+ {
+ if (green > 14)
+ return 2;
+ else
+ return 8;
+ }
+ }
+
+ if (green > 19 && blue > 19)
+ {
+ if (red > 14)
+ return 2;
+ else
+ return 9;
+ }
+
+ if (red > 19)
+ {
+ if (green > 11)
+ {
+ if (blue > 11)
+ {
+ if (green < blue)
+ return 8;
+ else
+ return 7;
+ }
+ else
+ {
+ return 10;
+ }
+ }
+ else if (blue > 11)
+ {
+ return 13;
+ }
+ else
+ {
+ return 4;
+ }
+ }
+
+ if (green > 19)
+ {
+ if (red > 11)
+ {
+ if (blue > 11)
+ {
+ if (red < blue)
+ return 9;
+ else
+ return 7;
+ }
+ else
+ {
+ return 11;
+ }
+ }
+ else
+ {
+ if (blue > 11)
+ return 14;
+ else
+ return 5;
+ }
+ }
+
+ if (blue > 19)
+ {
+ if (red > 11)
+ {
+ if (green > 11)
+ {
+ if (red < green)
+ return 9;
+ else
+ return 8;
+ }
+ }
+ else if (green > 11)
+ {
+ return 12;
+ }
+
+ if (blue > 11)
+ return 15;
+ else
+ return 6;
+ }
+
+ return 3;
+}
+
+u16 sub_80FE17C(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = ((red + green + blue) / 3) & 0x1E;
+ if (average == 0)
+ return 1;
+ else
+ return average / 2;
+}
+
+u16 sub_80FE1B0(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = (red + green + blue) / 3;
+ return average + 1;
+}
diff --git a/src/data/battle_tower/level_100_mons.h b/src/data/battle_tower/level_100_mons.h
index 4f2b711ee..ed7359979 100644
--- a/src/data/battle_tower/level_100_mons.h
+++ b/src/data/battle_tower/level_100_mons.h
@@ -3900,4 +3900,4 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] =
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY,
},
-}; \ No newline at end of file
+};
diff --git a/src/data/graphics.c b/src/data/graphics.c
index 60ba81dab..7aa3a4384 100644
--- a/src/data/graphics.c
+++ b/src/data/graphics.c
@@ -1058,9 +1058,9 @@ const u16 gPokenavMenuOptions2_Pal[] = INCBIN_U16("graphics/pokenav/pokenav2.gba
const u16 gPokenavMenuOptions3_Pal[] = INCBIN_U16("graphics/pokenav/pokenav3.gbapal");
const u8 gPokenavHoennMapHeader_Gfx[] = INCBIN_U8("graphics/pokenav/map_header.4bpp.lz");
const u8 gPokenavHoennMapMisc_Gfx[] = INCBIN_U8("graphics/pokenav/map_misc2.4bpp.lz");
-const u8 gPokenavHoennMapSquares_Gfx[] = INCBIN_U8("graphics/pokenav/map_squares.4bpp.lz");
+const u8 gPokenavHoennMapSquares_Gfx[] = INCBIN_U8("graphics/pokenav/zoom_tiles.4bpp.lz");
const u16 gPokenavHoennMap1_Pal[] = INCBIN_U16("graphics/pokenav/map_menu.gbapal");
-const u8 gPokenavHoennMapSquares_Pal[] = INCBIN_U8("graphics/pokenav/map_squares.gbapal");
+const u8 gPokenavHoennMapSquares_Pal[] = INCBIN_U8("graphics/pokenav/zoom_tiles.gbapal");
const u8 gPokenavConditionMenu_Gfx[] = INCBIN_U8("graphics/pokenav/condition_menu.4bpp.lz");
const u16 gPokenavConditionMenu_Pal[] = INCBIN_U16("graphics/pokenav/condition1.gbapal");
const u8 gPokenavConditionMenuHeader_Gfx[] = INCBIN_U8("graphics/pokenav/condition_menu_header.4bpp.lz");
diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h
index bc6572b46..fcf2f7b00 100644
--- a/src/data/pokemon/base_stats.h
+++ b/src/data/pokemon/base_stats.h
@@ -1,9 +1,41 @@
#ifndef GUARD_BASE_STATS_H
#define GUARD_BASE_STATS_H
-// Maximum value for a female pokemon is 254 (MON_FEMALE) which is 100% female.
-// 255 (MON_GENDERLESS) is reserved for genderless pokemon.
+// Maximum value for a female Pokémon is 254 (MON_FEMALE) which is 100% female.
+// 255 (MON_GENDERLESS) is reserved for genderless Pokémon.
#define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100))
+#define OLD_UNOWN_BASE_STATS \
+ { \
+ .baseHP = 50, \
+ .baseAttack = 150, \
+ .baseDefense = 50, \
+ .baseSpAttack = 150, \
+ .baseSpDefense = 50, \
+ .baseSpeed = 150, \
+ .type1 = TYPE_NORMAL, \
+ .type2 = TYPE_NORMAL, \
+ .catchRate = 3, \
+ .expYield = 1, \
+ .evYield_HP = 2, \
+ .evYield_Attack = 2, \
+ .evYield_Defense = 2, \
+ .evYield_Speed = 2, \
+ .evYield_SpAttack = 2, \
+ .evYield_SpDefense = 2, \
+ .item1 = ITEM_NONE, \
+ .item2 = ITEM_NONE, \
+ .genderRatio = MON_GENDERLESS, \
+ .eggCycles = 120, \
+ .friendship = 0, \
+ .growthRate = GROWTH_MEDIUM_FAST, \
+ .eggGroup1 = EGG_GROUP_UNDISCOVERED,\
+ .eggGroup2 = EGG_GROUP_UNDISCOVERED,\
+ .ability1 = ABILITY_NONE, \
+ .ability2 = ABILITY_NONE, \
+ .safariZoneFleeRate = 0, \
+ .bodyColor = BODY_COLOR_BLACK, \
+ .noFlip = FALSE, \
+ }
const struct BaseStats gBaseStats[] =
{
@@ -8292,830 +8324,55 @@ const struct BaseStats gBaseStats[] =
.noFlip = FALSE,
},
- [SPECIES_OLD_UNOWN_B] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_B] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_C] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_C] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_D] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_D] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_E] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_E] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_F] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_F] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_G] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_G] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_H] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_H] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_I] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_I] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_J] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_J] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_K] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_K] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_L] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_L] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_M] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_M] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_N] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_N] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_O] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_O] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_P] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_P] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_Q] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_Q] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_R] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_R] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_S] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_S] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_T] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_T] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_U] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_U] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_V] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_V] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_W] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_W] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_X] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_X] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_Y] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_Y] = OLD_UNOWN_BASE_STATS,
- [SPECIES_OLD_UNOWN_Z] =
- {
- .baseHP = 50,
- .baseAttack = 150,
- .baseDefense = 50,
- .baseSpeed = 150,
- .baseSpAttack = 150,
- .baseSpDefense = 50,
- .type1 = TYPE_NORMAL,
- .type2 = TYPE_NORMAL,
- .catchRate = 3,
- .expYield = 1,
- .evYield_HP = 2,
- .evYield_Attack = 2,
- .evYield_Defense = 2,
- .evYield_Speed = 2,
- .evYield_SpAttack = 2,
- .evYield_SpDefense = 2,
- .item1 = ITEM_NONE,
- .item2 = ITEM_NONE,
- .genderRatio = MON_GENDERLESS,
- .eggCycles = 120,
- .friendship = 0,
- .growthRate = GROWTH_MEDIUM_FAST,
- .eggGroup1 = EGG_GROUP_UNDISCOVERED,
- .eggGroup2 = EGG_GROUP_UNDISCOVERED,
- .ability1 = ABILITY_NONE,
- .ability2 = ABILITY_NONE,
- .safariZoneFleeRate = 0,
- .bodyColor = BODY_COLOR_BLACK,
- .noFlip = FALSE,
- },
+ [SPECIES_OLD_UNOWN_Z] = OLD_UNOWN_BASE_STATS,
[SPECIES_TREECKO] =
{
diff --git a/src/data/region_map/region_map_entries.h b/src/data/region_map/region_map_entries.h
new file mode 100644
index 000000000..b41d729bf
--- /dev/null
+++ b/src/data/region_map/region_map_entries.h
@@ -0,0 +1,175 @@
+#ifndef GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
+#define GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
+
+static const u8 sMapName_LittlerootTown[] = _("LITTLEROOT{NAME_END} TOWN");
+static const u8 sMapName_OldaleTown[] = _("OLDALE{NAME_END} TOWN");
+static const u8 sMapName_DewfordTown[] = _("DEWFORD{NAME_END} TOWN");
+static const u8 sMapName_LavaridgeTown[] = _("LAVARIDGE{NAME_END} TOWN");
+static const u8 sMapName_FallarborTown[] = _("FALLARBOR{NAME_END} TOWN");
+static const u8 sMapName_VerdanturfTown[] = _("VERDANTURF{NAME_END} TOWN");
+static const u8 sMapName_PacifidlogTown[] = _("PACIFIDLOG{NAME_END} TOWN");
+static const u8 sMapName_PetalburgCity[] = _("PETALBURG{NAME_END} CITY");
+static const u8 sMapName_SlateportCity[] = _("SLATEPORT{NAME_END} CITY");
+static const u8 sMapName_MauvilleCity[] = _("MAUVILLE{NAME_END} CITY");
+static const u8 sMapName_RustboroCity[] = _("RUSTBORO{NAME_END} CITY");
+static const u8 sMapName_FortreeCity[] = _("FORTREE{NAME_END} CITY");
+static const u8 sMapName_LilycoveCity[] = _("LILYCOVE{NAME_END} CITY");
+static const u8 sMapName_MossdeepCity[] = _("MOSSDEEP{NAME_END} CITY");
+static const u8 sMapName_SootopolisCity[] = _("SOOTOPOLIS{NAME_END} CITY");
+static const u8 sMapName_EverGrandeCity[] = _("EVER GRANDE{NAME_END} CITY");
+static const u8 sMapName_Route101[] = _("ROUTE 101");
+static const u8 sMapName_Route102[] = _("ROUTE 102");
+static const u8 sMapName_Route103[] = _("ROUTE 103");
+static const u8 sMapName_Route104[] = _("ROUTE 104");
+static const u8 sMapName_Route105[] = _("ROUTE 105");
+static const u8 sMapName_Route106[] = _("ROUTE 106");
+static const u8 sMapName_Route107[] = _("ROUTE 107");
+static const u8 sMapName_Route108[] = _("ROUTE 108");
+static const u8 sMapName_Route109[] = _("ROUTE 109");
+static const u8 sMapName_Route110[] = _("ROUTE 110");
+static const u8 sMapName_Route111[] = _("ROUTE 111");
+static const u8 sMapName_Route112[] = _("ROUTE 112");
+static const u8 sMapName_Route113[] = _("ROUTE 113");
+static const u8 sMapName_Route114[] = _("ROUTE 114");
+static const u8 sMapName_Route115[] = _("ROUTE 115");
+static const u8 sMapName_Route116[] = _("ROUTE 116");
+static const u8 sMapName_Route117[] = _("ROUTE 117");
+static const u8 sMapName_Route118[] = _("ROUTE 118");
+static const u8 sMapName_Route119[] = _("ROUTE 119");
+static const u8 sMapName_Route120[] = _("ROUTE 120");
+static const u8 sMapName_Route121[] = _("ROUTE 121");
+static const u8 sMapName_Route122[] = _("ROUTE 122");
+static const u8 sMapName_Route123[] = _("ROUTE 123");
+static const u8 sMapName_Route124[] = _("ROUTE 124");
+static const u8 sMapName_Route125[] = _("ROUTE 125");
+static const u8 sMapName_Route126[] = _("ROUTE 126");
+static const u8 sMapName_Route127[] = _("ROUTE 127");
+static const u8 sMapName_Route128[] = _("ROUTE 128");
+static const u8 sMapName_Route129[] = _("ROUTE 129");
+static const u8 sMapName_Route130[] = _("ROUTE 130");
+static const u8 sMapName_Route131[] = _("ROUTE 131");
+static const u8 sMapName_Route132[] = _("ROUTE 132");
+static const u8 sMapName_Route133[] = _("ROUTE 133");
+static const u8 sMapName_Route134[] = _("ROUTE 134");
+static const u8 sMapName_Underwater[] = _("UNDERWATER");
+static const u8 sMapName_GraniteCave[] = _("GRANITE CAVE");
+static const u8 sMapName_MtChimney[] = _("MT. CHIMNEY");
+static const u8 sMapName_SafariZone[] = _("SAFARI ZONE");
+static const u8 sMapName_BattleTower[] = _("BATTLE TOWER");
+static const u8 sMapName_PetalburgWoods[] = _("PETALBURG WOODS");
+static const u8 sMapName_RusturfTunnel[] = _("RUSTURF TUNNEL");
+static const u8 sMapName_AbandonedShip[] = _("ABANDONED SHIP");
+static const u8 sMapName_NewMauville[] = _("NEW MAUVILLE");
+static const u8 sMapName_MeteorFalls[] = _("METEOR FALLS");
+static const u8 sMapName_MtPyre[] = _("MT. PYRE");
+static const u8 sMapName_EvilTeamHideout[] = _("{EVIL_TEAM} HIDEOUT");
+static const u8 sMapName_ShoalCave[] = _("SHOAL CAVE");
+static const u8 sMapName_SeafloorCavern[] = _("SEAFLOOR CAVERN");
+static const u8 sMapName_VictoryRoad[] = _("VICTORY ROAD");
+static const u8 sMapName_MirageIsland[] = _("MIRAGE ISLAND");
+static const u8 sMapName_CaveOfOrigin[] = _("CAVE OF ORIGIN");
+static const u8 sMapName_SouthernIsland[] = _("SOUTHERN ISLAND");
+static const u8 sMapName_FieryPath[] = _("FIERY PATH");
+static const u8 sMapName_JaggedPass[] = _("JAGGED PASS");
+static const u8 sMapName_SealedChamber[] = _("SEALED CHAMBER");
+static const u8 sMapName_ScorchedSlab[] = _("SCORCHED SLAB");
+static const u8 sMapName_IslandCave[] = _("ISLAND CAVE");
+static const u8 sMapName_DesertRuins[] = _("DESERT RUINS");
+static const u8 sMapName_AncientTomb[] = _("ANCIENT TOMB");
+static const u8 sMapName_InsideOfTruck[] = _("INSIDE OF TRUCK");
+static const u8 sMapName_SkyPillar[] = _("SKY PILLAR");
+static const u8 sMapName_SecretBase[] = _("SECRET BASE");
+static const u8 sMapName_None[] = _("");
+
+const struct RegionMapLocation gRegionMapEntries[] = {
+ [MAPSEC_LITTLEROOT_TOWN] = { 4, 11, 1, 1, sMapName_LittlerootTown},
+ [MAPSEC_OLDALE_TOWN] = { 4, 9, 1, 1, sMapName_OldaleTown},
+ [MAPSEC_DEWFORD_TOWN] = { 2, 14, 1, 1, sMapName_DewfordTown},
+ [MAPSEC_LAVARIDGE_TOWN] = { 5, 3, 1, 1, sMapName_LavaridgeTown},
+ [MAPSEC_FALLARBOR_TOWN] = { 3, 0, 1, 1, sMapName_FallarborTown},
+ [MAPSEC_VERDANTURF_TOWN] = { 4, 6, 1, 1, sMapName_VerdanturfTown},
+ [MAPSEC_PACIFIDLOG_TOWN] = {17, 10, 1, 1, sMapName_PacifidlogTown},
+ [MAPSEC_PETALBURG_CITY] = { 1, 9, 1, 1, sMapName_PetalburgCity},
+ [MAPSEC_SLATEPORT_CITY] = { 8, 10, 1, 2, sMapName_SlateportCity},
+ [MAPSEC_MAUVILLE_CITY] = { 8, 6, 2, 1, sMapName_MauvilleCity},
+ [MAPSEC_RUSTBORO_CITY] = { 0, 5, 1, 2, sMapName_RustboroCity},
+ [MAPSEC_FORTREE_CITY] = {12, 0, 1, 1, sMapName_FortreeCity},
+ [MAPSEC_LILYCOVE_CITY] = {18, 3, 2, 1, sMapName_LilycoveCity},
+ [MAPSEC_MOSSDEEP_CITY] = {24, 5, 2, 1, sMapName_MossdeepCity},
+ [MAPSEC_SOOTOPOLIS_CITY] = {21, 7, 1, 1, sMapName_SootopolisCity},
+ [MAPSEC_EVER_GRANDE_CITY] = {27, 8, 1, 2, sMapName_EverGrandeCity},
+ [MAPSEC_ROUTE_101] = { 4, 10, 1, 1, sMapName_Route101},
+ [MAPSEC_ROUTE_102] = { 2, 9, 2, 1, sMapName_Route102},
+ [MAPSEC_ROUTE_103] = { 4, 8, 4, 1, sMapName_Route103},
+ [MAPSEC_ROUTE_104] = { 0, 7, 1, 3, sMapName_Route104},
+ [MAPSEC_ROUTE_105] = { 0, 10, 1, 3, sMapName_Route105},
+ [MAPSEC_ROUTE_106] = { 0, 13, 2, 1, sMapName_Route106},
+ [MAPSEC_ROUTE_107] = { 3, 14, 3, 1, sMapName_Route107},
+ [MAPSEC_ROUTE_108] = { 6, 14, 2, 1, sMapName_Route108},
+ [MAPSEC_ROUTE_109] = { 8, 12, 1, 3, sMapName_Route109},
+ [MAPSEC_ROUTE_110] = { 8, 7, 1, 3, sMapName_Route110},
+ [MAPSEC_ROUTE_111] = { 8, 0, 1, 6, sMapName_Route111},
+ [MAPSEC_ROUTE_112] = { 6, 3, 2, 1, sMapName_Route112},
+ [MAPSEC_ROUTE_113] = { 4, 0, 4, 1, sMapName_Route113},
+ [MAPSEC_ROUTE_114] = { 1, 0, 2, 3, sMapName_Route114},
+ [MAPSEC_ROUTE_115] = { 0, 2, 1, 3, sMapName_Route115},
+ [MAPSEC_ROUTE_116] = { 1, 5, 4, 1, sMapName_Route116},
+ [MAPSEC_ROUTE_117] = { 5, 6, 3, 1, sMapName_Route117},
+ [MAPSEC_ROUTE_118] = {10, 6, 2, 1, sMapName_Route118},
+ [MAPSEC_ROUTE_119] = {11, 0, 1, 6, sMapName_Route119},
+ [MAPSEC_ROUTE_120] = {13, 0, 1, 4, sMapName_Route120},
+ [MAPSEC_ROUTE_121] = {14, 3, 4, 1, sMapName_Route121},
+ [MAPSEC_ROUTE_122] = {16, 4, 1, 2, sMapName_Route122},
+ [MAPSEC_ROUTE_123] = {12, 6, 5, 1, sMapName_Route123},
+ [MAPSEC_ROUTE_124] = {20, 3, 4, 3, sMapName_Route124},
+ [MAPSEC_ROUTE_125] = {24, 3, 2, 2, sMapName_Route125},
+ [MAPSEC_ROUTE_126] = {20, 6, 3, 3, sMapName_Route126},
+ [MAPSEC_ROUTE_127] = {23, 6, 3, 3, sMapName_Route127},
+ [MAPSEC_ROUTE_128] = {23, 9, 4, 1, sMapName_Route128},
+ [MAPSEC_ROUTE_129] = {24, 10, 2, 1, sMapName_Route129},
+ [MAPSEC_ROUTE_130] = {21, 10, 3, 1, sMapName_Route130},
+ [MAPSEC_ROUTE_131] = {18, 10, 3, 1, sMapName_Route131},
+ [MAPSEC_ROUTE_132] = {15, 10, 2, 1, sMapName_Route132},
+ [MAPSEC_ROUTE_133] = {12, 10, 3, 1, sMapName_Route133},
+ [MAPSEC_ROUTE_134] = { 9, 10, 3, 1, sMapName_Route134},
+ [MAPSEC_UNDERWATER_124] = {20, 3, 4, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_125] = {20, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_126] = {23, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_127] = {23, 9, 4, 1, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_SOOTOPOLIS] = {21, 7, 1, 1, sMapName_Underwater},
+ [MAPSEC_GRANITE_CAVE] = { 1, 13, 1, 1, sMapName_GraniteCave},
+ [MAPSEC_MT_CHIMNEY] = { 6, 2, 1, 1, sMapName_MtChimney},
+ [MAPSEC_SAFARI_ZONE] = {16, 2, 1, 1, sMapName_SafariZone},
+ [MAPSEC_BATTLE_TOWER] = {22, 12, 1, 1, sMapName_BattleTower},
+ [MAPSEC_PETALBURG_WOODS] = { 0, 8, 1, 1, sMapName_PetalburgWoods},
+ [MAPSEC_RUSTURF_TUNNEL] = { 2, 5, 1, 1, sMapName_RusturfTunnel},
+ [MAPSEC_ABANDONED_SHIP] = { 6, 14, 1, 1, sMapName_AbandonedShip},
+ [MAPSEC_NEW_MAUVILLE] = { 8, 7, 1, 1, sMapName_NewMauville},
+ [MAPSEC_METEOR_FALLS] = { 0, 3, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_METEOR_FALLS_2] = { 1, 2, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_MT_PYRE] = {16, 4, 1, 1, sMapName_MtPyre},
+ [MAPSEC_EVIL_TEAM_HIDEOUT] = {19, 3, 1, 1, sMapName_EvilTeamHideout},
+ [MAPSEC_SHOAL_CAVE] = {24, 4, 1, 1, sMapName_ShoalCave},
+ [MAPSEC_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_SeafloorCavern},
+ [MAPSEC_UNDERWATER_128] = {24, 9, 1, 1, sMapName_Underwater},
+ [MAPSEC_VICTORY_ROAD] = {27, 9, 1, 1, sMapName_VictoryRoad},
+ [MAPSEC_MIRAGE_ISLAND] = {17, 10, 1, 1, sMapName_MirageIsland},
+ [MAPSEC_CAVE_OF_ORIGIN] = {21, 7, 1, 1, sMapName_CaveOfOrigin},
+ [MAPSEC_SOUTHERN_ISLAND] = {12, 14, 1, 1, sMapName_SouthernIsland},
+ [MAPSEC_FIERY_PATH] = { 6, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_FIERY_PATH_2] = { 7, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_JAGGED_PASS] = { 6, 3, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_JAGGED_PASS_2] = { 7, 2, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_SealedChamber},
+ [MAPSEC_UNDERWATER_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_Underwater},
+ [MAPSEC_SCORCHED_SLAB] = {13, 0, 1, 1, sMapName_ScorchedSlab},
+ [MAPSEC_ISLAND_CAVE] = { 0, 10, 1, 1, sMapName_IslandCave},
+ [MAPSEC_DESERT_RUINS] = { 8, 3, 1, 1, sMapName_DesertRuins},
+ [MAPSEC_ANCIENT_TOMB] = {13, 2, 1, 1, sMapName_AncientTomb},
+ [MAPSEC_INSIDE_OF_TRUCK] = { 0, 0, 1, 1, sMapName_InsideOfTruck},
+ [MAPSEC_SKY_PILLAR] = {19, 10, 1, 1, sMapName_SkyPillar},
+ [MAPSEC_SECRET_BASE] = { 0, 0, 1, 1, sMapName_SecretBase},
+ [MAPSEC_DYNAMIC] = { 0, 0, 1, 1, sMapName_None},
+};
+
+#endif // GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
diff --git a/src/data/region_map/region_map_entries_de.h b/src/data/region_map/region_map_entries_de.h
new file mode 100644
index 000000000..935db1446
--- /dev/null
+++ b/src/data/region_map/region_map_entries_de.h
@@ -0,0 +1,175 @@
+#ifndef GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
+#define GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
+
+static const u8 sMapName_LittlerootTown[] = _("WURZELHEIM");
+static const u8 sMapName_OldaleTown[] = _("ROSALTSTADT");
+static const u8 sMapName_DewfordTown[] = _("FAUSTAUHAVEN");
+static const u8 sMapName_LavaridgeTown[] = _("BAD LAVASTADT");
+static const u8 sMapName_FallarborTown[] = _("LAUBWECHSEL{NAME_END}FELD");
+static const u8 sMapName_VerdanturfTown[] = _("WIESENFLUR");
+static const u8 sMapName_PacifidlogTown[] = _("FLOSSBRUNN");
+static const u8 sMapName_PetalburgCity[] = _("BLÜTENBURG{NAME_END} CITY");
+static const u8 sMapName_SlateportCity[] = _("GRAPHITPORT{NAME_END} CITY");
+static const u8 sMapName_MauvilleCity[] = _("MALVENFROH{NAME_END} CITY");
+static const u8 sMapName_RustboroCity[] = _("METAROST{NAME_END} CITY");
+static const u8 sMapName_FortreeCity[] = _("BAUMHAUSEN{NAME_END} CITY");
+static const u8 sMapName_LilycoveCity[] = _("SEEGRASULB{NAME_END} CITY");
+static const u8 sMapName_MossdeepCity[] = _("MOOSBACH{NAME_END} CITY");
+static const u8 sMapName_SootopolisCity[] = _("XENEROVILLE");
+static const u8 sMapName_EverGrandeCity[] = _("PRACHTPOLIS{NAME_END} CITY");
+static const u8 sMapName_Route101[] = _("ROUTE 101");
+static const u8 sMapName_Route102[] = _("ROUTE 102");
+static const u8 sMapName_Route103[] = _("ROUTE 103");
+static const u8 sMapName_Route104[] = _("ROUTE 104");
+static const u8 sMapName_Route105[] = _("ROUTE 105");
+static const u8 sMapName_Route106[] = _("ROUTE 106");
+static const u8 sMapName_Route107[] = _("ROUTE 107");
+static const u8 sMapName_Route108[] = _("ROUTE 108");
+static const u8 sMapName_Route109[] = _("ROUTE 109");
+static const u8 sMapName_Route110[] = _("ROUTE 110");
+static const u8 sMapName_Route111[] = _("ROUTE 111");
+static const u8 sMapName_Route112[] = _("ROUTE 112");
+static const u8 sMapName_Route113[] = _("ROUTE 113");
+static const u8 sMapName_Route114[] = _("ROUTE 114");
+static const u8 sMapName_Route115[] = _("ROUTE 115");
+static const u8 sMapName_Route116[] = _("ROUTE 116");
+static const u8 sMapName_Route117[] = _("ROUTE 117");
+static const u8 sMapName_Route118[] = _("ROUTE 118");
+static const u8 sMapName_Route119[] = _("ROUTE 119");
+static const u8 sMapName_Route120[] = _("ROUTE 120");
+static const u8 sMapName_Route121[] = _("ROUTE 121");
+static const u8 sMapName_Route122[] = _("ROUTE 122");
+static const u8 sMapName_Route123[] = _("ROUTE 123");
+static const u8 sMapName_Route124[] = _("ROUTE 124");
+static const u8 sMapName_Route125[] = _("ROUTE 125");
+static const u8 sMapName_Route126[] = _("ROUTE 126");
+static const u8 sMapName_Route127[] = _("ROUTE 127");
+static const u8 sMapName_Route128[] = _("ROUTE 128");
+static const u8 sMapName_Route129[] = _("ROUTE 129");
+static const u8 sMapName_Route130[] = _("ROUTE 130");
+static const u8 sMapName_Route131[] = _("ROUTE 131");
+static const u8 sMapName_Route132[] = _("ROUTE 132");
+static const u8 sMapName_Route133[] = _("ROUTE 133");
+static const u8 sMapName_Route134[] = _("ROUTE 134");
+static const u8 sMapName_Underwater[] = _("UNTERWASSER");
+static const u8 sMapName_GraniteCave[] = _("GRANITHÖHLE");
+static const u8 sMapName_MtChimney[] = _("SCHLOTBERG");
+static const u8 sMapName_SafariZone[] = _("SAFARI-ZONE");
+static const u8 sMapName_BattleTower[] = _("DUELLTURM");
+static const u8 sMapName_PetalburgWoods[] = _("BLÜTENBURGWALD");
+static const u8 sMapName_RusturfTunnel[] = _("METAFLURTUNNEL");
+static const u8 sMapName_AbandonedShip[] = _("SCHIFFSWRACK");
+static const u8 sMapName_NewMauville[] = _("NEU MALVENFROH");
+static const u8 sMapName_MeteorFalls[] = _("METEORFÄLLE");
+static const u8 sMapName_MtPyre[] = _("PYROBERG");
+static const u8 sMapName_EvilTeamHideout[] = _("{EVIL_TEAM}s VERSTECK");
+static const u8 sMapName_ShoalCave[] = _("KÜSTENHÖHLE");
+static const u8 sMapName_SeafloorCavern[] = _("TIEFSEEHÖHLE");
+static const u8 sMapName_VictoryRoad[] = _("SIEGESSTRASSE");
+static const u8 sMapName_MirageIsland[] = _("WUNDEREILAND");
+static const u8 sMapName_CaveOfOrigin[] = _("URZEITHÖHLE");
+static const u8 sMapName_SouthernIsland[] = _("INSEL IM SÜDEN");
+static const u8 sMapName_FieryPath[] = _("FEURIGER PFAD");
+static const u8 sMapName_JaggedPass[] = _("STEILPASS");
+static const u8 sMapName_SealedChamber[] = _("SIEGELKAMMER");
+static const u8 sMapName_ScorchedSlab[] = _("SONNENGROTTE");
+static const u8 sMapName_IslandCave[] = _("INSELHÖHLE");
+static const u8 sMapName_DesertRuins[] = _("WÜSTENRUINE");
+static const u8 sMapName_AncientTomb[] = _("GRABMAL");
+static const u8 sMapName_InsideOfTruck[] = _("IM MÖBELWAGEN");
+static const u8 sMapName_SkyPillar[] = _("HIMMELTURM");
+static const u8 sMapName_SecretBase[] = _("GEHEIMBASIS");
+static const u8 sMapName_None[] = _("");
+
+const struct RegionMapLocation gRegionMapEntries[] = {
+ [MAPSEC_LITTLEROOT_TOWN] = { 4, 11, 1, 1, sMapName_LittlerootTown},
+ [MAPSEC_OLDALE_TOWN] = { 4, 9, 1, 1, sMapName_OldaleTown},
+ [MAPSEC_DEWFORD_TOWN] = { 2, 14, 1, 1, sMapName_DewfordTown},
+ [MAPSEC_LAVARIDGE_TOWN] = { 5, 3, 1, 1, sMapName_LavaridgeTown},
+ [MAPSEC_FALLARBOR_TOWN] = { 3, 0, 1, 1, sMapName_FallarborTown},
+ [MAPSEC_VERDANTURF_TOWN] = { 4, 6, 1, 1, sMapName_VerdanturfTown},
+ [MAPSEC_PACIFIDLOG_TOWN] = {17, 10, 1, 1, sMapName_PacifidlogTown},
+ [MAPSEC_PETALBURG_CITY] = { 1, 9, 1, 1, sMapName_PetalburgCity},
+ [MAPSEC_SLATEPORT_CITY] = { 8, 10, 1, 2, sMapName_SlateportCity},
+ [MAPSEC_MAUVILLE_CITY] = { 8, 6, 2, 1, sMapName_MauvilleCity},
+ [MAPSEC_RUSTBORO_CITY] = { 0, 5, 1, 2, sMapName_RustboroCity},
+ [MAPSEC_FORTREE_CITY] = {12, 0, 1, 1, sMapName_FortreeCity},
+ [MAPSEC_LILYCOVE_CITY] = {18, 3, 2, 1, sMapName_LilycoveCity},
+ [MAPSEC_MOSSDEEP_CITY] = {24, 5, 2, 1, sMapName_MossdeepCity},
+ [MAPSEC_SOOTOPOLIS_CITY] = {21, 7, 1, 1, sMapName_SootopolisCity},
+ [MAPSEC_EVER_GRANDE_CITY] = {27, 8, 1, 2, sMapName_EverGrandeCity},
+ [MAPSEC_ROUTE_101] = { 4, 10, 1, 1, sMapName_Route101},
+ [MAPSEC_ROUTE_102] = { 2, 9, 2, 1, sMapName_Route102},
+ [MAPSEC_ROUTE_103] = { 4, 8, 4, 1, sMapName_Route103},
+ [MAPSEC_ROUTE_104] = { 0, 7, 1, 3, sMapName_Route104},
+ [MAPSEC_ROUTE_105] = { 0, 10, 1, 3, sMapName_Route105},
+ [MAPSEC_ROUTE_106] = { 0, 13, 2, 1, sMapName_Route106},
+ [MAPSEC_ROUTE_107] = { 3, 14, 3, 1, sMapName_Route107},
+ [MAPSEC_ROUTE_108] = { 6, 14, 2, 1, sMapName_Route108},
+ [MAPSEC_ROUTE_109] = { 8, 12, 1, 3, sMapName_Route109},
+ [MAPSEC_ROUTE_110] = { 8, 7, 1, 3, sMapName_Route110},
+ [MAPSEC_ROUTE_111] = { 8, 0, 1, 6, sMapName_Route111},
+ [MAPSEC_ROUTE_112] = { 6, 3, 2, 1, sMapName_Route112},
+ [MAPSEC_ROUTE_113] = { 4, 0, 4, 1, sMapName_Route113},
+ [MAPSEC_ROUTE_114] = { 1, 0, 2, 3, sMapName_Route114},
+ [MAPSEC_ROUTE_115] = { 0, 2, 1, 3, sMapName_Route115},
+ [MAPSEC_ROUTE_116] = { 1, 5, 4, 1, sMapName_Route116},
+ [MAPSEC_ROUTE_117] = { 5, 6, 3, 1, sMapName_Route117},
+ [MAPSEC_ROUTE_118] = {10, 6, 2, 1, sMapName_Route118},
+ [MAPSEC_ROUTE_119] = {11, 0, 1, 6, sMapName_Route119},
+ [MAPSEC_ROUTE_120] = {13, 0, 1, 4, sMapName_Route120},
+ [MAPSEC_ROUTE_121] = {14, 3, 4, 1, sMapName_Route121},
+ [MAPSEC_ROUTE_122] = {16, 4, 1, 2, sMapName_Route122},
+ [MAPSEC_ROUTE_123] = {12, 6, 5, 1, sMapName_Route123},
+ [MAPSEC_ROUTE_124] = {20, 3, 4, 3, sMapName_Route124},
+ [MAPSEC_ROUTE_125] = {24, 3, 2, 2, sMapName_Route125},
+ [MAPSEC_ROUTE_126] = {20, 6, 3, 3, sMapName_Route126},
+ [MAPSEC_ROUTE_127] = {23, 6, 3, 3, sMapName_Route127},
+ [MAPSEC_ROUTE_128] = {23, 9, 4, 1, sMapName_Route128},
+ [MAPSEC_ROUTE_129] = {24, 10, 2, 1, sMapName_Route129},
+ [MAPSEC_ROUTE_130] = {21, 10, 3, 1, sMapName_Route130},
+ [MAPSEC_ROUTE_131] = {18, 10, 3, 1, sMapName_Route131},
+ [MAPSEC_ROUTE_132] = {15, 10, 2, 1, sMapName_Route132},
+ [MAPSEC_ROUTE_133] = {12, 10, 3, 1, sMapName_Route133},
+ [MAPSEC_ROUTE_134] = { 9, 10, 3, 1, sMapName_Route134},
+ [MAPSEC_UNDERWATER_124] = {20, 3, 4, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_125] = {20, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_126] = {23, 6, 3, 3, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_127] = {23, 9, 4, 1, sMapName_Underwater},
+ [MAPSEC_UNDERWATER_SOOTOPOLIS] = {21, 7, 1, 1, sMapName_Underwater},
+ [MAPSEC_GRANITE_CAVE] = { 1, 13, 1, 1, sMapName_GraniteCave},
+ [MAPSEC_MT_CHIMNEY] = { 6, 2, 1, 1, sMapName_MtChimney},
+ [MAPSEC_SAFARI_ZONE] = {16, 2, 1, 1, sMapName_SafariZone},
+ [MAPSEC_BATTLE_TOWER] = {22, 12, 1, 1, sMapName_BattleTower},
+ [MAPSEC_PETALBURG_WOODS] = { 0, 8, 1, 1, sMapName_PetalburgWoods},
+ [MAPSEC_RUSTURF_TUNNEL] = { 2, 5, 1, 1, sMapName_RusturfTunnel},
+ [MAPSEC_ABANDONED_SHIP] = { 6, 14, 1, 1, sMapName_AbandonedShip},
+ [MAPSEC_NEW_MAUVILLE] = { 8, 7, 1, 1, sMapName_NewMauville},
+ [MAPSEC_METEOR_FALLS] = { 0, 3, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_METEOR_FALLS_2] = { 1, 2, 1, 1, sMapName_MeteorFalls},
+ [MAPSEC_MT_PYRE] = {16, 4, 1, 1, sMapName_MtPyre},
+ [MAPSEC_EVIL_TEAM_HIDEOUT] = {19, 3, 1, 1, sMapName_EvilTeamHideout},
+ [MAPSEC_SHOAL_CAVE] = {24, 4, 1, 1, sMapName_ShoalCave},
+ [MAPSEC_SEAFLOOR_CAVERN] = {24, 9, 1, 1, sMapName_SeafloorCavern},
+ [MAPSEC_UNDERWATER_128] = {24, 9, 1, 1, sMapName_Underwater},
+ [MAPSEC_VICTORY_ROAD] = {27, 9, 1, 1, sMapName_VictoryRoad},
+ [MAPSEC_MIRAGE_ISLAND] = {17, 10, 1, 1, sMapName_MirageIsland},
+ [MAPSEC_CAVE_OF_ORIGIN] = {21, 7, 1, 1, sMapName_CaveOfOrigin},
+ [MAPSEC_SOUTHERN_ISLAND] = {12, 14, 1, 1, sMapName_SouthernIsland},
+ [MAPSEC_FIERY_PATH] = { 6, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_FIERY_PATH_2] = { 7, 3, 1, 1, sMapName_FieryPath},
+ [MAPSEC_JAGGED_PASS] = { 6, 3, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_JAGGED_PASS_2] = { 7, 2, 1, 1, sMapName_JaggedPass},
+ [MAPSEC_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_SealedChamber},
+ [MAPSEC_UNDERWATER_SEALED_CHAMBER] = {11, 10, 1, 1, sMapName_Underwater},
+ [MAPSEC_SCORCHED_SLAB] = {13, 0, 1, 1, sMapName_ScorchedSlab},
+ [MAPSEC_ISLAND_CAVE] = { 0, 10, 1, 1, sMapName_IslandCave},
+ [MAPSEC_DESERT_RUINS] = { 8, 3, 1, 1, sMapName_DesertRuins},
+ [MAPSEC_ANCIENT_TOMB] = {13, 2, 1, 1, sMapName_AncientTomb},
+ [MAPSEC_INSIDE_OF_TRUCK] = { 0, 0, 1, 1, sMapName_InsideOfTruck},
+ [MAPSEC_SKY_PILLAR] = {19, 10, 1, 1, sMapName_SkyPillar},
+ [MAPSEC_SECRET_BASE] = { 0, 0, 1, 1, sMapName_SecretBase},
+ [MAPSEC_DYNAMIC] = { 0, 0, 1, 1, sMapName_None},
+};
+
+#endif // GUARD_DATA_REGION_MAP_REGION_MAP_ENTRIES_H
diff --git a/src/data/region_map_layout.h b/src/data/region_map_layout.h
deleted file mode 100644
index 1bc93cbb3..000000000
--- a/src/data/region_map_layout.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Abbreviated definitions to make the map layout more visual
-#define R(routeNum) MAPSEC_ROUTE_##routeNum
-#define LITT_T MAPSEC_LITTLEROOT_TOWN
-#define OLDA_T MAPSEC_OLDALE_TOWN
-#define DEWF_T MAPSEC_DEWFORD_TOWN
-#define LAVA_T MAPSEC_LAVARIDGE_TOWN
-#define FALL_T MAPSEC_FALLARBOR_TOWN
-#define VERD_T MAPSEC_VERDANTURF_TOWN
-#define PACI_T MAPSEC_PACIFIDLOG_TOWN
-#define PETA_C MAPSEC_PETALBURG_CITY
-#define SLAT_C MAPSEC_SLATEPORT_CITY
-#define MAUV_C MAPSEC_MAUVILLE_CITY
-#define RUST_C MAPSEC_RUSTBORO_CITY
-#define FORT_C MAPSEC_FORTREE_CITY
-#define LILY_C MAPSEC_LILYCOVE_CITY
-#define MOSS_C MAPSEC_MOSSDEEP_CITY
-#define SOOT_C MAPSEC_SOOTOPOLIS_CITY
-#define EVER_C MAPSEC_EVER_GRANDE_CITY
-#define MTCHIM MAPSEC_MT_CHIMNEY
-#define SAFARI MAPSEC_SAFARI_ZONE
-#define BTLTWR MAPSEC_BATTLE_TOWER
-#define S_ISLD MAPSEC_SOUTHERN_ISLAND
-#define ______ MAPSEC_NOTHING
-
-static const u8 sRegionMapLayout[] =
-{
- ______, R(114), R(114), FALL_T, R(113), R(113), R(113), R(113), R(111), ______, ______, R(119), FORT_C, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- R(115), R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, SAFARI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- R(115), ______, ______, ______, ______, LAVA_T, R(112), R(112), R(111), ______, ______, R(119), ______, R(120), R(121), R(121), R(121), R(121), LILY_C, LILY_C, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______,
- R(115), ______, ______, ______, ______, ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______,
- RUST_C, R(116), R(116), R(116), R(116), ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), MOSS_C, MOSS_C, ______, ______,
- RUST_C, ______, ______, ______, VERD_T, R(117), R(117), R(117), MAUV_C, MAUV_C, R(118), R(118), R(123), R(123), R(123), R(123), R(123), ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, ______,
- R(104), ______, ______, ______, ______, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), SOOT_C, R(126), R(127), R(127), R(127), ______, ______,
- R(104), ______, ______, ______, R(103), R(103), R(103), R(103), R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, EVER_C,
- R(104), PETA_C, R(102), R(102), OLDA_T, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(128), R(128), R(128), R(128), EVER_C,
- R(105), ______, ______, ______, R(101), ______, ______, ______, SLAT_C, R(134), R(134), R(134), R(133), R(133), R(133), R(132), R(132), PACI_T, R(131), R(131), R(131), R(130), R(130), R(130), R(129), R(129), ______, ______,
- R(105), ______, ______, ______, LITT_T, ______, ______, ______, SLAT_C, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- R(105), ______, ______, ______, ______, ______, ______, ______, R(109), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, BTLTWR, ______, ______, ______, ______, ______,
- R(106), R(106), R(106), ______, ______, ______, ______, ______, R(109), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, ______, DEWF_T, R(107), R(107), R(107), R(108), R(108), R(109), ______, ______, ______, S_ISLD, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
-};
diff --git a/src/data/region_map_names_de.h b/src/data/region_map_names_de.h
deleted file mode 100644
index 10f53c8ba..000000000
--- a/src/data/region_map_names_de.h
+++ /dev/null
@@ -1,79 +0,0 @@
-const u8 gMapName_LittlerootTown[] = _("WURZELHEIM");
-const u8 gMapName_OldaleTown[] = _("ROSALTSTADT");
-const u8 gMapName_DewfordTown[] = _("FAUSTAUHAVEN");
-const u8 gMapName_LavaridgeTown[] = _("BAD LAVASTADT");
-const u8 gMapName_FallarborTown[] = _("LAUBWECHSEL{NAME_END}FELD");
-const u8 gMapName_VerdanturfTown[] = _("WIESENFLUR");
-const u8 gMapName_PacifidlogTown[] = _("FLOSSBRUNN");
-const u8 gMapName_PetalburgCity[] = _("BLÜTENBURG{NAME_END} CITY");
-const u8 gMapName_SlateportCity[] = _("GRAPHITPORT{NAME_END} CITY");
-const u8 gMapName_MauvilleCity[] = _("MALVENFROH{NAME_END} CITY");
-const u8 gMapName_RustboroCity[] = _("METAROST{NAME_END} CITY");
-const u8 gMapName_FortreeCity[] = _("BAUMHAUSEN{NAME_END} CITY");
-const u8 gMapName_LilycoveCity[] = _("SEEGRASULB{NAME_END} CITY");
-const u8 gMapName_MossdeepCity[] = _("MOOSBACH{NAME_END} CITY");
-const u8 gMapName_SootopolisCity[] = _("XENEROVILLE");
-const u8 gMapName_EverGrandeCity[] = _("PRACHTPOLIS{NAME_END} CITY");
-const u8 gMapName_Route101[] = _("ROUTE 101");
-const u8 gMapName_Route102[] = _("ROUTE 102");
-const u8 gMapName_Route103[] = _("ROUTE 103");
-const u8 gMapName_Route104[] = _("ROUTE 104");
-const u8 gMapName_Route105[] = _("ROUTE 105");
-const u8 gMapName_Route106[] = _("ROUTE 106");
-const u8 gMapName_Route107[] = _("ROUTE 107");
-const u8 gMapName_Route108[] = _("ROUTE 108");
-const u8 gMapName_Route109[] = _("ROUTE 109");
-const u8 gMapName_Route110[] = _("ROUTE 110");
-const u8 gMapName_Route111[] = _("ROUTE 111");
-const u8 gMapName_Route112[] = _("ROUTE 112");
-const u8 gMapName_Route113[] = _("ROUTE 113");
-const u8 gMapName_Route114[] = _("ROUTE 114");
-const u8 gMapName_Route115[] = _("ROUTE 115");
-const u8 gMapName_Route116[] = _("ROUTE 116");
-const u8 gMapName_Route117[] = _("ROUTE 117");
-const u8 gMapName_Route118[] = _("ROUTE 118");
-const u8 gMapName_Route119[] = _("ROUTE 119");
-const u8 gMapName_Route120[] = _("ROUTE 120");
-const u8 gMapName_Route121[] = _("ROUTE 121");
-const u8 gMapName_Route122[] = _("ROUTE 122");
-const u8 gMapName_Route123[] = _("ROUTE 123");
-const u8 gMapName_Route124[] = _("ROUTE 124");
-const u8 gMapName_Route125[] = _("ROUTE 125");
-const u8 gMapName_Route126[] = _("ROUTE 126");
-const u8 gMapName_Route127[] = _("ROUTE 127");
-const u8 gMapName_Route128[] = _("ROUTE 128");
-const u8 gMapName_Route129[] = _("ROUTE 129");
-const u8 gMapName_Route130[] = _("ROUTE 130");
-const u8 gMapName_Route131[] = _("ROUTE 131");
-const u8 gMapName_Route132[] = _("ROUTE 132");
-const u8 gMapName_Route133[] = _("ROUTE 133");
-const u8 gMapName_Route134[] = _("ROUTE 134");
-const u8 gMapName_Underwater[] = _("UNTERWASSER");
-const u8 gMapName_GraniteCave[] = _("GRANITHÖHLE");
-const u8 gMapName_MtChimney[] = _("SCHLOTBERG");
-const u8 gMapName_SafariZone[] = _("SAFARI-ZONE");
-const u8 gMapName_BattleTower[] = _("DUELLTURM");
-const u8 gMapName_PetalburgWoods[] = _("BLÜTENBURGWALD");
-const u8 gMapName_RusturfTunnel[] = _("METAFLURTUNNEL");
-const u8 gMapName_AbandonedShip[] = _("SCHIFFSWRACK");
-const u8 gMapName_NewMauville[] = _("NEU MALVENFROH");
-const u8 gMapName_MeteorFalls[] = _("METEORFÄLLE");
-const u8 gMapName_MtPyre[] = _("PYROBERG");
-const u8 gMapName_EvilTeamHideout[] = _("{EVIL_TEAM}s VERSTECK");
-const u8 gMapName_ShoalCave[] = _("KÜSTENHÖHLE");
-const u8 gMapName_SeafloorCavern[] = _("TIEFSEEHÖHLE");
-const u8 gMapName_VictoryRoad[] = _("SIEGESSTRASSE");
-const u8 gMapName_MirageIsland[] = _("WUNDEREILAND");
-const u8 gMapName_CaveOfOrigin[] = _("URZEITHÖHLE");
-const u8 gMapName_SouthernIsland[] = _("INSEL IM SÜDEN");
-const u8 gMapName_FieryPath[] = _("FEURIGER PFAD");
-const u8 gMapName_JaggedPass[] = _("STEILPASS");
-const u8 gMapName_SealedChamber[] = _("SIEGELKAMMER");
-const u8 gMapName_ScorchedSlab[] = _("SONNENGROTTE");
-const u8 gMapName_IslandCave[] = _("INSELHÖHLE");
-const u8 gMapName_DesertRuins[] = _("WÜSTENRUINE");
-const u8 gMapName_AncientTomb[] = _("GRABMAL");
-const u8 gMapName_InsideOfTruck[] = _("IM MÖBELWAGEN");
-const u8 gMapName_SkyPillar[] = _("HIMMELTURM");
-const u8 gMapName_SecretBase[] = _("GEHEIMBASIS");
-const u8 gMapName_None[] = _("");
diff --git a/src/data/region_map_names_en.h b/src/data/region_map_names_en.h
deleted file mode 100644
index 9dde3d71a..000000000
--- a/src/data/region_map_names_en.h
+++ /dev/null
@@ -1,79 +0,0 @@
-const u8 gMapName_LittlerootTown[] = _("LITTLEROOT{NAME_END} TOWN");
-const u8 gMapName_OldaleTown[] = _("OLDALE{NAME_END} TOWN");
-const u8 gMapName_DewfordTown[] = _("DEWFORD{NAME_END} TOWN");
-const u8 gMapName_LavaridgeTown[] = _("LAVARIDGE{NAME_END} TOWN");
-const u8 gMapName_FallarborTown[] = _("FALLARBOR{NAME_END} TOWN");
-const u8 gMapName_VerdanturfTown[] = _("VERDANTURF{NAME_END} TOWN");
-const u8 gMapName_PacifidlogTown[] = _("PACIFIDLOG{NAME_END} TOWN");
-const u8 gMapName_PetalburgCity[] = _("PETALBURG{NAME_END} CITY");
-const u8 gMapName_SlateportCity[] = _("SLATEPORT{NAME_END} CITY");
-const u8 gMapName_MauvilleCity[] = _("MAUVILLE{NAME_END} CITY");
-const u8 gMapName_RustboroCity[] = _("RUSTBORO{NAME_END} CITY");
-const u8 gMapName_FortreeCity[] = _("FORTREE{NAME_END} CITY");
-const u8 gMapName_LilycoveCity[] = _("LILYCOVE{NAME_END} CITY");
-const u8 gMapName_MossdeepCity[] = _("MOSSDEEP{NAME_END} CITY");
-const u8 gMapName_SootopolisCity[] = _("SOOTOPOLIS{NAME_END} CITY");
-const u8 gMapName_EverGrandeCity[] = _("EVER GRANDE{NAME_END} CITY");
-const u8 gMapName_Route101[] = _("ROUTE 101");
-const u8 gMapName_Route102[] = _("ROUTE 102");
-const u8 gMapName_Route103[] = _("ROUTE 103");
-const u8 gMapName_Route104[] = _("ROUTE 104");
-const u8 gMapName_Route105[] = _("ROUTE 105");
-const u8 gMapName_Route106[] = _("ROUTE 106");
-const u8 gMapName_Route107[] = _("ROUTE 107");
-const u8 gMapName_Route108[] = _("ROUTE 108");
-const u8 gMapName_Route109[] = _("ROUTE 109");
-const u8 gMapName_Route110[] = _("ROUTE 110");
-const u8 gMapName_Route111[] = _("ROUTE 111");
-const u8 gMapName_Route112[] = _("ROUTE 112");
-const u8 gMapName_Route113[] = _("ROUTE 113");
-const u8 gMapName_Route114[] = _("ROUTE 114");
-const u8 gMapName_Route115[] = _("ROUTE 115");
-const u8 gMapName_Route116[] = _("ROUTE 116");
-const u8 gMapName_Route117[] = _("ROUTE 117");
-const u8 gMapName_Route118[] = _("ROUTE 118");
-const u8 gMapName_Route119[] = _("ROUTE 119");
-const u8 gMapName_Route120[] = _("ROUTE 120");
-const u8 gMapName_Route121[] = _("ROUTE 121");
-const u8 gMapName_Route122[] = _("ROUTE 122");
-const u8 gMapName_Route123[] = _("ROUTE 123");
-const u8 gMapName_Route124[] = _("ROUTE 124");
-const u8 gMapName_Route125[] = _("ROUTE 125");
-const u8 gMapName_Route126[] = _("ROUTE 126");
-const u8 gMapName_Route127[] = _("ROUTE 127");
-const u8 gMapName_Route128[] = _("ROUTE 128");
-const u8 gMapName_Route129[] = _("ROUTE 129");
-const u8 gMapName_Route130[] = _("ROUTE 130");
-const u8 gMapName_Route131[] = _("ROUTE 131");
-const u8 gMapName_Route132[] = _("ROUTE 132");
-const u8 gMapName_Route133[] = _("ROUTE 133");
-const u8 gMapName_Route134[] = _("ROUTE 134");
-const u8 gMapName_Underwater[] = _("UNDERWATER");
-const u8 gMapName_GraniteCave[] = _("GRANITE CAVE");
-const u8 gMapName_MtChimney[] = _("MT. CHIMNEY");
-const u8 gMapName_SafariZone[] = _("SAFARI ZONE");
-const u8 gMapName_BattleTower[] = _("BATTLE TOWER");
-const u8 gMapName_PetalburgWoods[] = _("PETALBURG WOODS");
-const u8 gMapName_RusturfTunnel[] = _("RUSTURF TUNNEL");
-const u8 gMapName_AbandonedShip[] = _("ABANDONED SHIP");
-const u8 gMapName_NewMauville[] = _("NEW MAUVILLE");
-const u8 gMapName_MeteorFalls[] = _("METEOR FALLS");
-const u8 gMapName_MtPyre[] = _("MT. PYRE");
-const u8 gMapName_EvilTeamHideout[] = _("{EVIL_TEAM} HIDEOUT");
-const u8 gMapName_ShoalCave[] = _("SHOAL CAVE");
-const u8 gMapName_SeafloorCavern[] = _("SEAFLOOR CAVERN");
-const u8 gMapName_VictoryRoad[] = _("VICTORY ROAD");
-const u8 gMapName_MirageIsland[] = _("MIRAGE ISLAND");
-const u8 gMapName_CaveOfOrigin[] = _("CAVE OF ORIGIN");
-const u8 gMapName_SouthernIsland[] = _("SOUTHERN ISLAND");
-const u8 gMapName_FieryPath[] = _("FIERY PATH");
-const u8 gMapName_JaggedPass[] = _("JAGGED PASS");
-const u8 gMapName_SealedChamber[] = _("SEALED CHAMBER");
-const u8 gMapName_ScorchedSlab[] = _("SCORCHED SLAB");
-const u8 gMapName_IslandCave[] = _("ISLAND CAVE");
-const u8 gMapName_DesertRuins[] = _("DESERT RUINS");
-const u8 gMapName_AncientTomb[] = _("ANCIENT TOMB");
-const u8 gMapName_InsideOfTruck[] = _("INSIDE OF TRUCK");
-const u8 gMapName_SkyPillar[] = _("SKY PILLAR");
-const u8 gMapName_SecretBase[] = _("SECRET BASE");
-const u8 gMapName_None[] = _("");
diff --git a/src/landmark.c b/src/landmark.c
index 0572da4ca..520f88718 100644
--- a/src/landmark.c
+++ b/src/landmark.c
@@ -360,7 +360,7 @@ static const struct LandmarkList gLandmarkLists[] =
{MAPSEC_ROUTE_134, 1, Landmarks_OceanCurrent},
{MAPSEC_ROUTE_134, 2, Landmarks_Route134_2},
{MAPSEC_MT_CHIMNEY, 2, Landmarks_MtChimney_2},
- {MAPSEC_NOTHING, 0, NULL},
+ {MAPSEC_NONE, 0, NULL},
};
static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id);
@@ -396,7 +396,7 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
{
u16 i = 0;
- for (; gLandmarkLists[i].mapSection != MAPSEC_NOTHING; i++)
+ for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++)
{
if (gLandmarkLists[i].mapSection > mapSection)
return NULL;
@@ -404,7 +404,7 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
break;
}
- if (gLandmarkLists[i].mapSection == MAPSEC_NOTHING)
+ if (gLandmarkLists[i].mapSection == MAPSEC_NONE)
return NULL;
for (; gLandmarkLists[i].mapSection == mapSection; i++)
diff --git a/src/libs/m4a.c b/src/libs/m4a.c
new file mode 100644
index 000000000..7b4441ca4
--- /dev/null
+++ b/src/libs/m4a.c
@@ -0,0 +1,1779 @@
+#include "gba/m4a_internal.h"
+
+extern const u8 gCgb3Vol[];
+
+#define BSS_CODE __attribute__((section(".bss.code")))
+
+BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0};
+
+struct SoundInfo gSoundInfo;
+struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES];
+struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES];
+void *gMPlayJumpTable[36];
+struct CgbChannel gCgbChans[4];
+struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2];
+struct PokemonCrySong gPokemonCrySong;
+struct MusicPlayerInfo gMPlayInfo_BGM;
+struct MusicPlayerInfo gMPlayInfo_SE1;
+struct MusicPlayerInfo gMPlayInfo_SE2;
+struct MusicPlayerInfo gMPlayInfo_SE3;
+u8 gMPlayMemAccArea[0x10];
+
+u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
+{
+ u32 val1;
+ u32 val2;
+ u32 fineAdjustShifted = fineAdjust << 24;
+
+ if (key > 178)
+ {
+ key = 178;
+ fineAdjustShifted = 255 << 24;
+ }
+
+ val1 = gScaleTable[key];
+ val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gScaleTable[key + 1];
+ val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
+}
+
+void UnusedDummyFunc(void)
+{
+}
+
+void MPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aSoundInit(void)
+{
+ s32 i;
+
+ CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer));
+
+ SoundInit(&gSoundInfo);
+ MPlayExtender(gCgbChans);
+ m4aSoundMode(SOUND_MODE_DA_BIT_8
+ | SOUND_MODE_FREQ_13379
+ | (12 << SOUND_MODE_MASVOL_SHIFT)
+ | (5 << SOUND_MODE_MAXCHN_SHIFT));
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ {
+ struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
+ MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
+ mplayInfo->unk_B = gMPlayTable[i].unk_A;
+ mplayInfo->memAccArea = gMPlayMemAccArea;
+ }
+
+ memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong));
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ {
+ struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i];
+ struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
+ MPlayOpen(mplayInfo, track, 2);
+ track->chan = 0;
+ }
+}
+
+void m4aSoundMain(void)
+{
+ SoundMain();
+}
+
+void m4aSongNumStart(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ MPlayStart(mplay->info, song->header);
+}
+
+void m4aSongNumStartOrChange(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ else
+ {
+ if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE))
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ }
+}
+
+void m4aSongNumStartOrContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ MPlayStart(mplay->info, song->header);
+ else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0)
+ MPlayStart(mplay->info, song->header);
+ else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)
+ MPlayContinue(mplay->info);
+}
+
+void m4aSongNumStop(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ m4aMPlayStop(mplay->info);
+}
+
+void m4aSongNumContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ MPlayContinue(mplay->info);
+}
+
+void m4aMPlayAllStop(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ m4aMPlayStop(gMPlayTable[i].info);
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ m4aMPlayStop(&gPokemonCryMusicPlayers[i]);
+}
+
+void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ MPlayContinue(mplayInfo);
+}
+
+void m4aMPlayAllContinue(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ MPlayContinue(gMPlayTable[i].info);
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ MPlayContinue(&gPokemonCryMusicPlayers[i]);
+}
+
+void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ MPlayFadeOut(mplayInfo, speed);
+}
+
+void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 trackCount = mplayInfo->trackCount;
+ struct MusicPlayerTrack *track = mplayInfo->tracks;
+
+ while (trackCount > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ if (track->flags & MPT_FLG_START)
+ {
+ Clear64byte(track);
+ track->flags = MPT_FLG_EXIST;
+ track->bendRange = 2;
+ track->volX = 64;
+ track->lfoSpeed = 22;
+ track->tone.type = 1;
+ }
+ }
+
+ trackCount--;
+ track++;
+ }
+}
+
+void MPlayExtender(struct CgbChannel *cgbChans)
+{
+ struct SoundInfo *soundInfo;
+ u32 ident;
+
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_L = 0; // set master volume to zero
+ REG_NR12 = 0x8;
+ REG_NR22 = 0x8;
+ REG_NR42 = 0x8;
+ REG_NR14 = 0x80;
+ REG_NR24 = 0x80;
+ REG_NR44 = 0x80;
+ REG_NR30 = 0;
+ REG_NR50 = 0x77;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ ident = soundInfo->ident;
+
+ if (ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ gMPlayJumpTable[8] = ply_memacc;
+ gMPlayJumpTable[17] = ply_lfos;
+ gMPlayJumpTable[19] = ply_mod;
+ gMPlayJumpTable[28] = ply_xcmd;
+ gMPlayJumpTable[29] = ply_endtie;
+ gMPlayJumpTable[30] = SampleFreqSet;
+ gMPlayJumpTable[31] = TrackStop;
+ gMPlayJumpTable[32] = FadeOutBody;
+ gMPlayJumpTable[33] = TrkVolPitSet;
+
+ soundInfo->cgbChans = (struct CgbChannel *)cgbChans;
+ soundInfo->CgbSound = CgbSound;
+ soundInfo->CgbOscOff = CgbOscOff;
+ soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq;
+ soundInfo->maxLines = MAX_LINES;
+
+ CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
+
+ cgbChans[0].ty = 1;
+ cgbChans[0].panMask = 0x11;
+ cgbChans[1].ty = 2;
+ cgbChans[1].panMask = 0x22;
+ cgbChans[2].ty = 3;
+ cgbChans[2].panMask = 0x44;
+ cgbChans[3].ty = 4;
+ cgbChans[3].panMask = 0x88;
+
+ soundInfo->ident = ident;
+}
+
+void MusicPlayerJumpTableCopy(void)
+{
+ asm("swi 0x2A");
+}
+
+void ClearChain(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[34]);
+ func(x);
+}
+
+void Clear64byte(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[35]);
+ func(x);
+}
+
+void SoundInit(struct SoundInfo *soundInfo)
+{
+ soundInfo->ident = 0;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
+ | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
+ | SOUND_ALL_MIX_FULL;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
+
+ REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
+ REG_DMA1DAD = (s32)&REG_FIFO_A;
+ REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
+ REG_DMA2DAD = (s32)&REG_FIFO_B;
+
+ SOUND_INFO_PTR = soundInfo;
+ CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
+
+ soundInfo->maxChans = 8;
+ soundInfo->masterVolume = 15;
+ soundInfo->plynote = (u32)ply_note;
+ soundInfo->CgbSound = DummyFunc;
+ soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
+ soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
+ soundInfo->ExtVolPit = (u32)DummyFunc;
+
+ MPlayJumpTableCopy(gMPlayJumpTable);
+
+ soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+
+ SampleFreqSet(SOUND_MODE_FREQ_13379);
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SampleFreqSet(u32 freq)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ freq = (freq & 0xF0000) >> 16;
+ soundInfo->freq = freq;
+ soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
+ soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
+
+ // LCD refresh rate 59.7275Hz
+ soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000;
+
+ // CPU frequency 16.78Mhz
+ soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1;
+
+ // Turn off timer 0.
+ REG_TM0CNT_H = 0;
+
+ // cycles per LCD fresh 280896
+ REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank);
+
+ m4aSoundVSyncOn();
+
+ while (*(vu8 *)REG_ADDR_VCOUNT == 159)
+ ;
+
+ while (*(vu8 *)REG_ADDR_VCOUNT != 159)
+ ;
+
+ REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK;
+}
+
+void m4aSoundMode(u32 mode)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 temp;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL);
+
+ if (temp)
+ soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL;
+
+ temp = mode & SOUND_MODE_MAXCHN;
+
+ if (temp)
+ {
+ struct SoundChannel *chan;
+
+ soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
+
+ temp = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (temp != 0)
+ {
+ chan->status = 0;
+ temp--;
+ chan++;
+ }
+ }
+
+ temp = mode & SOUND_MODE_MASVOL;
+
+ if (temp)
+ soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT;
+
+ temp = mode & SOUND_MODE_DA_BIT;
+
+ if (temp)
+ {
+ temp = (temp & 0x300000) >> 14;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp;
+ }
+
+ temp = mode & SOUND_MODE_FREQ;
+
+ if (temp)
+ {
+ m4aSoundVSyncOff();
+ SampleFreqSet(temp);
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SoundClear(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ s32 i;
+ void *chan;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ i = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (i > 0)
+ {
+ ((struct SoundChannel *)chan)->status = 0;
+ i--;
+ chan = (void *)((s32)chan + sizeof(struct SoundChannel));
+ }
+
+ chan = soundInfo->cgbChans;
+
+ if (chan)
+ {
+ i = 1;
+
+ while (i <= 4)
+ {
+ soundInfo->CgbOscOff(i);
+ ((struct CgbChannel *)chan)->sf = 0;
+ i++;
+ chan = (void *)((s32)chan + sizeof(struct CgbChannel));
+ }
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void m4aSoundVSyncOff(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
+ {
+ soundInfo->ident += 10;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+
+ CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
+ }
+}
+
+void m4aSoundVSyncOn(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 ident = soundInfo->ident;
+
+ if (ident == ID_NUMBER)
+ return;
+
+ REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+ REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+
+ soundInfo->pcmDmaCounter = 0;
+ soundInfo->ident = ident - 10;
+}
+
+void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount)
+{
+ struct SoundInfo *soundInfo;
+
+ if (trackCount == 0)
+ return;
+
+ if (trackCount > MAX_MUSICPLAYER_TRACKS)
+ trackCount = MAX_MUSICPLAYER_TRACKS;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ Clear64byte(mplayInfo);
+
+ mplayInfo->tracks = tracks;
+ mplayInfo->trackCount = trackCount;
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ while (trackCount != 0)
+ {
+ tracks->flags = 0;
+ trackCount--;
+ tracks++;
+ }
+
+ if (soundInfo->func != 0)
+ {
+ mplayInfo->func = soundInfo->func;
+ mplayInfo->intp = soundInfo->intp;
+ soundInfo->func = 0;
+ }
+
+ soundInfo->intp = (u32)mplayInfo;
+ soundInfo->func = (u32)MPlayMain;
+ soundInfo->ident = ID_NUMBER;
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader)
+{
+ s32 i;
+ u8 unk_B;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ unk_B = mplayInfo->unk_B;
+
+ if (!unk_B
+ || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START))
+ && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE)))
+ || (mplayInfo->priority <= songHeader->priority))
+ {
+ mplayInfo->ident++;
+ mplayInfo->status = 0;
+ mplayInfo->songHeader = songHeader;
+ mplayInfo->tone = songHeader->tone;
+ mplayInfo->priority = songHeader->priority;
+ mplayInfo->clock = 0;
+ mplayInfo->tempoD = 150;
+ mplayInfo->tempoI = 150;
+ mplayInfo->tempoU = 0x100;
+ mplayInfo->tempoC = 0;
+ mplayInfo->fadeOI = 0;
+
+ i = 0;
+ track = mplayInfo->tracks;
+
+ while (i < songHeader->trackCount && i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = MPT_FLG_EXIST | MPT_FLG_START;
+ track->chan = 0;
+ track->cmdPtr = songHeader->part[i];
+ i++;
+ track++;
+ }
+
+ while (i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = 0;
+ i++;
+ track++;
+ }
+
+ if (songHeader->reverb & 0x80)
+ m4aSoundMode(songHeader->reverb);
+
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ TrackStop(mplayInfo, track);
+ i--;
+ track++;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+ u16 fadeOV;
+#ifdef NONMATCHING
+ u16 mask;
+#else
+ register u16 mask asm("r2");
+#endif // NONMATCHING
+
+ if (mplayInfo->fadeOI == 0)
+ return;
+
+ mplayInfo->fadeOC--;
+ mask = 0xFFFF;
+
+ if (mplayInfo->fadeOC != 0)
+ return;
+
+ mplayInfo->fadeOC = mplayInfo->fadeOI;
+
+ if (mplayInfo->fadeOV & FADE_IN)
+ {
+ mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
+
+ if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
+ {
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->fadeOI = 0;
+ }
+ }
+ else
+ {
+ mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
+
+ if ((s16)(mplayInfo->fadeOV & mask) <= 0)
+ {
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ u32 val;
+
+ TrackStop(mplayInfo, track);
+
+ val = TEMPORARY_FADE;
+ fadeOV = mplayInfo->fadeOV;
+ val &= fadeOV;
+
+ if (!val)
+ track->flags = 0;
+
+ i--;
+ track++;
+ }
+
+ if (mplayInfo->fadeOV & TEMPORARY_FADE)
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+ else
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ mplayInfo->fadeOI = 0;
+ return;
+ }
+ }
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ fadeOV = mplayInfo->fadeOV;
+
+ track->volX = (fadeOV >> FADE_VOL_SHIFT);
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+
+ i--;
+ track++;
+ }
+}
+
+void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ if (track->flags & MPT_FLG_VOLSET)
+ {
+ s32 x;
+ s32 y;
+
+ x = (u32)(track->vol * track->volX) >> 5;
+
+ if (track->modT == 1)
+ x = (u32)(x * (track->modM + 128)) >> 7;
+
+ y = 2 * track->pan + track->panX;
+
+ if (track->modT == 2)
+ y += track->modM;
+
+ if (y < -128)
+ y = -128;
+ else if (y > 127)
+ y = 127;
+
+ track->volMR = (u32)((y + 128) * x) >> 8;
+ track->volML = (u32)((127 - y) * x) >> 8;
+ }
+
+ if (track->flags & MPT_FLG_PITSET)
+ {
+ s32 bend = track->bend * track->bendRange;
+ s32 x = (track->tune + bend)
+ * 4
+ + (track->keyShift << 8)
+ + (track->keyShiftX << 8)
+ + track->pitX;
+
+ if (track->modT == 0)
+ x += 16 * track->modM;
+
+ track->keyM = x >> 8;
+ track->pitM = x;
+ }
+
+ track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET);
+}
+
+u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust)
+{
+ if (chanNum == 4)
+ {
+ if (key <= 20)
+ {
+ key = 0;
+ }
+ else
+ {
+ key -= 21;
+ if (key > 59)
+ key = 59;
+ }
+
+ return gNoiseTable[key];
+ }
+ else
+ {
+ s32 val1;
+ s32 val2;
+
+ if (key <= 35)
+ {
+ fineAdjust = 0;
+ key = 0;
+ }
+ else
+ {
+ key -= 36;
+ if (key > 130)
+ {
+ key = 130;
+ fineAdjust = 255;
+ }
+ }
+
+ val1 = gCgbScaleTable[key];
+ val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gCgbScaleTable[key + 1];
+ val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048;
+ }
+}
+
+void CgbOscOff(u8 chanNum)
+{
+ switch (chanNum)
+ {
+ case 1:
+ REG_NR12 = 8;
+ REG_NR14 = 0x80;
+ break;
+ case 2:
+ REG_NR22 = 8;
+ REG_NR24 = 0x80;
+ break;
+ case 3:
+ REG_NR30 = 0;
+ break;
+ default:
+ REG_NR42 = 8;
+ REG_NR44 = 0x80;
+ }
+}
+
+static inline int CgbPan(struct CgbChannel *chan)
+{
+ u32 rightVolume = chan->rightVolume;
+ u32 leftVolume = chan->leftVolume;
+
+ if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume))
+ {
+ if (rightVolume / 2 >= leftVolume)
+ {
+ chan->pan = 0x0F;
+ return 1;
+ }
+ }
+ else
+ {
+ if (leftVolume / 2 >= rightVolume)
+ {
+ chan->pan = 0xF0;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+void CgbModVol(struct CgbChannel *chan)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if ((soundInfo->mode & 1) || !CgbPan(chan))
+ {
+ chan->pan = 0xFF;
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ }
+ else
+ {
+ // Force chan->rightVolume and chan->leftVolume to be read from memory again,
+ // even though there is no reason to do so.
+ // The command line option "-fno-gcse" achieves the same result as this.
+ asm("" : : : "memory");
+
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ if (chan->eg > 15)
+ chan->eg = 15;
+ }
+
+ chan->sg = (chan->eg * chan->su + 15) >> 4;
+ chan->pan &= chan->panMask;
+}
+
+void CgbSound(void)
+{
+ s32 ch;
+ struct CgbChannel *channels;
+ s32 evAdd;
+ s32 prevC15;
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ vu8 *nrx0ptr;
+ vu8 *nrx1ptr;
+ vu8 *nrx2ptr;
+ vu8 *nrx3ptr;
+ vu8 *nrx4ptr;
+
+ // Most comparision operations that cast to s8 perform 'and' by 0xFF.
+ int mask = 0xff;
+
+ if (soundInfo->c15)
+ soundInfo->c15--;
+ else
+ soundInfo->c15 = 14;
+
+ for (ch = 1, channels = soundInfo->cgbChans; ch <= 4; ch++, channels++)
+ {
+ if (!(channels->sf & 0xc7))
+ continue;
+
+ switch (ch)
+ {
+ case 1:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR10);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR11);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR12);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR13);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR14);
+ break;
+ case 2:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR10+1);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR21);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR22);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR23);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR24);
+ break;
+ case 3:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR30);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR31);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR32);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR33);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR34);
+ break;
+ default:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR30+1);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR41);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR42);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR43);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR44);
+ break;
+ }
+
+ prevC15 = soundInfo->c15;
+ evAdd = *nrx2ptr;
+
+ if (channels->sf & 0x80)
+ {
+ if (!(channels->sf & 0x40))
+ {
+ channels->sf = 3;
+ channels->mo = 3;
+ CgbModVol(channels);
+ switch (ch)
+ {
+ case 1:
+ *nrx0ptr = channels->sw;
+ // fallthrough
+ case 2:
+ *nrx1ptr = ((u32)channels->wp << 6) + channels->le;
+ goto loc_82E0E30;
+ case 3:
+ if ((u32)channels->wp != channels->cp)
+ {
+ *nrx0ptr = 0x40;
+ REG_WAVE_RAM0 = channels->wp[0];
+ REG_WAVE_RAM1 = channels->wp[1];
+ REG_WAVE_RAM2 = channels->wp[2];
+ REG_WAVE_RAM3 = channels->wp[3];
+ channels->cp = (u32)channels->wp;
+ }
+ *nrx0ptr = 0;
+ *nrx1ptr = channels->le;
+ if (channels->le)
+ channels->n4 = -64;
+ else
+ channels->n4 = -128;
+ break;
+ default:
+ *nrx1ptr = channels->le;
+ *nrx3ptr = (u32)channels->wp << 3;
+ loc_82E0E30:
+ evAdd = channels->at + 8;
+ if (channels->le)
+ channels->n4 = 64;
+ else
+ channels->n4 = 0;
+ break;
+ }
+ channels->ec = channels->at;
+ if ((s8)(channels->at & mask))
+ {
+ channels->ev = 0;
+ goto EC_MINUS;
+ }
+ else
+ {
+ goto loc_82E0F96;
+ }
+ }
+ else
+ {
+ goto loc_82E0E82;
+ }
+ }
+ else if (channels->sf & 0x04)
+ {
+ channels->echoLength--;
+ if ((s8)(channels->echoLength & mask) <= 0)
+ {
+ loc_82E0E82:
+ CgbOscOff(ch);
+ channels->sf = 0;
+ goto LAST_LABEL;
+ }
+ goto loc_82E0FD6;
+ }
+ else if ((channels->sf & 0x40) && (channels->sf & 0x03))
+ {
+ channels->sf &= 0xfc;
+ channels->ec = channels->re;
+ if ((s8)(channels->re & mask))
+ {
+ channels->mo |= 1;
+ if (ch != 3)
+ {
+ evAdd = channels->re;
+ }
+ goto EC_MINUS;
+ }
+ else
+ {
+ goto loc_82E0F02;
+ }
+ }
+ else
+ {
+ loc_82E0ED0:
+ if (channels->ec == 0)
+ {
+ if (ch == 3)
+ {
+ channels->mo |= 1;
+ }
+ CgbModVol(channels);
+ if ((channels->sf & 0x3) == 0)
+ {
+ channels->ev--;
+ if ((s8)(channels->ev & mask) <= 0)
+ {
+ loc_82E0F02:
+ channels->ev = ((channels->eg * channels->echoVolume) + 0xFF) >> 8;
+ if (channels->ev)
+ {
+ channels->sf |= 0x4;
+ channels->mo |= 1;
+ if (ch != 3)
+ {
+ evAdd = 8;
+ }
+ goto loc_82E0FD6;
+ }
+ else
+ {
+ goto loc_82E0E82;
+ }
+ }
+ else
+ {
+ channels->ec = channels->re;
+ }
+ }
+ else if ((channels->sf & 0x3) == 1)
+ {
+ loc_82E0F3A:
+ channels->ev = channels->sg;
+ channels->ec = 7;
+ }
+ else if ((channels->sf & 0x3) == 2)
+ {
+ int ev, sg;
+
+ channels->ev--;
+ ev = (s8)(channels->ev & mask);
+ sg = (s8)(channels->sg);
+ if (ev <= sg)
+ {
+ loc_82E0F5A:
+ if (channels->su == 0)
+ {
+ channels->sf &= 0xfc;
+ goto loc_82E0F02;
+ }
+ else
+ {
+ channels->sf--;
+ channels->mo |= 1;
+ if (ch != 3)
+ {
+ evAdd = 8;
+ }
+ goto loc_82E0F3A;
+ }
+ }
+ else
+ {
+ channels->ec = channels->de;
+ }
+ }
+ else
+ {
+ channels->ev++;
+ if ((u8)(channels->ev & mask) >= channels->eg)
+ {
+ loc_82E0F96:
+ channels->sf--;
+ channels->ec = channels->de;
+ if ((u8)(channels->ec & mask))
+ {
+ channels->mo |= 1;
+ channels->ev = channels->eg;
+ if (ch != 3)
+ {
+ evAdd = channels->de;
+ }
+ }
+ else
+ {
+ goto loc_82E0F5A;
+ }
+ }
+ else
+ {
+ channels->ec = channels->at;
+ }
+ }
+ }
+ }
+
+ EC_MINUS:
+ channels->ec--;
+ if (prevC15 == 0)
+ {
+ prevC15--;
+ goto loc_82E0ED0;
+ }
+
+ loc_82E0FD6:
+ if (channels->mo & 0x2)
+ {
+ if (ch < 4 && (channels->ty & 0x08))
+ {
+ int biasH = REG_SOUNDBIAS_H;
+
+ if (biasH < 64)
+ {
+ channels->fr = (channels->fr + 2) & 0x7fc;
+ }
+ else if (biasH < 128)
+ {
+ channels->fr = (channels->fr + 1) & 0x7fe;
+ }
+ }
+ if (ch != 4)
+ {
+ *nrx3ptr = channels->fr;
+ }
+ else
+ {
+ *nrx3ptr = (*nrx3ptr & 0x08) | channels->fr;
+ }
+ channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->fr) + 1));
+ *nrx4ptr = (s8)(channels->n4 & mask);
+ }
+
+ if (channels->mo & 1)
+ {
+ REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan;
+ if (ch == 3)
+ {
+ *nrx2ptr = gCgb3Vol[channels->ev];
+ if (channels->n4 & 0x80)
+ {
+ *nrx0ptr = 0x80;
+ *nrx4ptr = channels->n4;
+ channels->n4 &= 0x7f;
+ }
+ }
+ else
+ {
+ evAdd &= 0xf;
+ *nrx2ptr = (channels->ev << 4) + evAdd;
+ *nrx4ptr = channels->n4 | 0x80;
+ if (ch == 1 && !(*nrx0ptr & 0x08))
+ {
+ *nrx4ptr = channels->n4 | 0x80;
+ }
+ }
+ }
+
+ LAST_LABEL:
+ channels->mo = 0;
+ }
+}
+
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->tempoU = tempo;
+ mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->volX = volume / 4;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->keyShiftX = pitch >> 8;
+ track->pitX = pitch;
+ track->flags |= MPT_FLG_PITCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->panX = pan;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void ClearModM(struct MusicPlayerTrack *track)
+{
+ track->lfoSpeedC = 0;
+ track->modM = 0;
+
+ if (track->modT == 0)
+ track->flags |= MPT_FLG_PITCHG;
+ else
+ track->flags |= MPT_FLG_VOLCHG;
+}
+
+void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->mod = modDepth;
+
+ if (!track->mod)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->lfoSpeed = lfoSpeed;
+
+ if (!track->lfoSpeed)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+#define MEMACC_COND_JUMP(cond) \
+if (cond) \
+ goto cond_true; \
+else \
+ goto cond_false; \
+
+void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 op;
+ u8 *addr;
+ u8 data;
+
+ op = *track->cmdPtr;
+ track->cmdPtr++;
+
+ addr = mplayInfo->memAccArea + *track->cmdPtr;
+ track->cmdPtr++;
+
+ data = *track->cmdPtr;
+ track->cmdPtr++;
+
+ switch (op)
+ {
+ case 0:
+ *addr = data;
+ return;
+ case 1:
+ *addr += data;
+ return;
+ case 2:
+ *addr -= data;
+ return;
+ case 3:
+ *addr = mplayInfo->memAccArea[data];
+ return;
+ case 4:
+ *addr += mplayInfo->memAccArea[data];
+ return;
+ case 5:
+ *addr -= mplayInfo->memAccArea[data];
+ return;
+ case 6:
+ MEMACC_COND_JUMP(*addr == data)
+ return;
+ case 7:
+ MEMACC_COND_JUMP(*addr != data)
+ return;
+ case 8:
+ MEMACC_COND_JUMP(*addr > data)
+ return;
+ case 9:
+ MEMACC_COND_JUMP(*addr >= data)
+ return;
+ case 10:
+ MEMACC_COND_JUMP(*addr <= data)
+ return;
+ case 11:
+ MEMACC_COND_JUMP(*addr < data)
+ return;
+ case 12:
+ MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data])
+ return;
+ case 13:
+ MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data])
+ return;
+ case 14:
+ MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data])
+ return;
+ case 15:
+ MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data])
+ return;
+ case 16:
+ MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data])
+ return;
+ case 17:
+ MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data])
+ return;
+ default:
+ return;
+ }
+
+cond_true:
+ {
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]);
+ func(mplayInfo, track);
+ return;
+ }
+
+cond_false:
+ track->cmdPtr += 4;
+}
+
+void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 n = *track->cmdPtr;
+ track->cmdPtr++;
+
+ gXcmdTable[n](mplayInfo, track);
+}
+
+void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]);
+ func(mplayInfo, track);
+}
+
+#define READ_XCMD_BYTE(var, n) \
+{ \
+ u32 byte = track->cmdPtr[(n)]; \
+ byte <<= n * 8; \
+ (var) &= ~(0xFF << (n * 8)); \
+ (var) |= byte; \
+}
+
+void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 wav;
+
+ READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(wav, 1)
+ READ_XCMD_BYTE(wav, 2)
+ READ_XCMD_BYTE(wav, 3)
+
+ track->tone.wav = (struct WaveData *)wav;
+ track->cmdPtr += 4;
+}
+
+void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.type = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.attack = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.decay = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.sustain = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.release = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoVolume = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoLength = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.length = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.pan_sweep = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 unk;
+
+ READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(unk, 1)
+
+ if (track->unk_3A < (u16)unk)
+ {
+ track->unk_3A++;
+ track->cmdPtr -= 2;
+ track->wait = 1;
+ }
+ else
+ {
+ track->unk_3A = 0;
+ track->cmdPtr += 2;
+ }
+}
+
+void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 unk;
+
+ READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(unk, 1)
+ READ_XCMD_BYTE(unk, 2)
+ READ_XCMD_BYTE(unk, 3)
+
+ track->unk_3C = unk;
+ track->cmdPtr += 4;
+}
+
+void DummyFunc(void)
+{
+}
+
+struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone)
+{
+ u32 maxClock = 0;
+ s32 maxClockIndex = 0;
+ s32 i;
+ struct MusicPlayerInfo *mplayInfo;
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ {
+ struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
+
+ if (!track->flags && (!track->chan || track->chan->track != track))
+ goto start_song;
+
+ if (maxClock < gPokemonCryMusicPlayers[i].clock)
+ {
+ maxClock = gPokemonCryMusicPlayers[i].clock;
+ maxClockIndex = i;
+ }
+ }
+
+ i = maxClockIndex;
+
+start_song:
+ mplayInfo = &gPokemonCryMusicPlayers[i];
+ mplayInfo->ident++;
+
+#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong))
+#define CRY_OFS(field) offsetof(struct PokemonCrySong, field)
+
+ memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong));
+
+ *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone;
+ *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0);
+ *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1);
+ *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont);
+
+#undef CRY_OFS
+#undef CRY
+
+ mplayInfo->ident = ID_NUMBER;
+
+ MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i]));
+
+ return mplayInfo;
+}
+
+void SetPokemonCryVolume(u8 val)
+{
+ gPokemonCrySong.volumeValue = val & 0x7F;
+}
+
+void SetPokemonCryPanpot(s8 val)
+{
+ gPokemonCrySong.panValue = (val + C_V) & 0x7F;
+}
+
+void SetPokemonCryPitch(s16 val)
+{
+ s16 b = val + 0x80;
+ u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue;
+ gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F;
+ gPokemonCrySong.tuneValue = (b >> 1) & 0x7F;
+ gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F;
+}
+
+void SetPokemonCryLength(u16 val)
+{
+ gPokemonCrySong.unkCmd0CParam = val;
+}
+
+void SetPokemonCryRelease(u8 val)
+{
+ gPokemonCrySong.releaseValue = val;
+}
+
+void SetPokemonCryProgress(u32 val)
+{
+ gPokemonCrySong.unkCmd0DParam = val;
+}
+
+int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo)
+{
+ struct MusicPlayerTrack *track = mplayInfo->tracks;
+
+ if (track->chan && track->chan->track == track)
+ return 1;
+ else
+ return 0;
+}
+
+void SetPokemonCryChorus(s8 val)
+{
+ if (val)
+ {
+ gPokemonCrySong.trackCount = 2;
+ gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F;
+ }
+ else
+ {
+ gPokemonCrySong.trackCount = 1;
+ }
+}
+
+void SetPokemonCryStereo(u32 val)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if (val)
+ {
+ REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
+ | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
+ | SOUND_ALL_MIX_FULL;
+ soundInfo->mode &= ~1;
+ }
+ else
+ {
+ REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT
+ | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT
+ | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL;
+ soundInfo->mode |= 1;
+ }
+}
+
+void SetPokemonCryPriority(u8 val)
+{
+ gPokemonCrySong.priority = val;
+}
diff --git a/src/libs/m4a_2.c b/src/libs/m4a_2.c
deleted file mode 100644
index 2e5956ef0..000000000
--- a/src/libs/m4a_2.c
+++ /dev/null
@@ -1,912 +0,0 @@
-#include "gba/m4a_internal.h"
-
-#define BSS_CODE __attribute__((section(".bss.code")))
-
-BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0};
-
-struct SoundInfo gSoundInfo;
-struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES];
-struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES];
-void *gMPlayJumpTable[36];
-struct CgbChannel gCgbChans[4];
-struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2];
-struct PokemonCrySong gPokemonCrySong;
-struct MusicPlayerInfo gMPlay_BGM;
-struct MusicPlayerInfo gMPlay_SE1;
-struct MusicPlayerInfo gMPlay_SE2;
-struct MusicPlayerInfo gMPlay_SE3;
-u8 gMPlayMemAccArea[0x10];
-
-u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
-{
- u32 val1;
- u32 val2;
- u32 fineAdjustShifted = fineAdjust << 24;
-
- if (key > 178)
- {
- key = 178;
- fineAdjustShifted = 255 << 24;
- }
-
- val1 = gScaleTable[key];
- val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4);
-
- val2 = gScaleTable[key + 1];
- val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4);
-
- return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
-}
-
-void UnusedDummyFunc()
-{
-}
-
-void MPlayContinue(struct MusicPlayerInfo *mplayInfo)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->fadeOC = speed;
- mplayInfo->fadeOI = speed;
- mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aSoundInit(void)
-{
- s32 i;
-
- CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer));
-
- SoundInit(&gSoundInfo);
- MPlayExtender(gCgbChans);
- m4aSoundMode(SOUND_MODE_DA_BIT_8
- | SOUND_MODE_FREQ_13379
- | (12 << SOUND_MODE_MASVOL_SHIFT)
- | (5 << SOUND_MODE_MAXCHN_SHIFT));
-
- for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
- {
- struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
- MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
- mplayInfo->unk_B = gMPlayTable[i].unk_A;
- mplayInfo->memAccArea = gMPlayMemAccArea;
- }
-
- gPokemonCrySong = gPokemonCrySongTemplate;
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- {
- struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i];
- struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
- MPlayOpen(mplayInfo, track, 2);
- track->chan = 0;
- }
-}
-
-void m4aSoundMain(void)
-{
- SoundMain();
-}
-
-void m4aSongNumStart(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- MPlayStart(mplay->info, song->header);
-}
-
-void m4aSongNumStartOrChange(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader != song->header)
- {
- MPlayStart(mplay->info, song->header);
- }
- else
- {
- if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0
- || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE))
- {
- MPlayStart(mplay->info, song->header);
- }
- }
-}
-
-void m4aSongNumStartOrContinue(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader != song->header)
- MPlayStart(mplay->info, song->header);
- else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0)
- MPlayStart(mplay->info, song->header);
- else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)
- MPlayContinue(mplay->info);
-}
-
-void m4aSongNumStop(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader == song->header)
- m4aMPlayStop(mplay->info);
-}
-
-void m4aSongNumContinue(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader == song->header)
- MPlayContinue(mplay->info);
-}
-
-void m4aMPlayAllStop(void)
-{
- s32 i;
-
- for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
- m4aMPlayStop(gMPlayTable[i].info);
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- m4aMPlayStop(&gPokemonCryMusicPlayers[i]);
-}
-
-void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo)
-{
- MPlayContinue(mplayInfo);
-}
-
-void m4aMPlayAllContinue(void)
-{
- s32 i;
-
- for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
- MPlayContinue(gMPlayTable[i].info);
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- MPlayContinue(&gPokemonCryMusicPlayers[i]);
-}
-
-void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- MPlayFadeOut(mplayInfo, speed);
-}
-
-void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->fadeOC = speed;
- mplayInfo->fadeOI = speed;
- mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->fadeOC = speed;
- mplayInfo->fadeOI = speed;
- mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN;
- mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo)
-{
- s32 trackCount = mplayInfo->trackCount;
- struct MusicPlayerTrack *track = mplayInfo->tracks;
-
- while (trackCount > 0)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- if (track->flags & MPT_FLG_START)
- {
- Clear64byte(track);
- track->flags = MPT_FLG_EXIST;
- track->bendRange = 2;
- track->volX = 64;
- track->lfoSpeed = 22;
- track->tone.type = 1;
- }
- }
-
- trackCount--;
- track++;
- }
-}
-
-void MPlayExtender(struct CgbChannel *cgbChans)
-{
- struct SoundInfo *soundInfo;
- u32 ident;
-
- REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
- | SOUND_4_ON
- | SOUND_3_ON
- | SOUND_2_ON
- | SOUND_1_ON;
- REG_SOUNDCNT_L = 0; // set master volume to zero
- REG_NR12 = 0x8;
- REG_NR22 = 0x8;
- REG_NR42 = 0x8;
- REG_NR14 = 0x80;
- REG_NR24 = 0x80;
- REG_NR44 = 0x80;
- REG_NR30 = 0;
- REG_NR50 = 0x77;
-
- soundInfo = SOUND_INFO_PTR;
-
- ident = soundInfo->ident;
-
- if (ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- gMPlayJumpTable[8] = ply_memacc;
- gMPlayJumpTable[17] = ply_lfos;
- gMPlayJumpTable[19] = ply_mod;
- gMPlayJumpTable[28] = ply_xcmd;
- gMPlayJumpTable[29] = ply_endtie;
- gMPlayJumpTable[30] = SampleFreqSet;
- gMPlayJumpTable[31] = TrackStop;
- gMPlayJumpTable[32] = FadeOutBody;
- gMPlayJumpTable[33] = TrkVolPitSet;
-
- soundInfo->cgbChans = (struct CgbChannel *)cgbChans;
- soundInfo->CgbSound = CgbSound;
- soundInfo->CgbOscOff = CgbOscOff;
- soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq;
- soundInfo->maxLines = MAX_LINES;
-
- CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
-
- cgbChans[0].ty = 1;
- cgbChans[0].panMask = 0x11;
- cgbChans[1].ty = 2;
- cgbChans[1].panMask = 0x22;
- cgbChans[2].ty = 3;
- cgbChans[2].panMask = 0x44;
- cgbChans[3].ty = 4;
- cgbChans[3].panMask = 0x88;
-
- soundInfo->ident = ident;
-}
-
-void MusicPlayerJumpTableCopy(void)
-{
- asm("swi 0x2A");
-}
-
-void ClearChain(void *x)
-{
- void (*func)(void *) = *(&gMPlayJumpTable[34]);
- func(x);
-}
-
-void Clear64byte(void *x)
-{
- void (*func)(void *) = *(&gMPlayJumpTable[35]);
- func(x);
-}
-
-void SoundInit(struct SoundInfo *soundInfo)
-{
- soundInfo->ident = 0;
-
- if (REG_DMA1CNT & (DMA_REPEAT << 16))
- REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- if (REG_DMA2CNT & (DMA_REPEAT << 16))
- REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- REG_DMA1CNT_H = DMA_32BIT;
- REG_DMA2CNT_H = DMA_32BIT;
- REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
- | SOUND_4_ON
- | SOUND_3_ON
- | SOUND_2_ON
- | SOUND_1_ON;
- REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
- | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
- | SOUND_ALL_MIX_FULL;
- REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
-
- REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
- REG_DMA1DAD = (s32)&REG_FIFO_A;
- REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
- REG_DMA2DAD = (s32)&REG_FIFO_B;
-
- SOUND_INFO_PTR = soundInfo;
- CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
-
- soundInfo->maxChans = 8;
- soundInfo->masterVolume = 15;
- soundInfo->plynote = (u32)ply_note;
- soundInfo->CgbSound = DummyFunc;
- soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
- soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
- soundInfo->ExtVolPit = (u32)DummyFunc;
-
- MPlayJumpTableCopy(gMPlayJumpTable);
-
- soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
-
- SampleFreqSet(SOUND_MODE_FREQ_13379);
-
- soundInfo->ident = ID_NUMBER;
-}
-
-void SampleFreqSet(u32 freq)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- freq = (freq & 0xF0000) >> 16;
- soundInfo->freq = freq;
- soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
- soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
-
- // LCD refresh rate 59.7275Hz
- soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000;
-
- // CPU frequency 16.78Mhz
- soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1;
-
- // Turn off timer 0.
- REG_TM0CNT_H = 0;
-
- // cycles per LCD fresh 280896
- REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank);
-
- m4aSoundVSyncOn();
-
- while (*(vu8 *)REG_ADDR_VCOUNT == 159)
- ;
-
- while (*(vu8 *)REG_ADDR_VCOUNT != 159)
- ;
-
- REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK;
-}
-
-void m4aSoundMode(u32 mode)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- u32 temp;
-
- if (soundInfo->ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL);
-
- if (temp)
- soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL;
-
- temp = mode & SOUND_MODE_MAXCHN;
-
- if (temp)
- {
- struct SoundChannel *chan;
-
- soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
-
- temp = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (temp != 0)
- {
- chan->status = 0;
- temp--;
- chan++;
- }
- }
-
- temp = mode & SOUND_MODE_MASVOL;
-
- if (temp)
- soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT;
-
- temp = mode & SOUND_MODE_DA_BIT;
-
- if (temp)
- {
- temp = (temp & 0x300000) >> 14;
- REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp;
- }
-
- temp = mode & SOUND_MODE_FREQ;
-
- if (temp)
- {
- m4aSoundVSyncOff();
- SampleFreqSet(temp);
- }
-
- soundInfo->ident = ID_NUMBER;
-}
-
-void SoundClear(void)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- s32 i;
- void *chan;
-
- if (soundInfo->ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- i = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (i > 0)
- {
- ((struct SoundChannel *)chan)->status = 0;
- i--;
- chan = (void *)((s32)chan + sizeof(struct SoundChannel));
- }
-
- chan = soundInfo->cgbChans;
-
- if (chan)
- {
- i = 1;
-
- while (i <= 4)
- {
- soundInfo->CgbOscOff(i);
- ((struct CgbChannel *)chan)->sf = 0;
- i++;
- chan = (void *)((s32)chan + sizeof(struct CgbChannel));
- }
- }
-
- soundInfo->ident = ID_NUMBER;
-}
-
-void m4aSoundVSyncOff(void)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
- {
- soundInfo->ident += 10;
-
- if (REG_DMA1CNT & (DMA_REPEAT << 16))
- REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- if (REG_DMA2CNT & (DMA_REPEAT << 16))
- REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- REG_DMA1CNT_H = DMA_32BIT;
- REG_DMA2CNT_H = DMA_32BIT;
-
- CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
- }
-}
-
-void m4aSoundVSyncOn(void)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- u32 ident = soundInfo->ident;
-
- if (ident == ID_NUMBER)
- return;
-
- REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
- REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
-
- soundInfo->pcmDmaCounter = 0;
- soundInfo->ident = ident - 10;
-}
-
-void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount)
-{
- struct SoundInfo *soundInfo;
-
- if (trackCount == 0)
- return;
-
- if (trackCount > MAX_MUSICPLAYER_TRACKS)
- trackCount = MAX_MUSICPLAYER_TRACKS;
-
- soundInfo = SOUND_INFO_PTR;
-
- if (soundInfo->ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- Clear64byte(mplayInfo);
-
- mplayInfo->tracks = tracks;
- mplayInfo->trackCount = trackCount;
- mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
-
- while (trackCount != 0)
- {
- tracks->flags = 0;
- trackCount--;
- tracks++;
- }
-
- if (soundInfo->func != 0)
- {
- mplayInfo->func = soundInfo->func;
- mplayInfo->intp = soundInfo->intp;
- soundInfo->func = 0;
- }
-
- soundInfo->intp = (u32)mplayInfo;
- soundInfo->func = (u32)MPlayMain;
- soundInfo->ident = ID_NUMBER;
- mplayInfo->ident = ID_NUMBER;
-}
-
-void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader)
-{
- s32 i;
- u8 unk_B;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- unk_B = mplayInfo->unk_B;
-
- if (!unk_B
- || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START))
- && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0
- || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE)))
- || (mplayInfo->priority <= songHeader->priority))
- {
- mplayInfo->ident++;
- mplayInfo->status = 0;
- mplayInfo->songHeader = songHeader;
- mplayInfo->tone = songHeader->tone;
- mplayInfo->priority = songHeader->priority;
- mplayInfo->clock = 0;
- mplayInfo->tempoD = 150;
- mplayInfo->tempoI = 150;
- mplayInfo->tempoU = 0x100;
- mplayInfo->tempoC = 0;
- mplayInfo->fadeOI = 0;
-
- i = 0;
- track = mplayInfo->tracks;
-
- while (i < songHeader->trackCount && i < mplayInfo->trackCount)
- {
- TrackStop(mplayInfo, track);
- track->flags = MPT_FLG_EXIST | MPT_FLG_START;
- track->chan = 0;
- track->cmdPtr = songHeader->part[i];
- i++;
- track++;
- }
-
- while (i < mplayInfo->trackCount)
- {
- TrackStop(mplayInfo, track);
- track->flags = 0;
- i++;
- track++;
- }
-
- if (songHeader->reverb & 0x80)
- m4aSoundMode(songHeader->reverb);
-
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
-{
- s32 i;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
- mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
- {
- TrackStop(mplayInfo, track);
- i--;
- track++;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
-{
- s32 i;
- struct MusicPlayerTrack *track;
- u16 fadeOI = mplayInfo->fadeOI;
- register u32 temp asm("r3");
- register u16 mask asm("r2");
-
- if (fadeOI == 0)
- return;
-
- mplayInfo->fadeOC--;
-
- temp = 0xFFFF;
- mask = temp;
-
- if (mplayInfo->fadeOC != 0)
- return;
-
- mplayInfo->fadeOC = fadeOI;
-
- if (mplayInfo->fadeOV & FADE_IN)
- {
- mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
-
- if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
- {
- mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
- mplayInfo->fadeOI = 0;
- }
- }
- else
- {
- mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
-
- if ((s16)(mplayInfo->fadeOV & mask) <= 0)
- {
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
- {
- register u32 fadeOV asm("r7");
- u32 val;
-
- TrackStop(mplayInfo, track);
-
- val = TEMPORARY_FADE;
- fadeOV = mplayInfo->fadeOV;
- val &= fadeOV;
-
- if (!val)
- track->flags = 0;
-
- i--;
- track++;
- }
-
- if (mplayInfo->fadeOV & TEMPORARY_FADE)
- mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
- else
- mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
-
- mplayInfo->fadeOI = 0;
- return;
- }
- }
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT);
- track->flags |= MPT_FLG_VOLCHG;
- }
-
- i--;
- track++;
- }
-}
-
-void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- if (track->flags & MPT_FLG_VOLSET)
- {
- s32 x;
- s32 y;
-
- x = (u32)(track->vol * track->volX) >> 5;
-
- if (track->modT == 1)
- x = (u32)(x * (track->modM + 128)) >> 7;
-
- y = 2 * track->pan + track->panX;
-
- if (track->modT == 2)
- y += track->modM;
-
- if (y < -128)
- y = -128;
- else if (y > 127)
- y = 127;
-
- track->volMR = (u32)((y + 128) * x) >> 8;
- track->volML = (u32)((127 - y) * x) >> 8;
- }
-
- if (track->flags & MPT_FLG_PITSET)
- {
- s32 bend = track->bend * track->bendRange;
- register s32 x asm("r1") = track->tune;
- x += bend;
- x *= 4;
- x += (track->keyShift << 8);
- x += (track->keyShiftX << 8);
- x += track->pitX;
-
- if (track->modT == 0)
- x += 16 * track->modM;
-
- track->keyM = x >> 8;
- track->pitM = x;
- }
-
- track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET);
-}
-
-u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust)
-{
- if (chanNum == 4)
- {
- if (key <= 20)
- {
- key = 0;
- }
- else
- {
- key -= 21;
- if (key > 59)
- key = 59;
- }
-
- return gNoiseTable[key];
- }
- else
- {
- s32 val1;
- s32 val2;
-
- if (key <= 35)
- {
- fineAdjust = 0;
- key = 0;
- }
- else
- {
- key -= 36;
- if (key > 130)
- {
- key = 130;
- fineAdjust = 255;
- }
- }
-
- val1 = gCgbScaleTable[key];
- val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4);
-
- val2 = gCgbScaleTable[key + 1];
- val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4);
-
- return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048;
- }
-}
-
-void CgbOscOff(u8 chanNum)
-{
- switch (chanNum)
- {
- case 1:
- REG_NR12 = 8;
- REG_NR14 = 0x80;
- break;
- case 2:
- REG_NR22 = 8;
- REG_NR24 = 0x80;
- break;
- case 3:
- REG_NR30 = 0;
- break;
- default:
- REG_NR42 = 8;
- REG_NR44 = 0x80;
- }
-}
-
-static inline int CgbPan(struct CgbChannel *chan)
-{
- u32 rightVolume = chan->rightVolume;
- u32 leftVolume = chan->leftVolume;
-
- if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume))
- {
- if (rightVolume / 2 >= leftVolume)
- {
- chan->pan = 0x0F;
- return 1;
- }
- }
- else
- {
- if (leftVolume / 2 >= rightVolume)
- {
- chan->pan = 0xF0;
- return 1;
- }
- }
-
- return 0;
-}
-
-void CgbModVol(struct CgbChannel *chan)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- if ((soundInfo->mode & 1) || !CgbPan(chan))
- {
- chan->pan = 0xFF;
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
- }
- else
- {
- // Force chan->rightVolume and chan->leftVolume to be read from memory again,
- // even though there is no reason to do so.
- // The command line option "-fno-gcse" achieves the same result as this.
- asm("" : : : "memory");
-
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
- if (chan->eg > 15)
- chan->eg = 15;
- }
-
- chan->sg = (chan->eg * chan->su + 15) >> 4;
- chan->pan &= chan->panMask;
-}
diff --git a/src/libs/m4a_4.c b/src/libs/m4a_4.c
deleted file mode 100644
index da5550252..000000000
--- a/src/libs/m4a_4.c
+++ /dev/null
@@ -1,545 +0,0 @@
-#include "gba/m4a_internal.h"
-
-void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->tempoU = tempo;
- mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->volX = volume / 4;
- track->flags |= MPT_FLG_VOLCHG;
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->keyShiftX = (s16)pitch >> 8;
- track->pitX = pitch;
- track->flags |= MPT_FLG_PITCHG;
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->panX = pan;
- track->flags |= MPT_FLG_VOLCHG;
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void ClearModM(struct MusicPlayerTrack *track)
-{
- track->lfoSpeedC = 0;
- track->modM = 0;
-
- if (track->modT == 0)
- track->flags |= MPT_FLG_PITCHG;
- else
- track->flags |= MPT_FLG_VOLCHG;
-}
-
-void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->mod = modDepth;
-
- if (!track->mod)
- ClearModM(track);
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->lfoSpeed = lfoSpeed;
-
- if (!track->lfoSpeed)
- ClearModM(track);
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-#define MEMACC_COND_JUMP(cond) \
-if (cond) \
- goto cond_true; \
-else \
- goto cond_false; \
-
-void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 op;
- u8 *addr;
- u8 data;
-
- op = *track->cmdPtr;
- track->cmdPtr++;
-
- addr = mplayInfo->memAccArea + *track->cmdPtr;
- track->cmdPtr++;
-
- data = *track->cmdPtr;
- track->cmdPtr++;
-
- switch (op)
- {
- case 0:
- *addr = data;
- return;
- case 1:
- *addr += data;
- return;
- case 2:
- *addr -= data;
- return;
- case 3:
- *addr = mplayInfo->memAccArea[data];
- return;
- case 4:
- *addr += mplayInfo->memAccArea[data];
- return;
- case 5:
- *addr -= mplayInfo->memAccArea[data];
- return;
- case 6:
- MEMACC_COND_JUMP(*addr == data)
- return;
- case 7:
- MEMACC_COND_JUMP(*addr != data)
- return;
- case 8:
- MEMACC_COND_JUMP(*addr > data)
- return;
- case 9:
- MEMACC_COND_JUMP(*addr >= data)
- return;
- case 10:
- MEMACC_COND_JUMP(*addr <= data)
- return;
- case 11:
- MEMACC_COND_JUMP(*addr < data)
- return;
- case 12:
- MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data])
- return;
- case 13:
- MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data])
- return;
- case 14:
- MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data])
- return;
- case 15:
- MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data])
- return;
- case 16:
- MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data])
- return;
- case 17:
- MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data])
- return;
- default:
- return;
- }
-
-cond_true:
- {
- void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]);
- func(mplayInfo, track);
- return;
- }
-
-cond_false:
- track->cmdPtr += 4;
-}
-
-void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 n = *track->cmdPtr;
- track->cmdPtr++;
-
- gXcmdTable[n](mplayInfo, track);
-}
-
-void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]);
- func(mplayInfo, track);
-}
-
-#define READ_XCMD_BYTE(var, n) \
-{ \
- u32 byte = track->cmdPtr[(n)]; \
- byte <<= n * 8; \
- (var) &= ~(0xFF << (n * 8)); \
- (var) |= byte; \
-}
-
-void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 wav;
-
- READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(wav, 1)
- READ_XCMD_BYTE(wav, 2)
- READ_XCMD_BYTE(wav, 3)
-
- track->tone.wav = (struct WaveData *)wav;
- track->cmdPtr += 4;
-}
-
-void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.type = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.attack = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.decay = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.sustain = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.release = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->echoVolume = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->echoLength = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.length = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.pan_sweep = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 unk;
-
- READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(unk, 1)
-
- if (track->unk_3A < (u16)unk)
- {
- track->unk_3A++;
- track->cmdPtr -= 2;
- track->wait = 1;
- }
- else
- {
- track->unk_3A = 0;
- track->cmdPtr += 2;
- }
-}
-
-void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 unk;
-
- READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(unk, 1)
- READ_XCMD_BYTE(unk, 2)
- READ_XCMD_BYTE(unk, 3)
-
- track->unk_3C = unk;
- track->cmdPtr += 4;
-}
-
-void DummyFunc(void)
-{
-}
-
-struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone)
-{
- u32 maxClock = 0;
- s32 maxClockIndex = 0;
- s32 i;
- struct MusicPlayerInfo *mplayInfo;
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- {
- struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
-
- if (!track->flags && (!track->chan || track->chan->track != track))
- goto start_song;
-
- if (maxClock < gPokemonCryMusicPlayers[i].clock)
- {
- maxClock = gPokemonCryMusicPlayers[i].clock;
- maxClockIndex = i;
- }
- }
-
- i = maxClockIndex;
-
-start_song:
- mplayInfo = &gPokemonCryMusicPlayers[i];
- mplayInfo->ident++;
-
-#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong))
-#define CRY_OFS(field) offsetof(struct PokemonCrySong, field)
-
- *(struct PokemonCrySong *)CRY = gPokemonCrySong;
-
- *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone;
- *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0);
- *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1);
- *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont);
-
-#undef CRY_OFS
-#undef CRY
-
- mplayInfo->ident = ID_NUMBER;
-
- MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i]));
-
- return mplayInfo;
-}
-
-void SetPokemonCryVolume(u8 val)
-{
- gPokemonCrySong.volumeValue = val & 0x7F;
-}
-
-void SetPokemonCryPanpot(s8 val)
-{
- gPokemonCrySong.panValue = (val + C_V) & 0x7F;
-}
-
-void SetPokemonCryPitch(s16 val)
-{
- s16 b = val + 0x80;
- u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue;
- gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F;
- gPokemonCrySong.tuneValue = (b >> 1) & 0x7F;
- gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F;
-}
-
-void SetPokemonCryLength(u16 val)
-{
- gPokemonCrySong.unkCmd0CParam = val;
-}
-
-void SetPokemonCryRelease(u8 val)
-{
- gPokemonCrySong.releaseValue = val;
-}
-
-void SetPokemonCryProgress(u32 val)
-{
- gPokemonCrySong.unkCmd0DParam = val;
-}
-
-int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo)
-{
- struct MusicPlayerTrack *track = mplayInfo->tracks;
-
- if (track->chan && track->chan->track == track)
- return 1;
- else
- return 0;
-}
-
-void SetPokemonCryChorus(s8 val)
-{
- if (val)
- {
- gPokemonCrySong.trackCount = 2;
- gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F;
- }
- else
- {
- gPokemonCrySong.trackCount = 1;
- }
-}
-
-void SetPokemonCryStereo(u32 val)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- if (val)
- {
- REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
- | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
- | SOUND_ALL_MIX_FULL;
- soundInfo->mode &= ~1;
- }
- else
- {
- REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT
- | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT
- | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL;
- soundInfo->mode |= 1;
- }
-}
-
-void SetPokemonCryPriority(u8 val)
-{
- gPokemonCrySong.priority = val;
-}
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index 76efdf08d..cd697270c 100644
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -98,7 +98,7 @@ static const u16 sFeebasData[][3] = {
static const u16 sLandmarkData[][2] = {
{MAPSEC_SKY_PILLAR, FLAG_LANDMARK_SKY_PILLAR},
{MAPSEC_SEAFLOOR_CAVERN, FLAG_LANDMARK_SEAFLOOR_CAVERN},
- {MAPSEC_NOTHING}
+ {MAPSEC_NONE}
};
static struct PokedexAreaScreenEwramStruct *const gPokedexAreaScreenPtr = &ePokedexAreaScreen;
@@ -302,9 +302,9 @@ static void SetSpecialMapHasMon(u16 mapGroup, u16 mapNum)
if (gPokedexAreaScreenPtr->numSpecialAreas < 0x20)
{
mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
- if (mapHeader->regionMapSectionId < MAPSEC_NOTHING)
+ if (mapHeader->regionMapSectionId < MAPSEC_NONE)
{
- for (i = 0; sLandmarkData[i][0] != MAPSEC_NOTHING; i++)
+ for (i = 0; sLandmarkData[i][0] != MAPSEC_NONE; i++)
{
if (mapHeader->regionMapSectionId == sLandmarkData[i][0] && !FlagGet(sLandmarkData[i][1]))
return;
@@ -1348,10 +1348,10 @@ static void CreateAreaMarkerSprites(void)
for (i = 0; i < gPokedexAreaScreenPtr->numSpecialAreas; i++)
{
mapSecId = gPokedexAreaScreenPtr->specialAreaRegionMapSectionIds[i];
- x = 8 * (gRegionMapLocations[mapSecId].x + 1) + 4;
- y = 8 * (gRegionMapLocations[mapSecId].y) + 28;
- x += 4 * (gRegionMapLocations[mapSecId].width - 1);
- y += 4 * (gRegionMapLocations[mapSecId].height - 1);
+ x = 8 * (gRegionMapEntries[mapSecId].x + 1) + 4;
+ y = 8 * (gRegionMapEntries[mapSecId].y) + 28;
+ x += 4 * (gRegionMapEntries[mapSecId].width - 1);
+ y += 4 * (gRegionMapEntries[mapSecId].height - 1);
spriteId = CreateSprite(&sAreaMarkerSpriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES)
{
diff --git a/src/pokenav.c b/src/pokenav.c
index f57a98df6..82b9a0f01 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -1,6 +1,30 @@
// Includes
#include "global.h"
+#include "ewram.h"
+#include "main.h"
+#include "palette.h"
+#include "decompress.h"
+#include "trig.h"
+#include "data2.h"
+#include "scanline_effect.h"
+#include "pokemon_storage_system.h"
+#include "text.h"
+#include "menu.h"
+#include "landmark.h"
+#include "strings.h"
+#include "string_util.h"
+#include "event_data.h"
+#include "use_pokeblock.h"
+#include "overworld.h"
+#include "pokemon_summary_screen.h"
+#include "link.h"
+#include "sound.h"
+#include "battle_setup.h"
+#include "constants/songs.h"
+#include "constants/flags.h"
+#include "constants/game_stat.h"
+#include "pokenav.h"
// Static type declarations
@@ -9,8 +33,6450 @@
EWRAM_DATA u8 gUnknown_020388B0[4] = {};
EWRAM_DATA u16 gUnknown_020388B4 = 0;
+extern const u8 gUnknown_083E0314[];
+extern const u16 gUnknown_08E9F9E8[];
+extern const u16 gUnknown_083E0274[];
+extern const u8 gUnknown_08E9FC64[];
+extern const u8 gUnknown_083E0354[];
+extern const u8 gUnknown_08E9FD64[];
+extern const u8 gUnknown_08E9FE54[];
+extern const u8 gUnknown_08E9FD1C[];
+extern const u16 gPokenavConditionSearch2_Pal[];
+extern const u8 gUnknown_083E0334[];
+extern const u16 gUnknown_083E02B4[];
+extern const u8 gPokenavConditionSearch2_Gfx[];
+extern const u8 gUnknown_083E0254[];
+extern const u8 gUnknown_08E9FEB4[];
+extern const u8 gUnknown_083E01AC[];
+extern const u8 gUnknown_08E9AC4C[];
+extern const u8 gPokenavConditionMenu2_Pal[];
+extern const u8 gPokenavConditionView_Gfx[];
+extern const u8 gUnknown_08E9ABB4[];
+extern const u8 gUnknown_08E9AC2C[];
+extern const u8 *const gPokenavCityMaps[][2];
+extern const u8 gPokenavHoennMapSquares_Pal[];
+extern const u8 gPokenavHoennMapSquares_Gfx[];
+extern const u16 gUnknown_083E003C[];
+extern const u8 *const gUnknown_083E31B0[];
+extern const u8 *const gUnknown_083E31CC[];
+extern const u8 *const gUnknown_083E31D8[];
+extern u8 *gUnknown_083DFEC8;
+extern const u8 gUnknown_083DFEEC[];
+extern const u8 gUnknown_083E005C[];
+extern const u8 gUnknown_083E007C[];
+extern const u8 gPokenavOutlineTilemap[];
+extern const u8 gPokenavOutlineTiles[];
+extern const u8 gPokenavOutlinePalette[];
+extern const u8 gUnknown_083DFECC[];
+extern const u8 gUnknown_083DFF8C[];
+extern const u8 gPokenavHoennMapMisc_Gfx[];
+extern const u8 gUnknown_08E99FB0[];
+extern const u8 gUnknown_08E9A100[];
+extern const u16 gPokenavHoennMap1_Pal[];
+extern void (*const gUnknown_083E3270[])(u16, u16);
+extern const u8 gUnknown_083E039C[];
+extern const u8 gUnknown_083E03A0[];
+extern const u8 gUnknown_083E01F4[];
+extern const u8 *const gTrainerEyeDescriptions[];
+extern const u8 gUnknown_08E9FBA0[];
+extern const u8 gPokenavRibbonView_Gfx[];
+extern const u8 gUnknown_083E040C[];
+extern const u16 gPokenavRibbonView_Pal[];
+extern const u16 gUnknown_083E03A8[];
+extern const u16 gUnknown_083E3C60[][16];
+extern const u16 gPokenavRibbonsIconGfx[][2];
+extern const u8 *const gRibbonDescriptions[][2];
+extern const u8 *const gGiftRibbonDescriptions[][2];
+extern const u8 gUnknown_08E9FF58[];
+extern const u8 gPokenavRibbonPokeView_Gfx[];
+extern const u16 gUnknown_083E0124[];
+extern const u16 gUnknown_083E0144[];
+extern const u8 gPokenavMenuOptions_Gfx[];
+extern const u8 gPokenavConditionMenu_Gfx[];
+extern const u8 gPokenavConditionSearch_Gfx[];
+extern const struct SpriteTemplate gSpriteTemplate_83E4454;
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83E4450[];
+extern const u16 gUnknown_083E42F8[];
+extern const u16 gPokenavMenuOptions1_Pal[];
+extern const u16 gPokenavMenuOptions2_Pal[];
+extern const u16 gPokenavConditionMenu_Pal[];
+extern const u16 gPokenavCondition6_Pal[];
+extern const u16 gPokenavCondition7_Pal[];
+extern const struct SpriteSheet gSpriteSheet_PokenavBlueLight;
+extern const struct SpritePalette gSpritePalette_PokenavBlueLight;
+extern const struct SpriteTemplate gSpriteTemplate_83E4484;
+extern const u8 gPokenavMainMenu_Gfx[];
+extern const u8 gPokenavConditionMenuHeader_Gfx[];
+extern const u8 gPokenavRibbonsHeader_Gfx[];
+extern const u8 gPokenavHoennMapHeader_Gfx[];
+extern const u8 gPokenavConditionMenuOptions_Gfx[];
+extern const u8 gPokenavConditionMenuOptions2_Gfx[];
+extern const u8 gPokenavTrainersEyesHeader_Gfx[];
+extern const struct SpritePalette gUnknown_083E449C[];
+extern const struct SpriteTemplate gSpriteTemplate_83E4530;
+extern const struct SpriteTemplate gSpriteTemplate_83E4548;
+extern const struct SpriteTemplate gSpriteTemplate_83E44E0;
+extern const struct SpriteTemplate gSpriteTemplate_83E44F8;
+extern const struct SpriteSheet gUnknown_083E4568;
+extern const struct SpriteTemplate gSpriteTemplate_83E4570;
+extern const struct SpritePalette gUnknown_083E4588;
+extern const struct SpriteSheet gUnknown_083E4590[3];
+extern const struct SpritePalette gUnknown_083E45A8;
+extern const u16 gUnknown_08E9F988[];
+extern const struct SpriteTemplate gSpriteTemplate_83E45B8;
+extern const struct SpriteTemplate gSpriteTemplate_83E45F0;
+extern const struct SpriteSheet gUnknown_083E4628[4];
+extern const struct SpritePalette gUnknown_083E4648[3];
+extern const struct SpriteTemplate gSpriteTemplate_83E4660;
+extern const u16 gUnknown_083E4678[];
+extern const u8 gUnknown_083E3D00[];
+extern const struct SpriteTemplate gSpriteTemplate_83E476C;
+extern const struct SpriteSheet gUnknown_083E4784;
+extern const struct SpritePalette gUnknown_083E478C;
+extern const struct SpriteTemplate gSpriteTemplate_83E4800;
+extern const s16 gUnknown_083E4794[][2];
+extern const u8 gUnknown_083E329C[];
+extern const struct SpritePalette gUnknown_083E4818;
+extern const struct SpriteTemplate gSpriteTemplate_83E4850;
+extern const struct SpritePalette gUnknown_083E4868;
+extern const struct SpriteTemplate gSpriteTemplate_83E4878;
+
// Static ROM declarations
+u8 sub_80F5E20(void);
+u8 sub_80F5EE4(void);
+u8 sub_80F5FB4(void);
+u8 sub_80F6010(void);
+
// .rodata
+extern const u8 gUnknown_083E4890[];
+
// .text
+
+void sub_80EEDE8(void)
+{
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+}
+
+void sub_80EEE08(void)
+{
+ gPokenavStructPtr->unkD160 = 0;
+}
+
+void sub_80EEE20(void)
+{
+ gPokenavStructPtr->unkD160 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ {
+ while (sub_80EEE54())
+ ;
+ }
+}
+
+bool8 sub_80EEE54(void)
+{
+ switch (gPokenavStructPtr->unkD160)
+ {
+ case 0:
+ LZ77UnCompVram(gPokenavHoennMapMisc_Gfx, (void *)VRAM + 0xC000);
+ break;
+ case 1:
+ LZ77UnCompVram(gUnknown_08E99FB0, (void *)VRAM + 0xD800);
+ break;
+ case 2:
+ LoadPalette(gPokenavHoennMap1_Pal, 0x10, 0x20);
+ break;
+ case 3:
+ sub_80EF58C(0);
+ sub_80EF58C(1);
+ sub_80EF58C(2);
+ break;
+ case 4:
+ gPokenavStructPtr->unk030C = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG1CNT = 0x1B0C;
+ gPokenavStructPtr->unkD160++;
+ default:
+ return FALSE;
+ }
+ gPokenavStructPtr->unkD160++;
+ return TRUE;
+}
+
+bool8 sub_80EEF34(void)
+{
+ bool8 retVal = TRUE;
+
+ if (gPokenavStructPtr->unk030C == 32)
+ return FALSE;
+
+ gPokenavStructPtr->unk030C += 2;
+ if (gPokenavStructPtr->unk030C > 31)
+ {
+ gPokenavStructPtr->unk030C = 32;
+ retVal = FALSE;
+ }
+
+ REG_BG1VOFS = gPokenavStructPtr->unk030C;
+ return retVal;
+}
+
+bool8 sub_80EEF78(void)
+{
+ bool8 retVal = TRUE;
+
+ if (gPokenavStructPtr->unk030C == 0)
+ return FALSE;
+
+ gPokenavStructPtr->unk030C -= 2;
+ if (gPokenavStructPtr->unk030C <= 0)
+ {
+ gPokenavStructPtr->unk030C = 0;
+ retVal = FALSE;
+ }
+
+ REG_BG1VOFS = gPokenavStructPtr->unk030C;
+ return retVal;
+}
+
+void sub_80EEFBC(u8 a)
+{
+ u8 var1;
+
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 0, 17, 2);
+
+ switch (a)
+ {
+ case 0:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 17, 0, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 11:
+ sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 2:
+ var1 = gPokenavStructPtr->unk6DAC;
+ if (!var1)
+ {
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 2, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, var1, 6, 7, 2);
+ }
+ else
+ {
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ }
+ break;
+ case 3:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 4, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 4:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 2, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 7:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 4, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 8:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 4, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 5:
+ case 9:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 2, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 10:
+ sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ }
+}
+
+void sub_80EF248(u8 a)
+{
+ gPokenavStructPtr->unkD160 = 0;
+
+ if (!gPokenavStructPtr->unk6DAC)
+ {
+ while (sub_80EF284(a))
+ ;
+ }
+}
+
+bool8 sub_80EF284(u8 a)
+{
+ switch (gPokenavStructPtr->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ break;
+ case 1:
+ Text_LoadWindowTemplate(&gWindowTemplate_81E7224);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowTemplate_81E7224);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ return TRUE;
+ break;
+ case 4:
+ DmaCopy16Defvars(3, gUnknown_083DFEEC, (void *)VRAM + 0x5000, 0xA0);
+ break;
+ case 5:
+ LZ77UnCompVram(gUnknown_083DFF8C, (void *)VRAM + 0xF800);
+ break;
+ case 6:
+ DmaCopy16Defvars(3, gUnknown_083E005C, (void *)VRAM + 0x8000, 0x20);
+ break;
+ case 7:
+ LZ77UnCompVram(gUnknown_083E007C, (void *)VRAM + 0xE000);
+ break;
+ case 8:
+ LZ77UnCompVram(gPokenavOutlineTilemap, (void *)VRAM + 0xE800);
+ break;
+ case 9:
+ LZ77UnCompVram(gPokenavOutlineTiles, (void *)VRAM + 0x8020);
+ break;
+ case 10:
+ sub_80EF54C(a);
+ LoadPalette(gUnknown_083DFECC, 0xF0, 0x20);
+ LoadPalette(gPokenavOutlinePalette, 0x40, 0x20);
+ sub_80EF7D4();
+ break;
+ case 11:
+ REG_BG0CNT = 0x1F01;
+ REG_BG2CNT = 0x1D0A;
+ REG_BG3CNT = 0x1C0B;
+ REG_BLDCNT = 0;
+
+ gPokenavStructPtr->unkD160++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unkD160++;
+ return TRUE;
+}
+
+void sub_80EF428(u8 a, u8 b)
+{
+ u8 *tileBuffer;
+ const u8 *pcText = 0;
+
+ switch (a)
+ {
+ case 0:
+ pcText = gUnknown_083E31B0[b];
+ break;
+ case 1:
+ pcText = gUnknown_083E31CC[b];
+ break;
+ case 2:
+ pcText = gUnknown_083E31D8[b];
+ break;
+ }
+
+ tileBuffer = gUnknown_083DFEC8;
+ AlignStringInMenuWindow(&tileBuffer[0x800], pcText, 0xC0, 2);
+ Menu_PrintText(&tileBuffer[0x800], 3, 17);
+}
+
+void sub_80EF490(u8 a)
+{
+ u16 var1, var2;
+
+ if (a == 2)
+ a = 1;
+
+ gPokenavStructPtr->unkCE4E = a * 30;
+ var1 = gPokenavStructPtr->unkCE4C;
+ var2 = a * 30;
+ if (var1 < var2)
+ gPokenavStructPtr->unkCE50 = 2;
+ else if (var1 > var2)
+ gPokenavStructPtr->unkCE50 = -2;
+ else
+ gPokenavStructPtr->unkCE50 = 0;
+}
+
+bool8 sub_80EF4F8(void)
+{
+ u16 *palettes;
+
+ if (gPokenavStructPtr->unkCE4C == gPokenavStructPtr->unkCE4E)
+ {
+ return FALSE;
+ }
+ else
+ {
+ gPokenavStructPtr->unkCE4C = gPokenavStructPtr->unkCE50 + gPokenavStructPtr->unkCE4C;
+
+ palettes = gPokenavStructPtr->palettesCE52;
+ LoadPalette(&palettes[gPokenavStructPtr->unkCE4C], 0x31, 4);
+ return TRUE;
+ }
+
+}
+
+void sub_80EF54C(u8 a)
+{
+ if (a == 2)
+ a = 1;
+
+ gPokenavStructPtr->unkCE4C = a * 30;
+ LoadPalette(&gPokenavStructPtr->palettesCE52[gPokenavStructPtr->unkCE4C], 0x31, 4);
+}
+
+void sub_80EF58C(u8 a)
+{
+ u16 i;
+ u16 * palettes;
+ const u16 *var1;
+
+ switch (a)
+ {
+ case 0:
+ for (i = 0; i < 62; i++)
+ gPokenavStructPtr->palettesCE52[i] = 0;
+ break;
+ case 1:
+ palettes = gPokenavStructPtr->palettesCE52;
+ var1 = gUnknown_083E003C;
+ sub_80EF624(&var1[1], &var1[3], 16, 2, palettes);
+ break;
+ case 2:
+ palettes = gPokenavStructPtr->palettesCE8E;
+ var1 = gUnknown_083E003C;
+ sub_80EF624(&var1[3], &var1[7], 16, 2, palettes);
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes)
+{
+ u16 red1, green1, blue1;
+ u16 red2, green2, blue2;
+ s32 redDiv, greenDiv, blueDiv;
+ u16 *palettes2;
+ u16 i, j;
+
+ i = 0;
+ while (i < d)
+ {
+ red1 = (*a & 0x1F) << 8;
+ green1 = ((*a >> 5) & 0x1F) << 8;
+ blue1 = ((*a >> 10) & 0x1F) << 8;
+
+ red2 = (*b & 0x1F) << 8;
+ green2 = ((*b >> 5) & 0x1F) << 8;
+ blue2 = ((*b >> 10) & 0x1F) << 8;
+
+ redDiv = (red2 - red1) / c;
+ greenDiv = (green2 - green1) / c;
+ blueDiv = (blue2 - blue1) / c;
+
+ palettes2 = palettes;
+ for (j = 0; j < c - 1; j++)
+ {
+ *palettes2 = (((blue1 << 8) >> 16) << 10) | (((green1 << 8) >> 16) << 5) | ((red1 << 8) >> 16);
+ palettes2 += d;
+ red1 += redDiv;
+ green1 += greenDiv;
+ blue1 += blueDiv;
+ }
+
+ *palettes2 = (red2 >> 8) | (blue2 << 2) | (green2 >> 3);
+ palettes++;
+
+ a++;
+ b++;
+ i++;
+ }
+}
+#else
+NAKED
+void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x38\n\
+ str r0, [sp]\n\
+ str r1, [sp, 0x4]\n\
+ ldr r4, [sp, 0x58]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r2, [sp, 0x8]\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ str r3, [sp, 0xC]\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x10]\n\
+ lsls r0, r3, 16\n\
+ ldr r1, [sp, 0x10]\n\
+ cmp r1, r3\n\
+ bcs _080EF72E\n\
+ subs r2, 0x1\n\
+ str r2, [sp, 0x20]\n\
+ str r0, [sp, 0x2C]\n\
+_080EF654:\n\
+ ldr r2, [sp]\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x1F\n\
+ ands r0, r1\n\
+ lsls r7, r0, 8\n\
+ lsls r1, 16\n\
+ lsrs r0, r1, 21\n\
+ movs r2, 0x1F\n\
+ ands r0, r2\n\
+ lsls r6, r0, 8\n\
+ lsrs r1, 26\n\
+ ands r1, r2\n\
+ lsls r5, r1, 8\n\
+ ldr r0, [sp, 0x4]\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1F\n\
+ ands r0, r1\n\
+ lsls r0, 8\n\
+ str r0, [sp, 0x14]\n\
+ lsls r1, 16\n\
+ lsrs r0, r1, 21\n\
+ ands r0, r2\n\
+ lsls r0, 8\n\
+ str r0, [sp, 0x18]\n\
+ lsrs r1, 26\n\
+ ands r1, r2\n\
+ lsls r1, 8\n\
+ str r1, [sp, 0x1C]\n\
+ ldr r1, [sp, 0x14]\n\
+ subs r0, r1, r7\n\
+ ldr r1, [sp, 0x8]\n\
+ bl __divsi3\n\
+ mov r10, r0\n\
+ ldr r2, [sp, 0x18]\n\
+ subs r0, r2, r6\n\
+ ldr r1, [sp, 0x8]\n\
+ bl __divsi3\n\
+ mov r9, r0\n\
+ ldr r1, [sp, 0x1C]\n\
+ subs r0, r1, r5\n\
+ ldr r1, [sp, 0x8]\n\
+ bl __divsi3\n\
+ mov r8, r0\n\
+ adds r3, r4, 0\n\
+ movs r4, 0\n\
+ ldr r2, [sp]\n\
+ adds r2, 0x2\n\
+ str r2, [sp, 0x30]\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, 0x2\n\
+ str r0, [sp, 0x34]\n\
+ adds r1, r3, 0x2\n\
+ str r1, [sp, 0x24]\n\
+ ldr r2, [sp, 0x10]\n\
+ adds r2, 0x1\n\
+ str r2, [sp, 0x28]\n\
+ ldr r0, [sp, 0x20]\n\
+ cmp r4, r0\n\
+ bge _080EF700\n\
+ ldr r1, [sp, 0xC]\n\
+ lsls r1, 1\n\
+ mov r12, r1\n\
+_080EF6D6:\n\
+ lsls r0, r7, 8\n\
+ lsrs r2, r0, 16\n\
+ lsls r0, r6, 8\n\
+ lsrs r1, r0, 16\n\
+ lsls r0, r5, 8\n\
+ lsrs r0, 16\n\
+ lsls r0, 10\n\
+ lsls r1, 5\n\
+ orrs r0, r1\n\
+ orrs r2, r0\n\
+ strh r2, [r3]\n\
+ add r3, r12\n\
+ add r7, r10\n\
+ add r6, r9\n\
+ add r5, r8\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ ldr r2, [sp, 0x20]\n\
+ cmp r4, r2\n\
+ blt _080EF6D6\n\
+_080EF700:\n\
+ ldr r4, [sp, 0x14]\n\
+ lsrs r2, r4, 8\n\
+ ldr r1, [sp, 0x1C]\n\
+ lsls r0, r1, 2\n\
+ ldr r4, [sp, 0x18]\n\
+ lsrs r1, r4, 3\n\
+ orrs r0, r1\n\
+ orrs r2, r0\n\
+ strh r2, [r3]\n\
+ ldr r0, [sp, 0x30]\n\
+ str r0, [sp]\n\
+ ldr r1, [sp, 0x34]\n\
+ str r1, [sp, 0x4]\n\
+ ldr r4, [sp, 0x24]\n\
+ ldr r2, [sp, 0x28]\n\
+ lsls r0, r2, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x10]\n\
+ ldr r1, [sp, 0x2C]\n\
+ lsrs r0, r1, 16\n\
+ ldr r2, [sp, 0x10]\n\
+ cmp r2, r0\n\
+ bcc _080EF654\n\
+_080EF72E:\n\
+ add sp, 0x38\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80EF740(void)
+{
+ gPokenavStructPtr->unk6DA0 = (gPokenavStructPtr->unk6DA0 + 1) & 1;
+ if (gPokenavStructPtr->unk6DA0)
+ gPokenavStructPtr->unk6DA2++;
+
+ REG_BG3HOFS = gPokenavStructPtr->unk6DA2;
+}
+
+void sub_80EF780(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0 || (gPokenavStructPtr->unk6DA2 & 0x7) != 0)
+ {
+ sub_80EF740();
+ }
+ else
+ {
+ u16 value = gPokenavStructPtr->unk6DA2 & 0x7;
+ gPokenavStructPtr->unk6DA2 = value;
+ gPokenavStructPtr->unk6DA0 = value;
+ REG_BG3HOFS = value;
+ }
+}
+
+void sub_80EF7D4(void)
+{
+ gPokenavStructPtr->unk6DA2 = 0;
+ gPokenavStructPtr->unk6DA0 = 0;
+ gPokenavStructPtr->taskId6DA4 = CreateTask(sub_80EF780, 80);
+}
+
+void sub_80EF814(void)
+{
+ if (FuncIsActiveTask(sub_80EF780))
+ DestroyTask(gPokenavStructPtr->taskId6DA4);
+}
+
+void sub_80EF840(void)
+{
+ gPokenavStructPtr->unkD160 = 0;
+
+ if (gPokenavStructPtr->unk6DAC == 0)
+ {
+ while (sub_80EF874() != 0)
+ ;
+ }
+}
+
+bool8 sub_80EF874(void)
+{
+ switch (gPokenavStructPtr->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ break;
+ case 1:
+ Text_LoadWindowTemplate(&gWindowTemplate_81E7224);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowTemplate_81E7224);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ return TRUE;
+ break;
+ case 4:
+ Menu_EraseScreen();
+ break;
+ case 5:
+ sub_80FA904(&gPokenavStructPtr->regionMap, gSaveBlock2.regionMapZoom ? TRUE : FALSE);
+ break;
+ case 6:
+ if (sub_80FA940())
+ return TRUE;
+ break;
+ case 7:
+ LZ77UnCompVram(gPokenavHoennMapSquares_Gfx, (void *)VRAM + 0x5000);
+ break;
+ case 8:
+ LoadPalette(gPokenavHoennMapSquares_Pal, 0x30, 0x20);
+ sub_80EFC3C();
+ break;
+ case 9:
+ if (sub_80EFC64())
+ return TRUE;
+ break;
+ case 10:
+ Menu_DrawStdWindowFrame(13, 3, 29, 17);
+ sub_80EF9F8();
+ break;
+ case 11:
+ if (!gPokenavStructPtr->regionMap.zoomed)
+ {
+ gPokenavStructPtr->unk7698 = 160;
+ REG_BG0VOFS = 160;
+ }
+ else
+ {
+ gPokenavStructPtr->unk7698 = 256;
+ REG_BG0VOFS = 0;
+ }
+
+ REG_BG0CNT = REG_BG0CNT;
+ REG_BG0CNT |= 1;
+ REG_BLDCNT = 0;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unkD160++;
+ return TRUE;
+}
+
+asm(".include \"constants/gba_constants.inc\"\n");
+
+void sub_80EF9F8(void)
+{
+ bool8 someBool = FALSE;
+ u16 top = 4;
+ u16 mapSectionId;
+ u8 b;
+
+ switch (gPokenavStructPtr->regionMap.unk16)
+ {
+ case 0:
+ break;
+ case 1:
+ case 4:
+ sub_8072A18(gPokenavStructPtr->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1);
+ top += 2;
+ if (gLinkOpen == TRUE)
+ {
+ sub_80F1A80();
+ someBool = TRUE;
+ }
+ else
+ {
+ u16 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ const u8 *secName = GetLandmarkName(
+ gPokenavStructPtr->regionMap.mapSectionId,
+ gPokenavStructPtr->regionMap.everGrandeCityArea,
+ i);
+
+ if (secName == NULL)
+ break;
+ sub_8072A18(secName, 0x70, top * 8, 0x78, 1);
+ top += 2;
+ }
+ }
+ break;
+ case 2:
+ sub_8072A18(gPokenavStructPtr->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1);
+ top += 2;
+ mapSectionId = gPokenavStructPtr->regionMap.mapSectionId;
+ b = gPokenavStructPtr->regionMap.everGrandeCityArea;
+ if (gPokenavStructPtr->unkCDCC[mapSectionId][b] != NULL)
+ {
+ Menu_BlankWindowRect(14, top, 15, 15);
+ Menu_BlankWindowRect(26, top, 28, 15);
+ sub_8095C8C((void *)(VRAM + 0xF800), 16, 6, gPokenavStructPtr->unkCDCC[mapSectionId][b], 0, 0, 10, 10, 10);
+ top += 11;
+ }
+ break;
+ case 3:
+ sub_8072A18(gPokenavStructPtr->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1);
+ top += 2;
+ break;
+ }
+
+ // Epic fail by the compiler at optimizing this.
+ if (!someBool && top < 16)
+ Menu_BlankWindowRect(14, top, 28, 15);
+
+ if (gPokenavStructPtr->regionMap.unk16 == 2)
+ sub_80EFD74();
+ else
+ sub_80EFDA0();
+}
+
+void sub_80EFBB0(void)
+{
+ if (!gPokenavStructPtr->regionMap.zoomed)
+ sub_80EEFBC(8);
+ else
+ sub_80EEFBC(7);
+}
+
+bool8 sub_80EFBDC(bool8 a)
+{
+ bool8 retVal = TRUE;
+ u16 var1 = gPokenavStructPtr->unk7698;
+
+ if (a)
+ {
+ if (var1 > 168)
+ {
+ var1 = var1 - 8;
+ }
+ else
+ {
+ var1 = 160;
+ retVal = FALSE;
+ }
+ }
+ else
+ {
+ if (var1 < 248)
+ {
+ var1 = var1 + 8;
+ }
+ else
+ {
+ var1 = 256;
+ retVal = FALSE;
+ }
+ }
+
+ gPokenavStructPtr->unk7698 = var1;
+ REG_BG0VOFS = var1 & 0xFF;
+
+ return retVal;
+}
+
+void sub_80EFC3C(void)
+{
+ gPokenavStructPtr->unkBC9A = 0;
+ gPokenavStructPtr->unkBC9B = 0;
+ sub_80EFD3C();
+}
+
+bool8 sub_80EFC64(void)
+{
+ u16 i;
+ u8 var1;
+ u16 var2;
+
+ if (gPokenavStructPtr->unkBC9A >= 16)
+ return FALSE;
+
+ var1 = gPokenavStructPtr->unkBC9A;
+ var2 = gPokenavStructPtr->unkBC9B;
+ for (i = 0; i < 2; i++)
+ {
+ if (gPokenavCityMaps[var1][i] != 0)
+ {
+ LZ77UnCompVram(gPokenavCityMaps[var1][i], gPokenavStructPtr->unkBC9C[var2]);
+ gPokenavStructPtr->unkCDCC[var1][i] = gPokenavStructPtr->unkBC9C[var2];
+ var2++;
+ }
+ else
+ {
+ gPokenavStructPtr->unkCDCC[var1][i] = NULL;
+ }
+ }
+
+ if (++gPokenavStructPtr->unkBC9A >= 16)
+ return FALSE;
+
+ gPokenavStructPtr->unkBC9B = var2;
+ return TRUE;
+}
+
+void sub_80EFD3C(void)
+{
+ gPokenavStructPtr->unk769E = 0;
+ gPokenavStructPtr->unk769C = 47;
+ gPokenavStructPtr->unk769D = 0;
+ gPokenavStructPtr->unk769A = 0;
+}
+
+void sub_80EFD74(void)
+{
+ gPokenavStructPtr->unk769E = 1;
+ if (gPokenavStructPtr->unk769D == 1)
+ gPokenavStructPtr->unk769D = 2;
+}
+
+void sub_80EFDA0(void)
+{
+ sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9AC2C, 0, 0, 15, 1, 15);
+ gPokenavStructPtr->unk769E = 0;
+}
+
+void sub_80EFDE4(u8 param0)
+{
+ u16 var1 = 60 - gPokenavStructPtr->unk769C;
+
+ if (var1 > 15)
+ var1 = 15;
+
+ if (gPokenavStructPtr->unk769E != 0)
+ {
+ sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9ABB4, gPokenavStructPtr->unk769C, 0, var1, 1, 60);
+
+ if (var1 < 15)
+ {
+ u16 var2 = var1 + 14;
+
+ sub_8095C8C((void *)VRAM + 0xF800, var2, 16, gUnknown_08E9ABB4, 0, 0, (u16)(15 - var1), 1, 60);
+ }
+ }
+}
+
+void sub_80EFE7C(void)
+{
+ u16 var1;
+ u8 var2 = gPokenavStructPtr->unk769D;
+
+ switch (var2)
+ {
+ case 0:
+ var1 = ++gPokenavStructPtr->unk769C;
+
+ if (var1 > 59)
+ gPokenavStructPtr->unk769C = var2;
+
+ sub_80EFDE4(gPokenavStructPtr->unk769E);
+
+ switch (gPokenavStructPtr->unk769C)
+ {
+ case 0:
+ case 15:
+ case 30:
+ case 45:
+ gPokenavStructPtr->unk769D = 1;
+ gPokenavStructPtr->unk769A = 0;
+ break;
+ }
+ break;
+ case 1:
+ var1 = ++gPokenavStructPtr->unk769A;
+ if (var1 > 120)
+ {
+ gPokenavStructPtr->unk769A = 0;
+ gPokenavStructPtr->unk769D = 0;
+ }
+ break;
+ case 2:
+ sub_80EFDE4(1);
+ gPokenavStructPtr->unk769D = 1;
+ break;
+ }
+}
+
+void sub_80EFF34(void)
+{
+ gPokenavStructPtr->unkD160 = 0;
+
+ if (gPokenavStructPtr->unk6DAC == 0)
+ {
+ while (sub_80EFF68())
+ ;
+ }
+}
+
+bool8 sub_80EFF68(void)
+{
+ switch (gPokenavStructPtr->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gPokenavStructPtr->unkD162 = 11;
+ break;
+ case 1:
+ Text_LoadWindowTemplate(&gWindowTemplate_81E7080);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowTemplate_81E7080);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ return TRUE;
+ break;
+ case 4:
+ Menu_EraseScreen();
+ break;
+ case 5:
+ sub_80F1614();
+ break;
+ case 6:
+ if (sub_80F162C(0))
+ return TRUE;
+ break;
+ case 7:
+ LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)VRAM + 0x5000);
+ break;
+ case 8:
+ LZ77UnCompVram(gUnknown_08E9AC4C, (void *)VRAM + 0xF000);
+ LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
+ break;
+ case 9:
+ if (gPokenavStructPtr->unk76AA == 1)
+ sub_8095C8C((void *)VRAM + 0xF000, 0, 5, gUnknown_083E01AC, 0, 0, 9, 4, 9);
+ break;
+ case 10:
+ LZ77UnCompVram(gUnknown_08E9FEB4, (void *)VRAM + 0xB800);
+ break;
+ case 11:
+ LoadPalette(gUnknown_083E0254, 0x30, 0x20);
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2);
+ sub_80F01A4();
+ break;
+ case 12:
+ sub_80F01E0(gPokenavStructPtr->unk8fe9);
+ break;
+ case 13:
+ REG_BG3CNT = 0x1E03;
+ REG_BG2CNT = 0x1702;
+ REG_BLDCNT = 0x844;
+ REG_BLDALPHA = 0x40B;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unkD160++;
+ return TRUE;
+}
+
+void sub_80F0174(bool8 bg2on)
+{
+ if (bg2on)
+ REG_DISPCNT |= DISPCNT_BG2_ON;
+ else
+ REG_DISPCNT &= ~DISPCNT_BG2_ON;
+}
+
+void sub_80F01A4(void)
+{
+ REG_WIN0H = WIN_RANGE(0, 240);
+ REG_WIN1H = WIN_RANGE(0, 155);
+ REG_WIN0V = WIN_RANGE(56, 121);
+ REG_WIN1V = WIN_RANGE(56, 121);
+ REG_WININ = 0x3F3F;
+ REG_WINOUT = 0x001B;
+}
+
+void sub_80F01E0(u16 a)
+{
+ Menu_PrintText(gPokenavStructPtr->unk8829[a], 13, 1);
+
+ if (gPokenavStructPtr->unk76AA == 1)
+ {
+ Menu_PrintText(gPokenavStructPtr->unk88E9[a], 13, 3);
+ sub_80F443C(gPokenavStructPtr->unk8788, gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].unk2_5);
+ Menu_PrintText(gPokenavStructPtr->unk8788, 1, 6);
+ }
+}
+
+void sub_80F0264(u8 a)
+{
+ gPokenavStructPtr->unk306 = 0;
+ gPokenavStructPtr->unk87CA = a;
+
+ if (gPokenavStructPtr->unk6DAC == 0)
+ {
+ while (sub_80F02A0())
+ ;
+ }
+}
+
+bool8 sub_80F02A0(void)
+{
+ const u16 *pointer;
+
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ sub_80EEDE8();
+
+ gPokenavStructPtr->unk87C8 = gPokenavStructPtr->unk87CA == 1;
+ gPokenavStructPtr->unkD162 = 11;
+ break;
+ case 1:
+ Text_LoadWindowTemplate(&gWindowTemplate_81E70D4);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowTemplate_81E70D4);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ {
+ return TRUE;
+ }
+ break;
+ case 4:
+ Menu_EraseScreen();
+ break;
+ case 5:
+ LZ77UnCompVram(gUnknown_08E9FC64, (void *)VRAM + 0xE800);
+ break;
+ case 6:
+ LZ77UnCompVram(gPokenavConditionSearch2_Gfx, (void *)VRAM + 0x8000);
+ break;
+ case 7:
+ LoadPalette(gUnknown_083E02B4, 0xB0, 0x20);
+ LoadPalette(gUnknown_083E02B4, 0xF0, 0x20);
+ LoadPalette(gUnknown_083E0334, 0x40, 0x20);
+
+ if (gPokenavStructPtr->unk87CA == 0)
+ {
+ LoadPalette(gPokenavConditionSearch2_Pal, 0x30, 0x20);
+ gPlttBufferUnfaded[0] = gPokenavConditionSearch2_Pal[5];
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
+ LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
+ LoadPalette(&gPokenavConditionSearch2_Pal[5], 0xBF, 0x2);
+ }
+ else if (gPokenavStructPtr->unk87CA == 1)
+ {
+ LoadPalette(gUnknown_083E0274, 0x30, 0x20);
+ gPlttBufferUnfaded[0] = gUnknown_083E0274[5];
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
+ LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
+ LoadPalette(&gUnknown_083E0274[5], 0xBF, 0x2);
+ }
+ else
+ {
+ LoadPalette(gUnknown_08E9F9E8, 0x30, 0x20);
+ gPlttBufferUnfaded[0] = *(pointer = &gUnknown_08E9F9E8[5]);
+ LoadPalette(gUnknown_083E0314, 0x50, 0x20);
+ LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
+ LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
+ LoadPalette(pointer, 0xBF, 0x2);
+ LoadPalette(pointer, 0x5F, 0x2);
+ }
+ break;
+ case 8:
+ if (gPokenavStructPtr->unk87CA != 2)
+ {
+ sub_8095C8C((void *)VRAM + 0xE800, 0, 5, gUnknown_08E9FD1C, 0, 0, 9, 4, 9);
+ }
+ else
+ {
+ sub_8095C8C((void *)VRAM + 0xE800, 0, 4, gUnknown_08E9FE54, 0, 0, 12, 10, 12);
+ sub_8095C8C((void *)VRAM + 0xE800, 0, 8, gUnknown_08E9FD64, 0, 0, 12, 10, 12);
+ }
+ break;
+ case 9:
+ LZ77UnCompVram(gUnknown_083E0354, (void *)VRAM + 0x5000);
+ break;
+ case 10:
+ DmaClear16(3, (void *)VRAM + 0xF800, 0x800);
+ break;
+ case 11:
+ sub_80F0900();
+ break;
+ case 12:
+ if (sub_80F0944())
+ {
+ return TRUE;
+ }
+ break;
+ case 13:
+ if (gPokenavStructPtr->unk87CA != 2)
+ {
+ ShowMapNamePopUpWindow();
+ }
+ else
+ {
+ sub_80F081C(0);
+ sub_80F0FFC((u8)gPokenavStructPtr->unk876E);
+ }
+ break;
+ case 14:
+ REG_BG2CNT = 0x1D0A;
+ REG_BG3CNT = 0x1E03;
+ REG_BG0CNT = 0x1F01;
+ REG_BG3VOFS = 0xF8;
+
+ gPokenavStructPtr->unk8776 = 0xF8;
+ gPokenavStructPtr->unk8778 = 0;
+
+ REG_BLDCNT = 0;
+ gPokenavStructPtr->unkD160++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+
+void sub_80F063C(s16 arg0)
+{
+ s16 var0;
+ s16 var1;
+ s16 var2;
+
+ gPokenavStructPtr->unk877C = arg0 * 16;
+ gPokenavStructPtr->unk877A = (arg0 == 1 || arg0 == -1) ? 4 : 8;
+ if (arg0 < 0)
+ {
+ gPokenavStructPtr->unk877A *= -1;
+ var0 = arg0 * 2 + gPokenavStructPtr->unk8778;
+ var1 = arg0 + gPokenavStructPtr->unk8770;
+ if (var1 < 0)
+ var1 += gPokenavStructPtr->unk8774 + 1;
+
+ arg0 *= -1;
+ }
+ else
+ {
+ var0 = gPokenavStructPtr->unk8778 + 16;
+ var1 = gPokenavStructPtr->unk8772 + 1;
+ }
+
+ if (var1 > gPokenavStructPtr->unk8774)
+ var1 = 0;
+
+ var2 = var0 & 0x1F;
+ sub_80F0954(var1, var2, arg0);
+}
+
+bool8 sub_80F0718(void)
+{
+ if (!sub_80F098C())
+ {
+ if (gPokenavStructPtr->unk877C == 0)
+ return FALSE;
+
+ gPokenavStructPtr->unk877C -= gPokenavStructPtr->unk877A;
+ gPokenavStructPtr->unk8776 += gPokenavStructPtr->unk877A;
+ gPokenavStructPtr->unk8776 &= 0xFF;
+ REG_BG3VOFS = gPokenavStructPtr->unk8776;
+ if (gPokenavStructPtr->unk877C == 0)
+ {
+ gPokenavStructPtr->unk8778 = ((8 + gPokenavStructPtr->unk8776) & 0xFF) / 8;
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+void ShowMapNamePopUpWindow(void)
+{
+ switch (gPokenavStructPtr->unk87CA)
+ {
+ case 0:
+ sub_80F443C(gPokenavStructPtr->unk8788, gPokenavStructPtr->unk893c[gPokenavStructPtr->unk876E].unk2_5);
+ break;
+ case 1:
+ sub_80F445C(gPokenavStructPtr->unk8788, gPokenavStructPtr->unk876E + 1);
+ break;
+ default:
+ return;
+ }
+
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ Menu_PrintText(gPokenavStructPtr->unk8788, 1, 6);
+}
+
+void sub_80F081C(u8 arg0)
+{
+ u32 numTrainerBattles;
+
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ switch (arg0)
+ {
+ case 0:
+ case 1:
+ MenuPrint_RightAligned(gOtherText_NumberRegistered, 10, 9);
+ if (arg0 != 0)
+ break;
+ // fall through
+ case 2:
+ ConvertIntToDecimalStringN(
+ gPokenavStructPtr->unk8788,
+ gPokenavStructPtr->unk8774 + 1,
+ STR_CONV_MODE_RIGHT_ALIGN,
+ 5);
+ MenuPrint_RightAligned(gPokenavStructPtr->unk8788, 10, 11);
+ if (arg0 != 0)
+ break;
+ // fall through
+ case 3:
+ MenuPrint_RightAligned(gOtherText_NumberBattles, 10, 13);
+ if (arg0 != 0)
+ break;
+ // fall through
+ case 4:
+ numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES);
+ if (numTrainerBattles > 99999)
+ numTrainerBattles = 99999;
+
+ ConvertIntToDecimalStringN(
+ gPokenavStructPtr->unk8788,
+ numTrainerBattles,
+ STR_CONV_MODE_RIGHT_ALIGN,
+ 5);
+ MenuPrint_RightAligned(gPokenavStructPtr->unk8788, 10, 15);
+ break;
+ }
+}
+
+void sub_80F08E4(void)
+{
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ Menu_EraseWindowRect(0, 9, 11, 16);
+}
+
+void sub_80F0900(void)
+{
+ s16 var0 = (gPokenavStructPtr->unk8772 - gPokenavStructPtr->unk8770) + 1;
+ if (var0 < 8)
+ Menu_EraseWindowRect(12, 1, 31, 15);
+
+ sub_80F0954(gPokenavStructPtr->unk8770, 0, var0);
+}
+
+bool8 sub_80F0944(void)
+{
+ return sub_80F098C();
+}
+
+void sub_80F0954(u16 arg0, u16 arg1, u16 arg2)
+{
+ gPokenavStructPtr->unk877E = arg0;
+ gPokenavStructPtr->unk8780 = arg1;
+ gPokenavStructPtr->unk8784 = arg2;
+ gPokenavStructPtr->unk8786 = 0;
+}
+
+#ifdef NONMATCHING
+bool8 sub_80F098C(void)
+{
+ register u16 zero asm("r8");
+ if (!gPokenavStructPtr->unk8784)
+ {
+ DONE:
+ return FALSE;
+ }
+
+ zero = 0;
+ gUnknown_083E3270[gPokenavStructPtr->unk87CA](gPokenavStructPtr->unk877E, gPokenavStructPtr->unk8780);
+ if (!--gPokenavStructPtr->unk8784)
+ goto DONE;
+
+ if ((++gPokenavStructPtr->unk877E & 0xFFFF) > gPokenavStructPtr->unk8774)
+ gPokenavStructPtr->unk877E = zero;
+
+ gPokenavStructPtr->unk8780 += 2;
+ gPokenavStructPtr->unk8780 &= 0x1F;
+ return TRUE;
+}
+#else
+NAKED
+bool8 sub_80F098C(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ ldr r0, _080F09A4 @ =gPokenavStructPtr\n\
+ ldr r6, [r0]\n\
+ ldr r0, _080F09A8 @ =0x00008784\n\
+ adds r7, r6, r0\n\
+ ldrh r0, [r7]\n\
+ cmp r0, 0\n\
+ bne _080F09AC\n\
+_080F09A0:\n\
+ movs r0, 0\n\
+ b _080F0A02\n\
+ .align 2, 0\n\
+_080F09A4: .4byte gPokenavStructPtr\n\
+_080F09A8: .4byte 0x00008784\n\
+_080F09AC:\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+ ldr r1, _080F0A0C @ =gUnknown_083E3270\n\
+ ldr r2, _080F0A10 @ =0x000087ca\n\
+ adds r0, r6, r2\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 2\n\
+ adds r2, r1\n\
+ ldr r0, _080F0A14 @ =0x0000877e\n\
+ adds r4, r6, r0\n\
+ ldrh r0, [r4]\n\
+ ldr r1, _080F0A18 @ =0x00008780\n\
+ adds r5, r6, r1\n\
+ ldrh r1, [r5]\n\
+ ldr r2, [r2]\n\
+ bl _call_via_r2\n\
+ ldrh r0, [r7]\n\
+ subs r0, 0x1\n\
+ strh r0, [r7]\n\
+ ldr r2, _080F0A1C @ =0x0000ffff\n\
+ adds r1, r2, 0\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _080F09A0\n\
+ ldrh r0, [r4]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4]\n\
+ ands r0, r1\n\
+ ldr r2, _080F0A20 @ =0x00008774\n\
+ adds r1, r6, r2\n\
+ movs r2, 0\n\
+ ldrsh r1, [r1, r2]\n\
+ cmp r0, r1\n\
+ ble _080F09F6\n\
+ mov r0, r8\n\
+ strh r0, [r4]\n\
+_080F09F6:\n\
+ ldrh r0, [r5]\n\
+ adds r0, 0x2\n\
+ movs r1, 0x1F\n\
+ ands r0, r1\n\
+ strh r0, [r5]\n\
+ movs r0, 0x1\n\
+_080F0A02:\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080F0A0C: .4byte gUnknown_083E3270\n\
+_080F0A10: .4byte 0x000087ca\n\
+_080F0A14: .4byte 0x0000877e\n\
+_080F0A18: .4byte 0x00008780\n\
+_080F0A1C: .4byte 0x0000ffff\n\
+_080F0A20: .4byte 0x00008774\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80F0A24(u16 arg0, u16 arg1)
+{
+ u8 var0 = gPokenavStructPtr->unk87C8 == 0 ? 2 : 1;
+ sub_80F4428(gPokenavStructPtr->unk8788, arg0, var0);
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_PrintText(gPokenavStructPtr->unk8788, 13, arg1);
+}
+
+void sub_80F0A74(u16 arg0, u16 arg1)
+{
+ sub_80F700C(gPokenavStructPtr->unk8788, arg0);
+ arg1 &= 0x1F;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_PrintTextPixelCoords(gPokenavStructPtr->unk8788, 97, arg1 * 8, 0);
+ if (arg0 < gPokenavStructPtr->unkD158 && gPokenavStructPtr->trainersEye[arg0].rematchNo != 0)
+ sub_8095C8C((void *)VRAM + 0xF000, 29, arg1, gUnknown_083E039C, 0, 0, 1, 2, 1);
+ else
+ sub_8095C8C((void *)VRAM + 0xF000, 29, arg1, gUnknown_083E03A0, 0, 0, 1, 2, 1);
+}
+
+void sub_80F0B24(void)
+{
+ gPokenavStructPtr->unkD15C = 0;
+ gPokenavStructPtr->unk306 = 0;
+}
+
+bool8 sub_80F0B44(void)
+{
+ int top;
+ if (gPokenavStructPtr->unkD15C > 8)
+ {
+ return FALSE;
+ }
+
+ if (++gPokenavStructPtr->unk306 > 1)
+ {
+ gPokenavStructPtr->unk306 = 0;
+ if (gPokenavStructPtr->unkD15C < 8)
+ {
+ top = (gPokenavStructPtr->unk8778 + (gPokenavStructPtr->unkD15C * 2)) & 0x1F;
+ if (gPokenavStructPtr->unkD15C != gPokenavStructPtr->unk876C)
+ {
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_EraseWindowRect(12, top, 31, top + 1);
+ }
+
+ if (!gPokenavStructPtr->unkD15C)
+ sub_80F08E4();
+
+ gPokenavStructPtr->unkD15C++;
+ return TRUE;
+ }
+ else
+ {
+ u16 i;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ top = (gPokenavStructPtr->unk8778 + 16) & 0x1F;
+ for (i = 0; i < 8; i++)
+ {
+ Menu_EraseWindowRect(12, top, 31, top + 1);
+ top = (top + 2) & 0x1F;
+ }
+
+ gPokenavStructPtr->unkD15C++;
+ return FALSE;
+ }
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+void sub_80F0C28(void)
+{
+ gPokenavStructPtr->unkD15C = 0;
+ gPokenavStructPtr->unk306 = 0;
+}
+
+bool8 sub_80F0C48(void)
+{
+ if (gPokenavStructPtr->unkD15C > 7)
+ return FALSE;
+
+ if (++gPokenavStructPtr->unk306 > 1)
+ {
+ gPokenavStructPtr->unk306 = 0;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ sub_80F0A74(gPokenavStructPtr->unk8770 + gPokenavStructPtr->unkD15C,
+ gPokenavStructPtr->unk8778 + gPokenavStructPtr->unkD15C * 2);
+
+ if ((++gPokenavStructPtr->unkD15C) > 7)
+ {
+ sub_80F081C(0);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+void LoadTrainerEyesDescriptionLines(void)
+{
+ u16 i;
+ int trainerEyesId;
+ const u8 *curChar;
+
+ gPokenavStructPtr->unk306 = 0;
+ gPokenavStructPtr->unkD15C = 0;
+ trainerEyesId = gPokenavStructPtr->trainersEye[gPokenavStructPtr->unk876E].rematchTableIdx;
+ gPokenavStructPtr->trainerEyeDescriptionLines[0] = gTrainerEyeDescriptions[trainerEyesId];
+
+ // Find the start of the 3 other lines in the Trainer's Eyes description.
+ curChar = gPokenavStructPtr->trainerEyeDescriptionLines[0];
+ for (i = 0; i < 3; i++)
+ {
+ while (*curChar != EOS)
+ curChar++;
+ gPokenavStructPtr->trainerEyeDescriptionLines[i + 1] = ++curChar;
+ }
+}
+
+#ifdef NONMATCHING
+// small register mismatch (r2/r3) on the line where var0 is set.
+bool8 sub_80F0D5C(void)
+{
+ int var0;
+ if (gPokenavStructPtr->unkD15C == 7)
+ return FALSE;
+
+ if (++gPokenavStructPtr->unk306 > 1)
+ {
+ gPokenavStructPtr->unk306 = 0;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ var0 = (gPokenavStructPtr->unk8778 + 2 + gPokenavStructPtr->unkD15C * 2) & 0x1F;
+ switch (gPokenavStructPtr->unkD15C)
+ {
+ case 0:
+ Menu_PrintTextPixelCoords(gOtherText_Strategy, 97, var0 * 8, 0);
+ break;
+ case 1:
+ AlignStringInMenuWindow(
+ gPokenavStructPtr->unk8788,
+ gPokenavStructPtr->trainerEyeDescriptionLines[0],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gPokenavStructPtr->unk8788, 97, var0 * 8, 0);
+ break;
+ case 2:
+ Menu_PrintTextPixelCoords(gOtherText_TrainersPokemon, 97, var0 * 8, 0);
+ break;
+ case 3:
+ AlignStringInMenuWindow(
+ gPokenavStructPtr->unk8788,
+ gPokenavStructPtr->trainerEyeDescriptionLines[1],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gPokenavStructPtr->unk8788, 97, var0 * 8, 0);
+ break;
+ case 4:
+ Menu_PrintTextPixelCoords(gOtherText_SelfIntroduction, 97, var0 * 8, 0);
+ break;
+ case 5:
+ AlignStringInMenuWindow(
+ gPokenavStructPtr->unk8788,
+ gPokenavStructPtr->trainerEyeDescriptionLines[2],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gPokenavStructPtr->unk8788, 97, var0 * 8, 0);
+ break;
+ case 6:
+ AlignStringInMenuWindow(
+ gPokenavStructPtr->unk8788,
+ gPokenavStructPtr->trainerEyeDescriptionLines[3],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gPokenavStructPtr->unk8788, 97, var0 * 8, 0);
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unkD15C++;
+ return TRUE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+#else
+NAKED
+bool8 sub_80F0D5C(void)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ ldr r0, _080F0D70 @ =gPokenavStructPtr\n\
+ ldr r4, [r0]\n\
+ ldr r0, _080F0D74 @ =0x0000d15c\n\
+ adds r5, r4, r0\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0x7\n\
+ bne _080F0D78\n\
+_080F0D6C:\n\
+ movs r0, 0\n\
+ b _080F0EB0\n\
+ .align 2, 0\n\
+_080F0D70: .4byte gPokenavStructPtr\n\
+_080F0D74: .4byte 0x0000d15c\n\
+_080F0D78:\n\
+ ldr r0, _080F0DB8 @ =0x00000306\n\
+ adds r1, r4, r0\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x1\n\
+ bhi _080F0D8C\n\
+ b _080F0EAE\n\
+_080F0D8C:\n\
+ movs r0, 0\n\
+ strh r0, [r1]\n\
+ ldr r0, _080F0DBC @ =gWindowTemplate_81E70D4\n\
+ bl BasicInitMenuWindow\n\
+ ldr r0, _080F0DC0 @ =0x00008778\n\
+ adds r1, r4, r0\n\
+ ldrh r3, [r5]\n\
+ lsls r0, r3, 1\n\
+ adds r0, 0x2\n\
+ ldrh r1, [r1]\n\
+ adds r5, r0, r1\n\
+ movs r0, 0x1F\n\
+ ands r5, r0\n\
+ cmp r3, 0x6\n\
+ bhi _080F0D6C\n\
+ lsls r0, r3, 2\n\
+ ldr r1, _080F0DC4 @ =_080F0DC8\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080F0DB8: .4byte 0x00000306\n\
+_080F0DBC: .4byte gWindowTemplate_81E70D4\n\
+_080F0DC0: .4byte 0x00008778\n\
+_080F0DC4: .4byte _080F0DC8\n\
+ .align 2, 0\n\
+_080F0DC8:\n\
+ .4byte _080F0DE4\n\
+ .4byte _080F0DF0\n\
+ .4byte _080F0E08\n\
+ .4byte _080F0E14\n\
+ .4byte _080F0E2C\n\
+ .4byte _080F0E38\n\
+ .4byte _080F0E6C\n\
+_080F0DE4:\n\
+ ldr r0, _080F0DEC @ =gOtherText_Strategy\n\
+ lsls r2, r5, 3\n\
+ b _080F0E54\n\
+ .align 2, 0\n\
+_080F0DEC: .4byte gOtherText_Strategy\n\
+_080F0DF0:\n\
+ ldr r0, _080F0DFC @ =gPokenavStructPtr\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E00 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E04 @ =0x0000d110\n\
+ b _080F0E42\n\
+ .align 2, 0\n\
+_080F0DFC: .4byte gPokenavStructPtr\n\
+_080F0E00: .4byte 0x00008788\n\
+_080F0E04: .4byte 0x0000d110\n\
+_080F0E08:\n\
+ ldr r0, _080F0E10 @ =gOtherText_TrainersPokemon\n\
+ lsls r2, r5, 3\n\
+ b _080F0E54\n\
+ .align 2, 0\n\
+_080F0E10: .4byte gOtherText_TrainersPokemon\n\
+_080F0E14:\n\
+ ldr r0, _080F0E20 @ =gPokenavStructPtr\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E24 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E28 @ =0x0000d114\n\
+ b _080F0E42\n\
+ .align 2, 0\n\
+_080F0E20: .4byte gPokenavStructPtr\n\
+_080F0E24: .4byte 0x00008788\n\
+_080F0E28: .4byte 0x0000d114\n\
+_080F0E2C:\n\
+ ldr r0, _080F0E34 @ =gOtherText_SelfIntroduction\n\
+ lsls r2, r5, 3\n\
+ b _080F0E54\n\
+ .align 2, 0\n\
+_080F0E34: .4byte gOtherText_SelfIntroduction\n\
+_080F0E38:\n\
+ ldr r0, _080F0E60 @ =gPokenavStructPtr\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E64 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E68 @ =0x0000d118\n\
+_080F0E42:\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ movs r2, 0x88\n\
+ movs r3, 0\n\
+ bl AlignStringInMenuWindow\n\
+ lsls r2, r5, 3\n\
+ adds r0, r4, 0\n\
+_080F0E54:\n\
+ movs r1, 0x61\n\
+ movs r3, 0\n\
+ bl Menu_PrintTextPixelCoords\n\
+ b _080F0EA0\n\
+ .align 2, 0\n\
+_080F0E60: .4byte gPokenavStructPtr\n\
+_080F0E64: .4byte 0x00008788\n\
+_080F0E68: .4byte 0x0000d118\n\
+_080F0E6C:\n\
+ ldr r0, _080F0E94 @ =gPokenavStructPtr\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E98 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E9C @ =0x0000d11c\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ movs r2, 0x88\n\
+ movs r3, 0\n\
+ bl AlignStringInMenuWindow\n\
+ lsls r2, r5, 3\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x61\n\
+ movs r3, 0\n\
+ bl Menu_PrintTextPixelCoords\n\
+ b _080F0D6C\n\
+ .align 2, 0\n\
+_080F0E94: .4byte gPokenavStructPtr\n\
+_080F0E98: .4byte 0x00008788\n\
+_080F0E9C: .4byte 0x0000d11c\n\
+_080F0EA0:\n\
+ ldr r0, _080F0EB8 @ =gPokenavStructPtr\n\
+ ldr r1, [r0]\n\
+ ldr r0, _080F0EBC @ =0x0000d15c\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+_080F0EAE:\n\
+ movs r0, 0x1\n\
+_080F0EB0:\n\
+ pop {r4,r5}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080F0EB8: .4byte gPokenavStructPtr\n\
+_080F0EBC: .4byte 0x0000d15c\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80F0EC0(void)
+{
+ gPokenavStructPtr->unk306 = 0;
+ gPokenavStructPtr->unkD15C = 0;
+ StringFill(gPokenavStructPtr->unk8788, CHAR_SPACE, 16);
+}
+
+bool8 sub_80F0EF4(void)
+{
+ int top;
+ if (gPokenavStructPtr->unkD15C > 6)
+ return FALSE;
+
+ if (++gPokenavStructPtr->unk306 > 1)
+ {
+ gPokenavStructPtr->unk306 = 0;
+ top = (gPokenavStructPtr->unk8778 + 2 + gPokenavStructPtr->unkD15C * 2) & 0x1F;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_EraseWindowRect(12, top, 31, top + 1);
+ gPokenavStructPtr->unkD15C++;
+ }
+
+ return TRUE;
+}
+
+void sub_80F0F64(void)
+{
+ s16 var0 = gPokenavStructPtr->unk876C;
+ gPokenavStructPtr->unk877C = var0 * 16;
+ gPokenavStructPtr->unk877A = var0 == 1 ? 4 : 8;
+}
+
+void sub_80F0FA0(void)
+{
+ s16 var0 = gPokenavStructPtr->unk876C * -1;
+ gPokenavStructPtr->unk877C = var0 * 16;
+ gPokenavStructPtr->unk877A = var0 == -1 ? -4 : -8;
+}
+
+bool8 sub_80F0FEC(void)
+{
+ return sub_80F0718();
+}
+
+void sub_80F0FFC(u8 arg0)
+{
+ GetMapSectionName(gPokenavStructPtr->unk8788, gPokenavStructPtr->trainersEye[arg0].regionMapSectionId, 0);
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ sub_80F19DC(gPokenavStructPtr->unk8788);
+ AlignStringInMenuWindow(gPokenavStructPtr->unkD138, gPokenavStructPtr->unk8788, 88, 2);
+ Menu_PrintText(gPokenavStructPtr->unkD138, 0, 5);
+}
+
+void sub_80F105C(void)
+{
+ sub_80F0A74(gPokenavStructPtr->unk876E, gPokenavStructPtr->unk8778);
+}
+
+bool8 sub_80F1080(void)
+{
+ switch (gPokenavStructPtr->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gPokenavStructPtr->unkD162 = 11;
+ break;
+ case 1:
+ Text_LoadWindowTemplate(&gWindowTemplate_81E70B8);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowTemplate_81E70B8);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ return TRUE;
+ break;
+ case 4:
+ Menu_EraseScreen();
+ break;
+ case 5:
+ sub_80F1614();
+ break;
+ case 6:
+ if (sub_80F162C(1))
+ return TRUE;
+ break;
+ case 7:
+ LZ77UnCompWram(gUnknown_08E9FBA0, gPokenavStructPtr->unk934C);
+ break;
+ case 8:
+ DrawMonRibbonIcons();
+ break;
+ case 9:
+ sub_80F13FC();
+ break;
+ case 10:
+ LZ77UnCompVram(gPokenavRibbonView_Gfx, (void *)(VRAM + 0x8000));
+ break;
+ case 11:
+ LZ77UnCompVram(gUnknown_083E040C, (void *)(VRAM + 0x8200));
+ break;
+ case 12:
+ LoadPalette(gPokenavRibbonView_Pal, 0x20, 0x20);
+ LoadPalette(gUnknown_083E03A8, 0xF0, 0x20);
+ LoadPalette(gUnknown_083E3C60[0], 0x30, 0xA0);
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(gUnknown_083E03A8 + 0xF, 0xBF, 0x2);
+ break;
+ case 13:
+ sub_80F1438();
+ break;
+ case 14:
+ REG_BG2CNT = 0x1E02;
+ REG_BG3CNT = 0x170B;
+ REG_BLDCNT = 0;
+ gPokenavStructPtr->unkD160++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unkD160++;
+ return TRUE;
+}
+
+void DrawMonRibbonIcons(void)
+{
+ u16 i;
+ u16 offset;
+ u8 index, palette, tile;
+ u8 var0;
+
+ offset = 0x8B;
+ var0 = gPokenavStructPtr->unkBC8E - gPokenavStructPtr->unkBC8F;
+
+ for (i = 0; i < 8; i++)
+ CpuFill16(0x2000, &gPokenavStructPtr->unk934C[offset + i * 32], 0x24);
+
+ for (i = 0; i < var0; i++)
+ {
+ index = gPokenavStructPtr->unkBC4C[i];
+ palette = gPokenavRibbonsIconGfx[index][1] + 3;
+ tile = gPokenavRibbonsIconGfx[index][0] * 2 + 0x10;
+ gPokenavStructPtr->unk934C[offset] = (palette << 12) | tile;
+ gPokenavStructPtr->unk934C[offset + 1] = ((palette << 12) | 0x400) | tile;
+ gPokenavStructPtr->unk934C[offset + 0x20] = (palette << 12) | (tile + 1);
+ gPokenavStructPtr->unk934C[offset + 0x21] = (palette << 12) | 0x400 | (tile + 1);
+
+ if ((i + 1) % 9 == 0)
+ offset += 0x30;
+ else
+ offset += 2;
+ }
+
+ offset = 0x14B;
+ for (i = 0; i < gPokenavStructPtr->unkBC8F; i++)
+ {
+ index = gPokenavStructPtr->unkBC4C[var0 + i];
+ palette = gPokenavRibbonsIconGfx[index][1] + 3;
+ tile = gPokenavRibbonsIconGfx[index][0] * 2 + 0x10;
+ gPokenavStructPtr->unk934C[offset] = (palette << 12) | tile;
+ gPokenavStructPtr->unk934C[offset + 1] = ((palette << 12) | 0x400) | tile;
+ gPokenavStructPtr->unk934C[offset + 0x20] = (palette << 12) | (tile + 1);
+ gPokenavStructPtr->unk934C[offset + 0x21] = (palette << 12) | 0x400 | (tile + 1);
+
+ offset += 2;
+ }
+}
+
+void sub_80F13FC(void)
+{
+ u16 *src = gPokenavStructPtr->unk934C;
+ u16 *dest = (u16 *)(VRAM + 0xB800);
+ DmaCopy32(3, src, dest, 0x500);
+ gPlttBufferUnfaded[0] = *(gPokenavRibbonView_Pal + 14);
+}
+
+void sub_80F1438(void)
+{
+ Menu_PrintText(gPokenavStructPtr->unk8829[0], 13, 1);
+ sub_80F445C(gPokenavStructPtr->unk8788, gPokenavStructPtr->unk876E + 1);
+ Menu_PrintText(gPokenavStructPtr->unk8788, 1, 5);
+}
+
+void sub_80F1480(void)
+{
+ Menu_EraseWindowRect(12, 13, 27, 16);
+}
+
+// This is a fakematching function, due to a hardcoded access of gSaveBlock1.
+// Due to this hardcoded address access, gift ribbons do not properly display
+// their descriptions, since the hardcoded access is inside of the LinkBattleRecords
+// save data, rather than the giftRibbons array, which is almost certainly what the
+// intended access is.
+void sub_80F1494(void)
+{
+ u8 *arr;
+ u8 *tileBuffer1 = &gUnknown_083DFEC8[0x800];
+ u8 *tileBuffer2 = &gUnknown_083DFEC8[0xA98];
+
+ if (gPokenavStructPtr->unkBC91 < 3)
+ {
+ gUnknown_020388B4 = gPokenavStructPtr->unkBC91 * 9 + gPokenavStructPtr->unkBC90;
+ gUnknown_020388B4 = gPokenavStructPtr->unkBC4C[gUnknown_020388B4];
+ AlignStringInMenuWindow(tileBuffer1, gRibbonDescriptions[gUnknown_020388B4][0], 128, 0);
+ AlignStringInMenuWindow(tileBuffer2, gRibbonDescriptions[gUnknown_020388B4][1], 128, 0);
+ }
+ else
+ {
+ gUnknown_020388B4 = gPokenavStructPtr->unkBC8E - gPokenavStructPtr->unkBC8F;
+ gUnknown_020388B4 = gPokenavStructPtr->unkBC4C[gUnknown_020388B4 + gPokenavStructPtr->unkBC90];
+
+ // FIXME!
+ arr = ((u8*)&gSaveBlock1);
+ asm("ldrh r1, [r5]\n\
+ add r0, r0, r1");
+ gUnknown_020388B4 = arr[0x30F7];
+ // The bug fix for this code is the following:
+ // gUnknown_020388B4 = gSaveBlock1.externalReservedData.giftRibbons[gUnknown_020388B4];
+ if (gUnknown_020388B4)
+ {
+ gUnknown_020388B4--;
+ AlignStringInMenuWindow(tileBuffer1, gGiftRibbonDescriptions[gUnknown_020388B4][0], 128, 0);
+ AlignStringInMenuWindow(tileBuffer2, gGiftRibbonDescriptions[gUnknown_020388B4][1], 128, 0);
+ }
+ else
+ {
+ AlignStringInMenuWindow(tileBuffer1, gEmptyString_81E72B0, 128, 0);
+ AlignStringInMenuWindow(tileBuffer2, gEmptyString_81E72B0, 128, 0);
+ }
+ }
+
+ Menu_PrintText(tileBuffer1, 12, 13);
+ Menu_PrintText(tileBuffer2, 12, 15);
+}
+
+void sub_80F15A8(void)
+{
+ u8 *buffer;
+ Menu_EraseWindowRect(12, 13, 27, 16);
+ buffer = StringCopy(gPokenavStructPtr->unk8788, gOtherText_Ribbons);
+ buffer[0] = CHAR_SPACE;
+ buffer++;
+ buffer = ConvertIntToDecimalStringN(
+ buffer,
+ gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].unk0,
+ STR_CONV_MODE_LEFT_ALIGN,
+ 2);
+ buffer[0] = EOS;
+ Menu_PrintText(gPokenavStructPtr->unk8788, 12, 13);
+}
+
+void sub_80F1614(void)
+{
+ gPokenavStructPtr->unk8764 = 0;
+}
+
+bool8 sub_80F162C(u8 arg0)
+{
+ switch (gPokenavStructPtr->unk8764)
+ {
+ case 0:
+ break;
+ case 1:
+ LZ77UnCompVram(gUnknown_08E9FF58, (void *)(VRAM + 0xE800));
+ break;
+ case 2:
+ DmaCopy16Defvars(3, gPokenavRibbonPokeView_Gfx, (void *)(VRAM + 0xE000), 0xE0);
+ break;
+ case 3:
+ if (!arg0)
+ LoadPalette(gUnknown_083E0124, 0xD0, 0x20);
+ else
+ LoadPalette(gUnknown_083E0144, 0xD0, 0x20);
+
+ gPokenavStructPtr->unk8766 = -80;
+ REG_BG0CNT = 0x1D0D;
+ gPokenavStructPtr->unk8764++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk8764++;
+ return TRUE;
+}
+
+bool8 sub_80F170C(void)
+{
+ gPokenavStructPtr->unk8766 += 0x10;
+ if (gPokenavStructPtr->unk8766 > 0)
+ gPokenavStructPtr->unk8766 = 0;
+
+ return gPokenavStructPtr->unk8766 != 0;
+}
+
+bool8 sub_80F173C(void)
+{
+ gPokenavStructPtr->unk8766 -= 0x10;
+ if (gPokenavStructPtr->unk8766 < -0x50)
+ gPokenavStructPtr->unk8766 = -0x50;
+
+ return gPokenavStructPtr->unk8766 != -0x50;
+}
+
+bool8 sub_80F1778(void)
+{
+ switch (gPokenavStructPtr->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gPokenavStructPtr->unkD162 = 2;
+ break;
+ case 1:
+ sub_80F1614();
+ break;
+ case 2:
+ if (sub_80F162C(0))
+ return TRUE;
+ break;
+ case 3:
+ LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)(VRAM + 0x5000));
+ break;
+ case 4:
+ LZ77UnCompVram(gUnknown_08E9AC4C, (void *)(VRAM + 0xF000));
+ LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
+ break;
+ case 5:
+ sub_8095C8C((void *)VRAM + 0xF000, 0, 13, gUnknown_083E01F4, 0, 0, 12, 4, 12);
+ break;
+ case 6:
+ LZ77UnCompVram(gUnknown_08E9FEB4, (void *)(VRAM + 0xB800));
+ break;
+ case 7:
+ LoadPalette(gUnknown_083E0254, 0x30, 0x20);
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2);
+ sub_80F01A4();
+ break;
+ case 8:
+ sub_80F01E0(gPokenavStructPtr->unk8fe9);
+ break;
+ case 9:
+ REG_BG3CNT = 0x1E03;
+ REG_BG2CNT = 0x1702;
+ REG_BLDCNT = 0x844;
+ REG_BLDALPHA = 0x40B;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unkD160++;
+ return TRUE;
+}
+
+void sub_80F1934(void)
+{
+ u8 *buffer = gPokenavStructPtr->unk8788;
+ if (gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].unk3_14)
+ {
+ u8 nature = GetNature(&gPlayerParty[sub_8137124(gPokenavStructPtr->unk87DC)]);
+ buffer = StringCopy(buffer, gOtherText_Nature2);
+ AlignStringInMenuWindow(buffer, gNatureNames[nature], 87, 0);
+ }
+ else
+ {
+ AlignStringInMenuWindow(buffer, gEmptyString_81E72B0, 87, 0);
+ }
+
+ Menu_PrintTextPixelCoords(gPokenavStructPtr->unk8788, 1, 112, 1);
+}
+
+void sub_80F19DC(u8 *text)
+{
+ while (text[0] != EOS)
+ {
+ if (text[0] == EXT_CTRL_CODE_BEGIN && text[1] == CHAR_SPACE)
+ {
+ text[0] = EOS;
+ break;
+ }
+
+ text++;
+ }
+}
+
+void sub_80F19FC(void)
+{
+ // FIXME r4/r5 swapped
+ register u8 *ptr asm("r5") = gUnknown_020388B0;
+ if (ptr[0] == 1)
+ {
+ const u8 *landmarkName = GetLandmarkName(
+ gPokenavStructPtr->regionMap.mapSectionId,
+ gPokenavStructPtr->regionMap.everGrandeCityArea,
+ ptr[1]);
+
+ if (landmarkName)
+ {
+ sub_8072A18(landmarkName, 0x70, 4 * (ptr[1] * 4 + 12), 0x78, 1);
+ if (++ptr[1] != 4)
+ return;
+ }
+
+ Menu_BlankWindowRect(14, ptr[1] * 2 + 6, 28, 15);
+ ptr[0] = 0;
+ }
+}
+
+void sub_80F1A74(void)
+{
+ gUnknown_020388B0[0] = 0;
+}
+
+void sub_80F1A80(void)
+{
+ gUnknown_020388B0[0] = 1;
+ gUnknown_020388B0[1] = 0;
+}
+
+void sub_80F1A90(void)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (gPokenavStructPtr->unk6DAC == 0)
+ while (sub_80F1AC4());
+}
+
+bool8 sub_80F1AC4(void)
+{
+ u16 i, j;
+
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ for (i = 0; i < 6; i++)
+ {
+ for (j = 0; j < 4; j++)
+ gPokenavStructPtr->unk320[i][j] = NULL;
+ }
+
+ gPokenavStructPtr->unk311 = 0;
+ break;
+ case 1:
+ LZ77UnCompWram(gPokenavMenuOptions_Gfx, gPokenavStructPtr->unk388);
+ break;
+ case 2:
+ LZ77UnCompWram(gPokenavConditionMenu_Gfx, gPokenavStructPtr->unk1788);
+ break;
+ case 3:
+ LZ77UnCompWram(gPokenavConditionSearch_Gfx, gPokenavStructPtr->unk2388);
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+
+void sub_80F1B8C(u8 arg0)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (gPokenavStructPtr->unk6DAC == 0)
+ while (sub_80F1BC8(arg0));
+}
+
+#ifdef NONMATCHING
+// very close, but for some reason, (i + 1) is being stored in sp[0x10]
+bool8 sub_80F1BC8(u8 arg0)
+{
+ u16 i, j;
+ u16 animNum;
+ u16 topOffset;
+ u16 height;
+ u16 middle;
+ u8 spriteId;
+
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ sub_80F2458(arg0);
+ break;
+ case 1:
+ sub_80F2514(arg0);
+ break;
+ case 2:
+ switch (arg0)
+ {
+ case 0:
+ topOffset = 42;
+ height = 20;
+ gPokenavStructPtr->unk30E = 5;
+ break;
+ case 1:
+ topOffset = 56;
+ height = 20;
+ gPokenavStructPtr->unk30E = 3;
+ break;
+ case 2:
+ topOffset = 40;
+ height = 16;
+ gPokenavStructPtr->unk30E = 6;
+ break;
+ default:
+ return FALSE;
+ }
+
+ animNum = 0;
+ for (i = 0; i < gPokenavStructPtr->unk30E; i++)
+ {
+ middle = (height * i) + topOffset - 8;
+ gPokenavStructPtr->unk314[i] = (middle << 8) | (middle + 0x11);
+ if (!arg0)
+ {
+ if (gPokenavStructPtr->unk6DB2[i] == 0)
+ {
+ for (j = 0; j < 4; j++)
+ gPokenavStructPtr->unk320[i][j] = NULL;
+ continue;
+ }
+ else
+ {
+ animNum = (gPokenavStructPtr->unk6DB2[i] - 1) * 4;
+ }
+ }
+
+ for (j = 0; j < 4; j++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4454, j * 32 + 256, (height * i) + topOffset, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk320[i][j] = &gSprites[spriteId];
+ gPokenavStructPtr->unk320[i][j]->data[0] = i;
+ gPokenavStructPtr->unk320[i][j]->data[1] = j;
+ gPokenavStructPtr->unk320[i][j]->data[2] = j * 32 + 152;
+ gPokenavStructPtr->unk320[i][j]->data[3] = j * 32 + 256;
+ StartSpriteAnim(gPokenavStructPtr->unk320[i][j], animNum++);
+
+ if ((arg0 == 2 || arg0 == 0) && i > 2)
+ gPokenavStructPtr->unk320[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(0x1);
+ }
+ }
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+#else
+NAKED
+bool8 sub_80F1BC8(u8 arg0)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0xC\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ ldr r1, _080F1BF4 @ =gPokenavStructPtr\n\
+ ldr r2, [r1]\n\
+ ldr r3, _080F1BF8 @ =0x00000306\n\
+ adds r0, r2, r3\n\
+ ldrh r0, [r0]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0x1\n\
+ beq _080F1C0A\n\
+ cmp r0, 0x1\n\
+ bgt _080F1BFC\n\
+ cmp r0, 0\n\
+ beq _080F1C02\n\
+ b _080F1DC4\n\
+ .align 2, 0\n\
+_080F1BF4: .4byte gPokenavStructPtr\n\
+_080F1BF8: .4byte 0x00000306\n\
+_080F1BFC:\n\
+ cmp r0, 0x2\n\
+ beq _080F1C12\n\
+ b _080F1DC4\n\
+_080F1C02:\n\
+ mov r0, r9\n\
+ bl sub_80F2458\n\
+ b _080F1DC8\n\
+_080F1C0A:\n\
+ mov r0, r9\n\
+ bl sub_80F2514\n\
+ b _080F1DC8\n\
+_080F1C12:\n\
+ mov r4, r9\n\
+ cmp r4, 0x1\n\
+ beq _080F1C40\n\
+ cmp r4, 0x1\n\
+ bgt _080F1C22\n\
+ cmp r4, 0\n\
+ beq _080F1C2A\n\
+ b _080F1DC4\n\
+_080F1C22:\n\
+ mov r5, r9\n\
+ cmp r5, 0x2\n\
+ beq _080F1C54\n\
+ b _080F1DC4\n\
+_080F1C2A:\n\
+ movs r0, 0x2A\n\
+ str r0, [sp, 0x4]\n\
+ movs r1, 0x14\n\
+ str r1, [sp, 0x8]\n\
+ ldr r4, _080F1C3C @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x5\n\
+ b _080F1C62\n\
+ .align 2, 0\n\
+_080F1C3C: .4byte 0x0000030e\n\
+_080F1C40:\n\
+ movs r5, 0x38\n\
+ str r5, [sp, 0x4]\n\
+ movs r0, 0x14\n\
+ str r0, [sp, 0x8]\n\
+ ldr r4, _080F1C50 @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x3\n\
+ b _080F1C62\n\
+ .align 2, 0\n\
+_080F1C50: .4byte 0x0000030e\n\
+_080F1C54:\n\
+ movs r5, 0x28\n\
+ str r5, [sp, 0x4]\n\
+ movs r0, 0x10\n\
+ str r0, [sp, 0x8]\n\
+ ldr r4, _080F1CDC @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x6\n\
+_080F1C62:\n\
+ strb r0, [r1]\n\
+ movs r5, 0\n\
+ str r5, [sp]\n\
+ mov r8, r5\n\
+ adds r1, r3, 0\n\
+ ldr r0, [r1]\n\
+ ldr r2, _080F1CDC @ =0x0000030e\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r8, r0\n\
+ blt _080F1C7E\n\
+ b _080F1DC8\n\
+_080F1C7E:\n\
+ ldr r4, [sp, 0x8]\n\
+ mov r3, r8\n\
+ muls r3, r4\n\
+ ldr r5, [sp, 0x4]\n\
+ adds r0, r5, r3\n\
+ subs r0, 0x8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r4, [r1]\n\
+ mov r2, r8\n\
+ lsls r1, r2, 1\n\
+ movs r5, 0xC5\n\
+ lsls r5, 2\n\
+ adds r2, r4, r5\n\
+ adds r2, r1\n\
+ lsls r1, r0, 8\n\
+ adds r0, 0x11\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ mov r0, r9\n\
+ cmp r0, 0\n\
+ bne _080F1CF2\n\
+ ldr r1, _080F1CE0 @ =0x00006db2\n\
+ adds r0, r4, r1\n\
+ mov r2, r8\n\
+ adds r1, r0, r2\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _080F1CE8\n\
+ movs r5, 0\n\
+ ldr r0, _080F1CE4 @ =gPokenavStructPtr\n\
+ ldr r0, [r0]\n\
+ lsls r2, 4\n\
+ movs r3, 0xC8\n\
+ lsls r3, 2\n\
+ adds r1, r0, r3\n\
+ movs r3, 0\n\
+_080F1CC8:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r2\n\
+ adds r0, r1, r0\n\
+ str r3, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x3\n\
+ bls _080F1CC8\n\
+ b _080F1D92\n\
+ .align 2, 0\n\
+_080F1CDC: .4byte 0x0000030e\n\
+_080F1CE0: .4byte 0x00006db2\n\
+_080F1CE4: .4byte gPokenavStructPtr\n\
+_080F1CE8:\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0x1\n\
+ lsls r0, 18\n\
+ lsrs r0, 16\n\
+ str r0, [sp]\n\
+_080F1CF2:\n\
+ movs r5, 0\n\
+ ldr r4, [sp, 0x4]\n\
+ adds r0, r4, r3\n\
+ lsls r0, 16\n\
+ mov r10, r0\n\
+_080F1CFC:\n\
+ lsls r6, r5, 5\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r7, r6, r0\n\
+ lsls r1, r7, 16\n\
+ asrs r1, 16\n\
+ ldr r0, _080F1DB4 @ =gSpriteTemplate_83E4454\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0x40\n\
+ beq _080F1DC4\n\
+ ldr r0, _080F1DB8 @ =gPokenavStructPtr\n\
+ ldr r2, [r0]\n\
+ lsls r1, r5, 2\n\
+ mov r4, r8\n\
+ lsls r0, r4, 4\n\
+ adds r1, r0\n\
+ movs r0, 0xC8\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ adds r4, r2, r1\n\
+ lsls r0, r3, 4\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ ldr r1, _080F1DBC @ =gSprites\n\
+ adds r0, r1\n\
+ str r0, [r4]\n\
+ mov r1, r8\n\
+ strh r1, [r0, 0x2E]\n\
+ ldr r0, [r4]\n\
+ strh r5, [r0, 0x30]\n\
+ ldr r1, [r4]\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x98\n\
+ strh r0, [r1, 0x32]\n\
+ ldr r0, [r4]\n\
+ strh r7, [r0, 0x34]\n\
+ ldr r0, [r4]\n\
+ ldr r1, [sp]\n\
+ adds r2, r1, 0x1\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ str r2, [sp]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ bl StartSpriteAnim\n\
+ mov r2, r9\n\
+ cmp r2, 0x2\n\
+ beq _080F1D6E\n\
+ cmp r2, 0\n\
+ bne _080F1D88\n\
+_080F1D6E:\n\
+ mov r3, r8\n\
+ cmp r3, 0x2\n\
+ bls _080F1D88\n\
+ movs r0, 0x1\n\
+ bl IndexOfSpritePaletteTag\n\
+ ldr r3, [r4]\n\
+ lsls r0, 4\n\
+ ldrb r2, [r3, 0x5]\n\
+ movs r1, 0xF\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0x5]\n\
+_080F1D88:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x3\n\
+ bls _080F1CFC\n\
+_080F1D92:\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ ldr r1, _080F1DB8 @ =gPokenavStructPtr\n\
+ ldr r0, [r1]\n\
+ ldr r4, _080F1DC0 @ =0x0000030e\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r8, r0\n\
+ bge _080F1DB0\n\
+ b _080F1C7E\n\
+_080F1DB0:\n\
+ b _080F1DC8\n\
+ .align 2, 0\n\
+_080F1DB4: .4byte gSpriteTemplate_83E4454\n\
+_080F1DB8: .4byte gPokenavStructPtr\n\
+_080F1DBC: .4byte gSprites\n\
+_080F1DC0: .4byte 0x0000030e\n\
+_080F1DC4:\n\
+ movs r0, 0\n\
+ b _080F1DD8\n\
+_080F1DC8:\n\
+ ldr r0, _080F1DE8 @ =gPokenavStructPtr\n\
+ ldr r1, [r0]\n\
+ ldr r5, _080F1DEC @ =0x00000306\n\
+ adds r1, r5\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+ movs r0, 0x1\n\
+_080F1DD8:\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080F1DE8: .4byte gPokenavStructPtr\n\
+_080F1DEC: .4byte 0x00000306\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80F1DF0(void)
+{
+ u16 i, j;
+ for (i = 0; i < gPokenavStructPtr->unk30E; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gPokenavStructPtr->unk320[i][j])
+ gPokenavStructPtr->unk320[i][j]->callback = sub_80F2218;
+ }
+ }
+
+ PlaySE(SE_WIN_OPEN);
+}
+
+bool8 sub_80F1E50(void)
+{
+ if (sub_80F22F8())
+ {
+ sub_80F2108();
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+bool8 sub_80F1E6C(void)
+{
+ return !sub_80F22F8();
+}
+
+void sub_80F1E84(void)
+{
+ u16 i, j;
+
+ gPokenavStructPtr->unk30F = 0;
+ sub_80F2148();
+ for (i = 0; i < gPokenavStructPtr->unk30E; i++)
+ {
+ if (i != gPokenavStructPtr->unk6DAD)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gPokenavStructPtr->unk320[i][j])
+ gPokenavStructPtr->unk320[i][j]->callback = sub_80F2240;
+ }
+ }
+ }
+}
+
+bool8 sub_80F1F10(void)
+{
+ u16 j;
+
+ switch (gPokenavStructPtr->unk30F)
+ {
+ case 0:
+ if (sub_80F2360())
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gPokenavStructPtr->unk320[gPokenavStructPtr->unk6DAD][j];
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ sprite->affineAnims = gSpriteAffineAnimTable_83E4450;
+ InitSpriteAffineAnim(sprite);
+ sprite->data[4] = j * 4 - 6;
+ sprite->data[4] /= 2;
+ sprite->data[5] = sprite->data[4] * 8;
+ sprite->callback = sub_80F2240;
+ }
+
+ sub_80F2170();
+ gPokenavStructPtr->unk30F++;
+ }
+ break;
+ case 1:
+ if (sub_80F23C8())
+ {
+ sub_80F21F8();
+ FreeSpriteTilesByTag(0x0);
+ FreeSpritePaletteByTag(0x0);
+ FreeSpritePaletteByTag(0x1);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+void sub_80F1FF0(void)
+{
+ if (gPokenavStructPtr->unk311 == 1)
+ {
+ REG_WIN0V = gPokenavStructPtr->unk314[gPokenavStructPtr->unk6DAD];
+ REG_BLDY = gSineTable[gPokenavStructPtr->unk312] >> 5;
+ gPokenavStructPtr->unk312 += 3;
+ gPokenavStructPtr->unk312 &= 0x7F;
+ }
+ else if (gPokenavStructPtr->unk311 == 2)
+ {
+ REG_BLDALPHA = gUnknown_083E42F8[gPokenavStructPtr->unk312];
+ if (gPokenavStructPtr->unk312 < 15)
+ gPokenavStructPtr->unk312++;
+ }
+}
+
+void sub_80F208C(void)
+{
+ sub_80F2148();
+}
+
+void sub_80F2098(void)
+{
+ REG_WIN0H = 0x77F0;
+ REG_WIN0V = gPokenavStructPtr->unk314[gPokenavStructPtr->unk6DAD];
+ REG_WININ = 0x3F;
+ REG_WINOUT = 0x1F;
+ REG_DISPCNT |= DISPCNT_WIN0_ON;
+}
+
+void sub_80F20F4(void)
+{
+ REG_DISPCNT &= ~DISPCNT_WIN0_ON;
+}
+
+void sub_80F2108(void)
+{
+ if (!gPokenavStructPtr->unk311)
+ {
+ gPokenavStructPtr->unk311 = 1;
+ gPokenavStructPtr->unk312 = 0;
+ REG_BLDCNT = 0x90;
+ REG_BLDY = 0;
+ sub_80F2098();
+ }
+}
+
+void sub_80F2148(void)
+{
+ gPokenavStructPtr->unk311 = 0;
+ REG_BLDCNT = 0;
+ sub_80F20F4();
+}
+
+void sub_80F2170(void)
+{
+ u16 j;
+
+ if (!gPokenavStructPtr->unk311)
+ {
+ sub_80F20F4();
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gPokenavStructPtr->unk320[gPokenavStructPtr->unk6DAD][j];
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+
+ gPokenavStructPtr->unk311 = 2;
+ gPokenavStructPtr->unk312 = 0;
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x10;
+ }
+}
+
+void sub_80F21F8()
+{
+ gPokenavStructPtr->unk311 = 0;
+ REG_BLDCNT = 0;
+}
+
+void sub_80F2218(struct Sprite *sprite)
+{
+ sprite->pos1.x -= 8;
+ if (sprite->pos1.x <= sprite->data[2])
+ {
+ sprite->pos1.x = sprite->data[2];
+ sprite->callback = sub_80F22B0;
+ }
+}
+
+void sub_80F2240(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gPokenavStructPtr->unk6DAD)
+ {
+ if (sprite->data[5])
+ {
+ sprite->pos1.x += sprite->data[4];
+ sprite->data[5] -= sprite->data[4];
+ }
+
+ if (sprite->affineAnimEnded)
+ sub_80F240C(sprite);
+ }
+ else
+ {
+ sprite->pos1.x += 8;
+ if (sprite->pos1.x >= sprite->data[3])
+ sub_80F240C(sprite);
+ }
+}
+
+void sub_80F22B0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gPokenavStructPtr->unk6DAD)
+ {
+ if (sprite->pos2.x > -16)
+ sprite->pos2.x -= 4;
+ }
+ else
+ {
+ if (sprite->pos2.x < 0)
+ sprite->pos2.x += 4;
+ }
+}
+
+bool8 sub_80F22F8(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < gPokenavStructPtr->unk6DAE; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gPokenavStructPtr->unk320[i][j];
+ if (!sprite)
+ return TRUE;
+
+ if (sprite->pos2.x != 0 && sprite->pos2.x != -16)
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80F2360(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < gPokenavStructPtr->unk30E; i++)
+ {
+ if (i != gPokenavStructPtr->unk6DAD)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gPokenavStructPtr->unk320[i][j];
+ if (sprite)
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80F23C8(void)
+{
+ u16 j;
+
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gPokenavStructPtr->unk320[gPokenavStructPtr->unk6DAD][j];
+ if (sprite)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80F240C(struct Sprite *sprite)
+{
+ gPokenavStructPtr->unk320[sprite->data[0]][sprite->data[1]] = NULL;
+ if (sprite->affineAnimEnded)
+ FreeOamMatrix(sprite->oam.matrixNum);
+
+ DestroySprite(sprite);
+}
+
+void sub_80F2458(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0:
+ gPokenavStructPtr->unk380.data = gPokenavStructPtr->unk388;
+ gPokenavStructPtr->unk380.size = sizeof(gPokenavStructPtr->unk388);
+ gPokenavStructPtr->unk380.tag = 0x0;
+ break;
+ case 1:
+ gPokenavStructPtr->unk380.data = gPokenavStructPtr->unk1788;
+ gPokenavStructPtr->unk380.size = sizeof(gPokenavStructPtr->unk1788);
+ gPokenavStructPtr->unk380.tag = 0x0;
+ break;
+ case 2:
+ gPokenavStructPtr->unk380.data = gPokenavStructPtr->unk2388;
+ gPokenavStructPtr->unk380.size = sizeof(gPokenavStructPtr->unk2388);
+ gPokenavStructPtr->unk380.tag = 0x0;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpriteSheet(&gPokenavStructPtr->unk380);
+}
+
+void sub_80F2514(u8 arg0)
+{
+ struct SpritePalette spritePalette;
+
+ switch (arg0)
+ {
+ case 0:
+ spritePalette.data = gPokenavMenuOptions1_Pal;
+ spritePalette.tag = 0;
+ LoadSpritePalette(&spritePalette);
+ spritePalette.data = gPokenavMenuOptions2_Pal;
+ spritePalette.tag = 0x1;
+ break;
+ case 1:
+ spritePalette.data = gPokenavConditionMenu_Pal;
+ spritePalette.tag = 0x0;
+ break;
+ case 2:
+ spritePalette.data = gPokenavCondition6_Pal;
+ spritePalette.tag = 0;
+ LoadSpritePalette(&spritePalette);
+ spritePalette.data = gPokenavCondition7_Pal;
+ spritePalette.tag = 0x1;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpritePalette(&spritePalette);
+}
+
+void sub_80F2598(void)
+{
+ u8 spriteId;
+
+ gPokenavStructPtr->unk6D9C = NULL;
+ if (DoesSomeoneWantRematchIn(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE)
+ {
+ LoadSpriteSheet(&gSpriteSheet_PokenavBlueLight);
+ LoadSpritePalette(&gSpritePalette_PokenavBlueLight);
+ spriteId = CreateSprite(&gSpriteTemplate_83E4484, 12, 96, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk6D9C = &gSprites[spriteId];
+ }
+ else
+ {
+ FreeSpriteTilesByTag(0x19);
+ FreeSpritePaletteByTag(0x11);
+ }
+ }
+}
+
+void sub_80F2620(void)
+{
+ if (gPokenavStructPtr->unk6D9C)
+ {
+ DestroySprite(gPokenavStructPtr->unk6D9C);
+ FreeSpriteTilesByTag(0x19);
+ FreeSpritePaletteByTag(0x11);
+ gPokenavStructPtr->unk6D9C = NULL;
+ }
+}
+
+void sub_80F2654(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 6)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+}
+
+void sub_80F2688(void)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while(sub_80F26BC());
+}
+
+bool8 sub_80F26BC(void)
+{
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gPokenavMainMenu_Gfx, gPokenavStructPtr->unk3B98);
+ break;
+ case 1:
+ LZ77UnCompWram(gPokenavConditionMenuHeader_Gfx, gPokenavStructPtr->unk4198);
+ break;
+ case 2:
+ LZ77UnCompWram(gPokenavRibbonsHeader_Gfx, gPokenavStructPtr->unk4D98);
+ break;
+ case 3:
+ LZ77UnCompWram(gPokenavHoennMapHeader_Gfx, gPokenavStructPtr->unk5398);
+ break;
+ case 4:
+ LZ77UnCompWram(gPokenavConditionMenuOptions_Gfx, gPokenavStructPtr->unk5F98);
+ break;
+ case 5:
+ LZ77UnCompWram(gPokenavConditionMenuOptions2_Gfx, gPokenavStructPtr->unk6798);
+ break;
+ case 6:
+ LZ77UnCompWram(gPokenavTrainersEyesHeader_Gfx, gPokenavStructPtr->unk4798);
+ break;
+ case 7:
+ LoadSpritePalettes(gUnknown_083E449C);
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+
+void sub_80F27DC(u8 arg0)
+{
+ struct SpriteSheet spriteSheet;
+
+ switch (arg0)
+ {
+ case 0:
+ spriteSheet.data = gPokenavStructPtr->unk3B98;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk3B98);
+ spriteSheet.tag = 0x1;
+ break;
+ case 1:
+ spriteSheet.data = gPokenavStructPtr->unk4198;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk4198);
+ spriteSheet.tag = 0x1;
+ break;
+ case 3:
+ spriteSheet.data = gPokenavStructPtr->unk4798;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk4798);
+ spriteSheet.tag = 0x1;
+ break;
+ case 2:
+ spriteSheet.data = gPokenavStructPtr->unk4D98;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk4D98);
+ spriteSheet.tag = 0x1;
+ break;
+ case 4:
+ spriteSheet.data = gPokenavStructPtr->unk5398;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk5398);
+ spriteSheet.tag = 0x1;
+ break;
+ case 5:
+ spriteSheet.data = gPokenavStructPtr->unk5F98;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk5F98);
+ spriteSheet.tag = 0x2;
+ break;
+ case 6:
+ spriteSheet.data = gPokenavStructPtr->unk6198;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk6198);
+ spriteSheet.tag = 0x2;
+ break;
+ case 8:
+ spriteSheet.data = gPokenavStructPtr->unk6398;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk6398);
+ spriteSheet.tag = 0x2;
+ break;
+ case 9:
+ spriteSheet.data = gPokenavStructPtr->unk6598;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk6598);
+ spriteSheet.tag = 0x2;
+ break;
+ case 11:
+ spriteSheet.data = gPokenavStructPtr->unk6998;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk6998);
+ spriteSheet.tag = 0x2;
+ break;
+ case 10:
+ spriteSheet.data = gPokenavStructPtr->unk6798;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk6798);
+ spriteSheet.tag = 0x2;
+ break;
+ case 7:
+ spriteSheet.data = gPokenavStructPtr->unk6B98;
+ spriteSheet.size = sizeof(gPokenavStructPtr->unk6B98);
+ spriteSheet.tag = 0x2;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpriteSheet(&spriteSheet);
+}
+
+void sub_80F29B8(u8 arg0)
+{
+ u16 i;
+ s16 deltaX, endX, initialX;
+ u16 y;
+ s16 width;
+ struct Sprite **sprites;
+ const struct SpriteTemplate *spriteTemplate;
+ u8 spriteId;
+
+ spriteTemplate = NULL;
+ switch (arg0)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ initialX = -96;
+ y = 49 - gPokenavStructPtr->unk030C;
+ deltaX = 8;
+ endX = 32;
+ width = 64;
+ sprites = gPokenavStructPtr->unk3B88;
+ spriteTemplate = arg0 != 3 ? &gSpriteTemplate_83E44E0 : &gSpriteTemplate_83E44F8;
+ break;
+ case 4:
+ initialX = 272;
+ y = 49 - gPokenavStructPtr->unk030C;
+ deltaX = -8;
+ endX = 152;
+ width = 64;
+ spriteTemplate = &gSpriteTemplate_83E44E0;
+ sprites = gPokenavStructPtr->unk3B88;
+ break;
+ case 5:
+ case 6:
+ case 8:
+ case 9:
+ spriteTemplate = &gSpriteTemplate_83E4530;
+ // fall through
+ case 7:
+ case 10:
+ case 11:
+ if (spriteTemplate == NULL)
+ spriteTemplate = &gSpriteTemplate_83E4548;
+
+ initialX = -96;
+ y = 68 - gPokenavStructPtr->unk030C;
+ deltaX = 8;
+ endX = 16;
+ width = 32;
+ sprites = gPokenavStructPtr->unk3B90;
+ break;
+ default:
+ return;
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(spriteTemplate, i * width + initialX, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = deltaX;
+ gSprites[spriteId].data[1] = endX + i * width;
+ gSprites[spriteId].data[2] = i;
+ gSprites[spriteId].data[3] = arg0;
+ if (arg0 == 4 && i == 1)
+ {
+ int anim = !gPokenavStructPtr->regionMap.zoomed ? 1 : 2;
+ StartSpriteAnim(&gSprites[spriteId], anim);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+
+ if (arg0 < 4 && i == 1)
+ {
+ gSprites[spriteId].oam.shape = ST_OAM_SQUARE;
+ gSprites[spriteId].oam.size = 2;
+ }
+
+ sprites[i] = &gSprites[spriteId];
+ }
+ }
+}
+
+#define sEndX sprite->data[1]
+void sub_80F2BBC(struct Sprite *sprite)
+{
+ s16 x = sprite->pos1.x;
+ sprite->pos1.x += sprite->data[0];
+ if ((x <= sEndX && sprite->pos1.x >= sEndX) || (x >= sEndX && sprite->pos1.x <= sEndX))
+ {
+ sprite->pos1.x = sEndX;
+ if (sprite->data[3] == 4 && sprite->data[2] == 1)
+ sprite->callback = sub_80F2C58;
+ else
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+#undef sEndX
+
+void sub_80F2C14(struct Sprite *sprite)
+{
+ u16 right;
+
+ sprite->pos1.x -= sprite->data[0];
+ right = sprite->pos1.x + 32;
+ if (right > 304)
+ {
+ if (sprite->data[2] == 1)
+ {
+ if (sprite->data[3] < 5)
+ FreeSpriteTilesByTag(0x1);
+ else
+ FreeSpriteTilesByTag(0x2);
+ }
+
+ DestroySprite(sprite);
+ }
+}
+
+void sub_80F2C58(struct Sprite *sprite)
+{
+ int anim = !gPokenavStructPtr->regionMap.zoomed ? 1 : 2;
+ StartSpriteAnim(sprite, anim);
+}
+
+void sub_80F2C80(u8 arg0)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F2CBC(arg0));
+}
+
+bool8 sub_80F2CBC(u8 arg0)
+{
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ sub_80F27DC(arg0);
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+ case 1:
+ sub_80F29B8(arg0);
+ gPokenavStructPtr->unk306++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+}
+
+void sub_80F2D04(u8 arg0)
+{
+ u16 i;
+
+ if (arg0 < 5)
+ {
+ for (i = 0; i < 2; i++)
+ gPokenavStructPtr->unk3B88[i]->callback = sub_80F2C14;
+ }
+ else
+ {
+ for (i = 0; i < 2; i++)
+ gPokenavStructPtr->unk3B90[i]->callback = sub_80F2C14;
+ }
+}
+
+void sub_80F2D6C(u8 arg0)
+{
+ u16 i;
+
+ if (arg0 < 5)
+ {
+ FreeSpriteTilesByTag(0x1);
+ for (i = 0; i < 2; i++)
+ DestroySprite(gPokenavStructPtr->unk3B88[i]);
+ }
+ else
+ {
+ FreeSpriteTilesByTag(0x2);
+ for (i = 0; i < 2; i++)
+ DestroySprite(gPokenavStructPtr->unk3B90[i]);
+ }
+}
+
+void sub_80F2DD8(void)
+{
+ CreateRegionMapCursor(7, 7);
+ CreateRegionMapPlayerIcon(8, 8);
+ sub_80FBF94();
+}
+
+void sub_80F2DF4(void)
+{
+ FreeRegionMapIconResources();
+}
+
+void sub_80F2E00(struct Sprite *sprite)
+{
+ sprite->pos1.x = gPokenavStructPtr->unk8766 + 38;
+}
+
+void sub_80F2E18(u8 arg0)
+{
+ u8 spriteId;
+ struct SpriteTemplate spriteTemplate;
+ struct SpritePalette spritePalette;
+ struct SpriteSheet spriteSheet;
+
+ if (!gPokenavStructPtr->unk8768)
+ {
+ spriteSheet = gUnknown_083E4568;
+ spriteTemplate = gSpriteTemplate_83E4570;
+ spritePalette = gUnknown_083E4588;
+
+ spriteSheet.data = gPokenavStructPtr->unkD1E4[arg0];
+ spritePalette.data = gPokenavStructPtr->unk0[arg0];
+ gPokenavStructPtr->unkD1DC = LoadSpritePalette(&spritePalette);
+ gPokenavStructPtr->unkD1DE = LoadSpriteSheet(&spriteSheet);
+
+ spriteId = CreateSprite(&spriteTemplate, 38, 104, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gPokenavStructPtr->unk8768 = NULL;
+ }
+ else
+ {
+ gPokenavStructPtr->unk8768 = &gSprites[spriteId];
+ gPokenavStructPtr->unkD1E0 = (void *)(VRAM + 0x10000) + gPokenavStructPtr->unkD1DE * 32;
+ gPokenavStructPtr->unkD1DC = gPokenavStructPtr->unkD1DC * 16 + 0x100;
+ }
+ }
+ else
+ {
+ DmaCopy16Defvars(3, gPokenavStructPtr->unkD1E4[arg0], gPokenavStructPtr->unkD1E0, 0x800);
+ LoadPalette(gPokenavStructPtr->unk0[arg0], gPokenavStructPtr->unkD1DC, 0x20);
+ }
+}
+
+void sub_80F2F48(void)
+{
+ if (gPokenavStructPtr->unk8768)
+ {
+ DestroySprite(gPokenavStructPtr->unk8768);
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gPokenavStructPtr->unk8768 = NULL;
+ }
+}
+
+void sub_80F2F7C(u8 arg0)
+{
+ sub_80F2E18(arg0);
+ gPokenavStructPtr->unkCED0 = gPokenavStructPtr->unk8768;
+ gPokenavStructPtr->unkCED0->callback = sub_80F2FEC;
+}
+
+void sub_80F2FB0(void)
+{
+ if (gPokenavStructPtr->unkCED0)
+ {
+ DestroySprite(gPokenavStructPtr->unkCED0);
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gPokenavStructPtr->unkCED0 = NULL;
+ gPokenavStructPtr->unk8768 = NULL;
+ }
+}
+
+void sub_80F2FEC(struct Sprite *sprite)
+{
+ sprite->pos1.x = gPokenavStructPtr->unkD15A + 40;
+ sprite->pos1.y = 104;
+}
+
+void sub_80F3008(u8 arg0)
+{
+ u16 i;
+ u8 spriteId;
+ struct SpritePalette spritePalette;
+ struct SpriteSheet spriteSheets[3];
+
+ memcpy(spriteSheets, gUnknown_083E4590, sizeof(gUnknown_083E4590));
+ spritePalette = gUnknown_083E45A8;
+ switch (arg0)
+ {
+ case 1:
+ case 2:
+ spritePalette.data = gUnknown_08E9F988;
+ break;
+ }
+
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalette(&spritePalette);
+ spriteId = CreateSprite(&gSpriteTemplate_83E45B8, 95, 0, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk87CC = NULL;
+ }
+ else
+ {
+ gPokenavStructPtr->unk87CC = &gSprites[spriteId];
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E45F0, 168, i * 128 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk87D0[i] = &gSprites[spriteId];
+ gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[2] = i == 0 ? -1 : 1;
+ gSprites[spriteId].data[3] = i;
+ gSprites[spriteId].data[4] = 1;
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+ else
+ {
+ gPokenavStructPtr->unk87D0[i] = NULL;
+ }
+ }
+ }
+}
+
+void sub_80F3130(void)
+{
+ u16 i;
+
+ if (gPokenavStructPtr->unk87CC)
+ {
+ DestroySprite(gPokenavStructPtr->unk87CC);
+ FreeSpriteTilesByTag(0x9);
+ FreeSpritePaletteByTag(0x9);
+ gPokenavStructPtr->unk87CC = NULL;
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gPokenavStructPtr->unk87D0[i])
+ {
+ DestroySprite(gPokenavStructPtr->unk87D0[i]);
+ gPokenavStructPtr->unk87D0[i] = NULL;
+ }
+ }
+
+ FreeSpriteTilesByTag(0xA);
+}
+
+void sub_80F3190(struct Sprite *sprite)
+{
+ sprite->pos1.y = gPokenavStructPtr->unk876C * 16 + 16;
+}
+
+void sub_80F31AC(struct Sprite *sprite)
+{
+ if (gPokenavStructPtr->unk87C9)
+ {
+ if (sprite->data[4])
+ {
+ if (!sprite->data[3])
+ sprite->invisible = gPokenavStructPtr->unk8770 == 0;
+ else
+ sprite->invisible = gPokenavStructPtr->unk8772 == gPokenavStructPtr->unk8774;
+
+ sprite->data[4] = 0;
+ }
+
+ if (++sprite->data[0] > 4)
+ {
+ sprite->data[0] = 0;
+ if (++sprite->data[1] < 5)
+ {
+ sprite->pos2.y += sprite->data[2];
+ }
+ else
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ }
+ }
+ }
+}
+
+void sub_80F3264(void)
+{
+ u16 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gPokenavStructPtr->unk87D0[i])
+ gPokenavStructPtr->unk87D0[i]->data[4] = 1;
+ }
+}
+
+void sub_80F3294(u8 arg0)
+{
+ gPokenavStructPtr->unk87CC->invisible = arg0;
+ if (gPokenavStructPtr->unk87C9)
+ {
+ if (arg0 == 1)
+ {
+ gPokenavStructPtr->unk87D0[0]->invisible = arg0;
+ gPokenavStructPtr->unk87D0[1]->invisible = arg0;
+ }
+ else
+ {
+ gPokenavStructPtr->unk87D0[0]->data[4] = 1;
+ gPokenavStructPtr->unk87D0[1]->data[4] = 1;
+ }
+ }
+}
+
+void sub_80F3328(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gPokenavStructPtr->unk87DC)
+ StartSpriteAnim(sprite, 0);
+ else
+ StartSpriteAnim(sprite, 1);
+}
+
+void sub_80F3360(struct Sprite *sprite)
+{
+ if (gPokenavStructPtr->unk87DC == gPokenavStructPtr->unk87DA - 1)
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x4);
+ else
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x5);
+}
+
+void sub_80F33A8(void)
+{
+ u16 i;
+ u8 spriteId;
+ struct SpriteSheet spriteSheets[4];
+ struct SpritePalette spritePalettes[3];
+ struct SpriteTemplate spriteTemplate;
+
+ memcpy(spriteSheets, gUnknown_083E4628, sizeof(gUnknown_083E4628));
+ memcpy(spritePalettes, gUnknown_083E4648, sizeof(gUnknown_083E4648));
+ spriteTemplate = gSpriteTemplate_83E4660;
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalettes(spritePalettes);
+
+ for (i = 0; i < gPokenavStructPtr->unk87DA - 1; i++)
+ {
+ spriteId = CreateSprite(&spriteTemplate, 226, i * 20 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk87E4[i] = &gSprites[spriteId];
+ gPokenavStructPtr->unk87E4[i]->data[0] = i;
+ }
+ else
+ {
+ gPokenavStructPtr->unk87E4[i] = NULL;
+ }
+ }
+
+ spriteTemplate.tileTag = 0x4;
+ spriteTemplate.callback = SpriteCallbackDummy;
+ for (; i < 6; i++)
+ {
+ spriteId = CreateSprite(&spriteTemplate, 230, i * 20 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk87E4[i] = &gSprites[spriteId];
+ gPokenavStructPtr->unk87E4[i]->oam.size = 0;
+ }
+ else
+ {
+ gPokenavStructPtr->unk87E4[i] = NULL;
+ }
+ }
+
+ spriteTemplate.tileTag = 0x5;
+ spriteTemplate.callback = sub_80F3360;
+ spriteId = CreateSprite(&spriteTemplate, 222, i * 20 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk87E4[i] = &gSprites[spriteId];
+ gPokenavStructPtr->unk87E4[i]->oam.shape = ST_OAM_H_RECTANGLE;
+ gPokenavStructPtr->unk87E4[i]->oam.size = 2;
+ }
+ else
+ {
+ gPokenavStructPtr->unk87E4[i] = NULL;
+ }
+}
+
+void sub_80F357C(void)
+{
+ u16 i;
+
+ for (i = 0; i < 7; i++)
+ {
+ if (gPokenavStructPtr->unk87E4[i])
+ {
+ DestroySprite(gPokenavStructPtr->unk87E4[i]);
+ gPokenavStructPtr->unk87E4[i] = NULL;
+ }
+ }
+}
+
+void sub_80F35B4(void)
+{
+ struct Sprite *sprite;
+
+ gPokenavStructPtr->unk76B0.baseTileTag = 0x1C;
+ gPokenavStructPtr->unk76B0.basePaletteTag = 0x13;
+ sub_80F727C(&gPokenavStructPtr->unk76B0);
+ sub_80F7404();
+ sprite = sub_80F7920(27, 21, gUnknown_083E4678);
+ sprite->oam.priority = 3;
+ sprite->pos1.x = 192;
+ sprite->pos1.y = 32;
+ sprite->callback = sub_80F363C;
+ gPokenavStructPtr->unk76AC = sprite;
+}
+
+void sub_80F3614(void)
+{
+ DestroySprite(gPokenavStructPtr->unk76AC);
+ FreeSpriteTilesByTag(0x1B);
+ FreeSpritePaletteByTag(0x15);
+}
+
+void sub_80F363C(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gPokenavStructPtr->unk8934[gPokenavStructPtr->unk8fe9]);
+}
+
+void sub_80F3668(void)
+{
+ sub_80F7418(gPokenavStructPtr->unk8934[gPokenavStructPtr->unk8fe9], 176, 32);
+}
+
+void sub_80F3698(void)
+{
+ struct UnkUsePokeblockSub *var0 = &gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC];
+ gPokenavStructPtr->unk8934[gPokenavStructPtr->unk8fe9] = gPokenavStructPtr->unk76B0.markings;
+ SetMonMarkings(var0->unk1, var0->partyIdx, gPokenavStructPtr->unk76B0.markings);
+ sub_80F7470();
+}
+
+void sub_80F36F0(void)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F3724());
+}
+
+bool8 sub_80F3724(void)
+{
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gUnknown_083E3D00, gPokenavStructPtr->unk984C);
+ break;
+ case 1:
+ sub_80F379C();
+ gPokenavStructPtr->unk306++;
+ // fall through
+ case 2:
+ if (sub_80F37D0())
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+
+void sub_80F379C(void)
+{
+ gPokenavStructPtr->unkBC93 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F37D0());
+}
+
+bool8 sub_80F37D0(void)
+{
+ u16 i;
+ u8 j, k, l, m;
+
+ if (gPokenavStructPtr->unkBC93 > 11)
+ return FALSE;
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 *r4 = &gPokenavStructPtr->unk984C[gPokenavStructPtr->unkBC93][0];
+ u8 *r5 = &gPokenavStructPtr->unkA44C[gPokenavStructPtr->unkBC93][0];
+ for (j = 0; j < 4; j++)
+ {
+ CpuFastSet(r4, r5, 0x10);
+ r5 += 0x40;
+ r4 += 0x20;
+ for (k = 0; k < 2; k++)
+ {
+ for (l = 0; l < 8; l++)
+ {
+ r4 += 4;
+ for (m = 0; m < 4; m++)
+ {
+ r4 -= 1;
+ *r5 = (*r4 << 4) | ((*r4 >> 4) & 0xF);
+ r5++;
+ }
+
+ r4 += 4;
+ }
+
+ r4 -= 0x40;
+ }
+
+ r4 += 0x60;
+ }
+
+ if (++gPokenavStructPtr->unkBC93 > 11)
+ return FALSE;
+ }
+
+ if (gPokenavStructPtr->unkBC93 > 11)
+ return FALSE;
+
+ return TRUE;
+}
+
+void sub_80F38B8(void)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F38EC());
+}
+
+bool8 sub_80F38EC(void)
+{
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ gPokenavStructPtr->unk9348 = NULL;
+ gPokenavStructPtr->unkBC92 = 0;
+ break;
+ case 1:
+ sub_80F2E18(0);
+ break;
+ case 2:
+ sub_80F3970();
+ gPokenavStructPtr->unk306++;
+ // fall through
+ case 3:
+ if (sub_80F39A4())
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+
+void sub_80F3970(void)
+{
+ gPokenavStructPtr->unkBC93 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F39A4());
+}
+
+bool8 sub_80F39A4(void)
+{
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePalette;
+ if (gPokenavStructPtr->unkBC93 > 11)
+ return FALSE;
+
+ spriteSheet.data = &gPokenavStructPtr->unkA44C[gPokenavStructPtr->unkBC93][0];
+ spriteSheet.size = 0x200;
+ spriteSheet.tag = gPokenavStructPtr->unkBC93 + 11;
+ LoadSpriteSheet(&spriteSheet);
+ if (gPokenavStructPtr->unkBC93 < 5)
+ {
+ spritePalette.data = gUnknown_083E3C60[gPokenavStructPtr->unkBC93];
+ spritePalette.tag = gPokenavStructPtr->unkBC93 + 10;
+ LoadSpritePalette(&spritePalette);
+ }
+
+ if (++gPokenavStructPtr->unkBC93 > 11)
+ return FALSE;
+
+ return TRUE;
+}
+
+struct Sprite *sub_80F3A3C(u16 arg0, u16 arg1)
+{
+ struct SpriteTemplate spriteTemplate;
+ u16 var0;
+ u8 ribbon;
+ u8 spriteId;
+
+ if (arg1 < 3)
+ var0 = arg0 + arg1 * 9;
+ else
+ var0 = arg0 + (gPokenavStructPtr->unkBC8E - gPokenavStructPtr->unkBC8F);
+
+ ribbon = gPokenavStructPtr->unkBC4C[var0];
+ spriteTemplate = gSpriteTemplate_83E476C;
+ spriteTemplate.tileTag = gPokenavRibbonsIconGfx[ribbon][0] + 11;
+ spriteTemplate.paletteTag = gPokenavRibbonsIconGfx[ribbon][1] + 10;
+ spriteId = CreateSprite(&spriteTemplate, arg0 * 16 + 96, arg1 * 16 + 40, 2);
+ if (spriteId != MAX_SPRITES)
+ return &gSprites[spriteId];
+ else
+ return NULL;
+}
+
+void sub_80F3B00(void)
+{
+ gPokenavStructPtr->unk9348 = sub_80F3A3C(gPokenavStructPtr->unkBC90, gPokenavStructPtr->unkBC91);
+ if (gPokenavStructPtr->unk9348)
+ {
+ StartSpriteAffineAnim(gPokenavStructPtr->unk9348, 1);
+ gPokenavStructPtr->unkBC92 = 1;
+ }
+ else
+ {
+ gPokenavStructPtr->unkBC92 = 0;
+ }
+}
+
+bool8 sub_80F3B58(void)
+{
+ if (gPokenavStructPtr->unkBC92)
+ {
+ gPokenavStructPtr->unkBC92 = !gPokenavStructPtr->unk9348->affineAnimEnded;
+ return gPokenavStructPtr->unkBC92;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void sub_80F3B94(void)
+{
+ if (gPokenavStructPtr->unk9348)
+ {
+ StartSpriteAffineAnim(gPokenavStructPtr->unk9348, 2);
+ gPokenavStructPtr->unkBC92 = 1;
+ }
+ else
+ {
+ gPokenavStructPtr->unkBC92 = 0;
+ }
+}
+
+bool8 sub_80F3BD4(void)
+{
+ if (gPokenavStructPtr->unkBC92)
+ {
+ gPokenavStructPtr->unkBC92 = !gPokenavStructPtr->unk9348->affineAnimEnded;
+ if (!gPokenavStructPtr->unkBC92)
+ {
+ FreeOamMatrix(gPokenavStructPtr->unk9348->oam.matrixNum);
+ DestroySprite(gPokenavStructPtr->unk9348);
+ gPokenavStructPtr->unk9348 = NULL;
+ }
+
+ return gPokenavStructPtr->unkBC92;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void sub_80F3C2C(void)
+{
+ u16 i;
+
+ if (gPokenavStructPtr->unk9348)
+ {
+ FreeOamMatrix(gPokenavStructPtr->unk9348->oam.matrixNum);
+ DestroySprite(gPokenavStructPtr->unk9348);
+ gPokenavStructPtr->unk9348 = NULL;
+ }
+
+ for (i = 0; i < 12; i++)
+ FreeSpriteTilesByTag(i + 0xB);
+
+ for (i = 0; i < 5; i++)
+ FreeSpritePaletteByTag(i + 0xA);
+
+ sub_80F2F48();
+}
+
+void sub_80F3C94(void)
+{
+ u16 i;
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePalette;
+
+ spriteSheet = gUnknown_083E4784;
+ spritePalette = gUnknown_083E478C;
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&spritePalette);
+ for (i = 0; i < 10; i++)
+ gPokenavStructPtr->unk8800[i] = NULL;
+}
+
+void sub_80F3CE8(void)
+{
+ move_anim_execute();
+ FreeSpriteTilesByTag(0x17);
+ FreeSpritePaletteByTag(0xF);
+}
+
+void sub_80F3D00(void)
+{
+ u8 spriteId;
+ u16 i;
+ u8 var1;
+ struct UnkUsePokeblockSub *var0 = &gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC];
+
+ if (!var0->unk3_14)
+ return;
+
+ var1 = gPokenavStructPtr->unk8931[gPokenavStructPtr->unk8fe9];
+ for (i = 0; i < var1 + 1; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4800, 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk8800[i] = &gSprites[spriteId];
+ gPokenavStructPtr->unk8800[i]->invisible = 1;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ sub_80F3F20(var1, 1);
+}
+
+void move_anim_execute(void)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (!gPokenavStructPtr->unk8800[i])
+ return;
+
+ DestroySprite(gPokenavStructPtr->unk8800[i]);
+ gPokenavStructPtr->unk8800[i] = NULL;
+ }
+}
+
+void sub_80F3DDC(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 60)
+ {
+ sprite->data[1] = 0;
+ sub_80F3F20(sprite->data[2], 0);
+ }
+}
+
+void sub_80F3E04(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ sprite->data[1] = 0;
+ sprite->callback = sub_80F3DDC;
+ }
+}
+
+void sub_80F3E24(struct Sprite *sprite)
+{
+ if (gPokenavStructPtr->unk8768)
+ {
+ sprite->pos1.x = gPokenavStructPtr->unk8768->pos1.x
+ + gPokenavStructPtr->unk8768->pos2.x
+ + gUnknown_083E4794[sprite->data[0]][0];
+ sprite->pos1.y = gPokenavStructPtr->unk8768->pos1.y
+ + gPokenavStructPtr->unk8768->pos2.y
+ + gUnknown_083E4794[sprite->data[0]][1];
+ }
+ else
+ {
+ sprite->pos1.x = gUnknown_083E4794[sprite->data[0]][0] + 40;
+ sprite->pos1.y = gUnknown_083E4794[sprite->data[0]][1] + 104;
+ }
+}
+
+void sub_80F3E9C(struct Sprite *sprite)
+{
+ if (sprite->data[1])
+ {
+ if (--sprite->data[1])
+ return;
+
+ SeekSpriteAnim(sprite, 0);
+ sprite->invisible = 0;
+ }
+
+ sub_80F3E24(sprite);
+ if (sprite->animEnded)
+ {
+ sprite->invisible = 1;
+ if (sprite->data[3] == sprite->data[2])
+ {
+ if (sprite->data[3] == 9)
+ {
+ sub_80F3FAC();
+ sprite->callback = sub_80F3E04;
+ }
+ else
+ {
+ sprite->callback = sub_80F3DDC;
+ }
+ }
+ else
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ }
+}
+
+void sub_80F3F20(u8 arg0, u8 arg1)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (gPokenavStructPtr->unk8800[i])
+ {
+ gPokenavStructPtr->unk8800[i]->data[0] = i;
+ gPokenavStructPtr->unk8800[i]->data[1] = i * 16 + 1;
+ gPokenavStructPtr->unk8800[i]->data[2] = arg0;
+ gPokenavStructPtr->unk8800[i]->data[3] = i;
+
+ if (!arg1 || arg0 != 9)
+ {
+ gPokenavStructPtr->unk8800[i]->callback = sub_80F3E9C;
+ }
+ else
+ {
+ sub_80F3E24(gPokenavStructPtr->unk8800[i]);
+ sub_80F3FAC();
+ gPokenavStructPtr->unk8800[i]->callback = sub_80F3E04;
+ gPokenavStructPtr->unk8800[i]->invisible = 0;
+ }
+ }
+ }
+}
+
+void sub_80F3FAC(void)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (gPokenavStructPtr->unk8800[i])
+ {
+ SeekSpriteAnim(gPokenavStructPtr->unk8800[i], 0);
+ gPokenavStructPtr->unk8800[i]->invisible = 0;
+ }
+ }
+}
+
+void sub_80F3FF0(void)
+{
+ gPokenavStructPtr->unk306 = 0;
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F4024());
+}
+
+bool8 sub_80F4024(void)
+{
+ u8 paletteIndex;
+ u8 spriteId;
+ struct SpritePalette spritePalette;
+
+ switch (gPokenavStructPtr->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gUnknown_083E329C, gPokenavStructPtr->unk131E4);
+ break;
+ case 1:
+ {
+ struct SpriteSheet spriteSheet = {
+ .data = gPokenavStructPtr->unk131E4,
+ .size = sizeof(gPokenavStructPtr->unk131E4),
+ .tag = 0x18,
+ };
+ LoadSpriteSheet(&spriteSheet);
+ break;
+ }
+ case 2:
+ spritePalette = gUnknown_083E4818;
+ LoadSpritePalette(&spritePalette);
+ paletteIndex = IndexOfSpritePaletteTag(0x10);
+ gPokenavStructPtr->unk308 = -3 & ~(1 << (paletteIndex + 0x10));
+ break;
+ case 3:
+ spriteId = CreateSprite(&gSpriteTemplate_83E4850, 218, 14, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokenavStructPtr->unk6D98 = &gSprites[spriteId];
+ gPokenavStructPtr->unk6D98->data[0] = 0;
+ }
+ else
+ {
+ gPokenavStructPtr->unk6D98 = NULL;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gPokenavStructPtr->unk306++;
+ return TRUE;
+}
+
+void sub_80F4138(struct Sprite *sprite)
+{
+ sprite->pos2.y = -gPokenavStructPtr->unk030C;
+ if (sprite->pos2.y <= -32)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->invisible = 1;
+ sprite->data[0] = 1;
+ }
+ }
+ else
+ {
+ if (sprite->data[0] == 1)
+ {
+ sprite->invisible = 0;
+ sprite->data[0] = 0;
+ }
+ }
+}
+
+#ifdef NONMATCHING
+// close, but the last DmaCopy16 is sharing the 0x400 value from the beginning of the function.
+void sub_80F4194(u8 *arg0, u8 *text)
+{
+ u8 i;
+ u8 *tileBuffer;
+ u32 *tileBuf2;
+
+ tileBuffer = gUnknown_083DFEC8;
+ DmaFill16(3, 0x1111, tileBuffer, 0x280);
+ DmaFill16Defvars(3, 0x1111, 0x400 + tileBuffer, 0x280);
+ Text_InitWindow8004E3C(&gWindowTemplate_81E70F0, tileBuffer, text);
+
+ DmaClear16(3, tileBuffer + 0x220, 0x60);
+ DmaClear16(3, tileBuffer + 0x620, 0x60);
+
+ tileBuf2 = (int *)tileBuffer + 0x80;
+ tileBuf2[0] &= 0x0FFFFFFF;
+ tileBuf2[1] &= 0x0FFFFFFF;
+ tileBuf2[2] &= 0x0FFFFFFF;
+ tileBuf2[3] &= 0x0FFFFFFF;
+ tileBuf2[4] &= 0x0FFFFFFF;
+ tileBuf2[5] &= 0x0FFFFFFF;
+ tileBuf2[6] &= 0x0FFFFFFF;
+ tileBuf2[7] &= 0x0FFFFFFF;
+
+ tileBuf2 = (int *)tileBuffer + 0x180;
+ tileBuf2[0] &= 0x0FFFFFFF;
+ tileBuf2[1] &= 0x0FFFFFFF;
+ tileBuf2[2] &= 0x0FFFFFFF;
+ tileBuf2[3] &= 0x0FFFFFFF;
+ tileBuf2[4] &= 0x0FFFFFFF;
+ tileBuf2[5] &= 0x0FFFFFFF;
+ tileBuf2[6] &= 0x0FFFFFFF;
+ tileBuf2[7] &= 0x0FFFFFFF;
+
+ for (i = 0; i < 5; i++)
+ {
+ DmaCopy16(3, &tileBuffer[128 * i], &arg0[i * 256], 128);
+ DmaCopy16(3, &tileBuffer[128 * i + 0x400], &arg0[32 * ((i * 8) + 4)], 128);
+ }
+}
+#else
+NAKED
+void sub_80F4194(u8 *arg0, u8 *text)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x4\n\
+ adds r7, r0, 0\n\
+ adds r2, r1, 0\n\
+ ldr r0, _080F42A4 @ =gUnknown_083DFEC8\n\
+ ldr r6, [r0] @ r6 = tileBuffer\n\
+ mov r0, sp \n\
+ ldr r1, _080F42A8 @ =0x00001111\n\
+ adds r5, r1, 0\n\
+ strh r5, [r0]\n\
+ ldr r4, _080F42AC @ =0x040000d4\n\
+ str r0, [r4]\n\
+ str r6, [r4, 0x4]\n\
+ ldr r3, _080F42B0 @ =0x81000140\n\
+ str r3, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ adds r1, r6, r0\n\
+ mov r0, sp\n\
+ strh r5, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ str r3, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ ldr r0, _080F42B4 @ =gWindowTemplate_81E70F0\n\
+ adds r1, r6, 0\n\
+ bl Text_InitWindow8004E3C\n\
+ movs r3, 0x88\n\
+ lsls r3, 2\n\
+ adds r1, r6, r3\n\
+ mov r0, sp\n\
+ movs r3, 0\n\
+ strh r3, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ ldr r2, _080F42B8 @ =0x81000030\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ movs r0, 0xC4\n\
+ lsls r0, 3\n\
+ adds r1, r6, r0\n\
+ mov r0, sp\n\
+ strh r3, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ movs r1, 0x80\n\
+ lsls r1, 2\n\
+ adds r2, r6, r1\n\
+ ldr r0, [r2]\n\
+ ldr r1, _080F42BC @ =0x0fffffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, [r2, 0x4]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x4]\n\
+ ldr r0, [r2, 0x8]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x8]\n\
+ ldr r0, [r2, 0xC]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0xC]\n\
+ ldr r0, [r2, 0x10]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x10]\n\
+ ldr r0, [r2, 0x14]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x14]\n\
+ ldr r0, [r2, 0x18]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x18]\n\
+ ldr r0, [r2, 0x1C]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x1C]\n\
+ movs r3, 0xC0\n\
+ lsls r3, 3\n\
+ adds r2, r6, r3\n\
+ ldr r0, [r2]\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, [r2, 0x4]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x4]\n\
+ ldr r0, [r2, 0x8]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x8]\n\
+ ldr r0, [r2, 0xC]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0xC]\n\
+ ldr r0, [r2, 0x10]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x10]\n\
+ ldr r0, [r2, 0x14]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x14]\n\
+ ldr r0, [r2, 0x18]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x18]\n\
+ ldr r0, [r2, 0x1C]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x1C]\n\
+ movs r1, 0\n\
+ ldr r2, _080F42C0 @ =0x80000040\n\
+_080F4268:\n\
+ lsls r0, r1, 7\n\
+ adds r0, r6, r0\n\
+ str r0, [r4]\n\
+ lsls r0, r1, 8\n\
+ adds r0, r7, r0\n\
+ str r0, [r4, 0x4]\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ lsls r0, r1, 7\n\
+ movs r3, 0x80\n\
+ lsls r3, 3\n\
+ adds r0, r3\n\
+ adds r0, r6, r0\n\
+ str r0, [r4]\n\
+ lsls r0, r1, 3\n\
+ adds r0, 0x4\n\
+ lsls r0, 5\n\
+ adds r0, r7, r0\n\
+ str r0, [r4, 0x4]\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r1, 0x4\n\
+ bls _080F4268\n\
+ add sp, 0x4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080F42A4: .4byte gUnknown_083DFEC8\n\
+_080F42A8: .4byte 0x00001111\n\
+_080F42AC: .4byte 0x040000d4\n\
+_080F42B0: .4byte 0x81000140\n\
+_080F42B4: .4byte gWindowTemplate_81E70F0\n\
+_080F42B8: .4byte 0x81000030\n\
+_080F42BC: .4byte 0x0fffffff\n\
+_080F42C0: .4byte 0x80000040\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80F42C4(u8 *arg0)
+{
+ u16 i, tileOffset;
+ u8 spriteId;
+ struct SpriteSheet spriteSheet = {
+ .data = gPokenavStructPtr->unkD1E4[0],
+ .size = 0x500,
+ .tag = 0x1A,
+ };
+
+ sub_80F4194(gPokenavStructPtr->unkD1E4[0], arg0);
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&gUnknown_083E4868);
+
+ tileOffset = 0;
+ for (i = 0; i < 5; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4878, i * 32 + 113, 16, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.tileNum += tileOffset;
+ gPokenavStructPtr->unkCED4[i] = &gSprites[spriteId];
+ }
+ else
+ {
+ gPokenavStructPtr->unkCED4[i] = NULL;
+ }
+
+ tileOffset += 8;
+ }
+}
+
+void sub_80F4394(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gPokenavStructPtr->unkCED4[i])
+ DestroySprite(gPokenavStructPtr->unkCED4[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1A);
+ FreeSpritePaletteByTag(0x12);
+}
+
+void sub_80F43D4(u8 *arg0)
+{
+ u16 tile;
+
+ sub_80F4194(gPokenavStructPtr->unkD1E4[0], arg0);
+ tile = GetSpriteTileStartByTag(0x1A);
+ if (tile != 0xFFFF)
+ DmaCopy32Defvars(3, gPokenavStructPtr->unkD1E4[0], (void *)(VRAM + 0x10000 + (tile * 32)), 0x500);
+}
+
+u8 *sub_80F4428(u8 *arg0, u16 arg1, u8 arg2)
+{
+ return sub_80F6514(arg0, arg1, arg2);
+}
+
+u8 *sub_80F443C(u8 *arg0, u16 arg1)
+{
+ return AlignInt1InMenuWindow(StringCopy(arg0, gOtherText_Number), arg1, 56, 1);
+}
+
+u8 *sub_80F445C(u8 *arg0, u16 arg1)
+{
+ u8 *buffer = AlignInt1InMenuWindow(arg0, arg1, 23, 1);
+ buffer[0] = EXT_CTRL_CODE_BEGIN;
+ buffer[1] = 0x11;
+ buffer[2] = 1;
+ buffer += 3;
+ buffer[0] = CHAR_SLASH;
+ buffer += 1;
+ buffer[0] = EXT_CTRL_CODE_BEGIN;
+ buffer[1] = 0x11;
+ buffer[2] = 1;
+ buffer += 3;
+ buffer = AlignInt1InMenuWindow(buffer, gPokenavStructPtr->unk8774 + 1, 50, 1);
+ return buffer;
+}
+
+u32 sub_80F44B0(u16 box, u16 monIndex, int monDataField, u8 *text)
+{
+ if (box == 14)
+ {
+ if (monDataField == MON_DATA_NICKNAME || monDataField == MON_DATA_OT_NAME)
+ return GetMonData(&gPlayerParty[monIndex], monDataField, text);
+ else
+ return GetMonData(&gPlayerParty[monIndex], monDataField);
+ }
+ else
+ {
+ if (monDataField == MON_DATA_NICKNAME || monDataField == MON_DATA_OT_NAME)
+ return GetBoxMonData(&gPokemonStorage.boxes[box][monIndex], monDataField, text);
+ else
+ return GetBoxMonData(&gPokemonStorage.boxes[box][monIndex], monDataField);
+ }
+}
+
+void SetMonMarkings(u16 box, u16 monIndex, u8 markings)
+{
+ if (box == 14)
+ SetMonData(&gPlayerParty[monIndex], MON_DATA_MARKINGS, &markings);
+ else
+ SetBoxMonData(&gPokemonStorage.boxes[box][monIndex], MON_DATA_MARKINGS, &markings);
+}
+
+void sub_80F45A0(s16 arg0, u8 arg1)
+{
+ u8 box;
+ u8 var0 = gPokenavStructPtr->unk893c[arg0].unk3_14;
+ if (var0)
+ {
+ sub_80F4428(gPokenavStructPtr->unk8829[arg1], arg0, 0);
+ box = gPokenavStructPtr->unk893c[arg0].unk1;
+ if (box == 14)
+ AlignStringInMenuWindow(gPokenavStructPtr->unk88E9[arg1], gOtherText_InParty, 64, 0);
+ else
+ AlignStringInMenuWindow(gPokenavStructPtr->unk88E9[arg1], gPokemonStorage.boxNames[box], 64, 0);
+
+ gPokenavStructPtr->unk8937[arg1] = 1;
+ }
+ else
+ {
+ AlignStringInMenuWindow(gPokenavStructPtr->unk8829[arg1], gEmptyString_81E72B0, 104, 0);
+ AlignStringInMenuWindow(gPokenavStructPtr->unk88E9[arg1], gEmptyString_81E72B0, 64, 0);
+ gPokenavStructPtr->unk8937[arg1] = var0;
+ }
+}
+
+void sub_80F468C(s16 arg0, u8 arg1)
+{
+ u16 i;
+ u16 box;
+ u16 monIndex;
+
+ if (gPokenavStructPtr->unk893c[arg0].unk3_14)
+ {
+ box = gPokenavStructPtr->unk893c[arg0].unk1;
+ monIndex = gPokenavStructPtr->unk893c[arg0].partyIdx;
+ gPokenavStructPtr->unk8ff0[arg1][0] = sub_80F44B0(box, monIndex, MON_DATA_COOL, NULL);
+ gPokenavStructPtr->unk8ff0[arg1][1] = sub_80F44B0(box, monIndex, MON_DATA_TOUGH, NULL);
+ gPokenavStructPtr->unk8ff0[arg1][2] = sub_80F44B0(box, monIndex, MON_DATA_SMART, NULL);
+ gPokenavStructPtr->unk8ff0[arg1][3] = sub_80F44B0(box, monIndex, MON_DATA_CUTE, NULL);
+ gPokenavStructPtr->unk8ff0[arg1][4] = sub_80F44B0(box, monIndex, MON_DATA_BEAUTY, NULL);
+
+ gPokenavStructPtr->unk8931[arg1] = sub_80F44B0(box, monIndex, MON_DATA_SHEEN, NULL) != 255
+ ? sub_80F44B0(box, monIndex, MON_DATA_SHEEN, NULL) / 29
+ : 9;
+
+ gPokenavStructPtr->unk8934[arg1] = sub_80F44B0(box, monIndex, MON_DATA_MARKINGS, NULL);
+ sub_80F55AC(gPokenavStructPtr->unk8ff0[arg1], gPokenavStructPtr->unk9004[arg1]);
+ }
+ else
+ {
+ for (i = 0; i < 5; i++)
+ {
+ gPokenavStructPtr->unk8ff0[arg1][i] = 0;
+ gPokenavStructPtr->unk9004[arg1][i].unk0 = 0x9B;
+ gPokenavStructPtr->unk9004[arg1][i].unk2 = 0x5B;
+ }
+ }
+}
+
+void sub_80F4824(s16 arg0, u8 arg1)
+{
+ u16 species;
+ u32 otId;
+ u32 personality;
+ u16 box;
+ u16 monIndex;
+
+ if (gPokenavStructPtr->unk893c[arg0].unk3_14)
+ {
+ box = gPokenavStructPtr->unk893c[arg0].unk1;
+ monIndex = gPokenavStructPtr->unk893c[arg0].partyIdx;
+ species = sub_80F44B0(box, monIndex, MON_DATA_SPECIES2, NULL);
+ otId = sub_80F44B0(box, monIndex, MON_DATA_OT_ID, NULL);
+ personality = sub_80F44B0(box, monIndex, MON_DATA_PERSONALITY, NULL);
+
+ HandleLoadSpecialPokePic(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ 1,
+ (intptr_t)gPokenavStructPtr->unk131E4,
+ gPokenavStructPtr->unkD1E4[arg1],
+ species,
+ personality);
+
+ LZ77UnCompWram(GetMonSpritePalFromOtIdPersonality(species, otId, personality), gPokenavStructPtr->unk0[arg1]);
+ gPokenavStructPtr->unkD1D6[arg1] = species;
+ }
+}
+
+void sub_80F4900(s16 arg0, u8 arg1)
+{
+ sub_80F45A0(arg0, arg1);
+ sub_80F468C(arg0, arg1);
+ sub_80F4824(arg0, arg1);
+}
+
+void sub_80F492C(void)
+{
+ gPokenavStructPtr->unk8FE4 = 0;
+}
+
+#ifdef NONMATCHING
+// registers r3/r4 are swapped
+void sub_80F4944(struct UnkUsePokeblockSub *arg0)
+{
+ u16 i;
+ u16 r3;
+ u16 r4;
+
+ i = 0;
+ r4 = gPokenavStructPtr->unk8FE4;
+ r3 = r4 / 2;
+ while (r3 != r4)
+ {
+ if (arg0->unk0 > gPokenavStructPtr->unk893c[r3].unk0)
+ r4 = r3;
+ else
+ i = r3 + 1;
+
+ r3 = ((r4 - i) / 2) + i;
+ }
+
+ r4 = gPokenavStructPtr->unk8FE4;
+ while (r4 > r3)
+ {
+ gPokenavStructPtr->unk893c[r4] = gPokenavStructPtr->unk893c[r4 - 1];
+ r4--;
+ }
+
+ gPokenavStructPtr->unk893c[r3] = *arg0;
+ gPokenavStructPtr->unk8FE4++;
+}
+#else
+NAKED
+void sub_80F4944(struct UnkUsePokeblockSub *arg0)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ mov r12, r0\n\
+ movs r2, 0\n\
+ ldr r1, _080F4978 @ =gPokenavStructPtr\n\
+ ldr r5, [r1]\n\
+ ldr r3, _080F497C @ =0x00008fe4\n\
+ adds r0, r5, r3\n\
+ ldrh r4, [r0]\n\
+ lsrs r3, r4, 1\n\
+ mov r8, r1\n\
+ cmp r4, r3\n\
+ beq _080F499C\n\
+ adds r6, r5, 0\n\
+ mov r0, r12\n\
+ ldrb r5, [r0]\n\
+ ldr r7, _080F4980 @ =0x0000893c\n\
+_080F4968:\n\
+ lsls r0, r3, 2\n\
+ adds r0, r6, r0\n\
+ adds r0, r7\n\
+ ldrb r0, [r0]\n\
+ cmp r5, r0\n\
+ bls _080F4984\n\
+ adds r4, r3, 0\n\
+ b _080F498A\n\
+ .align 2, 0\n\
+_080F4978: .4byte gPokenavStructPtr\n\
+_080F497C: .4byte 0x00008fe4\n\
+_080F4980: .4byte 0x0000893c\n\
+_080F4984:\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+_080F498A:\n\
+ subs r0, r4, r2\n\
+ lsrs r1, r0, 31\n\
+ adds r0, r1\n\
+ asrs r0, 1\n\
+ adds r0, r2, r0\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r4, r3\n\
+ bne _080F4968\n\
+_080F499C:\n\
+ mov r1, r8\n\
+ ldr r2, [r1]\n\
+ ldr r1, _080F49EC @ =0x00008fe4\n\
+ adds r0, r2, r1\n\
+ ldrh r4, [r0]\n\
+ lsls r6, r3, 2\n\
+ cmp r4, r3\n\
+ bls _080F49C6\n\
+ ldr r0, _080F49F0 @ =0x0000893c\n\
+ adds r5, r2, r0\n\
+_080F49B0:\n\
+ lsls r2, r4, 2\n\
+ adds r2, r5, r2\n\
+ subs r1, r4, 0x1\n\
+ lsls r0, r1, 2\n\
+ adds r0, r5, r0\n\
+ ldr r0, [r0]\n\
+ str r0, [r2]\n\
+ lsls r1, 16\n\
+ lsrs r4, r1, 16\n\
+ cmp r4, r3\n\
+ bhi _080F49B0\n\
+_080F49C6:\n\
+ mov r1, r8\n\
+ ldr r2, [r1]\n\
+ ldr r3, _080F49F0 @ =0x0000893c\n\
+ adds r0, r2, r3\n\
+ adds r0, r6\n\
+ mov r3, r12\n\
+ ldr r1, [r3]\n\
+ str r1, [r0]\n\
+ ldr r0, _080F49EC @ =0x00008fe4\n\
+ adds r2, r0\n\
+ ldrh r0, [r2]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2]\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080F49EC: .4byte 0x00008fe4\n\
+_080F49F0: .4byte 0x0000893c\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80F49F4(void)
+{
+ u16 i;
+
+ gPokenavStructPtr->unk893c[0].unk2_5 = 1;
+ for (i = 1; i < gPokenavStructPtr->unk8FE4; i++)
+ {
+ if (gPokenavStructPtr->unk893c[i].unk0 == gPokenavStructPtr->unk893c[i - 1].unk0)
+ gPokenavStructPtr->unk893c[i].unk2_5 = gPokenavStructPtr->unk893c[i - 1].unk2_5;
+ else
+ gPokenavStructPtr->unk893c[i].unk2_5 = i + 1;
+ }
+
+ gPokenavStructPtr->unk876C = 0;
+ gPokenavStructPtr->unk8770 = 0;
+ gPokenavStructPtr->unk876E = 0;
+ gPokenavStructPtr->unk8772 = gPokenavStructPtr->unk8FE4 < 9 ? (gPokenavStructPtr->unk8FE4 - 1) : 7;
+ gPokenavStructPtr->unk8774 = gPokenavStructPtr->unk8FE4 - 1;
+ gPokenavStructPtr->unk87C9 = gPokenavStructPtr->unk8774 > 7;
+}
+
+void sub_80F4B20(void)
+{
+ s16 var0;
+ s16 var1;
+
+ sub_80F4900(gPokenavStructPtr->unk87DC, 0);
+ sub_80F2E18(0);
+ if (gPokenavStructPtr->unk87DA == 1)
+ {
+ gPokenavStructPtr->unk8fe9 = 0;
+ gPokenavStructPtr->unk8FEA = 0;
+ gPokenavStructPtr->unk8FEB = 0;
+ }
+ else
+ {
+ gPokenavStructPtr->unk8fe9 = 0;
+ gPokenavStructPtr->unk8FEA = 1;
+ gPokenavStructPtr->unk8FEB = 2;
+
+ var0 = gPokenavStructPtr->unk87DC + 1;
+ if (var0 >= gPokenavStructPtr->unk87DA)
+ var0 = 0;
+
+ var1 = gPokenavStructPtr->unk87DC - 1;
+ if (var1 < 0)
+ var1 = gPokenavStructPtr->unk87DA - 1;
+
+ sub_80F4900(var0, 1);
+ sub_80F4900(var1, 2);
+ }
+}
+
+void sub_80F4BD0(void)
+{
+ u16 i, j;
+
+ for (i = 0, j = 0; i < gPokenavStructPtr->unk8828; i++)
+ {
+ if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ gPokenavStructPtr->unk893c[j].unk1 = 14;
+ gPokenavStructPtr->unk893c[j].partyIdx = i;
+ gPokenavStructPtr->unk893c[j].unk2_5 = j + 1;
+ gPokenavStructPtr->unk893c[j].unk3_14 = 1;
+ j++;
+ }
+ }
+
+ gPokenavStructPtr->unk893c[j].unk1 = 0;
+ gPokenavStructPtr->unk893c[j].partyIdx = 0;
+ gPokenavStructPtr->unk893c[j].unk2_5 = 0;
+ gPokenavStructPtr->unk893c[j].unk3_14 = 0;
+ gPokenavStructPtr->unk87DC = 0;
+ gPokenavStructPtr->unk87DA = j + 1;
+ sub_80F4B20();
+ gPokenavStructPtr->unk87CB = 1;
+}
+
+void sub_80F4CF0(void)
+{
+ gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk876E;
+ sub_80F4B20();
+
+ if (gPokenavStructPtr->unk8774 == 0)
+ gPokenavStructPtr->unk87CB = 0;
+ else
+ gPokenavStructPtr->unk87CB = 1;
+}
+
+void sub_80F4D44(void)
+{
+ gPokenavStructPtr->unk8FE6 = 0;
+ gPokenavStructPtr->unk8FE7 = 0;
+ sub_80F492C();
+
+ if (!gPokenavStructPtr->unk6DAC)
+ while (sub_80F4D88());
+}
+
+bool8 sub_80F4D88(void)
+{
+ u16 i;
+ register int mask asm("r3"); // FIXME
+ int nextValue;
+ struct UnkUsePokeblockSub var0;
+
+ switch (gPokenavStructPtr->unk8FE6)
+ {
+ default:
+ var0.unk3_14 = 1;
+ for (i = 0; i < 15; i++)
+ {
+
+ if (GetBoxMonData(&gPokemonStorage.boxes[gPokenavStructPtr->unk8FE6][gPokenavStructPtr->unk8FE7], MON_DATA_SPECIES)
+ && !GetBoxMonData(&gPokemonStorage.boxes[gPokenavStructPtr->unk8FE6][gPokenavStructPtr->unk8FE7], MON_DATA_IS_EGG))
+ {
+ var0.unk1 = gPokenavStructPtr->unk8FE6;
+ var0.partyIdx = gPokenavStructPtr->unk8FE7;
+ var0.unk0 = GetBoxMonData(
+ &gPokemonStorage.boxes[gPokenavStructPtr->unk8FE6][gPokenavStructPtr->unk8FE7],
+ gPokenavStructPtr->unk87D8);
+ sub_80F4944(&var0);
+ }
+
+ gPokenavStructPtr->unk8FE7++;
+ mask = 0xFF;
+ if (gPokenavStructPtr->unk8FE7 == 30)
+ {
+ gPokenavStructPtr->unk8FE7 = 0;
+ nextValue = gPokenavStructPtr->unk8FE6 + 1;
+ gPokenavStructPtr->unk8FE6 = nextValue;
+ if ((nextValue & mask) == 14)
+ break;
+ }
+ }
+ break;
+ case 14:
+ var0.unk3_14 = 1;
+ var0.unk1 = 14;
+ for (i = 0; i < gPokenavStructPtr->unk8828; i++)
+ {
+ if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ var0.partyIdx = i;
+ var0.unk0 = GetMonData(&gPlayerParty[i], gPokenavStructPtr->unk87D8);
+ sub_80F4944(&var0);
+ }
+ }
+
+ sub_80F49F4();
+ gPokenavStructPtr->unk87DA = gPokenavStructPtr->unk8FE4;
+ gPokenavStructPtr->unk8FE6++;
+ break;
+ case 15:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80F4F78(void)
+{
+ sub_80F53EC(gPokenavStructPtr->unk9004[3], gPokenavStructPtr->unk9004[gPokenavStructPtr->unk8fe9]);
+ sub_80F5504();
+}
+
+bool8 sub_80F4FB4(void)
+{
+ bool8 var0 = sub_80F5504();
+ bool8 var1 = sub_80F170C();
+ return var0 || var1;
+}
+
+void sub_80F4FDC(void)
+{
+ if (gPokenavStructPtr->unk76AA || gPokenavStructPtr->unk87DC != gPokenavStructPtr->unk8828)
+ sub_80F53EC(gPokenavStructPtr->unk9004[gPokenavStructPtr->unk8fe9], gPokenavStructPtr->unk9004[3]);
+}
+
+bool8 sub_80F5038(void)
+{
+ bool8 var0 = sub_80F5504();
+ bool8 var1 = sub_80F173C();
+ return var0 || var1;
+}
+
+void sub_80F5060(u8 arg0)
+{
+ u16 var0;
+ u8 var1;
+ u8 var2;
+
+ if (arg0)
+ var0 = gPokenavStructPtr->unk8FEB;
+ else
+ var0 = gPokenavStructPtr->unk8FEA;
+
+ sub_80F53EC(gPokenavStructPtr->unk9004[gPokenavStructPtr->unk8fe9], gPokenavStructPtr->unk9004[var0]);
+ var1 = gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].unk3_14;
+ if (arg0)
+ {
+ gPokenavStructPtr->unk8FEB = gPokenavStructPtr->unk8FEA;
+ gPokenavStructPtr->unk8FEA = gPokenavStructPtr->unk8fe9;
+ gPokenavStructPtr->unk8fe9 = var0;
+ gPokenavStructPtr->unk8FEC = gPokenavStructPtr->unk8FEB;
+
+ gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk87DC
+ ? gPokenavStructPtr->unk87DC - 1
+ : gPokenavStructPtr->unk87DA - 1;
+ gPokenavStructPtr->unk8FEE = gPokenavStructPtr->unk87DC
+ ? gPokenavStructPtr->unk87DC - 1
+ : gPokenavStructPtr->unk87DA - 1;
+ }
+ else
+ {
+ gPokenavStructPtr->unk8FEA = gPokenavStructPtr->unk8FEB;
+ gPokenavStructPtr->unk8FEB = gPokenavStructPtr->unk8fe9;
+ gPokenavStructPtr->unk8fe9 = var0;
+ gPokenavStructPtr->unk8FEC = gPokenavStructPtr->unk8FEA;
+
+ gPokenavStructPtr->unk87DC = (gPokenavStructPtr->unk87DC < gPokenavStructPtr->unk87DA - 1)
+ ? gPokenavStructPtr->unk87DC + 1
+ : 0;
+ gPokenavStructPtr->unk8FEE = (gPokenavStructPtr->unk87DC < gPokenavStructPtr->unk87DA - 1)
+ ? gPokenavStructPtr->unk87DC + 1
+ : 0;
+ }
+
+ var2 = gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].unk3_14;
+ if (!var1)
+ gPokenavStructPtr->unk87E0 = sub_80F5264;
+ else if (!var2)
+ gPokenavStructPtr->unk87E0 = sub_80F52F8;
+ else
+ gPokenavStructPtr->unk87E0 = sub_80F5364;
+
+ gPokenavStructPtr->unk87DE = 0;
+}
+
+bool8 gpu_sync_bg_show(void)
+{
+ return gPokenavStructPtr->unk87E0();
+}
+
+bool8 sub_80F5264(void)
+{
+ switch (gPokenavStructPtr->unk87DE)
+ {
+ case 0:
+ sub_80F2E18(gPokenavStructPtr->unk8fe9);
+ sub_80F01E0(gPokenavStructPtr->unk8fe9);
+ gPokenavStructPtr->unk87DE++;
+ // fall through
+ case 1:
+ if (!sub_80F4FB4())
+ {
+ sub_80F4900(gPokenavStructPtr->unk8FEE, gPokenavStructPtr->unk8FEC);
+ gPokenavStructPtr->unk87DE++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80F52F8(void)
+{
+ switch (gPokenavStructPtr->unk87DE)
+ {
+ case 0:
+ if (!sub_80F5038())
+ {
+ sub_80F01E0(gPokenavStructPtr->unk8fe9);
+ sub_80F4900(gPokenavStructPtr->unk8FEE, gPokenavStructPtr->unk8FEC);
+ gPokenavStructPtr->unk87DE++;
+ }
+ break;
+ case 1:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80F5364(void)
+{
+ switch (gPokenavStructPtr->unk87DE)
+ {
+ case 0:
+ sub_80F5504();
+ if (!sub_80F173C())
+ {
+ sub_80F2E18(gPokenavStructPtr->unk8fe9);
+ sub_80F01E0(gPokenavStructPtr->unk8fe9);
+ gPokenavStructPtr->unk87DE++;
+ }
+ break;
+ case 1:
+ if (!sub_80F4FB4())
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 2:
+ sub_80F4900(gPokenavStructPtr->unk8FEE, gPokenavStructPtr->unk8FEC);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80F53EC(struct UnkPokenav11 *arg0, struct UnkPokenav11 *arg1)
+{
+ u16 i, j;
+ int r5;
+ int r6;
+
+ for (i = 0; i < 5; i++)
+ {
+ r5 = arg0[i].unk0 << 8;
+ r6 = ((arg1[i].unk0 - arg0[i].unk0) << 8) / 10;
+ for (j = 0; j < 9; j++)
+ {
+ gPokenavStructPtr->unk9054[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1);
+ r5 += r6;
+ }
+
+ gPokenavStructPtr->unk9054[j][i].unk0 = arg1[i].unk0;
+ r5 = arg0[i].unk2 << 8;
+ r6 = ((arg1[i].unk2 - arg0[i].unk2) << 8) / 10;
+ for (j = 0; j < 9; j++)
+ {
+ gPokenavStructPtr->unk9054[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1);
+ r5 += r6;
+ }
+
+ gPokenavStructPtr->unk9054[j][i].unk2 = arg1[i].unk2;
+ }
+
+ gPokenavStructPtr->unk9342 = 0;
+}
+
+bool8 sub_80F5504(void)
+{
+ if (gPokenavStructPtr->unk9342 < 10)
+ {
+ sub_80F556C(gPokenavStructPtr->unk9054[gPokenavStructPtr->unk9342++]);
+ return gPokenavStructPtr->unk9342 != 10;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void sub_80F5550(struct UnkPokenav11 *arg0, struct UnkPokenav11 *arg1)
+{
+ sub_80F53EC(arg0, arg1);
+}
+
+bool8 sub_80F555C(void)
+{
+ return sub_80F5504();
+}
+
+void sub_80F556C(struct UnkPokenav11 *arg0)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ gPokenavStructPtr->unk911C[i] = arg0[i];
+
+ gPokenavStructPtr->unk9344 = 1;
+}
+
+void sub_80F55AC(u8 *a0, struct UnkPokenav11 a1[])
+{
+ u16 i;
+ u8 r2 = gUnknown_083E4890[*a0++];
+ u8 r7;
+ s8 r12;
+
+ a1[0].unk0 = 0x9b;
+ a1[0].unk2 = 0x5b - r2;
+
+ r7 = 0x40;
+ r12 = 0;
+ for (i = 1; i < 5; i++)
+ {
+ r7 += 0x33;
+ r12--;
+ if (r12 < 0)
+ r12 = 4;
+ if (r12 == 2)
+ r7++;
+ r2 = gUnknown_083E4890[*a0++];
+ a1[r12].unk0 = ((r2 * gSineTable[r7 + 0x40]) >> 8) + 0x9b;
+ a1[r12].unk2 = 0x5b - ((r2 * gSineTable[r7]) >> 8);
+
+ if (r12 <= 2 && (r2 != 0x20 || r12 != 2))
+ a1[r12].unk0 = ((r2 * gSineTable[r7 + 0x40]) >> 8) + 0x9c;
+ }
+}
+
+void sub_80F567C(u8 *a0, struct UnkPokenav11 a1[])
+{
+ sub_80F55AC(a0, a1);
+}
+
+/* TODO
+// emerald: sub_81D2278
+void sub_80F5688(u16 * r6, u16 * r5, u16 * sp0, u8 r9, u16 * r7)
+{
+ u16 sp04;
+ u16 r0;
+ u16 r4;
+ u16 r10;
+ if (r5[1] < sp0[1])
+ {
+ sp04 = r5[1];
+ r4 = r5[0] << 10;
+ r0 = sp0[1];
+ r10 = sp0[0];
+ }
+}
+*/
+
+NAKED
+void sub_80F5688(u16 r6[66][2], struct UnkPokenav11 * r5, struct UnkPokenav11 * sp0, u8 r9, u16 r7[66][2])
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x14\n"
+ "\tadds r6, r0, 0\n"
+ "\tadds r5, r1, 0\n"
+ "\tstr r2, [sp]\n"
+ "\tldr r7, [sp, 0x34]\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tmov r9, r3\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "\tldrh r0, [r5, 0x2]\n"
+ "\tldrh r1, [r2, 0x2]\n"
+ "\tcmp r0, r1\n"
+ "\tbcs _080F56D0\n"
+ "\tadds r2, r0, 0\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tldr r3, [sp]\n"
+ "\tldrh r0, [r3, 0x2]\n"
+ "\tldrh r1, [r5]\n"
+ "\tlsls r4, r1, 10\n"
+ "\tldrh r2, [r3]\n"
+ "\tmov r10, r2\n"
+ "\tldr r3, [sp, 0x4]\n"
+ "\tsubs r0, r3\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmov r8, r0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F56FC\n"
+ "\tsubs r0, r2, r1\n"
+ "\tb _080F56F2\n"
+ "_080F56D0:\n"
+ "\tldrh r0, [r5, 0x2]\n"
+ "\tldr r1, [sp]\n"
+ "\tldrh r1, [r1, 0x2]\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tldr r2, [sp]\n"
+ "\tldrh r1, [r2]\n"
+ "\tlsls r4, r1, 10\n"
+ "\tldrh r3, [r5]\n"
+ "\tmov r10, r3\n"
+ "\tldr r2, [sp, 0x4]\n"
+ "\tsubs r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmov r8, r0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F56FC\n"
+ "\tsubs r0, r3, r1\n"
+ "_080F56F2:\n"
+ "\tlsls r0, 10\n"
+ "\tmov r1, r8\n"
+ "\tbl __divsi3\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "_080F56FC:\n"
+ "\tmov r0, r8\n"
+ "\tadds r0, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmov r8, r0\n"
+ "\tcmp r7, 0\n"
+ "\tbne _080F5746\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tsubs r0, 0x38\n"
+ "\tlsls r0, 2\n"
+ "\tadds r6, r0\n"
+ "\tmovs r5, 0\n"
+ "\tmov r3, r9\n"
+ "\tlsls r3, 1\n"
+ "\tmov r12, r3\n"
+ "\tmov r0, r10\n"
+ "\tadd r0, r9\n"
+ "\tstr r0, [sp, 0xC]\n"
+ "\tcmp r7, r8\n"
+ "\tbcs _080F57D4\n"
+ "\tmovs r7, 0x1\n"
+ "_080F5726:\n"
+ "\tadds r2, r3, r6\n"
+ "\tasrs r1, r4, 10\n"
+ "\tasrs r0, r4, 9\n"
+ "\tands r0, r7\n"
+ "\tadds r1, r0\n"
+ "\tadd r1, r9\n"
+ "\tstrh r1, [r2]\n"
+ "\tldr r1, [sp, 0x8]\n"
+ "\tadds r4, r1\n"
+ "\tadds r6, 0x4\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcc _080F5726\n"
+ "\tb _080F57D4\n"
+ "_080F5746:\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r2, 0\n"
+ "\tble _080F57E4\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tsubs r0, 0x38\n"
+ "\tlsls r0, 2\n"
+ "\tadds r7, r0\n"
+ "\tmovs r5, 0\n"
+ "\tmov r3, r9\n"
+ "\tlsls r3, 1\n"
+ "\tmov r12, r3\n"
+ "\tmov r0, r10\n"
+ "\tadd r0, r9\n"
+ "\tstr r0, [sp, 0xC]\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _080F5798\n"
+ "\tldr r0, _080F57D8 @ =0x00026bff\n"
+ "\tcmp r4, r0\n"
+ "\tbgt _080F5798\n"
+ "\tmov r1, r12\n"
+ "\tstr r1, [sp, 0x10]\n"
+ "\tmov r10, r0\n"
+ "_080F5772:\n"
+ "\tldr r3, [sp, 0x10]\n"
+ "\tadds r2, r3, r7\n"
+ "\tasrs r1, r4, 10\n"
+ "\tasrs r0, r4, 9\n"
+ "\tmovs r3, 0x1\n"
+ "\tands r0, r3\n"
+ "\tadds r1, r0\n"
+ "\tadd r1, r9\n"
+ "\tstrh r1, [r2]\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tadds r4, r0\n"
+ "\tadds r7, 0x4\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _080F5798\n"
+ "\tcmp r4, r10\n"
+ "\tble _080F5772\n"
+ "_080F5798:\n"
+ "\tldr r1, _080F57DC @ =gPokenavStructPtr\n"
+ "\tldr r0, [r1]\n"
+ "\tldr r2, [sp, 0x4]\n"
+ "\tadds r1, r2, r5\n"
+ "\tldr r3, _080F57E0 @ =0x00009340\n"
+ "\tadds r0, r3\n"
+ "\tstrh r1, [r0]\n"
+ "\tldrh r0, [r0]\n"
+ "\tsubs r0, 0x38\n"
+ "\tlsls r0, 2\n"
+ "\tadds r6, r0\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _080F57D4\n"
+ "\tmov r3, r12\n"
+ "\tmovs r7, 0x1\n"
+ "_080F57B6:\n"
+ "\tadds r2, r3, r6\n"
+ "\tasrs r1, r4, 10\n"
+ "\tasrs r0, r4, 9\n"
+ "\tands r0, r7\n"
+ "\tadds r1, r0\n"
+ "\tadd r1, r9\n"
+ "\tstrh r1, [r2]\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tadds r4, r0\n"
+ "\tadds r6, 0x4\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcc _080F57B6\n"
+ "_080F57D4:\n"
+ "\tsubs r0, r6, 0x4\n"
+ "\tb _080F58C4\n"
+ "\t.align 2, 0\n"
+ "_080F57D8: .4byte 0x00026bff\n"
+ "_080F57DC: .4byte gPokenavStructPtr\n"
+ "_080F57E0: .4byte 0x00009340\n"
+ "_080F57E4:\n"
+ "\tldr r1, [sp, 0x8]\n"
+ "\tcmp r1, 0\n"
+ "\tbge _080F5890\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tsubs r0, 0x38\n"
+ "\tlsls r0, 2\n"
+ "\tadds r6, r0\n"
+ "\tmovs r5, 0\n"
+ "\tmov r2, r9\n"
+ "\tlsls r2, 1\n"
+ "\tmov r12, r2\n"
+ "\tmov r3, r10\n"
+ "\tadd r3, r9\n"
+ "\tstr r3, [sp, 0xC]\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _080F5842\n"
+ "\tadds r3, r2, r6\n"
+ "\tasrs r1, r4, 10\n"
+ "\tasrs r0, r4, 9\n"
+ "\tmovs r2, 0x1\n"
+ "\tands r0, r2\n"
+ "\tadds r1, r0\n"
+ "\tadd r1, r9\n"
+ "\tstrh r1, [r3]\n"
+ "\tb _080F5838\n"
+ "_080F5816:\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tadds r4, r0\n"
+ "\tadds r6, 0x4\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _080F5842\n"
+ "\tmov r1, r12\n"
+ "\tadds r3, r1, r6\n"
+ "\tasrs r2, r4, 10\n"
+ "\tasrs r0, r4, 9\n"
+ "\tmovs r1, 0x1\n"
+ "\tands r0, r1\n"
+ "\tadds r2, r0\n"
+ "\tadd r2, r9\n"
+ "\tstrh r2, [r3]\n"
+ "_080F5838:\n"
+ "\tldr r0, _080F5884 @ =0x00026bff\n"
+ "\tcmp r4, r0\n"
+ "\tbgt _080F5816\n"
+ "\tmovs r0, 0x9B\n"
+ "\tstrh r0, [r3]\n"
+ "_080F5842:\n"
+ "\tldr r2, _080F5888 @ =gPokenavStructPtr\n"
+ "\tldr r0, [r2]\n"
+ "\tldr r3, [sp, 0x4]\n"
+ "\tadds r1, r3, r5\n"
+ "\tldr r2, _080F588C @ =0x00009340\n"
+ "\tadds r0, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tldrh r0, [r0]\n"
+ "\tsubs r0, 0x38\n"
+ "\tlsls r0, 2\n"
+ "\tadds r7, r0\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _080F587E\n"
+ "\tmov r3, r12\n"
+ "\tmovs r6, 0x1\n"
+ "_080F5860:\n"
+ "\tadds r2, r3, r7\n"
+ "\tasrs r1, r4, 10\n"
+ "\tasrs r0, r4, 9\n"
+ "\tands r0, r6\n"
+ "\tadds r1, r0\n"
+ "\tadd r1, r9\n"
+ "\tstrh r1, [r2]\n"
+ "\tldr r0, [sp, 0x8]\n"
+ "\tadds r4, r0\n"
+ "\tadds r7, 0x4\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcc _080F5860\n"
+ "_080F587E:\n"
+ "\tsubs r0, r7, 0x4\n"
+ "\tb _080F58C4\n"
+ "\t.align 2, 0\n"
+ "_080F5884: .4byte 0x00026bff\n"
+ "_080F5888: .4byte gPokenavStructPtr\n"
+ "_080F588C: .4byte 0x00009340\n"
+ "_080F5890:\n"
+ "\tldr r0, _080F58BC @ =gPokenavStructPtr\n"
+ "\tldr r0, [r0]\n"
+ "\tldr r1, _080F58C0 @ =0x00009340\n"
+ "\tadds r0, r1\n"
+ "\tmov r2, sp\n"
+ "\tldrh r2, [r2, 0x4]\n"
+ "\tstrh r2, [r0]\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tsubs r0, 0x38\n"
+ "\tlsls r0, 2\n"
+ "\tadds r6, r0\n"
+ "\tadds r7, r0\n"
+ "\tldrh r0, [r5]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r6, 0x2]\n"
+ "\tldr r3, [sp]\n"
+ "\tldrh r0, [r3]\n"
+ "\tstrh r0, [r7]\n"
+ "\tmovs r0, 0x9B\n"
+ "\tstrh r0, [r7, 0x2]\n"
+ "\tb _080F58CC\n"
+ "\t.align 2, 0\n"
+ "_080F58BC: .4byte gPokenavStructPtr\n"
+ "_080F58C0: .4byte 0x00009340\n"
+ "_080F58C4:\n"
+ "\tadd r0, r12\n"
+ "\tmov r1, sp\n"
+ "\tldrh r1, [r1, 0xC]\n"
+ "\tstrh r1, [r0]\n"
+ "_080F58CC:\n"
+ "\tadd sp, 0x14\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+
+void sub_80F58DC(struct UnkPokenav11 * a0)
+{
+ u16 i, r6, varMax;
+
+ if (a0[0].unk2 < a0[1].unk2)
+ {
+ r6 = a0[0].unk2;
+ sub_80F5688(gPokenavStructPtr->unk9130, &a0[0], &a0[1], 1, NULL);
+ }
+ else
+ {
+ r6 = a0[1].unk2;
+ sub_80F5688(gPokenavStructPtr->unk9130, &a0[1], &a0[0], 0, NULL);
+ }
+ sub_80F5688(gPokenavStructPtr->unk9130, &a0[1], &a0[2], 1, NULL);
+
+ i = a0[2].unk2 <= a0[3].unk2;
+ sub_80F5688(gPokenavStructPtr->unk9130, &a0[2], &a0[3], i, gPokenavStructPtr->unk9238);
+ for (i = 56; i < r6; i++)
+ {
+ gPokenavStructPtr->unk9130[i - 56][0] = 0;
+ gPokenavStructPtr->unk9130[i - 56][1] = 0;
+ }
+
+ for (i = a0[0].unk2; i <= gPokenavStructPtr->unk9340; i++)
+ gPokenavStructPtr->unk9130[i - 56][0] = 155;
+
+ varMax = max(gPokenavStructPtr->unk9340, a0[2].unk2);
+ for (i = varMax + 1; i < 122; i++)
+ {
+ gPokenavStructPtr->unk9130[i - 56][0] = 0;
+ gPokenavStructPtr->unk9130[i - 56][1] = 0;
+ }
+
+// for (i = 56; i < 122; i++)
+// {
+// if (gPokenavStructPtr->unk9130[i - 56][0] == 0 && gPokenavStructPtr->unk9130[i - 56][1] != 0)
+// gPokenavStructPtr->unk9130[i - 56][0] = 155;
+// }
+}
+
+void sub_80F5A1C(struct UnkPokenav11 *arg0)
+{
+ u16 i, r6, varMax;
+
+ if (arg0[0].unk2 < arg0[4].unk2)
+ {
+ r6 = arg0[0].unk2;
+ sub_80F5688(gPokenavStructPtr->unk9238, &arg0[0], &arg0[4], 0, NULL);
+ }
+ else
+ {
+ r6 = arg0[4].unk2;
+ sub_80F5688(gPokenavStructPtr->unk9238, &arg0[4], &arg0[0], 1, NULL);
+ }
+
+ sub_80F5688(gPokenavStructPtr->unk9238, &arg0[4], &arg0[3], 0, NULL);
+
+ for (i = 56; i < r6; i++)
+ {
+ gPokenavStructPtr->unk9238[i - 56][0] = 0;
+ gPokenavStructPtr->unk9238[i - 56][1] = 0;
+ }
+
+ for (i = arg0[0].unk2; i <= gPokenavStructPtr->unk9340; i++)
+ gPokenavStructPtr->unk9238[i - 56][1] = 155;
+
+ varMax = max(gPokenavStructPtr->unk9340, arg0[3].unk2 + 1);
+ for (i = varMax; i < 122; i++)
+ {
+ gPokenavStructPtr->unk9238[i - 56][0] = 0;
+ gPokenavStructPtr->unk9238[i - 56][1] = 0;
+ }
+
+// for (i = 0; i < 66; i++)
+// {
+// if (gPokenavStructPtr->unk9238[i][0] >= gPokenavStructPtr->unk9238[i][1])
+// {
+// gPokenavStructPtr->unk9238[i][1] = 0;
+// gPokenavStructPtr->unk9238[i][0] = 0;
+// }
+// }
+}
+
+void sub_80F5B38(void)
+{
+ gPokenavStructPtr->unk9345 = 0;
+}
+
+extern const struct ScanlineEffectParams gUnknown_083E4990;
+
+bool8 sub_80F5B50(void)
+{
+ s32 i;
+ struct ScanlineEffectParams params;
+
+ switch (gPokenavStructPtr->unk9345)
+ {
+ case 0:
+ ScanlineEffect_Clear();
+ for (i = 0; i < 16; i++)
+ {
+ gScanlineEffectRegBuffers[0][16 + 2 * i] = 0xEF;
+ gScanlineEffectRegBuffers[0][17 + 2 * i] = 0xEF;
+ gScanlineEffectRegBuffers[1][16 + 2 * i] = 0xEF;
+ gScanlineEffectRegBuffers[1][17 + 2 * i] = 0xEF;
+ }
+ gPokenavStructPtr->unk9345++;
+ return TRUE;
+ case 1:
+ params = gUnknown_083E4990;
+ ScanlineEffect_SetParams(params);
+ gPokenavStructPtr->unk9345++;
+ break;
+ }
+ return FALSE;
+}
+
+void sub_80F5BDC(void)
+{
+ gScanlineEffect.state = 3;
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+void sub_80F5BF0(void)
+{
+ u16 i;
+
+ if (gPokenavStructPtr->unk9344)
+ {
+ sub_80F58DC(gPokenavStructPtr->unk911C);
+ sub_80F5A1C(gPokenavStructPtr->unk911C);
+ for (i = 0; i < 66; i++)
+ {
+ gScanlineEffectRegBuffers[1][(i + 55) * 2 + 0] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 0] = (gPokenavStructPtr->unk9130[i][0] << 8) | (gPokenavStructPtr->unk9130[i][1]);
+ gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (gPokenavStructPtr->unk9238[i][0] << 8) | (gPokenavStructPtr->unk9238[i][1]);
+ }
+ gPokenavStructPtr->unk9344 = 0;
+ }
+}
+
+void sub_80F5CDC(u8 a0)
+{
+ u16 i, r5;
+
+ if (gPokenavStructPtr->unk9344)
+ {
+ sub_80F58DC(gPokenavStructPtr->unk911C);
+ sub_80F5A1C(gPokenavStructPtr->unk911C);
+ r5 = 2 * (55 - a0);
+ for (i = 0; i < 66; i ++)
+ {
+ gScanlineEffectRegBuffers[1][r5 + 0] = gScanlineEffectRegBuffers[0][r5 + 0] = (gPokenavStructPtr->unk9130[i][0] << 8) | (gPokenavStructPtr->unk9130[i][1]);
+ gScanlineEffectRegBuffers[1][r5 + 1] = gScanlineEffectRegBuffers[0][r5 + 1] = (gPokenavStructPtr->unk9238[i][0] << 8) | (gPokenavStructPtr->unk9238[i][1]);
+ r5 += 2;
+ }
+ gPokenavStructPtr->unk9344 = 0;
+ }
+}
+
+u8 sub_80F5DD4(void)
+{
+ if (({gMain.newAndRepeatedKeys & DPAD_UP;}))
+ {
+ return sub_80F5E20();
+ }
+ else if (({gMain.newAndRepeatedKeys & DPAD_DOWN;}))
+ {
+ return sub_80F5EE4();
+ }
+ else if (({gMain.newAndRepeatedKeys & DPAD_LEFT;}))
+ {
+ return sub_80F5FB4();
+ }
+ else if (({gMain.newAndRepeatedKeys & DPAD_RIGHT;}))
+ {
+ return sub_80F6010();
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+u8 sub_80F5E20(void)
+{
+ if (gPokenavStructPtr->unk876E == 0)
+ {
+ return 0;
+ }
+ if (gPokenavStructPtr->unk87C9 != 0 && gPokenavStructPtr->unk876C == 0)
+ {
+ sub_80F063C(-1);
+ sub_80F6074(-1);
+ return 2;
+ }
+ gPokenavStructPtr->unk876C--;
+ if (gPokenavStructPtr->unk87C9 == 0 && gPokenavStructPtr->unk876C < 0)
+ {
+ gPokenavStructPtr->unk876C = gPokenavStructPtr->unk8772;
+ }
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk8770 + gPokenavStructPtr->unk876C;
+ if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk876E -= gPokenavStructPtr->unk8774 + 1;
+ }
+ return 1;
+}
+
+u8 sub_80F5EE4(void)
+{
+ if (gPokenavStructPtr->unk876E == gPokenavStructPtr->unk8774)
+ {
+ return 0;
+ }
+ if (gPokenavStructPtr->unk87C9 != 0 && gPokenavStructPtr->unk876C == 7)
+ {
+ sub_80F063C(1);
+ sub_80F6074(1);
+ return 2;
+ }
+ gPokenavStructPtr->unk876C++;
+ if (gPokenavStructPtr->unk87C9 == 0 && gPokenavStructPtr->unk876C > gPokenavStructPtr->unk8772)
+ {
+ gPokenavStructPtr->unk876C = 0;
+ }
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk8770 + gPokenavStructPtr->unk876C;
+ if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk876E -= gPokenavStructPtr->unk8774 + 1;
+ }
+ return 1;
+}
+
+u8 sub_80F5FB4(void)
+{
+ s16 r4;
+ if (gPokenavStructPtr->unk8770 == 0 || gPokenavStructPtr->unk87C9 == 0)
+ {
+ return 0;
+ }
+ if (gPokenavStructPtr->unk8770 < 8)
+ {
+ r4 = -gPokenavStructPtr->unk8770;
+ }
+ else
+ {
+ r4 = -8;
+ }
+ sub_80F063C(r4);
+ sub_80F6074(r4);
+ return 2;
+}
+
+u8 sub_80F6010(void)
+{
+ s16 r4;
+ if (gPokenavStructPtr->unk8772 == gPokenavStructPtr->unk8774 || gPokenavStructPtr->unk87C9 == 0)
+ {
+ return 0;
+ }
+ r4 = gPokenavStructPtr->unk8774 - gPokenavStructPtr->unk8772;
+ if (r4 > 8)
+ {
+ r4 = 8;
+ }
+ sub_80F063C(r4);
+ sub_80F6074(r4);
+ return 2;
+}
+
+void sub_80F6074(s16 a0)
+{
+ gPokenavStructPtr->unk8770 += a0;
+ if (gPokenavStructPtr->unk8770 > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk8770 -= gPokenavStructPtr->unk8774 + 1;
+ }
+ if (gPokenavStructPtr->unk8770 < 0)
+ {
+ gPokenavStructPtr->unk8770 += gPokenavStructPtr->unk8774 + 1;
+ }
+ gPokenavStructPtr->unk8772 += a0;
+ if (gPokenavStructPtr->unk8772 > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk8772 -= gPokenavStructPtr->unk8774 + 1;
+ }
+ if (gPokenavStructPtr->unk8772 < 0)
+ {
+ gPokenavStructPtr->unk8772 += gPokenavStructPtr->unk8774 + 1;
+ }
+ gPokenavStructPtr->unk876E += a0;
+ if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk876E -= gPokenavStructPtr->unk8774 + 1;
+ }
+ if (gPokenavStructPtr->unk876E < 0)
+ {
+ gPokenavStructPtr->unk876E += gPokenavStructPtr->unk8774 + 1;
+ }
+}
+
+void sub_80F6134(void)
+{
+ if (gPokenavStructPtr->unk87C9 != 0)
+ {
+ if (gPokenavStructPtr->unk87DC < gPokenavStructPtr->unk8774 - 7)
+ {
+ gPokenavStructPtr->unk876C = 0;
+ gPokenavStructPtr->unk8770 = gPokenavStructPtr->unk87DC;
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk87DC;
+ gPokenavStructPtr->unk8772 = gPokenavStructPtr->unk8770 + 7;
+ if (gPokenavStructPtr->unk8772 > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk8772 -= gPokenavStructPtr->unk8774 + 1;
+ }
+ }
+ else
+ {
+ gPokenavStructPtr->unk8770 = gPokenavStructPtr->unk8774 - 7;
+ gPokenavStructPtr->unk8772 = gPokenavStructPtr->unk8774;
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk87DC;
+ gPokenavStructPtr->unk876C = 7 - (gPokenavStructPtr->unk8774 - gPokenavStructPtr->unk876E);
+ }
+ }
+ else
+ {
+ gPokenavStructPtr->unk876C = gPokenavStructPtr->unk87DC;
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk87DC;
+ }
+}
+
+void sub_80F6208(void)
+{
+ gPokenavStructPtr->unk8FE6 = 0;
+ gPokenavStructPtr->unk8FE7 = 0;
+ gPokenavStructPtr->unk8FE8 = 0xFF;
+ if (gPokenavStructPtr->unk6DAC == 0)
+ {
+ while (sub_80F6250())
+ ;
+ }
+}
+
+bool8 sub_80F6250(void)
+{
+ u16 i;
+
+ if (gPokenavStructPtr->unk8FE8 != -1)
+ return FALSE;
+
+ switch (gPokenavStructPtr->unk8FE6)
+ {
+ default:
+ for (i = 0; i < 10; i++)
+ {
+ if (GetBoxMonData(&gPokemonStorage.boxes[gPokenavStructPtr->unk8FE6 + 0][gPokenavStructPtr->unk8FE7], MON_DATA_RIBBON_COUNT) != 0)
+ {
+ gPokenavStructPtr->unk8FE8 = 1;
+ return FALSE;
+ }
+ if (GetBoxMonData(&gPokemonStorage.boxes[gPokenavStructPtr->unk8FE6 + 7][gPokenavStructPtr->unk8FE7], MON_DATA_RIBBON_COUNT) != 0)
+ {
+ gPokenavStructPtr->unk8FE8 = 1;
+ return FALSE;
+ }
+ if (++gPokenavStructPtr->unk8FE7 >= 30)
+ {
+ gPokenavStructPtr->unk8FE7 = 0;
+ if (++gPokenavStructPtr->unk8FE6 >= 7)
+ {
+ break;
+ }
+ }
+ }
+ break;
+ case 8:
+ return FALSE;
+ case 7:
+ gPokenavStructPtr->unk8FE8 = 0;
+ for (i = 0; i < 6; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0)
+ {
+ gPokenavStructPtr->unk8FE8 = 1;
+ break;
+ }
+ }
+ gPokenavStructPtr->unk8FE6++;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_80F638C(void)
+{
+ gPokenavStructPtr->unk8FE6 = 0;
+ gPokenavStructPtr->unk8FE7 = 0;
+ sub_80F492C();
+ if (gPokenavStructPtr->unk6DAC == 0)
+ {
+ while (sub_80F63D0())
+ ;
+ }
+}
+
+bool8 sub_80F63D0(void)
+{
+ struct UnkUsePokeblockSub sp0;
+ u8 ribbons;
+ u16 i;
+
+ switch (gPokenavStructPtr->unk8FE6)
+ {
+ default:
+ sp0.unk3_14 = 1;
+ for (i = 0; i < 15; i++)
+ {
+ ribbons = GetBoxMonData(&gPokemonStorage.boxes[gPokenavStructPtr->unk8FE6][gPokenavStructPtr->unk8FE7 + 0], MON_DATA_RIBBON_COUNT);
+ if (ribbons != 0)
+ {
+ sp0.unk1 = gPokenavStructPtr->unk8FE6;
+ sp0.partyIdx = gPokenavStructPtr->unk8FE7;
+ sp0.unk0 = ribbons;
+ sub_80F4944(&sp0);
+ }
+ if (++gPokenavStructPtr->unk8FE7 == 30)
+ {
+ gPokenavStructPtr->unk8FE7 = 0;
+ if (++gPokenavStructPtr->unk8FE6 == 14)
+ break;
+ }
+ }
+ break;
+ case 15:
+ return FALSE;
+ case 14:
+ sp0.unk3_14 = 1;
+ sp0.unk1 = 14;
+ for (i = 0; i < 6; i++)
+ {
+ ribbons = GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT);
+ if (ribbons != 0)
+ {
+ sp0.partyIdx = i;
+ sp0.unk0 = ribbons;
+ sub_80F4944(&sp0);
+ }
+ }
+ sub_80F49F4();
+ gPokenavStructPtr->unk8FE6++;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u8 * sub_80F6514(u8 * r10, u16 sp0, u8 sp4)
+{
+ u8 * dest = r10;
+ u8 box = gPokenavStructPtr->unk893c[sp0].unk1;
+ u8 monNo = gPokenavStructPtr->unk893c[sp0].partyIdx;
+ u16 species;
+ u16 level;
+ u8 gender;
+
+ if (!sub_80F44B0(box, monNo, MON_DATA_IS_EGG, NULL))
+ {
+ sub_80F44B0(box, monNo, MON_DATA_NICKNAME, dest);
+ StringGetEnd10(dest);
+ species = sub_80F44B0(box, monNo, MON_DATA_SPECIES, NULL);
+ if (box == 14)
+ {
+ level = GetMonData(&gPlayerParty[monNo], MON_DATA_LEVEL);
+ gender = GetMonGender(&gPlayerParty[monNo]);
+ }
+ else
+ {
+ level = GetLevelFromBoxMonExp(&gPokemonStorage.boxes[box][monNo]);
+ gender = GetGenderFromSpeciesAndPersonality(species, sub_80F44B0(box, monNo, MON_DATA_PERSONALITY, NULL));
+ }
+ if (ShouldHideGenderIcon(species, r10))
+ {
+ gender = MON_GENDERLESS;
+ }
+ dest += StringLength(dest);
+
+ dest[0] = EXT_CTRL_CODE_BEGIN;
+ dest[1] = 0x13; // CLEAR_TO
+ dest[2] = 63;
+ dest += 3;
+
+ switch (gender)
+ {
+ case MON_MALE:
+ dest[0] = EXT_CTRL_CODE_BEGIN;
+ dest[1] = 0x01; // COLOR
+ dest[2] = TEXT_COLOR_WHITE;
+ dest[3] = EXT_CTRL_CODE_BEGIN;
+ dest[4] = 0x03; // SHADOW
+ dest[5] = TEXT_COLOR_SKY_BLUE;
+ dest[6] = CHAR_MALE;
+ dest += 7;
+ break;
+ case MON_FEMALE:
+ dest[0] = EXT_CTRL_CODE_BEGIN;
+ dest[1] = 0x01; // COLOR
+ dest[2] = TEXT_COLOR_BLACK2;
+ dest[3] = EXT_CTRL_CODE_BEGIN;
+ dest[4] = 0x03; // SHADOW
+ dest[5] = TEXT_COLOR_SILVER;
+ dest[6] = CHAR_FEMALE;
+ dest += 7;
+ break;
+ }
+ dest[0] = EXT_CTRL_CODE_BEGIN;
+ dest[1] = 0x01; // COLOR
+ dest[2] = TEXT_COLOR_DARK_GREY;
+ dest[3] = EXT_CTRL_CODE_BEGIN;
+ dest[4] = 0x03; // SHADOW
+ dest[5] = TEXT_COLOR_YELLOW;
+ dest += 6;
+
+ dest[0] = EXT_CTRL_CODE_BEGIN;
+ dest[1] = 0x13; // CLEAR_TO
+ dest[2] = 70;
+ dest += 3;
+
+ dest[0] = CHAR_SLASH;
+ dest[1] = EXT_CTRL_CODE_BEGIN;
+ dest[2] = EXT_CTRL_CODE_CLEAR;
+ dest[3] = 1;
+ dest[4] = CHAR_LV;
+ dest += 5;
+
+ dest = ConvertIntToDecimalString(dest, level);
+ if (sp4 == 1)
+ {
+ dest = AlignInt1InMenuWindow(dest, gPokenavStructPtr->unk893c[sp0].unk0, 0x80, 0x01);
+ }
+ else
+ {
+ dest[0] = EXT_CTRL_CODE_BEGIN;
+ dest[1] = 0x13; // CLEAR_TO
+ dest[2] = 103;
+ dest += 3;
+ *dest = EOS;
+ }
+ }
+ else
+ {
+ *dest = EOS;
+ }
+ return dest;
+}
+
+extern const u16 gUnknown_083E499C[];
+
+void sub_80F66E0(void)
+{
+ u8 r9;
+ u32 r7;
+ u16 i, j;
+ u8 r2;
+ u8 r0;
+
+ sub_80F6514(gPokenavStructPtr->unk8829[0], gPokenavStructPtr->unk876E, 0);
+ sub_80F4824(gPokenavStructPtr->unk876E, 0);
+ gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk876E;
+ gPokenavStructPtr->unkBC8E = 0;
+ r9 = 0;
+ r7 = sub_80F44B0(gPokenavStructPtr->unk893c[gPokenavStructPtr->unk876E].unk1, gPokenavStructPtr->unk893c[gPokenavStructPtr->unk876E].partyIdx, MON_DATA_RIBBONS, NULL);
+ gPokenavStructPtr->unkBC8F = 0;
+ for (i = 0; i < 17; i++)
+ {
+ switch (gUnknown_083E499C[i])
+ {
+ case MON_DATA_COOL_RIBBON:
+ case MON_DATA_BEAUTY_RIBBON:
+ case MON_DATA_CUTE_RIBBON:
+ case MON_DATA_SMART_RIBBON:
+ case MON_DATA_TOUGH_RIBBON:
+ r2 = r7 & 7;
+ r7 >>= 3;
+ r0 = 4;
+ break;
+ default:
+ r2 = r7 & 1;
+ r7 >>= 1;
+ r0 = 1;
+ break;
+ };
+ for (j = 0; j < r2; j++)
+ {
+ gPokenavStructPtr->unkBC4C[gPokenavStructPtr->unkBC8E++] = r9 + j;
+ }
+ if (r2 && r9 > 24)
+ {
+ gPokenavStructPtr->unkBC8F++;
+ }
+ r9 += r0;
+ }
+ if (gPokenavStructPtr->unkBC8E != gPokenavStructPtr->unkBC8F)
+ {
+ gPokenavStructPtr->unkBC90 = 0;
+ gPokenavStructPtr->unkBC91 = 0;
+ }
+ else
+ {
+ gPokenavStructPtr->unkBC90 = 0;
+ gPokenavStructPtr->unkBC91 = 3;
+ }
+ r2 = gPokenavStructPtr->unkBC8E - gPokenavStructPtr->unkBC8F;
+ for (i = 0; i < 3; i++)
+ {
+ if (r2 > 8)
+ {
+ gPokenavStructPtr->unkBC96[i] = 9;
+ r2 -= 9;
+ }
+ else
+ {
+ gPokenavStructPtr->unkBC96[i] = r2;
+ r2 = 0;
+ }
+ }
+ gPokenavStructPtr->unkBC96[i] = gPokenavStructPtr->unkBC8F;
+}
+
+// FIXME: wtf is this control flow
+#ifdef NONMATCHING
+u8 sub_80F68E8(void)
+{
+ s8 r5 = gPokenavStructPtr->unkBC90;
+ s8 r4 = gPokenavStructPtr->unkBC91;
+ u8 r12 = 1;
+ if (({gMain.newAndRepeatedKeys & DPAD_UP;}) && r4 > 0)
+ {
+ while (r4 > 0)
+ {
+ r4--;
+ if (gPokenavStructPtr->unkBC96[r4] != 0)
+ {
+ break;
+ }
+ }
+ if (gPokenavStructPtr->unkBC96[r4] != 0)
+ {
+ goto check_r5;
+ }
+ r4 = gPokenavStructPtr->unkBC91;
+ }
+ if (({gMain.newAndRepeatedKeys & DPAD_DOWN;}) && r4 < 3)
+ {
+ while (r4 < 3)
+ {
+ r4++;
+ if (gPokenavStructPtr->unkBC96[r4] != 0)
+ {
+ break;
+ }
+ }
+ if (gPokenavStructPtr->unkBC96[r4] != 0)
+ {
+ goto check_r5;
+ }
+ r4 = gPokenavStructPtr->unkBC91;
+ }
+ if (({gMain.newAndRepeatedKeys & DPAD_LEFT;}) && r5 > 0)
+ {
+ r5--;
+ }
+ else if (({gMain.newAndRepeatedKeys & DPAD_RIGHT;}) && r5 < gPokenavStructPtr->unkBC96[r4] - 1)
+ {
+ r5++;
+ }
+ else
+ {
+ r12 = 0;
+ }
+ goto end;
+
+ check_r5:
+ if (r5 >= gPokenavStructPtr->unkBC96[r4])
+ {
+ r5--;
+ }
+ end:
+ if (r12)
+ {
+ if (r5 != gPokenavStructPtr->unkBC90 || r4 != gPokenavStructPtr->unkBC91)
+ {
+ gPokenavStructPtr->unkBC90 = r5;
+ gPokenavStructPtr->unkBC91 = r4;
+ }
+ else
+ {
+ r12 = 0;
+ }
+ }
+ return r12;
+}
+#else
+NAKED
+bool8 sub_80F68E8(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tldr r3, _080F6918 @ =gPokenavStructPtr\n"
+ "\tldr r0, [r3]\n"
+ "\tldr r2, _080F691C @ =0x0000bc90\n"
+ "\tadds r1, r0, r2\n"
+ "\tldrb r5, [r1]\n"
+ "\tldr r6, _080F6920 @ =0x0000bc91\n"
+ "\tadds r0, r6\n"
+ "\tldrb r4, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tmov r12, r0\n"
+ "\tldr r2, _080F6924 @ =gMain\n"
+ "\tldrh r1, [r2, 0x30]\n"
+ "\tmovs r0, 0x40\n"
+ "\tands r0, r1\n"
+ "\tadds r6, r3, 0\n"
+ "\tadds r7, r2, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F692E\n"
+ "\tlsls r0, r4, 24\n"
+ "\tcmp r0, 0\n"
+ "\tble _080F692E\n"
+ "\tb _080F69BC\n"
+ "\t.align 2, 0\n"
+ "_080F6918: .4byte gPokenavStructPtr\n"
+ "_080F691C: .4byte 0x0000bc90\n"
+ "_080F6920: .4byte 0x0000bc91\n"
+ "_080F6924: .4byte gMain\n"
+ "_080F6928:\n"
+ "\tldr r1, _080F69B0 @ =0x0000bc91\n"
+ "\tadds r0, r2, r1\n"
+ "\tldrb r4, [r0]\n"
+ "_080F692E:\n"
+ "\tldrh r1, [r7, 0x30]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F6978\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tcmp r0, 0x2\n"
+ "\tbgt _080F6978\n"
+ "\tldr r3, _080F69B4 @ =gPokenavStructPtr\n"
+ "\tldr r2, _080F69B8 @ =0x0000bc96\n"
+ "_080F6944:\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tcmp r0, 0x2\n"
+ "\tbgt _080F6960\n"
+ "\tadds r0, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tldr r1, [r3]\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tasrs r0, 24\n"
+ "\tadds r1, r2\n"
+ "\tadds r1, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F6944\n"
+ "_080F6960:\n"
+ "\tldr r2, [r6]\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldr r3, _080F69B8 @ =0x0000bc96\n"
+ "\tadds r1, r2, r3\n"
+ "\tadds r1, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F69EC\n"
+ "\tldr r1, _080F69B0 @ =0x0000bc91\n"
+ "\tadds r0, r2, r1\n"
+ "\tldrb r4, [r0]\n"
+ "_080F6978:\n"
+ "\tldrh r2, [r7, 0x30]\n"
+ "\tmovs r0, 0x20\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F698A\n"
+ "\tlsls r0, r5, 24\n"
+ "\tasrs r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbgt _080F6A3C\n"
+ "_080F698A:\n"
+ "\tmovs r0, 0x10\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F69AA\n"
+ "\tlsls r0, r5, 24\n"
+ "\tasrs r2, r0, 24\n"
+ "\tldr r1, [r6]\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldr r3, _080F69B8 @ =0x0000bc96\n"
+ "\tadds r1, r3\n"
+ "\tadds r1, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tsubs r0, 0x1\n"
+ "\tcmp r2, r0\n"
+ "\tblt _080F6A38\n"
+ "_080F69AA:\n"
+ "\tmovs r0, 0\n"
+ "\tmov r12, r0\n"
+ "\tb _080F69FC\n"
+ "\t.align 2, 0\n"
+ "_080F69B0: .4byte 0x0000bc91\n"
+ "_080F69B4: .4byte gPokenavStructPtr\n"
+ "_080F69B8: .4byte 0x0000bc96\n"
+ "_080F69BC:\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tble _080F69DA\n"
+ "\tsubs r0, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tldr r1, [r6]\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldr r2, _080F6A2C @ =0x0000bc96\n"
+ "\tadds r1, r2\n"
+ "\tadds r1, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F69BC\n"
+ "_080F69DA:\n"
+ "\tldr r2, [r6]\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldr r3, _080F6A2C @ =0x0000bc96\n"
+ "\tadds r1, r2, r3\n"
+ "\tadds r1, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F6928\n"
+ "_080F69EC:\n"
+ "\tlsls r0, r5, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldrb r1, [r1]\n"
+ "\tcmp r0, r1\n"
+ "\tblt _080F69FC\n"
+ "\tsubs r0, r1, 0x1\n"
+ "_080F69F8:\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "_080F69FC:\n"
+ "\tmov r0, r12\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F6A44\n"
+ "\tlsls r0, r5, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldr r3, [r6]\n"
+ "\tldr r1, _080F6A30 @ =0x0000bc90\n"
+ "\tadds r2, r3, r1\n"
+ "\tldrb r6, [r2]\n"
+ "\tcmp r0, r6\n"
+ "\tbne _080F6A20\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r0, 24\n"
+ "\tldr r6, _080F6A34 @ =0x0000bc91\n"
+ "\tadds r1, r3, r6\n"
+ "\tldrb r1, [r1]\n"
+ "\tcmp r0, r1\n"
+ "\tbeq _080F6A40\n"
+ "_080F6A20:\n"
+ "\tstrb r5, [r2]\n"
+ "\tldr r1, _080F6A34 @ =0x0000bc91\n"
+ "\tadds r0, r3, r1\n"
+ "\tstrb r4, [r0]\n"
+ "\tb _080F6A44\n"
+ "\t.align 2, 0\n"
+ "_080F6A2C: .4byte 0x0000bc96\n"
+ "_080F6A30: .4byte 0x0000bc90\n"
+ "_080F6A34: .4byte 0x0000bc91\n"
+ "_080F6A38:\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tb _080F69F8\n"
+ "_080F6A3C:\n"
+ "\tsubs r0, 0x1\n"
+ "\tb _080F69F8\n"
+ "_080F6A40:\n"
+ "\tmovs r2, 0\n"
+ "\tmov r12, r2\n"
+ "_080F6A44:\n"
+ "\tmov r0, r12\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif //NONMATCHING
+
+void sub_80F6A4C(s8 a0)
+{
+ gPokenavStructPtr->unk876E += a0;
+ if (gPokenavStructPtr->unk876E < 0)
+ {
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk8774;
+ }
+ if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk876E = 0;
+ }
+ gPokenavStructPtr->unkBC94 = a0;
+ gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk876E;
+ REG_WININ = 0x3F37;
+ REG_WINOUT = 0x3F3F;
+ REG_WIN0H = 0x58F0;
+ REG_WIN0V = 0x2060;
+ gPokenavStructPtr->unk87DE = 0;
+}
+
+bool8 sub_80F6AF0(void)
+{
+ switch (gPokenavStructPtr->unk87DE)
+ {
+ case 0:
+ if (!sub_80F173C())
+ {
+ gPokenavStructPtr->unk87DE++;
+ }
+ break;
+ case 1:
+ REG_DISPCNT |= DISPCNT_WIN0_ON;
+ sub_80F1480();
+ sub_80F66E0();
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 2:
+ DrawMonRibbonIcons();
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 3:
+ sub_80F13FC();
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 4:
+ sub_80F4824(gPokenavStructPtr->unk876E, 0);
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 5:
+ sub_80F2E18(0);
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 6:
+ if (!sub_80F170C())
+ {
+ sub_80F1438();
+ REG_DISPCNT &= ~DISPCNT_WIN0_ON;
+ gPokenavStructPtr->unk87DE++;
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/src/pokenav_after.c b/src/pokenav_after.c
deleted file mode 100644
index 7619577cc..000000000
--- a/src/pokenav_after.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "global.h"
-#include "main.h"
-#include "pokenav.h"
-#include "battle.h"
-#include "data2.h"
-#include "text.h"
-#include "de_rom_8040FE0.h"
-#include "string_util.h"
-
-void sub_80F700C(u8 *arg0, u16 arg1)
-{
- const struct Trainer *trainer = &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0];
- u8 *ptr = arg0;
-
- ptr = arg0;
- if (arg1 < gUnknown_083DFEC4->unkD158)
- {
-#if ENGLISH
- ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]);
-#elif GERMAN
- ptr = StringCopy(ptr, de_sub_8041024(0, gUnknown_083DFEC4->unkCEE8[arg1].unk0));
-#endif
-
- ptr[0] = EXT_CTRL_CODE_BEGIN;
- ptr[1] = 0x13;
- ptr[2] = 0x4B;
- ptr += 3;
- ptr = StringCopy(ptr, trainer->trainerName);
- }
-
- ptr[0] = EXT_CTRL_CODE_BEGIN;
- ptr[1] = 0x13;
- ptr[2] = 0x80;
- ptr[3] = 0xFF;
-}
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
index 710756c11..3150629b7 100644
--- a/src/pokenav_before.c
+++ b/src/pokenav_before.c
@@ -100,321 +100,7 @@ struct PokenavRibbonIconGfx {
IWRAM_DATA void (*gUnknown_03000744)(void);
-extern const u8 gUnknown_083E0314[];
-extern const u16 gUnknown_08E9F9E8[];
-extern const u16 gUnknown_083E0274[];
-extern const u8 gUnknown_08E9FC64[];
-extern const u8 gUnknown_083E0354[];
-extern const u8 gUnknown_08E9FD64[];
-extern const u8 gUnknown_08E9FE54[];
-extern const u8 gUnknown_08E9FD1C[];
-extern const u16 gPokenavConditionSearch2_Pal[];
-extern const u8 gUnknown_083E0334[];
-extern const u16 gUnknown_083E02B4[];
-extern const u8 gPokenavConditionSearch2_Gfx[];
-extern const u8 gUnknown_083E0254[];
-extern const u8 gUnknown_08E9FEB4[];
-extern const u8 gUnknown_083E01AC[];
-extern const u8 gUnknown_08E9AC4C[];
-extern const u8 gPokenavConditionMenu2_Pal[];
-extern const u8 gPokenavConditionView_Gfx[];
-extern const u8 gUnknown_08E9ABB4[];
-extern const u8 gUnknown_08E9AC2C[];
-extern const u8 *const gPokenavCityMaps[][2];
-extern const u8 gPokenavHoennMapSquares_Pal[];
-extern const u8 gPokenavHoennMapSquares_Gfx[];
-extern const u16 gUnknown_083E003C[];
-extern const u8 *const gUnknown_083E31B0[];
-extern const u8 *const gUnknown_083E31CC[];
-extern const u8 *const gUnknown_083E31D8[];
-extern u8 *gUnknown_083DFEC8;
-extern const u8 gUnknown_083DFEEC[];
-extern const u8 gUnknown_083E005C[];
-extern const u8 gUnknown_083E007C[];
-extern const u8 gPokenavOutlineTilemap[];
-extern const u8 gPokenavOutlineTiles[];
-extern const u8 gPokenavOutlinePalette[];
-extern const u8 gUnknown_083DFECC[];
-extern const u8 gUnknown_083DFF8C[];
-extern const u8 gPokenavHoennMapMisc_Gfx[];
-extern const u8 gUnknown_08E99FB0[];
-extern const u8 gUnknown_08E9A100[];
-extern const u16 gPokenavHoennMap1_Pal[];
-extern void (*const gUnknown_083E3270[])(u16, u16);
-extern const u8 gUnknown_083E039C[];
-extern const u8 gUnknown_083E03A0[];
-extern const u8 gUnknown_083E01F4[];
-extern const u8 *const gTrainerEyeDescriptions[];
-extern const u8 gUnknown_08E9FBA0[];
-extern const u8 gPokenavRibbonView_Gfx[];
-extern const u8 gUnknown_083E040C[];
-extern const u16 gPokenavRibbonView_Pal[];
-extern const u16 gUnknown_083E03A8[];
-extern const u16 gUnknown_083E3C60[][16];
-extern const u16 gPokenavRibbonsIconGfx[][2];
-extern const u8 *const gRibbonDescriptions[][2];
-extern const u8 *const gGiftRibbonDescriptions[][2];
-extern const u8 gUnknown_08E9FF58[];
-extern const u8 gPokenavRibbonPokeView_Gfx[];
-extern const u16 gUnknown_083E0124[];
-extern const u16 gUnknown_083E0144[];
-extern const u8 gPokenavMenuOptions_Gfx[];
-extern const u8 gPokenavConditionMenu_Gfx[];
-extern const u8 gPokenavConditionSearch_Gfx[];
-extern const struct SpriteTemplate gSpriteTemplate_83E4454;
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83E4450[];
-extern const u16 gUnknown_083E42F8[];
-extern const u16 gPokenavMenuOptions1_Pal[];
-extern const u16 gPokenavMenuOptions2_Pal[];
-extern const u16 gPokenavConditionMenu_Pal[];
-extern const u16 gPokenavCondition6_Pal[];
-extern const u16 gPokenavCondition7_Pal[];
-extern const struct SpriteSheet gSpriteSheet_PokenavBlueLight;
-extern const struct SpritePalette gSpritePalette_PokenavBlueLight;
-extern const struct SpriteTemplate gSpriteTemplate_83E4484;
-extern const u8 gPokenavMainMenu_Gfx[];
-extern const u8 gPokenavConditionMenuHeader_Gfx[];
-extern const u8 gPokenavRibbonsHeader_Gfx[];
-extern const u8 gPokenavHoennMapHeader_Gfx[];
-extern const u8 gPokenavConditionMenuOptions_Gfx[];
-extern const u8 gPokenavConditionMenuOptions2_Gfx[];
-extern const u8 gPokenavTrainersEyesHeader_Gfx[];
-extern const struct SpritePalette gUnknown_083E449C[];
-extern const struct SpriteTemplate gSpriteTemplate_83E4530;
-extern const struct SpriteTemplate gSpriteTemplate_83E4548;
-extern const struct SpriteTemplate gSpriteTemplate_83E44E0;
-extern const struct SpriteTemplate gSpriteTemplate_83E44F8;
-extern const struct SpriteSheet gUnknown_083E4568;
-extern const struct SpriteTemplate gSpriteTemplate_83E4570;
-extern const struct SpritePalette gUnknown_083E4588;
-extern const struct SpriteSheet gUnknown_083E4590[3];
-extern const struct SpritePalette gUnknown_083E45A8;
-extern const u16 gUnknown_08E9F988[];
-extern const struct SpriteTemplate gSpriteTemplate_83E45B8;
-extern const struct SpriteTemplate gSpriteTemplate_83E45F0;
-extern const struct SpriteSheet gUnknown_083E4628[4];
-extern const struct SpritePalette gUnknown_083E4648[3];
-extern const struct SpriteTemplate gSpriteTemplate_83E4660;
-extern const u16 gUnknown_083E4678[];
-extern const u8 gUnknown_083E3D00[];
-extern const struct SpriteTemplate gSpriteTemplate_83E476C;
-extern const struct SpriteSheet gUnknown_083E4784;
-extern const struct SpritePalette gUnknown_083E478C;
-extern const struct SpriteTemplate gSpriteTemplate_83E4800;
-extern const s16 gUnknown_083E4794[][2];
-extern const u8 gUnknown_083E329C[];
-extern const struct SpritePalette gUnknown_083E4818;
-extern const struct SpriteTemplate gSpriteTemplate_83E4850;
-extern const struct SpritePalette gUnknown_083E4868;
-extern const struct SpriteTemplate gSpriteTemplate_83E4878;
-
-extern u16 gUnknown_020388B4;
-extern u8 gUnknown_020388B0[];
-
-
-// TODO: decompile the debug code so the compiler doesn't complain about
-// unused static functions
-#define static
-
-static void sub_80EBCA8();
-static void sub_80EEE20();
-static bool8 sub_80EEE54();
-static void sub_80EEE08();
-static void sub_80EED2C(u8);
-static void sub_80EC268();
-static void sub_80EED1C();
-static void sub_80EE9C0(u8, u8, u8);
-static bool8 sub_80EEA0C();
-static bool8 sub_80EEC10();
-static void sub_80EED9C();
-static void sub_80EDB88();
-static void sub_80EC4A0();
-static void sub_80EC81C();
-static void sub_80EE96C();
-static void sub_80EE3D8();
-static bool8 sub_80EEF34();
-static void sub_80EED0C();
-static void sub_80EC67C();
-static void sub_80EC86C();
-static bool8 sub_80EEC90();
-static void sub_80ED620();
-static void sub_80EC960();
-static void sub_80ED01C();
-static void sub_80ECC08();
-static void sub_80ED31C();
-static void sub_80ED4D8();
-static void sub_80ED858();
-static void sub_80EDDBC();
-static void sub_80EDE70();
-static void sub_80EDEE4();
-static void sub_80EE06C();
-static void sub_80EE294();
-static void sub_80EE58C();
-static void sub_80EE658();
-static void sub_80EE8F4();
-static void sub_80EEDC4();
-static void ShowMapNamePopUpWindow(void);
-static void sub_80F0954(u16, u16, u16);
-static bool8 sub_80F098C(void);
-static u8 *sub_80F445C(u8*, u16);
-static void sub_80F081C(u8);
-bool8 sub_80F0944(void);
-static u8 *sub_80F4428(u8*, u16, u8);
-void sub_80F700C(u8*, u16);
-static void sub_80F0B24(void);
-static bool8 sub_80F0B44(void);
-static void sub_80F0C28(void);
-static bool8 sub_80F0C48(void);
-void LoadTrainerEyesDescriptionLines(void);
-bool8 sub_80F0D5C(void);
-static void sub_80F0EC0(void);
-static bool8 sub_80F0EF4(void);
-static void sub_80F0F64(void);
-static void sub_80F0FA0(void);
-static bool8 sub_80F0FEC(void);
-static bool8 sub_80F0718(void);
-void sub_80F0FFC(u8);
-static void sub_80F19DC(u8*);
-static bool8 sub_80F1080(void);
-void sub_80F1614(void);
-void DrawMonRibbonIcons(void);
-void sub_80F13FC(void);
-void sub_80F1438(void);
-static void sub_80F1494(void);
-bool8 sub_80F162C(u8);
-static void sub_80F01E0(u16);
-static void sub_80F19FC(void);
-static void sub_80F1A74(void);
-static void sub_80F1A80(void);
-static void sub_80F1A90(void);
-static bool8 sub_80F1AC4(void);
-static void sub_80F1B8C(u8);
-static bool8 sub_80F1BC8(u8);
-static void sub_80F2458(u8);
-static void sub_80F2514(u8);
-static void sub_80F1DF0(void);
-static void sub_80F2218(struct Sprite *sprite);
-static bool8 sub_80F1E50(void);
-static bool8 sub_80F22F8(void);
-static void sub_80F2108(void);
-static bool8 sub_80F1E6C(void);
-static void sub_80F1E84(void);
-static void sub_80F2148(void);
-static void sub_80F2240(struct Sprite *sprite);
-static bool8 sub_80F1F10(void);
-static bool8 sub_80F2360(void);
-static void sub_80F2170(void);
-static bool8 sub_80F23C8(void);
-static void sub_80F21F8(void);
-static void sub_80F1FF0(void);
-static void sub_80F208C(void);
-static void sub_80F22B0(struct Sprite *sprite);
-static void sub_80F240C(struct Sprite *sprite);
-static void sub_80F2598(void);
-static void sub_80F2620(void);
-static bool8 sub_80F26BC(void);
-static void sub_80F2C58(struct Sprite *sprite);
-static void sub_80F2D04(u8);
-static void sub_80F2D6C(u8);
-static void sub_80F2DD8(void);
-static void sub_80F2DF4(void);
-static void sub_80F2FEC(struct Sprite *sprite);
-static void sub_80F2FB0(void);
-static void sub_80F3008(u8);
-static void sub_80F3130(void);
-static void sub_80F3264(void);
-static void sub_80F3294(u8);
-static void sub_80F35B4(void);
-static void sub_80F363C(struct Sprite *sprite);
-static void SetMonMarkings(u16, u16, u8);
-static void sub_80F36F0(void);
-static bool8 sub_80F3724(void);
-static void sub_80F379C(void);
-static bool8 sub_80F37D0(void);
-static void sub_80F38B8(void);
-static bool8 sub_80F38EC(void);
-static void sub_80F3970(void);
-static bool8 sub_80F39A4(void);
-static void sub_80F3B00(void);
-static bool8 sub_80F3B58(void);
-static void sub_80F3B94(void);
-static bool8 sub_80F3BD4(void);
-static void sub_80F3C2C(void);
-static void sub_80F3F20(u8, u8);
-static void sub_80F3FAC(void);
-static void sub_80F3FF0(void);
-static bool8 sub_80F4024(void);
-static void sub_80F42C4(u8*);
-static void sub_80F4394(void);
-u8 *sub_80F6514(u8*, u16, u8);
-static u8 *sub_80F443C(u8 *, u16);
-void sub_80F55AC(u8*, struct UnkPokenav11 *);
-static void sub_80F4CF0(void);
-static void sub_80F4D44(void);
-static bool8 sub_80F4D88(void);
-static void sub_80F53EC(struct UnkPokenav11*, struct UnkPokenav11*);
-static bool8 sub_80F5504(void);
-static bool8 sub_80F5264(void);
-static bool8 sub_80F52F8(void);
-static bool8 sub_80F5364(void);
-
-extern void sub_80F0900(void);
-extern void sub_80F01A4(void);
-extern void sub_80EFD3C(void);
-extern void sub_8095C8C();
-extern void sub_80EFDA0(void);
-extern void sub_80EFD74(void);
-extern bool8 sub_80EFC64(void);
-extern void sub_80EFC3C(void);
-extern void sub_80EF624(const u16 *, const u16 *, u8, u8, u16 *);
-extern void sub_80EF7D4(void);
-extern void sub_80EF54C(u8);
-extern void sub_80EF58C(u8);
-extern void sub_80F6FFC();
-extern void sub_80F6FB8();
-extern void sub_80F6DB8();
-extern bool8 sub_80F6E9C();
-extern bool8 sub_80F6ED4();
-extern bool8 sub_80F70FC();
-extern void sub_80F708C(u32);
-extern void sub_80F6F10();
-static extern void sub_80F15A8(void);
-extern void sub_80F6A4C();
-extern bool8 sub_80F6AF0();
-extern u8 sub_80F68E8();
-extern void sub_80F66E0();
-extern void sub_80F638C();
-extern bool8 sub_80F63D0();
-extern void sub_80EFF34();
-extern bool8 sub_80EFF68();
-extern void sub_80F6134();
-extern u8 sub_80F5DD4();
-extern void sub_80F0264(u8);
-extern bool8 sub_80F02A0();
-extern void sub_80EF9F8(void);
-extern bool8 sub_80EFBDC(bool8);
-extern void sub_80EFBB0(void);
-extern void sub_80EEFBC(u8);
-extern void sub_80EF814(void);
-extern void sub_80EF840(void);
-extern bool8 sub_80EF874(void);
-extern bool8 sub_80F6250();
-extern void sub_80F6208();
-extern void sub_80F6C20();
-extern void sub_80EF248(u8);
-extern bool8 sub_80EF284(u8);
-extern void sub_80EF428(u8, u8);
-extern bool8 sub_80EEF78();
-extern void sub_80EBC10();
-extern void sub_80EBDBC(void (*func)(void));
-extern void sub_80EBBE8();
-extern void sub_80EBDD8();
-extern void sub_80EBD90();
-extern void sub_80EBD18();
-extern void sub_80FB260();
-extern void sub_80EFE7C(void);
-extern void sub_80F5BF0();
-extern void sub_80F6F64();
+struct UnkPokenavStruct *const gPokenavStructPtr = (struct UnkPokenavStruct *)gSharedMem;
extern u16 gKeyRepeatStartDelay;
@@ -425,10 +111,10 @@ void sub_80EBA5C()
default:
gMain.state = 0;
case 0:
- ewram0_10.var6dac = is_c1_link_related_active();
- if (!ewram0_10.var6dac)
+ gPokenavStructPtr->unk6DAC = is_c1_link_related_active();
+ if (!gPokenavStructPtr->unk6DAC)
{
- ewram0_10.var6dab = 0;
+ gPokenavStructPtr->unk6DAB = 0;
gMain.state++;
SetMainCallback2(&sub_80EBBE8);
}
@@ -478,7 +164,7 @@ void sub_80EBA5C()
sub_80EBDBC(&sub_80EBDD8);
break;
case 14:
- ewram0_10.var6dab = 1;
+ gPokenavStructPtr->unk6DAB = 1;
PlaySE(SE_PN_ON);
SetMainCallback2(&sub_80EBD90);
SetVBlankCallback(&sub_80EBD18);
@@ -491,46 +177,44 @@ void sub_80EBA5C()
void sub_80EBBE8()
{
- while (!ewram0_10.var6dab)
+ while (!gPokenavStructPtr->unk6DAB)
sub_80EBA5C();
}
void sub_80EBC10()
{
u16 i;
- u16 *var1;
gKeyRepeatStartDelay = 0x14;
- ewram0_10.playerPartyCount = CalculatePlayerPartyCount();
- ewram0_10.var6ddc = 0;
- ewram0_10.var9344 = 0;
- ewram0_10.var8768 = 0;
- ewram0_10.varCED0 = 0;
+ gPokenavStructPtr->unk8828 = CalculatePlayerPartyCount();
+ gPokenavStructPtr->unk6DDC = 0;
+ gPokenavStructPtr->unk9344 = 0;
+ gPokenavStructPtr->unk8768 = 0;
+ gPokenavStructPtr->unkCED0 = 0;
for (i = 0; i < 5; ++i)
{
- ewram0_10.var8fff[i] = 0;
- var1 = (u16 *)ewram0_10.var0;
- var1[i*2 + 0x4820] = 0x9B;
- var1[i*2 + 0x4821] = 0x5B;
+ gPokenavStructPtr->unk8ff0[3][i] = 0;
+ gPokenavStructPtr->unk9004[3][i].unk0 = 0x9B;
+ gPokenavStructPtr->unk9004[3][i].unk2 = 0x5B;
}
- ewram0_10.var6e95 = 0;
+ gPokenavStructPtr->regionMap.needUpdateVideoRegs = 0;
sub_80EBCA8();
}
void sub_80EBCA8()
{
- ewram0_10.var6db2[0] = 1;
- ewram0_10.var6db2[1] = 2;
- ewram0_10.var6db2[2] = 3;
+ gPokenavStructPtr->unk6DB2[0] = 1;
+ gPokenavStructPtr->unk6DB2[1] = 2;
+ gPokenavStructPtr->unk6DB2[2] = 3;
if (FlagGet(FLAG_SYS_RIBBON_GET))
- ewram0_10.var6db2[3] = 4;
+ gPokenavStructPtr->unk6DB2[3] = 4;
else
- ewram0_10.var6db2[3] = 0;
+ gPokenavStructPtr->unk6DB2[3] = 0;
- ewram0_10.var6db2[4] = 5;
+ gPokenavStructPtr->unk6DB2[4] = 5;
}
void sub_80EBD18()
@@ -575,7 +259,7 @@ void sub_80EBD80()
void sub_80EBD90()
{
- ewram0_10.var300();
+ gPokenavStructPtr->unk300();
AnimateSprites();
BuildOamBuffer();
RunTasks();
@@ -585,87 +269,87 @@ void sub_80EBD90()
void sub_80EBDBC(void (*func)(void))
{
- ewram0_10.var300 = func;
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk300 = func;
+ gPokenavStructPtr->unk304 = 0;
}
void sub_80EBDD8()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
SetVBlankCallback(NULL);
REG_DISPCNT = 0;
- ewram0_10.var6dad = ewram0_10.var6ddc;
- ewram0_10.var6dae = 5;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk6DAD = gPokenavStructPtr->unk6DDC;
+ gPokenavStructPtr->unk6DAE = 5;
+ gPokenavStructPtr->unk304++;
break;
case 1:
sub_80F3FF0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 2:
if (!sub_80F4024())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
sub_80F2598();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 4:
sub_80EEE20();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 5:
if (!sub_80EEE54())
{
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 6:
sub_80EF248(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 7:
if (!sub_80EF284(0))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
sub_80F1B8C(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 9:
if (!sub_80F1BC8(0))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 10:
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
sub_80EED2C(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 14:
sub_80F2C80(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 15:
if (!sub_80F2CBC(0))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 16:
sub_80F1DF0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 17:
if (!sub_80F1E50())
@@ -683,72 +367,72 @@ void sub_80EBDD8()
void sub_80EC00C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
if (!sub_80EEF78())
{
SetVBlankCallback(&sub_80EBD80);
sub_80EED1C();
- ewram0_10.var6dad = ewram0_10.var6ddc;
- ewram0_10.var6dae = 5;
+ gPokenavStructPtr->unk6DAD = gPokenavStructPtr->unk6DDC;
+ gPokenavStructPtr->unk6DAE = 5;
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 1:
sub_80EF248(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 2:
if (!sub_80EF284(0))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
sub_80F1B8C(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 4:
if (!sub_80F1BC8(0))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80EED2C(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
sub_80F2598();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 10:
sub_80F2C80(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 11:
if (!sub_80F2CBC(0))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
sub_80F1DF0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
if (!sub_80F1E50())
{
- sub_80EF428(0, ewram0_10.var6dad);
+ sub_80EF428(0, gPokenavStructPtr->unk6DAD);
sub_80EBDBC(&sub_80EC268);
#if DEBUG
if (gLinkOpen == TRUE)
@@ -761,12 +445,12 @@ void sub_80EC00C()
void sub_80EC210()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F2D04(1);
- sub_80EE9C0(0, ewram0_10.var6ddc, 0);
- ewram0_10.var304++;
+ sub_80EE9C0(0, gPokenavStructPtr->unk6DDC, 0);
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80EEA0C())
@@ -779,21 +463,21 @@ void sub_80EC268()
{
u8 var1;
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
if (sub_80EEC10() != 0)
{
PlaySE(SE_SELECT);
- sub_80EF428(0, ewram0_10.var6dad);
+ sub_80EF428(0, gPokenavStructPtr->unk6DAD);
sub_80EED9C();
}
else
{
if (gMain.newKeys & A_BUTTON)
{
- ewram0_10.var6ddc = ewram0_10.var6dad;
- switch (ewram0_10.var6db2[ewram0_10.var6ddc] - 1)
+ gPokenavStructPtr->unk6DDC = gPokenavStructPtr->unk6DAD;
+ switch (gPokenavStructPtr->unk6DB2[gPokenavStructPtr->unk6DDC] - 1)
{
case 0:
PlaySE(SE_SELECT);
@@ -804,19 +488,19 @@ void sub_80EC268()
sub_80EBDBC(&sub_80EC81C);
break;
case 4:
- ewram0_10.var304 = 1;
+ gPokenavStructPtr->unk304 = 1;
break;
case 3:
- ewram0_10.var304 = 2;
+ gPokenavStructPtr->unk304 = 2;
break;
case 2:
- ewram0_10.var304 = 6;
+ gPokenavStructPtr->unk304 = 6;
break;
}
}
else if (gMain.newKeys & B_BUTTON)
{
- ewram0_10.var304 = 1;
+ gPokenavStructPtr->unk304 = 1;
}
}
break;
@@ -826,16 +510,16 @@ void sub_80EC268()
break;
case 2:
sub_80F6208();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 3:
if (!sub_80F6250())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 4:
if (!sub_8055870())
{
- if (ewram0_10.var8fe8 != 0)
+ if (gPokenavStructPtr->unk8FE8 != 0)
{
PlaySE(SE_SELECT);
sub_80EBDBC(&sub_80EDB88);
@@ -844,13 +528,13 @@ void sub_80EC268()
{
PlaySE(0x20);
sub_80EF428(0, 5);
- ewram0_10.var304 = 0xFF;
+ gPokenavStructPtr->unk304 = 0xFF;
}
}
break;
case 6:
sub_80F6C20();
- if (ewram0_10.varD158 != 0)
+ if (gPokenavStructPtr->unkD158 != 0)
{
PlaySE(SE_SELECT);
sub_80EBDBC(&sub_80EE3D8);
@@ -859,21 +543,21 @@ void sub_80EC268()
{
PlaySE(0x20);
sub_80EF428(0, 6);
- ewram0_10.var304 = 0xFF;
+ gPokenavStructPtr->unk304 = 0xFF;
}
break;
case 0xFF:
if ((var1 = sub_80EEC10()) != 0)
{
PlaySE(SE_SELECT);
- sub_80EF428(0, ewram0_10.var6dad);
- ewram0_10.var304 = 0;
+ sub_80EF428(0, gPokenavStructPtr->unk6DAD);
+ gPokenavStructPtr->unk304 = 0;
sub_80EED9C();
}
else if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
- sub_80EF428(0, ewram0_10.var6dad);
- ewram0_10.var304 = var1;
+ sub_80EF428(0, gPokenavStructPtr->unk6DAD);
+ gPokenavStructPtr->unk304 = var1;
}
break;
}
@@ -883,12 +567,12 @@ void sub_80EC4A0()
{
u32 var1;
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F1E84();
sub_80F2D04(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80F1F10())
@@ -898,14 +582,14 @@ void sub_80EC4A0()
else
var1 = 0x8;
sub_80EEFBC(var1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_80EEF34())
{
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
}
break;
case 3:
@@ -913,45 +597,45 @@ void sub_80EC4A0()
{
SetVBlankCallback(NULL);
sub_80EED0C();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 4:
sub_80F2620();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
sub_80EF814();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
sub_80EF840();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 7:
if (!sub_80EF874())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
sub_80F2C80(0x4);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 9:
if (!sub_80F2CBC(0x4))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 0xA:
sub_80F2DD8();
SetVBlankCallback(&sub_80EBD30);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 0xB:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 0xC:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 0xD:
sub_80EED2C(0x1);
@@ -959,7 +643,7 @@ void sub_80EC4A0()
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x75E0), 0, (void *)(VRAM + 0xF800), 4);
#endif
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 0xE:
if (!gPaletteFade.active)
@@ -970,7 +654,7 @@ void sub_80EC4A0()
void sub_80EC67C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
switch (sub_80FAB60())
@@ -983,37 +667,37 @@ void sub_80EC67C()
break;
case 4:
PlaySE(SE_SELECT);
- ewram0_10.var304 = 1;
+ gPokenavStructPtr->unk304 = 1;
break;
case 5:
PlaySE(SE_SELECT);
- ewram0_10.var304 = 4;
+ gPokenavStructPtr->unk304 = 4;
break;
}
break;
case 1:
- if (!ewram0_10.var6e90)
+ if (!gPokenavStructPtr->regionMap.zoomed)
{
sub_80FAEC4();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
else if (!sub_80EFBDC(1))
{
sub_80FAEC4();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_80FAFC0())
{
- if (!ewram0_10.var6e90)
+ if (!gPokenavStructPtr->regionMap.zoomed)
{
sub_80EFBB0();
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
}
else
{
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
}
break;
@@ -1021,19 +705,19 @@ void sub_80EC67C()
if (!sub_80EFBDC(0))
{
sub_80EFBB0();
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
}
break;
case 4:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 5:
if (!gPaletteFade.active)
{
sub_80F2DF4();
sub_80F2D04(0x4);
- gSaveBlock2.regionMapZoom = (ewram0_10.var6e90 == 1) ? 1 : 0;
+ gSaveBlock2.regionMapZoom = (gPokenavStructPtr->regionMap.zoomed == 1) ? 1 : 0;
sub_80EBDBC(&sub_80EC00C);
}
break;
@@ -1046,12 +730,12 @@ void sub_80EC67C()
void sub_80EC81C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F2D04(0);
sub_80EE9C0(1, 0, 1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80EEA0C())
@@ -1062,20 +746,20 @@ void sub_80EC81C()
void sub_80EC86C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
if (sub_80EEC90())
{
PlaySE(SE_SELECT);
- sub_80EF428(1, ewram0_10.var6dad);
+ sub_80EF428(1, gPokenavStructPtr->unk6DAD);
sub_80EED9C();
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- ewram0_10.var6df0 = ewram0_10.var6dad;
- switch (ewram0_10.var6df0)
+ gPokenavStructPtr->unk6DF0 = gPokenavStructPtr->unk6DAD;
+ switch (gPokenavStructPtr->unk6DF0)
{
case 0:
sub_80EBDBC(&sub_80ED620);
@@ -1091,9 +775,9 @@ void sub_80EC86C()
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- ewram0_10.var6df0 = 0x2;
- ewram0_10.var6dad = 0x2;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk6DF0 = 0x2;
+ gPokenavStructPtr->unk6DAD = 0x2;
+ gPokenavStructPtr->unk304++;
}
break;
case 1:
@@ -1105,11 +789,11 @@ void sub_80EC86C()
void sub_80EC960()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80EE9C0(2, 0, 5);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80EEA0C())
@@ -1120,18 +804,18 @@ void sub_80EC960()
void sub_80EC9A8()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F2D04(5);
- sub_80EE9C0(1, ewram0_10.var6df0, 0xC);
- ewram0_10.var304++;
+ sub_80EE9C0(1, gPokenavStructPtr->unk6DF0, 0xC);
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80EEA0C())
{
sub_80EBDBC(&sub_80EC86C);
- sub_80EF428(1, ewram0_10.var6dad);
+ sub_80EF428(1, gPokenavStructPtr->unk6DAD);
}
break;
}
@@ -1139,70 +823,70 @@ void sub_80EC9A8()
void sub_80ECA10()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
if (!sub_80EEF78())
{
SetVBlankCallback(&sub_80EBD80);
sub_80EED1C();
- ewram0_10.var6dad = ewram0_10.var6df0;
- ewram0_10.var6dae = 3;
+ gPokenavStructPtr->unk6DAD = gPokenavStructPtr->unk6DF0;
+ gPokenavStructPtr->unk6DAE = 3;
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 1:
sub_80EF248(1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 2:
if (!sub_80EF284(1))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
sub_80F1B8C(1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 4:
if (!sub_80F1BC8(1))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
if (sub_8055870()) return;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80EED2C(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
sub_80F2598();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 10:
sub_80F2C80(1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 11:
if (!sub_80F2CBC(1))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
sub_80F1DF0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
if (!sub_80F1E50())
{
- sub_80EF428(1, ewram0_10.var6dad);
+ sub_80EF428(1, gPokenavStructPtr->unk6DAD);
sub_80EBDBC(&sub_80EC86C);
#if DEBUG
if (gLinkOpen == TRUE)
@@ -1215,49 +899,49 @@ void sub_80ECA10()
void sub_80ECC08()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
if (sub_80EEC90())
{
PlaySE(SE_SELECT);
- sub_80EF428(2, ewram0_10.var6dad);
+ sub_80EF428(2, gPokenavStructPtr->unk6DAD);
sub_80EED9C();
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- switch ((s8)ewram0_10.var6dad)
+ switch ((s8)gPokenavStructPtr->unk6DAD)
{
case 0:
- ewram0_10.var87D8 = 22;
+ gPokenavStructPtr->unk87D8 = 22;
break;
case 1:
- ewram0_10.var87D8 = 23;
+ gPokenavStructPtr->unk87D8 = 23;
break;
case 2:
- ewram0_10.var87D8 = 24;
+ gPokenavStructPtr->unk87D8 = 24;
break;
case 3:
- ewram0_10.var87D8 = 33;
+ gPokenavStructPtr->unk87D8 = 33;
break;
case 4:
- ewram0_10.var87D8 = 47;
+ gPokenavStructPtr->unk87D8 = 47;
break;
case 5:
sub_80EBDBC(&sub_80EC9A8);
return;
}
- ewram0_10.var6dfc = ewram0_10.var6dad;
- ewram0_10.var76aa = 1;
+ gPokenavStructPtr->unk6DFC = gPokenavStructPtr->unk6DAD;
+ gPokenavStructPtr->unk76AA = 1;
sub_80EBDBC(&sub_80ED01C);
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- ewram0_10.var6dad = 0x5;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk6DAD = 0x5;
+ gPokenavStructPtr->unk304++;
}
break;
case 1:
@@ -1269,105 +953,105 @@ void sub_80ECC08()
void sub_80ECD80()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 2:
if (!sub_80EEF78())
{
SetVBlankCallback(&sub_80EBD80);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 3:
sub_80EED1C();
sub_80F3130();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 4:
sub_80F2D6C(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
sub_80F2D6C(0x5);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
- ewram0_10.var6dad = ewram0_10.var6dfc;
- ewram0_10.var6dae = 0x6;
+ gPokenavStructPtr->unk6DAD = gPokenavStructPtr->unk6DFC;
+ gPokenavStructPtr->unk6DAE = 0x6;
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80EF248(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 8:
if (!sub_80EF284(0x2))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
sub_80F1B8C(2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 10:
if (!sub_80F1BC8(2))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
sub_80EED2C(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 14:
sub_80F2598();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 15:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 16:
sub_80F2C80(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 17:
if (!sub_80F2CBC(0x1))
{
- ewram0_10.var306 = 0;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk306 = 0;
+ gPokenavStructPtr->unk304++;
}
break;
case 18:
sub_80F2C80(0x5);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 19:
if (!sub_80F2CBC(0x5))
{
sub_80F1DF0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 20:
if (!sub_80F1E50())
{
- sub_80EF428(2, ewram0_10.var6dad);
+ sub_80EF428(2, gPokenavStructPtr->unk6DAD);
sub_80EBDBC(&sub_80ECC08);
#if DEBUG
if (gLinkOpen == TRUE)
@@ -1380,26 +1064,26 @@ void sub_80ECD80()
void sub_80ED01C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F1E84();
sub_80F2D04(0x1);
sub_80F2D04(0x5);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80F1F10())
{
sub_80EEFBC(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_80EEF34())
{
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
}
break;
case 3:
@@ -1408,80 +1092,80 @@ void sub_80ED01C()
SetVBlankCallback(NULL);
sub_80EED0C();
sub_80EF814();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 4:
sub_80F2620();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
sub_80F4D44();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 6:
if (!sub_80F4D88())
- ewram0_10.var304 += 2;
+ gPokenavStructPtr->unk304 += 2;
else
- ewram0_10.var304 += 1;
+ gPokenavStructPtr->unk304 += 1;
break;
case 7:
if (!sub_8055870())
- ewram0_10.var304--;
+ gPokenavStructPtr->unk304--;
break;
case 8:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
sub_80F0264(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 10:
if (!sub_80F02A0())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
sub_80F3008(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 14:
sub_80EED2C(0x4);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 15:
if (!gPaletteFade.active)
{
- ewram0_10.var306 = 0;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk306 = 0;
+ gPokenavStructPtr->unk304++;
}
break;
case 16:
sub_80F2C80(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 17:
if (!sub_80F2CBC(0x1))
{
- ewram0_10.var306 = 0;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk306 = 0;
+ gPokenavStructPtr->unk304++;
}
break;
case 18:
- sub_80F2C80(ewram0_10.var6dfc + 7);
- ewram0_10.var304++;
+ sub_80F2C80(gPokenavStructPtr->unk6DFC + 7);
+ gPokenavStructPtr->unk304++;
// fall through
case 19:
- if (!sub_80F2CBC(ewram0_10.var6dfc + 7))
+ if (!sub_80F2CBC(gPokenavStructPtr->unk6DFC + 7))
{
sub_80EBDBC(&sub_80ED31C);
#if DEBUG
@@ -1495,7 +1179,7 @@ void sub_80ED01C()
void sub_80ED31C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
switch (sub_80F5DD4())
@@ -1506,7 +1190,7 @@ void sub_80ED31C()
return;
case 2:
PlaySE(SE_SELECT);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
return;
default:
if (gMain.newKeys & A_BUTTON)
@@ -1529,12 +1213,12 @@ void sub_80ED31C()
{
ShowMapNamePopUpWindow();
sub_80F3264();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_8055870())
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
break;
}
#if DEBUG
@@ -1545,42 +1229,42 @@ void sub_80ED31C()
void sub_80ED3D0()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
SetVBlankCallback(NULL);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
sub_80EED0C();
sub_80F6134();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 2:
sub_80EEFBC(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
sub_80F0264(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 4:
if (!sub_80F02A0())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
sub_80F3008(0);
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80EED2C(0x4);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
#if DEBUG
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x7DE0), 0, (void *)(VRAM + 0xF800), 4);
@@ -1595,11 +1279,11 @@ void sub_80ED3D0()
void sub_80ED4D8()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!gPaletteFade.active)
@@ -1607,35 +1291,35 @@ void sub_80ED4D8()
SetVBlankCallback(NULL);
sub_80EED0C();
sub_80F3130();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
sub_80F4CF0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 4:
sub_80EFF34();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 5:
if (!sub_80EFF68())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
sub_80F35B4();
sub_80EEFBC(0x2);
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(sub_80EBD4C);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80EED2C(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
#if DEBUG
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x7DE0), 0, (void *)(VRAM + 0xF000), 4);
@@ -1650,25 +1334,25 @@ void sub_80ED4D8()
void sub_80ED620()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F1E84();
sub_80F2D04(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80F1F10())
{
sub_80EEFBC(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_80EEF34())
{
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0x0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
}
break;
case 3:
@@ -1677,59 +1361,59 @@ void sub_80ED620()
SetVBlankCallback(NULL);
sub_80EED0C();
sub_80EF814();
- ewram0_10.var76aa = 0;
- ewram0_10.var304++;
+ gPokenavStructPtr->unk76AA = 0;
+ gPokenavStructPtr->unk304++;
}
break;
case 4:
sub_80F2620();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
- ewram0_10.varD162 = 0x2;
+ gPokenavStructPtr->unkD162 = 0x2;
sub_80F4BD0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
sub_80EFF34();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 7:
if (!sub_80EFF68())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 10:
sub_80F33A8();
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD4C);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
sub_80EED2C(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
sub_80F2C80(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 14:
if (!sub_80F2CBC(0x1))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 15:
sub_80F2C80(0x6);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
// fall through
case 16:
if (!sub_80F2CBC(0x6))
@@ -1760,68 +1444,68 @@ void sub_80F4FDC();
void sub_80ED858() {
u8 var1;
- switch (ewram0_10.var304) {
+ switch (gPokenavStructPtr->unk304) {
case 0:
sub_80F4F78();
sub_80F5B38();
- ewram0_10.var304 = 0x1;
+ gPokenavStructPtr->unk304 = 0x1;
break;
case 1:
if (sub_80F5B50()) return;
- ewram0_10.var304 = 0x2;
+ gPokenavStructPtr->unk304 = 0x2;
break;
case 2:
sub_80F0174(0x1);
- ewram0_10.var304 = 0x3;
+ gPokenavStructPtr->unk304 = 0x3;
break;
case 3:
if (sub_80F4FB4()) return;
sub_80F3C94();
sub_80F3D00();
- ewram0_10.var304 = 0x4;
+ gPokenavStructPtr->unk304 = 0x4;
break;
case 4:
- if ( (gMain.heldKeys & 0x40) && (ewram0_10.var87CB) && (!(ewram0_10.var76aa) || (ewram0_10.var87DC)) ) {
+ if ( (gMain.heldKeys & 0x40) && (gPokenavStructPtr->unk87CB) && (!(gPokenavStructPtr->unk76AA) || (gPokenavStructPtr->unk87DC)) ) {
PlaySE(SE_SELECT);
sub_80F5060(0x1);
move_anim_execute();
- ewram0_10.var304 = 0x5;
+ gPokenavStructPtr->unk304 = 0x5;
}
- else if ( (gMain.heldKeys & 0x80) && (ewram0_10.var87CB) && (!(ewram0_10.var76aa) || (ewram0_10.var76aa >= ewram0_10.var87DC)) ) {
+ else if ( (gMain.heldKeys & 0x80) && (gPokenavStructPtr->unk87CB) && (!(gPokenavStructPtr->unk76AA) || (gPokenavStructPtr->unk76AA >= gPokenavStructPtr->unk87DC)) ) {
PlaySE(SE_SELECT);
sub_80F5060(0);
move_anim_execute();
- ewram0_10.var304 = 0x5;
+ gPokenavStructPtr->unk304 = 0x5;
}
if (gMain.newKeys & B_BUTTON) {
PlaySE(SE_SELECT);
sub_80F4FDC();
move_anim_execute();
- ewram0_10.var304 = 0x9;
+ gPokenavStructPtr->unk304 = 0x9;
}
else if (gMain.newKeys & A_BUTTON) {
- if (ewram0_10.var76aa) {
- if (ewram0_10.var6dac) {
+ if (gPokenavStructPtr->unk76AA) {
+ if (gPokenavStructPtr->unk6DAC) {
PlaySE(SE_SELECT);
- ewram0_10.var304 = 0x7;
+ gPokenavStructPtr->unk304 = 0x7;
}
}
- else if ((ewram0_10.var87DC == ewram0_10.var87DA - 1)) {
+ else if ((gPokenavStructPtr->unk87DC == gPokenavStructPtr->unk87DA - 1)) {
PlaySE(SE_SELECT);
- ewram0_10.var304 = 0x9;
+ gPokenavStructPtr->unk304 = 0x9;
}
}
/*
if (gMain.heldKeys & 0x40) {
- if (ewram0_10.var87CB) {
- if (ewram0_10.var76aa) {
- if (!ewram0_10.var87DC) goto label1;
+ if (gPokenavStructPtr->unk87CB) {
+ if (gPokenavStructPtr->unk76AA) {
+ if (!gPokenavStructPtr->unk87DC) goto label1;
}
PlaySE(SE_SELECT);
sub_80F5060(0x1);
move_anim_execute();
- ewram0_10.var304 = 0x5;
+ gPokenavStructPtr->unk304 = 0x5;
}
else goto label1;
@@ -1830,14 +1514,14 @@ void sub_80ED858() {
break;
label1:
if (gMain.heldKeys & 0x80) {
- if (ewram0_10.var87CB) {
- if (ewram0_10.var76aa) {
- if (!(ewram0_10.var76aa < ewram0_10.var87DC)) goto label2;
+ if (gPokenavStructPtr->unk87CB) {
+ if (gPokenavStructPtr->unk76AA) {
+ if (!(gPokenavStructPtr->unk76AA < gPokenavStructPtr->unk87DC)) goto label2;
}
PlaySE(SE_SELECT);
sub_80F5060(0x1);
move_anim_execute();
- ewram0_10.var304 = 0x5;
+ gPokenavStructPtr->unk304 = 0x5;
}
else goto label2;
}
@@ -1848,18 +1532,18 @@ label2:
PlaySE(SE_SELECT);
sub_80F4FDC();
move_anim_execute();
- ewram0_10.var304 = 0x9;
+ gPokenavStructPtr->unk304 = 0x9;
}
else if (gMain.newKeys & A_BUTTON) {
- if (!ewram0_10.var76aa) {
- if ((ewram0_10.var87DC == ewram0_10.var87DA - 1)) {
+ if (!gPokenavStructPtr->unk76AA) {
+ if ((gPokenavStructPtr->unk87DC == gPokenavStructPtr->unk87DA - 1)) {
PlaySE(SE_SELECT);
- ewram0_10.var304 = 0x9;
+ gPokenavStructPtr->unk304 = 0x9;
}
}
else {
PlaySE(SE_SELECT);
- ewram0_10.var304 = 0x9;
+ gPokenavStructPtr->unk304 = 0x9;
}
}
*/
@@ -1868,36 +1552,36 @@ label2:
case 5:
if (gpu_sync_bg_show()) return;
sub_80F3D00();
- ewram0_10.var304 = 0x6;
+ gPokenavStructPtr->unk304 = 0x6;
break;
case 6:
if (sub_8055870()) return;
- ewram0_10.var304 = 0x4;
+ gPokenavStructPtr->unk304 = 0x4;
break;
case 7:
sub_80EEFBC(0x3);
sub_80F3668();
- ewram0_10.var304 = 0x8;
+ gPokenavStructPtr->unk304 = 0x8;
break;
case 8:
if (sub_80F7500()) return;
sub_80EEFBC(0x2);
sub_80F3698();
- ewram0_10.var304 = 0x4;
+ gPokenavStructPtr->unk304 = 0x4;
break;
case 9:
if (!(var1 = sub_80F5038())) {
sub_80F0174(0);
sub_80F2F48();
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var1);
- ewram0_10.var304 = 0xB;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0x0, 0x10, var1);
+ gPokenavStructPtr->unk304 = 0xB;
}
break;
case 0xA:
if (gPaletteFade.active) return;
sub_80F3CE8();
sub_80F5BDC();
- if (!ewram0_10.var76aa) {
+ if (!gPokenavStructPtr->unk76AA) {
sub_80F357C();
sub_80F2D6C(0x1);
sub_80F2D6C(0x6);
@@ -2713,25 +2397,25 @@ _080EDB84: .4byte sub_80ED3D0\n");
void sub_80EDB88()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F1E84();
sub_80F2D04(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80F1F10())
{
sub_80EEFBC(0x4);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_80EEF34())
{
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
}
break;
case 3:
@@ -2740,60 +2424,60 @@ void sub_80EDB88()
SetVBlankCallback(NULL);
sub_80EED0C();
sub_80EF814();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 4:
sub_80F2620();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
sub_80F638C();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 6:
if (!sub_80F63D0())
- ewram0_10.var304 += 2;
+ gPokenavStructPtr->unk304 += 2;
else
- ewram0_10.var304 += 1;
+ gPokenavStructPtr->unk304 += 1;
break;
case 7:
if (!sub_8055870())
- ewram0_10.var304--;
+ gPokenavStructPtr->unk304--;
break;
case 8:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
sub_80F0264(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 10:
if (!sub_80F02A0())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
sub_80F2C80(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 12:
if (!sub_80F2CBC(0x2))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
sub_80F3008(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 14:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 15:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 16:
sub_80EED2C(0x4);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
#if DEBUG
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x7DE0), 0, (void *)(VRAM + 0xF800), 4);
@@ -2808,7 +2492,7 @@ void sub_80EDB88()
void sub_80EDDBC()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
switch (sub_80F5DD4())
@@ -2819,7 +2503,7 @@ void sub_80EDDBC()
return;
case 2:
PlaySE(SE_SELECT);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
return;
default:
if (gMain.newKeys & A_BUTTON)
@@ -2842,12 +2526,12 @@ void sub_80EDDBC()
{
ShowMapNamePopUpWindow();
sub_80F3264();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_8055870())
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
break;
}
#if DEBUG
@@ -2858,18 +2542,18 @@ void sub_80EDDBC()
void sub_80EDE70()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!gPaletteFade.active)
{
sub_80F3130();
sub_80F2D6C(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
@@ -2881,11 +2565,11 @@ void sub_80EDE70()
void sub_80EDEE4()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!gPaletteFade.active)
@@ -2893,38 +2577,38 @@ void sub_80EDEE4()
SetVBlankCallback(NULL);
sub_80EED0C();
sub_80F3130();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
sub_80F66E0();
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
if (!sub_80F1080())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 4:
sub_80EEFBC(0x5);
sub_80F38B8();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 5:
if (!sub_80F38EC())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
sub_80EED2C(0x3);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
#if DEBUG
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x7DE0), 0, (void *)(VRAM + 0xF000), 4);
@@ -2932,7 +2616,7 @@ void sub_80EDEE4()
break;
case 9:
if (!gPaletteFade.active)
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 10:
if (!sub_80F170C())
@@ -2943,30 +2627,30 @@ void sub_80EDEE4()
void sub_80EE06C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F15A8();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
- if ((gMain.newAndRepeatedKeys & 0x40) && (ewram0_10.var87DC))
+ if ((gMain.newAndRepeatedKeys & 0x40) && (gPokenavStructPtr->unk87DC))
{
PlaySE(SE_SELECT);
sub_80F6A4C(-1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
- else if ((gMain.newAndRepeatedKeys & 0x80) && ewram0_10.var87DC < ewram0_10.var8774)
+ else if ((gMain.newAndRepeatedKeys & 0x80) && gPokenavStructPtr->unk87DC < gPokenavStructPtr->unk8774)
{
PlaySE(SE_SELECT);
sub_80F6A4C(1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
sub_80EEFBC(0xB);
- ewram0_10.var304 = 0x4;
+ gPokenavStructPtr->unk304 = 0x4;
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -2976,21 +2660,21 @@ void sub_80EE06C()
break;
case 2:
if (!sub_80F6AF0())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
if (!sub_8055870())
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
break;
case 4:
sub_80F3B00();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
if (!sub_80F3B58())
{
sub_80F1494();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
sub_80EED9C();
}
break;
@@ -3000,7 +2684,7 @@ void sub_80EE06C()
case 1:
PlaySE(SE_SELECT);
sub_80F3B94();
- ewram0_10.var304 = 0x7;
+ gPokenavStructPtr->unk304 = 0x7;
return;
default:
case 0:
@@ -3008,20 +2692,20 @@ void sub_80EE06C()
{
PlaySE(SE_SELECT);
sub_80F3B94();
- ewram0_10.var304 = 0x8;
+ gPokenavStructPtr->unk304 = 0x8;
}
break;
}
break;
case 7:
if (!sub_80F3BD4())
- ewram0_10.var304 = 0x4;
+ gPokenavStructPtr->unk304 = 0x4;
break;
case 8:
if (!sub_80F3BD4())
{
sub_80EEFBC(0x5);
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
}
break;
}
@@ -3033,11 +2717,11 @@ void sub_80EE06C()
void sub_80EE294()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!gPaletteFade.active)
@@ -3046,34 +2730,34 @@ void sub_80EE294()
sub_80EED0C();
sub_80F3C2C();
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
sub_80F6134();
sub_80F0264(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 3:
if (!sub_80F02A0())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 4:
sub_80EEFBC(0x4);
sub_80F3008(0x1);
SetVBlankCallback(&sub_80EBD18);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80EED2C(0x4);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
#if DEBUG
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x7DE0), 0, (void *)(VRAM + 0xF800), 4);
@@ -3088,25 +2772,25 @@ void sub_80EE294()
void sub_80EE3D8()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F1E84();
sub_80F2D04(0);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80F1F10())
{
sub_80EEFBC(0x9);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_80EEF34())
{
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
}
break;
case 3:
@@ -3116,44 +2800,44 @@ void sub_80EE3D8()
sub_80EED0C();
sub_80EF814();
sub_80EEE08();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 4:
sub_80F2620();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
sub_80F0264(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 6:
if (!sub_80F02A0())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 7:
sub_80F2C80(0x3);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 8:
if (!sub_80F2CBC(0x3))
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 9:
sub_80F3008(0x2);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 10:
if (!sub_8055870())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
sub_80F6F10();
- BeginNormalPaletteFade(ewram0_10.var308, -1, 16, 0, RGB(0, 0, 0));
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 16, 0, RGB(0, 0, 0));
SetVBlankCallback(&sub_80EBD68);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
sub_80EED2C(0x5);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
#if DEBUG
if (gLinkOpen == TRUE)
debug_sub_8008218((void *)(VRAM + 0x7DE0), 0, (void *)(VRAM + 0xF800), 4);
@@ -3168,18 +2852,18 @@ void sub_80EE3D8()
void sub_80EE58C()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
switch (sub_80F5DD4())
{
case 1:
PlaySE(SE_SELECT);
- sub_80F0FFC(ewram0_10.var876E);
+ sub_80F0FFC(gPokenavStructPtr->unk876E);
return;
case 2:
PlaySE(SE_SELECT);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
return;
default:
if (gMain.newKeys & A_BUTTON)
@@ -3200,14 +2884,14 @@ void sub_80EE58C()
case 1:
if (!sub_80F0718())
{
- sub_80F0FFC(ewram0_10.var876E);
+ sub_80F0FFC(gPokenavStructPtr->unk876E);
sub_80F3264();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
if (!sub_8055870())
- ewram0_10.var304 = 0;
+ gPokenavStructPtr->unk304 = 0;
break;
}
#if DEBUG
@@ -3218,64 +2902,64 @@ void sub_80EE58C()
void sub_80EE658()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
sub_80F3294(0x1);
sub_80EEFBC(0xA);
sub_80F0B24();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!sub_80F0B44())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 2:
sub_80F0F64();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 3:
if (!sub_80F0FEC())
{
sub_80F6FB8(0x1);
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 4:
sub_80F6DB8();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 5:
sub_80F700C((u8 *)(gSharedMem + 0x8788), *(u16 *)(gSharedMem + 0x8788 - 0x1A));
sub_80F42C4((u8 *)(gSharedMem + 0x8788));
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 6:
LoadTrainerEyesDescriptionLines();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
case 7:
if (!sub_80F6E9C() && !sub_80F0D5C())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 8:
- if ((gMain.heldKeys & 0x40) && ewram0_10.var87DC)
+ if ((gMain.heldKeys & 0x40) && gPokenavStructPtr->unk87DC)
{
PlaySE(SE_SELECT);
sub_80F708C(-1);
- ewram0_10.var304 = 0x10;
+ gPokenavStructPtr->unk304 = 0x10;
}
- else if ((gMain.heldKeys & 0x80) && ewram0_10.var87DC < ewram0_10.var8774)
+ else if ((gMain.heldKeys & 0x80) && gPokenavStructPtr->unk87DC < gPokenavStructPtr->unk8774)
{
PlaySE(SE_SELECT);
sub_80F708C(1);
- ewram0_10.var304 = 0x10;
+ gPokenavStructPtr->unk304 = 0x10;
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
sub_80F4394();
sub_80F0EC0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 9:
@@ -3283,28 +2967,28 @@ void sub_80EE658()
{
sub_80F6FB8(0);
sub_80F2FB0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 10:
sub_80F6134();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 11:
sub_80F0FA0();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 12:
if (!sub_80F0FEC())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 13:
sub_80F0C28();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 14:
if (!sub_80F0C48())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 15:
sub_80EEFBC(0x9);
@@ -3314,22 +2998,22 @@ void sub_80EE658()
break;
case 16:
if (!sub_80F70FC())
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
break;
case 17:
if (!sub_8055870())
- ewram0_10.var304 = 0x8;
+ gPokenavStructPtr->unk304 = 0x8;
break;
}
}
void sub_80EE8F4()
{
- switch (ewram0_10.var304)
+ switch (gPokenavStructPtr->unk304)
{
case 0:
- BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ BeginNormalPaletteFade(gPokenavStructPtr->unk308, -1, 0, 16, RGB(0, 0, 0));
+ gPokenavStructPtr->unk304++;
break;
case 1:
if (!gPaletteFade.active)
@@ -3337,7 +3021,7 @@ void sub_80EE8F4()
sub_80F3130();
sub_80F2D6C(0x2);
sub_80F6FFC();
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
break;
case 2:
@@ -3348,11 +3032,11 @@ void sub_80EE8F4()
void sub_80EE96C()
{
- if (!ewram0_10.var304)
+ if (!gPokenavStructPtr->unk304)
{
PlaySE(0x6F);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- ewram0_10.var304++;
+ gPokenavStructPtr->unk304++;
}
else
{
@@ -3367,31 +3051,31 @@ void sub_80EE96C()
void sub_80EE9C0(u8 param1, u8 param2, u8 param3)
{
sub_80F1E84();
- ewram0_10.var6e14 = param1;
- ewram0_10.var6e15 = param2;
- ewram0_10.var6e16 = 0;
- ewram0_10.var6e17 = param3;
+ gPokenavStructPtr->unk6E14 = param1;
+ gPokenavStructPtr->unk6E15 = param2;
+ gPokenavStructPtr->unk6E16 = 0;
+ gPokenavStructPtr->unk6E17 = param3;
}
#if 0
bool8 sub_80EEA0C() {
- switch (ewram0_10.var6e16) {
+ switch (gPokenavStructPtr->unk6E16) {
case 0:
if (sub_80F1F10()) return 1;
- if (ewram0_10.var6e17 != 0xC) {
- ewram0_10.var6e16 = 0x1;
+ if (gPokenavStructPtr->unk6E17 != 0xC) {
+ gPokenavStructPtr->unk6E16 = 0x1;
return 1;
}
else {
- ewram0_10.var6e16 = 0x3;
+ gPokenavStructPtr->unk6E16 = 0x3;
return 1;
}
case 1:
- sub_80F2C80(ewram0_10.var6e17);
- ewram0_10.var6e16++;
+ sub_80F2C80(gPokenavStructPtr->unk6E17);
+ gPokenavStructPtr->unk6E16++;
case 2:
- if (sub_80F2CBC(ewram0_10.var6e17)) return 1;
- ewram0_10.var6e16++;
+ if (sub_80F2CBC(gPokenavStructPtr->unk6E17)) return 1;
+ gPokenavStructPtr->unk6E16++;
case 3:
}
@@ -3651,18 +3335,18 @@ bool8 sub_80EEC10()
{
do
{
- if (--ewram0_11.var6dad < 0)
- ewram0_11.var6dad = ewram0_11.var6dae - 1;
- } while (!ewram0_10.var6db2[ewram0_11.var6dad]);
+ if (--gPokenavStructPtr->unk6DAD < 0)
+ gPokenavStructPtr->unk6DAD = gPokenavStructPtr->unk6DAE - 1;
+ } while (!gPokenavStructPtr->unk6DB2[gPokenavStructPtr->unk6DAD]);
return TRUE;
}
if (gMain.newKeys & 0x80)
{
do
{
- if (++ewram0_11.var6dad >= ewram0_11.var6dae)
- ewram0_11.var6dad = 0;
- } while (!ewram0_10.var6db2[ewram0_11.var6dad]);
+ if (++gPokenavStructPtr->unk6DAD >= gPokenavStructPtr->unk6DAE)
+ gPokenavStructPtr->unk6DAD = 0;
+ } while (!gPokenavStructPtr->unk6DB2[gPokenavStructPtr->unk6DAD]);
return TRUE;
}
#if DEBUG
@@ -3676,14 +3360,14 @@ bool8 sub_80EEC90()
{
if (gMain.newKeys & 0x40)
{
- if (--ewram0_11.var6dad < 0)
- ewram0_11.var6dad = ewram0_11.var6dae - 1;
+ if (--gPokenavStructPtr->unk6DAD < 0)
+ gPokenavStructPtr->unk6DAD = gPokenavStructPtr->unk6DAE - 1;
return TRUE;
}
if (gMain.newKeys & 0x80)
{
- if (++ewram0_11.var6dad >= ewram0_11.var6dae)
- ewram0_11.var6dad = 0;
+ if (++gPokenavStructPtr->unk6DAD >= gPokenavStructPtr->unk6DAE)
+ gPokenavStructPtr->unk6DAD = 0;
return TRUE;
}
#if DEBUG
@@ -3727,5013 +3411,13 @@ void sub_80EED2C(u8 param1)
void sub_80EED9C(void)
{
- gUnknown_03000744 = ewram0_10.var300;
- ewram0_10.var300 = &sub_80EEDC4;
- ewram0_10.var300();
+ gUnknown_03000744 = gPokenavStructPtr->unk300;
+ gPokenavStructPtr->unk300 = &sub_80EEDC4;
+ gPokenavStructPtr->unk300();
}
void sub_80EEDC4(void)
{
if (sub_8055870() != 0x1)
- ewram0_10.var300 = gUnknown_03000744;
-}
-
-void sub_80EEDE8(void)
-{
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
-}
-
-void sub_80EEE08(void)
-{
- gUnknown_083DFEC4->unkD160 = 0;
-}
-
-void sub_80EEE20(void)
-{
- gUnknown_083DFEC4->unkD160 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- {
- while (sub_80EEE54())
- ;
- }
-}
-
-bool8 sub_80EEE54(void)
-{
- switch (gUnknown_083DFEC4->unkD160)
- {
- case 0:
- LZ77UnCompVram(gPokenavHoennMapMisc_Gfx, (void *)VRAM + 0xC000);
- break;
- case 1:
- LZ77UnCompVram(gUnknown_08E99FB0, (void *)VRAM + 0xD800);
- break;
- case 2:
- LoadPalette(gPokenavHoennMap1_Pal, 0x10, 0x20);
- break;
- case 3:
- sub_80EF58C(0);
- sub_80EF58C(1);
- sub_80EF58C(2);
- break;
- case 4:
- gUnknown_083DFEC4->unk030C = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG1CNT = 0x1B0C;
- gUnknown_083DFEC4->unkD160++;
- default:
- return FALSE;
- }
- gUnknown_083DFEC4->unkD160++;
- return TRUE;
-}
-
-bool8 sub_80EEF34(void)
-{
- bool8 retVal = TRUE;
-
- if (gUnknown_083DFEC4->unk030C == 32)
- return FALSE;
-
- gUnknown_083DFEC4->unk030C += 2;
- if (gUnknown_083DFEC4->unk030C > 31)
- {
- gUnknown_083DFEC4->unk030C = 32;
- retVal = FALSE;
- }
-
- REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
- return retVal;
-}
-
-bool8 sub_80EEF78(void)
-{
- bool8 retVal = TRUE;
-
- if (gUnknown_083DFEC4->unk030C == 0)
- return FALSE;
-
- gUnknown_083DFEC4->unk030C -= 2;
- if (gUnknown_083DFEC4->unk030C <= 0)
- {
- gUnknown_083DFEC4->unk030C = 0;
- retVal = FALSE;
- }
-
- REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
- return retVal;
-}
-
-void sub_80EEFBC(u8 a)
-{
- u8 var1;
-
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 0, 17, 2);
-
- switch (a)
- {
- case 0:
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 17, 0, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 11:
- sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 2:
- var1 = gUnknown_083DFEC4->unk6DAC;
- if (!var1)
- {
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 2, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, var1, 6, 7, 2);
- }
- else
- {
- sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- }
- break;
- case 3:
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 4, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 4:
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 2, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 7:
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 4, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 8:
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 4, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 5:
- case 9:
- sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 2, 10, 2);
- sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- case 10:
- sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
- break;
- }
-}
-
-void sub_80EF248(u8 a)
-{
- gUnknown_083DFEC4->unkD160 = 0;
-
- if (!gUnknown_083DFEC4->unk6DAC)
- {
- while (sub_80EF284(a))
- ;
- }
-}
-
-bool8 sub_80EF284(u8 a)
-{
- switch (gUnknown_083DFEC4->unkD160)
- {
- case 0:
- sub_80EEDE8();
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7224);
- break;
- case 2:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E7224);
- break;
- case 3:
- if (!MultistepInitMenuWindowContinue())
- return TRUE;
- break;
- case 4:
- DmaCopy16Defvars(3, gUnknown_083DFEEC, (void *)VRAM + 0x5000, 0xA0);
- break;
- case 5:
- LZ77UnCompVram(gUnknown_083DFF8C, (void *)VRAM + 0xF800);
- break;
- case 6:
- DmaCopy16Defvars(3, gUnknown_083E005C, (void *)VRAM + 0x8000, 0x20);
- break;
- case 7:
- LZ77UnCompVram(gUnknown_083E007C, (void *)VRAM + 0xE000);
- break;
- case 8:
- LZ77UnCompVram(gPokenavOutlineTilemap, (void *)VRAM + 0xE800);
- break;
- case 9:
- LZ77UnCompVram(gPokenavOutlineTiles, (void *)VRAM + 0x8020);
- break;
- case 10:
- sub_80EF54C(a);
- LoadPalette(gUnknown_083DFECC, 0xF0, 0x20);
- LoadPalette(gPokenavOutlinePalette, 0x40, 0x20);
- sub_80EF7D4();
- break;
- case 11:
- REG_BG0CNT = 0x1F01;
- REG_BG2CNT = 0x1D0A;
- REG_BG3CNT = 0x1C0B;
- REG_BLDCNT = 0;
-
- gUnknown_083DFEC4->unkD160++;
- return FALSE;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unkD160++;
- return TRUE;
-}
-
-void sub_80EF428(u8 a, u8 b)
-{
- u8 *tileBuffer;
- const u8 *pcText = 0;
-
- switch (a)
- {
- case 0:
- pcText = gUnknown_083E31B0[b];
- break;
- case 1:
- pcText = gUnknown_083E31CC[b];
- break;
- case 2:
- pcText = gUnknown_083E31D8[b];
- break;
- }
-
- tileBuffer = gUnknown_083DFEC8;
- AlignStringInMenuWindow(&tileBuffer[0x800], pcText, 0xC0, 2);
- Menu_PrintText(&tileBuffer[0x800], 3, 17);
-}
-
-void sub_80EF490(u8 a)
-{
- u16 var1, var2;
-
- if (a == 2)
- a = 1;
-
- gUnknown_083DFEC4->unkCE4E = a * 30;
- var1 = gUnknown_083DFEC4->unkCE4C;
- var2 = a * 30;
- if (var1 < var2)
- gUnknown_083DFEC4->unkCE50 = 2;
- else if (var1 > var2)
- gUnknown_083DFEC4->unkCE50 = -2;
- else
- gUnknown_083DFEC4->unkCE50 = 0;
-}
-
-bool8 sub_80EF4F8(void)
-{
- u16 *palettes;
-
- if (gUnknown_083DFEC4->unkCE4C == gUnknown_083DFEC4->unkCE4E)
- {
- return FALSE;
- }
- else
- {
- gUnknown_083DFEC4->unkCE4C = gUnknown_083DFEC4->unkCE50 + gUnknown_083DFEC4->unkCE4C;
-
- palettes = gUnknown_083DFEC4->palettesCE52;
- LoadPalette(&palettes[gUnknown_083DFEC4->unkCE4C], 0x31, 4);
- return TRUE;
- }
-
-}
-
-void sub_80EF54C(u8 a)
-{
- if (a == 2)
- a = 1;
-
- gUnknown_083DFEC4->unkCE4C = a * 30;
- LoadPalette(&gUnknown_083DFEC4->palettesCE52[gUnknown_083DFEC4->unkCE4C], 0x31, 4);
-}
-
-void sub_80EF58C(u8 a)
-{
- u16 i;
- u16 * palettes;
- const u16 *var1;
-
- switch (a)
- {
- case 0:
- for (i = 0; i < 62; i++)
- gUnknown_083DFEC4->palettesCE52[i] = 0;
- break;
- case 1:
- palettes = gUnknown_083DFEC4->palettesCE52;
- var1 = gUnknown_083E003C;
- sub_80EF624(&var1[1], &var1[3], 16, 2, palettes);
- break;
- case 2:
- palettes = gUnknown_083DFEC4->palettesCE8E;
- var1 = gUnknown_083E003C;
- sub_80EF624(&var1[3], &var1[7], 16, 2, palettes);
- break;
- }
-}
-
-#ifdef NONMATCHING
-void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes)
-{
- u16 red1, green1, blue1;
- u16 red2, green2, blue2;
- s32 redDiv, greenDiv, blueDiv;
- u16 *palettes2;
- u16 i, j;
-
- i = 0;
- while (i < d)
- {
- red1 = (*a & 0x1F) << 8;
- green1 = ((*a >> 5) & 0x1F) << 8;
- blue1 = ((*a >> 10) & 0x1F) << 8;
-
- red2 = (*b & 0x1F) << 8;
- green2 = ((*b >> 5) & 0x1F) << 8;
- blue2 = ((*b >> 10) & 0x1F) << 8;
-
- redDiv = (red2 - red1) / c;
- greenDiv = (green2 - green1) / c;
- blueDiv = (blue2 - blue1) / c;
-
- palettes2 = palettes;
- for (j = 0; j < c - 1; j++)
- {
- *palettes2 = (((blue1 << 8) >> 16) << 10) | (((green1 << 8) >> 16) << 5) | ((red1 << 8) >> 16);
- palettes2 += d;
- red1 += redDiv;
- green1 += greenDiv;
- blue1 += blueDiv;
- }
-
- *palettes2 = (red2 >> 8) | (blue2 << 2) | (green2 >> 3);
- palettes++;
-
- a++;
- b++;
- i++;
- }
-}
-#else
-NAKED
-void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x38\n\
- str r0, [sp]\n\
- str r1, [sp, 0x4]\n\
- ldr r4, [sp, 0x58]\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r2, [sp, 0x8]\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- str r3, [sp, 0xC]\n\
- movs r0, 0\n\
- str r0, [sp, 0x10]\n\
- lsls r0, r3, 16\n\
- ldr r1, [sp, 0x10]\n\
- cmp r1, r3\n\
- bcs _080EF72E\n\
- subs r2, 0x1\n\
- str r2, [sp, 0x20]\n\
- str r0, [sp, 0x2C]\n\
-_080EF654:\n\
- ldr r2, [sp]\n\
- ldrh r1, [r2]\n\
- movs r0, 0x1F\n\
- ands r0, r1\n\
- lsls r7, r0, 8\n\
- lsls r1, 16\n\
- lsrs r0, r1, 21\n\
- movs r2, 0x1F\n\
- ands r0, r2\n\
- lsls r6, r0, 8\n\
- lsrs r1, 26\n\
- ands r1, r2\n\
- lsls r5, r1, 8\n\
- ldr r0, [sp, 0x4]\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1F\n\
- ands r0, r1\n\
- lsls r0, 8\n\
- str r0, [sp, 0x14]\n\
- lsls r1, 16\n\
- lsrs r0, r1, 21\n\
- ands r0, r2\n\
- lsls r0, 8\n\
- str r0, [sp, 0x18]\n\
- lsrs r1, 26\n\
- ands r1, r2\n\
- lsls r1, 8\n\
- str r1, [sp, 0x1C]\n\
- ldr r1, [sp, 0x14]\n\
- subs r0, r1, r7\n\
- ldr r1, [sp, 0x8]\n\
- bl __divsi3\n\
- mov r10, r0\n\
- ldr r2, [sp, 0x18]\n\
- subs r0, r2, r6\n\
- ldr r1, [sp, 0x8]\n\
- bl __divsi3\n\
- mov r9, r0\n\
- ldr r1, [sp, 0x1C]\n\
- subs r0, r1, r5\n\
- ldr r1, [sp, 0x8]\n\
- bl __divsi3\n\
- mov r8, r0\n\
- adds r3, r4, 0\n\
- movs r4, 0\n\
- ldr r2, [sp]\n\
- adds r2, 0x2\n\
- str r2, [sp, 0x30]\n\
- ldr r0, [sp, 0x4]\n\
- adds r0, 0x2\n\
- str r0, [sp, 0x34]\n\
- adds r1, r3, 0x2\n\
- str r1, [sp, 0x24]\n\
- ldr r2, [sp, 0x10]\n\
- adds r2, 0x1\n\
- str r2, [sp, 0x28]\n\
- ldr r0, [sp, 0x20]\n\
- cmp r4, r0\n\
- bge _080EF700\n\
- ldr r1, [sp, 0xC]\n\
- lsls r1, 1\n\
- mov r12, r1\n\
-_080EF6D6:\n\
- lsls r0, r7, 8\n\
- lsrs r2, r0, 16\n\
- lsls r0, r6, 8\n\
- lsrs r1, r0, 16\n\
- lsls r0, r5, 8\n\
- lsrs r0, 16\n\
- lsls r0, 10\n\
- lsls r1, 5\n\
- orrs r0, r1\n\
- orrs r2, r0\n\
- strh r2, [r3]\n\
- add r3, r12\n\
- add r7, r10\n\
- add r6, r9\n\
- add r5, r8\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- ldr r2, [sp, 0x20]\n\
- cmp r4, r2\n\
- blt _080EF6D6\n\
-_080EF700:\n\
- ldr r4, [sp, 0x14]\n\
- lsrs r2, r4, 8\n\
- ldr r1, [sp, 0x1C]\n\
- lsls r0, r1, 2\n\
- ldr r4, [sp, 0x18]\n\
- lsrs r1, r4, 3\n\
- orrs r0, r1\n\
- orrs r2, r0\n\
- strh r2, [r3]\n\
- ldr r0, [sp, 0x30]\n\
- str r0, [sp]\n\
- ldr r1, [sp, 0x34]\n\
- str r1, [sp, 0x4]\n\
- ldr r4, [sp, 0x24]\n\
- ldr r2, [sp, 0x28]\n\
- lsls r0, r2, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x10]\n\
- ldr r1, [sp, 0x2C]\n\
- lsrs r0, r1, 16\n\
- ldr r2, [sp, 0x10]\n\
- cmp r2, r0\n\
- bcc _080EF654\n\
-_080EF72E:\n\
- add sp, 0x38\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-void sub_80EF740(void)
-{
- gUnknown_083DFEC4->unk6DA0 = (gUnknown_083DFEC4->unk6DA0 + 1) & 1;
- if (gUnknown_083DFEC4->unk6DA0)
- gUnknown_083DFEC4->unk6DA2++;
-
- REG_BG3HOFS = gUnknown_083DFEC4->unk6DA2;
-}
-
-void sub_80EF780(u8 taskId)
-{
- if (gTasks[taskId].data[0] == 0 || (gUnknown_083DFEC4->unk6DA2 & 0x7) != 0)
- {
- sub_80EF740();
- }
- else
- {
- u16 value = gUnknown_083DFEC4->unk6DA2 & 0x7;
- gUnknown_083DFEC4->unk6DA2 = value;
- gUnknown_083DFEC4->unk6DA0 = value;
- REG_BG3HOFS = value;
- }
-}
-
-void sub_80EF7D4(void)
-{
- gUnknown_083DFEC4->unk6DA2 = 0;
- gUnknown_083DFEC4->unk6DA0 = 0;
- gUnknown_083DFEC4->taskId6DA4 = CreateTask(sub_80EF780, 80);
-}
-
-void sub_80EF814(void)
-{
- if (FuncIsActiveTask(sub_80EF780))
- DestroyTask(gUnknown_083DFEC4->taskId6DA4);
-}
-
-void sub_80EF840(void)
-{
- gUnknown_083DFEC4->unkD160 = 0;
-
- if (gUnknown_083DFEC4->unk6DAC == 0)
- {
- while (sub_80EF874() != 0)
- ;
- }
-}
-
-bool8 sub_80EF874(void)
-{
- switch (gUnknown_083DFEC4->unkD160)
- {
- case 0:
- sub_80EEDE8();
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7224);
- break;
- case 2:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E7224);
- break;
- case 3:
- if (!MultistepInitMenuWindowContinue())
- return TRUE;
- break;
- case 4:
- Menu_EraseScreen();
- break;
- case 5:
- sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom ? TRUE : FALSE);
- break;
- case 6:
- if (sub_80FA940())
- return TRUE;
- break;
- case 7:
- LZ77UnCompVram(gPokenavHoennMapSquares_Gfx, (void *)VRAM + 0x5000);
- break;
- case 8:
- LoadPalette(gPokenavHoennMapSquares_Pal, 0x30, 0x20);
- sub_80EFC3C();
- break;
- case 9:
- if (sub_80EFC64())
- return TRUE;
- break;
- case 10:
- Menu_DrawStdWindowFrame(13, 3, 29, 17);
- sub_80EF9F8();
- break;
- case 11:
- if (!gUnknown_083DFEC4->regionMap.zoomed)
- {
- gUnknown_083DFEC4->unk7698 = 160;
- REG_BG0VOFS = 160;
- }
- else
- {
- gUnknown_083DFEC4->unk7698 = 256;
- REG_BG0VOFS = 0;
- }
-
- REG_BG0CNT = REG_BG0CNT;
- REG_BG0CNT |= 1;
- REG_BLDCNT = 0;
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unkD160++;
- return TRUE;
-}
-
-asm(".include \"constants/gba_constants.inc\"\n");
-
-void sub_80EF9F8(void)
-{
- bool8 someBool = FALSE;
- u16 top = 4;
- u16 mapSectionId;
- u8 b;
-
- switch (gUnknown_083DFEC4->regionMap.unk16)
- {
- case 0:
- break;
- case 1:
- case 4:
- sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1);
- top += 2;
- if (gLinkOpen == TRUE)
- {
- sub_80F1A80();
- someBool = TRUE;
- }
- else
- {
- u16 i;
-
- for (i = 0; i < 4; i++)
- {
- const u8 *secName = GetLandmarkName(
- gUnknown_083DFEC4->regionMap.mapSectionId,
- gUnknown_083DFEC4->regionMap.everGrandeCityArea,
- i);
-
- if (secName == NULL)
- break;
- sub_8072A18(secName, 0x70, top * 8, 0x78, 1);
- top += 2;
- }
- }
- break;
- case 2:
- sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1);
- top += 2;
- mapSectionId = gUnknown_083DFEC4->regionMap.mapSectionId;
- b = gUnknown_083DFEC4->regionMap.everGrandeCityArea;
- if (gUnknown_083DFEC4->unkCDCC[mapSectionId][b] != NULL)
- {
- Menu_BlankWindowRect(14, top, 15, 15);
- Menu_BlankWindowRect(26, top, 28, 15);
- sub_8095C8C((void *)(VRAM + 0xF800), 16, 6, gUnknown_083DFEC4->unkCDCC[mapSectionId][b], 0, 0, 10, 10, 10);
- top += 11;
- }
- break;
- case 3:
- sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, top * 8, 0x78, 1);
- top += 2;
- break;
- }
-
- // Epic fail by the compiler at optimizing this.
- if (!someBool && top < 16)
- Menu_BlankWindowRect(14, top, 28, 15);
-
- if (gUnknown_083DFEC4->regionMap.unk16 == 2)
- sub_80EFD74();
- else
- sub_80EFDA0();
-}
-
-void sub_80EFBB0(void)
-{
- if (!gUnknown_083DFEC4->regionMap.zoomed)
- sub_80EEFBC(8);
- else
- sub_80EEFBC(7);
-}
-
-bool8 sub_80EFBDC(bool8 a)
-{
- bool8 retVal = TRUE;
- u16 var1 = gUnknown_083DFEC4->unk7698;
-
- if (a)
- {
- if (var1 > 168)
- {
- var1 = var1 - 8;
- }
- else
- {
- var1 = 160;
- retVal = FALSE;
- }
- }
- else
- {
- if (var1 < 248)
- {
- var1 = var1 + 8;
- }
- else
- {
- var1 = 256;
- retVal = FALSE;
- }
- }
-
- gUnknown_083DFEC4->unk7698 = var1;
- REG_BG0VOFS = var1 & 0xFF;
-
- return retVal;
-}
-
-void sub_80EFC3C(void)
-{
- gUnknown_083DFEC4->unkBC9A = 0;
- gUnknown_083DFEC4->unkBC9B = 0;
- sub_80EFD3C();
-}
-
-bool8 sub_80EFC64(void)
-{
- u16 i;
- u8 var1;
- u16 var2;
-
- if (gUnknown_083DFEC4->unkBC9A >= 16)
- return FALSE;
-
- var1 = gUnknown_083DFEC4->unkBC9A;
- var2 = gUnknown_083DFEC4->unkBC9B;
- for (i = 0; i < 2; i++)
- {
- if (gPokenavCityMaps[var1][i] != 0)
- {
- LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]);
- gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2];
- var2++;
- }
- else
- {
- gUnknown_083DFEC4->unkCDCC[var1][i] = NULL;
- }
- }
-
- if (++gUnknown_083DFEC4->unkBC9A >= 16)
- return FALSE;
-
- gUnknown_083DFEC4->unkBC9B = var2;
- return TRUE;
-}
-
-void sub_80EFD3C(void)
-{
- gUnknown_083DFEC4->unk769E = 0;
- gUnknown_083DFEC4->unk769C = 47;
- gUnknown_083DFEC4->unk769D = 0;
- gUnknown_083DFEC4->unk769A = 0;
-}
-
-void sub_80EFD74(void)
-{
- gUnknown_083DFEC4->unk769E = 1;
- if (gUnknown_083DFEC4->unk769D == 1)
- gUnknown_083DFEC4->unk769D = 2;
-}
-
-void sub_80EFDA0(void)
-{
- sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9AC2C, 0, 0, 15, 1, 15);
- gUnknown_083DFEC4->unk769E = 0;
-}
-
-void sub_80EFDE4(u8 param0)
-{
- u16 var1 = 60 - gUnknown_083DFEC4->unk769C;
-
- if (var1 > 15)
- var1 = 15;
-
- if (gUnknown_083DFEC4->unk769E != 0)
- {
- sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9ABB4, gUnknown_083DFEC4->unk769C, 0, var1, 1, 60);
-
- if (var1 < 15)
- {
- u16 var2 = var1 + 14;
-
- sub_8095C8C((void *)VRAM + 0xF800, var2, 16, gUnknown_08E9ABB4, 0, 0, (u16)(15 - var1), 1, 60);
- }
- }
-}
-
-void sub_80EFE7C(void)
-{
- u16 var1;
- u8 var2 = gUnknown_083DFEC4->unk769D;
-
- switch (var2)
- {
- case 0:
- var1 = ++gUnknown_083DFEC4->unk769C;
-
- if (var1 > 59)
- gUnknown_083DFEC4->unk769C = var2;
-
- sub_80EFDE4(gUnknown_083DFEC4->unk769E);
-
- switch (gUnknown_083DFEC4->unk769C)
- {
- case 0:
- case 15:
- case 30:
- case 45:
- gUnknown_083DFEC4->unk769D = 1;
- gUnknown_083DFEC4->unk769A = 0;
- break;
- }
- break;
- case 1:
- var1 = ++gUnknown_083DFEC4->unk769A;
- if (var1 > 120)
- {
- gUnknown_083DFEC4->unk769A = 0;
- gUnknown_083DFEC4->unk769D = 0;
- }
- break;
- case 2:
- sub_80EFDE4(1);
- gUnknown_083DFEC4->unk769D = 1;
- break;
- }
-}
-
-void sub_80EFF34(void)
-{
- gUnknown_083DFEC4->unkD160 = 0;
-
- if (gUnknown_083DFEC4->unk6DAC == 0)
- {
- while (sub_80EFF68())
- ;
- }
-}
-
-bool8 sub_80EFF68(void)
-{
- switch (gUnknown_083DFEC4->unkD160)
- {
- case 0:
- sub_80EEDE8();
- gUnknown_083DFEC4->unkD162 = 11;
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E7080);
- break;
- case 2:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E7080);
- break;
- case 3:
- if (!MultistepInitMenuWindowContinue())
- return TRUE;
- break;
- case 4:
- Menu_EraseScreen();
- break;
- case 5:
- sub_80F1614();
- break;
- case 6:
- if (sub_80F162C(0))
- return TRUE;
- break;
- case 7:
- LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)VRAM + 0x5000);
- break;
- case 8:
- LZ77UnCompVram(gUnknown_08E9AC4C, (void *)VRAM + 0xF000);
- LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
- break;
- case 9:
- if (gUnknown_083DFEC4->unk76AA == 1)
- sub_8095C8C((void *)VRAM + 0xF000, 0, 5, gUnknown_083E01AC, 0, 0, 9, 4, 9);
- break;
- case 10:
- LZ77UnCompVram(gUnknown_08E9FEB4, (void *)VRAM + 0xB800);
- break;
- case 11:
- LoadPalette(gUnknown_083E0254, 0x30, 0x20);
- LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
- LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2);
- LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2);
- LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2);
- sub_80F01A4();
- break;
- case 12:
- sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
- break;
- case 13:
- REG_BG3CNT = 0x1E03;
- REG_BG2CNT = 0x1702;
- REG_BLDCNT = 0x844;
- REG_BLDALPHA = 0x40B;
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unkD160++;
- return TRUE;
-}
-
-void sub_80F0174(bool8 bg2on)
-{
- if (bg2on)
- REG_DISPCNT |= DISPCNT_BG2_ON;
- else
- REG_DISPCNT &= ~DISPCNT_BG2_ON;
-}
-
-void sub_80F01A4(void)
-{
- REG_WIN0H = WIN_RANGE(0, 240);
- REG_WIN1H = WIN_RANGE(0, 155);
- REG_WIN0V = WIN_RANGE(56, 121);
- REG_WIN1V = WIN_RANGE(56, 121);
- REG_WININ = 0x3F3F;
- REG_WINOUT = 0x001B;
-}
-
-static void sub_80F01E0(u16 a)
-{
- Menu_PrintText(gUnknown_083DFEC4->unk8829[a], 13, 1);
-
- if (gUnknown_083DFEC4->unk76AA == 1)
- {
- Menu_PrintText(gUnknown_083DFEC4->unk88E9[a], 13, 3);
- sub_80F443C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk2);
- Menu_PrintText(gUnknown_083DFEC4->unk8788, 1, 6);
- }
-}
-
-void sub_80F0264(u8 a)
-{
- gUnknown_083DFEC4->unk306 = 0;
- gUnknown_083DFEC4->unk87CA = a;
-
- if (gUnknown_083DFEC4->unk6DAC == 0)
- {
- while (sub_80F02A0())
- ;
- }
-}
-
-bool8 sub_80F02A0(void)
-{
- const u16 *pointer;
-
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- sub_80EEDE8();
-
- gUnknown_083DFEC4->unk87C8 = gUnknown_083DFEC4->unk87CA == 1;
- gUnknown_083DFEC4->unkD162 = 11;
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E70D4);
- break;
- case 2:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E70D4);
- break;
- case 3:
- if (!MultistepInitMenuWindowContinue())
- {
- return TRUE;
- }
- break;
- case 4:
- Menu_EraseScreen();
- break;
- case 5:
- LZ77UnCompVram(gUnknown_08E9FC64, (void *)VRAM + 0xE800);
- break;
- case 6:
- LZ77UnCompVram(gPokenavConditionSearch2_Gfx, (void *)VRAM + 0x8000);
- break;
- case 7:
- LoadPalette(gUnknown_083E02B4, 0xB0, 0x20);
- LoadPalette(gUnknown_083E02B4, 0xF0, 0x20);
- LoadPalette(gUnknown_083E0334, 0x40, 0x20);
-
- if (gUnknown_083DFEC4->unk87CA == 0)
- {
- LoadPalette(gPokenavConditionSearch2_Pal, 0x30, 0x20);
- gPlttBufferUnfaded[0] = gPokenavConditionSearch2_Pal[5];
- LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
- LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
- LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
- LoadPalette(&gPokenavConditionSearch2_Pal[5], 0xBF, 0x2);
- }
- else if (gUnknown_083DFEC4->unk87CA == 1)
- {
- LoadPalette(gUnknown_083E0274, 0x30, 0x20);
- gPlttBufferUnfaded[0] = gUnknown_083E0274[5];
- LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
- LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
- LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
- LoadPalette(&gUnknown_083E0274[5], 0xBF, 0x2);
- }
- else
- {
- LoadPalette(gUnknown_08E9F9E8, 0x30, 0x20);
- gPlttBufferUnfaded[0] = *(pointer = &gUnknown_08E9F9E8[5]);
- LoadPalette(gUnknown_083E0314, 0x50, 0x20);
- LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
- LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
- LoadPalette(pointer, 0xBF, 0x2);
- LoadPalette(pointer, 0x5F, 0x2);
- }
- break;
- case 8:
- if (gUnknown_083DFEC4->unk87CA != 2)
- {
- sub_8095C8C((void *)VRAM + 0xE800, 0, 5, gUnknown_08E9FD1C, 0, 0, 9, 4, 9);
- }
- else
- {
- sub_8095C8C((void *)VRAM + 0xE800, 0, 4, gUnknown_08E9FE54, 0, 0, 12, 10, 12);
- sub_8095C8C((void *)VRAM + 0xE800, 0, 8, gUnknown_08E9FD64, 0, 0, 12, 10, 12);
- }
- break;
- case 9:
- LZ77UnCompVram(gUnknown_083E0354, (void *)VRAM + 0x5000);
- break;
- case 10:
- DmaClear16(3, (void *)VRAM + 0xF800, 0x800);
- break;
- case 11:
- sub_80F0900();
- break;
- case 12:
- if (sub_80F0944())
- {
- return TRUE;
- }
- break;
- case 13:
- if (gUnknown_083DFEC4->unk87CA != 2)
- {
- ShowMapNamePopUpWindow();
- }
- else
- {
- sub_80F081C(0);
- sub_80F0FFC((u8)gUnknown_083DFEC4->unk876E);
- }
- break;
- case 14:
- REG_BG2CNT = 0x1D0A;
- REG_BG3CNT = 0x1E03;
- REG_BG0CNT = 0x1F01;
- REG_BG3VOFS = 0xF8;
-
- gUnknown_083DFEC4->unk8776 = 0xF8;
- gUnknown_083DFEC4->unk8778 = 0;
-
- REG_BLDCNT = 0;
- gUnknown_083DFEC4->unkD160++;
- return FALSE;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-
-void sub_80F063C(s16 arg0)
-{
- s16 var0;
- s16 var1;
- s16 var2;
-
- gUnknown_083DFEC4->unk877C = arg0 * 16;
- gUnknown_083DFEC4->unk877A = (arg0 == 1 || arg0 == -1) ? 4 : 8;
- if (arg0 < 0)
- {
- gUnknown_083DFEC4->unk877A *= -1;
- var0 = arg0 * 2 + gUnknown_083DFEC4->unk8778;
- var1 = arg0 + gUnknown_083DFEC4->unk8770;
- if (var1 < 0)
- var1 += gUnknown_083DFEC4->unk8774 + 1;
-
- arg0 *= -1;
- }
- else
- {
- var0 = gUnknown_083DFEC4->unk8778 + 16;
- var1 = gUnknown_083DFEC4->unk8772 + 1;
- }
-
- if (var1 > gUnknown_083DFEC4->unk8774)
- var1 = 0;
-
- var2 = var0 & 0x1F;
- sub_80F0954(var1, var2, arg0);
-}
-
-static bool8 sub_80F0718(void)
-{
- if (!sub_80F098C())
- {
- if (gUnknown_083DFEC4->unk877C == 0)
- return FALSE;
-
- gUnknown_083DFEC4->unk877C -= gUnknown_083DFEC4->unk877A;
- gUnknown_083DFEC4->unk8776 += gUnknown_083DFEC4->unk877A;
- gUnknown_083DFEC4->unk8776 &= 0xFF;
- REG_BG3VOFS = gUnknown_083DFEC4->unk8776;
- if (gUnknown_083DFEC4->unk877C == 0)
- {
- gUnknown_083DFEC4->unk8778 = ((8 + gUnknown_083DFEC4->unk8776) & 0xFF) / 8;
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static void ShowMapNamePopUpWindow(void)
-{
- switch (gUnknown_083DFEC4->unk87CA)
- {
- case 0:
- sub_80F443C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk876E].unk2);
- break;
- case 1:
- sub_80F445C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk876E + 1);
- break;
- default:
- return;
- }
-
- BasicInitMenuWindow(&gWindowTemplate_81E710C);
- Menu_PrintText(gUnknown_083DFEC4->unk8788, 1, 6);
-}
-
-void sub_80F081C(u8 arg0)
-{
- u32 numTrainerBattles;
-
- BasicInitMenuWindow(&gWindowTemplate_81E710C);
- switch (arg0)
- {
- case 0:
- case 1:
- MenuPrint_RightAligned(gOtherText_NumberRegistered, 10, 9);
- if (arg0 != 0)
- break;
- // fall through
- case 2:
- ConvertIntToDecimalStringN(
- gUnknown_083DFEC4->unk8788,
- gUnknown_083DFEC4->unk8774 + 1,
- STR_CONV_MODE_RIGHT_ALIGN,
- 5);
- MenuPrint_RightAligned(gUnknown_083DFEC4->unk8788, 10, 11);
- if (arg0 != 0)
- break;
- // fall through
- case 3:
- MenuPrint_RightAligned(gOtherText_NumberBattles, 10, 13);
- if (arg0 != 0)
- break;
- // fall through
- case 4:
- numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES);
- if (numTrainerBattles > 99999)
- numTrainerBattles = 99999;
-
- ConvertIntToDecimalStringN(
- gUnknown_083DFEC4->unk8788,
- numTrainerBattles,
- STR_CONV_MODE_RIGHT_ALIGN,
- 5);
- MenuPrint_RightAligned(gUnknown_083DFEC4->unk8788, 10, 15);
- break;
- }
-}
-
-static void sub_80F08E4(void)
-{
- BasicInitMenuWindow(&gWindowTemplate_81E710C);
- Menu_EraseWindowRect(0, 9, 11, 16);
-}
-
-void sub_80F0900(void)
-{
- s16 var0 = (gUnknown_083DFEC4->unk8772 - gUnknown_083DFEC4->unk8770) + 1;
- if (var0 < 8)
- Menu_EraseWindowRect(12, 1, 31, 15);
-
- sub_80F0954(gUnknown_083DFEC4->unk8770, 0, var0);
-}
-
-bool8 sub_80F0944(void)
-{
- return sub_80F098C();
-}
-
-static void sub_80F0954(u16 arg0, u16 arg1, u16 arg2)
-{
- gUnknown_083DFEC4->unk877E = arg0;
- gUnknown_083DFEC4->unk8780 = arg1;
- gUnknown_083DFEC4->unk8784 = arg2;
- gUnknown_083DFEC4->unk8786 = 0;
-}
-
-#ifdef NONMATCHING
-static bool8 sub_80F098C(void)
-{
- register u16 zero asm("r8");
- if (!gUnknown_083DFEC4->unk8784)
- {
- DONE:
- return FALSE;
- }
-
- zero = 0;
- gUnknown_083E3270[gUnknown_083DFEC4->unk87CA](gUnknown_083DFEC4->unk877E, gUnknown_083DFEC4->unk8780);
- if (!--gUnknown_083DFEC4->unk8784)
- goto DONE;
-
- if ((++gUnknown_083DFEC4->unk877E & 0xFFFF) > gUnknown_083DFEC4->unk8774)
- gUnknown_083DFEC4->unk877E = zero;
-
- gUnknown_083DFEC4->unk8780 += 2;
- gUnknown_083DFEC4->unk8780 &= 0x1F;
- return TRUE;
-}
-#else
-NAKED
-static bool8 sub_80F098C(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldr r0, _080F09A4 @ =gUnknown_083DFEC4\n\
- ldr r6, [r0]\n\
- ldr r0, _080F09A8 @ =0x00008784\n\
- adds r7, r6, r0\n\
- ldrh r0, [r7]\n\
- cmp r0, 0\n\
- bne _080F09AC\n\
-_080F09A0:\n\
- movs r0, 0\n\
- b _080F0A02\n\
- .align 2, 0\n\
-_080F09A4: .4byte gUnknown_083DFEC4\n\
-_080F09A8: .4byte 0x00008784\n\
-_080F09AC:\n\
- movs r1, 0\n\
- mov r8, r1\n\
- ldr r1, _080F0A0C @ =gUnknown_083E3270\n\
- ldr r2, _080F0A10 @ =0x000087ca\n\
- adds r0, r6, r2\n\
- ldrb r2, [r0]\n\
- lsls r2, 2\n\
- adds r2, r1\n\
- ldr r0, _080F0A14 @ =0x0000877e\n\
- adds r4, r6, r0\n\
- ldrh r0, [r4]\n\
- ldr r1, _080F0A18 @ =0x00008780\n\
- adds r5, r6, r1\n\
- ldrh r1, [r5]\n\
- ldr r2, [r2]\n\
- bl _call_via_r2\n\
- ldrh r0, [r7]\n\
- subs r0, 0x1\n\
- strh r0, [r7]\n\
- ldr r2, _080F0A1C @ =0x0000ffff\n\
- adds r1, r2, 0\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _080F09A0\n\
- ldrh r0, [r4]\n\
- adds r0, 0x1\n\
- strh r0, [r4]\n\
- ands r0, r1\n\
- ldr r2, _080F0A20 @ =0x00008774\n\
- adds r1, r6, r2\n\
- movs r2, 0\n\
- ldrsh r1, [r1, r2]\n\
- cmp r0, r1\n\
- ble _080F09F6\n\
- mov r0, r8\n\
- strh r0, [r4]\n\
-_080F09F6:\n\
- ldrh r0, [r5]\n\
- adds r0, 0x2\n\
- movs r1, 0x1F\n\
- ands r0, r1\n\
- strh r0, [r5]\n\
- movs r0, 0x1\n\
-_080F0A02:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080F0A0C: .4byte gUnknown_083E3270\n\
-_080F0A10: .4byte 0x000087ca\n\
-_080F0A14: .4byte 0x0000877e\n\
-_080F0A18: .4byte 0x00008780\n\
-_080F0A1C: .4byte 0x0000ffff\n\
-_080F0A20: .4byte 0x00008774\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-void sub_80F0A24(u16 arg0, u16 arg1)
-{
- u8 var0 = gUnknown_083DFEC4->unk87C8 == 0 ? 2 : 1;
- sub_80F4428(gUnknown_083DFEC4->unk8788, arg0, var0);
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- Menu_PrintText(gUnknown_083DFEC4->unk8788, 13, arg1);
-}
-
-static void sub_80F0A74(u16 arg0, u16 arg1)
-{
- sub_80F700C(gUnknown_083DFEC4->unk8788, arg0);
- arg1 &= 0x1F;
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, arg1 * 8, 0);
- if (arg0 < gUnknown_083DFEC4->unkD158 && gUnknown_083DFEC4->unkCEE8[arg0].unk5)
- sub_8095C8C((void *)VRAM + 0xF000, 29, arg1, gUnknown_083E039C, 0, 0, 1, 2, 1);
- else
- sub_8095C8C((void *)VRAM + 0xF000, 29, arg1, gUnknown_083E03A0, 0, 0, 1, 2, 1);
-}
-
-static void sub_80F0B24(void)
-{
- gUnknown_083DFEC4->unkD15C = 0;
- gUnknown_083DFEC4->unk306 = 0;
-}
-
-static bool8 sub_80F0B44(void)
-{
- int top;
- if (gUnknown_083DFEC4->unkD15C > 8)
- {
- return FALSE;
- }
-
- if (++gUnknown_083DFEC4->unk306 > 1)
- {
- gUnknown_083DFEC4->unk306 = 0;
- if (gUnknown_083DFEC4->unkD15C < 8)
- {
- top = (gUnknown_083DFEC4->unk8778 + (gUnknown_083DFEC4->unkD15C * 2)) & 0x1F;
- if (gUnknown_083DFEC4->unkD15C != gUnknown_083DFEC4->unk876C)
- {
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- Menu_EraseWindowRect(12, top, 31, top + 1);
- }
-
- if (!gUnknown_083DFEC4->unkD15C)
- sub_80F08E4();
-
- gUnknown_083DFEC4->unkD15C++;
- return TRUE;
- }
- else
- {
- u16 i;
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- top = (gUnknown_083DFEC4->unk8778 + 16) & 0x1F;
- for (i = 0; i < 8; i++)
- {
- Menu_EraseWindowRect(12, top, 31, top + 1);
- top = (top + 2) & 0x1F;
- }
-
- gUnknown_083DFEC4->unkD15C++;
- return FALSE;
- }
- }
- else
- {
- return TRUE;
- }
-}
-
-static void sub_80F0C28(void)
-{
- gUnknown_083DFEC4->unkD15C = 0;
- gUnknown_083DFEC4->unk306 = 0;
-}
-
-static bool8 sub_80F0C48(void)
-{
- if (gUnknown_083DFEC4->unkD15C > 7)
- return FALSE;
-
- if (++gUnknown_083DFEC4->unk306 > 1)
- {
- gUnknown_083DFEC4->unk306 = 0;
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- sub_80F0A74(gUnknown_083DFEC4->unk8770 + gUnknown_083DFEC4->unkD15C,
- gUnknown_083DFEC4->unk8778 + gUnknown_083DFEC4->unkD15C * 2);
-
- if ((++gUnknown_083DFEC4->unkD15C) > 7)
- {
- sub_80F081C(0);
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-void LoadTrainerEyesDescriptionLines(void)
-{
- u16 i;
- int trainerEyesId;
- const u8 *curChar;
-
- gUnknown_083DFEC4->unk306 = 0;
- gUnknown_083DFEC4->unkD15C = 0;
- trainerEyesId = gUnknown_083DFEC4->unkCEE8[gUnknown_083DFEC4->unk876E].unk4;
- gUnknown_083DFEC4->trainerEyeDescriptionLines[0] = gTrainerEyeDescriptions[trainerEyesId];
-
- // Find the start of the 3 other lines in the Trainer's Eyes description.
- curChar = gUnknown_083DFEC4->trainerEyeDescriptionLines[0];
- for (i = 0; i < 3; i++)
- {
- while (*curChar != EOS)
- curChar++;
- gUnknown_083DFEC4->trainerEyeDescriptionLines[i + 1] = ++curChar;
- }
-}
-
-#ifdef NONMATCHING
-// small register mismatch (r2/r3) on the line where var0 is set.
-bool8 sub_80F0D5C(void)
-{
- int var0;
- if (gUnknown_083DFEC4->unkD15C == 7)
- return FALSE;
-
- if (++gUnknown_083DFEC4->unk306 > 1)
- {
- gUnknown_083DFEC4->unk306 = 0;
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- var0 = (gUnknown_083DFEC4->unk8778 + 2 + gUnknown_083DFEC4->unkD15C * 2) & 0x1F;
- switch (gUnknown_083DFEC4->unkD15C)
- {
- case 0:
- Menu_PrintTextPixelCoords(gOtherText_Strategy, 97, var0 * 8, 0);
- break;
- case 1:
- AlignStringInMenuWindow(
- gUnknown_083DFEC4->unk8788,
- gUnknown_083DFEC4->trainerEyeDescriptionLines[0],
- 136,
- 0);
- Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
- break;
- case 2:
- Menu_PrintTextPixelCoords(gOtherText_TrainersPokemon, 97, var0 * 8, 0);
- break;
- case 3:
- AlignStringInMenuWindow(
- gUnknown_083DFEC4->unk8788,
- gUnknown_083DFEC4->trainerEyeDescriptionLines[1],
- 136,
- 0);
- Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
- break;
- case 4:
- Menu_PrintTextPixelCoords(gOtherText_SelfIntroduction, 97, var0 * 8, 0);
- break;
- case 5:
- AlignStringInMenuWindow(
- gUnknown_083DFEC4->unk8788,
- gUnknown_083DFEC4->trainerEyeDescriptionLines[2],
- 136,
- 0);
- Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
- break;
- case 6:
- AlignStringInMenuWindow(
- gUnknown_083DFEC4->unk8788,
- gUnknown_083DFEC4->trainerEyeDescriptionLines[3],
- 136,
- 0);
- Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unkD15C++;
- return TRUE;
- }
- else
- {
- return TRUE;
- }
-}
-#else
-NAKED
-bool8 sub_80F0D5C(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- ldr r0, _080F0D70 @ =gUnknown_083DFEC4\n\
- ldr r4, [r0]\n\
- ldr r0, _080F0D74 @ =0x0000d15c\n\
- adds r5, r4, r0\n\
- ldrh r0, [r5]\n\
- cmp r0, 0x7\n\
- bne _080F0D78\n\
-_080F0D6C:\n\
- movs r0, 0\n\
- b _080F0EB0\n\
- .align 2, 0\n\
-_080F0D70: .4byte gUnknown_083DFEC4\n\
-_080F0D74: .4byte 0x0000d15c\n\
-_080F0D78:\n\
- ldr r0, _080F0DB8 @ =0x00000306\n\
- adds r1, r4, r0\n\
- ldrh r0, [r1]\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080F0D8C\n\
- b _080F0EAE\n\
-_080F0D8C:\n\
- movs r0, 0\n\
- strh r0, [r1]\n\
- ldr r0, _080F0DBC @ =gWindowTemplate_81E70D4\n\
- bl BasicInitMenuWindow\n\
- ldr r0, _080F0DC0 @ =0x00008778\n\
- adds r1, r4, r0\n\
- ldrh r3, [r5]\n\
- lsls r0, r3, 1\n\
- adds r0, 0x2\n\
- ldrh r1, [r1]\n\
- adds r5, r0, r1\n\
- movs r0, 0x1F\n\
- ands r5, r0\n\
- cmp r3, 0x6\n\
- bhi _080F0D6C\n\
- lsls r0, r3, 2\n\
- ldr r1, _080F0DC4 @ =_080F0DC8\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_080F0DB8: .4byte 0x00000306\n\
-_080F0DBC: .4byte gWindowTemplate_81E70D4\n\
-_080F0DC0: .4byte 0x00008778\n\
-_080F0DC4: .4byte _080F0DC8\n\
- .align 2, 0\n\
-_080F0DC8:\n\
- .4byte _080F0DE4\n\
- .4byte _080F0DF0\n\
- .4byte _080F0E08\n\
- .4byte _080F0E14\n\
- .4byte _080F0E2C\n\
- .4byte _080F0E38\n\
- .4byte _080F0E6C\n\
-_080F0DE4:\n\
- ldr r0, _080F0DEC @ =gOtherText_Strategy\n\
- lsls r2, r5, 3\n\
- b _080F0E54\n\
- .align 2, 0\n\
-_080F0DEC: .4byte gOtherText_Strategy\n\
-_080F0DF0:\n\
- ldr r0, _080F0DFC @ =gUnknown_083DFEC4\n\
- ldr r0, [r0]\n\
- ldr r1, _080F0E00 @ =0x00008788\n\
- adds r4, r0, r1\n\
- ldr r1, _080F0E04 @ =0x0000d110\n\
- b _080F0E42\n\
- .align 2, 0\n\
-_080F0DFC: .4byte gUnknown_083DFEC4\n\
-_080F0E00: .4byte 0x00008788\n\
-_080F0E04: .4byte 0x0000d110\n\
-_080F0E08:\n\
- ldr r0, _080F0E10 @ =gOtherText_TrainersPokemon\n\
- lsls r2, r5, 3\n\
- b _080F0E54\n\
- .align 2, 0\n\
-_080F0E10: .4byte gOtherText_TrainersPokemon\n\
-_080F0E14:\n\
- ldr r0, _080F0E20 @ =gUnknown_083DFEC4\n\
- ldr r0, [r0]\n\
- ldr r1, _080F0E24 @ =0x00008788\n\
- adds r4, r0, r1\n\
- ldr r1, _080F0E28 @ =0x0000d114\n\
- b _080F0E42\n\
- .align 2, 0\n\
-_080F0E20: .4byte gUnknown_083DFEC4\n\
-_080F0E24: .4byte 0x00008788\n\
-_080F0E28: .4byte 0x0000d114\n\
-_080F0E2C:\n\
- ldr r0, _080F0E34 @ =gOtherText_SelfIntroduction\n\
- lsls r2, r5, 3\n\
- b _080F0E54\n\
- .align 2, 0\n\
-_080F0E34: .4byte gOtherText_SelfIntroduction\n\
-_080F0E38:\n\
- ldr r0, _080F0E60 @ =gUnknown_083DFEC4\n\
- ldr r0, [r0]\n\
- ldr r1, _080F0E64 @ =0x00008788\n\
- adds r4, r0, r1\n\
- ldr r1, _080F0E68 @ =0x0000d118\n\
-_080F0E42:\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- adds r0, r4, 0\n\
- movs r2, 0x88\n\
- movs r3, 0\n\
- bl AlignStringInMenuWindow\n\
- lsls r2, r5, 3\n\
- adds r0, r4, 0\n\
-_080F0E54:\n\
- movs r1, 0x61\n\
- movs r3, 0\n\
- bl Menu_PrintTextPixelCoords\n\
- b _080F0EA0\n\
- .align 2, 0\n\
-_080F0E60: .4byte gUnknown_083DFEC4\n\
-_080F0E64: .4byte 0x00008788\n\
-_080F0E68: .4byte 0x0000d118\n\
-_080F0E6C:\n\
- ldr r0, _080F0E94 @ =gUnknown_083DFEC4\n\
- ldr r0, [r0]\n\
- ldr r1, _080F0E98 @ =0x00008788\n\
- adds r4, r0, r1\n\
- ldr r1, _080F0E9C @ =0x0000d11c\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- adds r0, r4, 0\n\
- movs r2, 0x88\n\
- movs r3, 0\n\
- bl AlignStringInMenuWindow\n\
- lsls r2, r5, 3\n\
- adds r0, r4, 0\n\
- movs r1, 0x61\n\
- movs r3, 0\n\
- bl Menu_PrintTextPixelCoords\n\
- b _080F0D6C\n\
- .align 2, 0\n\
-_080F0E94: .4byte gUnknown_083DFEC4\n\
-_080F0E98: .4byte 0x00008788\n\
-_080F0E9C: .4byte 0x0000d11c\n\
-_080F0EA0:\n\
- ldr r0, _080F0EB8 @ =gUnknown_083DFEC4\n\
- ldr r1, [r0]\n\
- ldr r0, _080F0EBC @ =0x0000d15c\n\
- adds r1, r0\n\
- ldrh r0, [r1]\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080F0EAE:\n\
- movs r0, 0x1\n\
-_080F0EB0:\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080F0EB8: .4byte gUnknown_083DFEC4\n\
-_080F0EBC: .4byte 0x0000d15c\n\
- .syntax divided\n");
-}
-#endif
-
-static void sub_80F0EC0(void)
-{
- gUnknown_083DFEC4->unk306 = 0;
- gUnknown_083DFEC4->unkD15C = 0;
- StringFill(gUnknown_083DFEC4->unk8788, CHAR_SPACE, 16);
-}
-
-static bool8 sub_80F0EF4(void)
-{
- int top;
- if (gUnknown_083DFEC4->unkD15C > 6)
- return FALSE;
-
- if (++gUnknown_083DFEC4->unk306 > 1)
- {
- gUnknown_083DFEC4->unk306 = 0;
- top = (gUnknown_083DFEC4->unk8778 + 2 + gUnknown_083DFEC4->unkD15C * 2) & 0x1F;
- BasicInitMenuWindow(&gWindowTemplate_81E70D4);
- Menu_EraseWindowRect(12, top, 31, top + 1);
- gUnknown_083DFEC4->unkD15C++;
- }
-
- return TRUE;
-}
-
-static void sub_80F0F64(void)
-{
- s16 var0 = gUnknown_083DFEC4->unk876C;
- gUnknown_083DFEC4->unk877C = var0 * 16;
- gUnknown_083DFEC4->unk877A = var0 == 1 ? 4 : 8;
-}
-
-static void sub_80F0FA0(void)
-{
- s16 var0 = gUnknown_083DFEC4->unk876C * -1;
- gUnknown_083DFEC4->unk877C = var0 * 16;
- gUnknown_083DFEC4->unk877A = var0 == -1 ? -4 : -8;
-}
-
-static bool8 sub_80F0FEC(void)
-{
- return sub_80F0718();
-}
-
-void sub_80F0FFC(u8 arg0)
-{
- GetMapSectionName(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unkCEE8[arg0].unk2, 0);
- BasicInitMenuWindow(&gWindowTemplate_81E710C);
- sub_80F19DC(gUnknown_083DFEC4->unk8788);
- AlignStringInMenuWindow(gUnknown_083DFEC4->unkD138, gUnknown_083DFEC4->unk8788, 88, 2);
- Menu_PrintText(gUnknown_083DFEC4->unkD138, 0, 5);
-}
-
-void sub_80F105C(void)
-{
- sub_80F0A74(gUnknown_083DFEC4->unk876E, gUnknown_083DFEC4->unk8778);
-}
-
-static bool8 sub_80F1080(void)
-{
- switch (gUnknown_083DFEC4->unkD160)
- {
- case 0:
- sub_80EEDE8();
- gUnknown_083DFEC4->unkD162 = 11;
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E70B8);
- break;
- case 2:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E70B8);
- break;
- case 3:
- if (!MultistepInitMenuWindowContinue())
- return TRUE;
- break;
- case 4:
- Menu_EraseScreen();
- break;
- case 5:
- sub_80F1614();
- break;
- case 6:
- if (sub_80F162C(1))
- return TRUE;
- break;
- case 7:
- LZ77UnCompWram(gUnknown_08E9FBA0, gUnknown_083DFEC4->unk934C);
- break;
- case 8:
- DrawMonRibbonIcons();
- break;
- case 9:
- sub_80F13FC();
- break;
- case 10:
- LZ77UnCompVram(gPokenavRibbonView_Gfx, (void *)(VRAM + 0x8000));
- break;
- case 11:
- LZ77UnCompVram(gUnknown_083E040C, (void *)(VRAM + 0x8200));
- break;
- case 12:
- LoadPalette(gPokenavRibbonView_Pal, 0x20, 0x20);
- LoadPalette(gUnknown_083E03A8, 0xF0, 0x20);
- LoadPalette(gUnknown_083E3C60[0], 0x30, 0xA0);
- LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
- LoadPalette(gUnknown_083E03A8 + 0xF, 0xBF, 0x2);
- break;
- case 13:
- sub_80F1438();
- break;
- case 14:
- REG_BG2CNT = 0x1E02;
- REG_BG3CNT = 0x170B;
- REG_BLDCNT = 0;
- gUnknown_083DFEC4->unkD160++;
- return FALSE;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unkD160++;
- return TRUE;
-}
-
-void DrawMonRibbonIcons(void)
-{
- u16 i;
- u16 offset;
- u8 index, palette, tile;
- u8 var0;
-
- offset = 0x8B;
- var0 = gUnknown_083DFEC4->unkBC8E - gUnknown_083DFEC4->unkBC8F;
-
- for (i = 0; i < 8; i++)
- CpuFill16(0x2000, &gUnknown_083DFEC4->unk934C[offset + i * 32], 0x24);
-
- for (i = 0; i < var0; i++)
- {
- index = gUnknown_083DFEC4->unkBC4C[i];
- palette = gPokenavRibbonsIconGfx[index][1] + 3;
- tile = gPokenavRibbonsIconGfx[index][0] * 2 + 0x10;
- gUnknown_083DFEC4->unk934C[offset] = (palette << 12) | tile;
- gUnknown_083DFEC4->unk934C[offset + 1] = ((palette << 12) | 0x400) | tile;
- gUnknown_083DFEC4->unk934C[offset + 0x20] = (palette << 12) | (tile + 1);
- gUnknown_083DFEC4->unk934C[offset + 0x21] = (palette << 12) | 0x400 | (tile + 1);
-
- if ((i + 1) % 9 == 0)
- offset += 0x30;
- else
- offset += 2;
- }
-
- offset = 0x14B;
- for (i = 0; i < gUnknown_083DFEC4->unkBC8F; i++)
- {
- index = gUnknown_083DFEC4->unkBC4C[var0 + i];
- palette = gPokenavRibbonsIconGfx[index][1] + 3;
- tile = gPokenavRibbonsIconGfx[index][0] * 2 + 0x10;
- gUnknown_083DFEC4->unk934C[offset] = (palette << 12) | tile;
- gUnknown_083DFEC4->unk934C[offset + 1] = ((palette << 12) | 0x400) | tile;
- gUnknown_083DFEC4->unk934C[offset + 0x20] = (palette << 12) | (tile + 1);
- gUnknown_083DFEC4->unk934C[offset + 0x21] = (palette << 12) | 0x400 | (tile + 1);
-
- offset += 2;
- }
-}
-
-void sub_80F13FC(void)
-{
- u16 *src = gUnknown_083DFEC4->unk934C;
- u16 *dest = (u16 *)(VRAM + 0xB800);
- DmaCopy32(3, src, dest, 0x500);
- gPlttBufferUnfaded[0] = *(gPokenavRibbonView_Pal + 14);
-}
-
-void sub_80F1438(void)
-{
- Menu_PrintText(gUnknown_083DFEC4->unk8829[0], 13, 1);
- sub_80F445C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk876E + 1);
- Menu_PrintText(gUnknown_083DFEC4->unk8788, 1, 5);
-}
-
-void sub_80F1480(void)
-{
- Menu_EraseWindowRect(12, 13, 27, 16);
-}
-
-// This is a fakematching function, due to a hardcoded access of gSaveBlock1.
-// Due to this hardcoded address access, gift ribbons do not properly display
-// their descriptions, since the hardcoded access is inside of the LinkBattleRecords
-// save data, rather than the giftRibbons array, which is almost certainly what the
-// intended access is.
-static void sub_80F1494(void)
-{
- u8 *arr;
- u8 *tileBuffer1 = &gUnknown_083DFEC8[0x800];
- u8 *tileBuffer2 = &gUnknown_083DFEC8[0xA98];
-
- if (gUnknown_083DFEC4->unkBC91 < 3)
- {
- gUnknown_020388B4 = gUnknown_083DFEC4->unkBC91 * 9 + gUnknown_083DFEC4->unkBC90;
- gUnknown_020388B4 = gUnknown_083DFEC4->unkBC4C[gUnknown_020388B4];
- AlignStringInMenuWindow(tileBuffer1, gRibbonDescriptions[gUnknown_020388B4][0], 128, 0);
- AlignStringInMenuWindow(tileBuffer2, gRibbonDescriptions[gUnknown_020388B4][1], 128, 0);
- }
- else
- {
- gUnknown_020388B4 = gUnknown_083DFEC4->unkBC8E - gUnknown_083DFEC4->unkBC8F;
- gUnknown_020388B4 = gUnknown_083DFEC4->unkBC4C[gUnknown_020388B4 + gUnknown_083DFEC4->unkBC90];
-
- // FIXME!
- arr = ((u8*)&gSaveBlock1);
- asm("ldrh r1, [r5]\n\
- add r0, r0, r1");
- gUnknown_020388B4 = arr[0x30F7];
- // The bug fix for this code is the following:
- // gUnknown_020388B4 = gSaveBlock1.externalReservedData.giftRibbons[gUnknown_020388B4];
- if (gUnknown_020388B4)
- {
- gUnknown_020388B4--;
- AlignStringInMenuWindow(tileBuffer1, gGiftRibbonDescriptions[gUnknown_020388B4][0], 128, 0);
- AlignStringInMenuWindow(tileBuffer2, gGiftRibbonDescriptions[gUnknown_020388B4][1], 128, 0);
- }
- else
- {
- AlignStringInMenuWindow(tileBuffer1, gEmptyString_81E72B0, 128, 0);
- AlignStringInMenuWindow(tileBuffer2, gEmptyString_81E72B0, 128, 0);
- }
- }
-
- Menu_PrintText(tileBuffer1, 12, 13);
- Menu_PrintText(tileBuffer2, 12, 15);
-}
-
-static void sub_80F15A8(void)
-{
- u8 *buffer;
- Menu_EraseWindowRect(12, 13, 27, 16);
- buffer = StringCopy(gUnknown_083DFEC4->unk8788, gOtherText_Ribbons);
- buffer[0] = CHAR_SPACE;
- buffer++;
- buffer = ConvertIntToDecimalStringN(
- buffer,
- gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk0,
- STR_CONV_MODE_LEFT_ALIGN,
- 2);
- buffer[0] = EOS;
- Menu_PrintText(gUnknown_083DFEC4->unk8788, 12, 13);
-}
-
-void sub_80F1614(void)
-{
- gUnknown_083DFEC4->unk8764 = 0;
-}
-
-bool8 sub_80F162C(u8 arg0)
-{
- switch (gUnknown_083DFEC4->unk8764)
- {
- case 0:
- break;
- case 1:
- LZ77UnCompVram(gUnknown_08E9FF58, (void *)(VRAM + 0xE800));
- break;
- case 2:
- DmaCopy16Defvars(3, gPokenavRibbonPokeView_Gfx, (void *)(VRAM + 0xE000), 0xE0);
- break;
- case 3:
- if (!arg0)
- LoadPalette(gUnknown_083E0124, 0xD0, 0x20);
- else
- LoadPalette(gUnknown_083E0144, 0xD0, 0x20);
-
- gUnknown_083DFEC4->unk8766 = -80;
- REG_BG0CNT = 0x1D0D;
- gUnknown_083DFEC4->unk8764++;
- return FALSE;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk8764++;
- return TRUE;
-}
-
-bool8 sub_80F170C(void)
-{
- gUnknown_083DFEC4->unk8766 += 0x10;
- if (gUnknown_083DFEC4->unk8766 > 0)
- gUnknown_083DFEC4->unk8766 = 0;
-
- return gUnknown_083DFEC4->unk8766 != 0;
-}
-
-bool8 sub_80F173C(void)
-{
- gUnknown_083DFEC4->unk8766 -= 0x10;
- if (gUnknown_083DFEC4->unk8766 < -0x50)
- gUnknown_083DFEC4->unk8766 = -0x50;
-
- return gUnknown_083DFEC4->unk8766 != -0x50;
-}
-
-bool8 sub_80F1778(void)
-{
- switch (gUnknown_083DFEC4->unkD160)
- {
- case 0:
- sub_80EEDE8();
- gUnknown_083DFEC4->unkD162 = 2;
- break;
- case 1:
- sub_80F1614();
- break;
- case 2:
- if (sub_80F162C(0))
- return TRUE;
- break;
- case 3:
- LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)(VRAM + 0x5000));
- break;
- case 4:
- LZ77UnCompVram(gUnknown_08E9AC4C, (void *)(VRAM + 0xF000));
- LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
- break;
- case 5:
- sub_8095C8C((void *)VRAM + 0xF000, 0, 13, gUnknown_083E01F4, 0, 0, 12, 4, 12);
- break;
- case 6:
- LZ77UnCompVram(gUnknown_08E9FEB4, (void *)(VRAM + 0xB800));
- break;
- case 7:
- LoadPalette(gUnknown_083E0254, 0x30, 0x20);
- LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
- LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2);
- LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2);
- LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2);
- sub_80F01A4();
- break;
- case 8:
- sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
- break;
- case 9:
- REG_BG3CNT = 0x1E03;
- REG_BG2CNT = 0x1702;
- REG_BLDCNT = 0x844;
- REG_BLDALPHA = 0x40B;
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unkD160++;
- return TRUE;
-}
-
-void sub_80F1934(void)
-{
- u8 *buffer = gUnknown_083DFEC4->unk8788;
- if (gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4)
- {
- u8 nature = GetNature(&gPlayerParty[sub_8137124(gUnknown_083DFEC4->unk87DC)]);
- buffer = StringCopy(buffer, gOtherText_Nature2);
- AlignStringInMenuWindow(buffer, gNatureNames[nature], 87, 0);
- }
- else
- {
- AlignStringInMenuWindow(buffer, gEmptyString_81E72B0, 87, 0);
- }
-
- Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 1, 112, 1);
-}
-
-static void sub_80F19DC(u8 *text)
-{
- while (text[0] != EOS)
- {
- if (text[0] == EXT_CTRL_CODE_BEGIN && text[1] == CHAR_SPACE)
- {
- text[0] = EOS;
- break;
- }
-
- text++;
- }
-}
-
-static void sub_80F19FC(void)
-{
- // FIXME r4/r5 swapped
- register u8 *ptr asm("r5") = gUnknown_020388B0;
- if (ptr[0] == 1)
- {
- const u8 *landmarkName = GetLandmarkName(
- gUnknown_083DFEC4->regionMap.mapSectionId,
- gUnknown_083DFEC4->regionMap.everGrandeCityArea,
- ptr[1]);
-
- if (landmarkName)
- {
- sub_8072A18(landmarkName, 0x70, 4 * (ptr[1] * 4 + 12), 0x78, 1);
- if (++ptr[1] != 4)
- return;
- }
-
- Menu_BlankWindowRect(14, ptr[1] * 2 + 6, 28, 15);
- ptr[0] = 0;
- }
-}
-
-static void sub_80F1A74(void)
-{
- gUnknown_020388B0[0] = 0;
-}
-
-static void sub_80F1A80(void)
-{
- gUnknown_020388B0[0] = 1;
- gUnknown_020388B0[1] = 0;
-}
-
-static void sub_80F1A90(void)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (gUnknown_083DFEC4->unk6DAC == 0)
- while (sub_80F1AC4());
-}
-
-static bool8 sub_80F1AC4(void)
-{
- u16 i, j;
-
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- for (i = 0; i < 6; i++)
- {
- for (j = 0; j < 4; j++)
- gUnknown_083DFEC4->unk320[i][j] = NULL;
- }
-
- gUnknown_083DFEC4->unk311 = 0;
- break;
- case 1:
- LZ77UnCompWram(gPokenavMenuOptions_Gfx, gUnknown_083DFEC4->unk388);
- break;
- case 2:
- LZ77UnCompWram(gPokenavConditionMenu_Gfx, gUnknown_083DFEC4->unk1788);
- break;
- case 3:
- LZ77UnCompWram(gPokenavConditionSearch_Gfx, gUnknown_083DFEC4->unk2388);
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-
-static void sub_80F1B8C(u8 arg0)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (gUnknown_083DFEC4->unk6DAC == 0)
- while (sub_80F1BC8(arg0));
-}
-
-#ifdef NONMATCHING
-// very close, but for some reason, (i + 1) is being stored in sp[0x10]
-static bool8 sub_80F1BC8(u8 arg0)
-{
- u16 i, j;
- u16 animNum;
- u16 topOffset;
- u16 height;
- u16 middle;
- u8 spriteId;
-
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- sub_80F2458(arg0);
- break;
- case 1:
- sub_80F2514(arg0);
- break;
- case 2:
- switch (arg0)
- {
- case 0:
- topOffset = 42;
- height = 20;
- gUnknown_083DFEC4->unk30E = 5;
- break;
- case 1:
- topOffset = 56;
- height = 20;
- gUnknown_083DFEC4->unk30E = 3;
- break;
- case 2:
- topOffset = 40;
- height = 16;
- gUnknown_083DFEC4->unk30E = 6;
- break;
- default:
- return FALSE;
- }
-
- animNum = 0;
- for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
- {
- middle = (height * i) + topOffset - 8;
- gUnknown_083DFEC4->unk314[i] = (middle << 8) | (middle + 0x11);
- if (!arg0)
- {
- if (gUnknown_083DFEC4->unk6DB2[i] == 0)
- {
- for (j = 0; j < 4; j++)
- gUnknown_083DFEC4->unk320[i][j] = NULL;
- continue;
- }
- else
- {
- animNum = (gUnknown_083DFEC4->unk6DB2[i] - 1) * 4;
- }
- }
-
- for (j = 0; j < 4; j++)
- {
- spriteId = CreateSprite(&gSpriteTemplate_83E4454, j * 32 + 256, (height * i) + topOffset, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk320[i][j] = &gSprites[spriteId];
- gUnknown_083DFEC4->unk320[i][j]->data[0] = i;
- gUnknown_083DFEC4->unk320[i][j]->data[1] = j;
- gUnknown_083DFEC4->unk320[i][j]->data[2] = j * 32 + 152;
- gUnknown_083DFEC4->unk320[i][j]->data[3] = j * 32 + 256;
- StartSpriteAnim(gUnknown_083DFEC4->unk320[i][j], animNum++);
-
- if ((arg0 == 2 || arg0 == 0) && i > 2)
- gUnknown_083DFEC4->unk320[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(0x1);
- }
- }
- }
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-#else
-NAKED
-static bool8 sub_80F1BC8(u8 arg0)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0xC\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- ldr r1, _080F1BF4 @ =gUnknown_083DFEC4\n\
- ldr r2, [r1]\n\
- ldr r3, _080F1BF8 @ =0x00000306\n\
- adds r0, r2, r3\n\
- ldrh r0, [r0]\n\
- adds r3, r1, 0\n\
- cmp r0, 0x1\n\
- beq _080F1C0A\n\
- cmp r0, 0x1\n\
- bgt _080F1BFC\n\
- cmp r0, 0\n\
- beq _080F1C02\n\
- b _080F1DC4\n\
- .align 2, 0\n\
-_080F1BF4: .4byte gUnknown_083DFEC4\n\
-_080F1BF8: .4byte 0x00000306\n\
-_080F1BFC:\n\
- cmp r0, 0x2\n\
- beq _080F1C12\n\
- b _080F1DC4\n\
-_080F1C02:\n\
- mov r0, r9\n\
- bl sub_80F2458\n\
- b _080F1DC8\n\
-_080F1C0A:\n\
- mov r0, r9\n\
- bl sub_80F2514\n\
- b _080F1DC8\n\
-_080F1C12:\n\
- mov r4, r9\n\
- cmp r4, 0x1\n\
- beq _080F1C40\n\
- cmp r4, 0x1\n\
- bgt _080F1C22\n\
- cmp r4, 0\n\
- beq _080F1C2A\n\
- b _080F1DC4\n\
-_080F1C22:\n\
- mov r5, r9\n\
- cmp r5, 0x2\n\
- beq _080F1C54\n\
- b _080F1DC4\n\
-_080F1C2A:\n\
- movs r0, 0x2A\n\
- str r0, [sp, 0x4]\n\
- movs r1, 0x14\n\
- str r1, [sp, 0x8]\n\
- ldr r4, _080F1C3C @ =0x0000030e\n\
- adds r1, r2, r4\n\
- movs r0, 0x5\n\
- b _080F1C62\n\
- .align 2, 0\n\
-_080F1C3C: .4byte 0x0000030e\n\
-_080F1C40:\n\
- movs r5, 0x38\n\
- str r5, [sp, 0x4]\n\
- movs r0, 0x14\n\
- str r0, [sp, 0x8]\n\
- ldr r4, _080F1C50 @ =0x0000030e\n\
- adds r1, r2, r4\n\
- movs r0, 0x3\n\
- b _080F1C62\n\
- .align 2, 0\n\
-_080F1C50: .4byte 0x0000030e\n\
-_080F1C54:\n\
- movs r5, 0x28\n\
- str r5, [sp, 0x4]\n\
- movs r0, 0x10\n\
- str r0, [sp, 0x8]\n\
- ldr r4, _080F1CDC @ =0x0000030e\n\
- adds r1, r2, r4\n\
- movs r0, 0x6\n\
-_080F1C62:\n\
- strb r0, [r1]\n\
- movs r5, 0\n\
- str r5, [sp]\n\
- mov r8, r5\n\
- adds r1, r3, 0\n\
- ldr r0, [r1]\n\
- ldr r2, _080F1CDC @ =0x0000030e\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r8, r0\n\
- blt _080F1C7E\n\
- b _080F1DC8\n\
-_080F1C7E:\n\
- ldr r4, [sp, 0x8]\n\
- mov r3, r8\n\
- muls r3, r4\n\
- ldr r5, [sp, 0x4]\n\
- adds r0, r5, r3\n\
- subs r0, 0x8\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- ldr r4, [r1]\n\
- mov r2, r8\n\
- lsls r1, r2, 1\n\
- movs r5, 0xC5\n\
- lsls r5, 2\n\
- adds r2, r4, r5\n\
- adds r2, r1\n\
- lsls r1, r0, 8\n\
- adds r0, 0x11\n\
- orrs r1, r0\n\
- strh r1, [r2]\n\
- mov r0, r9\n\
- cmp r0, 0\n\
- bne _080F1CF2\n\
- ldr r1, _080F1CE0 @ =0x00006db2\n\
- adds r0, r4, r1\n\
- mov r2, r8\n\
- adds r1, r0, r2\n\
- ldrb r0, [r1]\n\
- cmp r0, 0\n\
- bne _080F1CE8\n\
- movs r5, 0\n\
- ldr r0, _080F1CE4 @ =gUnknown_083DFEC4\n\
- ldr r0, [r0]\n\
- lsls r2, 4\n\
- movs r3, 0xC8\n\
- lsls r3, 2\n\
- adds r1, r0, r3\n\
- movs r3, 0\n\
-_080F1CC8:\n\
- lsls r0, r5, 2\n\
- adds r0, r2\n\
- adds r0, r1, r0\n\
- str r3, [r0]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- cmp r5, 0x3\n\
- bls _080F1CC8\n\
- b _080F1D92\n\
- .align 2, 0\n\
-_080F1CDC: .4byte 0x0000030e\n\
-_080F1CE0: .4byte 0x00006db2\n\
-_080F1CE4: .4byte gUnknown_083DFEC4\n\
-_080F1CE8:\n\
- ldrb r0, [r1]\n\
- subs r0, 0x1\n\
- lsls r0, 18\n\
- lsrs r0, 16\n\
- str r0, [sp]\n\
-_080F1CF2:\n\
- movs r5, 0\n\
- ldr r4, [sp, 0x4]\n\
- adds r0, r4, r3\n\
- lsls r0, 16\n\
- mov r10, r0\n\
-_080F1CFC:\n\
- lsls r6, r5, 5\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- adds r7, r6, r0\n\
- lsls r1, r7, 16\n\
- asrs r1, 16\n\
- ldr r0, _080F1DB4 @ =gSpriteTemplate_83E4454\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x40\n\
- beq _080F1DC4\n\
- ldr r0, _080F1DB8 @ =gUnknown_083DFEC4\n\
- ldr r2, [r0]\n\
- lsls r1, r5, 2\n\
- mov r4, r8\n\
- lsls r0, r4, 4\n\
- adds r1, r0\n\
- movs r0, 0xC8\n\
- lsls r0, 2\n\
- adds r2, r0\n\
- adds r4, r2, r1\n\
- lsls r0, r3, 4\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- ldr r1, _080F1DBC @ =gSprites\n\
- adds r0, r1\n\
- str r0, [r4]\n\
- mov r1, r8\n\
- strh r1, [r0, 0x2E]\n\
- ldr r0, [r4]\n\
- strh r5, [r0, 0x30]\n\
- ldr r1, [r4]\n\
- adds r0, r6, 0\n\
- adds r0, 0x98\n\
- strh r0, [r1, 0x32]\n\
- ldr r0, [r4]\n\
- strh r7, [r0, 0x34]\n\
- ldr r0, [r4]\n\
- ldr r1, [sp]\n\
- adds r2, r1, 0x1\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- str r2, [sp]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- bl StartSpriteAnim\n\
- mov r2, r9\n\
- cmp r2, 0x2\n\
- beq _080F1D6E\n\
- cmp r2, 0\n\
- bne _080F1D88\n\
-_080F1D6E:\n\
- mov r3, r8\n\
- cmp r3, 0x2\n\
- bls _080F1D88\n\
- movs r0, 0x1\n\
- bl IndexOfSpritePaletteTag\n\
- ldr r3, [r4]\n\
- lsls r0, 4\n\
- ldrb r2, [r3, 0x5]\n\
- movs r1, 0xF\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r3, 0x5]\n\
-_080F1D88:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- cmp r5, 0x3\n\
- bls _080F1CFC\n\
-_080F1D92:\n\
- mov r0, r8\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
- ldr r1, _080F1DB8 @ =gUnknown_083DFEC4\n\
- ldr r0, [r1]\n\
- ldr r4, _080F1DC0 @ =0x0000030e\n\
- adds r0, r4\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r8, r0\n\
- bge _080F1DB0\n\
- b _080F1C7E\n\
-_080F1DB0:\n\
- b _080F1DC8\n\
- .align 2, 0\n\
-_080F1DB4: .4byte gSpriteTemplate_83E4454\n\
-_080F1DB8: .4byte gUnknown_083DFEC4\n\
-_080F1DBC: .4byte gSprites\n\
-_080F1DC0: .4byte 0x0000030e\n\
-_080F1DC4:\n\
- movs r0, 0\n\
- b _080F1DD8\n\
-_080F1DC8:\n\
- ldr r0, _080F1DE8 @ =gUnknown_083DFEC4\n\
- ldr r1, [r0]\n\
- ldr r5, _080F1DEC @ =0x00000306\n\
- adds r1, r5\n\
- ldrh r0, [r1]\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
- movs r0, 0x1\n\
-_080F1DD8:\n\
- add sp, 0xC\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080F1DE8: .4byte gUnknown_083DFEC4\n\
-_080F1DEC: .4byte 0x00000306\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-static void sub_80F1DF0(void)
-{
- u16 i, j;
- for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
- {
- for (j = 0; j < 4; j++)
- {
- if (gUnknown_083DFEC4->unk320[i][j])
- gUnknown_083DFEC4->unk320[i][j]->callback = sub_80F2218;
- }
- }
-
- PlaySE(SE_WIN_OPEN);
-}
-
-static bool8 sub_80F1E50(void)
-{
- if (sub_80F22F8())
- {
- sub_80F2108();
- return FALSE;
- }
- else
- {
- return TRUE;
- }
-}
-
-static bool8 sub_80F1E6C(void)
-{
- return !sub_80F22F8();
-}
-
-static void sub_80F1E84(void)
-{
- u16 i, j;
-
- gUnknown_083DFEC4->unk30F = 0;
- sub_80F2148();
- for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
- {
- if (i != gUnknown_083DFEC4->unk6DAD)
- {
- for (j = 0; j < 4; j++)
- {
- if (gUnknown_083DFEC4->unk320[i][j])
- gUnknown_083DFEC4->unk320[i][j]->callback = sub_80F2240;
- }
- }
- }
-}
-
-static bool8 sub_80F1F10(void)
-{
- u16 j;
-
- switch (gUnknown_083DFEC4->unk30F)
- {
- case 0:
- if (sub_80F2360())
- {
- for (j = 0; j < 4; j++)
- {
- struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
- sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- sprite->affineAnims = gSpriteAffineAnimTable_83E4450;
- InitSpriteAffineAnim(sprite);
- sprite->data[4] = j * 4 - 6;
- sprite->data[4] /= 2;
- sprite->data[5] = sprite->data[4] * 8;
- sprite->callback = sub_80F2240;
- }
-
- sub_80F2170();
- gUnknown_083DFEC4->unk30F++;
- }
- break;
- case 1:
- if (sub_80F23C8())
- {
- sub_80F21F8();
- FreeSpriteTilesByTag(0x0);
- FreeSpritePaletteByTag(0x0);
- FreeSpritePaletteByTag(0x1);
- return FALSE;
- }
- break;
- }
-
- return TRUE;
-}
-
-static void sub_80F1FF0(void)
-{
- if (gUnknown_083DFEC4->unk311 == 1)
- {
- REG_WIN0V = gUnknown_083DFEC4->unk314[gUnknown_083DFEC4->unk6DAD];
- REG_BLDY = gSineTable[gUnknown_083DFEC4->unk312] >> 5;
- gUnknown_083DFEC4->unk312 += 3;
- gUnknown_083DFEC4->unk312 &= 0x7F;
- }
- else if (gUnknown_083DFEC4->unk311 == 2)
- {
- REG_BLDALPHA = gUnknown_083E42F8[gUnknown_083DFEC4->unk312];
- if (gUnknown_083DFEC4->unk312 < 15)
- gUnknown_083DFEC4->unk312++;
- }
-}
-
-static void sub_80F208C(void)
-{
- sub_80F2148();
-}
-
-static void sub_80F2098(void)
-{
- REG_WIN0H = 0x77F0;
- REG_WIN0V = gUnknown_083DFEC4->unk314[gUnknown_083DFEC4->unk6DAD];
- REG_WININ = 0x3F;
- REG_WINOUT = 0x1F;
- REG_DISPCNT |= DISPCNT_WIN0_ON;
-}
-
-static void sub_80F20F4(void)
-{
- REG_DISPCNT &= ~DISPCNT_WIN0_ON;
-}
-
-static void sub_80F2108(void)
-{
- if (!gUnknown_083DFEC4->unk311)
- {
- gUnknown_083DFEC4->unk311 = 1;
- gUnknown_083DFEC4->unk312 = 0;
- REG_BLDCNT = 0x90;
- REG_BLDY = 0;
- sub_80F2098();
- }
-}
-
-static void sub_80F2148(void)
-{
- gUnknown_083DFEC4->unk311 = 0;
- REG_BLDCNT = 0;
- sub_80F20F4();
-}
-
-static void sub_80F2170(void)
-{
- u16 j;
-
- if (!gUnknown_083DFEC4->unk311)
- {
- sub_80F20F4();
- for (j = 0; j < 4; j++)
- {
- struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
- sprite->oam.objMode = ST_OAM_OBJ_BLEND;
- }
-
- gUnknown_083DFEC4->unk311 = 2;
- gUnknown_083DFEC4->unk312 = 0;
- REG_BLDCNT = 0x3F40;
- REG_BLDALPHA = 0x10;
- }
-}
-
-static void sub_80F21F8()
-{
- gUnknown_083DFEC4->unk311 = 0;
- REG_BLDCNT = 0;
-}
-
-static void sub_80F2218(struct Sprite *sprite)
-{
- sprite->pos1.x -= 8;
- if (sprite->pos1.x <= sprite->data[2])
- {
- sprite->pos1.x = sprite->data[2];
- sprite->callback = sub_80F22B0;
- }
-}
-
-static void sub_80F2240(struct Sprite *sprite)
-{
- if (sprite->data[0] == gUnknown_083DFEC4->unk6DAD)
- {
- if (sprite->data[5])
- {
- sprite->pos1.x += sprite->data[4];
- sprite->data[5] -= sprite->data[4];
- }
-
- if (sprite->affineAnimEnded)
- sub_80F240C(sprite);
- }
- else
- {
- sprite->pos1.x += 8;
- if (sprite->pos1.x >= sprite->data[3])
- sub_80F240C(sprite);
- }
-}
-
-static void sub_80F22B0(struct Sprite *sprite)
-{
- if (sprite->data[0] == gUnknown_083DFEC4->unk6DAD)
- {
- if (sprite->pos2.x > -16)
- sprite->pos2.x -= 4;
- }
- else
- {
- if (sprite->pos2.x < 0)
- sprite->pos2.x += 4;
- }
-}
-
-static bool8 sub_80F22F8(void)
-{
- u16 i, j;
-
- for (i = 0; i < gUnknown_083DFEC4->unk6DAE; i++)
- {
- for (j = 0; j < 4; j++)
- {
- struct Sprite *sprite = gUnknown_083DFEC4->unk320[i][j];
- if (!sprite)
- return TRUE;
-
- if (sprite->pos2.x != 0 && sprite->pos2.x != -16)
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static bool8 sub_80F2360(void)
-{
- u16 i, j;
-
- for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
- {
- if (i != gUnknown_083DFEC4->unk6DAD)
- {
- for (j = 0; j < 4; j++)
- {
- struct Sprite *sprite = gUnknown_083DFEC4->unk320[i][j];
- if (sprite)
- return FALSE;
- }
- }
- }
-
- return TRUE;
-}
-
-static bool8 sub_80F23C8(void)
-{
- u16 j;
-
- for (j = 0; j < 4; j++)
- {
- struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
- if (sprite)
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void sub_80F240C(struct Sprite *sprite)
-{
- gUnknown_083DFEC4->unk320[sprite->data[0]][sprite->data[1]] = NULL;
- if (sprite->affineAnimEnded)
- FreeOamMatrix(sprite->oam.matrixNum);
-
- DestroySprite(sprite);
-}
-
-static void sub_80F2458(u8 arg0)
-{
- switch (arg0)
- {
- case 0:
- gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk388;
- gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk388);
- gUnknown_083DFEC4->unk380.tag = 0x0;
- break;
- case 1:
- gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk1788;
- gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk1788);
- gUnknown_083DFEC4->unk380.tag = 0x0;
- break;
- case 2:
- gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk2388;
- gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk2388);
- gUnknown_083DFEC4->unk380.tag = 0x0;
- break;
- default:
- return;
- }
-
- LoadSpriteSheet(&gUnknown_083DFEC4->unk380);
-}
-
-static void sub_80F2514(u8 arg0)
-{
- struct SpritePalette spritePalette;
-
- switch (arg0)
- {
- case 0:
- spritePalette.data = gPokenavMenuOptions1_Pal;
- spritePalette.tag = 0;
- LoadSpritePalette(&spritePalette);
- spritePalette.data = gPokenavMenuOptions2_Pal;
- spritePalette.tag = 0x1;
- break;
- case 1:
- spritePalette.data = gPokenavConditionMenu_Pal;
- spritePalette.tag = 0x0;
- break;
- case 2:
- spritePalette.data = gPokenavCondition6_Pal;
- spritePalette.tag = 0;
- LoadSpritePalette(&spritePalette);
- spritePalette.data = gPokenavCondition7_Pal;
- spritePalette.tag = 0x1;
- break;
- default:
- return;
- }
-
- LoadSpritePalette(&spritePalette);
-}
-
-static void sub_80F2598(void)
-{
- u8 spriteId;
-
- gUnknown_083DFEC4->unk6D9C = NULL;
- if (DoesSomeoneWantRematchIn(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE)
- {
- LoadSpriteSheet(&gSpriteSheet_PokenavBlueLight);
- LoadSpritePalette(&gSpritePalette_PokenavBlueLight);
- spriteId = CreateSprite(&gSpriteTemplate_83E4484, 12, 96, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk6D9C = &gSprites[spriteId];
- }
- else
- {
- FreeSpriteTilesByTag(0x19);
- FreeSpritePaletteByTag(0x11);
- }
- }
-}
-
-static void sub_80F2620(void)
-{
- if (gUnknown_083DFEC4->unk6D9C)
- {
- DestroySprite(gUnknown_083DFEC4->unk6D9C);
- FreeSpriteTilesByTag(0x19);
- FreeSpritePaletteByTag(0x11);
- gUnknown_083DFEC4->unk6D9C = NULL;
- }
-}
-
-void sub_80F2654(struct Sprite *sprite)
-{
- if (++sprite->data[0] > 6)
- {
- sprite->data[0] = 0;
- sprite->invisible = !sprite->invisible;
- }
-}
-
-void sub_80F2688(void)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while(sub_80F26BC());
-}
-
-static bool8 sub_80F26BC(void)
-{
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- LZ77UnCompWram(gPokenavMainMenu_Gfx, gUnknown_083DFEC4->unk3B98);
- break;
- case 1:
- LZ77UnCompWram(gPokenavConditionMenuHeader_Gfx, gUnknown_083DFEC4->unk4198);
- break;
- case 2:
- LZ77UnCompWram(gPokenavRibbonsHeader_Gfx, gUnknown_083DFEC4->unk4D98);
- break;
- case 3:
- LZ77UnCompWram(gPokenavHoennMapHeader_Gfx, gUnknown_083DFEC4->unk5398);
- break;
- case 4:
- LZ77UnCompWram(gPokenavConditionMenuOptions_Gfx, gUnknown_083DFEC4->unk5F98);
- break;
- case 5:
- LZ77UnCompWram(gPokenavConditionMenuOptions2_Gfx, gUnknown_083DFEC4->unk6798);
- break;
- case 6:
- LZ77UnCompWram(gPokenavTrainersEyesHeader_Gfx, gUnknown_083DFEC4->unk4798);
- break;
- case 7:
- LoadSpritePalettes(gUnknown_083E449C);
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-
-static void sub_80F27DC(u8 arg0)
-{
- struct SpriteSheet spriteSheet;
-
- switch (arg0)
- {
- case 0:
- spriteSheet.data = gUnknown_083DFEC4->unk3B98;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk3B98);
- spriteSheet.tag = 0x1;
- break;
- case 1:
- spriteSheet.data = gUnknown_083DFEC4->unk4198;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4198);
- spriteSheet.tag = 0x1;
- break;
- case 3:
- spriteSheet.data = gUnknown_083DFEC4->unk4798;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4798);
- spriteSheet.tag = 0x1;
- break;
- case 2:
- spriteSheet.data = gUnknown_083DFEC4->unk4D98;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4D98);
- spriteSheet.tag = 0x1;
- break;
- case 4:
- spriteSheet.data = gUnknown_083DFEC4->unk5398;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk5398);
- spriteSheet.tag = 0x1;
- break;
- case 5:
- spriteSheet.data = gUnknown_083DFEC4->unk5F98;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk5F98);
- spriteSheet.tag = 0x2;
- break;
- case 6:
- spriteSheet.data = gUnknown_083DFEC4->unk6198;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6198);
- spriteSheet.tag = 0x2;
- break;
- case 8:
- spriteSheet.data = gUnknown_083DFEC4->unk6398;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6398);
- spriteSheet.tag = 0x2;
- break;
- case 9:
- spriteSheet.data = gUnknown_083DFEC4->unk6598;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6598);
- spriteSheet.tag = 0x2;
- break;
- case 11:
- spriteSheet.data = gUnknown_083DFEC4->unk6998;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6998);
- spriteSheet.tag = 0x2;
- break;
- case 10:
- spriteSheet.data = gUnknown_083DFEC4->unk6798;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6798);
- spriteSheet.tag = 0x2;
- break;
- case 7:
- spriteSheet.data = gUnknown_083DFEC4->unk6B98;
- spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6B98);
- spriteSheet.tag = 0x2;
- break;
- default:
- return;
- }
-
- LoadSpriteSheet(&spriteSheet);
-}
-
-void sub_80F29B8(u8 arg0)
-{
- u16 i;
- s16 deltaX, endX, initialX;
- u16 y;
- s16 width;
- struct Sprite **sprites;
- const struct SpriteTemplate *spriteTemplate;
- u8 spriteId;
-
- spriteTemplate = NULL;
- switch (arg0)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- initialX = -96;
- y = 49 - gUnknown_083DFEC4->unk030C;
- deltaX = 8;
- endX = 32;
- width = 64;
- sprites = gUnknown_083DFEC4->unk3B88;
- spriteTemplate = arg0 != 3 ? &gSpriteTemplate_83E44E0 : &gSpriteTemplate_83E44F8;
- break;
- case 4:
- initialX = 272;
- y = 49 - gUnknown_083DFEC4->unk030C;
- deltaX = -8;
- endX = 152;
- width = 64;
- spriteTemplate = &gSpriteTemplate_83E44E0;
- sprites = gUnknown_083DFEC4->unk3B88;
- break;
- case 5:
- case 6:
- case 8:
- case 9:
- spriteTemplate = &gSpriteTemplate_83E4530;
- // fall through
- case 7:
- case 10:
- case 11:
- if (spriteTemplate == NULL)
- spriteTemplate = &gSpriteTemplate_83E4548;
-
- initialX = -96;
- y = 68 - gUnknown_083DFEC4->unk030C;
- deltaX = 8;
- endX = 16;
- width = 32;
- sprites = gUnknown_083DFEC4->unk3B90;
- break;
- default:
- return;
- }
-
- for (i = 0; i < 2; i++)
- {
- spriteId = CreateSprite(spriteTemplate, i * width + initialX, y, 0);
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].data[0] = deltaX;
- gSprites[spriteId].data[1] = endX + i * width;
- gSprites[spriteId].data[2] = i;
- gSprites[spriteId].data[3] = arg0;
- if (arg0 == 4 && i == 1)
- {
- int anim = !gUnknown_083DFEC4->regionMap.zoomed ? 1 : 2;
- StartSpriteAnim(&gSprites[spriteId], anim);
- }
- else
- {
- StartSpriteAnim(&gSprites[spriteId], i);
- }
-
- if (arg0 < 4 && i == 1)
- {
- gSprites[spriteId].oam.shape = ST_OAM_SQUARE;
- gSprites[spriteId].oam.size = 2;
- }
-
- sprites[i] = &gSprites[spriteId];
- }
- }
-}
-
-#define sEndX sprite->data[1]
-void sub_80F2BBC(struct Sprite *sprite)
-{
- s16 x = sprite->pos1.x;
- sprite->pos1.x += sprite->data[0];
- if ((x <= sEndX && sprite->pos1.x >= sEndX) || (x >= sEndX && sprite->pos1.x <= sEndX))
- {
- sprite->pos1.x = sEndX;
- if (sprite->data[3] == 4 && sprite->data[2] == 1)
- sprite->callback = sub_80F2C58;
- else
- sprite->callback = SpriteCallbackDummy;
- }
-}
-#undef sEndX
-
-static void sub_80F2C14(struct Sprite *sprite)
-{
- u16 right;
-
- sprite->pos1.x -= sprite->data[0];
- right = sprite->pos1.x + 32;
- if (right > 304)
- {
- if (sprite->data[2] == 1)
- {
- if (sprite->data[3] < 5)
- FreeSpriteTilesByTag(0x1);
- else
- FreeSpriteTilesByTag(0x2);
- }
-
- DestroySprite(sprite);
- }
-}
-
-static void sub_80F2C58(struct Sprite *sprite)
-{
- int anim = !gUnknown_083DFEC4->regionMap.zoomed ? 1 : 2;
- StartSpriteAnim(sprite, anim);
-}
-
-void sub_80F2C80(u8 arg0)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F2CBC(arg0));
-}
-
-bool8 sub_80F2CBC(u8 arg0)
-{
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- sub_80F27DC(arg0);
- gUnknown_083DFEC4->unk306++;
- return TRUE;
- case 1:
- sub_80F29B8(arg0);
- gUnknown_083DFEC4->unk306++;
- return FALSE;
- default:
- return FALSE;
- }
-}
-
-static void sub_80F2D04(u8 arg0)
-{
- u16 i;
-
- if (arg0 < 5)
- {
- for (i = 0; i < 2; i++)
- gUnknown_083DFEC4->unk3B88[i]->callback = sub_80F2C14;
- }
- else
- {
- for (i = 0; i < 2; i++)
- gUnknown_083DFEC4->unk3B90[i]->callback = sub_80F2C14;
- }
-}
-
-static void sub_80F2D6C(u8 arg0)
-{
- u16 i;
-
- if (arg0 < 5)
- {
- FreeSpriteTilesByTag(0x1);
- for (i = 0; i < 2; i++)
- DestroySprite(gUnknown_083DFEC4->unk3B88[i]);
- }
- else
- {
- FreeSpriteTilesByTag(0x2);
- for (i = 0; i < 2; i++)
- DestroySprite(gUnknown_083DFEC4->unk3B90[i]);
- }
-}
-
-static void sub_80F2DD8(void)
-{
- CreateRegionMapCursor(7, 7);
- CreateRegionMapPlayerIcon(8, 8);
- sub_80FBF94();
-}
-
-static void sub_80F2DF4(void)
-{
- FreeRegionMapIconResources();
-}
-
-void sub_80F2E00(struct Sprite *sprite)
-{
- sprite->pos1.x = gUnknown_083DFEC4->unk8766 + 38;
-}
-
-static void sub_80F2E18(u8 arg0)
-{
- u8 spriteId;
- struct SpriteTemplate spriteTemplate;
- struct SpritePalette spritePalette;
- struct SpriteSheet spriteSheet;
-
- if (!gUnknown_083DFEC4->unk8768)
- {
- spriteSheet = gUnknown_083E4568;
- spriteTemplate = gSpriteTemplate_83E4570;
- spritePalette = gUnknown_083E4588;
-
- spriteSheet.data = gUnknown_083DFEC4->unkD1E4[arg0];
- spritePalette.data = gUnknown_083DFEC4->unk0[arg0];
- gUnknown_083DFEC4->unkD1DC = LoadSpritePalette(&spritePalette);
- gUnknown_083DFEC4->unkD1DE = LoadSpriteSheet(&spriteSheet);
-
- spriteId = CreateSprite(&spriteTemplate, 38, 104, 0);
- if (spriteId == MAX_SPRITES)
- {
- FreeSpriteTilesByTag(0x6);
- FreeSpritePaletteByTag(0x6);
- gUnknown_083DFEC4->unk8768 = NULL;
- }
- else
- {
- gUnknown_083DFEC4->unk8768 = &gSprites[spriteId];
- gUnknown_083DFEC4->unkD1E0 = (void *)(VRAM + 0x10000) + gUnknown_083DFEC4->unkD1DE * 32;
- gUnknown_083DFEC4->unkD1DC = gUnknown_083DFEC4->unkD1DC * 16 + 0x100;
- }
- }
- else
- {
- DmaCopy16Defvars(3, gUnknown_083DFEC4->unkD1E4[arg0], gUnknown_083DFEC4->unkD1E0, 0x800);
- LoadPalette(gUnknown_083DFEC4->unk0[arg0], gUnknown_083DFEC4->unkD1DC, 0x20);
- }
-}
-
-void sub_80F2F48(void)
-{
- if (gUnknown_083DFEC4->unk8768)
- {
- DestroySprite(gUnknown_083DFEC4->unk8768);
- FreeSpriteTilesByTag(0x6);
- FreeSpritePaletteByTag(0x6);
- gUnknown_083DFEC4->unk8768 = NULL;
- }
-}
-
-void sub_80F2F7C(u8 arg0)
-{
- sub_80F2E18(arg0);
- gUnknown_083DFEC4->unkCED0 = gUnknown_083DFEC4->unk8768;
- gUnknown_083DFEC4->unkCED0->callback = sub_80F2FEC;
-}
-
-static void sub_80F2FB0(void)
-{
- if (gUnknown_083DFEC4->unkCED0)
- {
- DestroySprite(gUnknown_083DFEC4->unkCED0);
- FreeSpriteTilesByTag(0x6);
- FreeSpritePaletteByTag(0x6);
- gUnknown_083DFEC4->unkCED0 = NULL;
- gUnknown_083DFEC4->unk8768 = NULL;
- }
-}
-
-static void sub_80F2FEC(struct Sprite *sprite)
-{
- sprite->pos1.x = gUnknown_083DFEC4->unkD15A + 40;
- sprite->pos1.y = 104;
-}
-
-static void sub_80F3008(u8 arg0)
-{
- u16 i;
- u8 spriteId;
- struct SpritePalette spritePalette;
- struct SpriteSheet spriteSheets[3];
-
- memcpy(spriteSheets, gUnknown_083E4590, sizeof(gUnknown_083E4590));
- spritePalette = gUnknown_083E45A8;
- switch (arg0)
- {
- case 1:
- case 2:
- spritePalette.data = gUnknown_08E9F988;
- break;
- }
-
- LoadSpriteSheets(spriteSheets);
- LoadSpritePalette(&spritePalette);
- spriteId = CreateSprite(&gSpriteTemplate_83E45B8, 95, 0, 0);
- if (spriteId == MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk87CC = NULL;
- }
- else
- {
- gUnknown_083DFEC4->unk87CC = &gSprites[spriteId];
- for (i = 0; i < 2; i++)
- {
- spriteId = CreateSprite(&gSpriteTemplate_83E45F0, 168, i * 128 + 8, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk87D0[i] = &gSprites[spriteId];
- gSprites[spriteId].invisible = 1;
- gSprites[spriteId].data[0] = 0;
- gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].data[2] = i == 0 ? -1 : 1;
- gSprites[spriteId].data[3] = i;
- gSprites[spriteId].data[4] = 1;
- StartSpriteAnim(&gSprites[spriteId], i);
- }
- else
- {
- gUnknown_083DFEC4->unk87D0[i] = NULL;
- }
- }
- }
-}
-
-static void sub_80F3130(void)
-{
- u16 i;
-
- if (gUnknown_083DFEC4->unk87CC)
- {
- DestroySprite(gUnknown_083DFEC4->unk87CC);
- FreeSpriteTilesByTag(0x9);
- FreeSpritePaletteByTag(0x9);
- gUnknown_083DFEC4->unk87CC = NULL;
- }
-
- for (i = 0; i < 2; i++)
- {
- if (gUnknown_083DFEC4->unk87D0[i])
- {
- DestroySprite(gUnknown_083DFEC4->unk87D0[i]);
- gUnknown_083DFEC4->unk87D0[i] = NULL;
- }
- }
-
- FreeSpriteTilesByTag(0xA);
-}
-
-void sub_80F3190(struct Sprite *sprite)
-{
- sprite->pos1.y = gUnknown_083DFEC4->unk876C * 16 + 16;
-}
-
-void sub_80F31AC(struct Sprite *sprite)
-{
- if (gUnknown_083DFEC4->unk87C9)
- {
- if (sprite->data[4])
- {
- if (!sprite->data[3])
- sprite->invisible = gUnknown_083DFEC4->unk8770 == 0;
- else
- sprite->invisible = gUnknown_083DFEC4->unk8772 == gUnknown_083DFEC4->unk8774;
-
- sprite->data[4] = 0;
- }
-
- if (++sprite->data[0] > 4)
- {
- sprite->data[0] = 0;
- if (++sprite->data[1] < 5)
- {
- sprite->pos2.y += sprite->data[2];
- }
- else
- {
- sprite->data[1] = 0;
- sprite->pos2.y = 0;
- }
- }
- }
-}
-
-static void sub_80F3264(void)
-{
- u16 i;
-
- for (i = 0; i < 2; i++)
- {
- if (gUnknown_083DFEC4->unk87D0[i])
- gUnknown_083DFEC4->unk87D0[i]->data[4] = 1;
- }
-}
-
-static void sub_80F3294(u8 arg0)
-{
- gUnknown_083DFEC4->unk87CC->invisible = arg0;
- if (gUnknown_083DFEC4->unk87C9)
- {
- if (arg0 == 1)
- {
- gUnknown_083DFEC4->unk87D0[0]->invisible = arg0;
- gUnknown_083DFEC4->unk87D0[1]->invisible = arg0;
- }
- else
- {
- gUnknown_083DFEC4->unk87D0[0]->data[4] = 1;
- gUnknown_083DFEC4->unk87D0[1]->data[4] = 1;
- }
- }
-}
-
-void sub_80F3328(struct Sprite *sprite)
-{
- if (sprite->data[0] == gUnknown_083DFEC4->unk87DC)
- StartSpriteAnim(sprite, 0);
- else
- StartSpriteAnim(sprite, 1);
-}
-
-static void sub_80F3360(struct Sprite *sprite)
-{
- if (gUnknown_083DFEC4->unk87DC == gUnknown_083DFEC4->unk87DA - 1)
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x4);
- else
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x5);
-}
-
-void sub_80F33A8(void)
-{
- u16 i;
- u8 spriteId;
- struct SpriteSheet spriteSheets[4];
- struct SpritePalette spritePalettes[3];
- struct SpriteTemplate spriteTemplate;
-
- memcpy(spriteSheets, gUnknown_083E4628, sizeof(gUnknown_083E4628));
- memcpy(spritePalettes, gUnknown_083E4648, sizeof(gUnknown_083E4648));
- spriteTemplate = gSpriteTemplate_83E4660;
- LoadSpriteSheets(spriteSheets);
- LoadSpritePalettes(spritePalettes);
-
- for (i = 0; i < gUnknown_083DFEC4->unk87DA - 1; i++)
- {
- spriteId = CreateSprite(&spriteTemplate, 226, i * 20 + 8, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk87E4[i] = &gSprites[spriteId];
- gUnknown_083DFEC4->unk87E4[i]->data[0] = i;
- }
- else
- {
- gUnknown_083DFEC4->unk87E4[i] = NULL;
- }
- }
-
- spriteTemplate.tileTag = 0x4;
- spriteTemplate.callback = SpriteCallbackDummy;
- for (; i < 6; i++)
- {
- spriteId = CreateSprite(&spriteTemplate, 230, i * 20 + 8, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk87E4[i] = &gSprites[spriteId];
- gUnknown_083DFEC4->unk87E4[i]->oam.size = 0;
- }
- else
- {
- gUnknown_083DFEC4->unk87E4[i] = NULL;
- }
- }
-
- spriteTemplate.tileTag = 0x5;
- spriteTemplate.callback = sub_80F3360;
- spriteId = CreateSprite(&spriteTemplate, 222, i * 20 + 8, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk87E4[i] = &gSprites[spriteId];
- gUnknown_083DFEC4->unk87E4[i]->oam.shape = ST_OAM_H_RECTANGLE;
- gUnknown_083DFEC4->unk87E4[i]->oam.size = 2;
- }
- else
- {
- gUnknown_083DFEC4->unk87E4[i] = NULL;
- }
-}
-
-void sub_80F357C(void)
-{
- u16 i;
-
- for (i = 0; i < 7; i++)
- {
- if (gUnknown_083DFEC4->unk87E4[i])
- {
- DestroySprite(gUnknown_083DFEC4->unk87E4[i]);
- gUnknown_083DFEC4->unk87E4[i] = NULL;
- }
- }
-}
-
-static void sub_80F35B4(void)
-{
- struct Sprite *sprite;
-
- gUnknown_083DFEC4->unk76B0.baseTileTag = 0x1C;
- gUnknown_083DFEC4->unk76B0.basePaletteTag = 0x13;
- sub_80F727C(&gUnknown_083DFEC4->unk76B0);
- sub_80F7404();
- sprite = sub_80F7920(27, 21, gUnknown_083E4678);
- sprite->oam.priority = 3;
- sprite->pos1.x = 192;
- sprite->pos1.y = 32;
- sprite->callback = sub_80F363C;
- gUnknown_083DFEC4->unk76AC = sprite;
-}
-
-void sub_80F3614(void)
-{
- DestroySprite(gUnknown_083DFEC4->unk76AC);
- FreeSpriteTilesByTag(0x1B);
- FreeSpritePaletteByTag(0x15);
-}
-
-static void sub_80F363C(struct Sprite *sprite)
-{
- StartSpriteAnim(sprite, gUnknown_083DFEC4->unk8934[gUnknown_083DFEC4->unk8fe9]);
-}
-
-void sub_80F3668(void)
-{
- sub_80F7418(gUnknown_083DFEC4->unk8934[gUnknown_083DFEC4->unk8fe9], 176, 32);
-}
-
-void sub_80F3698(void)
-{
- struct UnkUsePokeblockSub *var0 = &gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC];
- gUnknown_083DFEC4->unk8934[gUnknown_083DFEC4->unk8fe9] = gUnknown_083DFEC4->unk76B0.markings;
- SetMonMarkings(var0->unk1, var0->partyIdx, gUnknown_083DFEC4->unk76B0.markings);
- sub_80F7470();
-}
-
-static void sub_80F36F0(void)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F3724());
-}
-
-static bool8 sub_80F3724(void)
-{
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- LZ77UnCompWram(gUnknown_083E3D00, gUnknown_083DFEC4->unk984C);
- break;
- case 1:
- sub_80F379C();
- gUnknown_083DFEC4->unk306++;
- // fall through
- case 2:
- if (sub_80F37D0())
- return TRUE;
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-
-static void sub_80F379C(void)
-{
- gUnknown_083DFEC4->unkBC93 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F37D0());
-}
-
-static bool8 sub_80F37D0(void)
-{
- u16 i;
- u8 j, k, l, m;
-
- if (gUnknown_083DFEC4->unkBC93 > 11)
- return FALSE;
-
- for (i = 0; i < 2; i++)
- {
- u8 *r4 = &gUnknown_083DFEC4->unk984C[gUnknown_083DFEC4->unkBC93][0];
- u8 *r5 = &gUnknown_083DFEC4->unkA44C[gUnknown_083DFEC4->unkBC93][0];
- for (j = 0; j < 4; j++)
- {
- CpuFastSet(r4, r5, 0x10);
- r5 += 0x40;
- r4 += 0x20;
- for (k = 0; k < 2; k++)
- {
- for (l = 0; l < 8; l++)
- {
- r4 += 4;
- for (m = 0; m < 4; m++)
- {
- r4 -= 1;
- *r5 = (*r4 << 4) | ((*r4 >> 4) & 0xF);
- r5++;
- }
-
- r4 += 4;
- }
-
- r4 -= 0x40;
- }
-
- r4 += 0x60;
- }
-
- if (++gUnknown_083DFEC4->unkBC93 > 11)
- return FALSE;
- }
-
- if (gUnknown_083DFEC4->unkBC93 > 11)
- return FALSE;
-
- return TRUE;
-}
-
-static void sub_80F38B8(void)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F38EC());
-}
-
-static bool8 sub_80F38EC(void)
-{
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- gUnknown_083DFEC4->unk9348 = NULL;
- gUnknown_083DFEC4->unkBC92 = 0;
- break;
- case 1:
- sub_80F2E18(0);
- break;
- case 2:
- sub_80F3970();
- gUnknown_083DFEC4->unk306++;
- // fall through
- case 3:
- if (sub_80F39A4())
- return TRUE;
- break;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-
-static void sub_80F3970(void)
-{
- gUnknown_083DFEC4->unkBC93 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F39A4());
-}
-
-static bool8 sub_80F39A4(void)
-{
- struct SpriteSheet spriteSheet;
- struct SpritePalette spritePalette;
- if (gUnknown_083DFEC4->unkBC93 > 11)
- return FALSE;
-
- spriteSheet.data = &gUnknown_083DFEC4->unkA44C[gUnknown_083DFEC4->unkBC93][0];
- spriteSheet.size = 0x200;
- spriteSheet.tag = gUnknown_083DFEC4->unkBC93 + 11;
- LoadSpriteSheet(&spriteSheet);
- if (gUnknown_083DFEC4->unkBC93 < 5)
- {
- spritePalette.data = gUnknown_083E3C60[gUnknown_083DFEC4->unkBC93];
- spritePalette.tag = gUnknown_083DFEC4->unkBC93 + 10;
- LoadSpritePalette(&spritePalette);
- }
-
- if (++gUnknown_083DFEC4->unkBC93 > 11)
- return FALSE;
-
- return TRUE;
-}
-
-static struct Sprite *sub_80F3A3C(u16 arg0, u16 arg1)
-{
- struct SpriteTemplate spriteTemplate;
- u16 var0;
- u8 ribbon;
- u8 spriteId;
-
- if (arg1 < 3)
- var0 = arg0 + arg1 * 9;
- else
- var0 = arg0 + (gUnknown_083DFEC4->unkBC8E - gUnknown_083DFEC4->unkBC8F);
-
- ribbon = gUnknown_083DFEC4->unkBC4C[var0];
- spriteTemplate = gSpriteTemplate_83E476C;
- spriteTemplate.tileTag = gPokenavRibbonsIconGfx[ribbon][0] + 11;
- spriteTemplate.paletteTag = gPokenavRibbonsIconGfx[ribbon][1] + 10;
- spriteId = CreateSprite(&spriteTemplate, arg0 * 16 + 96, arg1 * 16 + 40, 2);
- if (spriteId != MAX_SPRITES)
- return &gSprites[spriteId];
- else
- return NULL;
-}
-
-static void sub_80F3B00(void)
-{
- gUnknown_083DFEC4->unk9348 = sub_80F3A3C(gUnknown_083DFEC4->unkBC90, gUnknown_083DFEC4->unkBC91);
- if (gUnknown_083DFEC4->unk9348)
- {
- StartSpriteAffineAnim(gUnknown_083DFEC4->unk9348, 1);
- gUnknown_083DFEC4->unkBC92 = 1;
- }
- else
- {
- gUnknown_083DFEC4->unkBC92 = 0;
- }
-}
-
-static bool8 sub_80F3B58(void)
-{
- if (gUnknown_083DFEC4->unkBC92)
- {
- gUnknown_083DFEC4->unkBC92 = !gUnknown_083DFEC4->unk9348->affineAnimEnded;
- return gUnknown_083DFEC4->unkBC92;
- }
- else
- {
- return FALSE;
- }
-}
-
-static void sub_80F3B94(void)
-{
- if (gUnknown_083DFEC4->unk9348)
- {
- StartSpriteAffineAnim(gUnknown_083DFEC4->unk9348, 2);
- gUnknown_083DFEC4->unkBC92 = 1;
- }
- else
- {
- gUnknown_083DFEC4->unkBC92 = 0;
- }
-}
-
-static bool8 sub_80F3BD4(void)
-{
- if (gUnknown_083DFEC4->unkBC92)
- {
- gUnknown_083DFEC4->unkBC92 = !gUnknown_083DFEC4->unk9348->affineAnimEnded;
- if (!gUnknown_083DFEC4->unkBC92)
- {
- FreeOamMatrix(gUnknown_083DFEC4->unk9348->oam.matrixNum);
- DestroySprite(gUnknown_083DFEC4->unk9348);
- gUnknown_083DFEC4->unk9348 = NULL;
- }
-
- return gUnknown_083DFEC4->unkBC92;
- }
- else
- {
- return FALSE;
- }
-}
-
-static void sub_80F3C2C(void)
-{
- u16 i;
-
- if (gUnknown_083DFEC4->unk9348)
- {
- FreeOamMatrix(gUnknown_083DFEC4->unk9348->oam.matrixNum);
- DestroySprite(gUnknown_083DFEC4->unk9348);
- gUnknown_083DFEC4->unk9348 = NULL;
- }
-
- for (i = 0; i < 12; i++)
- FreeSpriteTilesByTag(i + 0xB);
-
- for (i = 0; i < 5; i++)
- FreeSpritePaletteByTag(i + 0xA);
-
- sub_80F2F48();
-}
-
-void sub_80F3C94(void)
-{
- u16 i;
- struct SpriteSheet spriteSheet;
- struct SpritePalette spritePalette;
-
- spriteSheet = gUnknown_083E4784;
- spritePalette = gUnknown_083E478C;
- LoadSpriteSheet(&spriteSheet);
- LoadSpritePalette(&spritePalette);
- for (i = 0; i < 10; i++)
- gUnknown_083DFEC4->unk8800[i] = NULL;
-}
-
-void sub_80F3CE8(void)
-{
- move_anim_execute();
- FreeSpriteTilesByTag(0x17);
- FreeSpritePaletteByTag(0xF);
-}
-
-void sub_80F3D00(void)
-{
- u8 spriteId;
- u16 i;
- u8 var1;
- struct UnkUsePokeblockSub *var0 = &gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC];
-
- if (!var0->unk4)
- return;
-
- var1 = gUnknown_083DFEC4->unk8931[gUnknown_083DFEC4->unk8fe9];
- for (i = 0; i < var1 + 1; i++)
- {
- spriteId = CreateSprite(&gSpriteTemplate_83E4800, 0, 0, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk8800[i] = &gSprites[spriteId];
- gUnknown_083DFEC4->unk8800[i]->invisible = 1;
- }
- else
- {
- break;
- }
- }
-
- sub_80F3F20(var1, 1);
-}
-
-void move_anim_execute(void)
-{
- u16 i;
-
- for (i = 0; i < 10; i++)
- {
- if (!gUnknown_083DFEC4->unk8800[i])
- return;
-
- DestroySprite(gUnknown_083DFEC4->unk8800[i]);
- gUnknown_083DFEC4->unk8800[i] = NULL;
- }
-}
-
-void sub_80F3DDC(struct Sprite *sprite)
-{
- if (++sprite->data[1] > 60)
- {
- sprite->data[1] = 0;
- sub_80F3F20(sprite->data[2], 0);
- }
-}
-
-static void sub_80F3E04(struct Sprite *sprite)
-{
- if (sprite->animEnded)
- {
- sprite->data[1] = 0;
- sprite->callback = sub_80F3DDC;
- }
-}
-
-static void sub_80F3E24(struct Sprite *sprite)
-{
- if (gUnknown_083DFEC4->unk8768)
- {
- sprite->pos1.x = gUnknown_083DFEC4->unk8768->pos1.x
- + gUnknown_083DFEC4->unk8768->pos2.x
- + gUnknown_083E4794[sprite->data[0]][0];
- sprite->pos1.y = gUnknown_083DFEC4->unk8768->pos1.y
- + gUnknown_083DFEC4->unk8768->pos2.y
- + gUnknown_083E4794[sprite->data[0]][1];
- }
- else
- {
- sprite->pos1.x = gUnknown_083E4794[sprite->data[0]][0] + 40;
- sprite->pos1.y = gUnknown_083E4794[sprite->data[0]][1] + 104;
- }
-}
-
-static void sub_80F3E9C(struct Sprite *sprite)
-{
- if (sprite->data[1])
- {
- if (--sprite->data[1])
- return;
-
- SeekSpriteAnim(sprite, 0);
- sprite->invisible = 0;
- }
-
- sub_80F3E24(sprite);
- if (sprite->animEnded)
- {
- sprite->invisible = 1;
- if (sprite->data[3] == sprite->data[2])
- {
- if (sprite->data[3] == 9)
- {
- sub_80F3FAC();
- sprite->callback = sub_80F3E04;
- }
- else
- {
- sprite->callback = sub_80F3DDC;
- }
- }
- else
- {
- sprite->callback = SpriteCallbackDummy;
- }
- }
-}
-
-static void sub_80F3F20(u8 arg0, u8 arg1)
-{
- u16 i;
-
- for (i = 0; i < 10; i++)
- {
- if (gUnknown_083DFEC4->unk8800[i])
- {
- gUnknown_083DFEC4->unk8800[i]->data[0] = i;
- gUnknown_083DFEC4->unk8800[i]->data[1] = i * 16 + 1;
- gUnknown_083DFEC4->unk8800[i]->data[2] = arg0;
- gUnknown_083DFEC4->unk8800[i]->data[3] = i;
-
- if (!arg1 || arg0 != 9)
- {
- gUnknown_083DFEC4->unk8800[i]->callback = sub_80F3E9C;
- }
- else
- {
- sub_80F3E24(gUnknown_083DFEC4->unk8800[i]);
- sub_80F3FAC();
- gUnknown_083DFEC4->unk8800[i]->callback = sub_80F3E04;
- gUnknown_083DFEC4->unk8800[i]->invisible = 0;
- }
- }
- }
-}
-
-static void sub_80F3FAC(void)
-{
- u16 i;
-
- for (i = 0; i < 10; i++)
- {
- if (gUnknown_083DFEC4->unk8800[i])
- {
- SeekSpriteAnim(gUnknown_083DFEC4->unk8800[i], 0);
- gUnknown_083DFEC4->unk8800[i]->invisible = 0;
- }
- }
-}
-
-static void sub_80F3FF0(void)
-{
- gUnknown_083DFEC4->unk306 = 0;
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F4024());
-}
-
-static bool8 sub_80F4024(void)
-{
- u8 paletteIndex;
- u8 spriteId;
- struct SpritePalette spritePalette;
-
- switch (gUnknown_083DFEC4->unk306)
- {
- case 0:
- LZ77UnCompWram(gUnknown_083E329C, gUnknown_083DFEC4->unk131E4);
- break;
- case 1:
- {
- struct SpriteSheet spriteSheet = {
- .data = gUnknown_083DFEC4->unk131E4,
- .size = sizeof(gUnknown_083DFEC4->unk131E4),
- .tag = 0x18,
- };
- LoadSpriteSheet(&spriteSheet);
- break;
- }
- case 2:
- spritePalette = gUnknown_083E4818;
- LoadSpritePalette(&spritePalette);
- paletteIndex = IndexOfSpritePaletteTag(0x10);
- gUnknown_083DFEC4->unk308 = -3 & ~(1 << (paletteIndex + 0x10));
- break;
- case 3:
- spriteId = CreateSprite(&gSpriteTemplate_83E4850, 218, 14, 0);
- if (spriteId != MAX_SPRITES)
- {
- gUnknown_083DFEC4->unk6D98 = &gSprites[spriteId];
- gUnknown_083DFEC4->unk6D98->data[0] = 0;
- }
- else
- {
- gUnknown_083DFEC4->unk6D98 = NULL;
- }
-
- gUnknown_083DFEC4->unk306++;
- return FALSE;
- default:
- return FALSE;
- }
-
- gUnknown_083DFEC4->unk306++;
- return TRUE;
-}
-
-void sub_80F4138(struct Sprite *sprite)
-{
- sprite->pos2.y = -gUnknown_083DFEC4->unk030C;
- if (sprite->pos2.y <= -32)
- {
- if (sprite->data[0] == 0)
- {
- sprite->invisible = 1;
- sprite->data[0] = 1;
- }
- }
- else
- {
- if (sprite->data[0] == 1)
- {
- sprite->invisible = 0;
- sprite->data[0] = 0;
- }
- }
-}
-
-#ifdef NONMATCHING
-// close, but the last DmaCopy16 is sharing the 0x400 value from the beginning of the function.
-void sub_80F4194(u8 *arg0, u8 *text)
-{
- u8 i;
- u8 *tileBuffer;
- u32 *tileBuf2;
-
- tileBuffer = gUnknown_083DFEC8;
- DmaFill16(3, 0x1111, tileBuffer, 0x280);
- DmaFill16Defvars(3, 0x1111, 0x400 + tileBuffer, 0x280);
- Text_InitWindow8004E3C(&gWindowTemplate_81E70F0, tileBuffer, text);
-
- DmaClear16(3, tileBuffer + 0x220, 0x60);
- DmaClear16(3, tileBuffer + 0x620, 0x60);
-
- tileBuf2 = (int *)tileBuffer + 0x80;
- tileBuf2[0] &= 0x0FFFFFFF;
- tileBuf2[1] &= 0x0FFFFFFF;
- tileBuf2[2] &= 0x0FFFFFFF;
- tileBuf2[3] &= 0x0FFFFFFF;
- tileBuf2[4] &= 0x0FFFFFFF;
- tileBuf2[5] &= 0x0FFFFFFF;
- tileBuf2[6] &= 0x0FFFFFFF;
- tileBuf2[7] &= 0x0FFFFFFF;
-
- tileBuf2 = (int *)tileBuffer + 0x180;
- tileBuf2[0] &= 0x0FFFFFFF;
- tileBuf2[1] &= 0x0FFFFFFF;
- tileBuf2[2] &= 0x0FFFFFFF;
- tileBuf2[3] &= 0x0FFFFFFF;
- tileBuf2[4] &= 0x0FFFFFFF;
- tileBuf2[5] &= 0x0FFFFFFF;
- tileBuf2[6] &= 0x0FFFFFFF;
- tileBuf2[7] &= 0x0FFFFFFF;
-
- for (i = 0; i < 5; i++)
- {
- DmaCopy16(3, &tileBuffer[128 * i], &arg0[i * 256], 128);
- DmaCopy16(3, &tileBuffer[128 * i + 0x400], &arg0[32 * ((i * 8) + 4)], 128);
- }
-}
-#else
-NAKED
-void sub_80F4194(u8 *arg0, u8 *text)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- sub sp, 0x4\n\
- adds r7, r0, 0\n\
- adds r2, r1, 0\n\
- ldr r0, _080F42A4 @ =gUnknown_083DFEC8\n\
- ldr r6, [r0] @ r6 = tileBuffer\n\
- mov r0, sp \n\
- ldr r1, _080F42A8 @ =0x00001111\n\
- adds r5, r1, 0\n\
- strh r5, [r0]\n\
- ldr r4, _080F42AC @ =0x040000d4\n\
- str r0, [r4]\n\
- str r6, [r4, 0x4]\n\
- ldr r3, _080F42B0 @ =0x81000140\n\
- str r3, [r4, 0x8]\n\
- ldr r0, [r4, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- adds r1, r6, r0\n\
- mov r0, sp\n\
- strh r5, [r0]\n\
- str r0, [r4]\n\
- str r1, [r4, 0x4]\n\
- str r3, [r4, 0x8]\n\
- ldr r0, [r4, 0x8]\n\
- ldr r0, _080F42B4 @ =gWindowTemplate_81E70F0\n\
- adds r1, r6, 0\n\
- bl Text_InitWindow8004E3C\n\
- movs r3, 0x88\n\
- lsls r3, 2\n\
- adds r1, r6, r3\n\
- mov r0, sp\n\
- movs r3, 0\n\
- strh r3, [r0]\n\
- str r0, [r4]\n\
- str r1, [r4, 0x4]\n\
- ldr r2, _080F42B8 @ =0x81000030\n\
- str r2, [r4, 0x8]\n\
- ldr r0, [r4, 0x8]\n\
- movs r0, 0xC4\n\
- lsls r0, 3\n\
- adds r1, r6, r0\n\
- mov r0, sp\n\
- strh r3, [r0]\n\
- str r0, [r4]\n\
- str r1, [r4, 0x4]\n\
- str r2, [r4, 0x8]\n\
- ldr r0, [r4, 0x8]\n\
- movs r1, 0x80\n\
- lsls r1, 2\n\
- adds r2, r6, r1\n\
- ldr r0, [r2]\n\
- ldr r1, _080F42BC @ =0x0fffffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r0, [r2, 0x4]\n\
- ands r0, r1\n\
- str r0, [r2, 0x4]\n\
- ldr r0, [r2, 0x8]\n\
- ands r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0xC]\n\
- ands r0, r1\n\
- str r0, [r2, 0xC]\n\
- ldr r0, [r2, 0x10]\n\
- ands r0, r1\n\
- str r0, [r2, 0x10]\n\
- ldr r0, [r2, 0x14]\n\
- ands r0, r1\n\
- str r0, [r2, 0x14]\n\
- ldr r0, [r2, 0x18]\n\
- ands r0, r1\n\
- str r0, [r2, 0x18]\n\
- ldr r0, [r2, 0x1C]\n\
- ands r0, r1\n\
- str r0, [r2, 0x1C]\n\
- movs r3, 0xC0\n\
- lsls r3, 3\n\
- adds r2, r6, r3\n\
- ldr r0, [r2]\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r0, [r2, 0x4]\n\
- ands r0, r1\n\
- str r0, [r2, 0x4]\n\
- ldr r0, [r2, 0x8]\n\
- ands r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0xC]\n\
- ands r0, r1\n\
- str r0, [r2, 0xC]\n\
- ldr r0, [r2, 0x10]\n\
- ands r0, r1\n\
- str r0, [r2, 0x10]\n\
- ldr r0, [r2, 0x14]\n\
- ands r0, r1\n\
- str r0, [r2, 0x14]\n\
- ldr r0, [r2, 0x18]\n\
- ands r0, r1\n\
- str r0, [r2, 0x18]\n\
- ldr r0, [r2, 0x1C]\n\
- ands r0, r1\n\
- str r0, [r2, 0x1C]\n\
- movs r1, 0\n\
- ldr r2, _080F42C0 @ =0x80000040\n\
-_080F4268:\n\
- lsls r0, r1, 7\n\
- adds r0, r6, r0\n\
- str r0, [r4]\n\
- lsls r0, r1, 8\n\
- adds r0, r7, r0\n\
- str r0, [r4, 0x4]\n\
- str r2, [r4, 0x8]\n\
- ldr r0, [r4, 0x8]\n\
- lsls r0, r1, 7\n\
- movs r3, 0x80\n\
- lsls r3, 3\n\
- adds r0, r3\n\
- adds r0, r6, r0\n\
- str r0, [r4]\n\
- lsls r0, r1, 3\n\
- adds r0, 0x4\n\
- lsls r0, 5\n\
- adds r0, r7, r0\n\
- str r0, [r4, 0x4]\n\
- str r2, [r4, 0x8]\n\
- ldr r0, [r4, 0x8]\n\
- adds r0, r1, 0x1\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x4\n\
- bls _080F4268\n\
- add sp, 0x4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F42A4: .4byte gUnknown_083DFEC8\n\
-_080F42A8: .4byte 0x00001111\n\
-_080F42AC: .4byte 0x040000d4\n\
-_080F42B0: .4byte 0x81000140\n\
-_080F42B4: .4byte gWindowTemplate_81E70F0\n\
-_080F42B8: .4byte 0x81000030\n\
-_080F42BC: .4byte 0x0fffffff\n\
-_080F42C0: .4byte 0x80000040\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-static void sub_80F42C4(u8 *arg0)
-{
- u16 i, tileOffset;
- u8 spriteId;
- struct SpriteSheet spriteSheet = {
- .data = gUnknown_083DFEC4->unkD1E4[0],
- .size = 0x500,
- .tag = 0x1A,
- };
-
- sub_80F4194(gUnknown_083DFEC4->unkD1E4[0], arg0);
- LoadSpriteSheet(&spriteSheet);
- LoadSpritePalette(&gUnknown_083E4868);
-
- tileOffset = 0;
- for (i = 0; i < 5; i++)
- {
- spriteId = CreateSprite(&gSpriteTemplate_83E4878, i * 32 + 113, 16, 0);
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].oam.tileNum += tileOffset;
- gUnknown_083DFEC4->unkCED4[i] = &gSprites[spriteId];
- }
- else
- {
- gUnknown_083DFEC4->unkCED4[i] = NULL;
- }
-
- tileOffset += 8;
- }
-}
-
-static void sub_80F4394(void)
-{
- u16 i;
-
- for (i = 0; i < 5; i++)
- {
- if (gUnknown_083DFEC4->unkCED4[i])
- DestroySprite(gUnknown_083DFEC4->unkCED4[i]);
- }
-
- FreeSpriteTilesByTag(0x1A);
- FreeSpritePaletteByTag(0x12);
-}
-
-void sub_80F43D4(u8 *arg0)
-{
- u16 tile;
-
- sub_80F4194(gUnknown_083DFEC4->unkD1E4[0], arg0);
- tile = GetSpriteTileStartByTag(0x1A);
- if (tile != 0xFFFF)
- DmaCopy32Defvars(3, gUnknown_083DFEC4->unkD1E4[0], (void *)(VRAM + 0x10000 + (tile * 32)), 0x500);
-}
-
-static u8 *sub_80F4428(u8 *arg0, u16 arg1, u8 arg2)
-{
- return sub_80F6514(arg0, arg1, arg2);
-}
-
-static u8 *sub_80F443C(u8 *arg0, u16 arg1)
-{
- return AlignInt1InMenuWindow(StringCopy(arg0, gOtherText_Number), arg1, 56, 1);
-}
-
-static u8 *sub_80F445C(u8 *arg0, u16 arg1)
-{
- u8 *buffer = AlignInt1InMenuWindow(arg0, arg1, 23, 1);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x11;
- buffer[2] = 1;
- buffer += 3;
- buffer[0] = CHAR_SLASH;
- buffer += 1;
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x11;
- buffer[2] = 1;
- buffer += 3;
- buffer = AlignInt1InMenuWindow(buffer, gUnknown_083DFEC4->unk8774 + 1, 50, 1);
- return buffer;
-}
-
-u32 sub_80F44B0(u16 box, u16 monIndex, int monDataField, int *text)
-{
- if (box == 14)
- {
- if (monDataField == MON_DATA_NICKNAME || monDataField == MON_DATA_OT_NAME)
- return GetMonData(&gPlayerParty[monIndex], monDataField, text);
- else
- return GetMonData(&gPlayerParty[monIndex], monDataField);
- }
- else
- {
- if (monDataField == MON_DATA_NICKNAME || monDataField == MON_DATA_OT_NAME)
- return GetBoxMonData(&gPokemonStorage.boxes[box][monIndex], monDataField, text);
- else
- return GetBoxMonData(&gPokemonStorage.boxes[box][monIndex], monDataField);
- }
-}
-
-static void SetMonMarkings(u16 box, u16 monIndex, u8 markings)
-{
- if (box == 14)
- SetMonData(&gPlayerParty[monIndex], MON_DATA_MARKINGS, &markings);
- else
- SetBoxMonData(&gPokemonStorage.boxes[box][monIndex], MON_DATA_MARKINGS, &markings);
-}
-
-static void sub_80F45A0(s16 arg0, u8 arg1)
-{
- u8 box;
- u8 var0 = gUnknown_083DFEC4->unk893c[arg0].unk4;
- if (var0)
- {
- sub_80F4428(gUnknown_083DFEC4->unk8829[arg1], arg0, 0);
- box = gUnknown_083DFEC4->unk893c[arg0].unk1;
- if (box == 14)
- AlignStringInMenuWindow(gUnknown_083DFEC4->unk88E9[arg1], gOtherText_InParty, 64, 0);
- else
- AlignStringInMenuWindow(gUnknown_083DFEC4->unk88E9[arg1], gPokemonStorage.boxNames[box], 64, 0);
-
- gUnknown_083DFEC4->unk8937[arg1] = 1;
- }
- else
- {
- AlignStringInMenuWindow(gUnknown_083DFEC4->unk8829[arg1], gEmptyString_81E72B0, 104, 0);
- AlignStringInMenuWindow(gUnknown_083DFEC4->unk88E9[arg1], gEmptyString_81E72B0, 64, 0);
- gUnknown_083DFEC4->unk8937[arg1] = var0;
- }
-}
-
-static void sub_80F468C(s16 arg0, u8 arg1)
-{
- u16 i;
- u16 box;
- u16 monIndex;
-
- if (gUnknown_083DFEC4->unk893c[arg0].unk4)
- {
- box = gUnknown_083DFEC4->unk893c[arg0].unk1;
- monIndex = gUnknown_083DFEC4->unk893c[arg0].partyIdx;
- gUnknown_083DFEC4->unk8ff0[arg1][0] = sub_80F44B0(box, monIndex, MON_DATA_COOL, NULL);
- gUnknown_083DFEC4->unk8ff0[arg1][1] = sub_80F44B0(box, monIndex, MON_DATA_TOUGH, NULL);
- gUnknown_083DFEC4->unk8ff0[arg1][2] = sub_80F44B0(box, monIndex, MON_DATA_SMART, NULL);
- gUnknown_083DFEC4->unk8ff0[arg1][3] = sub_80F44B0(box, monIndex, MON_DATA_CUTE, NULL);
- gUnknown_083DFEC4->unk8ff0[arg1][4] = sub_80F44B0(box, monIndex, MON_DATA_BEAUTY, NULL);
-
- gUnknown_083DFEC4->unk8931[arg1] = sub_80F44B0(box, monIndex, MON_DATA_SHEEN, NULL) != 255
- ? sub_80F44B0(box, monIndex, MON_DATA_SHEEN, NULL) / 29
- : 9;
-
- gUnknown_083DFEC4->unk8934[arg1] = sub_80F44B0(box, monIndex, MON_DATA_MARKINGS, NULL);
- sub_80F55AC(gUnknown_083DFEC4->unk8ff0[arg1], gUnknown_083DFEC4->unk9004[arg1]);
- }
- else
- {
- for (i = 0; i < 5; i++)
- {
- gUnknown_083DFEC4->unk8ff0[arg1][i] = 0;
- gUnknown_083DFEC4->unk9004[arg1][i].unk0 = 0x9B;
- gUnknown_083DFEC4->unk9004[arg1][i].unk2 = 0x5B;
- }
- }
-}
-
-static void sub_80F4824(s16 arg0, u8 arg1)
-{
- u16 species;
- u32 otId;
- u32 personality;
- u16 box;
- u16 monIndex;
-
- if (gUnknown_083DFEC4->unk893c[arg0].unk4)
- {
- box = gUnknown_083DFEC4->unk893c[arg0].unk1;
- monIndex = gUnknown_083DFEC4->unk893c[arg0].partyIdx;
- species = sub_80F44B0(box, monIndex, MON_DATA_SPECIES2, NULL);
- otId = sub_80F44B0(box, monIndex, MON_DATA_OT_ID, NULL);
- personality = sub_80F44B0(box, monIndex, MON_DATA_PERSONALITY, NULL);
-
- HandleLoadSpecialPokePic(
- &gMonFrontPicTable[species],
- gMonFrontPicCoords[species].coords,
- 1,
- (intptr_t)gUnknown_083DFEC4->unk131E4,
- gUnknown_083DFEC4->unkD1E4[arg1],
- species,
- personality);
-
- LZ77UnCompWram(GetMonSpritePalFromOtIdPersonality(species, otId, personality), gUnknown_083DFEC4->unk0[arg1]);
- gUnknown_083DFEC4->unkD1D6[arg1] = species;
- }
-}
-
-void sub_80F4900(s16 arg0, u8 arg1)
-{
- sub_80F45A0(arg0, arg1);
- sub_80F468C(arg0, arg1);
- sub_80F4824(arg0, arg1);
-}
-
-void sub_80F492C(void)
-{
- gUnknown_083DFEC4->unk8FE4 = 0;
-}
-
-#ifdef NONMATCHING
-// registers r3/r4 are swapped
-void sub_80F4944(struct UnkUsePokeblockSub *arg0)
-{
- u16 i;
- u16 r3;
- u16 r4;
-
- i = 0;
- r4 = gUnknown_083DFEC4->unk8FE4;
- r3 = r4 / 2;
- while (r3 != r4)
- {
- if (arg0->unk0 > gUnknown_083DFEC4->unk893c[r3].unk0)
- r4 = r3;
- else
- i = r3 + 1;
-
- r3 = ((r4 - i) / 2) + i;
- }
-
- r4 = gUnknown_083DFEC4->unk8FE4;
- while (r4 > r3)
- {
- gUnknown_083DFEC4->unk893c[r4] = gUnknown_083DFEC4->unk893c[r4 - 1];
- r4--;
- }
-
- gUnknown_083DFEC4->unk893c[r3] = *arg0;
- gUnknown_083DFEC4->unk8FE4++;
-}
-#else
-NAKED
-void sub_80F4944(struct UnkUsePokeblockSub *arg0)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- mov r12, r0\n\
- movs r2, 0\n\
- ldr r1, _080F4978 @ =gUnknown_083DFEC4\n\
- ldr r5, [r1]\n\
- ldr r3, _080F497C @ =0x00008fe4\n\
- adds r0, r5, r3\n\
- ldrh r4, [r0]\n\
- lsrs r3, r4, 1\n\
- mov r8, r1\n\
- cmp r4, r3\n\
- beq _080F499C\n\
- adds r6, r5, 0\n\
- mov r0, r12\n\
- ldrb r5, [r0]\n\
- ldr r7, _080F4980 @ =0x0000893c\n\
-_080F4968:\n\
- lsls r0, r3, 2\n\
- adds r0, r6, r0\n\
- adds r0, r7\n\
- ldrb r0, [r0]\n\
- cmp r5, r0\n\
- bls _080F4984\n\
- adds r4, r3, 0\n\
- b _080F498A\n\
- .align 2, 0\n\
-_080F4978: .4byte gUnknown_083DFEC4\n\
-_080F497C: .4byte 0x00008fe4\n\
-_080F4980: .4byte 0x0000893c\n\
-_080F4984:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
-_080F498A:\n\
- subs r0, r4, r2\n\
- lsrs r1, r0, 31\n\
- adds r0, r1\n\
- asrs r0, 1\n\
- adds r0, r2, r0\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r4, r3\n\
- bne _080F4968\n\
-_080F499C:\n\
- mov r1, r8\n\
- ldr r2, [r1]\n\
- ldr r1, _080F49EC @ =0x00008fe4\n\
- adds r0, r2, r1\n\
- ldrh r4, [r0]\n\
- lsls r6, r3, 2\n\
- cmp r4, r3\n\
- bls _080F49C6\n\
- ldr r0, _080F49F0 @ =0x0000893c\n\
- adds r5, r2, r0\n\
-_080F49B0:\n\
- lsls r2, r4, 2\n\
- adds r2, r5, r2\n\
- subs r1, r4, 0x1\n\
- lsls r0, r1, 2\n\
- adds r0, r5, r0\n\
- ldr r0, [r0]\n\
- str r0, [r2]\n\
- lsls r1, 16\n\
- lsrs r4, r1, 16\n\
- cmp r4, r3\n\
- bhi _080F49B0\n\
-_080F49C6:\n\
- mov r1, r8\n\
- ldr r2, [r1]\n\
- ldr r3, _080F49F0 @ =0x0000893c\n\
- adds r0, r2, r3\n\
- adds r0, r6\n\
- mov r3, r12\n\
- ldr r1, [r3]\n\
- str r1, [r0]\n\
- ldr r0, _080F49EC @ =0x00008fe4\n\
- adds r2, r0\n\
- ldrh r0, [r2]\n\
- adds r0, 0x1\n\
- strh r0, [r2]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F49EC: .4byte 0x00008fe4\n\
-_080F49F0: .4byte 0x0000893c\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-void sub_80F49F4(void)
-{
- u16 i;
-
- gUnknown_083DFEC4->unk893c[0].unk2 = 1;
- for (i = 1; i < gUnknown_083DFEC4->unk8FE4; i++)
- {
- if (gUnknown_083DFEC4->unk893c[i].unk0 == gUnknown_083DFEC4->unk893c[i - 1].unk0)
- gUnknown_083DFEC4->unk893c[i].unk2 = gUnknown_083DFEC4->unk893c[i - 1].unk2;
- else
- gUnknown_083DFEC4->unk893c[i].unk2 = i + 1;
- }
-
- gUnknown_083DFEC4->unk876C = 0;
- gUnknown_083DFEC4->unk8770 = 0;
- gUnknown_083DFEC4->unk876E = 0;
- gUnknown_083DFEC4->unk8772 = gUnknown_083DFEC4->unk8FE4 < 9 ? (gUnknown_083DFEC4->unk8FE4 - 1) : 7;
- gUnknown_083DFEC4->unk8774 = gUnknown_083DFEC4->unk8FE4 - 1;
- gUnknown_083DFEC4->unk87C9 = gUnknown_083DFEC4->unk8774 > 7;
-}
-
-void sub_80F4B20(void)
-{
- s16 var0;
- s16 var1;
-
- sub_80F4900(gUnknown_083DFEC4->unk87DC, 0);
- sub_80F2E18(0);
- if (gUnknown_083DFEC4->unk87DA == 1)
- {
- gUnknown_083DFEC4->unk8fe9 = 0;
- gUnknown_083DFEC4->unk8FEA = 0;
- gUnknown_083DFEC4->unk8FEB = 0;
- }
- else
- {
- gUnknown_083DFEC4->unk8fe9 = 0;
- gUnknown_083DFEC4->unk8FEA = 1;
- gUnknown_083DFEC4->unk8FEB = 2;
-
- var0 = gUnknown_083DFEC4->unk87DC + 1;
- if (var0 >= gUnknown_083DFEC4->unk87DA)
- var0 = 0;
-
- var1 = gUnknown_083DFEC4->unk87DC - 1;
- if (var1 < 0)
- var1 = gUnknown_083DFEC4->unk87DA - 1;
-
- sub_80F4900(var0, 1);
- sub_80F4900(var1, 2);
- }
-}
-
-void sub_80F4BD0(void)
-{
- u16 i, j;
-
- for (i = 0, j = 0; i < gUnknown_083DFEC4->unk8828; i++)
- {
- if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
- {
- gUnknown_083DFEC4->unk893c[j].unk1 = 14;
- gUnknown_083DFEC4->unk893c[j].partyIdx = i;
- gUnknown_083DFEC4->unk893c[j].unk2 = j + 1;
- gUnknown_083DFEC4->unk893c[j].unk4 = 1;
- j++;
- }
- }
-
- gUnknown_083DFEC4->unk893c[j].unk1 = 0;
- gUnknown_083DFEC4->unk893c[j].partyIdx = 0;
- gUnknown_083DFEC4->unk893c[j].unk2 = 0;
- gUnknown_083DFEC4->unk893c[j].unk4 = 0;
- gUnknown_083DFEC4->unk87DC = 0;
- gUnknown_083DFEC4->unk87DA = j + 1;
- sub_80F4B20();
- gUnknown_083DFEC4->unk87CB = 1;
-}
-
-static void sub_80F4CF0(void)
-{
- gUnknown_083DFEC4->unk87DC = gUnknown_083DFEC4->unk876E;
- sub_80F4B20();
-
- if (gUnknown_083DFEC4->unk8774 == 0)
- gUnknown_083DFEC4->unk87CB = 0;
- else
- gUnknown_083DFEC4->unk87CB = 1;
-}
-
-static void sub_80F4D44(void)
-{
- gUnknown_083DFEC4->unk8FE6 = 0;
- gUnknown_083DFEC4->unk8FE7 = 0;
- sub_80F492C();
-
- if (!gUnknown_083DFEC4->unk6DAC)
- while (sub_80F4D88());
-}
-
-static bool8 sub_80F4D88(void)
-{
- u16 i;
- register int mask asm("r3"); // FIXME
- int nextValue;
- struct UnkUsePokeblockSub var0;
-
- switch (gUnknown_083DFEC4->unk8FE6)
- {
- default:
- var0.unk4 = 1;
- for (i = 0; i < 15; i++)
- {
-
- if (GetBoxMonData(&gPokemonStorage.boxes[gUnknown_083DFEC4->unk8FE6][gUnknown_083DFEC4->unk8FE7], MON_DATA_SPECIES)
- && !GetBoxMonData(&gPokemonStorage.boxes[gUnknown_083DFEC4->unk8FE6][gUnknown_083DFEC4->unk8FE7], MON_DATA_IS_EGG))
- {
- var0.unk1 = gUnknown_083DFEC4->unk8FE6;
- var0.partyIdx = gUnknown_083DFEC4->unk8FE7;
- var0.unk0 = GetBoxMonData(
- &gPokemonStorage.boxes[gUnknown_083DFEC4->unk8FE6][gUnknown_083DFEC4->unk8FE7],
- gUnknown_083DFEC4->unk87D8);
- sub_80F4944(&var0);
- }
-
- gUnknown_083DFEC4->unk8FE7++;
- mask = 0xFF;
- if (gUnknown_083DFEC4->unk8FE7 == 30)
- {
- gUnknown_083DFEC4->unk8FE7 = 0;
- nextValue = gUnknown_083DFEC4->unk8FE6 + 1;
- gUnknown_083DFEC4->unk8FE6 = nextValue;
- if ((nextValue & mask) == 14)
- break;
- }
- }
- break;
- case 14:
- var0.unk4 = 1;
- var0.unk1 = 14;
- for (i = 0; i < gUnknown_083DFEC4->unk8828; i++)
- {
- if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
- {
- var0.partyIdx = i;
- var0.unk0 = GetMonData(&gPlayerParty[i], gUnknown_083DFEC4->unk87D8);
- sub_80F4944(&var0);
- }
- }
-
- sub_80F49F4();
- gUnknown_083DFEC4->unk87DA = gUnknown_083DFEC4->unk8FE4;
- gUnknown_083DFEC4->unk8FE6++;
- break;
- case 15:
- return FALSE;
- }
-
- return TRUE;
-}
-
-void sub_80F4F78(void)
-{
- sub_80F53EC(gUnknown_083DFEC4->unk9040, gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9]);
- sub_80F5504();
-}
-
-bool8 sub_80F4FB4(void)
-{
- bool8 var0 = sub_80F5504();
- bool8 var1 = sub_80F170C();
- return var0 || var1;
-}
-
-void sub_80F4FDC(void)
-{
- if (gUnknown_083DFEC4->unk76AA || gUnknown_083DFEC4->unk87DC != gUnknown_083DFEC4->unk8828)
- sub_80F53EC(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9040);
-}
-
-bool8 sub_80F5038(void)
-{
- bool8 var0 = sub_80F5504();
- bool8 var1 = sub_80F173C();
- return var0 || var1;
-}
-
-void sub_80F5060(u8 arg0)
-{
- u16 var0;
- u8 var1;
- u8 var2;
-
- if (arg0)
- var0 = gUnknown_083DFEC4->unk8FEB;
- else
- var0 = gUnknown_083DFEC4->unk8FEA;
-
- sub_80F53EC(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9004[var0]);
- var1 = gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4;
- if (arg0)
- {
- gUnknown_083DFEC4->unk8FEB = gUnknown_083DFEC4->unk8FEA;
- gUnknown_083DFEC4->unk8FEA = gUnknown_083DFEC4->unk8fe9;
- gUnknown_083DFEC4->unk8fe9 = var0;
- gUnknown_083DFEC4->unk8FEC = gUnknown_083DFEC4->unk8FEB;
-
- gUnknown_083DFEC4->unk87DC = gUnknown_083DFEC4->unk87DC
- ? gUnknown_083DFEC4->unk87DC - 1
- : gUnknown_083DFEC4->unk87DA - 1;
- gUnknown_083DFEC4->unk8FEE = gUnknown_083DFEC4->unk87DC
- ? gUnknown_083DFEC4->unk87DC - 1
- : gUnknown_083DFEC4->unk87DA - 1;
- }
- else
- {
- gUnknown_083DFEC4->unk8FEA = gUnknown_083DFEC4->unk8FEB;
- gUnknown_083DFEC4->unk8FEB = gUnknown_083DFEC4->unk8fe9;
- gUnknown_083DFEC4->unk8fe9 = var0;
- gUnknown_083DFEC4->unk8FEC = gUnknown_083DFEC4->unk8FEA;
-
- gUnknown_083DFEC4->unk87DC = (gUnknown_083DFEC4->unk87DC < gUnknown_083DFEC4->unk87DA - 1)
- ? gUnknown_083DFEC4->unk87DC + 1
- : 0;
- gUnknown_083DFEC4->unk8FEE = (gUnknown_083DFEC4->unk87DC < gUnknown_083DFEC4->unk87DA - 1)
- ? gUnknown_083DFEC4->unk87DC + 1
- : 0;
- }
-
- var2 = gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4;
- if (!var1)
- gUnknown_083DFEC4->unk87E0 = sub_80F5264;
- else if (!var2)
- gUnknown_083DFEC4->unk87E0 = sub_80F52F8;
- else
- gUnknown_083DFEC4->unk87E0 = sub_80F5364;
-
- gUnknown_083DFEC4->unk87DE = 0;
-}
-
-bool8 gpu_sync_bg_show(void)
-{
- return gUnknown_083DFEC4->unk87E0();
-}
-
-static bool8 sub_80F5264(void)
-{
- switch (gUnknown_083DFEC4->unk87DE)
- {
- case 0:
- sub_80F2E18(gUnknown_083DFEC4->unk8fe9);
- sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
- gUnknown_083DFEC4->unk87DE++;
- // fall through
- case 1:
- if (!sub_80F4FB4())
- {
- sub_80F4900(gUnknown_083DFEC4->unk8FEE, gUnknown_083DFEC4->unk8FEC);
- gUnknown_083DFEC4->unk87DE++;
- }
- break;
- case 2:
- return FALSE;
- }
-
- return TRUE;
-}
-
-static bool8 sub_80F52F8(void)
-{
- switch (gUnknown_083DFEC4->unk87DE)
- {
- case 0:
- if (!sub_80F5038())
- {
- sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
- sub_80F4900(gUnknown_083DFEC4->unk8FEE, gUnknown_083DFEC4->unk8FEC);
- gUnknown_083DFEC4->unk87DE++;
- }
- break;
- case 1:
- return FALSE;
- }
-
- return TRUE;
-}
-
-static bool8 sub_80F5364(void)
-{
- switch (gUnknown_083DFEC4->unk87DE)
- {
- case 0:
- sub_80F5504();
- if (!sub_80F173C())
- {
- sub_80F2E18(gUnknown_083DFEC4->unk8fe9);
- sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
- gUnknown_083DFEC4->unk87DE++;
- }
- break;
- case 1:
- if (!sub_80F4FB4())
- gUnknown_083DFEC4->unk87DE++;
- break;
- case 2:
- sub_80F4900(gUnknown_083DFEC4->unk8FEE, gUnknown_083DFEC4->unk8FEC);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void sub_80F53EC(struct UnkPokenav11 *arg0, struct UnkPokenav11 *arg1)
-{
- u16 i, j;
- int r5;
- int r6;
-
- for (i = 0; i < 5; i++)
- {
- r5 = arg0[i].unk0 << 8;
- r6 = ((arg1[i].unk0 - arg0[i].unk0) << 8) / 10;
- for (j = 0; j < 9; j++)
- {
- gUnknown_083DFEC4->unk9054[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1);
- r5 += r6;
- }
-
- gUnknown_083DFEC4->unk9054[j][i].unk0 = arg1[i].unk0;
- r5 = arg0[i].unk2 << 8;
- r6 = ((arg1[i].unk2 - arg0[i].unk2) << 8) / 10;
- for (j = 0; j < 9; j++)
- {
- gUnknown_083DFEC4->unk9054[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1);
- r5 += r6;
- }
-
- gUnknown_083DFEC4->unk9054[j][i].unk2 = arg1[i].unk2;
- }
-
- gUnknown_083DFEC4->unk9342 = 0;
-}
-
-static bool8 sub_80F5504(void)
-{
- if (gUnknown_083DFEC4->unk9342 < 10)
- {
- sub_80F556C(gUnknown_083DFEC4->unk9054[gUnknown_083DFEC4->unk9342++]);
- return gUnknown_083DFEC4->unk9342 != 10;
- }
- else
- {
- return FALSE;
- }
-}
-
-void sub_80F5550(struct UnkPokenav11 *arg0, struct UnkPokenav11 *arg1)
-{
- sub_80F53EC(arg0, arg1);
-}
-
-bool8 sub_80F555C(void)
-{
- return sub_80F5504();
-}
-
-void sub_80F556C(struct UnkPokenav11 *arg0)
-{
- u16 i;
-
- for (i = 0; i < 5; i++)
- gUnknown_083DFEC4->unk911C[i] = arg0[i];
-
- gUnknown_083DFEC4->unk9344 = 1;
+ gPokenavStructPtr->unk300 = gUnknown_03000744;
}
diff --git a/src/region_map.c b/src/region_map.c
index e9ae4599a..7ec1b1976 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -53,106 +53,14 @@ static const u16 sRegionMapBkgnd_Pal[] = INCBIN_U16("graphics/pokenav/region_map
static const u8 sRegionMapBkgnd_ImageLZ[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz");
static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz");
-#include "data/region_map_layout.h"
+static const u8 sRegionMapLayout[] = INCBIN_U8("graphics/pokenav/region_map_section_layout.bin");
#if ENGLISH
-#include "data/region_map_names_en.h"
+#include "data/region_map/region_map_entries.h"
#elif GERMAN
-#include "data/region_map_names_de.h"
+#include "data/region_map/region_map_entries_de.h"
#endif
-const struct RegionMapLocation gRegionMapLocations[] =
-{
- { 4, 11, 1, 1, gMapName_LittlerootTown},
- { 4, 9, 1, 1, gMapName_OldaleTown},
- { 2, 14, 1, 1, gMapName_DewfordTown},
- { 5, 3, 1, 1, gMapName_LavaridgeTown},
- { 3, 0, 1, 1, gMapName_FallarborTown},
- { 4, 6, 1, 1, gMapName_VerdanturfTown},
- {17, 10, 1, 1, gMapName_PacifidlogTown},
- { 1, 9, 1, 1, gMapName_PetalburgCity},
- { 8, 10, 1, 2, gMapName_SlateportCity},
- { 8, 6, 2, 1, gMapName_MauvilleCity},
- { 0, 5, 1, 2, gMapName_RustboroCity},
- {12, 0, 1, 1, gMapName_FortreeCity},
- {18, 3, 2, 1, gMapName_LilycoveCity},
- {24, 5, 2, 1, gMapName_MossdeepCity},
- {21, 7, 1, 1, gMapName_SootopolisCity},
- {27, 8, 1, 2, gMapName_EverGrandeCity},
- { 4, 10, 1, 1, gMapName_Route101},
- { 2, 9, 2, 1, gMapName_Route102},
- { 4, 8, 4, 1, gMapName_Route103},
- { 0, 7, 1, 3, gMapName_Route104},
- { 0, 10, 1, 3, gMapName_Route105},
- { 0, 13, 2, 1, gMapName_Route106},
- { 3, 14, 3, 1, gMapName_Route107},
- { 6, 14, 2, 1, gMapName_Route108},
- { 8, 12, 1, 3, gMapName_Route109},
- { 8, 7, 1, 3, gMapName_Route110},
- { 8, 0, 1, 6, gMapName_Route111},
- { 6, 3, 2, 1, gMapName_Route112},
- { 4, 0, 4, 1, gMapName_Route113},
- { 1, 0, 2, 3, gMapName_Route114},
- { 0, 2, 1, 3, gMapName_Route115},
- { 1, 5, 4, 1, gMapName_Route116},
- { 5, 6, 3, 1, gMapName_Route117},
- {10, 6, 2, 1, gMapName_Route118},
- {11, 0, 1, 6, gMapName_Route119},
- {13, 0, 1, 4, gMapName_Route120},
- {14, 3, 4, 1, gMapName_Route121},
- {16, 4, 1, 2, gMapName_Route122},
- {12, 6, 5, 1, gMapName_Route123},
- {20, 3, 4, 3, gMapName_Route124},
- {24, 3, 2, 2, gMapName_Route125},
- {20, 6, 3, 3, gMapName_Route126},
- {23, 6, 3, 3, gMapName_Route127},
- {23, 9, 4, 1, gMapName_Route128},
- {24, 10, 2, 1, gMapName_Route129},
- {21, 10, 3, 1, gMapName_Route130},
- {18, 10, 3, 1, gMapName_Route131},
- {15, 10, 2, 1, gMapName_Route132},
- {12, 10, 3, 1, gMapName_Route133},
- { 9, 10, 3, 1, gMapName_Route134},
- {20, 3, 4, 3, gMapName_Underwater},
- {20, 6, 3, 3, gMapName_Underwater},
- {23, 6, 3, 3, gMapName_Underwater},
- {23, 9, 4, 1, gMapName_Underwater},
- {21, 7, 1, 1, gMapName_Underwater},
- { 1, 13, 1, 1, gMapName_GraniteCave},
- { 6, 2, 1, 1, gMapName_MtChimney},
- {16, 2, 1, 1, gMapName_SafariZone},
- {22, 12, 1, 1, gMapName_BattleTower},
- { 0, 8, 1, 1, gMapName_PetalburgWoods},
- { 2, 5, 1, 1, gMapName_RusturfTunnel},
- { 6, 14, 1, 1, gMapName_AbandonedShip},
- { 8, 7, 1, 1, gMapName_NewMauville},
- { 0, 3, 1, 1, gMapName_MeteorFalls},
- { 1, 2, 1, 1, gMapName_MeteorFalls},
- {16, 4, 1, 1, gMapName_MtPyre},
- {19, 3, 1, 1, gMapName_EvilTeamHideout},
- {24, 4, 1, 1, gMapName_ShoalCave},
- {24, 9, 1, 1, gMapName_SeafloorCavern},
- {24, 9, 1, 1, gMapName_Underwater},
- {27, 9, 1, 1, gMapName_VictoryRoad},
- {17, 10, 1, 1, gMapName_MirageIsland},
- {21, 7, 1, 1, gMapName_CaveOfOrigin},
- {12, 14, 1, 1, gMapName_SouthernIsland},
- { 6, 3, 1, 1, gMapName_FieryPath},
- { 7, 3, 1, 1, gMapName_FieryPath},
- { 6, 3, 1, 1, gMapName_JaggedPass},
- { 7, 2, 1, 1, gMapName_JaggedPass},
- {11, 10, 1, 1, gMapName_SealedChamber},
- {11, 10, 1, 1, gMapName_Underwater},
- {13, 0, 1, 1, gMapName_ScorchedSlab},
- {0, 10, 1, 1, gMapName_IslandCave},
- { 8, 3, 1, 1, gMapName_DesertRuins},
- {13, 2, 1, 1, gMapName_AncientTomb},
- { 0, 0, 1, 1, gMapName_InsideOfTruck},
- {19, 10, 1, 1, gMapName_SkyPillar},
- { 0, 0, 1, 1, gMapName_SecretBase},
- { 0, 0, 1, 1, gMapName_None},
-};
-
static const u16 sUnderwaterMaps[][2] =
{
{MAPSEC_UNDERWATER_124, MAPSEC_ROUTE_124},
@@ -167,7 +75,7 @@ static const u16 sUnderwaterMaps[][2] =
{MAPSEC_JAGGED_PASS, MAPSEC_ROUTE_112},
{MAPSEC_MT_PYRE, MAPSEC_ROUTE_122},
{MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131},
- {MAPSEC_NOTHING, MAPSEC_NOTHING},
+ {MAPSEC_NONE, MAPSEC_NONE},
};
static u8 sub_80FAB78(void);
@@ -595,7 +503,7 @@ void RegionMapDefaultZoomOffsetPlayerSprite(s16 a, s16 b)
static u16 GetRegionMapSectionAt(u16 x, u16 y)
{
if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX)
- return MAPSEC_NOTHING;
+ return MAPSEC_NONE;
y -= MAPCURSOR_Y_MIN;
x -= MAPCURSOR_X_MIN;
return sRegionMapLayout[x + y * 28];
@@ -683,19 +591,19 @@ static void InitializeCursorPosition(void)
r9 = x;
- r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSectionId].width;
+ r1 = mapWidth / gRegionMapEntries[gRegionMap->mapSectionId].width;
if (r1 == 0)
r1 = 1;
x /= r1;
- if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width)
- x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1;
+ if (x >= gRegionMapEntries[gRegionMap->mapSectionId].width)
+ x = gRegionMapEntries[gRegionMap->mapSectionId].width - 1;
- r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSectionId].height;
+ r1 = mapHeight / gRegionMapEntries[gRegionMap->mapSectionId].height;
if (r1 == 0)
r1 = 1;
y /= r1;
- if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height)
- y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1;
+ if (y >= gRegionMapEntries[gRegionMap->mapSectionId].height)
+ y = gRegionMapEntries[gRegionMap->mapSectionId].height - 1;
switch (gRegionMap->mapSectionId)
{
@@ -726,8 +634,8 @@ static void InitializeCursorPosition(void)
x++;
break;
}
- gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
- gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
+ gRegionMap->cursorPosX = gRegionMapEntries[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapEntries[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
}
static void sub_80FB600(void)
@@ -760,32 +668,32 @@ static void sub_80FB600(void)
u16 r1;
gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
- r1 = mapHeader->mapLayout->width / gRegionMapLocations[gRegionMap->mapSectionId].width;
+ r1 = mapHeader->mapLayout->width / gRegionMapEntries[gRegionMap->mapSectionId].width;
if (r1 == 0)
r1 = 1;
x = sp2 / r1;
- if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width)
- x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1;
+ if (x >= gRegionMapEntries[gRegionMap->mapSectionId].width)
+ x = gRegionMapEntries[gRegionMap->mapSectionId].width - 1;
- r1 = mapHeader->mapLayout->height / gRegionMapLocations[gRegionMap->mapSectionId].height;
+ r1 = mapHeader->mapLayout->height / gRegionMapEntries[gRegionMap->mapSectionId].height;
if (r1 == 0)
r1 = 1;
y = sp4 / r1;
- if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height)
- y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1;
+ if (y >= gRegionMapEntries[gRegionMap->mapSectionId].height)
+ y = gRegionMapEntries[gRegionMap->mapSectionId].height - 1;
}
break;
}
gRegionMap->playerIsInCave = FALSE;
- gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
- gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
+ gRegionMap->cursorPosX = gRegionMapEntries[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapEntries[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
}
static u16 sub_80FB758(u16 mapSectionId)
{
switch (mapSectionId)
{
- case MAPSEC_NOTHING:
+ case MAPSEC_NONE:
return 0;
case MAPSEC_LITTLEROOT_TOWN:
return FlagGet(FLAG_VISITED_LITTLEROOT_TOWN) ? 2 : 3;
@@ -838,7 +746,7 @@ static u16 GetOverworldMapFromUnderwaterMap_(u16 mapSectionId)
{
u16 i;
- for (i = 0; sUnderwaterMaps[i][0] != MAPSEC_NOTHING; i++)
+ for (i = 0; sUnderwaterMaps[i][0] != MAPSEC_NONE; i++)
{
if (sUnderwaterMaps[i][0] == mapSectionId)
return sUnderwaterMaps[i][1];
@@ -857,7 +765,7 @@ static void sub_80FBA18(void)
u16 y;
u16 i;
- if (gRegionMap->mapSectionId == MAPSEC_NOTHING)
+ if (gRegionMap->mapSectionId == MAPSEC_NONE)
{
gRegionMap->everGrandeCityArea = 0;
return;
@@ -1212,8 +1120,8 @@ const u8 *GetMapSectionName(u8 *dest, u16 mapSectionId, u16 length)
{
if (mapSectionId == MAPSEC_SECRET_BASE)
return GetSecretBaseMapName(dest);
- if (mapSectionId < MAPSEC_NOTHING)
- return StringCopy(dest, gRegionMapLocations[mapSectionId].regionMapSectionId);
+ if (mapSectionId < MAPSEC_NONE)
+ return StringCopy(dest, gRegionMapEntries[mapSectionId].regionMapSectionId);
if (length == 0)
length = 18;
return StringFill(dest, CHAR_SPACE, length);
@@ -1242,10 +1150,10 @@ const u8 *CopyLocationName(u8 *dest, u16 mapSectionId)
static void GetRegionMapLocationPosition(u16 mapSectionId, u16 *x, u16 *y, u16 *width, u16 *height)
{
- *x = gRegionMapLocations[mapSectionId].x;
- *y = gRegionMapLocations[mapSectionId].y;
- *width = gRegionMapLocations[mapSectionId].width;
- *height = gRegionMapLocations[mapSectionId].height;
+ *x = gRegionMapEntries[mapSectionId].x;
+ *y = gRegionMapEntries[mapSectionId].y;
+ *width = gRegionMapEntries[mapSectionId].width;
+ *height = gRegionMapEntries[mapSectionId].height;
}
struct UnknownStruct3
@@ -1344,7 +1252,7 @@ static const u16 sSpecialFlyAreas[][2] =
{
// flag, mapSectionId
{FLAG_LANDMARK_BATTLE_TOWER, MAPSEC_BATTLE_TOWER},
- {0xFFFF, MAPSEC_NOTHING},
+ {0xFFFF, MAPSEC_NONE},
};
static const struct OamData sFlyTargetOamData =
@@ -1609,7 +1517,7 @@ static void CreateSpecialAreaFlyTargetIcons(void)
{
u16 i;
- for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NOTHING; i++)
+ for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NONE; i++)
{
u16 x;
u16 y;
diff --git a/src/trainers_eye.c b/src/trainers_eye.c
new file mode 100644
index 000000000..f4ad50c6d
--- /dev/null
+++ b/src/trainers_eye.c
@@ -0,0 +1,263 @@
+#include "global.h"
+#include "main.h"
+#include "decompress.h"
+#include "battle_setup.h"
+#include "overworld.h"
+#include "pokenav.h"
+#include "battle.h"
+#include "data2.h"
+#include "constants/opponents.h"
+#include "constants/region_map_sections.h"
+#include "text.h"
+#include "de_rom_8040FE0.h"
+#include "string_util.h"
+
+struct TrainersEyeGymLeadersAndE4
+{
+ u16 opponentId;
+ u16 regionMapSectionId;
+};
+
+static const struct TrainersEyeGymLeadersAndE4 sGymLeaderTrainersEye[13] = {
+ {TRAINER_ROXANNE, MAPSEC_RUSTBORO_CITY},
+ {TRAINER_BRAWLY, MAPSEC_DEWFORD_TOWN},
+ {TRAINER_WATTSON, MAPSEC_MAUVILLE_CITY},
+ {TRAINER_FLANNERY, MAPSEC_LAVARIDGE_TOWN},
+ {TRAINER_NORMAN, MAPSEC_PETALBURG_CITY},
+ {TRAINER_WINONA, MAPSEC_FORTREE_CITY},
+ {TRAINER_TATE_AND_LIZA, MAPSEC_MOSSDEEP_CITY},
+ {TRAINER_WALLACE, MAPSEC_SOOTOPOLIS_CITY},
+ {TRAINER_SIDNEY, MAPSEC_EVER_GRANDE_CITY},
+ {TRAINER_PHOEBE, MAPSEC_EVER_GRANDE_CITY},
+ {TRAINER_GLACIA, MAPSEC_EVER_GRANDE_CITY},
+ {TRAINER_DRAKE, MAPSEC_EVER_GRANDE_CITY},
+ {TRAINER_STEVEN, MAPSEC_EVER_GRANDE_CITY}
+};
+
+void sub_80F6E04(u8);
+
+void sub_80F6C20(void)
+{
+ u16 i;
+
+ gPokenavStructPtr->unkD158 = 0;
+
+ for (i = 0; i < 56; i++)
+ {
+ if (HasTrainerAlreadyBeenFought(gTrainerEyeTrainers[i].opponentIDs[0]))
+ {
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].opponentId = gTrainerEyeTrainers[i].opponentIDs[0];
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].rematchTableIdx = i;
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].rematchNo = gSaveBlock1.trainerRematches[i];
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(gTrainerEyeTrainers[i].mapGroup, gTrainerEyeTrainers[i].mapNum)->regionMapSectionId;
+ gPokenavStructPtr->unkD158++;
+ }
+ }
+
+ for (i = 0; i < 13; i++)
+ {
+ {
+ if (HasTrainerAlreadyBeenFought(sGymLeaderTrainersEye[i].opponentId))
+ {
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].opponentId = sGymLeaderTrainersEye[i].opponentId;
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].regionMapSectionId = sGymLeaderTrainersEye[i].regionMapSectionId;
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].rematchNo = 0;
+ gPokenavStructPtr->trainersEye[gPokenavStructPtr->unkD158].rematchTableIdx = i + 0x38;
+ gPokenavStructPtr->unkD158++;
+ }
+ }
+ }
+
+ gPokenavStructPtr->unk876C = 0;
+ gPokenavStructPtr->unk8770 = 0;
+ gPokenavStructPtr->unk876E = 0;
+ gPokenavStructPtr->unk8772 = gPokenavStructPtr->unkD158 <= 8 ? gPokenavStructPtr->unkD158 - 1 : 7;
+ gPokenavStructPtr->unk8774 = gPokenavStructPtr->unkD158 - 1;
+ gPokenavStructPtr->unk87C9 = gPokenavStructPtr->unk8774 < 8 ? 0 : 1;
+}
+
+void sub_80F6DB8(void)
+{
+ s32 r1 = 0;
+ gPokenavStructPtr->unk8fe9 = r1;
+ sub_80F6E04(0);
+ gPokenavStructPtr->unkD15A = -72;
+ sub_80F2F7C(0);
+ gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk876E;
+}
+
+void sub_80F6E04(u8 a0)
+{
+ u16 r1 = gPokenavStructPtr->trainersEye[gPokenavStructPtr->unk876E].opponentId;
+ u8 r6 = gTrainers[r1].trainerPic;
+ DecompressPicFromTable_2(&gTrainerFrontPicTable[r6], gTrainerFrontPicCoords[r6].coords, 1, gPokenavStructPtr->unk131E4, gPokenavStructPtr->unkD1E4[a0], r6);
+ LZ77UnCompWram(gTrainerFrontPicPaletteTable[r6].data, gPokenavStructPtr->unk0[a0]);
+}
+
+bool8 sub_80F6E9C(void)
+{
+ if (gPokenavStructPtr->unkD15A == 0)
+ {
+ return FALSE;
+ }
+ if ((gPokenavStructPtr->unkD15A += 8) >= 0)
+ {
+ gPokenavStructPtr->unkD15A = 0;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool8 sub_80F6ED4(void)
+{
+ if (gPokenavStructPtr->unkD15A == -72)
+ {
+ return FALSE;
+ }
+ if ((gPokenavStructPtr->unkD15A -= 8) <= -72)
+ {
+ gPokenavStructPtr->unkD15A = -72;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_80F6F10(void)
+{
+ gPokenavStructPtr->unkD15E = 0;
+ gPokenavStructPtr->unkD15F = 0;
+ REG_BLDCNT = BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN;
+ REG_BLDY = 0;
+ REG_WININ = 0x3F3F;
+ REG_WINOUT = 0x1F1F;
+ sub_80F6FB8(0);
+}
+
+void sub_80F6F64(void)
+{
+ if (++gPokenavStructPtr->unkD15E > 8)
+ {
+ gPokenavStructPtr->unkD15E = 0;
+ ++gPokenavStructPtr->unkD15F;
+ if (gPokenavStructPtr->unkD15F & 1)
+ REG_BLDY = 6;
+ else
+ REG_BLDY = 0;
+ }
+}
+
+void sub_80F6FB8(bool8 a0)
+{
+ if (!a0)
+ {
+ REG_WIN0H = -0x1710;
+ REG_WIN0V = 0x888;
+ }
+ else
+ {
+ REG_WIN0H = -0x1710;
+ REG_WIN0V = 0x818;
+ }
+}
+
+void sub_80F6FFC(void)
+{
+ REG_BLDCNT = 0;
+ REG_BLDY = 0;
+}
+
+void sub_80F700C(u8 *arg0, u16 arg1)
+{
+ const struct Trainer *trainer = &gTrainers[gPokenavStructPtr->trainersEye[arg1].opponentId];
+ u8 *ptr = arg0;
+
+ ptr = arg0;
+ if (arg1 < gPokenavStructPtr->unkD158)
+ {
+#if ENGLISH
+ ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]);
+#elif GERMAN
+ ptr = StringCopy(ptr, de_sub_8041024(0, gPokenavStructPtr->trainersEye[arg1].opponentId));
+#endif
+
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
+ ptr[1] = 0x13;
+ ptr[2] = 0x4B;
+ ptr += 3;
+ ptr = StringCopy(ptr, trainer->trainerName);
+ }
+
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
+ ptr[1] = 0x13;
+ ptr[2] = 0x80;
+ ptr[3] = 0xFF;
+}
+
+void sub_80F708C(s8 a0)
+{
+ gPokenavStructPtr->unk876E += a0;
+ if (gPokenavStructPtr->unk876E < 0)
+ {
+ gPokenavStructPtr->unk876E = gPokenavStructPtr->unk8774;
+ }
+ if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774)
+ {
+ gPokenavStructPtr->unk876E = 0;
+ }
+ gPokenavStructPtr->unkBC94 = a0;
+ gPokenavStructPtr->unk87DC = gPokenavStructPtr->unk876E;
+ gPokenavStructPtr->unk87DE = 0;
+}
+
+bool8 sub_80F70FC(void)
+{
+ switch (gPokenavStructPtr->unk87DE)
+ {
+ case 0:
+ if (!sub_80F6ED4())
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 1:
+ sub_80F6E04(0);
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 2:
+ sub_80F2F7C(0);
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 3:
+ sub_80F700C(gPokenavStructPtr->unk8788, gPokenavStructPtr->unk876E);
+ sub_80F43D4(gPokenavStructPtr->unk8788);
+ sub_80F105C();
+ sub_80F0FFC(gPokenavStructPtr->unk876E);
+ gPokenavStructPtr->unk87DE++;
+ break;
+ case 4:
+ LoadTrainerEyesDescriptionLines();
+ gPokenavStructPtr->unkBC95 = 0;
+ gPokenavStructPtr->unk87DE++;
+ // fallthrough
+ case 5:
+ if (gPokenavStructPtr->unkBC95 < 2){
+ sub_80F0D5C();
+ gPokenavStructPtr->unkBC95++;
+ break;
+ }
+ gPokenavStructPtr->unk87DE++;
+ // fallthrough
+ case 6:
+ if (!sub_80F6E9C() && !sub_80F0D5C())
+ gPokenavStructPtr->unk87DE++;
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80F7224(u8 a0)
+{
+ u8 sheen = GetMonData(&gPlayerParty[a0], MON_DATA_SHEEN);
+ gPokenavStructPtr->unk8931[gPokenavStructPtr->unk8fe9] = sheen != 255 ? sheen / 29 : 9;
+}
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index c8506fbcf..e13369c0b 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -138,10 +138,10 @@ static void sub_81371DC(struct Sprite *);
void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback)
{
- gUnknown_02039304 = &gUnknown_083DFEC4->unkD164;
+ gUnknown_02039304 = &gPokenavStructPtr->unkD164;
gUnknown_02039304->pokeblock = pokeblock;
gUnknown_02039304->callback = callback;
- gUnknown_083DFEC4->unkD162 = 2;
+ gPokenavStructPtr->unkD162 = 2;
launch_c3_walk_stairs_and_run_once(sub_8136294);
SetMainCallback2(sub_8136244);
}
@@ -152,7 +152,7 @@ static void sub_8136174(void)
gUnknown_02039304->callback = gUnknown_02039308;
gPokeblockMonID = sub_81370E4(gPokeblockMonID);
gUnknown_02039304->unk56 = gPokeblockMonID < 4 ? 0 : 1;
- gUnknown_083DFEC4->unkD162 = 2;
+ gPokenavStructPtr->unkD162 = 2;
launch_c3_walk_stairs_and_run_once(sub_8136294);
SetMainCallback2(sub_81361E4);
}
@@ -209,7 +209,7 @@ static void sub_8136294(void)
{
case 0:
c1LinkRelatedActive = is_c1_link_related_active();
- gUnknown_083DFEC4->unk6DAC = c1LinkRelatedActive;
+ gPokenavStructPtr->unk6DAC = c1LinkRelatedActive;
if ((bool8)c1LinkRelatedActive == FALSE)
{
gUnknown_02039304->unk55 = 0;
@@ -241,9 +241,9 @@ static void sub_8136294(void)
}
break;
case 6:
- gUnknown_083DFEC4->unk76AA = 0;
- gUnknown_083DFEC4->unk87E0 = NULL;
- gUnknown_083DFEC4->unk030C = 0x20;
+ gPokenavStructPtr->unk76AA = 0;
+ gPokenavStructPtr->unk87E0 = NULL;
+ gPokenavStructPtr->unk030C = 0x20;
gUnknown_02039304->unk50++;
break;
case 7:
@@ -268,11 +268,11 @@ static void sub_8136294(void)
break;
case 11:
gKeyRepeatStartDelay = 20;
- gUnknown_083DFEC4->unk8828 = CalculatePlayerPartyCount();
- gUnknown_083DFEC4->unk9344 = 0;
- gUnknown_083DFEC4->unk8768 = NULL;
+ gPokenavStructPtr->unk8828 = CalculatePlayerPartyCount();
+ gPokenavStructPtr->unk9344 = 0;
+ gPokenavStructPtr->unk8768 = NULL;
sub_80F4BD0();
- gUnknown_083DFEC4->unkD160 = 0;
+ gPokenavStructPtr->unkD160 = 0;
gUnknown_02039304->unk50++;
break;
case 12:
@@ -285,7 +285,7 @@ static void sub_8136294(void)
break;
case 13:
sub_80F2E18(0);
- gUnknown_083DFEC4->unk8768->pos2.y = 0xffd8;
+ gPokenavStructPtr->unk8768->pos2.y = 0xffd8;
gUnknown_02039304->unk50++;
break;
case 14:
@@ -306,7 +306,7 @@ static void sub_8136294(void)
gUnknown_02039304->unk50++;
break;
case 17:
- sub_80F567C(&gUnknown_083DFEC4->unk8ff0, gUnknown_083DFEC4->unk9004);
+ sub_80F567C(gPokenavStructPtr->unk8ff0[0], gPokenavStructPtr->unk9004[0]);
sub_80F5B38();
gUnknown_02039304->unk50++;
break;
@@ -317,7 +317,7 @@ static void sub_8136294(void)
}
break;
case 19:
- sub_80F556C(gUnknown_083DFEC4->unk9004[0]);
+ sub_80F556C(gPokenavStructPtr->unk9004[0]);
gUnknown_02039304->unk50++;
break;
case 20:
@@ -396,7 +396,7 @@ static void sub_8136638(void)
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- if (gUnknown_083DFEC4->unk87DC == gUnknown_083DFEC4->unk87DA - 1)
+ if (gPokenavStructPtr->unk87DC == gPokenavStructPtr->unk87DA - 1)
{
gUnknown_02039304->unk50 = 3;
}
@@ -464,7 +464,7 @@ static void sub_8136808(void)
switch (gUnknown_02039304->unk50)
{
case 0:
- gPokeblockMonID = sub_81370A4(gUnknown_083DFEC4->unk87DC);
+ gPokeblockMonID = sub_81370A4(gPokenavStructPtr->unk87DC);
gUnknown_02039308 = gUnknown_02039304->callback;
gUnknown_0203930C = gUnknown_02039304->pokeblock;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
@@ -485,7 +485,7 @@ static void sub_81368A4(void)
switch (gUnknown_02039304->unk50)
{
case 0:
- if (gUnknown_083DFEC4->unk87DC != gPokeblockMonID)
+ if (gPokenavStructPtr->unk87DC != gPokeblockMonID)
{
sub_80F5060(gUnknown_02039304->unk56);
gUnknown_02039304->unk50++;
@@ -539,7 +539,7 @@ static void sub_81369CC(void)
{
case 0:
gUnknown_02039304->pokemon = &gPlayerParty[0];
- gUnknown_02039304->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx];
+ gUnknown_02039304->pokemon = &gPlayerParty[gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].partyIdx];
move_anim_execute();
gUnknown_02039304->unk50++;
break;
@@ -549,15 +549,15 @@ static void sub_81369CC(void)
break;
case 2:
sub_8136EF0();
- sub_80F567C(gUnknown_02039304->unk5c, gUnknown_083DFEC4->unk9040);
- sub_80F5550(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9040);
+ sub_80F567C(gUnknown_02039304->unk5c, gPokenavStructPtr->unk9004[3]);
+ sub_80F5550(gPokenavStructPtr->unk9004[gPokenavStructPtr->unk8fe9], gPokenavStructPtr->unk9004[3]);
sub_8137138();
gUnknown_02039304->unk50++;
break;
case 3:
if (!sub_80F555C())
{
- sub_80F7224(sub_81370A4(gUnknown_083DFEC4->unk87DC));
+ sub_80F7224(sub_81370A4(gPokenavStructPtr->unk87DC));
sub_80F3D00();
gUnknown_02039304->unk52 = 0;
gUnknown_02039304->unk50++;
@@ -606,7 +606,7 @@ static void sub_8136B44(void)
static void sub_8136BB8(void)
{
- GetMonData(&gPlayerParty[sub_81370A4(gUnknown_083DFEC4->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer);
+ GetMonData(&gPlayerParty[sub_81370A4(gPokenavStructPtr->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer);
StringGetEnd10(gUnknown_02039304->stringBuffer);
StringAppend(gUnknown_02039304->stringBuffer, gOtherText_GetsAPokeBlock);
BasicInitMenuWindow(&gWindowTemplate_81E709C);
@@ -781,7 +781,7 @@ static void sub_8136EF0(void)
{
u16 i;
struct Pokemon *pokemon = gPlayerParty;
- pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx;
+ pokemon += gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].partyIdx;
Pokeblock_GetMonContestStats(pokemon, gUnknown_02039304->unk57);
sub_8136E40(gUnknown_02039304->pokeblock, pokemon);
Pokeblock_GetMonContestStats(pokemon, gUnknown_02039304->unk5c);
@@ -826,7 +826,7 @@ static void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
static bool8 sub_8137058(void)
{
struct Pokemon *pokemon = gPlayerParty;
- pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx;
+ pokemon += gPokenavStructPtr->unk893c[gPokenavStructPtr->unk87DC].partyIdx;
if (GetMonData(pokemon, MON_DATA_SHEEN) == 255)
return TRUE;
return FALSE;