diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_2.c | 2567 | ||||
-rw-r--r-- | src/battle/battle_4.c | 16 | ||||
-rw-r--r-- | src/battle/battle_util.c | 16 | ||||
-rw-r--r-- | src/contest_painting.c | 6 | ||||
-rw-r--r-- | src/contest_painting_effects.c | 791 | ||||
-rw-r--r-- | src/data/battle_tower/level_100_mons.h | 2 | ||||
-rw-r--r-- | src/data/graphics.c | 4 | ||||
-rw-r--r-- | src/data/pokemon/base_stats.h | 861 | ||||
-rw-r--r-- | src/data/region_map/region_map_entries.h | 175 | ||||
-rw-r--r-- | src/data/region_map/region_map_entries_de.h | 175 | ||||
-rw-r--r-- | src/data/region_map_layout.h | 42 | ||||
-rw-r--r-- | src/data/region_map_names_de.h | 79 | ||||
-rw-r--r-- | src/data/region_map_names_en.h | 79 | ||||
-rw-r--r-- | src/landmark.c | 6 | ||||
-rw-r--r-- | src/libs/m4a.c | 1779 | ||||
-rw-r--r-- | src/libs/m4a_2.c | 912 | ||||
-rw-r--r-- | src/libs/m4a_4.c | 545 | ||||
-rw-r--r-- | src/pokedex_area_screen.c | 14 | ||||
-rw-r--r-- | src/pokenav.c | 6466 | ||||
-rw-r--r-- | src/pokenav_after.c | 35 | ||||
-rw-r--r-- | src/pokenav_before.c | 6190 | ||||
-rw-r--r-- | src/region_map.c | 156 | ||||
-rw-r--r-- | src/trainers_eye.c | 263 | ||||
-rw-r--r-- | src/use_pokeblock.c | 48 |
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)®_FIFO_A; + REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (s32)®_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)®_FIFO_A; - REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; - REG_DMA2DAD = (s32)®_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; |